vue-element-template管理模板(二)

news2024/11/29 4:03:51

vue-element-admin框架 动态路由(二)

修改代码:

import { asyncRoutes, constantRoutes } from "@/router";
import { getMenu } from "@/api/user";
import Layout from "@/layout";

/**
 * Use meta.role to determine if the current user has permission
 * @param roles
 * @param route
 */
function hasPermission(roles, route) {
    if (route.meta && route.meta.roles) {
        return roles.some((role) => route.meta.roles.includes(role));
    } else {
        return true;
    }
}

/**
 * Filter asynchronous routing tables by recursion
 * @param routes asyncRoutes
 * @param roles
 */
export function filterAsyncRoutes(routes, roles) {
    const res = [];
    routes.forEach((route) => {
        const tmp = {...route };
        if (hasPermission(roles, tmp)) {
            const component = tmp.component;
            if (route.component) {
                if (component == "Layout") {
                    tmp.component = Layout;
                } else {
                    // 接口组件字符串转换成组件对象
                    tmp.component = (resolve) =>
                        require([`@/views${component}`], resolve);
                }
                if (tmp.children) {
                    tmp.children = filterAsyncRoutes(tmp.children, roles);
                }
            }
            res.push(tmp);
        }
    });
    return res;
}

const state = {
    routes: [],
    addRoutes: [],
};

const mutations = {
    SET_ROUTES: (state, routes) => {
        state.addRoutes = routes;
        state.routes = constantRoutes.concat(routes);
    },
};

const actions = {
    generateRoutes({ commit }, roles) {
        return new Promise((resolve, reject) => {
            getMenu()
                .then((response) => {
                    let accessedRoutes; //获取菜单数据
                    accessedRoutes = filterAsyncRoutes(
                        response.data.permissionList,
                        roles
                    ); //存储菜单数据到store
                    console.log(accessedRoutes);
                    commit("SET_ROUTES", accessedRoutes);
                    resolve(accessedRoutes);
                })
                .catch((error) => {
                    reject(error);
                });
        });
    },
};

export default {
    namespaced: true,
    state,
    mutations,
    actions,
};

接口:

在这里插入图片描述

后端接口:

参考“谷粒学院”项目后端修改
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCB 封装焊盘盖油了,什么原因?

PCB 封装焊盘盖油了,什么原因? 背景:当PCB切换到3D视图检查错误时,突然发现某个别芯片的封装管脚竟然是处于盖油状态,这肯定是个bug。制板厂家EQ,在审核生成稿时,也回打来电话确认“焊盘是否需…

python数据分析05—Pandas数据处理

目录 1.缺失数据处理 1.1 DataFrame自身产生的缺失数据 1.2 缺失数据判断和统计 ​1.3 缺失数据清理 2. 多源数据操作 2.1 合并函数:merge() 2.2 连接函数:join() 2.3 指定方向合并:concat() 3. 数据分组和聚合运算 3.1 groupby()方…

使用Nacos将单体服务注册成微服务的步骤以及相关问题解决

目录 1.改造单体服务的配置文件。 2.添加Nacosw相关的pom依赖 3.在nacos的配置列表中创建配置列表 4.相关问题的解决 1.改造单体服务的配置文件。 🔖创建一个bootstrap.yml的配置文件该文件通常放置在src/main/resources目录中,并且优先于applicati…

C语言学习笔记 码云及git使用教程-05

目录 一、码云简介 二、码云注册 1.点击右上角的注册按钮 2.填写相应的注册信息 3.使用账号密码进行登陆 三、创建仓库 1.如图新建 2.定义仓库相应参数 3.初始化readme文件 4.效果 5.开源设置 四、git管理 1.安装git 2.打开桌面上的Git bash 3.进行仓库克隆 4. 在其他盘…

信息与通信工程面试准备——专业知识提问

