feat: 通知 mmg - 轮播图主题无数据修复 + 字典/菜单产品线改名为主题 (PR #1837)
这个提交包含在:
父节点
f839745b84
当前提交
acb881a121
@ -0,0 +1,88 @@
|
||||
# 修复轮播图「链接目标=主题」无数据 + 字典/菜单产品线统一改名为主题
|
||||
|
||||
**日期**: 2026-05-07
|
||||
**类型**: 后端 BUG 修复 + DB 文案改名(前端有少量配合改动)
|
||||
**模块**: hl-product-service-v2 + hl-user-service(DB migration)
|
||||
**关联**: Issue #1836 / PR #1837 (已合并 dev)
|
||||
**通知**: @mmg
|
||||
|
||||
---
|
||||
|
||||
## 后端修了什么
|
||||
|
||||
### 1. BUG 修复 — 轮播图编辑「链接类型=产品线」点击「链接目标」弹窗显示"无数据"
|
||||
|
||||
**根因**:`ProductLinePageReqVO.productType` 字段 `String` 类型,Mapper 用 `eqIfPresent` 拼 `=` 等值匹配。前端 `EditModal.vue` 发的请求是 `?productType=CORE,GROUP`(逗号分隔多值),后端按字面值 `'CORE,GROUP'` 做 `=` 比较 → 永远 0 条。
|
||||
|
||||
**修法**:保留 `productType` (String) 兼容单值,新增 `getProductTypeList()` 拆分逗号;Mapper 改 `inIfPresent`。
|
||||
- 单值 `?productType=CORE` 兼容仍正常(拼出 `IN ('CORE')` 等价 `= 'CORE'`)
|
||||
- 多值 `?productType=CORE,GROUP` 拼出 `IN ('CORE','GROUP')` 返回正确结果
|
||||
|
||||
### 2. DB 文案改名 — 用户原话:"产品线(字典)改为主题"
|
||||
|
||||
| 表 | 改了什么 | 改前 | 改后 |
|
||||
|---|---|---|---|
|
||||
| `sys_dict_data` | dict_type=`banner_link_type`, dict_value=`PRODUCT_LINE` 的 dict_label | 产品线 | **主题** |
|
||||
| `sys_menu` | menu_id=520 模块名 | 产品线管理 | **主题管理** |
|
||||
| `sys_menu` | menu_id=5201 按钮 | 新增产品线 | **新增主题** |
|
||||
| `sys_menu` | menu_id=5202 按钮 | 编辑产品线 | **编辑主题** |
|
||||
| `sys_menu` | menu_id=5203 按钮 | 删除产品线 | **删除主题** |
|
||||
|
||||
### 3. 内部命名保持不变(API 契约稳定)
|
||||
|
||||
- 类名 `ProductLine*` / 表名 `product_line` / URL `/admin/product/line/**` / 字段 `lineId/productType` / 枚举 value `PRODUCT_LINE` 全部不动
|
||||
- 前端调 API 不需要任何改动,请求/响应字段名 0 变化
|
||||
|
||||
---
|
||||
|
||||
## 前端要做什么(可选 / 渐进式)
|
||||
|
||||
后端 + DB 改完后,前端**理论上无需任何代码改动**就能看到新文案:
|
||||
|
||||
- 字典 `banner_link_type` 的 label 通过 `getDictDataByType` 接口加载,前端 `<el-option>` 显示的是 `dictLabel`,部署后自动显示「主题」
|
||||
- 后台菜单从 `sys_menu` 加载,部署后自动显示「主题管理」+「新增/编辑/删除主题」按钮
|
||||
- 前端字典 store(`hl-ui/src/stores/dict.js` 含 `pinia-plugin-persistedstate`)做了 localStorage 持久化,**用户首次进入会读旧的"产品线"label**,需要硬刷新(Ctrl+Shift+R)或退出重登才会拿到新字典
|
||||
|
||||
### 但这些 .vue 里的硬编码"产品线"中文,建议 mmg 一并改为"主题"统一术语
|
||||
|
||||
参考之前 changelog `07_frontend_notice_topic-filter-empty.md` 已经在叫"主题"。grep 全仓 `"产品线"` 中文字面量一处一处对:
|
||||
|
||||
| 文件 | 大约位置 | 当前 | 建议改为 |
|
||||
|---|---|---|---|
|
||||
| `hl-ui/src/views/mp-config/home/banner/EditModal.vue` | ~333 行 `label:'产品线'` | 产品线 | 主题 |
|
||||
| `hl-ui/src/views/product/line/index.vue` | 页面标题 / 表头 | 产品线管理 | 主题管理 |
|
||||
| `hl-ui/src/views/product/list/index.vue` | 关联显示 | 产品线 | 主题 |
|
||||
| 其他 | 表头/按钮/placeholder/tooltip | "产品线" | "主题" |
|
||||
|
||||
预计涉及 14 个 .vue 文件(前期 Explore 调研结果),都属用户可见硬编码文案。
|
||||
|
||||
### 时间紧不改也能用
|
||||
|
||||
后端 + 字典 + 菜单都已经改名,前端 .vue 硬编码"产品线"不改的话,会出现"主题列表里某些 label 写产品线"这种术语混乱,但功能完全正常。
|
||||
|
||||
---
|
||||
|
||||
## round-trip 验证(部署完成后)
|
||||
|
||||
合并后 webhook 自动部署到测试服 `https://api.test.1814.love:9443`。验证清单:
|
||||
|
||||
```bash
|
||||
TOKEN=$(cat /d/work2/HL/.tmp/admin_token.txt | tr -d '\n\r ')
|
||||
|
||||
# 1. 多值过滤已修复(之前 total=0,现在应 >0)
|
||||
curl -k -s "https://api.test.1814.love:9443/admin/product/line/list?status=ACTIVE&productType=CORE,GROUP" \
|
||||
-H "Authorization: Bearer $TOKEN" | python -c "import json,sys; d=json.load(sys.stdin); print('total=',d['data']['total'])"
|
||||
|
||||
# 2. 单值兼容
|
||||
curl -k -s "https://api.test.1814.love:9443/admin/product/line/list?productType=CORE" \
|
||||
-H "Authorization: Bearer $TOKEN" | python -c "import json,sys; d=json.load(sys.stdin); print('total=',d['data']['total'])"
|
||||
|
||||
# 3. 字典 banner_link_type label 改名
|
||||
curl -k -s "https://api.test.1814.love:9443/internal/dict/data?dictType=banner_link_type" | grep -o '"PRODUCT_LINE"[^}]*"dictLabel":"[^"]*"'
|
||||
# 期望: "PRODUCT_LINE" ... "dictLabel":"主题"
|
||||
```
|
||||
|
||||
管理后台手动验证:
|
||||
- [ ] 轮播图编辑「链接类型」下拉显示「主题」
|
||||
- [ ] 选「主题」后「链接目标」弹窗能加载列表(不再"无数据")
|
||||
- [ ] 后台左侧菜单显示「主题管理」+ 三个按钮「新增/编辑/删除主题」
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户