vue-element表单内使用上传文件,并和表单其他内容一起上传

2023-11-06

vue-element 上传文件


表单内使用上传文件,并和表单其他内容一起上传


<template>
  <div class="addAppUpdate">
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
      <el-form-item label="版本号" prop="version">
        <el-input v-model="ruleForm.version" style="width: 200px;"></el-input>
      </el-form-item>
      <el-form-item label="更新日志" prop="log">
        <el-input type="textarea" v-model="ruleForm.log" style="width:500px;"></el-input>
      </el-form-item>
      <el-form-item label="上传文件" prop="apk">
        <el-upload ref="upload" class="upload-demo" action="/manager/appupdate/addAppUpdate" :headers="headers"
          :http-request="httpRequest" :before-remove="beforeRemove" :before-upload="beforeUploadFile" :on-exceed="handleExceed"
          multiple :limit="1" :auto-upload="false" :on-change="getFile" :data="ruleForm" :file-list="fileList" name="annexFile"
          style="width: 500px;">
          <el-button size="small" type="primary">点击上传</el-button>
          <div slot="tip" class="el-upload__tip">{{message}}</div>
        </el-upload>
      </el-form-item>

      <el-form-item>
        <el-button type="primary" @click="submitForm('ruleForm')" v-loading.fullscreen.lock="fullscreenLoading">立即创建</el-button>
        <el-button @click="resetForm('ruleForm')">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
  import {
    addAppUpdate
  } from "../../api/api.js"
  export default {
    name: 'AddAppUpdate',
    data() {
      return {
        fullscreenLoading: false,
        //表单
        ruleForm: {
          version: '', //版本号
          log: '' //更新日志
        },
        //上传
        headers: {
          token: getStore('zxdAdmintoken'),
          "content-type": "multipart/form-data"
        },
        message: '请上传apk文件',
        fileList: [], //文件列表
        fd: {}, //用于放数据  FormData类型

        //校验规则
        rules: {
          version: [{
            required: true,
            message: '请输入版本号',
            trigger: 'blur'
          }, ],
          log: [{
            required: true,
            message: '请填写更新日志',
            trigger: 'blur'
          }]
        }
      }
    },
    methods: {
      //上传
      getFile(file, fileList) {
        this.fileList = fileList;
        // console.log(this.fileList)
        const fd = new FormData() // FormData 对象
        this.fd = fd
      },
      //上传前
      beforeUploadFile(file) {
        let extension = file.name.substring(file.name.lastIndexOf('.') + 1);
        console.log(extension)
        if (extension !== 'apk') {
          // this.$message.warning('只能上传后缀是.zip/.rar/.apk的文件'); //控制文件类型
          this.$message.warning('文件类型不对'); //控制文件类型
          return false
        }
      },
      //超限制
      handleExceed(files, fileList) {
        this.$message.warning("目前只能上传一个包")
      },
      //移除
      beforeRemove(file, fileList) {
        let extension = file.name.substring(file.name.lastIndexOf('.') + 1);
        if (extension !== 'apk') {
          return
        }
        return this.$confirm(`确定移除 ${file.name}?`)
      },
      httpRequest(param) {
        const fileObj = param.file // 相当于input里取得的files
        this.fd.append('apk', fileObj) // 文件对象
        console.log("文件包" + this.fd.get('apk'));
      },
      //提交
      submitForm(formName) {
        // let fileArr = this.$refs.upload.uploadFiles;
        // console.log(fileArr)
        this.$refs[formName].validate((valid) => {
          if (valid) {
            if (this.fileList.length <= 0) {
              this.$message.error("至少上传一个包!");
              return;
            }
            this.$refs.upload.submit();
            //换行自动添加为<br/>
            this.ruleForm.log= this.ruleForm.log.replace(/\n/g,"<br/>");
            // console.log(this.ruleForm.log)
            //将表单内其他内容添加进fd
            this.fd.append('version', this.ruleForm.version)
            this.fd.append('log', this.ruleForm.log)
            this.fd.append('type', "0")
            this.fullscreenLoading = true;
            //调用后端接口,提交即可
            addAppUpdate(this.fd).then(data => {
              console.log(data)
              if (data.code == 0) {
                this.fullscreenLoading = false;
                this.$message({
                  message: '上传成功',
                  type: 'success'
                });
                this.fd = {}
                this.fileList = []
                resetForm(formName)
              } else {
                this.$message.error("上传失败");
              }
            })
          } else {
            // console.log('error submit!!');
            return false;
          }
        });
      },
      //重置
      resetForm(formName) {
        this.$refs[formName].resetFields();
        this.$refs.upload.clearFiles()
      },

    }
  }
</script>

页面显示
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue-element表单内使用上传文件,并和表单其他内容一起上传 的相关文章

