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