EasyUI jQuery treegrid Widget

  • Post category:jquery

下面是EasyUI jQuery treegrid Widget的完整攻略。

简介

什么是EasyUI jQuery treegrid Widget

EasyUI jQuery treegrid Widget是一款基于jQuery的树形表格控件,可以展示树形数据和表格数据的组合,同时还具有完整的数据排序、分页和搜索等功能,可广泛应用于各类在线信息管理系统、支撑后台管理和业务流程处理等多种应用场景。

EasyUI jQuery treegrid Widget的优点

  1. 实现方便 – 基于轻量级的jQuery插件编写,装载简单,使用便捷;
  2. 样式优美 – 预制多种皮肤,且易于自定义,美化网页表格;
  3. 功能强大 – 支持多级复杂结构的根、节点和子结构,支持多种格式的数据源输入,支持树形数据、折叠、展开。支持编辑、新增、删除、排序、过滤查询等功能。

安装和使用

安装EasyUI jQuery treegrid Widget

可以在EasyUI官网上下载EasyUI jQuery treegrid Widget压缩包,解压后将js目录中的jquery.treegrid.js和treegrid.css文件和图片拷入项目对应目录,添加对应的引用即可使用。

使用EasyUI jQuery treegrid Widget

EasyUI jQuery treegrid Widget的基本使用

<table id="tt"></table>
<script>
    $(function () {
        $('#tt').treegrid({
            url: 'treegrid_data.json',
            iconCls: 'icon-ok',
            rownumbers: true,
            idField: 'id',
            treeField: 'name',
            columns: [
                [
                    {field: 'name', title: '任务名称', width: 200},
                    {field: 'persons', title: '负责人', width: 80},
                    {field: 'begin', title: '开始时间', width: 120},
                    {field: 'end', title: '结束时间', width: 120}
                ]
            ]
        });
    });
</script>

示例

示例一

(1)示例简介

本示例实现了EasyUI jQuery treegrid Widget显示本地数据的功能,通过添加、编辑、删除、移动等操作,动态地展示了树形结构的表格数据。

(2)代码实现

HTML代码

<div class="easyui-panel" style="margin:30px;">
    <table id="tt" class="easyui-treegrid" style="width:500px;height:250px"
           data-options="
                    url:'treegrid_data.json',
                    method:'get',
                    animation:true,
                    idField:'id',
                    treeField:'name',
                    rownumbers:true,
                    toolbar:'#tb',
                    showFooter:true,
                    onContextMenu: onContextMenu,
                    onBeforeEdit: onBeforeEdit,
                    onAfterEdit: onAfterEdit,
                    onCancelEdit: onCancelEdit
            ">
        <thead>
        <tr>
            <th data-options="field:'name',width:180,editor:'text'">任务名称</th>
            <th data-options="field:'persons',width:80,editor:'text'">负责人</th>
            <th data-options="field:'begin',width:100,editor:{type:'datebox',options:{editable:false}}">开始时间</th>
            <th data-options="field:'end',width:100,editor:{type:'datebox',options:{editable:false}}">结束时间</th>
            <th data-options="field:'operate',width:60,align:'center',formatter:formatOperate">操作</th>
        </tr>
        </thead>
    </table>
    <div id="tb">
        <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true" onclick="append()">添加</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-remove',plain:true" onclick="removeit()">删除</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-save',plain:true" onclick="accept()">保存</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-undo',plain:true" onclick="reject()">撤销</a> - 右键操作 -
    </div>
    <div id="mm" class="easyui-menu" style="width:120px;">
        <div id="mm_add" data-options="iconCls:'icon-add'">增加</div>
        <div id="mm_edit" data-options="iconCls:'icon-edit'">修改</div>
        <div id="mm_remove" data-options="iconCls:'icon-remove'">删除</div>
    </div>
    <div id="dlg" class="easyui-dialog" style="width:400px;height:280px;padding:10px 20px"
         closed="true" buttons="#dlg-btn">
        <div class="ftitle">任务信息</div>
        <form id="fm" method="post">
            <input type="hidden" id="parent_id" name="parent_id">
            <div class="fitem">
                <label>任务名称:</label>
                <input name="name" class="easyui-validatebox" required="true">
            </div>
            <div class="fitem">
                <label>负责人:</label>
                <input name="persons" class="easyui-validatebox" validType="length[0,20]">
            </div>
            <div class="fitem">
                <label>开始时间:</label>
                <input name="begin" class="easyui-datebox" required="true" editable="false">
            </div>
            <div class="fitem">
                <label>结束时间:</label>
                <input name="end" class="easyui-datebox" required="true" editable="false">
            </div>
        </form>
    </div>
    <div id="dlg-btn">
        <a href="#" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveTask()">保存</a>
        <a href="#" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">取消</a>
    </div>
</div>

JavaScript代码

var editingId = undefined;

function edit() {
    if (editingId != undefined) {
        $('#tt').treegrid('select', editingId);
        return;
    }
    var row = $('#tt').treegrid('getSelected');
    if (row) {
        editingId = row.id
        $('#tt').treegrid('beginEdit', editingId);
    }
}

function onContextMenu(e, row) {
    e.preventDefault();
    $(this).treegrid('select', row.id);
    $('#mm').menu('show', {
        left: e.pageX,
        top: e.pageY
    });
}

function onBeforeEdit(row) {
    row.editing = true;
    updateActions(row);
}

function onAfterEdit(row) {
    row.editing = false;
    updateActions(row);
}

function onCancelEdit(row) {
    row.editing = false;
    updateActions(row);
}

