# /mp/common/config 接口返回全部公开配置(合并 sys_frontend_config) **日期**:2026-04-21 **PR**:#1114(Closes #1112) **合并到 dev commit**:767e5cb4 **后端服务**:hl-user-service(已部署测试环境) **影响前端**:小程序端「应用配置」接口字段扩展 --- ## 为什么改 `/mp/common/config` 过去只返回 `version` / `minVersion` / `servicePhone` 三个 yml 硬编码字段,管理后台「前端配置」页面(`sys_frontend_config` 表)运营的所有配置(主题色、Logo、站点名、分页大小、页脚文本等)完全没在小程序端吐出。 改完后小程序端一个接口拿到全部公开配置。 --- ## 接口签名变化 ### `GET /mp/common/config` **契约不变**:响应仍是 `Result>`,`data` 字段类型保持 Map。 **data 内容扩展**: | 字段来源 | 说明 | |---------|------| | yml 基础(固定存在) | `version` / `minVersion` / `servicePhone` | | `sys_frontend_config` 表 | **所有启用(status=1)且非 SECRET、未软删除的配置项**,key = `config_key`,value 按 `config_type` 做类型转换 | **类型转换规则**(后端已处理,前端直接使用): | config_type | JSON value 类型 | 示例 | |------------|----------------|------| | `NUMBER` | `number`(整数 Long / 小数 Double) | `"defaultPageSize": 20` | | `BOOLEAN` | `boolean` | `"enableWatermark": false` | | `JSON` | `object` / `array` | `"themeConfig": { ... }` | | `TEXT` / `COLOR` / `IMAGE` | `string` | `"primaryColor": "#1890FF"` | | 解析失败 | 原 `string`(降级兜底) | —— | **过滤规则**: - `config_type = 'SECRET'` 的不返回(第三方 API key 等敏感配置) - `status = 0`(停用)的不返回 - `deleted_at IS NOT NULL`(软删除)的不返回 **冲突规则**: - 若 `sys_frontend_config` 表存在 `config_key = 'version'`(或 `minVersion` / `servicePhone`),**DB 值覆盖 yml 默认值** - 当前测试/正式环境 DB 不存在这三个 key,无实际冲突 --- ## 测试环境实测响应 ```bash curl -sk "https://api.test.1814.love:9443/mp/common/config" ``` ```json { "code": 200, "message": "成功", "success": true, "data": { "version": "1.0.0-dev", "minVersion": "1.0.0", "servicePhone": "400-000-0000", "primaryColor": "#1890FF", "accentColor": "#FF6B35", "backgroundColor": "#F5F7FA", "textColor": "#303133", "defaultPageSize": 20, "cacheExpireMinutes": 30, "enableWatermark": false, "siteName": "呼籁旅行", "logoUrl": "", "footerText": "呼籁旅行 版权所有", "copyrightYear": "2026", "customerServicePhone": "" } } ``` --- ## 前端影响 ### 可以改(推荐) **以前**:小程序端可能自己在代码里写死主题色、站点名、分页大小等默认值。 **现在**:这些配置直接从 `/mp/common/config` 读取,运营后台改完小程序端无需发版即可生效(缓存 30 分钟,运营端保存后自动失效)。 ### 不需要改 - `version` / `minVersion` / `servicePhone` 三个原有字段**完全保留**,读取方式不变 - 响应结构 `{code, message, data, success}` 不变 ### 前端建议 1. `data` 类型建议声明为 `Record` 或按需定义强类型(已知 key 列表见上方实测响应) 2. 新 key 可能陆续增加(运营后台可以新增),前端按需解构即可,不要假设 data 只有固定字段 3. NUMBER 类型已转为 JS number,不用再 `parseInt(...)`;BOOLEAN 已转为 js boolean,不用再比较字符串 `"true"` --- ## 缓存行为 - 小程序端接口:`@MpCache(prefix="common:config", ttl=1800s)`,Redis key:`mp:common:config` - 运营后台修改 `sys_frontend_config` 任一条 → `FrontendConfigService` 写路径触发 `depsManager.invalidateSource("table:sys_frontend_config")` → `MpCommonController` deps 命中该 source → 缓存被精准失效 - 首次部署本次 PR 后,旧缓存(ttl 未到期)会阻挡新数据,已在部署时主动清理一次:`redis-cli -n 0 del mp:common:config` --- ## 关联 - Issue:#1112 - 非目标:本 PR **不改** `/mp/config`(分组查询接口,`MpConfigController`) - 历史遗留:`MpCacheEvict.categoryMap` 中 `config → table:frontend_config`(少 `sys_` 前缀)与实际 deps `table:sys_frontend_config` 不一致,本次不动,留后续清理工单