- 扩展 data 字段: yml 3 基础 + sys_frontend_config 全部启用+非SECRET+未软删 - 类型按 config_type 自动转换: NUMBER→number, BOOLEAN→boolean, JSON→object/array - 契约 Result<Map<String,Object>> 不变, 前端零破坏可直接用新字段 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
这个提交包含在:
父节点
98bb0e4b5d
当前提交
d13963bb07
@ -0,0 +1,118 @@
|
||||
# /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<Map<String, Object>>`,`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<string, any>` 或按需定义强类型(已知 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` 不一致,本次不动,留后续清理工单
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户