From 29ef0d39157957146015e1b914c26d2b6d1bf25e Mon Sep 17 00:00:00 2001 From: Electrolux <59329360+electroluxcode@users.noreply.github.com> Date: Tue, 30 Apr 2024 06:54:30 +0800 Subject: [PATCH] feat(upload->previewColumns): Adapt functions && chore upload demo (#3799) * feat(upload->previewColumns): add function capability with delete fileList * chore(upload->demo): split file && add previewColumns fn demo * type(upload): optional handleRemove * type(upload): remove optional handleRemove * feat(upload->previewCol): add enhanceing handleAdd && handleDownload * chore(upload->preview): remove previewColumns --- src/components/Upload/src/BasicUpload.vue | 1 + .../src/components/UploadPreviewModal.vue | 28 ++- src/components/Upload/src/props.ts | 12 +- src/views/demo/comp/upload/Upload1.vue | 28 +++ src/views/demo/comp/upload/Upload2.vue | 56 +++++ src/views/demo/comp/upload/Upload3.vue | 73 ++++++ src/views/demo/comp/upload/Upload4.vue | 180 ++++++++++++++ src/views/demo/comp/upload/index.vue | 227 +----------------- 8 files changed, 377 insertions(+), 228 deletions(-) create mode 100644 src/views/demo/comp/upload/Upload1.vue create mode 100644 src/views/demo/comp/upload/Upload2.vue create mode 100644 src/views/demo/comp/upload/Upload3.vue create mode 100644 src/views/demo/comp/upload/Upload4.vue diff --git a/src/components/Upload/src/BasicUpload.vue b/src/components/Upload/src/BasicUpload.vue index f18c647e..fa5eabfd 100644 --- a/src/components/Upload/src/BasicUpload.vue +++ b/src/components/Upload/src/BasicUpload.vue @@ -36,6 +36,7 @@ props.previewColumns, () => { - if (props.previewColumns.length) { + if (Array.isArray(props.previewColumns) && props.previewColumns.length) { columns = props.previewColumns; actionColumn = null; + } else if (isFunction(props.previewColumns)) { + columns = props.previewColumns({ handleRemove, handleAdd }); } else { columns = createPreviewColumns(); actionColumn = createPreviewActionColumn({ handleRemove, handleDownload }); @@ -74,18 +79,29 @@ ); // 删除 - function handleRemove(record: PreviewFileItem) { - const index = fileListRef.value.findIndex((item) => item.url === record.url); + function handleRemove(record: PreviewFileItem | Record, urlKey = 'url') { + const index = fileListRef.value.findIndex((item) => item[urlKey] === record[urlKey]); if (index !== -1) { const removed = fileListRef.value.splice(index, 1); - emit('delete', removed[0].url); + emit('delete', removed[0][urlKey]); emit( 'list-change', - fileListRef.value.map((item) => item.url), + fileListRef.value.map((item) => item[urlKey]), ); } } - + // 添加 + function handleAdd(record: PreviewFileItem | Record, urlKey = 'url') { + const { maxNumber } = props; + if (fileListRef.value.length + fileListRef.value.length > maxNumber) { + return createMessage.warning(t('component.upload.maxNumber', [maxNumber])); + } + fileListRef.value = [...fileListRef.value, record]; + emit( + 'list-change', + fileListRef.value.map((item) => item[urlKey]), + ); + } // 下载 function handleDownload(record: PreviewFileItem) { const { url = '' } = record; diff --git a/src/components/Upload/src/props.ts b/src/components/Upload/src/props.ts index ee2e7d46..704f412a 100644 --- a/src/components/Upload/src/props.ts +++ b/src/components/Upload/src/props.ts @@ -14,11 +14,13 @@ type SortableOptions = Merge< // ...可扩展 } >; - +type previewColumnsFnType = { + handleRemove:(record:Record,key:string)=>any, + handleAdd:(record:Record,key:string)=>any, +} export const previewType = { previewColumns: { - type: Array as PropType, - default: [], + type: [Array,Function] as PropType BasicColumn[])>, required: false, }, beforePreviewData: { @@ -111,6 +113,10 @@ export const previewProps = { type: Array as PropType, default: () => [], }, + maxNumber: { + type: Number as PropType, + default: 1, + }, ...previewType, }; diff --git a/src/views/demo/comp/upload/Upload1.vue b/src/views/demo/comp/upload/Upload1.vue new file mode 100644 index 00000000..efdc7000 --- /dev/null +++ b/src/views/demo/comp/upload/Upload1.vue @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/src/views/demo/comp/upload/Upload2.vue b/src/views/demo/comp/upload/Upload2.vue new file mode 100644 index 00000000..9e76f954 --- /dev/null +++ b/src/views/demo/comp/upload/Upload2.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/views/demo/comp/upload/Upload3.vue b/src/views/demo/comp/upload/Upload3.vue new file mode 100644 index 00000000..c985724d --- /dev/null +++ b/src/views/demo/comp/upload/Upload3.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/views/demo/comp/upload/Upload4.vue b/src/views/demo/comp/upload/Upload4.vue new file mode 100644 index 00000000..8dd852f9 --- /dev/null +++ b/src/views/demo/comp/upload/Upload4.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/views/demo/comp/upload/index.vue b/src/views/demo/comp/upload/index.vue index d28616f2..e321a2db 100644 --- a/src/views/demo/comp/upload/index.vue +++ b/src/views/demo/comp/upload/index.vue @@ -1,226 +1,15 @@