From fa7fa3b7e38e6828dbb6964e72eac8e6b87c2b6e Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期三, 02 九月 2026 18:53:10 +0800
Subject: [PATCH] 批量提交和批量审批

---
 src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js |   71 ++++++++++++++++++++++++++++++++++-
 1 files changed, 69 insertions(+), 2 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js b/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
index 25b6ae5..5708239 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
@@ -85,6 +85,10 @@
   const approveDialog = reactive({ visible: false, row: null });
   const approveOpinion = ref("");
   const approveSubmitting = ref(false);
+  const selectedRows = ref([]);
+  const batchApproveDialog = reactive({ visible: false });
+  const batchApproveOpinion = ref("");
+  const batchApproveSubmitting = ref(false);
 
   /** 宸梾/璐圭敤鎶ラ攢涓撶敤璇︽儏銆佸鎵瑰脊绐� */
   const reimburseDialog = reactive({
@@ -189,7 +193,7 @@
         {
           name: "瀹℃壒",
           type: "text",
-          disabled: (row) => row.approvalStatus !== "pending" || !row.isApprove,
+          disabled: (row) => !canApprove(row),
           clickFun: (row) => openApprove(row),
         },
         // {
@@ -263,6 +267,28 @@
     page.current = p;
     page.size = limit;
     fetchApprovalList();
+  }
+
+  function handleSelectionChange(selection) {
+    selectedRows.value = selection || [];
+  }
+
+  function canApprove(row) {
+    return row?.approvalStatus === "pending" && Boolean(row?.isApprove);
+  }
+
+  function openBatchApproveDialog() {
+    if (!selectedRows.value.length) {
+      ElMessage.warning("璇烽�夋嫨鏁版嵁");
+      return;
+    }
+    const approveRows = selectedRows.value.filter(canApprove);
+    if (!approveRows.length) {
+      ElMessage.warning("鎵�閫夋暟鎹笉鍙鎵�");
+      return;
+    }
+    batchApproveOpinion.value = "";
+    batchApproveDialog.visible = true;
   }
 
   async function openReimburseDetail(row, mode) {
@@ -636,6 +662,40 @@
     }
   }
 
+  async function submitBatchApprove(result) {
+    const approveRows = selectedRows.value.filter(canApprove);
+    if (!approveRows.length) {
+      ElMessage.warning("鎵�閫夋暟鎹笉鍙鎵�");
+      return { ok: false };
+    }
+    if (result === "rejected" && !(batchApproveOpinion.value || "").trim()) {
+      return { needOpinion: true };
+    }
+    if (batchApproveSubmitting.value) return { ok: false };
+
+    batchApproveSubmitting.value = true;
+    try {
+      const results = await Promise.allSettled(
+        approveRows.map((row) =>
+          approveApprovalInstance(
+            buildApproveInstanceDto(row, result, batchApproveOpinion.value)
+          )
+        )
+      );
+      const successCount = results.filter((item) => item.status === "fulfilled").length;
+      const failCount = approveRows.length - successCount;
+
+      batchApproveDialog.visible = false;
+      await fetchApprovalList();
+      return { ok: successCount > 0, result, successCount, failCount };
+    } catch {
+      ElMessage.error("鎵归噺瀹℃壒澶辫触");
+      return { ok: false };
+    } finally {
+      batchApproveSubmitting.value = false;
+    }
+  }
+
   function approvalActionLabel(result) {
     if (result === "approved") return "閫氳繃";
     if (result === "rejected") return "椹冲洖";
@@ -664,6 +724,10 @@
     approveDialog,
     approveOpinion,
     approveSubmitting,
+    selectedRows,
+    batchApproveDialog,
+    batchApproveOpinion,
+    batchApproveSubmitting,
     submitReimburseApprove,
     isReimburseApprovalInstance,
     submitDialog,
@@ -685,6 +749,8 @@
     handleQuery,
     resetSearch,
     pagination,
+    handleSelectionChange,
+    openBatchApproveDialog,
     resetSubmitDialogState,
     openSubmitDialog,
     openEditDialog,
@@ -695,8 +761,9 @@
     submitInstanceForm,
     submitNewApproval,
     submitApprove,
+    submitBatchApprove,
     openDetail,
     openApprove,
     fetchApprovalList,
   };
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3