# 万川平台对接 — 实施计划 > 本文为对接万川 AI 平台(登录 → 拉取模型配置)的实施计划。 > 接口契约见同目录 [万川平台-登录到获取模型信息-流程说明.md](万川平台-登录到获取模型信息-流程说明.md)。 ## 范围 ### 本期做 登录平台 → 拉模型配置 → **log 打印**。平台凭证可编辑、可持久化、可重置。 ### 本期不做(留第二期) - 回填 AI 表单(`form.ai.*`) - 调 `SaveAutoReplyConfig` 落盘 + 推 helper 重载 理由:先打印确认平台返回的数据结构与解析结果正确,再接回填与保存。 ## 架构决策 - **Go 只做透传代理 + 凭证存取**,不碰业务解析。仅用于绕开 WebView 的 CORS 限制。 - **业务逻辑全在前端**:取 token、按 code 拉取、解析 `encryptedConfig`、字段映射。 - **持久化存 `config/config.json`**(exe 同级,重启自动恢复,与浏览器无关),新增 `platformConfig` 段。不使用 localStorage。 - ⚠️ 密码以明文存在 config.json(本地桌面工具常见做法)。如需更稳可加简单混淆,但非真加密。 ## 一、Go 端 新文件:`wanchuan_proxy.go`(与 [app.go](../../app.go) 同级,main 包)。 ### 1.1 透传代理方法(绑定到 App) | 方法 | 行为 | |------|------| | `WanchuanLogin(baseUrl, username, password string) string` | POST `{baseUrl}/api/login`,body `{username, password, loginType:"user"}`;**原样返回**平台响应 JSON 字符串;日志打印(密码/token 打码) | | `WanchuanGetModel(baseUrl, code, token string) string` | GET `{baseUrl}/api/system/model/getByCode/{code}`;带头 `Authorization: Bearer {token}` 和 `token: Bearer {token}`;**原样返回**响应 JSON;日志打印 | 不解析 token、不合并字段、不存盘——平台返什么就返什么。 ### 1.2 凭证存取方法(绑定到 App) | 方法 | 行为 | |------|------| | `GetPlatformConfig() interface{}` | 读 config.json 的 `platformConfig` 段回前端 | | `SavePlatformConfig(jsonData string) (bool, string)` | 存 `platformConfig` 段(重置 = 存空值) | ### 1.3 config 结构改动 [config/types.go](../types.go) 新增结构并挂到 `Config`: ```go type PlatformConfig struct { BaseURL string `json:"baseUrl"` Username string `json:"username"` Password string `json:"password"` } // Config 增加字段: // PlatformConfig PlatformConfig `json:"platformConfig"` ``` [config/config_manager.go](../config_manager.go) 新增 `UpdatePlatformConfig`,复用现有 `SaveGlobalConfig`。 > 改了 App 方法后需跑 `wails dev` / `wails build` 重新生成 `frontend/wailsjs/go/main/App.js` 绑定。 ## 二、前端 文件:[frontend/src/components/AutoReply.vue](../../frontend/src/components/AutoReply.vue),在 AI 配置区(`#auto-section-ai`,02)顶部新增「万川平台」卡片。 ### 2.1 UI - 输入框:平台地址 / 账号 / 密码(绑 reactive,挂载时 `GetPlatformConfig` 回填,可编辑) - 按钮「登录并获取模型」 - 按钮「重置」:清空凭证(`SavePlatformConfig` 存空)后重新走一次流程 ### 2.2 「登录并获取模型」逻辑 1. `SavePlatformConfig(当前输入)` 先存凭证 2. `WanchuanLogin(url, user, pwd)` → `JSON.parse` → 多路径取 token: `token` / `data.token` / `data.access_token` / `access_token` 3. 依次 `WanchuanGetModel(url, code, token)`: - `generic`(必拉) - `vision`、`voice`(可选,失败跳过) 4. 每个响应取 `data.providerModels`,对 `encryptedConfig` 做**二次 `JSON.parse`**, 得 `{ modelName, apiKey, endpointUrl }` 5. **`console.log` + `LogFrontend` 打印**原始响应与解析结果 —— **到此为止。** ### 2.3 字段映射(供第二期参考) | 万川 code | 解析字段 | AIConfig 字段 | |-----------|---------|---------------| | `generic` | endpointUrl / apiKey / modelName | `baseUrl` / `apiKey` / `model` | | `vision` | endpointUrl / apiKey / modelName | `visionBaseUrl` / `visionApiKey` / `visionModel` | | `voice` | endpointUrl / apiKey / modelName | `audioBaseUrl` / `audioApiKey` / `audioModel` | (`summary_*` 无对应业务,忽略;知识库列表不拉。) ## 三、验证 - `go build` 通过;`wails dev` 起来后在 AI 配置区填真实平台地址/账号/密码,点「登录并获取模型」, 看浏览器控制台和后端日志打印出 generic/vision/voice 的解析结果,确认 `endpointUrl/apiKey/modelName` 拿对。 - 重启应用,确认账号密码自动回填(持久化生效)。 - 点「重置」,确认凭证清空。 ## 四、第二期(确认数据无误后) 把 2.2 第 5 步从"打印"改为: - 按 2.3 映射回填 `form.ai.*` - 调现有 `SaveAutoReplyConfig(form)` 落盘 + 推 helper 重载 至此 AI 配置实现平台动态下发。