{% extends 'base.html' %} {% load mytags %} {% block content %} {% include 'nav_cat_bar.html' %} <div class="wrapper wrapper-content animated fadeInRight"> <div class="row"> <div class="col-sm-12"> <div class="ibox float-e-margins" id="all"> <div class="ibox-title"> <h5> 主机详细信息列表</h5> <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> <a class="close-link"> <i class="fa fa-times"></i> </a> </div> </div> <div class="ibox-content"> <form id="asset_form"> <div class="col-sm-1" style="padding-left: 0"> <a href="{% url 'asset_add' %}" class="btn btn-sm btn-primary "> 添加资产 </a> </div> <div class="col-sm-7" style="padding-left: 0px"> <label> <select name="idc" class="form-control m-b input-sm" onchange="change_info()"> <option value="">机房</option> {% for idc in idc_all %} {% ifequal idc.name idc_name %} <option value="{{idc.name}}" selected> {{ idc.name|slice:":20" }}</option> {% else %} <option value="{{idc.name}}"> {{ idc.name|slice:":20" }}</option> {% endifequal %} {% endfor %} </select> </label> <label> <select name="group" class="form-control m-b input-sm" onchange="change_info()"> <option value="">主机组</option> {% for asset_group in asset_group_all %} {% ifequal asset_group.name group_name %} <option value="{{ asset_group.name }}" selected> {{ asset_group.name|slice:":20" }} </option> {% else %} <option value="{{ asset_group.name }}"> {{ asset_group.name|slice:":20" }} </option> {% endifequal %} {% endfor %} </select> </label> <label> <select name="asset_type" class="form-control m-b input-sm" onchange="change_info()"> <option value="">资产类型</option> {% for type in asset_types %} {% ifequal type.0|int2str asset_type %} <option value="{{ type.0 }}" selected> {{ type.1 }}</option> {% else %} <option value="{{ type.0 }}"> {{ type.1 }}</option> {% endifequal %} {% endfor %} </select> </label> <label> <select name="status" class="form-control m-b input-sm" onchange="change_info()"> <option value="">资产状态</option> {% for s in asset_status %} {% ifequal s.0|int2str status %} <option value="{{ s.0 }}" selected> {{ s.1 }}</option> {% else %} <option value="{{ s.0 }}"> {{ s.1 }}</option> {% endifequal %} {% endfor %} </select> </label> </div> <div class="col-sm-4" style="padding-right: 0"> <div class="input-group inline-group"> <input type="text" class="form-control m-b input-sm" id="search_input" name="keyword" value="{{ keyword }}" placeholder="Search"> <input type="text" style="display: none"> <div class="input-group-btn"> <button id='search_btn' href="{% url 'asset_list' %}?search=true" type="button" class="btn btn-sm btn-primary search-btn" onclick="change_info()"> - 搜索 - </button> <button type="button" href="{% url 'asset_list' %}?export=true" name="export" class="btn btn-sm btn-success search-btn-excel" onclick="return false"> - 导出 - </button> </div> </div> </div> <div id="export"></div> <table class="table table-striped table-bordered table-hover " id="editable" name="editable"> <thead> <tr> <th class="text-center"> <input id="checkall" type="checkbox" class="i-checks" name="checkall" value="checkall" data-editable='false' onclick="check_all('asset_form')"> </th> <th class="text-center"> 主机名 </th> <th class="text-center" name="ip"> IP地址 </th> <th class="text-center"> IDC </th> <th class="text-center"> 所属主机组 </th> {# <th class="text-center"> 配置信息 </th>#} <th class="text-center"> 操作系统 </th> <th class="text-center"> cpu核数 </th> <th class="text-center"> 内存 </th> <th class="text-center"> 硬盘 </th> <th class="text-center"> 操作 </th> </tr> </thead> <tbody> {% for asset in assets.object_list %} <tr class="gradeX"> <td class="text-center" name="id" value="{{ asset.id }}" data-editable='false'> <input name="id" value="{{ asset.id }}" type="checkbox" class="i-checks"> </td> <td class="text-center hostname"> <a href="{% url 'asset_detail' %}?id={{ asset.id }}">{{ asset.hostname|default_if_none:"" }}</a></td> <td class="text-center"> {{ asset.ip|default_if_none:"" }} </td> <td class="text-center"> {{ asset.idc.name|default_if_none:"" }} </td> <td class="text-center">{{ asset.group.all|group_str2 }}</td> {# <td class="text-center">{{ asset.cpu }}|{{ asset.memory }}|{{ asset.disk }}</td>#} <td class="text-center">{{ asset.system_type|default_if_none:"" }}{{ asset.system_version|default_if_none:"" }}</td> <td class="text-center"> {{ asset.cpu|get_cpu_core|default_if_none:"" }} </td> <td class="text-center"> {{ asset.memory|default_if_none:"" }}{% if asset.memory %}G{% endif %}</td> <td class="text-center"> {{ asset.disk|get_disk_info }}{% if asset.disk %}G{% endif %}</td> <td class="text-center" data-editable='false'> <a href="{% url 'asset_edit' %}?id={{ asset.id }}" class="btn btn-xs btn-info">编辑</a> <a value="{{ asset.id }}" class="conn btn btn-xs btn-warning">连接</a> <a value="{% url 'asset_del' %}?id={{ asset.id }}" class="btn btn-xs btn-danger asset_del">删除</a> </td> </tr> {% endfor %} </tbody> </table> <div class="row"> <div class="col-sm-6"> <input type="button" id="asset_del" class="btn btn-danger btn-sm" name="del_button" value="删除"/> <a value="{% url 'asset_edit_batch' %}" type="button" class="btn btn-sm btn-warning iframe">修改</a> <input type="button" id="asset_update" class="btn btn-info btn-sm" name="update_button" value="更新"/> {# <input type="button" id="asset_update_all" class="btn btn-primary btn-sm" name="update_button" value="更新全部"/>#} <input type="button" id="exec_cmd" class="btn btn-sm btn-primary" name="exec_cmd" value="执行命令"/> </div> {% include 'paginator.html' %} </div> </form> </div> </div> </div> </div> </div> {% endblock %} {% block self_footer_js %} <script> $(document).ready(function(){ $('.asset_del').click(function(){ var row = $(this).closest('tr'); if (confirm("确定删除?")) { $.get( $(this).attr('value'), {}, function (data) { row.remove() } ) } }); $('#exec_cmd').click(function(){ var url = '{% url "role_get" %}'; var new_url = '{% url "exec_cmd" %}?role='; var check_array = []; $(".gradeX input:checked").closest('tr').find('.hostname a').each(function() { check_array.push($(this).text()) }); check_assets = check_array.join(':'); $.ajax({ type: 'GET', url: url, data: {}, success: function(data){ var dataArray = data.split(','); if (dataArray.length == 1 && data != 'error'){ var title = 'Jumpserver Exec Terminal'; layer.open({ type: 2, title: title, maxmin: true, shade: false, area: ['725px', '600px'], content: new_url+data+'&check_assets='+check_assets }); //window.open(new_url + data, '', 'location=no, resizeable=no, height=410, width=625, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,status=no'); } else if (dataArray.length == '1' && data == 'error'){ layer.alert('没有授权系统用户') } else { aUrl = ''; $.each(dataArray, function(index, value){ aUrl += '<a onclick="windowOpenExec(this); return false" class="btn btn-xs btn-primary newa" href=' + new_url + value + '&check_assets=' + check_assets + '>' + value + '</a> ' }); layer.alert(aUrl, { skin: 'layui-layer-molv', title: '授权多个系统用户,请选择一个连接', shade: false, closeBtn: 0 }) } } }); return false }); $('.conn').click(function(){ var url='{% url "role_get" %}?id=' + $(this).attr('value'); // 获取用户有权限的角色 var href = $(this).attr('href'); var new_url = '{% url "terminal" %}?id=' + $(this).attr('value') + '&role='; // webterminal socket url var hostname = $(this).closest('tr').find('.hostname a')[0].innerHTML; $.ajax({ type: 'GET', url: url, data: {}, success: function(data){ var dataArray = data.split(','); if (data == 'error' || data == '' || data == null || data == undefined){ layer.alert('没有授权系统用户') } else if (dataArray.length == 1 && data != 'error' && navigator.platform == 'Win32'){ /* var title = 'Jumpserver Web Terminal' + '<span class="text-info"> '+ hostname +'</span>'; layer.open({ type: 2, title: title, maxmin: true, shade: false, area: ['628px', '420px'], content: new_url+data }); window.open(new_url+data, '_blank', 'toolbar=yes, location=yes, scrollbars=yes, resizable=yes, copyhistory=yes, width=628, height=400') */ window.open(new_url+data, '', 'width=628px, height=380px'); } else if (dataArray.length == 1 && data != 'error'){ /*layer.open({ type: 2, title: title, maxmin: true, shade: false, area: ['628px', '452px'], content: new_url+data }); */ window.open(new_url+data, '_blank', 'toolbar=yes, location=yes, copyhistory=yes, scrollbars=yes, width=628, height=410'); } else { aUrl = ''; $.each(dataArray, function(index, value){ aUrl += '<a onclick="windowOpen(this); return false" class="btn btn-xs btn-primary newa" href=' + new_url + value + ' value=' + hostname + '>' + value + '</a> ' }); console.log(aUrl); layer.alert(aUrl, { skin: 'layui-layer-molv', title: '授权多个系统用户,请选择一个连接', shade: false, closeBtn: 0 }) } } }); return false }); }); function windowOpen(a){ var new_url = $(a).attr('href'); var hostname = $(a).attr('value'); var title = 'Jumpserver Web Terminal - ' + '<span class="text-info"> '+ hostname +'</span>'; if (navigator.platform == 'Win32'){ /* layer.open({ type: 2, title: title, maxmin: true, area: ['628px', '420px'], shade: false, content: new_url }); */ window.open(new_url, '_blank', 'toolbar=yes, location=yes, copyhistory=yes, scrollbars=yes, width=628, height=400') } else { /* layer.open({ type: 2, title: title, maxmin: true, area: ['628px', '452px'], shade: false, content: new_url }); */ window.open(new_url, '_blank', 'toolbar=yes, location=yes, copyhistory=yes, scrollbars=yes, width=628, height=410'); } return false } function windowOpenExec(a){ var new_url = $(a).attr('href'); var title = 'Jumpserver Exec Terminal'; layer.open({ type: 2, title: title, maxmin: true, area: ['725px', '600px'], shade: false, content: new_url }); return false } $(".iframe").on('click', function(){ var asset_id_all = getIDall(); if (asset_id_all == ''){ alert("请至少选择一行!"); return false; } var url= $(this).attr("value") + '?asset_id_all=' + asset_id_all; parent.layer.open({ type: 2, title: 'JumpServer - 批量修改主机', maxmin: true, shift: 'top', border: [2, 0.3, '#1AB394'], shade: [0.5, '#000000'], area: ['800px', '600px'], shadeClose: true, content: url, cancel: function(){ location.replace(location.href); } }); }); $('.search-btn-excel').unbind('click').bind('click',function(){ var url= $(this).attr("href"); $.ajax({ type: "GET", url: url, data: $("#asset_form").serialize(), success: function (data) { $("#export").html(data); } }); }); $('#asset_del').click(function () { var asset_id_all = getIDall(); if (asset_id_all == ''){ alert("请至少选择一行!"); return false; } if (confirm("确定删除?")) { $.ajax({ type: "post", data: {asset_id_all: asset_id_all}, url: "{% url 'asset_del' %}?arg=batch", success: function () { parent.location.reload(); } }); } }); $('#asset_update').click(function () { var asset_id_all = getIDall(); if (asset_id_all == ''){ if (confirm("更新全部资产信息?")) { layer.msg('玩命更新中...', {time: 200000}); $.ajax({ type: "post", url: "{% url 'asset_update_batch' %}?arg=all", success: function () { parent.location.reload(); } }); } } else { layer.msg('玩命更新中...', {time: 200000}); $.ajax({ type: "post", data: {asset_id_all: asset_id_all}, url: "{% url 'asset_update_batch' %}", success: function () { parent.location.reload(); } }); } }); {# $('#asset_update_all').click(function () {#} {# layer.msg('玩命更新中...', {time: 200000});#} {# $.ajax({#} {# type: "post",#} {# url: "/jasset/asset_update_batch/?arg=all",#} {# success: function () {#} {# parent.location.reload();#} {# }#} {# });#} {# });#} function change_info(){ var args = $("#asset_form").serialize(); window.location = "{% url 'asset_list' %}?" + args } $("#search_input").keydown(function(e){ if(e.keyCode==13){ change_info() } }); </script> {% endblock %}