| | |
| | | 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); |
| | |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | }, |
| | | } as VxeTableGridOptions<MesMdItemApi.Item>, |
| | | gridEvents: { |
| | | cellClick: handleCellClick, |
| | | cellDblclick: handleCellDblclick, |
| | | checkboxAll: handleCheckboxSelectChange, |
| | | checkboxChange: handleCheckboxSelectChange, |