import constant from './const'
export function getRouters (files) {
let filenames = files.keys()
let list = mapToList(filenames)
let routerArr = getTree(list)
return routerArr
} function getTree (list) {
let routers = []
list.map((obj, index) => {
// 当前菜单没有父菜单
if (!hasParent(obj)) {
let length = 0
let routerArr = findChild(obj, obj, list, length)
routers = routers.concat(routerArr)
return routers
}
})
return routers
} function hasParent (node) {
let arr = node.split('/')
if (arr.length > 1) {
return arr[arr.length - 2]
} else {
return null
}
} function findChild (node, path, list, length) {
let routerArr = []
let childrenArr = []
let name = node
if (endsWith(node, constant.end)) {
node = cleanAuth(node, constant.end)
}
list.map((obj, index) => {
let arr = obj.split('/')
if (node === arr[length]) {
if (arr.length === length + 2) {
arr.splice(0, length + 1)
let tempNode = arr.toString().replace(',', '/')
childrenArr = childrenArr.concat(findChild(tempNode, obj, list, length + 1))
}
return childrenArr
}
})
routerArr = packageRouter(name, path, routerArr, childrenArr)
return routerArr
} function packageRouter (name, route, routerArr, childrenArr) {
// path = path.toLocaleLowerCase()
// ../components 不能为第一个变量,否则会报错Cannot find module "."
let path = constant.prefix + '/' + route
if (endsWith(route, constant.end)) {
let tempRoute = cleanAuth(route, constant.end)
if (childrenArr === 'undefined' || childrenArr.length === 0) {
routerArr.push({
path: '/' + tempRoute,
name: tempRoute,
component: resolve => require([`@/${path}.vue`], resolve),
meta: {
requireAuth: true
}
})
} else {
routerArr.push({
path: '/' + tempRoute,
name: tempRoute,
component: resolve => require([`@/${path}.vue`], resolve),
meta: {
requireAuth: true
},
children: childrenArr
})
}
return routerArr
} else {
if (childrenArr === 'undefined' || childrenArr.length === 0) {
routerArr.push({
path: '/' + route,
name: route,
component: resolve => require([`@/${path}.vue`], resolve)
})
} else {
routerArr.push({
path: '/' + route,
name: route,
component: resolve => require([`@/${path}.vue`], resolve),
children: childrenArr
})
}
return routerArr
}
} function mapToList (filenames) {
let list = []
filenames.map((obj, index) => {
obj = obj.replace(/^\.\//, '').replace(/\.(vue)$/, '')
list.push(obj)
})
return list
} // 判断当前字符串是否以str开始
// function startsWith (str) {
// return this.slice(0, str.length) === str
// }
// 判断当前字符串是否以str结束
function endsWith (origin, str) {
if (!judgeStrLength) {
return false
}
return origin.slice(origin.length - str.length, origin.length) === str
} function cleanAuth (origin, str) {
if (!judgeStrLength) {
return origin
}
return origin.slice(0, origin.length - str.length)
} function judgeStrLength (origin, str) {
return origin.length - str.length > 0
} export default getRouters

vue 自动生成菜单的更多相关文章

  1. 吴裕雄--天生自然python学习笔记:python文档操作自动生成菜单 Word 文件

    许多学校营养午餐的菜单是由教师来轮流制作 ,这是一个 比较烦锁的工作,如 果能自动用教师最熟悉的 Word 文件来生成一个菜单文件,使教师对生成的菜单稍作 修改即可使用,那将是一个不错的主意. 案例要 ...

  2. vue根据后端菜单自动生成路由(动态路由)

    vue根据后端菜单自动生成路由(动态路由) router.js import Vue from 'vue' import Router from 'vue-router' import store f ...

  3. Java代码自动生成,生成前端vue+后端controller、service、dao代码,根据表名自动生成增删改查功能

    本项目地址:https://github.com/OceanBBBBbb/ocean-code-generator 项目简介 ocean-code-generator采用(适用):     ,并使用m ...

  4. vite插件-自动生成vue组件文档

    特点 支持热更新 快速启动,依赖于 vite,无需另起服务 自动生成组件导航 ui 采用了vant-ui的样式 核心方法覆盖率达到了 92.86% 使用 yarn add vite-plugin-vu ...

  5. 怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块

     因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我个人认为,好记性不如多做笔记多反思总结. 1.    前提条件 开发环境已正确配置 工程已解决JUnit依赖关系(pom ...

  6. Word自动生成目录

    博主最近在写报告的时候要在Word里面做个目录,再做个页码,然后上网搜了一些方法,非常零散,我弄了好久才弄好.在这里我把整套方法分享一下. 声明:内容完全独创! 工具:Word 2016. 效果:如下 ...

  7. net软件自动生成开发编程框架编程机器人

    有一个.net自动生成平台(编程机器人)推荐给大家,常规几天十几天的工作,机器人几分钟搞定,不写一行代码,留下大把休闲时光,适应于聪明人:不想太累的程序员(看看风景泡泡妞),不想多请人的老板(有限资金 ...

  8. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

  9. Unity3D读取模型文件自动生成AnimatorController简单实例

    前几天接到一个任务,做一个导入.控制模型动画的工具类,没有太具体的要求,于是就自行思考实际需求,最终根据宣雨松老师的一篇博客,自己规范了一下写了一个工具类.相关工具代码及测试用例已上传至Github. ...

随机推荐

  1. picoctf_2018_rop chain

    拿到题目就知道要用rop来做 老样子日常检查一下 32位的程序开启了nx和relro保护 将程序放入ida中 一眼就看到了程序中的后门程序 我们逐一分析一下 main vuln get没有对输入字符进 ...

  2. [BUUCTF]PWN——[ZJCTF 2019]Login

    [ZJCTF 2019]Login 附件 步骤: 例行检查,64位程序,开启了canary和nx保护 2. 试运行一下程序 3. 64位ida载入,检索字符串,在程序里找到了用户名admin和密码2j ...

  3. 【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变,小白也能看懂

    1 事件背景 经过一周时间的Log4j2 RCE事件的发酵,事情也变也越来越复杂和有趣,就连 Log4j 官方紧急发布了 2.15.0 版本之后没有过多久,又发声明说 2.15.0 版本也没有完全解决 ...

  4. 面试官:HashSet如何保证元素不重复?

    本文已收录<Java常见面试题>系列,Git 开源地址:https://gitee.com/mydb/interview HashSet 实现了 Set 接口,由哈希表(实际是 HashM ...

  5. JAVA获取当前请求的URL地址,包含请求链接中的参数

    /** * 获得当前访问的URL路径 * @param request * @return */ public static String getLocation(HttpServletRequest ...

  6. Qt5获取可用串口

    概述 本文将介绍Qt5使用类QSerialPortInfo获取可以用串口号 效果 机器上配置的虚拟串口 程序获取结果 源码开始 .pro文件中添加下面的代码 QT += serialport 然后,执 ...

  7. cmake之生成动态库

    演示源码下载地址: https://github.com/mohistH/demo_cmake_dylib 把文仅为参考. 以实际情况为准 1.目录结构 │ CMakeLists.txt │ inde ...

  8. 【九度OJ】题目1054:字符串内排序 解题报告

    [九度OJ]题目1054:字符串内排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1054 题目描述: 输入 ...

  9. 牛客练习赛44 C:小y的质数

    链接:https://ac.nowcoder.com/acm/contest/634/C?tdsourcetag=s_pcqq_aiomsg 来源:牛客网 题目描述 给出一个区间\([L,R]\),求 ...

  10. 【C\C++笔记】数组指针越界

    指针越界,t的数组指针越界,修改了c的内容. 使用指针时,必须规定指针移动的范围 #include <iostream> using namespace std; int main(){ ...