当前位置: 首页 > news >正文

jeecg-boot vue点击左侧菜单跳转无菜单栏的全屏页面

因为jeecg路由是动态路由渲染,默认跳转会跳转到当前主路由的<router-view />里面,所以要想实现跳转的需求,就要修改框架默认的一些内容。

1、router.config.js

export const constantRouterMap = [// bigDataScreen为大屏页面的关键词{path: '/bigDataScreen',component: BlankLayout,redirect: '/bigDataScreen/index1',children: [{path: 'index1',name: 'BigDataScreenIndex1',component: () => import('@/views/bigDataScreen/index1/index'),},{path: 'index2',name: 'BigDataScreenIndex2',component: () => import('@/views/bigDataScreen/index2/index'),}]},{path: '/404',component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')}
]

2、memu/index.js

import Menu from 'ant-design-vue/es/menu'
import Icon from 'ant-design-vue/es/icon'const { Item, SubMenu } = Menuexport default {name: 'SMenu',props: {menu: {type: Array,required: true},theme: {type: String,required: false,default: 'dark'},mode: {type: String,required: false,default: 'inline'},collapsed: {type: Boolean,required: false,default: false}},data() {return {openKeys: [],selectedKeys: [],cachedOpenKeys: []}},computed: {rootSubmenuKeys: vm => {const keys = []vm.menu.forEach(item => keys.push(item.path))return keys}},mounted() {this.updateMenu()},watch: {collapsed(val) {if (val) {this.cachedOpenKeys = this.openKeys.concat()this.openKeys = []} else {this.openKeys = this.cachedOpenKeys}},$route: function () {this.updateMenu()}},methods: {// select menu itemonOpenChange(openKeys) {// 在水平模式下时执行,并且不再执行后续if (this.mode === 'horizontal') {this.openKeys = openKeysreturn}// 非水平模式时const latestOpenKey = openKeys.find(key => !this.openKeys.includes(key))if (!this.rootSubmenuKeys.includes(latestOpenKey)) {this.openKeys = openKeys} else {this.openKeys = latestOpenKey ? [latestOpenKey] : []}},updateMenu() {const routes = this.$route.matched.concat()const { hidden } = this.$route.metaif (routes.length >= 3 && hidden) {routes.pop()this.selectedKeys = [routes[routes.length - 1].path]} else {this.selectedKeys = [routes.pop().path]}let openKeys = []if (this.mode === 'inline') {routes.forEach(item => {openKeys.push(item.path)})}// update-begin-author:sunjianlei date:20210409 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题// 包含冒号的是动态菜单if (this.selectedKeys[0].includes(':')) {let selectedKey = this.$route.fullPaththis.selectedKeys = [selectedKey]let newOpenKeys = []this.fullOpenKeys(this.menu, selectedKey, newOpenKeys)if (newOpenKeys.length > 0) {openKeys = newOpenKeys.reverse()}}// update-end-author:sunjianlei date:20210409 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题//update-begin-author:taoyan date:20190510 for:online表单菜单点击展开的一级目录不对if (!this.selectedKeys || this.selectedKeys[0].indexOf(":") < 0) {this.collapsed ? (this.cachedOpenKeys = openKeys) : (this.openKeys = openKeys)}//update-end-author:taoyan date:20190510 for:online表单菜单点击展开的一级目录不对},// update-begin-author:sunjianlei date:20210409 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题// 递归查找当前选中的菜单和父级菜单,填充openKeysfullOpenKeys(menus, selectedKey, openKeys) {for (let item of menus) {if (item.path === selectedKey) {openKeys.push(item.path)this.$emit('updateMenuTitle', item)return true} else if (Array.isArray(item.children)) {if (this.fullOpenKeys(item.children, selectedKey, openKeys)) {openKeys.push(item.path)return true}}}},// update-end-author:sunjianlei date:20210409 for: 修复动态功能测试菜单、带参数菜单标题错误、展开错误的问题// renderrenderItem(menu) {if (!menu.hidden) {return menu.children && !menu.alwaysShow ? this.renderSubMenu(menu) : this.renderMenuItem(menu)}return null},renderMenuItem(menu) {const target = menu.meta.target || nullconst tag = target && 'a' || 'router-link'let props = { to: { name: menu.name } }if (menu.route && menu.route === '0') {props = { to: { path: menu.path } }}const attrs = { href: menu.path, target: menu.meta.target }if (menu.children && menu.alwaysShow) {// 把有子菜单的 并且 父菜单是要隐藏子菜单的// 都给子菜单增加一个 hidden 属性// 用来给刷新页面时, selectedKeys 做控制用menu.children.forEach(item => {item.meta = Object.assign(item.meta, { hidden: true })})}// 判断是否包含 bigDataScreenconst isBigDataScreen = menu.path.includes('bigDataScreen')return (<Item onClick={() => this.handleClick(menu.path)} {...{ key: menu.path }}>{isBigDataScreen ? (// 如果包含 bigDataScreen,则渲染为 span<span >{this.renderIcon(menu.meta.icon)}<span>{menu.meta.title}</span></span>) : (// 否则保持原有 tag 渲染<tag {...{ props, attrs }}>{this.renderIcon(menu.meta.icon)}<span>{menu.meta.title}</span></tag>)}</Item>)},handleClick(pathname) {if (pathname.includes('bigDataScreen')) {this.$router.push(pathname).catch(() => { });}},renderSubMenu(menu) {const itemArr = []if (!menu.alwaysShow) {menu.children.forEach(item => itemArr.push(this.renderItem(item)))}return (<SubMenu {...{ key: menu.path }}><span slot="title">{this.renderIcon(menu.meta.icon)}<span>{menu.meta.title}</span></span>{itemArr}</SubMenu>)},renderIcon(icon) {if (icon === 'none' || icon === undefined) {return null}const props = {}typeof (icon) === 'object' ? props.component = icon : props.type = iconreturn (<Icon {... { props }} />)}},render() {const { mode, theme, menu } = thisconst props = {mode: mode,theme: theme,openKeys: this.openKeys}const on = {select: obj => {this.selectedKeys = obj.selectedKeysthis.$emit('select', obj)},openChange: this.onOpenChange}const menuTree = menu.map(item => {if (item.hidden) {return null}return this.renderItem(item)})// {...{ props, on: on }}return (<Menu vModel={this.selectedKeys} {...{ props, on: on }}>{menuTree}</Menu>)}
}

3、正常注册菜单

http://www.xdnf.cn/news/656083.html

相关文章:

  • PostgreSQL日志管理完整方案(AI)
  • 学习心得(14--16)
  • 使用 Vuex 实现用户注册与登录功能
  • HTML流星雨
  • 充电枪IEC62196/EN 62196测试内容
  • 【PC网上邻居--1】基于Samba协议的局域网文件共享系统设计与实现
  • 行为型:责任链模式
  • 【DCCN】多模态情感分析解耦交叉属性关联网络
  • java虚拟机
  • 第11章 标准化和软件知识产权基础知识,多媒体、图像相关
  • 认识微服务
  • 区块链与Web3:如何有效保障个人数据安全
  • 扩容的未来:Web3 并行计算赛道全景图谱
  • moviepy视频添加中文水印
  • 网络原理 | TCP与UDP协议的区别以及回显服务器的实现
  • 热门大型语言模型(LLM)应用开发框架
  • yolov8分割任务的推理和后处理解析
  • HMI仿真报错
  • 【MATLAB例程】声纳信号处理与目标测距的程序|信号频率、信噪比、采样率和声速均可自行调整|附代码下载链接
  • 【Bug】--node命令加载失败
  • 安卓端智能耗材柜系统可行性方案(基于uniapp + Vue3)
  • 数据的六个特性以及由于独特性产生的一些有趣的想法
  • 【C/C++】基于 Docker 容器运行的 Kafka + C++ 练手项目
  • Vue条件渲染
  • JavaScripts console.log和console.dir区别
  • Linux基本指令篇 —— clear指令
  • Vue 前端全方位性能优化指南
  • 【Hive基础】01.数据模型、存储格式、排序方式
  • FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制
  • 双11、618大促要做什么?