From 913e7cd145459ca10e80392819aa052454927103 Mon Sep 17 00:00:00 2001
From: ZN <zhang_12370@163.com>
Date: 星期三, 18 三月 2026 17:56:34 +0800
Subject: [PATCH] feat: 新增销售合同导出功能并增强多个模块交互

---
 src/views/productionManagement/workOrder/index.vue |  103 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 1 deletions(-)

diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index 162dd91..902ca25 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -218,13 +218,46 @@
         </span>
       </template>
     </el-dialog>
+    <el-dialog
+      v-model="auditDialogVisible"
+      title="瀹℃牳"
+      width="1000px"
+      :close-on-click-modal="false"
+    >
+      <el-table :data="auditTableData" border style="width: 100%" v-loading="auditLoading">
+        <el-table-column label="浜у搧鍚嶇О" prop="productName" min-width="140" show-overflow-tooltip />
+        <el-table-column label="瑙勬牸" prop="model" min-width="120" show-overflow-tooltip />
+        <el-table-column label="鍗曚綅" prop="unit" width="80" />
+        <el-table-column label="宸ュ簭鍚嶇О" prop="processName" min-width="120" show-overflow-tooltip />
+        <el-table-column label="闇�姹傛暟閲�" prop="planQuantity" width="110" />
+        <el-table-column label="瀹屾垚鏁伴噺" prop="completeQuantity" width="110" />
+        <el-table-column label="瀹屾垚杩涘害" prop="completionStatus" width="140">
+          <template #default="{ row }">
+            <el-progress
+              :percentage="toProgressPercentage(row?.completionStatus)"
+              :color="progressColor(toProgressPercentage(row?.completionStatus))"
+              :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''"
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="璁″垝寮�濮嬫椂闂�" prop="planStartTime" width="140" />
+        <el-table-column label="璁″垝缁撴潫鏃堕棿" prop="planEndTime" width="140" />
+      </el-table>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button type="primary" :loading="auditLoading" @click="submitAudit(1)">閫氳繃</el-button>
+          <el-button type="danger" :loading="auditLoading" @click="submitAudit(2)">涓嶉�氳繃</el-button>
+          <el-button :disabled="auditLoading" @click="auditDialogVisible = false">鍙栨秷</el-button>
+        </span>
+      </template>
+    </el-dialog>
     <FilesDia ref="workOrderFilesRef" />
   </div>
 </template>
 
 <script setup>
   import { onMounted, ref, nextTick } from "vue";
-  import { ElMessageBox } from "element-plus";
+  import { ElMessageBox, ElMessage } from "element-plus";
   import dayjs from "dayjs";
   import {
     productWorkOrderPage,
@@ -340,6 +373,14 @@
           },
           disabled: row => row.planQuantity <= 0,
         },
+        {
+          name:"瀹℃牳",
+          color: "#f56c6c",
+          clickFun: row => {
+            handleAudit(row);
+          },
+          disabled: row => Number(row?.auditStatus) === 1,
+        }
       ],
     },
   ]);
@@ -353,6 +394,10 @@
   const transferCardQrUrl = ref("");
   const transferCardRowData = ref(null);
   const reportDialogVisible = ref(false);
+  const auditDialogVisible = ref(false);
+  const auditRowData = ref(null);
+  const auditTableData = ref([]);
+  const auditLoading = ref(false);
   const workOrderFilesRef = ref(null);
   const reportFormRef = ref(null);
   const userOptions = ref([]);
@@ -398,6 +443,62 @@
     callback();
   };
 
+  // 瀹℃牳
+  const handleAudit = (row) => {
+    if (Number(row?.auditStatus) === 1) {
+      ElMessage.warning("璇ュ伐鍗曞凡瀹℃牳");
+      return;
+    }
+    auditRowData.value = row;
+    const workOrderNo = row?.workOrderNo;
+    const related = workOrderNo
+      ? tableData.value.filter(r => r?.workOrderNo === workOrderNo)
+      : [];
+    auditTableData.value = related.length > 0 ? related : [row];
+    auditDialogVisible.value = true;
+  };
+
+  const submitAudit = async (result) => {
+    const current = auditRowData.value;
+    if (!current) return;
+    if (auditLoading.value) return;
+
+    const confirmText = result === 1 ? "纭畾瀹℃牳閫氳繃鍚楋紵" : "纭畾瀹℃牳涓嶉�氳繃鍚楋紵";
+    try {
+      await ElMessageBox.confirm(confirmText, "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      });
+    } catch {
+      return;
+    }
+
+    auditLoading.value = true;
+    try {
+      const updates = auditTableData.value.map(item => {
+        const id = item?.id;
+        if (!id) return Promise.resolve();
+        return updateProductWorkOrder({ id, auditStatus: result });
+      });
+      await Promise.all(updates);
+      ElMessage.success("瀹℃牳鎴愬姛");
+      auditDialogVisible.value = false;
+      getList();
+    } finally {
+      auditLoading.value = false;
+    }
+  };
+
+  // 鏌ョ湅璇︽儏
+  const handleView = (row) => {
+    const { workOrderId } = row;
+    router.push({
+      path: "/productionManagement/workOrderDetail",
+      query: { workOrderId },
+    });
+  }
+
   // 楠岃瘉瑙勫垯
   const reportFormRules = {
     quantity: [{ required: true, validator: validateQuantity, trigger: "blur" }],

--
Gitblit v1.9.3