gaoluyang
8 天以前 b176162c23294d8d1bfb9f09cf6bb759efb0124a
src/views/wls/batch/components/detail.vue
@@ -1,18 +1,58 @@
<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(),
@@ -25,6 +65,7 @@
  async onOpenChange(isOpen) {
    if (!isOpen) {
      detailData.value = undefined;
      itemData.value = undefined;
      return;
    }
    const data = modalApi.getData<{ id?: number }>();
@@ -34,6 +75,15 @@
    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();
    }