style:设备管理-维修项目-新增/编辑-设备多选

main
黄伟杰 2 weeks ago
parent 6fb870f5a0
commit 1110c22a03

@ -22,6 +22,9 @@
<el-form-item v-if="showDeviceSelect" :label="t('EquipmentManagement.RepairItems.device')" prop="deviceId"> <el-form-item v-if="showDeviceSelect" :label="t('EquipmentManagement.RepairItems.device')" prop="deviceId">
<el-select <el-select
v-model="formData.deviceId" v-model="formData.deviceId"
multiple
collapse-tags
collapse-tags-tooltip
filterable filterable
remote remote
reserve-keyword reserve-keyword
@ -113,7 +116,7 @@ const formData = ref({
subjectCode: undefined as string | undefined, subjectCode: undefined as string | undefined,
subjectName: undefined as string | undefined, subjectName: undefined as string | undefined,
deviceType: undefined as number | undefined, deviceType: undefined as number | undefined,
deviceId: undefined as number | undefined, deviceId: undefined as number | number[] | undefined,
componentId: undefined as number | undefined, componentId: undefined as number | undefined,
inspectionMethod: undefined as string | undefined, inspectionMethod: undefined as string | undefined,
valueType: undefined as string | undefined, valueType: undefined as string | undefined,
@ -179,7 +182,7 @@ watch(
async () => { async () => {
if (isInitializing.value) return if (isInitializing.value) return
isSwitchingDeviceType.value = true isSwitchingDeviceType.value = true
formData.value.deviceId = undefined formData.value.deviceId = formData.value.deviceType === 1 ? [] : undefined
deviceOptions.value = [] deviceOptions.value = []
formData.value.componentId = undefined formData.value.componentId = undefined
componentOptions.value = [] componentOptions.value = []
@ -195,8 +198,9 @@ watch(
if (formData.value.deviceType !== 2) return if (formData.value.deviceType !== 2) return
formData.value.componentId = undefined formData.value.componentId = undefined
componentOptions.value = [] componentOptions.value = []
if (typeof deviceId !== 'number') return const selectedId = typeof deviceId === 'number' ? deviceId : undefined
await loadComponentOptionsByDeviceId(deviceId) if (typeof selectedId !== 'number') return
await loadComponentOptionsByDeviceId(selectedId)
} }
) )
@ -206,7 +210,16 @@ const validateDeviceId = (_: any, value: any, callback: any) => {
return return
} }
const dt = formData.value.deviceType const dt = formData.value.deviceType
if ((dt === 1 || dt === 2) && (value === undefined || value === null || value === '')) { if (dt === 1) {
const ids = Array.isArray(value) ? value : []
if (!ids.length) {
callback(new Error(t('EquipmentManagement.RepairItems.validatorDeviceRequired')))
return
}
callback()
return
}
if (dt === 2 && (value === undefined || value === null || value === '')) {
callback(new Error(t('EquipmentManagement.RepairItems.validatorDeviceRequired'))) callback(new Error(t('EquipmentManagement.RepairItems.validatorDeviceRequired')))
return return
} }
@ -246,12 +259,24 @@ const open = async (type: string, row?: any) => {
dictReady.value = true dictReady.value = true
} }
if (type === 'update' && row) { if (type === 'update' && row) {
const parseDeviceIds = (input: unknown) => {
if (input === undefined || input === null || input === '') return []
if (Array.isArray(input)) return input.map((v) => Number(v)).filter((v) => !Number.isNaN(v))
if (typeof input === 'number') return [input]
return String(input)
.split(',')
.map((v) => Number(v.trim()))
.filter((v) => !Number.isNaN(v))
}
const deviceIds = parseDeviceIds(row.deviceId)
formData.value = { formData.value = {
id: row.id, id: row.id,
subjectCode: row.subjectCode, subjectCode: row.subjectCode,
subjectName: row.subjectName, subjectName: row.subjectName,
deviceType: row.deviceType !== undefined && row.deviceType !== null ? Number(row.deviceType) : undefined, deviceType: row.deviceType !== undefined && row.deviceType !== null ? Number(row.deviceType) : undefined,
deviceId: row.deviceId !== undefined && row.deviceId !== null ? Number(row.deviceId) : undefined, deviceId: (row.deviceType !== undefined && row.deviceType !== null ? Number(row.deviceType) : undefined) === 1
? deviceIds
: deviceIds[0],
componentId: row.componentId !== undefined && row.componentId !== null ? Number(row.componentId) : undefined, componentId: row.componentId !== undefined && row.componentId !== null ? Number(row.componentId) : undefined,
inspectionMethod: row.inspectionMethod !== undefined && row.inspectionMethod !== null ? String(row.inspectionMethod) : undefined, inspectionMethod: row.inspectionMethod !== undefined && row.inspectionMethod !== null ? String(row.inspectionMethod) : undefined,
valueType: row.valueType !== undefined && row.valueType !== null ? String(row.valueType) : undefined, valueType: row.valueType !== undefined && row.valueType !== null ? String(row.valueType) : undefined,
@ -260,7 +285,14 @@ const open = async (type: string, row?: any) => {
isEnable: row.isEnable !== undefined && row.isEnable !== null ? String(row.isEnable) : undefined isEnable: row.isEnable !== undefined && row.isEnable !== null ? String(row.isEnable) : undefined
} }
if (typeof formData.value.deviceId === 'number') { if (formData.value.deviceType === 1) {
const ids = Array.isArray(formData.value.deviceId) ? formData.value.deviceId : []
const nameParts = row.deviceName ? String(row.deviceName).split(/[,]/).map((v) => v.trim()).filter(Boolean) : []
ids.forEach((id, idx) => {
const label = nameParts[idx] ? String(nameParts[idx]) : `ID:${id}`
deviceOptions.value = upsertOption(deviceOptions.value, { label, value: id })
})
} else if (typeof formData.value.deviceId === 'number') {
const label = row.deviceName ? String(row.deviceName) : `ID:${formData.value.deviceId}` const label = row.deviceName ? String(row.deviceName) : `ID:${formData.value.deviceId}`
deviceOptions.value = upsertOption(deviceOptions.value, { label, value: formData.value.deviceId }) deviceOptions.value = upsertOption(deviceOptions.value, { label, value: formData.value.deviceId })
} }
@ -284,12 +316,16 @@ const submitForm = async () => {
await formRef.value.validate() await formRef.value.validate()
formLoading.value = true formLoading.value = true
try { try {
const buildDeviceIdParam = () => {
if (Array.isArray(formData.value.deviceId)) return formData.value.deviceId.join(',')
return formData.value.deviceId
}
const data = { const data = {
id: formType.value === 'update' ? formData.value.id : undefined, id: formType.value === 'update' ? formData.value.id : undefined,
subjectCode: formData.value.subjectCode, subjectCode: formData.value.subjectCode,
subjectName: formData.value.subjectName, subjectName: formData.value.subjectName,
deviceType: formData.value.deviceType, deviceType: formData.value.deviceType,
deviceId: formData.value.deviceId, deviceId: buildDeviceIdParam(),
componentId: formData.value.componentId, componentId: formData.value.componentId,
inspectionMethod: formData.value.inspectionMethod, inspectionMethod: formData.value.inspectionMethod,
valueType: formData.value.valueType, valueType: formData.value.valueType,

Loading…
Cancel
Save