spring
昨天 9cfe25c453366d1203fc34fae59cabe396ec4abc
src/pages/equipmentManagement/repair/maintain.vue
@@ -82,7 +82,6 @@
                    @click.stop="showSparePart = true"></u-icon>
          </template>
        </u-form-item>
        <u-form-item v-if="selectedSpareParts.length"
                     label="领用数量"
                     border-bottom>
@@ -119,7 +118,6 @@
                        format="YYYY-MM-DD HH:mm:ss"
                        @confirm="onDateConfirm"
                        @cancel="showDatePicker = false" />
    <!-- 设备备件选择器 -->
    <up-popup :show="showSparePart"
              mode="bottom"
@@ -155,7 +153,7 @@
  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";
@@ -232,7 +230,7 @@
    };
    selectedSpareParts.value = [];
    tempSelectedSpareParts.value = [];
    Object.keys(sparePartQtyMap).forEach((k) => delete sparePartQtyMap[k]);
    Object.keys(sparePartQtyMap).forEach(k => delete sparePartQtyMap[k]);
  };
  const resetFormAndValidate = () => {
@@ -265,7 +263,10 @@
      }
      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) {
@@ -273,11 +274,19 @@
            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;
            }
@@ -285,12 +294,21 @@
        }
      }
      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 });
@@ -344,12 +362,14 @@
    }
  };
  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];
@@ -367,20 +387,23 @@
  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];
    }
@@ -408,17 +431,23 @@
    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(() => {});
      }
    }