若依 Vue3 前端分离 3.8.8 版实现去除首页,登录后跳转至动态路由的第一个路由的页面

server/2024/10/15 3:04:23/

一、前言

        某些项目可能并不需要首页,但在若依中想要实现不显示首页,并根据不同角色登录后跳转至该角色的第一个动态路由的页面需要自己实现,若依中没有实现该功能的特定代码。

二、代码

1. src\permission.js

在 src\permission.js 中添加下面的代码,可将原有代码注释。

javascript">router.beforeEach((to, from, next) => {NProgress.start()if (getToken()) {to.meta.title && useSettingsStore().setTitle(to.meta.title)/* has token*/if (to.path === '/login') {next({ path: '/' })NProgress.done()} else if (whiteList.indexOf(to.path) !== -1) {next()} else {if (useUserStore().roles.length === 0) {isRelogin.show = true// 判断当前用户是否已拉取完user_info信息useUserStore().getInfo().then(() => {isRelogin.show = falseusePermissionStore().generateRoutes().then(accessRoutes => {// 根据roles权限生成可访问的路由表accessRoutes.forEach(route => {if (!isHttp(route.path)) {router.addRoute(route) // 动态添加可访问路由表console.log(route,"route")}})console.log(to.fullPath,"to.fullPath")if (to.fullPath == '/index') {console.log(accessRoutes,"accessRoutes")// 当登录之后,直接通过ip地址和端口号访问时,跳转到第一个路由页面indexPagelet pathIndex = ''//通过权限返回菜单去避免 如有首页权限 出现//index 情况if (accessRoutes[0].path == '/') {// 一级路由就是可以打开的页面pathIndex = accessRoutes[0].path + accessRoutes[0].children[0].pathconsole.log(pathIndex,"pathIndex1")} else{// 一级路由下面的二级路由才是可以打开的页面pathIndex = accessRoutes[0].path + '/' + accessRoutes[0].children[0].pathconsole.log(pathIndex,"pathIndex2")}next({ path: pathIndex, replace: true }) // hack方法 确保addRoutes已完成} else {next({ ...to, replace: true }) // hack方法 确保addRoutes已完成}})}).catch(err => {useUserStore().logOut().then(() => {ElMessage.error(err)next({ path: '/' })})})} else {next()}}} else {// 没有tokenif (whiteList.indexOf(to.path) !== -1) {// 在免登录白名单,直接进入next()} else {next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页NProgress.done()}}
})

2. src\store\modules\permission.js

在 src\store\modules\permission.js 的原有代码中添加下面的代码。

javascript">const usePermissionStore = defineStore('permission',{state: () => ({routes: [],addRoutes: [],defaultRoutes: [],topbarRouters: [],sidebarRouters: [],indexPage: ''   //修改默认首页}),actions: {setRoutes(routes) {this.addRoutes = routesthis.routes = constantRoutes.concat(routes)},setDefaultRoutes(routes) {this.defaultRoutes = constantRoutes.concat(routes)},setTopbarRoutes(routes) {this.topbarRouters = routes},setSidebarRouters(routes) {this.sidebarRouters = routes},setIndexPages(routes) {this.indexPage = routes},generateRoutes(roles) {return new Promise(resolve => {// 向后端请求路由数据getRouters().then(res => {// 默认显示第一个路由,不可关闭,这三行代码一定不要忘记,否则把所有页面关闭后首页会突然跳出来而且无法关闭。if (res.data.length && res.data[0].children && res.data[0].children.length ) {res.data[0].children[0].meta.affix = true}const sdata = JSON.parse(JSON.stringify(res.data))const rdata = JSON.parse(JSON.stringify(res.data))const defaultData = JSON.parse(JSON.stringify(res.data))let firstPage = ''//通过权限返回菜单去避免 如有首页权限 出现//index 情况if (res.data[0].path == '/') {firstPage = res.data[0].path + res.data[0].children[0].path} else{firstPage = res.data[0].path + '/' + res.data[0].children[0].path}const sidebarRoutes = filterAsyncRouter(sdata)const rewriteRoutes = filterAsyncRouter(rdata, false, true)const defaultRoutes = filterAsyncRouter(defaultData)const asyncRoutes = filterDynamicRoutes(dynamicRoutes)asyncRoutes.forEach(route => { router.addRoute(route) })// this.setRoutes(rewriteRoutes) 注释后就不显示 Tags-Views 中无法关闭的首页this.setSidebarRouters(constantRoutes.concat(sidebarRoutes))this.setDefaultRoutes(sidebarRoutes)this.setTopbarRoutes(defaultRoutes)this.setIndexPages(firstPage)resolve(rewriteRoutes)})})}}})

