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>
This commit is contained in:
Blizzard
2026-07-30 08:22:17 +08:00
parent 1584aabcc5
commit 6d49d28e1a
10 changed files with 52 additions and 26 deletions
+2
View File
@@ -1,6 +1,7 @@
const store = require('../../utils/store.js');
const api = require('../../utils/api.js');
const { toastErr } = require('../../utils/ui.js');
const { syncTabBar } = require('../../utils/tabbar.js');
// 相对时间。社区里关心的是「多久以前发的」,精确到秒没意义
function fmtAgo(iso) {
@@ -61,6 +62,7 @@ Page({
if (this._unsub) this._unsub();
},
onShow() {
syncTabBar(this);
store
.ready()
.then(() => {
+2
View File
@@ -1,6 +1,7 @@
const store = require('../../utils/store.js');
const api = require('../../utils/api.js');
const { toastErr } = require('../../utils/ui.js');
const { syncTabBar } = require('../../utils/tabbar.js');
function todayStr() {
const d = new Date();
@@ -111,6 +112,7 @@ Page({
if (this._unsub) this._unsub();
},
onShow() {
syncTabBar(this);
store
.ready()
.then(() => {
+2
View File
@@ -1,6 +1,7 @@
const store = require('../../utils/store.js');
const api = require('../../utils/api.js');
const { toastErr } = require('../../utils/ui.js');
const { syncTabBar } = require('../../utils/tabbar.js');
Page({
data: { user: {}, pets: [], card: null, sheetShow: false, sheetType: '' },
@@ -11,6 +12,7 @@ Page({
if (this._unsub) this._unsub();
},
onShow() {
syncTabBar(this);
store
.ready()
.then(() => {
+2
View File
@@ -1,6 +1,7 @@
const store = require('../../utils/store.js');
const api = require('../../utils/api.js');
const { toastErr } = require('../../utils/ui.js');
const { syncTabBar } = require('../../utils/tabbar.js');
function pad(n) {
return n < 10 ? '0' + n : '' + n;
@@ -131,6 +132,7 @@ Page({
if (this._unsub) this._unsub();
},
onShow() {
syncTabBar(this);
store
.ready()
.then(() => {
+2
View File
@@ -1,5 +1,6 @@
const store = require('../../utils/store.js');
const api = require('../../utils/api.js');
const { syncTabBar } = require('../../utils/tabbar.js');
Page({
data: {
@@ -22,6 +23,7 @@ Page({
if (this._unsub) this._unsub();
},
onShow() {
syncTabBar(this);
store
.ready()
.then(() => {
-14
View File
@@ -9,17 +9,3 @@
.ph-name{font-size:var(--fs-2xl);font-weight:var(--fw-b)}
.ph-meta{font-size:var(--fs-sm);margin-top:var(--sp-1)}
.profile-list{background:#fff;border-radius:var(--r-lg);box-shadow:var(--sd-1);overflow:hidden;margin-bottom:var(--sp-4)}
.profile-row{
display:flex;align-items:center;gap:var(--sp-3);min-height:104rpx;padding:0 var(--sp-4);
border-bottom:1rpx solid var(--line);font-size:var(--fs-md);font-weight:var(--fw-b);
}
.profile-row:last-child{border-bottom:0}
.pr-ic{
width:56rpx;height:56rpx;border-radius:var(--r-xs);flex:none;
display:flex;align-items:center;justify-content:center;
background:var(--primary-soft);color:var(--primary-ink);
}
.pr-label{flex:1;min-width:0}
.pr-val{color:var(--muted);font-weight:var(--fw);font-size:var(--fs-sm)}
.pr-arrow{color:var(--muted2);display:flex;align-items:center;flex:none}