mirror of https://github.com/jumpserver/jumpserver
Merge with master
commit
534321d1aa
|
@ -44,7 +44,8 @@
|
|||
$('.select2').select2();
|
||||
$("#tags").select2({
|
||||
tags: true,
|
||||
maximumSelectionLength: 8 //最多能够选择的个数
|
||||
maximumSelectionLength: 8, //最多能够选择的个数
|
||||
closeOnSelect: false
|
||||
});
|
||||
})
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ div.dataTables_wrapper div.dataTables_filter,
|
|||
.dataTables_length {
|
||||
float: left;
|
||||
}
|
||||
|
||||
</style>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
|
@ -45,10 +46,16 @@ div.dataTables_wrapper div.dataTables_filter,
|
|||
<div class="hr-line-dashed"></div>
|
||||
<h3 class="widget-head-color-box">用户选择的资产</h3>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">已选</label>
|
||||
<div class="col-sm-9" id="asset_sed">
|
||||
<input type="text" class=" form-control" id="add_asset" value="{{ assets_count }}">
|
||||
<label class="col-sm-2 control-label" id="asset_on_count">已选({{ assets_count }})</label>
|
||||
<div class="col-sm-9" id="asset_sed">
|
||||
<div class="form-asset-on" id="add_asset">
|
||||
<p id="asset_on_p">
|
||||
{% for asset in assets_on_list %}
|
||||
<button name='asset_hostname' title='{{ asset.ip }}' type='button' class='btn btn-default btn-xs'>{{ asset.hostname }}</button>
|
||||
{% endfor %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hr-line-dashed"></div>
|
||||
<h3 class="widget-head-color-box">资产用户</h3>
|
||||
|
|
|
@ -1,123 +1,121 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
{% extends '_base_list.html' %}
|
||||
{% load i18n %}
|
||||
{% load common_tags %}
|
||||
{% block custom_head_css_js %}
|
||||
<link href="{% static "css/plugins/dataTables/dataTables.min.css" %}" rel="stylesheet">
|
||||
<link href="{% static "css/plugins/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.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/dataTables/dataTables.min.js" %}"></script>
|
||||
{% endblock %}
|
||||
<style>
|
||||
div.dataTables_wrapper div.dataTables_filter,
|
||||
.dataTables_length {
|
||||
float: right !important;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_filter {
|
||||
margin-left: 15px;
|
||||
}
|
||||
.custom{
|
||||
float:left;
|
||||
margin-right:5px;
|
||||
|
||||
{% block content %}
|
||||
<div class="wrapper wrapper-content animated fadeInRight">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<div class="ibox-tools">
|
||||
<div style="float:left">
|
||||
<a href="{% url 'assets:asset-create' %}" class="btn btn-sm btn-primary "> {% trans "Create asset" %} </a>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-primary" id="zksx" onclick="tagShow()">标签</button>
|
||||
<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>
|
||||
<a class="close-link"><i class="fa fa-times"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<div class="">
|
||||
<div class="ydxbd" id="ydxbd" style="display: none;">
|
||||
}
|
||||
|
||||
</style>
|
||||
{% endblock %}
|
||||
{% block content_left_head %}
|
||||
{% endblock %}
|
||||
{% block table_search %}
|
||||
{% endblock %}
|
||||
{% block tags_list %}
|
||||
|
||||
<div class="ydxbd" id="ydxbd" style="display: none;">
|
||||
<div>
|
||||
<p id="tags_p">
|
||||
{% for tag in tag_list %}
|
||||
<a href="{% url 'assets:asset-tags' tag_id=tag.0 %}"
|
||||
{% if tag.0|IntToStr == tag_id %}
|
||||
class="fa fa-tag btn btn-sm btn-primary mar-j" name="tag_on">
|
||||
{% else %}
|
||||
class="fa fa-tag btn btn-sm btn-outline btn-primary mar-j">
|
||||
{% endif %}
|
||||
<span class="mar">
|
||||
<strong>{{ tag.1}}</strong>({{ tag.2 }})
|
||||
</span></a>
|
||||
{% endfor %}
|
||||
<a href="{% url 'assets:asset-list' %}" class="btn btn-sm btn-outline btn-default ">移除选择</a>
|
||||
|
||||
<a href="{% url 'assets:asset-tags' tag_id=tag.0 %}">
|
||||
<span
|
||||
{% if tag.0|IntToStr == tag_id %}
|
||||
class="label label-warning" name="tag_on"
|
||||
{% else %}
|
||||
class="label label-default"
|
||||
{% endif %}
|
||||
>{{ tag.1}}({{ tag.2 }})</span>
|
||||
</a>
|
||||
{# <a href="{% url 'assets:asset-tags' tag_id=tag.0 %}"#}
|
||||
{# {% if tag.0|IntToStr == tag_id %}#}
|
||||
{# class="fa fa-tag btn btn-sm btn-warning btn-rounded mar-j" name="tag_on">#}
|
||||
{# {% else %}#}
|
||||
{# class="fa fa-tag btn btn-sm btn-default btn-rounded mar-j">#}
|
||||
{# {% endif %}#}
|
||||
{# <span class="mar">#}
|
||||
{# <strong>{{ tag.1}}</strong>({{ tag.2 }})#}
|
||||
{# </span></a>#}
|
||||
|
||||
{% endfor %}
|
||||
{# <a href="{% url 'assets:asset-list' %}" class="btn btn-sm btn-rounded btn-default ">移除选择</a>#}
|
||||
<a href="{% url 'assets:asset-list' %}" ><span class="label label-default">移除选择</span></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% block content_left_head %}{% endblock %}
|
||||
{% block table_search %}{% endblock %}
|
||||
</div>
|
||||
{% block table_container %}
|
||||
<table aria-describedby="editable_info" role="grid" class="table table-striped table-bordered table-hover dataTable" id="editable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center"><input type="checkbox" id="check_all" onclick="checkAll()"></th>
|
||||
<th class="text-center"><a href="{% url 'assets:asset-list' %}?sort=hostname">{% trans 'Hostname' %}</a></th>
|
||||
<th class="text-center"><a href="{% url 'assets:asset-list' %}?sort=username">{% trans 'IP' %}</a></th>
|
||||
<th class="text-center">{% trans 'Port' %}</th>
|
||||
<th class="text-center">{% trans 'Type' %}</th>
|
||||
<th class="text-center">{% trans 'Hardware' %}</th>
|
||||
<th class="text-center">{% trans 'Valid' %}</th>
|
||||
<th class="text-center"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for asset in asset_list %}
|
||||
<tr class="gradeX" name="oAssets">
|
||||
<td class="text-center"><input type="checkbox" name="checked" value="{{ asset.id }}"></td>
|
||||
<td class="text-center"><a href="{% url 'assets:asset-detail' pk=asset.id %}">{{ asset.hostname }}</a></td>
|
||||
<td class="text-center">{{ asset.ip }}</td>
|
||||
<td class="text-center">{{ asset.port }}</td>
|
||||
<td class="text-center">{{ asset.type }}</td>
|
||||
<td class="text-center">{{ asset.cpu }} {{ asset.memory }} {{ asset.disk }} </td>
|
||||
<td class="text-center">
|
||||
{% if asset.is_valid.0 %}
|
||||
<i class="fa fa-check text-navy"></i>
|
||||
{% else %}
|
||||
<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 href="{% url 'assets:asset-delete' pk=asset.id %}" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% endblock %}
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
{# Update batch #}
|
||||
{% 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 %}
|
||||
</div>
|
||||
{% block table_pagination %}
|
||||
{% include '_pagination.html' %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% block table_head %}
|
||||
<th class="text-center"><input type="checkbox" id="check_all" onclick="checkAll()"></th>
|
||||
<th class="text-center"><a href="{% url 'assets:asset-list' %}?sort=hostname">{% trans 'Hostname' %}</a></th>
|
||||
<th class="text-center"><a href="{% url 'assets:asset-list' %}?sort=username">{% trans 'IP' %}</a></th>
|
||||
<th class="text-center">{% trans 'Port' %}</th>
|
||||
<th class="text-center">{% trans 'Type' %}</th>
|
||||
<th class="text-center">{% trans 'Hardware' %}</th>
|
||||
<th class="text-center">{% trans 'Valid' %}</th>
|
||||
<th class="text-center"></th>
|
||||
{% endblock %}
|
||||
|
||||
{% block table_body %}
|
||||
{% for asset in asset_list %}
|
||||
<tr class="gradeX" name="oAssets">
|
||||
<td class="text-center">
|
||||
<input type="checkbox" name="checked" value="{{ asset.id }}">
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a href="{% url 'assets:asset-detail' pk=asset.id %}">
|
||||
{{ asset.hostname }}
|
||||
</a>
|
||||
</td>
|
||||
<td class="text-center">{{ asset.ip }}</td>
|
||||
<td class="text-center">{{ asset.port }}</td>
|
||||
<td class="text-center">{{ asset.type }}</td>
|
||||
<td class="text-center">{{ asset.cpu }} {{ asset.memory }} {{ asset.disk }} </td>
|
||||
<td class="text-center">
|
||||
{% if asset.is_valid.0 %}
|
||||
<i class="fa fa-check text-navy"></i>
|
||||
{% else %}
|
||||
<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 href="{% url 'assets:asset-delete' pk=asset.id %}" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% 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>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
{% block custom_foot_js %}
|
||||
|
@ -138,16 +136,21 @@
|
|||
oDiv.style.display = "none";
|
||||
}
|
||||
};
|
||||
|
||||
$(document).ready(function(){
|
||||
var oTags = document.getElementById("ydxbd");
|
||||
var table = $('#editable').DataTable({
|
||||
aLengthMenu: [[2, 25, 50, -1], ["2", "25", "50", "all"]],
|
||||
"aLengthMenu": [[10, 25, 50, -1], ["10", "25", "50", "all"]],
|
||||
"iDisplayLength":25,
|
||||
"aaSorting": [[7, "asc"]],
|
||||
"aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] }],
|
||||
"bAutoWidth": false,
|
||||
"language": {
|
||||
"url": "/static/js/plugins/dataTables/i18n/zh-hans.json"
|
||||
},
|
||||
"language": {"url": "/static/js/plugins/dataTables/i18n/zh-hans.json"},
|
||||
"dom": '<"custom">lftip',
|
||||
"initComplete": function() {
|
||||
//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> <button class='btn btn-sm btn-primary custom' id='zksx' onclick='tagShow()'>标签</button>");
|
||||
$('#editable').before(oTags);
|
||||
},
|
||||
columns: [
|
||||
{data: "checkbox"},
|
||||
{data: "id"},
|
||||
|
@ -211,4 +214,4 @@
|
|||
};
|
||||
};
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -50,7 +50,8 @@
|
|||
$(document).ready(function(){
|
||||
|
||||
var table = $('#editable').DataTable({
|
||||
aLengthMenu: [[2, 25, 50, -1], ["2", "25", "50", "all"]],
|
||||
"aLengthMenu": [[10, 25, 50, -1], ["10", "25", "50", "all"]],
|
||||
"iDisplayLength":25,
|
||||
"aaSorting": [[2, "asc"]],
|
||||
"aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] }],
|
||||
"bAutoWidth": false,
|
||||
|
@ -60,7 +61,7 @@ $(document).ready(function(){
|
|||
columns: [
|
||||
{data: "checkbox"},
|
||||
{data: "id"},
|
||||
{data: "name"},
|
||||
{data: "hostname"},
|
||||
{data: "ip"},
|
||||
{data: "type"},
|
||||
{data: "group"},
|
||||
|
@ -84,17 +85,26 @@ $(document).ready(function(){
|
|||
$('#close-btn').on('click',function(){
|
||||
$('#modal').modal('hide');
|
||||
});
|
||||
var size_name = document.getElementById('asset_on_count').innerText
|
||||
$('#save-btn').on('click',function(){
|
||||
// alert( table.rows('.selected').data().length +' row(s) selected' );
|
||||
//alert( table.rows('.selected').data().length +' row(s) selected' );
|
||||
var d = table.rows('.selected').data();
|
||||
var size = d.length;
|
||||
var re = /\d+/
|
||||
document.getElementById('add_asset').value = size;
|
||||
var str= size_name;
|
||||
var re=/\d+/g;
|
||||
document.getElementById('asset_on_count').innerText = str.replace(re, size);
|
||||
var column2 = table.rows('.selected').data();
|
||||
$("#asset_sed").find("input[name='assets']").remove();
|
||||
$("#asset_sed").find("button[name='asset_hostname']").remove();
|
||||
for(var i=0;i<column2.length;i++){
|
||||
column2[i].checkbox='<input name="checked" value="1" checked="" type="checkbox">';
|
||||
var value = column2[i].id;
|
||||
var ip = column2[i].ip;
|
||||
var hostname = column2[i].hostname;
|
||||
$("#asset_sed").append("<input type='hidden' name='assets' value='"+value+"'>");
|
||||
$("#asset_on_p").append("<button name='asset_hostname' title='"+ip+"' type='button' class='btn btn-default btn-xs ss'>"+hostname+"</button> ");
|
||||
}
|
||||
$('#modal').modal('hide');
|
||||
});
|
||||
|
|
|
@ -42,10 +42,16 @@ div.dataTables_wrapper div.dataTables_filter,
|
|||
<h3 class="widget-head-color-box">基本信息</h3>
|
||||
{{ form.name|bootstrap_horizontal }}
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label">关联的资产</label>
|
||||
<div class="col-sm-9" id="asset_sed">
|
||||
<input type="text" class=" form-control" id="add_asset" value="{{ assets_count }}">
|
||||
<label class="col-sm-2 control-label" id="asset_on_count">关联的资产({{ assets_count }})</label>
|
||||
<div class="col-sm-9" id="asset_sed">
|
||||
<div class="form-asset-on" id="add_asset">
|
||||
<p id="asset_on_p">
|
||||
{% for asset in assets_on_list %}
|
||||
<button name='asset_hostname' title='{{ asset.ip}}' type='button' class='btn btn-default btn-xs'>{{ asset.hostname }}</button>
|
||||
{% endfor %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-4 col-sm-offset-5">
|
||||
|
|
|
@ -228,11 +228,12 @@ class AssetGroupUpdateView(AdminUserRequiredMixin, UpdateView):
|
|||
return super(AssetGroupUpdateView, self).get(request, *args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
assets_all = self.object.assets.all()
|
||||
context = {
|
||||
'app': _('Assets'),
|
||||
'action': _('Create asset group'),
|
||||
# 'assets': Asset.objects.all(),
|
||||
'assets_count': self.object.assets.all().count(),
|
||||
'assets_on_list': assets_all,
|
||||
'assets_count': len(assets_all),
|
||||
'group_id':self.object.id,
|
||||
}
|
||||
kwargs.update(context)
|
||||
|
@ -662,10 +663,12 @@ class AssetTagUpdateView(AdminUserRequiredMixin, UpdateView):
|
|||
return super(AssetTagUpdateView, self).get(request, *args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
assets_all = self.object.asset_set.all()
|
||||
context = {
|
||||
'app': _('Tag'),
|
||||
'action': _('Asset Tags detail'),
|
||||
'assets_count': self.object.asset_set.all().count(),
|
||||
'assets_count': len(assets_all),
|
||||
'assets_on_list': assets_all,
|
||||
'tag_id':self.object.id,
|
||||
}
|
||||
kwargs.update(context)
|
||||
|
|
|
@ -204,14 +204,31 @@ table.dataTable tbody td.selected td i.text-navy
|
|||
padding-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
display: block;
|
||||
background: #f4f4f4;
|
||||
/*background: #ccc;*/
|
||||
padding-left: 10px;
|
||||
}
|
||||
.mar {
|
||||
margin-left: 2px;
|
||||
line-height: 15px;
|
||||
line-height: 0px;
|
||||
}
|
||||
.mar-j {
|
||||
margin-left: 3px;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.form-asset-on button{
|
||||
background: #f1f1f1;
|
||||
margin-right: 2px;
|
||||
}
|
||||
.form-asset-on{
|
||||
border: 1px solid #e5e6e7;
|
||||
padding-top:5px;
|
||||
padding-bottom: 0px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
min-height:34px;
|
||||
height: 100%;
|
||||
}
|
||||
.form-asset-on p{
|
||||
margin-bottom:0px;
|
||||
}
|
|
@ -30,7 +30,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<div class="">
|
||||
<div class="" id="content_start">
|
||||
{% block content_left_head %} {% endblock %}
|
||||
{% block table_search %}
|
||||
<form id="search_form" method="get" action="" class="pull-right mail-search">
|
||||
|
@ -44,6 +44,7 @@
|
|||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% block tags_list %}{% endblock %}
|
||||
</div>
|
||||
{% block table_container %}
|
||||
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li id="">
|
||||
<li id="terminal">
|
||||
<a href="{% url 'terminal:terminal-list' %}">
|
||||
<i class="fa fa-desktop"></i><span class="nav-label">{% trans 'Terminal' %}</span><span class="label label-info pull-right"></span>
|
||||
</a>
|
||||
|
|
Loading…
Reference in New Issue