1 官方文档

  文档

 

2 说明

  这个组件提供了一种默认的上传模式,点击图片上传的时候就自动把图片发送到服务端,而不是在提交表单的时候上传。

  这钟模式不够灵活,也可以设置不自动上传到服务器,自己提交表单的时候上传。下面采取的就是这种方式。

 

3 新增表单时上传

3.1 form表单及相关代码

  点击新增按钮,打开新增窗口

add(){
             this.dialogTitle = '新增'
             this.tableForm = {}
             this.dialogAddVisible = true
             this.srcList = []
        },

   新增窗口表单

<el-dialog :title="dialogTitle"  width="60%" @closed="closedAddOrEdit">
            <el-form :model="tableForm" ref="tableForm" label-width="120px" >
                
                <el-form-item label="金额" prop="money" >
                    <el-input v-model="tableForm.money" style="width:90%" type="number"></el-input>
                </el-form-item>
                <el-form-item label="备注说明" prop="remark" >
                    <el-input v-model="tableForm.remark" style="width:90%" ></el-input>
                </el-form-item>

                <el-form-item label="活动图片">
                    <el-upload
                        ref='upload'
                        action=""
                        :auto-upload="false"
                        accept="image/jpg,image/jpeg,image/png"
                        :on-change="getImageFile"
                        :on-remove="handlePicRemove"
                   :file-list="srcList"
                        list-type="picture-card"
                        :limit="1"
                        >
                        <i class="el-icon-plus"></i>
                        <div slot="tip" class="el-upload__tip">只能上传1张图片</div>
                    </el-upload>
                </el-form-item>

            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button type="primary"  @click="saveForm">确 定</el-button>
                <el-button @click="reset">取 消</el-button>
            </div>
        </el-dialog>

   数据

data () {
    return {
    tableForm:{},  // 存储新增编辑数据
    srcList:[], // 存储图片文件对象集合:包含名字,地址,图片数据等信息
  }
}        

   方法

methods(){

    // 图片状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
        getImageFile(file, fileList) {
            this.srcList = fileList
        },
    
        //图片移除
        handlePicRemove(file, fileList) {
            this.srcList = fileList
        },

      // 保存新增表单方法
    saveForm(){// 准备参数
                    let formData = new FormData();
                    formData.append('money',this.tableForm.money)
                    formData.append('remark',this.tableForm.remark)
                    this.srcList.forEach(item=>{
                        formData.append('files',item.raw)  图片数据集合,后台用MultipartFile接收
                    })
                    baseWorkApi.addOrEditCarManage(formData,idEdit).then((res) => {
                        let result = res.data
                        let msg = result.msg
                        if(result.code==200){
                            this.getList('int')
                            this.dialogAddVisible = false
                            this.tableForm = {}
                            this.$message({
                                message: msg,
                                type: 'success'
                            })
                        } else {
                            this.$message({
                                showClose: true,
                                message: msg,
                                type: 'error'
                            });
                        }
                    }).catch((error) => {
                        console.log(error)
                    })
                    
                } else {
                return false;
                }
            })
        },
}

   发送请求到后台

