vue 自动生成菜单
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 自动生成菜单的更多相关文章
- 吴裕雄--天生自然python学习笔记:python文档操作自动生成菜单 Word 文件
许多学校营养午餐的菜单是由教师来轮流制作 ,这是一个 比较烦锁的工作,如 果能自动用教师最熟悉的 Word 文件来生成一个菜单文件,使教师对生成的菜单稍作 修改即可使用,那将是一个不错的主意. 案例要 ...
- vue根据后端菜单自动生成路由(动态路由)
vue根据后端菜单自动生成路由(动态路由) router.js import Vue from 'vue' import Router from 'vue-router' import store f ...
- Java代码自动生成,生成前端vue+后端controller、service、dao代码,根据表名自动生成增删改查功能
本项目地址:https://github.com/OceanBBBBbb/ocean-code-generator 项目简介 ocean-code-generator采用(适用): ,并使用m ...
- vite插件-自动生成vue组件文档
特点 支持热更新 快速启动,依赖于 vite,无需另起服务 自动生成组件导航 ui 采用了vant-ui的样式 核心方法覆盖率达到了 92.86% 使用 yarn add vite-plugin-vu ...
- 怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块
因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我个人认为,好记性不如多做笔记多反思总结. 1. 前提条件 开发环境已正确配置 工程已解决JUnit依赖关系(pom ...
- Word自动生成目录
博主最近在写报告的时候要在Word里面做个目录,再做个页码,然后上网搜了一些方法,非常零散,我弄了好久才弄好.在这里我把整套方法分享一下. 声明:内容完全独创! 工具:Word 2016. 效果:如下 ...
- net软件自动生成开发编程框架编程机器人
有一个.net自动生成平台(编程机器人)推荐给大家,常规几天十几天的工作,机器人几分钟搞定,不写一行代码,留下大把休闲时光,适应于聪明人:不想太累的程序员(看看风景泡泡妞),不想多请人的老板(有限资金 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
- Unity3D读取模型文件自动生成AnimatorController简单实例
前几天接到一个任务,做一个导入.控制模型动画的工具类,没有太具体的要求,于是就自行思考实际需求,最终根据宣雨松老师的一篇博客,自己规范了一下写了一个工具类.相关工具代码及测试用例已上传至Github. ...
随机推荐
- 魅族CMDB运维自动化实践
一.简介 原创:梁鹏 本文是根据魅族系统架构师梁鹏10月20日在msup携手魅族.Flyme.百度云主办的第十三期魅族技术开放日< 魅族CMDB运维自动化实践>演讲中的分享内容整理而成. ...
- java中注释、关键字、标识符,数据类型(上)
一.java中的注释(有3种) 注释:是给写代码的人看的,注释不会被执行 单行注释:用符号"//"实现 多行注释:用"/* */ " 实现 javaDoc(文档 ...
- css预处理器和css Modules是干嘛的?
CSS预处理器 1.css和js的区别 js是编程语言,它可以声明变量,编写逻辑.而css实际上只是个"表",表头是选择器,内容是里面的样式.它并不能写逻辑啥的.也就是说,对于cs ...
- Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数
Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 不再通过遍历,对数组中的元素进行运算,利用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 ...
- CF1455A Strange Functions 题解
Content 定义一个函数 \(f(x)\) 为 \(x\) 翻转并去掉前导零之后的数,现在有 \(t\) 组询问,每组询问给定一个整数 \(n\),请求出对于所有的 \(1\leqslant x\ ...
- 你假笨JVM参数 - 1 CMSScavengeBeforeRemark
参数:-XX:CMSScavengeBeforeRemark含义:Enable scavenging attempts before the CMS remark step.开启或关闭在CMS重新标记 ...
- mysql绿色版添加服务
- 在mysql5.8中用json_extract函数解析json
背景:某个字段的数据中是JSON,需要提取其中的卡号部分,如: {"objType":"WARE","orderId":6771254073 ...
- SpringBoot整合redis实现过期key监听事件
Spring整合redis实现key过期事件监听:https://www.cnblogs.com/pxblog/p/13969375.html 可以用于简单的过期订单取消支付.7天自动收货场景中 1. ...
- c++跨平台字符编码与乱码杂谈
blos https://article.itxueyuan.com/qpQml https://www.cnblogs.com/wangmh/p/7265258.html https://blog. ...