3. src\layout\components\Sidebar\Logo.vue

在 src\layout\components\Sidebar\Logo.vue 的原有代码中添加下面的代码。

:to="permissionStore.indexPage"
javascript">import usePermissionStore from '@/store/modules/permission'const permissionStore = usePermissionStore()

4. src\components\Breadcrumb\index.vue

在 src\components\Breadcrumb\index.vue 中注释下面的代码,顶部的路径就不会显示首页字样。

5. src\router\index.js

在 src\router\index.js 中添加下面的代码,首页将不会在侧边栏中出现。

javascript">hidden: true,

三、效果

效果如图,首页相关的全都消失,登录后默认跳转到第一个路由,不同角色跳转到不同的页面,是动态路由。

四、参考

javascript">https://blog.csdn.net/YanBin_Best/article/details/140657213
https://ruoyi.csdn.net/66c84202a1ed2f4c853c6289.html

http://www.ppmy.cn/server/123210.html

相关文章

微信小程序加载H5页面及与H5页面通信的实战教程

在微信小程序的开发过程中,我们有时需要在小程序中嵌入H5页面。本文将详细介绍如何在微信小程序中通过webview加载H5页面,并实现小程序与H5页面的通信。 一、准备工作 搭建微信小程序开发环境,具体步骤请参考官方文档:https://d…

biopython解析mmcif文件得到组装体、链、序列、原子坐标、变换矩阵等信息

使用 Biopython 解析 .mmCIF 文件可以提取出蛋白质结构的相关信息,包括模型(model)、链(chain)、序列、原子坐标以及可能存在的变换矩阵。以下是一个完整的示例代码,展示如何使用 Biopython 的 MMCIFParser…

pysim-1

pySim 简介 pySim 是一个 Python 实现的软件套件,旨在帮助您管理蜂窝网络的用户身份卡,即 SIM 卡。许多 Osmocom(开源移动通信)项目都与运行私有/定制蜂窝网络有关,为这些网络提供 SIM 卡是运营这些网络的常见要求。要…

Shp2pb:Shapefile转Protocol Buffers的高效工具

Shp2pb是一个实用工具,专门用于将Shapefile(shp)格式转换为Protocol Buffers(protobuf)文件。这对于以更高效、更紧凑的方式处理地理数据特别有用。以下是关于如何安装和使用Shp2pb工具的详细说明,以及一个…

Hive优化高频面试题

文章目录 一、开启本地模式二、explain分析sql语句三、修改Fetch操作四、开启hive的严格模式五、JVM重用六、分区、分桶以及压缩七、合理设置map和ruduce的数量八、设置并行执行九、CBO优化-成本优化器十、谓词下推十一、小表join大表--使用MapJoin十二、大表join大表--使用SMB…

录屏小白福音!三款神器助你轻松上手

生活工作中,需要借助录屏功能越来越家常便饭了,选择录屏软件时,主要考虑的是软件的易用性、功能以及用户评价等因素。以下是如何进行录屏的步骤,以及推荐的四个录屏软件的使用说明:关于如何录屏的步骤操作,…

基于Springboot农耕知识查询平台JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

【计算机网络 - 基础问题】每日 3 题(二十八)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…