hl-api-changelog/changelogs/2026-05/12_frontend_notice_admin_resource-product-icon-CHANGE-to-svg.md
API Changelog Bot c872297dea 2026-05-12: 撤销+重发 - icon 字段从 material_id 改 SVG 文本 (PR #2087, Refs #2068)
前一份 12_frontend_notice_admin_resource-product-icon-selling-point.md 提到的
iconMaterialId / iconUrl 两字段已撤销, 后端最终用单字段 iconSvg (TEXT) 直接存
SVG 源码. sellingPoint 字段保持不变.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 12:00:26 +08:00

4.9 KiB

⚠️ 撤销 + 重发: 资源 / 产品节点图标字段改为 SVG 文本 iconSvg

服务: hl-resource-service (端口 8082) + hl-product-service-v2 (端口 8083) PR: #2087 — 已合并 dev + 测试服部署 撤销: 同日早些时候的 12_frontend_notice_admin_resource-product-icon-selling-point.mdiconMaterialId / iconUrl 两字段已撤销, 见下 Issue: #2068 (已关闭) 日期: 2026-05-12 影响范围: 管理端「资源管理 → 景区/活动/服务」+「产品编辑 → 行程编排/产品卖点」+ 小程序「今日体验」节点


⚠️ 关键变化

前一份 changelog 说 iconMaterialId 和 iconUrl 两字段这个设计已撤销

后端最终方案是单字段 iconSvg (String) 直接存 SVG 源码文本,不走素材库:

  • 前端不需要选择素材库图片
  • 前端不需要拼 OSS URL
  • 前端收到 iconSvg 直接 v-html 或 SVG 渲染

sellingPoint 字段保持不变, 仍是 VARCHAR(500)。


一、撤销的字段 vs 新字段

撤销字段(请删) 新字段(请用) 类型
iconMaterialId iconSvg String (TEXT)
iconUrl (合并到 iconSvg, 不再单独存 URL) -

sellingPoint 不变


二、测试服已验证 (硬性凭证)

hl-resource-service 测试服 V20260512_002 已 apply:
  ALTER TABLE scenic_spot/activity/service_item DROP COLUMN icon_material_id, ADD COLUMN icon_svg TEXT
hl-product-service-v2 测试服 V20260512_002 已 apply:
  ALTER TABLE product_itinerary_node 同上

接口测试:
  POST /admin/scenic/spot { iconSvg: "<svg viewBox='0 0 24 24'>...</svg>" } → 存取一致 ✓
  GET 产品行程详情节点 → iconSvg 字段就位 ✓
  「资源默认值复制」「前端覆盖优先」「不回写资源」三铁规仍守住 ✓

三、变更接口清单

资源端 (12 接口 = 3 类资源 × 4 个接口)

# 接口 方法 路径 变更
1 景区 创建 POST /admin/scenic/spot 请求/响应 iconMaterialIdiconSvg String
2 景区 更新 PUT /admin/scenic/spot 同上
3 景区 详情 GET /admin/scenic/spot/{id} 响应字段重命名
4 景区 列表 GET /admin/scenic/spots ListVO 字段重命名
5-8 活动 同上 - /admin/activity/item* -
9-12 服务 同上 - /admin/service/item* -

产品端

# 接口 方法 路径 变更
13 行程保存 PUT /admin/product/item/{id}/itinerary 节点入参 iconMaterialId(Long)iconSvg(String)
14 产品详情 (admin) GET /admin/product/item/{id} 节点响应 iconMaterialId/iconUrliconSvg
15 产品详情 (mp) GET /mp/product/{id} 同上,小程序「今日体验」用

四、前端字段约束

字段 类型 必填 约束 备注
iconSvg String(TEXT, 最大 64KB) 应为有效 SVG XML 文本(<svg ...>...</svg>) 前端直接 v-html / innerHTML 渲染或 svg-loader
sellingPoint String 最多 500 字符 不变

五、UI 层面建议

资源管理页 (3 类资源)

之前建议「素材库选择器选小图」的方案撤销, 改成:

  • 图标: 文本框(或 SVG 上传组件), 后端存 SVG 源码
  • 可参考方案: 前端给个 SVG 图标库(如 Material Icons / Heroicons 的 SVG 集合)让用户选, 选完拷 SVG 源码进表单字段
  • 或允许用户直接粘贴 SVG XML(给个 textarea + 预览)

产品编辑 - 行程编排

  • 节点上的图标控件改用 SVG 源码(同上)
  • 后端自动复制规则不变: 节点选完资源后, 若前端不传 iconSvg → 后端从资源端拷贝默认 SVG 进节点快照
  • 修改节点 iconSvg 不回写资源, 这条铁规也不变

六、不影响的地方

  • sellingPoint 字段(包括位置 + 长度 + 行为)不动
  • 「资源默认值复制」「前端覆盖优先」「永不回写资源」三铁规不动
  • Bean Validation 用 @ApiModelProperty 标注新字段, 后端无校验 SVG XML 合法性(前端必要时自检)

七、需要前端做的事(替代上一份 changelog)

  1. 3 类资源管理页: 把之前规划的「图片素材选择器」换成 SVG 文本输入/选择
  2. 产品编辑 → 行程编排 / 产品卖点: 节点的 icon 编辑从 materialId 改 SVG 文本字段
  3. 「今日体验」小程序: 节点前的图标直接 wx:html="{{ iconSvg }}" (或 rich-text)
  4. swagger 实时核对: https://api.test.1814.love:9443/hl-resource-service/v2/api-docs?group=资源服务 + https://api.test.1814.love:9443/hl-product-service-v2/v2/api-docs?group=产品服务 (账号 hulalv / HuLaLv@Doc2026)