peixue-dev/peidu/uniapp/App.vue

163 lines
4.8 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup>
import { computed, watch, onMounted } from 'vue'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
const currentRole = computed(() => userStore.currentRole)
onMounted(() => {
console.log('App Launch')
updateTabBar()
// 🔥 新增:检查用户登录状态和角色,自动跳转到对应首页
checkLoginAndRedirect()
})
watch(currentRole, () => {
updateTabBar()
})
// 🔥 新增:检查登录状态并自动跳转
const checkLoginAndRedirect = () => {
const token = uni.getStorageSync('token')
const userInfo = uni.getStorageSync('userInfo')
const currentRole = uni.getStorageSync('currentRole')
console.log('检查登录状态:', { token: !!token, currentRole })
// 如果已登录且有角色信息,检查当前页面是否正确
if (token && userInfo && currentRole) {
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const currentRoute = currentPage.route
console.log('当前页面:', currentRoute, '用户角色:', currentRole)
// 如果当前在登录页面或首页,需要根据角色跳转
if (currentRoute === 'pages/index/index' || currentRoute.includes('login')) {
setTimeout(() => {
redirectToRoleHome(currentRole)
}, 100)
}
}
}
// 🔥 新增:根据角色跳转到对应首页
const redirectToRoleHome = (role) => {
console.log('根据角色跳转首页:', role)
switch (role) {
case 'teacher':
uni.reLaunch({
url: '/teacher-package/pages/teacher/index'
})
break
case 'manager':
uni.reLaunch({
url: '/manager-package/pages/manager/index'
})
break
case 'distributor':
uni.reLaunch({
url: '/distributor-package/pages/distributor/index'
})
break
case 'serviceProvider':
uni.reLaunch({
url: '/provider-package/pages/provider/index'
})
break
case 'user':
default:
// 家长保持在通用首页
break
}
}
// 根据角色动态更新TabBar
const updateTabBar = () => {
const role = currentRole.value || 'user'
// 不同角色的TabBar配置5个标签
const tabBarConfig = {
user: [
{ text: '首页', pagePath: '/pages/index/index' },
{ text: '服务', pagePath: '/pages/service/list' },
{ text: '快速预约', pagePath: '/pages/booking/quick-booking' },
{ text: '日历', pagePath: '/pages/order/list' },
{ text: '我的', pagePath: '/pages/user/index' }
],
teacher: [
{ text: '首页', pagePath: '/pages/index/index' },
{ text: '服务', pagePath: '/pages/service/list' },
{ text: '快速预约', pagePath: '/pages/booking/quick-booking' },
{ text: '日历', pagePath: '/pages/order/list' },
{ text: '我的', pagePath: '/pages/user/index' }
],
manager: [
{ text: '首页', pagePath: '/pages/index/index' },
{ text: '服务', pagePath: '/pages/service/list' },
{ text: '快速预约', pagePath: '/pages/booking/quick-booking' },
{ text: '日历', pagePath: '/pages/order/list' },
{ text: '我的', pagePath: '/pages/user/index' }
],
distributor: [
{ text: '首页', pagePath: '/pages/index/index' },
{ text: '服务', pagePath: '/pages/service/list' },
{ text: '快速预约', pagePath: '/pages/booking/quick-booking' },
{ text: '日历', pagePath: '/pages/order/list' },
{ text: '我的', pagePath: '/pages/user/index' }
],
serviceProvider: [
{ text: '首页', pagePath: '/pages/index/index' },
{ text: '服务', pagePath: '/pages/service/list' },
{ text: '快速预约', pagePath: '/pages/booking/quick-booking' },
{ text: '日历', pagePath: '/pages/order/list' },
{ text: '我的', pagePath: '/pages/user/index' }
]
}
const config = tabBarConfig[role] || tabBarConfig.user
// 更新TabBar文字添加错误处理避免在非TabBar页面报错
config.forEach((item, index) => {
try {
uni.setTabBarItem({
index: index,
text: item.text,
fail: () => {} // 静默失败
})
} catch (e) {
// 忽略非TabBar页面的错误
}
})
// 设置TabBar样式深青绿色
try {
uni.setTabBarStyle({
color: 'rgba(255, 255, 255, 0.7)',
selectedColor: '#ffffff',
backgroundColor: '#2d9687',
borderStyle: 'white',
fail: () => {} // 静默失败
})
} catch (e) {
// 忽略非TabBar页面的错误
}
}
</script>
<style lang="scss">
@import '@/static/css/common.scss';
page {
background-color: #f8f8f8;
font-size: 28rpx;
color: #333;
}
</style>