From 1a18bfbeeeb42c118cef061ff8dd383c708826aa Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 13 三月 2026 16:31:14 +0800
Subject: [PATCH] fix: 设备保养:可以在app上面进行设备保养计划新增,可多选设备(不需要设备编号),计划新增后,需定时生成多条任务(根据选择的多个设备生成多个任务)

---
 src/views/equipmentManagement/upkeep/Form/formDia.vue |   85 ++++++++++++++++++++++++++++--------------
 1 files changed, 56 insertions(+), 29 deletions(-)

diff --git a/src/views/equipmentManagement/upkeep/Form/formDia.vue b/src/views/equipmentManagement/upkeep/Form/formDia.vue
index 66bf067..8b30fb7 100644
--- a/src/views/equipmentManagement/upkeep/Form/formDia.vue
+++ b/src/views/equipmentManagement/upkeep/Form/formDia.vue
@@ -11,8 +11,19 @@
 		<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
 			<el-row>
 				<el-col :span="12">
-					<el-form-item label="璁惧鍚嶇О" prop="taskId">
-						<el-select v-model="form.taskId" @change="setDeviceModel" filterable>
+					<el-form-item label="浠诲姟鍚嶇О" prop="taskName">
+						<el-input v-model="form.taskName" placeholder="璇疯緭鍏ヤ换鍔″悕绉�" clearable />
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="璁惧鍚嶇О" prop="deviceIds">
+						<el-select
+							v-model="form.deviceIds"
+							multiple
+							filterable
+							placeholder="璇烽�夋嫨璁惧"
+							@change="handleDeviceChange"
+						>
 							<el-option
 								v-for="(item, index) in deviceOptions"
 								:key="index"
@@ -22,17 +33,7 @@
 						</el-select>
 					</el-form-item>
 				</el-col>
-				<el-col :span="12">
-					<el-form-item label="瑙勬牸鍨嬪彿">
-						<el-input
-							v-model="form.deviceModel"
-							placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
-							disabled
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
+				
 				<el-col :span="12">
 					<el-form-item label="褰曞叆浜�" prop="inspector">
 						<el-select
@@ -151,7 +152,8 @@
 const data = reactive({
 	form: {
 		taskId: undefined,
-		taskName: undefined,
+		deviceIds: [],
+		taskName: "",
 		// 褰曞叆浜猴細鍗曢�変竴涓敤鎴� id
 		inspector: undefined,
 		remarks: '',
@@ -163,7 +165,8 @@
 		registrationDate: ''
 	},
 	rules: {
-		taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" },],
+		deviceIds: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" }],
+		taskName: [{ required: true, message: "璇疯緭鍏ヤ换鍔″悕绉�", trigger: "blur" }],
 		inspector: [{ required: true, message: "璇烽�夋嫨褰曞叆浜�", trigger: "blur" },],
 		registrationDate: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }]
 	}
@@ -176,14 +179,32 @@
 	deviceOptions.value = data;
 };
 
-// 閫夋嫨璁惧鏃讹紝鍥炲~璁惧鍚嶇О(taskName)鍜岃鏍煎瀷鍙�(deviceModel)
-const setDeviceModel = (id) => {
-	const option = deviceOptions.value.find((item) => item.id === id);
-	if (option) {
-		form.value.taskId = option.id;
-		form.value.taskName = option.deviceName;
-		form.value.deviceModel = option.deviceModel;
+const normalizeIdList = (val) => {
+	if (!val) return []
+	if (Array.isArray(val)) return val
+	if (typeof val === 'string') {
+		const s = val.trim()
+		// JSON 瀛楃涓诧細"[1,2,3]"
+		if (s.startsWith('[') && s.endsWith(']')) {
+			try {
+				const arr = JSON.parse(s)
+				return Array.isArray(arr) ? arr : []
+			} catch {
+				return []
+			}
+		}
+		// 閫楀彿鍒嗛殧锛�"1,2,3"
+		return s.split(',').map(v => v.trim()).filter(Boolean)
 	}
+	return []
+}
+
+// 閫夋嫨璁惧鏃讹紝椤哄甫鍥炲~瑙勬牸鍨嬪彿锛堝閫夋椂鍙栫涓�涓澶囩殑瑙勬牸鍨嬪彿锛�
+const handleDeviceChange = () => {
+	const selectedIds = form.value.deviceIds || []
+	const firstId = Array.isArray(selectedIds) ? selectedIds[0] : undefined
+	const firstDevice = deviceOptions.value.find(d => String(d.id) === String(firstId))
+	form.value.deviceModel = firstDevice?.deviceModel || firstDevice?.model || form.value.deviceModel
 }
 
 // 鎵撳紑寮规
@@ -203,16 +224,19 @@
 	await loadDeviceName();
 	
 	if (type === 'edit' && row) {
-		form.value = { ...row }
+		form.value = { ...form.value, ...row }
 		// 缂栬緫鏃剁敤鎺ュ彛杩斿洖鐨� registrantId 鍥炴樉褰曞叆浜�
 		if (row.registrantId) {
 			form.value.inspector = row.registrantId
 		}
 
-		// 濡傛灉鏈夎澶嘔D锛岃嚜鍔ㄨ缃澶囦俊鎭�
-		if (form.value.taskId) {
-			setDeviceModel(form.value.taskId);
-		}
+		// 缂栬緫鍥炴樉锛歞eviceIds 鍙兘鏄� JSON 瀛楃涓� / 閫楀彿鍒嗛殧 / 鏁扮粍
+		const ids = normalizeIdList(row.deviceIds ?? row.taskIds)
+		form.value.deviceIds = ids.map(v => {
+			const n = Number(v)
+			return Number.isNaN(n) ? v : n
+		})
+		handleDeviceChange()
 	} else if (type === 'add') {
 		// 鏂板鏃惰缃櫥璁版棩鏈熶负褰撳ぉ
 		form.value.registrationDate = getCurrentDate();
@@ -236,8 +260,8 @@
 	// 閲嶇疆琛ㄥ崟鏁版嵁纭繚璁惧淇℃伅姝g‘閲嶇疆
 	form.value = {
 		taskId: undefined,
-		taskName: undefined,
-		inspector: undefined,
+		deviceIds: [],
+		taskName: "",
 		inspector: undefined,
 		remarks: '',
 		frequencyType: '',
@@ -255,6 +279,8 @@
 		if (valid) {
 			try {
 				const payload = { ...form.value }
+				// 鍚庣瑕佹眰锛歞eviceIds 浠� JSON.stringify([1,2,3]) 褰㈠紡浼犲弬
+				payload.deviceIds = JSON.stringify(form.value.deviceIds || [])
 				// 涓嶅啀鍚戝悗绔紶淇濆吇浜哄瓧娈碉紝浠呬娇鐢ㄦ帴鍙h姹傜殑 registrant / registrantId
 				// 鏍规嵁閫夋嫨鐨�"褰曞叆浜�"璁剧疆 registrant / registrantId
 				if (payload.inspector) {
@@ -268,6 +294,7 @@
 				}
 				delete payload.inspector
 				delete payload.inspectorIds
+				delete payload.taskIds
 				
 				if (payload.frequencyType === 'WEEKLY') {
 					let frequencyDetail = ''

--
Gitblit v1.9.3