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