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-select
v-model="formData.deviceId"
multiple
collapse-tags
collapse-tags-tooltip
filterable
remote
reserve-keyword
@ -113,7 +116,7 @@ const formData = ref({
subjectCode: undefined as string | undefined,
subjectName: undefined as string | undefined,
deviceType: undefined as number | undefined,
deviceId: undefined as number | undefined,
deviceId: undefined as number | number[] | undefined,
componentId: undefined as number | undefined,
inspectionMethod: undefined as string | undefined,
valueType: undefined as string | undefined,
@ -179,7 +182,7 @@ watch(
async () => {
if (isInitializing.value) return
isSwitchingDeviceType.value = true
formData.value.deviceId = undefined
formData.value.deviceId = formData.value.deviceType === 1 ? [] : undefined
deviceOptions.value = []
formData.value.componentId = undefined
componentOptions.value = []
@ -195,8 +198,9 @@ watch(
if (formData.value.deviceType !== 2) return
formData.value.componentId = undefined
componentOptions.value = []
if (typeof deviceId !== 'number') return
await loadComponentOptionsByDeviceId(deviceId)
const selectedId = typeof deviceId === 'number' ? deviceId : undefined
if (typeof selectedId !== 'number') return
await loadComponentOptionsByDeviceId(selectedId)
}
)
@ -206,7 +210,16 @@ const validateDeviceId = (_: any, value: any, callback: any) => {
return
}
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')))
return
}
@ -246,12 +259,24 @@ const open = async (type: string, row?: any) => {
dictReady.value = true
}
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 = {
id: row.id,
subjectCode: row.subjectCode,
subjectName: row.subjectName,
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,
inspectionMethod: row.inspectionMethod !== undefined && row.inspectionMethod !== null ? String(row.inspectionMethod) : 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
}
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}`
deviceOptions.value = upsertOption(deviceOptions.value, { label, value: formData.value.deviceId })
}
@ -284,12 +316,16 @@ const submitForm = async () => {
await formRef.value.validate()
formLoading.value = true
try {
const buildDeviceIdParam = () => {
if (Array.isArray(formData.value.deviceId)) return formData.value.deviceId.join(',')
return formData.value.deviceId
}
const data = {
id: formType.value === 'update' ? formData.value.id : undefined,
subjectCode: formData.value.subjectCode,
subjectName: formData.value.subjectName,
deviceType: formData.value.deviceType,
deviceId: formData.value.deviceId,
deviceId: buildDeviceIdParam(),
componentId: formData.value.componentId,
inspectionMethod: formData.value.inspectionMethod,
valueType: formData.value.valueType,

Loading…
Cancel
Save