diff --git a/apps/miniprogram/src/hooks/useNavigationState.ts b/apps/miniprogram/src/hooks/useNavigationState.ts new file mode 100644 index 0000000..5091358 --- /dev/null +++ b/apps/miniprogram/src/hooks/useNavigationState.ts @@ -0,0 +1,43 @@ +import { useCallback } from 'react'; +import Taro from '@tarojs/taro'; +import { useAuthStore } from '@/stores/auth'; + +const NAV_STATE_KEY = 'doctor_last_page'; + +const DOCTOR_PAGES = [ + '/pages/pkg-doctor-core/index', + '/pages/pkg-doctor-core/patients/index', + '/pages/pkg-doctor-core/consultation/index', + '/pages/pkg-doctor-core/followup/index', + '/pages/pkg-doctor-core/action-inbox/index', +]; + +export function saveDoctorPage(path: string): void { + if (!path.startsWith('/pages/pkg-doctor')) return; + try { + Taro.setStorageSync(NAV_STATE_KEY, path); + } catch { /* ignore */ } +} + +export function getDoctorLastPage(): string { + try { + const saved = Taro.getStorageSync(NAV_STATE_KEY); + if (saved && typeof saved === 'string' && saved.startsWith('/pages/pkg-doctor')) { + return saved; + } + } catch { /* ignore */ } + return DOCTOR_PAGES[0]; +} + +export function useNavigationState() { + const isDoctor = useAuthStore((s) => s.isDoctor); + + const navigateToDoctorHome = useCallback(() => { + if (!isDoctor()) return false; + const lastPage = getDoctorLastPage(); + Taro.navigateTo({ url: lastPage }); + return true; + }, [isDoctor]); + + return { navigateToDoctorHome, saveDoctorPage, getDoctorLastPage }; +} diff --git a/apps/miniprogram/src/pages/index/index.tsx b/apps/miniprogram/src/pages/index/index.tsx index 3a84ac2..6ded74b 100644 --- a/apps/miniprogram/src/pages/index/index.tsx +++ b/apps/miniprogram/src/pages/index/index.tsx @@ -6,6 +6,7 @@ import { useAuthStore } from '../../stores/auth'; import { useUIStore } from '../../stores/ui'; import { navigateToLogin } from '../../utils/navigate'; import { usePageData } from '@/hooks/usePageData'; +import { getDoctorLastPage } from '@/hooks/useNavigationState'; // useThrottledDidShow removed — unused import import { api } from '@/services/request'; import type { Article } from '@/services/article'; @@ -352,8 +353,9 @@ export default function Index() { useDidShow(() => { if (shouldRedirect && !redirectingRef.current) { redirectingRef.current = true; + const target = getDoctorLastPage(); Taro.reLaunch({ - url: '/pages/pkg-doctor-core/index', + url: target, fail: () => { redirectingRef.current = false; console.warn('跳转医生端失败,停留患者首页'); diff --git a/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx b/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx index b75fa37..ef92261 100644 --- a/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx +++ b/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx @@ -4,6 +4,7 @@ import { safeNavigateTo } from '@/utils/navigate'; import { useAuthStore } from '@/stores/auth'; import { useDoctorClass } from '@/hooks/useDoctorClass'; import { usePageData } from '@/hooks/usePageData'; +import { saveDoctorPage } from '@/hooks/useNavigationState'; import { getDashboard, type DoctorDashboard } from '@/services/doctor/dashboard'; import Loading from '@/components/Loading'; import ContentCard from '@/components/ui/ContentCard'; @@ -68,6 +69,7 @@ export default function DoctorHome() { }, []); usePageData(loadDashboard, { throttleMs: 10000 }); + saveDoctorPage('/pages/pkg-doctor-core/index'); const getValue = (key: keyof DoctorDashboard): number | string => { if (!dashboard) return '-';