[Bugfix] 修复一些bug

pull/595/head
ibuler 2017-07-28 21:52:43 +08:00
parent 67e953902b
commit cd1d690fd3
7 changed files with 85 additions and 111 deletions

View File

@ -10,7 +10,7 @@
<a href="{% url 'assets:asset-export' %}" style="display: block">{% trans 'Download' %}</a> <a href="{% url 'assets:asset-export' %}" style="display: block">{% trans 'Download' %}</a>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label" for="id_users">{% trans "Asset excel file" %}</label> <label class="control-label" for="id_users">{% trans "Asset csv file" %}</label>
<input id="id_assets" type="file" name="file" /> <input id="id_assets" type="file" name="file" />
<span class="help-block"> <span class="help-block">
{% trans 'If set id, will use this id update asset existed' %} {% trans 'If set id, will use this id update asset existed' %}

View File

@ -243,7 +243,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 'System users' %} <i class="fa fa-info-circle"></i> {% trans 'Push system users' %}
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table group_edit" id="add-asset2systemuser"> <table class="table group_edit" id="add-asset2systemuser">
@ -252,7 +252,7 @@
<tr class="no-borders-tr"> <tr class="no-borders-tr">
<td colspan="2"> <td colspan="2">
<select data-placeholder="{% trans 'Select system users' %}" class="select2" style="width: 100%" multiple="" tabindex="4"> <select data-placeholder="{% trans 'Select system users' %}" class="select2" style="width: 100%" multiple="" tabindex="4">
{% for system_user in system_users_remain %} {% for system_user in system_users_all %}
<option value="{{ system_user.id }}" id="opt_{{ system_user.id }}">{{ system_user.name }}</option> <option value="{{ system_user.id }}" id="opt_{{ system_user.id }}">{{ system_user.name }}</option>
{% endfor %} {% endfor %}
</select> </select>

View File

