| | |
| | | <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"; |
| | |
| | | |
| | | 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[] { |
| | |
| | | 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(); |