| | |
| | | @click.stop="showSparePart = true"></u-icon> |
| | | </template> |
| | | </u-form-item> |
| | | |
| | | <u-form-item v-if="selectedSpareParts.length" |
| | | label="领用数量" |
| | | border-bottom> |
| | |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | @confirm="onDateConfirm" |
| | | @cancel="showDatePicker = false" /> |
| | | |
| | | <!-- 设备备件选择器 --> |
| | | <up-popup :show="showSparePart" |
| | | mode="bottom" |
| | |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import { addMaintain } from "@/api/equipmentManagement/repair"; |
| | | import { getSparePartsList } from "@/api/equipmentManagement/spareParts"; |
| | | import { getSparePartsList } from "@/api/equipmentManagement/repair"; |
| | | import useUserStore from "@/store/modules/user"; |
| | | import dayjs from "dayjs"; |
| | | |
| | |
| | | }; |
| | | selectedSpareParts.value = []; |
| | | tempSelectedSpareParts.value = []; |
| | | Object.keys(sparePartQtyMap).forEach((k) => delete sparePartQtyMap[k]); |
| | | Object.keys(sparePartQtyMap).forEach(k => delete sparePartQtyMap[k]); |
| | | }; |
| | | |
| | | const resetFormAndValidate = () => { |
| | |
| | | } |
| | | form.value.status = Number(form.value.status); |
| | | // 领用数量校验 |
| | | if (Array.isArray(form.value.sparePartsIds) && form.value.sparePartsIds.length > 0) { |
| | | if ( |
| | | Array.isArray(form.value.sparePartsIds) && |
| | | form.value.sparePartsIds.length > 0 |
| | | ) { |
| | | for (const partId of form.value.sparePartsIds) { |
| | | const qty = Number(sparePartQtyMap?.[partId]); |
| | | if (!Number.isFinite(qty) || qty <= 0) { |
| | |
| | | loading.value = false; |
| | | return; |
| | | } |
| | | const part = sparePartOptions.value.find((p) => String(p.id) === String(partId)); |
| | | 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 ( |
| | | stock !== null && |
| | | stock !== undefined && |
| | | Number.isFinite(Number(stock)) |
| | | ) { |
| | | if (qty > Number(stock)) { |
| | | showToast(`备件「${part?.name || ""}」领用数量不能超过库存(${stock})`); |
| | | showToast( |
| | | `备件「${part?.name || ""}」领用数量不能超过库存(${stock})` |
| | | ); |
| | | loading.value = false; |
| | | return; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | const spareIds = Array.isArray(form.value.sparePartsIds) ? form.value.sparePartsIds : []; |
| | | const spareIds = Array.isArray(form.value.sparePartsIds) |
| | | ? form.value.sparePartsIds |
| | | : []; |
| | | const submitData = { |
| | | ...form.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 addMaintain({ id: id, ...submitData }); |
| | |
| | | } |
| | | }; |
| | | |
| | | const isSparePartSelected = (id) => { |
| | | return tempSelectedSpareParts.value.some((p) => String(p.id) === String(id)); |
| | | const isSparePartSelected = id => { |
| | | return tempSelectedSpareParts.value.some(p => String(p.id) === String(id)); |
| | | }; |
| | | |
| | | const toggleSparePartSelection = (item) => { |
| | | const idx = tempSelectedSpareParts.value.findIndex((p) => String(p.id) === String(item.id)); |
| | | const toggleSparePartSelection = item => { |
| | | const idx = tempSelectedSpareParts.value.findIndex( |
| | | p => String(p.id) === String(item.id) |
| | | ); |
| | | if (idx >= 0) { |
| | | tempSelectedSpareParts.value.splice(idx, 1); |
| | | delete sparePartQtyMap[item.id]; |
| | |
| | | |
| | | const confirmSparePartSelection = () => { |
| | | selectedSpareParts.value = [...tempSelectedSpareParts.value]; |
| | | form.value.sparePartsIds = selectedSpareParts.value.map((i) => i.id); |
| | | form.value.sparePartsIds = selectedSpareParts.value.map(i => i.id); |
| | | // 保底给未填的数量赋值 |
| | | selectedSpareParts.value.forEach((p) => { |
| | | if (!Number.isFinite(Number(sparePartQtyMap[p.id])) || Number(sparePartQtyMap[p.id]) <= 0) { |
| | | selectedSpareParts.value.forEach(p => { |
| | | if ( |
| | | !Number.isFinite(Number(sparePartQtyMap[p.id])) || |
| | | Number(sparePartQtyMap[p.id]) <= 0 |
| | | ) { |
| | | sparePartQtyMap[p.id] = 1; |
| | | } |
| | | }); |
| | | showSparePart.value = false; |
| | | }; |
| | | |
| | | const removeSparePart = (index) => { |
| | | const removeSparePart = index => { |
| | | const removed = selectedSpareParts.value.splice(index, 1)[0]; |
| | | tempSelectedSpareParts.value = [...selectedSpareParts.value]; |
| | | form.value.sparePartsIds = selectedSpareParts.value.map((i) => i.id); |
| | | form.value.sparePartsIds = selectedSpareParts.value.map(i => i.id); |
| | | if (removed?.id !== null && removed?.id !== undefined) { |
| | | delete sparePartQtyMap[removed.id]; |
| | | } |
| | |
| | | initForm(); |
| | | }); |
| | | |
| | | watch(showSparePart, (val) => { |
| | | watch(showSparePart, val => { |
| | | if (val) { |
| | | tempSelectedSpareParts.value = [...selectedSpareParts.value]; |
| | | tempSelectedSpareParts.value.forEach((p) => { |
| | | if (!Number.isFinite(Number(sparePartQtyMap[p.id])) || Number(sparePartQtyMap[p.id]) <= 0) { |
| | | tempSelectedSpareParts.value.forEach(p => { |
| | | if ( |
| | | !Number.isFinite(Number(sparePartQtyMap[p.id])) || |
| | | Number(sparePartQtyMap[p.id]) <= 0 |
| | | ) { |
| | | sparePartQtyMap[p.id] = 1; |
| | | } |
| | | }); |
| | | |
| | | // 兜底:如果还没加载备件列表,打开弹窗时再拉一次 |
| | | if (!Array.isArray(sparePartOptions.value) || sparePartOptions.value.length === 0) { |
| | | if ( |
| | | !Array.isArray(sparePartOptions.value) || |
| | | sparePartOptions.value.length === 0 |
| | | ) { |
| | | fetchSparePartOptions().catch(() => {}); |
| | | } |
| | | } |