refactor(app): 重构应用主题和页面结构
- 移除动态主题切换功能,改为全局统一深色主题 - 实现自定义TabBar组件替换原生tabBar,解决iOS闪白问题 - 创建main容器页面统一管理三个tab页面的生命周期和状态 - 将所有页面的onShow/onHide等生命周期方法迁移到子组件内部 - 更新页面路径从index改为main,并调整路由跳转逻辑 - 移除theme-mixin和相关主题工具函数 - 统一页面背景色设置,优化用户体验一致性
This commit is contained in:
+39
-40
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<view :class="themeClass" class="page-container home">
|
||||
<view class="page-container home">
|
||||
<!-- 顶部问候 -->
|
||||
<view class="greeting-bar" :style="{ paddingTop: statusBarHeight + 'px' }">
|
||||
<view class="greeting-left">
|
||||
@@ -153,10 +153,8 @@ import { GetCalendarReq, DeleteRecordReq, CreateRecordReq, GetRecordDetailReq }
|
||||
import { getGreeting, formatDate, getWeekStart, getCatIcon, isIconPath, calcLocalStreak } from '../../common/utils'
|
||||
import { FEELINGS, DRINK_CATEGORIES, DRINK_UNITS } from '../../common/constants'
|
||||
import { savePendingInvite, handlePendingInvite } from '../../common/invite'
|
||||
import themeMixin from '../../common/theme-mixin'
|
||||
|
||||
export default {
|
||||
mixins: [themeMixin],
|
||||
components: { DrinkCalendar },
|
||||
data() {
|
||||
const now = new Date()
|
||||
@@ -189,44 +187,45 @@ export default {
|
||||
return this.selectedDate === formatDate(new Date(), 'YYYY-MM-DD')
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
// 分享邀请落地:携带 inviteCode 时暂存邀请,已登录则立即接受邀请
|
||||
if (options && options.inviteCode) {
|
||||
savePendingInvite(options.inviteCode, options.inviterNick)
|
||||
if (uni.getStorageSync('is_logged_in') === 'true') {
|
||||
handlePendingInvite()
|
||||
}
|
||||
}
|
||||
},
|
||||
onShow() {
|
||||
// 首次启动跳转引导页由 App.vue onLaunch 统一处理,
|
||||
// 这里不再重复 reLaunch,避免两个跳转并发导致 reLaunch:fail timeout
|
||||
const isFirst = uni.getStorageSync('is_first_launch')
|
||||
if (isFirst === 'true') {
|
||||
return
|
||||
}
|
||||
// 游客可直接浏览首页:不发起鉴权请求,展示空数据;
|
||||
// 仅在用户主动点击记录等功能时才引导登录(微信审核要求:先浏览后登录)
|
||||
this.isGuest = !isLoggedIn()
|
||||
if (this.isGuest) {
|
||||
this.initGuestView()
|
||||
return
|
||||
}
|
||||
this.loadData()
|
||||
},
|
||||
onShareAppMessage() {
|
||||
return {
|
||||
title: '碰盏日记 - 让每一杯酒都有迹可循',
|
||||
path: '/pages/index/index'
|
||||
}
|
||||
},
|
||||
onShareTimeline() {
|
||||
return {
|
||||
title: '碰盏日记 - 让每一杯酒都有迹可循',
|
||||
query: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// === 子组件生命周期(由 main.vue 容器通过 ref 调用)===
|
||||
pageLoad(options) {
|
||||
// 分享邀请落地:携带 inviteCode 时暂存邀请,已登录则立即接受邀请
|
||||
if (options && options.inviteCode) {
|
||||
savePendingInvite(options.inviteCode, options.inviterNick)
|
||||
if (uni.getStorageSync('is_logged_in') === 'true') {
|
||||
handlePendingInvite()
|
||||
}
|
||||
}
|
||||
},
|
||||
pageShow() {
|
||||
// 首次启动跳转引导页由 App.vue onLaunch 统一处理,
|
||||
// 这里不再重复 reLaunch,避免两个跳转并发导致 reLaunch:fail timeout
|
||||
const isFirst = uni.getStorageSync('is_first_launch')
|
||||
if (isFirst === 'true') {
|
||||
return
|
||||
}
|
||||
// 游客可直接浏览首页:不发起鉴权请求,展示空数据;
|
||||
// 仅在用户主动点击记录等功能时才引导登录(微信审核要求:先浏览后登录)
|
||||
this.isGuest = !isLoggedIn()
|
||||
if (this.isGuest) {
|
||||
this.initGuestView()
|
||||
return
|
||||
}
|
||||
this.loadData()
|
||||
},
|
||||
getShareAppMessage() {
|
||||
return {
|
||||
title: '碰盏日记 - 让每一杯酒都有迹可循',
|
||||
path: '/pages/main/main?tab=0'
|
||||
}
|
||||
},
|
||||
getShareTimeline() {
|
||||
return {
|
||||
title: '碰盏日记 - 让每一杯酒都有迹可循',
|
||||
query: 'tab=0'
|
||||
}
|
||||
},
|
||||
// 游客浏览视图:问候语与零数据,页面结构可完整浏览,不发起任何鉴权请求
|
||||
initGuestView() {
|
||||
this.greeting = getGreeting()
|
||||
|
||||
Reference in New Issue
Block a user