| | |
| | | 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'; |
| | | |
| | |
| | | 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', |
| | |
| | | }, |
| | | }, |
| | | { |
| | | 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', |
| | |
| | | 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', |
| | | }, |
| | |
| | | }, |
| | | }, |
| | | { |
| | | fieldName: 'itemType', |
| | | label: '条目类型', |
| | | component: 'Select', |
| | | componentProps: { |
| | | allowClear: true, |
| | | options: [ |
| | | { label: '录入项', value: MesQcIndicatorItemType.ENTRY }, |
| | | { label: '分组项', value: MesQcIndicatorItemType.GROUP }, |
| | | ], |
| | | placeholder: '请选择条目类型', |
| | | }, |
| | | }, |
| | | { |
| | | fieldName: 'type', |
| | | label: '检测项类型', |
| | | component: 'Select', |
| | |
| | | minWidth: 160, |
| | | }, |
| | | { |
| | | field: 'itemType', |
| | | title: '条目类型', |
| | | width: 100, |
| | | slots: { default: 'itemType' }, |
| | | }, |
| | | { |
| | | field: 'parentName', |
| | | title: '所属分组', |
| | | width: 140, |
| | | slots: { default: 'parentName' }, |
| | | }, |
| | | { |
| | | field: 'type', |
| | | title: '检测项类型', |
| | | width: 120, |