Commit 1ac30ed0 authored by ibuler's avatar ibuler

[Feature] 使用ztree

parent 3603b33a
...@@ -319,13 +319,13 @@ class TreeViewApi(APIView): ...@@ -319,13 +319,13 @@ class TreeViewApi(APIView):
def get(self, request): def get(self, request):
data = [] data = []
for node in self.get_queryset(): for node in self.get_queryset():
if node.id == "0":
parent = "#"
else:
parent = ":".join(node.id.split(":")[:-1]) parent = ":".join(node.id.split(":")[:-1])
data.append({ d = {
"id": node.id, "id": node.id,
"parent": parent, "pId": parent,
"text": node.name "name": node.name
}) }
if node.id == "0":
d["open"] = True
data.append(d)
return Response(data) return Response(data)
...@@ -4,6 +4,20 @@ ...@@ -4,6 +4,20 @@
{% block custom_head_css_js %} {% block custom_head_css_js %}
<link href="{% static 'css/plugins/jstree/style.min.css' %}" rel="stylesheet"> <link href="{% static 'css/plugins/jstree/style.min.css' %}" rel="stylesheet">
<link href="{% static 'css/plugins/ztree/ztreestyle/ztreestyle.css' %}" rel="stylesheet">
{# <link href="{% static 'css/plugins/ztree/demo.css' %}" rel="stylesheet">#}
<script type="text/javascript" src="{% static 'js/plugins/ztree/jquery.ztree.all.min.js' %}"></script>
<script type="text/javascript">
$(document).ready(function(){
});
</script>
<style type="text/css">
.ztree li span.button.add {
margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle
}
</style>
{% endblock %} {% endblock %}
{% block content %} {% block content %}
...@@ -14,7 +28,7 @@ ...@@ -14,7 +28,7 @@
<div class="ibox-content mailbox-content"> <div class="ibox-content mailbox-content">
<div class="file-manager"> <div class="file-manager">
<h5>Tree View</h5> <h5>Tree View</h5>
<div id="jstree"> <div id="treeDemo" class="ztree">
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
</div> </div>
...@@ -22,8 +36,9 @@ ...@@ -22,8 +36,9 @@
</div> </div>
</div> </div>
<div class="col-lg-9 animated fadeInRight"> <div class="col-lg-9 animated fadeInRight">
<div class="row">
<div class="mail-box-header"> <div class="mail-box-header">
<div class="uc pull-left m-r-5"><a href="{% url "assets:asset-create" %}" class="btn btn-sm btn-primary"> {% trans "Create asset" %} </a></div> <div class="uc pull-left m-r-5"><a href="{% url "assets:asset-create" %}" class="btn btn-sm btn-primary"> {% trans "Add asset" %} </a></div>
<div class="btn-group" style="float: right"> <div class="btn-group" style="float: right">
<button data-toggle="dropdown" class="btn btn-default btn-sm dropdown-toggle">{% trans 'Label' %} <span class="caret"></span></button> <button data-toggle="dropdown" class="btn btn-default btn-sm dropdown-toggle">{% trans 'Label' %} <span class="caret"></span></button>
<ul class="dropdown-menu labels"> <ul class="dropdown-menu labels">
...@@ -66,6 +81,10 @@ ...@@ -66,6 +81,10 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row">
</div>
</div>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
...@@ -121,46 +140,154 @@ ...@@ -121,46 +140,154 @@
op_html: $('#actions').html() op_html: $('#actions').html()
}; };
return jumpserver.initServerSideDataTable(options); return jumpserver.initServerSideDataTable(options);
}
function beforeDrag(treeId, treeNodes) {
showLog("Before drag");
return false;
} }
$(document).ready(function(){
initTable(); function beforeEditName(treeId, treeNode) {
$('#jstree').jstree({ showLog("Before edit name");
'core' : { className = (className === "dark" ? "" : "dark");
'check_callback' : true, showLog("[ " + getTime() + " beforeEditName ]&nbsp;&nbsp;&nbsp;&nbsp; " + treeNode.name);
'data': { var zTree = $.fn.zTree.getZTreeObj("treeDemo");
'url': '{% url "api-assets:tree-view" %}', zTree.selectNode(treeNode);
'data': function (node) { setTimeout(function () {
return {'id': node.id} if (confirm("进入节点 -- " + treeNode.name + " 的编辑状态吗?")) {
setTimeout(function () {
zTree.editName(treeNode);
}, 0);
} }
}, 0);
return false;
} }
function beforeRemove(treeId, treeNode) {
showLog("[ " + getTime() + " beforeRemove ]&nbsp;&nbsp;&nbsp;&nbsp; " + treeNode.name);
className = (className === "dark" ? "" : "dark");
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
zTree.selectNode(treeNode);
return confirm("确认删除 节点 -- " + treeNode.name + " 吗?");
}
function onRemove(e, treeId, treeNode) {
showLog("Remove node")
}
function beforeRename(treeId, treeNode, newName, isCancel) {
showLog((isCancel ? "<span style='color:red'>" : "") + "[ " + getTime() + " beforeRename ]&nbsp;&nbsp;&nbsp;&nbsp; " + treeNode.name + (isCancel ? "</span>" : ""));
className = (className === "dark" ? "" : "dark");
if (newName.length == 0) {
setTimeout(function () {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
zTree.cancelEditName();
alert("节点名称不能为空.");
}, 0);
return false;
}
return true;
}
function onRename(e, treeId, treeNode, isCancel) {
console.log("On remname");
{#showLog((isCancel ? "<span style='color:red'>" : "") + "[ " + getTime() + " onRename ]&nbsp;&nbsp;&nbsp;&nbsp; " + treeNode.name + (isCancel ? "</span>" : ""));#}
}
function showRemoveBtn(treeId, treeNode) {
showLog("Show remove btn");
return !treeNode.isFirstNode;
}
function showRenameBtn(treeId, treeNode) {
showLog("Show rename btn");
return !treeNode.isLastNode;
}
function showLog(str) {
console.log(str)
}
function getTime() {
var now = new Date(),
h = now.getHours(),
m = now.getMinutes(),
s = now.getSeconds(),
ms = now.getMilliseconds();
return (h + ":" + m + ":" + s + " " + ms);
}
var newCount = 1;
function addHoverDom(treeId, treeNode) {
var sObj = $("#" + treeNode.tId + "_span");
if (treeNode.editNameFlag || $("#addBtn_" + treeNode.tId).length > 0) return;
var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
+ "' title='add node' onfocus='this.blur();'></span>";
sObj.after(addStr);
var btn = $("#addBtn_" + treeNode.tId);
if (btn) btn.bind("click", function () {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
zTree.addNodes(treeNode, {
id: (100 + newCount),
pId: treeNode.id,
name: "new node" + (newCount++)
});
return false;
});
};
function removeHoverDom(treeId, treeNode) {
showLog("Remove hove dom");
$("#addBtn_" + treeNode.tId).unbind().remove();
};
function selectAll() {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
zTree.setting.edit.editNameSelectAll = $("#selectAll").attr("checked");
}
function initTree() {
var setting = {
view: {
addHoverDom: addHoverDom,
removeHoverDom: removeHoverDom,
selectedMulti: false
}, },
'plugins' : [ 'types', 'dnd'], edit: {
"checkbox" : { enable: true,
"keep_selected_style" : true editNameSelectAll: true,
}, showRemoveBtn: showRemoveBtn,
'types' : { showRenameBtn: showRenameBtn
'default' : {
'icon' : 'fa fa-folder'
},
'html' : {
'icon' : 'fa fa-file-code-o'
},
'svg' : {
'icon' : 'fa fa-file-picture-o'
},
'css' : {
'icon' : 'fa fa-file-code-o'
}, },
'img' : { data: {
'icon' : 'fa fa-file-image-o' simpleData: {
enable: true
}
}, },
'js' : { callback: {
'icon' : 'fa fa-file-text-o' beforeDrag: beforeDrag,
beforeEditName: beforeEditName,
beforeRemove: beforeRemove,
beforeRename: beforeRename,
onRemove: onRemove,
onRename: onRename
} }
};
var zNodes = [];
$.get("{% url 'api-assets:tree-view' %}", function(data, status){
zNodes = data;
console.log(data);
console.log(status);
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
});
$("#selectAll").bind("click", selectAll);
} }
$(document).ready(function(){
initTable();
initTree();
}); });
})
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -16,7 +16,7 @@ class TreeView(AdminUserRequiredMixin, TemplateView): ...@@ -16,7 +16,7 @@ class TreeView(AdminUserRequiredMixin, TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = { context = {
'app': _('Assets'), 'app': _('Assets'),
'action': _('TreeView view'), 'action': _('Tree view'),
} }
kwargs.update(context) kwargs.update(context)
return super().get_context_data(**kwargs) return super().get_context_data(**kwargs)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment