diff --git a/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue b/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue
index 5e32267..b089b34 100644
--- a/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue
+++ b/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue
@@ -10,23 +10,46 @@
list-type="picture-card" :class="{'hideUploadDiv': uploadBtnHidden}"
:limit="field.options.limit" :on-exceed="handlePictureExceed" :on-preview="handlePicturePreview"
:before-upload="beforePictureUpload"
- :on-success="handlePictureUpload" :on-error="handleUploadError"
- :before-remove="handleBeforeRemove" :on-remove="handlePictureRemove">
+ :on-preview="handlePictureCardPreview"
+ :on-success="handlePictureUpload" :on-error="handleUploadError" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{field.options.uploadTip}}
-
-
-
-
-
-
@@ -88,12 +111,13 @@
fileListBeforeRemove: [], //删除前的文件列表
uploadBtnHidden: false,
- previewUrl: '',
- showPreviewDialogFlag: false,
+ previewIndex: 1, // 初始预览图像索引
}
},
computed: {
-
+ previewList() {
+ return this.fileList.map(el => el.url);
+ }
},
beforeCreate() {
/* 这里不能访问方法和属性!! */
@@ -207,7 +231,7 @@
}
},
- updateFieldModelAndEmitDataChangeForRemove(file, fileList) {
+ updateFieldModelAndEmitDataChangeForRemove(file) {
let oldValue = deepClone(this.fieldModel)
let foundFileIdx = -1
this.fileListBeforeRemove.map((fi, idx) => { /* 跟element-ui不同,element-plus删除文件时this.fileList数组对应元素已被删除!! */
@@ -223,14 +247,17 @@
this.emitFieldDataChange(this.fieldModel, oldValue)
},
- handleBeforeRemove(file, fileList) {
+ handleBeforeRemove(fileList) {
/* 保留删除之前的文件列表!! */
this.fileListBeforeRemove = deepClone(fileList)
},
- handlePictureRemove(file, fileList) {
- this.updateFieldModelAndEmitDataChangeForRemove(file, fileList)
- this.fileList = deepClone(fileList) //this.fileList = fileList
+ handlePictureRemove(file) {
+ this.handleBeforeRemove(this.fileList) // 由于自定义了 #file slot,需要手动调用 handleBeforeRemove,并移除 @before-remove 和 @remove
+ this.fileList.splice(this.fileList.indexOf(file), 1) // 删除所点击的文件
+ this.updateFieldModelAndEmitDataChangeForRemove(file)
+ // this.fileList = deepClone(fileList // 由于是在自身进行的操作,故不需要重新赋值
+ let fileList = deepClone(this.fileList); // 进行深拷贝,避免用户自定义函数对 fileList 进行修改时,影响组件内的数据
this.uploadBtnHidden = fileList.length >= this.field.options.limit
if (!!this.field.options.onFileRemove) {
@@ -251,6 +278,13 @@
})
}
},
+
+ handlePictureCardPreview({ url }) {
+ // 设置图片索引为当前点击的图片
+ this.previewIndex = this.previewList.indexOf(url)
+ // 模拟点击 组件下的 img 标签(点击事件被绑定在的每张 img 上)
+ this.$refs['imageRef'].$el.children[0].click()
+ }
}
}
@@ -287,3 +321,5 @@
}
+
+
diff --git a/src/icons/svg/el/check.svg b/src/icons/svg/el/check.svg
new file mode 100644
index 0000000..8d0f0db
--- /dev/null
+++ b/src/icons/svg/el/check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/el/zoom-in.svg b/src/icons/svg/el/zoom-in.svg
new file mode 100644
index 0000000..b30daa5
--- /dev/null
+++ b/src/icons/svg/el/zoom-in.svg
@@ -0,0 +1 @@
+
\ No newline at end of file