4.9 KiB
4.9 KiB
首页 Banner / 广告位 跳转现状梳理
状态:现状分析(仅梳理,代码未改)。日期:2026-06-03 范围:小程序
pages/index/index.vue首页各广告位的点击跳转逻辑,对照后端配置。
一、后端是怎么配置跳转的
每条 banner/广告(表 home_banner_region)、金刚位(表 home_button_region)都有统一的跳转配置字段,核心是 promotion_type(推广类型):
| promotion_type | 含义 | 配套字段 |
|---|---|---|
| 1 | 无跳转 | — |
| 2 | 选择活动 | 关联 advertisement_goods(按 banner id) |
| 3 | 跳转本程序页面 | link_url |
| 4 | 跳转其他小程序 | appid + link_url |
| 5 | 选择商品 | advertisement_goods[].goods_id |
- 后台创建/编辑接口(
api/admin/v2/crud_home_banner_region.go)用promotion_type+required-if校验对应字段,例如 type=4 必填 appid、type=3/4 必填 link_url。 home_button_region(金刚位)字段相同,也有promotion_type/link_url/appid。- type=2/5 的落地:
/packages/advertising/index/index?id=<banner.id>是“广告聚合落地页”,传 banner 自身 id 进去,页面内部拉该 banner 关联的advertisement_goods商品列表展示,并可进入goodsDetail。
二、前端实际怎么跳的(问题所在)
首页有 4 个不同的点击处理函数各管一片,几乎都没读 promotion_type:
1. headerServerClick(金刚位 tabList、homeLeftList 用)
- 文件:
pages/index/index.vue(搜headerServerClick(e)) - 只看
link_url和appid,完全忽略promotion_type。 - 逻辑:无
link_url→ 弹“此功能暂未开通”;有appid→ 跳小程序;否则当本程序路径NavgateTo。 - 后果:type=2(活动)、type=5(商品)的配置它不认 → 落到“没 link_url”分支 → 弹“暂未开通”。
2. toAdvertisingView(广告横幅 serverLeft、serverRight[0] 用)
- 文件:
pages/index/index.vue:357附近 - 写死跳
/packages/advertising/index/index?id=xxx,不看promotion_type,一律进广告落地页。
3. goToPurify(serverRight 非首个用,模板 index.vue:101)
- 文件:
pages/index/index.vue:363附近 - 彻底写死:固定跳净水小程序
appId=wx77b22c0a0018e580,path/appId 全硬编码,传入的item没用到,与后台配置零关系。 - 模板:
@tap="index === 0 ? toAdvertisingView(serverRightList) : goToPurify(item)"—— serverRight 第一个跳广告页,其余全跳净水小程序。
4. headerServerClick2(中部 serverItem / homeRightList1,2 用)
- 文件:
pages/index/index.vue(搜headerServerClick2(e)) - 不跳外链,只按
title匹配商家分类做筛选,或固定跳本地生活页。注意:这一处可能是“按分类筛选”的有意设计,不一定算 bug。
5. 顶部轮播 Banner(位置 1,模板 index.vue:68)
- 点击事件被注释掉了(
<!-- <swiper-item ... @click="headerServerClick(item)"> -->),顶部 banner 现在点击无反应。
三、根因
后台用统一的 promotion_type 模型配跳转,前端却是早期“按位置分别写死”的处理函数拼起来的:既没统一读 promotion_type,部分位置还硬编码了目标(广告页、净水小程序)。所以出现“很多跳转和后台配置不符”——不是数据错,是前端没按配置解析。
四、建议修法(未实施,待决策)
做一个统一跳转函数 handleAdJump(item),严格按 promotion_type 分发:
switch promotion_type:
1: 不跳
2: NavgateTo('/packages/advertising/index/index?id=' + item.id) // 活动
3: link_url 跳本程序页面(兼容 shopEnter 特例 / H5 / APP webview)
4: navigateToMiniProgram(appid, link_url) // 其他小程序
5: NavgateTo('/packages/advertising/index/index?id=' + item.id) // 商品(同活动,落地页内展示)
其他: 弹“暂未开通”
然后把首页所有广告位的 @click/@tap 都换成 handleAdJump(item):
- 顶部轮播 banner:取消注释,改
handleAdJump - 金刚位 tabList、homeLeftList:
headerServerClick→handleAdJump - serverLeft、serverRight:
toAdvertisingView/goToPurify→handleAdJump
实施前需确认的点
headerServerClick2(中部 serverItem 按 title 筛分类)是否要保留分类筛选语义?还是也改成按promotion_type跳?- 净水小程序跳转:是想保留写死,还是改由后台某条 banner 配
type=4 + 该 appid来控制(更灵活,去掉硬编码)? - type=2/5 是否都统一进广告落地页
/packages/advertising/index/index?id=banner.id(当前分析结论是“是”)。
相关:
promotion_type字段定义见huichang-server/internal/model/entity/home_banner_region.go、home_button_region.go;广告落地页uniapp-ZHSQ/packages/advertising/index/index.vue。