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; } 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