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 | 108 ++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 72 insertions(+), 36 deletions(-) diff --git a/src/components/commonView/FourStreamsMaterialFileTable.vue b/src/components/commonView/FourStreamsMaterialFileTable.vue index e51d00d..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 }"> - {{ FourStreamsMaterialFileBusinessTypeEnumText[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" @@ -25,25 +22,34 @@ </BlFileUpload> </template> </ProTableV2> + <FourStreamsBatchMaterialFileDialog + v-bind="dialogProps" + :name="''" + :zipName="currentFourStreamsMaterialFileTableItem.fileTypeName" + v-model:fileList="currentFourStreamsMaterialFileTableItem.listFiles" + :showDeleteBtn="showDeleteBtn" + :yearMonth="date" + :onDelete="(file) => handleDialogDelete(currentFourStreamsMaterialFileTableItem, file)" + /> </div> </template> -<script setup lang="ts"> -import { - FourStreamsMaterialFileTableProps, - FourStreamsMaterialFileTableItem, - FourStreamsMaterialFileBusinessTypeEnumText, -} from './types'; +<script setup lang="ts" generic="T"> +import { FourStreamsMaterialFileTableProps } from './types'; import { ProTableV2, defineColumns, defineOperationBtns, BlFileUpload, bolePreview, + useDialog, + UploadUserFile, } from '@bole-core/components'; import { downloadFileByUrl } from '@/utils'; -import { Message, isFileCanPreview } from '@bole-core/core'; +import { Message, isFileCanPreview, downloadWithZip } from '@bole-core/core'; import { useDefineColumns } from '@/hooks'; +import FourStreamsBatchMaterialFileDialog from './FourStreamsBatchMaterialFileDialog.vue'; +import { CustomerApplyFileTypeListItem } from './utils'; defineOptions({ name: 'FourStreamsMaterialFileTable', @@ -57,12 +63,12 @@ downloadBtnText: '涓嬭浇', }); -const list = defineModel<FourStreamsMaterialFileTableItem[]>('list'); +const list = defineModel<CustomerApplyFileTypeListItem[]>('list'); const columns = defineColumns([ { id: '1', - enCode: 'fileBusinessType', + enCode: 'fileTypeName', name: '鏉愭枡鍚嶇О', }, ]); @@ -75,10 +81,11 @@ name: '涓婁紶', }, extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { - 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; }, }, }, @@ -91,9 +98,9 @@ onClick: (row) => handlePreview(row), }, extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { + 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 { @@ -115,10 +122,10 @@ onClick: (row) => handleBatchDownload(row), }, extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { + hide: (row: CustomerApplyFileTypeListItem) => { return ( !props.showDownloadBtn || - !row?.fileList?.filter?.((item) => item.status === 'success')?.length + !row?.listFiles?.filter?.((item) => item.status === 'success')?.length ); }, }, @@ -135,9 +142,9 @@ onClick: (row) => handleDelete(row), }, extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { + 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; }, }, @@ -145,27 +152,53 @@ ], }); -async function handleDelete(row: FourStreamsMaterialFileTableItem) { +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) {} } -async function handlePreview(row: FourStreamsMaterialFileTableItem) { - if (row.fileList.length > 1) { - // currentEnterpriseMaterialFileTableItem.value = row; - // await nextTick(); - // dialogState.dialogVisible = true; +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: 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, }); } } -function handleBatchDownload(row: FourStreamsMaterialFileTableItem) { - 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; @@ -175,8 +208,11 @@ } else { // downloadWithZip( // successFileList.map((item) => ({ data: item.url })), - // `${AllEnterpriseMaterialFileBusinessTypeEnumText[row.fileBusinessType]}鏉愭枡鏂囦欢` + // `${props.BusinessTypeEnumText[row.fileBusinessType as any]}` // ); + currentFourStreamsMaterialFileTableItem.value = row; + await nextTick(); + dialogState.dialogVisible = true; } } </script> -- Gitblit v1.9.1