云
2 天以前 77e4c3d0201a83cf41b73d7bd7a79255759575f4
src/views/mes/pro/bagCode/modules/bind-pallet.vue
@@ -1,5 +1,6 @@
<script lang="ts" setup>
  import type { VbenFormSchema } from "#/adapter/form";
  import type { MesProPalletApi } from "#/api/mes/pro/pallet";
  import { useVbenModal } from "@vben/common-ui";
  import { MesProPalletStatusEnum } from "@vben/constants";
@@ -8,19 +9,30 @@
  import { useVbenForm } from "#/adapter/form";
  import { bindBagCodePallet } from "#/api/mes/pro/bagCode";
  import { getPalletSimpleList } from "#/api/mes/pro/pallet";
  import {
    getPalletBindableList,
    getPalletSimpleList,
  } from "#/api/mes/pro/pallet";
  import { $t } from "#/locales";
  defineOptions({ name: "MesProBagCodeBindPallet" });
  /** 弹窗传入数据 */
  /** 弹窗传入数据(batchId 为空表示所选袋码尚未录入生产批次) */
  interface ModalData {
    batchId: number;
    batchId?: number;
    batchCode?: string;
    itemId?: number;
    ids: number[];
  }
  const emit = defineEmits(["success"]);
  /** 未录入批次时的托盘展示名:正式托盘带批次号、临时托盘回退到临时码,便于在混合列表中分辨 */
  function palletLabel(pallet: MesProPalletApi.Pallet) {
    const code = pallet.code || pallet.tempCode || "-";
    const batchPart = pallet.batchCode ? `批次 ${pallet.batchCode}` : "临时托盘";
    return `${code}(${batchPart} / 已装 ${pallet.bagCount ?? 0} 袋)`;
  }
  /** 构建表单(托盘下拉选项由外部加载注入) */
  function buildSchema(palletOptions: { label: string; value: number }[]): VbenFormSchema[] {
@@ -90,22 +102,23 @@
      const data = modalApi.getData<ModalData>();
      modalApi.lock();
      try {
        // 加载该批次下的托盘(排除已作废)
        const pallets = await getPalletSimpleList(data.batchId);
        // 已录入批次:只列本批次的托盘;未录入批次:列该品种可用的临时托盘与正式托盘,
        // 选到正式托盘时由后端先把这批袋码补录进该批次,再完成绑定
        const pallets = data.batchId
          ? await getPalletSimpleList(data.batchId)
          : await getPalletBindableList(data.itemId);
        const options = pallets
          .filter(
            (pallet) => pallet.status !== MesProPalletStatusEnum.CANCELED
          )
          .filter((pallet) => pallet.status !== MesProPalletStatusEnum.CANCELED)
          .map((pallet) => ({
            label: `${pallet.code}(已装 ${pallet.bagCount ?? 0} 袋 / 可装 ${
              pallet.capacity ?? "不限"
            } 袋)`,
            label: data.batchId
              ? `${pallet.code}(已装 ${pallet.bagCount ?? 0} 袋)`
              : palletLabel(pallet),
            value: pallet.id!,
          }));
        await formApi.setState({ schema: buildSchema(options) });
        await formApi.setValues({
          bagCount: data.ids.length,
          batchCode: data.batchCode,
          batchCode: data.batchCode || "未录入批次",
        });
      } finally {
        modalApi.unlock();