From b64a0deae5b5d33f9e20671a68936b27f0b9b00b Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 21 七月 2026 18:03:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 src/views/mes/pro/task/components/gantt-chart.vue   |   10 +-
 src/views/mes/pro/task/data.ts                      |   12 ++--
 src/views/mes/pro/workorder/modules/form.vue        |    6 +
 src/views/wls/itemreceipt/modules/form.vue          |   24 ++++---
 src/views/wls/salesnotice/modules/form.vue          |   24 ++++---
 src/views/mes/pro/workorder/index.vue               |    4 +
 src/views/wls/returnissue/modules/form.vue          |   24 ++++---
 src/views/mes/pro/feedback/modules/form.vue         |    1 
 src/views/mes/process-design/route/modules/form.vue |    5 +
 src/views/wls/productissue/modules/form.vue         |   24 ++++---
 10 files changed, 80 insertions(+), 54 deletions(-)

diff --git a/src/views/mes/pro/feedback/modules/form.vue b/src/views/mes/pro/feedback/modules/form.vue
index edfb35c..00ae80a 100644
--- a/src/views/mes/pro/feedback/modules/form.vue
+++ b/src/views/mes/pro/feedback/modules/form.vue
@@ -128,6 +128,7 @@
       await updateFeedback(data);
       formData.value = { ...formData.value, ...data };
       message.success($t('common.updateSuccess'));
+      await modalApi.close();
     }
     // 鍒锋柊蹇収锛堝凡瀵归綈鏁伴噺骞惰ˉ id锛夛紝鍚庣画 submit 鐢ㄤ簬鍒ゆ柇鏄惁闇�瑕佸啀淇濆瓨
     originalSnapshot.value = JSON.stringify(data);
diff --git a/src/views/mes/pro/task/components/gantt-chart.vue b/src/views/mes/pro/task/components/gantt-chart.vue
index eb9adb0..a6af9f1 100644
--- a/src/views/mes/pro/task/components/gantt-chart.vue
+++ b/src/views/mes/pro/task/components/gantt-chart.vue
@@ -13,7 +13,7 @@
  * 1. 鎸夎鍗曞垎缁勫睍绀虹敓浜т换鍔★紝璁㈠崟涓� project 琛岋紝浠诲姟涓哄瓙琛�
  * 2. 鏀寔鍙棰勮鍜屾嫋鎷界紪杈戜袱绉嶆ā寮�
  * 3. 鎷栨嫿鍚庤Е鍙� taskUpdate 浜嬩欢锛岄�氱煡鐖剁粍浠舵壒閲忎繚瀛�
- * 4. 鏃堕棿鍒诲害锛氬懆 鈫� 鏃� 鈫� 8 灏忔椂锛�1 宸ヤ綔鏃� = 8 灏忔椂锛�
+ * 4. 鏃堕棿鍒诲害锛氬懆 鈫� 鏃� 鈫� 灏忔椂
  */
 defineOptions({ name: 'GanttChart', inheritAttrs: false });
 
@@ -47,8 +47,8 @@
 
   gantt.config.readonly = props.readonly;
   gantt.config.date_format = '%Y-%m-%d %H:%i:%s';
-  gantt.config.duration_unit = 'hour'; // 鎸佺画鏃堕棿鍗曚綅涓哄皬鏃讹紝閰嶅悎 duration_step 瀹炵幇宸ヤ綔鏃ュ崟浣�
-  gantt.config.duration_step = 8; // 1 宸ヤ綔鏃� = 8 灏忔椂
+  gantt.config.duration_unit = 'hour'; // 鎸佺画鏃堕棿鍗曚綅涓哄皬鏃�
+  gantt.config.duration_step = 1; // duration 瀛楁鍗充负瀹為檯灏忔椂鏁�
   gantt.config.row_height = 36;
   gantt.config.bar_height = 24;
   gantt.config.fit_tasks = true;
