hookehuyr

fix(路由): 修复授权跳转逻辑并优化页面导航处理

改进授权检查逻辑,避免重复跳转到授权页面
使用setTimeout延迟导航操作防止冲突
将reLaunch改为navigateTo/switchTab避免重复触发onLaunch
添加多级降级处理增强导航健壮性
1 /* 1 /*
2 * @Date: 2025-06-28 10:33:00 2 * @Date: 2025-06-28 10:33:00
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2025-07-08 17:49:20 4 + * @LastEditTime: 2025-07-14 16:45:23
5 * @FilePath: /jgdl/src/app.js 5 * @FilePath: /jgdl/src/app.js
6 * @Description: 文件描述 6 * @Description: 文件描述
7 */ 7 */
...@@ -17,21 +17,28 @@ const App = createApp({ ...@@ -17,21 +17,28 @@ const App = createApp({
17 // 未授权状态跳转授权页面,首页不需要权限 17 // 未授权状态跳转授权页面,首页不需要权限
18 const path = options.path; 18 const path = options.path;
19 const query = options.query; 19 const query = options.query;
20 +
20 // 缓存没有权限的地址 21 // 缓存没有权限的地址
21 const router = routerStore(); 22 const router = routerStore();
22 router.add(path); 23 router.add(path);
23 - // if (path !== 'pages/index/index' && !wx.getStorageSync("sessionid")) { 24 +
24 - if (!wx.getStorageSync("sessionid")) { 25 + // 检查是否有sessionid
25 - console.warn("没有权限"); 26 + const sessionid = wx.getStorageSync("sessionid");
26 - if (path === 'pages/productDetail/index') { 27 +
27 - Taro.navigateTo({ 28 + // 如果没有sessionid且不是auth页面本身,才跳转到授权页面
28 - url: `./pages/auth/index?url=${path}&id=${query.id}`, 29 + if (!sessionid && path !== 'pages/auth/index') {
29 - }) 30 + // 添加延迟避免与页面初始化冲突
30 - } else { 31 + setTimeout(() => {
31 - Taro.navigateTo({ 32 + if (path === 'pages/productDetail/index') {
32 - url: './pages/auth/index?url=' + path, 33 + Taro.navigateTo({
33 - }) 34 + url: `./pages/auth/index?url=${path}&id=${query.id}`,
34 - } 35 + })
36 + } else {
37 + Taro.navigateTo({
38 + url: './pages/auth/index?url=' + path,
39 + })
40 + }
41 + }, 100);
35 } 42 }
36 }, 43 },
37 onShow(options) { 44 onShow(options) {
......
...@@ -131,8 +131,11 @@ export default { ...@@ -131,8 +131,11 @@ export default {
131 if (params.url === 'pages/productDetail/index') { 131 if (params.url === 'pages/productDetail/index') {
132 // 详情页的分享跳转处理 - 使用绝对路径 132 // 详情页的分享跳转处理 - 使用绝对路径
133 this.navigateToPage(`/pages/productDetail/index?id=${params.id}`); 133 this.navigateToPage(`/pages/productDetail/index?id=${params.id}`);
134 + } else if (params.url && params.url !== 'pages/auth/index') {
135 + // 如果有指定的目标页面且不是auth页面本身,跳转到该页面
136 + this.navigateToPage(`/${params.url}`);
134 } else { 137 } else {
135 - // 其他页面跳转到首页 138 + // 其他情况跳转到首页
136 this.navigateToHome(); 139 this.navigateToHome();
137 } 140 }
138 } catch (error) { 141 } catch (error) {
...@@ -144,30 +147,46 @@ export default { ...@@ -144,30 +147,46 @@ export default {
144 147
145 /** 148 /**
146 * 跳转到指定页面 149 * 跳转到指定页面
147 - * @param {string} url - 页面路径 150 + * @param {string} url - 目标页面路径
148 */ 151 */
149 navigateToPage(url) { 152 navigateToPage(url) {
150 - Taro.reLaunch({ 153 + setTimeout(() => {
151 - url: url 154 + // 使用navigateTo而不是reLaunch,避免重新触发app.js的onLaunch
152 - }).catch(err => { 155 + Taro.navigateTo({
153 - console.error('页面跳转失败:', err); 156 + url
154 - // 降级处理:跳转到首页 157 + }).catch(err => {
155 - this.navigateToHome(); 158 + console.error('navigateTo跳转失败,尝试reLaunch:', err);
156 - }); 159 + // 降级处理:使用reLaunch
160 + Taro.reLaunch({
161 + url
162 + }).catch(err2 => {
163 + console.error('reLaunch跳转也失败:', err2);
164 + // 最终降级处理:跳转到首页
165 + this.navigateToHome();
166 + });
167 + });
168 + }, 300);
157 }, 169 },
158 170
159 /** 171 /**
160 * 跳转到首页 172 * 跳转到首页
161 */ 173 */
162 navigateToHome() { 174 navigateToHome() {
163 - Taro.reLaunch({ 175 + // 使用switchTab跳转到首页,避免重新触发app.js的onLaunch
176 + Taro.switchTab({
164 url: `/pages/index/index` 177 url: `/pages/index/index`
165 }).catch(err => { 178 }).catch(err => {
166 - console.error('跳转首页失败:', err); 179 + console.error('switchTab跳转首页失败,尝试reLaunch:', err);
167 - // 最后的降级处理 180 + // 降级处理:使用reLaunch
168 - Taro.showToast({ 181 + Taro.reLaunch({
169 - title: '页面跳转失败', 182 + url: `/pages/index/index`
170 - icon: 'error' 183 + }).catch(err2 => {
184 + console.error('reLaunch跳转首页也失败:', err2);
185 + // 最后的降级处理
186 + Taro.showToast({
187 + title: '页面跳转失败',
188 + icon: 'error'
189 + });
171 }); 190 });
172 }); 191 });
173 }, 192 },
......