mirror of https://github.com/jumpserver/jumpserver
[Update] 资产列表选中和移除资产
parent
bd4768c147
commit
6104acae8f
|
@ -62,7 +62,7 @@ class AssetViewSet(IDInFilterMixin, LabelFilter, BulkModelViewSet):
|
||||||
queryset = queryset.filter(cluster__in=clusters)
|
queryset = queryset.filter(cluster__in=clusters)
|
||||||
if node_id:
|
if node_id:
|
||||||
node = get_object_or_404(Node, id=node_id)
|
node = get_object_or_404(Node, id=node_id)
|
||||||
queryset = queryset.filter(nodes__key__startswith=node.key)
|
queryset = queryset.filter(nodes__key__startswith=node.key).distinct()
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from rest_framework import generics, mixins
|
from rest_framework import generics, mixins
|
||||||
|
from rest_framework.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework_bulk import BulkModelViewSet
|
from rest_framework_bulk import BulkModelViewSet
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
@ -25,7 +26,10 @@ from .. import serializers
|
||||||
|
|
||||||
|
|
||||||
logger = get_logger(__file__)
|
logger = get_logger(__file__)
|
||||||
__all__ = ['NodeViewSet', 'NodeChildrenApi']
|
__all__ = [
|
||||||
|
'NodeViewSet', 'NodeChildrenApi',
|
||||||
|
'NodeAddAssetsApi', 'NodeRemoveAssetsApi',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class NodeViewSet(BulkModelViewSet):
|
class NodeViewSet(BulkModelViewSet):
|
||||||
|
@ -70,3 +74,26 @@ class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView):
|
||||||
response = [{"id": node.id, "key": node.key, "value": node.value} for node in children]
|
response = [{"id": node.id, "key": node.key, "value": node.value} for node in children]
|
||||||
return Response(response, status=200)
|
return Response(response, status=200)
|
||||||
|
|
||||||
|
|
||||||
|
class NodeAddAssetsApi(generics.UpdateAPIView):
|
||||||
|
serializer_class = serializers.NodeAssetsSerializer
|
||||||
|
queryset = Node.objects.all()
|
||||||
|
permission_classes = (IsSuperUser,)
|
||||||
|
instance = None
|
||||||
|
|
||||||
|
def perform_update(self, serializer):
|
||||||
|
assets = serializer.validated_data.get('assets')
|
||||||
|
instance = self.get_object()
|
||||||
|
instance.assets.add(*tuple(assets))
|
||||||
|
|
||||||
|
|
||||||
|
class NodeRemoveAssetsApi(generics.UpdateAPIView):
|
||||||
|
serializer_class = serializers.NodeAssetsSerializer
|
||||||
|
queryset = Node.objects.all()
|
||||||
|
permission_classes = (IsSuperUser,)
|
||||||
|
instance = None
|
||||||
|
|
||||||
|
def perform_update(self, serializer):
|
||||||
|
assets = serializer.validated_data.get('assets')
|
||||||
|
instance = self.get_object()
|
||||||
|
instance.assets.remove(*tuple(assets))
|
||||||
|
|
|
@ -335,3 +335,11 @@ class NodeSerializer(serializers.ModelSerializer):
|
||||||
field = fields["key"]
|
field = fields["key"]
|
||||||
field.required = False
|
field.required = False
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
|
|
||||||
|
class NodeAssetsSerializer(serializers.ModelSerializer):
|
||||||
|
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Node
|
||||||
|
fields = ['assets']
|
||||||
|
|
|
@ -109,7 +109,20 @@ $(document).ready(function(){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
'assets': id_list
|
||||||
|
};
|
||||||
|
|
||||||
|
var success = function () {
|
||||||
|
modal_table.ajax.reload()
|
||||||
|
};
|
||||||
|
|
||||||
|
APIUpdateAttr({
|
||||||
|
'url': '/api/assets/v1/nodes/' + current_node.id + '/assets/add/',
|
||||||
|
'method': 'PUT',
|
||||||
|
'body': JSON.stringify(data),
|
||||||
|
'success': success
|
||||||
|
})
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,7 @@
|
||||||
<select class="form-control m-b" style="width: auto" id="slct_bulk_update">
|
<select class="form-control m-b" style="width: auto" id="slct_bulk_update">
|
||||||
<option value="delete">{% trans 'Delete selected' %}</option>
|
<option value="delete">{% trans 'Delete selected' %}</option>
|
||||||
<option value="update">{% trans 'Update selected' %}</option>
|
<option value="update">{% trans 'Update selected' %}</option>
|
||||||
|
<option value="remove">{% trans 'Remove from this node' %}</option>
|
||||||
<option value="deactive">{% trans 'Deactive selected' %}</option>
|
<option value="deactive">{% trans 'Deactive selected' %}</option>
|
||||||
<option value="active">{% trans 'Active selected' %}</option>
|
<option value="active">{% trans 'Active selected' %}</option>
|
||||||
</select>
|
</select>
|
||||||
|
@ -169,8 +170,6 @@ function initTable() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function addTreeNode() {
|
function addTreeNode() {
|
||||||
hideRMenu();
|
hideRMenu();
|
||||||
var parentNode = zTree.getSelectedNodes()[0];
|
var parentNode = zTree.getSelectedNodes()[0];
|
||||||
|
@ -281,17 +280,26 @@ function onRename(event, treeId, treeNode, isCancel){
|
||||||
function onSelected(event, treeNode) {
|
function onSelected(event, treeNode) {
|
||||||
var url = asset_table.ajax.url();
|
var url = asset_table.ajax.url();
|
||||||
url = setUrlParam(url, "node_id", treeNode.id);
|
url = setUrlParam(url, "node_id", treeNode.id);
|
||||||
|
setCookie('node_selected', treeNode.id);
|
||||||
asset_table.ajax.url(url);
|
asset_table.ajax.url(url);
|
||||||
asset_table.ajax.reload();
|
asset_table.ajax.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectQueryNode() {
|
function selectQueryNode() {
|
||||||
var node_id = $.getUrlParam("node");
|
var query_node_id = $.getUrlParam("node");
|
||||||
if (node_id !== null) {
|
var cookie_node_id = getCookie('node_selected');
|
||||||
var node = zTree.getNodesByParam("id", node_id, null);
|
var node;
|
||||||
if (node){
|
var node_id;
|
||||||
zTree.selectNode(node[0]);
|
|
||||||
}
|
if (query_node_id !== null) {
|
||||||
|
node_id = query_node_id
|
||||||
|
} else if (cookie_node_id !== null) {
|
||||||
|
node_id = cookie_node_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = zTree.getNodesByParam("id", node_id, null);
|
||||||
|
if (node){
|
||||||
|
zTree.selectNode(node[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,6 +487,31 @@ $(document).ready(function(){
|
||||||
var url = "{% url 'assets:asset-bulk-update' %}?assets_id=" + id_list_string;
|
var url = "{% url 'assets:asset-bulk-update' %}?assets_id=" + id_list_string;
|
||||||
location.href = url
|
location.href = url
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function doRemove() {
|
||||||
|
var current_node;
|
||||||
|
var nodes = zTree.getSelectedNodes();
|
||||||
|
if (nodes && nodes.length === 1) {
|
||||||
|
current_node = nodes[0]
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
'assets': id_list
|
||||||
|
};
|
||||||
|
|
||||||
|
var success = function () {
|
||||||
|
asset_table.ajax.reload()
|
||||||
|
};
|
||||||
|
|
||||||
|
APIUpdateAttr({
|
||||||
|
'url': '/api/assets/v1/nodes/' + current_node.id + '/assets/remove/',
|
||||||
|
'method': 'PUT',
|
||||||
|
'body': JSON.stringify(data),
|
||||||
|
'success': success
|
||||||
|
})
|
||||||
|
}
|
||||||
switch(action) {
|
switch(action) {
|
||||||
case 'deactive':
|
case 'deactive':
|
||||||
doDeactive();
|
doDeactive();
|
||||||
|
@ -492,6 +525,9 @@ $(document).ready(function(){
|
||||||
case 'active':
|
case 'active':
|
||||||
doActive();
|
doActive();
|
||||||
break;
|
break;
|
||||||
|
case 'remove':
|
||||||
|
doRemove();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,8 @@ urlpatterns = [
|
||||||
url(r'^v1/system-user/(?P<pk>[0-9a-zA-Z\-]{36})/connective/$',
|
url(r'^v1/system-user/(?P<pk>[0-9a-zA-Z\-]{36})/connective/$',
|
||||||
api.SystemUserTestConnectiveApi.as_view(), name='system-user-connective'),
|
api.SystemUserTestConnectiveApi.as_view(), name='system-user-connective'),
|
||||||
url(r'^v1/nodes/(?P<pk>[0-9a-zA-Z\-]{36})/children/$', api.NodeChildrenApi.as_view(), name='node-children'),
|
url(r'^v1/nodes/(?P<pk>[0-9a-zA-Z\-]{36})/children/$', api.NodeChildrenApi.as_view(), name='node-children'),
|
||||||
|
url(r'^v1/nodes/(?P<pk>[0-9a-zA-Z\-]{36})/assets/add/$', api.NodeAddAssetsApi.as_view(), name='node-add-assets'),
|
||||||
|
url(r'^v1/nodes/(?P<pk>[0-9a-zA-Z\-]{36})/assets/remove/$', api.NodeRemoveAssetsApi.as_view(), name='node-remove-assets'),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += router.urls
|
urlpatterns += router.urls
|
||||||
|
|
|
@ -135,17 +135,26 @@ function initTable() {
|
||||||
function onSelected(event, treeNode) {
|
function onSelected(event, treeNode) {
|
||||||
var url = table.ajax.url();
|
var url = table.ajax.url();
|
||||||
url = setUrlParam(url, "node_id", treeNode.id);
|
url = setUrlParam(url, "node_id", treeNode.id);
|
||||||
|
setCookie('node_selected', treeNode.id);
|
||||||
table.ajax.url(url);
|
table.ajax.url(url);
|
||||||
table.ajax.reload();
|
table.ajax.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectQueryNode() {
|
function selectQueryNode() {
|
||||||
var node_id = $.getUrlParam("node");
|
var query_node_id = $.getUrlParam("node");
|
||||||
if (node_id !== null) {
|
var cookie_node_id = getCookie('node_selected');
|
||||||
var node = zTree.getNodesByParam("id", node_id, null);
|
var node;
|
||||||
if (node) {
|
var node_id;
|
||||||
zTree.selectNode(node[0]);
|
|
||||||
}
|
if (query_node_id !== null) {
|
||||||
|
node_id = query_node_id
|
||||||
|
} else if (cookie_node_id !== null) {
|
||||||
|
node_id = cookie_node_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = zTree.getNodesByParam("id", node_id, null);
|
||||||
|
if (node){
|
||||||
|
zTree.selectNode(node[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -562,7 +562,6 @@ function setUrlParam(url, name, value) {
|
||||||
url = urlArray[0] + "?";
|
url = urlArray[0] + "?";
|
||||||
var newParam = [];
|
var newParam = [];
|
||||||
$.each(oriParamMap, function (index, value) {
|
$.each(oriParamMap, function (index, value) {
|
||||||
console.log(index, value);
|
|
||||||
newParam.push(index + "=" + value);
|
newParam.push(index + "=" + value);
|
||||||
});
|
});
|
||||||
url += newParam.join("&")
|
url += newParam.join("&")
|
||||||
|
|
Loading…
Reference in New Issue