@@ -70,7 +70,7 @@
   gantt.config.buttons_left = ['gantt_save_btn'];
   gantt.config.buttons_right = ['gantt_cancel_btn'];
 
-  // 鏃堕棿鍒诲害锛氬懆 > 鏃� > 8 灏忔椂
+  // 鏃堕棿鍒诲害锛氬懆 > 鏃� > 灏忔椂
   const weekScaleTemplate = (date: Date) => {
     const dateToStr = gantt.date.date_to_str('%M %d');
     const endDate = gantt.date.add(gantt.date.add(date, 1, 'week'), -1, 'day');
@@ -82,7 +82,7 @@
   gantt.config.scales = [
     { unit: 'week', step: 1, format: weekScaleTemplate },
     { unit: 'day', step: 1, format: dayTemplate, css: daysStyle },
-    { unit: 'hour', step: 8, format: '%H:%i' },
+    { unit: 'hour', step: 1, format: '%H:%i' },
   ];
   gantt.config.scale_height = 50;
   gantt.config.show_task_cells = true;
diff --git a/src/views/mes/pro/task/data.ts b/src/views/mes/pro/task/data.ts
index a341512..605cd9c 100644
--- a/src/views/mes/pro/task/data.ts
+++ b/src/views/mes/pro/task/data.ts
@@ -347,8 +347,8 @@
     },
     {
       field: 'duration',
-      title: '鐢熶骇鏃堕暱',
-      width: 80,
+      title: '鐢熶骇鏃堕暱(h)',
+      width: 120,
     },
     {
       field: 'endTime',
@@ -420,7 +420,7 @@
     },
     {
       fieldName: 'duration',
-      label: '鐢熶骇鏃堕暱',
+      label: '鐢熶骇鏃堕暱(h)',
       component: 'InputNumber',
       componentProps: {
         class: '!w-full',
@@ -456,7 +456,7 @@
   ];
 }
 
-/** 璁$畻缁撴潫鏃堕棿锛氬紑濮嬫椂闂� + 鐢熶骇鏃堕暱 脳 8 灏忔椂 */
+/** 璁$畻缁撴潫鏃堕棿锛氬紑濮嬫椂闂� + 鐢熶骇鏃堕暱锛堝皬鏃讹級 */
 async function recalcEndTime(formApi?: VbenFormApi) {
   if (!formApi) {
     return;
@@ -466,7 +466,7 @@
     const start = Number(values.startTime);
     await formApi.setFieldValue(
       'endTime',
-      start + values.duration * 8 * 3600 * 1000,
+      start + values.duration * 3600 * 1000,
     );
   }
 }
@@ -553,7 +553,7 @@
       width: 170,
       formatter: 'formatDateTime',
     },
