From aeabb6a019fbb7e60bd3b6c8cf3e4081abdff80c Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 18 五月 2026 20:39:10 +0800
Subject: [PATCH] feat: 设备巡检任务添加启用/停用
---
src/views/equipmentManagement/upkeep/Form/PlanModal.vue | 89 +++++++++++++++++++++++---------------------
1 files changed, 46 insertions(+), 43 deletions(-)
diff --git a/src/views/equipmentManagement/upkeep/Form/PlanModal.vue b/src/views/equipmentManagement/upkeep/Form/PlanModal.vue
index 04bd1dc..35c8c0e 100644
--- a/src/views/equipmentManagement/upkeep/Form/PlanModal.vue
+++ b/src/views/equipmentManagement/upkeep/Form/PlanModal.vue
@@ -7,7 +7,7 @@
@cancel="handleCancel"
@close="handleClose"
>
- <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
+ <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="璁惧鍚嶇О">
<el-select
v-model="form.deviceLedgerId"
@@ -79,7 +79,7 @@
<el-option label="澶辫触" :value="2"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="璁″垝淇濆吇鏃ユ湡">
+ <el-form-item label="璁″垝淇濆吇鏃ユ湡" prop="maintenancePlanTime">
<el-date-picker
style="width: 100%"
v-model="form.maintenancePlanTime"
@@ -115,8 +115,6 @@
} from "@/api/equipmentManagement/upkeep";
import {
listMaintenanceTaskFiles,
- bindMaintenanceTaskFile,
- uploadMaintenanceTaskFile,
delMaintenanceTaskFile,
} from "@/api/equipmentManagement/maintenanceTaskFile";
import { ElMessage } from "element-plus";
@@ -140,6 +138,8 @@
const pendingTempFiles = ref([]);
const planFileList = ref([]);
+// 缂栬緫妯″紡涓嬪凡淇濆瓨浣嗗緟鍒犻櫎鐨勬枃浠跺垪琛�
+const pendingDeleteFiles = ref([]);
const registrantDisplayName = computed(
() => userStore.nickName || userStore.name || "褰撳墠鐧诲綍鐢ㄦ埛"
@@ -151,6 +151,7 @@
maintenancePerson: [{ required: true, message: "璇烽�夋嫨淇濆吇浜�", trigger: "change" }],
maintenanceLocation: [{ required: true, message: "璇疯緭鍏ヤ繚鍏婚儴浣�", trigger: "blur" }],
maintenanceItems: [{ required: true, message: "璇疯緭鍏ヤ繚鍏诲唴瀹�", trigger: "blur" }],
+ maintenancePlanTime: [{ required: true, message: "璇烽�夋嫨璁″垝淇濆吇鏃ユ湡", trigger: "change" }],
};
const syncCreateUserFromLogin = () => {
@@ -198,6 +199,7 @@
const resetAttachmentState = () => {
pendingTempFiles.value = [];
planFileList.value = [];
+ pendingDeleteFiles.value = [];
};
const normalizeFilePreviewUrl = (url = "") => {
@@ -221,6 +223,8 @@
status: "success",
uid: `saved-${item.id}`,
fileId: item.id,
+ // 鏍囪涓哄凡淇濆瓨鐨勬枃浠讹紝涓嶆槸鏂颁笂浼犵殑
+ isNew: false,
}));
};
@@ -239,38 +243,33 @@
const handlePlanFileUpload = async (options) => {
const { file, onSuccess, onError } = options;
try {
- if (id.value) {
- const fd = new FormData();
- fd.append("file", file);
- fd.append("deviceMaintenanceId", String(id.value));
- const res = await uploadMaintenanceTaskFile(fd);
- if (res.code === 200) {
- await loadPlanFiles(id.value);
- onSuccess(res);
- ElMessage.success("闄勪欢涓婁紶鎴愬姛");
- } else {
- onError(new Error(res.msg || "涓婁紶澶辫触"));
- }
- return;
- }
+ // 鏃犺鏂板杩樻槸缂栬緫锛岄兘鍏堜笂浼犲埌涓存椂鐩綍
const res = await uploadTempFile(file);
if (res.code !== 200) {
onError(new Error(res.msg || "涓婁紶澶辫触"));
return;
}
const data = res.data || {};
+ const tempId = data.tempId;
+
+ // 璁板綍涓存椂鏂囦欢淇℃伅
pendingTempFiles.value.push({
- tempId: data.tempId,
+ tempId: tempId,
name: data.originalName || file.name,
+ fileId: id.value ? tempId : undefined,
});
+
onSuccess(res);
planFileList.value.push({
name: data.originalName || file.name,
url: "",
status: "success",
- uid: data.tempId,
- tempId: data.tempId,
+ uid: tempId,
+ tempId: tempId,
+ // 鏍囪涓烘柊涓婁紶鐨勪复鏃舵枃浠�
+ isNew: true,
});
+ ElMessage.success("闄勪欢涓婁紶鎴愬姛");
} catch (e) {
onError(e);
ElMessage.error("闄勪欢涓婁紶澶辫触");
@@ -278,28 +277,29 @@
};
const handlePlanFileRemove = async (file) => {
- if (file.fileId) {
- try {
- await delMaintenanceTaskFile(file.fileId);
- await loadPlanFiles(id.value);
- } catch (e) {
- ElMessage.error("鍒犻櫎闄勪欢澶辫触");
- }
+ // 浠庢樉绀哄垪琛ㄤ腑绉婚櫎
+ planFileList.value = planFileList.value.filter((f) => f.uid !== file.uid);
+
+ const tempId = file.tempId || file.uid;
+ if (file.isNew) {
+ // 鏂颁笂浼犵殑涓存椂鏂囦欢锛岀洿鎺ヤ粠寰呬笂浼犲垪琛ㄧЩ闄�
+ pendingTempFiles.value = pendingTempFiles.value.filter((f) => f.tempId !== tempId);
return;
}
- const tempId = file.tempId || file.uid;
- pendingTempFiles.value = pendingTempFiles.value.filter((f) => f.tempId !== tempId);
- planFileList.value = planFileList.value.filter((f) => (f.tempId || f.uid) !== tempId);
+
+ if (file.fileId) {
+ pendingDeleteFiles.value.push({
+ fileId: file.fileId,
+ name: file.name,
+ });
+ }
};
-const bindPendingFiles = async (planId) => {
- if (!pendingTempFiles.value.length) return;
- for (const item of pendingTempFiles.value) {
- await bindMaintenanceTaskFile({
- tempId: item.tempId,
- name: item.name,
- deviceMaintenanceId: planId,
- });
+// 澶勭悊缂栬緫妯″紡涓嬪緟鍒犻櫎鐨勬枃浠�
+const processPendingDeletes = async () => {
+ if (!pendingDeleteFiles.value.length) return;
+ for (const file of pendingDeleteFiles.value) {
+ await delMaintenanceTaskFile(file.fileId);
}
};
@@ -338,6 +338,10 @@
payload.maintenancePerson = maintainer.nickName;
}
}
+ // 浼犻�掍复鏃舵枃浠禝D鍒楄〃锛岀敱鍚庣缁熶竴澶勭悊
+ if (pendingTempFiles.value.length > 0) {
+ payload.tempFileIds = pendingTempFiles.value.map((f) => f.tempId);
+ }
return payload;
};
@@ -367,6 +371,8 @@
try {
const payload = buildSubmitPayload();
if (id.value) {
+ // 缂栬緫妯″紡锛氬厛澶勭悊寰呭垹闄ょ殑鏂囦欢锛屽啀淇濆瓨琛ㄥ崟
+ await processPendingDeletes();
const { code } = await editUpkeep({ id: unref(id), ...payload });
if (code == 200) {
ElMessage.success("缂栬緫璁″垝鎴愬姛");
@@ -374,12 +380,9 @@
emits("ok");
}
} else {
+ // 鏂板妯″紡锛歵empFileIds 浼氶殢 payload 涓�璧蜂紶鍒板悗绔紝鐢卞悗绔鐞嗕复鏃舵枃浠剁殑鍏宠仈
const res = await addUpkeep(payload);
if (res.code == 200) {
- const planId = res.data?.id;
- if (planId) {
- await bindPendingFiles(planId);
- }
ElMessage.success("鏂板璁″垝鎴愬姛");
visible.value = false;
emits("ok");
--
Gitblit v1.9.3