引用avue-form 的代码

<avue-form :option="imgOption" v-model="imgForm"
           :upload-preview="uploadPreview"
           :upload-error="uploadError"
           :upload-delete="uploadDelete"
           :upload-before="uploadBefore"
           :upload-after="uploadAfter"
           @submit="handleSubmit" >
   </avue-form>

定义

imgOption: {
                    labelWidth: 120,            // 去除保存按钮和清空按钮,清空按钮,假如我引用其他组件一起进来,无法清空其他表单的值,遂这我就都删了
                    emptyBtn: false,
                    submitBtn: false,
                    column: [
                        {
                            label: '附件上传',
                            prop: 'imgUrl',                 //支持多个文件上传
                            multiple: true,
                            type: 'upload',
                            loadText: '附件上传中,请稍等',
                            span: 24,
                            propsHttp: {
                                //假如选择了多个附件同时上传需要定义如下data.0 这样上传成功后,回显图片就会调用多次uploadAfter                   // res: 'data'
                                res: 'data.0'
                            },
                            tip: '上传的文件不超过1M',                            // 上传的方法
                            action: '/upload-file'
                        },
                    ]
                },
          imgForm: {              imgUrl: []              //展示上传后信息              // imgUrl:[              //     { "label": "avue@226d5c1a_image.png", "value": "/images/logo-bg.jpg" },              //     {"label": "avue@226d5c1a_video.png", "value": 'https://www.w3school.com.cn/i/movie.ogg'}              // ],          },

上传的一些方法的实现

//删除已经上传的文件
            uploadDelete(column, path) {
                //参考 https://blog.csdn.net/qq_41976264/article/details/107762239
                console.log(column, path);
                let url = path.url;
                if (url) {
                    let splitter = "/file/";
                    let split = url.split(splitter);
                    let element = split[1];
                    let pathUrl = element.split("/");
                    let id = pathUrl[0];
                    let fileName = pathUrl[1];
                    return new Promise((resolve, reject) => {
                        this.$confirm(`是否确认删除名称为${fileName}`, "提示", {
                            confirmButtonText: "确 定",
                            cancelButtonText: "取 消",
                            type: "warning"
                        }).then(() => {
                            // 重点来了这里操作完以后一定一定要resolve出去,因为这样avue会将原来的数据给清除  如果不resolve,那么再添加图片的话  他会把得到的路径与之前的拼接成一个字符串用“,”分割
                            axios.post('/file/delete', {id: id});
                            //返回的是否成功状态,都无法使用,默认会返回成功!!
                            resolve()
                        }).catch(() => {
                            // 这里也一定一定要reject,虽然不搞 看似好像没问题  保险起见还是给写上,毕竟我不想再爬坑了 哈哈哈
                            reject();
                            this.$message({
                                type: 'info',
                                message: '已取消删除'
                            })
                        })
                    })
                }
            },
            uploadBefore(file, done, loading, column) {
                console.log(file, column);
                // 如果你想修改file文件,由于上传的file是只读文件,必须复制新的file才可以修改名字,完后赋值到done函数里,如果不修改的话直接写done()即可
                // var newFile = new File([file], {type: file.type});
                // done(newFile)
                done();
            },
            uploadError(error, column) {
                this.$message.error('上传失败');
                console.log(error, column)
            },
            uploadAfter(res, done, loading, column) {
                // 该位置拼接有问题
                console.log("===============uploadAfter================");          // 后端需直接返回name=“xxxx” url=“xxxx” 才行,可以看avue官网的上传 F12 中看network 就可以看到她的返回格式          // 刚开始我以为可以直接进行 imgUrL 的push  无论怎么使用,都是有问          // 多个文件的上传,在 propsHttp 配置为  res: 'data.0' 就会多次调用uploadAfter方法,进行对图片,文件的回显操作


                done();
                // this.$message.success('上传后的方法')
            },
            //上传后进行点击预览
            uploadPreview(file, column, done) {
                console.log(file, column);
                //默认执行打开方法
                done();
            },
Logo

前往低代码交流专区

更多推荐