1.前台html

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>丰缘管理系统 - 顺丰速运集团</title>
<%@include file="../header.jsp"%>
</head>
<body><table id="function_tb" class="easyui-treegrid" treeField="funcName"></table><div id="dlg" class="easyui-dialog"style="width: 500px; height: 250px; padding: 10px 30px;" title="添加功能"buttons="#dlg-buttons" closed="true"><form id="ff" action="../service/func/add" method="post"><table><tr><td>上级菜单:</td><td><select class="easyui-combotree" id="add_select" url = "../service/func/allTree"name="parentId" style="width: 156px;" /></td></tr><tr><td>功能名称:</td><td><input type="text" name="funcName" style="width: 350px;" /></td></tr><tr><td>功能路径:</td><td><input type="text" name="url" style="width: 350px;" /></td></tr></table></form></div><div id="dlg-buttons"><a href="#" class="easyui-linkbutton" iconCls="icon-ok"onclick="addFunc()">确定</a> <a href="#" class="easyui-linkbutton"iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">取消</a></div><script type="text/javascript"src="<%=request.getContextPath()%>/js/admin/function.js"></script>
</body>
</html>

2.前台js

/*** 初始化界面*/
var dataGrid;
var rowEditor = undefined;
$(function() {hideDialog();dataGrid = $("#function_tb").treegrid({url : "../service/func/all",// 加载的URLidField : "id",method : "GET",treeField : "funcName",pagination : false,// 显示分页fit : true,// 自动补全fitColumns : true,singleSelect : true,iconCls : "icon-save",// 图标columns : [ [ // 每个列具体内容
                                {field : 'id',title : '编号',align : 'center',width : 100,},{field : 'funcName',title : '功能名称',align : 'center',width : 100,editor : 'text'},{field : 'url',title : '功能路径',align : 'center',width : 100,editor : 'text'},{field : 'createTm',title : '创建时间',align : 'center',width : 100},{field : 'modifiedTm',title : '修改时间',align : 'center',width : 100},{field : 'isDelete',title : '是否禁用',align : 'center',width : 100,editor : {type : 'checkbox',options : {on : '1',off : '0'}},formatter : function(value, row, index) {if (value == '0') {return '<span style="color:green">正常</span>';} else {return '<span style="color:red">禁用</span>';}}} ] ],toolbar : [ // 工具条
                                {text : "增加",iconCls : "icon-add",handler : function() {// 回调函数
                                        openDialog();}},{text : "删除",iconCls : "icon-remove",handler : function() {var rows = dataGrid.treegrid('getSelections');if (rows.length <= 0) {$.messager.alert('警告', '您没有选择','error');} else if (rows.length > 1) {$.messager.alert('警告', '不支持批量删除','error');} else {$.messager.confirm('确定','您确定要删除吗',function(t) {if (t) {$.ajax({url : '../service/func/del',method : 'POST',data : rows[0],dataType : 'json',success : function(r) {if (r.code == "1") {dataGrid.treegrid('acceptChanges');$.messager.show({msg : r.msg,title : '成功'});editRow = undefined;dataGrid.treegrid('reload');} else {dataGrid.treegrid('beginEdit',editRow);$.messager.alert('错误',r.msg,'error');}dataGrid.treegrid('unselectAll');}});}})}}},{text : "修改",iconCls : "icon-edit",handler : function() {var rows = dataGrid.treegrid('getSelections');if (rows.length == 1) {if (rowEditor == undefined) {//var index = dataGrid.treegrid('getRowIndex', rows[0]);var index = rows[0].id;rowEditor = index;dataGrid.treegrid('unselectAll');dataGrid.treegrid('beginEdit',index);}}}}, {text : "保存",iconCls : "icon-save",handler : function() {dataGrid.treegrid('endEdit', rowEditor);rowEditor = undefined;}}, {text : "取消编辑",iconCls : "icon-redo",handler : function() {dataGrid.treegrid('cancelEdit', rowEditor);rowEditor = undefined;}} ],onAfterEdit : function(rowIndex, rowData, changes) {var inserted = dataGrid.treegrid('getChanges','inserted');var updated = dataGrid.treegrid('getChanges','updated');if (inserted.length < 1 && updated.length < 1) {editRow = undefined;dataGrid.treegrid('unselectAll');return;}var url = '';if (inserted.length > 0) {url = '../service/func/add';}if (updated.length > 0) {url = '../service/func/update';}$.ajax({url : url,method : "POST",data : rowIndex,dataType : 'json',success : function(r) {if (r.code=="1") {dataGrid.treegrid('acceptChanges');$.messager.show({msg : r.msg,title : '成功'});editRow = undefined;dataGrid.treegrid('reload');} else {/* datagrid.treegrid('rejectChanges'); */dataGrid.treegrid('beginEdit',editRow);$.messager.alert('错误', r.msg,'error');}dataGrid.treegrid('unselectAll');}});},onDblClickCell : function(index, field, value) {if (rowEditor == undefined) {dataGrid.treegrid('beginEdit', field.id);rowEditor = field.id;}}});
});var editingId;
function edit() {if (editingId != undefined) {dataGrid.treegrid('select', editingId);return;}var row = dataGrid.treegrid('getSelected');if (row) {editingId = row.id;dataGrid.treegrid('beginEdit', editingId);}
}
function save() {if (editingId != undefined) {var t = $("#function_tb");t.treegrid('endEdit', editingId);editingId = undefined;var persons = 0;var rows = t.treegrid('getChildren');for ( var i = 0; i < rows.length; i++) {var p = parseInt(rows[i].persons);if (!isNaN(p)) {persons += p;}}var frow = t.treegrid('getFooterRows')[0];frow.persons = persons;t.treegrid('reloadFooter');}
}
function cancel() {if (editingId != undefined) {dataGrid.treegrid('cancelEdit', editingId);editingId = undefined;}
}function hideDialog(){$('#dlg').dialog('close');
}function openDialog(){//$("#add_select").attr('url','../service/func/allTree');$('#add_select').combotree({  url : '../service/func/allTree'});  $('#dlg').dialog('open');
}function addFunc(){$('#ff').form('submit',{url:'../service/func/add',success:function(data){var r = JSON.parse(data);if(r.code=="1"){$.messager.show({msg : r.msg,title : '成功'});hideDialog();dataGrid.treegrid('reload');}else{$.messager.alert('错误',r.msg,'error');hideDialog();dataGrid.treegrid('reload');}}});
}

3.后台controller中

/****/
package com.sf.fys.controller.role;import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.google.gson.Gson;
import com.sf.fys.config.LogAppender;
import com.sf.fys.controller.BaseController;
import com.sf.fys.data.Res;
import com.sf.fys.data.TreeGrid;
import com.sf.fys.model.Function;
import com.sf.fys.result.ListResultMsg;
import com.sf.fys.result.ResultResponse;
import com.sf.fys.result.ReturnCode;
import com.sf.fys.result.StringResult;
import com.sf.fys.service.role.FunctionService;/*** @author sfit0512**/
@RestController
public class FuncController extends BaseController {
Logger log = Logger.getLogger(LogAppender.ADMIN);@Autowiredprivate FunctionService funcService;@RequestMapping(value = "/func/allTree", method = RequestMethod.POST)@ResponseBodypublic String getFuncsTree(HttpServletRequest request,HttpServletResponse response) throws Exception {Gson gson = new Gson();List<Function> list = funcService.getFuncs();if(!list.isEmpty()){String ret =  gson.toJson(list);ret = ret.replace("funcName", "text");return ret;}return FAIL;}@RequestMapping(value = "/func/roleTree", method = RequestMethod.POST)@ResponseBodypublic String getFuncsTreeByRole(HttpServletRequest request,HttpServletResponse response) throws Exception {String roleId = request.getParameter("roleId");Gson gson = new Gson();List<Function> list = funcService.getFuncsByRole(Long.parseLong(roleId));if(!list.isEmpty()){String ret =  gson.toJson(list);ret = ret.replace("funcName", "text");return ret;}return FAIL;}/*** 查询所有功能权限* @param request* @param response* @return* @throws Exception*/@RequestMapping(value = "/func/all", method = RequestMethod.GET)@ResponseBodypublic String getFuncs(HttpServletRequest request,HttpServletResponse response) throws Exception {Gson gson = new Gson();//List<Function> list = funcService.getFunctions();List<Function> list = funcService.getFuncs();TreeGrid<Function> treeGrid = new TreeGrid<Function>();treeGrid.setTotal(String.valueOf(list.size()));treeGrid.setRows(list);if(!list.isEmpty()){String ret =  gson.toJson(treeGrid);return ret;}return FAIL;}/*** 添加功能权限* @param request* @param response* @return* @throws Exception*/@RequestMapping(value = "/func/add", method = RequestMethod.POST)@ResponseBodypublic Res addFunc(HttpServletRequest request,HttpServletResponse response) throws Exception {String funcName = request.getParameter("funcName");String parentId = request.getParameter("parentId");String url = request.getParameter("url");if(parentId==null||"".equals(parentId)){parentId = "0";//为空则设为根目录
        }Function func = new Function();func.setFuncName(funcName);func.setParentId(Long.parseLong(parentId));func.setUrl(url);func.setIsDelete('0');int ret = funcService.addFunc(func);if(ret>0){return success();}return fail();}/*** 修改功能权限* @param request* @param response* @return* @throws Exception*/@RequestMapping(value = "/func/update", method = RequestMethod.POST)@ResponseBodypublic Res updateFunc(HttpServletRequest request,HttpServletResponse response) throws Exception {String funcName = request.getParameter("funcName");String parentId = request.getParameter("parentId");String url = request.getParameter("url");String isDelete = request.getParameter("isDelete");String id = request.getParameter("id");//如果不选择就是一级菜单if("".equals(parentId)){parentId = "0";}Function func = new Function();func.setFuncName(funcName);func.setParentId(Long.parseLong(parentId));func.setUrl(url);func.setIsDelete(isDelete.charAt(0));func.setId(Long.parseLong(id));int ret = funcService.updateFunc(func);if(ret>0){return success();}return fail();}/*** 删除角色* @param request* @param response* @return* @throws Exception*/@RequestMapping(value = "/func/del", method = RequestMethod.POST)@ResponseBodypublic Res deleteFunc(HttpServletRequest request,HttpServletResponse response) throws Exception {String id = request.getParameter("id");int ret = funcService.deleteFunc(Long.parseLong(id));if(ret>0){return success();}return fail();}@RequestMapping(value = "/func/getUserFunc", method = RequestMethod.POST)@ResponseBodypublic ResultResponse getUserFunc(HttpServletRequest request,HttpServletResponse response) throws Exception {String userId = request.getParameter("userId");log.info("getUserFunc|userId="+userId);if(StringUtils.isEmpty(userId)){return new StringResult(ReturnCode.FAIL, ReturnCode.get(ReturnCode.FAIL), "");}List<Function> list = funcService.getUserFunc(Long.parseLong(userId));if(null != list){return new ListResultMsg<Function>(ReturnCode.SUCCESS, "", list);}else{return new StringResult(ReturnCode.FAIL, ReturnCode.get(ReturnCode.FAIL), "");}}}4.后台service/****/
package com.sf.fys.service.role;import java.util.ArrayList;
import java.util.List;import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.sf.fys.mapper.role.FunctionMapper;
import com.sf.fys.model.Function;/*** 功能权限管理* @author sfit0512**/
@Service
public class FunctionService
{private static Logger log = Logger.getLogger(FunctionService.class);@Autowiredprivate FunctionMapper functionMapper;/*** 查询所有功能列表* @return*/public List<Function> getFuncs(){List<Function> list = functionMapper.getFuncs();List<Function> newList = getTree(list);return newList;}/*** 根据角色查询功能列表* @param roleId* @return*/public List<Function> getFuncsByRole(long roleId){List<Function> list = functionMapper.getFuncsByRole(roleId);List<Function> newList = getTree(list);return newList;}/*** 转成树形集合* @param list* @return*/public List<Function> getTree(List<Function> list){List<Function> nodeList = new ArrayList<Function>();for (Function f : list){boolean mark = false;for (Function f2 : list){if (f.getParentId() == f2.getId()){mark = true;if (f2.getChildren() == null){f2.setChildren(new ArrayList<Function>());}f2.getChildren().add(f);break;}}if (!mark){nodeList.add(f);}}return nodeList;}/*** 添加功能* @param func* @return*/public int addFunc(Function func){return functionMapper.addFunction(func);}/*** 修改功能* @param func* @return*/public int updateFunc(Function func){return functionMapper.updateFunction(func);}/*** 删除功能* @param id* @return*/public int deleteFunc(long id){return functionMapper.delFunction(id);}/*** 根据用户编号查询该用户拥有的功能权限* @param id* @return*/public List<Function> getUserFunc(long userId){log.info("getUserFunc|id=" + userId);// 1.根据用户id查询该用户拥有的角色// 2.遍历所有角色,查询对应的功能id(去掉重复)List<Function> list = functionMapper.getFuncByUser(userId);if(list!=null){log.info("getUserFunc|list.size="+list.size());}return list;}}

5.mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sf.fys.mapper.role.FunctionMapper"><!-- 查询所有功能 --><select id="getFuncs" resultType="com.sf.fys.model.Function">select func_id asid,func_nameas funcName,create_tm ascreateTm,modified_tm as modifiedTm,parent_idas parentId,url,is_delete as isDelete from Functionswhere is_delete =0</select><select id="getFuncsByRole" resultType="com.sf.fys.model.Function">select f.func_id asid,f.func_name as funcName,f.create_tm ascreateTm,f.modified_tm asmodifiedTm,f.parent_id as parentId,f.url,f.is_delete as isDelete fromFunctions f,Role_Functions rfwhere f.func_id = rf.func_id andf.is_delete = 0 and rf.role_id = #{roleId,jdbcType=BIGINT};</select><!-- 查询所有父节点功能 --><select id="getParentFunc" resultType="com.sf.fys.model.Function">select func_id asid,func_name as funcName,create_tm ascreateTm,modified_tm asmodifiedTm,parent_id as parentId,url,is_delete as isDelete fromFunctionswhere parent_id = 0;</select><!-- 查询父功能下的所有子功能 --><select id="getChildFunc" resultType="com.sf.fys.model.Function">selectfunc_id asid,func_name as funcName,create_tm ascreateTm,modified_tm asmodifiedTm,parent_id as parentId,url,is_delete as isDeletefromFunctionswhere parent_id = #{id,jdbcType=BIGINT};</select><!-- 添加功能 --><insert id="addFunction">insert intoFunctions(FUNC_NAME,CREATE_TM,MODIFIED_TM,PARENT_ID,URL,IS_DELETE)values(#{funcName,jdbcType=VARCHAR},now(),now(),#{parentId,jdbcType=BIGINT},#{url,jdbcType=VARCHAR},#{isDelete,jdbcType=CHAR})</insert><!-- 修改功能 --><update id="updateFunction">update Functions setFUNC_NAME=#{funcName,jdbcType=VARCHAR},MODIFIED_TM = now(),PARENT_ID =#{parentId,jdbcType=BIGINT},URL = #{url,jdbcType=VARCHAR},IS_DELETE =#{isDelete,jdbcType=CHAR}where FUNC_ID = #{id,jdbcType=BIGINT}</update><!-- 删除功能 --><delete id="delFunction"><!-- delete from Function where FUNC_ID = #{id,jdbcType=BIGINT} -->update Functions set IS_DELETE = 1 where FUNC_ID =#{id,jdbcType=BIGINT}</delete><!-- 查询某用户所有功能权限 --><select id="getFuncByUser" resultType="com.sf.fys.model.Function">select func_id asid,func_nameas funcName,create_tm ascreateTm,modified_tm as modifiedTm,parent_idas parentId,url,is_delete as isDelete from Functions where func_id in(select distinct(func_id) from Role_Functionswhere role_id in ( select role_id from Role_User where user_id = #{userId,jdbcType=BIGINT})) andis_delete =0</select></mapper>

转载于:https://www.cnblogs.com/hnsongbiao/p/8111442.html

easyui-treegrid的案例相关推荐

  1. easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下...

    easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下 转载于:https://www.cnblogs.com/xiaoruilin/p/6 ...

  2. 适用于zTree 、EasyUI tree、EasyUI treegrid

    #region          System.Text.StringBuilder b_appline = new System.Text.StringBuilder();         Syst ...

  3. ajax treegrid 选中,easyui treeGrid异步加载子节点示例

    easyui treeGrid异步加载子节点示例.如果要异步加载treegrid的子节点,需要输出扁平的数据结构,然后通过_parentId来控制treegrid的父节点子节点结构.嵌套的childr ...

  4. EasyUI Treegrid 树形网格(官网没有提到的实现方式)

    官网实现方式:EasyUI Treegrid 没有提到的实现方式:_parentId {"id": 1,"name": "1"," ...

  5. easyUI treeGrid 编辑网格

    easyUI treeGrid 编辑网格的时候使用 beginEdit , 记的在表头单元 th 增加属性 editor='text'(text是类型,类似于input的类型,可以为numberbox ...

  6. .net mvc mssql easyui treegrid

    效果图 数据图   可以看到 这里是根据 MenuNo 来 分级别的,支持 无限极,第一级是 01 ,第二级就是 01XX ,第三级 就是 01XXOO.类似 id.pid ,Ztree 里面 也是这 ...

  7. easyui treegrid实现的两种方式

    感觉easyui官方的treegrid文档不是很清晰,当时使用的时候查了许多资料才做出来,现在总结一下两种实现方式的思路: 两种方式前台都一样: $('#tree').treegrid({url:&q ...

  8. html中treegrid不显示根节点,easyUI TreeGrid的加载问题

    工作的原因,以后主要做一些JavaWeb的开发工作,开辟这个文章集主要用来记录学习的过程和分享遇到的问题,方便日后回顾或许还能帮助网友解决相同的问题. easyUi的TreeGrid的问题 easyu ...

  9. easyui treegrid

    总体效果: 一.前台: <%@ page language="java" contentType="text/html; charset=UTF-8"pa ...

  10. easyui treegrid php,jQuery EasyUI 数据网格与树插件 – Treegrid 树形网格 | 菜鸟教程

    jQuery EasyUI 数据网格与树插件 - Treegrid 树形网格 jQuery EasyUI 插件 扩展自 $.fn.datagrid.defaults.通过 $.fn.treegrid. ...

最新文章

  1. TensorFlow快餐教程:程序员快速入门深度学习五步法
  2. 在linux命令下导出导入.sql文件的方法
  3. CodeIgniter的快速操作
  4. 数据结构 - 二叉树 - 面试中常见的二叉树算法题
  5. 学生成绩管理系统java+mysql+swing入门级项目开发
  6. XTU 1252 Defense Tower
  7. 进制转换工具类-JAVA
  8. Python爬虫编程实践 Task03
  9. ubuntu 常用指令
  10. 史上最详细的宝塔部署java项目流程
  11. 开源代码检测FOSSID
  12. getDerivedStateFromProps填坑
  13. 程序员的成长之路——道和术的思考
  14. Source Insight设置黑色背景
  15. C++ STL常用标准库容器入门(vector,map,set,string,list...)
  16. Ubuntu 18.04 U盘启动安装教程【图文教程,非常详细!!!!】
  17. 微信支付-账户验证及签约指引明细
  18. 静态链接库(Lib) 与 动态链接库(DLL)
  19. 无人驾驶感知篇之融合(一)
  20. 伺服驱动器生产文件_伺服驱动器程序源代码 程序源代码文件

热门文章

  1. Linux下使用fdisk扩大分区容量
  2. Graphviz 绘制流程图
  3. 如何使用虚拟实验室建设思科IPS***防御课程的实验环境
  4. POJ-2754 Similarity of necklaces 2 区间取下界操作+DP
  5. sourceinsight4.0安装破解( 内含sublime text配色方案)
  6. Java集合详解2:LinkedList和Queue
  7. D.E.Shaw——高频统计套利交易获利41亿美元
  8. 负载均衡之让nginx跑起来
  9. 2016-2017-2(点集拓扑56, 点集拓扑56)
  10. Exception.ToString()使用及其他方法比较