-    { field: 'duration', title: '鐢熶骇鏃堕暱', width: 100 },
+    { field: 'duration', title: '鐢熶骇鏃堕暱(h)', width: 120 },
     {
       field: 'endTime',
       title: '棰勮瀹屾垚鏃堕棿',
diff --git a/src/views/mes/pro/workorder/index.vue b/src/views/mes/pro/workorder/index.vue
index 4c9d167..6510afd 100644
--- a/src/views/mes/pro/workorder/index.vue
+++ b/src/views/mes/pro/workorder/index.vue
@@ -203,7 +203,9 @@
               label: '瀹屾垚',
               type: 'link',
               auth: ['mes:pro-work-order:update'],
-              ifShow: row.status === MesProWorkOrderStatusEnum.CONFIRMED,
+              ifShow:
+                row.status === MesProWorkOrderStatusEnum.CONFIRMED &&
+                !!row.quantityProduced,
               onClick: handleFinish.bind(null, row),
             },
             {
diff --git a/src/views/mes/pro/workorder/modules/form.vue b/src/views/mes/pro/workorder/modules/form.vue
index 5c4c4ca..676159e 100644
--- a/src/views/mes/pro/workorder/modules/form.vue
+++ b/src/views/mes/pro/workorder/modules/form.vue
@@ -204,6 +204,9 @@
         if (formData.value?.id) {
           await updateWorkOrder({ ...formData.value, ...data });
           formData.value = { ...formData.value, ...data };
+          emit("success");
+          message.success($t("ui.actionMessage.operationSuccess"));
+          await modalApi.close();
         } else {
           const id = await createWorkOrder(data);
           formData.value = {
@@ -214,10 +217,9 @@
           formType.value = "update";
           applySchema();
           await formApi.setValues(formData.value);
+          emit("success");
         }
         originalSnapshot.value = JSON.stringify(await formApi.getValues());
-        emit("success");
-        message.success($t("ui.actionMessage.operationSuccess"));
       } finally {
         modalApi.unlock();
       }
diff --git a/src/views/mes/process-design/route/modules/form.vue b/src/views/mes/process-design/route/modules/form.vue
index 9defcdc..8c0c230 100644
--- a/src/views/mes/process-design/route/modules/form.vue
+++ b/src/views/mes/process-design/route/modules/form.vue
@@ -67,7 +67,12 @@
       } else {
         await updateRoute(data);
         formData.value = { ...formData.value, ...data };
+        emit('success');
+        message.success($t('ui.actionMessage.operationSuccess'));
+        await modalApi.close();
+        return;
       }
