From b3fda48ba53b36f6770f399f58290ed4d95d04a6 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期三, 30 四月 2025 09:19:52 +0800 Subject: [PATCH] feat: 接口 --- src/components/commonView/FourStreamsMaterialFileTable.vue | 184 ++++++++++++++++++++++++++------------------- 1 files changed, 105 insertions(+), 79 deletions(-) diff --git a/src/components/commonView/FourStreamsMaterialFileTable.vue b/src/components/commonView/FourStreamsMaterialFileTable.vue index c109630..2ed72e4 100644 --- a/src/components/commonView/FourStreamsMaterialFileTable.vue +++ b/src/components/commonView/FourStreamsMaterialFileTable.vue @@ -4,12 +4,12 @@ :tableData="list" :columns="columns" :autoHeight="false" - :operationBtns="operationBtns" + :operationBtns="columnsProps.operationBtns" :operationColumnWidth="240" :showTableColumnSetting="false" > <template #fileBusinessType="{ row }"> - {{ AllEnterpriseMaterialFileBusinessTypeEnumText[row.fileBusinessType] }} + {{ BusinessTypeEnumText[row.fileBusinessType] }} </template> <template #operationBtn-uploadBtn="{ data, row }"> <BlFileUpload @@ -25,21 +25,34 @@ </BlFileUpload> </template> </ProTableV2> + <FourStreamsBatchMaterialFileDialog + v-bind="dialogProps" + :name="''" + :zipName="`${BusinessTypeEnumText[currentFourStreamsMaterialFileTableItem.fileBusinessType as any]}`" + v-model:fileList="currentFourStreamsMaterialFileTableItem.fileList" + :showDeleteBtn="showDeleteBtn" + /> </div> </template> -<script setup lang="ts"> -import { FourStreamsMaterialFileTableProps, FourStreamsMaterialFileTableItem } from './types'; +<script setup lang="ts" generic="T"> +import { + FourStreamsMaterialFileTableProps, + BaseMaterialFileTableItem, + FourStreamsMaterialFileBusinessTypeEnumText, +} from './types'; import { ProTableV2, defineColumns, defineOperationBtns, BlFileUpload, bolePreview, + useDialog, } from '@bole-core/components'; -import { AllEnterpriseMaterialFileBusinessTypeEnumText } from '@/constants'; 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'; defineOptions({ name: 'FourStreamsMaterialFileTable', @@ -50,9 +63,11 @@ showCheckBtn: true, showDownloadBtn: true, showDeleteBtn: true, + downloadBtnText: '涓嬭浇', + BusinessTypeEnumText: () => FourStreamsMaterialFileBusinessTypeEnumText, }); -const list = defineModel<FourStreamsMaterialFileTableItem[]>('list'); +const list = defineModel<BaseMaterialFileTableItem<T>[]>('list'); const columns = defineColumns([ { @@ -62,94 +77,102 @@ }, ]); -const operationBtns = defineOperationBtns([ - { - data: { - enCode: 'uploadBtn', - name: '涓婁紶', - }, - extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { - if (!props.showUploadBtn) return true; - let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); - return fileList?.length > 0; +const columnsProps = useDefineColumns({ + operationBtns: [ + { + data: { + enCode: 'uploadBtn', + name: '涓婁紶', + }, + extraProps: { + hide: (row: BaseMaterialFileTableItem<T>) => { + if (!props.showUploadBtn) return true; + let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + return fileList?.length > 0; + }, }, }, - }, - { - data: { - enCode: 'detailBtn', - name: '鏌ョ湅', - }, - emits: { - onClick: (row) => handlePreview(row), - }, - extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { - if (!props.showCheckBtn) return true; - let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); - if (!fileList?.length) { - return true; - } else { - if (fileList.length > 1) { - return false; + { + data: { + enCode: 'detailBtn', + name: '鏌ョ湅', + }, + emits: { + onClick: (row) => handlePreview(row), + }, + extraProps: { + hide: (row: BaseMaterialFileTableItem<T>) => { + if (!props.showCheckBtn) return true; + let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + if (!fileList?.length) { + return true; } else { - return !isFileCanPreview(fileList[0].path); + if (fileList.length > 1) { + return false; + } else { + return !isFileCanPreview(fileList[0].path); + } } - } + }, }, }, - }, - { - data: { - enCode: 'downloadBtn', - name: '涓嬭浇', - }, - emits: { - onClick: (row) => handleBatchDownload(row), - }, - extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { - return ( - !props.showDownloadBtn || - !row?.fileList?.filter?.((item) => item.status === 'success')?.length - ); + { + data: { + enCode: 'downloadBtn', + name: props.downloadBtnText, + }, + emits: { + onClick: (row) => handleBatchDownload(row), + }, + extraProps: { + hide: (row: BaseMaterialFileTableItem<T>) => { + return ( + !props.showDownloadBtn || + !row?.fileList?.filter?.((item) => item.status === 'success')?.length + ); + }, }, }, - }, - { - data: { - enCode: 'delBtn', - name: '鍒犻櫎', - }, - props: { - type: 'danger', - }, - emits: { - onClick: (row) => handleDelete(row), - }, - extraProps: { - hide: (row: FourStreamsMaterialFileTableItem) => { - if (!props.showDeleteBtn) return true; - let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); - return !fileList?.length; + { + data: { + enCode: 'delBtn', + name: '鍒犻櫎', + }, + props: { + type: 'danger', + }, + emits: { + onClick: (row) => handleDelete(row), + }, + extraProps: { + hide: (row: BaseMaterialFileTableItem<T>) => { + if (!props.showDeleteBtn) return true; + let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); + return !fileList?.length; + }, }, }, - }, -]); + ], +}); -async function handleDelete(row: FourStreamsMaterialFileTableItem) { +async function handleDelete(row: BaseMaterialFileTableItem<T>) { try { await Message.deleteMessage(); row.fileList = []; } catch (error) {} } -async function handlePreview(row: FourStreamsMaterialFileTableItem) { +const currentFourStreamsMaterialFileTableItem = ref<BaseMaterialFileTableItem<T>>({ + fileBusinessType: 0 as any, + fileList: [], +}); +const { dialogProps, dialogState } = useDialog(); + +async function handlePreview(row: BaseMaterialFileTableItem<T>) { if (row.fileList.length > 1) { - // currentEnterpriseMaterialFileTableItem.value = row; - // await nextTick(); - // dialogState.dialogVisible = true; + currentFourStreamsMaterialFileTableItem.value = row; + await nextTick(); + dialogState.dialogVisible = true; } else { bolePreview({ fileUrl: row.fileList[0].url, @@ -157,7 +180,7 @@ } } -function handleBatchDownload(row: FourStreamsMaterialFileTableItem) { +async function handleBatchDownload(row: BaseMaterialFileTableItem<T>) { const successFileList = row.fileList.filter((item) => item.status === 'success'); if (successFileList.length === 0) { Message.errorMessage('娌℃湁鍙笅杞界殑鏂囦欢'); @@ -168,8 +191,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