From 93f84dd379ce65762620a5bb6660583e34a4e2e5 Mon Sep 17 00:00:00 2001 From: hwj Date: Fri, 10 Apr 2026 14:36:32 +0800 Subject: [PATCH] =?UTF-8?q?style=EF=BC=9A=E4=BB=BB=E5=8A=A1=E5=8D=95?= =?UTF-8?q?=E6=8E=92=E4=BA=A7=E5=AD=97=E6=AE=B5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TableSelectDialog/TableSelectDialog.vue | 32 ++- src/locales/en.ts | 1 + src/locales/zh-CN.ts | 1 + src/views/mes/plan/PlanForm.vue | 219 ++++++++++++------ src/views/mes/plan/index.vue | 2 +- .../components/TaskScheduleDialog.vue | 1 - src/views/mes/tasksummary/index.vue | 6 +- 7 files changed, 191 insertions(+), 71 deletions(-) diff --git a/src/components/TableSelectDialog/TableSelectDialog.vue b/src/components/TableSelectDialog/TableSelectDialog.vue index 4e278809..1866a348 100644 --- a/src/components/TableSelectDialog/TableSelectDialog.vue +++ b/src/components/TableSelectDialog/TableSelectDialog.vue @@ -9,6 +9,7 @@ :show-overflow-tooltip="true" :stripe="true" @selection-change="handleSelectionChange" + @row-click="handleRowClick" > ) => Promise<{ list: any[]; total: number }> + selectionType?: 'single' | 'multiple' rowKey?: string pageSize?: number initialRows?: any[] }>(), { + selectionType: 'multiple', rowKey: 'id', pageSize: 10, initialRows: () => [] @@ -79,6 +82,7 @@ const queryParams = reactive({ }) const selectedMap = ref(new Map()) const syncingSelection = ref(false) +const isSingleSelect = computed(() => props.selectionType === 'single') const resolveRowKey = (row: Record) => row[props.rowKey] @@ -115,6 +119,15 @@ const getList = async () => { const handleSelectionChange = (rows: any[]) => { if (syncingSelection.value) return + if (isSingleSelect.value) { + selectedMap.value.clear() + const latestRow = rows.length ? rows[rows.length - 1] : undefined + if (latestRow) { + selectedMap.value.set(resolveRowKey(latestRow), latestRow) + } + void refreshSelectionOnTable() + return + } const pageIdSet = new Set(list.value.map((item) => resolveRowKey(item))) pageIdSet.forEach((id) => { selectedMap.value.delete(id) @@ -124,9 +137,26 @@ const handleSelectionChange = (rows: any[]) => { }) } +const handleRowClick = (row: any) => { + if (!isSingleSelect.value) return + const table = tableRef.value + if (!table) return + syncingSelection.value = true + try { + table.clearSelection() + table.toggleRowSelection(row, true) + } finally { + syncingSelection.value = false + } + selectedMap.value.clear() + selectedMap.value.set(resolveRowKey(row), row) +} + const open = async (rows?: any[]) => { selectedMap.value.clear() - ;(rows || props.initialRows).forEach((row) => { + const initialRows = rows || props.initialRows + const nextRows = isSingleSelect.value ? initialRows.slice(0, 1) : initialRows + nextRows.forEach((row) => { selectedMap.value.set(resolveRowKey(row), row) }) queryParams.pageNo = 1 diff --git a/src/locales/en.ts b/src/locales/en.ts index 2a82872d..c3a7c925 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -3484,6 +3484,7 @@ export default { tableCodeColumn: 'Plan Code', tableProductColumn: 'Product', + tableDeviceNameColumn: 'Device Name', tableFeedingPipelineColumn: 'Production Line', tablePlanNumberColumn: 'Planned Qty', tableFinishNumberColumn: 'Finished Qty', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 622deb0f..4fe62873 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -3321,6 +3321,7 @@ export default { tableCodeColumn: '计划编码', tableProductColumn: '产品', + tableDeviceNameColumn: '设备名称', tableFeedingPipelineColumn: '生产线', tablePlanNumberColumn: '计划数量', tableFinishNumberColumn: '完工数量', diff --git a/src/views/mes/plan/PlanForm.vue b/src/views/mes/plan/PlanForm.vue index 4566e8b5..1e44dbb4 100644 --- a/src/views/mes/plan/PlanForm.vue +++ b/src/views/mes/plan/PlanForm.vue @@ -4,7 +4,7 @@ ref="formRef" :model="formData" :rules="formRules" - label-width="100px" + label-width="110px" v-loading="formLoading" > @@ -68,30 +68,8 @@ - - - - - - - + + @@ -110,6 +88,14 @@ + + + @@ -145,6 +131,16 @@ class="!w-full" /> + + + - + diff --git a/src/views/mes/tasksummary/components/TaskScheduleDialog.vue b/src/views/mes/tasksummary/components/TaskScheduleDialog.vue index 320bdaa8..2f69e8db 100644 --- a/src/views/mes/tasksummary/components/TaskScheduleDialog.vue +++ b/src/views/mes/tasksummary/components/TaskScheduleDialog.vue @@ -483,7 +483,6 @@ const handleSubmit = async () => { isCode: true, planStartTime: new Date().getTime(), planEndTime: new Date().getTime(), - reyaNumber: planNumber, productCode: row.barCode, // Image fields diff --git a/src/views/mes/tasksummary/index.vue b/src/views/mes/tasksummary/index.vue index a1977b03..19927971 100644 --- a/src/views/mes/tasksummary/index.vue +++ b/src/views/mes/tasksummary/index.vue @@ -74,7 +74,7 @@ v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" hi :formatter="dateFormatter2" sortable /> + prop="deliveryDate" :formatter="deliveryDateFormatter" sortable />