hl-api-changelog/changelogs/2026-04/2026-04-21_mp-common-config-merge-frontend-config.md
API Changelog Bot d13963bb07 feat(mp): /mp/common/config 接口返回全部公开配置 (PR #1114, Closes #1112)
- 扩展 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>
2026-04-21 17:46:34 +08:00

4.3 KiB

/mp/common/config 接口返回全部公开配置(合并 sys_frontend_config

日期2026-04-21 PR#1114Closes #1112 合并到 dev commit767e5cb4 后端服务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,无实际冲突

测试环境实测响应

curl -sk "https://api.test.1814.love:9443/mp/common/config"
{
  "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 keymp: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.categoryMapconfig → table:frontend_config(少 sys_ 前缀)与实际 deps table:sys_frontend_config 不一致,本次不动,留后续清理工单