From 19550aed9e2babd1a719aaa45904fad96d0fcfc1 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 21 七月 2026 10:01:27 +0800
Subject: [PATCH] 生产订单两个确认按钮问题

---
 src/views/mes/pro/workorder/modules/form.vue |  133 ++++++++++++++++++++++----------------------
 1 files changed, 66 insertions(+), 67 deletions(-)

diff --git a/src/views/mes/pro/workorder/modules/form.vue b/src/views/mes/pro/workorder/modules/form.vue
index 3d52144..5c4c4ca 100644
--- a/src/views/mes/pro/workorder/modules/form.vue
+++ b/src/views/mes/pro/workorder/modules/form.vue
@@ -6,13 +6,13 @@
 
   import { computed, ref } from "vue";
 
-  import { useVbenModal } from "@vben/common-ui";
+  import { confirm, useVbenModal } from "@vben/common-ui";
   import {
     BarcodeBizTypeEnum,
     MesProWorkOrderStatusEnum,
   } from "@vben/constants";
 
-  import { Button, message, Popconfirm, Tabs } from "ant-design-vue";
+  import { Button, message, Tabs } from "ant-design-vue";
 
   import { useVbenForm } from "#/adapter/form";
   import {
@@ -83,10 +83,18 @@
     wrapperClass: "grid-cols-3",
   });
 
-  /** 閲嶆柊鎸傝浇 schema 骞舵寜琛ㄥ崟鎬佹帶鍒跺簳閮ㄧ‘璁ゆ寜閽� */
+  /** 閲嶆柊鎸傝浇 schema 骞舵寜琛ㄥ崟鎬佹帶鍒跺簳閮ㄦ寜閽� */
   function applySchema() {
     formApi.setState({ schema: useFormSchema(formType.value, formApi) });
-    modalApi.setState({ showConfirmButton: isEditable.value });
+    const showBtn = isEditable.value || isConfirm.value || isFinish.value;
+    modalApi.setState({
+      showConfirmButton: showBtn,
+      confirmText: isConfirm.value || canConfirm.value
+        ? '纭'
+        : isFinish.value
+          ? '瀹屾垚'
+          : undefined,
+    });
   }
 
   /** 鏌ョ湅璁㈠崟鏉$爜 */
@@ -100,48 +108,6 @@
       formData.value.code,
       formData.value.name
     );
-  }
-
-  /** 纭璁㈠崟锛氱紪杈戞�佹湁淇敼鏃跺厛淇濆瓨锛屽啀纭 */
-  async function handleConfirm() {
-    const { valid } = await formApi.validate();
-    if (!valid || !formData.value?.id) {
-      return;
-    }
-    modalApi.lock();
-    try {
-      if (isEditable.value) {
-        const current = JSON.stringify(await formApi.getValues());
-        if (current !== originalSnapshot.value) {
-          const data =
-            (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
-          await updateWorkOrder({ ...formData.value, ...data });
-          originalSnapshot.value = current;
-        }
-      }
-      await confirmWorkOrder(formData.value.id);
-      message.success("璁㈠崟宸茬‘璁�");
-      await modalApi.close();
-      emit("success");
-    } finally {
-      modalApi.unlock();
-    }
-  }
-
-  /** 瀹屾垚璁㈠崟 */
-  async function handleFinish() {
-    if (!formData.value?.id) {
-      return;
-    }
-    modalApi.lock();
-    try {
-      await finishWorkOrder(formData.value.id);
-      message.success("璁㈠崟宸插畬鎴�");
-      await modalApi.close();
-      emit("success");
-    } finally {
-      modalApi.unlock();
-    }
   }
 
   /** 浠� BOM 鐗╂枡琛岄濉瓙璁㈠崟锛氬鐢ㄥ綋鍓嶈鍗曚笂涓嬫枃锛岃繘鍏ユ柊澧炴�� */
@@ -177,16 +143,62 @@
 
   const [Modal, modalApi] = useVbenModal({
     async onConfirm() {
+      // ---- 纭璁㈠崟妯″紡 ----
+      if (isConfirm.value || canConfirm.value) {
+        const { valid } = await formApi.validate();
+        if (!valid || !formData.value?.id) return;
+        try {
+          await confirm('纭瑕佸畬鎴愯鍗曠紪鍒跺悧锛熺‘璁ゅ悗灏嗕笉鑳芥洿鏀广��');
+        } catch {
+          return;
+        }
+        modalApi.lock();
+        try {
+          // 缂栬緫鎬佹湁淇敼鏃跺厛淇濆瓨
+          if (isEditable.value) {
+            const current = JSON.stringify(await formApi.getValues());
+            if (current !== originalSnapshot.value) {
+              const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
+              await updateWorkOrder({ ...formData.value, ...data });
+              originalSnapshot.value = current;
+            }
+          }
+          await confirmWorkOrder(formData.value.id);
+          message.success('璁㈠崟宸茬‘璁�');
+          await modalApi.close();
+          emit('success');
+        } finally {
+          modalApi.unlock();
+        }
+        return;
+      }
+      // ---- 瀹屾垚璁㈠崟妯″紡 ----
+      if (isFinish.value) {
+        if (!formData.value?.id) return;
+        try {
+          await confirm('纭瑕佸畬鎴愯璁㈠崟鍚楋紵');
+        } catch {
+          return;
+        }
+        modalApi.lock();
+        try {
+          await finishWorkOrder(formData.value.id);
+          message.success('璁㈠崟宸插畬鎴�');
+          await modalApi.close();
+          emit('success');
+        } finally {
+          modalApi.unlock();
+        }
+        return;
+      }
+      // ---- 淇濆瓨锛堟柊澧� / 缂栬緫锛�----
       if (!isEditable.value) {
         await modalApi.close();
         return;
       }
       const { valid } = await formApi.validate();
-      if (!valid) {
-        return;
-      }
+      if (!valid) return;
       modalApi.lock();
-      // 鎻愪氦琛ㄥ崟
       const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
       try {
         if (formData.value?.id) {
@@ -200,7 +212,6 @@
             status: MesProWorkOrderStatusEnum.PREPARE,
           };
           formType.value = "update";
-          // 鍒涘缓鎴愬姛鍚庡垏鎹㈢紪杈戞�侊紝閲嶆寕 schema 璁┿�岃鍗曠姸鎬併�嶅瓧娈垫樉鐜�
           applySchema();
           await formApi.setValues(formData.value);
         }
@@ -275,22 +286,10 @@
       </Tabs>
     </template>
     <template #prepend-footer>
-      <div class="flex flex-auto items-center gap-2">
-        <Popconfirm v-if="canConfirm || isConfirm"
-                    title="纭瑕佸畬鎴愯鍗曠紪鍒跺悧锛熺‘璁ゅ悗灏嗕笉鑳芥洿鏀广��"
-                    @confirm="handleConfirm">
-          <Button type="primary">纭</Button>
-        </Popconfirm>
-        <Popconfirm v-if="isFinish"
-                    title="纭瑕佸畬鎴愯璁㈠崟鍚楋紵"
-                    @confirm="handleFinish">
-          <Button type="primary">瀹屾垚</Button>
-        </Popconfirm>
-        <Button v-if="formType === 'detail' && formData?.id"
-                @click="handleBarcode">
-          鏌ョ湅鏉$爜
-        </Button>
-      </div>
+      <Button v-if="formType === 'detail' && formData?.id"
+              @click="handleBarcode">
+        鏌ョ湅鏉$爜
+      </Button>
     </template>
   </Modal>
   <BarcodeDetail ref="barcodeDetailRef" />

--
Gitblit v1.9.3