主机运维页面支持模糊搜索了。

pull/105/head
Apex Liu 2018-09-02 12:33:36 +08:00
parent df5e76c274
commit 55e049d0e3
3 changed files with 40 additions and 38 deletions

View File

@ -40,12 +40,21 @@ $app.create_controls = function (cb_stack) {
}, },
column_default: {sort: false, align: 'left'}, column_default: {sort: false, align: 'left'},
columns: [ columns: [
{
title: '<a href="javascript:;" data-reset-filter><i class="fa fa-undo fa-fw"></i></a>',
key: 'chkbox',
sort: false,
width: 36,
align: 'center',
render: 'make_check_box',
fields: {id: 'id'}
},
{ {
title: '主机', title: '主机',
key: 'host', key: 'host',
// sort: true, // sort: true,
// header_render: 'filter_search', header_render: 'filter_search',
width: 300, width: 320,
render: 'host_info', render: 'host_info',
fields: {ip: 'ip', router_ip: 'router_ip', router_port: 'router_port', h_name: 'h_name'} fields: {ip: 'ip', router_ip: 'router_ip', router_port: 'router_port', h_name: 'h_name'}
}, },
@ -97,24 +106,6 @@ $app.create_controls = function (cb_stack) {
}); });
$tp.create_table_pagination($app.table_host, 'table-host-pagination'); $tp.create_table_pagination($app.table_host, 'table-host-pagination');
// $app.dom.group_list_for_sel.find('a[data-tp-selector]').click(function () {
// var obj = $(this);
// //console.log(parseInt(obj.attr('data-tp-selector')));
// //$app.set_selected_to_role(parseInt(obj.attr('data-tp-selector')), obj.attr('data-name'));
// //$app.dom.group_selected.text(obj.attr('data-name'));
//
// CALLBACK_STACK.create()
// .add(function (cb) {
// $app.dom.group_selected.text(obj.attr('data-name'));
// cb.exec();
// })
// .add($app.table_host.load_data)
// //.add($app.table_host.reset_filters)
// .exec();
// });
//------------------------------- //-------------------------------
// 对话框 // 对话框
//------------------------------- //-------------------------------
@ -142,9 +133,6 @@ $app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) {
var acc_id = parseInt($(this).attr('data-acc-id')); var acc_id = parseInt($(this).attr('data-acc-id'));
var host_id = parseInt($(this).attr('data-host-id')); var host_id = parseInt($(this).attr('data-host-id'));
// var policy = $app.table_policy.get_row(row_id);
if (action === 'rdp') { if (action === 'rdp') {
$app.connect_remote(uni_id, acc_id, host_id, TP_PROTOCOL_TYPE_RDP, TP_PROTOCOL_TYPE_RDP_DESKTOP); $app.connect_remote(uni_id, acc_id, host_id, TP_PROTOCOL_TYPE_RDP, TP_PROTOCOL_TYPE_RDP_DESKTOP);
} else if (action === 'rdp-option') { } else if (action === 'rdp-option') {

View File

@ -712,7 +712,7 @@ class DoGetRemotesHandler(TPBaseJsonHandler):
# if i == 'user_id' and _filter[i] == 0: # if i == 'user_id' and _filter[i] == 0:
# tmp.append(i) # tmp.append(i)
# continue # continue
if i == '_name': if i == 'search':
if len(_filter[i].strip()) == 0: if len(_filter[i].strip()) == 0:
tmp.append(i) tmp.append(i)
continue continue

View File

@ -615,10 +615,19 @@ def get_remotes(handler, sql_filter, sql_order, sql_limit):
for k in sql_filter: for k in sql_filter:
# if k == 'state': # if k == 'state':
# _where.append('h.state={}'.format(sql_filter[k])) # _where.append('h.state={}'.format(sql_filter[k]))
# elif k == 'search':
# _where.append('(h.name LIKE "%{k}%" OR h.ip LIKE "%{k}%" OR h.router_ip LIKE "%{k}%")'.format(k=sql_filter[k]))
# el # el
if k == 'host_group': if k == 'search':
ss = SQL(get_db())
ss.select_from('host', ['id'], alt_name='h')
ss.where('(h.name LIKE "%{k}%" OR h.ip LIKE "%{k}%" OR h.router_ip LIKE "%{k}%")'.format(k=sql_filter[k]))
err = ss.query()
if err != TPE_OK:
return err, 0, 1, []
if len(ss.recorder) == 0:
return TPE_OK, 0, 1, []
h_list = ','.join([str(i['id']) for i in ss.recorder])
_where.append('(h_id IN ({}))'.format(h_list))
elif k == 'host_group':
shg = SQL(get_db()) shg = SQL(get_db())
shg.select_from('group_map', ['mid'], alt_name='g') shg.select_from('group_map', ['mid'], alt_name='g')
shg.where('g.type={} AND g.gid={}'.format(TP_GROUP_HOST, sql_filter[k])) shg.where('g.type={} AND g.gid={}'.format(TP_GROUP_HOST, sql_filter[k]))
@ -628,22 +637,12 @@ def get_remotes(handler, sql_filter, sql_order, sql_limit):
if len(shg.recorder) == 0: if len(shg.recorder) == 0:
return TPE_NOT_EXISTS, 0, 1, [] return TPE_NOT_EXISTS, 0, 1, []
h_list = ','.join([str(i['mid']) for i in shg.recorder]) h_list = ','.join([str(i['mid']) for i in shg.recorder])
_where.append('h_id IN ({})'.format(h_list)) _where.append('(h_id IN ({}))'.format(h_list))
str_where = '' str_where = ''
if len(_where) > 0: if len(_where) > 0:
str_where = 'WHERE ( {} )'.format(' AND '.join(_where)) str_where = 'WHERE ( {} )'.format(' AND '.join(_where))
sql = []
sql.append('SELECT {}'.format(','.join(_f)))
sql.append('FROM')
sql.append('({}) AS s2'.format(sql_2))
sql.append(str_where)
sql.append('GROUP BY h_id')
sql.append('ORDER BY ip')
sql.append('LIMIT {},{}'.format(sql_limit['page_index'] * sql_limit['per_page'], sql_limit['per_page']))
sql.append(';')
sql_counter = [] sql_counter = []
sql_counter.append('SELECT COUNT(*)') sql_counter.append('SELECT COUNT(*)')
sql_counter.append('FROM') sql_counter.append('FROM')
@ -657,6 +656,21 @@ def get_remotes(handler, sql_filter, sql_order, sql_limit):
return TPE_OK, 0, 1, [] return TPE_OK, 0, 1, []
total = len(db_ret) total = len(db_ret)
if total == 0:
return TPE_OK, 0, 1, []
if total < sql_limit['page_index'] * sql_limit['per_page']:
sql_limit['page_index'] = 0
sql = []
sql.append('SELECT {}'.format(','.join(_f)))
sql.append('FROM')
sql.append('({}) AS s2'.format(sql_2))
sql.append(str_where)
sql.append('GROUP BY h_id')
sql.append('ORDER BY ip')
sql.append('LIMIT {},{}'.format(sql_limit['page_index'] * sql_limit['per_page'], sql_limit['per_page']))
sql.append(';')
ret_recorder = [] # 用于构建最终返回的数据 ret_recorder = [] # 用于构建最终返回的数据
h_ids = [] # 涉及到的主机的ID列表 h_ids = [] # 涉及到的主机的ID列表