| | |
| | | /** 表单类型 */ |
| | | export type FormType = 'create' | 'detail' | 'update'; |
| | | |
| | | /** 计费类型:1-计时 2-计件 */ |
| | | export const PROCESS_BILLING_TYPE_OPTIONS = [ |
| | | { label: '计时(元/小时)', value: 1 }, |
| | | { label: '计件(元/件)', value: 2 }, |
| | | ]; |
| | | |
| | | /** 计费类型名称 */ |
| | | export function getBillingTypeLabel(billingType?: number) { |
| | | return ( |
| | | PROCESS_BILLING_TYPE_OPTIONS.find((item) => item.value === billingType) |
| | | ?.label ?? '-' |
| | | ); |
| | | } |
| | | |
| | | /** 工资定额单位 */ |
| | | export function getWageRateUnit(billingType?: number) { |
| | | return billingType === 1 ? '元/小时' : '元/件'; |
| | | } |
| | | |
| | | /** 标准工时计算方式 */ |
| | | export const STD_TIME_MODE_OPTIONS = [ |
| | | { label: '未启用', value: 0 }, |
| | | { label: '转速 × 节距', value: 1 }, |
| | | { label: '线速度直取', value: 2 }, |
| | | { label: '满速百分比 × 节距', value: 3 }, |
| | | ]; |
| | | |
| | | /** 标准工时计算方式名称 */ |
| | | export function getStdTimeModeLabel(mode?: number) { |
| | | return STD_TIME_MODE_OPTIONS.find((item) => item.value === mode)?.label ?? '-'; |
| | | } |
| | | |
| | | /** 新增/修改生产工序的表单 */ |
| | | export function useFormSchema(formApi?: VbenFormApi): VbenFormSchema[] { |
| | | return [ |
| | |
| | | options: getDictOptions(DICT_TYPE.COMMON_STATUS, 'number'), |
| | | }, |
| | | rules: z.number().default(CommonStatusEnum.ENABLE), |
| | | }, |
| | | { |
| | | fieldName: 'billingType', |
| | | label: '计费类型', |
| | | component: 'Select', |
| | | componentProps: { |
| | | options: PROCESS_BILLING_TYPE_OPTIONS, |
| | | placeholder: '请选择计费类型', |
| | | }, |
| | | rules: z.number().default(2), |
| | | }, |
| | | { |
| | | fieldName: 'wageRate', |
| | | label: '工资定额', |
| | | component: 'InputNumber', |
| | | dependencies: { |
| | | triggerFields: ['billingType'], |
| | | componentProps: (values: Record<string, unknown>) => ({ |
| | | addonAfter: getWageRateUnit(values.billingType as number), |
| | | placeholder: |
| | | values.billingType === 1 |
| | | ? '请输入小时工资定额' |
| | | : '请输入计件单价', |
| | | }), |
| | | }, |
| | | componentProps: { |
| | | class: 'w-full', |
| | | min: 0, |
| | | precision: 2, |
| | | }, |
| | | rules: z.number().min(0, '工资定额不能小于 0'), |
| | | }, |
| | | { |
| | | fieldName: 'auxHourlyRate', |
| | | label: '辅助小时工资', |
| | | component: 'InputNumber', |
| | | componentProps: { |
| | | addonAfter: '元/小时', |
| | | class: 'w-full', |
| | | min: 0, |
| | | precision: 4, |
| | | placeholder: '辅助工时按工序计薪时的单价,如换线', |
| | | }, |
| | | rules: z.number().min(0, '辅助小时工资不能小于 0').default(0), |
| | | }, |
| | | { |
| | | fieldName: 'stdTimeMode', |
| | | label: '工时计算方式', |
| | | component: 'Select', |
| | | componentProps: { |
| | | options: STD_TIME_MODE_OPTIONS, |
| | | placeholder: '请选择标准工时计算方式', |
| | | }, |
| | | rules: z.number().default(0), |
| | | }, |
| | | { |
| | | fieldName: 'stdTimeFactor', |
| | | label: '折算系数', |
| | | component: 'InputNumber', |
| | | dependencies: { |
| | | triggerFields: ['stdTimeMode'], |
| | | show: (values: Record<string, unknown>) => |
| | | values.stdTimeMode === 1 || values.stdTimeMode === 3, |
| | | }, |
| | | componentProps: { |
| | | min: 0, |
| | | precision: 4, |
| | | placeholder: '束丝填 1.8,其余填 1', |
| | | }, |
| | | rules: z.number().min(0).default(1), |
| | | }, |
| | | { |
| | | fieldName: 'maxRpm', |
| | | label: '机台满转速', |
| | | component: 'InputNumber', |
| | | dependencies: { |
| | | triggerFields: ['stdTimeMode'], |
| | | show: (values: Record<string, unknown>) => values.stdTimeMode === 3, |
| | | }, |
| | | componentProps: { |
| | | addonAfter: 'r/min', |
| | | min: 0, |
| | | precision: 0, |
| | | placeholder: '请输入机台满转速', |
| | | }, |
| | | rules: z.number().min(0).optional().default(0), |
| | | }, |
| | | { |
| | | fieldName: 'stdRpmParamCode', |
| | | label: '转速参数编码', |
| | | component: 'Input', |
| | | dependencies: { |
| | | triggerFields: ['stdTimeMode'], |
| | | show: (values: Record<string, unknown>) => |
| | | values.stdTimeMode === 1 || values.stdTimeMode === 3, |
| | | }, |
| | | componentProps: { |
| | | maxLength: 64, |
| | | placeholder: '填写“工序参数管理”里绑定的参数编码,如 RPM', |
| | | }, |
| | | }, |
| | | { |
| | | fieldName: 'stdPitchParamCode', |
| | | label: '节距参数编码', |
| | | component: 'Input', |
| | | dependencies: { |
| | | triggerFields: ['stdTimeMode'], |
| | | show: (values: Record<string, unknown>) => |
| | | values.stdTimeMode === 1 || values.stdTimeMode === 3, |
| | | }, |
| | | componentProps: { |
| | | maxLength: 64, |
| | | placeholder: '填写参数编码,如 PITCH', |
| | | }, |
| | | }, |
| | | { |
| | | fieldName: 'stdSpeedParamCode', |
| | | label: '线速度参数编码', |
| | | component: 'Input', |
| | | dependencies: { |
| | | triggerFields: ['stdTimeMode'], |
| | | show: (values: Record<string, unknown>) => values.stdTimeMode === 2, |
| | | }, |
| | | componentProps: { |
| | | maxLength: 64, |
| | | placeholder: '填写参数编码(米/分),如 SPEED', |
| | | }, |
| | | }, |
| | | { |
| | | fieldName: 'stdPercentParamCode', |
| | | label: '转速百分比编码', |
| | | component: 'Input', |
| | | dependencies: { |
| | | triggerFields: ['stdTimeMode'], |
| | | show: (values: Record<string, unknown>) => values.stdTimeMode === 3, |
| | | }, |
| | | componentProps: { |
| | | maxLength: 64, |
| | | placeholder: '填写参数编码(%),如 RPM_PERCENT', |
| | | }, |
| | | }, |
| | | { |
| | | fieldName: 'attention', |
| | |
| | | }, |
| | | { field: 'name', title: '工序名称', minWidth: 180 }, |
| | | { |
| | | field: 'billingType', |
| | | title: '计费类型', |
| | | width: 120, |
| | | formatter: ({ cellValue }) => getBillingTypeLabel(cellValue), |
| | | }, |
| | | { |
| | | field: 'wageRate', |
| | | title: '工资定额', |
| | | width: 120, |
| | | formatter: ({ cellValue, row }) => |
| | | cellValue == null ? '-' : `${cellValue} ${getWageRateUnit(row.billingType)}`, |
| | | }, |
| | | { |
| | | field: 'auxHourlyRate', |
| | | title: '辅助小时工资', |
| | | width: 130, |
| | | formatter: ({ cellValue }) => |
| | | cellValue == null ? '-' : `${cellValue} 元/小时`, |
| | | }, |
| | | { |
| | | field: 'stdTimeMode', |
| | | title: '工时计算方式', |
| | | width: 150, |
| | | formatter: ({ cellValue }) => getStdTimeModeLabel(cellValue), |
| | | }, |
| | | { |
| | | field: 'status', |
| | | title: '状态', |
| | | width: 100, |