From 6847437fc9ba23d19d2edcef846220a7176d69cc Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 21 四月 2026 14:21:27 +0800
Subject: [PATCH] 新疆马铃薯 1.设备巡检添加巡检状态和巡检结果展示 2.巡检记录添加时间查询条件

---
 src/views/equipmentManagement/upkeep/Form/formDia.vue |  747 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 466 insertions(+), 281 deletions(-)

diff --git a/src/views/equipmentManagement/upkeep/Form/formDia.vue b/src/views/equipmentManagement/upkeep/Form/formDia.vue
index 66bf067..01a2d6e 100644
--- a/src/views/equipmentManagement/upkeep/Form/formDia.vue
+++ b/src/views/equipmentManagement/upkeep/Form/formDia.vue
@@ -1,304 +1,489 @@
 <template>
-	<FormDialog
-		v-model="dialogVisitable"
-		:title="operationType === 'add' ? '鏂板淇濆吇浠诲姟' : '缂栬緫淇濆吇浠诲姟'"
-		width="800px"
-		:operation-type="operationType"
-		@confirm="submitForm"
-		@cancel="cancel"
-		@close="cancel"
-	>
-		<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-option
-								v-for="(item, index) in deviceOptions"
-								:key="index"
-								:label="item.deviceName"
-								:value="item.id"
-							></el-option>
-						</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
-							v-model="form.inspector"
-							filterable
-							default-first-option
-							:reserve-keyword="false"
-							placeholder="璇烽�夋嫨"
-							clearable
-						>
-							<el-option
-								v-for="item in userList"
-								:label="item.nickName"
-								:value="item.userId"
-								:key="item.userId"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="鐧昏鏃堕棿" prop="registrationDate">
-						<el-date-picker
-							v-model="form.registrationDate"
-							type="date"
-							placeholder="閫夋嫨鐧昏鏃ユ湡"
-							format="YYYY-MM-DD"
-							value-format="YYYY-MM-DD"
-							style="width: 100%"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="浠诲姟棰戠巼" prop="frequencyType">
-						<el-select v-model="form.frequencyType" placeholder="璇烽�夋嫨" clearable>
-							<el-option label="姣忔棩" value="DAILY"/>
-							<el-option label="姣忓懆" value="WEEKLY"/>
-							<el-option label="姣忔湀" value="MONTHLY"/>
-							<el-option label="瀛e害" value="QUARTERLY"/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12" v-if="form.frequencyType === 'DAILY' && form.frequencyType">
-					<el-form-item label="鏃ユ湡" prop="frequencyDetail">
-						<el-time-picker v-model="form.frequencyDetail" placeholder="閫夋嫨鏃堕棿" format="HH:mm"
-														value-format="HH:mm" />
-					</el-form-item>
-				</el-col>
-				<el-col :span="12" v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
-					<el-form-item label="鏃ユ湡" prop="frequencyDetail">
-						<el-select v-model="form.week" placeholder="璇烽�夋嫨" clearable style="width: 50%">
-							<el-option label="鍛ㄤ竴" value="MON"/>
-							<el-option label="鍛ㄤ簩" value="TUE"/>
-							<el-option label="鍛ㄤ笁" value="WED"/>
-							<el-option label="鍛ㄥ洓" value="THU"/>
-							<el-option label="鍛ㄤ簲" value="FRI"/>
-							<el-option label="鍛ㄥ叚" value="SAT"/>
-							<el-option label="鍛ㄦ棩" value="SUN"/>
-						</el-select>
-						<el-time-picker v-model="form.time" placeholder="閫夋嫨鏃堕棿" format="HH:mm"
-														value-format="HH:mm"  style="width: 50%"/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12" v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
-					<el-form-item label="鏃ユ湡" prop="frequencyDetail">
-						<el-date-picker
-							v-model="form.frequencyDetail"
-							type="datetime"
-							clearable
-							placeholder="閫夋嫨寮�濮嬫棩鏈�"
-							format="DD,HH:mm"
-							value-format="DD,HH:mm"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12" v-if="form.frequencyType === 'QUARTERLY' && form.frequencyType">
-					<el-form-item label="鏃ユ湡" prop="frequencyDetail">
-						<el-date-picker
-							v-model="form.frequencyDetail"
-							type="datetime"
-							clearable
-							placeholder="閫夋嫨寮�濮嬫棩鏈�"
-							format="MM,DD,HH:mm"
-							value-format="MM,DD,HH:mm"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="澶囨敞" prop="remarks">
-						<el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
-					</el-form-item>
-				</el-col>
-			</el-row>
-		</el-form>
-	</FormDialog>
+  <FormDialog
+    v-model="dialogVisitable"
+    :title="operationType === 'add' ? '鏂板淇濆吇浠诲姟' : '缂栬緫淇濆吇浠诲姟'"
+    width="800px"
+    :operation-type="operationType"
+    @confirm="submitForm"
+    @cancel="cancel"
+    @close="cancel"
+  >
+    <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="鎵�灞炲尯鍩�" prop="areaId">
+            <el-tree-select
+              v-model="form.areaId"
+              :data="areaOptions"
+              :props="areaTreeProps"
+              node-key="id"
+              value-key="id"
+              check-strictly
+              clearable
+              filterable
+              placeholder="璇烽�夋嫨鎵�灞炲尯鍩�"
+              style="width: 100%"
+              @change="handleAreaChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="璁惧鍚嶇О" prop="deviceLedgerIds">
+            <el-select
+              v-model="form.deviceLedgerIds"
+              filterable
+              clearable
+              multiple
+              collapse-tags
+              collapse-tags-tooltip
+              placeholder="璇烽�夋嫨璁惧"
+              style="width: 100%"
+              @change="setDeviceModels"
+            >
+              <el-option
+                v-for="item in deviceOptions"
+                :key="item.id"
+                :label="item.deviceName"
+                :value="item.id"
+              />
+            </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
+              v-model="form.inspector"
+              filterable
+              default-first-option
+              :reserve-keyword="false"
+              placeholder="璇烽�夋嫨"
+              clearable
+            >
+              <el-option
+                v-for="item in userList"
+                :key="item.userId"
+                :label="item.nickName"
+                :value="item.userId"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鐧昏鏃堕棿" prop="registrationDate">
+            <el-date-picker
+              v-model="form.registrationDate"
+              type="date"
+              placeholder="閫夋嫨鐧昏鏃ユ湡"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              style="width: 100%"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="浠诲姟棰戠巼" prop="frequencyType">
+            <el-select v-model="form.frequencyType" placeholder="璇烽�夋嫨" clearable>
+              <el-option label="姣忔棩" value="DAILY" />
+              <el-option label="姣忓懆" value="WEEKLY" />
+              <el-option label="姣忔湀" value="MONTHLY" />
+              <el-option label="瀛e害" value="QUARTERLY" />
+              <el-option label="姣忓勾" value="YEARLY" />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" v-if="form.frequencyType === 'DAILY'">
+          <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+            <el-time-picker
+              v-model="form.frequencyDetail"
+              placeholder="閫夋嫨鏃堕棿"
+              format="HH:mm"
+              value-format="HH:mm"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" v-if="form.frequencyType === 'WEEKLY'">
+          <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+            <el-select v-model="form.week" placeholder="璇烽�夋嫨" clearable style="width: 50%">
+              <el-option label="鍛ㄤ竴" value="MON" />
+              <el-option label="鍛ㄤ簩" value="TUE" />
+              <el-option label="鍛ㄤ笁" value="WED" />
+              <el-option label="鍛ㄥ洓" value="THU" />
+              <el-option label="鍛ㄤ簲" value="FRI" />
+              <el-option label="鍛ㄥ叚" value="SAT" />
+              <el-option label="鍛ㄦ棩" value="SUN" />
+            </el-select>
+            <el-time-picker
+              v-model="form.time"
+              placeholder="閫夋嫨鏃堕棿"
+              format="HH:mm"
+              value-format="HH:mm"
+              style="width: 50%"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" v-if="form.frequencyType === 'MONTHLY'">
+          <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+            <el-date-picker
+              v-model="form.frequencyDetail"
+              type="datetime"
+              clearable
+              placeholder="閫夋嫨寮�濮嬫棩鏈�"
+              format="DD,HH:mm"
+              value-format="DD,HH:mm"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" v-if="form.frequencyType === 'QUARTERLY'">
+          <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+            <el-date-picker
+              v-model="form.frequencyDetail"
+              type="datetime"
+              clearable
+              placeholder="閫夋嫨寮�濮嬫棩鏈�"
+              format="MM,DD,HH:mm"
+              value-format="MM,DD,HH:mm"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" v-if="form.frequencyType === 'YEARLY'">
+          <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+            <el-date-picker
+              v-model="form.frequencyDetail"
+              type="datetime"
+              clearable
+              placeholder="閫夋嫨寮�濮嬫棩鏈�"
+              format="MM,DD,HH:mm"
+              value-format="MM,DD,HH:mm"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="澶囨敞" prop="remarks">
+            <el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </FormDialog>
 </template>
 
 <script setup>
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
 import FormDialog from "@/components/Dialog/FormDialog.vue";
