Bang Hu
1 天以前 8a709ba6db50831048f9c3e2452ea6dc6c3de36f
src/router/index.ts
@@ -12,15 +12,16 @@
import { useUserInfo } from '@/stores/modules/userInfo'
import { useCommonInfo } from '@/stores/modules/common' // 状态管理器
import { useNavTabs } from '@/stores/modules/navTabs' // 标签导航
import { queryUserDetail } from '@/api/userInfo'
const router = createRouter({
  history: createWebHistory('/manage/'),
  history: createWebHistory('/trade/'),
  routes: staticRoutes,
  scrollBehavior(to, from, savedPosition) {
    return { top: 0 }
  },
})
router.beforeEach((to, from, next) => {
router.beforeEach(async (to, from, next) => {
  console.log("to",to)
  const userStore = useUserInfo()
  // * 在跳转路由之前,清除所有的请求
@@ -31,7 +32,7 @@
  const commonStore = useCommonInfo()
  commonStore.updateActiveMenu(to.path)
  const navStore = useNavTabs()
  // 开发模式下跳过登录验证
  if (import.meta.env.DEV) {
    // 如果访问登录页面,直接跳转到首页
@@ -41,16 +42,32 @@
    }
    // 如果没有token,设置一个默认token并继续
    if (!userStore.getAdminToken) {
      const obj: any = {
        adminToken: 'dev-token',
        screenToken: '',
      const localUserInfo = localStorage.getItem('userInfo')
      if (localUserInfo) {
          const userInfo = JSON.parse(localUserInfo)
          if (userInfo.adminToken && userInfo.adminToken !== '') {
          const obj: any = {
            adminToken: userInfo.adminToken,
            screenToken: '',
          }
          userStore.updateUserInfo(obj)
        }else {
            if (to.query.token) {
              const token = to.query.token as string
              localStorage.setItem('lastRecordTime', new Date().getTime().toString())
              const obj: any = {
                adminToken: token,
                screenToken: '',
              }
              userStore.updateUserInfo(obj)
            }
          }
      }
      userStore.updateUserInfo(obj)
    }
    next()
    return
  }
  // 生产环境保持原有逻辑
  if (to.path == '/login' || to.path == '/loginT') {
    // 如果路径是 /login 则正常执行
@@ -58,12 +75,17 @@
  } else {
    if (to.query.token) {
      const token = to.query.token as string
      localStorage.setItem('lastRecordTime', new Date().getTime())
      localStorage.setItem('lastRecordTime', new Date().getTime().toString())
      const obj: any = {
        adminToken: token,
        screenToken: '',
      }
      userStore.updateUserInfo(obj)
      const localUserInfo = localStorage.getItem('userInfo')
      if (localUserInfo) {
        const userInfo = JSON.parse(localUserInfo)
        userStore.updateUserDetail(userInfo)
      }
      // chrome
      document.body.scrollTop = 0
      // firefox
@@ -72,9 +94,43 @@
      window.pageYOffset = 0
      next()
    } else if (!userStore.getAdminToken) {
      // 如果没有,则跳至登录页面
      next({ path: '/loginT' })
      // 从 localStorage 中获取 userInfo 的 adminToken
      const localUserInfo = localStorage.getItem('userInfo')
      if (localUserInfo) {
        try {
          const userInfo = JSON.parse(localUserInfo)
          if (userInfo.adminToken) {
            // 如果获取到 adminToken,则更新 userStore
            userStore.updateUserInfo({
              adminToken: userInfo.adminToken,
              screenToken: userInfo.screenToken || '',
              fullUnitName: userInfo.fullUnitName || '',
              empCode: userInfo.empCode || '',
              menuList: userInfo.menuList || []
            })
            // 同时更新用户详细信息
            userStore.updateUserDetail(userInfo)
            next()
          } else {
            // 如果没有 adminToken,则用户未登录
            next({ path: '/loginT' })
          }
        } catch (error) {
          console.error('解析 localStorage 中的 userInfo 失败:', error)
          // 解析失败,认为用户未登录
          next({ path: '/loginT' })
        }
      } else {
        // 如果没有 userInfo,则用户未登录
        next({ path: '/loginT' })
      }
    } else {
      // 获取用户信息
      const localUserInfo = localStorage.getItem('userInfo')
      if (localUserInfo) {
        const userInfo = JSON.parse(localUserInfo)
        userStore.updateUserDetail(userInfo)
      }
      next()
    }
  }