diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py index f123e4649..39390447c 100644 --- a/apps/assets/api/node.py +++ b/apps/assets/api/node.py @@ -108,18 +108,18 @@ class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView): return node def get_queryset(self): - queryset = [] + queryset = set() query_all = self.request.query_params.get("all") query_assets = self.request.query_params.get('assets') node = self.get_object() if node == Node.root(): - queryset.append(node) + queryset.add(node) if query_all: children = node.get_all_children() else: children = node.get_children() - queryset.extend(list(children)) + queryset.update(set(children)) if query_assets: assets = node.get_assets() for asset in assets: @@ -127,8 +127,9 @@ class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView): node_fake.id = asset.id node_fake.parent = node node_fake.value = asset.hostname - node_fake.is_asset = True - queryset.append(node_fake) + node_fake.is_node = False + queryset.add(node_fake) + queryset = sorted(queryset, key=lambda x: x.is_node, reverse=True) return queryset def get(self, request, *args, **kwargs): diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index ad806342b..1b765aefb 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -16,7 +16,7 @@ class Node(models.Model): child_mark = models.IntegerField(default=0) date_create = models.DateTimeField(auto_now_add=True) - is_asset = False + is_node = True def __str__(self): return self.full_value diff --git a/apps/assets/serializers/node.py b/apps/assets/serializers/node.py index 1c9c385e9..5b58ff241 100644 --- a/apps/assets/serializers/node.py +++ b/apps/assets/serializers/node.py @@ -48,7 +48,7 @@ class NodeSerializer(serializers.ModelSerializer): class Meta: model = Node - fields = ['id', 'key', 'value', 'parent', 'assets_amount', 'is_asset'] + fields = ['id', 'key', 'value', 'parent', 'assets_amount', 'is_node'] list_serializer_class = BulkListSerializer @staticmethod diff --git a/apps/perms/templates/perms/asset_permission_list.html b/apps/perms/templates/perms/asset_permission_list.html index eccef77a2..afec34269 100644 --- a/apps/perms/templates/perms/asset_permission_list.html +++ b/apps/perms/templates/perms/asset_permission_list.html @@ -78,12 +78,12 @@ var zTree, table, show = 0; function onSelected(event, treeNode) { setCookie('node_selected', treeNode.id); var url = table.ajax.url(); - if (treeNode.is_asset) { - url = setUrlParam(url, 'node', ""); - url = setUrlParam(url, 'asset', treeNode.id) - } else { + if (treeNode.is_node) { url = setUrlParam(url, 'asset', ""); url = setUrlParam(url, 'node', treeNode.id) + } else { + url = setUrlParam(url, 'node', ""); + url = setUrlParam(url, 'asset', treeNode.id) } setCookie('node_selected', treeNode.id); table.ajax.url(url); @@ -113,14 +113,14 @@ function filter(treeId, parentNode, childNodes) { $.each(childNodes, function (index, value) { value["pId"] = value["parent"]; value["name"] = value["value"]; - value["isParent"] = value["assets_amount"] !== 0; - value["iconSkin"] = value["is_asset"] ? "file" : null; + value["isParent"] = value["is_node"]; + value["iconSkin"] = value["is_node"] ? null : 'file'; }); return childNodes; } function beforeAsync(treeId, treeNode) { - return true; + return treeNode.is_node } function makeLabel(data) { @@ -226,7 +226,7 @@ function initTree() { }, async: { enable: true, - url: "{% url 'api-assets:node-children-2' %}?assets=1", + url: "{% url 'api-assets:node-children-2' %}?assets=1&all=1", autoParam:["id", "name=n", "level=lv"], dataFilter: filter, type: 'get' @@ -238,12 +238,13 @@ function initTree() { }; var zNodes = []; - $.get("{% url 'api-assets:node-children-2' %}", function(data, status){ + $.get("{% url 'api-assets:node-children-2' %}?assets=1&all=1", function(data, status){ $.each(data, function (index, value) { value["pId"] = value["parent"]; - value["isParent"] = value["assets_amount"] !== 0; value["name"] = value["value"]; value["open"] = value["key"] === "0"; + value["isParent"] = value["is_node"]; + value["iconSkin"] = value["is_node"] ? null : 'file'; }); zNodes = data; {#$.fn.zTree.init($("#assetTree"), setting);#} @@ -286,10 +287,10 @@ $(document).ready(function(){ var _nodes = []; var _assets = []; $.each(nodes, function (id, node) { - if (node.is_asset) { - _assets.push(node.id) - } else { + if (node.is_node) { _nodes.push(node.id) + } else { + _assets.push(node.id) } }); url += "?assets=" + _assets.join(",") + "&nodes=" + _nodes.join(",");