vue.js+element-ui的基础表单

遇到原生的html小型单页应用时,是脱离了vue框架,而我们又想使用vue的语法和element的组件加快我们的开发速度,这个时候就需要引用他们的js了。技术栈即html+vue.js+element-ui。而使用它们的方法也很简单,引入对应的js和css文件即可。下面用一个小例子展示下。

 普普通通的表单页面:

 html代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>表单页面</title>
  <!-- 引入样式 --> 
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui/lib/theme-chalk/index.css">

  <!-- 引入组件库 -->
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/element-ui/lib/index.js"></script>  
</head>
<style>
    #app {
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 0 20px;
    margin-top: 10vh;
    }
    html{
    width: 100%;
    height: 100%;
    background: #f0faff;
    }
    .el-form {
    max-width: 600px;
    width: 100%;
    box-shadow: 1px 1px 8px #dedede;
    padding: 30px;
    border-radius: 10px;
    background: #fff;
    }

    .el-row {
    margin-bottom: 20px;
    }

    /* .el-button {
    width: 100%;
    } */
</style>
<body>
  <div id="app">
    <el-form ref="form" :model="formData" :rules="formRules" label-width="80px">
      <el-row>
        <h3>业务数据导入终端:</h3>
      </el-row>
      <el-row>
        <el-form-item label="邮箱" prop="email">
        <el-input placeholder="请输入接收通知的邮箱" v-model="formData.email"></el-input>
        </el-form-item>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="IP地址" prop="ip">
            <el-input v-model="formData.ip"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="端口" prop="port">
            <el-input v-model="formData.port"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="账号" prop="username">
            <el-input v-model="formData.username"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="密码" prop="password">
            <el-input v-model="formData.password" type="password"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="数据库" prop="database">
            <el-input v-model="formData.database"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="表名" prop="table">
            <el-input v-model="formData.table"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <el-form-item label="上传文件">
            <el-upload
              class="upload-demo"
              ref="upload"
              :action="uploadUrl"
              :before-upload="beforeUpload"
              accept=".xlsx,.xls"
              :limit="1"
              :auto-upload="false">
              <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
              <div slot="tip" class="el-upload__tip">只能上传excel文件</div>
            </el-upload>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24" style="text-align: center; margin-top: 20px;">
          <el-button type="primary" @click="submitForm" :disabled="disabled">{{buttonText }}</el-button>
          <el-button type="danger" @click="clear">清除缓存</el-button>
        </el-col>
      </el-row>
    </el-form>
  </div>

  <script>
    new Vue({
      el: '#app',
      data() {
        return {
          timer:0,
          limitTime: 1 * 60, // 限制时间为10分钟
          disabled:false,
          formRules:{
                email:[
                  { required: true, message: '请输入联系邮箱', trigger: 'blur' }
                ],
                ip: [
                    { required: true, message: '请输入ip', trigger: 'blur' }
                ],
                port: [
                    { required: true, message: '请输入端口', trigger: 'blur' }
                ],
                username: [
                    { required: true, message: '请输入账号', trigger: 'blur' }
                ],
                password: [
                    { required: true, message: '请输入密码', trigger: 'blur' }
                ],
                database: [
                    { required: true, message: '请输入数据库', trigger: 'blur' }
                ],
                table: [
                    { required: true, message: '请输入表名', trigger: 'blur' }
                ],
          },
          formData: {
            email:'',
            ip: '',
            port: '',
            username: '',
            password: '',
            database: '',
            table: '',
          },
          uploadUrl: '/upload'  // 文件上传的接口地址
        };
      },
      mounted(){
        var obj = localStorage.getItem("formData")||"";
        var timer = localStorage.getItem("disabled")||"";
        if(timer){  //定时还没结束,重置
          this.disabled = true;
          this.timer = this.limitTime;
          const countdown = setInterval(() => {
              this.timer--;
              if (this.timer <= 0) {
                localStorage.removeItem("disabled");
                clearInterval(countdown);
                this.disabled = false;
              }
          }, 1000);
        }

        if(obj){
          this.formData = JSON.parse(obj);
        }
      },
      computed: {
        buttonText() {
          if (this.disabled) {
            const minutes = Math.floor(this.timer / 60);
            const seconds = this.timer % 60;
            return `禁用中 (${minutes}:${String(seconds).padStart(2, '0')})`;
          } else {
            return '提交';
          }
        },
      },
      methods: {
        beforeUpload(file) {
          // 上传文件之前的钩子函数,可用于校验文件类型等
          const isExcel = ((file.type === 'application/vnd.ms-excel')||(file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'));
          return isExcel;
        },
        clear(){
          this.$confirm('该操作会清除本地保存的数据信息, 是否继续?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          localStorage.clear();
          this.$message({
            type: 'success',
            message: '清除成功'
          });
          setTimeout(()=>{window.location.reload();},1000)
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          });          
        });
        },
        submitForm() {
            this.$refs.form.validate(valid => {
                if (valid) {
                    // 提交表单的函数,将表单数据和文件一起发送给后端
                    const formData = new FormData();
                    formData.append('email', this.formData.email);
                    formData.append('ip', this.formData.ip);
                    formData.append('port', this.formData.port);
                    formData.append('access', this.formData.username);
                    formData.append('password', this.formData.password);
                    formData.append('dataName', this.formData.database);
                    formData.append('tableName', this.formData.table);
                    console.log(this.$refs.upload.uploadFiles[0]);
                    if(this.$refs.upload.uploadFiles[0]&&this.beforeUpload(this.$refs.upload.uploadFiles[0].raw)){
                        const file = this.$refs.upload.uploadFiles[0].raw;
                        formData.append('file', file);
                    }else{
                        this.$message.error('请上传excel文件');
                        return;
                    }
                    
                     localStorage.setItem("formData",JSON.stringify(this.formData));
                     this.disabled = true;
                     localStorage.setItem("disabled",this.disabled)
                     this.timer = this.limitTime;
                     const countdown = setInterval(() => {
                      this.timer--;
                      if (this.timer <= 0) {
                        localStorage.removeItem("disabled");
                        clearInterval(countdown);
                        this.disabled = false;
                      }
                    }, 1000);
                      
                    // 发送表单数据和文件给后端
                    fetch('http://localhost/from/uploadExcel', {
                        method: 'POST',
                        body: formData
                    })
                        .then(response => response.json())
                        .then(data => {
                        console.log('提交成功', data);
                          if(data.code==200){
                            this.$message({
                              message: data.msg,
                              type: 'success'
                            });
                          }else{
                            this.$message({
                              message: data.msg,
                              type: 'warning'
                            });
                          }
                        // 处理后端返回的数据
                        })
                        .catch(error => {
                        console.error('提交失败', error);
                        // 处理提交失败的情况
                        });
                } else {
                this.$message.error('请将表单补充完整');
                }
            });
        }
      }
    });
  </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

