首页 php教程 PHP开发 Ztree新增角色和编辑角色回显问题的解决

Ztree新增角色和编辑角色回显问题的解决

Dec 09, 2016 am 09:15 AM

最近在项目中使用到了ztree,在回显时候费了点时间,特记录下来供下次参考。

1、新增角色使用ztree加载权限,由于权限不多,所以使用直接全部加载。

效果图:

20161031140826605.jpg

具体涉及ztree代码:

jsp中导入:/js/ztree/zTreeStyle.css和js/ztree/jquery.ztree.all-3.5.js

页面加入

<ul id="functionTree" class="ztree"></ul>

js代码(此js中加入了layer弹框效果):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

&lt;script&gt;

    $(function() {

      // 授权树初始化

      var setting = {

        data : {

          key : {

            title : &quot;t&quot;

          },

          simpleData : {

            enable : true

          }

        },

        check : {//使用ztree选中效果

          enable : true,

        }

      };

      $.ajax({

        url : &#39;${pageContext.request.contextPath}/rest/sys/getAllFunction&#39;,//发送ajax请求加载权限数据

        type : &#39;get&#39;,

        dataType : &#39;json&#39;,

        success : function(data) {//data就是服务端返回的权限数据

          //var zNodes = eval(&quot;(&quot; + data + &quot;)&quot;);

          //使用权限数据初始化ztree

          $.fn.zTree.init($(&quot;#functionTree&quot;), setting, data);

        },

        error : function(msg) {

          alert(&#39;树加载异常!&#39;);

        }

      });

         

      //确定添加按钮

      $(&quot;#btn_submit&quot;).click(function() {

        if(checkHousetype()){

          //获得ztree对象

          var treeObj = $.fn.zTree.getZTreeObj(&quot;functionTree&quot;);

          //获得当前ztree对象选中的节点数组

          var nodes = treeObj.getCheckedNodes(true);//在提交表单之前将选中的checkbox收集

          //循环数组,获得节点的ID,拼接成字符串使用逗号分隔

          var array = new Array();

          for(var i=0;i&lt;nodes.length;i++){

            array.push(nodes[i].id);

          }

          var ids = array.join(&quot;,&quot;);

          $(&quot;input[name=funcitonIds]&quot;).val(ids);

   

          var formData = new FormData($(&quot;#formproject&quot;)[0]);

           $.ajax({

            type : &quot;POST&quot;,

            url : &quot;${pageContext.request.contextPath }/rest/sys/addRole&quot;,

//           data : $(&quot;#formproject&quot;).serialize(),

            data:formData,

            contentType: false,

            processData: false,

            statusCode : {

              201 : function() {

                layer.msg(&#39;新增角色成功!&#39;, {icon: 6,time:1500},function(){

                  location.href = &quot;${pageContext.request.contextPath }/rest/sys/page/rolelist&quot;;

                })

              },

              400 : function() {

                layer.msg(&#39;提交的参数不合法&#39;, {time:1500});

              },

              500 : function() {

                layer.msg(&#39;网络异常,请稍候再试!&#39;, {time:1500});

              }

            }

          });

        }

      });

    });

       

       

       

    //校验

    function checkHousetype(){

      var flag = true ;

      //关键字

      if($(&quot;#code&quot;).val()==&#39;&#39;){

        flag = false ;

        layer.msg(&#39;请输入关键字&#39;, {time:1500});

        return flag ;

      }

      //名称

      if($(&quot;#name&quot;).val()==&#39;&#39;){

        flag = false ;

        layer.msg(&#39;请输入角色名称&#39;, {time:1500});

        return flag ;

      }

         

      return flag ;

    }

  &lt;/script&gt;

登录后复制

权限中Ztree格式: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

private String id;

private String name;

private String code;

private String description;

   

// private String page;

//private String generatemenu;

//private String zindex;

   

private String pid;

private boolean isParent;

   

//ztree组件需要格式

public String getpId() {

   return this.pid==null?&quot;0&quot;:this.pid;

 }

   

 ......

登录后复制

  

2、编辑角色回显Ztree

js代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

&lt;script&gt;

   var zNodes;

    var setting = {

        check: {

          enable: true

        },

        data: {

          simpleData: {

            enable: true

          }

        }

      };

    //当页面加载完毕,向后台发送ajax请求,获取用户id为1的用户所拥有的权限

    //(这里要显示所有权限,该id用户的权限回显时,被自动选中),这里的用户id为1仅做测试使用,实际开发中会传值

    function loadPower(roleId){

          $.ajax({

            type:&quot;post&quot;,

            url:&quot;${pageContext.request.contextPath }/rest/sys/queryFunByRoleId&quot;,

            data:{&quot;roleId&quot;:roleId},

            async:false,

            dataType:&quot;json&quot;,

            success:function(data){

              zNodes=data;

            }

          })

    }

    $(function() {

      // 授权树初始化

      var setting = {

        data : {

          key : {

            title : &quot;t&quot;

          },

          simpleData : {

            enable : true

          }

        },

        check : {//使用ztree选中效果

          enable : true,

        }

      };

      //页面加载完毕时加载此方法

      $(document).ready(function(){

        var id = $(&quot;#roleId&quot;).val();

        loadPower(id);

        $.fn.zTree.init($(&quot;#functionTree&quot;), setting, zNodes);

      });

         

      //确定添加按钮

      $(&quot;#btn_submit&quot;).click(function() {

        if(checkHousetype()){

          //获得ztree对象

          var treeObj = $.fn.zTree.getZTreeObj(&quot;functionTree&quot;);

          //获得当前ztree对象选中的节点数组

          var nodes = treeObj.getCheckedNodes(true);//在提交表单之前将选中的checkbox收集

          //循环数组,获得节点的ID,拼接成字符串使用逗号分隔

          var array = new Array();

          for(var i=0;i&lt;nodes.length;i++){

            array.push(nodes[i].id);

          }

          var ids = array.join(&quot;,&quot;);

          $(&quot;input[name=funcitonIds]&quot;).val(ids);

   

          var formData = new FormData($(&quot;#formproject&quot;)[0]);

           $.ajax({

            type : &quot;POST&quot;,

            url : &quot;${pageContext.request.contextPath }/rest/sys/eidtRole&quot;,

//           data : $(&quot;#formproject&quot;).serialize(),

            data:formData,

            contentType: false,

            processData: false,

            statusCode : {

              201 : function() {

                layer.msg(&#39;编辑角色成功!&#39;, {icon: 6,time:1500},function(){

                  location.href = &quot;${pageContext.request.contextPath }/rest/sys/page/rolelist&quot;;

                })

              },

              400 : function() {

                layer.msg(&#39;提交的参数不合法&#39;, {time:1500});

              },

              500 : function() {

                layer.msg(&#39;网络异常,请稍候再试!&#39;, {time:1500});

              }

            }

          });

        }

      });

    });

       

       

       

    //校验

    function checkHousetype(){

      var flag = true ;

      //关键字

      if($(&quot;#code&quot;).val()==&#39;&#39;){

        flag = false ;

        layer.msg(&#39;请输入关键字&#39;, {time:1500});

        return flag ;

      }

      //名称

      if($(&quot;#name&quot;).val()==&#39;&#39;){

        flag = false ;

        layer.msg(&#39;请输入角色名称&#39;, {time:1500});

        return flag ;

      }

         

      return flag ;

    }

  &lt;/script&gt;

登录后复制

java后台:

controller:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

/**

   * 编辑角色,回显角色权限

   * @param roleId

   * @return

   */

  @RequestMapping(value = &quot;queryFunByRoleId&quot;, method = RequestMethod.POST)

  public ResponseEntity&lt;List&lt;Map&lt;String, Object&gt;&gt;&gt; queryFunByRoleId(String roleId) {

    try {

      if(StringUtils.isBlank(roleId)){

        // 返回400

        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);

      }

      return ResponseEntity.ok(sysService.queryFunByRoleId(roleId));

    } catch (Exception e) {

      e.printStackTrace();

    }

    // 出错 500

    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);

  }

登录后复制

service:

由于List中的contains方法校验老是失败,也没纠结什么原因,自己写的根据id校验

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

/**

   * zTree v3回显

   * 初始化化权限树

   * 拼接treeNode属性

   */

  @Transactional(readOnly=true)

  public List&lt;Map&lt;String, Object&gt;&gt; queryFunByRoleId(String roleId) {

    //查询所有权限

    List&lt;AuthFunction&gt; functions = queryAllAuthFunction();

    //查询指定角色的权限

    List&lt;AuthFunction&gt; functionsByRoleId = findFunctionByRoleId(roleId);

    //包装zTree

       

    List&lt;Map&lt;String, Object&gt;&gt; list =new ArrayList&lt;Map&lt;String, Object&gt;&gt;();

    Map&lt;String, Object&gt;map=null;

    for(int i=0;i&lt;functions.size();i++){

      map=new HashMap&lt;&gt;();

      //Role role=functions.get(i);

      AuthFunction fun = functions.get(i);

      map.put(&quot;id&quot;, fun.getId());

      map.put(&quot;pId&quot;, fun.getpId());

      map.put(&quot;name&quot;, fun.getName());

      map.put(&quot;isParent&quot;, fun.getIsParent());

      //判断指定用户的角色是否在所有角色中包含,有则设置checked=true.

      if(functionsByRoleId != null &amp;&amp; functionsByRoleId.size()&gt;0 &amp;&amp; ListIsContainsObj(functionsByRoleId,fun)){

        map.put(&quot;checked&quot;,true);

      }else {

        map.put(&quot;checked&quot;,false);

      }

      list.add(map);

    }

    return list;

  }

     

  //校验全部权限中是否有某个权限,有返回true

  private boolean ListIsContainsObj(List&lt;AuthFunction&gt; functions, AuthFunction fun) {

    if(fun == null || functions == null || functions.size()&lt;=0){

      return false;

    }

    for (AuthFunction authFunction : functions) {

      if(fun.getId().equals(authFunction.getId())){

        return true;

      }

    }

    return false;

  }

登录后复制

   


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)