| | |
| | | import type { VbenFormApi, VbenFormSchema } from '#/adapter/form'; |
| | | import type { VbenFormApi, VbenFormSchema } from '#/adapter/form'; |
| | | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; |
| | | import type { MesProTaskApi } from '#/api/mes/pro/task'; |
| | | import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder'; |
| | | |
| | | import { markRaw } from 'vue'; |
| | | |
| | | import { DICT_TYPE } from '../../../../packages/constants/src'; |
| | | import { getDictOptions } from '../../../../packages/effects/hooks/src'; |
| | | import { DICT_TYPE } from '@vben/constants'; |
| | | import { getDictOptions } from '@vben/hooks'; |
| | | |
| | | import CrmCustomerSelect from '#/components/crm-customer-select.vue'; |
| | | import { getRangePickerDefaultProps } from '#/utils'; |
| | | import { MdClientSelect } from '#/views/mes/md/client/components'; |
| | | import { MdItemSelect } from '#/views/mes/md/item/components'; |
| | | import { MdWorkstationSelect } from '#/views/mes/md/workstation/components'; |
| | | import { ProProcessSelect } from '#/views/mes/pro/process/components'; |
| | | import { RouteColorPicker } from '#/views/mes/pro/route/components'; |
| | | import { ProProcessSelect } from '#/views/mes/process-design/process/components'; |
| | | import { RouteColorPicker } from '#/views/mes/process-design/route/components'; |
| | | import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components'; |
| | | |
| | | /** 待排产工单列表的搜索表单 */ |
| | | /** 待排产订单列表的搜索表单 */ |
| | | export function useGridFormSchema(): VbenFormSchema[] { |
| | | return [ |
| | | { |
| | | fieldName: 'code', |
| | | label: '工单编码', |
| | | label: '订单编码', |
| | | component: 'Input', |
| | | componentProps: { |
| | | allowClear: true, |
| | | placeholder: '请输入工单编码', |
| | | placeholder: '请输入订单编码', |
| | | }, |
| | | }, |
| | | { |
| | | fieldName: 'name', |
| | | label: '工单名称', |
| | | label: '订单名称', |
| | | component: 'Input', |
| | | componentProps: { |
| | | allowClear: true, |
| | | placeholder: '请输入工单名称', |
| | | placeholder: '请输入订单名称', |
| | | }, |
| | | }, |
| | | { |
| | |
| | | { |
| | | fieldName: 'clientId', |
| | | label: '客户', |
| | | component: markRaw(MdClientSelect), |
| | | component: markRaw(CrmCustomerSelect), |
| | | componentProps: { |
| | | placeholder: '请选择客户', |
| | | }, |
| | |
| | | ]; |
| | | } |
| | | |
| | | /** 待排产工单列表的字段 */ |
| | | /** 待排产订单列表的字段 */ |
| | | export function useGridColumns(): VxeTableGridOptions<MesProWorkOrderApi.WorkOrder>['columns'] { |
| | | return [ |
| | | { |
| | | field: 'code', |
| | | title: '工单编码', |
| | | title: '订单编码', |
| | | fixed: 'left', |
| | | width: 200, |
| | | treeNode: true, |
| | |
| | | }, |
| | | { |
| | | field: 'name', |
| | | title: '工单名称', |
| | | title: '订单名称', |
| | | minWidth: 150, |
| | | }, |
| | | { |
| | | field: 'orderSourceType', |
| | | title: '工单来源', |
| | | title: '订单来源', |
| | | width: 100, |
| | | cellRender: { |
| | | name: 'CellDict', |
| | |
| | | }, |
| | | { |
| | | field: 'quantity', |
| | | title: '工单数量', |
| | | title: '订单数量', |
| | | width: 100, |
| | | }, |
| | | { |
| | |
| | | ]; |
| | | } |
| | | |
| | | /** 排产对话框只读工单信息的表单 */ |
| | | /** 排产对话框只读订单信息的表单 */ |
| | | export function useScheduleFormSchema(): VbenFormSchema[] { |
| | | return [ |
| | | { |
| | | fieldName: 'code', |
| | | label: '工单编码', |
| | | label: '订单编码', |
| | | component: 'Input', |
| | | componentProps: { |
| | | disabled: true, |
| | |
| | | }, |
| | | { |
| | | fieldName: 'name', |
| | | label: '工单名称', |
| | | label: '订单名称', |
| | | component: 'Input', |
| | | componentProps: { |
| | | disabled: true, |
| | |
| | | }, |
| | | { |
| | | fieldName: 'orderSourceType', |
| | | label: '工单来源', |
| | | label: '订单来源', |
| | | component: 'Select', |
| | | componentProps: { |
| | | disabled: true, |
| | |
| | | }, |
| | | { |
| | | fieldName: 'type', |
| | | label: '工单类型', |
| | | label: '订单类型', |
| | | component: 'Select', |
| | | componentProps: { |
| | | disabled: true, |
| | |
| | | }, |
| | | { |
| | | fieldName: 'quantity', |
| | | label: '工单数量', |
| | | label: '订单数量', |
| | | component: 'InputNumber', |
| | | componentProps: { |
| | | class: '!w-full', |
| | |
| | | { |
| | | fieldName: 'clientId', |
| | | label: '客户', |
| | | component: markRaw(MdClientSelect), |
| | | component: markRaw(CrmCustomerSelect), |
| | | componentProps: { |
| | | disabled: true, |
| | | }, |
| | |
| | | }, |
| | | { |
| | | fieldName: 'status', |
| | | label: '工单状态', |
| | | label: '订单状态', |
| | | component: 'Select', |
| | | componentProps: { |
| | | disabled: true, |
| | |
| | | }, |
| | | { |
| | | field: 'duration', |
| | | title: '生产时长', |
| | | width: 80, |
| | | title: '生产时长(h)', |
| | | width: 120, |
| | | }, |
| | | { |
| | | field: 'endTime', |
| | |
| | | }, |
| | | { |
| | | fieldName: 'duration', |
| | | label: '生产时长', |
| | | label: '生产时长(h)', |
| | | component: 'InputNumber', |
| | | componentProps: { |
| | | class: '!w-full', |
| | |
| | | ]; |
| | | } |
| | | |
| | | /** 计算结束时间:开始时间 + 生产时长 × 8 小时 */ |
| | | /** 计算结束时间:开始时间 + 生产时长(小时) */ |
| | | async function recalcEndTime(formApi?: VbenFormApi) { |
| | | if (!formApi) { |
| | | return; |
| | |
| | | const start = Number(values.startTime); |
| | | await formApi.setFieldValue( |
| | | 'endTime', |
| | | start + values.duration * 8 * 3600 * 1000, |
| | | start + values.duration * 3600 * 1000, |
| | | ); |
| | | } |
| | | } |
| | |
| | | return [ |
| | | { |
| | | fieldName: 'workOrderId', |
| | | label: '生产工单', |
| | | label: '生产订单', |
| | | component: markRaw(ProWorkOrderSelect), |
| | | componentProps: { |
| | | allowClear: true, |
| | | placeholder: '请选择生产工单', |
| | | placeholder: '请选择生产订单', |
| | | }, |
| | | }, |
| | | { |
| | |
| | | width: 170, |
| | | formatter: 'formatDateTime', |
| | | }, |
| | | { field: 'duration', title: '生产时长', width: 100 }, |
| | | { field: 'duration', title: '生产时长(h)', width: 120 }, |
| | | { |
| | | field: 'endTime', |
| | | title: '预计完成时间', |