# 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,只是数据列表里类型列会显示出和下拉对不上的字符串值。
