|
|
- import { createRouter } from '@/plugin/uni-mini-router'
- // 导入pages.json
- import pagesJson from '../pages.json'
- console.log("pagesJson::",pagesJson);
- // 引入uni-parse-pages
- import pagesJsonToRoutes from 'uni-parse-pages'
- import { useUserStore } from '@/store/user'
- import {
- HOME_PAGE,
- ROUTE_PARAMS
- } from '@/common/constants'
- import { cache,isOAuth2AppEnv } from '@/common/uitls'
- import {isEmpty} from "@/utils/is";
- // 生成路由表
- const routes = pagesJsonToRoutes(pagesJson)
- setRouteName(routes)
- const router = createRouter({
- routes: [...routes], // 路由表信息
- })
- export const whiteList = ['/pages/login/login','/pages/login/loginOauth2']
- export const loginPage = '/pages/login/login'
- interface CacheRoute {
- path: string;
- query: Record<string, string | number | boolean>;
- }
- export const beforEach = (to, from, next) => {
- const userStore = useUserStore()
- //update-begin-author:liusq---date:2025-03-20--for: 防止移动端oauth地址和PC不一致的问题
- if(to.path == '/oauth2-app/login'){
- let temp = location.href;
- location.href = temp.replace('/oauth2-app/login','/pages/login/loginOauth2')
- return;
- }
- //update-end-author:liusq---date:2025-03-20--for:防止移动端oauth地址和PC不一致的问题
- if (userStore.isLogined) {
- // 有登录态
- if(to.path === '/pages/login/loginOauth2'){
- //有跳转地址
- if(to.query && to.query.redirect){
- next()
- }else{
- //跳转到首页
- next({path: HOME_PAGE})
- }
- }
- //update-begin-author:liusq---date:2025-03-20--for: 流程路由逻辑
- let flowRoute = getPathAndQuery(to);
- if(flowRoute===false){
- let cacheRoute = cache(ROUTE_PARAMS);
- if(cacheRoute && !isEmpty(cacheRoute) && (cacheRoute as any)?.path == to.path
- && isEmpty(to.query)
- && !isEmpty((cacheRoute as any)?.query)){
-
- to.query = (cacheRoute as any)?.query;
- next({ path: to.path, query: (cacheRoute as any)?.query })
- }else{
- cache(ROUTE_PARAMS,to,1*60*10);
- next()
- }
- }else{
- next({ path: flowRoute.path, query: flowRoute.query })
- }
- //update-end-author:liusq---date:2025-03-20--for: 流程路由逻辑
- } else {
- // 无登录态
- if (whiteList.includes(to.path)) {
- // 在免登录白名单,如果进入的页面是login页面并且当前是OAuth2app环境,就进入OAuth2登录页面
- if (to.path === '/pages/login/login' && isOAuth2AppEnv()) {
- next({path: '/pages/login/loginOauth2'})
- } else {
- // 在免登录白名单,直接进入
- next()
- }
- } else {
- // 如果当前是在OAuth2APP环境,就跳转到OAuth2登录页面
- let path = isOAuth2AppEnv() ? '/pages/login/loginOauth2' : '/pages/login/login';
- let temp = to.path;
- if(isOAuth2AppEnv() && temp=='/pages/flow/myTaskDetail'){
- if(to.query && to.query.info){
- temp+='?info='+to.query.info
- }
- next({ path: path, query: { redirect: encodeURIComponent(temp) } })
- }else{
- next({ path: path })
- }
- }
- }
- }
- // 全局前置守卫
- router.beforeEach(beforEach)
-
- // 路由的最后一级为路由名字不可重复
- function setRouteName(routes) {
- routes.forEach((item) => {
- if (item.path) {
- const name = item.path.split('/').pop()
- item.name = name
- }
- })
- }
-
- /**
- * 路由跳转-已经登录过了 直接next会导致参数丢失,所以需要再走一遍loginOauth2页面的逻辑
- * @param to
- * @returns {{path: string, query: {redirect: string}}|boolean}
- */
- function getPathAndQuery(to){
- if(to.path === '/pages/flow/myTaskDetail'){
- if(to.query && to.query.info){
- let info = JSON.parse(to.query.info)
- info['hasToken'] = 1;
- let temp = '/pages/flow/myTaskDetail?info='+ JSON.stringify(info)
- return {
- path: '/pages/login/loginOauth2',
- query: { redirect: encodeURI(temp) }
- }
- }
- }
- return false
- }
- export default router
|