Skip to content
This repository was archived by the owner on May 12, 2021. It is now read-only.

Commit 44d2cb5

Browse files
committed
bug: #5 设置 multiple 为 false,删除文件报错
1 parent 5ec154e commit 44d2cb5

File tree

5 files changed

+63
-16
lines changed

5 files changed

+63
-16
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ export default {
161161
},
162162
```
163163

164+
## 事件
165+
166+
| 事件名称 | 说明 | 回调参数 |
167+
| -------- | ------------------ | ---------------- |
168+
| remove | 当文件被删除时触发 | (file, fileList) |
169+
| success | 文件上传成功时触发 | (file, fileList) |
170+
| error | 上传失败时触发 | (error) |
171+
164172
## 相关链接
165173

166174
- [element-ui upload 组件](https://element.eleme.cn/#/zh-CN/component/upload)

example/App.vue

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
:isCanDelete="true"
88
:isCanDownload="true"
99
:isCanUploadSame="true"
10+
:isShowDeleteConfim="false"
1011
:isShowSize="true"
1112
:isShowTip="true"
12-
:limit="6"
13+
:limit="3"
1314
:multiple="true"
1415
:responseFn="handleResponse"
16+
@remove="handleRemove"
1517
action="https://jsonplaceholder.typicode.com/posts/"
1618
placeholder="上传附件"
1719
v-model="file"
@@ -20,12 +22,16 @@
2022
</template>
2123
<script>
2224
export default {
23-
data() {
25+
data () {
2426
return {
25-
file: []
27+
file: { name: 'test.jpg', url: 'https://www.baidu.com' }
2628
}
2729
},
2830
methods: {
31+
handleRemove (file, fileList) {
32+
// eslint-disable-next-line no-console
33+
console.log(file, fileList)
34+
},
2935
handleResponse (response, file) {
3036
return {
3137
url: URL.createObjectURL(file.raw),

lib/EleUploadFile.vue

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
:before-upload="handleBeforeUpload"
77
:data="data"
88
:drag="false"
9-
:file-list="list"
9+
:file-list="fileList"
1010
:headers="headers"
1111
:limit="limit"
1212
:multiple="multiple"
1313
:name="name"
14+
:on-change="handleChange"
1415
:on-error="handleUploadError"
1516
:on-exceed="handleExceed"
1617
:on-success="handleUploadSuccess"
@@ -50,6 +51,7 @@
5051
:files="list"
5152
:isCanDelete="isCanDelete"
5253
:isCanDownload="isCanDownload"
54+
:isShowDeleteConfim="isShowDeleteConfim"
5355
:isShowSize="isShowSize"
5456
@remove="handleRemove"
5557
/>
@@ -97,6 +99,11 @@ export default {
9799
type: Boolean,
98100
default: true
99101
},
102+
// 是否显示删除确认弹窗
103+
isShowDeleteConfim: {
104+
type: Boolean,
105+
default: true
106+
},
100107
// 是否可上传相同文件
101108
isCanUploadSame: {
102109
type: Boolean,
@@ -138,6 +145,11 @@ export default {
138145
// 同 element-ui upload 组件
139146
limit: Number
140147
},
148+
data () {
149+
return {
150+
fileList: []
151+
}
152+
},
141153
computed: {
142154
// 按钮文本
143155
btnText () {
@@ -152,7 +164,7 @@ export default {
152164
}
153165
},
154166
// 是否显示提示
155-
showTip() {
167+
showTip () {
156168
return this.isShowTip && (this.fileType || this.fileSize)
157169
},
158170
// 列表
@@ -166,7 +178,7 @@ export default {
166178
if (typeof item === 'string') {
167179
item = { name: item, url: item }
168180
}
169-
item.uid = item.uid || new Date() + temp++
181+
item.uid = item.uid || new Date().getTime() + temp++
170182
return item
171183
})
172184
} else {
@@ -175,6 +187,10 @@ export default {
175187
}
176188
},
177189
methods: {
190+
// 文件改变
191+
handleChange (file, fileList) {
192+
this.fileList = fileList
193+
},
178194
// 上传前校检格式和大小
179195
handleBeforeUpload (file) {
180196
// 校检文件类型
@@ -234,17 +250,25 @@ export default {
234250
} else {
235251
this.$emit('input', response)
236252
}
253+
254+
// 上传成功
255+
this.$emit('success', response, this.list)
237256
},
238257
// 删除
239-
handleRemove(index) {
258+
handleRemove (index) {
259+
this.$emit('remove', this.list[index], this.list)
260+
this.fileList.splice(index, 1)
240261
if (this.multiple) {
241262
const data = [...this.list]
242263
data.splice(index, 1)
243264
this.$emit('input', data || [])
244265
} else {
245-
this.$emit('input', {})
266+
this.$emit('input', null)
246267
}
247268
}
269+
},
270+
created () {
271+
this.fileList = this.list
248272
}
249273
}
250274
</script>
@@ -253,4 +277,4 @@ export default {
253277
.ele-upload-file-uploader {
254278
margin-bottom: 5px;
255279
}
256-
</style>
280+
</style>

lib/EleUploadList.vue

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,15 @@ export default {
5151
// 文件列表
5252
files: {
5353
type: Array,
54-
default() {
54+
default () {
5555
return [];
5656
}
5757
},
58+
// 是否显示删除确认弹窗
59+
isShowDeleteConfim: {
60+
type: Boolean,
61+
default: true
62+
},
5863
// 是否禁用
5964
disabled: {
6065
type: Boolean,
@@ -91,7 +96,7 @@ export default {
9196
return size && !isNaN(Number(size)) ? prettyBytes(size) : ''
9297
},
9398
// 上传进度
94-
parsePercentage(val) {
99+
parsePercentage (val) {
95100
return parseInt(val, 10)
96101
},
97102
// 下载文件
@@ -101,10 +106,14 @@ export default {
101106
}
102107
},
103108
// 删除文件
104-
handleDelete(index, file) {
105-
this.$confirm('确认删除该文件吗? ').then(() => {
109+
handleDelete (index, file) {
110+
if (this.isShowDeleteConfim) {
111+
this.$confirm('确认删除该文件吗? ').then(() => {
112+
this.$emit('remove', index, file)
113+
}).catch(() => { })
114+
} else {
106115
this.$emit('remove', index, file)
107-
}).catch(() => {})
116+
}
108117
}
109118
}
110119
}
@@ -136,4 +145,4 @@ export default {
136145
.ele-upload-list__item-content-action .el-link {
137146
margin-right: 10px;
138147
}
139-
</style>
148+
</style>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "vue-ele-upload-file",
33
"description": "对 element-ui upload 组件进一步封装, 使其更简单、易用",
4-
"version": "0.0.3",
4+
"version": "0.0.4",
55
"private": false,
66
"license": "MIT",
77
"scripts": {

0 commit comments

Comments
 (0)