From c7ce945f641824eb72d47a5f5b4ccc976d951e78 Mon Sep 17 00:00:00 2001 From: hwj Date: Tue, 26 May 2026 16:48:45 +0800 Subject: [PATCH] =?UTF-8?q?style=EF=BC=9A=E8=AE=BE=E5=A4=87=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6-=E7=BC=96=E8=BE=91-=E5=A4=87=E4=BB=B6/=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E4=BB=B6=E5=9B=9E=E6=98=BE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/deviceledger/DeviceLedgerForm.vue | 85 ++++++++++++++----- 1 file changed, 63 insertions(+), 22 deletions(-) diff --git a/src/views/mes/deviceledger/DeviceLedgerForm.vue b/src/views/mes/deviceledger/DeviceLedgerForm.vue index d62276d0..424a5ca8 100644 --- a/src/views/mes/deviceledger/DeviceLedgerForm.vue +++ b/src/views/mes/deviceledger/DeviceLedgerForm.vue @@ -568,8 +568,48 @@ watch( const treeSelectProps = { label: 'name', children: 'children' } const deviceTypeTree = ref([]) const users = ref([]) -const criticalComponentOptions = ref<{ label: string; value: number }[]>([]) -const beijianOptions = ref<{ label: string; value: number }[]>([]) +type SelectionOption = { label: string; value: number } +const criticalComponentOptions = ref([]) +const beijianOptions = ref([]) +const savedCriticalComponentOptions = ref([]) +const savedBeijianOptions = ref([]) +const buildCriticalComponentOptions = (items: any[] = []): SelectionOption[] => + (items ?? []) + .map((item: any) => { + const id = normalizeNumberish(item?.id) + if (id === undefined) return undefined + const code = item.code ? String(item.code) : '' + const name = item.name ? String(item.name) : '' + const label = code && name ? `${code}-${name}` : name || code || String(id) + return { label, value: id } + }) + .filter((item): item is SelectionOption => Boolean(item)) +const buildBeijianOptions = (items: any[] = []): SelectionOption[] => + (items ?? []) + .map((item: any) => { + const id = normalizeNumberish(item?.id) + if (id === undefined) return undefined + const code = item.barCode ? String(item.barCode) : '' + const name = item.name ? String(item.name) : '' + const label = code && name ? `${code}-${name}` : name || code || String(id) + return { label, value: id } + }) + .filter((item): item is SelectionOption => Boolean(item)) +const mergeSelectionOptions = (...groups: SelectionOption[][]): SelectionOption[] => { + const optionMap = new Map() + groups.flat().forEach((item) => optionMap.set(item.value, item)) + return Array.from(optionMap.values()) +} +const filterValidSelectedIds = (selectedIds: any[], options: SelectionOption[]) => { + const validIds = new Set(options.map((item) => item.value)) + return Array.from( + new Set( + (selectedIds ?? []) + .map((id) => normalizeNumberish(id)) + .filter((id): id is number => id !== undefined && validIds.has(id)) + ) + ) +} const criticalComponentTransferData = computed(() => criticalComponentOptions.value.map((item) => ({ key: item.value, label: item.label })) ) @@ -591,10 +631,13 @@ const formatSelectedSummary = (ids: number[], options: { label: string; value: n } const criticalComponentDisplay = computed(() => - formatSelectedSummary(formData.value.componentIds ?? [], criticalComponentOptions.value) + formatSelectedSummary( + formData.value.componentIds ?? [], + mergeSelectionOptions(criticalComponentOptions.value, savedCriticalComponentOptions.value) + ) ) const beijianDisplay = computed(() => - formatSelectedSummary(formData.value.beijianIds ?? [], beijianOptions.value) + formatSelectedSummary(formData.value.beijianIds ?? [], mergeSelectionOptions(beijianOptions.value, savedBeijianOptions.value)) ) const clearCriticalComponent = () => { @@ -607,30 +650,30 @@ const clearBeijian = () => { const openCriticalComponentDialog = () => { criticalComponentDraft.value = [...(formData.value.componentIds ?? [])] criticalComponentDialogVisible.value = true - ids.value = formData.value.componentIds + ids.value = [...(formData.value.componentIds ?? [])] setDefaultSelections() } const openBeijianDialog = () => { beijianDraft.value = [...(formData.value.beijianIds ?? [])] beijianDialogVisible.value = true - bjIds.value = formData.value.beijianIds + bjIds.value = [...(formData.value.beijianIds ?? [])] setBJDefaultSelections() } -const ids = ref([]) +const ids = ref([]) const confirmCriticalComponentDialog = () => { //let ids = selectedRows.value.map(item => item.id); //const validMap = new Set(criticalComponentOptions.value.map((item) => item.value)) //const selected = Array.from(new Set(criticalComponentDraft.value.map((v) => Number(v)).filter((v) => validMap.has(v)))) - formData.value.componentIds = ids.value + formData.value.componentIds = filterValidSelectedIds(ids.value, criticalComponentOptions.value) criticalComponentDialogVisible.value = false //multipleTableRef.value.clearSelection() } -const bjIds = ref([]) +const bjIds = ref([]) const confirmBeijianDialog = () => { // let ids = bjSelectedRows.value.map(item => item.id); /* const validMap = new Set(beijianOptions.value.map((item) => item.value)) const selected = Array.from(new Set(beijianDraft.value.map((v) => Number(v)).filter((v) => validMap.has(v))))*/ - formData.value.beijianIds = bjIds.value + formData.value.beijianIds = filterValidSelectedIds(bjIds.value, beijianOptions.value) beijianDialogVisible.value = false //multipleTableRef.value.clearSelection() } @@ -681,18 +724,8 @@ const ensureOptionsLoaded = async () => { ]) deviceTypeTree.value = deviceTypeRes users.value = userRes ?? [] - criticalComponentOptions.value = (criticalRes ?? []).map((item: any) => { - const code = item.code ? String(item.code) : '' - const name = item.name ? String(item.name) : '' - const label = code && name ? `${code}-${name}` : name || code || String(item.id) - return { label, value: Number(item.id) } - }) - beijianOptions.value = (beijianRes ?? []).map((item: any) => { - const code = item.barCode ? String(item.barCode) : '' - const name = item.name ? String(item.name) : '' - const label = code && name ? `${code}-${name}` : name || code || String(item.id) - return { label, value: Number(item.id) } - }) + criticalComponentOptions.value = buildCriticalComponentOptions(criticalRes ?? []) + beijianOptions.value = buildBeijianOptions(beijianRes ?? []) } /** 打开弹窗 */ @@ -733,6 +766,8 @@ const open = async (type: string, id?: number, defaultDeviceTypeId?: number, def beijianIds: parseIdsValue((detail as any)?.beijianId), qrcodeUrl: (detail as any)?.qrcodeUrl, } + savedCriticalComponentOptions.value = buildCriticalComponentOptions((detail as any)?.componentList ?? []) + savedBeijianOptions.value = buildBeijianOptions((detail as any)?.beijianList ?? []) } finally { formLoading.value = false } @@ -1061,6 +1096,12 @@ const setBJDefaultSelections = () => { const resetForm = () => { fileUploading.value = false formData.value = initFormData() + savedCriticalComponentOptions.value = [] + savedBeijianOptions.value = [] + ids.value = [] + bjIds.value = [] + selectedRows.value = [] + bjSelectedRows.value = [] formRef.value?.resetFields() }