addOrEditCarManage(form,isEdit){
return new Promise((resolve, reject) => {
        axios.post(url,form).then((response) => {
            resolve(response)
        }).catch((error) => {
            reject(error)
        })
    }
    
  },

 

3.2 <el-upload>的属性简介

action=""和:auto-upload="false"  不让它自动上传:
accept 上传文件类型
list-type  文件列表的类型
limit 文件数量限制
file-list 上传的文件列表
on-change  图片状态发生变化时触发
on-remove 移除图片时触发

 

3.3 提交表单

  发送请求时要采用form表单:let formData = new FormData();

  参数使用FormData,浏览器会自动解析,采用form表单的发送发送请求

 

3.4 后台接收

files接收文件集合
PublicCarGasRecordAddVo 对象的参数和表单参数一一对应,接收其它表单参数
@Log(title = "公车使用管理-加油记录管理-添加")
    @ResponseBody
    @PostMapping("/add")
    public AjaxResult add( @RequestParam("files") List<MultipartFile> files, PublicCarGasRecordAddVo vo) throws Exception
    {
        OrgEmployee orgemployeeOnJwt = MyJwtUtils.getOrgemployeeOnJwt();
        LiveUserWeixin liveUserByUserFlagId = MyJwtUtils.getLiveUserByUserFlagId(orgemployeeOnJwt.getEmpid() + "");
        if(liveUserByUserFlagId != null){
            vo.setOperateOpenid(liveUserByUserFlagId.getOpenid());
        }

        return publiccargasrecordmanagerservice.addOnHt(vo,orgemployeeOnJwt.getEmpid() + "",orgemployeeOnJwt.getEmpname(),files);
    }

 

4 编辑

4.1 form表单及相关代码

  点击编辑按钮,打开编辑窗口,并且回显表单

edit(row){
             this.dialogTitle = '编辑'
             let {...tableForm} = row
             this.tableForm = tableForm
             this.dialogAddVisible = true
        // 图片回显:
        this.srcList = [] // 初始化图片文件列表为[]
        // billImageUrlList后台传来的文件路径集合,复制给文件列表
        row.billImageUrlList.forEach(e => { 
          let arr = { url: e } 
          this.srcList.push(arr) }
        ) 
},

   编辑窗口表单,和新增一样

<el-dialog :title="dialogTitle"  width="60%" @closed="closedAddOrEdit">
            <el-form :model="tableForm" ref="tableForm" label-width="120px" >
                
                <el-form-item label="金额" prop="money" >
                    <el-input v-model="tableForm.money" style="width:90%" type="number"></el-input>
                </el-form-item>
                <el-form-item label="备注说明" prop="remark" >
                    <el-input v-model="tableForm.remark" style="width:90%" ></el-input>
                </el-form-item>

                <el-form-item label="活动图片">
                    <el-upload
                        ref='upload'
                        action=""
                        :auto-upload="false"
                        accept="image/jpg,image/jpeg,image/png"
                        :on-change="getImageFile"
                        :on-remove="handlePicRemove"
                   :file-list="srcList"
                        list-type="picture-card"
                        :limit="1"
                        >
                        <i class="el-icon-plus"></i>
                        <div slot="tip" class="el-upload__tip">只能上传1张图片</div>
                    </el-upload>
                </el-form-item>

            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button type="primary"  @click="saveForm">确 定</el-button>
                <el-button @click="reset">取 消</el-button>
            </div>
        </el-dialog>

   数据,和新增一样

data () {
    return {
    tableForm:{},  // 存储新增编辑数据
    srcList:[], // 存储图片文件对象集合:包含名字,地址,图片数据等信息
  }
}        

   方法,和新增一样

methods(){

    // 图片状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
        getImageFile(file, fileList) {
            this.srcList = fileList
        },
    
        //图片移除
        handlePicRemove(file, fileList) {
            this.srcList = fileList
        },

     

   

  保存表单,和新增略有不同,

saveForm(){
            // 表单校验
            this.$refs['tableForm'].validate((valid) => {
                if (valid) { // 校验通过
                    var idEdit = false // 标识是否是编辑
                    if(this.tableForm.recordid){
                        idEdit = true
                    } 
               
                    // 准备参数
                    let formData = new FormData();
                    formData.append('money',this.tableForm.money)
                    formData.append('remark',this.tableForm.remark)
                  
                    this.srcList.forEach(item=>{
                        if(item.raw){
                            formData.append('files',item.raw) // 新的图片数据,用MultipartFile集合接收
                        }else{
                            formData.append('oldimgList',item.url) //旧的图片路径集合,后台用字符串集合接收
                        }
                    })
                    baseWorkApi.addOrEditCarManage(formData,idEdit).then((res) => {
                        let result = res.data
                        let msg = result.msg
                        if(result.code==200){
                            this.getList('int')
                            this.dialogAddVisible = false
                            this.tableForm = {}
                            this.$message({
                                message: msg,
                                type: 'success'
                            })
                        } else {
                            this.$message({
                                showClose: true,
                                message: msg,
                                type: 'error'
                            });
                        }
                    }).catch((error) => {
                        console.log(error)
                    })
                    
                } else {
                return false;
                }
            })
        },

 

发送请求到后台

addOrEditCarManage(form,isEdit){
return new Promise((resolve, reject) => {
        axios.post(url,form).then((response) => {
            resolve(response)
        }).catch((error) => {
            reject(error)
        })
    }
    
  },