考勤管理系统之用户角色及权限管理的设计


    






    考勤理系统户角色权限理设计实现






    考勤理系统户角色权限设计实现


    互联网信息技术急速发展新时代基微信程序二维码定位等功设计利二维码定位功进行签考勤理系统考勤理员设置签点范围系统提供导出理户考勤信息功请假申请功假期理功等文重点讲述该系统户角色权限设计实现权限模块系统权限进行设计实现redis缓存优化系统增强系统性
    关键词:考勤理系统户角色权限设计Redis















    Design and Implementation of User Role and Authority in Time Attendance Management System

    Abstract
    In the new era of rapid development of Internet information technology based on the WeChat applet's QR code and positioning functions we have designed an attendance management system that can use the QR code and positioning functions to check in And the scope and the system provides the function of exporting and managing user's attendance information leave application function vacation management function etc This article focuses on the design and implementation of the system's user roles and permissions that is the permission module which designs and implements system permissions optimizes the system using redis cache and enhances system performance
    Keywords Time and Attendance Management SystemDesign of user roles and permissionsRedis















    目 录


    1 前言 6
    2相关技术介绍 6
    21 前端技术介绍 7
    22 Java介绍 8
    23 台项目架构介绍 8
    24 技术架构图 10
    3系统介绍 10
    31 系统设计功结构 10
    32 系统模块介绍 12
    321权限理模块 12
    322考勤统计模块 12
    323审批模块 13
    33 系统例图 14
    4权限模块设计实现 14
    41 权限模块设计 14
    42 权限模块实现 16
    5测试 20
    51 登录功测试 20
    52 角色增删改查功测试 21
    53 员工增删改查功测试 22
    53 角色户权限控制测试 23
    6微信程序界面 25
    7结 27
    附录1 28











    1 前言
    考勤理系统基微信程序二维码定位等功实现公司进行考勤理系统系统支持二维码定位口令签什选择微信程序呢仅仅微信户量微信程序便捷需重新载软件占存等优点托微信程序便捷应环境开发考勤理系统考勤理系统分成程序端web端程序端公司员工考勤web端支持考勤数统计审批流程理考勤规设置公司员工理考勤理系统分成权限理模块考勤统计模块审批模块三模块文重点研究考勤理系统权限理模块具体分析系统中户角色权限关系进行梳理设计程中前端实现进行交融页面查权限进行抽取单独建立路表权限页面进行划分分关联应页面具体设计实现文面部分出
    2相关技术介绍
    21 前端技术介绍
    需求引入需第三方库VueMVVM模式框架MVVMModelViewViewModel数层dom层(户界面层)中间层(处理数界面)MVVM模式提供数双绑定分离视图(View)模型(Model)降低代码耦合提高重性Vuejs20版引入虚拟DOM初始渲染速度幅度提升降低存消耗Vue官方甚React做实验结果出Vue渲染优React年Vuejs越越国Vuejs已Reactjs更
    VuerouterVuejs 官方路理器适构建SPA(单页应程序)SPA传统应程序区传统应程序切换页面会重新请求服务器获取新完整页面SPA会第次请求加载页面次请求 仅仅获取必数然 页面中js解析获取数 展示页面中SPA核心:更新视图重新请求页面样产生缺点果端做服务器渲染会导致单页面应爬取数SEO友VuerouterSPA路路质建立起URL页面间映射关系Vue说建立URL组件间映射关系Vuerouter实现SPA路时提供两种方式:hash模式history模式hash模式 URL hash 模拟完整 URL URL 改变时页面会重新加载history模式利 historypushState API 完成 URL 跳转须重新加载页面
    VuexVuejs官方状态理模式处理项目庞时组件数量变遇需组件享状态时处理组件中转态抽离全局单例模式理组件树构成巨视图’树位置组件获取状态者触发行Vuex通定义隔离状态理中种概念通强制规维持视图状态间独立性代码变更结构化更易维护Vuex基思想Vuex思想鉴FluxReduxThe Elm ArchitectureVuex专门Vuejs设计状态理库利 Vuejs 细粒度数响应机制进行高效状态更新
    iView套基 Vuejs 开源 UI 组件库服务 PC 界面中台产品Iview时火款Vuejs组件库iView组件功较丰富UI界面漂亮组件API友灵活iView方面做越越
    Axios基PromiseHTTP库PromiseES2016特性Promise异步函数ES6推出广泛Axios正式基Promise实现Http库底层XMLHttpRequestsPromise做封装Axios发布众推崇
    微信程序需载安装直接应快捷户量
    22 Java介绍
    项目台Java开发Java现世界数编程语言受欢迎门面象语言够跨台运行考虑操作系统样子程序员专心考虑业务逻辑实现担心台运行兼容性支持泛型Java广泛应企业开发移动应开发然现移动端开发语言kotlin门语言运行java虚拟机门语言诞生1991年JamesGosling等开发初名称做Oak1994年更名Java说名字Java咖啡Java带垃圾处理机制C语言C++样需程序员身担心垃圾回收造成存泄漏Java运行Java虚拟机台关Java作门编程语言语法严谨完善异常处理机制Java编写出程序安全健壮性强移植跨台Java成世界流行语言Java发展数众许Java编写调简单功强稳定库许问题时社区中容易找答案Java先代码编译字节码程序Jvm解释运行需台部署Java环境便担心成Java次编译处运行宣传口号
    23 台项目架构介绍
    项目采JavaEE三层架构分展示层业务逻辑层数控制层帮助开发员更容易关注某层必担心部分项目开发环节进行解耦中展示层户交互接受户数返回处理结果户项目中展示层Springmvc框架框架目封装许底层操作外提供简单接口方便程序员进行开发提高程序员开发效率SpringMVC框架种够帮助实现种基JavaMVC设计模式轻量级框架现受欢迎web层框架取代前struts2SpringMVC想MVC添加Spring特色IOC赖反转功时应程序高度解耦学SpringMVC程中知道SpringMVC基原生WEB开发中DispatcherServlet设计Struts2基filter设计SpringMVC着清晰模块划分模块着独立功分前端控制器请求处理映射器处理器适配器验证器表单象命令象视图解析器处理器页面控制器SpringMVC易扩展定义组件等方式扩展需求身业务定义部分逻辑
    Dao层mybatisPlus框架该框架中国进行开发基mybatis相Mybatis增强工具修改mybatis逻辑没mybatis身进行修改基础进行增强拓展帮助简化开发提高开发效率Mybatis非常优秀持久层框架完全避免JDBC代码懂设置参数处理返回结果帮动映射结果pojo框架种设计模式面试中常问点非常值学
    整台SpringBoot框架进行控制反转赖注入spring现Java开发台中流框架甚说现学Java学SpringSpring官网提供Java台开发套框架开源框架2003年兴起Netflix开源发布现Netflix提供微服务架构站式解决方案然项目没采微服务架构SpringBoot相Spring次拓展Spring肯定知道部署环境编码程中需配置量配置文件整合新框架时需新框架添加配置文件时非常繁琐Springboot简化程新框架引入需pom文件中添加应starter启动器做点方式惯配置原理许配置默认惯方式配置满足需求时根需求进行更改添加新配置采JavaConfig方式注解进行注入简化部署开发程必样创建量xml文件配置文件需applicationyml者applicationpropertiesspringboot嵌入Tomcat必载配置Tomcat服务器
    项目maven进行构建springboot身赖maven导入赖
    SpringSecurity理权限Spring搭建环境中整合SpringSecurity非常方便Spring Secutrity功强完善
    NoSql非关系型数库Redis作缓存存储权限等信息常常变更信息存入缓存减少数库查询带性损耗
    24 技术架构图

    图21前端技术架构图

    图22端技术架构图
    3系统介绍
    31 系统设计功结构
    考勤理系统户进行考勤理生成考勤统计信息理者提供户考勤信息方便公司理根理者想法考勤方式方便户提供微信程序端进行考勤
    考勤理系统功菜单分:
    首页:根角色进入显示普通户签查数台理权限户查系统情况天考勤情况签等
    角色理:超级理员编辑系统角色权限者增删角色
    公司理部门理:公司理员理公司部门
    公司理员工理:理系统户拥权限户新增户删角色者编辑户部门角色
    考勤理考勤方式设置:拥权限户业面设置公司考勤方式设置修改方式具体参数重页面显示考勤二维码方
    考勤理假期设置:拥权限户页面公司调整假期设置
    审核:申请流程进行中需审核事件会里显示页面查审核记录者某抄送审核
    申请请假申请:需请假时需页面填写信息进行申请
    申请补卡申请:忘记卡者某情况需补卡时候需页面填写信息进行申请
    考勤记录考勤记录:拥权限户页面查系统户考勤记录提供数分析数导出等功
    考勤记录考勤记录:显示户考勤记录
    考勤记录考勤统计:图表显示考勤统计信息
    中心修改密码:户修改密码页面


    图31系统功结构图

    32 系统模块介绍
    321权限理模块
    权限理模块什权限理呢户显示页面操作限制理户菜单进入菜单页数进行操作等控制理简单说登录户根户信息显示具备权限菜单进入页面根户信息显示具备权限信息根户信息页面显示具备权限操作钮调台接口服务器先根户信息判断否应权限句话概括说户访问访问授权资源少权限理应十分广泛权限理模块需具备功
    ①路菜单理:登录户菜单进行控制户登录应授权菜单
    ②页面显示理:登录户菜单进行控制户登录应授权信息
    ③操作钮理:登录户菜单进行控制户登录应操作授权操作钮
    ④角色权限理:理角色编辑角色权限
    ⑤户角色理:编辑户角色
    322考勤统计模块
    考勤理系统中考勤统计模块出便利性安全性考虑前端选择相应滤条件显示方式条件交端端考勤数服务器MySql数库中取出端进行分析封装加密返回前端浏览器显示前端根数动态显示表格者更加直观清晰明图表
    考勤理系统中考勤数统计模块具体应该实现功:
    ①户验证功:登录户具相应权限展示考勤数户观分析
    ②网络交互功:浏览器通服务台暴露接口http协议服务端发送请求实现浏览器服务器间交互数传输
    ③考勤数查询功:前端提供滤条件排序条件台根户指定条件查询相应数封装加密返回前端前端够根户需方式展示数表格显示生成直观图表者导出数仅查询某员工详细数够查询某批员工数
    ④统计功:根户需求统计段时间某部门等条件需求定条件方式统计数返回前端统计结果根户需求展示数者导出数excel文件保证统计数准确性
    ⑤分析功:根户需条件数定算法进行分析展示户迟次数日期变化趋势果户相应需求量实现相应数分析功
    323审批模块
    审批模块考勤理系统中较重模块审批模块提供申请功流程审批功审批模块请假申请补卡申请审核功组成
    ①请假申请功:需请假时需进行请假申请请假类型限制请假类型包括限年假事假病假调休产假等通审批方成功请假
    ②补卡申请功:忘记班时间卡时月限额中进行补卡申请通审核方补卡成功
    ③审核功:面介绍功中会部分流程需特定户进行审批户审批审核功通者通流程走应户时申请进行操作
    33 系统例图

    图32系统例图
    4权限模块设计实现
    41 权限模块设计
    考勤理系统户角色权限设计事实户权限关系分离解耦户应权限十果新户需权限设置话重复性表设计处理中间加入角色表角色表设计更加灵活处理权限户间关系角色公司岗位需求划分出权限集合样户直接角色做关联降低耦合公司新增工作岗位时新增岗位需权限现角色新增角色关联需特定权限系统户角色权限设计时考虑技术权限做新设计权限页面做划分页面菜单提取出形成菜单表根Vuerouter路参数做详细设计具体详细设计面出页面具体权限形成权限表菜单表做外键关联
    确定户表角色表菜单表权限表该考虑关系显然户角色关系角色菜单关系角色权限关系确定关系中间表设计结合关系现确定表sys_user(户表)sys_role(角色表)sys_menu(菜单表)sys_permission(权限表)sys_user_role(户角色表)sys_role_menu(角色菜单表)sys_role_permission(角色权限表) 户角色表户角色关系进行转换户角色表户表角色表成关系理角色菜单表角色权限表样转换关系建表实体类ER图:

    图41ER图
    sys_menu(菜单表)设计结合前端技术vuerouter路库前端路进行控制sys_menu(菜单表)字段idnameredirecttitlehide_in_menucomponentparent_idchildren_idsorticon菜单表前端菜单路进行控制中name作路路名称生成链接路径设计redirect作路重定title应页面标题hide_in_menu设置应菜单页面左侧菜单栏显示component存放应页面前端文件位置(url)parent_idchildren_id辨明应父级菜单子菜单sort做菜单排序icon存放应菜单图标余表做详细说明
    户登录前前端注册登录404等页面做路拦截未登录访问做默认跳转登录页户登录动态注册路没权限页面旧没法跳转样话户权限做理避免户直接路做操作跳转没权限页面
    42 权限模块实现
    权限模块说重户出现越权访问情况什越权访问情况呢访问某没权限资源例:户a权限中没b页面权限通某种情况成功访问b页面越权访问种理种系统中利Vuerouter动态路注册实现页面理设计方面已详细讲表设计里详细讲具体实现吧首先户未登录情况注册登录页404页面Vuerouter全局守卫做路拦截
    if (token && toname LOGIN_PAGE_NAME) {
    next({
    name LOGIN_PAGE_NAME
    })
    } else if (token && toname LOGIN_PAGE_NAME) {
    next()
    } else if (token && toname LOGIN_PAGE_NAME) {
    next({
    name confighomeName
    })
    } else {
    if (storestateuserhasGetInfo) {
    initRouters(store)
    next()
    } else {
    storedispatch('getUserInfo')then(() > {
    initRouters(store)
    next()
    })catch(() > {
    setToken('')
    next({
    name LOGIN_PAGE_NAME
    })
    })
    }
    }
    面Vuerouter登录拦截实现中tokencookies保存判断户否登录給端做身份验证全局守卫中拦截做次判断未登录跳转页面登录页进行拦截跳转登录页未登陆跳转页面登录页放行已登录跳转页面登录页进行拦截跳转台页然户否获取信息做判断storeVuex全局状态理器判断没加载户信息加载直接进行初始化路没加载户信息先加载户信息初始化路防止户信息加载失败出现问题出现异常时清空token户跳转登录页Vuerouter全局守卫概实现
    List menusFromRoles roleServicegetMenusFromRoles(roleSet)
    HashMap menuMap new HashMap<>()
    while (true) {
    HashSet parentIds new HashSet<>(menusFromRolessize())
    for (Menu menusFromRole menusFromRoles) {
    Integer parentId menusFromRolegetParentId()
    parentIdsadd(parentId)
    String name menusFromRolegetName()
    int i nameindexOf(_)
    if (i 0)
    menusFromRolesetPath()
    else
    menusFromRolesetPath( + name)
    String s JSONObjecttoJSONString(menusFromRole)
    JSONObject jsonObject JSONObjectparseObject(s)
    jsonObjectremove(childrenId)
    jsonObjectremove(parentId)
    JSONObject metaObject new JSONObject()
    metaObjectput(title jsonObjectremove(title))
    metaObjectput(hideInMenu jsonObjectremove(hideInMenu))
    metaObjectput(icon jsonObjectremove(icon))
    jsonObjectput(meta metaObject)
    JSONArray jsonArray menuMapget(parentId)
    if (jsonArray null) {
    jsonArray new JSONArray()
    menuMapput(parentId jsonArray)
    }
    jsonArrayadd(jsonObject)
    }
    if (parentIdssize() 1 && parentIdscontains(0))
    break
    QueryWrapper queryWrapper new QueryWrapper<>()
    queryWrapperin(id parentIds)
    menusFromRoles menuServicelist(queryWrapper)
    }
    JSONArray jsonArray menuMapremove(0)
    if (jsonArray null)
    return ResultVOsuccess()
    LinkedList list new LinkedList<>()
    for (Object o jsonArray) {
    JSONObject jsonObject (JSONObject) o
    listadd(jsonObject)
    }
    while (listsize() 0) {
    JSONObject jsonObject listpoll()
    JSONArray array menuMapremove(jsonObjectgetIntValue(id))
    if (array null)
    for (Object o array) {
    JSONObject jsonObject1 (JSONObject) o
    listadd(jsonObject1)
    }
    jsonObjectput(children array)
    jsonObjectremove(id)
    }
    return ResultVOsuccess(jsonArraytoJSONString())
    方代码处理菜单表根户角色返回访问路表首先户角色查找应路表获取层路信息获取路信息进行处理首先循环层路信息进行处理处理数信息根parentId信息存hashMap键应值Array信息里然根parentId应路信息循环处理prentId长度包含0时退出循环获取出路信息先判断数长度果级菜单长度0需继续处理直接返回结果0需继续处理继续子菜单放应位置处理完成数概格式面样:
    {
    path
    name _home
    redirect 'home'
    meta {
    title '首页'
    hideInMenu false
    icon 'mdhome'
    }
    componentviewshomeindexvue
    children [{
    path 'home'
    name 'home'
    meta {
    title '首页'
    hideInMenu false
    icon 'mdhome'
    }
    component viewstestindexvue
    }]
    }
    前端数需次进行处理前端路数结构端传数点点区区component里样封装工具函数进行处理
    const backendMenusToRouters (menus) > {
    let routers []
    forEach(menus (menu) > {
    let route backendMenuToRoute(menu)
    if (menuchildren && menuchildrenlength 0) {
    routechildren backendMenusToRouters(menuchildren)
    }
    routerspush(route)
    })
    return routers
    }
    const backendMenuToRoute (menu) > {
    let route Objectassign({} menu)
    routecomponent (resolve) > require([`@{menucomponent}`] resolve)
    return route
    }
    成功处理路树处理路方法放Vuex中进行理然Vuerouter全局守卫initRouters()函数中判断否已注册路注册直接跳转没注册进行路注册样成功理户权限防止户出现越权访问情况样处理次页面需重新访问数库会频繁访问数库影响系统性种情况引入Redis户数进行缓存户第次访问系统登录调获取路信息接口时获取户路信息Redis户路信息进行存储样户需路信息时需重新查询数直接Redis中取出路信息样提升系统性
    页面具体权限Vuerouter全局守卫中页面渲染时进行处理判断权限容户没操作权限直接渲染出样户操作没权限容
    户登录进行页面跳转会首先进入Vuerouter全局守卫进行判断请求接口获取户信息路信息表处理获取路信息进行注册路信息表然通通守卫成功进入页面页面渲染时判断应户否拥权限进行渲染没权限渲染应节点样实现权限理会出现越权访问情况
    5测试
    51 登录功测试

    测试考勤理系统户登录否正常户输入时否会进行验证户密码户名输入错误时否会提示户名密码数库验证致时否成功登录系统
    表51登录功测试例
    例描述
    测试考勤理系统登录功否正常
    前置条件
    存正确户名密码登录页面正常加载
    操作步骤
    输入数
    预期结果
    实际结果
    输入正确户名密码
    户名:test
    密码:123456
    登录成功跳转首页
    登录成功跳转首页
    输入错误户名正确密码
    户名:head
    密码:123456
    登录失败弹出弹窗户名密码错误
    登录失败弹出弹窗户名密码错误
    输入正确户名错误密码
    户名:test
    密码:12345678
    登录失败弹出弹窗户名密码错误
    登录失败弹出弹窗户名密码错误


    图51测试登录功
    52 角色增删改查功测试
    测试考勤理系统中角色新增删修改查询

    表52角色增删改查功测试例
    例描述
    测试考勤理系统角色增删改查功否正常
    前置条件
    存正确角色权限台页正常加载角色理页面正常加载
    操作步骤
    输入数
    预期结果
    实际结果
    点击角色理菜单钮

    角色理页面正常加载出现默认分页查询结果
    角色理页面正常加载出现默认分页查询结果
    输入角色名点击查询钮
    角色名:test
    返回角色名中带test数
    返回角色名中带test数
    点击新增钮弹窗中输入角色名描述点击新增钮
    角色名:test2
    描述:测试数
    弹出弹窗提示新增角色成功关闭弹窗
    弹出弹窗提示新增角色成功关闭弹窗
    鼠标移动需删角色面点击显示出确认

    弹出弹窗提示删成功刷新前分页查询
    弹出弹窗提示删成功刷新前分页查询
    鼠标移动需删前页条角色面点击显示出确认

    弹出弹窗提示删成功动跳转前页分页查询
    弹出弹窗提示删成功动跳转前页分页查询
    点击修改权限弹窗中修改前角色权限修改点击保存钮

    弹出弹窗提示修改成功
    弹出弹窗提示修改成功


    图52测试角色增删改查功
    53 员工增删改查功测试
    测试考勤理系统员工新增修改查询删功

    表53员工增删改查功测试例
    例描述
    测试考勤理系统员工增删改查功否正常
    前置条件
    存正确角色权限台页正常加载员工理页面正常加载
    操作步骤
    输入数
    预期结果
    实际结果
    点击员工理菜单钮

    员工理页面正常加载出现默认分页查询结果
    员工理页面正常加载出现默认分页查询结果
    点击分页中钮2

    页面重新查询页面加载出查询结果第二页
    页面重新查询页面加载出查询结果第二页
    输入户名点击查询钮
    户名:test
    返回户名中带test数
    返回户名中带test数
    输入姓名点击查询钮
    姓名:test
    返回姓名中带test数
    返回姓名中带test数
    输入手机号点击查询钮
    手机号:132
    返回手机号中带132数
    返回手机号中带132数
    拉选择部门test点击查询

    返回部门test数
    返回部门test数
    点击新增钮弹窗中输入新增员工信息点击新增
    姓名:test3
    户名:test3
    工号:test003
    手机号:132322343334
    部门选择test
    角色选择ROLE_1
    弹出弹窗提示新增成功刷新前查询结果
    弹出弹窗提示新增成功刷新前查询结果
    点击修改钮修改户test3信息点击保存
    手机号:13123728323
    部门选择test1
    角色选择ROLE_2
    弹出弹窗提示保存成功刷新前查询结果
    弹出弹窗提示保存成功刷新前查询结果
    鼠标移动需删户面点击显示出确认

    弹出弹窗提示删成功刷新前分页查询
    弹出弹窗提示删成功刷新前分页查询
    鼠标移动需删前页户面点击显示出确认

    弹出弹窗提示删成功动跳转前页分页查询
    弹出弹窗提示删成功动跳转前页分页查询


    图53测试员工增删改查功
    53 角色户权限控制测试
    测试考勤理系统拥角色户登录菜单权限理否越权访问

    表54户权限控制测试例
    例描述
    测试考勤理系统拥角色台菜单权限操作权限否受控
    前置条件
    存正确角色权限台页正常加载拥分拥角色户账号(test账号拥页面权限test2拥部分页面权限拥户理页面编辑权限test3拥户理页面权限没编辑权限)
    操作步骤
    输入数
    预期结果
    实际结果
    输入test户账号密码点击页面查否正常
    户名:test
    密码:123456
    台页面正常显示菜单栏正常显示
    员工理页面正常加载出现默认分页查询结果
    输入test2户账号密码查页面否正常显示尝试越权访问角色理页面
    户名:test2
    密码:passwd
    址栏输入:role
    台页面正常菜单栏正常越权访问角色理页面出现404页面
    台页面正常菜单栏正常越权访问角色理页面出现404页面
    输入test3户账号密码查页面员工理页面否编辑
    户名:test3
    密码:123456
    台页面正常菜单栏正常员工理页面没新增修改删等钮
    台页面正常菜单栏正常员工理页面没新增修改删等钮


    图54 test户登录员工理页面

    图55 test2户登录员工理页面

    图56 test3户登录员工理页面
    测试通率:100
    6微信程序界面
    微信程序端员工进行签手机端程序便捷

    图61 微信程序员工登录页面

    图62微信程序员工页

    图63微信程序位置签

    图64微信程序口令签

    7结
    考勤理系统权限理模块已出具体设计实现方案进行测试考勤理系统权限理结合技术做具体实现确定实现权限理模块时候需确定应技术考虑应设计实现充分结合技术设计数库实体类样更实现前端展示户权限做控制
    时实现时考虑服务器优化Redis 做优化解决频繁请求服务器数库造成太压力问题
    考勤理系统公司考勤微信程序签户更便捷


    参考文献
    [1]林磊骆建彬邓宪等理信息系统中基角色权限控制[J]计算机应研究2002(6)8284

    附录1
    程序源代码

    **
    * 系统菜单 服务实现类
    *
    @Service
    public class MenuServiceImpl extends ServiceImpl implements MenuService {
    @Autowired
    private RoleService roleService
    @Autowired
    private MenuService menuService

    @Override
    public ResultVO getMenuFromRole() {
    HashSet authorities (HashSet) SecurityAuthUtilgetCurrentUser()getAuthorities()
    Set roleSet new HashSet<>()
    for (GrantedAuthority authority authorities) {
    roleSetadd(authoritygetAuthority())
    }
    List menusFromRoles roleServicelistMenusFromRoles(roleSet)
    HashMap menuMap new HashMap<>()
    while (true) {
    HashSet parentIds new HashSet<>(menusFromRolessize())
    for (Menu menusFromRole menusFromRoles) {
    Integer parentId menusFromRolegetParentId()
    parentIdsadd(parentId)
    String name menusFromRolegetName()
    int i nameindexOf(_)
    if (i 0)
    menusFromRolesetPath()
    else
    menusFromRolesetPath( + name)
    String s JSONObjecttoJSONString(menusFromRole)
    JSONObject jsonObject JSONObjectparseObject(s)
    jsonObjectremove(childrenId)
    jsonObjectremove(parentId)
    JSONObject metaObject new JSONObject()
    metaObjectput(title jsonObjectremove(title))
    metaObjectput(hideInMenu jsonObjectremove(hideInMenu))
    metaObjectput(icon jsonObjectremove(icon))
    jsonObjectput(meta metaObject)
    JSONArray jsonArray menuMapget(parentId)
    if (jsonArray null) {
    jsonArray new JSONArray()
    menuMapput(parentId jsonArray)
    }
    jsonArrayadd(jsonObject)
    }
    if (parentIdssize() 1 && parentIdscontains(0))
    break
    QueryWrapper queryWrapper new QueryWrapper<>()
    queryWrapperin(id parentIds)
    menusFromRoles menuServicelist(queryWrapper)
    }
    JSONArray jsonArray menuMapremove(0)
    if (jsonArray null)
    return ResultVOsuccess()
    LinkedList list new LinkedList<>()
    for (Object o jsonArray) {
    JSONObject jsonObject (JSONObject) o
    listadd(jsonObject)
    }
    while (listsize() 0) {
    JSONObject jsonObject listpoll()
    JSONArray array menuMapremove(jsonObjectgetIntValue(id))
    if (array null)
    for (Object o array) {
    JSONObject jsonObject1 (JSONObject) o
    listadd(jsonObject1)
    }
    jsonObjectput(children array)
    jsonObjectremove(id)
    }
    return ResultVOsuccess(jsonArraytoJSONString())
    }
    }
    ***vuerouter****
    import Vue from vue
    import VueRouter from vuerouter
    import store from '@store'
    import View from 'viewdesign'
    import routes from routers
    import {getTokensetToken} from '@libsutil'
    import config from '@config'
    Vueuse(VueRouter)

    const router new VueRouter({
    routes
    mode 'history'
    })
    const LOGIN_PAGE_NAME 'login'
    初始化路
    const initRouters (storetonext) > {
    登录已
    if (storestateuserhasGetInfo) {
    路加载
    if (storestateapphasGetRouter && storestateapprouters && storestateapprouterslength > 0) {
    } else {
    加载路
    storedispatch('getRouters')then(routes > {
    路重置404放
    routeraddRoutes(routes)
    routeraddRoutes([{
    path *
    redirect page404
    }])
    })catch(()>{
    })finally(() > {
    })
    }
    }
    }
    routerbeforeEach((to from next) > {
    ViewLoadingBarstart()
    const token getToken()
    if (token && toname LOGIN_PAGE_NAME) {
    未登录跳转页面登录页
    next({
    name LOGIN_PAGE_NAME 跳转登录页
    })
    } else if (token && toname LOGIN_PAGE_NAME) {
    未登陆跳转页面登录页
    next() 跳转
    } else if (token && toname LOGIN_PAGE_NAME) {
    已登录跳转页面登录页
    next({
    name confighomeName 跳转homeName页
    })
    } else {
    if (storestateuserhasGetInfo) {
    initRouters(store)
    next()
    } else {
    storedispatch('getUserInfo')then(() > {
    initRouters(storetonext)
    next()
    })catch(() > {
    setToken('')
    next({
    name LOGIN_PAGE_NAME
    })
    })
    }
    }
    })
    routerafterEach((to) > {
    ViewLoadingBarfinish()
    windowscrollTo(0 0)
    })

    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 60 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    考勤管理系统课程设计

    考勤管理系统课程设计一、背景 2二、可行性分析 22.1技术可行性 22.2 经济可行性 22.3 操作可行性 22.4结论意见 3三、需求分析 33.1功能需求 33.2 性能需求 33.3...

    2年前   
    418    0

    IkaoQin考勤管理系统

    IkaoQin考勤管理系统使用手册北京分形科技 目录一 简介 31 系统简介 32 主要特点 33 主要功能 3二 快速上手 41 初次使用 41.1 登录系统 41....

    2年前   
    365    0

    职工考勤管理系统说明书软件项目开发课程设计

    ******************* 实践教学 ******************* XX大学 计算机与通信学院 20XX年秋季学期 软件开发综合训...

    5年前   
    1507    0

    课堂考勤管理系统设计与实现毕业论文

    课堂考勤管理系统设计与实现毕业论文摘要本设计是以Visual Studio 2010作为开发平台,C#作为开发语言,结合SQL server 2008数据库开发设计的课堂考勤管理系统。该系统的...

    4年前   
    575    0

    数据库课程设计公司或单位员工考勤管理系统

    目录1 概述 11.1设计背景 11.2研究目的 11.3理论基础的分析 21.4预期结果和意义 22 需求分析 22.1功能需求 22.2数据流图 32.3功能模块图 42.4系统数据流程图...

    6个月前   
    206    0

    毕业设计管理系统的设计与实现

    毕业设计管理系统的设计与实现 摘 要 随着Internet的飞速发展及互联网的普及,计算机已广泛用于政府、军事、科研、商业等部门,连接到千家万户,利用计算机实现毕业设计管...

    5年前   
    2634    0

    设计质量管理系统

    设计质量管理系统〈设计师标准手册〉销售管理部目 录前 言第一章 设计人员工作标准一、 咨询标准二、 签单工作流程三、 签约标准四、 设计、报价标准五、 设计制图标准第二章 设计审核人员...

    2天前   
    62    0

    学校用户登记和操作权限管理制度

    学校用户登记和操作权限管理制度1、校园网的所有服务器、主干交换机及其他系统主要设备由网络技术员负责管理,任何人不得擅自操作网络设备,修改网络参数和服务期等。2、信息中心分配给各部门的上传下载口...

    2年前   
    426    0

    考勤管理系统的假期管理标准范文

    考勤管理系统的假期管理标准范文  病假管理  员工因病或非因公负伤不能工作,在诊治期间,必须持县级及以上公立医院病假证明等有关材料,到所在单位办理请假手续,经批准后,方可休病假并按病假考勤。 ...

    2年前   
    248    0

    银行账户管理系统(c++课程设计)

     2015-2016学年第二学期 面向对象程序设计(c++)大作业说明书学院名称: 计算机与信息工程学院 班级名称: 计算机科学与技术(对口)...

    3年前   
    728    0

    权限管理制度

    权限管理制度第一条、对系统内用户ID(包括增加、修改用户ID)的权限分配原则是:既要有科学依据,又不能任意分配,同时必须使用户ID既满足业务需求,又不能超越职责范围。第二条、对系统内用户ID的...

    3年前   
    583    0

    考勤管理

     修 订 记 录 版次 修 订 内 容 修订日期 01 新发行 02 03 04 05 06 ...

    14年前   
    18669    0

    软件项目管理之学生管理系统课程设计

     课程设计课程名称:软件项目管理 设计题目:学生管理系统项目工作计划 学 院:信息工程与自动化学院 ...

    1年前   
    400    0

    角色与场景设计

     角色与场景设计 一、课程介绍 角色结构与比例 写实的感染力 角色的组合关系 色彩设定 角度与透视 动漫场景分析 动漫场景创作 角色骨骼与肌肉 角色头部设计 角色...

    5年前   
    2457    0

    基于JAVA WEB的考勤系统设计与实现

    基于 JAVA WEB 的考勤系统设计和实现Design and Implementation of Attendance System Based on JAVA WEB摘要科技的发展,带动...

    10个月前   
    363    0

    C语言课程设计学生考勤系统

    设计任务:C语言课程设计任务书题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、出勤情况等。本系统可模拟考勤过程,记录考勤结果,并能够...

    2年前   
    523    0

    超市管理系统的设计与分析

    网络和超市的大规模发展以及迅速发展的趋势,许多行业需要用到软件开发技术和工具。各种管理系统已成为行业发展不可或缺的重要功能。每一种管理系统都为该行业的发展和扩大提供了基础设施和竞争平台,同时也为...

    3年前   
    965    0

    仓库管理系统的设计与实现

    1 绪论随着社会经济的不断进展,各个企业也面临着各种机遇和挑战。为了能够在这个信息化的时代连续进展下去,就必需紧跟上时代的脚步。随着网络技术的不断进展, 现代物流技术也在不断的更换代。传统的人...

    1年前   
    275    0

    电子公文管理系统设计与实现

    电子公文管理系统设计与实现  1 引言   公文是政府军队等各类部门请示汇报、命令下达等工作中的重要部分。传统的公文归档以纸质原件为主,存放在档案局等部门,当归档公文数目逐渐增多时,公文的查找...

    9年前   
    827    0

    图书馆管理系统概要设计

    图书馆管理系统概要设计引言1.1 编写目的由前面的需求分析,得出了系统的基本需求,和基本的数据流图,要实现整个系统,需要对用户的需求进行设计,概要设计主要是利用比较抽象的语言对整个需求进行概括...

    1年前   
    366    0

    文档贡献者

    平***苏

    贡献于2022-03-04

    下载需要 60 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档