Files
sundynix-pets/pets-fe/custom-tab-bar/index.js
T
Blizzard 6d49d28e1a fix(fe): 修 Phase D 三个渲染问题
## 1. tabBar 高亮不跟着切(进「我的」还亮在「首页」)
Phase A 我把高亮改成 custom-tab-bar 自己在 pageLifetimes.show 里按路由算,
想省掉五个页面的硬编码。实测不行:自定义 tabBar 不在页面节点树里,
pageLifetimes 拿不到可靠时机,selected 一直停在默认的 0。

回到官方那套「页面 onShow 推一把」,但索引仍然由 tabBar 按当前路由自己算
(utils/tabbar.js → syncSelected),页面这边不写死 0/1/2/3/4。
调 tab 顺序还是只改一个 LIST,五个页面一行都不用动——原来想要的收益保住了,
只是多了五行 syncTabBar(this)。

## 2. 头像被头图盖住,只露出下半个
.pf-bg 带了 position:relative,定位元素会盖过静态的兄弟节点,DOM 顺序在后
也没用。给 .pf-av 加 position:relative + z-index,同时把 .pf-bg 上那个没人
用的 position 去掉。头图高度 220 → 180rpx,纯渐变时不至于占掉半屏。

## 3.「我的」页四个入口整个散架,图标文字箭头各占一行
.profile-list / .profile-row / .pr-ic / .pr-label / .pr-val 全在
settings.wxss 里——Phase A 从 profile 拆页时留在了设置页,mine 用同一批
class 但样式跨不了页,于是完全裸奔。提到 app.wxss。

这是这个项目第二次踩「页面级 wxss 跨页用」了(上次是 .post-card 在用户
主页裸奔)。两个页面共用的 class 就不该留在任一页的 wxss 里。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 08:22:17 +08:00

35 lines
1.3 KiB
JavaScript

const LIST = [
{ pagePath: '/pages/home/home', text: '首页', icon: 'home' },
{ pagePath: '/pages/record/record', text: '记录', icon: 'record' },
{ pagePath: '/pages/report/report', text: '报告', icon: 'report' },
{ pagePath: '/pages/community/community', text: '社区', icon: 'community' },
{ pagePath: '/pages/mine/mine', text: '我的', icon: 'user' },
];
Component({
data: { selected: 0, hidden: false, list: LIST },
lifetimes: {
attached() {
this.syncSelected();
},
},
methods: {
// 高亮由当前页面路径算出来,页面那边不写死 0/1/2/3/4,
// 调 tab 顺序只改上面的 LIST 就够了。
//
// 触发时机必须由页面 onShow 推(见 utils/tabbar.js):自定义 tabBar 不在
// 页面节点树里,组件自己的 pageLifetimes.show 拿不到可靠时机,实测切到
// 「我的」时高亮还留在「首页」。
syncSelected() {
const pages = getCurrentPages();
const cur = pages[pages.length - 1];
if (!cur) return;
const i = LIST.findIndex((t) => t.pagePath === '/' + cur.route);
if (i >= 0) this.setData({ selected: i });
},
switchTab(e) {
wx.switchTab({ url: LIST[e.currentTarget.dataset.index].pagePath });
},
},
});