修复图片上传组件中预览点击无效BUG,并使用el-image进行显示

master
xiaoxiaoyang 2022-07-30 11:32:49 +08:00
parent 42602096a3
commit 54191df33c
1 changed files with 55 additions and 19 deletions

View File

@ -10,23 +10,46 @@
list-type="picture-card" :class="{'hideUploadDiv': uploadBtnHidden}" list-type="picture-card" :class="{'hideUploadDiv': uploadBtnHidden}"
:limit="field.options.limit" :on-exceed="handlePictureExceed" :limit="field.options.limit" :on-exceed="handlePictureExceed"
:before-upload="beforePictureUpload" :before-upload="beforePictureUpload"
:on-success="handlePictureUpload" :on-error="handleUploadError" :on-preview="handlePictureCardPreview"
:before-remove="handleBeforeRemove" :on-remove="handlePictureRemove"> :on-success="handlePictureUpload" :on-error="handleUploadError" >
<template #file="{ file }">
<el-image
ref="imageRef"
style="width: 100%; height: 100%"
:src="file.url"
:preview-src-list="previewList"
:initial-index="previewIndex"
fit="cover"
preview-teleported
/>
<!-- 上传成功状态 -->
<label class="el-upload-list__item-status-label">
<i class="el-icon--upload-success" style="color: #FFF"><svg-icon class="" icon-class="el-check" /></i>
</label>
<!-- 图片操作按钮 -->
<span class="el-upload-list__item-actions">
<!-- 预览 -->
<span
class="el-upload-list__item-preview"
@click="handlePictureCardPreview(file)"
>
<svg-icon icon-class="el-zoom-in" />
</span>
<!-- 删除 -->
<span
class="el-upload-list__item-delete"
@click="handlePictureRemove(file)"
>
<svg-icon icon-class="el-delete" />
</span>
</span>
</template>
<template #tip> <template #tip>
<div class="el-upload__tip" <div class="el-upload__tip"
v-if="!!field.options.uploadTip">{{field.options.uploadTip}}</div> v-if="!!field.options.uploadTip">{{field.options.uploadTip}}</div>
</template> </template>
<div class="uploader-icon"><svg-icon icon-class="el-plus" /></div> <div class="uploader-icon"><svg-icon icon-class="el-plus" /></div>
</el-upload> </el-upload>
<div v-if="showPreviewDialogFlag" v-drag="['.drag-dialog.el-dialog', '.drag-dialog .el-dialog__header']">
<el-dialog title="" v-model="showPreviewDialogFlag"
append-to-body width="60%"
:show-close="true" custom-class="drag-dialog small-padding-dialog"
:close-on-click-modal="true" :close-on-press-escape="true" :destroy-on-close="true">
<img :src="previewUrl" style="width: 100%" alt="" />
</el-dialog>
</div>
</form-item-wrapper> </form-item-wrapper>
</template> </template>
@ -88,12 +111,13 @@
fileListBeforeRemove: [], // fileListBeforeRemove: [], //
uploadBtnHidden: false, uploadBtnHidden: false,
previewUrl: '', previewIndex: 1, //
showPreviewDialogFlag: false,
} }
}, },
computed: { computed: {
previewList() {
return this.fileList.map(el => el.url);
}
}, },
beforeCreate() { beforeCreate() {
/* 这里不能访问方法和属性!! */ /* 这里不能访问方法和属性!! */
@ -202,7 +226,7 @@
} }
}, },
updateFieldModelAndEmitDataChangeForRemove(file, fileList) { updateFieldModelAndEmitDataChangeForRemove(file) {
let oldValue = deepClone(this.fieldModel) let oldValue = deepClone(this.fieldModel)
let foundFileIdx = -1 let foundFileIdx = -1
this.fileListBeforeRemove.map((fi, idx) => { /* 跟element-ui不同element-plus删除文件时this.fileList数组对应元素已被删除 */ this.fileListBeforeRemove.map((fi, idx) => { /* 跟element-ui不同element-plus删除文件时this.fileList数组对应元素已被删除 */
@ -218,14 +242,17 @@
this.emitFieldDataChange(this.fieldModel, oldValue) this.emitFieldDataChange(this.fieldModel, oldValue)
}, },
handleBeforeRemove(file, fileList) { handleBeforeRemove(fileList) {
/* 保留删除之前的文件列表!! */ /* 保留删除之前的文件列表!! */
this.fileListBeforeRemove = deepClone(fileList) this.fileListBeforeRemove = deepClone(fileList)
}, },
handlePictureRemove(file, fileList) { handlePictureRemove(file) {
this.updateFieldModelAndEmitDataChangeForRemove(file, fileList) this.handleBeforeRemove(this.fileList) // #file slot handleBeforeRemove @before-remove @remove
this.fileList = deepClone(fileList) //this.fileList = fileList 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 this.uploadBtnHidden = fileList.length >= this.field.options.limit
if (!!this.field.options.onFileRemove) { if (!!this.field.options.onFileRemove) {
@ -247,6 +274,13 @@
} }
}, },
handlePictureCardPreview({ url }) {
//
this.previewIndex = this.previewList.indexOf(url)
// <el-image> img img
this.$refs['imageRef'].$el.children[0].click()
}
} }
} }
</script> </script>
@ -282,3 +316,5 @@
} }
</style> </style>