fix: 前端配置值类型下拉与后端枚举不一致(前端 BUG, 后端零改动)
后端权威枚举: TEXT/COLOR/IMAGE/JSON/SECRET/NUMBER/BOOLEAN 前端误用: STRING(应改 TEXT) / URL(应改 IMAGE), 缺 TEXT/IMAGE 前端同事按文档改下拉 options 即可
这个提交包含在:
父节点
be992e4bb6
当前提交
e169532d07
@ -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,只是数据列表里类型列会显示出和下拉对不上的字符串值。
|
||||||
正在加载...
x
在新工单中引用
屏蔽一个用户