| | |
| | | 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 { getRangePickerDefaultProps } from '#/utils'; |
| | | import { |
| | | MdItemSelect, |
| | | MdProductBomSelect, |
| | | } from '#/views/mes/md/item/components'; |
| | | import { MdVendorSelect } from '#/views/mes/md/vendor/components'; |
| | | |
| | |
| | | ]; |
| | | } |
| | | |
| | | /** 订单 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, |
| | | }, |
| | | }, |
| | | ]; |
| | | } |
| | | |
| | | /** 订单选择弹窗的搜索表单 */ |
| | | export function useWorkOrderSelectGridFormSchema(): VbenFormSchema[] { |
| | | return [ |
| | |
| | | field: 'drag', |
| | | title: '', |
| | | width: 40, |
| | | fixed: 'left', |
| | | slots: { default: 'dragHandle' }, |
| | | } as const, |
| | | ] |
| | |
| | | { |
| | | type: 'expand', |
| | | width: 50, |
| | | slots: { content: 'expand_content' }, |
| | | } as const, |
| | | { |
| | | field: 'sort', |
| | |
| | | }, |
| | | { |
| | | title: '操作', |
| | | width: 120, |
| | | width: 200, |
| | | fixed: 'right', |
| | | slots: { default: 'actions' }, |
| | | }, |