From 04405b5e1153694fb4514a2fbc94dbeb1e904a0c Mon Sep 17 00:00:00 2001 From: let5sne Date: Thu, 9 Jul 2026 13:34:24 +0800 Subject: [PATCH] fix(mobile): reset page scroll on route entry --- docs/20260708/uni-app用户侧前端重建计划.md | 1 + mobile-uni/src/pages/auth/login/index.vue | 2 ++ mobile-uni/src/pages/candidate/index/index.vue | 6 +++++- mobile-uni/src/pages/common/building/index.vue | 2 ++ mobile-uni/src/pages/supervisor/index/index.vue | 6 +++++- mobile-uni/src/pages/user/cases/index.vue | 2 ++ mobile-uni/src/pages/user/practice/index.vue | 2 ++ mobile-uni/src/pages/user/profile/index.vue | 6 +++++- mobile-uni/src/pages/user/sop/index.vue | 2 ++ mobile-uni/src/pages/user/today/index.vue | 6 +++++- mobile-uni/src/services/navigation.ts | 9 +++++++++ 11 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 mobile-uni/src/services/navigation.ts diff --git a/docs/20260708/uni-app用户侧前端重建计划.md b/docs/20260708/uni-app用户侧前端重建计划.md index 731dff43..6006ad16 100644 --- a/docs/20260708/uni-app用户侧前端重建计划.md +++ b/docs/20260708/uni-app用户侧前端重建计划.md @@ -225,6 +225,7 @@ mobile-uni/ - `mobile-uni` 本地 dev 代理已对齐 portless:默认 `/dev-api -> https://wygj-api.localhost`,不再依赖裸 `8080`;真实浏览器登录链路已复跑通过。 - 员工今日页“今日安排”已优先回读真实 `/api/aihr/mobile/practice/assignments`;有待训练专项或每日三题时覆盖公开 home seed,真实浏览器已验证 `13900000998` 首页显示当天 daily 任务并可跳到练习页。 - 员工今日页到练习页已补任务上下文传递:首页点“开始”会把当前 assignment 带到练习页,daily 任务高亮并提示填写,主管专项可直接启动,减少跳页后的二次选择。 +- 移动端 hash 路由滚动复位已补:员工/候选人/主管/登录/建设中页面激活时回到顶部,真实浏览器验证从长页切回今日页后 `scrollY=0`,避免首屏被旧滚动位置截断。 ## 7. 风险 diff --git a/mobile-uni/src/pages/auth/login/index.vue b/mobile-uni/src/pages/auth/login/index.vue index 4f2dbdab..5a1830d0 100644 --- a/mobile-uni/src/pages/auth/login/index.vue +++ b/mobile-uni/src/pages/auth/login/index.vue @@ -40,6 +40,7 @@ import { onShow } from '@dcloudio/uni-app'; import type { LoginResult } from '@/types/api'; import { apiRequest } from '@/services/api'; import { consumeLoginRedirect, getAuth, isLoggedIn, phoneKey, saveAuth, validatePhone } from '@/services/auth'; +import { resetPageScroll } from '@/services/navigation'; const stored = getAuth(); const phone = ref(stored.phone || uni.getStorageSync(phoneKey) || ''); @@ -123,6 +124,7 @@ const login = async () => { }; onShow(() => { + resetPageScroll(); if (isLoggedIn()) { goAfterLogin(); } diff --git a/mobile-uni/src/pages/candidate/index/index.vue b/mobile-uni/src/pages/candidate/index/index.vue index efc74bba..c2a098b5 100644 --- a/mobile-uni/src/pages/candidate/index/index.vue +++ b/mobile-uni/src/pages/candidate/index/index.vue @@ -154,6 +154,7 @@ import type { CandidateMaterial, InterviewFinishResponse, InterviewQuestion, Int import { getMobileHome } from '@/services/home'; import { isLoggedIn, rememberLoginRedirect } from '@/services/auth'; import { searchKnowledge } from '@/services/knowledge'; +import { resetPageScroll } from '@/services/navigation'; import { chooseCandidateFile, finishCandidateInterview, @@ -404,7 +405,10 @@ const goLogin = () => { uni.navigateTo({ url: '/pages/auth/login/index' }); }; -onShow(loadPage); +onShow(() => { + resetPageScroll(); + void loadPage(); +});