博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue+iview-admin 利用适配器模式改造eova(伊娃管理后台)菜单及路由
阅读量:6861 次
发布时间:2019-06-26

本文共 2957 字,大约阅读时间需要 9 分钟。

vue+iview-admin 利用适配器模式改造eova(伊娃管理后台)菜单及路由(1)

简单效果展示

改造完后效果

eova 及 iview的部署

略(日后再补充)

菜单功能核心改造

  1. 优化 iview/src/router/router.js
import Main from '@/views/Main.vue';...import jquery from 'jquery';//引入jquery用于同步请求菜单栏import Kit from '../libs/kit.js';//引入自定义适配器类...// 通过请求/menu接口获取eova菜单结构let raw = jquery.ajax({    url: '/menu',    type: 'GET', //GET    async: false, //或false,是否异步    dataType: 'json',}).responseJSON;// 通过适配器将eova菜单变为适合vue-router的结构const menu = Kit.adaptMenu(raw, Main);// 作为Main组件的子页面展示并且在左侧菜单显示的路由写在appRouter里export const appRouter = [...menu];// 所有上面定义的路由都要写在下面的routers里export const routers = [    loginRouter,    otherRouter,    preview,    locking,    ...appRouter,//引入路由    page500,    page403,    page404];复制代码
  1. 添加iview/src/libs/kit.js 用于适配菜单
let Kit = {};...import webComponent from '@/views/main-components/web.vue';//引入用于读取页面iframe的组件Kit.adaptMenu = (raw, Main) => {    let menu = [];    const rawMenu = raw;    raw.forEach((item, index) => {        //主菜单        if (item.parent_id == 0 && item.type == 'dir') {//判断是否根目录及父目录            let m = {};            m.id = item.id;            m.path = "/" + item.code;            m.meta = {                type: 'dir'            }            m.name = item.code;            m.title = item.name;            m.component = Main;//使用父菜单组件            m.icon = 'folder';            function addChildren(parent) {//通过递归调用添加子菜单在每个菜单的children属性内                parent.children = [];                // 直接打开链接                let children = rawMenu.filter(child => child.parent_id == parent.id && (child.link || child.type == 'dir'));                if (children.length > 0) {                    children.forEach((child, index) => {                        let c = {};                        c.id = child.id;                        c.path = "/" + child.code;                        c.name = child.code;                        c.title = child.name;                        c.meta = {//利用meta将链接信息传给路由                            type: child.type,                            link: "" + child.link                        };                        c.component = webComponent;                        parent.children.push(c);                        addChildren(c);                    })                }            }            addChildren(m);            menu.push(m);        } else if (item.parent_id == 0 && item.type == 'diy') {//如果是自定义菜单,直接跳转            let m = {};            m.id = item.id;            m.path = "/" + item.code;            m.meta = {                type: item.type,                link: item.link            }            m.name = item.code;            m.title = item.name;            m.component = Main;            m.icon = 'folder';            m.children = [];            menu.push(m);        }    })    return menu;}export default Kit;复制代码
  1. 添加 iview/src/views/main-components/web.vue用于打开iframe页面
复制代码

改造完成

源码请参考

转载地址:http://jsayl.baihongyu.com/

你可能感兴趣的文章
JVM系列二:GC策略&内存申请、对象衰老
查看>>
MySQL 数据库备份策略:全备与增量备份
查看>>
Springboot的热部署
查看>>
Thinking in UML-1-为什么需要UML
查看>>
vs编译obj给delphi用
查看>>
过游戏保护NP或TP的几种方法和思路
查看>>
equals和hashcode为什么要一起重写
查看>>
模态与非模态对话框的问题
查看>>
地对地导弹地对地导弹地对地导弹
查看>>
让div 充满整个body
查看>>
程序员保持快乐活跃的6个好习惯(转)
查看>>
找工作的一些感悟——前端小菜的成长
查看>>
jSON Call can throw but it is not marked with try
查看>>
用过的一些服务器集成软件
查看>>
一键拨打
查看>>
20120522:ERROR - ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
Maven构建war项目添加版本号
查看>>
更新 手淘 flexible 布局 rem 单位适配问题
查看>>
新浪微博登录接口实例
查看>>
解析ActionResult子类JsonResult
查看>>