第七章 机构管理和功能菜单权限分配

提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正。


文章目录

  • 第七章 机构管理和功能菜单权限分配
  • 前言
  • 一、机构管理
    • 1.Layui集成zTree
    • 2.创建机构管理前端包结构
    • 3.在数据库写入数据
    • 4.后端树形生成方法
    • 5.新增
    • 6.修改
    • 7.删除
  • 二、功能菜单权限分配
    • 1.新增
    • 2.修改
    • 3.删除
  • 总结

前言

这一章将介绍如何实现机构管理和功能菜单权限分配


一、机构管理

1.Layui集成zTree

打开zTree官网:http://www.treejs.cn/v3/main.php#_zTreeInfo

解压到【高校宿舍管理系统】文件夹

创建zTree文件夹

拷贝样式及图片文件

拷贝ztree模块

建立模块入口和出口

引入layui.jquery

引入css文件

在lay-config.js中注册zTree

2.创建机构管理前端包结构

创建org文件夹

编写lsit页面

<div class="layuimini-container layuimini-page-anim"><div class="layuimini-main"><div class="layui-btn-container"><button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"><i class="layui-icon layui-icon-add-circle"></i>新增</button><button class="layui-btn layui-btn-sm layui-btn-normal data-update-btn" lay-event="update"><i class="layui-icon layui-icon-edit"></i>修改</button><button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"><i class="layui-icon layui-icon-delete"></i>删除</button></div><div class="ztree" id="ztree"></div></div>
</div><script>layui.use(['element','axios','ztree'], function () {let $ = layui.jquery,axios = layui.axios,ztree = layui.ztree;let setting = {data: {simpleData: {enable: true}}};axios.get('org/tree').then(function (response) {ztree.init($("#ztree"), setting,response.data);}).catch(function (error) {console.log(error);});});
</script>

3.在数据库写入数据

4.后端树形生成方法

在OrgController中添加生成树的方法

在OrgController中添加获取子节点的递归方法

5.新增

创建org.js模块(下拉选择框)

