diff --git a/src/uploader/README.md b/src/uploader/README.md index 3f356c3b8..c598451eb 100644 --- a/src/uploader/README.md +++ b/src/uploader/README.md @@ -191,6 +191,39 @@ Use `disabled` prop to disable uploader. ``` +### Customize Single Preview Image Style + +```html + +``` + +```js +import { Toast } from 'vant'; + +export default { + data() { + return { + fileList = [ + { url: 'https://img.yzcdn.cn/vant/leaf.jpg' }, + { + url: 'https://img.yzcdn.cn/vant/sand.jpg', + deletable: true, + beforeDelete: () => { + Toast('Customize the events and styles of a single preview image'); + }, + }, + { + url: 'https://img.yzcdn.cn/vant/tree.jpg', + deletable: true, + imageFit: 'contain', + previewSize: 120, + }, + ]; + } + } +}; +``` + ## API ### Props diff --git a/src/uploader/README.zh-CN.md b/src/uploader/README.zh-CN.md index 85eb82c6e..f8271e42d 100644 --- a/src/uploader/README.zh-CN.md +++ b/src/uploader/README.zh-CN.md @@ -219,6 +219,41 @@ export default { ``` +### 自定义单个图片预览 + +在 `v-model` 数组中设置单个预览图片属性,支持 `imageFit`,`deletable`,`previewSize`,`beforeDelete` + +```html + +``` + +```js +import { Toast } from 'vant'; + +export default { + data() { + return { + fileList = [ + { url: 'https://img.yzcdn.cn/vant/leaf.jpg' }, + { + url: 'https://img.yzcdn.cn/vant/sand.jpg', + deletable: true, + beforeDelete: () => { + Toast('自定义单个预览图片的事件和样式'); + }, + }, + { + url: 'https://img.yzcdn.cn/vant/tree.jpg', + deletable: true, + imageFit: 'contain', + previewSize: 120, + }, + ]; + } + } +}; +``` + ## API ### Props diff --git a/src/uploader/demo/index.vue b/src/uploader/demo/index.vue index e28cbe625..607efbb7e 100644 --- a/src/uploader/demo/index.vue +++ b/src/uploader/demo/index.vue @@ -48,6 +48,15 @@ + + + + @@ -69,6 +78,8 @@ export default { invalidType: '请上传 jpg 格式图片', customUpload: '自定义上传样式', previewCover: '自定义预览样式', + customPreviewImage: '自定义单个图片预览', + deleteMessage: '删除前置处理', }, 'en-US': { status: 'Upload Status', @@ -85,6 +96,8 @@ export default { invalidType: 'Please upload an image in jpg format', customUpload: 'Custom Upload Area', previewCover: 'Preview Cover', + customPreviewImage: 'Custom single prevew image', + deleteMessage: 'Before Delete', }, }, @@ -97,6 +110,22 @@ export default { fileList2: [{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }], fileList3: [], fileList4: [{ url: 'https://img.yzcdn.cn/vant/sand.jpg' }], + fileList5: [ + { url: 'https://img.yzcdn.cn/vant/leaf.jpg' }, + { + url: 'https://img.yzcdn.cn/vant/sand.jpg', + deletable: true, + beforeDelete: () => { + this.$toast(this.t('deleteMessage')); + }, + }, + { + url: 'https://img.yzcdn.cn/vant/tree.jpg', + deletable: true, + imageFit: 'contain', + previewSize: 120, + }, + ], statusFileList: [], previewCoverFiles: [], }; diff --git a/src/uploader/index.js b/src/uploader/index.js index 909bcbcf7..ffb315e9a 100644 --- a/src/uploader/index.js +++ b/src/uploader/index.js @@ -212,8 +212,9 @@ export default createComponent({ }, onDelete(file, index) { - if (this.beforeDelete) { - const response = this.beforeDelete(file, this.getDetail(index)); + const beforeDelete = file.beforeDelete ?? this.beforeDelete; + if (beforeDelete) { + const response = beforeDelete(file, this.getDetail(index)); if (!response) { return; @@ -306,7 +307,8 @@ export default createComponent({ }, genPreviewItem(item, index) { - const showDelete = item.status !== 'uploading' && this.deletable; + const deleteAble = item.deletable ?? this.deletable; + const showDelete = item.status !== 'uploading' && deleteAble; const DeleteIcon = showDelete && (
{PreviewCoverContent}
); + const previewSize = item.previewSize ?? this.previewSize; + const imageFit = item.imageFit ?? this.imageFit; + const Preview = isImageFile(item) ? ( { this.onPreviewImage(item); diff --git a/src/uploader/test/__snapshots__/demo.spec.js.snap b/src/uploader/test/__snapshots__/demo.spec.js.snap index 6eb7af534..3a8619efc 100644 --- a/src/uploader/test/__snapshots__/demo.spec.js.snap +++ b/src/uploader/test/__snapshots__/demo.spec.js.snap @@ -143,5 +143,35 @@ exports[`renders demo correctly 1`] = ` +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
`;