位置: IT常识 - 正文

vue3+动态路由(vue3动态路由权限)

编辑:rootadmin
vue3+动态路由

推荐整理分享vue3+动态路由(vue3动态路由权限),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3动态路由权限控制,vue3动态路由不生效,vue3动态路由不生效,vue3动态路由标签页,vue3动态路由不生效,vue3动态路由导航菜单,vue3动态路由导航菜单,vue3动态路由导航菜单,内容如对您有帮助,希望把文章链接给更多的朋友!

         动态路由,也就是不是写死的路由,根据自己的需求加载不同的页面;现在很多的后台管理项目就是根据用户角色的不同分配不同的功能菜单(页面);

        根据用户登录的角色返回可以访问的页面路由,前端将路由存储到 pinia 实现持久话存储,然后在路由前置守卫用 addRoute 动态添加路由,对页面进行渲染。

        通常的实现步骤:

前端调用登录接口获取用户ID(uid)         前端用uid请求接口获取路由表(JSON)对路由表进行数据格式话形成树形结构树形结构 转 vue路由结构路由结构 转  静态路由树形结构 转  菜单组件

 下面是我练习一个demo,仅用于学习与记录;

服务端代码结构:

         服务端在本地localhost:3007,

 

vue3+动态路由(vue3动态路由权限)

 server.js

//导入express 模块const express = require("express")//创建 express 实例const app = express()//导入cors 中间件const cors = require("cors")app.use(cors())//配置表单解析中间件app.use(express.urlencoded({extended:false}))const useRouter = require("./router/index.js")app.use("/api",useRouter)app.listen(3007,function (){ console.log("api server running at http://127.0.0.1:3007")})

 router/index.js

const express = require("express")const router = express.Router()const users = require("../mockDB/user.js")const routers = require("../mockDB/router.js")router.post("/routers", (req, res) => { const {uid} = req.body if (uid) { let authRouterInfo; authRouterInfo = []; const userInfo = users.find(user => user.id === JSON.parse(uid)) console.log(users) userInfo.auth.map((rid) => { routers.map((router) => { if (router.id === rid) { authRouterInfo.push(router) } }) }) res.send({ status: 0, msg: "post 请求成功", data: authRouterInfo }) } else { res.send( { status: 0, msg: "查询不到此uid !", data: null } ) } }) module.exports = router

mockDB/user.js

module.exports = [ { id:1, name:"zhangsan", auth:[2,3,6,7] }, { id:2, name:"lisi", auth:[2,3,5,6,7,8] }, { id:3, name:"wangwu", auth:[2,3,4,5,6,7,8] }, { id:4, name:"mazi", auth:[6,7,8] }]

mockDB/router.js 

module.exports = [ { id:2, pid:0, path:"/course", name:"Course", title:"课程管理" }, { id:3, pid:2, path:"operate", name:"CourseOperate", title:"课程操作", link:"/course/operate" }, { id:4, pid:3, path:"info_data", name:"CourseInfoData", title:"课程数据", link:"/course/operate/info_data" }, { id:5, pid:2, path:"add", name:"CourseAdd", title:"课程添加", link:"/course/add" }, { id:6, pid:0, path:"/student", name:"Student", title:"学生管理" }, { id:7, pid:6, path:"operate", name:"StudentOperate", title:"学生操作", link:"/student/operate" }, { id:7, pid:6, path:"add", name:"StudentAdd", title:"学生增加", link:"/student/add" }]

 前端代码结构:

         前端调用 /api/routers 传入 uid 获取用户路由表

调用接口

import axios from "axios"import qs from "qs"export function getRouters(uid){ return axios({ url:"http://127.0.0.1:3007/api/routers", method:"post", header:{ "Content-type":"application/x-www-from-urlencoded" }, data:qs.stringify({uid}) })}

 将路由表格式成树结构, 路由表结构mockDB/router.js

