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