From cca940a6460bc4ec4266df4e413b05921d1f2e1d Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 16 四月 2026 09:55:16 +0800
Subject: [PATCH] 中兴实强 1.新增生产订单时候查询工序接口传参修改

---
 src/views/basicData/product/ProductSelectDialog.vue |   80 ++++++++++++++++++++++++++--------------
 1 files changed, 52 insertions(+), 28 deletions(-)

diff --git a/src/views/basicData/product/ProductSelectDialog.vue b/src/views/basicData/product/ProductSelectDialog.vue
index ded23cc..358e6e4 100644
--- a/src/views/basicData/product/ProductSelectDialog.vue
+++ b/src/views/basicData/product/ProductSelectDialog.vue
@@ -18,7 +18,7 @@
     <!-- 鍒楄〃 -->
     <el-table ref="tableRef" v-loading="loading" :data="tableData" height="420" highlight-current-row row-key="id"
       @selection-change="handleSelectionChange" @select="handleSelect">
-      <el-table-column type="selection" width="55" />
+      <el-table-column type="selection" width="55" :reserve-selection="true" />
       <el-table-column type="index" label="搴忓彿" width="60" />
       <el-table-column prop="productName" label="浜у搧澶х被" min-width="160" />
       <el-table-column prop="model" label="鍨嬪彿鍚嶇О" min-width="200" />
@@ -54,7 +54,7 @@
 
 const props = defineProps<{
   modelValue: boolean;
-  single?: boolean; // 鏄惁鍙兘閫夋嫨涓�涓紝榛樿false锛堝彲閫夋嫨澶氫釜锛�
+  single?: boolean;
 }>();
 
 const emit = defineEmits(['update:modelValue', 'confirm']);
@@ -78,46 +78,68 @@
 const tableData = ref<ProductRow[]>([]);
 const total = ref(0);
 const multipleSelection = ref<ProductRow[]>([]);
+const selectedMap = ref<Map<number, ProductRow>>(new Map());
 const tableRef = ref();
 
 function close() {
   visible.value = false;
 }
 
+function syncCurrentPageSelection() {
+  nextTick(() => {
+    if (!tableRef.value) {
+      return;
+    }
+
+    tableData.value.forEach((item) => {
+      tableRef.value.toggleRowSelection(item, selectedMap.value.has(item.id));
+    });
+  });
+}
+
 const handleSelectionChange = (val: ProductRow[]) => {
   if (props.single && val.length > 1) {
-    // 濡傛灉闄愬埗涓哄崟涓�夋嫨锛屽彧淇濈暀鏈�鍚庝竴涓�変腑鐨�
     const lastSelected = val[val.length - 1];
     multipleSelection.value = [lastSelected];
-    // 娓呯┖琛ㄦ牸閫変腑鐘舵�侊紝鐒跺悗閲嶆柊閫変腑鏈�鍚庝竴涓�
+    selectedMap.value = new Map(lastSelected ? [[lastSelected.id, lastSelected]] : []);
     nextTick(() => {
       if (tableRef.value) {
         tableRef.value.clearSelection();
-        tableRef.value.toggleRowSelection(lastSelected, true);
+        if (lastSelected) {
+          tableRef.value.toggleRowSelection(lastSelected, true);
+        }
       }
     });
-  } else {
-    multipleSelection.value = val;
+    return;
   }
+
+  const currentPageIds = new Set(tableData.value.map((item) => item.id));
+  currentPageIds.forEach((id) => {
+    selectedMap.value.delete(id);
+  });
+  val.forEach((item) => {
+    selectedMap.value.set(item.id, item);
+  });
+  multipleSelection.value = Array.from(selectedMap.value.values());
 }
 
-// 澶勭悊鍗曚釜閫夋嫨
 const handleSelect = (selection: ProductRow[], row: ProductRow) => {
-  if (props.single) {
-    // 濡傛灉闄愬埗涓哄崟涓紝娓呯┖鍏朵粬閫夋嫨锛屽彧淇濈暀褰撳墠琛�
-    if (selection.includes(row)) {
-      // 閫変腑褰撳墠琛屾椂锛屾竻绌哄叾浠栭�変腑
-      multipleSelection.value = [row];
-      nextTick(() => {
-        if (tableRef.value) {
-          tableData.value.forEach((item) => {
-            if (item.id !== row.id) {
-              tableRef.value.toggleRowSelection(item, false);
-            }
-          });
-        }
-      });
-    }
+  if (!props.single) {
+    return;
+  }
+
+  if (selection.includes(row)) {
+    multipleSelection.value = [row];
+    selectedMap.value = new Map([[row.id, row]]);
+    nextTick(() => {
+      if (tableRef.value) {
+        tableData.value.forEach((item) => {
+          if (item.id !== row.id) {
+            tableRef.value.toggleRowSelection(item, false);
+          }
+        });
+      }
+    });
   }
 }
 
@@ -139,7 +161,7 @@
 
 function onConfirm() {
   if (multipleSelection.value.length === 0) {
-    ElMessage.warning("璇烽�夋嫨涓�鏉′骇鍝�");
+    ElMessage.warning("璇烽�夋嫨浜у搧");
     return;
   }
   if (props.single && multipleSelection.value.length > 1) {
@@ -153,24 +175,26 @@
 async function loadData() {
   loading.value = true;
   try {
-    multipleSelection.value = []; // 缈婚〉/鎼滅储鍚庢竻绌洪�夋嫨鏇寸鍚堥鏈�
     const res: any = await productModelList({
       productName: query.productName.trim(),
       model: query.model.trim(),
       current: page.pageNum,
       size: page.pageSize,
     });
-    tableData.value = res.records;
-    total.value = res.total;
+    tableData.value = res.records || [];
+    total.value = res.total || 0;
+    syncCurrentPageSelection();
   } finally {
     loading.value = false;
   }
 }
 
-// 鐩戝惉寮圭獥鎵撳紑锛岄噸缃�夋嫨
 watch(() => props.modelValue, (visible) => {
   if (visible) {
     multipleSelection.value = [];
+    selectedMap.value = new Map();
+    page.pageNum = 1;
+    loadData();
   }
 });
 

--
Gitblit v1.9.3