# 接口变更记录 — 2026-03-20(合同方案 + 模板筛选) > **类型** feature + fix --- ## 一、合同方案管理菜单已添加 "合同管理"下新增"合同方案"子菜单,排在合同列表前面。 --- ## 二、合同模板接口支持按平台筛选 ### `GET` /admin/contract/templates 新增可选参数 `platform`,前端根据合同方案表单中选择的"合同平台"传值,实现模板联动筛选。 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | `platform` | String | 否 | 合同平台:`12301`=全国旅游监管平台,`FADADA`=法大大。不传则返回全部 | **前端调整**: - 合同方案新增/编辑表单中,选择"合同平台"后,调用 `/admin/contract/templates?platform=12301` 或 `?platform=FADADA` 刷新合同模板下拉列表 - 切换平台时需清空已选的合同模板 --- ## 三、合同方案 — 旅行社改为非必填 ### 变更说明 `ContractSchemeRequest` 中 `agencyCode`(旅行社编码)从**必填**改为**可选**。 **业务逻辑**:不填旅行社时,创建合同时会根据订单支付的商户号自动匹配对应公司的旅行社。 ### `POST` /admin/contract/scheme — 创建合同方案 ### `PUT` /admin/contract/scheme/{schemeId} — 更新合同方案 | 字段 | 变更 | 说明 | |------|------|------| | `agencyCode` | 必填 → **可选** | 不填则根据订单支付商户号自动匹配旅行社 | **前端调整**: - "旅行社"字段去掉必填星号 `*` - 可以保留下拉选择,但允许不选 - 表单提交时不再校验旅行社必填 --- ## 四、合同方案管理接口一览 以下接口用于"合同管理 → 合同方案"页面: ### `GET` /admin/contract/scheme/list-all — 全部方案列表(管理页面) **响应**:`Result>` | 字段 | 类型 | 说明 | |------|------|------| | `schemeId` | String | 方案ID | | `name` | String | 方案名称 | | `description` | String | 方案描述 | | `contractPlatform` | String | 合同平台:`12301`/`FADADA` | | `contractTemplateCode` | String | 合同模板编码 | | `contractMode` | String | 签约模式:`STANDARD`=电子签约,`SYNC`=线下报备 | | `signatoryMode` | Integer | 签署模式:1=短信签署,2=现场签署,3=线下签署 | | `agencyCode` | String | 旅行社编码(可能为空) | | `disputeResolution` | Integer | 争议解决方式:1=仲裁,2=诉讼 | | `supplementaryClause` | String | 补充条款 | | `transactorName` | String | 经办人姓名 | | `transactorPhone` | String | 经办人电话 | | `sortOrder` | Integer | 排序 | | `status` | String | 状态:`ACTIVE`/`INACTIVE` | ### `GET` /admin/contract/scheme/list — 启用方案列表(产品配置下拉) 只返回 `status=ACTIVE` 的方案,用于产品编辑页"合同方案"下拉选择。 ### `POST` /admin/contract/scheme — 创建方案 **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | `name` | String | 是 | 方案名称 | | `description` | String | 否 | 方案描述 | | `contractPlatform` | String | 是 | 合同平台:`12301`/`FADADA` | | `contractTemplateCode` | String | 是 | 合同模板编码(从模板列表接口获取) | | `contractMode` | String | 是 | 签约模式:`STANDARD`/`SYNC` | | `signatoryMode` | Integer | 是 | 签署模式:1/2/3 | | `agencyCode` | String | **否** | 旅行社编码(不填则自动匹配) | | `disputeResolution` | Integer | 是 | 争议解决方式:1=仲裁,2=诉讼 | | `supplementaryClause` | String | 否 | 补充条款 | | `transactorName` | String | 是 | 经办人姓名 | | `transactorPhone` | String | 是 | 经办人电话 | | `sortOrder` | Integer | 否 | 排序(默认0) | ### `PUT` /admin/contract/scheme/{schemeId} — 更新方案 请求参数同创建。 ### `PUT` /admin/contract/scheme/{schemeId}/toggle-status — 切换启用/停用 ### `DELETE` /admin/contract/scheme/{schemeId} — 删除方案 --- ## 五、合同方案响应新增回显字段 + 字段别名 ### 变更说明 合同方案响应(`ContractSchemeVO`)新增以下字段,解决**编辑回显**和**字段命名统一**问题: | 新增字段 | 类型 | 说明 | |----------|------|------| | `templateCode` | String | 合同模板编码(与 `contractTemplateCode` **相同值**,方便前端统一使用 `templateCode` 绑定下拉) | | `contractTemplateName` | String | 合同模板名称(回显用,如"国内旅游合同-标准版") | | `agencyName` | String | 旅行社名称(回显用,如"内蒙古呼籁国际旅行社有限公司") | ### 保存时字段兼容 保存(创建/更新)时,**`contractTemplateCode` 和 `templateCode` 都接受**。前端可以统一用 `templateCode` 作为合同模板下拉的 `value` 字段。 ```json // 以下两种写法等价: { "contractTemplateCode": "A00001", ... } { "templateCode": "A00001", ... } ``` ### 前端使用方式 1. **模板下拉绑定**:用 `templateCode` 作为下拉的 `v-model` 绑定值 2. **编辑回显**:方案详情返回的 `templateCode` 可直接匹配模板列表的 `templateCode` 3. **模板名称显示**:列表页可直接用 `contractTemplateName` 显示模板名称,无需额外查询 4. **旅行社名称显示**:列表页可用 `agencyName` 显示旅行社名称 ### 完整响应示例 ```json { "schemeId": "123456789", "name": "标准国内电子签约方案", "contractPlatform": "12301", "contractTemplateCode": "A00001", "templateCode": "A00001", "contractTemplateName": "国内旅游合同-标准版", "contractMode": "STANDARD", "signatoryMode": 1, "agencyCode": "agency_hlgj", "agencyName": "内蒙古呼籁国际旅行社有限公司", "disputeResolution": 1, "transactorName": "张三", "transactorPhone": "13800138000", "sortOrder": 0, "status": "ACTIVE" } ``` --- ## 前端重点调整总结 | 页面 | 调整项 | |------|--------| | 合同方案新增/编辑表单 | "旅行社"去掉必填星号,允许不选 | | 合同方案新增/编辑表单 | "合同模板"下拉根据选择的"合同平台"联动筛选,调用 `/admin/contract/templates?platform=xxx` | | 合同方案新增/编辑表单 | 切换合同平台时清空已选的合同模板 | | 合同方案新增/编辑表单 | 模板下拉 `v-model` 绑定 `templateCode`(保存和回显统一使用此字段) | | 合同方案列表页 | 可用 `contractTemplateName` 和 `agencyName` 直接显示名称 |