| | |
| | | @click="showSparePartPicker" /> |
| | | </template> |
| | | </u-form-item> |
| | | |
| | | <u-form-item v-if="selectedSpareParts.length" |
| | | label="领用数量" |
| | | border-bottom> |
| | |
| | | import { ref, onMounted, reactive } from "vue"; |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import { |
| | | addMaintenance, |
| | | } from "@/api/equipmentManagement/upkeep"; |
| | | import { getSparePartsList } from "@/api/equipmentManagement/spareParts"; |
| | | import { addMaintenance } from "@/api/equipmentManagement/upkeep"; |
| | | import { getSparePartsList } from "@/api/equipmentManagement/repair"; |
| | | import useUserStore from "@/store/modules/user"; |
| | | import dayjs from "dayjs"; |
| | | import { formatDateToYMD } from "@/utils/ruoyi"; |
| | |
| | | maintenancestatusText.value = ""; |
| | | selectedSpareParts.value = []; |
| | | tempSelectedSpareParts.value = []; |
| | | Object.keys(sparePartQtyMap).forEach((k) => delete sparePartQtyMap[k]); |
| | | Object.keys(sparePartQtyMap).forEach(k => delete sparePartQtyMap[k]); |
| | | sparePartsQtyRaw.value = ""; |
| | | }; |
| | | |
| | |
| | | return; |
| | | } |
| | | // 领用数量校验 |
| | | const spareIds = Array.isArray(form.value.sparePartsIds) ? form.value.sparePartsIds : []; |
| | | const spareIds = Array.isArray(form.value.sparePartsIds) |
| | | ? form.value.sparePartsIds |
| | | : []; |
| | | if (spareIds.length > 0) { |
| | | for (const partId of spareIds) { |
| | | const qty = Number(sparePartQtyMap?.[partId]); |
| | |
| | | loading.value = false; |
| | | return; |
| | | } |
| | | const part = sparePartOptions.value.find((p) => String(p.id || p.value) === String(partId)); |
| | | const part = sparePartOptions.value.find( |
| | | p => String(p.id || p.value) === String(partId) |
| | | ); |
| | | const stock = part?.quantity; |
| | | if (stock !== null && stock !== undefined && Number.isFinite(Number(stock))) { |
| | | if ( |
| | | stock !== null && |
| | | stock !== undefined && |
| | | Number.isFinite(Number(stock)) |
| | | ) { |
| | | if (qty > Number(stock)) { |
| | | showToast(`备件「${part?.name || ""}」领用数量不能超过库存(${stock})`); |
| | | showToast( |
| | | `备件「${part?.name || ""}」领用数量不能超过库存(${stock})` |
| | | ); |
| | | loading.value = false; |
| | | return; |
| | | } |
| | |
| | | ...form.value, |
| | | imagesFile: form.value.status == "1" ? uploadFiles.value : [], |
| | | sparePartsIds: spareIds.length ? spareIds.join(",") : "", |
| | | sparePartsQty: spareIds.length ? spareIds.map((pid) => sparePartQtyMap?.[pid] ?? 1).join(",") : "", |
| | | sparePartsUseList: spareIds.length ? spareIds.map((pid) => ({ id: pid, quantity: sparePartQtyMap?.[pid] ?? 1 })) : [], |
| | | sparePartsQty: spareIds.length |
| | | ? spareIds.map(pid => sparePartQtyMap?.[pid] ?? 1).join(",") |
| | | : "", |
| | | sparePartsUseList: spareIds.length |
| | | ? spareIds.map(pid => ({ |
| | | id: pid, |
| | | quantity: sparePartQtyMap?.[pid] ?? 1, |
| | | })) |
| | | : [], |
| | | }; |
| | | const { code } = await addMaintenance({ id: id, ...submitData }); |
| | | |
| | |
| | | // 显示设备备件选择器 |
| | | const showSparePartPicker = () => { |
| | | tempSelectedSpareParts.value = [...selectedSpareParts.value]; |
| | | tempSelectedSpareParts.value.forEach((p) => { |
| | | tempSelectedSpareParts.value.forEach(p => { |
| | | const pid = p?.id ?? p?.value; |
| | | if (pid !== null && pid !== undefined) { |
| | | if (!Number.isFinite(Number(sparePartQtyMap[pid])) || Number(sparePartQtyMap[pid]) <= 0) { |
| | | if ( |
| | | !Number.isFinite(Number(sparePartQtyMap[pid])) || |
| | | Number(sparePartQtyMap[pid]) <= 0 |
| | | ) { |
| | | sparePartQtyMap[pid] = 1; |
| | | } |
| | | } |
| | |
| | | delete sparePartQtyMap[itemId]; |
| | | } else { |
| | | tempSelectedSpareParts.value.push(item); |
| | | if (!Number.isFinite(Number(sparePartQtyMap[itemId])) || Number(sparePartQtyMap[itemId]) <= 0) { |
| | | if ( |
| | | !Number.isFinite(Number(sparePartQtyMap[itemId])) || |
| | | Number(sparePartQtyMap[itemId]) <= 0 |
| | | ) { |
| | | sparePartQtyMap[itemId] = 1; |
| | | } |
| | | } |
| | |
| | | // 确认备件选择 |
| | | const confirmSparePartSelection = () => { |
| | | selectedSpareParts.value = [...tempSelectedSpareParts.value]; |
| | | form.value.sparePartsIds = selectedSpareParts.value.map(item => item.id || item.value); |
| | | selectedSpareParts.value.forEach((p) => { |
| | | form.value.sparePartsIds = selectedSpareParts.value.map( |
| | | item => item.id || item.value |
| | | ); |
| | | selectedSpareParts.value.forEach(p => { |
| | | const pid = p?.id ?? p?.value; |
| | | if (pid !== null && pid !== undefined) { |
| | | if (!Number.isFinite(Number(sparePartQtyMap[pid])) || Number(sparePartQtyMap[pid]) <= 0) { |
| | | if ( |
| | | !Number.isFinite(Number(sparePartQtyMap[pid])) || |
| | | Number(sparePartQtyMap[pid]) <= 0 |
| | | ) { |
| | | sparePartQtyMap[pid] = 1; |
| | | } |
| | | } |
| | |
| | | // 移除已选备件 |
| | | const removeSparePart = index => { |
| | | const removed = selectedSpareParts.value.splice(index, 1)[0]; |
| | | form.value.sparePartsIds = selectedSpareParts.value.map(item => item.id || item.value); |
| | | form.value.sparePartsIds = selectedSpareParts.value.map( |
| | | item => item.id || item.value |
| | | ); |
| | | const rid = removed?.id ?? removed?.value; |
| | | if (rid !== null && rid !== undefined) delete sparePartQtyMap[rid]; |
| | | }; |
| | |
| | | const idArray = |
| | | typeof sparePartsIds.value === "string" |
| | | ? sparePartsIds.value.split(",") |
| | | : (Array.isArray(sparePartsIds.value) ? sparePartsIds.value : []); |
| | | : Array.isArray(sparePartsIds.value) |
| | | ? sparePartsIds.value |
| | | : []; |
| | | |
| | | if (idArray.length > 0) { |
| | | selectedSpareParts.value = sparePartOptions.value |
| | |
| | | quantity: option.quantity, |
| | | })); |
| | | // 设置备件IDs(保持数组,提交时再 join) |
| | | form.value.sparePartsIds = idArray.map((v) => { |
| | | form.value.sparePartsIds = idArray.map(v => { |
| | | const n = Number(String(v).trim()); |
| | | return Number.isFinite(n) ? n : String(v).trim(); |
| | | }); |
| | | |
| | | // 回显领用数量(若有 sparePartsQty) |
| | | if (typeof sparePartsQtyRaw.value === "string" && sparePartsQtyRaw.value.trim()) { |
| | | const qtyArr = sparePartsQtyRaw.value.split(",").map((s) => Number(String(s).trim())); |
| | | if ( |
| | | typeof sparePartsQtyRaw.value === "string" && |
| | | sparePartsQtyRaw.value.trim() |
| | | ) { |
| | | const qtyArr = sparePartsQtyRaw.value |
| | | .split(",") |
| | | .map(s => Number(String(s).trim())); |
| | | selectedSpareParts.value.forEach((p, idx) => { |
| | | const pid = p?.id ?? p?.value; |
| | | const q = qtyArr[idx]; |
| | | if (pid !== null && pid !== undefined && Number.isFinite(q) && q > 0) { |
| | | if ( |
| | | pid !== null && |
| | | pid !== undefined && |
| | | Number.isFinite(q) && |
| | | q > 0 |
| | | ) { |
| | | sparePartQtyMap[pid] = q; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // 默认数量兜底 |
| | | selectedSpareParts.value.forEach((p) => { |
| | | selectedSpareParts.value.forEach(p => { |
| | | const pid = p?.id ?? p?.value; |
| | | if (pid !== null && pid !== undefined) { |
| | | if (!Number.isFinite(Number(sparePartQtyMap[pid])) || Number(sparePartQtyMap[pid]) <= 0) { |
| | | if ( |
| | | !Number.isFinite(Number(sparePartQtyMap[pid])) || |
| | | Number(sparePartQtyMap[pid]) <= 0 |
| | | ) { |
| | | sparePartQtyMap[pid] = 1; |
| | | } |
| | | } |