fix(index): 修复首页轮播图显示与高度自适应问题

- 解决首页轮播图仅显示第一张图片的问题,支持广告位多图展开显示
- 通过 flatMap 展开广告位所有图片为独立轮播项,兼容单图老数据
- 轮播图点击跳转逻辑按广告位路径保持不变
- 获取轮播容器实际宽度,计算轮播高度自适应,替代固定 160px 高度
- 根据后台广告位宽高比计算轮播图展示高度,无效数据时回退到默认高度
- 轮播容器新增类名便于 DOM 选择和尺寸测量
- 轮播图及占位区高度均采用动态计算结果,适配不同设备屏幕宽度
This commit is contained in:
2026-07-15 22:30:02 +08:00
parent 4d646b3fd6
commit 501e79eed7
2 changed files with 52 additions and 4 deletions

View File

@@ -243,3 +243,25 @@
- 编译验证:`npx taro build --type weapp` 14.89s 成功
- 设计稿预览:`.workbuddy/sms-login-preview.html`(按 375×812 真机尺寸渲染的 mockup可直接浏览器打开看
- 业务规则login/register/sms-login 三个页面已统一视觉风格(同一套渐变 + 圆形 logo + 大字标题 + 白色卡片),后续新增 passport 类页面照搬这一套即可
## 修复首页轮播图只显示一张的问题
- 文件:`src/pages/index/index.tsx`
- 现象:后台一个广告位下配置了 3 张图片,但小程序首页轮播只显示第一张
- 根因:原代码把每个 `CmsAd` 作为一个 `SwiperItem`,图片只取 `item.imageList?.[0]?.url`,所以无论后台配几张都只渲染首图
- 修复:
- 新增 `bannerSlides`:用 `flatMap` 把每个广告位下的 `imageList` 全部展开成独立轮播项key 用 `adId-uid`(无 uid 则 fallback 到索引)
- 保留 `item.image` 单图兜底逻辑,兼容只配单张图片的老数据
- 渲染 `SwiperItem` 改为遍历 `bannerSlides`,点击跳转仍使用对应广告位的 `path`
- 验证:代码逻辑走查通过;项目原有 `npx tsc --noEmit``@tarojs/taro` 类型定义错误与本次修改无关
## 首页轮播图高度改为按后台 width/height 自适应
- 文件:`src/pages/index/index.tsx`
- 原状:`Swiper``height` 固定写死 `160px`,与后台广告位配置脱节
- 修复:
- 新增 `bannerWrapWidth` 状态,页面渲染后用 `Taro.createSelectorQuery().select('.index-banner-wrap').boundingClientRect()` 获取容器实际宽度
- 新增 `bannerHeight`useMemo取第一个带有效 `width/height` 的广告位,按 `容器宽度 * (height / width)` 计算高度;无值或解析失败则 fallback `160px`
- 轮播容器增加 `index-banner-wrap` 类名用于选择器查询
- `Swiper` 和「暂无轮播图」占位区的高度都改用 `bannerHeight`
- 注意:宽度仍由容器 `w-full` + `mx-3` 边距控制,不直接套用后台 `width` 像素值;高度按比例缩放适配不同屏幕