宁夏万通需求:商机状态组改为非必填;过程检验单生产订单、工位改为非必填
商机(/sale/business):
- 新增商机表单「商机状态组」去掉必填,占位提示改为「请选择商机状态组(选填)」并允许清空
- 「变更商机状态」弹窗:未设置状态组的商机没有可选阶段,阶段下拉禁用并说明原因,且不做必填校验
(动态必填写法遵循框架约定放在 dependencies.rules,避免顶层函数 rules 触发渲染异常)
过程检验单(/qc/ipqc):
- 生产订单、工位去掉必填,允许清空,占位提示加「(选填)」
- 质检方案不再要求「先选生产订单」:改为跟随产品物料联动,未选物料时给出精确提示
Co-Authored-By: Claude Code <noreply@anthropic.com>
| | |
| | | api: getBusinessStatusTypeSimpleList, |
| | | labelField: 'name', |
| | | valueField: 'id', |
| | | placeholder: '请选择商机状态组', |
| | | placeholder: '请选择商机状态组(选填)', |
| | | allowClear: true, |
| | | }, |
| | | dependencies: { |
| | | triggerFields: ['id'], |
| | | disabled: (values) => values.id, |
| | | }, |
| | | rules: 'required', |
| | | }, |
| | | { |
| | | fieldName: 'dealTime', |
| | |
| | | dependencies: { |
| | | triggerFields: [''], |
| | | async componentProps() { |
| | | const statusList = await getBusinessStatusSimpleList( |
| | | formData.value?.statusTypeId ?? 0, |
| | | ); |
| | | const statusTypeId = formData.value?.statusTypeId; |
| | | // 商机状态组为选填:未设置状态组时没有可选阶段,禁用并说明原因 |
| | | if (!statusTypeId) { |
| | | return { |
| | | disabled: true, |
| | | options: [], |
| | | placeholder: '该商机未设置「商机状态组」,无可选商机阶段', |
| | | }; |
| | | } |
| | | const statusList = await getBusinessStatusSimpleList(statusTypeId); |
| | | const options = statusList.map((item) => ({ |
| | | label: `${item.name}(赢单率:${item.percent}%)`, |
| | | value: item.id, |
| | | })); |
| | | return { |
| | | disabled: false, |
| | | options, |
| | | placeholder: '请选择商机阶段', |
| | | }; |
| | | }, |
| | | // 未设置商机状态组时不做必填校验(此时也没有阶段可供选择) |
| | | rules: () => (formData.value?.statusTypeId ? 'required' : null), |
| | | }, |
| | | rules: 'required', |
| | | }, |
| | | ]; |
| | | } |
| | |
| | | label: '生产订单', |
| | | component: markRaw(ProWorkOrderSelect), |
| | | componentProps: { |
| | | placeholder: '请选择生产订单', |
| | | allowClear: true, |
| | | placeholder: '请选择生产订单(选填)', |
| | | status: MesProWorkOrderStatusEnum.CONFIRMED, |
| | | // 订单变更时清空生产任务 |
| | | onChange: () => formApi?.setFieldValue('taskId', undefined), |
| | | }, |
| | | rules: 'selectRequired', |
| | | dependencies: { |
| | | triggerFields: ['sourceDocId'], |
| | | componentProps: (values) => ({ |
| | | allowClear: true, |
| | | disabled: !!values.sourceDocId, |
| | | placeholder: '请选择生产订单', |
| | | placeholder: '请选择生产订单(选填)', |
| | | status: MesProWorkOrderStatusEnum.CONFIRMED, |
| | | onChange: () => formApi?.setFieldValue('taskId', undefined), |
| | | }), |
| | |
| | | label: '工位', |
| | | component: markRaw(MdWorkstationSelect), |
| | | componentProps: { |
| | | placeholder: '请选择工位', |
| | | allowClear: true, |
| | | placeholder: '请选择工位(选填)', |
| | | }, |
| | | rules: 'selectRequired', |
| | | dependencies: { |
| | | triggerFields: ['sourceDocId'], |
| | | componentProps: (values) => ({ |
| | | allowClear: true, |
| | | disabled: !!values.sourceDocId, |
| | | placeholder: '请选择工位', |
| | | placeholder: '请选择工位(选填)', |
| | | }), |
| | | }, |
| | | }, |
| | |
| | | autoSelect: 'first', |
| | | labelField: 'templateName', |
| | | valueField: 'templateId', |
| | | disabled: formType !== 'create' || !values.workOrderId, |
| | | params: values.workOrderId |
| | | ? { |
| | | qcType: 2, |
| | | workOrderId: values.workOrderId, |
| | | taskId: values.taskId, |
| | | } |
| | | : {}, |
| | | placeholder: values.workOrderId |
| | | ? '请选择质检方案' |
| | | : '请先选择生产订单', |
| | | disabled: formType !== 'create', |
| | | // 未选生产订单/生产任务时,后端按「过程检验」种类返回全部启用方案(不再要求先选生产订单) |
| | | params: { |
| | | qcType: 2, |
| | | ...(values.workOrderId ? { workOrderId: values.workOrderId } : {}), |
| | | ...(values.taskId ? { taskId: values.taskId } : {}), |
| | | }, |
| | | placeholder: '请选择质检方案', |
| | | }), |
| | | }, |
| | | }, |