mirror of https://github.com/jumpserver/jumpserver
Finish system user list
parent
968b1b4cb6
commit
072da114db
|
@ -26,6 +26,13 @@ class AssetViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Asset.objects.all()
|
queryset = Asset.objects.all()
|
||||||
serializer_class = serializers.AssetSerializer
|
serializer_class = serializers.AssetSerializer
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
queryset = super(AssetViewSet, self).get_queryset()
|
||||||
|
idc = self.request.query_params.get('idc', '')
|
||||||
|
if idc:
|
||||||
|
queryset = queryset.filter(idc__id=idc)
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class IDCViewSet(viewsets.ModelViewSet):
|
class IDCViewSet(viewsets.ModelViewSet):
|
||||||
"""API endpoint that allows IDC to be viewed or edited."""
|
"""API endpoint that allows IDC to be viewed or edited."""
|
||||||
|
@ -46,17 +53,17 @@ class SystemUserViewSet(viewsets.ModelViewSet):
|
||||||
permission_classes = (IsSuperUser,)
|
permission_classes = (IsSuperUser,)
|
||||||
|
|
||||||
|
|
||||||
class IDCAssetsApi(generics.ListAPIView):
|
# class IDCAssetsApi(generics.ListAPIView):
|
||||||
model = IDC
|
# model = IDC
|
||||||
serializer_class = serializers.AssetSerializer
|
# serializer_class = serializers.AssetSerializer
|
||||||
|
#
|
||||||
def get(self, request, *args, **kwargs):
|
# def get(self, request, *args, **kwargs):
|
||||||
filter_kwargs = {self.lookup_field: self.kwargs[self.lookup_field]}
|
# filter_kwargs = {self.lookup_field: self.kwargs[self.lookup_field]}
|
||||||
self.object = get_object_or_404(self.model, **filter_kwargs)
|
# self.object = get_object_or_404(self.model, **filter_kwargs)
|
||||||
return super(IDCAssetsApi, self).get(request, *args, **kwargs)
|
# return super(IDCAssetsApi, self).get(request, *args, **kwargs)
|
||||||
|
#
|
||||||
def get_queryset(self):
|
# def get_queryset(self):
|
||||||
return self.object.assets.all()
|
# return self.object.assets.all()
|
||||||
|
|
||||||
|
|
||||||
class AssetListUpdateApi(BulkDeleteApiMixin, ListBulkCreateUpdateDestroyAPIView):
|
class AssetListUpdateApi(BulkDeleteApiMixin, ListBulkCreateUpdateDestroyAPIView):
|
||||||
|
|
|
@ -107,7 +107,7 @@ class AdminUser(models.Model):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def password(self):
|
def password(self):
|
||||||
return decrypt(self._password)
|
return signer.unsign(self._password)
|
||||||
|
|
||||||
@password.setter
|
@password.setter
|
||||||
def password(self, password_raw):
|
def password(self, password_raw):
|
||||||
|
@ -129,6 +129,10 @@ class AdminUser(models.Model):
|
||||||
def public_key(self, public_key_raw):
|
def public_key(self, public_key_raw):
|
||||||
self._public_key = signer.sign(public_key_raw)
|
self._public_key = signer.sign(public_key_raw)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def assets_amount(self):
|
||||||
|
return self.assets.count()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'admin_user'
|
db_table = 'admin_user'
|
||||||
|
|
||||||
|
@ -216,6 +220,10 @@ class SystemUser(models.Model):
|
||||||
assets = set(self.assets.all()) | self.get_assets_inherit_from_asset_groups()
|
assets = set(self.assets.all()) | self.get_assets_inherit_from_asset_groups()
|
||||||
return list(assets)
|
return list(assets)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def assets_amount(self):
|
||||||
|
return self.assets.count()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'system_user'
|
db_table = 'system_user'
|
||||||
|
|
||||||
|
|
|
@ -38,11 +38,21 @@ class AdminUserSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = AdminUser
|
model = AdminUser
|
||||||
|
|
||||||
|
def get_field_names(self, declared_fields, info):
|
||||||
|
fields = super(AdminUserSerializer, self).get_field_names(declared_fields, info)
|
||||||
|
fields.append('assets_amount')
|
||||||
|
return fields
|
||||||
|
|
||||||
|
|
||||||
class SystemUserSerializer(serializers.ModelSerializer):
|
class SystemUserSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SystemUser
|
model = SystemUser
|
||||||
|
|
||||||
|
def get_field_names(self, declared_fields, info):
|
||||||
|
fields = super(SystemUserSerializer, self).get_field_names(declared_fields, info)
|
||||||
|
fields.append('assets_amount')
|
||||||
|
return fields
|
||||||
|
|
||||||
|
|
||||||
class IDCSerializer(serializers.ModelSerializer):
|
class IDCSerializer(serializers.ModelSerializer):
|
||||||
assets_amount = serializers.SerializerMethodField()
|
assets_amount = serializers.SerializerMethodField()
|
||||||
|
|
|
@ -1,57 +1,16 @@
|
||||||
{% extends '_base_list.html' %}
|
{% extends '_base_list.html' %}
|
||||||
{#{% load i18n %}#}
|
|
||||||
{#{% load common_tags %}#}
|
|
||||||
{#{% block content_left_head %}#}
|
|
||||||
{# <a href="{% url 'assets:admin-user-create' %}" class="btn btn-sm btn-primary "> {% trans "Create admin user" %} </a>#}
|
|
||||||
{#{% endblock %}#}
|
|
||||||
{##}
|
|
||||||
{#{% block table_head %}#}
|
|
||||||
{# <th class="text-center">{% trans 'ID' %}</th>#}
|
|
||||||
{# <th class="text-center"><a href="{% url 'assets:admin-user-list' %}?sort=name">{% trans 'Name' %}</a></th>#}
|
|
||||||
{# <th class="text-center"><a href="{% url 'assets:admin-user-list' %}?sort=username">{% trans 'Username' %}</a></th>#}
|
|
||||||
{# <th class="text-center">{% trans 'Asset num' %}</th>#}
|
|
||||||
{# <th class="text-center">{% trans 'Lost connection' %}</th>#}
|
|
||||||
{# <th class="text-center">{% trans 'Comment' %}</th>#}
|
|
||||||
{# <th class="text-center"></th>#}
|
|
||||||
{#{% endblock %}#}
|
|
||||||
{##}
|
|
||||||
{#{% block table_body %}#}
|
|
||||||
{# {% for admin_user in admin_user_list %}#}
|
|
||||||
{# <tr class="gradeX">#}
|
|
||||||
{# <td class="text-center">{{ admin_user.id }}</td>#}
|
|
||||||
{# <td>#}
|
|
||||||
{# <a href="{% url 'assets:admin-user-detail' pk=admin_user.id %}">#}
|
|
||||||
{# {{ admin_user.name }}#}
|
|
||||||
{# </a>#}
|
|
||||||
{# </td>#}
|
|
||||||
{# <td class="text-center">{{ admin_user.username }}</td>#}
|
|
||||||
{# <td class="text-center">{{ admin_user.assets.count }}</td>#}
|
|
||||||
{# <td class="text-center">{{ admin_user.assets.count }}</td>#}
|
|
||||||
{# <td class="text-center">{{ admin_user.comment|truncatewords:8 }}</td>#}
|
|
||||||
{# <td class="text-center">#}
|
|
||||||
{# <!-- Todo: Click script button will paste a url to clipboard like: curl http://url/admin_user_create.sh | bash -->#}
|
|
||||||
{# <a href="{% url 'assets:admin-user-update' pk=admin_user.id %}" class="btn btn-xs btn-primary">{% trans 'Script' %}</a>#}
|
|
||||||
{# <!-- Todo: Click refresh button will run a task to test admin user could connect asset or not immediately -->#}
|
|
||||||
{# <a href="{% url 'assets:admin-user-update' pk=admin_user.id %}" class="btn btn-xs btn-warning">{% trans 'Refresh' %}</a>#}
|
|
||||||
{# <a href="{% url 'assets:admin-user-update' pk=admin_user.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a>#}
|
|
||||||
{# <a onclick="obj_del(this,'{{ admin_user.name }}','{% url 'assets:admin-user-delete' admin_user.id %}')" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a>#}
|
|
||||||
{# </td>#}
|
|
||||||
{# </tr>#}
|
|
||||||
{# {% endfor %}#}
|
|
||||||
{#{% endblock %}#}
|
|
||||||
{% extends '_base_list.html' %}
|
|
||||||
{% load i18n static %}
|
{% load i18n static %}
|
||||||
{% block custom_head_css_js %}
|
{% block custom_head_css_js %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
<style>
|
<style>
|
||||||
div.dataTables_wrapper div.dataTables_filter,
|
div.dataTables_wrapper div.dataTables_filter,
|
||||||
.dataTables_length {
|
.dataTables_length {
|
||||||
float: right !important;
|
float: right !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_filter {
|
div.dataTables_wrapper div.dataTables_filter {
|
||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block table_search %}{% endblock %}
|
{% block table_search %}{% endblock %}
|
||||||
|
@ -85,13 +44,13 @@ $(document).ready(function(){
|
||||||
ele: $('#admin_user_list_table'),
|
ele: $('#admin_user_list_table'),
|
||||||
columnDefs: [
|
columnDefs: [
|
||||||
{targets: 1, createdCell: function (td, cellData, rowData) {
|
{targets: 1, createdCell: function (td, cellData, rowData) {
|
||||||
var detail_btn = '<a href="{% url "assets:admin-user-detail" pk=99991937 %}">' + cellData + '</a>';
|
var detail_btn = '<a href="{% url "assets:api-admin-user-detail" pk=99991937 %}">' + cellData + '</a>';
|
||||||
$(td).html(detail_btn.replace('99991937', rowData.id));
|
$(td).html(detail_btn.replace('99991937', rowData.id));
|
||||||
}},
|
}},
|
||||||
{# {targets: 4, createdCell: function (td, cellData) {#}
|
{targets: 5, createdCell: function (td, cellData) {
|
||||||
{# var innerHtml = cellData.length > 8 ? cellData.substring(0, 8) + '...': cellData;#}
|
var innerHtml = cellData.length > 8 ? cellData.substring(0, 24) + '...': cellData;
|
||||||
{# $(td).html('<a href="javascript:void(0);" data-toggle="tooltip" title="' + cellData + '">' + innerHtml + '</a>');#}
|
$(td).html('<a href="javascript:void(0);" data-toggle="tooltip" title="' + cellData + '">' + innerHtml + '</a>');
|
||||||
{# }},#}
|
}},
|
||||||
{# {targets: 6, createdCell: function (td, cellData) {#}
|
{# {targets: 6, createdCell: function (td, cellData) {#}
|
||||||
{# if (!cellData) {#}
|
{# if (!cellData) {#}
|
||||||
{# $(td).html('<i class="fa fa-times text-danger"></i>')#}
|
{# $(td).html('<i class="fa fa-times text-danger"></i>')#}
|
||||||
|
@ -100,13 +59,13 @@ $(document).ready(function(){
|
||||||
{# }#}
|
{# }#}
|
||||||
{# }},#}
|
{# }},#}
|
||||||
{targets: 6, createdCell: function (td, cellData, rowData) {
|
{targets: 6, createdCell: function (td, cellData, rowData) {
|
||||||
var update_btn = '<a href="{% url "assets:idc-update" pk=99991937 %}" class="btn btn-xs btn-info">{% trans "Update" %}</a>'.replace('99991937', cellData);
|
var update_btn = '<a href="{% url "assets:admin-user-update" pk=99991937 %}" class="btn btn-xs btn-info">{% trans "Update" %}</a>'.replace('99991937', cellData);
|
||||||
var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_user_delete" data-uid="99991937">{% trans "Delete" %}</a>'.replace('99991937', cellData);
|
var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_admin_user_delete" data-uid="99991937">{% trans "Delete" %}</a>'.replace('99991937', cellData);
|
||||||
$(td).html(update_btn + del_btn)
|
$(td).html(update_btn + del_btn)
|
||||||
}}],
|
}}],
|
||||||
ajax_url: '{% url "assets:idc-list-create-api" %}',
|
ajax_url: '{% url "assets:api-admin-user-list" %}',
|
||||||
columns: [{data: function(){return ""}}, {data: "name" }, {data: "assets_amount" }, {data: "contact" }, {data: "phone" },
|
columns: [{data: function(){return ""}}, {data: "name" }, {data: "username" }, {data: "assets_amount" }, {data: function () {return 'lost'} },
|
||||||
{data: "operator" }, {data: "id" }],
|
{data: "comment" }, {data: "id" }],
|
||||||
op_html: $('#actions').html()
|
op_html: $('#actions').html()
|
||||||
};
|
};
|
||||||
jumpserver.initDataTable(options);
|
jumpserver.initDataTable(options);
|
||||||
|
|
|
@ -7,14 +7,6 @@
|
||||||
<script src="{% static 'js/plugins/select2/select2.full.min.js' %}"></script>
|
<script src="{% static 'js/plugins/select2/select2.full.min.js' %}"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
div.dataTables_wrapper div.dataTables_filter {
|
|
||||||
margin-left: 15px;
|
|
||||||
float: right !important;
|
|
||||||
}
|
|
||||||
div.dataTables_wrapper div.dataTables_filter,
|
|
||||||
.dataTables_length {
|
|
||||||
float: right !important;
|
|
||||||
}
|
|
||||||
.custom{
|
.custom{
|
||||||
/*float:left;*/
|
/*float:left;*/
|
||||||
margin-right:5px;
|
margin-right:5px;
|
||||||
|
@ -80,7 +72,7 @@
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a href="{% url 'assets:asset-update' pk=asset.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a>
|
<a href="{% url 'assets:asset-update' pk=asset.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a>
|
||||||
<a onclick="objectDelete(this,'{{ asset.hostname }}','{% url 'assets:asset-detail-update-delete-api' pk=asset.id %}')" class="btn btn-xs btn-danger del">
|
<a onclick="objectDelete(this,'{{ asset.hostname }}','{% url 'assets:api-asset-detail' pk=asset.id %}')" class="btn btn-xs btn-danger del">
|
||||||
{% trans 'Delete' %}</a>
|
{% trans 'Delete' %}</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -198,7 +190,7 @@
|
||||||
var column2 = table.rows('.selected').data();
|
var column2 = table.rows('.selected').data();
|
||||||
var id_list = [];
|
var id_list = [];
|
||||||
var plain_id_list = [];
|
var plain_id_list = [];
|
||||||
var the_url = "{% url 'assets:asset-bulk-update-api' %}";
|
var the_url = "{% url 'assets:api-asset-bulk-update' %}";
|
||||||
for(var i=0;i<column2.length;i++){
|
for(var i=0;i<column2.length;i++){
|
||||||
id_list.push({id: column2[i].id,hostname:column2[i].ip});
|
id_list.push({id: column2[i].id,hostname:column2[i].ip});
|
||||||
plain_id_list.push(parseInt(column2[i].id));
|
plain_id_list.push(parseInt(column2[i].id));
|
||||||
|
|
|
@ -7,16 +7,6 @@
|
||||||
{% block custom_head_css_js %}
|
{% block custom_head_css_js %}
|
||||||
<link href="{% static "css/plugins/select2/select2.min.css" %}" rel="stylesheet">
|
<link href="{% static "css/plugins/select2/select2.min.css" %}" rel="stylesheet">
|
||||||
<script src="{% static "js/plugins/select2/select2.full.min.js" %}"></script>
|
<script src="{% static "js/plugins/select2/select2.full.min.js" %}"></script>
|
||||||
<style>
|
|
||||||
div.dataTables_wrapper div.dataTables_filter,
|
|
||||||
.dataTables_length {
|
|
||||||
float: right !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_filter {
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="wrapper wrapper-content animated fadeInRight">
|
<div class="wrapper wrapper-content animated fadeInRight">
|
||||||
|
@ -128,7 +118,7 @@
|
||||||
$(td).html('<i class="fa fa-check text-navy"></i>')
|
$(td).html('<i class="fa fa-check text-navy"></i>')
|
||||||
}
|
}
|
||||||
}}],
|
}}],
|
||||||
ajax_url: '{% url "assets:idc-assets-api" pk=idc.id %}',
|
ajax_url: '{% url "assets:api-asset-list" %}?idc={{ idc.id }}',
|
||||||
columns: [{data: function(){return ""}}, {data: "hostname" }, {data: "ip" }, {data: "port" },
|
columns: [{data: function(){return ""}}, {data: "hostname" }, {data: "ip" }, {data: "port" },
|
||||||
{data: "type" }, {data: "is_active" }]
|
{data: "type" }, {data: "is_active" }]
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,18 +1,5 @@
|
||||||
{% extends '_base_list.html' %}
|
{% extends '_base_list.html' %}
|
||||||
{% load i18n static %}
|
{% load i18n static %}
|
||||||
{% block custom_head_css_js %}
|
|
||||||
{{ block.super }}
|
|
||||||
<style>
|
|
||||||
div.dataTables_wrapper div.dataTables_filter,
|
|
||||||
.dataTables_length {
|
|
||||||
float: right !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_filter {
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{% endblock %}
|
|
||||||
{% block table_search %}{% endblock %}
|
{% block table_search %}{% endblock %}
|
||||||
{% block table_container %}
|
{% block table_container %}
|
||||||
<div class="uc pull-left m-l-5 m-r-5">
|
<div class="uc pull-left m-l-5 m-r-5">
|
||||||
|
@ -63,7 +50,7 @@ $(document).ready(function(){
|
||||||
var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_user_delete" data-uid="99991937">{% trans "Delete" %}</a>'.replace('99991937', cellData);
|
var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_user_delete" data-uid="99991937">{% trans "Delete" %}</a>'.replace('99991937', cellData);
|
||||||
$(td).html(update_btn + del_btn)
|
$(td).html(update_btn + del_btn)
|
||||||
}}],
|
}}],
|
||||||
ajax_url: '{% url "assets:idc-list-create-api" %}',
|
ajax_url: '{% url "assets:api-idc-list" %}',
|
||||||
columns: [{data: function(){return ""}}, {data: "name" }, {data: "assets_amount" }, {data: "contact" }, {data: "phone" },
|
columns: [{data: function(){return ""}}, {data: "name" }, {data: "assets_amount" }, {data: "contact" }, {data: "phone" },
|
||||||
{data: "operator" }, {data: "id" }],
|
{data: "operator" }, {data: "id" }],
|
||||||
op_html: $('#actions').html()
|
op_html: $('#actions').html()
|
||||||
|
|
|
@ -58,50 +58,17 @@ urlpatterns = [
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
# router.register(r'v1/asset-groups/', api.AssetGroupViewSet)
|
router.register(r'v1/asset-groups', api.AssetGroupViewSet, 'api-asset-group')
|
||||||
# router.register(r'v1/assets/', api.AssetViewSet)
|
router.register(r'v1/assets', api.AssetViewSet, 'api-asset')
|
||||||
# router.register(r'v1/idc/', api.IDCViewSet)
|
router.register(r'v1/idc', api.IDCViewSet, 'api-idc')
|
||||||
|
router.register(r'v1/admin-user', api.AdminUserViewSet, 'api-admin-user')
|
||||||
asset_list_view = api.AssetViewSet.as_view({
|
router.register(r'v1/system-user', api.SystemUserViewSet, 'api-system-user')
|
||||||
'get': 'list',
|
|
||||||
'post': 'create'
|
|
||||||
})
|
|
||||||
|
|
||||||
asset_detail_view = api.AssetViewSet.as_view({
|
|
||||||
'get': 'retrieve',
|
|
||||||
'put': 'update',
|
|
||||||
'patch': 'partial_update',
|
|
||||||
'delete': 'destroy',
|
|
||||||
})
|
|
||||||
|
|
||||||
idc_list_view = api.IDCViewSet.as_view({
|
|
||||||
'get': 'list',
|
|
||||||
'post': 'create',
|
|
||||||
})
|
|
||||||
|
|
||||||
idc_detail_view = api.IDCViewSet.as_view({
|
|
||||||
'get': 'retrieve',
|
|
||||||
'put': 'update',
|
|
||||||
'patch': 'partial_update',
|
|
||||||
'delete': 'destroy',
|
|
||||||
})
|
|
||||||
|
|
||||||
admin_user_list_view = api.AdminUserViewSet.as_view({
|
|
||||||
'get': 'list',
|
|
||||||
'post': 'create',
|
|
||||||
})
|
|
||||||
|
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
url(r'^v1/assets/$', asset_list_view, name='asset-list-create-api'),
|
url(r'^v1/assets_bulk/$', api.AssetListUpdateApi.as_view(), name='api-asset-bulk-update'),
|
||||||
url(r'^v1/assets/(?P<pk>[0-9]+)/$', asset_detail_view, name='asset-detail-update-delete-api'),
|
# url(r'^v1/idc/(?P<pk>[0-9]+)/assets/$', api.IDCAssetsApi.as_view(), name='api-idc-assets'),
|
||||||
url(r'^v1/assets_bulk/$', api.AssetListUpdateApi.as_view(), name='asset-bulk-update-api'),
|
url(r'^v1/system-user/auth/', api.SystemUserAuthApi.as_view(), name='api-system-user-auth'),
|
||||||
url(r'^v1/idc/$', idc_list_view, name='idc-list-create-api'),
|
|
||||||
url(r'^v1/idc/(?P<pk>[0-9]+)/$', idc_detail_view, name='idc-detail-update-delete-api'),
|
|
||||||
url(r'^v1/idc/(?P<pk>[0-9]+)/assets/$', api.IDCAssetsApi.as_view(), name='idc-assets-api'),
|
|
||||||
url(r'^v1/admin-user/$', idc_list_view, name='idc-list-create-api'),
|
|
||||||
url(r'^v1/idc/(?P<pk>[0-9]+)/$', idc_detail_view, name='idc-detail-update-delete-api'),
|
|
||||||
url(r'^v1/system-user/auth/', api.SystemUserAuthApi.as_view(), name='system-user-auth'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
urlpatterns += router.urls
|
||||||
|
|
|
@ -431,34 +431,34 @@ class IDCDeleteView(AdminUserRequiredMixin, DeleteView):
|
||||||
success_url = reverse_lazy('assets:idc-list')
|
success_url = reverse_lazy('assets:idc-list')
|
||||||
|
|
||||||
|
|
||||||
class AdminUserListView(AdminUserRequiredMixin, ListView):
|
class AdminUserListView(AdminUserRequiredMixin, TemplateView):
|
||||||
model = AdminUser
|
model = AdminUser
|
||||||
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
|
# paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
|
||||||
context_object_name = 'admin_user_list'
|
# context_object_name = 'admin_user_list'
|
||||||
template_name = 'assets/admin_user_list.html'
|
template_name = 'assets/admin_user_list.html'
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = {
|
context = {
|
||||||
'app': _('Assets'),
|
'app': _('Assets'),
|
||||||
'action': _('Admin user list'),
|
'action': _('Admin user list'),
|
||||||
'keyword': self.request.GET.get('keyword', '')
|
# 'keyword': self.request.GET.get('keyword', '')
|
||||||
}
|
}
|
||||||
kwargs.update(context)
|
kwargs.update(context)
|
||||||
return super(AdminUserListView, self).get_context_data(**kwargs)
|
return super(AdminUserListView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
def get_queryset(self):
|
# def get_queryset(self):
|
||||||
# Todo: Default order by lose asset connection num
|
# Todo: Default order by lose asset connection num
|
||||||
self.queryset = super(AdminUserListView, self).get_queryset()
|
# self.queryset = super(AdminUserListView, self).get_queryset()
|
||||||
self.keyword = keyword = self.request.GET.get('keyword', '')
|
# self.keyword = keyword = self.request.GET.get('keyword', '')
|
||||||
self.sort = sort = self.request.GET.get('sort', '-date_created')
|
# self.sort = sort = self.request.GET.get('sort', '-date_created')
|
||||||
|
#
|
||||||
if keyword:
|
# if keyword:
|
||||||
self.queryset = self.queryset.filter(Q(name__icontains=keyword) |
|
# self.queryset = self.queryset.filter(Q(name__icontains=keyword) |
|
||||||
Q(comment__icontains=keyword))
|
# Q(comment__icontains=keyword))
|
||||||
|
#
|
||||||
if sort:
|
# if sort:
|
||||||
self.queryset = self.queryset.order_by(sort)
|
# self.queryset = self.queryset.order_by(sort)
|
||||||
return self.queryset
|
# return self.queryset
|
||||||
|
|
||||||
|
|
||||||
class AdminUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
class AdminUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
||||||
|
|
|
@ -255,3 +255,12 @@ table.dataTable tbody td.selected td i.text-navy
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_filter,
|
||||||
|
.dataTables_length {
|
||||||
|
float: right !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dataTables_wrapper div.dataTables_filter {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
|
@ -1585,9 +1585,9 @@ table.dataTable thead .sorting_desc_disabled {
|
||||||
.dataTables_wrapper {
|
.dataTables_wrapper {
|
||||||
padding-bottom: 30px;
|
padding-bottom: 30px;
|
||||||
}
|
}
|
||||||
.dataTables_length {
|
/*.dataTables_length {*/
|
||||||
float: left;
|
/*float: left;*/
|
||||||
}
|
/*}*/
|
||||||
.dataTables_filter label {
|
.dataTables_filter label {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,7 +293,7 @@ jumpserver.initDataTable = function (options) {
|
||||||
];
|
];
|
||||||
columnDefs = options.columnDefs ? options.columnDefs.concat(columnDefs) : columnDefs;
|
columnDefs = options.columnDefs ? options.columnDefs.concat(columnDefs) : columnDefs;
|
||||||
var table = ele.DataTable({
|
var table = ele.DataTable({
|
||||||
pageLength: options.pageLength || 25,
|
pageLength: options.pageLength || 15,
|
||||||
dom: options.dom || '<"#uc.pull-left"><"html5buttons"B>flti<"row m-t"<"#op.col-md-6"><"col-md-6"p>>',
|
dom: options.dom || '<"#uc.pull-left"><"html5buttons"B>flti<"row m-t"<"#op.col-md-6"><"col-md-6"p>>',
|
||||||
language: {
|
language: {
|
||||||
url: options.i18n_url || "/static/js/plugins/dataTables/i18n/zh-hans.json"
|
url: options.i18n_url || "/static/js/plugins/dataTables/i18n/zh-hans.json"
|
||||||
|
@ -330,7 +330,8 @@ jumpserver.initDataTable = function (options) {
|
||||||
url: options.ajax_url ,
|
url: options.ajax_url ,
|
||||||
dataSrc: ""
|
dataSrc: ""
|
||||||
},
|
},
|
||||||
columns: options.columns || []
|
columns: options.columns || [],
|
||||||
|
lengthMenu: [[15, 25, 50, -1], [15, 25, 50, "All"]]
|
||||||
});
|
});
|
||||||
table.on('select', function(e, dt, type, indexes) {
|
table.on('select', function(e, dt, type, indexes) {
|
||||||
var $node = table[ type ]( indexes ).nodes().to$();
|
var $node = table[ type ]( indexes ).nodes().to$();
|
||||||
|
|
|
@ -1,18 +1,5 @@
|
||||||
{% extends '_base_list.html' %}
|
{% extends '_base_list.html' %}
|
||||||
{% load i18n static %}
|
{% load i18n static %}
|
||||||
{% block custom_head_css_js %}
|
|
||||||
{{ block.super }}
|
|
||||||
<style>
|
|
||||||
div.dataTables_wrapper div.dataTables_filter,
|
|
||||||
.dataTables_length {
|
|
||||||
float: right !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_filter {
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{% endblock %}
|
|
||||||
{% block table_search %}{% endblock %}
|
{% block table_search %}{% endblock %}
|
||||||
{% block table_container %}
|
{% block table_container %}
|
||||||
<div class="pull-left m-r-5"><a href="{% url 'users:user-group-create' %}" class="btn btn-sm btn-primary ">{% trans "Add User Group" %}</a></div>
|
<div class="pull-left m-r-5"><a href="{% url 'users:user-group-create' %}" class="btn btn-sm btn-primary ">{% trans "Add User Group" %}</a></div>
|
||||||
|
@ -20,10 +7,10 @@ div.dataTables_wrapper div.dataTables_filter {
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-center">
|
<th class="text-center">
|
||||||
<div class="checkbox checkbox-default"><input id="" type="checkbox" class="ipt_check_all"><label></label></div>
|
<input id="" type="checkbox" class="ipt_check_all">
|
||||||
</th>
|
</th>
|
||||||
<th class="text-center">{% trans 'Name' %}</a></th>
|
<th class="text-center">{% trans 'Name' %}</th>
|
||||||
<th class="text-center">{% trans 'User Amount' %}</a></th>
|
<th class="text-center">{% trans 'User Amount' %}</th>
|
||||||
<th class="text-center">{% trans 'Asset Amount' %}</th>
|
<th class="text-center">{% trans 'Asset Amount' %}</th>
|
||||||
<th class="text-center">{% trans 'Comment' %}</th>
|
<th class="text-center">{% trans 'Comment' %}</th>
|
||||||
<th class="text-center">{% trans 'Action' %}</th>
|
<th class="text-center">{% trans 'Action' %}</th>
|
||||||
|
|
|
@ -1,18 +1,5 @@
|
||||||
{% extends '_base_list.html' %}
|
{% extends '_base_list.html' %}
|
||||||
{% load i18n static %}
|
{% load i18n static %}
|
||||||
{% block custom_head_css_js %}
|
|
||||||
{{ block.super }}
|
|
||||||
<style>
|
|
||||||
div.dataTables_wrapper div.dataTables_filter,
|
|
||||||
.dataTables_length {
|
|
||||||
float: right !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.dataTables_wrapper div.dataTables_filter {
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{% endblock %}
|
|
||||||
{% block table_search %}{% endblock %}
|
{% block table_search %}{% endblock %}
|
||||||
{% block table_container %}
|
{% block table_container %}
|
||||||
<div class="uc pull-left"><a href="javascript:void(0);" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#user_import_modal"> {% trans "Import user" %} </a></div>
|
<div class="uc pull-left"><a href="javascript:void(0);" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#user_import_modal"> {% trans "Import user" %} </a></div>
|
||||||
|
|
Loading…
Reference in New Issue