| | |
| | | <script lang="ts" setup> |
| | | import type { MdmItemApi } from '#/api/mdm/item'; |
| | | import type { MesWmBatchApi } from '#/api/mes/wm/batch'; |
| | | import type { DescriptionItemSchema } from '#/components/description'; |
| | | |
| | | import { ref } from 'vue'; |
| | | |
| | | import { useVbenModal } from '@vben/common-ui'; |
| | | |
| | | import { getItem } from '#/api/mdm/item'; |
| | | import { getBatch } from '#/api/mes/wm/batch'; |
| | | import { useDescription } from '#/components/description'; |
| | | |
| | | import { useDetailSchema } from '../data'; |
| | | |
| | | const detailData = ref<MesWmBatchApi.Batch>(); // 当前批次详情 |
| | | const detailData = ref<MesWmBatchApi.Batch>(); |
| | | const itemData = ref<MdmItemApi.Item>(); |
| | | |
| | | const [Descriptions] = useDescription({ |
| | | /** 根据物料批次属性配置过滤详情字段 */ |
| | | function filterSchemaByItemFlags( |
| | | schema: DescriptionItemSchema[], |
| | | item: MdmItemApi.Item | undefined, |
| | | ): DescriptionItemSchema[] { |
| | | // 基础数据字段始终显示 |
| | | const basicFields = new Set([ |
| | | 'code', |
| | | 'itemCode', |
| | | 'itemName', |
| | | 'itemSpecification', |
| | | 'unitName', |
| | | ]); |
| | | |
| | | // 批次属性字段与 flag 的映射 |
| | | const flagFieldMap: Record<string, keyof MdmItemApi.Item> = { |
| | | produceDate: 'produceDateFlag', |
| | | expireDate: 'expireDateFlag', |
| | | receiptDate: 'receiptDateFlag', |
| | | vendorName: 'vendorFlag', |
| | | purchaseOrderCode: 'purchaseOrderCodeFlag', |
| | | lotNumber: 'lotNumberFlag', |
| | | qualityStatus: 'qualityStatusFlag', |
| | | }; |
| | | |
| | | return schema.filter((s) => { |
| | | if (basicFields.has(s.field!)) return true; |
| | | const flagField = flagFieldMap[s.field!]; |
| | | if (flagField) { |
| | | return item?.[flagField] === true; |
| | | } |
| | | // 非基础、非批次属性字段不展示 |
| | | return false; |
| | | }); |
| | | } |
| | | |
| | | const [Descriptions, descApi] = useDescription({ |
| | | bordered: true, |
| | | column: 3, |
| | | schema: useDetailSchema(), |
| | |
| | | async onOpenChange(isOpen) { |
| | | if (!isOpen) { |
| | | detailData.value = undefined; |
| | | itemData.value = undefined; |
| | | return; |
| | | } |
| | | const data = modalApi.getData<{ id?: number }>(); |
| | |
| | | modalApi.lock(); |
| | | try { |
| | | detailData.value = await getBatch(data.id); |
| | | // 获取物料详情以读取批次属性配置 |
| | | if (detailData.value?.itemId) { |
| | | itemData.value = await getItem(detailData.value.itemId); |
| | | const filtered = filterSchemaByItemFlags( |
| | | useDetailSchema(), |
| | | itemData.value, |
| | | ); |
| | | descApi.setDescProps({ schema: filtered }); |
| | | } |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |