From 17ade360ca9cb330bb89c81586cd46593bccbb1e Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期三, 01 四月 2026 17:06:20 +0800
Subject: [PATCH] fix: 设备维修添加背景
---
src/views/equipmentManagement/repair/Modal/MaintainModal.vue | 105 ++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 93 insertions(+), 12 deletions(-)
diff --git a/src/views/equipmentManagement/repair/Modal/MaintainModal.vue b/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
index 983b316..b0b09f0 100644
--- a/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/MaintainModal.vue
@@ -42,24 +42,51 @@
/>
</el-select>
</el-form-item>
+
+ <el-form-item v-if="selectedSpareParts.length" label="棰嗙敤鏁伴噺">
+ <div style="width: 100%">
+ <div
+ v-for="item in selectedSpareParts"
+ :key="item.id"
+ style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px;"
+ >
+ <div style="flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
+ {{ item.name }}
+ <span v-if="item.quantity !== null && item.quantity !== undefined" style="color: #909399;">
+ 锛堝簱瀛橈細{{ item.quantity }}锛�
+ </span>
+ </div>
+ <el-input-number
+ v-model="sparePartQtyMap[item.id]"
+ :min="1"
+ :max="item.quantity !== null && item.quantity !== undefined ? Number(item.quantity) : undefined"
+ :step="1"
+ controls-position="right"
+ style="width: 180px"
+ />
+ </div>
+ </div>
+ </el-form-item>
</el-form>
</FormDialog>
</template>
<script setup>
+import { computed, getCurrentInstance, nextTick, ref } from "vue";
import FormDialog from "@/components/Dialog/FormDialog.vue";
import { addMaintain } from "@/api/equipmentManagement/repair";
import useFormData from "@/hooks/useFormData";
import useUserStore from "@/store/modules/user";
import dayjs from "dayjs";
import { ElMessage } from "element-plus";
-import {getSparePartsOptions} from "@/api/equipmentManagement/spareParts.js";
+import { getSparePartsList } from "@/api/equipmentManagement/spareParts";
defineOptions({
name: "缁翠慨妯℃�佹",
});
const emits = defineEmits(["ok"]);
+const { proxy } = getCurrentInstance();
// 淇濆瓨鎶ヤ慨璁板綍鐨刬d
const repairId = ref();
@@ -72,10 +99,17 @@
maintenanceResult: undefined, // 缁翠慨缁撴灉
maintenanceTime: undefined, // 缁翠慨鏃ユ湡
status: 0,
- sparePartsIds: undefined,
+ sparePartsIds: [],
});
const sparePartOptions = ref([])
const loadingSparePartOptions = ref(true)
+const sparePartQtyMap = ref({})
+
+const selectedSpareParts = computed(() => {
+ const ids = Array.isArray(form.sparePartsIds) ? form.sparePartsIds : [];
+ const set = new Set(ids.map((i) => String(i)));
+ return (sparePartOptions.value || []).filter((p) => set.has(String(p.id)));
+});
const setForm = (data) => {
form.maintenanceName = data.maintenanceName ?? userStore.nickName;
@@ -85,22 +119,59 @@
? dayjs(data.maintenanceTime).format("YYYY-MM-DD HH:mm:ss")
: dayjs().format("YYYY-MM-DD HH:mm:ss");
form.status = 1; // 榛樿鐘舵�佷负瀹岀粨
- form.sparePartsIds = data.sparePartsIds;
+ // multiple 閫夋嫨鍣ㄨ姹傛暟缁勶紱鍚庣甯歌繑鍥� "1,2,3"
+ if (Array.isArray(data?.sparePartsIds)) {
+ form.sparePartsIds = data.sparePartsIds.map((v) => Number(v)).filter((v) => Number.isFinite(v));
+ } else if (typeof data?.sparePartsIds === "string") {
+ form.sparePartsIds = data.sparePartsIds
+ .split(",")
+ .map((s) => Number(String(s).trim()))
+ .filter((v) => Number.isFinite(v));
+ } else if (typeof data?.sparePartsIds === "number") {
+ form.sparePartsIds = [data.sparePartsIds];
+ } else {
+ form.sparePartsIds = [];
+ }
};
const sendForm = async () => {
loading.value = true;
try {
+ // 棰嗙敤鏁伴噺鏍¢獙
+ if (Array.isArray(form.sparePartsIds) && form.sparePartsIds.length > 0) {
+ for (const partId of form.sparePartsIds) {
+ const qty = Number(sparePartQtyMap.value?.[partId]);
+ if (!Number.isFinite(qty) || qty <= 0) {
+ proxy?.$modal?.msgError?.("璇峰~鍐欏浠堕鐢ㄦ暟閲�");
+ return;
+ }
+ const part = sparePartOptions.value.find((p) => String(p.id) === String(partId));
+ const stock = part?.quantity;
+ if (stock !== null && stock !== undefined && Number.isFinite(Number(stock))) {
+ if (qty > Number(stock)) {
+ proxy?.$modal?.msgError?.(`澶囦欢銆�${part?.name || ""}銆嶉鐢ㄦ暟閲忎笉鑳借秴杩囧簱瀛橈紙${stock}锛塦);
+ return;
+ }
+ }
+ }
+ }
const data = {
id: repairId.value,
...form,
sparePartsIds: form.sparePartsIds ? form.sparePartsIds.join(",") : "",
+ sparePartsQty: form.sparePartsIds
+ ? form.sparePartsIds.map((id) => sparePartQtyMap.value?.[id] ?? 1).join(",")
+ : "",
+ sparePartsUseList: form.sparePartsIds
+ ? form.sparePartsIds.map((id) => ({ id, quantity: sparePartQtyMap.value?.[id] ?? 1 }))
+ : [],
}
const { code } = await addMaintain(data);
if (code == 200) {
ElMessage.success("缁翠慨鎴愬姛");
emits("ok");
resetForm();
+ sparePartQtyMap.value = {};
visible.value = false;
}
} finally {
@@ -108,24 +179,34 @@
}
};
-const fetchSparePartOptions = (deviceLedgerId) => {
+const fetchSparePartOptions = () => {
loadingSparePartOptions.value = true;
- getSparePartsOptions({ deviceLedgerId: deviceLedgerId }).then((res) => {
- if (res.code == 200) {
- sparePartOptions.value = res.data || [];
- }
- }).finally(() => {
- loadingSparePartOptions.value = false;
- })
+ // 鍜屽浠剁鐞嗛〉涓�鑷达細/spareParts/listPage 鈫� res.data.records
+ getSparePartsList({ current: 1, size: 1000 })
+ .then((res) => {
+ if (res.code === 200) {
+ sparePartOptions.value = res?.data?.records || [];
+ } else {
+ sparePartOptions.value = [];
+ }
+ })
+ .catch(() => {
+ sparePartOptions.value = [];
+ })
+ .finally(() => {
+ loadingSparePartOptions.value = false;
+ });
}
const handleCancel = () => {
resetForm();
+ sparePartQtyMap.value = {};
visible.value = false;
};
const handleClose = () => {
resetForm();
+ sparePartQtyMap.value = {};
visible.value = false;
};
@@ -134,7 +215,7 @@
visible.value = true;
await nextTick();
setForm(row);
- fetchSparePartOptions(row.deviceLedgerId)
+ fetchSparePartOptions()
};
defineExpose({
--
Gitblit v1.9.3