Element+vue.js 实现文件模板下载,和Upload 上传文件带参数

一开始自己也是第一次用Element+vue.js 做上传文件功能,走了点弯路。经过功能实现后整合了一下,给需要的朋友们参考一下。

功能页面如下:

下面是此功能的完整代码:

HTML:样式由于是文件引用,这里没有给,亲们自己有自己喜欢的CSS

 1 <div id="uploadFile">
 2 
 3     <input type="hidden" id="hidSid" value="@ViewBag.sid" />
 4 
 5     <div>
 6 
 7         <span style="color:red">*</span><span class="w60">参数</span>
 8     </div>
 9 
10     <div style="margin-left:3px;">
11         <el-input v-cloak class="w160" v-model="searchData.parameter"></el-input>
12     </div>
13 
14     <div class="inline-block" style="line-height: 38px;">
15         <el-upload class="upload-demo"
16                    style="float:left;"
17                    v-bind:action="uploadPath"
18                    v-bind:auto-upload="true"
19                    v-bind:before-upload="beforeUpload"
20                    v-bind:on-success="uploadSuccess"
21                    v-bind:on-error="uploadFail"
22                    v-bind:data="paramsData"
23                    v-bind:limit="1"
24                    v-bind:show-file-list="false"
25                    v-bind:file-list="fileList">
26 
27             <el-button v-cloak style="width:160px;" type="warning">上传文件</el-button>
28         </el-upload>
29 
30         <el-button type="text" style="margin-left:20px;padding-top:18px;" v-on:click="downloadTemplate">文件模板下载</el-button>
31     </div>
32 
33 </div>

解释说明:

action   必选参数,上传的地址 string

auto-upload     是否在选取文件后立即进行上传 boolean

before-upload     上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传
on-success    文件上传成功时的钩子 function(response, file, fileList)
on-error      文件上传失败时的钩子 function(err, file, fileList)
data      上传时附带的额外参数 object
limit           最大允许上传个数 number
show-file-list   是否显示已上传文件列表 boolean
file-list         上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}]

Script:这里用的是vue.js

 1 var vueIncomePay = new Vue({
 2     el: '#uploadFile',
 3     data: {
 4         sid: document.getElementById('hidSid').value,
 5         //上传Excel
 6         uploadPath: '/FM/Account/UploadBathCheck?sid=' + document.getElementById('hidSid').value,
 7         //上传文件格式
 8         fileTypeList: ['xls', 'xlsx'],
 9         //上传文件大小 2M
10         fileSize: 2,
11         fileList: [],
12         },
13          searchData: {
14             IsDetail: false,
15             //参数
16             parameter:'',
17             }
18         },
19      methods: {
20 
21   beforeUpload: function (file) {
22             var __self = this;
23             var result = true;
24             
25             //参数不能为空验证
26             if (__self.searchData.parameter == "") {
27                 __self.$message({ message: '请输入参数!', type: 'warning' });
28                 return false;
29             }
30             var type = file.name.substring(file.name.indexOf('.') + 1, file.name.length).toLowerCase();
31             var isExcel = __self.fileTypeList.indexOf(type) != -1;
32             var isLtSize = file.size / 1024 / 1024 < __self.fileSize;
33 
34             if (!isExcel) {
35                 __self.$message.error('上传文件只能是 ' + __self.fileTypeList.join(',') + ' 格式');
36             }
37             if (!isLtSize) {
38                 __self.$message.error('上传文件大小不能超过 ' + __self.fileSize + 'M');
39             }
40             result = isExcel && isLtSize;
41             __self.reMsg = '';
42             __self.errorList = [];
43             if (result) {
44                 __self.loading = __self.$loading({
45                     lock: true,
46                     text: '导入数据中...',
47                     spinner: 'el-icon-loading',
48                     background: 'rgba(0, 0, 0, 0.7)'
49                 });
50             }
51             return result;
52         },
53 
54         uploadSuccess: function (data, file, fileList) {
55             var __self = this;
56             __self.resultMsg = '';
57             __self.loading.close();
58             if (data == null) {
59                 __self.$message.error('导入失败');
60                 return;
61             } else {
62                 console.log(JSON.stringify(data));
63                 __self.fileList = [];
64                 if (data.isSucc) {
65                     __self.$message.success(data.message);
66                 } else {
67                     __self.$message.error(data.message);
68                 }
69                 console.log(__self.errorList);
70             }
71         },
72 
73         uploadFail: function (err) {
74             this.$message.error('导入失败');
75             console.log(JSON.stringify(err));
76             return;
77         },
78          },
79 
80   //被带入到后台的参数
81   computed: {
82         paramsData: function () {
83             var __self = this;
84             var params = {
85                 parameter: __self.searchData.parameter,
86             };
87             return params;
88         }
89     }

至于后台代码,本人是MVC。每个人用的都不一样,方法代码我就不贴了

如果有什么不明白的可以找我

点击选择了上传的文件才验证非空,这是一个不好的体验,有哪位大佬有更好的办法,还请不吝赐教,在此谢过!

posted @ 2020-09-25 16:16  是依米呀  阅读(1922)  评论(1编辑  收藏  举报