From add86852b44af3dfb55c70c4d7b3ea9bb4fca227 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 15 四月 2026 17:41:20 +0800
Subject: [PATCH] 中兴实强 1.新增工艺路线的时候产品可以多选 2.绑定工艺路线时,可以删减工序并且每道工序可以多选报工人 3.报工列表展示报工人,非本订单报工人不可报工 其他
---
src/views/basicData/product/ProductSelectDialog.vue | 82 ++++++++++++++++++++++++++--------------
1 files changed, 53 insertions(+), 29 deletions(-)
diff --git a/src/views/basicData/product/ProductSelectDialog.vue b/src/views/basicData/product/ProductSelectDialog.vue
index 70dbb16..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" />
@@ -32,10 +32,10 @@
</div>
<template #footer>
- <el-button @click="close()">鍙栨秷</el-button>
<el-button type="primary" :disabled="multipleSelection.length === 0" @click="onConfirm">
纭畾
</el-button>
+ <el-button @click="close()">鍙栨秷</el-button>
</template>
</el-dialog>
</template>
@@ -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