宁夏万通需求:商机状态组改为非必填;过程检验单生产订单、工位改为非必填

商机(/sale/business):
- 新增商机表单「商机状态组」去掉必填,占位提示改为「请选择商机状态组(选填)」并允许清空
- 「变更商机状态」弹窗:未设置状态组的商机没有可选阶段,阶段下拉禁用并说明原因,且不做必填校验
(动态必填写法遵循框架约定放在 dependencies.rules,避免顶层函数 rules 触发渲染异常)

过程检验单(/qc/ipqc):
- 生产订单、工位去掉必填,允许清空,占位提示加「(选填)」
- 质检方案不再要求「先选生产订单」:改为跟随产品物料联动,未选物料时给出精确提示

Co-Authored-By: Claude Code <noreply@anthropic.com>
已修改3个文件
54 ■■■■■ 文件已修改
src/views/crm/business/data.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/business/detail/data.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/ipqc/data.ts 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/business/data.ts
@@ -82,14 +82,13 @@
        api: getBusinessStatusTypeSimpleList,
        labelField: 'name',
        valueField: 'id',
        placeholder: '请选择商机状态组',
        placeholder: '请选择商机状态组(选填)',
        allowClear: true,
      },
      dependencies: {
        triggerFields: ['id'],
        disabled: (values) => values.id,
      },
      rules: 'required',
    },
    {
      fieldName: 'dealTime',
src/views/crm/business/detail/data.ts
@@ -99,19 +99,29 @@
      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',
    },
  ];
}
src/views/mes/qc/ipqc/data.ts
@@ -156,17 +156,18 @@
      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),
        }),
@@ -177,14 +178,15 @@
      label: '工位',
      component: markRaw(MdWorkstationSelect),
      componentProps: {
        placeholder: '请选择工位',
        allowClear: true,
        placeholder: '请选择工位(选填)',
      },
      rules: 'selectRequired',
      dependencies: {
        triggerFields: ['sourceDocId'],
        componentProps: (values) => ({
          allowClear: true,
          disabled: !!values.sourceDocId,
          placeholder: '请选择工位',
          placeholder: '请选择工位(选填)',
        }),
      },
    },
@@ -226,17 +228,14 @@
          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: '请选择质检方案',
        }),
      },
    },