mirror of https://github.com/tp4a/teleport
完成:RDP远程连接按钮+选项功能,同时调整了调用助手的参数(rdp_width, rdp_height, rdp_console)。
parent
0d5cf16331
commit
c68bbc6f3f
|
@ -544,7 +544,7 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
}
|
||||
|
||||
// 判断参数是否正确
|
||||
if (!jsRoot["teleport_ip"].isString() || !jsRoot["size"].isNumeric()
|
||||
if (!jsRoot["teleport_ip"].isString()
|
||||
|| !jsRoot["teleport_port"].isNumeric() || !jsRoot["remote_host_ip"].isString()
|
||||
|| !jsRoot["session_id"].isString() || !jsRoot["protocol_type"].isNumeric() || !jsRoot["protocol_sub_type"].isNumeric()
|
||||
)
|
||||
|
@ -553,28 +553,15 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
return;
|
||||
}
|
||||
|
||||
int pro_type = jsRoot["protocol_type"].asUInt();
|
||||
int pro_sub = jsRoot["protocol_sub_type"].asInt();
|
||||
|
||||
ex_astr teleport_ip = jsRoot["teleport_ip"].asCString();
|
||||
int teleport_port = jsRoot["teleport_port"].asUInt();
|
||||
|
||||
int windows_size = 3;
|
||||
if (jsRoot["size"].isNull())
|
||||
windows_size = 3;
|
||||
else
|
||||
windows_size = jsRoot["size"].asUInt();
|
||||
|
||||
int console = 0;
|
||||
if (jsRoot["console"].isNull())
|
||||
console = 0;
|
||||
else
|
||||
console = jsRoot["console"].asUInt();
|
||||
|
||||
ex_astr real_host_ip = jsRoot["remote_host_ip"].asCString();
|
||||
ex_astr sid = jsRoot["session_id"].asCString();
|
||||
|
||||
int pro_type = jsRoot["protocol_type"].asUInt();
|
||||
|
||||
ex_wstr w_exe_path;
|
||||
WCHAR w_szCommandLine[MAX_PATH] = { 0 };
|
||||
|
||||
|
@ -592,6 +579,40 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
|
||||
if (pro_type == TP_PROTOCOL_TYPE_RDP)
|
||||
{
|
||||
int rdp_w = 800;
|
||||
int rdp_h = 640;
|
||||
bool rdp_console = false;
|
||||
|
||||
if (!jsRoot["rdp_width"].isNull()) {
|
||||
if (jsRoot["rdp_width"].isNumeric()) {
|
||||
rdp_w = jsRoot["rdp_width"].asUInt();
|
||||
}
|
||||
else {
|
||||
_create_json_ret(buf, TPE_PARAM);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!jsRoot["rdp_height"].isNull()) {
|
||||
if (jsRoot["rdp_height"].isNumeric()) {
|
||||
rdp_h = jsRoot["rdp_height"].asUInt();
|
||||
}
|
||||
else {
|
||||
_create_json_ret(buf, TPE_PARAM);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!jsRoot["rdp_console"].isNull()) {
|
||||
if (jsRoot["rdp_console"].isBool()) {
|
||||
rdp_console = jsRoot["rdp_console"].asBool();
|
||||
}
|
||||
else {
|
||||
_create_json_ret(buf, TPE_PARAM);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================
|
||||
// RDP
|
||||
//==============================================
|
||||
|
@ -816,41 +837,25 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
|
||||
ex_wstr rdp_name = g_cfg.rdp_name;
|
||||
if (rdp_name == L"mstsc") {
|
||||
int width = 800;
|
||||
int higth = 600;
|
||||
int width = 0;
|
||||
int higth = 0;
|
||||
int cx = 0;
|
||||
int cy = 0;
|
||||
|
||||
int display = 1;
|
||||
int iWidth = GetSystemMetrics(SM_CXSCREEN);
|
||||
int iHeight = GetSystemMetrics(SM_CYSCREEN);
|
||||
switch (windows_size)
|
||||
{
|
||||
case 0:
|
||||
|
||||
if (rdp_w == 0 || rdp_h == 0) {
|
||||
//全屏
|
||||
width = iWidth;
|
||||
higth = iHeight;
|
||||
display = 2;
|
||||
break;
|
||||
case 1:
|
||||
width = 800;
|
||||
higth = 600;
|
||||
}
|
||||
else {
|
||||
width = rdp_w;
|
||||
higth = rdp_h;
|
||||
display = 1;
|
||||
break;
|
||||
case 2:
|
||||
width = 1024;
|
||||
higth = 768;
|
||||
display = 1;
|
||||
break;
|
||||
case 3:
|
||||
width = 1280;
|
||||
higth = 1024;
|
||||
display = 1;
|
||||
break;
|
||||
default:
|
||||
width = 800;
|
||||
higth = 600;
|
||||
break;
|
||||
}
|
||||
|
||||
cx = (iWidth - width) / 2;
|
||||
|
@ -864,15 +869,16 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
cy = 0;
|
||||
}
|
||||
|
||||
int split_pos = sid.length() - 2;
|
||||
std::string real_sid = sid.substr(0, split_pos);
|
||||
char* sz_console = "0";
|
||||
if (rdp_console)
|
||||
sz_console = "1";
|
||||
|
||||
char sz_rdp_file_content[4096] = { 0 };
|
||||
sprintf_s(sz_rdp_file_content, rdp_content.c_str(),
|
||||
console, display, width, higth
|
||||
, cx, cy, cx + width + 20, cy + higth + 40
|
||||
sz_console, display, width, higth
|
||||
, cx, cy, cx + width + 100, cy + higth + 100
|
||||
, teleport_ip.c_str(), teleport_port
|
||||
, real_sid.c_str()
|
||||
, sid.c_str()
|
||||
);
|
||||
|
||||
char sz_file_name[MAX_PATH] = { 0 };
|
||||
|
@ -884,10 +890,8 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
_create_json_ret(buf, TPE_FAILED);
|
||||
return;
|
||||
}
|
||||
ex_wstr w_s_id;
|
||||
ex_astr2wstr(real_sid, w_s_id);
|
||||
|
||||
ex_astr temp_host_ip = real_host_ip;// replace_all_distinct(real_host_ip, ("."), "-");
|
||||
ex_astr temp_host_ip = real_host_ip;
|
||||
ex_replace_all(temp_host_ip, ".", "-");
|
||||
|
||||
sprintf_s(sz_file_name, ("%s%s.rdp"), temp_path, temp_host_ip.c_str());
|
||||
|
@ -908,28 +912,21 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
ex_replace_all(w_exe_path, _T("{tmp_rdp_file}"), tmp_rdp_file);
|
||||
}
|
||||
else if (g_cfg.rdp_name == L"freerdp") {
|
||||
wchar_t* w_screen = NULL;
|
||||
ex_wstr w_screen;
|
||||
|
||||
switch (windows_size)
|
||||
{
|
||||
case 0: //È«ÆÁ
|
||||
if (rdp_w == 0 || rdp_h == 0) {
|
||||
//È«ÆÁ
|
||||
w_screen = _T("/f");
|
||||
break;
|
||||
case 2:
|
||||
w_screen = _T("/size:1024x768");
|
||||
break;
|
||||
case 3:
|
||||
w_screen = _T("/size:1280x1024");
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
w_screen = _T("/size:800x600");
|
||||
break;
|
||||
}
|
||||
else {
|
||||
char sz_size[64] = {0};
|
||||
ex_strformat(sz_size, 63, "/size:%dx%d", rdp_w, rdp_h);
|
||||
ex_astr2wstr(sz_size, w_screen);
|
||||
}
|
||||
|
||||
wchar_t* w_console = NULL;
|
||||
|
||||
if (console != 0)
|
||||
if (rdp_console)
|
||||
{
|
||||
w_console = L"/admin";
|
||||
}
|
||||
|
@ -938,18 +935,6 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
|||
w_console = L"";
|
||||
}
|
||||
|
||||
int split_pos = sid.length() - 2;
|
||||
std::string real_sid = sid.substr(0, split_pos);
|
||||
std::string str_pwd_len = sid.substr(split_pos, sid.length());
|
||||
int n_pwd_len = strtol(str_pwd_len.c_str(), NULL, 16);
|
||||
n_pwd_len -= real_sid.length();
|
||||
WCHAR w_szPwd[256] = { 0 };
|
||||
for (int i = 0; i < n_pwd_len; i++)
|
||||
{
|
||||
w_szPwd[i] = '*';
|
||||
}
|
||||
|
||||
ex_astr2wstr(real_sid, w_sid);
|
||||
w_exe_path += L" /gdi:sw"; // 使用软件渲染,gdi:hw使用硬件加速,但是会出现很多黑块(录像回放时又是正常的!)
|
||||
w_exe_path += L" -grab-keyboard"; // 防止启动FreeRDP后,失去本地键盘响应,必须得先最小化一下FreeRDP窗口(不过貌似不起作用)
|
||||
|
||||
|
|
|
@ -153,9 +153,9 @@ bool TsSessionManager::request_session(ex_astr& sid, TS_CONNECT_INFO* info)
|
|||
if (info->protocol_type == TP_PROTOCOL_TYPE_RDP)
|
||||
{
|
||||
info->ref_count = 1; // 因为RDP连接之前可能会有很长时间用于确认是否连接、是否信任证书,所以很容易超时,我们认为将引用计数+1,防止因超时被清除。
|
||||
char szTmp[8] = { 0 };
|
||||
snprintf(szTmp, 8, "%02X", (unsigned char)(info->acc_username.length() + info->acc_secret.length()));
|
||||
sid += szTmp;
|
||||
// char szTmp[8] = { 0 };
|
||||
// snprintf(szTmp, 8, "%02X", (unsigned char)(info->acc_username.length() + info->acc_secret.length()));
|
||||
// sid += szTmp;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -57,11 +57,8 @@ $app.init_sys_status_info = function (data) {
|
|||
type: 'value',
|
||||
axisLine: {show: false},
|
||||
axisTick: {show: false},
|
||||
// min: 0,
|
||||
// max: 100,
|
||||
boundaryGap: [0, '60%'],
|
||||
boundaryGap: [0, '70%'],
|
||||
axisLabel: {
|
||||
margin: 5,
|
||||
fontSize: 11,
|
||||
fontFamily: 'Monaco, Lucida Console, Consolas, Courier',
|
||||
formatter: function (value, index) {
|
||||
|
@ -86,6 +83,7 @@ $app.init_sys_status_info = function (data) {
|
|||
if (index === 0)
|
||||
return '';
|
||||
return tp_size2str(value, 1);
|
||||
// return tp_echarts_size(value).val;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -126,7 +124,7 @@ $app.init_sys_status_info = function (data) {
|
|||
var ret = [];
|
||||
ret.push(params[0].name);
|
||||
ret.push(params[0].seriesName + ': ' + params[0].value[1] + '%');
|
||||
if(params.length > 1) {
|
||||
if (params.length > 1) {
|
||||
ret.push(params[1].seriesName + ': ' + params[1].value[1] + '%');
|
||||
}
|
||||
return ret.join('<br/>');
|
||||
|
@ -298,7 +296,7 @@ $app.init_sys_status_info = function (data) {
|
|||
var ret = [];
|
||||
ret.push(params[0].name);
|
||||
ret.push(params[0].seriesName + ': ' + tp_size2str(params[0].value[1], 2));
|
||||
if(params.length > 1) {
|
||||
if (params.length > 1) {
|
||||
ret.push(params[1].seriesName + ': ' + tp_size2str(params[1].value[1], 2));
|
||||
}
|
||||
return ret.join('<br/>');
|
||||
|
@ -371,7 +369,7 @@ $app.init_sys_status_info = function (data) {
|
|||
var ret = [];
|
||||
ret.push(params[0].name);
|
||||
ret.push(params[0].seriesName + ': ' + tp_size2str(params[0].value[1], 2));
|
||||
if(params.length > 1) {
|
||||
if (params.length > 1) {
|
||||
ret.push(params[1].seriesName + ': ' + tp_size2str(params[1].value[1], 2));
|
||||
}
|
||||
return ret.join('<br/>');
|
||||
|
|
|
@ -2,9 +2,8 @@
|
|||
|
||||
$app.on_init = function (cb_stack) {
|
||||
$app.dom = {
|
||||
btn_refresh_host: $('#btn-refresh-host'),
|
||||
btn_add_user: $('#btn-add-host'),
|
||||
chkbox_host_select_all: $('#table-host-select-all')
|
||||
btn_refresh_host: $('#btn-refresh-host')
|
||||
// box_rdp_option: $('#rdp-options')
|
||||
};
|
||||
|
||||
cb_stack
|
||||
|
@ -101,6 +100,8 @@ $app.create_controls = function (cb_stack) {
|
|||
//-------------------------------
|
||||
// 对话框
|
||||
//-------------------------------
|
||||
$app.dlg_rdp_options = $app.create_dlg_rdp_options();
|
||||
cb_stack.add($app.dlg_rdp_options.init);
|
||||
|
||||
//-------------------------------
|
||||
// 页面控件事件绑定
|
||||
|
@ -109,19 +110,19 @@ $app.create_controls = function (cb_stack) {
|
|||
$app.table_host.load_data();
|
||||
});
|
||||
|
||||
// $app.dom.box_rdp_option.mouseleave(function(){
|
||||
// console.log('---mouseleave');
|
||||
// $app.dom.box_rdp_option.hide();
|
||||
// });
|
||||
|
||||
cb_stack.exec();
|
||||
};
|
||||
|
||||
$app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) {
|
||||
|
||||
// if (col_key === 'chkbox') {
|
||||
// cell_obj.find('[data-check-box]').click(function () {
|
||||
// $app.check_host_all_selected();
|
||||
// });
|
||||
// } else
|
||||
if (col_key === 'action') {
|
||||
// 绑定系统选择框事件
|
||||
cell_obj.find('[data-action]').click(function () {
|
||||
cell_obj.find('[data-action]').click(function (e) {
|
||||
var action = $(this).attr('data-action');
|
||||
var protocol_sub_type = $(this).attr('data-sub-protocol');
|
||||
var uni_id = $(this).attr('data-id');
|
||||
|
@ -130,6 +131,9 @@ $app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) {
|
|||
|
||||
if (action === 'rdp') {
|
||||
$app.connect_remote(uni_id, TP_PROTOCOL_TYPE_RDP, TP_PROTOCOL_TYPE_RDP_DESKTOP);
|
||||
} else if (action === 'rdp-option') {
|
||||
$app.dlg_rdp_options.show(e.pageX, e.pageY, uni_id, TP_PROTOCOL_TYPE_RDP, TP_PROTOCOL_TYPE_RDP_DESKTOP);
|
||||
//$app.connect_remote(uni_id, TP_PROTOCOL_TYPE_SSH, protocol_sub_type);
|
||||
} else if (action === 'ssh') {
|
||||
$app.connect_remote(uni_id, TP_PROTOCOL_TYPE_SSH, protocol_sub_type);
|
||||
} else if (action === 'telnet') {
|
||||
|
@ -139,30 +143,6 @@ $app.on_table_host_cell_created = function (tbl, row_id, col_key, cell_obj) {
|
|||
}
|
||||
};
|
||||
|
||||
// $app.check_host_all_selected = function (cb_stack) {
|
||||
// var _all_checked = true;
|
||||
// var _objs = $('#' + $app.table_host.dom_id + ' tbody').find('[data-check-box]');
|
||||
// if (_objs.length === 0) {
|
||||
// _all_checked = false;
|
||||
// } else {
|
||||
// $.each(_objs, function (i, _obj) {
|
||||
// if (!$(_obj).is(':checked')) {
|
||||
// _all_checked = false;
|
||||
// return false;
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// if (_all_checked) {
|
||||
// $app.dom.chkbox_host_select_all.prop('checked', true);
|
||||
// } else {
|
||||
// $app.dom.chkbox_host_select_all.prop('checked', false);
|
||||
// }
|
||||
//
|
||||
// if (cb_stack)
|
||||
// cb_stack.exec();
|
||||
// };
|
||||
|
||||
$app.on_table_host_render_created = function (render) {
|
||||
// render.filter_role = function (header, title, col) {
|
||||
// var _ret = ['<div class="tp-table-filter tp-table-filter-' + col.cell_align + '">'];
|
||||
|
@ -290,32 +270,43 @@ $app.on_table_host_render_created = function (render) {
|
|||
} else {
|
||||
if (acc.protocol_type === TP_PROTOCOL_TYPE_RDP) {
|
||||
if ((acc.policy_.flag_rdp & TP_FLAG_RDP_DESKTOP) !== 0) {
|
||||
act_btn.push('<li class="remote-action-btn">');
|
||||
act_btn.push('<button type="button" class="btn btn-sm btn-primary" data-action="rdp" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_RDP_DESKTOP + '"><i class="fa fa-desktop fa-fw"></i> RDP</button>');
|
||||
act_btn.push('</li>');
|
||||
act_btn.push('<div class="btn-group btn-group-sm">');
|
||||
act_btn.push('<button type="button" class="btn btn-primary" data-action="rdp" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_RDP_DESKTOP + '"><i class="fa fa-desktop fa-fw"></i> RDP</button>');
|
||||
// act_btn.push('<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">');
|
||||
act_btn.push('<a href="javascript:;" class="btn btn-primary dropdown-toggle" data-action="rdp-option" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_RDP_DESKTOP + '">');
|
||||
//act_btn.push('<span class="caret"></span>');
|
||||
act_btn.push('<i class="fa fa-cog"></i>');
|
||||
act_btn.push('</a>');
|
||||
// act_btn.push('<ul class="dropdown-menu">');
|
||||
// act_btn.push('<li><a href="#">Another action</a></li>');
|
||||
// act_btn.push('<li><a href="#"><i class="fa fa-desktop fa-fw"></i> 连接</a></li>');
|
||||
// act_btn.push('<li role="separator" class="divider"></li>');
|
||||
// // act_btn.push('<li><a href="#"><i class="fa fa-desktop fa-fw"></i> Console模式</a></li>');
|
||||
// // act_btn.push('<li><input type="checkbox">Console模式</input></li>');
|
||||
// act_btn.push('<li><a href="javascript:;" class="tp-checkbox tp-editable">Console模式</a></li>');
|
||||
// act_btn.push('<li role="separator" class="divider"></li>');
|
||||
// act_btn.push('<li><a href="#"><i class="fa fa-desktop fa-fw"></i> 连接</a></li>');
|
||||
// act_btn.push('</ul>');
|
||||
act_btn.push('</div>');
|
||||
}
|
||||
} else if (acc.protocol_type === TP_PROTOCOL_TYPE_SSH) {
|
||||
act_btn.push('<div class="btn-group btn-group-sm">');
|
||||
if ((acc.policy_.flag_ssh & TP_FLAG_SSH_SHELL) !== 0) {
|
||||
act_btn.push('<li class="remote-action-btn">');
|
||||
act_btn.push('<button type="button" class="btn btn-sm btn-success" data-action="ssh" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_SSH_SHELL + '"><i class="fa fa-keyboard-o fa-fw"></i> SSH</button>');
|
||||
act_btn.push('</li>');
|
||||
act_btn.push('<button type="button" class="btn btn-success" data-action="ssh" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_SSH_SHELL + '"><i class="fa fa-keyboard-o fa-fw"></i> SSH</button>');
|
||||
}
|
||||
|
||||
if ((acc.policy_.flag_ssh & TP_FLAG_SSH_SFTP) !== 0) {
|
||||
act_btn.push('<li class="remote-action-btn">');
|
||||
act_btn.push('<button type="button" class="btn btn-sm btn-info" data-action="ssh" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_SSH_SFTP + '"><i class="fa fa-upload fa-fw"></i> SFTP</button>');
|
||||
act_btn.push('</li>');
|
||||
act_btn.push('<button type="button" class="btn btn-info" data-action="ssh" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_SSH_SFTP + '"><i class="fa fa-upload fa-fw"></i> SFTP</button>');
|
||||
}
|
||||
act_btn.push('</div>');
|
||||
} else if (acc.protocol_type === TP_PROTOCOL_TYPE_TELNET) {
|
||||
act_btn.push('<li class="remote-action-btn">');
|
||||
act_btn.push('<button type="button" class="btn btn-sm btn-success" data-action="telnet" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_TELNET_SHELL + '"><i class="fa fa-keyboard-o fa-fw"></i> TELNET</button>');
|
||||
act_btn.push('</li>');
|
||||
act_btn.push('<button type="button" class="btn btn-warning" data-action="telnet" data-id="' + acc.uni_id + '" data-sub-protocol="' + TP_PROTOCOL_TYPE_TELNET_SHELL + '"><i class="fa fa-keyboard-o fa-fw"></i> TELNET</button>');
|
||||
}
|
||||
}
|
||||
|
||||
h.push('<div class="remote-action-group" id =' + "account-id-" + acc.id + '"><ul>');
|
||||
h.push('<div class="remote-action-group" id =' + "account-id-" + acc.id + '">');
|
||||
h.push(act_btn.join(''));
|
||||
h.push('</ul></div>');
|
||||
h.push('</div>');
|
||||
}
|
||||
return h.join('');
|
||||
};
|
||||
|
@ -386,31 +377,126 @@ $app.on_table_host_header_created = function (header) {
|
|||
.exec();
|
||||
});
|
||||
|
||||
// TODO: 当过滤器不是默认值时,让“重置过滤器按钮”有呼吸效果,避免用户混淆 - 实验性质
|
||||
// var t1 = function(){
|
||||
// $app.dom.btn_table_host_reset_filter.fadeTo(1000, 1.0, function(){
|
||||
// $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1);
|
||||
// });
|
||||
// };
|
||||
// $app.dom.btn_table_host_reset_filter.fadeTo(1000, 0.2, t1);
|
||||
|
||||
// 表格内嵌过滤器的事件绑定在这时进行(也可以延期到整个表格创建完成时进行)
|
||||
header._table_ctrl.get_filter_ctrl('search').on_created();
|
||||
// header._table_ctrl.get_filter_ctrl('role').on_created();
|
||||
// header._table_ctrl.get_filter_ctrl('state').on_created();
|
||||
};
|
||||
|
||||
$app.get_selected_user = function (tbl) {
|
||||
var users = [];
|
||||
var _objs = $('#' + $app.table_host.dom_id + ' tbody tr td input[data-check-box]');
|
||||
$.each(_objs, function (i, _obj) {
|
||||
if ($(_obj).is(':checked')) {
|
||||
var _row_data = tbl.get_row(_obj);
|
||||
// _all_checked = false;
|
||||
users.push(_row_data.id);
|
||||
$app.create_dlg_rdp_options = function () {
|
||||
var dlg = {};
|
||||
dlg.dom_id = 'dlg-rdp-options';
|
||||
dlg.uni_id = '';
|
||||
dlg.protocol_type = TP_PROTOCOL_TYPE_RDP;
|
||||
dlg.protocol_sub_type = TP_PROTOCOL_TYPE_RDP_DESKTOP;
|
||||
dlg.rdp_w = 0;
|
||||
dlg.rdp_h = 0;
|
||||
dlg.rdp_console = false;
|
||||
|
||||
dlg.dom = {
|
||||
dialog: $('#' + dlg.dom_id),
|
||||
screen_size: $('#' + dlg.dom_id + ' [data-field="screen-size"]'),
|
||||
console_mode: $('#' + dlg.dom_id + ' input[data-field="console-mode"]'),
|
||||
btn_connect: $('#' + dlg.dom_id + ' [data-field="do-rdp-connect"]')
|
||||
};
|
||||
dlg.timer = null;
|
||||
|
||||
dlg.init = function (cb_stack) {
|
||||
dlg.dom.dialog.mouseleave(function () {
|
||||
dlg.timer = setTimeout(function () {
|
||||
dlg.hide();
|
||||
}, 800);
|
||||
});
|
||||
dlg.dom.dialog.mouseenter(function () {
|
||||
if (dlg.timer !== null) {
|
||||
clearTimeout(dlg.timer);
|
||||
dlg.timer = null;
|
||||
}
|
||||
});
|
||||
|
||||
dlg.dom.btn_connect.click(function () {
|
||||
dlg.hide();
|
||||
|
||||
var _size_obj = $('#' + dlg.dom_id + ' input[name="screen-size"]:checked');
|
||||
var _console = dlg.dom.console_mode.is(':checked');
|
||||
var _w = parseInt(_size_obj.attr('data-w'));
|
||||
var _h = parseInt(_size_obj.attr('data-h'));
|
||||
|
||||
dlg.rdp_w = _w;
|
||||
dlg.rdp_h = _h;
|
||||
Cookies.set('rdp_options', {w: _w, h: _h, 'c': _console}, {path: '/ops/remote'});
|
||||
|
||||
$app.connect_remote(dlg.uni_id, dlg.protocol_type, dlg.protocol_sub_type);
|
||||
});
|
||||
|
||||
var ops = Cookies.getJSON('rdp_options');
|
||||
dlg.rdp_w = 0;
|
||||
dlg.rdp_h = 0;
|
||||
dlg.rdp_console = false;
|
||||
if (!_.isUndefined(ops)) {
|
||||
dlg.rdp_w = ops.w;
|
||||
dlg.rdp_h = ops.h;
|
||||
dlg.rdp_console = ops.c;
|
||||
}
|
||||
});
|
||||
return users;
|
||||
if (_.isUndefined(dlg.rdp_w) || _.isUndefined(dlg.rdp_h)) {
|
||||
dlg.rdp_w = 0;
|
||||
dlg.rdp_h = 0;
|
||||
}
|
||||
if (_.isUndefined(dlg.rdp_console))
|
||||
dlg.rdp_console = false;
|
||||
|
||||
var ss = [
|
||||
{w: 800, h: 600},
|
||||
{w: 1024, h: 768},
|
||||
{w: 1280, h: 1024},
|
||||
{w: 1366, h: 768},
|
||||
{w: 1440, h: 900}
|
||||
];
|
||||
|
||||
var h = [];
|
||||
h.push('<div class="radio">');
|
||||
h.push('<div><label><input type="radio" name="screen-size" data-w="0" data-h="0"');
|
||||
if (dlg.rdp_w === 0 && dlg.rdp_h === 0)
|
||||
h.push(' checked');
|
||||
h.push('> 全屏</label></div>');
|
||||
|
||||
for (var i = 0; i < ss.length; ++i) {
|
||||
var _w = ss[i].w;
|
||||
var _h = ss[i].h;
|
||||
h.push('<div><label><input type="radio" name="screen-size" data-w="'+_w+'" data-h="'+_h+'"');
|
||||
if (dlg.rdp_w === _w && dlg.rdp_h === _h)
|
||||
h.push(' checked');
|
||||
h.push('> ' + _w + ' x ' + _h + '</label></div>');
|
||||
}
|
||||
h.push('</div>');
|
||||
dlg.dom.screen_size.html($(h.join('')));
|
||||
|
||||
if(dlg.rdp_console)
|
||||
dlg.dom.console_mode.prop('checked', true);
|
||||
|
||||
cb_stack.exec();
|
||||
};
|
||||
|
||||
dlg.show = function (x, y, uni_id, protocol_type, protocol_sub_type) {
|
||||
if (dlg.timer !== null) {
|
||||
clearTimeout(dlg.timer);
|
||||
dlg.timer = null;
|
||||
}
|
||||
|
||||
dlg.uni_id = uni_id;
|
||||
dlg.protocol_type = protocol_type;
|
||||
dlg.protocol_sub_type = protocol_sub_type;
|
||||
|
||||
var w = dlg.dom.dialog.width();
|
||||
x -= w / 3;
|
||||
y -= 12;
|
||||
dlg.dom.dialog.css({left: x, top: y});
|
||||
dlg.dom.dialog.fadeIn();
|
||||
};
|
||||
|
||||
dlg.hide = function () {
|
||||
dlg.dom.dialog.fadeOut();
|
||||
};
|
||||
|
||||
return dlg;
|
||||
};
|
||||
|
||||
$app.connect_remote = function (uni_id, protocol_type, protocol_sub_type) {
|
||||
|
@ -418,7 +504,10 @@ $app.connect_remote = function (uni_id, protocol_type, protocol_sub_type) {
|
|||
{
|
||||
auth_id: uni_id,
|
||||
protocol_type: protocol_type,
|
||||
protocol_sub_type: protocol_sub_type
|
||||
protocol_sub_type: protocol_sub_type,
|
||||
rdp_width: $app.dlg_rdp_options.rdp_w,
|
||||
rdp_height: $app.dlg_rdp_options.rdp_h,
|
||||
rdp_console: $app.dlg_rdp_options.rdp_console
|
||||
},
|
||||
function () {
|
||||
// func_success
|
||||
|
|
|
@ -104,12 +104,19 @@ $assist.do_teleport = function (args, func_success, func_error) {
|
|||
teleport_port: teleport_port,
|
||||
remote_host_ip: remote_host_ip,
|
||||
// remote_host_port: args.host_port,
|
||||
size: 3, //parseInt(args.size),
|
||||
console: 0, //args.console,
|
||||
// rdp_size: args.rdp_size,
|
||||
// rdp_console: args.rdp_console,
|
||||
session_id: session_id,
|
||||
protocol_type: parseInt(args.protocol_type),
|
||||
protocol_sub_type: parseInt(args.protocol_sub_type)
|
||||
};
|
||||
|
||||
if(args.protocol_type === TP_PROTOCOL_TYPE_RDP) {
|
||||
data.rdp_width = args.rdp_width;
|
||||
data.rdp_height = args.rdp_height;
|
||||
data.rdp_console = args.rdp_console;
|
||||
}
|
||||
|
||||
// console.log('---', data);
|
||||
var args_ = encodeURIComponent(JSON.stringify(data));
|
||||
$.ajax({
|
||||
|
|
|
@ -126,217 +126,6 @@ ul.list {
|
|||
}
|
||||
}
|
||||
|
||||
.remote-action-group {
|
||||
margin-bottom: 3px;
|
||||
height: 28px;
|
||||
//min-width: 390px;
|
||||
|
||||
ul {
|
||||
display: block;
|
||||
height: 28px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
float: left;
|
||||
position: relative;
|
||||
display: block;
|
||||
height: 28px;
|
||||
padding: 4px 5px;
|
||||
|
||||
background-color: #eee;
|
||||
border-top: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
|
||||
&.remote-action-btn {
|
||||
background: none;
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
&.remote-action-input {
|
||||
background: none;
|
||||
padding: 4px 0;
|
||||
|
||||
select {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.remote-action-chk-protocol {
|
||||
width: 86px;
|
||||
}
|
||||
|
||||
&.remote-action-state {
|
||||
//width: 64px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
|
||||
&.state-disabled {
|
||||
background-color: @color-bg-ignore;
|
||||
color: #aaa;
|
||||
text-shadow: -1px -1px 1px #fff;
|
||||
|
||||
& > i.fa {
|
||||
color: #b53a2f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.remote-action-username, &.remote-action-name, &.remote-action-protocol {
|
||||
width: 96px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
&.remote-action-username {
|
||||
font-size: 90%;
|
||||
color: #999;
|
||||
}
|
||||
&.remote-action-name, &.remote-action-protocol, &.remote-action-chk-protocol {
|
||||
color: #000;
|
||||
}
|
||||
&.remote-action-name, &.remote-action-chk-protocol {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&.remote-action-password, &.remote-action-sshkey, &.remote-action-noauth {
|
||||
text-align: center;
|
||||
padding: 4px 8px;
|
||||
width: 45px;
|
||||
}
|
||||
&.remote-action-password {
|
||||
background-color: #e3ffe3;
|
||||
color: #999;
|
||||
}
|
||||
&.remote-action-sshkey {
|
||||
background-color: #fbe9c8;
|
||||
color: #666;
|
||||
}
|
||||
&.remote-action-noauth {
|
||||
background-color: #e0e0e0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.btn {
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
padding: 4px 8px;
|
||||
font-size: 12px;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
padding: 0;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-top: 1px;
|
||||
cursor: pointer;
|
||||
}
|
||||
input[type=checkbox] {
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 3px 5px 0 0;
|
||||
}
|
||||
select {
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-left: 1px solid #ccc;
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
&.remote-action-btn:first-child {
|
||||
border: none;
|
||||
.btn {
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
&.remote-action-btn:last-child {
|
||||
border: none;
|
||||
.btn {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.remote-info-group {
|
||||
margin-bottom: 3px;
|
||||
height: 28px;
|
||||
|
||||
ul {
|
||||
display: inline-block;
|
||||
height: 28px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
float: left;
|
||||
position: relative;
|
||||
display: block;
|
||||
height: 28px;
|
||||
padding: 4px 5px;
|
||||
|
||||
//background-color: #efefef;
|
||||
border-top: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
|
||||
&.remote-action-btn {
|
||||
background: none;
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
&.remote-action-input {
|
||||
background: none;
|
||||
padding: 4px 0;
|
||||
|
||||
select {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
padding: 0;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-top: 1px;
|
||||
cursor: pointer;
|
||||
}
|
||||
select {
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-left: 1px solid #ccc;
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hr.small {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,260 @@
|
|||
@charset "utf-8";
|
||||
|
||||
.remote-action-group {
|
||||
margin-bottom: 3px;
|
||||
height: 28px;
|
||||
|
||||
.btn-group-sm > .btn {
|
||||
margin: 0;
|
||||
padding: 6px 6px;
|
||||
font-size: 12px;
|
||||
height: 28px;
|
||||
min-width: 80px;
|
||||
|
||||
&.dropdown-toggle {
|
||||
min-width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
//& > ul {
|
||||
// display: block;
|
||||
// height: 28px;
|
||||
// margin: 0;
|
||||
// padding: 0;
|
||||
//
|
||||
// & > li {
|
||||
// float: left;
|
||||
// position: relative;
|
||||
// display: block;
|
||||
// height: 28px;
|
||||
// padding: 4px 5px;
|
||||
//
|
||||
// background-color: #eee;
|
||||
// border-top: 1px solid #ccc;
|
||||
// border-right: 1px solid #ccc;
|
||||
// border-bottom: 1px solid #ccc;
|
||||
//
|
||||
// &.remote-action-btn {
|
||||
// background: none;
|
||||
// padding: 0;
|
||||
// border: none;
|
||||
// }
|
||||
//
|
||||
// &.remote-action-input {
|
||||
// background: none;
|
||||
// padding: 4px 0;
|
||||
//
|
||||
// select {
|
||||
// border: none;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// &.remote-action-chk-protocol {
|
||||
// width: 86px;
|
||||
// }
|
||||
//
|
||||
// &.remote-action-state {
|
||||
// //width: 64px;
|
||||
// text-align: center;
|
||||
// white-space: nowrap;
|
||||
//
|
||||
// &.state-disabled {
|
||||
// background-color: @color-bg-ignore;
|
||||
// color: #aaa;
|
||||
// text-shadow: -1px -1px 1px #fff;
|
||||
//
|
||||
// & > i.fa {
|
||||
// color: #b53a2f;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// &.remote-action-username, &.remote-action-name, &.remote-action-protocol {
|
||||
// width: 96px;
|
||||
// text-align: center;
|
||||
// white-space: nowrap;
|
||||
// overflow: hidden;
|
||||
// text-overflow: ellipsis;
|
||||
// }
|
||||
// &.remote-action-username {
|
||||
// font-size: 90%;
|
||||
// color: #999;
|
||||
// }
|
||||
// &.remote-action-name, &.remote-action-protocol, &.remote-action-chk-protocol {
|
||||
// color: #000;
|
||||
// }
|
||||
// &.remote-action-name, &.remote-action-chk-protocol {
|
||||
// font-weight: bold;
|
||||
// }
|
||||
//
|
||||
// &.remote-action-password, &.remote-action-sshkey, &.remote-action-noauth {
|
||||
// text-align: center;
|
||||
// padding: 4px 8px;
|
||||
// width: 45px;
|
||||
// }
|
||||
// &.remote-action-password {
|
||||
// background-color: #e3ffe3;
|
||||
// color: #999;
|
||||
// }
|
||||
// &.remote-action-sshkey {
|
||||
// background-color: #fbe9c8;
|
||||
// color: #666;
|
||||
// }
|
||||
// &.remote-action-noauth {
|
||||
// background-color: #e0e0e0;
|
||||
// color: #666;
|
||||
// }
|
||||
//
|
||||
// & > .btn {
|
||||
// line-height: 1.5;
|
||||
// margin: 0;
|
||||
// padding: 4px 8px;
|
||||
// font-size: 12px;
|
||||
// border-radius: 0;
|
||||
// }
|
||||
//
|
||||
// label {
|
||||
// padding: 0;
|
||||
// display: block;
|
||||
// float: left;
|
||||
// margin-top: 1px;
|
||||
// cursor: pointer;
|
||||
// }
|
||||
// input[type=checkbox] {
|
||||
// display: block;
|
||||
// float: left;
|
||||
// margin: 3px 5px 0 0;
|
||||
// }
|
||||
// select {
|
||||
// margin-top: -3px;
|
||||
// }
|
||||
//
|
||||
// &:first-child {
|
||||
// border-left: 1px solid #ccc;
|
||||
// border-top-left-radius: 4px;
|
||||
// border-bottom-left-radius: 4px;
|
||||
// }
|
||||
//
|
||||
// &.remote-action-btn:first-child {
|
||||
// border: none;
|
||||
// .btn {
|
||||
// border-top-left-radius: 4px;
|
||||
// border-bottom-left-radius: 4px;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// &:last-child {
|
||||
// border-top-right-radius: 4px;
|
||||
// border-bottom-right-radius: 4px;
|
||||
// }
|
||||
//
|
||||
// &.remote-action-btn:last-child {
|
||||
// border: none;
|
||||
// .btn {
|
||||
// border-top-right-radius: 4px;
|
||||
// border-bottom-right-radius: 4px;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
.remote-info-group {
|
||||
margin-bottom: 3px;
|
||||
height: 28px;
|
||||
|
||||
ul {
|
||||
display: inline-block;
|
||||
height: 28px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
float: left;
|
||||
position: relative;
|
||||
display: block;
|
||||
height: 28px;
|
||||
padding: 4px 5px;
|
||||
|
||||
//background-color: #efefef;
|
||||
border-top: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
|
||||
&.remote-action-btn {
|
||||
background: none;
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
&.remote-action-input {
|
||||
background: none;
|
||||
padding: 4px 0;
|
||||
|
||||
select {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
padding: 0;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-top: 1px;
|
||||
cursor: pointer;
|
||||
}
|
||||
select {
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-left: 1px solid #ccc;
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.rdp-options {
|
||||
position: absolute;
|
||||
display: none;
|
||||
left: 10px;
|
||||
top: 30px;
|
||||
border: 1px solid rgba(0, 0, 0, .25);
|
||||
z-index: 9999;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, .2);
|
||||
font-size: 13px;
|
||||
|
||||
hr {
|
||||
margin: 3px 0;
|
||||
}
|
||||
|
||||
.title {
|
||||
background-color: #eee;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
|
||||
.item {
|
||||
width: 100%;
|
||||
padding: 3px 20px;
|
||||
|
||||
.radio, .checkbox {
|
||||
// overwrite bootstrap.
|
||||
margin:0;
|
||||
font-family: @font-family-mono;
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
@import "_color";
|
||||
@import "_base";
|
||||
@import "_overwrite_bootstrap";
|
||||
@import "_role";
|
||||
@import "_table";
|
||||
@import "_overwrite_bootstrap";
|
||||
@import "_remote_action";
|
||||
|
||||
//@menu-admin-bg-color: #930;
|
||||
|
||||
|
|
|
@ -27,23 +27,24 @@
|
|||
<button id="btn-refresh-host" class="btn btn-sm btn-default"><i class="fa fa-rotate-right fa-fw"></i> 刷新列表</button>
|
||||
</div>
|
||||
<div class="table-extend-cell table-extend-cell-right group-actions">
|
||||
## <button id="btn-add-host" class="btn btn-sm btn-primary"><i class="fa fa-plus-circle fa-fw"></i> 添加主机</button>
|
||||
## <button id="btn-add-host" class="btn btn-sm btn-primary"><i class="fa fa-plus-circle fa-fw"></i> 添加主机</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="table-host" class="table table-striped table-bordered table-hover table-data no-footer dtr-inline"></table>
|
||||
|
||||
<div class="table-extend-area">
|
||||
## <div class="table-extend-cell checkbox-select-all"><input id="table-host-select-all" type="checkbox"/></div>
|
||||
## <div class="table-extend-cell group-actions">
|
||||
## <div class="btn-group" role="group">
|
||||
## ## <button id="btn-edit-host" type="button" class="btn btn-default"><i class="fa fa-edit fa-fw"></i> 编辑</button>
|
||||
##
|
||||
## <button id="btn-lock-host" type="button" class="btn btn-default"><i class="fa fa-lock fa-fw"></i> 禁用</button>
|
||||
## <button id="btn-unlock-host" type="button" class="btn btn-default"><i class="fa fa-unlock fa-fw"></i> 解禁</button>
|
||||
## <button id="btn-remove-host" type="button" class="btn btn-default"><i class="fa fa-times-circle fa-fw"></i> 删除</button>
|
||||
## </div>
|
||||
## </div>
|
||||
## <div class="table-extend-cell checkbox-select-all"><input id="table-host-select-all" type="checkbox"/></div>
|
||||
## <div class="table-extend-cell group-actions">
|
||||
## <div class="btn-group" role="group">
|
||||
## ## <button id="btn-edit-host" type="button" class="btn btn-default"><i class="fa fa-edit fa-fw"></i> 编辑</button>
|
||||
##
|
||||
## <button id="btn-lock-host" type="button" class="btn btn-default"><i class="fa fa-lock fa-fw"></i> 禁用</button>
|
||||
## <button id="btn-unlock-host" type="button" class="btn btn-default"><i class="fa fa-unlock fa-fw"></i> 解禁</button>
|
||||
## <button id="btn-remove-host" type="button" class="btn btn-default"><i class="fa fa-times-circle fa-fw"></i> 删除</button>
|
||||
## </div>
|
||||
## </div>
|
||||
|
||||
<div class="table-extend-cell table-item-counter">
|
||||
<ol id="table-host-paging"></ol>
|
||||
</div>
|
||||
|
@ -71,7 +72,45 @@
|
|||
|
||||
|
||||
<%block name="extend_content">
|
||||
<div id="dlg-rdp-options" class="rdp-options">
|
||||
<div class="title">RDP连接选项</div>
|
||||
<div class="item" data-field="screen-size">
|
||||
## 屏幕尺寸:
|
||||
## <select data-field="screen-size">
|
||||
## <option value="0">全屏</option>
|
||||
## <option value="800x600">800x600</option>
|
||||
## <option value="1024x768">1024x768</option>
|
||||
## <option value="1280x1024">1280x1024</option>
|
||||
## <option value="1366x768">1366x768</option>
|
||||
## <option value="1440x900">1440x900</option>
|
||||
## <option value="1600x1024">1600x1024</option>
|
||||
## </select>
|
||||
|
||||
<div class="radio">
|
||||
<div><label><input type="radio" name="screen-size" id="ss-800x600" checked> 800 x 600</label></div>
|
||||
<div><label><input type="radio" name="screen-size" id="ss-1024x768"> 1024 x 768</label></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
## <div class="item"><a href="javascript:;" data-field="allow-clipboard" class="tp-checkbox tp-editable">允许映射剪贴板</a></div>
|
||||
## <div class="item"><a href="javascript:;" class="tp-checkbox tp-editable">允许映射本地磁盘</a></div>
|
||||
|
||||
<hr/>
|
||||
<div class="item">
|
||||
## <a href="javascript:;" data-field="console-mode" class="tp-checkbox tp-editable">Console模式</a>
|
||||
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" data-field="console-mode"> Console模式</label>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="item">
|
||||
<div class="center">
|
||||
<button type="button" data-field="do-rdp-connect" class="btn btn-sm btn-primary"><i class="fa fa-desktop fa-fw"></i> 开始连接</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</%block>
|
||||
|
||||
## <%block name="embed_js">
|
||||
|
|
|
@ -58,8 +58,6 @@ def login(handler, username, password=None, oath_code=None):
|
|||
# syslog.sys_log({'username': username, 'surname': username}, handler.request.remote_ip, TPE_NOT_EXISTS, '用户身份验证失败,用户`{}`不存在'.format(username))
|
||||
return err, None
|
||||
|
||||
print(user_info)
|
||||
|
||||
if user_info.privilege == 0:
|
||||
# 尚未为此用户设置角色
|
||||
return TPE_PRIVILEGE, None
|
||||
|
|
Loading…
Reference in New Issue