mirror of https://github.com/jumpserver/jumpserver
[Feature] 使用ztree
parent
3603b33a42
commit
1ac30ed09c
|
@ -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 @@
|
||||||
|
|
||||||
{% 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 @@
|
||||||
<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 @@
|
||||||
</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 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
function beforeEditName(treeId, treeNode) {
|
||||||
|
showLog("Before edit name");
|
||||||
|
className = (className === "dark" ? "" : "dark");
|
||||||
|
showLog("[ " + getTime() + " beforeEditName ] " + treeNode.name);
|
||||||
|
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
|
||||||
|
zTree.selectNode(treeNode);
|
||||||
|
setTimeout(function () {
|
||||||
|
if (confirm("进入节点 -- " + treeNode.name + " 的编辑状态吗?")) {
|
||||||
|
setTimeout(function () {
|
||||||
|
zTree.editName(treeNode);
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function beforeRemove(treeId, treeNode) {
|
||||||
|
showLog("[ " + getTime() + " beforeRemove ] " + 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 ] " + 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 ] " + 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
|
||||||
|
},
|
||||||
|
edit: {
|
||||||
|
enable: true,
|
||||||
|
editNameSelectAll: true,
|
||||||
|
showRemoveBtn: showRemoveBtn,
|
||||||
|
showRenameBtn: showRenameBtn
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
simpleData: {
|
||||||
|
enable: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
callback: {
|
||||||
|
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(){
|
$(document).ready(function(){
|
||||||
initTable();
|
initTable();
|
||||||
$('#jstree').jstree({
|
initTree();
|
||||||
'core' : {
|
|
||||||
'check_callback' : true,
|
|
||||||
'data': {
|
|
||||||
'url': '{% url "api-assets:tree-view" %}',
|
|
||||||
'data': function (node) {
|
|
||||||
return {'id': node.id}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'plugins' : [ 'types', 'dnd'],
|
|
||||||
"checkbox" : {
|
|
||||||
"keep_selected_style" : true
|
|
||||||
},
|
|
||||||
'types' : {
|
|
||||||
'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' : {
|
|
||||||
'icon' : 'fa fa-file-image-o'
|
|
||||||
},
|
|
||||||
'js' : {
|
|
||||||
'icon' : 'fa fa-file-text-o'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue