From e169532d072f10c0eeecdef80f96831090fec209 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Tue, 28 Apr 2026 09:59:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=89=8D=E7=AB=AF=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=80=BC=E7=B1=BB=E5=9E=8B=E4=B8=8B=E6=8B=89=E4=B8=8E=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E6=9E=9A=E4=B8=BE=E4=B8=8D=E4=B8=80=E8=87=B4(?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=20BUG,=20=E5=90=8E=E7=AB=AF=E9=9B=B6?= =?UTF-8?q?=E6=94=B9=E5=8A=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端权威枚举: TEXT/COLOR/IMAGE/JSON/SECRET/NUMBER/BOOLEAN 前端误用: STRING(应改 TEXT) / URL(应改 IMAGE), 缺 TEXT/IMAGE 前端同事按文档改下拉 options 即可 --- ...rontend-config_value-type-enum-mismatch.md | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 changelogs/2026-04/28_fix_admin-frontend-config_value-type-enum-mismatch.md diff --git a/changelogs/2026-04/28_fix_admin-frontend-config_value-type-enum-mismatch.md b/changelogs/2026-04/28_fix_admin-frontend-config_value-type-enum-mismatch.md new file mode 100644 index 0000000..25e26ee --- /dev/null +++ b/changelogs/2026-04/28_fix_admin-frontend-config_value-type-enum-mismatch.md @@ -0,0 +1,96 @@ +# fix: 前端配置「值类型」下拉与后端枚举不一致 — 待前端修复 + +**日期**: 2026-04-28 +**类型**: 前端 BUG — **后端零改动**, 改前端写死的下拉常量即可 +**影响端**: 管理后台 (admin) — 系统管理 → 前端配置 → 新增/编辑配置对话框 +**反馈来源**: 前端同事反馈「值类型对接不上」 + +--- + +## 现象 + +`admin.1814.love/frontend-config` 列表里已有数据的 `值类型(configType)` 列显示了 **TEXT** (站点名称) 和 **IMAGE** (Logo地址) 两种类型,但点「新增配置」弹窗的「值类型」下拉框里**选不出来这两个值**。 + +下拉框里的值: + +| 前端下拉显示 | 前端发给后端的 value | +|---|---| +| STRING - 字符串 | `STRING` ❌ | +| COLOR - 颜色 | `COLOR` ✅ | +| NUMBER - 数字 | `NUMBER` ✅ | +| BOOLEAN - 布尔 | `BOOLEAN` ✅ | +| JSON - JSON | `JSON` ✅ | +| SECRET - 密钥 | `SECRET` ✅ | +| URL - 链接 | `URL` ❌ | + +--- + +## 根因 + +**前端 `configType` 下拉选项写死了与后端不一致的枚举值。** + +后端 `sys_frontend_config.config_type` 字段权威枚举(Entity + schema.sql + `FrontendConfigConverter` 三处一致): + +``` +TEXT / COLOR / IMAGE / JSON / SECRET / NUMBER / BOOLEAN +``` + +后端引用: +- Entity 注释 `hl-user-service/src/main/java/com/hulalv/user/entity/SysFrontendConfig.java:28` +- schema `sql/frontend_config.sql:7` `'值类型: TEXT/COLOR/IMAGE/JSON/SECRET/NUMBER/BOOLEAN'` +- 转换器常量 `hl-user-service/src/main/java/com/hulalv/user/converter/FrontendConfigConverter.java:25-36` + +前端写错 2 项 + 缺 2 项: + +| 项 | 前端 | 后端权威 | 处理 | +|---|---|---|---| +| 字符串 | `STRING` | `TEXT` | **改 value 为 `TEXT`** | +| 图片 | (缺) | `IMAGE` | **新增 `IMAGE - 图片`** | +| 链接 | `URL` | (无此类型) | **删除 `URL`**(后端无对应转换逻辑,即使存进去也按 default 当字符串处理,语义不清) | +| 文本 | (缺,误用 STRING 顶替) | `TEXT` | 同第一行,改 value 即可 | + +--- + +## 前端需要做的修改 + +定位 `hl-ui` 仓库下「前端配置」新增/编辑对话框的 `configType` 下拉 options 常量,改成: + +```js +const CONFIG_TYPE_OPTIONS = [ + { value: 'TEXT', label: 'TEXT - 文本' }, + { value: 'COLOR', label: 'COLOR - 颜色' }, + { value: 'IMAGE', label: 'IMAGE - 图片' }, + { value: 'NUMBER', label: 'NUMBER - 数字' }, + { value: 'BOOLEAN', label: 'BOOLEAN - 布尔' }, + { value: 'JSON', label: 'JSON - JSON' }, + { value: 'SECRET', label: 'SECRET - 密钥' }, +] +``` + +注意: +1. **去掉 `STRING` 和 `URL`** —— 后端不识别(STRING 进 DB 后会按 default 当字符串渲染但与已有 TEXT 数据混杂; URL 同理) +2. **补上 `TEXT` 和 `IMAGE`** —— DB 里 siteName/footerText 等都是 TEXT, logoUrl 是 IMAGE + +--- + +## 验证 + +改完后到「新增配置」弹窗,下拉框 7 项应能完整覆盖: +- TEXT / COLOR / IMAGE / NUMBER / BOOLEAN / JSON / SECRET + +并能编辑列表里已有的 `siteName` (TEXT) 和 `logoUrl` (IMAGE),不会出现「值类型空白」或「保存后回显错误」。 + +--- + +## 后端约定(不会变) + +后端 `FrontendConfigConverter.convert(value, configType)` 按以下规则转换: + +| configType | 转换为 | +|---|---| +| `NUMBER` | Long / Double(含 `.` 走 Double) | +| `BOOLEAN` | Boolean | +| `JSON` | JSONObject / JSONArray | +| `TEXT` / `COLOR` / `IMAGE` / `SECRET` / 其他 | 原字符串 | + +任一 parse 失败都降级为原字符串,不抛异常。`configType` 不在白名单内时也不报错,直接当字符串。所以即使前端历史误传过 `STRING`/`URL`,接口不会 500,只是数据列表里类型列会显示出和下拉对不上的字符串值。