-import { reactive, ref, getCurrentInstance, toRefs } from "vue";
-import {userListNoPageByTenantId} from "@/api/system/user.js";
-import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
-import { deviceMaintenanceTaskAdd, deviceMaintenanceTaskEdit } from "@/api/equipmentManagement/upkeep";
+import { userListNoPageByTenantId } from "@/api/system/user.js";
+import {
+  getDeviceAreaTree,
+  getDeviceAreaTreeWithDevices,
+} from "@/api/equipmentManagement/deviceArea";
+import {
+  deviceMaintenanceTaskAdd,
+  deviceMaintenanceTaskEdit,
+} from "@/api/equipmentManagement/upkeep";
 import { getCurrentDate } from "@/utils/index.js";
 import useUserStore from "@/store/modules/user.js";
 
-const { proxy } = getCurrentInstance()
-const emit = defineEmits()
+const { proxy } = getCurrentInstance();
+const emit = defineEmits(["closeDia"]);
 const dialogVisitable = ref(false);
-const operationType = ref('add');
+const operationType = ref("add");
+const areaOptions = ref([]);
 const deviceOptions = ref([]);
+const userList = ref([]);
+const areaTreeProps = {
+  label: "areaName",
+  children: "children",
+};
 const userStore = useUserStore();
-const data = reactive({
-	form: {
-		taskId: undefined,
-		taskName: undefined,
-		// 褰曞叆浜猴細鍗曢�変竴涓敤鎴� id
-		inspector: undefined,
-		remarks: '',
-		frequencyType: '',
-		frequencyDetail: '',
-		week: '',
-		time: '',
-		deviceModel: undefined, // 瑙勬牸鍨嬪彿
-		registrationDate: ''
-	},
-	rules: {
-		taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" },],
-		inspector: [{ required: true, message: "璇烽�夋嫨褰曞叆浜�", trigger: "blur" },],
-		registrationDate: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }]
-	}
-})
-const { form, rules } = toRefs(data)
-const userList = ref([])
 
