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. 魅族CMDB运维自动化实践

    一.简介 原创:梁鹏 本文是根据魅族系统架构师梁鹏10月20日在msup携手魅族.Flyme.百度云主办的第十三期魅族技术开放日< 魅族CMDB运维自动化实践>演讲中的分享内容整理而成. ...

  2. java中注释、关键字、标识符,数据类型(上)

    一.java中的注释(有3种) 注释:是给写代码的人看的,注释不会被执行 单行注释:用符号"//"实现 多行注释:用"/* */ " 实现 javaDoc(文档 ...

  3. css预处理器和css Modules是干嘛的?

    CSS预处理器 1.css和js的区别 js是编程语言,它可以声明变量,编写逻辑.而css实际上只是个"表",表头是选择器,内容是里面的样式.它并不能写逻辑啥的.也就是说,对于cs ...

  4. Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数

    Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 不再通过遍历,对数组中的元素进行运算,利用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 ...

  5. CF1455A Strange Functions 题解

    Content 定义一个函数 \(f(x)\) 为 \(x\) 翻转并去掉前导零之后的数,现在有 \(t\) 组询问,每组询问给定一个整数 \(n\),请求出对于所有的 \(1\leqslant x\ ...

  6. 你假笨JVM参数 - 1 CMSScavengeBeforeRemark

    参数:-XX:CMSScavengeBeforeRemark含义:Enable scavenging attempts before the CMS remark step.开启或关闭在CMS重新标记 ...

  7. mysql绿色版添加服务

  8. 在mysql5.8中用json_extract函数解析json

    背景:某个字段的数据中是JSON,需要提取其中的卡号部分,如: {"objType":"WARE","orderId":6771254073 ...

  9. SpringBoot整合redis实现过期key监听事件

    Spring整合redis实现key过期事件监听:https://www.cnblogs.com/pxblog/p/13969375.html 可以用于简单的过期订单取消支付.7天自动收货场景中 1. ...

  10. c++跨平台字符编码与乱码杂谈

    blos https://article.itxueyuan.com/qpQml https://www.cnblogs.com/wangmh/p/7265258.html https://blog. ...