xiaoyi
4 天以前 a4025834e2304dc57f6e98d58feeb9416bd90609
src/views/mes/pro/workorder/data.ts
@@ -1,9 +1,9 @@
import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MesMdProductBomApi } from '#/api/mes/md/item/productBom';
import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';
import type { MesProWorkOrderBomApi } from '#/api/mes/pro/workorder/bom';
import type { MesProWorkOrderProcessApi } from '#/api/mes/pro/workorder/process';
import type { ErpSaleOrderApi } from '#/api/erp/sale/order';
import { h, markRaw } from 'vue';
@@ -22,9 +22,9 @@
import { getRangePickerDefaultProps } from '#/utils';
import {
  MdItemSelect,
  MdProductBomSelect,
} from '#/views/mes/md/item/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';
import { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';
/** 表单类型 */
export type FormType = 'confirm' | 'create' | 'detail' | 'finish' | 'update';
@@ -202,6 +202,30 @@
      },
    },
    {
      fieldName: 'saleOrderId',
      label: '营销订单',
      component: markRaw(ErpSaleOrderSelect),
      componentProps: {
        disabled: headerReadonly,
        placeholder: '请选择营销订单(ERP销售订单)',
        // 选中营销订单后自动带入客户
        onChange: async (item?: ErpSaleOrderApi.SaleOrder) => {
          if (!item) {
            return;
          }
          const values = (await formApi?.getValues()) ?? {};
          if (values.clientId == null && item.customerId) {
            await formApi?.setFieldValue('clientId', item.customerId);
          }
        },
      },
      dependencies: {
        triggerFields: ['orderSourceType'],
        show: (values) =>
          values.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER,
      },
    },
    {
      fieldName: 'vendorId',
      label: '供应商',
      component: markRaw(MdVendorSelect),
@@ -234,7 +258,7 @@
        disabled: headerReadonly,
        format: 'YYYY-MM-DD',
        placeholder: '请选择需求日期',
        valueFormat: 'x',
        valueFormat: 'YYYY-MM-DD',
      },
      rules: 'required',
    },
@@ -400,6 +424,11 @@
      width: 120,
    },
    {
      field: 'saleOrderNo',
      title: '营销订单号',
      width: 140,
    },
    {
      field: 'requestDate',
      title: '需求日期',
      width: 180,
@@ -415,6 +444,27 @@
      },
    },
    {
      field: 'productionStatus',
      title: '生产状态',
      width: 100,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.ORDER_PRODUCTION_STATUS },
      },
    },
    {
      field: 'processProgressList',
      title: '工序生产进度',
      width: 350,
      slots: { default: 'processProgressList' },
    },
    {
      field: 'completionProgress',
      title: '完成进度',
      width: 200,
      slots: { default: 'completionProgress' },
    },
    {
      field: 'createTime',
      title: '创建时间',
      width: 180,
@@ -425,137 +475,6 @@
      width: 240,
      fixed: 'right',
      slots: { default: 'actions' },
    },
  ];
}
/** 订单 BOM 子表的字段 */
export function useBomGridColumns(
  editable: boolean,
  generatable: boolean,
): VxeTableGridOptions<MesProWorkOrderBomApi.WorkOrderBom>['columns'] {
  return [
    {
      field: 'itemCode',
      title: 'BOM 物料编码',
      width: 120,
    },
    {
      field: 'itemName',
      title: 'BOM 物料名称',
      minWidth: 150,
    },
    {
      field: 'itemSpecification',
      title: '规格型号',
      width: 120,
    },
    {
      field: 'unitMeasureName',
      title: '单位',
      width: 80,
    },
    {
      field: 'itemOrProduct',
      title: '物料/产品',
      width: 100,
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.MES_MD_ITEM_OR_PRODUCT },
      },
    },
    {
      field: 'quantity',
      title: '预计使用量',
      width: 120,
    },
    {
      field: 'remark',
      title: '备注',
      minWidth: 120,
    },
    ...(editable || generatable
      ? [
          {
            title: '操作',
            width: 160,
            fixed: 'right',
            slots: { default: 'actions' },
          } as const,
        ]
      : []),
  ];
}
/** 订单 BOM 新增/修改的表单 */
export function useBomFormSchema(
  isCreate: boolean,
  productId?: number,
  formApi?: VbenFormApi,
): VbenFormSchema[] {
  return [
    {
      fieldName: 'itemId',
      label: '物料',
      component: markRaw(MdProductBomSelect),
      componentProps: {
        itemId: productId,
        placeholder: '请选择物料',
        // BOM 物料选中后自动回填预计使用量
        onChange: async (bom?: MesMdProductBomApi.ProductBom) => {
          await formApi?.setFieldValue('quantity', bom?.quantity ?? undefined);
        },
      },
      rules: 'selectRequired',
      dependencies: {
        triggerFields: [''],
        show: () => isCreate,
      },
    },
    {
      fieldName: 'itemName',
      label: '物料',
      component: 'Input',
      componentProps: {
        disabled: true,
      },
      dependencies: {
        triggerFields: [''],
        show: () => !isCreate,
      },
    },
    {
      fieldName: 'unitMeasureName',
      label: '单位',
      component: 'Input',
      componentProps: {
        disabled: true,
      },
      dependencies: {
        triggerFields: [''],
        show: () => !isCreate,
      },
    },
    {
      fieldName: 'quantity',
      label: '预计使用量',
      component: 'InputNumber',
      componentProps: {
        class: '!w-full',
        min: 0,
        placeholder: '请输入预计使用量',
        precision: 2,
      },
      rules: 'required',
    },
    {
      fieldName: 'remark',
      label: '备注',
      component: 'Textarea',
      componentProps: {
        placeholder: '请输入备注',
        rows: 3,
      },
    },
  ];
}
@@ -747,7 +666,6 @@
            field: 'drag',
            title: '',
            width: 40,
            fixed: 'left',
            slots: { default: 'dragHandle' },
          } as const,
        ]
@@ -755,6 +673,7 @@
    {
      type: 'expand',
      width: 50,
      slots: { content: 'expand_content' },
    } as const,
    {
      field: 'sort',
@@ -819,14 +738,9 @@
      slots: { default: 'backflushFlag' },
    },
    {
      field: 'outputItemCode',
      title: '产出物料编码',
      width: 120,
    },
    {
      field: 'outputItemName',
      title: '产出物料名称',
      width: 120,
      field: 'outputItemNames',
      title: '产出物料',
      width: 160,
    },
    {
      field: 'remark',
@@ -835,7 +749,7 @@
    },
    {
      title: '操作',
      width: 120,
      width: 200,
      fixed: 'right',
      slots: { default: 'actions' },
    },