-const loadDeviceName = async () => {
-	const { data } = await getDeviceLedger();
-	deviceOptions.value = data;
+const data = reactive({
+  form: {
+    areaId: undefined,
+    taskId: undefined,
+    taskIds: [],
+    taskIdsStr: undefined,
+    deviceLedgerIds: [],
+    deviceLedgerIdsStr: undefined,
+    taskName: undefined,
+    inspector: undefined,
+    remarks: "",
+    frequencyType: "",
+    frequencyDetail: "",
+    week: "",
+    time: "",
+    deviceModel: undefined,
+    registrationDate: "",
+  },
+  rules: {
+    areaId: [{ required: true, message: "璇烽�夋嫨鎵�灞炲尯鍩�", trigger: "change" }],
+    deviceLedgerIds: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" }],
+    inspector: [{ required: true, message: "璇烽�夋嫨褰曞叆浜�", trigger: "change" }],
+    registrationDate: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }],
+  },
+});
+
+const { form, rules } = toRefs(data);
+
+const loadAreaTree = async () => {
+  const { data } = await getDeviceAreaTree();
+  areaOptions.value = Array.isArray(data) ? 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 = (value) => {
+  if (Array.isArray(value)) {
+    return value
+      .map((item) => Number(item))
+      .filter((item) => Number.isFinite(item));
+  }
+  if (typeof value === "string") {
+    return value
+      .split(",")
+      .map((item) => Number(item.trim()))
+      .filter((item) => Number.isFinite(item));
+  }
+  if (value !== undefined && value !== null && value !== "") {
+    const numericValue = Number(value);
+    return Number.isFinite(numericValue) ? [numericValue] : [];
+  }
+  return [];
+};
 
-// 鎵撳紑寮规
-const openDialog = async (type, row) => {
-	dialogVisitable.value = true
-	operationType.value = type
-	
-	// 閲嶇疆琛ㄥ崟
-	resetForm();
-	
-	// 鍔犺浇鐢ㄦ埛鍒楄〃
-	userListNoPageByTenantId().then((res) => {
-		userList.value = res.data;
-	});
-	
-	// 鍔犺浇璁惧鍒楄〃
-	await loadDeviceName();
-	
-	if (type === 'edit' && row) {
-		form.value = { ...row }
-		// 缂栬緫鏃剁敤鎺ュ彛杩斿洖鐨� registrantId 鍥炴樉褰曞叆浜�
-		if (row.registrantId) {
-			form.value.inspector = row.registrantId
-		}
+const getNodeDevices = (node) => {
+  const candidates = [
+    node?.deviceList,
+    node?.devices,
+    node?.deviceLedgerList,
+    node?.deviceLedgers,
+    node?.ledgerList,
+    node?.ledgers,
+  ];
+  return candidates.find((item) => Array.isArray(item)) || [];
+};
 
-		// 濡傛灉鏈夎澶嘔D锛岃嚜鍔ㄨ缃澶囦俊鎭�
-		if (form.value.taskId) {
-			setDeviceModel(form.value.taskId);
-		}
-	} else if (type === 'add') {
-		// 鏂板鏃惰缃櫥璁版棩鏈熶负褰撳ぉ
-		form.value.registrationDate = getCurrentDate();
-		// 鏂板鏃惰缃綍鍏ヤ汉涓哄綋鍓嶇櫥褰曡处鎴�
-		form.value.inspector = userStore.id;
-	}
-}
+const normalizeDevice = (item) => ({
+  ...item,
+  id: item.id ?? item.deviceLedgerId,
+  deviceName: item.deviceName ?? item.name,
+  deviceModel: item.deviceModel ?? item.model,
+});
 
-// 鍏抽棴瀵硅瘽妗�
-const cancel = () => {
-	resetForm()
-	dialogVisitable.value = false
-	emit('closeDia')
-}
+const collectDevices = (node) => {
+  const currentDevices = getNodeDevices(node).map(normalizeDevice);
+  const childDevices = (node?.children || []).flatMap((child) =>
+    collectDevices(child)
+  );
+  const deviceMap = new Map();
+  [...currentDevices, ...childDevices].forEach((item) => {
+    if (item?.id !== undefined && item?.id !== null) {
+      deviceMap.set(Number(item.id), item);
+    }
+  });
+  return Array.from(deviceMap.values());
+};
 
-// 閲嶇疆琛ㄥ崟鍑芥暟
+const findAreaNode = (nodes, areaId) => {
+  for (const node of nodes || []) {
+    if (Number(node.id) === Number(areaId)) {
+      return node;
+    }
+    const target = findAreaNode(node.children, areaId);
+    if (target) {
+      return target;
+    }
+  }
+  return null;
+};
+
+const loadDevicesByArea = async (areaId) => {
+  if (!areaId) {
+    deviceOptions.value = [];
+    return;
+  }
+  const { data } = await getDeviceAreaTreeWithDevices();
+  const treeData = Array.isArray(data) ? data : [];
+  const currentNode = findAreaNode(treeData, areaId);
+  deviceOptions.value = currentNode ? collectDevices(currentNode) : [];
+};
+
+const syncDeviceFields = (deviceIds) => {
+  const selectedIds = normalizeIdList(deviceIds);
+  const selectedDevices = selectedIds
+    .map((deviceId) =>
+      deviceOptions.value.find((item) => Number(item.id) === Number(deviceId))
+    )
+    .filter(Boolean);
+
+  form.value.deviceLedgerIds = selectedIds;
+  form.value.deviceLedgerIdsStr = selectedIds.join(",");
+  form.value.taskIds = [...selectedIds];
+  form.value.taskIdsStr = selectedIds.join(",");
+  form.value.taskId = selectedIds[0];
+  form.value.taskName = selectedDevices
+    .map((item) => item.deviceName)
+    .filter(Boolean)
+    .join(",");
+  form.value.deviceModel = selectedDevices
+    .map((item) => item.deviceModel || "-")
+    .join(",");
+};
+
+const setDeviceModels = (deviceIds) => {
+  syncDeviceFields(deviceIds);
+};
+
+const handleAreaChange = async (areaId) => {
+  form.value.taskId = undefined;
+  form.value.taskIds = [];
+  form.value.taskIdsStr = undefined;
+  form.value.deviceLedgerIds = [];
+  form.value.deviceLedgerIdsStr = undefined;
+  form.value.taskName = undefined;
+  form.value.deviceModel = undefined;
+  await loadDevicesByArea(areaId);
+};
+
 const resetForm = () => {
-	if (proxy.$refs.formRef) {
-		proxy.$refs.formRef.resetFields()
-	}
-	// 閲嶇疆琛ㄥ崟鏁版嵁纭繚璁惧淇℃伅姝g‘閲嶇疆
-	form.value = {
-		taskId: undefined,
-		taskName: undefined,
-		inspector: undefined,
-		inspector: undefined,
-		remarks: '',
-		frequencyType: '',
-		frequencyDetail: '',
-		week: '',
-		time: '',
-		deviceModel: undefined,
-		registrationDate: ''
-	}
-}
+  if (proxy.$refs.formRef) {
+    proxy.$refs.formRef.resetFields();
+  }
+  form.value = {
+    areaId: undefined,
+    taskId: undefined,
+    taskIds: [],
+    taskIdsStr: undefined,
+    deviceLedgerIds: [],
+    deviceLedgerIdsStr: undefined,
+    taskName: undefined,
+    inspector: undefined,
+    remarks: "",
+    frequencyType: "",
+    frequencyDetail: "",
+    week: "",
+    time: "",
+    deviceModel: undefined,
+    registrationDate: "",
+  };
+};
 
