fix(mp): 医生端添加底部导航栏解决无法退出登录问题

医生端工作台是分包页面,不在 TabBar 配置中,redirectTo 后底部
导航消失导致无法到达"我的"页面退出登录。新增 DoctorTabBar 组件
模拟底部导航,包含工作台/患者/咨询/我的四个入口,使用 reLaunch
切换避免页栈溢出。
This commit is contained in:
iven
2026-05-20 07:18:18 +08:00
parent 03c50f6712
commit 3c94f5d585
6 changed files with 108 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
@import '../../../styles/variables.scss';
.doctor-tabbar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: $tabbar-space;
background: $card;
display: flex;
align-items: flex-start;
padding-top: 6px;
padding-bottom: env(safe-area-inset-bottom, 0px);
box-shadow: 0 -1px 0 $bd, $shadow-md;
z-index: 999;
&__item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 2px;
padding: 6px 0;
cursor: pointer;
-webkit-tap-highlight-color: transparent;
&--active {
.doctor-tabbar__icon {
transform: scale(1.15);
}
.doctor-tabbar__label {
color: $doc-pri;
font-weight: 600;
}
}
}
&__icon {
font-size: 22px;
line-height: 1;
transition: transform 0.15s ease;
}
&__label {
font-size: 10px;
color: $tx3;
line-height: 1.2;
transition: color 0.15s ease;
}
}

View File

@@ -0,0 +1,47 @@
import { View, Text } from '@tarojs/components';
import Taro from '@tarojs/taro';
import './index.scss';
interface TabItem {
key: string;
icon: string;
activeIcon: string;
label: string;
url: string;
}
const DOCTOR_TABS: TabItem[] = [
{ key: 'workbench', icon: '🏠', activeIcon: '🏠', label: '工作台', url: '/pages/pkg-doctor-core/index' },
{ key: 'patients', icon: '👤', activeIcon: '👤', label: '患者', url: '/pages/pkg-doctor-core/patients/index' },
{ key: 'consultation', icon: '💬', activeIcon: '💬', label: '咨询', url: '/pages/pkg-doctor-core/consultation/index' },
{ key: 'settings', icon: '⚙️', activeIcon: '⚙️', label: '我的', url: '/pages/pkg-profile/settings/index' },
];
interface DoctorTabBarProps {
active?: string;
}
export default function DoctorTabBar({ active }: DoctorTabBarProps) {
const currentPath = `/${Taro.getCurrentPages().pop()?.path ?? ''}`;
const activeKey = active ?? DOCTOR_TABS.find((t) => currentPath.startsWith(t.url.replace('/index', '')))?.key ?? 'workbench';
const handleTab = (tab: TabItem) => {
if (tab.key === activeKey) return;
Taro.reLaunch({ url: tab.url });
};
return (
<View className="doctor-tabbar">
{DOCTOR_TABS.map((tab) => (
<View
key={tab.key}
className={`doctor-tabbar__item ${tab.key === activeKey ? 'doctor-tabbar__item--active' : ''}`}
onClick={() => handleTab(tab)}
>
<Text className="doctor-tabbar__icon">{tab.key === activeKey ? tab.activeIcon : tab.icon}</Text>
<Text className="doctor-tabbar__label">{tab.label}</Text>
</View>
))}
</View>
);
}