1.无线通信:依靠电磁波在空间传播以传输信息。 2.通信的目的:传输信息。 3.通信系统:将信息从信源发送到一个或多个目的地。 4.本书中通信一般指电信:利用电信号传输信息(光通信属于电信,因为光也是一种…

Java中的队列

队列的理解 队列(Queue)是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。 LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。 常用方法 实例 import java.util…

zabbix监控-钉钉webhook告警并使用markdown格式

zabbix监控-企业微信webhook告警并使用markdown格式 最终告警样式: markdown格式与text格式的优点:文字排版清晰,可对不同文字标识颜色,大小等。 此方法使用zabbix提供的webhook方式,不需要建立脚本文件。 zabbix版…

【人工智能】监督学习、分类问题、决策树、信息增益

文章目录 Decision Trees 决策树建立决策树分类模型的流程如何建立决策树?决策树学习表达能力决策树学习信息论在决策树学习中的应用特征选择准则一:信息增益举例结论不足回到餐厅的例子从12个例子中学到的决策树:Decision Trees 决策树 什么是决策树 —— 基本概念 非叶节…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 20 日论文合集)

文章目录 一、检测相关(7篇)1.1 Drone navigation and license place detection for vehicle location in indoor spaces1.2 BSDM: Background Suppression Diffusion Model for Hyperspectral Anomaly Detection1.3 Domain Adaptation for Enhanced Object Detection in Foggy…

STM32C0开发(2)----开发板介绍

基于RASC的keil电子时钟制作_配置keil以及使用串口进行打印 套件概述样品申请特征系统控制和生态系统访问功能示意图系统框图跳线设置开发板原理图 套件概述 STM32C011F4P6-TSSOP20评估套件可以使用户能够无缝评估TSSOP20封装中STM32C0S系列微控制器的功能,具备高效…

Java面试题总结记录(2)—— 多线程并发篇

1、Java实现多线程的方法 创建线程的常用方式 继承Thread类实现Runnable接口实现Callable接口线程池方式创建 说明: 通过继承 Thread 或 实现 Runnable接口,Callable接口都可以实现多线程,不过实现Runnable接口与实现Callable接口的方式基本…

gin 中间件流程控制:Next()、 Abort()

gin 中间件流程控制 Next() 源码注释:Next应该只在中间件内部使用。它执行调用处理程序内部链中的挂起处理程序。 通俗的说,就是中间件放行,当一个中间件代码执行到Next(),会先执行它之后的函数,最后再来执行完本函…

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…

Dockerfile文件+docker build命令方式创建Docker自定义镜像

自定义镜像 mycentosjava8 自定义一个centos镜像,具备vimifconfigjdk8的配置 拉取centos镜像 docker pull centos 该默认镜像此时还没有vim、ifconfig和jdk的配置或功能 jdk8的下载 地址:https://www.oracle.com/java/technologies/downloads/#java8 …

关于Nginx的 location 配置各种情况转换后的样子记录

Nginx location 配置要代理的地址测试URL代理后的URL举例编号/test01http://127.0.0.1:8080/test01/abc/test/test01/abc/test01/test02http://127.0.0.1:8080//test02/abc/test//abc/test02/test03/http://127.0.0.1:8080/test03/abc/test/test03/abc/test03/test04/http://12…

MYSQL练习一

练习一 创建stroe数据库,在数据库中根据开发喵store业务 创建表,表结构如下,并插入以下数据,完成下面的 sql 表数据: - 查询商品库存等于50的所有商品,显示商品编号,商 品名称,商品…

Vue第四篇:html和js基础知识查漏补缺

1、a标签 定义超链接,用于从一个页面链接到另一个页面 target属性:打开目标URL的方式,_top为再当前窗口打开,_blank为新窗口打开 2、span标签 对文档中的行内元素进行组合,它提供了一种将文本的一部分或者文档的一部分…

GB2312编码

说明 GB2312代码表用两个字节表示一个图形字符,两个字节中前面的字节为第一字节,后面的字节为第二字节。 区位码: GB2312代码表分成94个区,范围为1-94,区的编号由第一字节表示;每个区有94位,范…

@PostConstruct和@PreDestroy与servlet生命周期的关系

执行顺序结果 /*** 服务器加载Servlet* ---> 创建servlet实例,实现servlet构造函数* ---> 执行注解PostConstruct* ---> servlet.Init()* ---> servlet/service() 方法* ---> 执行注解PreDestroy* ---> servlet.destroy()* ---> 服务器卸载Se…

React Dva项目中路由跳转的方法

接下来 我们来看看路由跳转 先打开 我们Dva项目 然后我们需要在routes 下创建一个自己的路由,如果您尚未掌握在Dva项目中创建路由,可以参考我的文章 React 在Dva项目中修改路由配置,并创建一个自己的路由 然后 我的项目有两个路由 router.js…