从一个页面跳转到目标页面之后,对应的顶部路由高亮

需求:页面跳转到目标页面之后,对应的顶部路由高亮 

上面的更多 跳转到 学情分析下面的学生分析

<template><div class="topBar" ref="topBar" v-loading.fullscreen.lock="fullscreenLoading"><div class="topBar-navi"><div class="top-menu container"><div class="myMenu"><img :src="logo" alt="" /><!-- S2路由改造 --><div class="parentRoute"><span:class="{ activeParent: currentIndex == index }"v-for="(item, index) in routeMenus":key="index"@click="selectParentRoute(item, index)">{{ filterTitle(item.meta.title) }}<!-- <i v-if="item.children" class="el-icon-arrow-down" /> --></span></div></div><!-- ***************** --><div class="right-menu"><span class="right-menu-currentRole">{{ currentRoleObj.roleName }}</span><el-buttonclass="Topbar-identity"type="text"@click="handelShowDialog":disabled="disabledRole">切换角色</el-button><el-dropdown class="Topbar-dropdown"><span class="Topbar-el-dropdown-link">{{ name }}<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown" class="Topbar-el-dropdown-menu"><div>姓名 <span>{{ name }}</span></div><div class="Topbar-Group">身份<span>{{ currentRoleObj.roleName }}</span></div><div>学校 <span>{{ school }}</span></div><div class="user-center"><!-- <span @click.stop="toUserCenter">个人中心</span> --><a class="Topbar-logout" @click="logout">退出登录</a></div></el-dropdown-menu></el-dropdown></div></div></div><!-- S2二级菜单改造 --><!-- ************ --><div class="childRoute" v-if="subMenus"><div class="childRoute-menus container"><div:class="{ activeChild: currentChildIndex == index }"v-for="(item, index) in subMenus":key="index"@click="selectChildRoute(item, index)">{{ filterTitle(item.meta.title) }}</div></div></div><!-- ************ --><el-dialogtitle="是否退出登录":visible.sync="DialogLogout"width="325px"height="134px"append-to-bodycenterclass="Topbar-el-dialog"><span slot="footer" class="dialog-footer"><el-button @click="DialogLogout = false">取 消</el-button><el-button type="primary" @click="LogoutConfirm">确 定</el-button></span></el-dialog><el-dialogtitle="请选择你要切换的身份":visible.sync="DialogVisible"width="474px"height="218px"append-to-bodycenterclass="Topbar-el-dialog"><divv-for="(item, index) in teacherInfo.roleMap":key="index"class="Topbar-role":class="{ roleActive: currentRoleObj.roleType == item.roleType }"@click="selectRole(item)">{{ item.roleName }}</div><span slot="footer" class="dialog-footer"><el-button type="primary" @click="DialogVisible = false">关闭</el-button></span></el-dialog><!-- 筛选项组件 --><filterItems /></div>
</template><script>
import variables from "@/assets/styles/variables.scss";
import { mapState, mapActions, mapGetters, mapMutations } from "vuex";
import $C from "@/assets/js/config.js";
import filterItems from "./Sidebar/filterItems.vue";export default {components: { filterItems },name: "Topbar",data() {return {delaySearch: false, //搜索延迟DialogLogout: false,DialogVisible: false, //弹框默认影藏// 当前激活一级菜单的 indexcurrentIndex: localStorage.getItem("parentPathIndex") || 0,// 二级菜单indexcurrentChildIndex: localStorage.getItem("childPathIndex") || 0,// 角色currentRole: "", //当前角色名classesByRole: [], //角色下班级subjectByClass: [], //班级下学科currentGrade: "",currentGradeName: "",fullscreenLoading: false,disabledRole: false,// 当前班级current_class: "",currentSubject: "", //默认显示学科activeSubject: ""};},mounted() {this.GetUserStoreClasses();},watch: {currentRoleObj: {handler(val, old) {// 切换角色高亮默认第一个路由this.currentIndex = 0;this.currentChildIndex = 0;},deep: true}},computed: {...mapGetters(["avatar", "storeClasses", "name", "school", "gradeList", "routeMenus"]),variables() {return variables;},// 二级菜单subMenus() {let menu = this.routeMenus[this.currentIndex]?.children || "";return menu;},// 一级路由parentMenu() {let parent = this.routeMenus[this.currentIndex].path;return parent;},// 页面logo图片logo() {return this.$store.state.user.teacherInfo.schoolVo.logo;},// 教师信息teacherInfo() {return this.$store.state.user.teacherInfo;},//角色信息currentRoleObj() {return this.$store.state.user.current_role;}},methods: {...mapActions({ GetUserStoreClasses: "GetUserStoreClasses" }),...mapMutations(["SET_CURRENT_CLASS","SET_CURRENT_ROLE","SET_CURRENT_SUBJECT","SET_GRADE","SET_CURRENT_GRADE","SET_SUBJECT_LIST"]),toUserCenter() {this.$router.push({ name: "UserCenterHome" });},// 点击一级路由菜单selectParentRoute(item, index) {this.currentIndex = index;localStorage.setItem("parentPathIndex", index);localStorage.setItem("childPathIndex", 0);let parentRoute = item.path;if (item.children) {// 有二级路由let defaultChild = item.children[0]?.path; //点击跳转默认第一个二级路由this.$router.push(`${parentRoute}/${defaultChild}`);} else {// 没有二级路由this.$router.push(parentRoute);}},// 子菜单选择事件selectChildRoute(item, index) {localStorage.setItem("childPathIndex", index);this.$router.push(`${this.parentMenu}/${item.path}`);},// 点击确认退出登录async LogoutConfirm() {this.$store.dispatch("LogOut").then(() => {location.href = "/";});this.DialogLogout = false;},// 点击退出登录logout() {this.DialogLogout = true;},handelShowDialog() {this.DialogVisible = true;this.disabledRole = true;let timer = setTimeout(() => {clearTimeout(timer);this.disabledRole = false;}, 6000);},// 切换角色selectRole(item) {this.fullscreenLoading = true;this.DialogVisible = false;localStorage.setItem("childPathIndex", 0);localStorage.setItem("parentPathIndex", 0);this.SET_CURRENT_ROLE(item);//当前角色下年级列表和默认年级if (item.grades[0]) {this.SET_GRADE(item.grades);this.SET_CURRENT_GRADE(item.grades[0]);this.currentGrade = item.grades[0].grade;}//角色下是否存在班级if (item.classes[0]) {//角色下班级this.classesByRole = item.classes;this.SET_CURRENT_CLASS(item.classes[0]);//改变默认班级this.current_class = item.classes[0].classNo;}//任课教师、考察科目教师角色下班级if (item.roleType == 106 || item.roleType == 113) {let currentRoleSub = this.teacherInfo.roleMap[item.roleType].classes.find(v => v.classNo == this.current_class);this.subjectByClass = currentRoleSub.subjects;this.currentSubject = currentRoleSub.subjects[0].subject;this.SET_CURRENT_SUBJECT(currentRoleSub.subjects[0]);this.SET_SUBJECT_LIST(currentRoleSub.subjects);}this.$store.dispatch("GetRoutes").then(v => {let parentRoute = v[0].path;if (v[0].children) {let toIndex = v[0].children[0].path;this.$router.push({path: `${parentRoute}/${toIndex}`,replace: true});} else {this.$router.push(parentRoute);}});//计算top高度并传参this.$nextTick(() => {const childHeight = this.$refs.topBar.offsetHeight;this.$emit("getHeight", childHeight);});let timer = setTimeout(() => {clearTimeout(timer);this.fullscreenLoading = false;}, 800);// });},//去掉子菜单角色名字段filterTitle(title) {let roleName = this.currentRole;if (title.includes("-")) {return title.substr(title.lastIndexOf("-") + 1);} else {return title.replace(roleName, "");}}}
};
</script><style lang="scss" scoped>
.topBar {&-navi {width: 100%;background: #fff;box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.04) inset;height: 55px;display: flex;.top-menu {// width: 100%;display: flex;justify-content: space-between;align-items: center;.myMenu {display: flex;align-items: center;width: 100%;img {width: 135px;}.parentRoute {width: 100%;> span {cursor: pointer;margin-left: 30px;}.activeParent {color: #34beea;}}.menuList {display: flex;}}.right-menu {text-align: right;width: 240px;display: flex;align-items: center;height: 100%;&-currentRole {margin-right: 10px;// width: 80px;height: 22px;line-height: 22px;border-radius: 4px;text-align: center;color: #34beea;background: rgba(52, 190, 234, 0.16);}&:focus {outline: none;}.Topbar-dropdown {.Topbar-el-dropdown-link {cursor: pointer;}}.Topbar-identity {display: inline-block;color: #777777;line-height: 21px;margin-right: 10px;&:hover {// background-color: red;color: #34beea;}}}}}.childRoute {height: 54px;background-color: #fff;box-shadow: 0px 4px 4px 0px rgba(209, 209, 209, 0.25);margin-bottom: 20px;cursor: pointer;&-menus {display: flex;align-items: center;> div {// line-height: 54px;height: 54px;padding: 16px 36px;}.activeChild {background: #34beea;color: #fff;}}}
}.Topbar-el-dropdown-menu {width: 270px;height: 220px;padding: 32px 0 0 24px;overflow: hidden;div {width: 100%;height: 32px;display: flex;align-items: center;span {margin-left: 32px;}}.Topbar-Group {span:nth-child(1) {margin: 0 20px 0 32px;}img {// margin-right: 2px;}}.Topbar-install {display: inline-block;width: 56px;height: 21px;color: #303133;line-height: 21px;margin: 18px 0 12px 75px;white-space: nowrap;&:hover {color: #e54747;}}.user-center {display: flex;flex-direction: column;align-items: center;justify-content: center;margin-top: 30px;height: 42px;user-select: none;> span,> a {margin: 0;padding: 0;}> span {margin-bottom: 10px;color: #333;cursor: pointer;&:active {opacity: 0.5;}}> a {color: #e54747;}}
}.Topbar-el-dialog {margin-top: 200px;.el-dialog__header {.el-dialog__title {margin-top: 30px;font-size: 16px;color: #606266;}}.el-dialog__body {.roleActive {color: #34beea;}.Topbar-role {height: 21px;text-align: center;font-size: 12px;margin-bottom: 21px;cursor: pointer;&:hover {color: #34beea;}}}
}
</style>

一级路由循环渲染  currentIndex高亮   添加点击事件

<div class="parentRoute">
            <span
              :class="{ activeParent: currentIndex == index }"
              v-for="(item, index) in routeMenus"
              :key="index"
              @click="selectParentRoute(item, index)"
            >
              {{ filterTitle(item.meta.title) }}
              <!-- <i v-if="item.children" class="el-icon-arrow-down" /> -->
            </span>
          </div> 

二级路由  currentChildIndex高亮  添加点击事件

<div class="childRoute-menus container">

        <div

          :class="{ activeChild: currentChildIndex == index }"

          v-for="(item, index) in subMenus"

          :key="index"

          @click="selectChildRoute(item, index)"

        >

          {{ filterTitle(item.meta.title) }}

        </div>

      </div>

在data中定义变量:

         // 当前激活一级菜单的 index

      currentIndex: localStorage.getItem("parentPathIndex") || 0,

      // 二级菜单index

      currentChildIndex: localStorage.getItem("childPathIndex") || 0,

 

 在跳转页面(也就是学情概览页面)的methods里面新增一个方法

 findMore(name, path) {

      let parentIndex = this.routeMenus.findIndex(v => v.meta.title == name);

      let childIndex = this.routeMenus[parentIndex].children.findIndex(v => v.path == path);

      localStorage.setItem("parentPathIndex", parentIndex);

      localStorage.setItem("childPathIndex", childIndex);

      this.$router.push(path);

    },

在学情概览页面结构里面 点击更多的地方使用这个方法并传参: 

routeMenus

 

目标页面: 

 

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

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

相关文章

MySQL实战2

文章目录 主要内容一.回访用户1.准备工作代码如下&#xff08;示例&#xff09;: 2.目标3.实现代码如下&#xff08;示例&#xff09;: 二.如何找到每个人每月消费的最大天数1.准备工作代码如下&#xff08;示例&#xff09;: 2.目标3.实现代码如下&#xff08;示例&#xff09…

08.K8S高可用方案

K8S高可用方案 1、高可用部署方式 官方提供两种高可用实现方式: 堆叠etcd 拓扑,其中 etcd 节点与控制平面节点共存;外部 etcd 节点,其中 etcd 与控制平面在不同的节点上运行;1.1、堆叠 etcd 拓扑 主要特点: 每个 master 节点上运行一个 apiserver 和 etcd, etcd 只与本…

Vmware下的虚拟机NAT连接后仍然木有网络

问题描述 出现在主机能ping通&#xff0c;互联网ping不通的情况。 解决 竟然是因为网关配置文件中DNS1写成了DNS! 没想到吧&#xff01;如果你试了很多办法都没有解决记得检查下文件 T^T 在文件夹中改过来就好了&#xff1a; 之后虚拟机终端执行init 6重启&#xff0c;即可…

私有云:【3】NFS存储服务器的安装

私有云&#xff1a;【3】NFS存储服务器的安装 1、使用vmwork创建虚拟机2、配置NFS服务器3、安装NFS存储服务4、配置NFS服务及创建存储共享 1、使用vmwork创建虚拟机 新建虚拟机NFS 分配400G硬盘&#xff0c;可以更高【用作存储】 自定义硬件 选择win2012的iso文件 设置登录密码…

【C++】模版进阶

我们在之前的博客中讲述过模版的使用&#xff1a;【C】模版初阶&#xff0c;但这只是模版最基本的使用&#xff0c;下面再深入模版&#xff0c;看看还有另外什么用法&#xff1a; 目录 一、非类型模板参数 二、模板的特化 2.1 什么是模版的特化 2.2 函数模版的特化 2.3 类…

电脑怎么共享屏幕?电脑屏幕共享软件分享!

如何控制某人的电脑屏幕&#xff1f; 有时我们可能需要远程控制某人的计算机屏幕&#xff0c;例如&#xff0c;为我们的客户提供远程支持&#xff0c;远程帮助朋友或家人解决计算机问题&#xff0c;或在家中与同事完成团队合作。那么&#xff0c;电脑怎么共享屏幕&#xff…

记录--vue3实现excel文件预览和打印

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在前端开发中&#xff0c;有时候一些业务场景中&#xff0c;我们有需求要去实现excel的预览和打印功能&#xff0c;本文在vue3中如何实现Excel文件的预览和打印。 预览excel 关于实现excel文档在…

java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性

目录 一、使用场景 二、环境准备 1、引入依赖 2、实体类 三、示例 1、不返回空值 (1)方式 (2)测试 (3)说明 2、不返回部分属性 (1)方式 (2)测试 一、使用场景 在开发过程中&#xff0c;有时候需要将后端数据返回前端&#xff0c;此时有些数据为空属性不需要返回&…

海南海口大型钢结构件3D扫描全尺寸三维测量平面度平行度检测-CASAIM中科广电

高精度三维扫描技术已经在大型工件制造领域发挥着重要作用&#xff0c;特别是在质量检测环节&#xff0c;高效、高精度&#xff0c;可以轻松实现全尺寸三维测量。本期&#xff0c;CASAIM要分享的应用是在大型钢结构件的关键部位尺寸及形位公差检测。 钢结构件&#xff0c;是将…

LabVIEW更改图像特定部分的颜色

LabVIEW更改图像特定部分的颜色 在随附的照片中&#xff0c;想将包围的部分更改为黄色。该怎么做&#xff1f;或者如何将图像的蓝色部分更改为绿色。 绘制拼合像素图不接受数组或输出数组。如果需要有关函数的更多信息&#xff0c;请按 CTRL H 打开上下文帮助&#xff0c;或单…

python下拉框选择测试

把下拉选择的值得打印出来&#xff1a; import tkinter as tk def on_select(event): # 当选择下拉框中的一项时&#xff0c;此函数将被调用 selected event.widget.cget("text") # 获取选中的文本 print(f"You selected: {selected}") # 打印选中…

【机器学习可解释性】3.部分依赖图

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP Value5.SHAP Value 高级使用 正文 每个特征怎么样影响预测结果&#xff1f; 部分依赖图 Partial Dependence Plots 虽然特征重要性显示了哪些变量对预测影响最大&#xff0c;但部分依赖图显示了特征如…

OpenHarmony docker环境搭建所见的问题和解决

【摘要】OpenHarmony docker环境搭建需要一台安装Ubuntu的虚拟机&#xff0c;并且虚拟机中需要有VScode。 整个搭建流程请参考这篇博客&#xff1a;OpenHarmony docker环境搭建-云社区-华为云 (huaweicloud.com) 上篇博主是用Ubuntu的服务器进行环境搭建的&#xff0c;在使用VS…

深度学习之基于yolov8的安全帽检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、基于yolov8的安全帽检测系统四. 总结 一项目简介 在企业作业和工地施工过程中&#xff0c;安全永远高于一切。众所周知&#xff0c;工人在进入…

matlab创建矩阵、理解三维矩阵

1.创建矩阵 全0矩阵&#xff1a;a zeros(2,3,4) 全1矩阵&#xff1a;a ones(2,3,4) &#xff01;和python不一样的地方&#xff01;此处相当于创建了4页2行3列的矩阵&#xff0c;而在python里是2页3行4列。 对第1页的第2行第3列元素进行修改&#xff1a;

WebDAV之π-Disk派盘 + 言叶

言叶是一个功能丰富的笔记软件,为跨平台而设计,可以为你在手机、电脑和其他设备中实现多端同步。从而实现高效率的记事和办公。支持Markdown的语言和多种计算机语法高亮功能,让你笔记中的内容更加主次分明,可以在这里记录一些代码什么的。同时还可以在笔记中插入图片,使其…

ab压力测试

标题相关概念 QPS&#xff0c;每秒查询 QPS&#xff1a;Queries Per Second意思是“每秒查询率”&#xff0c;是一台服务器每秒能够相应的查询次数&#xff0c;是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 互联网中&#xff0c;作为域名系统服务器的机…

JavaScript_对象_Function_定义与参数

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Function对象</title><script>/*** Function&#xff1a;函数&#xff08;方法&#xff09;对象* 1.创建&#xff1a;* 1.…

六零导航页SQL注入漏洞复现(CVE-2023-45951)

0x01 产品简介 LyLme Spage&#xff08;六零导航页&#xff09;是中国六零&#xff08;LyLme&#xff09;开源的一个导航页面。致力于简洁高效无广告的上网导航和搜索入口&#xff0c;支持后台添加链接、自定义搜索引擎&#xff0c;沉淀最具价值链接&#xff0c;全站无商业推广…

如何在忘记手机密码或图案时重置 Android 手机?

忘记手机密码或图案是 Android 用户一生中不得不面对的最令人沮丧的事情之一。恢复 Android 设备的唯一方法是在 Android 设备上恢复出厂设置。但许多用户不使用此方法&#xff0c;因为此过程会擦除您设备上可用的所有个人数据。 但是&#xff0c;有一种方法可以在不丢失任何数…