fix(路由): 修复授权跳转逻辑并优化页面导航处理
改进授权检查逻辑,避免重复跳转到授权页面 使用setTimeout延迟导航操作防止冲突 将reLaunch改为navigateTo/switchTab避免重复触发onLaunch 添加多级降级处理增强导航健壮性
Showing
2 changed files
with
54 additions
and
28 deletions
| 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 | }, | ... | ... |
-
Please register or login to post a comment