-// 鎻愪氦琛ㄥ崟
+const openDialog = async (type, row) => {
+  dialogVisitable.value = true;
+  operationType.value = type;
+  resetForm();
+
+  userListNoPageByTenantId().then((res) => {
+    userList.value = res.data;
+  });
+
+  await loadAreaTree();
+
+  if (type === "edit" && row) {
+    form.value = {
+      ...form.value,
+      ...row,
+      inspector: row.registrantId || row.inspector,
+    };
+    form.value.deviceLedgerIds = normalizeIdList(
+      row.deviceLedgerIds ??
+        row.deviceLedgerIdsStr ??
+        row.taskIds ??
+        row.taskIdsStr ??
+        row.taskId
+    );
+    form.value.deviceLedgerIdsStr = form.value.deviceLedgerIds.join(",");
+    form.value.taskIds = [...form.value.deviceLedgerIds];
+    form.value.taskIdsStr = form.value.deviceLedgerIds.join(",");
+    form.value.taskId = form.value.deviceLedgerIds[0];
+
+    if (form.value.areaId) {
+      await loadDevicesByArea(form.value.areaId);
+      syncDeviceFields(form.value.deviceLedgerIds);
+    }
+  } else {
+    form.value.registrationDate = getCurrentDate();
+    form.value.inspector = userStore.id;
+    deviceOptions.value = [];
+  }
+};
+
+const cancel = () => {
+  resetForm();
+  dialogVisitable.value = false;
+  emit("closeDia");
+};
+
 const submitForm = () => {
-	proxy.$refs["formRef"].validate(async valid => {
-		if (valid) {
-			try {
-				const payload = { ...form.value }
-				// 涓嶅啀鍚戝悗绔紶淇濆吇浜哄瓧娈碉紝浠呬娇鐢ㄦ帴鍙h姹傜殑 registrant / registrantId
-				// 鏍规嵁閫夋嫨鐨�"褰曞叆浜�"璁剧疆 registrant / registrantId
-				if (payload.inspector) {
-					const selectedUser = userList.value.find(
-						(u) => String(u.userId) === String(payload.inspector)
-					)
-					if (selectedUser) {
-						payload.registrantId = selectedUser.userId
-						payload.registrant = selectedUser.nickName
-					}
-				}
-				delete payload.inspector
-				delete payload.inspectorIds
-				
-				if (payload.frequencyType === 'WEEKLY') {
-					let frequencyDetail = ''
-					frequencyDetail = payload.week + ',' + payload.time
-					payload.frequencyDetail = frequencyDetail
-				}
-				
-				// 褰曞叆鏃ユ湡锛氱洿鎺ヤ娇鐢ㄨ〃鍗曢噷鐨� registrationDate 瀛楁
-				// 涓�浜涢粯璁ょ姸鎬佸瓧娈�
-				if (payload.status === undefined || payload.status === null || payload.status === '') {
-					payload.status = '0' // 榛樿鐘舵�侊紝鍙寜瀹為檯鏋氫妇璋冩暣
-				}
-				payload.active = true
-				payload.deleted = 0
-				
-				if (operationType.value === 'edit') {
-					await deviceMaintenanceTaskEdit(payload)
-				} else {
-					await deviceMaintenanceTaskAdd(payload)
-				}
-				cancel()
-				proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
-			} catch (error) {
-				proxy.$modal.msgError('鎻愪氦澶辫触锛岃閲嶈瘯')
-			}
-		}
-	})
-}
-defineExpose({ openDialog })
+  proxy.$refs.formRef.validate(async (valid) => {
+    if (!valid) {
+      return;
+    }
+    try {
+      syncDeviceFields(form.value.deviceLedgerIds);
+      const payload = { ...form.value };
+
+      if (payload.inspector) {
+        const selectedUser = userList.value.find(
+          (item) => String(item.userId) === String(payload.inspector)
+        );
+        if (selectedUser) {
+          payload.registrantId = selectedUser.userId;
+          payload.registrant = selectedUser.nickName;
+        }
+      }
+
+      delete payload.inspector;
+      delete payload.inspectorIds;
+
+      if (payload.frequencyType === "WEEKLY") {
+        payload.frequencyDetail = `${payload.week},${payload.time}`;
+      }
+
+      if (
+        payload.status === undefined ||
+        payload.status === null ||
+        payload.status === ""
+      ) {
+        payload.status = "0";
+      }
+
+      payload.deviceLedgerIds = [...form.value.deviceLedgerIds];
+      payload.deviceLedgerIdsStr = form.value.deviceLedgerIds.join(",");
+      payload.taskIds = [...form.value.deviceLedgerIds];
+      payload.taskIdsStr = form.value.deviceLedgerIds.join(",");
+      payload.taskId = form.value.deviceLedgerIds[0];
+      payload.taskName = form.value.taskName;
+      payload.deviceModel = form.value.deviceModel || "-";
+      payload.active = true;
+      payload.deleted = 0;
+
+      if (operationType.value === "edit") {
+        await deviceMaintenanceTaskEdit(payload);
+      } else {
+        await deviceMaintenanceTaskAdd(payload);
+      }
+
+      cancel();
+      proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+    } catch (error) {
+      proxy.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+    }
+  });
+};
+
+defineExpose({ openDialog });
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>

--
Gitblit v1.9.3