From 6738e8f5a78431e41fed28e6b795e70c2396070a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 03 九月 2026 17:27:23 +0800
Subject: [PATCH] refactor(mes): 优化工艺路线配置与工单表单功能

---
 src/views/mes/md/item/components/select-dialog.vue |   61 ++++++++++++++++++++++++++----
 1 files changed, 53 insertions(+), 8 deletions(-)

diff --git a/src/views/mes/md/item/components/select-dialog.vue b/src/views/mes/md/item/components/select-dialog.vue
index fe17e92..61f3fd1 100644
--- a/src/views/mes/md/item/components/select-dialog.vue
+++ b/src/views/mes/md/item/components/select-dialog.vue
@@ -67,11 +67,38 @@
     selectedRows.value = getMultipleSelectedRows();
   }
 
+  /** 涓婃鍗曞嚮琛岀棔杩癸紝鐢ㄤ簬鍚炴帀鍙屽嚮瑙﹀彂鐨勭浜屾 click锛岄伩鍏�"閫変簡鍙堝彇娑�" */
+  let lastClick = { rowId: undefined as number | undefined, time: 0 };
+
+  /** 鍗曞嚮琛岋細澶氶�夌洿鎺ュ垏鎹㈠嬀閫夛紱鍗曢�夌敱 radioConfig.trigger='row' 澶勭悊 */
+  async function handleCellClick({
+    row,
+    column,
+  }: {
+    row: MesMdItemApi.Item;
+    column?: { type?: string };
+  }) {
+    // 鐐瑰嚮鍕鹃�夊垪鑷韩鐢� checkbox 鎺т欢澶勭悊锛岄伩鍏嶄簩娆″垏鎹�
+    if (column?.type === "checkbox") {
+      return;
+    }
+    if (!multiple.value) {
+      return;
+    }
+    const rowId = row.id;
+    const now = Date.now();
+    if (lastClick.rowId === rowId && now - lastClick.time < 300) {
+      lastClick.time = 0;
+      return;
+    }
+    lastClick = { rowId, time: now };
+    await toggleMultipleRow(row);
+  }
+
   /** 澶勭悊琛屽弻鍑� */
   async function handleCellDblclick({ row }: { row: MesMdItemApi.Item }) {
     if (multiple.value) {
-      await toggleMultipleRow(row);
-      return;
+      return; // 澶氶�夌敱鍗曞嚮 cellClick 鍒囨崲锛屽弻鍑讳笉鍐嶉噸澶嶅鐞�
     }
     selectedRows.value = [row];
     await gridApi.grid.setRadioRow(row);
@@ -84,18 +111,20 @@
     gridApi.query();
   }
 
-  /** 鍥炴樉棰勯�夌墿鏂� */
+  /** 鍥炴樉棰勯�夌墿鏂欙細褰撳墠椤电洿鎺ュ嬀閫夛紝璺ㄩ〉棰勯�夋敞鍐屼负 reserve锛岀炕椤靛悗鑷姩鍥炴樉 */
   async function applyPreSelection() {
     if (preSelectedIds.value.length === 0) {
       return;
     }
     const rows = getTableRows();
+    const currentIds = new Set(
+      rows.filter((row) => row.id != null).map((row) => row.id),
+    );
     for (const row of rows) {
-      if (
-        row.id === undefined ||
-        row.id === null ||
-        !preSelectedIds.value.includes(row.id)
-      ) {
+      if (row.id === undefined || row.id === null) {
+        continue;
+      }
+      if (!preSelectedIds.value.includes(row.id)) {
         continue;
       }
       if (multiple.value) {
@@ -107,6 +136,21 @@
       }
     }
     if (multiple.value) {
+      // 鎷夊彇涓嶅湪褰撳墠椤电殑棰勯�夌墿鏂欏畬鏁存暟鎹紝娉ㄥ唽涓� checkbox reserve锛堢炕椤靛悗鑷姩鍕鹃�夛級
+      const missingIds = preSelectedIds.value.filter(
+        (id) => !currentIds.has(id),
+      );
+      if (missingIds.length > 0) {
+        const result = await getItemPage({
+          pageNo: 1,
+          pageSize: 200,
+          ids: missingIds.join(","),
+        } as never);
+        const fullRows = result?.list as MesMdItemApi.Item[] | undefined;
+        if (fullRows && fullRows.length > 0) {
+          await gridApi.grid.setCheckboxReserve(fullRows, true);
+        }
+      }
       selectedRows.value = getMultipleSelectedRows();
     }
   }
@@ -159,6 +203,7 @@
       },
     } as VxeTableGridOptions<MesMdItemApi.Item>,
     gridEvents: {
+      cellClick: handleCellClick,
       cellDblclick: handleCellDblclick,
       checkboxAll: handleCheckboxSelectChange,
       checkboxChange: handleCheckboxSelectChange,

--
Gitblit v1.9.3