From e9dda9e6c52cb737267185f5118ded73c0053115 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期二, 06 五月 2025 17:13:41 +0800 Subject: [PATCH] feat: 接口 --- src/components/commonView/FourStreamsMaterialFileTable.vue | 89 ++++++++++++++++++++++++++------------------ 1 files changed, 53 insertions(+), 36 deletions(-) diff --git a/src/components/commonView/FourStreamsMaterialFileTable.vue b/src/components/commonView/FourStreamsMaterialFileTable.vue index 2ed72e4..606f5de 100644 --- a/src/components/commonView/FourStreamsMaterialFileTable.vue +++ b/src/components/commonView/FourStreamsMaterialFileTable.vue @@ -8,14 +8,11 @@ :operationColumnWidth="240" :showTableColumnSetting="false" > - <template #fileBusinessType="{ row }"> - {{ BusinessTypeEnumText[row.fileBusinessType] }} - </template> <template #operationBtn-uploadBtn="{ data, row }"> <BlFileUpload - v-model:file-url="row.fileList" + v-model:file-url="row.listFiles" multiple - :limit="1" + :limit="99" ref="uploadRef" :showTip="false" :show-file-list="false" @@ -28,19 +25,17 @@ <FourStreamsBatchMaterialFileDialog v-bind="dialogProps" :name="''" - :zipName="`${BusinessTypeEnumText[currentFourStreamsMaterialFileTableItem.fileBusinessType as any]}`" - v-model:fileList="currentFourStreamsMaterialFileTableItem.fileList" + :zipName="currentFourStreamsMaterialFileTableItem.fileTypeName" + v-model:fileList="currentFourStreamsMaterialFileTableItem.listFiles" :showDeleteBtn="showDeleteBtn" + :yearMonth="date" + :onDelete="(file) => handleDialogDelete(currentFourStreamsMaterialFileTableItem, file)" /> </div> </template> <script setup lang="ts" generic="T"> -import { - FourStreamsMaterialFileTableProps, - BaseMaterialFileTableItem, - FourStreamsMaterialFileBusinessTypeEnumText, -} from './types'; +import { FourStreamsMaterialFileTableProps } from './types'; import { ProTableV2, defineColumns, @@ -48,11 +43,13 @@ BlFileUpload, bolePreview, useDialog, + UploadUserFile, } from '@bole-core/components'; import { downloadFileByUrl } from '@/utils'; import { Message, isFileCanPreview, downloadWithZip } from '@bole-core/core'; import { useDefineColumns } from '@/hooks'; import FourStreamsBatchMaterialFileDialog from './FourStreamsBatchMaterialFileDialog.vue'; +import { CustomerApplyFileTypeListItem } from './utils'; defineOptions({ name: 'FourStreamsMaterialFileTable', @@ -64,15 +61,14 @@ showDownloadBtn: true, showDeleteBtn: true, downloadBtnText: '涓嬭浇', - BusinessTypeEnumText: () => FourStreamsMaterialFileBusinessTypeEnumText, }); -const list = defineModel<BaseMaterialFileTableItem<T>[]>('list'); +const list = defineModel<CustomerApplyFileTypeListItem[]>('list'); const columns = defineColumns([ { id: '1', - enCode: 'fileBusinessType', + enCode: 'fileTypeName', name: '鏉愭枡鍚嶇О', }, ]); @@ -85,10 +81,11 @@ name: '涓婁紶', }, extraProps: { - hide: (row: BaseMaterialFileTableItem<T>) => { - if (!props.showUploadBtn) return true; - let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); - return fileList?.length > 0; + hide: (row: CustomerApplyFileTypeListItem) => { + return !props.showUploadBtn; + // if (!props.showUploadBtn) return true; + // let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + // return fileList?.length > 0; }, }, }, @@ -101,9 +98,9 @@ onClick: (row) => handlePreview(row), }, extraProps: { - hide: (row: BaseMaterialFileTableItem<T>) => { + hide: (row: CustomerApplyFileTypeListItem) => { if (!props.showCheckBtn) return true; - let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + let fileList = row?.listFiles?.filter?.((item) => item.status === 'success'); if (!fileList?.length) { return true; } else { @@ -125,10 +122,10 @@ onClick: (row) => handleBatchDownload(row), }, extraProps: { - hide: (row: BaseMaterialFileTableItem<T>) => { + hide: (row: CustomerApplyFileTypeListItem) => { return ( !props.showDownloadBtn || - !row?.fileList?.filter?.((item) => item.status === 'success')?.length + !row?.listFiles?.filter?.((item) => item.status === 'success')?.length ); }, }, @@ -145,9 +142,9 @@ onClick: (row) => handleDelete(row), }, extraProps: { - hide: (row: BaseMaterialFileTableItem<T>) => { + hide: (row: CustomerApplyFileTypeListItem) => { if (!props.showDeleteBtn) return true; - let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + let fileList = row?.listFiles?.filter?.((item) => item.status === 'success'); return !fileList?.length; }, }, @@ -155,33 +152,53 @@ ], }); -async function handleDelete(row: BaseMaterialFileTableItem<T>) { +async function handleDelete(row: CustomerApplyFileTypeListItem) { try { - await Message.deleteMessage(); - row.fileList = []; + if (row.listFiles.length > 1) { + currentFourStreamsMaterialFileTableItem.value = row; + await nextTick(); + dialogState.dialogVisible = true; + } else { + await Message.deleteMessage(); + if (props.onDelete) { + await props.onDelete(row, row.listFiles[0].id); + } + row.listFiles = []; + } } catch (error) {} } -const currentFourStreamsMaterialFileTableItem = ref<BaseMaterialFileTableItem<T>>({ - fileBusinessType: 0 as any, - fileList: [], +async function handleDialogDelete( + row: CustomerApplyFileTypeListItem, + listFile: API.CustomerUploadMonthApplyFileTypeDto & UploadUserFile +) { + if (props.onDelete) { + await props.onDelete(row, listFile.id); + } +} + +const currentFourStreamsMaterialFileTableItem = ref<CustomerApplyFileTypeListItem>({ + fileSearchTypeId: '', + fileTypeName: '', + lastUpdateTime: '', + listFiles: [], }); const { dialogProps, dialogState } = useDialog(); -async function handlePreview(row: BaseMaterialFileTableItem<T>) { - if (row.fileList.length > 1) { +async function handlePreview(row: CustomerApplyFileTypeListItem) { + if (row.listFiles.length > 1) { currentFourStreamsMaterialFileTableItem.value = row; await nextTick(); dialogState.dialogVisible = true; } else { bolePreview({ - fileUrl: row.fileList[0].url, + fileUrl: row.listFiles[0].url, }); } } -async function handleBatchDownload(row: BaseMaterialFileTableItem<T>) { - const successFileList = row.fileList.filter((item) => item.status === 'success'); +async function handleBatchDownload(row: CustomerApplyFileTypeListItem) { + const successFileList = row.listFiles.filter((item) => item.status === 'success'); if (successFileList.length === 0) { Message.errorMessage('娌℃湁鍙笅杞界殑鏂囦欢'); return; -- Gitblit v1.9.1