From a7dc7b230fcc6abc6ee5a7bfadb90789b03d2ca8 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 07 九月 2026 16:45:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0
---
src/views/mes/md/item/components/select-dialog.vue | 79 +++++++++++++++++++++++++++++++++------
1 files changed, 67 insertions(+), 12 deletions(-)
diff --git a/src/views/mes/md/item/components/select-dialog.vue b/src/views/mes/md/item/components/select-dialog.vue
index 30622bf..61f3fd1 100644
--- a/src/views/mes/md/item/components/select-dialog.vue
+++ b/src/views/mes/md/item/components/select-dialog.vue
@@ -5,7 +5,7 @@
import { nextTick, ref } from "vue";
- import { CommonStatusEnum } from "../../../../../packages/constants/src";
+ import { CommonStatusEnum } from "@vben/constants";
import { Card, message, Modal } from "ant-design-vue";
@@ -26,6 +26,7 @@
const selectedRows = ref<MesMdItemApi.Item[]>([]); // 宸查�夌墿鏂欏垪琛�
const selectedItemTypeId = ref<number>(); // 褰撳墠绛涢�夊垎绫荤紪鍙�
const preSelectedIds = ref<number[]>([]); // 棰勯�夌墿鏂欑紪鍙峰垪琛�
+ const productIds = ref<number[]>([]); // 闄愬畾鍙�夌殑鐗╂枡缂栧彿鍒楄〃锛堜负绌哄垯涓嶉檺鍒讹級
const typeTreeRef = ref<InstanceType<typeof MdItemTypeTree>>(); // 鐗╂枡鍒嗙被鏍�
/** 鑾峰彇褰撳墠琛ㄦ牸鏁版嵁 */
@@ -66,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);
@@ -83,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) {
@@ -106,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();
}
}
@@ -130,13 +175,21 @@
proxyConfig: {
ajax: {
query: async ({ page }, formValues) => {
- return await getItemPage({
+ const params: Record<string, unknown> = {
pageNo: page.currentPage,
pageSize: page.pageSize,
...formValues,
itemTypeId: selectedItemTypeId.value,
status: CommonStatusEnum.ENABLE,
- });
+ };
+ // 闄愬畾鍙�夌墿鏂欒寖鍥�
+ if (productIds.value.length > 0) {
+ // 鍚庣鍒嗛〉姣忛〉鏉℃暟涓婇檺涓� 200锛岀櫧鍚嶅崟鍦烘櫙涓�娆℃媺鍙栧敖閲忓鐨勫彲閫夌墿鏂�
+ params.pageSize = 200;
+ params.ids = productIds.value.join(',');
+ }
+ const result = await getItemPage(params as never);
+ return result;
},
},
},
@@ -150,6 +203,7 @@
},
} as VxeTableGridOptions<MesMdItemApi.Item>,
gridEvents: {
+ cellClick: handleCellClick,
cellDblclick: handleCellDblclick,
checkboxAll: handleCheckboxSelectChange,
checkboxChange: handleCheckboxSelectChange,
@@ -173,11 +227,12 @@
/** 鎵撳紑鐗╂枡閫夋嫨寮圭獥 */
async function openModal(
selectedIds?: number[],
- options?: { multiple?: boolean }
+ options?: { multiple?: boolean; productIds?: number[] }
) {
open.value = true;
multiple.value = options?.multiple ?? true;
preSelectedIds.value = selectedIds || [];
+ productIds.value = options?.productIds || [];
await nextTick();
gridApi.setGridOptions({
columns: useItemSelectGridColumns(multiple.value),
--
Gitblit v1.9.3