# SRM 准入申请选择供应商 - 前端联调方案 ## 涉及页面 - `src/views/srm/supplierApply/index.vue` — 准入申请列表页 - `src/views/srm/supplierApply/modules/form.vue` — 准入申请新增/编辑弹窗 - `src/views/srm/supplierApply/data.ts` — 表单和表格配置 ## 业务流程 1. 用户点击"新增准入申请" → 打开表单弹窗 2. 用户通过**SRM 供应商选择器**从已有 SRM 供应商列表中选择 3. 选择后,组件通过 `onChange` 回调自动填充表单字段 4. 用户可手动修改自动填充的字段,补充缺失信息 5. 提交申请 → 保存 `supplierId` 到后端 6. 审批通过时,若已关联 SRM 供应商则不重复创建;若未关联则根据申请信息创建新的 SRM 供应商 ## API ### 涉及接口 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/srm/supplier/page` | SRM 供应商分页列表(供应商选择器使用) | | POST | `/srm/supplier-apply/create` | 创建准入申请 | | PUT | `/srm/supplier-apply/update` | 更新准入申请 | | GET | `/srm/supplier-apply/get?id={id}` | 获取准入申请详情 | ### 创建/更新准入申请 — 请求参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | supplierId | Long | 否 | 关联的 SRM 供应商 ID。与 supplierName 二选一必填 | | supplierName | String | 条件必填 | 供应商名称。supplierId 为空时必填 | ### 校验规则变更 - `supplierName` 不再强制必填。当 `supplierId` 为空时,`supplierName` 必填 - 当 `supplierId` 有值时,后端会校验该供应商在 SRM 中存在 ## 字段自动填充规则 选择 SRM 供应商后,组件的 `onChange` 回调接收 `SupplierVO` 对象,按以下映射自动填充: | SRM 供应商字段 | 准入申请表单字段 | 说明 | |------|------|------| | `name` | `supplierName` | 供应商名称 | | `contactName` | `contactName` | 联系人 | | `contactMobile` | `contactMobile` | 联系电话 | | `contactEmail` | `contactEmail` | 邮箱 | | `taxNo` | `taxNo` | 税号 | | `address` | `address` | 地址 | ## 前端实现说明 ### 1. 表单 schema(`data.ts`) 表单字段 `supplierId` 使用 `SrmSupplierSelect` 组件: - 组件路径:`src/views/srm/supplier/components/select.vue` - `modelValue` 绑定到 `supplierId`(number 类型) - 通过 `onChange` 回调接收选中的 `SupplierVO`,调用 `formApi.setValues()` 自动填充 - `supplierName` prop 用于回显已选供应商名称 - 字段 `supplierName` 保留在表单中,由选择器自动填充或被用户手动输入 ### 2. formApi 注入(`form.vue`) 使用 `formApi.setState({ schema: useFormSchema(formApi) })` 模式,在 `useVbenForm` 创建完成后将 `formApi` 注入 schema,使 `onChange` 回调能调用 `formApi.setValues()`。 ## 字段展示规则 | 字段 | 展示位置 | 说明 | |------|----------|------| | supplierId | 详情 | 关联的 SRM 供应商 ID | | supplierName | 列表、详情 | 供应商名称(选择器自动填充或手动输入) | ## 业务规则说明 | 场景 | 规则 | |------|------| | 选择了 SRM 供应商 | `supplierId` 有值,信息从 SRM 自动带入,后端校验供应商存在 | | 未选择 SRM 供应商 | `supplierId` 为空,必须手动填写供应商名称 | | 重新选择供应商 | 组件 `onChange` 重新触发,覆盖已有表单字段 | | 编辑已有申请 | 通过 `supplierName` prop 回显选中供应商名称 | | 审批通过(已关联 SRM 供应商) | 不创建新的 SRM 供应商,直接使用已有 `supplierId` | | 审批通过(未关联 SRM 供应商) | 后端根据申请信息创建新的 SRM 供应商 | ## 注意事项 - SRM 供应商选择器组件位于 `src/views/srm/supplier/components/`,已新建 - 自动填充后用户仍可手动修改任何字段 - 供应商选择器仅查询启用状态(`status: 1`)的供应商 - `supplierId` 和 `supplierName` 互斥校验:两者至少有一个有值