+      // 鏂板锛氫繚鎸佸脊绐楁墦寮�锛屽垏鎹㈠埌缂栬緫妯″紡缁х画缁存姢
       emit('success');
       message.success($t('ui.actionMessage.operationSuccess'));
     } finally {
diff --git a/src/views/wls/itemreceipt/modules/form.vue b/src/views/wls/itemreceipt/modules/form.vue
index 0a0fe1a..cf2eac3 100644
--- a/src/views/wls/itemreceipt/modules/form.vue
+++ b/src/views/wls/itemreceipt/modules/form.vue
@@ -133,17 +133,21 @@
       if (formData.value?.id) {
         await updateItemReceipt({ ...formData.value, ...data });
         formData.value = { ...formData.value, ...data };
-      } else {
-        const id = await createItemReceipt(data);
-        formData.value = {
-          ...data,
-          id,
-          status: MesWmItemReceiptStatusEnum.PREPARE,
-        };
-        await formApi.setFieldValue('id', id);
-        await formApi.setFieldValue('status', formData.value.status);
-        formType.value = 'update';
+        emit('success');
+        message.success($t('ui.actionMessage.operationSuccess'));
+        await modalApi.close();
+        return;
       }
+      // 鏂板锛氫繚鎸佸脊绐楁墦寮�锛屽垏鎹㈠埌缂栬緫妯″紡
+      const id = await createItemReceipt(data);
+      formData.value = {
+        ...data,
+        id,
+        status: MesWmItemReceiptStatusEnum.PREPARE,
+      };
+      await formApi.setFieldValue('id', id);
+      await formApi.setFieldValue('status', formData.value.status);
+      formType.value = 'update';
       originalSnapshot.value = JSON.stringify(await formApi.getValues());
       emit('success');
       message.success($t('ui.actionMessage.operationSuccess'));
diff --git a/src/views/wls/productissue/modules/form.vue b/src/views/wls/productissue/modules/form.vue
index e894b66..3ec99e8 100644
--- a/src/views/wls/productissue/modules/form.vue
+++ b/src/views/wls/productissue/modules/form.vue
@@ -152,17 +152,21 @@
       if (formData.value?.id) {
         await updateProductIssue({ ...formData.value, ...data });
         formData.value = { ...formData.value, ...data };
-      } else {
-        const id = await createProductIssue(data);
-        formData.value = {
-          ...data,
-          id,
-          status: MesWmProductIssueStatusEnum.PREPARE,
-        };
-        await formApi.setFieldValue('id', id);
-        await formApi.setFieldValue('status', formData.value.status);
-        formType.value = 'update';
+        emit('success');
+        message.success($t('ui.actionMessage.operationSuccess'));
+        await modalApi.close();
+        return;
       }
+      // 鏂板锛氫繚鎸佸脊绐楁墦寮�锛屽垏鎹㈠埌缂栬緫妯″紡
+      const id = await createProductIssue(data);
+      formData.value = {
+        ...data,
+        id,
+        status: MesWmProductIssueStatusEnum.PREPARE,
+      };
+      await formApi.setFieldValue('id', id);
+      await formApi.setFieldValue('status', formData.value.status);
+      formType.value = 'update';
       originalSnapshot.value = JSON.stringify(await formApi.getValues());
       emit('success');
       message.success($t('ui.actionMessage.operationSuccess'));
diff --git a/src/views/wls/returnissue/modules/form.vue b/src/views/wls/returnissue/modules/form.vue
index ff47948..1546dd4 100644
--- a/src/views/wls/returnissue/modules/form.vue
+++ b/src/views/wls/returnissue/modules/form.vue
@@ -142,17 +142,21 @@
       if (formData.value?.id) {
         await updateReturnIssue({ ...formData.value, ...data });
         formData.value = { ...formData.value, ...data };
-      } else {
-        const id = await createReturnIssue(data);
-        formData.value = {
-          ...data,
-          id,
-          status: MesWmReturnIssueStatusEnum.PREPARE,
-        };
-        await formApi.setFieldValue('id', id);
-        await formApi.setFieldValue('status', formData.value.status);
-        formType.value = 'update';
+        emit('success');
+        message.success($t('ui.actionMessage.operationSuccess'));
+        await modalApi.close();
+        return;
       }
+      // 鏂板锛氫繚鎸佸脊绐楁墦寮�锛屽垏鎹㈠埌缂栬緫妯″紡
+      const id = await createReturnIssue(data);
+      formData.value = {
+        ...data,
+        id,
+        status: MesWmReturnIssueStatusEnum.PREPARE,
+      };
+      await formApi.setFieldValue('id', id);
+      await formApi.setFieldValue('status', formData.value.status);
+      formType.value = 'update';
       originalSnapshot.value = JSON.stringify(await formApi.getValues());
       emit('success');
       message.success($t('ui.actionMessage.operationSuccess'));
diff --git a/src/views/wls/salesnotice/modules/form.vue b/src/views/wls/salesnotice/modules/form.vue
index bf6d825..0f8266b 100644
--- a/src/views/wls/salesnotice/modules/form.vue
+++ b/src/views/wls/salesnotice/modules/form.vue
@@ -100,17 +100,21 @@
       if (formData.value?.id) {
         await updateSalesNotice({ ...formData.value, ...data });
         formData.value = { ...formData.value, ...data };
-      } else {
-        const id = await createSalesNotice(data);
-        formData.value = {
-          ...data,
-          id,
-          status: MesWmSalesNoticeStatusEnum.PREPARE,
-        };
-        await formApi.setFieldValue('id', id);
-        await formApi.setFieldValue('status', formData.value.status);
-        formType.value = 'update';
+        emit('success');
+        message.success($t('ui.actionMessage.operationSuccess'));
+        await modalApi.close();
+        return;
       }
+      // 鏂板锛氫繚鎸佸脊绐楁墦寮�锛屽垏鎹㈠埌缂栬緫妯″紡
+      const id = await createSalesNotice(data);
+      formData.value = {
+        ...data,
+        id,
+        status: MesWmSalesNoticeStatusEnum.PREPARE,
+      };
+      await formApi.setFieldValue('id', id);
+      await formApi.setFieldValue('status', formData.value.status);
+      formType.value = 'update';
       originalSnapshot.value = JSON.stringify(await formApi.getValues());
       emit('success');
       message.success($t('ui.actionMessage.operationSuccess'));

--
Gitblit v1.9.3