博世力士乐发布在线配置液压系统3D CAD目录

博世力士乐自1795从美因河畔洛尔的一个铸铁铸造厂到20世纪50年代进入液压市场&#xff0c;2001年&#xff0c;曼内斯曼力士乐与博世自动化的合并&#xff0c;推动了驱动与控制解决方案的所有相关技术无缝集成的新水平。如今博世力士乐独特的行业专业知识已成为量身定制解决方案…

手上积累了一些企业目录,但是没有电话,在企XX天X查也没找到咋办?如何快速精准批量查询其他平台上查不到的企业电话?

在B端业务场景中&#xff0c;长期需要进行拓客。有时候是企业提供客户的联系方式&#xff0c;有时候是销售利用自己的人脉资源&#xff0c;对于资源不多的销售就需要查找到目标客户的联系方式。长期来说&#xff0c;销售都需要进行拓客&#xff0c;自己通过社交&#xff0c;网络…

下载 macOS 系统安装程序的方法

阅读信息&#xff1a; 版本&#xff1a;0.4.20231021 难度&#xff1a;1/10 到 4/10 阅读时间&#xff1a;5 分钟 适合操作系统&#xff1a;10.13, 10.14, 10.15, 11.x, 12.x&#xff0c;13.x, 14 更新2023-10-21 添加Mist的介绍支持版本的更新&#xff0c;13.x&#xff0…

Xilinx FPGA 远程升级时bin和bit文件使用注意

以Spartan-6 ISE开发环境为例。 ISE开发环境支持生成bit和bin格式的程序文件&#xff0c;可以在生成选项进行配置&#xff1a; 把生成的bit文件和bin文件进行二进制比较&#xff0c;发现bit比bin文件头部多了一些内容&#xff08;头部信息&#xff09;&#xff0c;剩余部分完…

web前端笔记+表单练习题+五彩导航栏练习题

web前端笔记 1-骨架快捷方式!enter<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>骨架部分</titl…

mysql 事务基本介绍

目录 命令小结 一 MySQL事务的概念 &#xff08;一&#xff09;事务介绍 &#xff08;二&#xff09;事务特点 &#xff08;三&#xff09;事务的ACID特点 1&#xff0c;原子性 1.1 原子性具体形容 1.2 原子性案例 2 &#xff0c;一致性 2.1一致性具体介绍 2.2…

Cubemx串口配置

1.时钟 2.引脚配置 3.重写printf代码 /* USER CODE BEGIN 1 */ int __io_putchar(int ch){HAL_UART_Transmit(&huart1,(uint8_t *) ch, 1,1000);return ch; } /* USER CODE END 1 */

