最近在开发系统权限管理相关的功能,主要包含用户管理,资源管理,角色管理,组类别管理等小的模块。之前的Web开发中也用过jQueryEasyUI插件,感觉这款插件简单易用,上手很快。以前用到的主要是Datagrid组件,这次为了区分资源的父子关系,打造更好的用户体验,遂探索一下Treegrid组件。

2.jQueryEasyUI简介

   jQuery EasyUI是一组基于jQueryUI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。

   EasyUI Treegrid树形网格:扩展自 $.fn.datagrid.defaults。通过 $.fn.treegrid.defaults 重写默认的 defaults树形网格(treegrid)用于以网格形式显示分层数据。它是基于数据网格(datagrid)的,并结合了树视图(treeview)和可编辑网格。树形网格(treegrid)允许您创建可定制的、可异步展开的行,并以多列形式显示分层数据。

  jQuery EasyUI官网:http://www.jeasyui.com/

  jQuery EasyUI中文网:Treegridhttp://www.jeasyui.net/plugins/186.html

3.基于EasyUI Treegrid的权限管理资源列表

   引入EasyUI相关的jscss文件:

<script type="text/javascript" src="/assets/scripts/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="/assets/scripts/jquery-easyui-1.4.5/jquery.min.js"></script>
<script type="text/javascript" src="/assets/scripts/jquery-easyui-1.4.5/jquery.easyui.min.js"></script>
<link rel="stylesheet" type="text/css" href="/assets/scripts/jquery-easyui-1.4.5/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="/assets/scripts/jquery-easyui-1.4.5/themes/icon.css">

   ⑵ 在HTML标签中创建树形网格(treegrid):

<table id="tgTab" title="查询结果" class="easyui-treegrid" style="width:1080px;height:450px">
     <thead>
        <tr>
           <th data-options="field:'name',width:160">资源名称</th>
           <th data-options="field:'description',width:100">资源描述</th>
           <th data-options="field:'code',width:100, align:'center' ">标识码</th>
           <th data-options="field:'type',width:50, align:'center' ">类型</th>
           <th data-options="field:'status',width:40, align:'center' ">状态</th>
           <th data-options="field:'gmtCreate',width:80,align:'center' ">创建时间</th>
           <th data-options="field:'gmtModified',width:80, align:'center'">最后修改时间</th>
           <th data-options="field:'id',width:60,formatter:rowFormatter, align:'center' ">操作</th>
        </tr>
     </thead>
</table>

   ⑶ Js初始化Treegrid资源列表:

(function($){
       function pagerFilter(data){
                if ($.isArray(data)){
                    data = {
                        total: data.length,
                        rows: data
                    }
                }
                var dg = $(this);
                var state = dg.data('treegrid');
                var opts = dg.treegrid('options');
                var pager = dg.treegrid('getPager');
                pager.pagination({
                    onSelectPage:function(pageNum, pageSize){
                        opts.pageNumber = pageNum;
                        opts.pageSize = pageSize;
                        pager.pagination('refresh',{
                            pageNumber: pageNum,
                            pageSize: pageSize,
                            beforePageText: '第',  //页数文本框前显示的汉字
                            afterPageText: '页 共 {pages} 页',
                            displayMsg: '当前显示 {from} - {to} 条记录  共 {total} 条记录'
                        });
                        dg.treegrid('loadData',state.originalRows);
                    },
                    beforePageText: '第',  //页数文本框前显示的汉字
                    afterPageText: '页 共 {pages} 页',
                    displayMsg: '当前显示 {from} - {to} 条记录  共 {total} 条记录'
                });
                if (!state.originalRows){
                    state.originalRows = data.rows;
                }
                var topRows = [];
                var childRows = [];
                $.map(state.originalRows, function(row){
                    row._parentId ? childRows.push(row) : topRows.push(row);
                });
                data.total = topRows.length;
                var start = (opts.pageNumber-1)*parseInt(opts.pageSize);
                var end = start + parseInt(opts.pageSize);
                data.rows = $.extend(true,[],topRows.slice(start, end).concat(childRows));
                return data;
            }

            var appendMethod = $.fn.treegrid.methods.append;
            var loadDataMethod = $.fn.treegrid.methods.loadData;
            $.extend($.fn.treegrid.methods, {
                clientPaging: function(jq){
                    return jq.each(function(){
                        var state = $(this).data('treegrid');
                        var opts = state.options;
                        opts.loadFilter = pagerFilter;
                        var onBeforeLoad = opts.onBeforeLoad;
                        opts.onBeforeLoad = function(row,param){
                            state.originalRows = null;
                            onBeforeLoad.call(this, row, param);
                        };
                        $(this).treegrid('loadData', state.data);
                        $(this).treegrid('reload');
                    });
                },
                loadData: function(jq, data){
                    jq.each(function(){
                        $(this).data('treegrid').originalRows = null;
                    });
                    return loadDataMethod.call($.fn.treegrid.methods, jq, data);
                },
                append: function(jq, param){
                    return jq.each(function(){
                        var state = $(this).data('treegrid');
                        if (state.options.loadFilter == pagerFilter){
                            $.map(param.data, function(row){
                                row._parentId = row._parentId || param.parent;
                                state.originalRows.push(row);
                            });
                            $(this).treegrid('loadData', state.originalRows);
                        } else {
                            appendMethod.call($.fn.treegrid.methods, jq, param);
                        }
                    })
               }
     });
  })(jQuery);

  $(function(){
        $('#tgTab').treegrid({
                iconCls: 'icon-ok',
                rownumbers: true,
                animate: true,
                collapsible: true,
                fitColumns: true,
                url: '../api/initResourcesList?type=-1',
                method: 'get',
                idField: 'id',
                treeField: 'name',
                pagination: true,
                pageSize: 80,
                pageList: [80,120,160]
        }).treegrid('clientPaging');
  });

   function rowFormatter(value, row, index){
      //value为该条数据的field字段的值,row为该行(显示在页面)数据的所有信息,index当前行,单引号里面必须双引号,双引号里面必须单引号,里面再有就需转义
      return '<img />&nbsp;&nbsp;' +
                '&nbsp;&nbsp;<img >;
  }
View Code

相关文章:

  • 2021-12-05
  • 2021-10-13
  • 2021-08-09
  • 2022-02-08
  • 2021-12-20
  • 2022-01-08
  • 2021-11-02
  • 2021-07-21
猜你喜欢
  • 2022-02-08
  • 2022-12-23
  • 2022-12-23
  • 2021-07-03
  • 2021-06-27
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案