7 小时以前 35722562e9e13f0504acc15b740d042ecb810199
src/views/mes/qc/indicator/data.ts
@@ -7,13 +7,16 @@
import {
  DICT_TYPE,
  MesAutoCodeRuleCode,
  MesQcIndicatorItemType,
  MesQcResultValueType,
} from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { Button } from 'ant-design-vue';
import { z } from '#/adapter/form';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getIndicatorGroupList } from '#/api/mes/qc/indicator';
import { QcIndicatorResultSpecificationInput } from './components';
@@ -63,6 +66,61 @@
      rules: 'required',
    },
    {
      fieldName: 'itemType',
      label: '条目类型',
      component: 'RadioGroup',
      componentProps: {
        buttonStyle: 'solid',
        optionType: 'button',
        options: [
          { label: '录入项', value: MesQcIndicatorItemType.ENTRY },
          { label: '分组项', value: MesQcIndicatorItemType.GROUP },
        ],
      },
      dependencies: {
        triggerFields: ['itemType'],
        // 切成分组项时清掉只属于录入项的字段;分组项必须顶级,残留的 parentId 会被后端层级校验顶回来
        trigger: (values) => {
          if (values.itemType === MesQcIndicatorItemType.GROUP) {
            formApi?.setFieldValue('parentId', 0);
            formApi?.setFieldValue('resultType', undefined);
            formApi?.setFieldValue('resultSpecification', undefined);
          }
        },
      },
      rules: z.number().default(MesQcIndicatorItemType.ENTRY),
    },
    {
      fieldName: 'parentId',
      label: '所属分组',
      component: 'ApiTreeSelect',
      componentProps: {
        allowClear: true,
        // 父级候选只有分组项:分组项只能是顶级,所以这里是一层平铺,不需要 handleTree
        api: async () => {
          const data = await getIndicatorGroupList();
          return [
            {
              id: 0,
              name: '顶级指标',
              children: data,
            },
          ];
        },
        childrenField: 'children',
        labelField: 'name',
        placeholder: '请选择所属分组,不选则为顶级指标',
        treeDefaultExpandAll: true,
        treeNodeFilterProp: 'name',
        valueField: 'id',
      },
      dependencies: {
        triggerFields: ['itemType'],
        if: (values) => values.itemType !== MesQcIndicatorItemType.GROUP,
      },
      defaultValue: 0,
    },
    {
      fieldName: 'type',
      label: '检测项类型',
      component: 'Select',
@@ -83,6 +141,30 @@
      },
    },
    {
      fieldName: 'formulaText',
      label: '公式',
      component: 'Textarea',
      componentProps: {
        maxlength: 500,
        placeholder: '请输入公式,报告里作为该分组的检测要求展示',
        rows: 2,
      },
      dependencies: {
        triggerFields: ['itemType'],
        if: (values) => values.itemType === MesQcIndicatorItemType.GROUP,
      },
      rules: 'required',
    },
    {
      fieldName: 'sortOrder',
      label: '排序号',
      component: 'InputNumber',
      componentProps: {
        min: 0,
        placeholder: '留空自动排到同级末尾',
      },
    },
    {
      fieldName: 'resultType',
      label: '结果值类型',
      component: 'Select',
@@ -93,6 +175,11 @@
          formApi?.setFieldValue('resultSpecification', undefined),
        options: getDictOptions(DICT_TYPE.MES_QC_RESULT_TYPE, 'number'),
        placeholder: '请选择结果值类型',
      },
      // 分组项没有结果值,不展示也不校验(落库时后端同样会清空)
      dependencies: {
        triggerFields: ['itemType'],
        if: (values) => values.itemType !== MesQcIndicatorItemType.GROUP,
      },
      rules: 'required',
    },
@@ -147,6 +234,19 @@
      },
    },
    {
      fieldName: 'itemType',
      label: '条目类型',
      component: 'Select',
      componentProps: {
        allowClear: true,
        options: [
          { label: '录入项', value: MesQcIndicatorItemType.ENTRY },
          { label: '分组项', value: MesQcIndicatorItemType.GROUP },
        ],
        placeholder: '请选择条目类型',
      },
    },
    {
      fieldName: 'type',
      label: '检测项类型',
      component: 'Select',
@@ -183,6 +283,18 @@
      minWidth: 160,
    },
    {
      field: 'itemType',
      title: '条目类型',
      width: 100,
      slots: { default: 'itemType' },
    },
    {
      field: 'parentName',
      title: '所属分组',
      width: 140,
      slots: { default: 'parentName' },
    },
    {
      field: 'type',
      title: '检测项类型',
      width: 120,