Commit e89d3b38 authored by ibuler's avatar ibuler

Update asset

parent 6e69c018
...@@ -20,9 +20,14 @@ class AssetViewSet(viewsets.ModelViewSet): ...@@ -20,9 +20,14 @@ class AssetViewSet(viewsets.ModelViewSet):
def get_queryset(self): def get_queryset(self):
queryset = super(AssetViewSet, self).get_queryset() queryset = super(AssetViewSet, self).get_queryset()
idc = self.request.query_params.get('idc', '') idc_id = self.request.query_params.get('idc_id', '')
if idc: asset_group_id = self.request.query_params.get('asset_group_id', '')
queryset = queryset.filter(idc__id=idc) if idc_id:
queryset = queryset.filter(idc__id=idc_id)
if asset_group_id:
queryset = queryset.filter(groups__id=asset_group_id)
return queryset return queryset
......
...@@ -40,13 +40,26 @@ class SystemUserSerializer(serializers.ModelSerializer): ...@@ -40,13 +40,26 @@ class SystemUserSerializer(serializers.ModelSerializer):
class AssetSerializer(BulkSerializerMixin, serializers.ModelSerializer): class AssetSerializer(BulkSerializerMixin, serializers.ModelSerializer):
system_users = SystemUserSerializer(many=True, read_only=True) # system_users = SystemUserSerializer(many=True, read_only=True)
admin_user = AdminUserSerializer(many=False, read_only=True) # admin_user = AdminUserSerializer(many=False, read_only=True)
hardware = serializers.SerializerMethodField()
type_display = serializers.SerializerMethodField()
class Meta(object): class Meta(object):
model = Asset model = Asset
list_serializer_class = BulkListSerializer list_serializer_class = BulkListSerializer
@staticmethod
def get_hardware(obj):
return '%s %s %s' % (obj.cpu, obj.memory, obj.disk)
@staticmethod
def get_type_display(obj):
if obj.type:
return obj.type.value
else:
return ''
class AssetGrantedSerializer(serializers.ModelSerializer): class AssetGrantedSerializer(serializers.ModelSerializer):
system_users = SystemUserSerializer(many=True, read_only=True) system_users = SystemUserSerializer(many=True, read_only=True)
......
...@@ -19,9 +19,6 @@ ...@@ -19,9 +19,6 @@
<li class="active"> <li class="active">
<a href="" class="text-center"><i class="fa fa-laptop"></i> {% trans 'Asset detail' %} </a> <a href="" class="text-center"><i class="fa fa-laptop"></i> {% trans 'Asset detail' %} </a>
</li> </li>
<li>
<a href="" class="text-center"><i class="fa fa-bar-chart-o"></i> {% trans 'Asset login log' %}</a>
</li>
<li class="pull-right"> <li class="pull-right">
<a class="btn btn-outline btn-default" href="{% url 'assets:asset-update' pk=asset.id %}"><i class="fa fa-edit"></i>Update</a> <a class="btn btn-outline btn-default" href="{% url 'assets:asset-update' pk=asset.id %}"><i class="fa fa-edit"></i>Update</a>
</li> </li>
...@@ -236,7 +233,7 @@ ...@@ -236,7 +233,7 @@
</div> </div>
<div class="panel panel-warning"> <div class="panel panel-warning">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Asset groups' %} <i class="fa fa-info-circle"></i> {% trans 'System users' %}
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table group_edit"> <table class="table group_edit">
......
...@@ -23,48 +23,7 @@ ...@@ -23,48 +23,7 @@
</ul> </ul>
</div> </div>
<div class="tab-content"> <div class="tab-content">
<div class="col-sm-7" style="padding-left: 0;"> <div class="col-sm-7" style="padding-left: 0">
<div class="ibox float-e-margins">
<div class="ibox-title">
<span class="label"><b>{{ asset_group.name }}</b></span>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<table class="table">
<tbody>
<tr class="no-borders-tr">
<td>{% trans 'Name' %}:</td>
<td><b>{{ asset_group.name }}</b></td>
</tr>
<tr>
<td>{% trans 'Date created' %}:</td>
<td><b>{{ asset_group.date_created|date:"Y-m-d H:i:s" }}</b></td>
</tr>
<tr>
<td>{% trans 'Created by' %}:</td>
<td><b>{{ asset_group.created_by }}</b></td>
</tr>
<tr>
<td>{% trans 'Comment' %}:</td>
<td><b>{{ asset_group.comment }}</b></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<span style="float: left"></span>{% trans 'Asset list of ' %} <b>{{ asset_group.name }}</b></span> <span style="float: left"></span>{% trans 'Asset list of ' %} <b>{{ asset_group.name }}</b></span>
...@@ -83,7 +42,7 @@ ...@@ -83,7 +42,7 @@
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<table class="table table-hover"> <table class="table table-hover " id="asset_list_table" >
<thead> <thead>
<tr> <tr>
<th>{% trans 'Hostname' %}</th> <th>{% trans 'Hostname' %}</th>
...@@ -93,62 +52,35 @@ ...@@ -93,62 +52,35 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for asset in page_obj %}
<tr>
<td>{{ asset.hostname }}</td>
<td>{{ asset.ip }}</td>
<td>{{ asset.port }}</td>
<td>Alive</td>
</tr>
{% endfor %}
</tbody> </tbody>
</table> </table>
<div class="row">
{% include '_pagination.html' %}
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-5" style="padding-left: 0;padding-right: 0"> <div class="col-sm-5" style="padding-left: 0;padding-right: 0">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Associate system user' %} <i class="fa fa-info-circle"></i> {% trans 'Add asset to this group' %}
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table"> <table class="table">
<tbody> <tbody>
<tr class="no-borders-tr">
<td width="50%">{% trans 'repush system user' %}:</td>
<td>
<span style="float: right">
<button class="btn btn-danger btn-xs" type="button"><i class="fa fa-refresh"></i></button>
</span>
</td>
</tr>
<form> <form>
<tr class="no-borders-tr"> <tr class="no-borders-tr">
<td colspan="2"> <td colspan="2">
<select data-placeholder="{% trans 'Select system user' %}" class="select2" style="width: 100%" multiple="" tabindex="4"> <select data-placeholder="{% trans 'Select assets' %}" class="select2" style="width: 100%" multiple="" tabindex="4">
{% for group in groups %} {% for asset in assets_remain %}
<option value="{{ group.id }}">{{ group.name }}</option> <option value="{{ asset.id }}">{{ asset.ip }}:{{ asset.port }}</option>
{% endfor %} {% endfor %}
</select> </select>
</td> </td>
</tr> </tr>
<tr class="no-borders-tr"> <tr class="no-borders-tr">
<td colspan="2"> <td colspan="2">
<button type="button" class="btn btn-primary btn-sm">{% trans 'Associate' %}</button> <button type="button" class="btn btn-primary btn-sm">{% trans 'Add' %}</button>
</td> </td>
</tr> </tr>
</form> </form>
{% for group in user.groups.all %}
<tr>
<td ><b>{{ group.name }}</b></td>
<td>
<button class="btn btn-danger btn-xs" type="button" style="float: right;"><i class="fa fa-minus"></i></button>
</td>
</tr>
{% endfor %}
</tbody> </tbody>
</table> </table>
</div> </div>
...@@ -156,7 +88,7 @@ ...@@ -156,7 +88,7 @@
<div class="panel panel-info"> <div class="panel panel-info">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Add asset to this group' %} <i class="fa fa-info-circle"></i> {% trans 'Associate system user' %}
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table"> <table class="table">
...@@ -164,20 +96,20 @@ ...@@ -164,20 +96,20 @@
<form> <form>
<tr class="no-borders-tr"> <tr class="no-borders-tr">
<td colspan="2"> <td colspan="2">
<select data-placeholder="{% trans 'Select asset user' %}" class="select2" style="width: 100%" multiple="" tabindex="4"> <select data-placeholder="{% trans 'Select system user' %}" class="select2" style="width: 100%" multiple="" tabindex="4">
{% for group in groups %} {% for system_user in system_users_remain %}
<option value="{{ group.id }}">{{ group.name }}</option> <option value="{{ system_user.id }}">{{ system_user.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</td> </td>
</tr> </tr>
<tr class="no-borders-tr"> <tr class="no-borders-tr">
<td colspan="2"> <td colspan="2">
<button type="button" class="btn btn-info btn-sm">{% trans 'Add' %}</button> <button type="button" class="btn btn-info btn-sm">{% trans 'Associate' %}</button>
</td> </td>
</tr> </tr>
</form> </form>
{% for group in user.groups.all %} {% for system_user in system_users %}
<tr> <tr>
<td ><b>{{ group.name }}</b></td> <td ><b>{{ group.name }}</b></td>
<td> <td>
...@@ -201,25 +133,52 @@ ...@@ -201,25 +133,52 @@
{% endblock %} {% endblock %}
{% block custom_foot_js %} {% block custom_foot_js %}
<script> <script>
{# function switch_user_status(obj) {#}
{# var status = $(obj).prop('checked');#}
{##}
{# $.ajax({#}
{# url: "{% url 'users:user-active-api' pk=user.id %}",#}
{# type: "PUT",#}
{# data: {#}
{# 'is_active': status#}
{# },#}
{# success: function (data, status) {#}
{# console.log(data)#}
{# },#}
{# error: function () {#}
{# console.log('error')#}
{# }#}
{# })#}
{# }#}
$(document).ready(function () { $(document).ready(function () {
$('.select2').select2(); $('.select2').select2();
var options = {
ele: $('#asset_list_table'),
buttons: [],
order: [],
select: [],
columnDefs: [
{targets: 1, createdCell: function (td, cellData, rowData) {
var detail_btn = '<a href="{% url "perms:asset-permission-detail" pk=99991937 %}">' + cellData + '</a>';
$(td).html(detail_btn.replace('99991937', rowData.id));
}},
{targets: 2, createdCell: function (td, cellData, rowData) {
var dataLength = cellData.length;
$(td).html(dataLength);
}},
{targets: 3, createdCell: function (td, cellData, rowData) {
var dataLength = cellData.length;
$(td).html(dataLength);
}},
{targets: 4, createdCell: function (td, cellData, rowData) {
var dataLength = cellData.length;
$(td).html(dataLength);
}},
{targets: 5, createdCell: function (td, cellData) {
if (!cellData) {
$(td).html('<i class="fa fa-times text-danger"></i>')
} else {
$(td).html('<i class="fa fa-check text-navy"></i>')
}
}},
{targets: 6, createdCell: function (td, cellData, rowData) {
var btn = '<button class="btn btn-danger btn-xs btn_del_permission disabled" id=99991937 type="button" style="float: right;"><i class="fa fa-minus"></i></button>';
if (rowData.is_inherited) {
$(td).html(btn)
} else {
btn = btn.replace('99991937', cellData);
$(td).html(btn.replace('disabled', ''));
}
}}
],
ajax_url: '{% url "api-perms:asset-permission-list" %}?user={{ user.id }}',
columns: [{data: function(){return ""}}, {data: "name" }, {data: "assets" }, {data: "asset_groups"},
{data: "system_users"}, {data: "is_active"}, {data: "id"}]
};
jumpserver.initDataTable(options);
}) })
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
{% extends '_base_list.html' %} {% extends '_base_list.html' %}
{% load i18n %} {% load i18n static %}
{% load common_tags %} {% block table_search %}
{% block content_left_head %}
<a href="{% url 'assets:asset-group-create' %}" class="btn btn-sm btn-primary "> {% trans "Create asset group" %} </a>
{% endblock %} {% endblock %}
{% block table_container %}
{% block table_head %} <div class="uc pull-left m-l-5 m-r-5">
<th class="text-center"> <a href="{% url "assets:asset-group-create" %}" class="btn btn-sm btn-primary"> {% trans "Create asset group" %} </a>
<input type="checkbox" id="check_all" onclick="checkAll('check_all', 'checked')"> </div>
</th> <table class="table table-striped table-bordered table-hover " id="admin_user_list_table" >
<th class="text-center"><a href="{% url 'assets:asset-group-list' %}?sort=name">{% trans 'Name' %}</a></th> <thead>
<th class="text-center">{% trans 'Asset num' %}</th> <tr>
<th class="text-center"><a href="{% url 'assets:asset-group-list' %}?sort=date_expired">{% trans 'Comment' %}</a></th> <th class="text-center">
<th class="text-center"></th> <input type="checkbox" id="check_all" class="ipt_check_all" >
</th>
<th class="text-center">{% trans 'Name' %}</th>
<th class="text-center">{% trans 'Asset' %}</th>
<th class="text-center">{% trans 'Comment' %}</th>
<th class="text-center">{% trans 'Action' %}</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
{% endblock %} {% endblock %}
{% block content_bottom_left %}{% endblock %}
{% block table_body %} {% block custom_foot_js %}
{% for asset_group in asset_group_list %} <script>
<tr class="gradeX"> $(document).ready(function(){
<td class="text-center"> var options = {
<input type="checkbox" name="checked" value="{{ asset_group.id }}"> ele: $('#admin_user_list_table'),
</td> columnDefs: [
<td class="text-center"> {targets: 1, createdCell: function (td, cellData, rowData) {
<a href="{% url 'assets:asset-group-detail' pk=asset_group.id %}"> var detail_btn = '<a href="{% url "assets:asset-group-detail" pk=99991937 %}">' + cellData + '</a>';
{{ asset_group.name }} $(td).html(detail_btn.replace('99991937', rowData.id));
</a> }},
</td> {targets: 3, createdCell: function (td, cellData) {
<td class="text-center">{{ asset_group.assets.count }}</td> var innerHtml = cellData.length > 30 ? cellData.substring(0, 30) + '...': cellData;
<td class="text-center">{{ asset_group.comment|truncatewords:8 }}</td> $(td).html('<a href="javascript:void(0);" data-toggle="tooltip" title="' + cellData + '">' + innerHtml + '</a>');
<td class="text-center"> }},
<a href="{% url 'assets:asset-group-update' pk=asset_group.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a> {targets: 4, createdCell: function (td, cellData, rowData) {
<a onclick="objectDelete(this,'{{ asset_group.name }}','{% url 'assets:asset-group-delete' asset_group.id %}')" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a> var update_btn = '<a href="{% url "assets:asset-group-update" pk=99991937 %}" class="btn btn-xs m-l-xs btn-info">{% trans "Update" %}</a>'.replace('99991937', cellData);
</td> var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_asset_group_delete" data-uid="99991937">{% trans "Delete" %}</a>'.replace('99991937', cellData);
</tr> $(td).html(update_btn + del_btn)
{% endfor %} }}],
ajax_url: '{% url "api-assets:asset-group-list" %}',
columns: [{data: "id"}, {data: "name" }, {data: "assets_amount" }, {data: "comment" }, {data: "id"}]
};
jumpserver.initDataTable(options);
});
</script>
{% endblock %} {% endblock %}
{% block content_bottom_left %}
<form id="" method="get" action="" class=" mail-search">
<div class="input-group">
<select class="form-control m-b" style="width: auto">
<option>{% trans 'Delete selected' %}</option>
<option>{% trans 'Update selected' %}</option>
<option>{% trans 'Deactive selected' %}</option>
<option>{% trans 'Export selected' %}</option>
</select>
<div class="input-group-btn pull-left" style="padding-left: 5px;">
<button id='search_btn' type="submit" style="height: 32px;" class="btn btn-sm btn-primary">
{% trans 'Submit' %}
</button>
</div>
</div>
</form>
{% endblock %}
...@@ -8,16 +8,26 @@ ...@@ -8,16 +8,26 @@
<style> <style>
.custom{ .custom{
/*float:left;*/
margin-right:5px; margin-right:5px;
} }
#modal .modal-body { max-height: 200px; } #modal .modal-body { max-height: 200px; }
</style> </style>
{% endblock %} {% endblock %}
{% block content_left_head %}{% endblock %} {% block content_left_head %}{% endblock %}
{% block table_search %}{% endblock %}
{% block tags_list %}
{% block table_search %}
<div class="html5buttons">
<div class="dt-buttons btn-group">
<a class="btn btn-default buttons-pdf" tabindex="0" href="#">
<span>PDF</span></a>
<a class="btn btn-default buttons-excel" tabindex="0" href="#">
<span>Excel</span>
</a>
</div>
</div>
{% endblock %}
{% block tags_list %}
<div class="ydxbd" id="ydxbd" style="display: none;"> <div class="ydxbd" id="ydxbd" style="display: none;">
<div class="tagBtnList"> <div class="tagBtnList">
{% for tag in tag_list %} {% for tag in tag_list %}
...@@ -35,73 +45,40 @@ ...@@ -35,73 +45,40 @@
</div> </div>
{% endblock %} {% endblock %}
{% block table_head %} {% block table_container %}
<th class="text-center"><input type="checkbox" id="check_all" onclick="checkAll()"></th> <div class="uc pull-left m-l-5 m-r-5"><a href="{% url "assets:asset-create" %}" class="btn btn-sm btn-primary"> {% trans "Create asset" %} </a></div>
<th id="th_no">id</th> <div class="uc pull-left"><a href="javascript:void(0);" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#asset_import_modal"> {% trans "Import asset" %} </a></div>
<th class="text-center"><a href="{% url 'assets:asset-list' %}?sort=hostname">{% trans 'Hostname' %}</a></th> <table class="table table-striped table-bordered table-hover " id="asset_list_table" >
<th class="text-center"><a href="{% url 'assets:asset-list' %}?sort=username">{% trans 'IP' %}</a></th> <thead>
<th class="text-center">{% trans 'Port' %}</th> <tr>
<th class="text-center">{% trans 'Type' %}</th> <th class="text-center"><input type="checkbox" class="ipt_check_all"></th>
<th class="text-center">{% trans 'Hardware' %}</th> <th class="text-center">{% trans 'Hostname' %}</th>
<th class="text-center">{% trans 'Valid' %}</th> <th class="text-center">{% trans 'IP' %}</th>
<th class="text-center"></th> <th class="text-center">{% trans 'Port' %}</th>
{% endblock %} <th class="text-center">{% trans 'Type' %}</th>
<th class="text-center">{% trans 'Env' %}</th>
{% block table_body %} <th class="text-center">{% trans 'Hardware' %}</th>
{% for asset in asset_list %} <th class="text-center">{% trans 'Valid' %}</th>
<tr class="gradeX" name="oAssets"> <th class="text-center">{% trans 'Alive' %}</th>
<td class="text-center"> <th class="text-center">{% trans 'Action' %}</th>
<input type="checkbox" name="checked" value="{{ asset.id }}"> </tr>
</td> </thead>
<td>{{ asset.id }}</td> <tbody>
<td class="text-center"> </tbody>
<a href="{% url 'assets:asset-detail' pk=asset.id %}"> </table>
{{ asset.hostname }} <div id="actions" class="hide">
</a> <div class="input-group">
</td> <select class="form-control m-b" style="width: auto" id="slct_bulk_update">
<td class="text-center">{{ asset.ip }}</td> <option value="delete">{% trans 'Delete selected' %}</option>
<td class="text-center">{{ asset.port }}</td> <option value="update">{% trans 'Update selected' %}</option>
<td class="text-center">{{ asset.type }}</td> <option value="deactive">{% trans 'Deactive selected' %}</option>
<td class="text-center">{{ asset.cpu }} {{ asset.memory }} {{ asset.disk }} </td> </select>
<td class="text-center"> <div class="input-group-btn pull-left" style="padding-left: 5px;">
{% if asset.is_valid.0 %} <button id='btn_bulk_update' style="height: 32px;" class="btn btn-sm btn-primary">
<i class="fa fa-check text-navy"></i> {% trans 'Submit' %}
{% else %} </button>
<i class="fa fa-times text-danger"></i>
{% endif %}
</td>
<td class="text-center">
<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 'api-assets:asset-detail' pk=asset.id %}')" class="btn btn-xs btn-danger del">
{% trans 'Delete' %}</a>
</td>
</tr>
{% endfor %}
{% endblock %}
{% block content_bottom_left %}
<div class="input-group" id="actions">
<select class="form-control m-b" style="width: auto" id="slct_bulk_update">
<option value="delete">{% trans 'Delete selected' %}</option>
<option value="update">{% trans 'Update selected' %}</option>
<option value="deactive">{% trans 'Deactive selected' %}</option>
<option value="export">{% trans 'Export selected' %}</option>
</select>
<div class="input-group-btn pull-left" style="padding-left: 5px;">
<button id='btn_bulk_update' style="height: 32px;" class="btn btn-sm btn-primary" >
{% trans 'Submit' %}
</button>
</div>
</div> </div>
{% include "assets/_asset_bulk_update_modal.html" %} </div>
<!-- 模态框(Modal) -->
<div class="modal fade" id="modal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content" id="box">
<!--此部分为主体内容,将远程加载进来-->
</div>
</div>
</div> </div>
{% endblock %} {% endblock %}
...@@ -122,165 +99,43 @@ ...@@ -122,165 +99,43 @@
}else{ }else{
oDiv.style.display = "none"; oDiv.style.display = "none";
} }
};//onload; }; //onload;
$(document).ready(function(){ $(document).ready(function(){
$('#modal').modal({ var options = {
show: false, ele: $('#asset_list_table'),
backdrop: 'static', columnDefs: [
keyboard: 'false', {targets: 1, createdCell: function (td, cellData, rowData) {
//remote:"{% url 'assets:asset-modal-update' %}", var detail_btn = '<a href="{% url "assets:asset-detail" pk=99991937 %}">' + cellData + '</a>';
}); $(td).html(detail_btn.replace('99991937', rowData.id));
}},
$('#asset_bulk_update_modal').on('shown.bs.modal',function(){ {targets: 7, createdCell: function (td, cellData) {
//alert('当弹窗完全加载完后,再触发;') if (!cellData) {
$('.select2').select2(); $(td).html('<i class="fa fa-times text-danger"></i>')
$("#id_tags").select2({ } else {
tags: true, $(td).html('<i class="fa fa-check text-navy"></i>')
maximumSelectionLength: 8, //最多能够选择的个数 }
//closeOnSelect: false }},
}); {targets: 8, createdCell: function (td, cellData) {
}); if (!cellData) {
$(td).html('<i class="fa fa-circle text-danger"></i>')
$('#asset_bulk_update_modal').modal({ } else {
show: false, $(td).html('<i class="fa fa-circle text-navy"></i>')
backdrop: 'static', }
keyboard: 'false', }},
}); {targets: 9, createdCell: function (td, cellData, rowData) {
var oTags = document.getElementById("ydxbd"); var update_btn = '<a href="{% url "assets:asset-update" pk=99991937 %}" class="btn btn-xs btn-info">{% trans "Update" %}</a>'.replace('99991937', cellData);
var table = $('#editable').DataTable({ 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);
"aLengthMenu": [[10, 25, 50, -1], ["10", "25", "50", "all"]], $(td).html(update_btn + del_btn)
"iDisplayLength":25, }}
"aaSorting": [[7, "asc"]], ],
"aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] }], ajax_url: '{% url "api-assets:asset-list" %}',
"bAutoWidth": false, columns: [{data: "id"}, {data: "hostname" }, {data: "ip" }, {data: "port" },
"language": {"url": "/static/js/plugins/dataTables/i18n/zh-hans.json"}, {data: "type_display" }, {data: "env"}, {data: "hardware"}, {data: "is_active" },
"dom": '<"custom"fl>tip', {data: "is_active"}, {data: "id" }],
"initComplete": function() { op_html: $('#actions').html()
//alert( 'DataTables has finished its initialisation.' );
$('#editable_length').before("<a href=\"{% url 'assets:asset-create' %}\" class=\"btn btn-sm btn-primary custom \"> {% trans 'Create asset' %} </a>&nbsp; <button class='btn btn-sm btn-primary custom' id='zksx' onclick='tagShow()'>标签</button>");
$('#editable').before(oTags);
},
columns: [
{data: "checkbox"},
{data: "id"},
{data: "name"},
{data: "ip"},
{data: "port"},
{data: "type"},
{data: "group"},
{data: "dp"},
{data: "op"}
]
});
//将ID列隐藏
table.column('1').visible(false);
$('#editable tbody').on( 'click', 'tr', function () {
//alert($(this).hasClass('selected'));
if($(this).hasClass('selected')){
$(this).removeClass('selected');
this.children[0].children[0].checked=0;
}else{
$(this).addClass('selected');
this.children[0].children[0].checked=1;
}
});
$('#btn_bulk_update').on('click',function(){
var column2 = table.rows('.selected').data();
var id_list = [];
var plain_id_list = [];
var the_url = "{% url 'api-assets:asset-bulk-update' %}";
for(var i=0;i<column2.length;i++){
id_list.push({id: column2[i].id,hostname:column2[i].ip});
plain_id_list.push(parseInt(column2[i].id));
}
var url_delete = the_url + '?id__in=' + JSON.stringify(plain_id_list);
//APIUpdateAttr({url: url_delete, method: 'DELETE', success: success, error: fail});
function doDelete(){
swal({
title: "{% trans 'Are you sure?' %}",
text: "{% trans 'This will delete the selected assets !!!' %}",
type: "warning",
showCancelButton: true,
cancelButtonText: 'Cancel',
confirmButtonColor: "#DD6B55",
confirmButtonText: "{% trans 'Confirm' %}",
closeOnConfirm: false
}, function () {
$.ajax({
type:'DELETE',
url:url_delete,
data:{
data:'true',
},
success:function(){
window.location.reload();
}
});
});
}
function doUpdate() {
// alert(plain_id_list);
// $('#asset_bulk_update_modal').modal('show');
window.location.href="{% url 'assets:asset-modal-update' %}?plain_id_lists="+plain_id_list
}
var action = $('#slct_bulk_update option:selected').val();
if (id_list.length === 0) {
action = 'default';
}
switch(action) {
case 'deactive':
alert(action+"未完成");
//doDeactive();
break;
case 'delete':
doDelete();
break;
case 'update':
doUpdate();
break;
case 'export':
alert(action+"未完成");
break;
default:
swal({
title: "未选择任何元素",
text: "Please..."
});
break;
}
});//button
$('#btn_asset_bulk_update').on('click',function(){
});//button
}); //$(document).ready
var bCheck = 1;
function checkAll(){
if(bCheck){
$("tr[name='oAssets']").each(function(){
oCheckbox = this.children[0].children[0];
$(this).toggleClass('selected',true);
oCheckbox.checked=1;
});
document.getElementById('check_all').checked=1;
bCheck = 0;
}else{
$("tr[name='oAssets']").each(function(){
oCheckbox = this.children[0].children[0];
$(this).toggleClass('selected',false);
oCheckbox.checked=0;
});
document.getElementById('check_all').checked=0;
bCheck = 1;
}; };
}; var table = jumpserver.initDataTable(options);
});
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -118,7 +118,7 @@ ...@@ -118,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 "api-assets:asset-list" %}?idc={{ idc.id }}', ajax_url: '{% url "api-assets:asset-list" %}?idc_id={{ 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" }]
}; };
......
...@@ -16,23 +16,9 @@ from .forms import * ...@@ -16,23 +16,9 @@ from .forms import *
from .hands import AdminUserRequiredMixin from .hands import AdminUserRequiredMixin
class AssetListView(AdminUserRequiredMixin, ListView): class AssetListView(AdminUserRequiredMixin, TemplateView):
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
model = Asset
context_object_name = 'asset_list'
template_name = 'assets/asset_list.html' template_name = 'assets/asset_list.html'
def get_queryset(self):
queryset = super(AssetListView, self).get_queryset()
queryset = sorted(queryset, key=self.sorted_by_valid_and_ip)
return queryset
@staticmethod
def sorted_by_valid_and_ip(asset):
ip_list = int_seq(asset.ip.split('.'))
ip_list.insert(0, asset.is_valid[0])
return ip_list
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = { context = {
'app': 'Assets', 'app': 'Assets',
...@@ -73,7 +59,6 @@ class AssetCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, CreateView): ...@@ -73,7 +59,6 @@ class AssetCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, CreateView):
class AssetModalCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, ListView): class AssetModalCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, ListView):
model = Asset model = Asset
# tag_type = 'asset'
form_class = AssetCreateForm form_class = AssetCreateForm
template_name = 'assets/asset_modal_update.html' template_name = 'assets/asset_modal_update.html'
success_url = reverse_lazy('assets:asset-list') success_url = reverse_lazy('assets:asset-list')
...@@ -119,16 +104,10 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView): ...@@ -119,16 +104,10 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView):
'admin_user', 'admin_user',
] ]
self.assets_ids = self.request.POST.getlist('assets_ids') self.assets_ids = self.request.POST.getlist('assets_ids')
print self.assets_ids
self.new_form = self.request.POST.copy() self.new_form = self.request.POST.copy()
print len(self.new_form)
print type(self.new_form)
for i in default_keys: for i in default_keys:
if self.new_form.has_key(i): if self.new_form.has_key(i):
self.new_form.pop(i) self.new_form.pop(i)
print self.new_form.items()
for i in self.new_form:
print i
return super(AssetUpdateView, self).post(request, *args, **kwargs) return super(AssetUpdateView, self).post(request, *args, **kwargs)
...@@ -145,10 +124,7 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView): ...@@ -145,10 +124,7 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView):
return super(AssetUpdateView, self).form_invalid(form) return super(AssetUpdateView, self).form_invalid(form)
def form_valid(self, form): def form_valid(self, form):
print self.new_form.keys()
print form.clean().keys()
asset = form.save(commit=False) asset = form.save(commit=False)
print "1111"
def prn_obj_key(obj_form): def prn_obj_key(obj_form):
return obj_form.clean().keys() return obj_form.clean().keys()
...@@ -264,12 +240,8 @@ class AssetGroupCreateView(AdminUserRequiredMixin, CreateView): ...@@ -264,12 +240,8 @@ class AssetGroupCreateView(AdminUserRequiredMixin, CreateView):
return super(AssetGroupCreateView, self).form_valid(form) return super(AssetGroupCreateView, self).form_valid(form)
class AssetGroupListView(AdminUserRequiredMixin, ListView): class AssetGroupListView(AdminUserRequiredMixin, TemplateView):
model = AssetGroup
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
context_object_name = 'asset_group_list'
template_name = 'assets/asset_group_list.html' template_name = 'assets/asset_group_list.html'
ordering = '-id'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = { context = {
...@@ -280,34 +252,22 @@ class AssetGroupListView(AdminUserRequiredMixin, ListView): ...@@ -280,34 +252,22 @@ class AssetGroupListView(AdminUserRequiredMixin, ListView):
kwargs.update(context) kwargs.update(context)
return super(AssetGroupListView, self).get_context_data(**kwargs) return super(AssetGroupListView, self).get_context_data(**kwargs)
def get_queryset(self):
self.queryset = super(AssetGroupListView, self).get_queryset()
self.keyword = keyword = self.request.GET.get('keyword', '')
self.sort = sort = self.request.GET.get('sort', '-date_created')
if keyword:
self.queryset = self.queryset.filter(Q(name__icontains=keyword) |
Q(comment__icontains=keyword))
if sort:
self.queryset = self.queryset.order_by(sort)
return self.queryset
class AssetGroupDetailView(SingleObjectMixin, AdminUserRequiredMixin, ListView): class AssetGroupDetailView(AdminUserRequiredMixin, DetailView):
model = AssetGroup
template_name = 'assets/asset_group_detail.html' template_name = 'assets/asset_group_detail.html'
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE context_object_name = 'asset_group'
def get(self, request, *args, **kwargs):
self.object = self.get_object(queryset=AssetGroup.objects.all())
return super(AssetGroupDetailView, self).get(request, *args, **kwargs)
def get_queryset(self):
return self.object.assets.all()
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
assets_remain = Asset.objects.exclude(id__in=self.object.assets.all())
system_users = self.object.system_users.all()
system_users_remain = SystemUser.objects.exclude(id__in=system_users)
context = { context = {
'app': _('Assets'), 'app': _('Assets'),
'action': _('Asset group detail'), 'action': _('Asset group detail'),
'asset_group': self.object, 'assets_remain': assets_remain,
'system_users': system_users,
'system_users_remain': system_users_remain,
} }
kwargs.update(context) kwargs.update(context)
return super(AssetGroupDetailView, self).get_context_data(**kwargs) return super(AssetGroupDetailView, self).get_context_data(**kwargs)
...@@ -343,9 +303,6 @@ class AssetGroupDeleteView(AdminUserRequiredMixin, DeleteView): ...@@ -343,9 +303,6 @@ class AssetGroupDeleteView(AdminUserRequiredMixin, DeleteView):
class IDCListView(AdminUserRequiredMixin, TemplateView): class IDCListView(AdminUserRequiredMixin, TemplateView):
# model = IDC
# paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
# context_object_name = 'idc_list'
template_name = 'assets/idc_list.html' template_name = 'assets/idc_list.html'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
...@@ -357,19 +314,6 @@ class IDCListView(AdminUserRequiredMixin, TemplateView): ...@@ -357,19 +314,6 @@ class IDCListView(AdminUserRequiredMixin, TemplateView):
kwargs.update(context) kwargs.update(context)
return super(IDCListView, self).get_context_data(**kwargs) return super(IDCListView, self).get_context_data(**kwargs)
# def get_queryset(self):
# self.queryset = super(IDCListView, self).get_queryset()
# self.keyword = keyword = self.request.GET.get('keyword', '')
# self.sort = sort = self.request.GET.get('sort', '-date_created')
#
# if keyword:
# self.queryset = self.queryset.filter(Q(name__icontains=keyword) |
# Q(comment__icontains=keyword))
#
# if sort:
# self.queryset = self.queryset.order_by(sort)
# return self.queryset
class IDCCreateView(AdminUserRequiredMixin, CreateView): class IDCCreateView(AdminUserRequiredMixin, CreateView):
model = IDC model = IDC
......
...@@ -83,7 +83,8 @@ $(document).ready(function(){ ...@@ -83,7 +83,8 @@ $(document).ready(function(){
}}], }}],
ajax_url: '{% url "api-users:user-list" %}', ajax_url: '{% url "api-users:user-list" %}',
columns: [{data: "id"}, {data: "username" }, {data: "name" }, {data: "get_role_display" }, columns: [{data: "id"}, {data: "username" }, {data: "name" }, {data: "get_role_display" },
{data: "groups_display" }, {data: "is_valid" }, {data: "id" }] {data: "groups_display" }, {data: "is_valid" }, {data: "id" }],
op_html: $('#actions').html()
}; };
var table = jumpserver.initDataTable(options); var table = jumpserver.initDataTable(options);
......
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