HTML
<!--<%@ page language="java" pageEncoding="UTF-8"%>-->
<!--新建菜单-->
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 content_style_div">
<div class="add_div">
<form id="add_form" onsubmit="return false">
<fieldset class="school_fieldset">
<legend>添加菜单数据</legend>
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 form_div">
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">系统编号:<em class="star_em"></em></label>
<select class="default_select" id="sysCode" required>
</select>
</div>
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">菜单编号:<em class="star_em"></em></label>
<input type="text" id="menuCode" numOnly="true" name="b1" class="default_input" placeholder="" required />
</div>
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">菜单名称:<em class="star_em"></em></label>
<input type="text" id="menuName" name="b2" class="default_input" required />
</div>
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">菜单别名:<em class="star_em"></em></label>
<input type="text" id="menuAlias" name="b3" class="default_input" required />
</div>
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">父菜单编号:</label>
<input type="text" id="parentCode" numOnly="true" name="b4" class="default_input" />
</div>
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">菜单URL:<em class="star_em"></em></label>
<input type="text" id="menuUrl" name="b5" class="default_input" required />
</div>
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">层级:<em class="star_em"></em></label>
<input type="text" id="level" name="b6" class="default_input" required/>
</div>
<div class="col-lg-6 -col-md-6 col-sm-12 col-xs-12">
<label class="allwidth_label">序号:<em class="star_em"></em></label>
<input type="text" id="seqNum" numOnly="true" name="b7" class="default_input" required />
</div>
<div class="newly_center_button_div">
<button class="default_btn newschool" type="submit" onclick="treegrid.add_btn()">创建</button>
<button class="default_btn anti_btn clicked" type="reset" value="Reset">重置</button>
</div>
</div>
</fieldset>
</form>
</div>
<div id="tableMain" class="tree_table">
<div class="allwidth_pb_label">
<button class="default_btn gray_btn" onclick="treegrid.import_menu_data()">导入数据</button>
<button class="default_btn gray_btn" onclick="treegrid.export_menu_data()">导出数据</button>
</div>
<table id="tb"></table>
</div>
</div>
<!--修改内容弹出窗口-->
<script type="text/html" id="menu_template">
<form id="menu" onsubmit="return false">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">系统编号<em class="star_em"></em></label><input type="text" class="default_input" id="inputtext_00" placeholder="系统编号" name="p0" required /></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">菜单编号<em class="star_em"></em></label><input type="text" class="default_input" id="inputtext_01" placeholder="菜单编号" name="p1" numOnly="true" required/></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">菜单名称<em class="star_em"></em></label><input type="text" class="default_input" id="inputtext_02" placeholder="菜单名称" name="p2" required /></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">菜单别名<em class="star_em"></em></label><input type="text" class="default_input" id="inputtext_03" placeholder="菜单别名" name="p3" required /></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">父菜单编号</label><input type="text" class="default_input" id="inputtext_04" placeholder="父菜单编号" numOnly="true" name="p4" /></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">菜单URL<em class="star_em"></em></label><input type="text" class="default_input" id="inputtext_05" placeholder="菜单URL" name="p5" required /></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">层级<em class="star_em"></em></label><input type="text" class="default_input" id="inputtext_06" placeholder="层级" name="p6" required /></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><label class="allwidth_label">序号<em class="star_em"></em></label><input type="text" class="default_input" id="inputtext_07" placeholder="序号" name="p7" numOnly="true" required /></div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12"><input type="hidden" class="default_input" id="inputtext_08" /></div>
</form>
</script>
<!--增加角色弹出窗口-->
<script type="text/html" id="addrole_template">
<form id="addrole" onsubmit="return false" class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="col-12 text-center">当前菜单名称:<span id="role_name"></span> 菜单编号:<span id="role_id"></span></div>
<fieldset class="school_fieldset">
<legend>角色类型</legend>
<div class="create_role_div">
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="00" />超级管理员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="10" />牧分管理员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="11" />牧分运维员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="20" />渠道管理员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="21" />渠道运维员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="30" />学校管理员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="31" />校长</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="32" />教务</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="33" />年级组长</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="34" />班主任</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="35" />教研组长</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="36" />备课组长</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="37" />任课老师</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="40" />机构管理员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="41" />机构教研员</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="42" />机构校长</label>
<label class="col-lg-3 col-md-3 col-sm-6 col-xs-6"><input type="checkbox" value="50" />家长用户</label>
</div>
</fieldset>
</form>
</script>
js
var treeData = {};
var treegrid={
//添加按钮
add_btn: function(){
//限定只能输入数字方法
Men.only_number();
//校验
$("#add_form").formValidator();
var r = $("#add_form").validate().form();
if(r){
var sysCode = $("#sysCode").val().trim();
//var menuCode = sysCode+''+$("#menuCode").val().trim();
var menuCode = $("#menuCode").val().trim();
var menuName = $("#menuName").val().trim();
var menuAlias = $("#menuAlias").val().trim();
var parentCode = $("#parentCode").val().trim();
var menuUrl = $("#menuUrl").val().trim();
var level = $("#level").val().trim();
var seqNum = $("#seqNum").val().trim();
//treeData.push(list);console.log(treeData);
treegrid.clearError();
if(parentCode != ''){
var data = {
"sys.sysCode" : sysCode,
"menuCode" : menuCode,
"menuName" : menuName,
"menuAlias" : menuAlias,
"parent.menuCode" : parentCode,
"menuUrl" : menuUrl,
"level" : level,
"seqNum" : seqNum
};
}else{
var data = {
"sys.sysCode" : sysCode,
"menuCode" : menuCode,
"menuName" : menuName,
"menuAlias" : menuAlias,
"menuUrl" : menuUrl,
"level" : level,
"seqNum" : seqNum
};
}
var datas=treegrid.judge_newly('../ume/sys/um/menu/create',data);
}
},
judge_newly:function(url,datas,dt){
$(".default_btn.edit_row_btn").attr("disabled","disabled");
Men.close_window();
Tomd.wait('保存中...');
var td = dt || 'table';
var v = treegrid.post_data(url,datas);
if(v.code==0){
Tomd.waitok();
treegrid.reset_treegrid();
return true;
}
else{
Tomd.waitok();
return false;
}
},
post_data : function(url, data) {
//Tomd.wait('加载中...');
var datas;
$.ajax({
type : "post",
async:false,
url : url,
data : data,
success : function(s) {
//Tomd.waitok();
datas = s;
Tomd.toast('right', 'success', s.message);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
datas = XMLHttpRequest;
console.error("XMLHttpRequest:",XMLHttpRequest);
console.error("textStatus:",textStatus);
console.error("errorThrown:",errorThrown);
//Tomd.toast('right', 'error', e.data.message);
}
});
return datas;
},
getTreeData : function(){
var data = {};
treeData = Men.get_data("../ume/sys/um/menu/list", data);
},
//生成treeTable
create_treeTable: function(){
$('#tb').treegridData({
id: 'menuCode',
parentColumn: 'parentCode',
data:treeData,
// type: "GET", //请求数据的ajax类型
// url: '../ume/sys/um/menu/list', //请求数据的ajax的url
ajaxParams: {}, //请求数据的ajax的data属性
animate:true, //是否开启动画
expandColumn: null,//在哪一列上面显示展开按钮
fitColumns:true, //设置为true,则会自动扩大或缩小列的尺寸以适应网格的宽度并且防止水平滚动。
striped: true, //是否各行渐变色
bordered: true, //是否显示边框
//expandAll: false, //是否全部展开
columns: [
{
title: '菜单名称',
field: 'menuName',
checkbox: '1'
},
{
title: '菜单别名',
field: 'menuAlias'
},
{
title: '菜单编号',
field: 'menuCode'
},
{
title: '系统编号',
field: 'sys.sysCode'
},
{
title: '父菜单编号',
field: 'parentCode'
},
{
title: '父菜单名称',
field: 'parent.menuName'
},
{
title: '菜单url',
field: 'menuUrl'
},
{
title: '层级',
field: 'level'
},
{
title: '序号',
field: 'seqNum'
},
{
title: '编辑'
}
]
});
},
//修改窗口 打开
editor_open: function (code){
var html = $("#menu_template").html();
Men.new_window('修改菜单信息', html, '取消', this.editor_btn);
$('.center_button_div').prepend('<button class="default_btn edit_row_btn" onclick="Men.alert_ok()">保存</button>');
//要用ajax找后台数据. 下一条是本地数据,程序员删掉!
var data={code: code};
var datas = Men.get_data("../ume/sys/um/menu/get", data);
//限定只能输入数字方法
Men.only_number();
$("#inputtext_00").val(datas.sys.sysCode);
$("#inputtext_01").val(datas.menuCode);
$("#inputtext_02").val(datas.menuName);
$("#inputtext_03").val(datas.menuAlias);
if(datas.parent != undefined){
$("#inputtext_04").val(datas.parent.menuCode);
}
$("#inputtext_05").val(datas.menuUrl);
$("#inputtext_06").val(datas.level);
$("#inputtext_07").val(datas.seqNum);
$("#inputtext_08").val(datas.id);
},
//修改窗口 按钮
editor_btn: function(){
//校验
$("#menu").formValidator();
var r = $("#menu").validate().form();
if (r) {
//从input中传值
var sysCode = $("#inputtext_00").val().trim();
var menuCode = $("#inputtext_01").val().trim();
var menuName = $("#inputtext_02").val().trim();
var menuAlias = $("#inputtext_03").val().trim();
var parentCode = $("#inputtext_04").val().trim();
var menuUrl = $("#inputtext_05").val().trim();
var level = $("#inputtext_06").val().trim();
var seqNum = $("#inputtext_07").val().trim();
var id = $("#inputtext_08").val().trim();
var datas = {
"id" : id,
"sys.sysCode" : sysCode,
"menuCode" : menuCode,
"menuName" : menuName,
"menuAlias" : menuAlias,
"menuUrl" : menuUrl,
"level" : level,
"seqNum" : seqNum
};
if(parentCode != ''){
var datas = {
"id" : id,
"sys.sysCode" : sysCode,
"menuCode" : menuCode,
"menuName" : menuName,
"menuAlias" : menuAlias,
"parent.menuCode" : parentCode,
"menuUrl" : menuUrl,
"level" : level,
"seqNum" : seqNum
};
}else{
var datas = {
"id" : id,
"sys.sysCode" : sysCode,
"menuCode" : menuCode,
"menuName" : menuName,
"menuAlias" : menuAlias,
"menuUrl" : menuUrl,
"level" : level,
"seqNum" : seqNum
};
}
treegrid.judge_editor('../ume/sys/um/menu/update', datas);
}
},
judge_editor:function(url,datas,dt){
Men.close_window();
Tomd.wait('修改中...');
var td = dt || 'table';
var v = Men.post_data(url,datas);
if(v.code==0){
Tomd.waitok();
treegrid.reset_treegrid();
return true;
}
else{
Tomd.waitok();
return false;
}
},
//清空错误提示和校验
clearError: function(){
document.getElementById("add_form").reset();
setTimeout(function(){
$("#add_form input").removeClass("error");
$("#add_form label.error").remove();
},100);
},
//删除按钮
del_btn: function(code){
//ajax删除
treegrid.del_list({id:`${code}`},0,'../ume/sys/um/menu/delete');
},
del_list:function(data,row,url,td,con){
var td = td || 'table';
var content = con || '确实要删除此条吗?';
var html=`<div class="center_text_div">${content}</div>`;
Men.new_window('删除此条', html, '取消');
$("#newwind .center_popup").addClass("wid20");
$('#newwind .center_button_div').prepend('<button class="default_btn edit_row_btn" onclick="Men.alert_ok()">删除</button>');
$("#newwind .edit_row_btn").on("click",function(){
treegrid.del_list_btn(data,row,url,td);
});
},
//删除按钮
del_list_btn: function(data,row,url,td){
Tomd.wait('删除中...');
if(url){
//eval(td).row(row).remove().draw(false);
//后端删除
var v = 1;
$.ajax({
type : "post",
async:false,
url : url,
data : data,
success : function(s) {
v = s.code;
Tomd.toast('right', '', '删除成功');
},
error : function(e) {
console.error(e.message);
}
});
Men.close_window();
if(v == 0)
{
treegrid.reset_treegrid();
Tomd.waitok();
return true;}
else{
Tomd.waitok();
return false;
}
}
},
//增加子菜单按钮
addmenu_btn: function(code){
$("#parentCode").val(code);
},
//刷新treegrid
reset_treegrid: function(){
$("#tb").empty();
this.getTreeData();
treegrid.create_treeTable();
},
//系统分类
sysList: function(){
var data = {};
var datas = Men.get_data("../ume/sys/um/menu/sysList", data);
sys_data = datas;
var nou = "";
$.each(sys_data, function(index, value) {
nou += `<option value="${value.sysCode}">${value.sysName}</option>`;
});
$("#sysCode").html(nou);
},
//打开导入数据窗口
import_menu_data: function(){
var html=`<div class="col-12"><div class="text-right" style="margin-bottom:.5rem"><button class="default_btn" onclick="treegrid.downTemplate()">下载模板</button></div><input type="file" name="file" class="dropify-fr"
data-default-file="" mulpiple /></div>`;
Men.new_window('导入数据',html,'取消',treegrid.import_data_btn);
$('.center_button_div').prepend('<button class="default_btn edit_row_btn" onclick="Men.alert_ok()">导入</button>');
//初始化上传控件
Men.dropify();
},
//导入数据窗口 导入按钮
import_data_btn: function(){
alert($("input[type='file']").val());
Tomd.toast('','warning','导入成功!');
Men.close_window();
},
//下载模板按钮
downTemplate: function(){
alert("下载模板");
},
//导出数据按钮
export_menu_data: function(){
alert("导出的数据已在打印窗口中!");
var export_data = [];
var trs = $("#tb").find("tr");
$.each(trs, function(){
var chk = $(this).find("input[type='checkbox']");
if(chk.is(":checked"))
{
var kid = chk.attr("data-id");
$.each(treeData, function(index,value){
if(kid == value.menuCode)
export_data.push(value);
});
}
});
console.log(export_data);
},
//增加角色按钮,弹出窗口
addrole_btn: function(code, name){
var html = $("#addrole_template").html();
Men.new_window('添加角色',html,'取消',treegrid.create_role_btn);
$('.center_button_div').prepend('<button class="default_btn edit_row_btn" onclick="Men.alert_ok()">创建</button>');
$("#role_name").text(name);
$("#role_id").text(code);
},
//创建角色按钮
create_role_btn: function(){
//ID名在此
var menuCode = $("#role_id").text();
var role_children = $(".create_role_div").find("input[type='checkbox']");
var role_data = [];
$.each(role_children, function(){
var obj = $(this);
if(obj.is(":checked")){
var obj_data = {};
obj_data.roleCode = obj.val();
//obj_data.name =obj.parent().text();
role_data.push(obj_data);
}
});
var datas = {
menuCode : menuCode,
roles : JSON.stringify(role_data)
};
$.ajax({
method : "POST",
url : "../ume/sys/um/menuAuthorization/saveMenuAuths",
data : datas,
success : function(data) {
if (data.code == 0) {
alert("绑定成功!");
}
}
})
Men.close_window();
},
//增加子菜单按钮
addchildren_btn: function(code){
$("#parentCode").val(code);
},
//自动运行
init: function(){
this.sysList();
this.getTreeData();
this.create_treeTable();
Men.only_number();
}
};
treegrid.init();
//增加功能按钮
function trees(treeNode){
var htmlStr = '';
htmlStr +=`<button class="default_btn_small green_btn" title="修改" onclick="treegrid.editor_open('${treeNode.id}')"><i class="iconfont icon-bianji"></i>修改</button>`;
htmlStr +=`<button class="default_btn_small red_btn" title="删除" onclick="treegrid.del_btn('${treeNode.id}')"><i class="iconfont icon-shanchu"></i>删除</button>`;
htmlStr += `<button class="default_btn_small gray_btn" title="增加子菜单" onclick="treegrid.addchildren_btn('${treeNode.id}')"><i class="iconfont icon-guanli"></i>增加子菜单</button>`;
htmlStr += `<button class="default_btn_small purple_btn" title="增加角色" onclick="treegrid.addrole_btn('${treeNode.id}', '${treeNode.menuName}')"><i class="iconfont icon-guanli"></i>增加角色</button>`;
return htmlStr;
};
package com.moofen.cube.controller.ume.sys.um;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.moofen.core.entity.sys.um.Menu;
import com.moofen.cube.controller.base.BaseController;
import com.moofen.cube.service.ume.sys.um.MenuService;
@Controller
@RequestMapping("/ume/sys/um/menu")
public class MenuController extends BaseController{
@Resource(name = "menuService")
private MenuService menuService;
@ResponseBody
@GetMapping("/list")
public JSONObject list(HttpServletRequest request) {
return menuService.list();
}
@ResponseBody
@GetMapping("/get")
public JSONObject get(HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("code", request.getParameter("code"));
return menuService.get(params);
}
@ResponseBody
@PostMapping("/create")
public JSONObject create(Menu menu) {
return menuService.create(JSON.toJSONString(menu));
}
@ResponseBody
@PostMapping("/update")
public JSONObject update(Menu menu) {
return menuService.update(JSON.toJSONString(menu));
}
@ResponseBody
@PostMapping("/delete")
public JSONObject delete(HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("code", request.getParameter("id"));
return menuService.delete(params);
}
@ResponseBody
@GetMapping("/sysList")
public JSONObject sysList(HttpServletRequest request) {
return menuService.sysList();
}
}