随机推荐

  • Type cannot use 'try' with exceptions disabled

    cannot use throw with exceptions disabled 在为 DragonBonesCPP refactoring 的 cocos2d x 3 2 demo 增加 Android 编译时 NDK 报了一个编译错误
  • 数据结构刷题训练营1

    开启蓝桥杯备战计划 每日练习算法一题 坚持下去 想必下一年的蓝桥杯将会有你 笔者是在力扣上面进行的刷题 由于是第一次刷题 找到的题目也不咋样 所以 就凑合凑合吧 笔者打算从数据结构开始刷起 毕竟现在刚刚接触到数据结构 在力扣上找到的刷题链接
  • 计算机方面英语文献翻译(学习记录更新中)

    在万方找的英文文献摘要 自己翻译的 1 考虑到时间序列数据的高维度和复杂性给数据挖掘带来的困难以及聚类分析在时间序列数据挖掘领域中的重要性 本文总结了国内外时间序列数据聚类的研究现状 时间序列聚类可以被分为全时间序列聚类和子序列聚类 并且可
  • Python流体动力学共形映射库埃特式流

    流体动力学简述 在物理学和工程学中 流体动力学是流体力学的一个分支学科 它描述了流体 液体和气体的流动 它有几个子学科 包括空气动力学 研究空气和其他运动中的气体 和流体动力学 研究运动中的液体 流体动力学具有广泛的应用 包括计算飞机上的力
  • 携程酒店数据爬取2020.5

    携程酒店数据爬取2020 5 1 开题 目前网上有好多爬取携程网站的教程 大多数通过xpath beautifulsoup 正则来解析网页的源代码 然后我这个菜b贪方便 直接copy源码的xpath paste在xpath helper改改
  • Kaggle手势符号识别项目实战

    项目数据集地址 https www kaggle com datasets ardamavi sign language digits dataset 观察到数据集已经做过预先的整理 十分工整 txt文件中类别标记清晰详细 项目文件如上图所
  • 小程序+单页+需要服务器,小程序单页设计

    小程序单页设计 内容精选 换一换 I O分析以存储块设备为分析对象 分析得出块设备的I O操作次数 I O数据大小 I O队列深度 I O操作时延等性能数据 并关联到造成这些I O性能数据的具体I O操作事件 进程 线程 调用栈 应用层I
  • iOS自动化布局-AutoLayout约束优先级

    约束的优先级 AutoLayout添加的约束中也有优先级 Priority 优先级的数值1 1000 分为两种情况 一种情况是我们经常添加的各种约束 默认值1000 最大值 优先执行 条件允许的话系统会自动满足我们的约束需求 第二种就是固有
  • 学习OpenCV:rotatedRectangleIntersection计算两个旋转矩形的交集面积

    如图所示 计算两个旋转矩形相交重合区域的顶点 最多返回8个顶点 通过contourArea可返回该顶点集合的面积 void DrawPointSet Mat imgInoutput vector
  • 区块链扫盲之私钥、公钥和地址

    公开密钥 public key 简称公钥 私有密钥 private key 简称私钥 是密码学里非对称加密算法的内容 顾名思义 公钥是可以公开的 而私钥则要进行安全保管 私钥是由随机种子生成的 公钥是将私钥通过算法推导出来 由于公钥太长 为
  • python socket编程之tcp协议多客户端连接

    1 socket 介绍 socket 原意插座 插孔 计算机中一般称为套接字 在同一台计算机中的两个程序可以通过文件 管道 队列等方式进行通信 但是在网络中 两台计算机之间的通讯就需要依靠socket进行通信 2 socket之tcp协议
  • 利用Anaconda完成Python环境安装及配置

    1 Anaconda 1 1 配置过程 Anaconda是一个开源的Python和R编程语言的软件包管理器和环境管理器 用于数据科学和机器学习的开发 进入官网https www anaconda com 下载安装包 next gt arge
  • Host is not allowed to connect to this MySQL server

    意思其实就是我们的MySQL不允许远程登录 所以远程登录失败了 解决方法如下 1 在装有MySQL的机器上登录MySQL mysql u root p密码 2 执行use mysql 3 执行update user set host whe
  • matlab神经网络

    Solve an Input Output Fitting problem with a Neural Network Script generated by Neural Fitting app Created 03 Jan 2022 1
  • vue的常用基础知识

    哈喽 今天不加班 回来整理一下以前的旧笔记 给你们分享一波基础知识 1 Vue模板的使用 div msg vue中的data又属性值 1 2 4 7 5 isShow 真好看 真丑 parseInt 10 2345 div 里面可以写任意j
  • 数据库操作入门速查(1)——Access数据库简单访问

    引用 using System Data OleDb 编写代码 string s Provider Microsoft Jet OLEDB 4 0 Data Source D student zws20151389047 EX1 Datab
  • 启动mongoDB服务

    打开计算机服务 查看mongoDB服务是否已经启动 如果没有自动启动 右键手动启动一下 即可 安装过程中 经常出现一个问题 服务无法自动创建启动 去bin目录下启动mongod exe 提示丢失文件 需要下载安装 去微软官网下载安装 Vis
  • LeetCode--39.组合总和、40组合总和II

    LeetCode 39 组合总和 40组合总和II做题笔记 39 组合总和 题目描述 解题思路 代码 java 40 组合总和II 题目描述 解题思路 代码 java 39 组合总和 题目描述 给定一个无重复元素的数组 candidates
  • 关于TP5400锂电池充放电一体模块 电感“尖叫”(升压Boost电路中 电感有可听见的高频振荡的问题探索与尝试改善)

    TP5400锂电池充放电一体模块电感 尖叫 前言 电感高频振荡人耳可听问题 1 怀疑是电感问题 2 芯片升压功能本身振荡频率低 3 芯片坏了 4 选用电感有问题 猜想 验证 结论 前言 最近一个项目中用到了锂电池充放电电路 之后在 立创开源
  • vue-element表单内使用上传文件,并和表单其他内容一起上传

    vue element 上传文件 表单内使用上传文件 并和表单其他内容一起上传