@ -45,9 +45,9 @@
<th>{% trans 'Hostname' %}</th> <th>{% trans 'Hostname' %}</th>
<th>{% trans 'IP' %}</th> <th>{% trans 'IP' %}</th>
<th>{% trans 'Port' %}</th> <th>{% trans 'Port' %}</th>
<th>{% trans 'Type' %}</th> <th>{% trans 'Type' %}</th>
<th>{% trans 'Alive' %}</th> <th>{% trans 'Alive' %}</th>
<th>{% trans 'Action' %}</th> <th>{% trans 'Action' %}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -56,40 +56,11 @@
</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 'Add asset to this group' %} <i class="fa fa-info-circle"></i> {% trans 'Push system users' %}
</div>
<div class="panel-body">
<table class="table">
<tbody>
<form>
<tr class="no-borders-tr">
<td colspan="2">
<select data-placeholder="{% trans 'Select assets' %}" class="select2 asset-select" style="width: 100%" multiple="" tabindex="4">
{% for asset in assets_remain %}
<option value="{{ asset.id }}" id="opt_{{ asset.id }}">{{ asset.hostname }}</option>
{% endfor %}
</select>
</td>
</tr>
<tr class="no-borders-tr">
<td colspan="2">
<button type="button" class="btn btn-primary btn-sm btn-asset-add-groups">{% trans 'Add' %}</button>
</td>
</tr>
</form>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-sm-5" style="padding-left: 0;padding-right: 0">
<div class="panel panel-warning">
<div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Push system user to this group assets' %}
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table"> <table class="table">
@ -106,7 +77,7 @@
</tr> </tr>
<tr class="no-borders-tr"> <tr class="no-borders-tr">
<td colspan="2"> <td colspan="2">
<button type="button" class="btn btn-warning btn-sm btn-push-system-user">{% trans 'Push' %}</button> <button type="button" class="btn btn-primary btn-sm btn-push-system-user">{% trans 'Push' %}</button>
</td> </td>
</tr> </tr>
</form> </form>
@ -125,45 +96,28 @@
{% endblock %} {% endblock %}
{% block custom_foot_js %} {% block custom_foot_js %}
<script> <script>
function updateAssetsGroup(assets) { jumpserver.assets_selected = {};
var the_url = "{% url 'api-assets:asset-groups-update' pk=asset_group.id %}"; function updateGroupAssets(assets) {
var the_url = "{}";
var body = { var body = {
assets: Object.assign([], assets) assets: Object.assign([], assets)
}; };
var $data_table = $("#asset_list_table").DataTable();
var success = function(data) { var success = function(data) {
$('select2-selection__rendered').empty(); $('.select2-selection__rendered').empty();
$('#groups_selected').val(''); $.map(jumpserver.assets_selected, function(asset_ip, index) {
$('#asset_list_table > tbody').empty(); $('#opt_' + index).remove();
$.map(jumpserver.assets_selected, function(asset_ip, index) { $data_table.ajax.reload();
var url = '{% url "api-assets:asset-detail" pk=99991937 %}'.replace(99991937, index); });
asset = $.ajax({ jumpserver.groups_selected = {};
url: url,
method: "GET",
dataType: "json",
success: function (data, textStatus) {
var add_tr = '<tr id="bdg_asset" data-aid="'+data.id+'">'+
'<td>'+data.hostname+'</td>'+
'<td>'+data.ip+'</td>'+
'<td>'+data.port+'</td>'+
'<td>status</td>'+
'<td>'+
'<a class="btn btn-xs btn-danger m-l-xs btn_asset_delete" data-aid="'+data.id+'">{% trans "Delete" %}</a>'+
'<a class="btn btn-xs btn-info m-l-xs btn_asset_update" data-aid="'+data.id+'" href="'+'{% url "assets:asset-update" pk=99991937 %}'.replace(99991937, data.id)+'">{% trans "Update" %}</a>'+
'</td>'+
'</tr>';
(data.is_active == true) ? tr = add_tr.replace('<td>status</td>', '<td><i class="fa fa-circle text-navy"></i></td>'): tr = add_tr.replace('<td>status</td>', '<td><i class="fa fa-circle text-danger"></i></td>');
$('#asset_list_table > tbody').append(tr);
}
});
});
}; };
APIUpdateAttr({ APIUpdateAttr({
url: the_url, url: the_url,
body: JSON.stringify(body), body: JSON.stringify(body),
success: success method: 'PUT',
success: success
}); });
} }
function leaveGroup(obj, name, url, data) { function leaveGroup(obj, name, url, data) {
function doDelete() { function doDelete() {
@ -204,7 +158,9 @@ function pushSystemUser(sysUserID) {
}; };
var success = function(data) { var success = function(data) {
var url = "{% url 'ops:task-detail' pk=234234234 %}".replace("234234234", data); var url = "{% url 'ops:task-detail' pk=234234234 %}".replace("234234234", data);
location.href = url setTimeout(function () {
location.href = url
}, 1000);
}; };
APIUpdateAttr({ APIUpdateAttr({
url: the_url, url: the_url,
@ -236,6 +192,17 @@ Array.prototype.unique = function(){
$(document).ready(function () { $(document).ready(function () {
$('.select2').select2(); $('.select2').select2();
$('.select2.asset-select').select2()
.on('select2:select', function(evt) {
var data = evt.params.data;
jumpserver.assets_selected[data.id] = data.text;
console.log(jumpserver.assets_selected)
})
.on('select2:unselect', function(evt) {
var data = evt.params.data;
delete jumpserver.assets_selected[data.id]
});
var options = { var options = {
ele: $('#asset_list_table'), ele: $('#asset_list_table'),
buttons: [], buttons: [],
@ -266,6 +233,15 @@ $(document).ready(function () {
jumpserver.initDataTable(options); jumpserver.initDataTable(options);
}) })
.on('click', ".btn-asset-group-add-asset", function () {
if (Object.keys(jumpserver.assets_selected).length === 0) {
return false;
}
updateGroupAssets(jumpserver.assets_selected);
})
.on('click', '.btn-push-system-user', function () { .on('click', '.btn-push-system-user', function () {
var data = $('.system-user-select').select2(); var data = $('.system-user-select').select2();
var system_id = data.val()[0]; var system_id = data.val()[0];

View File

@ -62,19 +62,18 @@
</tbody> </tbody>
</table> </table>
<div id="actions" class="hide"> <div id="actions" class="hide">
<div class="input-group"> <div class="input-group">
<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 'Remove selected' %}</option>
</select> </select>
<div class="input-group-btn pull-left" style="padding-left: 5px;"> <div class="input-group-btn pull-left" style="padding-left: 5px;">
<button id='btn_bulk_update' style="height: 32px;" class="btn btn-sm btn-warning"> <button id='btn_bulk_update' style="height: 32px;" class="btn btn-sm btn-warning">
{% trans 'Submit' %} {% trans 'Submit' %}
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@ -254,28 +253,28 @@ $(document).ready(function () {
assets.remove(plain_id_list[j]) assets.remove(plain_id_list[j])
} }
function doDelete() { function doDelete() {
swal({ swal({
title: "{% trans 'Are you sure?' %}", title: "{% trans 'Are you sure?' %}",
text: "{% trans 'This will delete the selected assets !!!' %}", text: "{% trans 'This will delete the selected assets !!!' %}",
type: "warning", type: "warning",
showCancelButton: true, showCancelButton: true,
confirmButtonColor: "#DD6B55", confirmButtonColor: "#DD6B55",
confirmButtonText: "{% trans 'Confirm' %}", confirmButtonText: "{% trans 'Confirm' %}",
closeOnConfirm: false closeOnConfirm: false
}, function() { }, function() {
var success = function() { var success = function() {
var msg = "{% trans 'Asset Deleted.' %}"; var msg = "{% trans 'Asset Deleted.' %}";
swal("{% trans 'Asset Delete' %}", msg, "success"); swal("{% trans 'Asset Delete' %}", msg, "success");
$('#idc_assets_table').DataTable().ajax.reload(); $('#idc_assets_table').DataTable().ajax.reload();
}; };
var fail = function() { var fail = function() {
var msg = "{% trans 'Asset Deleting failed.' %}"; var msg = "{% trans 'Asset Deleting failed.' %}";
swal("{% trans 'Asset Delete' %}", msg, "error"); swal("{% trans 'Asset Delete' %}", msg, "error");
}; };
var url_delete = "{% url 'api-assets:idc-update-assets' pk=idc.id %}"; var url_delete = "{% url 'api-assets:idc-update-assets' pk=idc.id %}";
var body = { var body = {
assets: Object.assign([], assets) assets: Object.assign([], assets)
}; };
APIUpdateAttr({url: url_delete, body: JSON.stringify(body), method: 'PUT', success: success, error: fail}); APIUpdateAttr({url: url_delete, body: JSON.stringify(body), method: 'PUT', success: success, error: fail});
jumpserver.checked = false; jumpserver.checked = false;
}); });

View File

@ -189,8 +189,7 @@ class AssetDetailView(DetailView):
'asset_groups_remain': [asset_group for asset_group in AssetGroup.objects.all() 'asset_groups_remain': [asset_group for asset_group in AssetGroup.objects.all()
if asset_group not in asset_groups], if asset_group not in asset_groups],
'asset_groups': asset_groups, 'asset_groups': asset_groups,
'system_users_remain': [system_user for system_user in SystemUser.objects.all() 'system_users_all': SystemUser.objects.all(),
if system_user not in system_users],
'system_users': system_users, 'system_users': system_users,
} }
kwargs.update(context) kwargs.update(context)
@ -315,7 +314,7 @@ class BulkImportAssetView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
failed.append('%s: %s' % (asset_dict['hostname'], str(e))) failed.append('%s: %s' % (asset_dict['hostname'], str(e)))
if assets: if assets:
update_assets_hardware_info.delay(assets) update_assets_hardware_info.delay([asset._to_secret_json() for asset in assets])
data = { data = {
'created': created, 'created': created,

View File

@ -67,7 +67,7 @@ class AssetGroupDetailView(AdminUserRequiredMixin, DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
assets_remain = Asset.objects.exclude(id__in=self.object.assets.all()) assets_remain = Asset.objects.exclude(id__in=self.object.assets.all())
system_users = self.object.system_users.all() system_users = SystemUser.objects.all()
system_users_remain = SystemUser.objects.exclude(id__in=system_users) system_users_remain = SystemUser.objects.exclude(id__in=system_users)
context = { context = {
'app': _('Assets'), 'app': _('Assets'),

View File

@ -266,7 +266,7 @@ $(document).ready(function() {
delete jumpserver.groups_selected[data.id] delete jumpserver.groups_selected[data.id]
}) })
}) })
.on('click', '#is_active', function() { .on('click', '#is_active', function() {
var the_url = "{% url 'api-users:user-detail' pk=user_object.id %}"; var the_url = "{% url 'api-users:user-detail' pk=user_object.id %}";
var checked = $(this).prop('checked'); var checked = $(this).prop('checked');
var body = { var body = {