Files
zyt/uniapp/src/router/index.ts
T
2026-03-01 14:17:59 +08:00

92 lines
2.2 KiB
TypeScript

import routes from 'uni-router-routes'
import { createRouter } from 'uniapp-router-next'
import { ClientEnum } from '@/enums/appEnums'
import { useUserStore } from '@/stores/user'
import { client } from '@/utils/client'
// #ifdef H5
import wechatOa from '@/utils/wechat'
// #endif
import cache from '@/utils/cache'
import { BACK_URL } from '@/enums/constantEnums'
const router = createRouter({
routes: [
...routes,
{
path: '*',
redirect() {
return {
name: '404'
}
}
}
],
debug: import.meta.env.DEV,
//@ts-ignore
platform: process.env.UNI_PLATFORM,
h5: {}
})
//存储登陆前的页面
let isFirstEach = true
router.beforeEach(async (to, from) => {
//保存第一次进来时的页面路径(需要登陆才能访问的页面)
if (isFirstEach) {
const userStore = useUserStore()
if (!userStore.isLogin && !to.meta.white) {
cache.set(BACK_URL, to.fullPath)
}
isFirstEach = false
}
})
router.afterEach((to, from) => {
const userStore = useUserStore()
if (!userStore.isLogin && !to.meta.white) {
cache.set(BACK_URL, to.fullPath)
}
})
// 登录拦截
router.beforeEach(async (to, from) => {
const userStore = useUserStore();
if (!userStore.isLogin && to.meta.auth) {
return '/pages/login/login'
}
})
// #ifdef H5
//用于收集微信公众号的授权的code,并清除路径上微信带的参数
router.beforeEach(async (to, form) => {
const { code, state, scene } = to.query
if (code && state && scene) {
wechatOa.setAuthData({
code,
scene
})
//收集完删除路径上的参数
delete to.query.code
delete to.query.state
return {
path: to.path,
force: true,
navType: 'reLaunch',
query: to.query
}
}
})
// #endif
// #ifdef H5
router.afterEach((to, from) => {
setTimeout(async () => {
if (client == ClientEnum.OA_WEIXIN && !to.meta.webview) {
// jssdk配置
await wechatOa.config()
}
})
})
// #endif
export default router