gaoluyang
6 天以前 173855b299e89930b5ea2ff9a9295fde9d0f55b5
src/views/mes/process-design/process/data.ts
@@ -20,6 +20,38 @@
/** 表单类型 */
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 [
@@ -75,6 +107,146 @@
        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',
@@ -148,6 +320,32 @@
    },
    { 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,