JavaEE 初阶篇-深入了解进程与线程(常见的面试题:进程与线程的区别)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 进程概述 2.0 线程概述 2.1 多线程概述 3.0 常见的面试题&#xff1a;谈谈进程与线程的区别 4.0 Java 实现多线程的常见方法 4.1 实现多线程方法 - 继承 Thread 类…

含“AI”量上涨,智能模组SC208系列助力智慧零售全场景高质发展

AI正重塑智慧零售产业&#xff0c;加速零售在采购、生产、供应链、销售、服务等方面改善运营效率和用户体验。零售行业经历了从线下到线上再到全渠道融合发展过程&#xff0c;“提质、降本、增效、高体验”是亘古不变的商业化与智能化方向。含“AI”量逐渐上涨的智慧零售正经历…

【Pt】新建项目时的设置

新建项目时需要在如下界面做一些设置。 一、模板与文件 模板通常选择“PBR - Metallic Roughness Alpha-blend” 文件可以选择fbx&#xff0c;abc&#xff0c;obj等格式的三维模型文件 二、项目设置 2.1 文件分辨率 指的是在软件中的预览效果&#xff0c;分辨率越高预览效果…

RUST egui体验

egui官方提供了web版的demo&#xff0c;效果还是很不错的&#xff0c;就是用的时候有点一头雾水&#xff0c;没有找到明确的指导怎么把这些组件插入到自己的application或者web。花了一天时间撸了一遍流程&#xff0c;记录一下&#xff0c;说不定以后能用到呢 >_< efram…

Redis学习二--常见问题及处理

基本概念 Redis基本概念数据结构 机制 持久化机制&#xff1a; RDB(内存快照)&#xff1a;某一时刻的内存快照以二进制的方式写入磁盘&#xff0c;可以手动触发和自动触发。 优点&#xff1a;生成文件小&#xff0c;恢复速度快&#xff0c;适用于灾难恢复。 缺点&#xff1a…

如何与施耐德Schneider建立EDI连接?

EDI基础知识 何为EDI&#xff1f;是一个软件、系统还是一种流程呢&#xff1f;准确来说&#xff0c;EDI全称Electronic Data Interchange&#xff0c;中文名称是电子数据交换&#xff0c;也被称为“无纸化贸易”。EDI是&#xff1a; 标准化的数据格式连接业务系统间的数据桥梁…

Verilog刷题笔记40

题目&#xff1a; For the following Karnaugh map, give the circuit implementation using one 4-to-1 multiplexer and as many 2-to-1 multiplexers as required, but using as few as possible. You are not allowed to use any other logic gate and you must use a and …

vite脚手架生成vue项目及其配置

认识脚手架 脚手架就是为了快速生成可复用代码的工具&#xff0c;帮你配置好开发过程中要用到的工具和环境&#xff0c;更快更方便地做开发写业务 vite和cli脚手架区别 可参考博主文章&#xff1a; Vue脚手架&#xff08;cli和vite详解&#xff09;_vite和vuecli-CSDN博客 …

JVM的知识

什么是JVM 1.JVM&#xff1a; JVM其实就是运行在 操作系统之上的一个特殊的软件。 2.JVM的内部结构&#xff1a; &#xff08;1&#xff09;因为栈会将执行的程序弹出栈。 &#xff08;2&#xff09;垃圾99%的都是在堆和方法区中产生的。 类加载器&#xff1a;加载class文件。…

花生壳 | ubuntu安装和卸载花生壳

一、到花生壳官网下载linux版本的花生壳 一般下载到Downlaods文件夹 进入文件夹 dpkg -i phddns_5_1_amd64.deb #安装花生壳 dpkg -r phddns #卸载花生壳 登录花生壳管理网站 http://b.oray.com 在Ubuntu中输入命令查看sn码&#xff0c;默认密码为admin phddns status …

年龄大了转嵌入式有机会吗?

有老铁说&#xff0c;我28了&#xff0c;转嵌入式还来得及吗&#xff1f; 其实这个是因人而异的&#xff0c;没有固定说超过多少岁&#xff0c;就不能转了。 我一般不太建议30及以上的转行&#xff0c;第一是30岁才从开始做技术&#xff0c;感觉意义不大。第二是难度大&#xf…

淡旺季酒店价格波动太大,住宿费用怎么管?

受地理位置、季节等因素的影响&#xff0c;部分城市不同季节的酒店价格浮动较大。一线还是二线城市&#xff1f;是淡季还是旺季&#xff1f;价格差距之间可以说是天差地别。 在淡季出差时&#xff0c;按照旺季的标准会导致成本过高&#xff0c;造成资源的浪费。而在旺季出差时&…

python+requests接口自动化测试实战

环境说明&#xff1a; 1.WIN 7, 64位 2.Python3.4.3 &#xff08;pip-8.1.2&#xff09; 3.Requests —>pip install requests 4.Unittest —>unittest 框架是python自带的单元测试框架&#xff0c;python2.1及其以后的版本已将unittest作为一个标准块放入python开发包中…