export function formatRouterTree(datas) { let res = [] datas.map(data => { // data.children = [] //console.log(data.children) if (data.pid === 0) { res.push(data) } else { add2Tree(data, res) } }) return res}function add2Tree(data, res) { res.map(r => { if (data.pid === r.id) { if (!r.children) r.children = [] r.children.push(data) } else { if (r.children) add2Tree(data, r.children) } })}

树结构 转 vue路由结构

export function generateRouter(userRouters) { let newRouters; newRouters = userRouters.map(r => { let routes = { path: r.path, name: r.name, component: () => import(`../view/${r.name}.vue`) } if (r.children) { routes.children = generateRouter(r.children) } return routes }); return newRouters}

先配置静态的路由,接着添加动态路由  ==> router/route.js

const routes = [ { path:"/", name:"Home", component:() => import ("../view/Home.vue") }, // { // path:"/404", // name:"NotFound", // component:() => import ("../view/NotFound.vue") // }, // { // path:"/:pathMatch(.*)", // redirect:"/404" // }]export default routes;router.beforeEach(async (to, from, next) => { const store = useRouterStore() if (!store.hasAuth) { await store.getRoutersList() let newRoutes = generateRouter(store.userRouters) let a = [...newRoutes, { path: "/404", name: "NotFound", component: () => import ("../view/NotFound.vue") }, { path: "/:pathMatch(.*)", redirect: "/404" }] a.forEach((r) => { router.addRoute(r) }) next({...to, replace: true}) console.log(a) }else { if(to.name === null){ next("/404") } next() }})

递归组件模版渲染菜单组件

本文链接地址:https://www.jiuchutong.com/zhishi/297786.html 转载请保留说明!

上一篇:计算机领域各大顶会顶刊集合梳理(计算机领域划分)

下一篇:使用D435i相机跑ORB-SLAM2_RGBD_DENSE_MAP-master稠密建图编译(实时彩色点云地图加回环+保存点云地图)(相机4244)

  • 手机qq群聊怎么关麦(手机qq群聊怎么开启屏幕共享)

    手机qq群聊怎么关麦(手机qq群聊怎么开启屏幕共享)

  • 电脑管家跑分多少算好

    电脑管家跑分多少算好

  • 陌陌卸载后对方看到的是什么(陌陌卸载后对方发信息我能收到吗?)

    陌陌卸载后对方看到的是什么(陌陌卸载后对方发信息我能收到吗?)

  • 设置单元格样式在什么选项卡中完成(设置单元格样式为好)

    设置单元格样式在什么选项卡中完成(设置单元格样式为好)

  • 浏览不良网站对手机有什么影响呢(浏览不良网站对个人有什么影响)

    浏览不良网站对手机有什么影响呢(浏览不良网站对个人有什么影响)

  • ipad忘记密码打不开了怎么办(iPad忘记密码打不开昨办)

    ipad忘记密码打不开了怎么办(iPad忘记密码打不开昨办)

  • 骁龙710是几纳米工艺(骁龙710是几纳米处理器)

    骁龙710是几纳米工艺(骁龙710是几纳米处理器)

  • 亮度自动调节关闭了怎么还会自己打开(亮度自动调节关闭了怎么还会自动调节亮度oppo)

    亮度自动调节关闭了怎么还会自己打开(亮度自动调节关闭了怎么还会自动调节亮度oppo)

  • 为什么没有访问记录(为什么没有访问别人空间却有记录)

    为什么没有访问记录(为什么没有访问别人空间却有记录)

  • a卡和n卡是什么意思(a卡n卡什么区别)

    a卡和n卡是什么意思(a卡n卡什么区别)

  • powerpoint怎么设置背景颜色(powerpoint怎么设置幻灯片切换效果)

    powerpoint怎么设置背景颜色(powerpoint怎么设置幻灯片切换效果)

  • 华为nova6智能辅助在哪(华为nova智能辅助在哪里)

    华为nova6智能辅助在哪(华为nova智能辅助在哪里)

  • app付款方式无效怎么回事(app付款无效是什么意思啊)

    app付款方式无效怎么回事(app付款无效是什么意思啊)

  • 手机怎么设置后台运行(手机怎么设置后天的闹钟)

    手机怎么设置后台运行(手机怎么设置后天的闹钟)

  • 小米9pro怎么一键剪辑短视频(小米9pro操作技巧)

    小米9pro怎么一键剪辑短视频(小米9pro操作技巧)

  • 趣键盘打字不出表情包(键盘输入法不出来字怎么调出来)

    趣键盘打字不出表情包(键盘输入法不出来字怎么调出来)

  • 华为mate30和p30pro的区别(华为mate30和p30pro哪个贵)

    华为mate30和p30pro的区别(华为mate30和p30pro哪个贵)

  • 抖音怎么添加两个视频(抖音怎么添加两个账号)

    抖音怎么添加两个视频(抖音怎么添加两个账号)

  • 淘宝允许异地发货吗(淘宝店铺异地发货有没有影响)

    淘宝允许异地发货吗(淘宝店铺异地发货有没有影响)

  • 港版苹果11可以用电信卡吗(港版苹果11可以把数据倒到国行手机上吗)

    港版苹果11可以用电信卡吗(港版苹果11可以把数据倒到国行手机上吗)

  • vivonex3上市时间(vivonex3s上市价格)

    vivonex3上市时间(vivonex3s上市价格)

  • win7系统提示非正版该如何激活(win7提示非正版黑屏)

    win7系统提示非正版该如何激活(win7提示非正版黑屏)

  • 华为手机怎么跳过激活(华为手机怎么跳过激活锁)

    华为手机怎么跳过激活(华为手机怎么跳过激活锁)

  • mate20支持北斗导航吗(华为mate20支持北斗导航系统吗)

    mate20支持北斗导航吗(华为mate20支持北斗导航系统吗)

  • 电脑蓝屏代码0X00000F7是什么意思(电脑蓝屏代码0x0000003B)

    电脑蓝屏代码0X00000F7是什么意思(电脑蓝屏代码0x0000003B)

  • 外商投资合伙企业法
  • 一般纳税人开劳务专票多少个点
  • 新办企业发票核定及申领,选否行吗
  • 一般纳税人留底税额抵减欠缴税额
  • 应收账款和应付账款的区别
  • 机动船舶缴纳车船税吗
  • 水泥企业销售收入比例
  • 企业资产减值准备
  • 会计凭证的内容中应包括会计分录
  • 债券投资的风险主要有
  • 供应销用商品给的返利怎么做?
  • 实收资本未到位可以注销吗?
  • 软件开发公司怎么找客户
  • 差额纳税的会计处理
  • 销售的增长率公式是什么
  • 增值税普通发票需要交税吗
  • 增值税普通发票几个点
  • 办公室装修合同印花税怎么缴纳?
  • 高新创投企业所得税税率
  • 科技型企业科研项目申报
  • 新企业购买金税盘
  • 客户回款扣除的费用
  • 生育津贴的相关法律规定
  • 什么是保守型证券
  • 企业收到的政府补贴,怎么入账
  • 什么是CMOS什么是BIOS
  • 二手固定资产使用年限
  • php判断https
  • 付给他人押金的会计分录
  • 工业会计做账的基本流程
  • 存货的核算方法
  • PHP:imagetypes()的用法_GD库图像处理函数
  • 增值税专用发票上注明的价款含税吗
  • PHP:imagecolorat()的用法_GD库图像处理函数
  • 赤狐 (© Yossi Eshbol/Minden Pictures)
  • golang、python、php、c++、c、java、Nodejs性能对比
  • php备份mysql数据库
  • 外汇是先申报后收钱么
  • 云原生是什么
  • springboot ci
  • 控制器eabs
  • handsome主题破解
  • 帝国cms做商城
  • 织梦发布文章栏目怎么不显示
  • 从农业生产者购进农产品
  • 员工意外伤害保险可以抵扣进项税吗
  • 坏账核销会计处理
  • 支付给非金融机构的费用
  • 企业设立账簿
  • 买车哪些费用可以计入固定资产
  • 应付账款账务处理中的错弊
  • mysql主从复制实现原理
  • 税控盘退费怎么做会计分录
  • 先前收取的包装费用
  • 工程预付款如何缴税
  • 在建工程前期投标流程
  • 成本法长期股权投资初始成本确认
  • 货物丢失怎么做分录
  • 公司注销资本公积
  • 应收款钱已收回会计分录
  • 产品质量问题有赔偿吗
  • 农产品收购发票如何抵扣进项税
  • 开票需要缴纳印花税吗
  • 公司股东的主要几种分类
  • 多余备用金记账会计分录
  • 小规模商贸公司没有进项票怎么办
  • 存出保证金的账务处理
  • 企业盘盈盘亏的固定资产先要计入待处理财产损益
  • 科目余额表上的销项税额贷方余额表示
  • 电脑连不上网怎么回事 笔记本
  • centos7安全
  • win8右边栏设置
  • Linux系统配置IP地址
  • linux用户登录
  • bash scp command not found的解决方法
  • Python常见格式化字符串方法小结【百分号与format方法】
  • 2021年河南省企业退休职工丧葬抚恤金标准
  • 如何在国税网查企业年金
  • 大走访 方案
  • 专家费缴税标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设