From acb881a121295aa7c32b6f46e914d802dbaca716 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 7 May 2026 19:13:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=9A=E7=9F=A5=20mmg=20-=20?= =?UTF-8?q?=E8=BD=AE=E6=92=AD=E5=9B=BE=E4=B8=BB=E9=A2=98=E6=97=A0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BF=AE=E5=A4=8D=20+=20=E5=AD=97=E5=85=B8/=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E4=BA=A7=E5=93=81=E7=BA=BF=E6=94=B9=E5=90=8D=E4=B8=BA?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=20(PR=20#1837)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._product-v2_banner_productline_to_theme.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 changelogs/2026-05/07_fix_product-v2_banner_productline_to_theme.md diff --git a/changelogs/2026-05/07_fix_product-v2_banner_productline_to_theme.md b/changelogs/2026-05/07_fix_product-v2_banner_productline_to_theme.md new file mode 100644 index 0000000..83c429e --- /dev/null +++ b/changelogs/2026-05/07_fix_product-v2_banner_productline_to_theme.md @@ -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` 接口加载,前端 `` 显示的是 `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":"主题" +``` + +管理后台手动验证: +- [ ] 轮播图编辑「链接类型」下拉显示「主题」 +- [ ] 选「主题」后「链接目标」弹窗能加载列表(不再"无数据") +- [ ] 后台左侧菜单显示「主题管理」+ 三个按钮「新增/编辑/删除主题」