function updateActions(row) {
    if (row.editing) {
        $('#save,#redo').show();
        $('#edit,#remove,#add').hide();
    } else {
        $('#save,#redo').hide();
        $('#edit,#remove,#add').show();
    }
}

function accept() {
    if (editingId != undefined) {
        var t = $('#tt');
        t.treegrid('endEdit', editingId);
        editingId = undefined;
        var children = t.treegrid('getChildren');
        $(children).each(function (index, item) {
            if (typeof item.editing == 'undefined') {
                return;
            }
            if (item.editing) {
                t.treegrid('endEdit', item.id);
                item.editing = false;
            }
        });
        var data = $('#tt').treegrid('getData');
        $.ajax({
            url: 'treegrid_save.json',
            data: {data: JSON.stringify(data)},
            type: 'post',
            dataType: 'json',
            success: function (r) {
                if (r.success) {
                    alert('保存成功!');
                    $('#tt').treegrid('reload');
                } else {
                    alert('保存失败!');
                }
            }
        });
    }
}

function reject() {
    if (editingId != undefined) {
        $('#tt').treegrid('cancelEdit', editingId);
        editingId = undefined;
    } else {
        var children = $('#tt').treegrid('getChildren');
        $(children).each(function (index, item) {
            if (item.editing) {
                $('#tt').treegrid('cancelEdit', item.id);
            }
        });
    }
}

function add() {
    var row = $('#tt').treegrid('getSelected');
    var id;
    if (!row) {
        id = 0;
    } else {
        id = row.id;
    }
    $('#dlg').dialog({
        title: '新增任务信息', width: 400, height: 280, closed: false, cache: false, modal: true,
        buttons: [{
            text: '保存', iconCls: 'icon-ok', handler: function () {
                saveTask();
            }
        }, {
            text: '取消', iconCls: 'icon-cancel', handler: function () {
                $('#dlg').dialog('close');
            }
        }]
    });
    $('#fm').form('clear');
    $('#parent_id').val(id);
}

function del() {
    var row = $('#tt').treegrid('getSelected');
    if (row) {
        $.messager.confirm('Confirm', '您确定要删除这个任务?', function (r) {
            if (r) {
                var id = row.id;
                $.post('treegrid_del.json', {id: id}, function (r) {
                    if (r.success) {
                        $('#tt').treegrid('remove', id);
                        alert('删除成功!');
                    } else {
                        alert('删除失败!');
                    }
                }, 'json');
            }
        });
    }
}

function saveTask() {
    $('#fm').form('submit', {
        url: 'treegrid_add.json',
        onSubmit: function () {
            var isValid = $(this).form('validate');
            if (!isValid) {
                return false;
            }
            return true;
        },
        success: function (result) {
            var obj = JSON.parse(result);
            if (obj.success == true) {
                $('#dlg').dialog('close');
                $('#tt').treegrid('append', {
                    parent: $('#parent_id').val(),
                    data: [{
                        id: obj.id,
                        name: $('#name').val(),
                        persons: $('#persons').val(),
                        begin: $('#begin').val(),
                        end: $('#end').val()
                    }]
                });
                var node = $('#tt').treegrid('find', obj.id);
                $(node.target).attr('method', 'post').attr('action', 'treegrid_add.json');
            }
        }
    });
}

$(function () {
    $('#mm').menu({
        onClick: function (item) {
            if (item.id == 'mm_add') {
                add();
            } else if (item.id == 'mm_edit') {
                edit();
            } else if (item.id == 'mm_remove') {
                del();
            }
        }
    });
});

示例二

(1) 示例简介

本示例展示了通过EasyUI jQuery treegrid Widget结合后台数据,以动态的节点展开、折叠,显示了一份组织机构表格的树形数据信息。

(2)代码实现

HTML代码

<div class="easyui-panel" title="支撑机构" style="padding:10px;">
    <table id="tt" class="easyui-treegrid" title="机构列表" style="width:100%;height:300px"
           data-options="url:'getOrgData', method:'get',idField:'id',treeField:'orgName',
                   columns:[[
                       {field:'orgName',title:'机构名称'},
                       {field:'orgId',title:'机构代码', width:80},
                       {field:'orgStatus',title:'状态', width:60},
                       {field:'orgManager',title:'负责人', width:80},
                       {field:'orgPhone',title:'联系电话', width:120},
                       {field:'orgEmail',title:'电子邮箱', width:150},
                       {field:'proDate',title:'创建时间', width:120,align:'center'}
                   ]],
                   onLoadSuccess: function(row) {
                       $(this).treegrid('expandAll');
                   }">
    </table>
</div>

JavaScript代码

$(document).ready(function () {
    $('#tt').treegrid({
        url: 'getOrgData',
        method: 'get',
        idField: 'id',
        treeField: 'orgName',
        columns: [[
            {field: 'orgName', title: '机构名称'},
            {field: 'orgId', title: '机构代码', width: 80},
            {field: 'orgStatus', title: '状态', width: 60},
            {field: 'orgManager', title: '负责人', width: 80},
            {field: 'orgPhone', title: '联系电话', width: 120},
            {field: 'orgEmail', title: '电子邮箱', width: 150},
            {field: 'proDate', title: '创建时间', width: 120, align: 'center'}
        ]],
        onLoadSuccess: function (row) {
            $(this).treegrid('expandAll');
        }
    });
});

总结

以上是关于如何使用EasyUI jQuery treegrid Widget的完整攻略。本文详细介绍了EasyUI jQuery treegrid Widget的安装和使用,同时通过两个实例,讲解了EasyUI jQuery treegrid Widget在实际项目开发中的应用。相信在掌握了这些基础知识之后,可以更好的使用EasyUI jQuery treegrid Widget来展示复杂的树形表格数据。