可拖拽的easyui treegrid
来源:互联网 发布:龙之谷手游数据互通 编辑:程序博客网 时间:2024/04/30 18:57
引用:JQuery EasyUI TreeGrid控件的使用——支持拖拽与禁止拖拽
演示:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>TreeGrid Actions - jQuery EasyUI Demo</title><link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css"><link rel="stylesheet" type="text/css" href="../../themes/icon.css"><link rel="stylesheet" type="text/css" href="../demo.css"><script type="text/javascript" src="../../jquery.min.js"></script><script type="text/javascript" src="../../jquery.easyui.min.js"></script><script type="text/javascript">$(function() {query();})function query() {//$('#tg').treegrid("options")$('#tg').treegrid({ url:'menu/list.json', idField:'id', treeField:'name', rownumbers:true,//第一列显示序号 fitColumns:true,//列宽按比例扩展到最大 onDblClickRow:function(row){edit()}, onLoadSuccess: function(row){ //$(this).treegrid('enableDnd', row?row.id:null); //上面的代码是demo中的,但是对于要保存更改到数据库显然走不通,需要向其他办法 //启用拖动排序 enableDnd($('#tg')); }, columns:[[ {field:'name',title:'name',width:100,align:'left', halign: 'center',editor:"text"}, {field:'url',title:'url',width:100,align:'center',editor:"text"}, {field:'icon',title:'icon',width:160,align:'center',editor:"text"}, {field:'seq',title:'seq',width:160,align:'center',editor:"numberbox" } ]], toolbar: [ { text: '添加子菜单', iconCls: 'icon-add', handler: function () { append(); } }, '-', { text: '删除', iconCls: 'icon-remove', handler: function () { remove(); } }, '-', { text: '编辑', iconCls: 'icon-edit', handler: function () { edit(); } }, '-', { text: '保存', iconCls: 'icon-save', handler: function () { save(); } }, '-', { text: '取消编辑', iconCls: 'icon-undo', handler: function () { cancelEdit(); } }, '-', { text: '刷新', iconCls: 'icon-reload', handler: function () { query(); } }, '-', { text: '更新到数据库', iconCls: 'icon-save', handler: function () { saveToDB(); } }, '-']});}var editingId;function append(){var node = $('#tg').treegrid('getSelected');if(node){var obj = {id: -1*Math.random(),name:'新建菜单',parent:{id:node.id},left:true,visible:true,seq:99};$('#tg').treegrid('append',{parent: node.id, // the node has a 'id' value that defined through 'idField' propertydata: [obj]});enableDnd($('#tg'));params_data.add.push($('#tg').treegrid('find', obj.id));}}function insert(){var node = $('#tg').treegrid('getSelected');if (node){var obj = {id: -1*Math.random(),name:'新建菜单',parent:node.parent,left:true,visible:true,seq:99};$('#tg').treegrid('insert', {after: node.id,data: obj});enableDnd($('#tg'));params_data.add.push($('#tg').treegrid('find', obj.id));}}function edit(){if (editingId != undefined){save();}var row = $('#tg').treegrid('getSelected');if (row){editingId = row.id$('#tg').treegrid('beginEdit', editingId);//解决添加拖拽功能后无法编辑问题/*var eds = $('#tg').treegrid('getEditors',editingId);for(var i=0;i<eds.length;i++){$(eds[i].target).bind('mousedown',function(e){e.stopPropagation();});}*/$(".datagrid-row-editing input").each(function(){$(this).bind('mousedown',function(e){e.stopPropagation();});});}}function save(){if (editingId != undefined){$('#tg').treegrid('endEdit', editingId);var row = $('#tg').treegrid('find', editingId);if(row.id > 0){params_data.update.push(row);}editingId = undefined;}}function remove(){var node = $('#tg').treegrid('getSelected');if (node){$('#tg').treegrid('remove', node.id);if(editingId != undefined && editingId == node.id){editingId = undefined;}if(node.id > 0){params_data.delete.push(node);}else{var idx = params_data.add.indexOf(node);params_data.add.remove(idx);}}}function cancelEdit(){if (editingId != undefined){$('#tg').treegrid('cancelEdit', editingId);editingId = undefined;}}/**保存到数据库*/var params_data = {add: [],update: [],delete: []};function saveToDB(){save();var data = { add: [], update: [], delete: [] }; for(var i=0;i<params_data.add.length;i++){ delete params_data.add[i]._parentId; delete params_data.add[i].checkState; delete params_data.add[i].checked; delete params_data.add[i].state; } for(var i=0;i<params_data.update.length;i++){ delete params_data.update[i]._parentId; delete params_data.update[i].checkState; delete params_data.update[i].checked; delete params_data.update[i].state; } for(var i=0;i<params_data.update.length;i++){ delete params_data.update[i]._parentId; delete params_data.update[i].checkState; delete params_data.update[i].checked; delete params_data.update[i].state; } var req_data = {}; req_data.add = JSON.stringify(params_data.add); req_data.update = JSON.stringify(params_data.update); req_data.delete = JSON.stringify(params_data.delete); $.ajax({ type: "POST", url: 'menu/save', dataType: "json", data: req_data, success: function (rarg) { if (rarg.err == undefined) { $.messager.show({ title: '提示', msg: '保存成功.', timeout: 3000, showType: 'slide' }); params_data = {add: [],update: [],delete: []}; query(); } else $.messager.alert('提示', rarg.err); //refreshTab(); }, error: function (XMLHttpRequest, textStatus, errorThrown) { $.messager.alert('提示', '保存失败,系统繁忙,请稍后再试!'); } });}function enableDnd(t){var nodes = t.treegrid('getPanel').find('tr[node-id]');nodes.find('span.tree-hit').bind('mousedown.treegrid',function(){return false;});nodes.draggable({disabled:false,revert:true,cursor:'pointer',proxy: function(source){var p = $('<div class="tree-node-proxy tree-dnd-no"></div>').appendTo('body');p.html($(source).find('.tree-title').html());p.hide();return p;},deltaX: 15,deltaY: 15,onBeforeDrag:function(){$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({accept:'no-accept'});},onStartDrag:function(){$(this).draggable('proxy').css({left:-10000,top:-10000});},onDrag:function(e){$(this).draggable('proxy').show();this.pageY = e.pageY;},onStopDrag:function(){$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({accept:'tr[node-id]'});}}).droppable({accept:'tr[node-id]',onDragOver:function(e,source){var pageY = source.pageY;var top = $(this).offset().top;var bottom = top + $(this).outerHeight();$(source).draggable('proxy').removeClass('tree-dnd-no').addClass('tree-dnd-yes');$(this).removeClass('row-append row-top row-bottom');if (pageY > top + (bottom - top) / 2){if (bottom - pageY < 5){$(this).addClass('row-bottom');} else {$(this).addClass('row-append');}} else {if (pageY - top < 5){$(this).addClass('row-top');} else {$(this).addClass('row-append');}}},onDragLeave:function(e,source){$(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');$(this).removeClass('row-append row-top row-bottom');},onDrop:function(e,source){var action,point;if ($(this).hasClass('row-append')){action = 'append';} else {action = 'insert';point = $(this).hasClass('row-top') ? 'top' : 'bottom';}$(this).removeClass('row-append row-top row-bottom');//alert(action+":"+point);// your logic code here// do append or insert action and reload the treegrid datavar src = t.treegrid('find', $(source).attr('node-id')); var dest = t.treegrid('find', $(this).attr('node-id')); //alert(src.name+","+dest.name); if (src){ t.treegrid('remove', src.id); } if(action == "append"){ src.parent = {}; src.parent.id = dest.id; t.treegrid('append',{ parent: dest.id, // the node has a 'id' value that defined through 'idField' property data: [src] }); }else if(action == "insert"){ src.parent = dest.parent; var obj = { before: dest.id, after: dest.id, data: src } if(point == "top"){ delete obj.after; }else{ delete obj.before; } t.treegrid('insert', obj); } if(src.id > 0){ params_data.update.push(src); } enableDnd(t); /* $.ajax({ url: 'updateCatalogList', dataType: 'json', type:'post', data: { "srcId": src.id, "destId": dest.id }, success:function(data){ if(data.result) { $('#tt').treegrid('reload'); //重新加载treegrid } } }); */}});}</script> <style type="text/css"> .fitem{ margin: 5px; } .fitem label{ display:inline-block; width: 70px; text-align: right; } .panel.datagrid{ margin: 0 auto; } /* 修改表格表头里面字体大小 */ .datagrid-header .datagrid-cell span{ font-size: 18px; } /* 修改表格里面字体大小 */ .datagrid-cell{ font-size: 16px; } /* 修改表格行高 */ .datagrid-row { height: 40px; } td[field="enable"] td{ text-align: center; } </style> <style type="text/css"> /* treegrid拖动效果 */ .row-top td{ border-top:1px solid red; background:#fff; } .row-bottom td{ border-bottom:1px solid red; background:#fff; } .row-append td{ border:0; background:#FBEC88; } </style> </head> <body> <!-- 数据网格 --> <table id="tg" title="菜单列表" style="width:100%;height:auto;margin:0 auto;"> </table> </body> </html>
[ { "id": 3, "parent": null, "name": "系统设置", "url": null, "visible": true, "leaf": true, "seq": 1, "roles": [], "children": [], "icon": null }, { "id": 6, "parent": null, "name": "基础数据", "url": null, "visible": true, "leaf": true, "seq": 2, "roles": [], "children": [], "icon": null }, { "id": 7, "parent": null, "name": "权限管理", "url": null, "visible": true, "leaf": true, "seq": 3, "roles": [], "children": [ { "id": 9, "parent": { "id": 7, "parent": null, "name": null, "url": null, "visible": false, "leaf": false, "seq": 0, "roles": [], "children": [], "icon": null }, "name": "用户管理", "url": "user/list", "visible": true, "leaf": true, "seq": 1, "roles": [], "children": [], "icon": "3" }, { "id": 10, "parent": { "id": 7, "parent": null, "name": null, "url": null, "visible": false, "leaf": false, "seq": 0, "roles": [], "children": [], "icon": null }, "name": "角色管理", "url": "role/list", "visible": true, "leaf": true, "seq": 2, "roles": [], "children": [], "icon": "2" }, { "id": 11, "parent": { "id": 7, "parent": null, "name": null, "url": null, "visible": false, "leaf": false, "seq": 0, "roles": [], "children": [], "icon": null }, "name": "菜单管理", "url": "menu/list", "visible": true, "leaf": true, "seq": 3, "roles": [], "children": [], "icon": null } ], "icon": null }, { "id": 8, "parent": null, "name": "订单管理", "url": null, "visible": true, "leaf": true, "seq": 4, "roles": [], "children": [], "icon": null }]
0 0
- 可拖拽的easyui treegrid
- easyUI treegrid的使用
- EasyUI的TreeGrid应用
- easyui-treegrid的案例
- easyui的treegrid
- easyui的treegrid开发使用
- easyui中treegrid的数据格式
- easyui treegrid
- easyUI TreeGrid
- easyUI TreeGrid
- easyui treegrid
- jquery easyui的treegrid的级联扩展
- jquery easyui的treegrid的控制
- easyUI 创建一个基础的TreeGrid
- EasyUI的TreeGrid查询功能实现
- EasyUI treegrid 生成json格式的方法
- 记录一次EasyUI 的treegrid优化实践
- easyui treegrid的拖拽效果实现
- protobuf repeated类型的使用
- 使用ViewPager实现导航页以及滑动标签页的效果
- 单链表的反向
- 如何解决Didn't find class “android.support.v7.internal.widget.TintManager”?
- 1077. Kuchiguse 差一个测试点
- 可拖拽的easyui treegrid
- JavaScript数组 Array 对象
- Spring 4MVC简单操作实现登录
- 单片机三种按键模式 单击 双击 长按
- 一张图解释DNS域名服务器的作用
- 【Latex】制作演示文档或者课程报告-常见用法(一)
- 运算符,反选操作
- 内部类
- char类型的加减法运算