You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在unplugin-vue-router的extendsRoutes中实现角色判断重定向?

从vite-plugin-pages迁移到unplugin-vue-router,保留根路径重定向逻辑

1. 替换依赖

先卸载原来的vite-plugin-pages和vite-plugin-vue-layouts(如果之前用了布局插件),再安装unplugin-vue-router和配套的布局插件:

npm uninstall vite-plugin-pages vite-plugin-vue-layouts
npm install unplugin-vue-router unplugin-vue-layouts

2. 配置Vite插件

修改vite.config.js(或.ts),把原来的pages插件替换成unplugin-vue-router和layouts插件,注意插件顺序:

import { defineConfig } from 'vite'
import Vue from '@vitejs/plugin-vue'
import VueRouter from 'unplugin-vue-router/vite'
import VueLayouts from 'unplugin-vue-layouts/vite'

export default defineConfig({
  plugins: [
    // VueRouter必须放在Vue插件前面
    VueRouter({
      routesDir: 'src/pages', // 路由文件目录,默认就是这个,可根据你的项目调整
      dts: 'src/typed-router.d.ts', // 可选,生成路由类型文件,方便TS提示
    }),
    VueLayouts({
      layoutsDir: 'src/layouts', // 布局文件目录,默认值,按需调整
    }),
    Vue(),
  ],
})

3. 重构路由初始化代码

unplugin-vue-router会自动生成路由数组,你只需要导入并结合布局插件,同时保留原来的重定向逻辑:

import { createRouter, createWebHistory } from 'vue-router'
// 导入自动生成的路由和布局处理方法
import { routes } from 'vue-router/auto'
import { setupLayouts } from 'virtual:generated-layouts'

// 保留你原来的登录状态判断函数
function isUserLoggedIn() {
  // 这里写你的实际判断逻辑,比如读取localStorage或pinia状态
  return !!localStorage.getItem('userToken')
}

const router = createRouter({
  history: createWebHistory(),
  routes: [
    // 根路径重定向逻辑完全照搬原来的写法
    {
      path: '/',
      redirect: (to) => {
        const loggedIn = isUserLoggedIn()
        return loggedIn ? { name: 'dashboards-analytics' } : { name: 'home' }
      },
    },
    // 把自动生成的路由应用布局后加入路由数组
    ...setupLayouts(routes),
  ],
  // 保留原来的滚动行为配置
  scrollBehavior() {
    return { top: 0 }
  },
})

export default router

4. 路由名称兼容说明

unplugin-vue-router的自动命名规则和vite-plugin-pages一致,比如src/pages/dashboards/analytics.vue会生成dashboards-analytics这个路由名称,所以你原来的{ name: "dashboards-analytics" }和{ name: "home" }可以直接用,不需要改。

5. 可选:开启TypeScript类型支持

如果配置了dts生成路由类型文件,记得在tsconfig.json里把它加入include列表:

{
  "include": [
    "src/**/*",
    "src/typed-router.d.ts"
  ]
}

这样就完成了迁移,原来的重定向逻辑完全保留,unplugin-vue-router的自动路由和布局功能也能正常运行。

内容的提问来源于stack exchange,提问作者amir tbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:35:02