From 1159f2e96a1a1c95c6f8b478f8353357831458de Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 29 五月 2026 15:56:41 +0800
Subject: [PATCH] 新疆马铃薯 1.代码更新
---
src/views/equipmentManagement/measurementEquipment/components/formDia.vue | 34
src/views/equipmentManagement/measurementEquipment/filesDia.vue | 110 ++-
src/views/equipmentManagement/inspectionManagement/components/formDia.vue | 626 +++++++++++++-------
src/views/equipmentManagement/upkeep/Form/formDia.vue | 781 +++++++++++++++----------
src/views/equipmentManagement/ledger/Form.vue | 205 ++++--
5 files changed, 1,089 insertions(+), 667 deletions(-)
diff --git a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
index 74cbb58..c535a90 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
@@ -1,48 +1,89 @@
<template>
<div>
- <el-dialog :title="operationType === 'add' ? '鏂板宸℃浠诲姟' : '缂栬緫宸℃浠诲姟'"
- v-model="dialogVisitable" width="800px" @close="cancel">
+ <el-dialog
+ v-model="dialogVisitable"
+ :title="operationType === 'add' ? '鏂板宸℃浠诲姟' : '缂栬緫宸℃浠诲姟'"
+ width="800px"
+ @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">
+ <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"
+ multiple
+ collapse-tags
+ collapse-tags-tooltip
+ clearable
+ filterable
+ placeholder="璇烽�夋嫨璁惧"
+ style="width: 100%"
+ @change="setDeviceModels"
+ >
<el-option
- v-for="(item, index) in deviceOptions"
- :key="index"
+ v-for="item in deviceOptions"
+ :key="item.id"
:label="item.deviceName"
:value="item.id"
- ></el-option>
+ />
</el-select>
</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" placeholder="璇烽�夋嫨" multiple clearable>
- <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId"/>
+ <el-option
+ v-for="item in userList"
+ :key="item.userId"
+ :label="item.nickName"
+ :value="item.userId"
+ />
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row>
<el-col :span="12">
- <el-form-item label="宸℃椤圭洰" prop="inspectionProject">
- <el-input v-model="form.inspectionProject" placeholder="璇疯緭鍏ュ贰妫�椤圭洰" type="textarea" :autosize="{ minRows: 2, maxRows: 6 }" />
+ <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="remarks">
- <el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" :autosize="{ minRows: 2, maxRows: 6 }" />
+ <el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
</el-form-item>
</el-col>
- </el-row>
- <el-row>
<el-col :span="12">
<el-form-item label="鏄惁鍚敤" prop="isEnabled">
- <el-radio-group v-model="form.isEnabled">
- <el-radio :value="1">鏄�</el-radio>
- <el-radio :value="0">鍚�</el-radio>
- </el-radio-group>
+ <el-switch
+ v-model="form.isEnabled"
+ :active-value="1"
+ :inactive-value="0"
+ />
</el-form-item>
</el-col>
</el-row>
@@ -50,55 +91,64 @@
<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="DAILY" />
+ <el-option label="姣忓懆" value="WEEKLY" />
+ <el-option label="姣忔湀" value="MONTHLY" />
+ <el-option label="姣忓勾" value="YEARLY" />
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12" v-if="form.frequencyType === 'DAILY' && form.frequencyType">
+ <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' && 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-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 === 'QUARTERLY' && form.frequencyType">
+ <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="MM,DD,HH:mm"
- value-format="MM,DD,HH:mm"
+ 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 === '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>
@@ -115,192 +165,312 @@
</template>
<script setup>
-import {reactive, ref, getCurrentInstance, toRefs} from "vue";
-import useUserStore from '@/store/modules/user'
-import {addOrEditTimingTask} from "@/api/inspectionManagement/index.js";
-import {userListNoPageByTenantId} from "@/api/system/user.js";
-import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+import useUserStore from "@/store/modules/user";
+import { addOrEditTimingTask } from "@/api/inspectionManagement/index.js";
+import { userListNoPageByTenantId } from "@/api/system/user.js";
+import {
+ getDeviceAreaTree,
+ getDeviceAreaTreeWithDevices,
+} from "@/api/equipmentManagement/deviceArea";
-const { proxy } = getCurrentInstance()
-const emit = defineEmits()
-const userStore = useUserStore()
+const { proxy } = getCurrentInstance();
+const emit = defineEmits(["closeDia"]);
+const userStore = useUserStore();
const dialogVisitable = ref(false);
-const operationType = ref('add');
+const operationType = ref("add");
+const areaOptions = ref([]);
const deviceOptions = ref([]);
-const data = reactive({
- form: {
- taskId: undefined,
- taskName: undefined,
- inspector: '',
- inspectorIds: '',
- inspectionProject: '',
- isEnabled: 1,
- remarks: '',
- frequencyType: '',
- frequencyDetail: '',
- week: '',
- time: ''
- },
- rules: {
- taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" },],
- inspector: [{ required: true, message: "璇疯緭鍏ュ贰妫�浜�", trigger: "blur" },],
- dateStr: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }],
- frequencyType: [{ required: true, message: "璇烽�夋嫨浠诲姟棰戠巼", trigger: "change" }],
- frequencyDetail: [
- {
- required: true,
- message: "璇烽�夋嫨鏃ユ湡",
- trigger: "change",
- validator: (rule, value, callback) => {
- if (!form.value.frequencyType) {
- callback()
- return
- }
- if (form.value.frequencyType === 'WEEKLY') {
- if (!form.value.week || !form.value.time) {
- callback(new Error("璇烽�夋嫨鏃ユ湡鍜屾椂闂�"))
- } else {
- callback()
- }
- } else {
- if (!value) {
- callback(new Error("璇烽�夋嫨鏃ユ湡"))
- } else {
- callback()
- }
- }
- }
- }
- ],
- week: [
- {
- required: true,
- message: "璇烽�夋嫨鏄熸湡",
- trigger: "change",
- validator: (rule, value, callback) => {
- if (form.value.frequencyType === 'WEEKLY' && !value) {
- callback(new Error("璇烽�夋嫨鏄熸湡"))
- } else {
- callback()
- }
- }
- }
- ],
- time: [
- {
- required: true,
- message: "璇烽�夋嫨鏃堕棿",
- trigger: "change",
- validator: (rule, value, callback) => {
- if (form.value.frequencyType === 'WEEKLY' && !value) {
- callback(new Error("璇烽�夋嫨鏃堕棿"))
- } else {
- callback()
- }
- }
- }
- ]
- }
-})
-const { form, rules } = toRefs(data)
-const userList = ref([])
-
-const loadDeviceName = async () => {
- const { data } = await getDeviceLedger();
- deviceOptions.value = data;
+const userList = ref([]);
+const areaTreeProps = {
+ label: "areaName",
+ children: "children",
};
-const setDeviceModel = (id) => {
- const option = deviceOptions.value.find((item) => item.id === id);
- if (option) {
- form.value.taskName = option.deviceName;
- }
-}
+const data = reactive({
+ form: {
+ areaId: undefined,
+ taskId: undefined,
+ taskIds: [],
+ taskIdsStr: undefined,
+ deviceLedgerIds: [],
+ deviceLedgerIdsStr: undefined,
+ taskName: undefined,
+ deviceModel: undefined,
+ inspector: [],
+ inspectorIds: "",
+ remarks: "",
+ isEnabled: 1,
+ frequencyType: "",
+ frequencyDetail: "",
+ week: "",
+ time: "",
+ },
+ rules: {
+ areaId: [{ required: true, message: "璇烽�夋嫨鎵�灞炲尯鍩�", trigger: "change" }],
+ deviceLedgerIds: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" }],
+ inspector: [{ required: true, message: "璇烽�夋嫨宸℃浜�", trigger: "change" }],
+ frequencyType: [{ required: true, message: "璇烽�夋嫨浠诲姟棰戠巼", trigger: "change" }],
+ frequencyDetail: [
+ {
+ required: true,
+ trigger: "change",
+ validator: (rule, value, callback) => {
+ if (!form.value.frequencyType) {
+ callback();
+ return;
+ }
+ if (form.value.frequencyType === "WEEKLY") {
+ if (!form.value.week || !form.value.time) {
+ callback(new Error("璇烽�夋嫨鏃ユ湡鍜屾椂闂�"));
+ } else {
+ callback();
+ }
+ return;
+ }
+ if (!value) {
+ callback(new Error("璇烽�夋嫨鏃ユ湡"));
+ return;
+ }
+ callback();
+ },
+ },
+ ],
+ },
+});
-// 鎵撳紑寮规
+const { form, rules } = toRefs(data);
+
+const loadAreaTree = async () => {
+ const { data } = await getDeviceAreaTree();
+ areaOptions.value = Array.isArray(data) ? data : [];
+};
+
+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 getNodeDevices = (node) => {
+ const candidates = [
+ node?.deviceList,
+ node?.devices,
+ node?.deviceLedgerList,
+ node?.deviceLedgers,
+ node?.ledgerList,
+ node?.ledgers,
+ ];
+ return candidates.find((item) => Array.isArray(item)) || [];
+};
+
+const normalizeDevice = (item) => ({
+ ...item,
+ id: item.id ?? item.deviceLedgerId,
+ deviceName: item.deviceName ?? item.name,
+ deviceModel: item.deviceModel ?? item.model,
+});
+
+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();
+ }
+ form.value = {
+ areaId: undefined,
+ taskId: undefined,
+ taskIds: [],
+ taskIdsStr: undefined,
+ deviceLedgerIds: [],
+ deviceLedgerIdsStr: undefined,
+ taskName: undefined,
+ deviceModel: undefined,
+ inspector: [],
+ inspectorIds: "",
+ remarks: "",
+ isEnabled: 1,
+ frequencyType: "",
+ frequencyDetail: "",
+ week: "",
+ time: "",
+ };
+};
+
const openDialog = async (type, row) => {
- dialogVisitable.value = true
- operationType.value = type
-
- // 閲嶇疆琛ㄥ崟
+ dialogVisitable.value = true;
+ operationType.value = type;
resetForm();
-
- // 鍔犺浇鐢ㄦ埛鍒楄〃
+
userListNoPageByTenantId().then((res) => {
userList.value = res.data;
});
-
- // 鍔犺浇璁惧鍒楄〃
- await loadDeviceName();
-
- if (type === 'edit' && row) {
- form.value = {...row}
- form.value.inspector = form.value.inspectorIds.split(',').map(Number)
-
- // 濡傛灉鏈夎澶嘔D锛岃嚜鍔ㄨ缃澶囦俊鎭�
- if (form.value.taskId) {
- setDeviceModel(form.value.taskId);
+
+ await loadAreaTree();
+
+ if (type === "edit" && row) {
+ form.value = {
+ ...form.value,
+ ...row,
+ isEnabled: Number(row.isEnabled ?? row.status ?? 1),
+ inspector: row.inspectorIds
+ ? String(row.inspectorIds)
+ .split(",")
+ .map((item) => Number(item))
+ .filter((item) => Number.isFinite(item))
+ : [],
+ };
+
+ 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);
}
}
-}
+};
-// 鍏抽棴瀵硅瘽妗�
const cancel = () => {
- resetForm()
- dialogVisitable.value = false
- emit('closeDia')
-}
+ resetForm();
+ dialogVisitable.value = false;
+ emit("closeDia");
+};
-// 閲嶇疆琛ㄥ崟鍑芥暟
-const resetForm = () => {
- if (proxy.$refs.formRef) {
- proxy.$refs.formRef.resetFields()
- }
- // 閲嶇疆琛ㄥ崟鏁版嵁纭繚璁惧淇℃伅姝g‘閲嶇疆
- form.value = {
- taskId: undefined,
- taskName: undefined,
- inspector: '',
- inspectorIds: '',
- inspectionProject: '',
- isEnabled: 1,
- remarks: '',
- frequencyType: '',
- frequencyDetail: '',
- week: '',
- time: ''
- }
-}
-
-// 鎻愪氦琛ㄥ崟
const submitForm = () => {
- proxy.$refs["formRef"].validate(async valid => {
- if (valid) {
- try {
- form.value.inspectorIds = form.value.inspector.join(',')
- delete form.value.inspector
-
- if (form.value.frequencyType === 'WEEKLY') {
- let frequencyDetail = ''
- frequencyDetail = form.value.week + ',' + form.value.time
- form.value.frequencyDetail = frequencyDetail
- }
-
- let res = await userStore.getInfo()
- form.value.registrantId = res.user.userId
-
- await addOrEditTimingTask(form.value)
- cancel()
- proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
- } catch (error) {
- proxy.$modal.msgError('鎻愪氦澶辫触锛岃閲嶈瘯')
- }
+ proxy.$refs.formRef.validate(async (valid) => {
+ if (!valid) {
+ return;
}
- })
-}
-defineExpose({ openDialog })
+ try {
+ syncDeviceFields(form.value.deviceLedgerIds);
+ const payload = { ...form.value };
+
+ payload.inspectorIds = Array.isArray(form.value.inspector)
+ ? form.value.inspector.join(",")
+ : "";
+ delete payload.inspector;
+
+ if (payload.frequencyType === "WEEKLY") {
+ payload.frequencyDetail = `${payload.week},${payload.time}`;
+ }
+
+ const userInfo = await userStore.getInfo();
+ payload.registrantId = userInfo.user.userId;
+ payload.taskId = form.value.deviceLedgerIds[0];
+ payload.taskIds = [...form.value.deviceLedgerIds];
+ payload.taskIdsStr = form.value.deviceLedgerIds.join(",");
+ payload.deviceLedgerIds = [...form.value.deviceLedgerIds];
+ payload.deviceLedgerIdsStr = form.value.deviceLedgerIds.join(",");
+ payload.taskName = form.value.taskName;
+ payload.deviceModel = form.value.deviceModel || "-";
+ payload.isEnabled = Number(form.value.isEnabled ?? 1);
+
+ await addOrEditTimingTask(payload);
+ cancel();
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ } catch (error) {
+ proxy.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+ }
+ });
+};
+
+defineExpose({ openDialog });
</script>
-<style scoped>
-
-</style>
\ No newline at end of file
+<style scoped></style>
diff --git a/src/views/equipmentManagement/ledger/Form.vue b/src/views/equipmentManagement/ledger/Form.vue
index f1d21f2..67c772f 100644
--- a/src/views/equipmentManagement/ledger/Form.vue
+++ b/src/views/equipmentManagement/ledger/Form.vue
@@ -2,6 +2,22 @@
<el-form :model="form" label-width="120px" :rules="formRules" ref="formRef">
<el-row :gutter="20">
<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%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
<el-form-item label="璁惧鍚嶇О" prop="deviceName">
<el-input v-model="form.deviceName" placeholder="璇疯緭鍏ヨ澶囧悕绉�" />
</el-form-item>
@@ -11,11 +27,11 @@
<el-input v-model="form.deviceModel" placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�" />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <!-- <el-col :span="12">
<el-form-item label="璁惧鍝佺墝" prop="deviceBrand">
<el-input v-model="form.deviceBrand" placeholder="璇疯緭鍏ヨ澶囧搧鐗�" />
</el-form-item>
- </el-col>
+ </el-col> -->
<el-col :span="12">
<el-form-item label="璁惧绫诲瀷" prop="type">
<el-select
@@ -72,59 +88,62 @@
<el-form-item label="鏁伴噺" prop="number">
<el-input-number :min="1" style="width: 100%"
v-model="form.number"
- disabled
placeholder="璇疯緭鍏ユ暟閲�"
@change="mathNum"
/>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="鍚◣鍗曚环" prop="taxIncludingPriceUnit">
- <el-input-number :step="0.01" :min="0" style="width: 100%"
- v-model="form.taxIncludingPriceUnit"
- placeholder="璇疯緭鍏ュ惈绋庡崟浠�"
- maxlength="10"
- @change="mathNum"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍚◣鎬讳环" prop="taxIncludingPriceTotal">
- <el-input
- v-model="form.taxIncludingPriceTotal"
- placeholder="鑷姩鐢熸垚"
- type="number"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="绋庣巼(%)" prop="taxRate">
- <el-select
- v-model="form.taxRate"
- placeholder="璇烽�夋嫨"
- clearable
- @change="mathNum"
- >
- <el-option
- v-for="dict in tax_rate"
- :key="dict.value"
- :label="dict.label"
- :value="Number(dict.value)"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="涓嶅惈绋庢�讳环" prop="unTaxIncludingPriceTotal">
- <el-input
- v-model="form.unTaxIncludingPriceTotal"
- placeholder="鑷姩鐢熸垚"
- type="number"
- disabled
- />
- </el-form-item>
- </el-col>
+<!-- <el-col :span="12">-->
+<!-- <el-form-item label="鍚◣鍗曚环" prop="taxIncludingPriceUnit">-->
+<!-- <el-input-number :step="0.01" :min="0" style="width: 100%"-->
+<!-- v-model="form.taxIncludingPriceUnit"-->
+<!-- placeholder="璇疯緭鍏ュ惈绋庡崟浠�"-->
+<!-- maxlength="10"-->
+<!-- @change="mathNum"-->
+<!-- />-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
+<!-- <el-col :span="12">-->
+<!-- <el-form-item label="鍚◣鎬讳环" prop="taxIncludingPriceTotal">-->
+<!-- <el-input-->
+<!-- v-model="form.taxIncludingPriceTotal"-->
+<!-- placeholder="鑷姩鐢熸垚"-->
+<!-- type="number"-->
+<!-- disabled-->
+<!-- />-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
+<!-- <el-col :span="12">-->
+<!-- <el-form-item label="绋庣巼(%)" prop="taxRate">-->
+<!-- <!– <el-input-->
+<!-- v-model="form.taxRate"-->
+<!-- placeholder="璇疯緭鍏ョ◣鐜�"-->
+<!-- type="number"-->
+<!-- >-->
+<!-- <template #append> % </template>-->
+<!-- </el-input> –>-->
+<!-- <el-select-->
+<!-- v-model="form.taxRate"-->
+<!-- placeholder="璇烽�夋嫨"-->
+<!-- clearable-->
+<!-- @change="mathNum"-->
+<!-- >-->
+<!-- <el-option label="1" :value="1" />-->
+<!-- <el-option label="6" :value="6" />-->
+<!-- <el-option label="13" :value="13" />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
+<!-- <el-col :span="12">-->
+<!-- <el-form-item label="涓嶅惈绋庢�讳环" prop="unTaxIncludingPriceTotal">-->
+<!-- <el-input-->
+<!-- v-model="form.unTaxIncludingPriceTotal"-->
+<!-- placeholder="鑷姩鐢熸垚"-->
+<!-- type="number"-->
+<!-- disabled-->
+<!-- />-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
<!-- <el-col :span="12">
<el-form-item label="褰曞叆浜�" prop="createUser">
<el-input v-model="form.createUser" placeholder="璇疯緭鍏ュ綍鍏ヤ汉" />
@@ -156,16 +175,16 @@
/>
</el-form-item>
</el-col>
- <el-col :span="24">
- <el-form-item label="璁惧鍥剧墖" prop="storageBlobDTOs">
- <AttachmentUploadImage
- v-model:fileList="fileList"
- :limit="20"
- :fileSize="5"
- :buttonText="'涓婁紶鍥剧墖'"
- />
- </el-form-item>
- </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐗╄仈璁惧" prop="isIotDevice">
+ <el-switch v-model="form.isIotDevice" :active-value="1" :inactive-value="0" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12" v-if="form.isIotDevice === 1">
+ <el-form-item label="澶栭儴缂栫爜" prop="externalCode">
+ <el-input v-model="form.externalCode" placeholder="璇疯緭鍏ュ閮ㄧ紪鐮�" />
+ </el-form-item>
+ </el-col>
</el-row>
</el-form>
</template>
@@ -174,23 +193,25 @@
import useFormData from "@/hooks/useFormData";
// import useUserStore from "@/store/modules/user";
import { getLedgerById } from "@/api/equipmentManagement/ledger";
+import { getDeviceAreaTree } from "@/api/equipmentManagement/deviceArea";
import dayjs from "dayjs";
import {
calculateTaxIncludeTotalPrice,
calculateTaxExclusiveTotalPrice,
} from "@/utils/summarizeTable";
import { ElMessage } from "element-plus";
-import { ref, getCurrentInstance, computed } from "vue";
-import AttachmentUploadImage from '@/components/AttachmentUpload/image/index.vue';
-
-const { proxy } = getCurrentInstance();
-const { tax_rate } = proxy.useDict("tax_rate");
+import { ref, onMounted } from "vue";
defineOptions({
name: "璁惧鍙拌处琛ㄥ崟",
});
const formRef = ref(null);
const operationType = ref('');
+const areaOptions = ref([]);
+const areaTreeProps = {
+ label: "areaName",
+ children: "children",
+};
// 璁惧绫诲瀷鍥哄畾閫夐」
const deviceTypeOptions = ref([
'鐢熶骇璁惧',
@@ -200,6 +221,7 @@
'鍏朵粬璁惧'
]);
const formRules = {
+ areaId: [{ required: true, trigger: "change", message: "璇烽�夋嫨鎵�灞炲尯鍩�" }],
deviceName: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
deviceModel: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
type: [{ required: true, trigger: "change", message: "璇烽�夋嫨鎴栬緭鍏ヨ澶囩被鍨�" }],
@@ -221,12 +243,25 @@
trigger: "blur"
}
],
+ externalCode: [
+ {
+ validator: (rule, value, callback) => {
+ if (form.isIotDevice === 1 && !value) {
+ callback(new Error('鐗╄仈璁惧涓烘槸鏃讹紝璇疯緭鍏ュ閮ㄧ紪鐮�'));
+ } else {
+ callback();
+ }
+ },
+ trigger: "blur"
+ }
+ ],
}
const { form, resetForm } = useFormData({
+ areaId: undefined, // 鍖哄煙ID
deviceName: undefined, // 璁惧鍚嶇О
deviceModel: undefined, // 瑙勬牸鍨嬪彿
- deviceBrand: undefined, // 璁惧鍝佺墝
+ // deviceBrand: undefined, // 璁惧鍝佺墝
type: undefined, // 璁惧绫诲瀷
supplierName: undefined, // 渚涘簲鍟�
storageLocation: undefined, // 瀛樻斁浣嶇疆
@@ -240,19 +275,9 @@
unTaxIncludingPriceTotal: undefined, // 涓嶅惈绋庢�讳环
// createUser: useUserStore().nickName, // 褰曞叆浜�
createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 褰曞叆鏃ユ湡
- planRuntimeTime: dayjs().format("YYYY-MM-DD"), // 褰曞叆鏃ユ湡
- storageBlobDTOs: undefined, // 璁惧鍥剧墖鎻愪氦
- storageBlobVOs: undefined, // 璁惧鍥剧墖灞曠ず
-});
-
-const fileList = computed({
- get() {
- return form.storageBlobVOs || [];
- },
- set(val) {
- form.storageBlobDTOs = val;
- form.storageBlobVOs = val;
- }
+ planRuntimeTime: dayjs().format("YYYY-MM-DD"), // 棰勮杩愯鏃堕棿
+ isIotDevice: 0, // 鏄惁涓虹墿鑱旇澶� 0-鍚� 1-鏄�
+ externalCode: undefined, // 澶栭儴缂栫爜
});
const loadForm = async (id) => {
@@ -261,9 +286,10 @@
}
const { code, data } = await getLedgerById(id);
if (code == 200) {
+ form.areaId = data.areaId;
form.deviceName = data.deviceName;
form.deviceModel = data.deviceModel;
- form.deviceBrand = data.deviceBrand;
+ // form.deviceBrand = data.deviceBrand;
form.type = data.type;
form.supplierName = data.supplierName;
form.storageLocation = data.storageLocation;
@@ -282,9 +308,19 @@
} else {
form.planRuntimeTime = undefined;
}
- form.storageBlobVOs = data.storageBlobVOs;
- form.storageBlobDTOs = data.storageBlobVOs;
+ // 鐗╄仈璁惧鍜屽閮ㄧ紪鐮�
+ form.isIotDevice = data.isIotDevice ?? 0;
+ form.externalCode = data.externalCode;
}
+};
+
+const setAreaId = (areaId) => {
+ form.areaId = areaId;
+};
+
+const loadAreaOptions = async () => {
+ const res = await getDeviceAreaTree();
+ areaOptions.value = Array.isArray(res?.data) ? res.data : Array.isArray(res) ? res : [];
};
const handleDeviceTypeChange = (value) => {
@@ -322,9 +358,14 @@
clearValidate();
};
+onMounted(() => {
+ loadAreaOptions();
+});
+
defineExpose({
form,
loadForm,
+ setAreaId,
resetForm,
clearValidate,
resetFormAndValidate,
diff --git a/src/views/equipmentManagement/measurementEquipment/components/formDia.vue b/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
index 16ac41f..6b7feec 100644
--- a/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
+++ b/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
@@ -36,6 +36,15 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
+ <el-form-item label="瀹夎浣嶇疆锛�" prop="instationLocation">
+ <el-input
+ v-model="form.instationLocation"
+ placeholder="璇疯緭鍏�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
<el-form-item label="妫�瀹氬崟浣嶏細" prop="unit">
<el-input
v-model="form.unit"
@@ -44,17 +53,17 @@
/>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="璇佷功缂栧彿锛�" prop="model">
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="璇佷功缂栧彿锛�" prop="model">
<el-input
v-model="form.model"
placeholder="璇疯緭鍏�"
clearable
/>
</el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
+ </el-col>
<el-col :span="12">
<el-form-item label="鏈�鏂伴壌瀹氭棩鏈燂細" prop="mostDate">
<el-date-picker
@@ -68,6 +77,8 @@
/>
</el-form-item>
</el-col>
+ </el-row>
+ <el-row :gutter="30">
<el-col :span="12">
<el-form-item label="鏈夋晥鏃ユ湡(澶�)锛�" prop="valid">
<el-input
@@ -80,6 +91,15 @@
>
<template #append>鏃�</template>
</el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妫�瀹氬懆鏈燂細" prop="cycle">
+ <el-input
+ v-model="form.cycle"
+ placeholder="璇疯緭鍏ユ瀹氬懆鏈�"
+ clearable
+ />
</el-form-item>
</el-col>
</el-row>
@@ -164,8 +184,10 @@
form: {
code: "",
name: "",
+ instationLocation: "",
mostDate:"",
model: "",
+ cycle:"",
validDate: "",
nextDate: "",
userId: "",
@@ -181,7 +203,9 @@
nextDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
userId: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
recordDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+ instationLocation: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
mostDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+ cycle: [{required: true, message: "璇烽�夋嫨", trigger: "blur"}],
valid: [
{required: true, message: "璇疯緭鍏�", trigger: "blur"},
{
diff --git a/src/views/equipmentManagement/measurementEquipment/filesDia.vue b/src/views/equipmentManagement/measurementEquipment/filesDia.vue
index 045ebc0..ee9dc3a 100644
--- a/src/views/equipmentManagement/measurementEquipment/filesDia.vue
+++ b/src/views/equipmentManagement/measurementEquipment/filesDia.vue
@@ -1,16 +1,38 @@
<template>
<div>
- <el-dialog v-model="dialogFormVisible" title="涓婁紶闄勪欢" width="50%" @close="closeDia">
+ <el-dialog
+ v-model="dialogFormVisible"
+ title="涓婁紶闄勪欢"
+ width="50%"
+ @close="closeDia"
+ >
<div style="margin-bottom: 10px;text-align: right">
- <el-upload v-model:file-list="fileList" class="upload-demo" :action="uploadUrl"
- :on-success="handleUploadSuccess" :on-error="handleUploadError" name="files" :show-file-list="false"
- :headers="headers" style="display: inline;margin-right: 10px">
+ <el-upload
+ v-model:file-list="fileList"
+ class="upload-demo"
+ :action="uploadUrl"
+ :on-success="handleUploadSuccess"
+ :on-error="handleUploadError"
+ name="file"
+ :show-file-list="false"
+ :headers="headers"
+ style="display: inline;margin-right: 10px"
+ >
<el-button type="primary">涓婁紶闄勪欢</el-button>
</el-upload>
<el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
</div>
- <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :tableLoading="tableLoading"
- :isSelection="true" @selection-change="handleSelectionChange" @pagination="paginationSearch" height="500">
+ <PIMTable
+ rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :page="page"
+ :tableLoading="tableLoading"
+ :isSelection="true"
+ @selection-change="handleSelectionChange"
+ @pagination="paginationSearch"
+ height="500"
+ >
</PIMTable>
<template #footer>
<div class="dialog-footer">
@@ -23,16 +45,16 @@
</template>
<script setup>
-import { ref, reactive, getCurrentInstance } from "vue";
-import { ElMessageBox } from "element-plus";
-import { getToken } from "@/utils/auth.js";
+import {ref, reactive, getCurrentInstance} from "vue";
+import {ElMessageBox} from "element-plus";
+import {getToken} from "@/utils/auth.js";
import filePreview from '@/components/filePreview/index.vue'
import PIMTable from "@/components/PIMTable/PIMTable.vue";
import {
- addStorageAttachment,
- delStorageAttachment,
- getStorageAttachmentList
-} from "@/api/equipmentManagement/measurementEquipment.js";
+ fileAdd,
+ fileDel,
+ fileListPage
+} from "@/api/financialManagement/revenueManagement.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
@@ -68,9 +90,9 @@
},
]);
const page = reactive({
- current: 1,
- size: 100,
- total: 0,
+ current: 1,
+ size: 100,
+ total: 0,
});
const tableData = ref([]);
const fileList = ref([]);
@@ -79,25 +101,24 @@
const headers = ref({
Authorization: "Bearer " + getToken(),
});
-const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 涓婁紶鐨勬湇鍔″櫒鍦板潃
+const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/file/upload"); // 涓婁紶鐨勫浘鐗囨湇鍔″櫒鍦板潃
// 鎵撳紑寮规
-const openDialog = (row, type) => {
+const openDialog = (row,type) => {
accountType.value = type;
dialogFormVisible.value = true;
currentId.value = row.id;
getList()
}
const paginationSearch = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- // 鍓嶇鍒嗛〉鏆備笉澶勭悊锛岀洿鎺ヨ皟鐢ㄨ幏鍙栧叏閲忓垪琛�
- getList();
+ page.current = obj.page;
+ page.size = obj.limit;
+ getList();
};
const getList = () => {
- getStorageAttachmentList({ recordId: currentId.value, recordType: accountType.value }).then(res => {
- tableData.value = res.data;
- page.total = res.data ? res.data.length : 0;
+ fileListPage({accountId: currentId.value,accountType:accountType.value, ...page}).then(res => {
+ tableData.value = res.data.records;
+ page.total = res.data.total;
})
}
// 琛ㄦ牸閫夋嫨鏁版嵁
@@ -113,25 +134,22 @@
// 涓婁紶鎴愬姛澶勭悊
function handleUploadSuccess(res, file) {
// 濡傛灉涓婁紶鎴愬姛
- if (res.code == 200 && res.data && res.data.length > 0) {
- const newFiles = res.data.map(item => ({
- ...item,
- name: item.originalFilename || item.name
- }));
- const mergedFiles = [...(tableData.value || []), ...newFiles];
- const storageAttachmentDTO = {
- recordType: accountType.value,
- recordId: currentId.value,
- application: "file",
- storageBlobDTOs: mergedFiles
- };
- addStorageAttachment(storageAttachmentDTO).then(r => {
- proxy.$modal.msgSuccess("鏂囦欢涓婁紶鎴愬姛");
- getList()
- })
+ if (res.code == 200) {
+ const fileRow = {}
+ fileRow.name = res.data.originalName
+ fileRow.url = res.data.tempPath
+ uploadFile(fileRow)
} else {
proxy.$modal.msgError("鏂囦欢涓婁紶澶辫触");
}
+}
+function uploadFile(file) {
+ file.accountId = currentId.value;
+ file.accountType = accountType.value;
+ fileAdd(file).then(res => {
+ proxy.$modal.msgSuccess("鏂囦欢涓婁紶鎴愬姛");
+ getList()
+ })
}
// 涓婁紶澶辫触澶勭悊
function handleUploadError() {
@@ -139,13 +157,13 @@
}
// 涓嬭浇闄勪欢
const downLoadFile = (row) => {
- proxy.$download.byUrl(row.url, row.originalFilename);
+ proxy.$download.name(row.url);
}
// 鍒犻櫎
const handleDelete = () => {
let ids = [];
if (selectedRows.value.length > 0) {
- ids = selectedRows.value.map((item) => item.storageAttachmentId);
+ ids = selectedRows.value.map((item) => item.id);
} else {
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
return;
@@ -155,7 +173,7 @@
cancelButtonText: "鍙栨秷",
type: "warning",
}).then(() => {
- delStorageAttachment(ids).then((res) => {
+ fileDel(ids).then((res) => {
proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
getList();
});
@@ -173,4 +191,6 @@
});
</script>
-<style scoped></style>
\ No newline at end of file
+<style scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/upkeep/Form/formDia.vue b/src/views/equipmentManagement/upkeep/Form/formDia.vue
index 6856ae1..1460686 100644
--- a/src/views/equipmentManagement/upkeep/Form/formDia.vue
+++ b/src/views/equipmentManagement/upkeep/Form/formDia.vue
@@ -1,330 +1,497 @@
<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="machineryCategory">
- <el-input
- v-model.trim="form.machineryCategory"
- placeholder="璇疯緭鍏ヤ繚鍏婚」鐩�"
- maxlength="100"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="淇濆吇浜�" prop="maintenancePerson">
- <el-input
- v-model.trim="form.maintenancePerson"
- placeholder="璇疯緭鍏ヤ繚鍏讳汉濮撳悕"
- maxlength="100"
- clearable
- />
- </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="isEnabled">
+ <el-switch
+ v-model="form.isEnabled"
+ :active-value="1"
+ :inactive-value="0"
+ />
+ </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,
- machineryCategory: "",
- remarks: '',
- frequencyType: '',
- frequencyDetail: '',
- week: '',
- time: '',
- deviceModel: undefined, // 瑙勬牸鍨嬪彿
- registrationDate: '',
- maintenancePerson: '' // 淇濆吇浜�
- },
- rules: {
- taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" },],
- inspector: [{ required: true, message: "璇烽�夋嫨褰曞叆浜�", trigger: "blur" },],
- registrationDate: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }],
- machineryCategory: [{ required: true, message: "璇疯緭鍏ヤ繚鍏婚」鐩�", trigger: "blur" }]
- }
-})
-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,
+ isEnabled: 1,
+ 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,
- machineryCategory: "",
- remarks: '',
- frequencyType: '',
- frequencyDetail: '',
- week: '',
- time: '',
- deviceModel: undefined,
- registrationDate: '',
- maintenancePerson: ''
- }
-}
+ if (proxy.$refs.formRef) {
+ proxy.$refs.formRef.resetFields();
+ }
+ form.value = {
+ areaId: undefined,
+ taskId: undefined,
+ taskIds: [],
+ taskIdsStr: undefined,
+ deviceLedgerIds: [],
+ deviceLedgerIdsStr: undefined,
+ taskName: undefined,
+ isEnabled: 1,
+ 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,
+ isEnabled: Number(row.isEnabled ?? row.status ?? 1),
+ 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}`;
+ }
+
+ payload.isEnabled = Number(form.value.isEnabled ?? 1);
+
+ 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