layui.define(['ztree', 'jquery','axios'], function (exports) {"use strict";let MOD_NAME = 'selectOrg',$ = layui.jquery,axios = layui.axios,ztree = layui.ztree;let selectOrg = function () {this.v = '1.1.0';};/*** 初始化ztree*/selectOrg.prototype.render = function (opt) {let elem = $(opt.elem);let tableDone = opt.done || function(){};opt.height = opt.height || 315;//最小宽度opt.width = opt.width || 300;elem.off('click').on('click', function(e) {e.stopPropagation();if($('div.treeSelect').length >= 1){return false;}let t = elem.offset().top + elem.outerHeight()+"px";let l = elem.offset().left +"px";let treeBox = '<div class="treeSelect layui-anim layui-anim-upbit" style="left:'+l+';top:'+t+';border: 1px solid #d2d2d2;background-color: #fff;box-shadow: 0 2px 4px rgba(0,0,0,.12);padding:10px 10px 0 10px;position: absolute;z-index:66666666;margin: 5px 0;border-radius: 2px;min-width:'+opt.width+'px;max-height: 300px;overflow: auto;">';if(opt.checked){treeBox += '<div><button type="button" style="float: right" class="layui-btn layui-btn-normal layui-btn-sm tree-sure">确定</button></div>';}treeBox += '<div class="ztree" id="ztree_xx">';treeBox += '</div>';treeBox = $(treeBox);$('body').append(treeBox);let setting = {data: {simpleData: {enable: true}},callback:{onClick:function (event, treeId, treeNode) {if(!opt.checked){$('.treeSelect').remove();opt.done([treeNode]);}}},check:{enable: opt.checked}};axios.get('org/tree').then(function (response) {ztree.init($("#ztree_xx"), setting,response.data);let treeObj = ztree.getZTreeObj("ztree_xx");if(opt.checked){//初始化checkedopt.selected.forEach(v=>{let checkNodes = treeObj.getNodesByParam("id",v,null);treeObj.checkNode(checkNodes[0],true);})//确定事件$('.tree-sure').click(function () {let arr = treeObj.getCheckedNodes(true);opt.done(arr);opt.selected = arr.map(item=>item.id);treeBox.remove();});}}).catch(function (error) {console.log(error);});$(document).mouseup(function(e){let userSet_con = $(''+opt.elem+',.treeSelect');if(!userSet_con.is(e.target) && userSet_con.has(e.target).length === 0){treeBox.remove();}});}); //elem end}exports(MOD_NAME, new selectOrg());
})

在lay-config.js中注册SelectOrg

完成add页面

<div class="layuimini-main"><div class="layui-form layuimini-form"><div class="layui-form-item"><label class="layui-form-label required">名称</label><div class="layui-input-block"><input type="text" name="name" lay-verify="required" lay-reqtext="名称不能为空" placeholder="请输入名称" value="" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">上级栏目</label><div class="layui-input-block"><input type="hidden" name="parentId" id="parentId"  placeholder="请选择上级栏目" value="" class="layui-input"><input type="text" name="parentName" readonly id="parentName" placeholder="请选择上级栏目" value="" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label" required>类型</label><div class="layui-input-block"><select name="type" id="type" lay-verify="required"><option value="">请选择类型</option><option value="1">学院</option><option value="2">系</option><option value="3">专业</option><option value="4">班级</option></select></div></div><div class="layui-form-item"><label class="layui-form-label" required>年级</label><div class="layui-input-block"><select name="gradeId" id="gradeId" lay-verify="required"></select></div></div><div class="layui-form-item layui-form-text"><label class="layui-form-label">备注信息</label><div class="layui-input-block"><textarea name="remark" class="layui-textarea" placeholder="请输入备注信息"></textarea></div></div><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button></div></div></div>
</div>
<script>layui.use(['form', 'table','axios','selectOrg'], function () {let form = layui.form,layer = layui.layer,selectOrg = layui.selectOrg,axios = layui.axios,$ = layui.$;/*** 初始化表单,要加上,不然刷新部分组件可能会不加载*/form.render();// 当前弹出层,防止ID被覆盖let parentIndex = layer.index;selectOrg.render({elem:'#parentName',selected:[],checked:false,done:function (data) {$('#parentId').val(data[0].id);$('#parentName').val(data[0].name);}});axios.post('grade/query',{}).then(function (response) {let options = '<option value="">请选择年级</option>';for(let obj of response.data){options+='<option value="'+obj.id+'">'+obj.name+'</option>'}console.log(options);$('#gradeId').append(options);form.render('select');}).catch();//监听提交form.on('submit(saveBtn)', function (data) {axios.post('org/create',data.field).then(function(response){if(response.code == 200){layer.msg(response.msg);window.reload();}layer.close(parentIndex);}).catch(function (error) {layer.msg(error);});return false;});});
</script>

在list页面中完成add事件监听,引入miniPage模块(略)

在list页面中完成新增后重新渲染树形的方法

6.修改

拷贝add作为模板

添加隐藏域

在list页面中完成update事件监听

表单赋值

设值方法,引入form模块(略)

提交接口改为update

7.删除

在list页面中完成delete事件监听

后端删除方法改为单个删除

二、功能菜单权限分配

1.新增

在MenuController中添加一个树形

在MenuMapper.xml中修改查表语句

在user/add.html中请求树形

显示【功能权限】树形

引入ztree(略)并配置

在监听提交时获取id并传给后端修改

在User类中添加ids属性并生成set/get方法

在UserService中完善create方法

2.修改

在UserService中完善update和updateSelective方法

在update表单显示【功能权限】树形

引入ztree(略)并配置

完善MenuController中的tree方法,判断用户当前已经有的功能

完善update.html中的请求参数

完善update.html的监听提交

3.删除

在UserService中完善delete方法


总结

难点:
1.学习使用zTree的API文档

第八章预计三天内更新,涉及学生管理和楼宇管理以及宿舍管理

【高校宿舍管理系统】第七章 机构管理和功能菜单权限分配相关推荐

  1. 【高校宿舍管理系统】第八章 学生管理和楼宇管理以及寝室管理

    第八章 学生管理和楼宇管理以及宿舍管理 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第八章 学生管理和楼宇管理以及宿舍管理 ...

  2. 【高校宿舍管理系统】终章 完成主页以及项目总结

    终章 完成主页以及项目总结 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 终章 完成主页以及项目总结 前言 一.完成主页 1. ...

  3. 【高校宿舍管理系统】第十章 缺勤管理、报修管理、来访人员管理以及公告管理

    第十章 缺勤管理.报修管理.来访人员管理以及公告管理 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第十章 缺勤管理.报修管理 ...

  4. 【高校宿舍管理系统】第九章 寝室编号设置和宿舍初始化以及预选设置

    第九章 寝室编号设置和宿舍初始化以及预选设置 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第九章 寝室编号设置和宿舍初始化以 ...

  5. 【高校宿舍管理系统】第二章 整合Mybatis和写CRUD的基本流程以及使用代码生成器生成Mapper等相关代码

    第二章 整合Mybatis和写CRUD的基本流程以及使用代码生成器生成Mapper等相关代码 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正 ...

  6. 【高校宿舍管理系统】第一章 建立数据库以及项目框架搭建

    第一章 建立数据库以及项目框架搭建 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第一章 建立数据库以及项目框架搭建 前言 一 ...

  7. 【高校宿舍管理系统】第六章 用户管理和年级管理

    第六章 用户管理和年级管理 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第六章 用户管理和年级管理 前言 一.用户管理 1. ...

  8. 高校宿舍管理系统详细需求分析说明书

    (详细)高校宿舍管理系统需求分析说明书(文末-->获取原文档)   版本状态   版本 作者 参与者 起止日期 注释 审阅者 团队 版本 日期 签名 教学管理委员会 V1.1 2019.06.1 ...

  9. 【高校宿舍管理系统】第三章 Layui整合Axios

    第三章 Layui整合Axios 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第三章 Layui整合Axios 前言 一.下 ...

最新文章

  1. 关于服务器端控件的attributes属性的奇怪问题
  2. python开发环境wingide的安装与破解
  3. spring cloud config注意点(疑问)
  4. SIFT(Scale-invariant feature transform, 尺度不变特征转换)特征
  5. ThinkPad T61安装Ubuntu9.10全记录
  6. python多种推导式的实现
  7. 25美元 Linux PC 'Raspberry Pi' 一月上市
  8. 如何快速理解递归——看这个就可以了
  9. mysql运营_为线上运营Mysql数据库设置从库
  10. 0501 0503 模块区别_金川区西门子控制器模块CPU313C哪里有
  11. 构造一个简单的神经网络,以DQN方式实现小游戏的自动控制
  12. linux下的5个查找命令
  13. Docker提高拉取官网镜像的速度
  14. 说说家乡的旅游景点吧...
  15. c语言总分和平均分,用C语言编程平均分数
  16. 【noip模拟题】天神下凡(贪心)
  17. 经典练习项目门级的三个案列
  18. 禁止 自动 安装 android,如何永远禁止手机安装拼多多?永远禁止手机安装拼多多的方法[多图]...
  19. gmail邮箱中显示的名字如何修改?
  20. leetcode 974. Subarray Sums Divisible by K的解法(统计共同余数)

热门文章

  1. java 身份证地址提取籍贯_从身份证号码中提取信息,这些方法请收好
  2. python async socket_Python开发中常用的标准库,这些都是你应该掌握的
  3. Spring入门-框架搭建
  4. 解决vue视图不渲染
  5. 分布式对象存储 读书笔记(一) 开始
  6. Jenkins 利用HTML Publisher plugin实现HTML文档报告展示
  7. 代码的抽象三原则【转载】
  8. JNI_Android项目中调用.so动态库实现详解【转】
  9. [转载]什么是 Design Hackathon?
  10. 获取存储过程返回值及代码中获取返回值(转)