10183 lines
312 KiB
JavaScript
10183 lines
312 KiB
JavaScript
var bt = {
|
||
os: 'Linux',
|
||
check_ip: function (
|
||
ip //验证ip
|
||
) {
|
||
var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
|
||
return reg.test(ip);
|
||
},
|
||
check_ips: function (
|
||
ips //验证ip段
|
||
) {
|
||
var reg = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\/\d{1,2})?$/;
|
||
return reg.test(ip);
|
||
},
|
||
check_url: function (
|
||
url //验证url
|
||
) {
|
||
var reg = /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/;
|
||
return reg.test(url);
|
||
},
|
||
check_port: function (port) {
|
||
var reg = /^([1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
|
||
return reg.test(port);
|
||
},
|
||
check_chinese: function (str) {
|
||
var reg = /[\u4e00-\u9fa5]/;
|
||
return reg.test(str);
|
||
},
|
||
check_domain: function (
|
||
domain //验证域名
|
||
) {
|
||
var reg = /^([\w\u4e00-\u9fa5\-\*]{1,100}\.){1,4}([\w\u4e00-\u9fa5\-]{1,24}|[\w\u4e00-\u9fa5\-]{1,24}\.[\w\u4e00-\u9fa5\-]{1,24})$/;
|
||
return reg.test(bt.strim(domain));
|
||
},
|
||
check_img: function (
|
||
fileName //验证是否图片
|
||
) {
|
||
var exts = ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'tiff', 'ico'];
|
||
var check = bt.check_exts(fileName, exts);
|
||
return check;
|
||
},
|
||
check_email: function (email) {
|
||
var reg = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/;
|
||
return reg.test(email);
|
||
},
|
||
check_phone: function (phone) {
|
||
var reg = /^1(3|4|5|6|7|8|9)\d{9}$/;
|
||
return reg.test(phone);
|
||
},
|
||
check_zip: function (fileName) {
|
||
var ext = fileName.split('.');
|
||
var extName = ext[ext.length - 1].toLowerCase();
|
||
if (extName == 'zip') return 0;
|
||
if (extName == 'rar') return 2;
|
||
if (extName == 'gz' || extName == 'tgz') return 1;
|
||
return -1;
|
||
},
|
||
clear_cookie: function (key) {
|
||
this.set_cookie(key, '', new Date());
|
||
},
|
||
check_text: function (fileName) {
|
||
var exts = ['rar', 'zip', 'tar.gz', 'gz', 'iso', 'xsl', 'doc', 'xdoc', 'jpeg', 'jpg', 'png', 'gif', 'bmp', 'tiff', 'exe', 'so', '7z', 'bz'];
|
||
return bt.check_exts(fileName, exts) ? false : true;
|
||
},
|
||
check_exts: function (fileName, exts) {
|
||
var ext = fileName.split('.');
|
||
if (ext.length < 2) return false;
|
||
var extName = ext[ext.length - 1].toLowerCase();
|
||
for (var i = 0; i < exts.length; i++) {
|
||
if (extName == exts[i]) return true;
|
||
}
|
||
return false;
|
||
},
|
||
check_version: function (version, cloud_version) {
|
||
var arr1 = version.split('.'); //
|
||
var arr2 = cloud_version.split('.');
|
||
var leng = arr1.length > arr2.length ? arr1.length : arr2.length;
|
||
while (leng - arr1.length > 0) {
|
||
arr1.push(0);
|
||
}
|
||
while (leng - arr2.length > 0) {
|
||
arr2.push(0);
|
||
}
|
||
for (var i = 0; i < leng; i++) {
|
||
if (i == leng - 1) {
|
||
if (arr1[i] != arr2[i]) return 2; //子版本匹配不上
|
||
} else {
|
||
if (arr1[i] != arr2[i]) return -1; //版本匹配不上
|
||
}
|
||
}
|
||
return 1; //版本正常
|
||
},
|
||
replace_all: function (str, old_data, new_data) {
|
||
var reg_str = '/(' + old_data + '+)/g';
|
||
var reg = eval(reg_str);
|
||
return str.replace(reg, new_data);
|
||
},
|
||
get_file_ext: function (fileName) {
|
||
var text = fileName.split('.');
|
||
var n = text.length - 1;
|
||
text = text[n];
|
||
return text;
|
||
},
|
||
get_file_path: function (filename) {
|
||
var arr = filename.split('/');
|
||
path = filename.replace('/' + arr[arr.length - 1], '');
|
||
return path;
|
||
},
|
||
get_date: function (a) {
|
||
var dd = new Date();
|
||
dd.setTime(dd.getTime() + (a == undefined || isNaN(parseInt(a)) ? 0 : parseInt(a)) * 86400000);
|
||
var y = dd.getFullYear();
|
||
var m = dd.getMonth() + 1;
|
||
var d = dd.getDate();
|
||
return y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d);
|
||
},
|
||
get_form: function (select) {
|
||
var sarr = $(select).serializeArray();
|
||
var iarr = {};
|
||
for (var i = 0; i < sarr.length; i++) {
|
||
iarr[sarr[i].name] = sarr[i].value;
|
||
}
|
||
return iarr;
|
||
},
|
||
ltrim: function (str, r) {
|
||
var reg_str = '/(^\\' + r + '+)/g';
|
||
var reg = eval(reg_str);
|
||
str = str.replace(reg, '');
|
||
return str;
|
||
},
|
||
rtrim: function (str, r) {
|
||
var reg_str = '/(\\' + r + '+$)/g';
|
||
var reg = eval(reg_str);
|
||
str = str.replace(reg, '');
|
||
return str;
|
||
},
|
||
strim: function (str) {
|
||
var reg_str = '/ /g';
|
||
var reg = eval(reg_str);
|
||
str = str.replace(reg, '');
|
||
return str;
|
||
},
|
||
contains: function (str, substr) {
|
||
if (str) {
|
||
return str.indexOf(substr) >= 0;
|
||
}
|
||
return false;
|
||
},
|
||
format_size: function (
|
||
bytes,
|
||
is_unit,
|
||
fixed,
|
||
end_unit //字节转换,到指定单位结束 is_unit:是否显示单位 fixed:小数点位置 end_unit:结束单位
|
||
) {
|
||
if (bytes == undefined) return 0;
|
||
|
||
if (is_unit == undefined) is_unit = true;
|
||
if (fixed == undefined) fixed = 2;
|
||
if (end_unit == undefined) end_unit = '';
|
||
|
||
if (typeof bytes == 'string') bytes = parseInt(bytes);
|
||
var unit = [' B', ' KB', ' MB', ' GB', 'TB'];
|
||
var c = 1024;
|
||
for (var i = 0; i < unit.length; i++) {
|
||
var cUnit = unit[i];
|
||
if (end_unit) {
|
||
if (cUnit.trim() == end_unit.trim()) {
|
||
var val = i == 0 ? bytes : fixed == 0 ? bytes : bytes.toFixed(fixed);
|
||
if (is_unit) {
|
||
return val + cUnit;
|
||
} else {
|
||
val = parseFloat(val);
|
||
return val;
|
||
}
|
||
}
|
||
} else {
|
||
if (bytes < c) {
|
||
var val = i == 0 ? bytes : fixed == 0 ? bytes : bytes.toFixed(fixed);
|
||
if (is_unit) {
|
||
return val + cUnit;
|
||
} else {
|
||
val = parseFloat(val);
|
||
return val;
|
||
}
|
||
}
|
||
}
|
||
|
||
bytes /= c;
|
||
}
|
||
},
|
||
format_data: function (tm, format) {
|
||
if (format == undefined) format = 'yyyy/MM/dd hh:mm:ss';
|
||
tm = tm.toString();
|
||
if (tm.length > 10) {
|
||
tm = tm.substring(0, 10);
|
||
}
|
||
var data = new Date(parseInt(tm) * 1000);
|
||
var o = {
|
||
'M+': data.getMonth() + 1, //month
|
||
'd+': data.getDate(), //day
|
||
'h+': data.getHours(), //hour
|
||
'm+': data.getMinutes(), //minute
|
||
's+': data.getSeconds(), //second
|
||
'q+': Math.floor((data.getMonth() + 3) / 3), //quarter
|
||
S: data.getMilliseconds(), //millisecond
|
||
};
|
||
if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (data.getFullYear() + '').substr(4 - RegExp.$1.length));
|
||
for (var k in o) if (new RegExp('(' + k + ')').test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
|
||
|
||
return format;
|
||
},
|
||
format_path: function (path) {
|
||
var reg = /(\\)/g;
|
||
path = path.replace(reg, '/');
|
||
return path;
|
||
},
|
||
get_random: function (len) {
|
||
len = len || 32;
|
||
var $chars = 'AaBbCcDdEeFfGHhiJjKkLMmNnPpRSrTsWtXwYxZyz2345678'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1
|
||
var maxPos = $chars.length;
|
||
var pwd = '';
|
||
for (i = 0; i < len; i++) {
|
||
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
|
||
}
|
||
return pwd;
|
||
},
|
||
refresh_pwd: function (length, obj) {
|
||
if (obj == undefined) obj = 'MyPassword';
|
||
var _input = $('#' + obj);
|
||
if (_input.length > 0) {
|
||
_input.val(bt.get_random(length));
|
||
} else {
|
||
$('.' + obj).val(bt.get_random(length));
|
||
}
|
||
},
|
||
get_random_num: function (
|
||
min,
|
||
max //生成随机数
|
||
) {
|
||
var range = max - min;
|
||
var rand = Math.random();
|
||
var num = min + Math.round(rand * range); //四舍五入
|
||
return num;
|
||
},
|
||
|
||
/**
|
||
* 生成计算数字(加强计算,用于删除重要数据二次确认)
|
||
* */
|
||
get_random_code: function () {
|
||
var flist = [20, 21, 22, 23];
|
||
|
||
var num1 = bt.get_random_num(13, 19);
|
||
var t1 = num1 % 10;
|
||
|
||
var num2 = bt.get_random_num(13, 29);
|
||
var t2 = num2 % 10;
|
||
|
||
while ($.inArray(num2, flist) >= 0 || t1 + t2 <= 10 || t1 == t2) {
|
||
num2 = bt.get_random_num(13, 29);
|
||
t2 = num2 % 10;
|
||
}
|
||
return { num1: num1, num2: num2 };
|
||
},
|
||
/**
|
||
* @description 设置本地存储,local和session
|
||
* @param {String} type 存储类型,可以为空,默认为session类型。
|
||
* @param {String} key 存储键名
|
||
* @param {String} val 存储键值
|
||
* @return 无返回值
|
||
*/
|
||
set_storage: function (type, key, val) {
|
||
if (type != 'local' && type != 'session') (val = key), (key = type), (type = 'local');
|
||
window[type + 'Storage'].setItem(key, val);
|
||
},
|
||
|
||
/**
|
||
* @description 获取本地存储,local和session
|
||
* @param {String} type 存储类型,可以为空,默认为session类型。
|
||
* @param {String} key 存储键名
|
||
* @return {String} 返回存储键值
|
||
*/
|
||
get_storage: function (type, key) {
|
||
if (type != 'local' && type != 'session') (key = type), (type = 'local');
|
||
return window[type + 'Storage'].getItem(key);
|
||
},
|
||
|
||
/**
|
||
* @description 删除指定本地存储,local和session
|
||
* @param {String} type 类型,可以为空,默认为session类型。
|
||
* @param {String} key 键名
|
||
* @return 无返回值
|
||
*/
|
||
remove_storage: function (type, key) {
|
||
if (type != 'local' && type != 'session') (key = type), (type = 'local');
|
||
window[type + 'Storage'].removeItem(key);
|
||
},
|
||
|
||
/**
|
||
* @description 删除指定类型的所有存储信息储,local和session
|
||
* @param {String} type 类型,可以为空,默认为session类型。
|
||
* @return 无返回值
|
||
*/
|
||
clear_storage: function (type) {
|
||
if (type != 'local' && type != 'session') (key = type), (type = 'local');
|
||
window[type + 'Storage'].clear();
|
||
},
|
||
set_cookie: function (key, val, time) {
|
||
if (time != undefined) {
|
||
var exp = new Date();
|
||
exp.setTime(exp.getTime() + time);
|
||
time = exp.toGMTString();
|
||
} else {
|
||
var Days = 30;
|
||
var exp = new Date();
|
||
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
|
||
time = exp.toGMTString();
|
||
}
|
||
document.cookie = key + '=' + escape(val) + ';expires=' + time;
|
||
},
|
||
get_cookie: function (key) {
|
||
var arr,
|
||
reg = new RegExp('(^| )' + key + '=([^;]*)(;|$)');
|
||
if ((arr = document.cookie.match(reg))) {
|
||
var val = unescape(arr[2]);
|
||
return val == 'undefined' ? '' : val;
|
||
} else {
|
||
return null;
|
||
}
|
||
},
|
||
/**
|
||
* @description 选择文件目录或文件
|
||
* @param id {string} 元素ID
|
||
* @param type {string || function} 选择方式,文件或目录
|
||
* @param success {function} 成功后的回调
|
||
*/
|
||
select_path: function (id, type, success, default_path) {
|
||
_this = this;
|
||
_this.set_cookie('SetName', '');
|
||
if (typeof type !== 'string') {
|
||
success = type;
|
||
type = 'dir';
|
||
}
|
||
var loadT = bt.open({
|
||
type: 1,
|
||
area: '680px',
|
||
title: type === 'all' ? 'Select directories or files' : type === 'file' ? lan.bt.file : lan.bt.dir,
|
||
closeBtn: 2,
|
||
shift: 5,
|
||
content:
|
||
"<div class='changepath'><div class='path-top'><button type='button' id='btn_back' class='btn btn-default btn-sm'><span class='glyphicon glyphicon-share-alt'></span> " +
|
||
lan.public.return +
|
||
"</button><div class='place' id='PathPlace'>" +
|
||
lan.bt.path +
|
||
":<span title=''></span></div>" +
|
||
"<input type='text' style='width: 140px;' class='bt-input-text' name='search' id='search' placeholder='Enter Search File/Dir'></input>" +
|
||
"</div><div class='path-con'><div class='path-con-left'><dl><dt id='changecomlist' >" +
|
||
lan.bt.comp +
|
||
"</dt></dl></div><div class='path-con-right'><ul class='default' id='computerDefautl'></ul><div class='file-list divtable'><table id='file-list-table' class='table table-hover' style='border:0 none'><thead><tr class='file-list-head'><th width='5%'></th><th width='38%'>" +
|
||
lan.bt.filename +
|
||
"</th><th width='24%'>" +
|
||
lan.bt.etime +
|
||
"</th><th width='8%'>" +
|
||
lan.bt.access +
|
||
"</th><th width='15%'>" +
|
||
lan.bt.own +
|
||
"</th></tr></thead><tbody id='tbody' class='list-list'></tbody></table></div></div></div></div><div class='getfile-btn' style='margin-top:0'><button type='button' class='btn btn-default btn-sm pull-left' onclick='CreateFolder()'>" +
|
||
lan.bt.adddir +
|
||
"</button><button type='button' class='btn btn-danger btn-sm mr5' onclick=\"layer.close(getCookie('ChangePath'))\">" +
|
||
lan.public.close +
|
||
"</button> <button type='button' id='bt_select' class='btn btn-success btn-sm' >" +
|
||
lan.bt.path_ok +
|
||
'</button></div>',
|
||
success: function () {
|
||
$('#btn_back').click(function () {
|
||
var path = $('#PathPlace').find('span').text();
|
||
path = bt.rtrim(bt.format_path(path), '/');
|
||
var back_path = bt.get_file_path(path);
|
||
_this.get_file_list(back_path, type);
|
||
});
|
||
//选择
|
||
$('#bt_select').on('click', function () {
|
||
var path = bt.format_path($('#PathPlace').find('span').text());
|
||
if (type === 'file' && !$('#tbody tr.active').length) {
|
||
layer.msg('Select the file first!', { icon: 0 });
|
||
return false;
|
||
}
|
||
if ($('#tbody tr').hasClass('active')) {
|
||
path = $('#tbody tr.active .bt_open_dir').attr('path');
|
||
}
|
||
path = bt.rtrim(path, '/');
|
||
if (path.length === 0) {
|
||
path = [$('#PathPlace').find('span').text()];
|
||
}
|
||
$('#' + id)
|
||
.val(path)
|
||
.change();
|
||
$('.' + id)
|
||
.val(path)
|
||
.change();
|
||
if (typeof success === 'function') success(path);
|
||
loadT.close();
|
||
});
|
||
var element = $('#' + id),
|
||
paths = element.val(),
|
||
defaultPath = $('#defaultPath');
|
||
if (defaultPath.length > 0 && element.parents('.tab-body').length > 0) {
|
||
paths = defaultPath.text();
|
||
}
|
||
if (default_path) {
|
||
paths = default_path;
|
||
}
|
||
_this.get_file_list(paths, type);
|
||
bt.fixed_table('file-list-table');
|
||
$('#search').keyup(function (e) {
|
||
if (e.keyCode == 13) {
|
||
var path = $('#PathPlace').find('span').text();
|
||
_this.get_file_list(path, type);
|
||
}
|
||
});
|
||
},
|
||
});
|
||
_this.set_cookie('ChangePath', loadT.form);
|
||
// var paths = $("#" + id).val();
|
||
// if ($('#defaultPath').length > 0 && $("#" + id).parents('.tab-body').length > 0) {
|
||
// paths = $('#defaultPath').text();
|
||
// }
|
||
// _this.get_file_list(paths, type);
|
||
|
||
// function ActiveDisk() {
|
||
// var a = $("#PathPlace").find("span").text().substring(0, 1);
|
||
// switch (a) {
|
||
// case "C":
|
||
// $(".path-con-left dd:nth-of-type(1)").css("background", "#eee").siblings().removeAttr("style");
|
||
// break;
|
||
// case "D":
|
||
// $(".path-con-left dd:nth-of-type(2)").css("background", "#eee").siblings().removeAttr("style");
|
||
// break;
|
||
// case "E":
|
||
// $(".path-con-left dd:nth-of-type(3)").css("background", "#eee").siblings().removeAttr("style");
|
||
// break;
|
||
// case "F":
|
||
// $(".path-con-left dd:nth-of-type(4)").css("background", "#eee").siblings().removeAttr("style");
|
||
// break;
|
||
// case "G":
|
||
// $(".path-con-left dd:nth-of-type(5)").css("background", "#eee").siblings().removeAttr("style");
|
||
// break;
|
||
// case "H":
|
||
// $(".path-con-left dd:nth-of-type(6)").css("background", "#eee").siblings().removeAttr("style");
|
||
// break;
|
||
// default:
|
||
// $(".path-con-left dd").removeAttr("style")
|
||
// }
|
||
// }
|
||
},
|
||
get_file_list: function (path, type) {
|
||
type = type || 'dir';
|
||
var _that = this;
|
||
var search = $('#search').val();
|
||
bt.send('GetDir', 'files/GetDir', { path: path, disk: true, search: search }, function (rdata) {
|
||
var d = '',
|
||
a = '',
|
||
disk = rdata.DISK;
|
||
if (disk != undefined) {
|
||
for (var f = 0; f < disk.length; f++) {
|
||
a +=
|
||
'<dd class="bt_open_dir size_ellipsis" title=\'' +
|
||
disk[f].path +
|
||
'\' path ="' +
|
||
disk[f].path +
|
||
"\"><span class='glyphicon glyphicon-hdd'></span><span class='text'>" +
|
||
disk[f].path +
|
||
'</span></dd>';
|
||
}
|
||
$('#changecomlist').html(a);
|
||
}
|
||
for (var f = 0; f < rdata.DIR.length; f++) {
|
||
var g = rdata.DIR[f].split(';');
|
||
var e = g[0];
|
||
if (e.length > 20) {
|
||
e = e.substring(0, 20) + '...';
|
||
}
|
||
if (isChineseChar(e)) {
|
||
if (e.length > 10) {
|
||
e = e.substring(0, 10) + '...';
|
||
}
|
||
}
|
||
d +=
|
||
'<tr><td>' +
|
||
(type === 'all' || type === 'dir' ? '<input type="checkbox" />' : '') +
|
||
'</td><td class="bt_open_dir" path ="' +
|
||
rdata.PATH +
|
||
'/' +
|
||
g[0] +
|
||
'" data-type="dir" title=\'' +
|
||
g[0] +
|
||
"'><span class='glyphicon glyphicon-folder-open'></span><span>" +
|
||
e +
|
||
'</span></td><td>' +
|
||
bt.format_data(g[2]) +
|
||
'</td><td>' +
|
||
g[3] +
|
||
'</td><td>' +
|
||
g[4] +
|
||
'</td></tr>';
|
||
}
|
||
|
||
if (rdata.FILES != null && rdata.FILES != '') {
|
||
for (var f = 0; f < rdata.FILES.length; f++) {
|
||
var g = rdata.FILES[f].split(';');
|
||
var e = g[0];
|
||
if (e.length > 20) {
|
||
e = e.substring(0, 20) + '...';
|
||
}
|
||
if (isChineseChar(e)) {
|
||
if (e.length > 10) {
|
||
e = e.substring(0, 10) + '...';
|
||
}
|
||
}
|
||
d +=
|
||
'<tr><td>' +
|
||
(type === 'all' || type === 'file' ? '<input type="checkbox" />' : '') +
|
||
'<td class="bt_open_dir" title=\'' +
|
||
g[0] +
|
||
'\' data-type="files" path ="' +
|
||
rdata.PATH +
|
||
'/' +
|
||
g[0] +
|
||
"\"><span class='glyphicon glyphicon-file'></span><span>" +
|
||
e +
|
||
'</span></td><td>' +
|
||
bt.format_data(g[2]) +
|
||
'</td><td>' +
|
||
g[3] +
|
||
'</td><td>' +
|
||
g[4] +
|
||
'</td></tr>';
|
||
}
|
||
}
|
||
|
||
$('.default').hide();
|
||
$('.file-list').show();
|
||
$('#tbody').html(d);
|
||
if (rdata.PATH.substr(rdata.PATH.length - 1, 1) != '/') {
|
||
rdata.PATH += '/';
|
||
}
|
||
$('#PathPlace').find('span').html(rdata.PATH).attr('title', rdata.PATH);
|
||
$('#tbody tr').click(function () {
|
||
if ($(this).find('td:eq(0) input').length > 0) {
|
||
if ($(this).hasClass('active')) {
|
||
$(this).removeClass('active');
|
||
$(this).find('td:eq(0) input').prop('checked', false);
|
||
} else {
|
||
$(this).find('td:eq(0) input').prop('checked', true);
|
||
$(this).siblings().find('td:eq(0) input').prop('checked', false);
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
}
|
||
}
|
||
});
|
||
$('#changecomlist dd').click(function () {
|
||
_that.get_file_list($(this).attr('path'), type);
|
||
});
|
||
$('.bt_open_dir span').click(function () {
|
||
if ($(this).parent().data('type') == 'dir') _that.get_file_list($(this).parent().attr('path'), type);
|
||
});
|
||
});
|
||
},
|
||
prompt_confirm: function (title, msg, callback) {
|
||
layer.open({
|
||
type: 1,
|
||
title: title,
|
||
area: '480px',
|
||
closeBtn: 2,
|
||
btn: ['OK', 'Cancel'],
|
||
content:
|
||
"<div class='bt-form promptDelete pd20'>\
|
||
<p>" +
|
||
msg +
|
||
"</p>\
|
||
<div class='confirm-info-box'>\
|
||
<input onpaste='return false;' id='prompt_input_box' type='text' value=''>\
|
||
<div class='placeholder c9 prompt_input_tips' >If you confirm the operation, enter it manually '<font style='color: red'>" +
|
||
title +
|
||
"</font>'</div>\
|
||
<div style='margin-top:5px;display: none;' class='prompt_input_ps'>The verification code is incorrect. Please enter it manually '<font style='color: red'>" +
|
||
title +
|
||
"</font>'</div></div>\
|
||
</div>",
|
||
success: function () {
|
||
var black_txt_ = $('#prompt_input_box');
|
||
|
||
$('.placeholder').click(function () {
|
||
$(this).hide().siblings('input').focus();
|
||
});
|
||
black_txt_.focus(function () {
|
||
$('.prompt_input_tips.placeholder').hide();
|
||
});
|
||
black_txt_.blur(function () {
|
||
black_txt_.val() == '' ? $('.prompt_input_tips.placeholder').show() : $('.prompt_input_tips.placeholder').hide();
|
||
});
|
||
black_txt_.keyup(function () {
|
||
if (black_txt_.val() == '') {
|
||
$('.prompt_input_tips.placeholder').show();
|
||
$('.prompt_input_ps').hide();
|
||
} else {
|
||
$('.prompt_input_tips.placeholder').hide();
|
||
}
|
||
});
|
||
},
|
||
yes: function (layers, index) {
|
||
var result = $('#prompt_input_box').val().trim();
|
||
if (result == title) {
|
||
layer.close(layers);
|
||
if (callback) callback();
|
||
} else {
|
||
$('.prompt_input_ps').show();
|
||
}
|
||
},
|
||
});
|
||
},
|
||
show_confirm: function (title, msg, fun, error) {
|
||
if (error == undefined) {
|
||
error = '';
|
||
}
|
||
var d = Math.round(Math.random() * 9 + 1);
|
||
var c = Math.round(Math.random() * 9 + 1);
|
||
var e = '';
|
||
e = d + c;
|
||
sumtext = d + ' + ' + c;
|
||
bt.set_cookie('vcodesum', e);
|
||
var mess = layer.open({
|
||
type: 1,
|
||
title: title,
|
||
area: '350px',
|
||
closeBtn: 2,
|
||
shadeClose: true,
|
||
content:
|
||
"<div class='bt-form webDelete pd20 pb70'><p>" +
|
||
msg +
|
||
'</p>' +
|
||
error +
|
||
"<div class='vcode'>" +
|
||
lan.bt.cal_msg +
|
||
"<span class='text'>" +
|
||
sumtext +
|
||
"</span>=<input type='number' id='vcodeResult' value=''></div><div class='bt-form-submit-btn'><button type='button' class='btn btn-danger btn-sm bt-cancel'>" +
|
||
lan.public.cancel +
|
||
"</button> <button type='button' id='toSubmit' class='btn btn-success btn-sm' >" +
|
||
lan.public.ok +
|
||
'</button></div></div>',
|
||
success: function ($layer) {
|
||
$('#vcodeResult')
|
||
.focus()
|
||
.keyup(function (a) {
|
||
if (a.keyCode == 13) {
|
||
$('#toSubmit').click();
|
||
}
|
||
});
|
||
},
|
||
});
|
||
|
||
$('.bt-cancel').click(function () {
|
||
layer.close(mess);
|
||
});
|
||
$('#toSubmit').click(function () {
|
||
var a = $('#vcodeResult').val().replace(/ /g, '');
|
||
if (a == undefined || a == '') {
|
||
layer.msg(lan.bt.cal_err);
|
||
return;
|
||
}
|
||
if (a != bt.get_cookie('vcodesum')) {
|
||
layer.msg(lan.bt.cal_err);
|
||
return;
|
||
}
|
||
layer.close(mess);
|
||
fun();
|
||
});
|
||
},
|
||
/**
|
||
* @description 计算提示弹窗
|
||
* @param {Object} config 弹窗对象 {title: 提示标题, msg: 提示内容}
|
||
* @param {function} callback 回调函数
|
||
*/
|
||
compute_confirm: function (config, callback) {
|
||
var d = Math.round(Math.random() * 9 + 1),
|
||
c = Math.round(Math.random() * 9 + 1),
|
||
t = d + ' + ' + c,
|
||
e = d + c;
|
||
|
||
function submit(index, layero) {
|
||
var a = $('#vcodeResult'),
|
||
val = a.val().replace(/ /g, '');
|
||
if (val == undefined || val == '') {
|
||
layer.msg(lan.bt.cal_err);
|
||
return;
|
||
}
|
||
if (val != a.data('value')) {
|
||
layer.msg(lan.bt.cal_err);
|
||
return;
|
||
}
|
||
layer.close(index);
|
||
if (callback) callback();
|
||
}
|
||
layer.open({
|
||
type: 1,
|
||
title: config.title,
|
||
area: '430px',
|
||
closeBtn: 2,
|
||
shadeClose: true,
|
||
btn: [lan['public'].ok, lan['public'].cancel],
|
||
content:
|
||
'<div class="bt-form hint_confirm pd30">\
|
||
<div class="hint_title">\
|
||
<i class="hint-confirm-icon"></i>\
|
||
<div class="hint_con">' +
|
||
config.msg +
|
||
'</div>\
|
||
</div>\
|
||
<div class="vcode">Result:<span class="text">' +
|
||
t +
|
||
'</span>=<input type="number" id="vcodeResult" data-value="' +
|
||
e +
|
||
'" value=""></div>\
|
||
</div>',
|
||
success: function (layero, index) {
|
||
$('#vcodeResult')
|
||
.focus()
|
||
.keyup(function (a) {
|
||
if (a.keyCode == 13) {
|
||
submit(index, layero);
|
||
}
|
||
});
|
||
},
|
||
yes: submit,
|
||
});
|
||
},
|
||
to_login: function () {
|
||
layer.confirm(lan.public_backup.login_expire, { title: lan.public_backup.session_expire, icon: 2, closeBtn: 1, shift: 5 }, function () {
|
||
location.reload();
|
||
});
|
||
},
|
||
do_login: function () {
|
||
bt.confirm({ msg: lan.bt.loginout }, function () {
|
||
window.location.href = '/login?dologin=True';
|
||
});
|
||
},
|
||
send: function (response, module, data, callback, sType) {
|
||
if (sType == undefined) sType = 1;
|
||
|
||
module = module.replace('panel_data', 'data');
|
||
sType = 1;
|
||
var str = bt.get_random(16);
|
||
console.time(str);
|
||
if (!response) alert(lan.get('lack_param', ['response']));
|
||
modelTmp = module.split('/');
|
||
if (modelTmp.length < 2) alert(lan.get('lack_param', ['s_module', 'action']));
|
||
if (bt.os == 'Linux' && sType === 0) {
|
||
socket.on(response, function (rdata) {
|
||
socket.removeAllListeners(response);
|
||
var rRet = rdata.data;
|
||
if (rRet.status === -1) {
|
||
bt.to_login();
|
||
return;
|
||
}
|
||
console.timeEnd(str);
|
||
if (callback) callback(rRet);
|
||
});
|
||
if (!data) data = {};
|
||
data = bt.linux_format_param(data);
|
||
data['s_response'] = response;
|
||
data['s_module'] = modelTmp[0];
|
||
data['action'] = modelTmp[1];
|
||
socket.emit('panel', data);
|
||
} else {
|
||
data = bt.win_format_param(data);
|
||
var url = '/' + modelTmp[0] + '?action=' + modelTmp[1];
|
||
$.post(url, data, function (rdata) {
|
||
//会话失效时自动跳转到登录页面
|
||
if (typeof rdata == 'string') {
|
||
if ((rdata.indexOf('/static/favicon.ico') != -1 && rdata.indexOf('/static/img/qrCode.png') != -1) || rdata.indexOf('<!DOCTYPE html>') === 0) {
|
||
window.location.href = '/login';
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
linux_format_param: function (param) {
|
||
if (typeof param == 'string') {
|
||
var data = {};
|
||
arr = param.split('&');
|
||
var reg = /(^[^=]*)=(.*)/;
|
||
for (var i = 0; i < arr.length; i++) {
|
||
var tmp = arr[i].match(reg);
|
||
if (tmp.length >= 3) data[tmp[1]] = tmp[2] == 'undefined' ? '' : tmp[2];
|
||
}
|
||
return data;
|
||
}
|
||
return param;
|
||
},
|
||
win_format_param: function (param) {
|
||
if (typeof data == 'object') {
|
||
var data = '';
|
||
for (var key in param) {
|
||
data += key + '=' + param[key] + '&';
|
||
}
|
||
if (data.length > 0) data = data.substr(0, data.length - 1);
|
||
return data;
|
||
}
|
||
return param;
|
||
},
|
||
msg: function (config) {
|
||
var btnObj = {
|
||
title: config.title ? config.title : false,
|
||
shadeClose: config.shadeClose ? config.shadeClose : true,
|
||
closeBtn: config.closeBtn ? config.closeBtn : 0,
|
||
area: config.area ? config.area : 'auto',
|
||
scrollbar: true,
|
||
shade: 0.3,
|
||
};
|
||
if (!config.hasOwnProperty('time')) config.time = 2000;
|
||
if (typeof config.msg == 'string' && bt.contains(config.msg, 'ERROR')) config.time = 0;
|
||
|
||
if (config.hasOwnProperty('icon')) {
|
||
if (typeof config.icon == 'boolean') config.icon = config.icon ? 1 : 2;
|
||
} else if (config.hasOwnProperty('status')) {
|
||
config.icon = config.status ? 1 : 2;
|
||
if (!config.status) {
|
||
btnObj.time = 0;
|
||
}
|
||
}
|
||
if (config.icon) btnObj.icon = config.icon;
|
||
btnObj.time = config.time;
|
||
var msg = '';
|
||
if (config.msg) msg += config.msg;
|
||
if (config.msg_error) msg += config.msg_error;
|
||
if (config.msg_solve) msg += config.msg_solve;
|
||
|
||
layer.msg(msg, btnObj);
|
||
},
|
||
confirm: function (config, callback, callback1) {
|
||
var btnObj = {
|
||
title: config.title ? config.title : false,
|
||
time: config.time ? config.time : 0,
|
||
shadeClose: config.shadeClose ? config.shadeClose : true,
|
||
closeBtn: config.closeBtn ? config.closeBtn : 2,
|
||
scrollbar: true,
|
||
shade: 0.3,
|
||
icon: 3,
|
||
area: config.area ? config.area : 'auto',
|
||
cancel: config.cancel ? config.cancel : function () { },
|
||
};
|
||
layer.confirm(
|
||
config.msg,
|
||
btnObj,
|
||
function (index) {
|
||
if (callback) callback(index);
|
||
},
|
||
function (index) {
|
||
if (callback1) callback1(index);
|
||
}
|
||
);
|
||
},
|
||
load: function (msg) {
|
||
if (!msg) msg = lan.public.the;
|
||
var loadT = layer.msg(msg, { icon: 16, time: 0, shade: [0.3, '#000'] });
|
||
var load = {
|
||
form: loadT,
|
||
close: function () {
|
||
layer.close(load.form);
|
||
},
|
||
};
|
||
return load;
|
||
},
|
||
open: function (config) {
|
||
config.closeBtn = 2;
|
||
var loadT = layer.open(config);
|
||
var load = {
|
||
form: loadT,
|
||
close: function () {
|
||
layer.close(load.form);
|
||
},
|
||
};
|
||
return load;
|
||
},
|
||
closeAll: function () {
|
||
layer.closeAll();
|
||
},
|
||
check_select: function () {
|
||
setTimeout(function () {
|
||
var num = $('input[type="checkbox"].check:checked').length;
|
||
if (num == 1) {
|
||
$('button[batch="true"]').hide();
|
||
$('button[batch="false"]').show();
|
||
} else if (num > 1) {
|
||
$('button[batch="true"]').show();
|
||
$('button[batch="false"]').show();
|
||
} else {
|
||
$('button[batch="true"]').hide();
|
||
$('button[batch="false"]').hide();
|
||
}
|
||
}, 5);
|
||
},
|
||
render_help: function (arr) {
|
||
var html = '<ul class="help-info-text c7">';
|
||
for (var i = 0; i < arr.length; i++) {
|
||
html += '<li>' + arr[i] + '</li>';
|
||
}
|
||
html += '</ul>';
|
||
return html;
|
||
},
|
||
render_ps: function (item) {
|
||
var html = "<p class='p1'>" + item.title + '</p>';
|
||
for (var i = 0; i < item.list.length; i++) {
|
||
html += '<p><span>' + item.list[i].title + ':</span><strong>' + item.list[i].val + '</strong></p>';
|
||
}
|
||
html += '<p style="margin-bottom: 19px; margin-top: 11px; color: #666"></p>';
|
||
return html;
|
||
},
|
||
render_table: function (obj, arr, append) {
|
||
//渲染表单表格
|
||
var html = '';
|
||
for (var key in arr) {
|
||
html += '<tr><th>' + key + '</th>';
|
||
if (typeof arr[key] != 'object') {
|
||
html += '<td>' + arr[key] + '</td>';
|
||
} else {
|
||
for (var i = 0; i < arr[key].length; i++) {
|
||
html += '<td>' + arr[key][i] + '</td>';
|
||
}
|
||
}
|
||
html += '</tr>';
|
||
}
|
||
if (append) {
|
||
$('#' + obj).append(html);
|
||
} else {
|
||
$('#' + obj).html(html);
|
||
}
|
||
},
|
||
|
||
fixed_table: function (name) {
|
||
$('#' + name)
|
||
.parent()
|
||
.bind('scroll', function () {
|
||
var scrollTop = this.scrollTop;
|
||
$(this)
|
||
.find('thead')
|
||
.css({ transform: 'translateY(' + scrollTop + 'px)', position: 'relative', 'z-index': '1' });
|
||
});
|
||
},
|
||
render_tab: function (obj, arr) {
|
||
var _obj = $('#' + obj).addClass('tab-nav');
|
||
for (var i = 0; i < arr.length; i++) {
|
||
var item = arr[i];
|
||
var _tab = $('<span ' + (item.on ? 'class="on"' : '') + '>' + item.title + '</span>');
|
||
if (item.callback) {
|
||
_tab.data('callback', item.callback);
|
||
_tab.click(function () {
|
||
$('#' + obj)
|
||
.find('span')
|
||
.removeClass('on');
|
||
$(this).addClass('on');
|
||
var _contents = $('#' + obj).next('.tab-con');
|
||
_contents.html('');
|
||
$(this).data('callback')(_contents);
|
||
});
|
||
}
|
||
_obj.append(_tab);
|
||
}
|
||
},
|
||
render_form_line: function (item, bs, form) {
|
||
var clicks = [],
|
||
_html = '',
|
||
_hide = '',
|
||
is_title_css = ' ml0';
|
||
if (!bs) bs = '';
|
||
if (item.title) {
|
||
_html += '<span class="tname">' + item.title + '</span>';
|
||
is_title_css = '';
|
||
}
|
||
_html += "<div class='info-r " + item.class + ' ' + is_title_css + (item.hide ? 'hide' : '') + "'>";
|
||
|
||
var _name = item.name;
|
||
var _placeholder = item.placeholder;
|
||
if (item.items && item.type != 'select') {
|
||
for (var x = 0; x < item.items.length; x++) {
|
||
var _obj = item.items[x];
|
||
if (!_name && !_obj.name) {
|
||
alert(lan.public_backup.name_err);
|
||
return;
|
||
}
|
||
if (_obj.hide) continue;
|
||
if (_obj.name) _name = _obj.name;
|
||
if (_obj.placeholder) _placeholder = _obj.placeholder;
|
||
if (_obj.title) _html += '<div class="inlineBlock mr5"><span class=" mr5">' + _obj.title + '</span> ';
|
||
var _add_class = _obj.add_class ? ' ' + _obj.add_class : '';
|
||
switch (_obj.type) {
|
||
case 'select':
|
||
var _width = _obj.width ? _obj.width : '100px';
|
||
_html += '<select ' + (_obj.disabled ? 'disabled' : '') + ' class="bt-input-text mr5 ' + _name + bs + _add_class + '" name="' + _name + '" style="width:' + _width + '">';
|
||
for (var j = 0; j < _obj.items.length; j++) {
|
||
_html += '<option ' + (_obj.value == _obj.items[j].value ? 'selected' : '') + ' value="' + _obj.items[j].value + '">' + _obj.items[j].title + '</option>';
|
||
}
|
||
_html += '</select>';
|
||
break;
|
||
case 'textarea':
|
||
var _width = _obj.width ? _obj.width : '330px',
|
||
_height = _obj.height ? _obj.height : '100px';
|
||
_html +=
|
||
'<textarea class="bt-input-text mr20 ' +
|
||
_name +
|
||
bs +
|
||
_add_class +
|
||
'" name="' +
|
||
_name +
|
||
'" style="width:' +
|
||
_width +
|
||
';height:' +
|
||
_height +
|
||
';line-height:22px">' +
|
||
(_obj.value ? _obj.value : '') +
|
||
'</textarea>';
|
||
if (_placeholder) _html += '<div class="placeholder c9" style="top: 12px; left: 14px; display: block;">' + _placeholder + '</div>';
|
||
break;
|
||
case 'button':
|
||
var _width = _obj.width ? _obj.width : '330px';
|
||
_html += "<button name='" + _name + '\' class="btn btn-success btn-sm mr5 ml5 ' + _name + bs + (_obj.class ? _obj.class : '') + '">' + _obj.text + '</button>';
|
||
break;
|
||
case 'radio':
|
||
var _v = _obj.value === true ? 'checked' : '';
|
||
_html +=
|
||
'<input type="radio" class="' +
|
||
_name +
|
||
bs +
|
||
'" id="' +
|
||
_name +
|
||
'" name="' +
|
||
_name +
|
||
'" ' +
|
||
_v +
|
||
'><label class="mr20" for="' +
|
||
_name +
|
||
'" style="font-weight:normal">' +
|
||
_obj.text +
|
||
'</label>';
|
||
break;
|
||
case 'radio_group':
|
||
$.each(_obj.list, function (index, item) {
|
||
var id = _name + '_' + index,
|
||
_v = _obj.value === item.value ? 'checked' : '';
|
||
_html +=
|
||
'<div class="radio_item"><input type="radio" class="' +
|
||
_name +
|
||
bs +
|
||
'" id="' +
|
||
id +
|
||
'" name="' +
|
||
_name +
|
||
'" ' +
|
||
_v +
|
||
' value="' +
|
||
item.value +
|
||
'"><label class="mr20" for="' +
|
||
id +
|
||
'" style="font-weight:normal">' +
|
||
item.text +
|
||
'</label></div>';
|
||
});
|
||
break;
|
||
case 'checkbox':
|
||
var _v = _obj.value === true ? 'checked' : '';
|
||
_html +=
|
||
'<input type="checkbox" class="' +
|
||
_name +
|
||
bs +
|
||
'" id="' +
|
||
_name +
|
||
'" name="' +
|
||
_name +
|
||
'" ' +
|
||
(_obj.disabled ? 'disabled' : '') +
|
||
' ' +
|
||
_v +
|
||
'><label class="mr20" for="' +
|
||
_name +
|
||
'" style="font-weight:normal">' +
|
||
_obj.text +
|
||
'</label>';
|
||
break;
|
||
case 'number':
|
||
var _width = _obj.width ? _obj.width : '330px';
|
||
_html +=
|
||
"<input name='" +
|
||
_name +
|
||
"' " +
|
||
(_obj.disabled ? 'disabled' : '') +
|
||
" class='bt-input-text mr5 " +
|
||
_name +
|
||
bs +
|
||
_add_class +
|
||
"' " +
|
||
(_placeholder ? ' placeholder="' + _placeholder + '"' : '') +
|
||
" type='number' style='width:" +
|
||
_width +
|
||
"' value='" +
|
||
(_obj.value ? _obj.value : '0') +
|
||
"' />";
|
||
_html += _obj.unit ? _obj.unit : '';
|
||
break;
|
||
case 'password':
|
||
var _width = _obj.width ? _obj.width : '330px';
|
||
_html +=
|
||
"<input name='" +
|
||
_name +
|
||
"' " +
|
||
(_obj.disabled ? 'disabled' : '') +
|
||
" class='bt-input-text mr5 " +
|
||
_name +
|
||
bs +
|
||
"' " +
|
||
(_placeholder ? ' placeholder="' + _placeholder + '"' : '') +
|
||
" type='password' style='width:" +
|
||
_width +
|
||
"' value='" +
|
||
(_obj.value ? _obj.value : '') +
|
||
"' />";
|
||
break;
|
||
case 'div':
|
||
var _width = _obj.width ? _obj.width : '330px',
|
||
_height = _obj.height ? _obj.height : '100px';
|
||
_html +=
|
||
'<div class="bt-input-text ace_config_editor_scroll mr20 ' +
|
||
_name +
|
||
bs +
|
||
_add_class +
|
||
'" name="' +
|
||
_name +
|
||
'" style="width:' +
|
||
_width +
|
||
';height:' +
|
||
_height +
|
||
';line-height:22px">' +
|
||
(_obj.value ? _obj.value : '') +
|
||
'</div>';
|
||
if (_placeholder) _html += '<div class="placeholder c9" style="top: 15px; left: 15px; display: block;">' + _placeholder + '</div>';
|
||
break;
|
||
case 'switch':
|
||
_html +=
|
||
'<div style="display: inline-block;vertical-align: middle;">\
|
||
<input type="checkbox" id="' +
|
||
_name +
|
||
'" ' +
|
||
(_obj.value == true ? 'checked' : '') +
|
||
' class="btswitch btswitch-ios">\
|
||
<label class="btswitch-btn" for="' +
|
||
_name +
|
||
'" style="margin-top:5px;"></label>\
|
||
</div>';
|
||
break;
|
||
case 'html':
|
||
_html += _obj.html;
|
||
break;
|
||
default:
|
||
var _width = _obj.width ? _obj.width : '330px';
|
||
_html +=
|
||
"<input name='" +
|
||
_name +
|
||
"' " +
|
||
(_obj.disabled ? 'disabled' : '') +
|
||
" class='bt-input-text mr5 " +
|
||
_name +
|
||
bs +
|
||
_add_class +
|
||
"' " +
|
||
(_placeholder ? ' placeholder="' + _placeholder + '"' : '') +
|
||
" type='text' style='width:" +
|
||
_width +
|
||
"' value='" +
|
||
(_obj.value ? _obj.value : '') +
|
||
"' />";
|
||
break;
|
||
}
|
||
if (_obj.title) _html += '</div>';
|
||
if (_obj.callback) clicks.push({ bind: _name + bs, callback: _obj.callback });
|
||
if (_obj.event) {
|
||
_html += '<span data-id="' + _name + bs + '" class="glyphicon cursor mr5 ' + _obj.event.css + ' icon_' + _name + bs + '" ></span>';
|
||
if (_obj.event.callback) clicks.push({ bind: 'icon_' + _name + bs, callback: _obj.event.callback });
|
||
}
|
||
if (_obj.ps) _html += " <span class='c9 mt10'>" + _obj.ps + '</span>';
|
||
if (_obj.ps_help) _html += "<span class='bt-ico-ask " + _obj.name + "_help' tip='" + _obj.ps_help + "'>?</span>";
|
||
}
|
||
if (item.ps) _html += " <span class='c9 mt10'>" + item.ps + '</span>';
|
||
if (item.ps_help) _html += "<span class='bt-ico-ask " + item.name + "_help' tip='" + item.ps_help + "'>?</span>";
|
||
} else {
|
||
switch (item.type) {
|
||
case 'select':
|
||
var _width = item.width ? item.width : '100px';
|
||
_html += '<select ' + (item.disabled ? 'disabled' : '') + ' class="bt-input-text mr5 ' + _name + bs + '" name="' + _name + '" style="width:' + _width + '">';
|
||
for (var j = 0; j < item.items.length; j++) {
|
||
_html += '<option ' + (item.value == item.items[j].value ? 'selected' : '') + ' value="' + item.items[j].value + '">' + item.items[j].title + '</option>';
|
||
}
|
||
_html += '</select>';
|
||
break;
|
||
case 'button':
|
||
var _width = item.width ? item.width : '330px';
|
||
_html += "<button name='" + _name + '\' class="btn btn-success btn-sm mr5 ml5 ' + _name + bs + '">' + item.text + '</button>';
|
||
break;
|
||
case 'number':
|
||
var _width = item.width ? item.width : '330px';
|
||
_html +=
|
||
"<input name='" +
|
||
item.name +
|
||
"' " +
|
||
(item.disabled ? 'disabled' : '') +
|
||
" class='bt-input-text mr5 " +
|
||
_name +
|
||
bs +
|
||
"' " +
|
||
(_placeholder ? ' placeholder="' + _placeholder + '"' : '') +
|
||
" type='number' style='width:" +
|
||
_width +
|
||
"' value='" +
|
||
(item.value ? item.value : '0') +
|
||
"' />";
|
||
break;
|
||
case 'checkbox':
|
||
var _v = item.value === true ? 'checked' : '';
|
||
_html +=
|
||
'<input type="checkbox" class="' +
|
||
_name +
|
||
'" id="' +
|
||
_name +
|
||
'" name="' +
|
||
_name +
|
||
'" ' +
|
||
_v +
|
||
'><label class="mr20" for="' +
|
||
_name +
|
||
'" style="font-weight:normal">' +
|
||
item.text +
|
||
'</label>';
|
||
break;
|
||
case 'password':
|
||
var _width = item.width ? item.width : '330px';
|
||
_html +=
|
||
"<input name='" +
|
||
_name +
|
||
"' " +
|
||
(item.disabled ? 'disabled' : '') +
|
||
" class='bt-input-text mr5 " +
|
||
_name +
|
||
bs +
|
||
"' " +
|
||
(_placeholder ? ' placeholder="' + _placeholder + '"' : '') +
|
||
" type='password' style='width:" +
|
||
_width +
|
||
"' value='" +
|
||
(item.value ? item.value : '') +
|
||
"' />";
|
||
break;
|
||
case 'textarea':
|
||
var _width = item.width ? item.width : '330px';
|
||
var _height = item.height ? item.height : '100px';
|
||
_html +=
|
||
'<textarea class="bt-input-text mr20 ' +
|
||
_name +
|
||
bs +
|
||
'" ' +
|
||
(item.disabled ? 'disabled' : '') +
|
||
' name="' +
|
||
_name +
|
||
'" style="width:' +
|
||
_width +
|
||
';height:' +
|
||
_height +
|
||
';line-height:22px">' +
|
||
(item.value ? item.value : '') +
|
||
'</textarea>';
|
||
if (_placeholder) _html += '<div class="placeholder c9" style="top: 15px; left: 15px; display: block;">' + _placeholder + '</div>';
|
||
break;
|
||
default:
|
||
var _width = item.width ? item.width : '330px';
|
||
|
||
_html +=
|
||
"<input name='" +
|
||
item.name +
|
||
"' " +
|
||
(item.disabled ? 'disabled' : '') +
|
||
" class='bt-input-text mr5 " +
|
||
_name +
|
||
bs +
|
||
"' " +
|
||
(_placeholder ? ' placeholder="' + _placeholder + '"' : '') +
|
||
" type='text' style='width:" +
|
||
_width +
|
||
"' value='" +
|
||
(item.value ? item.value : '') +
|
||
"' />";
|
||
break;
|
||
}
|
||
if (item.callback) clicks.push({ bind: _name + bs, callback: item.callback });
|
||
if (item.ps) _html += " <span class='c9 mt10 mr5'>" + item.ps + '</span>';
|
||
if (item.ps_help) _html += "<span class='bt-ico-ask " + item.name + "_help' tip='" + item.ps_help + "'>?</span>";
|
||
}
|
||
_html += '</div>';
|
||
if (!item.class) item.class = '';
|
||
if (item.hide) _hide = 'style="display:none;"';
|
||
_html = '<div class="line ' + item.class + '" ' + _hide + '>' + _html + '</div>';
|
||
|
||
if (form) {
|
||
form.append(_html);
|
||
bt.render_clicks(clicks);
|
||
}
|
||
return { html: _html, clicks: clicks, data: item };
|
||
},
|
||
render_form: function (data, callback) {
|
||
if (data) {
|
||
var bs = '_' + bt.get_random(6);
|
||
var _form = $("<div data-id='form" + bs + "' class='bt-form bt-form pd20 pb70 " + (data.class ? data.class : '') + "'></div>");
|
||
var _lines = data.list;
|
||
var clicks = [];
|
||
for (var i = 0; i < _lines.length; i++) {
|
||
var _obj = _lines[i];
|
||
if (_obj.hasOwnProperty('html')) {
|
||
_form.append(_obj.html);
|
||
} else {
|
||
var rRet = bt.render_form_line(_obj, bs);
|
||
for (var s = 0; s < rRet.clicks.length; s++) clicks.push(rRet.clicks[s]);
|
||
_form.append(rRet.html);
|
||
}
|
||
}
|
||
|
||
var _btn_html = '';
|
||
for (var i = 0; i < data.btns.length; i++) {
|
||
var item = data.btns[i];
|
||
var css = item.css ? item.css : 'btn-danger';
|
||
_btn_html += "<button type='button' class='btn btn-sm " + css + ' ' + item.name + bs + "' >" + item.title + '</button>';
|
||
clicks.push({ bind: item.name + bs, callback: item.callback });
|
||
}
|
||
_form.append("<div class='bt-form-submit-btn'>" + _btn_html + '</div>');
|
||
var loadOpen = bt.open({
|
||
type: 1,
|
||
skin: data.skin,
|
||
area: data.area,
|
||
title: data.title,
|
||
closeBtn: 2,
|
||
content: _form.prop('outerHTML'),
|
||
end: data.end ? data.end : false,
|
||
success: function () {
|
||
if (data.success) data.success();
|
||
},
|
||
});
|
||
setTimeout(function () {
|
||
bt.render_clicks(clicks, loadOpen, callback);
|
||
}, 100);
|
||
}
|
||
return bs;
|
||
},
|
||
render_clicks: function (clicks, loadOpen, callback) {
|
||
for (var i = 0; i < clicks.length; i++) {
|
||
var obj = clicks[i];
|
||
|
||
var btn = $('.' + obj.bind);
|
||
btn.data('item', obj);
|
||
btn.data('load', loadOpen);
|
||
btn.data('callback', callback);
|
||
|
||
switch (btn.prop('tagName')) {
|
||
case 'SPAN':
|
||
btn.click(function () {
|
||
var _obj = $(this).data('item');
|
||
_obj.callback($(this).attr('data-id'));
|
||
});
|
||
break;
|
||
case 'SELECT':
|
||
btn.change(function () {
|
||
var _obj = $(this).data('item');
|
||
_obj.callback($(this));
|
||
});
|
||
break;
|
||
case 'TEXTAREA':
|
||
case 'INPUT':
|
||
case 'BUTTON':
|
||
if (btn.prop('tagName') == 'BUTTON' || btn.attr('type') == 'checkbox') {
|
||
btn.click(function () {
|
||
var _obj = $(this).data('item');
|
||
var load = $(this).data('load');
|
||
var _callback = $(this).data('callback');
|
||
var parent = $(this).parents('.bt-form');
|
||
|
||
if (_obj.callback) {
|
||
var data = {};
|
||
parent.find('*').each(function (index, _this) {
|
||
var _name = $(_this).attr('name');
|
||
|
||
if (_name) {
|
||
if ($(_this).attr('type') == 'checkbox' || $(_this).attr('type') == 'radio') {
|
||
data[_name] = $(_this).prop('checked');
|
||
} else {
|
||
data[_name] = $(_this).val();
|
||
}
|
||
}
|
||
});
|
||
_obj.callback(data, load, function (rdata) {
|
||
if (_callback) _callback(rdata);
|
||
});
|
||
} else {
|
||
load.close();
|
||
}
|
||
});
|
||
} else {
|
||
if (btn.attr('type') == 'radio') {
|
||
btn.click(function () {
|
||
var _obj = $(this).data('item');
|
||
_obj.callback($(this));
|
||
});
|
||
} else {
|
||
btn.on('input', function () {
|
||
var _obj = $(this).data('item');
|
||
_obj.callback($(this));
|
||
});
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
},
|
||
render: function (
|
||
obj //columns 行
|
||
) {
|
||
if (obj.columns) {
|
||
var checks = {};
|
||
$(obj.table).html('');
|
||
var thead = '<thead><tr>';
|
||
for (var h = 0; h < obj.columns.length; h++) {
|
||
var item = obj.columns[h];
|
||
if (item) {
|
||
thead += '<th';
|
||
if (item.width) thead += ' width="' + item.width + '" ';
|
||
if (item.align || item.sort) {
|
||
thead += ' style="';
|
||
if (item.align) thead += 'text-align:' + item.align + ';';
|
||
if (item.sort) thead += item.sort ? 'cursor: pointer;' : '';
|
||
thead += '"';
|
||
}
|
||
if (item.type == 'checkbox') {
|
||
thead += '><input class="check" onclick="bt.check_select();" type="checkbox">';
|
||
} else {
|
||
thead += '>' + item.title;
|
||
}
|
||
if (item.sort) {
|
||
checks[item.field] = item.sort;
|
||
thead += ' <span data-id="' + item.field + '" class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span>';
|
||
}
|
||
if (item.help) thead += '<a href="' + item.help + '" class="bt-ico-ask" target="_blank" title="' + lan.public_backup.click_detail + '">?</a>';
|
||
|
||
thead += '</th>';
|
||
}
|
||
}
|
||
thead += '</tr></thead>';
|
||
var _tab = $(obj.table).append(thead);
|
||
if (obj.data.length > 0) {
|
||
for (var i = 0; i < obj.data.length; i++) {
|
||
var val = obj.data[i];
|
||
var tr = $('<tr></tr>');
|
||
for (var h = 0; h < obj.columns.length; h++) {
|
||
var item = obj.columns[h];
|
||
if (item) {
|
||
var _val = val[item.field];
|
||
if (typeof _val == 'string') _val = _val.replace(/\\/g, '');
|
||
if (item.hasOwnProperty('templet')) _val = item.templet(val);
|
||
if (item.type == 'checkbox') _val = '<input value=' + val[item.field] + ' class="check" onclick="bt.check_select();" type="checkbox">';
|
||
var td = '<td ';
|
||
if (item.align) {
|
||
td += 'style="';
|
||
if (item.align) td += 'text-align:' + item.align;
|
||
td += '"';
|
||
}
|
||
if (item.index) td += 'data-index="' + i + '" ';
|
||
td += '>';
|
||
tr.append(td + _val + '</td>');
|
||
tr.data('item', val);
|
||
_tab.append(tr);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
_tab.append("<tr><td colspan='" + obj.columns.length + "'>" + obj.empty ? obj.empty : lan.bt.no_data + '</td></tr>');
|
||
}
|
||
$(obj.table)
|
||
.find('.check')
|
||
.click(function () {
|
||
var checked = $(this).prop('checked');
|
||
if ($(this).parent().prop('tagName') == 'TH') {
|
||
$('.check').prop('checked', checked ? 'checked' : '');
|
||
}
|
||
});
|
||
var asc = 'glyphicon-triangle-top';
|
||
var desc = 'glyphicon-triangle-bottom';
|
||
|
||
var orderby = bt.get_cookie('order');
|
||
if (orderby != undefined) {
|
||
var arrys = orderby.split(' ');
|
||
if (arrys.length == 2) {
|
||
if (arrys[1] == 'asc') {
|
||
$(obj.table)
|
||
.find('th span[data-id="' + arrys[0] + '"]')
|
||
.removeClass(desc)
|
||
.addClass(asc);
|
||
} else {
|
||
$(obj.table)
|
||
.find('th span[data-id="' + arrys[0] + '"]')
|
||
.removeClass(asc)
|
||
.addClass(desc);
|
||
}
|
||
}
|
||
}
|
||
|
||
$(obj.table)
|
||
.find('th')
|
||
.data('checks', checks)
|
||
.click(function () {
|
||
var _th = $(this);
|
||
var _checks = _th.data('checks');
|
||
var _span = _th.find('span');
|
||
if (_span.length > 0) {
|
||
var or = _span.attr('data-id');
|
||
if (_span.hasClass(asc)) {
|
||
bt.set_cookie('order', or + ' desc');
|
||
$(obj.table)
|
||
.find('th span[data-id="' + or + '"]')
|
||
.removeClass(asc)
|
||
.addClass(desc);
|
||
_checks[or]();
|
||
} else if (_span.hasClass(desc)) {
|
||
bt.set_cookie('order', or + ' asc');
|
||
$(obj.table)
|
||
.find('th span[data-id="' + arrys[0] + '"]')
|
||
.removeClass(desc)
|
||
.addClass(asc);
|
||
_checks[or]();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
return _tab;
|
||
},
|
||
// ACE编辑配置文件
|
||
aceEditor: function (obj) {
|
||
var aEditor = {
|
||
ACE: ace.edit(obj.el, {
|
||
theme: obj.theme ? obj.theme : 'ace/theme/chrome', // 主题
|
||
mode: 'ace/mode/' + (obj.mode || 'nginx'), // 语言类型
|
||
wrap: true,
|
||
showInvisibles: false,
|
||
showPrintMargin: false,
|
||
showFoldWidgets: false,
|
||
useSoftTabs: true,
|
||
tabSize: 2,
|
||
showPrintMargin: false,
|
||
readOnly: false,
|
||
}),
|
||
path: obj.path,
|
||
content: '',
|
||
saveCallback: obj.saveCallback,
|
||
},
|
||
_this = this;
|
||
$('#' + obj.el).css('fontSize', '12px');
|
||
aEditor.ACE.commands.addCommand({
|
||
name: '保存文件',
|
||
bindKey: { win: 'Ctrl-S', mac: 'Command-S' },
|
||
exec: function (editor) {
|
||
_this.saveEditor(aEditor, aEditor.saveCallback);
|
||
},
|
||
readOnly: false, // 如果不需要使用只读模式,这里设置false
|
||
});
|
||
if (obj.path != undefined) {
|
||
var loadT = layer.msg(lan.soft.get_config, { icon: 16, time: 0, shade: [0.3, '#000'] });
|
||
bt.send('GetFileBody', 'files/GetFileBody', { path: obj.path }, function (res) {
|
||
layer.close(loadT);
|
||
if (!res.status) {
|
||
bt.msg(res);
|
||
return false;
|
||
}
|
||
aEditor.ACE.setValue(res.data); //设置配置文件内容
|
||
aEditor.ACE.moveCursorTo(0, 0); //设置文件光标位置
|
||
aEditor.ACE.resize();
|
||
});
|
||
} else if (obj.content != undefined) {
|
||
aEditor.ACE.setValue(obj.content);
|
||
aEditor.ACE.moveCursorTo(0, 0); //设置文件光标位置
|
||
aEditor.ACE.resize();
|
||
}
|
||
return aEditor;
|
||
},
|
||
// 保存编辑器文件
|
||
saveEditor: function (ace) {
|
||
if (!ace.saveCallback) {
|
||
var loadT = bt.load(lan.soft.the_save);
|
||
bt.send('SaveFileBody', 'files/SaveFileBody', { data: ace.ACE.getValue(), path: ace.path, encoding: 'utf-8' }, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
});
|
||
} else {
|
||
ace.saveCallback(ace.ACE.getValue());
|
||
}
|
||
},
|
||
/**
|
||
* @description 遍历数组和对象
|
||
* @param {Array|Object} obj 遍历数组|对象
|
||
* @param {Function} fn 遍历对象或数组
|
||
* @return 当前对象
|
||
*/
|
||
each: function (obj, fn) {
|
||
var key,
|
||
that = this;
|
||
if (typeof fn !== 'function') return that;
|
||
obj = obj || [];
|
||
if (obj.constructor === Object) {
|
||
for (key in obj) {
|
||
if (fn.call(obj[key], key, obj[key])) break;
|
||
}
|
||
} else {
|
||
for (key = 0; key < obj.length; key++) {
|
||
if (fn.call(obj[key], key, obj[key])) break;
|
||
}
|
||
}
|
||
return that;
|
||
},
|
||
/**
|
||
* @description 普通提示弹窗
|
||
* @param {Object} config 弹窗对象 {title:标题, msg:提示内容}
|
||
* @param {function} callback 确认回调函数
|
||
* @param {function} callback1 取消回调函数
|
||
*/
|
||
simple_confirm: function (config, callback, callback1) {
|
||
layer.open({
|
||
type: 1,
|
||
title: config.title,
|
||
area: '430px',
|
||
closeBtn: 2,
|
||
shadeClose: false,
|
||
btn: [lan['public'].ok, lan['public'].cancel],
|
||
content:
|
||
'<div class="bt-form hint_confirm pd30">\
|
||
<div class="hint_title">\
|
||
<i class="hint-confirm-icon"></i>\
|
||
<div class="hint_con">' +
|
||
config.msg +
|
||
'</div>\
|
||
</div>\
|
||
</div>',
|
||
yes: function (index, layero) {
|
||
if (callback && typeof callback(index) === 'undefined') layer.close(index);
|
||
},
|
||
btn2: function (index) {
|
||
//取消返回回调
|
||
if (callback1 && typeof callback1(index) === 'undefined') layer.close(index);
|
||
},
|
||
cancel: function (index) {
|
||
//取消返回回调
|
||
if (callback1 && typeof callback1(index) === 'undefined') layer.close(index);
|
||
},
|
||
});
|
||
},
|
||
/**
|
||
* @description 需求反馈弹窗
|
||
* @param {Object} param 配置对象 {title:标题, placeholder:反馈问题pl(可带标签),recover:input框下方提示语, key:反馈问题key, proType:产品类型}
|
||
*/
|
||
openFeedback: function (param) {
|
||
// 需求反馈
|
||
var openFeed = bt_tools.open({
|
||
area: ['570px', '400px'],
|
||
btn: false,
|
||
content:
|
||
'<div id="feedback">\
|
||
<div class="nps_survey_banner">\
|
||
<span class="Ftitle"> <i></i> <span style="vertical-align:4px;">' +
|
||
param.title +
|
||
'</span> </span>\
|
||
</div>\
|
||
<div style="padding: 25px 0 0 40px">\
|
||
<div class="flex flex-col items-center">\
|
||
<div id="feedForm"></div>\
|
||
</div>\
|
||
</div>\
|
||
</div>',
|
||
success: function (that) {
|
||
var id = 'x66ed9v07MjVjYjczNTUyMDE0Le8BEdl';
|
||
bt_tools.send(
|
||
{ url: '/config?action=get_nps_new', data: { product_type: param.proType } },
|
||
function (ress) {
|
||
//请求回调
|
||
console.log(ress);
|
||
if (ress.res) {
|
||
id = ress.res[0].id;
|
||
}
|
||
},
|
||
{ load: 'Loading...', verify: false }
|
||
);
|
||
//打开弹窗后执行的事件
|
||
that.find('.layui-layer-title').remove();
|
||
bt_tools.form({
|
||
el: '#feedForm',
|
||
form: [
|
||
{
|
||
group: {
|
||
type: 'textarea',
|
||
name: 'feed',
|
||
style: {
|
||
width: '500px',
|
||
'min-width': '500px',
|
||
'min-height': '130px',
|
||
'line-height': '22px',
|
||
'padding-top': '10px',
|
||
resize: 'none',
|
||
},
|
||
tips: {
|
||
//使用hover的方式显示提示
|
||
text: param.placeholder,
|
||
style: { top: '126px', left: '50px' },
|
||
},
|
||
},
|
||
},
|
||
{
|
||
group: {
|
||
name: 'tips',
|
||
type: 'other',
|
||
boxcontent: '<div style="color:#20a53a;margin-left:-5px;">' + param.recover + '</div>',
|
||
},
|
||
},
|
||
{
|
||
group: {
|
||
type: 'button',
|
||
size: '',
|
||
name: 'submitForm',
|
||
class: 'feedBtn',
|
||
style: 'margin:10px auto 0;padding:6px 40px;',
|
||
title: 'Submit',
|
||
event: function (formData, element, that) {
|
||
// 触发submit
|
||
if (formData.feed == '') {
|
||
return bt.msg({ status: false, msg: 'Please fill in the feedback' });
|
||
}
|
||
var config = {};
|
||
config[id] = formData.feed;
|
||
bt_tools.send(
|
||
{ url: 'config?action=write_nps_new', data: { questions: JSON.stringify(config), rate: 0, product_type: param.proType } },
|
||
function (ress) {
|
||
if (ress.status) {
|
||
openFeed.close();
|
||
layer.open({
|
||
title: false,
|
||
btn: false,
|
||
shadeClose: true,
|
||
shade: 0.1,
|
||
closeBtn: 0,
|
||
skin: 'qa_thank_dialog',
|
||
area: '230px',
|
||
content:
|
||
'<div class="qa_thank_box" style="background-color:#F1F9F3;text-align: center;padding: 20px 0;"><img src="/static/img/feedback/QA_like.png" style="width: 55px;"><p style="margin-top: 15px;">Thank you for your participation!</p></div>',
|
||
success: function (layero, index) {
|
||
$(layero).find('.layui-layer-content').css({ padding: '0', 'border-radius': '5px' });
|
||
$(layero).css({ 'border-radius': '5px', 'min-width': '230px' });
|
||
|
||
setTimeout(function () {
|
||
layer.close(index);
|
||
}, 3000);
|
||
},
|
||
});
|
||
}
|
||
},
|
||
'submit feedback'
|
||
);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
});
|
||
},
|
||
yes: function () {
|
||
//点击确定时,如果btn:false,当前事件将无法使用
|
||
},
|
||
cancel: function () {
|
||
//点击右上角关闭时,如果btn:false,当前事件将无法使用
|
||
},
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.pub = {
|
||
get_data: function (data, callback, hide) {
|
||
if (!hide) var loading = bt.load(lan.public.the);
|
||
bt.send('getData', 'data/getData', data, function (rdata) {
|
||
if (loading) loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_data_by_key: function (tab, key, obj) {
|
||
var _span = $(obj);
|
||
var _input = $("<input class='baktext' value='" + _span.text() + "' type='text' placeholder='" + lan.ftp.ps + "' />");
|
||
_span.hide().after(_input);
|
||
_input.focus();
|
||
_input.blur(function () {
|
||
var item = $(this).parents('tr').data('item');
|
||
var _txt = $(this);
|
||
var data = { table: tab, id: item.id };
|
||
data[key] = _txt.val();
|
||
bt.pub.set_data_ps(data, function (rdata) {
|
||
if (rdata.status) {
|
||
_span.text(_txt.val());
|
||
_span.show();
|
||
_txt.remove();
|
||
}
|
||
});
|
||
});
|
||
_input.keyup(function () {
|
||
if (event.keyCode == 13) {
|
||
_input.trigger('blur');
|
||
}
|
||
});
|
||
},
|
||
set_data_ps: function (data, callback) {
|
||
bt.send('setPs', 'data/setPs', data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_server_status: function (serverName, type) {
|
||
if (bt.contains(serverName, 'php-')) {
|
||
serverName = 'php-fpm-' + serverName.replace('php-', '').replace('.', '');
|
||
}
|
||
if (serverName == 'pureftpd') serverName = 'pure-ftpd';
|
||
if (serverName == 'mysql') serverName = 'mysqld';
|
||
serverName = serverName.replace('_soft', '');
|
||
var data = 'name=' + serverName + '&type=' + type;
|
||
var msg = lan.bt[type];
|
||
var typeName = '';
|
||
switch (type) {
|
||
case 'stop':
|
||
typeName = lan.public_backup.stop;
|
||
break;
|
||
case 'restart':
|
||
typeName = lan.public_backup.restart;
|
||
break;
|
||
case 'reload':
|
||
typeName = lan.public_backup.reload;
|
||
break;
|
||
}
|
||
bt.confirm({ msg: lan.get('service_confirm', [msg, serverName]), title: typeName + serverName + lan.public_backup.server }, function () {
|
||
var load = bt.load(lan.get('service_the', [msg, serverName]));
|
||
bt.send('system', 'system/ServiceAdmin', data, function (rdata) {
|
||
load.close();
|
||
var f = rdata.status ? lan.get('service_ok', [serverName, msg]) : lan.get('service_err', [serverName, msg]);
|
||
bt.msg({ msg: f, icon: rdata.status });
|
||
|
||
if (type != 'reload' && rdata.status) {
|
||
setTimeout(function () {
|
||
window.location.reload();
|
||
}, 1000);
|
||
}
|
||
if (!rdata.status) {
|
||
bt.msg(rdata);
|
||
}
|
||
});
|
||
});
|
||
},
|
||
set_ftp_logs: function (type) {
|
||
var serverName = 'pure-ftpd';
|
||
var data = 'exec_name=' + type;
|
||
var typeName = 'enabling ';
|
||
var TypeName = 'Enabling ';
|
||
switch (type) {
|
||
case 'stop':
|
||
typeName = 'disabling ';
|
||
TypeName = 'Disabling ';
|
||
break;
|
||
}
|
||
var status = type == 'stop' ? false : true;
|
||
layer.confirm(
|
||
'After ' +
|
||
typeName +
|
||
'pure-ftpd Logs management,' +
|
||
(status ? 'all login and operation records of FTP users will be recorded.' : 'it will no longer be possible to record all login and operation records of FTP users. ') +
|
||
' Do you want to proceed?',
|
||
{
|
||
title: TypeName + serverName + ' logs management',
|
||
closeBtn: 2,
|
||
icon: 3,
|
||
cancel: function () {
|
||
$('#isFtplog').prop('checked', !status);
|
||
},
|
||
},
|
||
function () {
|
||
var load = bt.load(TypeName + 'Pure-FTPd logs management, please wait...');
|
||
bt.send('ftp', 'ftp/set_ftp_logs', data, function (rdata) {
|
||
load.close();
|
||
bt.msg(rdata);
|
||
$('.bt-soft-menu p').eq(3).click();
|
||
});
|
||
},
|
||
function () {
|
||
$('#isFtplog').prop('checked', !status);
|
||
}
|
||
);
|
||
},
|
||
get_ftp_logs: function (callback) {
|
||
bt.send('ftp', 'ftp/set_ftp_logs', { exec_name: 'getlog' }, function (res) {
|
||
var _status = res.msg === 'start' ? true : false;
|
||
if (callback) callback(_status);
|
||
});
|
||
},
|
||
set_server_status_by: function (data, callback) {
|
||
bt.send('system', 'system/ServiceAdmin', data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_task_count: function (callback) {
|
||
bt.send('GetTaskCount', 'ajax/GetTaskCount', {}, function (rdata) {
|
||
$('.task').text(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
check_install: function (callback) {
|
||
bt.send('CheckInstalled', 'ajax/CheckInstalled', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_user_info: function (callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetUserInfo', 'ssl/GetUserInfo', {}, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
show_hide_pass: function (obj) {
|
||
var a = 'glyphicon-eye-open';
|
||
var b = 'glyphicon-eye-close';
|
||
|
||
if ($(obj).hasClass(a)) {
|
||
$(obj).removeClass(a).addClass(b);
|
||
$(obj).prev().text($(obj).prev().attr('data-pw'));
|
||
} else {
|
||
$(obj).removeClass(b).addClass(a);
|
||
$(obj).prev().text('**********');
|
||
}
|
||
},
|
||
copy_pass: function (password) {
|
||
var clipboard = new ClipboardJS('#bt_copys');
|
||
clipboard.on('success', function (e) {
|
||
bt.msg({ msg: lan.public_backup.cp_success, icon: 1 });
|
||
});
|
||
|
||
clipboard.on('error', function (e) {
|
||
bt.msg({ msg: lan.public_backup.cp_fail, icon: 2 });
|
||
});
|
||
$('#bt_copys').attr('data-clipboard-text', password);
|
||
$('#bt_copys').click();
|
||
},
|
||
login_btname: function (username, password, callback) {
|
||
var loadT = bt.load(lan.config.token_get);
|
||
bt.send('GetToken', 'ssl/GetToken', 'username=' + username + '&password=' + password, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (rdata.status) {
|
||
if (callback) callback(rdata);
|
||
}
|
||
});
|
||
},
|
||
bind_btname: function (callback) {
|
||
layer.open({
|
||
type: 1,
|
||
title: lan.public_backup.bind_bt_account,
|
||
area: ['420px', '360px'],
|
||
closeBtn: 2,
|
||
shadeClose: false,
|
||
content:
|
||
'<div class="libLogin pd20" ><div class="bt-form text-center"><div class="line mb15"><h3 class="c2 f16 text-center mtb20">' +
|
||
lan.public_backup.bind_bt_account +
|
||
'</h3></div><div class="line"><input class="bt-input-text" name="username2" type="text" placeholder="' +
|
||
lan.public_backup.mobile_phone_or_email +
|
||
'" id="p1"></div><div class="line"><input autocomplete="new-password" class="bt-input-text" type="password" name="password2" placeholder="' +
|
||
lan.public_backup.pass +
|
||
'" id="p2"></div><div class="line"><input class="login-button" value="' +
|
||
lan.public_backup.login +
|
||
'" type="button" ></div><p class="text-right"><a class="btlink" href="https://www.yakpanel.com/user_admin/register" target="_blank">' +
|
||
lan.public_backup.no_account +
|
||
'</a></p></div></div>',
|
||
});
|
||
setTimeout(function () {
|
||
$('.login-button').click(function () {
|
||
p1 = $('#p1').val();
|
||
p2 = $('#p2').val();
|
||
var loadT = bt.load(lan.config.token_get);
|
||
bt.send('GetToken', 'ssl/GetToken', 'username=' + p1 + '&password=' + p2, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (rdata.status) {
|
||
if (callback) {
|
||
layer.closeAll();
|
||
callback(rdata);
|
||
} else {
|
||
window.location.reload();
|
||
}
|
||
$("input[name='btusername']").val(p1);
|
||
}
|
||
});
|
||
});
|
||
}, 100);
|
||
},
|
||
unbind_bt: function () {
|
||
var name = $("input[name='btusername']").val();
|
||
bt.confirm({ msg: lan.config.binding_un_msg, title: lan.config.binding_un_title }, function () {
|
||
bt.send('DelToken', 'ssl/DelToken', {}, function (rdata) {
|
||
bt.msg(rdata);
|
||
$("input[name='btusername']").val('');
|
||
});
|
||
});
|
||
},
|
||
get_menm: function (callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetMemInfo', 'system/GetMemInfo', {}, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
on_edit_file: function (type, fileName) {
|
||
if (type != 0) {
|
||
var l = $('#PathPlace input').val();
|
||
var body = encodeURIComponent($('#textBody').val());
|
||
var encoding = $('select[name=encoding]').val();
|
||
var loadT = bt.load(lan.bt.save_file);
|
||
bt.send('SaveFileBody', 'files/SaveFileBody', 'data=' + body + '&path=' + fileName + '&encoding=' + encoding, function (rdata) {
|
||
if (type == 1) loadT.close();
|
||
bt.msg(rdata);
|
||
});
|
||
return;
|
||
}
|
||
var loading = bt.load(lan.bt.read_file);
|
||
ext = bt.get_file_ext(fileName);
|
||
doctype = '';
|
||
switch (ext) {
|
||
case 'html':
|
||
var mixedMode = {
|
||
name: 'htmlmixed',
|
||
scriptTypes: [
|
||
{ matches: /\/x-handlebars-template|\/x-mustache/i, mode: null },
|
||
{ matches: /(text|application)\/(x-)?vb(a|script)/i, mode: 'vbscript' },
|
||
],
|
||
};
|
||
doctype = mixedMode;
|
||
break;
|
||
case 'htm':
|
||
var mixedMode = {
|
||
name: 'htmlmixed',
|
||
scriptTypes: [
|
||
{ matches: /\/x-handlebars-template|\/x-mustache/i, mode: null },
|
||
{ matches: /(text|application)\/(x-)?vb(a|script)/i, mode: 'vbscript' },
|
||
],
|
||
};
|
||
doctype = mixedMode;
|
||
break;
|
||
case 'js':
|
||
doctype = 'text/javascript';
|
||
break;
|
||
case 'json':
|
||
doctype = 'application/ld+json';
|
||
break;
|
||
case 'css':
|
||
doctype = 'text/css';
|
||
break;
|
||
case 'php':
|
||
doctype = 'application/x-httpd-php';
|
||
break;
|
||
case 'tpl':
|
||
doctype = 'application/x-httpd-php';
|
||
break;
|
||
case 'xml':
|
||
doctype = 'application/xml';
|
||
break;
|
||
case 'sql':
|
||
doctype = 'text/x-sql';
|
||
break;
|
||
case 'conf':
|
||
doctype = 'text/x-nginx-conf';
|
||
break;
|
||
default:
|
||
var mixedMode = {
|
||
name: 'htmlmixed',
|
||
scriptTypes: [
|
||
{ matches: /\/x-handlebars-template|\/x-mustache/i, mode: null },
|
||
{ matches: /(text|application)\/(x-)?vb(a|script)/i, mode: 'vbscript' },
|
||
],
|
||
};
|
||
doctype = mixedMode;
|
||
break;
|
||
}
|
||
bt.send('GetFileBody', 'files/GetFileBody', 'path=' + fileName, function (rdata) {
|
||
if (!rdata.status) {
|
||
bt.msg({ msg: rdata.msg, icon: 5 });
|
||
return;
|
||
}
|
||
loading.close();
|
||
var u = ['utf-8', 'GBK', 'GB2312', 'BIG5'];
|
||
var n = '';
|
||
var m = '';
|
||
var o = '';
|
||
for (var p = 0; p < u.length; p++) {
|
||
m = rdata.encoding == u[p] ? 'selected' : '';
|
||
n += '<option value="' + u[p] + '" ' + m + '>' + u[p] + '</option>';
|
||
}
|
||
var r = bt.open({
|
||
type: 1,
|
||
shift: 5,
|
||
closeBtn: 1,
|
||
//maxmin: true,
|
||
area: ['90%', '90%'],
|
||
shade: false,
|
||
title: lan.bt.edit_title + '[' + fileName + ']',
|
||
content:
|
||
'<form class="bt-form pd20 pb70"><div class="line"><p style="color:red;margin-bottom:10px">' +
|
||
lan.bt.edit_ps +
|
||
' <select class="bt-input-text" name="encoding" style="width: 74px;position: absolute;top: 31px;right: 19px;height: 22px;z-index: 9999;border-radius: 0;">' +
|
||
n +
|
||
'</select></p><textarea class="mCustomScrollbar bt-input-text" id="textBody" style="width:100%;margin:0 auto;line-height: 1.8;position: relative;top: 10px;" value="" /></div><div class="bt-form-submit-btn" style="position:absolute; bottom:0; width:100%"><button type="button" class="btn btn-danger btn-sm btn-editor-close">' +
|
||
lan.public.close +
|
||
'</button><button id="OnlineEditFileBtn" type="button" class="btn btn-success btn-sm">' +
|
||
lan.public.save +
|
||
'</button></div></form>',
|
||
});
|
||
$('#textBody').text(rdata.data);
|
||
var q = $(window).height() * 0.9;
|
||
$('#textBody').height(q - 160);
|
||
var t = CodeMirror.fromTextArea(document.getElementById('textBody'), {
|
||
extraKeys: {
|
||
'Ctrl-F': 'findPersistent',
|
||
'Ctrl-H': 'replaceAll',
|
||
'Ctrl-S': function () {
|
||
$('#textBody').text(t.getValue());
|
||
bt.pub.on_edit_file(2, fileName);
|
||
},
|
||
},
|
||
mode: doctype,
|
||
lineNumbers: true,
|
||
matchBrackets: true,
|
||
matchtags: true,
|
||
autoMatchParens: true,
|
||
});
|
||
t.focus();
|
||
t.setSize('auto', q - 150);
|
||
$('#OnlineEditFileBtn').click(function () {
|
||
$('#textBody').text(t.getValue());
|
||
bt.pub.on_edit_file(1, fileName);
|
||
});
|
||
$('.btn-editor-close').click(function () {
|
||
r.close();
|
||
});
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.index = {
|
||
rec_install: function () {
|
||
bt.send('GetSoftList', 'ajax/GetSoftList', {}, function (l) {
|
||
var c = '';
|
||
var g = '';
|
||
var e = '';
|
||
for (var h = 0; h < l.length; h++) {
|
||
if (l[h].name == 'Tomcat') {
|
||
continue;
|
||
}
|
||
var o = '';
|
||
var m =
|
||
"<input id='data_" +
|
||
l[h].name +
|
||
"' data-info='" +
|
||
l[h].name +
|
||
' ' +
|
||
l[h].versions[0].version +
|
||
"' type='checkbox' " +
|
||
(l[h].name == 'DNS-Server' || l[h].name == 'Mail-Server' ? '' : 'checked') +
|
||
'>';
|
||
for (var b = 0; b < l[h].versions.length; b++) {
|
||
var d = '';
|
||
if (
|
||
(l[h].name == 'PHP' && (l[h].versions[b].version == '7.4' || l[h].versions[b].version == '7.4')) ||
|
||
(l[h].name == 'MySQL' && l[h].versions[b].version == '5.7') ||
|
||
(l[h].name == 'phpMyAdmin' && l[h].versions[b].version == '5.0')
|
||
) {
|
||
d = 'selected';
|
||
m = "<input id='data_" + l[h].name + "' data-info='" + l[h].name + ' ' + l[h].versions[b].version + "' type='checkbox' checked>";
|
||
}
|
||
o += "<option value='" + l[h].versions[b].version + "' " + d + '>' + l[h].name + ' ' + l[h].versions[b].version + '</option>';
|
||
}
|
||
var f =
|
||
"<li><span class='ico'><img src='/static/img/" +
|
||
l[h].name.toLowerCase() +
|
||
".png'></span><span class='name'><select id='select_" +
|
||
l[h].name +
|
||
"' class='sl-s-info'>" +
|
||
o +
|
||
"</select></span><span class='pull-right'>" +
|
||
m +
|
||
'</span></li>';
|
||
if (l[h].name == 'Nginx') {
|
||
c = f;
|
||
} else {
|
||
if (l[h].name == 'Apache') {
|
||
g = f;
|
||
} else {
|
||
e += f;
|
||
}
|
||
}
|
||
}
|
||
c += e;
|
||
g += e;
|
||
|
||
g = g.replace(new RegExp(/(data_)/g), 'apache_').replace(new RegExp(/(select_)/g), 'apache_select_');
|
||
|
||
// 检查本地存储中是否已经记录了 "loginActivity" 弹框的状态 暂时注释注册赠送7天授权活动 4-20
|
||
// var isLoginActivityShown = localStorage.getItem('loginActivityShown');
|
||
|
||
var loginSign = false;
|
||
var k = layer.open({
|
||
type: 1,
|
||
title: lan.bt.install_title,
|
||
area: ['670px', '610px'],
|
||
closeBtn: 2,
|
||
shadeClose: false,
|
||
content:
|
||
"<div class='rec-install'><div class='important-title'><p><span class='glyphicon glyphicon-alert' style='color: #f39c12; margin-right: 10px;'></span>" +
|
||
lan.bt.install_ps +
|
||
" <a href='javascript:jump()' style='color:#20a53a'>" +
|
||
lan.bt.install_s +
|
||
'</a> ' +
|
||
lan.bt.install_s1 +
|
||
"</p></div><div class='rec-box'><h3>" +
|
||
lan.bt.install_lnmp +
|
||
"</h3><div class='rec-box-con'><ul class='rec-list'>" +
|
||
c +
|
||
"</ul><p class='fangshi1'>" +
|
||
lan.bt.install_type +
|
||
":<label data-title='" +
|
||
lan.bt.install_rpm_title +
|
||
"'><span>" +
|
||
lan.bt.install_rpm +
|
||
"</span><input type='checkbox' checked></label><label data-title='" +
|
||
lan.bt.install_src_title +
|
||
"'><span>" +
|
||
lan.bt.install_src +
|
||
"</span><input type='checkbox'></label></p><div class='onekey'>" +
|
||
lan.bt.install_key +
|
||
"</div></div></div><div class='rec-box' style='margin-left:16px'><h3>LAMP</h3><div class='rec-box-con'><ul class='rec-list'>" +
|
||
g +
|
||
"</ul><p class='fangshi1'>" +
|
||
lan.bt.install_type +
|
||
":<label data-title='" +
|
||
lan.bt.install_rpm_title +
|
||
"'><span>" +
|
||
lan.bt.install_rpm +
|
||
"</span><input type='checkbox' checked></label><label data-title='" +
|
||
lan.bt.install_src_title +
|
||
"'><span>" +
|
||
lan.bt.install_src +
|
||
"</span><input type='checkbox'></label></p><div class='onekey'>" +
|
||
lan.bt.install_key +
|
||
'</div></div></div></div>',
|
||
success: function () {
|
||
form_group.select_all([
|
||
'#select_Nginx',
|
||
'#select_MySQL',
|
||
'#select_Pure-Ftpd',
|
||
'#select_PHP',
|
||
'#select_phpMyAdmin',
|
||
'#select_DNS-Server',
|
||
'#select_Mail-Server',
|
||
'#apache_select_Apache',
|
||
'#apache_select_MySQL',
|
||
'#apache_select_Pure-Ftpd',
|
||
'#apache_select_PHP',
|
||
'#apache_select_phpMyAdmin',
|
||
'#apache_select_DNS-Server',
|
||
'#apache_select_Mail-Server',
|
||
]);
|
||
form_group.checkbox();
|
||
$('.layui-layer-content').css('overflow', 'inherit');
|
||
$('.fangshi1 label').click(function () {
|
||
var input = $(this).find('input'),
|
||
siblings_label = input.parents('label').siblings();
|
||
input.prop('checked', 'checked').next().addClass('active');
|
||
siblings_label.find('input').removeAttr('checked').next().removeClass('active');
|
||
});
|
||
var loadT = '';
|
||
$('.fangshi1 label').hover(
|
||
function () {
|
||
var _title = $(this).attr('data-title'),
|
||
_that = $(this);
|
||
loadT = setTimeout(function () {
|
||
layer.tips(_title, _that[0], {
|
||
tips: [1, '#20a53a'], //还可配置颜色
|
||
time: 0,
|
||
});
|
||
}, 500);
|
||
},
|
||
function () {
|
||
clearTimeout(loadT);
|
||
layer.closeAll('tips');
|
||
}
|
||
);
|
||
},
|
||
end: function () {
|
||
// 注册即送7天专业版授权和3年APP插件授权; 暂时注释注册赠送7天授权活动 4-20
|
||
bt.pub.get_user_info(function (udata) {
|
||
if (loginSign === false) {
|
||
if (!udata.status) {
|
||
var isLoginActivityShown = localStorage.getItem('loginActivityShown');
|
||
setTimeout(function () {
|
||
if (!isLoginActivityShown) {
|
||
loginActivity();
|
||
}
|
||
}, 1000);
|
||
}
|
||
}
|
||
});
|
||
},
|
||
});
|
||
$('.sl-s-info').change(function () {
|
||
var p = $(this).find('option:selected').text();
|
||
var n = $(this).attr('id');
|
||
p = p.toLowerCase();
|
||
$(this).parents('li').find('input').attr('data-info', p);
|
||
});
|
||
$('#apache_select_PHP').change(function () {
|
||
var n = $(this).val();
|
||
j(n, 'apache_select_', 'apache_');
|
||
});
|
||
$('#select_PHP').change(function () {
|
||
var n = $(this).val();
|
||
j(n, 'select_', 'data_');
|
||
});
|
||
|
||
function j(p, r, q) {
|
||
var n = '4.4';
|
||
switch (p) {
|
||
case '5.2':
|
||
n = '4.0';
|
||
break;
|
||
case '5.3':
|
||
n = '4.0';
|
||
break;
|
||
case '5.4':
|
||
n = '4.4';
|
||
break;
|
||
case '5.5':
|
||
n = '4.4';
|
||
break;
|
||
default:
|
||
n = '4.9';
|
||
}
|
||
$('#' + r + "phpMyAdmin option[value='" + n + "']")
|
||
.attr('selected', 'selected')
|
||
.siblings()
|
||
.removeAttr('selected');
|
||
$('#' + q + 'phpMyAdmin').attr('data-info', 'phpmyadmin ' + n);
|
||
}
|
||
$('#select_MySQL,#apache_select_MySQL').change(function () {
|
||
var n = $(this).val();
|
||
a(n);
|
||
});
|
||
|
||
$('#apache_select_Apache').change(function () {
|
||
var apacheVersion = $(this).val();
|
||
if (apacheVersion == '2.2') {
|
||
layer.msg(lan.bt.install_apache22);
|
||
} else {
|
||
layer.msg(lan.bt.install_apache24);
|
||
}
|
||
});
|
||
|
||
$('#apache_select_PHP').change(function () {
|
||
var apacheVersion = $('#apache_select_Apache').val();
|
||
var phpVersion = $(this).val();
|
||
if (apacheVersion == '2.2') {
|
||
if (phpVersion != '5.2' && phpVersion != '5.3' && phpVersion != '5.4') {
|
||
layer.msg(lan.bt.insatll_s22 + 'PHP-' + phpVersion, { icon: 5 });
|
||
$(this).val('5.4');
|
||
$('#apache_PHP').attr('data-info', 'php 5.4');
|
||
return false;
|
||
}
|
||
} else {
|
||
if (phpVersion == '5.2') {
|
||
layer.msg(lan.bt.insatll_s24 + 'PHP-' + phpVersion, { icon: 5 });
|
||
$(this).val('5.4');
|
||
$('#apache_PHP').attr('data-info', 'php 5.4');
|
||
return false;
|
||
}
|
||
}
|
||
});
|
||
|
||
function a(n) {
|
||
memSize = bt.get_cookie('memSize');
|
||
max = 64;
|
||
msg = '64M';
|
||
switch (n) {
|
||
case '5.1':
|
||
max = 256;
|
||
msg = '256M';
|
||
break;
|
||
case '5.7':
|
||
max = 1500;
|
||
msg = '2GB';
|
||
break;
|
||
case '8.0':
|
||
max = 5000;
|
||
msg = '6GB';
|
||
break;
|
||
case '5.6':
|
||
max = 800;
|
||
msg = '1GB';
|
||
break;
|
||
case 'AliSQL':
|
||
max = 800;
|
||
msg = '1GB';
|
||
break;
|
||
case 'mariadb_10.0':
|
||
max = 800;
|
||
msg = '1GB';
|
||
break;
|
||
case 'mariadb_10.1':
|
||
max = 1500;
|
||
msg = '2GB';
|
||
break;
|
||
}
|
||
if (memSize < max) {
|
||
layer.msg(lan.bt.insatll_mem.replace('{1}', msg).replace('{2}', n), {
|
||
icon: 5,
|
||
});
|
||
}
|
||
}
|
||
var de = null;
|
||
$('.onekey').click(function () {
|
||
loginSign = true;
|
||
if (de) return;
|
||
var v = $(this).prev().find('input').eq(0).prop('checked') ? '1' : '0';
|
||
var r = $(this).parents('.rec-box-con').find('.rec-list li').length;
|
||
var n = '';
|
||
var q = '';
|
||
var p = '';
|
||
var x = '';
|
||
var s = '';
|
||
de = true;
|
||
for (var t = 0; t < r; t++) {
|
||
var w = $(this).parents('.rec-box-con').find('ul li').eq(t);
|
||
var u = w.find('input');
|
||
if (u.prop('checked')) {
|
||
n += u.attr('data-info') + ',';
|
||
}
|
||
}
|
||
q = n.split(',');
|
||
loadT = layer.msg(lan.bt.install_to, {
|
||
icon: 16,
|
||
time: 0,
|
||
shade: [0.3, '#000'],
|
||
});
|
||
|
||
install_plugin(q);
|
||
|
||
function install_plugin(q) {
|
||
if (!q[0]) return;
|
||
p = q[0].split(' ')[0].toLowerCase();
|
||
x = q[0].split(' ')[1];
|
||
if (p == 'pure-ftpd') p = 'pureftpd';
|
||
if (p == 'php') p = 'php-' + x;
|
||
if (p == 'model-server') p = 'dns_manager';
|
||
if (p == 'mail-server') p = 'mail_sys';
|
||
|
||
s = 'sName=' + p + '&version=' + x + '&type=' + v + '&id=' + (t + 1);
|
||
bt.send('install_plugin', 'plugin/install_plugin', s, function () {
|
||
q.splice(0, 1);
|
||
install_plugin(q);
|
||
});
|
||
}
|
||
|
||
layer.close(loadT);
|
||
layer.close(k);
|
||
setTimeout(function () {
|
||
GetTaskCount();
|
||
}, 2000);
|
||
layer.msg(lan.bt.install_ok, {
|
||
icon: 1,
|
||
});
|
||
|
||
var shouldListenCloseEvent = true; // 控制是否监听第一个弹框关闭事件的标志变量
|
||
|
||
setTimeout(function () {
|
||
task();
|
||
}, 1000);
|
||
|
||
setTimeout(function () {
|
||
var isLoginActivityShown = localStorage.getItem('loginActivityShown');
|
||
if (!isLoginActivityShown) {
|
||
loginActivity();
|
||
}
|
||
}, 1000);
|
||
|
||
// 监听第一个弹框的关闭事件 暂时注释注册赠送7天授权活动 4-20
|
||
// $(document).on('click', '.layui-layer-close', function () {
|
||
// setTimeout(function () {
|
||
// if (shouldListenCloseEvent === true) {
|
||
// bt.pub.get_user_info(function (udata) {
|
||
// if (!udata.status) {
|
||
// if (!isLoginActivityShown) {
|
||
// loginActivity();
|
||
// }
|
||
// shouldListenCloseEvent = false;
|
||
// }
|
||
// });
|
||
// }
|
||
// }, 1000);
|
||
// });
|
||
});
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.weixin = {
|
||
settiming: '',
|
||
relHeight: 500,
|
||
relWidth: 500,
|
||
userLength: '',
|
||
get_user_info: function (callback) {
|
||
bt.send(
|
||
'get_user_info',
|
||
'panel_wxapp/get_user_info',
|
||
{},
|
||
function (rdata) {
|
||
if (callback) callback(rdata);
|
||
},
|
||
1
|
||
);
|
||
},
|
||
init: function () {
|
||
var _this = this;
|
||
$('.layui-layer-page').css('display', 'none');
|
||
$('.layui-layer-page').width(_this.relWidth);
|
||
$('.layui-layer-page').height(_this.relHeight);
|
||
$('.bt-w-menu').height(_this.relWidth - 1 - $('.layui-layer-title').height());
|
||
var width = $(document).width();
|
||
var height = $(document).height();
|
||
var boxwidth = width / 2 - _this.relWidth / 2;
|
||
var boxheight = height / 2 - _this.relHeight / 2;
|
||
$('.layui-layer-page').css({
|
||
left: boxwidth + 'px',
|
||
top: boxheight + 'px',
|
||
});
|
||
$('.boxConter,.layui-layer-page').css('display', 'block');
|
||
$('.layui-layer-close').click(function (event) {
|
||
window.clearInterval(_this.settiming);
|
||
});
|
||
this.get_user_details();
|
||
$('.iconCode').hide();
|
||
$('.personalDetails').show();
|
||
},
|
||
// 获取二维码
|
||
get_qrcode: function () {
|
||
var _this = this;
|
||
var qrLoading = bt.load(lan.config.config_qrcode);
|
||
|
||
bt.send('blind_qrcode', 'panel_wxapp/blind_qrcode', {}, function (res) {
|
||
qrLoading.close();
|
||
if (res.status) {
|
||
$('#QRcode').empty();
|
||
$('#QRcode').qrcode({
|
||
render: 'canvas', //也可以替换为table
|
||
width: 200,
|
||
height: 200,
|
||
text: res.msg,
|
||
});
|
||
_this.settiming = setInterval(function () {
|
||
_this.verify_binding();
|
||
}, 2000);
|
||
} else {
|
||
bt.msg(res);
|
||
}
|
||
});
|
||
},
|
||
// 获取用户信息
|
||
get_user_details: function (type) {
|
||
var _this = this;
|
||
var conter = '';
|
||
_this.get_user_info(function (res) {
|
||
clearInterval(_this.settiming);
|
||
if (!res.status) {
|
||
res.time = 3000;
|
||
bt.msg(res);
|
||
|
||
$('.iconCode').hide();
|
||
return false;
|
||
}
|
||
if (JSON.stringify(res.msg) == '{}') {
|
||
if (type) {
|
||
bt.msg({ msg: lan.config.qrcode_no_list, icon: 2 });
|
||
} else {
|
||
_this.get_qrcode();
|
||
}
|
||
$('.iconCode').show();
|
||
$('.personalDetails').hide();
|
||
return false;
|
||
}
|
||
$('.iconCode').hide();
|
||
$('.personalDetails').show();
|
||
var datas = res.msg;
|
||
for (var item in datas) {
|
||
conter +=
|
||
'<li class="item">\
|
||
<div class="head_img"><img src="' +
|
||
datas[item].avatarUrl +
|
||
'" title="' +
|
||
lan.public_backup.user_img +
|
||
'" /></div>\
|
||
<div class="nick_name"><span>' +
|
||
lan.public_backup.nick_name +
|
||
'</span><span class="nick"></span>' +
|
||
datas[item].nickName +
|
||
'</div>\
|
||
<div class="cancelBind">\
|
||
<a href="javascript:;" class="btlink" title="' +
|
||
lan.public_backup.cancel_wechat_bind +
|
||
'" onclick="bt.weixin.cancel_bind(' +
|
||
item +
|
||
')">' +
|
||
lan.public_backup.cancel_bind +
|
||
'</a>\
|
||
</div>\
|
||
</li>';
|
||
}
|
||
conter +=
|
||
'<li class="item addweChat" style="height:45px;"><a href="javascript:;" class="btlink" onclick="bt.weixin.add_wx_view()"><span class="glyphicon glyphicon-plus"></span>' +
|
||
lan.public_backup.add_account_bind +
|
||
'</a></li>';
|
||
$('.userList').empty().append(conter);
|
||
});
|
||
},
|
||
// 添加绑定视图
|
||
add_wx_view: function () {
|
||
$('.iconCode').show();
|
||
$('.personalDetails').hide();
|
||
this.get_qrcode();
|
||
},
|
||
// 取消当前绑定
|
||
cancel_bind: function (uid) {
|
||
var _this = this;
|
||
var bdinding = layer.confirm(
|
||
lan.public_backup.unbind_account,
|
||
{
|
||
btn: [lan.public_backup.confirm, lan.public_backup.cancel],
|
||
icon: 3,
|
||
title: lan.public_backup.unbind,
|
||
},
|
||
function () {
|
||
bt.send('blind_del', 'panel_wxapp/blind_del', { uid: uid }, function (res) {
|
||
bt.msg(res);
|
||
_this.get_user_details();
|
||
});
|
||
},
|
||
function () {
|
||
layer.close(bdinding);
|
||
}
|
||
);
|
||
},
|
||
// 监听是否绑定
|
||
verify_binding: function () {
|
||
var _this = this;
|
||
bt.send('blind_result', 'panel_wxapp/blind_result', {}, function (res) {
|
||
if (res) {
|
||
bt.msg({ status: true, msg: lan.public_backup.bind_success });
|
||
clearInterval(_this.settiming);
|
||
_this.get_user_details();
|
||
}
|
||
});
|
||
},
|
||
open_wxapp: function () {
|
||
var rhtml =
|
||
'<div class="boxConter" style="display: none">\
|
||
<div class="iconCode" >\
|
||
<div class="box-conter">\
|
||
<div id="QRcode"></div>\
|
||
<div class="codeTip">\
|
||
<ul>\
|
||
<li>1、' +
|
||
lan.public_backup.open_bt_small_app +
|
||
'<span class="btlink weChat">' +
|
||
lan.public_backup.app_qr_core +
|
||
'<div class="weChatSamll"><img src="https://app.example.com/static/app.png"></div></span></li>\
|
||
<li>2、' +
|
||
lan.public_backup.scan_qr_core +
|
||
'</li>\
|
||
</ul>\
|
||
<span><a href="javascript:;" title="' +
|
||
lan.public_backup.return_bind_list +
|
||
'" class="btlink" style="margin: 0 auto" onclick="bt.weixin.get_user_details(true)">' +
|
||
lan.public_backup.read_bind_list +
|
||
'</a></span>\
|
||
</div>\
|
||
</div>\
|
||
</div>\
|
||
<div class="personalDetails" style="display: none">\
|
||
<ul class="userList"></ul>\
|
||
</div>\
|
||
</div>';
|
||
|
||
bt.open({
|
||
type: 1,
|
||
title: lan.public_backup.bind_wechat,
|
||
area: '500px',
|
||
shadeClose: false,
|
||
content: rhtml,
|
||
});
|
||
bt.weixin.init();
|
||
},
|
||
};
|
||
|
||
bt.ftp = {
|
||
get_list: function (page, search, callback) {
|
||
if (page == undefined) page = 1;
|
||
search = search == undefined ? '' : search;
|
||
var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order') : '';
|
||
|
||
var data = 'tojs=ftp.get_list&table=ftps&limit=15&p=' + page + '&search=' + search + order;
|
||
bt.pub.get_data(data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
add: function (callback) {
|
||
bt.data.ftp.add.list[1].items[0].value = bt.get_random(16);
|
||
var bs = bt.render_form(bt.data.ftp.add, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
$('.path' + bs).val($('#defaultPath').text());
|
||
},
|
||
set_password: function (callback) {
|
||
var bs = bt.render_form(bt.data.ftp.set_password, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
return bs;
|
||
},
|
||
del: function (id, username, callback) {
|
||
var loading = bt.load(lan.get('del_all_task_the', [username]));
|
||
bt.send('DeleteUser', 'ftp/DeleteUser', { id: id, username: username }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_status: function (id, username, status, callback) {
|
||
var loadT = bt.load(lan.public.the);
|
||
var data = 'id=' + id + '&username=' + username + '&status=' + status;
|
||
bt.send('SetStatus', 'ftp/SetStatus', data, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
set_port: function (callback) {
|
||
var bs = bt.render_form(bt.data.ftp.set_port, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
return bs;
|
||
},
|
||
};
|
||
|
||
bt.recycle_bin = {
|
||
open_recycle_bin: function (type) {
|
||
if (type == undefined) type = 1;
|
||
bt.files.get_recycle_bin(type, function (rdata) {
|
||
var data = [];
|
||
switch (type) {
|
||
case 2:
|
||
data = rdata.dirs;
|
||
break;
|
||
case 3:
|
||
data = rdata.files;
|
||
break;
|
||
case 4:
|
||
case 5:
|
||
case 6:
|
||
for (var i = 0; i < rdata.files.length; i++) {
|
||
if (type == 6 && bt.contains(rdata.files[i].name, 'BTDB_')) {
|
||
data.push(rdata.files[i]);
|
||
} else {
|
||
if (type == 4 && bt.check_img(rdata.files[i].name)) {
|
||
data.push(rdata.files[i]);
|
||
} else if (type == 5 && !bt.check_img(rdata.files[i].name)) {
|
||
data.push(rdata.files[i]);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
data = rdata.dirs.concat(rdata.files);
|
||
break;
|
||
}
|
||
if ($('#tab_recycle_bin').length <= 0) {
|
||
bt.open({
|
||
type: 1,
|
||
skin: 'demo-class',
|
||
area: ['80%', '672px'],
|
||
title: lan.files.recycle_bin_title,
|
||
closeBtn: 2,
|
||
shift: 5,
|
||
shadeClose: false,
|
||
content:
|
||
'<div class="re-head">\
|
||
<div style="margin-left: 3px;" class="ss-text">\
|
||
<em>' +
|
||
lan.files.recycle_bin_on +
|
||
'</em>\
|
||
<div class="ssh-item">\
|
||
<input class="btswitch btswitch-ios" id="Set_Recycle_bin" type="checkbox" ' +
|
||
(rdata.status ? 'checked' : '') +
|
||
'>\
|
||
<label class="btswitch-btn" for="Set_Recycle_bin" onclick="bt.files.set_recycle_bin()"></label>\
|
||
</div>\
|
||
<em style="margin-left: 20px;">' +
|
||
lan.files.recycle_bin_on_db +
|
||
'</em>\
|
||
<div class="ssh-item">\
|
||
<input class="btswitch btswitch-ios" id="Set_Recycle_bin_db" type="checkbox" ' +
|
||
(rdata.status_db ? 'checked' : '') +
|
||
'>\
|
||
<label class="btswitch-btn" for="Set_Recycle_bin_db" onclick="bt.files.set_recycle_bin(1)"></label>\
|
||
</div>\
|
||
</div>\
|
||
<span style="line-height: 32px; margin-left: 30px;">' +
|
||
lan.files.recycle_bin_ps +
|
||
'</span>\
|
||
<button style="float: right" class="btn btn-default btn-sm" onclick="bt.recycle_bin.clear_recycle_bin();">' +
|
||
lan.files.recycle_bin_close +
|
||
'</button>\
|
||
</div>\
|
||
<div class="re-con">\
|
||
<div class="re-con-menu"></div>\
|
||
<div class="re-con-con">\
|
||
<div class="divtable">\
|
||
<table id="tab_recycle_bin" width="100%" class="table table-hover"></table>\
|
||
</div></div></div>',
|
||
});
|
||
}
|
||
|
||
setTimeout(function () {
|
||
var menus = [
|
||
{ title: lan.files.recycle_bin_type1, click: 'bt.recycle_bin.open_recycle_bin(1)' },
|
||
{ title: lan.files.recycle_bin_type2, click: 'bt.recycle_bin.open_recycle_bin(2)' },
|
||
{ title: lan.files.recycle_bin_type3, click: 'bt.recycle_bin.open_recycle_bin(3)' },
|
||
{ title: lan.files.recycle_bin_type4, click: 'bt.recycle_bin.open_recycle_bin(4)' },
|
||
{ title: lan.files.recycle_bin_type5, click: 'bt.recycle_bin.open_recycle_bin(5)' },
|
||
{ title: lan.files.recycle_bin_type6, click: 'bt.recycle_bin.open_recycle_bin(6)' },
|
||
];
|
||
var m_html = '';
|
||
for (var i = 0; i < menus.length; i++) {
|
||
var c = type == i + 1 ? 'class="on"' : '';
|
||
m_html += '<p ' + c + ' onclick="' + menus[i].click + '" >' + menus[i].title + '</p>';
|
||
}
|
||
$('.re-con-menu').html(m_html);
|
||
var _tab = bt.render({
|
||
table: '#tab_recycle_bin',
|
||
columns: [
|
||
{ field: 'name', title: lan.files.recycle_bin_th1 },
|
||
{ field: 'dname', title: lan.files.recycle_bin_th2 },
|
||
{
|
||
field: 'size',
|
||
title: lan.files.recycle_bin_th3,
|
||
templet: function (item) {
|
||
return bt.format_size(item.size);
|
||
},
|
||
},
|
||
{
|
||
field: 'time',
|
||
title: lan.files.recycle_bin_th4,
|
||
templet: function (item) {
|
||
return bt.format_data(item.time);
|
||
},
|
||
},
|
||
{
|
||
field: 'opt',
|
||
title: lan.files.recycle_bin_th5,
|
||
align: 'right',
|
||
templet: function (item) {
|
||
var opt = '<a class="btlink" href="javascript:;" onclick="bt.recycle_bin.re_recycle_bin(\'' + item.rname + "'," + type + ')">' + lan.public_backup.recover + '</a> | ';
|
||
opt += '<a class="btlink" href="javascript:;" onclick="bt.recycle_bin.del_recycle_bin(\'' + item.rname + "'," + type + ')">' + lan.public_backup.permanent_delete + '</a>';
|
||
return opt;
|
||
},
|
||
},
|
||
],
|
||
data: data,
|
||
});
|
||
}, 100);
|
||
});
|
||
},
|
||
clear_recycle_bin: function () {
|
||
var _this = this;
|
||
bt.files.clear_recycle_bin(function (rdata) {
|
||
_this.open_recycle_bin(1);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
del_recycle_bin: function (path, type) {
|
||
var _this = this;
|
||
bt.files.del_recycle_bin(path, function (rdata) {
|
||
if (rdata.status) _this.open_recycle_bin(type);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
re_recycle_bin: function (path, type) {
|
||
var _this = this;
|
||
bt.files.re_recycle_bin(path, function (rdata) {
|
||
if (rdata.status) _this.open_recycle_bin(type);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.files = {
|
||
get_path: function () {
|
||
path = path = bt.get_cookie('Path');
|
||
if (!path) {
|
||
bt.msg({ msg: lan.get('lack_param', ['response']) });
|
||
return;
|
||
}
|
||
},
|
||
get_files: function (Path, searchV, callback) {
|
||
var searchtype = Path;
|
||
if (isNaN(Path)) {
|
||
var p = '1';
|
||
} else {
|
||
var p = Path;
|
||
Path = bt.get_cookie('Path');
|
||
}
|
||
var search = '';
|
||
if (searchV.length > 1 && searchtype == '1') {
|
||
search = '&search=' + searchV;
|
||
}
|
||
var showRow = bt.get_cookie('showRow');
|
||
if (!showRow) showRow = '500';
|
||
var totalSize = 0;
|
||
var loadT = bt.load(lan.public.the);
|
||
bt.send('get_files', 'files/GetDir', 'tojs=GetFiles&p=' + p + '&showRow=' + showRow + search + '&path=' + Path, function (rdata) {
|
||
loadT.close();
|
||
//bt.set_cookie('Path',rdata.PATH);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_recycle_bin: function (type, callback) {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('Get_Recycle_bin', 'files/Get_Recycle_bin', {}, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
re_recycle_bin: function (path, callback) {
|
||
bt.confirm({ msg: lan.files.recycle_bin_re_msg, title: lan.files.recycle_bin_re_title }, function () {
|
||
var loadT = bt.load(lan.files.recycle_bin_re_the);
|
||
bt.send('Re_Recycle_bin', 'files/Re_Recycle_bin', 'path=' + path, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
del_recycle_bin: function (path, callback) {
|
||
bt.confirm({ msg: lan.files.recycle_bin_del_msg, title: lan.files.recycle_bin_del_title }, function () {
|
||
var loadT = bt.load(lan.files.recycle_bin_del_the);
|
||
bt.send('Re_Recycle_bin', 'files/Del_Recycle_bin', 'path=' + path, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
clear_recycle_bin: function (callback) {
|
||
bt.confirm({ msg: lan.files.recycle_bin_close_msg, title: lan.files.recycle_bin_close }, function () {
|
||
var loadT = bt.load("<div class='myspeed'>" + lan.files.recycle_bin_close_the + '</div>');
|
||
bt.send('Re_Recycle_bin', 'files/Close_Recycle_bin', {}, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
set_recycle_bin: function (db) {
|
||
var loadT = bt.load(lan.public.the);
|
||
var data = {};
|
||
if (db) data = { db: db };
|
||
bt.send('Recycle_bin', 'files/Recycle_bin', data, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
rename: function (fileName, type, callback) {
|
||
if (type == undefined) type = 0;
|
||
_this = this;
|
||
path = _this.get_path();
|
||
if (type) {
|
||
var newFileName = path + '/' + $('#newFileName').val();
|
||
var oldFileName = path + '/' + fileName;
|
||
var loading = bt.load(lan.public.the);
|
||
bt.send('MvFile', 'files/MvFile', 'sfile=' + oldFileName + '&dfile=' + newFileName, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
return;
|
||
}
|
||
bt.open({
|
||
type: 1,
|
||
shift: 5,
|
||
closeBtn: 2,
|
||
area: '320px',
|
||
title: lan.files.file_menu_rename,
|
||
content:
|
||
'<div class="bt-form pd20 pb70">\
|
||
<div class="line">\
|
||
<input type="text" class="bt-input-text" name="Name" id="newFileName" value="' +
|
||
fileName +
|
||
'" placeholder="' +
|
||
lan.files.file_name +
|
||
'" style="width:100%" />\
|
||
</div>\
|
||
<div class="bt-form-submit-btn">\
|
||
<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">' +
|
||
lan.public.close +
|
||
'</button>\
|
||
<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title">' +
|
||
lan.public.save +
|
||
'</button>\
|
||
</div>\
|
||
</div>',
|
||
});
|
||
setTimeout(function () {
|
||
$('#ReNameBtn').click(function () {
|
||
_this.rename(fileName, 1, callback);
|
||
});
|
||
$('#newFileName')
|
||
.focus()
|
||
.keyup(function (e) {
|
||
if (e.keyCode == 13) $('#ReNameBtn').click();
|
||
});
|
||
}, 100);
|
||
},
|
||
get_file_body: function (path, callback) {
|
||
bt.send('GetFileBody', 'files/GetFileBody', 'path=' + path, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_file_body: function (path, data, encoding, callback) {
|
||
var loading = bt.load(lan.site.saving_txt);
|
||
bt.send('SaveFileBody', 'files/SaveFileBody', { path: path, data: data, encoding: encoding }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_file: function (path, callback) {
|
||
bt.confirm({ msg: lan.get('recycle_bin_confirm', [fileName]), title: lan.files.del_file }, function () {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('del_file', 'files/DeleteFile', 'path=' + path, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
del_dir: function (path, callback) {
|
||
bt.confirm({ msg: lan.get('recycle_bin_confirm_dir', [fileName]), title: lan.files.del_file }, function () {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('DeleteDir', 'files/DeleteDir', 'path=' + path, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
cut_file: function (
|
||
fileName,
|
||
callback //裁剪
|
||
) {
|
||
bt.set_cookie('cutFileName', fileName);
|
||
bt.set_cookie('copyFileName', null);
|
||
bt.msg({ msg: lan.files.mv_ok, icon: 1, time: 1 });
|
||
if (callback) callback(rdata);
|
||
},
|
||
copy_file: function (fileName, callback) {
|
||
bt.set_cookie('cutFileName', null);
|
||
bt.set_cookie('copyFileName', fileName);
|
||
bt.msg({ msg: lan.files.copy_ok, icon: 1, time: 1 });
|
||
if (callback) callback(rdata);
|
||
},
|
||
paste_file: function (
|
||
fileName,
|
||
callback //粘贴
|
||
) {
|
||
_this = this;
|
||
path = _this.get_path();
|
||
var copyName = bt.get_cookie('copyFileName');
|
||
var cutName = bt.get_cookie('cutFileName');
|
||
var filename = copyName;
|
||
if (cutName != 'null' && cutName != undefined) filename = cutName;
|
||
filename = filename.split('/').pop();
|
||
|
||
bt.send('CheckExistsFiles', 'files/CheckExistsFiles', { dfile: path, filename: filename }, function (rdata) {
|
||
if (rdata.length > 0) {
|
||
var tbody = '';
|
||
for (var i = 0; i < rdata.length; i++) {
|
||
tbody += '<tr><td>' + rdata[i].filename + '</td><td>' + bt.format_size(rdata[i].size) + '</td><td>' + bt.format_data(rdata[i].mtime) + '</td></tr>';
|
||
}
|
||
var mbody =
|
||
'<div class="divtable"><table class="table table-hover" width="100%" border="0" cellpadding="0" cellspacing="0"><thead><th>' +
|
||
lan.bt.filename +
|
||
'</th><th>' +
|
||
lan.bt.file_size +
|
||
'</th><th>' +
|
||
lan.bt.etime +
|
||
'</th></thead>\
|
||
<tbody>' +
|
||
tbody +
|
||
'</tbody>\
|
||
</table></div>';
|
||
bt.show_confirm(bt.files.file_conver_msg, mbody, function () {
|
||
_this.paste_to(path, copyName, cutName, fileName, callback);
|
||
});
|
||
} else {
|
||
_this.paste_to(path, copyName, cutName, fileName, callback);
|
||
}
|
||
});
|
||
},
|
||
paste_to: function (path, copyName, cutName, fileName, callback) {
|
||
if (copyName != 'null' && copyName != undefined) {
|
||
var loading = bt.msg({ msg: lan.files.copy_the, icon: 16 });
|
||
bt.send('CopyFile', 'files/CopyFile', 'sfile=' + copyName + '&dfile=' + path + '/' + fileName, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
bt.set_cookie('copyFileName', null);
|
||
bt.set_cookie('cutFileName', null);
|
||
return;
|
||
}
|
||
|
||
if (cutName != 'null' && cutName != undefined) {
|
||
var loading = bt.msg({ msg: lan.files.copy_the, icon: 16 });
|
||
bt.send('MvFile', 'files/MvFile', 'sfile=' + copyName + '&dfile=' + path + '/' + fileName, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
bt.set_cookie('copyFileName', null);
|
||
bt.set_cookie('cutFileName', null);
|
||
return;
|
||
}
|
||
},
|
||
zip: function (dirName, submits, callback) {
|
||
_this = this;
|
||
if (submits != undefined) {
|
||
if (dirName.indexOf(',') == -1) {
|
||
tmp = $('#sfile').val().split('/');
|
||
sfile = tmp[tmp.length - 1];
|
||
} else {
|
||
sfile = dirName;
|
||
}
|
||
dfile = $('#dfile').val();
|
||
layer.closeAll();
|
||
var loading = bt.load(lan.files.zip_the);
|
||
bt.send('Zip', 'files/Zip', 'sfile=' + sfile + '&dfile=' + dfile + '&type=tar&path=' + path, function (rdata) {
|
||
loading.close();
|
||
if (rdata == null || rdata == undefined) {
|
||
bt.msg({ msg: lan.files.zip_ok, icon: 1 });
|
||
if (callback) callback(rdata);
|
||
return;
|
||
}
|
||
bt.msg(rdata);
|
||
if (rdata.status) if (callback) callback(rdata);
|
||
});
|
||
return;
|
||
}
|
||
var ext = '.zip';
|
||
if (bt.os == 'Linux') ext = '.tar.gz';
|
||
|
||
param = dirName;
|
||
if (dirName.indexOf(',') != -1) {
|
||
tmp = path.split('/');
|
||
dirName = path + '/' + tmp[tmp.length - 1];
|
||
}
|
||
bt.open({
|
||
type: 1,
|
||
shift: 5,
|
||
closeBtn: 2,
|
||
area: '650px',
|
||
title: lan.files.zip_title,
|
||
content:
|
||
'<div class="bt-form pd20 pb70">' +
|
||
'<div class="line noborder">' +
|
||
'<input type="text" class="form-control" id="sfile" value="' +
|
||
param +
|
||
'" placeholder="" style="display:none" />' +
|
||
'<span>' +
|
||
lan.files.zip_to +
|
||
'</span><input type="text" class="bt-input-text" id="dfile" value="' +
|
||
dirName +
|
||
ext +
|
||
'" placeholder="' +
|
||
lan.files.zip_to +
|
||
'" style="width: 75%; display: inline-block; margin: 0px 10px 0px 20px;" /><span class="glyphicon glyphicon-folder-open cursor" onclick="ChangePath(\'dfile\')"></span>' +
|
||
'</div>' +
|
||
'<div class="bt-form-submit-btn">' +
|
||
'<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">' +
|
||
lan.public.close +
|
||
'</button>' +
|
||
'<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title"' +
|
||
lan.files.file_menu_zip +
|
||
'</button>' +
|
||
'</div>' +
|
||
'</div>',
|
||
});
|
||
|
||
setTimeout(function () {
|
||
$('#dfile').change(function () {
|
||
var dfile = bt.rtrim($(this).val(), '/');
|
||
if (bt.check_zip(dfile) === -1) {
|
||
dfile += ext;
|
||
$(this).val(dfile);
|
||
}
|
||
});
|
||
$('#ReNameBtn').click(function () {
|
||
_this.zip(param, 1, callback);
|
||
});
|
||
}, 100);
|
||
},
|
||
un_zip: function (
|
||
fileName,
|
||
type,
|
||
callback // type: zip|tar
|
||
) {
|
||
_this = this;
|
||
if (type.length == 3) {
|
||
var sfile = encodeURIComponent($('#sfile').val());
|
||
var dfile = encodeURIComponent($('#dfile').val());
|
||
var password = encodeURIComponent($('#unpass').val());
|
||
coding = $("select[name='coding']").val();
|
||
layer.closeAll();
|
||
var loading = bt.load(lan.files.unzip_the);
|
||
bt.send('UnZip', 'files/UnZip', 'sfile=' + sfile + '&dfile=' + dfile + '&type=' + type + '&coding=' + coding + '&password=' + password, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
return;
|
||
}
|
||
var path = bt.get_file_path(fileName);
|
||
type = type == 1 ? 'tar' : 'zip';
|
||
var umpass = '';
|
||
if (type == 'zip') {
|
||
umpass =
|
||
'<div class="line"><span class="tname">' +
|
||
lan.files.zip_pass_title +
|
||
'</span><input type="text" class="bt-input-text" id="unpass" value="" placeholder="' +
|
||
lan.files.zip_pass_msg +
|
||
'" style="width:330px" /></div>';
|
||
}
|
||
bt.open({
|
||
type: 1,
|
||
shift: 5,
|
||
closeBtn: 2,
|
||
area: '490px',
|
||
title: lan.files.unzip_title,
|
||
content:
|
||
'<div class="bt-form pd20 pb70">' +
|
||
'<div class="line unzipdiv">' +
|
||
'<span class="tname">' +
|
||
lan.files.unzip_name +
|
||
'</span><input type="text" class="bt-input-text" id="sfile" value="' +
|
||
fileName +
|
||
'" placeholder="' +
|
||
lan.files.unzip_name_title +
|
||
'" style="width:330px" /></div>' +
|
||
'<div class="line"><span class="tname">' +
|
||
lan.files.unzip_to +
|
||
'</span><input type="text" class="bt-input-text" id="dfile" value="' +
|
||
path +
|
||
'" placeholder="' +
|
||
lan.files.unzip_to +
|
||
'" style="width:330px" /></div>' +
|
||
umpass +
|
||
'<div class="line"><span class="tname">' +
|
||
lan.files.unzip_coding +
|
||
'</span><select class="bt-input-text" name="coding">' +
|
||
'<option value="UTF-8">UTF-8</option>' +
|
||
'<option value="gb18030">GBK</option>' +
|
||
'</select>' +
|
||
'</div>' +
|
||
'<div class="bt-form-submit-btn">' +
|
||
'<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">' +
|
||
lan.public.close +
|
||
'</button>' +
|
||
'<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title" >' +
|
||
lan.files.file_menu_unzip +
|
||
'</button>' +
|
||
'</div>' +
|
||
'</div>',
|
||
});
|
||
setTimeout(function () {
|
||
$('#ReNameBtn').click(function () {
|
||
_this.un_zip(fileName, type, callback);
|
||
});
|
||
}, 100);
|
||
},
|
||
show_img: function (fileName) {
|
||
var imgUrl = '/download?filename=' + fileName;
|
||
bt.open({
|
||
type: 1,
|
||
closeBtn: 2,
|
||
title: false,
|
||
area: '500px',
|
||
shadeClose: true,
|
||
content: '<div class="showpicdiv"><img width="100%" src="' + imgUrl + '"></div>',
|
||
});
|
||
$('.layui-layer').css('top', '30%');
|
||
},
|
||
get_files_bytes: function (fileName, fileSize) {
|
||
window.open('/download?filename=' + encodeURIComponent(fileName));
|
||
},
|
||
upload_files: function () {
|
||
path = this.get_path();
|
||
bt.open({
|
||
type: 1,
|
||
closeBtn: 2,
|
||
title: lan.files.up_title,
|
||
area: ['500px', '500px'],
|
||
shadeClose: false,
|
||
content:
|
||
'<div class="fileUploadDiv"><input type="hidden" id="input-val" value="' +
|
||
path +
|
||
'" />\
|
||
<input type="file" id="file_input" multiple="true" autocomplete="off" />\
|
||
<button type="button" id="opt" autocomplete="off">' +
|
||
lan.files.up_add +
|
||
'</button>\
|
||
<button type="button" id="up" autocomplete="off" >' +
|
||
lan.files.up_start +
|
||
'</button>\
|
||
<span id="totalProgress" style="position: absolute;top: 7px;right: 147px;"></span>\
|
||
<span style="float:right;margin-top: 9px;">\
|
||
<font>' +
|
||
lan.files.up_coding +
|
||
':</font>\
|
||
<select id="fileCodeing" >\
|
||
<option value="byte">' +
|
||
lan.files.up_bin +
|
||
'</option>\
|
||
<option value="utf-8">UTF-8</option>\
|
||
<option value="gb18030">GB2312</option>\
|
||
</select>\
|
||
</span>\
|
||
<button type="button" id="filesClose" autocomplete="off" onClick="layer.closeAll()" >' +
|
||
lan.public.close +
|
||
'</button>\
|
||
<ul id="up_box"></ul></div>',
|
||
});
|
||
UploadStart();
|
||
},
|
||
set_chmod: function (action, fileName, callback) {
|
||
_this = this;
|
||
if (action == 1) {
|
||
var chmod = $('#access').val();
|
||
var chown = $('#chown').val();
|
||
var data = 'filename=' + fileName + '&user=' + chown + '&access=' + chmod;
|
||
var loadT = bt.load(lan.public.config);
|
||
bt.send('SetFileAccess', 'files/SetFileAccess', data, function (rdata) {
|
||
loadT.close();
|
||
if (rdata.status) layer.closeAll();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
return;
|
||
}
|
||
|
||
var toExec = fileName == lan.files.all ? 'Batch(3,1)' : "_this.set_chmod(1,'" + fileName + "',callback)";
|
||
|
||
bt.send('GetFileAccess', 'files/GetFileAccess', 'filename=' + fileName, function (rdata) {
|
||
if (bt.os == 'Linux') {
|
||
bt.open({
|
||
type: 1,
|
||
title: lan.files.set_auth + '[' + fileName + ']',
|
||
area: '400px',
|
||
shadeClose: false,
|
||
content:
|
||
'<div class="setchmod bt-form ptb15 pb70">\
|
||
<fieldset>\
|
||
<legend>' +
|
||
lan.files.file_own +
|
||
'</legend>\
|
||
<p><input type="checkbox" id="owner_r" />' +
|
||
lan.files.file_read +
|
||
'</p>\
|
||
<p><input type="checkbox" id="owner_w" />' +
|
||
lan.files.file_write +
|
||
'</p>\
|
||
<p><input type="checkbox" id="owner_x" />' +
|
||
lan.files.file_exec +
|
||
'</p>\
|
||
</fieldset>\
|
||
<fieldset>\
|
||
<legend>' +
|
||
lan.files.file_group +
|
||
'</legend>\
|
||
<p><input type="checkbox" id="group_r" />' +
|
||
lan.files.file_read +
|
||
'</p>\
|
||
<p><input type="checkbox" id="group_w" />' +
|
||
lan.files.file_write +
|
||
'</p>\
|
||
<p><input type="checkbox" id="group_x" />' +
|
||
lan.files.file_exec +
|
||
'</p>\
|
||
</fieldset>\
|
||
<fieldset>\
|
||
<legend>' +
|
||
lan.files.file_public +
|
||
'</legend>\
|
||
<p><input type="checkbox" id="public_r" />' +
|
||
lan.files.file_read +
|
||
'</p>\
|
||
<p><input type="checkbox" id="public_w" />' +
|
||
lan.files.file_write +
|
||
'</p>\
|
||
<p><input type="checkbox" id="public_x" />' +
|
||
lan.files.file_exec +
|
||
'</p>\
|
||
</fieldset>\
|
||
<div class="setchmodnum"><input class="bt-input-text" type="text" id="access" maxlength="3" value="' +
|
||
rdata.chmod +
|
||
'">' +
|
||
lan.files.file_menu_auth +
|
||
',\
|
||
<span>' +
|
||
lan.files.file_own +
|
||
'\
|
||
<select id="chown" class="bt-input-text">\
|
||
<option value="www" ' +
|
||
(rdata.chown == 'www' ? 'selected="selected"' : '') +
|
||
'>www</option>\
|
||
<option value="mysql" ' +
|
||
(rdata.chown == 'mysql' ? 'selected="selected"' : '') +
|
||
'>mysql</option>\
|
||
<option value="root" ' +
|
||
(rdata.chown == 'root' ? 'selected="selected"' : '') +
|
||
'>root</option>\
|
||
</select></span></div>\
|
||
<div class="bt-form-submit-btn">\
|
||
<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">' +
|
||
lan.public.close +
|
||
'</button>\
|
||
<button type="button" class="btn btn-success btn-sm btn-title" onclick="' +
|
||
toExec +
|
||
'" >' +
|
||
lan.public.ok +
|
||
'</button>\
|
||
</div>\
|
||
</div>',
|
||
});
|
||
|
||
settimeout(function () {
|
||
_this.on_linux_access();
|
||
$('#access').keyup(function () {
|
||
_this.on_linux_access();
|
||
});
|
||
|
||
$('input[type=checkbox]').change(function () {
|
||
var idName = ['owner', 'group', 'public'];
|
||
var onacc = '';
|
||
for (var n = 0; n < idName.length; n++) {
|
||
var access = 0;
|
||
access += $('#' + idName[n] + '_x').prop('checked') ? 1 : 0;
|
||
access += $('#' + idName[n] + '_w').prop('checked') ? 2 : 0;
|
||
access += $('#' + idName[n] + '_r').prop('checked') ? 4 : 0;
|
||
onacc += access;
|
||
}
|
||
$('#access').val(onacc);
|
||
});
|
||
}, 100);
|
||
}
|
||
});
|
||
},
|
||
on_linux_access: function () {
|
||
var access = $('#access').val();
|
||
var idName = ['owner', 'group', 'public'];
|
||
for (var n = 0; n < idName.length; n++) {
|
||
$('#' + idName[n] + '_x').prop('checked', false);
|
||
$('#' + idName[n] + '_w').prop('checked', false);
|
||
$('#' + idName[n] + '_r').prop('checked', false);
|
||
}
|
||
for (var i = 0; i < access.length; i++) {
|
||
var onacc = access.substr(i, 1);
|
||
if (i > idName.length) continue;
|
||
if (onacc > 7) $('#access').val(access.substr(0, access.length - 1));
|
||
switch (onacc) {
|
||
case '1':
|
||
$('#' + idName[i] + '_x').prop('checked', true);
|
||
break;
|
||
case '2':
|
||
$('#' + idName[i] + '_w').prop('checked', true);
|
||
break;
|
||
case '3':
|
||
$('#' + idName[i] + '_x').prop('checked', true);
|
||
$('#' + idName[i] + '_w').prop('checked', true);
|
||
break;
|
||
case '4':
|
||
$('#' + idName[i] + '_r').prop('checked', true);
|
||
break;
|
||
case '5':
|
||
$('#' + idName[i] + '_r').prop('checked', true);
|
||
$('#' + idName[i] + '_x').prop('checked', true);
|
||
break;
|
||
case '6':
|
||
$('#' + idName[i] + '_r').prop('checked', true);
|
||
$('#' + idName[i] + '_w').prop('checked', true);
|
||
break;
|
||
case '7':
|
||
$('#' + idName[i] + '_r').prop('checked', true);
|
||
$('#' + idName[i] + '_w').prop('checked', true);
|
||
$('#' + idName[i] + '_x').prop('checked', true);
|
||
break;
|
||
}
|
||
}
|
||
},
|
||
on_win_access: function () { },
|
||
get_right_click: function (type, path, name) {
|
||
_this = this;
|
||
var displayZip = bt.check_zip(type);
|
||
var options = {
|
||
items: [
|
||
{
|
||
text: lan.files.file_menu_copy,
|
||
onclick: function () {
|
||
_this.copy_file(path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_mv,
|
||
onclick: function () {
|
||
_this.cut_file(path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_rename,
|
||
onclick: function () {
|
||
_this.rename(path, name);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_auth,
|
||
onclick: function () {
|
||
_this.set_chmod(0, path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_zip,
|
||
onclick: function () {
|
||
_this.zip(path);
|
||
},
|
||
},
|
||
],
|
||
};
|
||
if (type == 'dir') {
|
||
options.items.push({
|
||
text: lan.files.file_menu_del,
|
||
onclick: function () {
|
||
_this.del_dir(path);
|
||
},
|
||
});
|
||
} else if (isText(type)) {
|
||
options.items.push(
|
||
{
|
||
text: lan.files.file_menu_edit,
|
||
onclick: function () {
|
||
bt.on_edit_file(0, path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_down,
|
||
onclick: function () {
|
||
_this.get_files_bytes(path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_del,
|
||
onclick: function () {
|
||
_this.del_file(path);
|
||
},
|
||
}
|
||
);
|
||
} else if (displayZip != -1) {
|
||
options.items.push(
|
||
{
|
||
text: lan.files.file_menu_unzip,
|
||
onclick: function () {
|
||
_this.un_zip(path, displayZip);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_down,
|
||
onclick: function () {
|
||
_this.get_files_bytes(path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_del,
|
||
onclick: function () {
|
||
_this.del_file(path);
|
||
},
|
||
}
|
||
);
|
||
} else if (isImage(type)) {
|
||
options.items.push(
|
||
{
|
||
text: lan.files.file_menu_img,
|
||
onclick: function () {
|
||
_this.show_img(path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_down,
|
||
onclick: function () {
|
||
_this.get_files_bytes(path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_del,
|
||
onclick: function () {
|
||
_this.del_file(path);
|
||
},
|
||
}
|
||
);
|
||
} else {
|
||
options.items.push(
|
||
{
|
||
text: lan.files.file_menu_down,
|
||
onclick: function () {
|
||
_this.get_files_bytes(path);
|
||
},
|
||
},
|
||
{
|
||
text: lan.files.file_menu_del,
|
||
onclick: function () {
|
||
_this.del_file(path);
|
||
},
|
||
}
|
||
);
|
||
}
|
||
return options;
|
||
},
|
||
get_dir_size: function (path, callback) {
|
||
if (!path) path = this.get_path();
|
||
// var loading = bt.load(lan.public.the);
|
||
bt.send('GetDirSize', 'files/GetDirSize', { path: path }, function (rdata) {
|
||
// loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
batch: function (type, access, callback) {
|
||
_this = this;
|
||
|
||
var el = document.getElementsByTagName('input');
|
||
var len = el.length;
|
||
var data = 'path=' + path + '&type=' + type;
|
||
var name = 'data';
|
||
|
||
var oldType = bt.get_cookie('BatchPaste');
|
||
|
||
for (var i = 0; i < len; i++) {
|
||
if (el[i].checked == true && el[i].value != 'on') {
|
||
data += '&' + name + '=' + el[i].value;
|
||
}
|
||
}
|
||
|
||
if (type == 3 && access == undefined) {
|
||
_this.set_chmod(0, lan.files.all);
|
||
return;
|
||
}
|
||
|
||
if (type < 3) bt.set_cookie('BatchSelected', '1');
|
||
bt.set_cookie('BatchPaste', type);
|
||
|
||
if (access == 1) {
|
||
var access = $('#access').val();
|
||
var chown = $('#chown').val();
|
||
data += '&access=' + access + '&user=' + chown;
|
||
layer.closeAll();
|
||
}
|
||
if (type == 4) {
|
||
AllDeleteFileSub(data, path);
|
||
bt.set_cookie('BatchPaste', oldType);
|
||
return;
|
||
}
|
||
|
||
if (type == 5) {
|
||
var names = '';
|
||
for (var i = 0; i < len; i++) {
|
||
if (el[i].checked == true && el[i].value != 'on') {
|
||
names += el[i].value + ',';
|
||
}
|
||
}
|
||
_this.zip(names);
|
||
return;
|
||
}
|
||
|
||
myloadT = bt.load("<div class='myspeed'>" + lan.public.the + '</div>');
|
||
setTimeout(function () {
|
||
getSpeed('.myspeed');
|
||
}, 1000);
|
||
bt.send('SetBatchData', 'files/SetBatchData', data, function (rdata) {
|
||
myloadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
download_file: function (action, callback) {
|
||
path = bt.get_cookie('Path');
|
||
if (action == 1) {
|
||
var fUrl = $('#mUrl').val();
|
||
fUrl = fUrl;
|
||
fpath = $('#dpath').val();
|
||
fname = $('#dfilename').val();
|
||
layer.closeAll();
|
||
loading = bt.load(lan.files.down_task);
|
||
bt.send('DownloadFile', 'files/DownloadFile', 'path=' + fpath + '&url=' + fUrl + '&filename=' + fname, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
return;
|
||
}
|
||
layer.open({
|
||
type: 1,
|
||
shift: 5,
|
||
closeBtn: 2,
|
||
area: '500px',
|
||
title: lan.files.down_title,
|
||
content:
|
||
'<form class="bt-form pd20 pb70">\
|
||
<div class="line">\
|
||
<span class="tname">' +
|
||
lan.files.down_url +
|
||
':</span><input type="text" class="bt-input-text" name="url" id="mUrl" value="" placeholder="' +
|
||
lan.files.down_url +
|
||
'" style="width:330px" />\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname ">' +
|
||
lan.files.down_to +
|
||
':</span><input type="text" class="bt-input-text" name="path" id="dpath" value="' +
|
||
path +
|
||
'" placeholder="' +
|
||
lan.files.down_to +
|
||
'" style="width:330px" />\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname">' +
|
||
lan.files.file_name +
|
||
':</span><input type="text" class="bt-input-text" name="filename" id="dfilename" value="" placeholder="' +
|
||
lan.files.down_save +
|
||
'" style="width:330px" />\
|
||
</div>\
|
||
<div class="bt-form-submit-btn">\
|
||
<button type="button" class="btn btn-danger btn-sm" onclick="layer.closeAll()">' +
|
||
lan.public.close +
|
||
'</button>\
|
||
<button type="button" id="dlok" class="btn btn-success btn-sm dlok" onclick="DownloadFile(1)">' +
|
||
lan.public.ok +
|
||
'</button>\
|
||
</div>\
|
||
</form>',
|
||
});
|
||
fly('dlok');
|
||
$('#mUrl').keyup(function () {
|
||
durl = $(this).val();
|
||
tmp = durl.split('/');
|
||
$('#dfilename').val(tmp[tmp.length - 1]);
|
||
});
|
||
},
|
||
};
|
||
// 任务管理器
|
||
bt.crontab = {
|
||
// 执行计划任务请求
|
||
start_task_send: function (id, name) {
|
||
var that = this,
|
||
loading = bt.load();
|
||
bt.send('start_task_send', 'crontab/StartTask', { id: id }, function (rdata) {
|
||
loading.close();
|
||
rdata.time = 2000;
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
|
||
// 删除计划任务
|
||
del_task_send: function (id, name) {
|
||
bt.show_confirm(lan.public_backup.del + '[' + name + ']', lan.public_backup.del_task, function () {
|
||
bt.send('del_task_send', 'crontab/DelCrontab', { id: id }, function (rdata) {
|
||
loading.close();
|
||
rdata.time = 2000;
|
||
bt.msg(rdata);
|
||
that.get_crontab_list();
|
||
});
|
||
});
|
||
},
|
||
|
||
// 设置计划任务状态
|
||
set_crontab_status: function (id, status, callback) {
|
||
var that = this,
|
||
loading = bt.load();
|
||
bt.confirm({ title: lan.public_backup.tips, msg: status ? lan.public_backup.stop_crontab : lan.public_backup.start_crontab }, function () {
|
||
bt.send('set_crontab_status', 'crontab/set_cron_status', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
|
||
// 编辑计划任务脚本
|
||
edit_crontab_file: function (echo) {
|
||
bt.pub.on_edit_file(0, '/www/server/cron/' + echo);
|
||
},
|
||
|
||
// 编辑计划任务
|
||
edit_crontab: function (id, data) {
|
||
var that = this,
|
||
loading = bt.load(lan.public_backup.submit_data);
|
||
bt.send('edit_crontab', 'crontab/modify_crond', data, function (rdata) {
|
||
loading.close();
|
||
if (rdata.status) {
|
||
// that.get_crontab_list();
|
||
layer.msg(rdata.msg, { icon: 1 });
|
||
} else {
|
||
layer.msg(rdata.msg, { icon: 2 });
|
||
}
|
||
});
|
||
},
|
||
|
||
// 获取计划任务日志
|
||
get_logs_crontab: function (id, name) {
|
||
var that = this;
|
||
bt.send('get_logs_crontab', 'crontab/GetLogs', { id: id }, function (rdata) {
|
||
if (!rdata.status) {
|
||
rdata.time = 1000;
|
||
bt.msg(rdata);
|
||
} else {
|
||
bt.open({
|
||
type: 1,
|
||
title: lan.public_backup.read_log + '-[' + name + ']',
|
||
area: ['700px', '520px'],
|
||
shadeClose: false,
|
||
closeBtn: 1,
|
||
content:
|
||
'<div class="setchmod bt-form pd20 pb70">' +
|
||
'<pre class="crontab-log" style="overflow: auto; border: 0px none; line-height:28px;padding: 15px; margin: 0px; height: 405px; background-color: rgb(51,51,51);color:#f1f1f1;font-family: "' +
|
||
lan.public_backup.microsoft_yahei +
|
||
'"">' +
|
||
(rdata.msg == '' ? lan.public_backup.log_empty : rdata.msg) +
|
||
'</pre>' +
|
||
'<div class="bt-form-submit-btn" style="margin-top: 0px;">' +
|
||
'<button type="button" class="layui-btn layui-btn-sm" onclick="bt.crontab.del_logs_crontab(' +
|
||
id +
|
||
')">' +
|
||
lan.public.empty +
|
||
'</button>' +
|
||
'<button type="button" class="layui-btn layui-btn-sm layui-btn-primary" onclick="layer.closeAll()">' +
|
||
lan.public.close +
|
||
'</button>' +
|
||
'</div>' +
|
||
'</div>',
|
||
});
|
||
setTimeout(function () {
|
||
var div = document.getElementsByClassName('crontab-log')[0];
|
||
div.scrollTop = div.scrollHeight;
|
||
}, 200);
|
||
}
|
||
});
|
||
},
|
||
|
||
// 删除计划任务日志
|
||
del_logs_crontab: function (id, name) {
|
||
var that = this,
|
||
loading = bt.load();
|
||
bt.send('del_logs_crontab', 'crontab/DelLogs', { id: id }, function (rdata) {
|
||
loading.close();
|
||
layer.closeAll();
|
||
rdata.time = 2000;
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
|
||
// 获取计划任务列表
|
||
get_crontab_list: function (status, callback) {
|
||
var that = this;
|
||
var loading = bt.load();
|
||
bt.send('get_crontab_list', 'crontab/GetCrontab', {}, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
|
||
// 获取站点和备份位置信息
|
||
get_data_list: function (type, name) {
|
||
var that = this;
|
||
bt.send('get_data_list', 'crontab/GetDataList', { type: type }, function (rdata) {
|
||
that.backupsList.siteList = [{ name: 'ALL', ps: lan.public_backup.all }];
|
||
that.backupsList.optList = [{ name: lan.public_backup.server_disk, value: 'localhost' }];
|
||
that.backupsList.siteList = that.backupsList.siteList.concat(rdata.data);
|
||
that.backupsList.optList = that.backupsList.optList.concat(rdata.orderOpt);
|
||
that.initFrom['crontab-name'] = name + '[' + that.backupsList.siteList[that.initFrom['crontab-site']].name + ']';
|
||
that.insert_control_from(that.initFrom['crontab-submit']);
|
||
});
|
||
},
|
||
|
||
// 添加计划任务请求
|
||
add_control_send: function (data) {
|
||
var that = this,
|
||
loading = bt.load(lan.public_backup.submit_data);
|
||
bt.send('addCrontab', 'crontab/AddCrontab', data, function (rdata) {
|
||
loading.close();
|
||
if (rdata.status) {
|
||
that.insert_control_from(true, true);
|
||
that.get_crontab_list();
|
||
layer.msg(rdata.msg, { icon: 1 });
|
||
} else {
|
||
layer.msg(rdata.msg, { icon: 2 });
|
||
}
|
||
});
|
||
},
|
||
get_crontab_find: function (id, callback) {
|
||
bt.send('get_crontab_find', 'crontab/get_crontab_find', { id: id }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.config = {
|
||
close_panel: function (callback) {
|
||
layer.confirm(
|
||
lan.config.close_panel_msg,
|
||
{
|
||
title: lan.config.close_panel_title,
|
||
closeBtn: 2,
|
||
icon: 13,
|
||
cancel: function () {
|
||
if (callback) callback(false);
|
||
},
|
||
},
|
||
function () {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('ClosePanel', 'config/ClosePanel', {}, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
function () {
|
||
if (callback) callback(false);
|
||
}
|
||
);
|
||
},
|
||
set_auto_update: function (callback) {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('AutoUpdatePanel', 'config/AutoUpdatePanel', {}, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
sync_data: function (callback) {
|
||
var loadT = bt.load(lan.config.config_sync);
|
||
bt.send('syncDate', 'config/syncDate', {}, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
save_config: function (data, callback) {
|
||
loading = bt.load(lan.config.config_save);
|
||
bt.send('setPanel', 'config/setPanel', data, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_template: function (template, callback) {
|
||
var loadT = bt.load(lan.public.the);
|
||
bt.send('SetTemplates', 'config/SetTemplates', { templates: template }, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_panel_ssl: function (status, callback) {
|
||
var msg = status
|
||
? lan.config.ssl_close_msg
|
||
: '<a style="font-weight: bolder;font-size: 16px;">' +
|
||
lan.config.ssl_open_ps +
|
||
'</a><li style="margin-top: 12px;color:red;">' +
|
||
lan.config.ssl_open_ps_1 +
|
||
'</li><li>' +
|
||
lan.config.ssl_open_ps_2 +
|
||
'</li><li>' +
|
||
lan.config.ssl_open_ps_3 +
|
||
'</li><p style="margin-top: 10px;"><input type="checkbox" id="checkSSL" /><label style="font-weight: 400;margin: -1px 5px 0px;" for="checkSSL">' +
|
||
lan.config.ssl_open_ps_4 +
|
||
'</label><a target="_blank" class="btlink" href="https://www.yakpanel.com/bbs/thread-4689-1-1.html" style="float: right;">' +
|
||
lan.config.ssl_open_ps_5 +
|
||
'</a></p>';
|
||
layer.confirm(
|
||
msg,
|
||
{
|
||
title: lan.config.ssl_title,
|
||
closeBtn: 2,
|
||
icon: 3,
|
||
area: '550px',
|
||
cancel: function () {
|
||
if (callback) {
|
||
if (status == 0) {
|
||
callback(false);
|
||
} else {
|
||
callback(true);
|
||
}
|
||
}
|
||
},
|
||
},
|
||
function () {
|
||
if (window.location.protocol.indexOf('https') == -1) {
|
||
if (!$('#checkSSL').prop('checked')) {
|
||
bt.msg({ msg: lan.config.ssl_ps, icon: 2 });
|
||
if (callback) callback(false);
|
||
}
|
||
}
|
||
var loadT = bt.load(lan.config.ssl_msg);
|
||
bt.send('SetPanelSSL', 'config/SetPanelSSL', {}, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
function () {
|
||
if (callback) {
|
||
if (status == 0) {
|
||
callback(false);
|
||
} else {
|
||
callback(true);
|
||
}
|
||
}
|
||
}
|
||
);
|
||
},
|
||
get_panel_ssl: function () {
|
||
_this = this;
|
||
loading = bt.load(lan.public_backup.get_cert);
|
||
bt.send('GetPanelSSL', 'config/GetPanelSSL', {}, function (cert) {
|
||
loading.close();
|
||
var certBody =
|
||
'<div class="tab-con">\
|
||
<div class="myKeyCon ptb15">\
|
||
<div class="ssl-con-key pull-left mr20">' +
|
||
lan.public_backup.key +
|
||
'(KEY)<br>\
|
||
<textarea id="key" class="bt-input-text">' +
|
||
cert.privateKey +
|
||
'</textarea>\
|
||
</div>\
|
||
<div class="ssl-con-key pull-left">' +
|
||
lan.public_backup.cret_format +
|
||
'<br>\
|
||
<textarea id="csr" class="bt-input-text">' +
|
||
cert.certPem +
|
||
'</textarea>\
|
||
</div>\
|
||
<div class="ssl-btn pull-left mtb15" style="width:100%">\
|
||
<button class="btn btn-success btn-sm" id="btn_submit">' +
|
||
lan.public_backup.save +
|
||
'</button>\
|
||
</div>\
|
||
</div>\
|
||
<ul class="help-info-text c7 pull-left">\
|
||
<li>' +
|
||
lan.public_backup.cret_help +
|
||
'<a href="https://www.yakpanel.com/bbs/thread-704-1-1.html" class="btlink" target="_blank">[' +
|
||
lan.public_backup.help +
|
||
']</a>。</li>\
|
||
<li>' +
|
||
lan.public_backup.cret_err +
|
||
'</li><li>' +
|
||
lan.public_backup.pem_format +
|
||
'</li>\
|
||
</ul>\
|
||
</div>';
|
||
bt.open({
|
||
type: 1,
|
||
area: '600px',
|
||
title: lan.public_backup.custom_panel_set,
|
||
closeBtn: 2,
|
||
shift: 5,
|
||
shadeClose: false,
|
||
content: certBody,
|
||
});
|
||
|
||
$('#btn_submit').click(function () {
|
||
key = $('#key').val();
|
||
csr = $('#csr').val();
|
||
_this.set_panel_ssl({ privateKey: key, certPem: csr });
|
||
});
|
||
});
|
||
},
|
||
set_panel_ssl: function (data, callback) {
|
||
var loadT = bt.load(lan.config.ssl_msg);
|
||
bt.send('SavePanelSSL', 'config/SavePanelSSL', data, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_username: function (type) {
|
||
if (type == 1) {
|
||
if (p1 == '' || p1.length < 3) {
|
||
bt.msg({ msg: lan.bt.user_len, icon: 2 });
|
||
return;
|
||
}
|
||
if (p1 != p2) {
|
||
bt.msg({ msg: lan.bt.user_err_re, icon: 2 });
|
||
return;
|
||
}
|
||
var checks = ['admin', 'root', 'admin123', '123456'];
|
||
if ($.inArray(p1, checks)) {
|
||
bt.msg({ msg: lan.public_backup.usually_user_ban, icon: 2 });
|
||
return;
|
||
}
|
||
bt.send('setUsername', 'config/setUsername', { username1: p1, username2: p2 }, function (rdata) {
|
||
if (rdata.status) {
|
||
layer.closeAll();
|
||
$("input[name='username_']").val(p1);
|
||
}
|
||
bt.msg(rdata);
|
||
});
|
||
return;
|
||
}
|
||
bt.open({
|
||
type: 1,
|
||
area: '290px',
|
||
title: lan.bt.user_title,
|
||
closeBtn: 2,
|
||
shift: 5,
|
||
shadeClose: false,
|
||
content:
|
||
"<div class='bt-form pd20 pb70'><div class='line'><span class='tname' style='width:100px;'>" +
|
||
lan.bt.user +
|
||
"</span><div class='info-r' style='margin-left:100px;'><input class='bt-input-text' type='text' name='password1' id='p1' value='' placeholder='" +
|
||
lan.bt.user_new +
|
||
"' style='width:100%'/></div></div><div class='line'><span class='tname' style='width:100px;'>" +
|
||
lan.bt.pass_re +
|
||
"</span><div class='info-r' style='margin-left:100px;'><input class='bt-input-text' type='text' name='password2' id='p2' value='' placeholder='" +
|
||
lan.bt.pass_re_title +
|
||
"' style='width:100%'/></div></div><div class='bt-form-submit-btn'><button type='button' class='btn btn-danger btn-sm' onclick=\"layer.closeAll()\">" +
|
||
lan.public.close +
|
||
"</button> <button type='button' class='btn btn-success btn-sm' onclick=\"bt.config.set_username(1)\">" +
|
||
lan.public.edit +
|
||
'</button></div></div>',
|
||
});
|
||
},
|
||
set_password: function (type) {
|
||
if (type == 1) {
|
||
p1 = $('#p1').val();
|
||
p2 = $('#p2').val();
|
||
if (p1 == '' || p1.length < 8) {
|
||
bt.msg({ msg: lan.bt.pass_err_len, icon: 2 });
|
||
return;
|
||
}
|
||
|
||
//准备弱口令匹配元素
|
||
var checks = ['admin888', '123123123', '12345678', '45678910', '87654321', 'asdfghjkl', 'password', 'qwerqwer'];
|
||
pchecks = 'abcdefghijklmnopqrstuvwxyz1234567890';
|
||
for (var i = 0; i < pchecks.length; i++) {
|
||
checks.push(pchecks[i] + pchecks[i] + pchecks[i] + pchecks[i] + pchecks[i] + pchecks[i] + pchecks[i] + pchecks[i]);
|
||
}
|
||
|
||
//检查弱口令
|
||
cps = p1.toLowerCase();
|
||
var isError = '';
|
||
for (var i = 0; i < checks.length; i++) {
|
||
if (cps == checks[i]) {
|
||
isError += '[' + checks[i] + '] ';
|
||
}
|
||
}
|
||
if (isError != '') {
|
||
bt.msg({ msg: lan.bt.pass_err + isError, icon: 2 });
|
||
return;
|
||
}
|
||
|
||
if (p1 != p2) {
|
||
bt.msg({ msg: lan.bt.pass_err_re, icon: 2 });
|
||
return;
|
||
}
|
||
bt.send('setPassword', 'config/setPassword', { password1: p1, password2: p2 }, function (rdata) {
|
||
layer.closeAll();
|
||
bt.msg(rdata);
|
||
});
|
||
return;
|
||
}
|
||
layer.open({
|
||
type: 1,
|
||
area: '290px',
|
||
title: lan.bt.pass_title,
|
||
closeBtn: 2,
|
||
shift: 5,
|
||
shadeClose: false,
|
||
content:
|
||
"<div class='bt-form pd20 pb70'><div class='line'><span class='tname'>" +
|
||
lan.public.pass +
|
||
"</span><div class='info-r'><input class='bt-input-text' type='text' name='password1' id='p1' value='' placeholder='" +
|
||
lan.bt.pass_new_title +
|
||
"' style='width:100%'/></div></div><div class='line'><span class='tname'>" +
|
||
lan.bt.pass_re +
|
||
"</span><div class='info-r'><input class='bt-input-text' type='text' name='password2' id='p2' value='' placeholder='" +
|
||
lan.bt.pass_re_title +
|
||
"' style='width:100%' /></div></div><div class='bt-form-submit-btn'><span style='float: left;' title='" +
|
||
lan.bt.pass_rep +
|
||
"' class='btn btn-default btn-sm' onclick='randPwd(10)'>" +
|
||
lan.bt.pass_rep_btn +
|
||
"</span><button type='button' class='btn btn-danger btn-sm' onclick=\"layer.closeAll()\">" +
|
||
lan.public.close +
|
||
"</button> <button type='button' class='btn btn-success btn-sm' onclick=\"bt.config.set_password(1)\">" +
|
||
lan.public.edit +
|
||
'</button></div></div>',
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.system = {
|
||
get_total: function (callback) {
|
||
bt.send('GetSystemTotal', 'system/GetSystemTotal', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_net: function (callback) {
|
||
bt.send('GetNetWork', 'system/GetNetWork', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_disk_list: function (callback) {
|
||
bt.send('GetDiskInfo', 'system/GetDiskInfo', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
re_memory: function (callback) {
|
||
bt.send('ReMemory', 'system/ReMemory', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
check_update: function (callback, check) {
|
||
var data = {};
|
||
if (check == undefined) data = { check: true };
|
||
if (check === false) data = {};
|
||
if (check) var load = bt.load(lan.index.update_get);
|
||
bt.send('UpdatePanel', 'ajax/UpdatePanel', data, function (rdata) {
|
||
if (check) load.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
to_update: function (callback) {
|
||
var load = bt.load(lan.index.update_the);
|
||
bt.send('UpdatePanel', 'ajax/UpdatePanel', { toUpdate: 'yes' }, function (rdata) {
|
||
load.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
reload_panel: function (callback) {
|
||
bt.send('ReWeb', 'system/ReWeb', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
rep_panel: function (callback) {
|
||
var loading = bt.load(lan.index.rep_panel_the);
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: 'system?action=RepPanel',
|
||
error: function (err) {
|
||
setTimeout(() => {
|
||
loading.close();
|
||
bt.system.reload_panel(function () {
|
||
location.reload();
|
||
});
|
||
}, 1000 * 60 * 5);
|
||
},
|
||
success: function (rdata) {
|
||
loading.close();
|
||
if (rdata) {
|
||
if (callback) callback({ status: rdata, msg: lan.index.rep_panel_ok });
|
||
bt.system.reload_panel();
|
||
}
|
||
},
|
||
});
|
||
},
|
||
get_warning: function (callback) {
|
||
bt.send('GetWarning', 'ajax/GetWarning', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
root_reload: function (callback) {
|
||
bt.send('RestartServer', 'system/RestartServer', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.control = {
|
||
get_status: function (callback) {
|
||
loading = bt.load(lan.public.read);
|
||
bt.send('GetControl', 'control/SetControl', { type: 1 }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_control: function (type, day, callback) {
|
||
loadT = bt.load(lan.public.the);
|
||
bt.send('SetControl', 'config/SetControl', { type: type, day: day }, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
clear_control: function (callback) {
|
||
bt.confirm({ msg: lan.control.close_log_msg, title: lan.control.close_log }, function () {
|
||
loadT = bt.load(lan.public.the);
|
||
bt.send('SetControl', 'config/SetControl', { type: 'del' }, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
get_data: function (type, start, end, callback) {
|
||
action = '';
|
||
switch (type) {
|
||
case 'cpu': //cpu和内存一起获取
|
||
action = 'GetCpuIo';
|
||
break;
|
||
case 'disk':
|
||
action = 'GetDiskIo';
|
||
break;
|
||
case 'net':
|
||
action = 'GetNetWorkIo';
|
||
break;
|
||
case 'load':
|
||
action = 'get_load_average';
|
||
break;
|
||
}
|
||
if (!action) bt.msg(lan.get('lack_param', 'type'));
|
||
bt.send(action, 'ajax/' + action, { start: start, end: end }, function (rdata) {
|
||
if (callback) callback(rdata, type);
|
||
});
|
||
},
|
||
format_option: function (obj, type) {
|
||
option = {
|
||
tooltip: {
|
||
trigger: 'axis',
|
||
axisPointer: {
|
||
type: 'cross',
|
||
},
|
||
formatter: obj.formatter,
|
||
},
|
||
xAxis: {
|
||
type: 'category',
|
||
boundaryGap: false,
|
||
data: obj.tData,
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: '#666',
|
||
},
|
||
},
|
||
},
|
||
yAxis: {
|
||
type: 'value',
|
||
name: obj.unit,
|
||
boundaryGap: [0, '100%'],
|
||
min: 0,
|
||
splitLine: {
|
||
lineStyle: {
|
||
color: '#ddd',
|
||
},
|
||
},
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: '#666',
|
||
},
|
||
},
|
||
},
|
||
dataZoom: [
|
||
{
|
||
type: 'inside',
|
||
start: 0,
|
||
zoomLock: true,
|
||
},
|
||
{
|
||
start: 0,
|
||
handleIcon:
|
||
'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
|
||
handleSize: '80%',
|
||
handleStyle: {
|
||
color: '#fff',
|
||
shadowBlur: 3,
|
||
shadowColor: 'rgba(0, 0, 0, 0.6)',
|
||
shadowOffsetX: 2,
|
||
shadowOffsetY: 2,
|
||
},
|
||
},
|
||
],
|
||
series: [],
|
||
};
|
||
if (obj.legend) option.legend = obj.legend;
|
||
if (obj.dataZoom) option.dataZoom = obj.dataZoom;
|
||
|
||
for (var i = 0; i < obj.list.length; i++) {
|
||
var item = obj.list[i];
|
||
series = {
|
||
name: item.name,
|
||
type: item.type ? item.type : 'line',
|
||
smooth: item.smooth ? item.smooth : true,
|
||
symbol: item.symbol ? item.symbol : 'none',
|
||
showSymbol: item.showSymbol ? item.showSymbol : false,
|
||
sampling: item.sampling ? item.sampling : 'average',
|
||
areaStyle: item.areaStyle ? item.areaStyle : {},
|
||
lineStyle: item.lineStyle ? item.lineStyle : {},
|
||
itemStyle: item.itemStyle ? item.itemStyle : { normal: { color: 'rgb(0, 153, 238)' } },
|
||
symbolSize: 6,
|
||
symbol: 'circle',
|
||
data: item.data,
|
||
};
|
||
option.series.push(series);
|
||
}
|
||
return option;
|
||
},
|
||
};
|
||
|
||
bt.firewall = {
|
||
get_log_list: function (page, search, callback) {
|
||
if (page == undefined) page = 1;
|
||
search = search == undefined ? '' : search;
|
||
var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order') : '';
|
||
|
||
var data = 'tojs=firewall.get_log_list&table=logs&limit=10&p=' + page + '&search=' + search + order;
|
||
bt.pub.get_data(data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_list: function (page, search, callback) {
|
||
if (page == undefined) page = 1;
|
||
search = search == undefined ? '' : search;
|
||
var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order') : '';
|
||
|
||
var data = 'tojs=firewall.get_list&table=firewall&limit=10&p=' + page + '&search=' + search + order;
|
||
bt.pub.get_data(data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_logs_size: function (callback) {
|
||
if (bt.os == 'Linux') {
|
||
bt.files.get_dir_size('/www/wwwlogs', function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
get_ssh_info: function (callback) {
|
||
bt.send('GetSshInfo', 'firewall/GetSshInfo', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_mstsc: function (port, callback) {
|
||
bt.confirm({ msg: lan.firewall.ssh_port_msg, title: lan.firewall.ssh_port_title }, function () {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('SetSshPort', 'firewall/SetSshPort', { port: port }, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
ping: function (status, callback) {
|
||
var msg = status == 0 ? lan.firewall.ping_msg : lan.firewall.ping_un_msg;
|
||
layer.confirm(
|
||
msg,
|
||
{
|
||
closeBtn: 2,
|
||
title: lan.firewall.ping_title,
|
||
cancel: function () {
|
||
if (callback) callback(-1); //取消
|
||
},
|
||
},
|
||
function () {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('SetPing', 'firewall/SetPing', { status: status }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
function () {
|
||
if (callback) callback(-1); //关闭
|
||
}
|
||
);
|
||
},
|
||
set_mstsc_status: function (status, callback) {
|
||
var msg = status == 1 ? lan.firewall.ssh_off_msg : lan.firewall.ssh_on_msg;
|
||
layer.confirm(
|
||
msg,
|
||
{
|
||
icon: 0,
|
||
closeBtn: 2,
|
||
title: lan.public.warning,
|
||
cancel: function () {
|
||
if (callback) callback(-1); //取消
|
||
},
|
||
},
|
||
function () {
|
||
loading = bt.load(lan.public.the);
|
||
bt.send('SetSshStatus', 'firewall/SetSshStatus', { status: status }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
function () {
|
||
if (callback) callback(-1); //关闭
|
||
}
|
||
);
|
||
},
|
||
add_accept_port: function (type, port, ps, callback) {
|
||
var action = 'AddDropAddress';
|
||
if (type == 'port') {
|
||
ports = port.split(':');
|
||
if (port.indexOf('-') != -1) ports = port.split('-');
|
||
for (var i = 0; i < ports.length; i++) {
|
||
if (!bt.check_port(ports[i])) {
|
||
layer.msg(lan.firewall.port_err, { icon: 5 });
|
||
return;
|
||
}
|
||
}
|
||
action = 'AddAcceptPort';
|
||
}
|
||
|
||
// if (ps.length < 1) {
|
||
// layer.msg(lan.firewall.ps_err, { icon: 2 });
|
||
// return -1;
|
||
// }
|
||
loading = bt.load();
|
||
bt.send(action, 'firewall/' + action, { port: port, type: type, ps: ps }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_accept_port: function (id, port, callback) {
|
||
var action = 'DelDropAddress';
|
||
if (port.indexOf('.') == -1) {
|
||
action = 'DelAcceptPort';
|
||
}
|
||
bt.confirm({ msg: lan.get('confirm_del', [port]), title: lan.firewall.del_title }, function (index) {
|
||
var loadT = bt.load(lan.public.the_del);
|
||
bt.send(action, 'firewall/' + action, { id: id, port: port }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
clear_logs_files: function (callback) {
|
||
var loadT = bt.load(lan.firewall.close_the);
|
||
bt.send('CloseLogs', 'files/CloseLogs', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
clear_logs: function (callback) {
|
||
bt.confirm({ msg: lan.firewall.close_log_msg, title: lan.firewall.close_log }, function () {
|
||
var loadT = bt.load(lan.firewall.close_the);
|
||
bt.send('delClose', 'ajax/delClose', {}, function (rdata) {
|
||
loadT.close();
|
||
if (callback) {
|
||
callback(rdata);
|
||
} else {
|
||
bt.msg(rdata);
|
||
}
|
||
});
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.soft = {
|
||
SSL_flag: false,
|
||
pub: {
|
||
wxpayTimeId: 0,
|
||
},
|
||
php: {
|
||
get_config: function (version, callback) {
|
||
//获取禁用函数,扩展列表
|
||
// var loading = bt.load();
|
||
bt.send('GetPHPConfig', 'ajax/GetPHPConfig', { version: version }, function (rdata) {
|
||
// loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_limit_config: function (version, callback) {
|
||
//获取超时限制,上传限制
|
||
var loading = bt.load();
|
||
bt.send('get_php_config', 'config/get_php_config', { version: version }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_php_config: function (version, callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetPHPConf', 'config/GetPHPConf', { version: version }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
install_php_lib: function (version, name, title, callback) {
|
||
bt.confirm({ msg: lan.soft.php_ext_install_confirm.replace('{1}', name), title: lan.public_backup.install + '【' + name + '】' }, function () {
|
||
name = name.toLowerCase();
|
||
var loadT = bt.load(lan.soft.add_install);
|
||
bt.send('InstallSoft', 'files/InstallSoft', { name: name, version: version, type: '1' }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
fly('bi-btn');
|
||
});
|
||
},
|
||
un_install_php_lib: function (version, name, title, callback) {
|
||
bt.confirm({ msg: lan.soft.php_ext_uninstall_confirm.replace('{1}', name), title: lan.public_backup.uninstall + '【' + name + '】' }, function () {
|
||
name = name.toLowerCase();
|
||
var data = 'name=' + name + '&version=' + version;
|
||
var loadT = bt.load();
|
||
bt.send('UninstallSoft', 'files/UninstallSoft', { name: name, version: version }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
},
|
||
set_upload_max: function (version, max, callback) {
|
||
var loadT = bt.load(lan.soft.the_save);
|
||
bt.send('setPHPMaxSize', 'config/setPHPMaxSize', { version: version, max: max }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_php_timeout: function (version, time, callback) {
|
||
var loadT = bt.load(lan.soft.the_save);
|
||
bt.send('setPHPMaxTime', 'config/setPHPMaxTime', { version: version, time: time }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
disable_functions: function (version, fs, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('setPHPDisable', 'config/setPHPDisable', { version: version, disable_functions: fs }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_fpm_config: function (version, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('getFpmConfig', 'config/getFpmConfig', { version: version }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_fpm_config: function (version, data, callback) {
|
||
var loadT = bt.load();
|
||
data.version = version;
|
||
bt.send('setFpmConfig', 'config/setFpmConfig', data, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_php_status: function (version, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('GetPHPStatus', 'ajax/GetPHPStatus', { version: version }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
// 获取PHP_session
|
||
get_php_session: function (version, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('GetSessionConf', 'config/GetSessionConf', { version: version }, function (res) {
|
||
loadT.close();
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
// 设置PHP_session文件
|
||
set_php_session: function (obj, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('SetSessionConf', 'config/SetSessionConf', obj, function (res) {
|
||
loadT.close();
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
// 获取PHP_session清理信息
|
||
get_session_count: function (callback) {
|
||
var loadT = bt.load();
|
||
bt.send('GetSessionCount', 'config/GetSessionCount', {}, function (res) {
|
||
loadT.close();
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
// 清理php_session
|
||
clear_session_count: function (obj, callback) {
|
||
bt.confirm({ msg: obj.msg, title: obj.title }, function () {
|
||
var loadT = bt.load();
|
||
bt.send('DelOldSession', 'config/DelOldSession', {}, function (res) {
|
||
loadT.close();
|
||
if (callback) callback(res);
|
||
});
|
||
});
|
||
},
|
||
get_fpm_logs: function (version, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('GetFpmLogs', 'ajax/GetFpmLogs', { version: version }, function (logs) {
|
||
loadT.close();
|
||
if (logs.status !== true) {
|
||
logs.msg = '';
|
||
}
|
||
if (logs.msg == '') logs.msg = lan.public_backup.no_fpm_log;
|
||
if (callback) callback(logs);
|
||
});
|
||
},
|
||
get_slow_logs: function (version, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('GetFpmSlowLogs', 'ajax/GetFpmSlowLogs', { version: version }, function (logs) {
|
||
loadT.close();
|
||
if (logs.status !== true) {
|
||
logs.msg = '';
|
||
}
|
||
if (logs.msg == '') logs.msg = lan.public_backup.no_slow_log;
|
||
if (callback) callback(logs);
|
||
});
|
||
},
|
||
},
|
||
redis: {
|
||
get_redis_status: function (callback) {
|
||
var loadT = bt.load();
|
||
bt.send('GetRedisStatus', 'ajax/GetRedisStatus', {}, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
},
|
||
pro: {
|
||
conver_unit: function (name) {
|
||
var unit = '';
|
||
switch (name) {
|
||
case 'year':
|
||
unit = lan.public_backup.year;
|
||
break;
|
||
case 'month':
|
||
unit = lan.public_backup.month;
|
||
break;
|
||
case 'day':
|
||
unit = lan.public_backup.day;
|
||
break;
|
||
case '1month':
|
||
unit = lan.public_backup.month;
|
||
break;
|
||
case '3month':
|
||
unit = lan.public_backup.month3;
|
||
break;
|
||
case '6month':
|
||
unit = lan.public_backup.month6;
|
||
break;
|
||
case '1year':
|
||
unit = lan.public_backup.year1;
|
||
break;
|
||
case '2year':
|
||
unit = lan.public_backup.year2;
|
||
break;
|
||
case '3year':
|
||
unit = lan.public_backup.year3;
|
||
break;
|
||
case '1':
|
||
unit = lan.public_backup.month1;
|
||
break;
|
||
case '3':
|
||
unit = lan.public_backup.month3;
|
||
break;
|
||
case '6':
|
||
unit = lan.public_backup.month6;
|
||
break;
|
||
case '12':
|
||
unit = lan.public_backup.year1;
|
||
break;
|
||
case '24':
|
||
unit = lan.public_backup.year2;
|
||
break;
|
||
case '36':
|
||
unit = lan.public_backup.year3;
|
||
break;
|
||
case '999':
|
||
unit = lan.public_backup.permanent;
|
||
break;
|
||
}
|
||
return unit;
|
||
},
|
||
get_product_discount_by: function (product_id, callback) {
|
||
if (product_id) {
|
||
bt.send('get_plugin_price', 'auth/get_plugin_price', { product_id: product_id }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
} else {
|
||
bt.send('get_product_discount_by', 'auth/get_product_discount_by', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
get_plugin_coupon: function (pid, callback) {
|
||
bt.send('check_pay_status', 'auth/check_pay_status', { id: pid }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_re_order_status: function (callback) {
|
||
bt.send('get_re_order_status', 'auth/get_re_order_status', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_voucher: function (pid, callback) {
|
||
if (pid) {
|
||
bt.send('get_voucher_plugin', 'auth/get_voucher_plugin', { pid: pid }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
} else {
|
||
bt.send('get_voucher', 'auth/get_voucher', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
get_check_out_info: function (data, callback) {
|
||
bt.send('get_stripe_session_id', 'auth/get_stripe_session_id', data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
create_order_voucher: function (pid, code, coupon_id, cycle, cycle_unit, charge_type, callback) {
|
||
var loading = bt.load();
|
||
if (pid) {
|
||
bt.send(
|
||
'create_order_voucher_plugin',
|
||
'auth/create_order_voucher_plugin',
|
||
{ pid: pid, coupon_id: coupon_id, cycle: cycle, cycle_unit: cycle_unit, charge_type: charge_type },
|
||
function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
}
|
||
);
|
||
} else {
|
||
bt.send('create_order_voucher', 'auth/create_order_voucher', { code: code }, function (rdata) {
|
||
loading.close();
|
||
if (callback) {
|
||
callback(rdata);
|
||
} else {
|
||
bt.soft.pro.update();
|
||
}
|
||
});
|
||
}
|
||
},
|
||
create_order: function (data, callback) {
|
||
if (data.pid) {
|
||
// var loadT = bt.load("Getting product information!");
|
||
bt.soft.get_panel_ssl_status(function (res) {
|
||
// loadT.close()
|
||
if (res.status) {
|
||
// var _cycle_unit = $('#libPay-content .li-con .active span').attr("data-unit"),
|
||
// _pay_channel = $('#libPay-mode .pay-cycle-btn span').text().indexOf('Stripe') > -1?'2':'10'
|
||
// requestNmae = data.serial_no ? 'renew_product_auth' : 'get_buy_code';
|
||
var requestNmae = 'get_buy_code';
|
||
// if (!data.serial_no) {
|
||
// data.charge_type = 1;
|
||
// } else {
|
||
// data.pay_channel = 2;
|
||
// }
|
||
bt.send(requestNmae, 'auth/' + requestNmae, data, function (rdata) {
|
||
// loadT.close()
|
||
if (callback) callback(rdata);
|
||
});
|
||
} else {
|
||
$('#libPay-content').empty();
|
||
$('.libPay-mask').hide();
|
||
$('#libPay-pay').empty().append(
|
||
'\
|
||
<div style="font-size: 16px; position: relative; top: 25px;">\
|
||
<div style="font-weight: bold;">Purchase on the panel:</div>\
|
||
<ul class="help-info-text" style="margin-top: 10px; font-size: 14px;">\
|
||
<li>You need to open the panel SSL</li>\
|
||
</ul>\
|
||
<div style="margin-top: 20px; font-weight: bold;">Purchase on the official website: </div>\
|
||
<ul class="help-info-text" style="margin-top: 10px; font-size: 14px;">\
|
||
<li>No need to open panel SSL</li>\
|
||
<li>You can purchase multiple licenses at the same time and get higher discounts</li>\
|
||
</ul>\
|
||
</div>\
|
||
<div class="lib-price-box text-center">\
|
||
<button type="button" id="turn_on_ssl" style="margin-top:50px" class="btn btn-success ">Turn on SSL</button>\
|
||
</div>'
|
||
);
|
||
$('#turn_on_ssl').on('click', function (e) {
|
||
setPanelSSL();
|
||
});
|
||
return false;
|
||
}
|
||
});
|
||
} else {
|
||
bt.send(
|
||
'create_order',
|
||
'auth/create_order',
|
||
{
|
||
cycle: data.cycle,
|
||
},
|
||
function (rdata) {
|
||
if (callback) callback(rdata);
|
||
}
|
||
);
|
||
}
|
||
},
|
||
},
|
||
updata_commercial_view: function () {
|
||
layer.closeAll();
|
||
var html =
|
||
'<div class="business-edition">\
|
||
<div class="price-compare-item">\
|
||
<div class="price-header">Pro<san class="recommend-tips"></span></div>\
|
||
<div class="title-wrap">\
|
||
<p class="title-info">推荐5人以上或企事业单位购买</p>\
|
||
</div>\
|
||
<div class="title-desc">\
|
||
<p>包含所有<b>专业版</b>功能和:</p>\
|
||
<p>1、提供在线客服工单协助</p>\
|
||
<p>2、多用户管理插件(仅可查看日志)</p>\
|
||
<p>3、后期还会有10+企业版专用插件</p>\
|
||
<p>4、官方跟进响应的QQ群(需年付)</p>\
|
||
<p>4、官方跟进响应的QQ群(需年付)</p>\
|
||
<p>5、不定期线上运维培训(需年付)</p>\
|
||
</div>\
|
||
<div class="price-wrap">\
|
||
<div class="month">\
|
||
<span class="price-unit">¥</span>\
|
||
<span class="price-value">148</span>\
|
||
<span class="price-ext">/月</span>\
|
||
</div>\
|
||
<div class="div-line"></div>\
|
||
<div class="year">\
|
||
<span class="price-unit">¥</span>\
|
||
<span class="price-value">999</span>\
|
||
<span class="price-ext">/年</span>\
|
||
</div>\
|
||
</div>\
|
||
<button class="btn-price" data-type="ltd">Upgrade</button>\
|
||
</div>\
|
||
</div>';
|
||
layer.open({
|
||
type: 1,
|
||
closeBtn: 2,
|
||
area: '500px',
|
||
title: lan.public_backup.up_pro_use_allplug_free,
|
||
shade: 0.6,
|
||
anim: 0,
|
||
content: html,
|
||
success: function (layero, index) {
|
||
$('.btn-price').click(function () {
|
||
var _type = $(this).attr('data-type');
|
||
if (_type == 'pro') {
|
||
bt.soft.updata_pro();
|
||
layer.close(index);
|
||
} else {
|
||
bt.soft.updata_ltd();
|
||
layer.close(index);
|
||
}
|
||
});
|
||
},
|
||
});
|
||
},
|
||
get_index_renew: function () {
|
||
bt.soft.get_product_renew(function (res) {
|
||
var html = $('<div><div>');
|
||
if (res.length > 0) {
|
||
bt.soft.each(res, function (index, item) {
|
||
html.append(
|
||
$(
|
||
'<p><span class="glyphicon glyphicon-alert" style="color: #f39c12; margin-right: 10px;"></span>' +
|
||
item.msg +
|
||
' <a href="javascript:;" class="set_messages_status" style="color:#777">[ 忽略提示 ]</a></p>'
|
||
).data(item)
|
||
);
|
||
});
|
||
$('#messageError').show().html(html);
|
||
$('.set_messages_status').click(function () {
|
||
var data = $(this).parent().data(),
|
||
that = this;
|
||
bt.soft.set_product_renew_status({ id: data.id, state: 0 }, function (rdata) {
|
||
if (!res.status) {
|
||
$(that).parent().remove();
|
||
}
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
}
|
||
});
|
||
},
|
||
// 获取产品续费状态
|
||
get_product_renew: function (callback) {
|
||
$.get('/message/get_messages', function (res) {
|
||
if (res.status === false) {
|
||
layer.msg(res.msg, { icon: 2 });
|
||
return false;
|
||
}
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
//获取产品ssl
|
||
get_panel_ssl_status: function (callback) {
|
||
$.post('/config?action=get_panel_ssl_status', function (res) {
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
set_product_renew_status: function (data, callback) {
|
||
$.post('/message/status_message', { id: data.id, state: data.state }, function (res) {
|
||
if (res.status === false) {
|
||
layer.msg(res.msg, { icon: 2 });
|
||
return false;
|
||
}
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
// 产品支付视图(配置参数)
|
||
product_pay_view: function (config) {
|
||
var that = this;
|
||
|
||
$.get('/ssl?action=GetUserInfo', function (b) {
|
||
if (!b.status) {
|
||
bt.pub.bind_btname(function () {
|
||
window.location.reload();
|
||
});
|
||
return;
|
||
}
|
||
if (config.renew === -1) config.renew = false;
|
||
if (typeof config == 'string') config = JSON.parse(config);
|
||
|
||
config = $.extend(
|
||
{
|
||
plugin: null,
|
||
renew: null,
|
||
active: '',
|
||
type: '',
|
||
pro: parseInt(bt.get_cookie('pro_end')) || -1,
|
||
ltd: parseInt(bt.get_cookie('ltd_end')) || -1,
|
||
},
|
||
config
|
||
);
|
||
|
||
var totalNum = config.totalNum ? config.totalNum : '';
|
||
if (totalNum) {
|
||
bt.set_cookie('pay_source', parseInt(totalNum));
|
||
}
|
||
|
||
bt.open({
|
||
type: 1,
|
||
title: false,
|
||
skin: 'libPay-view',
|
||
area: ['1050px', '700px'],
|
||
shadeClose: false,
|
||
content:
|
||
'\
|
||
<div class="libPay-content-box pro">\
|
||
<div class="libPay-product-introduce">\
|
||
<div class="pro-left-introduce pro">\
|
||
<div class="pro-left-title">\
|
||
<div></div>\
|
||
<span></span>\
|
||
</div>\
|
||
<div class="pro-left-list">\
|
||
<div class="pro-left-list-title"></div>\
|
||
<div class="pro-left-list-content"></div>\
|
||
</div>\
|
||
<div class="pro-price-herf">\
|
||
<a class="privilege_contrast" href="https://yakpanel.com/new/pricing.html" target="_blank" rel="noreferer noopener">Feature contrast</a>\
|
||
</div>\
|
||
</div>\
|
||
</div>\
|
||
<div class="libPay-product-content">\
|
||
<div class="libPay-menu"></div>\
|
||
<div id="pay_product_view">\
|
||
<div class="libPay-layer-item aShow">\
|
||
<div class="libPay-line-item proTname" style="margin-bottom: 20px">Choose your plan</div>\
|
||
<div class="libPay-line-item proP" id="libPay-theme-price">\
|
||
<div class="switch-cycle-left hide"><span class="glyphicon glyphicon-chevron-left"></span></div>\
|
||
<ul class="pay-pro-cycle"></ul>\
|
||
<div class="switch-cycle-right hide"><span class="glyphicon glyphicon-chevron-right"></span>\
|
||
</div>\
|
||
</div>\
|
||
<div style="margin-top:24px;">\
|
||
<div class="libPay-line-item proTname" style="margin-bottom: 20px">Number of authorizations</div>\
|
||
<div id="authorization">\
|
||
<ul class="auth-num">\
|
||
</ul>\
|
||
</div>\
|
||
</div>\
|
||
<div class="libPay-line-item libPay-mode">\
|
||
<div class="libPay-qcode-left">\
|
||
<div class="pay-radio-type">\
|
||
<div class="pay-type-btn active" data-condition="stripe">\
|
||
<label class="pay-type-label"><span class="pay-radio-tit">Stripe</span></label>\
|
||
</div>\
|
||
<div class="pay-type-btn" data-condition="paypal">\
|
||
<label class="pay-type-label"><span class="pay-radio-tit">Paypal</span></label>\
|
||
</div>\
|
||
<div class="pay-type-btn" data-condition="voucher">\
|
||
<label class="pay-type-label"><span class="pay-radio-tit">Voucher</span></label>\
|
||
</div>\
|
||
<div class="pay-type-btn" data-condition="authorization">\
|
||
<label class="pay-type-label"><span class="pay-radio-tit">Authorization</span></label>\
|
||
</div>\
|
||
<div class="pay-type-other"></div>\
|
||
</div>\
|
||
</div>\
|
||
<div class="libPay-qcode-right">\
|
||
<div class="libPay-qcode-right-head"></div>\
|
||
<div class="libPay-qcode-item">\
|
||
<div class="cloading">Loading, please wait!</div>\
|
||
<div class="pay-box">\
|
||
<div class="userinfo">\
|
||
<div class="info_label">Account: </div>\
|
||
<div class="info_value">--</div>\
|
||
<a class="btlink" href="javascript:;" style="text-decoration: underline">Change</a>\
|
||
</div>\
|
||
<div class="pay-price">\
|
||
<span class="price-label">Total: </span>\
|
||
<span class="org_price">$0</span>\
|
||
<span>, After discount </span>\
|
||
<span class="libPayTotal"><span style="font-size: 18px; margin-left: 4px; margin-right: 2px;">$</span>0</span>\
|
||
<span class="libPayCycle">/1 year</span>\
|
||
</div>\
|
||
<div class="pay-subscription hide">\
|
||
<input type="checkbox" name="subscription" checked="checked" />\
|
||
<span>Pay for subscription</span>\
|
||
<span class="org-price">$0/year</span>\
|
||
<span class="first-price">\
|
||
<span class="symbol">$</span>\
|
||
<span class="num">0</span>\
|
||
</span>\
|
||
<span class="cycle-unit">/first year</span>\
|
||
<a href="javascript:;" class="bt-ico-ask">?</a>\
|
||
</div>\
|
||
<button class="btn btn-success btn-pay" id="checkout-button">Pay Now</button>\
|
||
</div>\
|
||
</div>\
|
||
<div class="libPay-qcode-item hide">\
|
||
<div class="pay-box">\
|
||
<div class="userinfo">\
|
||
<div class="info_label">Account: </div>\
|
||
<div class="info_value">--</div>\
|
||
<a class="btlink" href="javascript:;" style="text-decoration: underline">Change</a>\
|
||
</div>\
|
||
<div class="pay-price">\
|
||
<span class="price-label">Total: </span>\
|
||
<span class="org_price">$0</span>\
|
||
<span>, After discount </span>\
|
||
<span class="libPayTotal"><span style="font-size: 18px; margin-left: 4px; margin-right: 2px;">$</span>0</span>\
|
||
<span class="libPayCycle">/1 year</span>\
|
||
</div>\
|
||
<div id="paypal-button-container" style="width: 240px; height: 35px; margin: 20px auto 0;"></div>\
|
||
</div>\
|
||
</div>\
|
||
<div class="libPay-qcode-item hide">\
|
||
<div class="li-tit c4">Vouchers</div>\
|
||
<ul class="pay-btn-group voucher-group"></ul>\
|
||
<div class="text-center">\
|
||
<button class="btn btn-success btn-sm f16" id="use-voucher" style="width: 200px; height: 40px;">Pay</button>\
|
||
</div>\
|
||
</div>\
|
||
<div class="libPay-qcode-item hide">\
|
||
<div class="li-tit c4">Authorization information</div>\
|
||
<ul class="pay-btn-group auth-group"></ul>\
|
||
<div class="text-center">\
|
||
<button class="btn btn-success btn-sm f16" id="use-auth" style="width: 200px; height: 40px;">Authorization</button>\
|
||
</div>\
|
||
</div>\
|
||
</div>\
|
||
</div>\
|
||
<div class="tooTool-links">Questions? Email us anytime: support@yakpanel.com</div>\
|
||
</div>\
|
||
</div>\
|
||
</div>',
|
||
end: function () {
|
||
bt.clear_cookie('pay_source');
|
||
},
|
||
success: function ($layer, index) {
|
||
$.getScript('https://js.stripe.com/v3/');
|
||
|
||
var layerThat = this;
|
||
|
||
layerThat.renderUserInfo();
|
||
layerThat.renderProductMenu();
|
||
|
||
var init = function () {
|
||
var removeLoad = layerThat.addLoading('.libPay-layer-item');
|
||
layerThat.renderFeature();
|
||
layerThat.renderAuthList(function (rdata) {
|
||
if (rdata.length > 0) {
|
||
cutTab('authorization');
|
||
layerThat.renderProductPrice(function () {
|
||
removeLoad();
|
||
});
|
||
} else {
|
||
layerThat.renderVoucher(function (rdata) {
|
||
if (rdata.length > 0) {
|
||
cutTab('voucher');
|
||
}
|
||
layerThat.renderProductPrice(function () {
|
||
removeLoad();
|
||
});
|
||
});
|
||
}
|
||
});
|
||
};
|
||
|
||
init();
|
||
|
||
$('.switch-cycle-right').click(function () {
|
||
var num = $(this).prev().children().length;
|
||
var totalWidth = 80;
|
||
$.each($('.pay-pro-cycle .pay-cycle-btns'), function (i, elem) {
|
||
totalWidth += elem.offsetWidth;
|
||
});
|
||
var libPayWidht = $('.libPay-line-item').width();
|
||
var width = totalWidth - libPayWidht + 40;
|
||
var remainder = num % 4; // 获取余数
|
||
$(this)
|
||
.prev()
|
||
.css('transform', 'translateX(-' + remainder * width + 'px)');
|
||
$('.switch-cycle-left').removeClass('hide');
|
||
$('#libPay-theme-price').css('padding-left', '30px');
|
||
$(this).addClass('hide');
|
||
});
|
||
|
||
$('.switch-cycle-left').click(function (ev) {
|
||
if (bt.del_seven_coupon) {
|
||
var $children = $('.pay-pro-cycle').children();
|
||
if ($($children[0]).data('data').nums.length == 1) {
|
||
$($children[0]).remove();
|
||
bt.del_seven_coupon = false;
|
||
}
|
||
}
|
||
$('#libPay-theme-price').removeAttr('style');
|
||
$('.switch-cycle-right').removeClass('hide');
|
||
$(this).next().removeAttr('style');
|
||
$(this).addClass('hide');
|
||
});
|
||
|
||
$('.pay-btn-group').on('click', 'li', function () {
|
||
$(this).addClass('active').siblings('.active').removeClass('active');
|
||
});
|
||
|
||
// 切换菜单
|
||
$('.libPay-menu').on('click', '.libPay-menu-type', function () {
|
||
$(this).addClass('active').siblings('.active').removeClass('active');
|
||
var data = $('.libPay-menu .libPay-menu-type.active').data();
|
||
if (data.title !== 'PRO') {
|
||
$('.pay-pro-cycle').css('transform', 'translateX(-27px)');
|
||
}
|
||
|
||
layerThat.renderProductPrice();
|
||
layerThat.renderAuthNums();
|
||
init();
|
||
});
|
||
|
||
// 产品周期切换
|
||
$('#libPay-theme-price .pay-pro-cycle').on('click', 'li', function () {
|
||
$(this).addClass('active').siblings('.active').removeClass('active');
|
||
layerThat.renderAuthNums();
|
||
var numConfig = $('#authorization .auth-num .active').data();
|
||
var condition = $('.libPay-qcode-left .pay-type-btn.active').data('condition');
|
||
if (condition === 'stripe') {
|
||
layerThat.renderTotalPrice(numConfig.num, false);
|
||
} else if (condition === 'paypal') {
|
||
layerThat.renderPaypal(numConfig.num, false);
|
||
}
|
||
});
|
||
|
||
// 多台授权切换
|
||
$('#authorization .auth-num').on('click', 'li', function () {
|
||
$(this).addClass('active').siblings('.active').removeClass('active');
|
||
var numConfig = $('#authorization .auth-num .active').data();
|
||
var condition = $('.libPay-qcode-left .pay-type-btn.active').data('condition');
|
||
if (condition === 'stripe') {
|
||
layerThat.renderTotalPrice(numConfig.num, true);
|
||
} else if (condition === 'paypal') {
|
||
layerThat.renderPaypal(numConfig.num, true);
|
||
}
|
||
});
|
||
|
||
// 点击支付
|
||
$('#checkout-button').click(function () {
|
||
var config = $(this).data('data');
|
||
var loadT = bt.load('Getting the session ID,Please waiting!');
|
||
var stripe = Stripe(config.stripe_publishable_key);
|
||
var subscribe = config.subscription_price > 0 && $('.pay-subscription input').prop('checked') ? 1 : 0;
|
||
that.pro.get_check_out_info(
|
||
{
|
||
order_no: config.order_no,
|
||
subscribe: subscribe,
|
||
},
|
||
function (res) {
|
||
loadT.close();
|
||
if (res.id) {
|
||
stripe.redirectToCheckout({ sessionId: res.id });
|
||
} else {
|
||
layer.msg('Payment order failed, please contact administrator!', { icon: 2 });
|
||
}
|
||
}
|
||
);
|
||
});
|
||
|
||
// 切换tab
|
||
function cutTab(condition) {
|
||
var $el = $('.libPay-qcode-left .pay-type-btn[data-condition="' + condition + '"]');
|
||
var index = $el.index();
|
||
$el.addClass('active').siblings('.active').removeClass('active');
|
||
$('.libPay-qcode-right .libPay-qcode-item').eq(index).removeClass('hide').siblings('.libPay-qcode-item').addClass('hide');
|
||
}
|
||
|
||
// 支付方式切换
|
||
$('.libPay-qcode-left .pay-type-btn').click(function () {
|
||
var condition = $(this).data('condition');
|
||
cutTab(condition);
|
||
|
||
var condition = $(this).data('condition');
|
||
|
||
var numConfig = $('#authorization .auth-num .active').data();
|
||
switch (condition) {
|
||
case 'stripe':
|
||
layerThat.renderTotalPrice(numConfig.num || 1);
|
||
break;
|
||
case 'paypal':
|
||
layerThat.renderPaypal(numConfig.num || 1);
|
||
break;
|
||
case 'voucher':
|
||
layerThat.renderVoucher();
|
||
break;
|
||
case 'authorization':
|
||
layerThat.renderAuthList();
|
||
break;
|
||
}
|
||
});
|
||
|
||
// 切换用户
|
||
$('.libPay-qcode-item .userinfo a').click(function () {
|
||
bt.pub.bind_btname(function () {
|
||
// bt.soft.product_pay_view(config);
|
||
window.location.reload();
|
||
});
|
||
});
|
||
|
||
// 使用抵扣卷
|
||
$('#use-voucher').click(function () {
|
||
if ($(this).hasClass('disabled')) return false;
|
||
|
||
var data = $('.voucher-group .active').data();
|
||
if (!data.serial_no) {
|
||
layer.msg('No vouchers');
|
||
return false;
|
||
}
|
||
bt.soft.pro.create_order_voucher(data.pid, data.code, data.id, data.cycle, data.cycle_unit, data.charge_type, function (rdata) {
|
||
layer.closeAll();
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
bt.msg(rdata);
|
||
if (rdata.status) {
|
||
getPaymentStatus();
|
||
}
|
||
});
|
||
});
|
||
|
||
// 授权
|
||
$('#use-auth').click(function () {
|
||
if ($(this).hasClass('disabled')) return false;
|
||
|
||
var _serial_no = $('.auth-group .active').attr('data-id');
|
||
if (typeof _serial_no == 'undefined') return false;
|
||
var loadU = bt.load('Under licensing!');
|
||
bt.send('auth_activate', 'auth/auth_activate', { serial_no: _serial_no }, function (res) {
|
||
loadU.close();
|
||
if (res) {
|
||
layer.msg(res.msg, { icon: res.status ? 1 : 2 });
|
||
if (res.status) {
|
||
window.location.reload();
|
||
}
|
||
}
|
||
});
|
||
});
|
||
|
||
var layerIndex = -1;
|
||
|
||
$('.pay-subscription .bt-ico-ask').hover(
|
||
function () {
|
||
layerIndex = layer.tips('<div>when subscription creation, your authorization will auto generated<br />when subscription renewal, your authorization will auto renewed</div>', $(this), {
|
||
tips: [1, '#999'],
|
||
time: 0,
|
||
area: '410px',
|
||
});
|
||
},
|
||
function () {
|
||
layer.close(layerIndex);
|
||
}
|
||
);
|
||
},
|
||
addLoading: function (elem) {
|
||
var $el = $(elem);
|
||
$el.children().addClass('hide');
|
||
if ($el.children('.cloading').length === 0) {
|
||
$el.append('<div class="cloading">Loading, please wait!</div>');
|
||
}
|
||
return function removeLoad() {
|
||
$el.children('.cloading').remove();
|
||
$el.children().removeClass('hide');
|
||
};
|
||
},
|
||
getConfig: function () {
|
||
var data = $('.libPay-menu .libPay-menu-type.active').data();
|
||
return data;
|
||
},
|
||
// 渲染菜单
|
||
renderProductMenu: function () {
|
||
var menus = [];
|
||
if (config.plugin) {
|
||
menus.push({
|
||
title: config.name,
|
||
name: config.name,
|
||
ps: 'Plug-in only',
|
||
desc: config.ps,
|
||
pid: config.pid,
|
||
renew: config.renew || false,
|
||
is_pro: false,
|
||
active: (config.pro < 0 && config.ltd < 0) || (config.type == 12 && config.ltd < 0) ? true : false,
|
||
});
|
||
}
|
||
if (
|
||
(((config.pro > 0 || config.pro == -2 || config.ltd < 0) && ((config.ltd > 0 && config.ltd != config.pro) || config.ltd < 0) && config.type != 12) ||
|
||
config.limit == 'pro' ||
|
||
(config.ltd < 0 && config.pro == -1)) &&
|
||
config.type != 12 &&
|
||
((config.ltd < 0 && config.pro > 0) || (config.ltd < 0 && config.pro < 0))
|
||
) {
|
||
menus.push({
|
||
title: 'PRO',
|
||
name: '',
|
||
pid: '100000058',
|
||
ps: 'Recommended',
|
||
renew: config.renew || false,
|
||
is_pro: true,
|
||
active:
|
||
((config.type == 8 && !config.plugin) || config.limit == 'pro' || config.pro > 0 || config.pro == -2) &&
|
||
config.ltd < 0 &&
|
||
(config.ltd == -2 ? (config.pro == -2 ? false : true) : true),
|
||
});
|
||
}
|
||
|
||
var $el = null;
|
||
$.each(menus, function (index, item) {
|
||
$el = $(
|
||
'<div class="libPay-menu-type ' +
|
||
(item.is_pro ? 'lib_pro' : '') +
|
||
' ' +
|
||
(item.active ? 'active' : '') +
|
||
'">\
|
||
<p>\
|
||
' +
|
||
(item.is_pro ? '<span class="glyphicon glyphicon-vip" style="margin-right: 8px"></span>' : '') +
|
||
'<span>' +
|
||
item.title +
|
||
'</span>\
|
||
</p>\
|
||
<p>' +
|
||
item.ps +
|
||
'</p>\
|
||
</div>'
|
||
).data(item);
|
||
$('.libPay-menu').append($el);
|
||
});
|
||
},
|
||
renderFeature: function () {
|
||
var config = this.getConfig();
|
||
|
||
if (config.is_pro) {
|
||
$('.pro-left-introduce .pro-left-title>div').html('<span class="glyphicon glyphicon-vip" style="margin-right: 7px"></span><span>' + config.title + '</span>');
|
||
$('.pro-left-introduce .pro-left-title>span').removeClass('hide').html(config.ps);
|
||
$('.pro-left-list-title').text('Pro Feature: ');
|
||
$('.pro-price-herf').removeClass('hide');
|
||
bt.send('get_plugin_remarks', 'auth/get_plugin_remarks', { product_id: '100000058' }, function (rdata) {
|
||
var html = '';
|
||
$.each(rdata.res, function (index, item) {
|
||
html += '<div class="pro-introduce"><span class="glyphicon glyphicon-ok"></span><span>' + item + '</span></div>';
|
||
});
|
||
$('.pro-left-list-content').removeAttr('style').html(html);
|
||
});
|
||
} else {
|
||
$('.pro-left-introduce .pro-left-title>div').html('<span>' + config.title + '</span>');
|
||
$('.pro-left-introduce .pro-left-title>span').addClass('hide').html(config.ps);
|
||
$('.pro-left-list-title').text('Plug-in description: ');
|
||
$('.pro-left-list-content')
|
||
.css({
|
||
width: '186px',
|
||
'line-height': '23px',
|
||
})
|
||
.html(config.desc);
|
||
$('.pro-price-herf').addClass('hide');
|
||
}
|
||
},
|
||
|
||
// 默认选中的套餐索引
|
||
// defaultPackageIndex: 0,
|
||
|
||
// // 默认选中的授权台数索引
|
||
// defaultAuthIndex: 0,
|
||
|
||
// 渲染产品价格
|
||
renderProductPrice: function (callback) {
|
||
var layerThat = this;
|
||
|
||
// 获取产品价格数据
|
||
var config = layerThat.getConfig();
|
||
|
||
that.get_product_discount_cache(config, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
|
||
// 大于4个显示左右切换按钮
|
||
var num = rdata.length;
|
||
if (num > 4) {
|
||
$('.switch-cycle-right').removeClass('hide');
|
||
} else {
|
||
$('.switch-cycle-right,.switch-cycle-left').addClass('hide');
|
||
}
|
||
|
||
// 遍历渲染产品价格
|
||
var html = '';
|
||
var htmlNum = '';
|
||
$('#libPay-theme-price .pay-pro-cycle').empty();
|
||
$('#authorization .auth-num').empty();
|
||
|
||
that.each(rdata, function (key, item) {
|
||
const priceItem = item.children[0]; // 默认选中的授权台数索引
|
||
var keys = item.cycle;
|
||
var unit = item.cycle_unit;
|
||
var priceByDay = (priceItem.price / ((priceItem.cycle / (priceItem.cycle_unit === 'year' ? 1 : 12)) * 365)).toFixed(2);
|
||
// 产品周期
|
||
var cycleUnit = '';
|
||
// 每天低至XX$
|
||
var dayPrice = '';
|
||
if (item.cycle === '999') {
|
||
cycleUnit = 'Lifetime';
|
||
dayPrice = 'Best value';
|
||
} else {
|
||
cycleUnit = item.cycle + ' ' + item.cycle_unit + (item.cycle > 1 ? 's' : '');
|
||
dayPrice = 'As low as $' + priceByDay + '/day';
|
||
}
|
||
|
||
const authNum = item.children;
|
||
if (key === 0) {
|
||
that.each(authNum, function (key1, numItem) {
|
||
htmlNum =
|
||
'\
|
||
<li class="pay-auth-item ' +
|
||
(key1 === 0 ? 'active' : '') + // 默认选中的授权台数索引
|
||
'">\
|
||
' +
|
||
numItem.num +
|
||
(key1 === 0 ? '' : numItem.discount_rate != 1 ? '<em>' + (100 - numItem.discount_rate * 100).toFixed(2) + '% off</em>' : '') +
|
||
'\
|
||
</li>';
|
||
$('#authorization .auth-num').append(
|
||
$(htmlNum).data(
|
||
$.extend(
|
||
{
|
||
pid: config.pid,
|
||
dom_index: key,
|
||
},
|
||
numItem
|
||
)
|
||
)
|
||
);
|
||
});
|
||
}
|
||
|
||
html =
|
||
'\
|
||
<li class="pay-cycle-btns ' +
|
||
(key === 0 ? 'active' : '') + // 默认选中的套餐索引
|
||
'" data-type="' +
|
||
keys +
|
||
'" data-unit = ' +
|
||
unit +
|
||
' >\
|
||
<div class="pay-head-price">\
|
||
<div class="new-price">\
|
||
<div class="libPrice">$<i>' +
|
||
priceItem.price.toFixed(2) +
|
||
'</i></div>\
|
||
<div class="cycle">/' +
|
||
cycleUnit +
|
||
'</div>\
|
||
</div>\
|
||
<p>OP: $' +
|
||
priceItem.market_price +
|
||
'</p>\
|
||
</div>\
|
||
<div class="pay-foo-price">' +
|
||
dayPrice +
|
||
'</div>\
|
||
' +
|
||
// (priceItem.discount_rate != 1 ? '<em>' + (100 - priceItem.discount_rate * 100) + '% off</em>' : '') +
|
||
(key === 0 ? '<em>' + 'Most popular' + '</em>' : '') +
|
||
'\
|
||
</li>';
|
||
$('#libPay-theme-price .pay-pro-cycle').append(
|
||
$(html).data(
|
||
$.extend(
|
||
{
|
||
pid: config.pid,
|
||
dom_index: key,
|
||
},
|
||
priceItem
|
||
)
|
||
)
|
||
);
|
||
});
|
||
|
||
layerThat.renderTotalPrice();
|
||
});
|
||
layerThat.renderAuthNums();
|
||
},
|
||
|
||
// 渲染授权数量选项
|
||
renderAuthNums: function () {
|
||
var layerThat = this;
|
||
|
||
// 获取产品价格数据
|
||
var config = layerThat.getConfig();
|
||
|
||
var selectedCycle = $('#libPay-theme-price .pay-pro-cycle li.active').data('type');
|
||
var selectedunit = $('#libPay-theme-price .pay-pro-cycle li.active').data('unit');
|
||
var selectedAuthIndex = $('#authorization .auth-num li.active').index();
|
||
that.get_product_discount_cache(config, function (rdata) {
|
||
// 查找对应周期的授权数量数据
|
||
var authNumData = null;
|
||
for (var i = 0; i < rdata.length; i++) {
|
||
if (rdata[i].cycle == selectedCycle && rdata[i].cycle_unit == selectedunit) {
|
||
authNumData = rdata[i].children;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (authNumData) {
|
||
// 清空授权数量选项
|
||
$('#authorization .auth-num').empty();
|
||
|
||
// 遍历渲染授权数量选项
|
||
for (var j = 0; j < authNumData.length; j++) {
|
||
var authNumItem = authNumData[j];
|
||
|
||
var htmlNum =
|
||
'<li class="pay-auth-item' +
|
||
(selectedCycle === 999 && selectedAuthIndex > authNumData.length - 1 && j === 0 ? ' active' : '') +
|
||
(j === selectedAuthIndex ? ' active' : '') +
|
||
'">' +
|
||
authNumItem.num +
|
||
(j === 0 ? '' : authNumItem.discount_rate !== 1 ? '<em>' + (100 - authNumItem.discount_rate * 100).toFixed(2) + '% off</em>' : '') +
|
||
'</li>';
|
||
|
||
var numItem = {
|
||
pid: config.pid,
|
||
dom_index: j,
|
||
};
|
||
|
||
var authNumElement = $(htmlNum).data($.extend(numItem, authNumItem));
|
||
$('#authorization .auth-num').append(authNumElement);
|
||
}
|
||
}
|
||
});
|
||
},
|
||
|
||
// 渲染用户信息
|
||
renderUserInfo: function () {
|
||
var bt_user_info = bt.get_cookie('bt_user_info');
|
||
if (!bt_user_info) {
|
||
bt.pub.get_user_info(function (res) {
|
||
$('.libPay-qcode-right .userinfo .info_value').html(res.data.username);
|
||
});
|
||
} else {
|
||
$('.libPay-qcode-right .userinfo .info_value').html(JSON.parse(bt_user_info).data.username);
|
||
}
|
||
},
|
||
renderEndTime: function () {
|
||
var endTime = null;
|
||
if (!config.is_alone) {
|
||
// 条件:当前为插件
|
||
if (config.plugin) {
|
||
title = (!config.renew ? 'Buy ' : '续费') + config.name;
|
||
ndTime = !config.renew ? config.renew : null;
|
||
} else if (config.pro == -1 && config.ltd == -1) {
|
||
// 条件:专业版和企业版都没有购买过
|
||
title = 'Upgrade to Pro, all plugins are free to use';
|
||
} else if (config.ltd > 0) {
|
||
// 条件:企业版续费
|
||
title = 'Renew ' + (config.name == '' ? 'YakPanel 专业版' : config.name);
|
||
endTime = config.ltd;
|
||
} else if (config.pro > 0 || config.pro == -2) {
|
||
// 条件:专业版续费
|
||
title = 'Renew ' + (config.name == '' ? 'YakPanel 专业版' : config.name);
|
||
endTime = config.pro;
|
||
} else if (config.ltd == -2) {
|
||
title = 'Renew ' + (config.name == '' ? 'YakPanel 专业版' : config.name);
|
||
endTime = config.ltd;
|
||
}
|
||
} else {
|
||
title = (config.ltd > 0 ? '续费' : '购买') + 'YakPanel 企业版';
|
||
}
|
||
if (endTime != null) {
|
||
$('.endTime span').html(endTime > parseInt(new Date().getTime() / 1000) ? bt.format_data(endTime) : '<i style="color:red;font-style:inherit">Expired</i>');
|
||
} else {
|
||
$('.endTime').hide();
|
||
}
|
||
},
|
||
// 渲染总价格
|
||
renderTotalPrice: function (num, isNum) {
|
||
var condition = $('.libPay-qcode-left .pay-type-btn.active').data('condition');
|
||
if (condition !== 'stripe') {
|
||
return;
|
||
}
|
||
|
||
var layerThat = this;
|
||
var removeLoad = layerThat.addLoading('.libPay-qcode-item:not(.hide)');
|
||
|
||
var numActive = $('#authorization .auth-num .active').data();
|
||
var priceActive = $('#libPay-theme-price .pay-pro-cycle li.active').data();
|
||
|
||
var config = null;
|
||
if (isNum === true) {
|
||
config = $('#authorization .auth-num .active').data();
|
||
} else {
|
||
config = $('#libPay-theme-price .pay-pro-cycle .active').data();
|
||
}
|
||
config = priceActive;
|
||
config.num = numActive;
|
||
|
||
var param = { pid: config.pid, cycle: config.cycle, cycle_unit: config.cycle_unit, charge_type: config.charge_type, num: num || 1 };
|
||
param.source = parseInt(bt.get_cookie('pay_source') || 0);
|
||
if (param.source === 0) {
|
||
if ($('.btpro-gray').length == 1) {
|
||
// 是否免费版
|
||
param.source = 27;
|
||
} else {
|
||
param.source = 28;
|
||
}
|
||
}
|
||
if (!param.pid) delete param.pid;
|
||
if (bt.get_cookie('serial_no') != null) param.serial_no = config.serial_no || bt.get_cookie('serial_no');
|
||
that.pro.create_order(param, function (rdata) {
|
||
removeLoad();
|
||
if (rdata.status === false) {
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
layer.msg(rdata.msg, { icon: 2 });
|
||
return;
|
||
}
|
||
|
||
var cycle = '';
|
||
if (config.cycle === 999) {
|
||
cycle = 'Lifetime';
|
||
} else {
|
||
cycle = config.cycle + ' ' + config.cycle_unit + (config.cycle > 1 ? 's' : '');
|
||
}
|
||
// var unit = config.num + ' unit' + (config.num > 1 ? 's' : '');
|
||
// 改成接口请求后获取到的价格 rdata
|
||
$('.libPayTotal').html('<span style="font-size: 18px; margin-left: 4px; margin-right: 2px">$</span>' + rdata.price); //
|
||
$('.pay-price .org_price').text('$' + rdata.market_price + '/' + cycle); //
|
||
$('.pay-price .libPayCycle').html('/' + cycle);
|
||
|
||
if (rdata.subscription_price > 0) {
|
||
//
|
||
$('.pay-subscription').removeClass('hide');
|
||
if (config.first_subscription_price > 0) {
|
||
$('.pay-subscription .org-price').removeClass('hide');
|
||
// 改成接口请求后获取到的价格 rdata
|
||
$('.pay-subscription .org-price').text('$' + rdata.subscription_price + '/' + config.cycle_unit); //
|
||
$('.pay-subscription .first-price .num').text(config.first_subscription_price); //
|
||
$('.pay-subscription .cycle-unit').text('/first ' + config.cycle_unit); //
|
||
} else {
|
||
$('.pay-subscription .org-price').addClass('hide');
|
||
$('.pay-subscription .first-price .num').text(rdata.subscription_price); //
|
||
$('.pay-subscription .cycle-unit').text('/' + config.cycle_unit); //
|
||
}
|
||
} else {
|
||
$('.pay-subscription').addClass('hide');
|
||
}
|
||
|
||
$('#checkout-button').data('data', rdata);
|
||
});
|
||
},
|
||
|
||
// 渲染paypal
|
||
renderPaypal: function (num, isNum) {
|
||
var layerThat = this;
|
||
|
||
var removeLoad = layerThat.addLoading('.libPay-qcode-item:not(.hide)');
|
||
// var config = $('#libPay-theme-price .pay-pro-cycle .active').data();
|
||
|
||
var numActive = $('#authorization .auth-num .active').data();
|
||
var priceActive = $('#libPay-theme-price .pay-pro-cycle li.active').data();
|
||
|
||
var config = null;
|
||
if (isNum === true) {
|
||
config = $('#authorization .auth-num .active').data();
|
||
} else {
|
||
config = $('#libPay-theme-price .pay-pro-cycle .active').data();
|
||
}
|
||
config = priceActive;
|
||
config.num = numActive;
|
||
|
||
var param = { pid: config.pid, cycle: config.cycle, cycle_unit: config.cycle_unit, charge_type: config.charge_type, num: num || 1 };
|
||
param.source = parseInt(bt.get_cookie('pay_source') || 0);
|
||
if (param.source === 0) {
|
||
if ($('.btpro-gray').length == 1) {
|
||
// 是否免费版
|
||
param.source = 27;
|
||
} else {
|
||
param.source = 28;
|
||
}
|
||
}
|
||
if (!param.pid) delete param.pid;
|
||
if (bt.get_cookie('serial_no') != null) param.serial_no = config.serial_no || bt.get_cookie('serial_no');
|
||
that.pro.create_order(param, function (rdata) {
|
||
removeLoad();
|
||
|
||
if (rdata.status === false) {
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
layer.msg(rdata.msg, { icon: 2 });
|
||
return;
|
||
}
|
||
|
||
var cycle = '';
|
||
if (config.cycle === 999) {
|
||
cycle = 'Lifetime';
|
||
} else {
|
||
cycle = config.cycle + ' ' + config.cycle_unit + (config.cycle > 1 ? 's' : '');
|
||
}
|
||
// var unit = config.num + ' unit' + (config.num > 1 ? 's' : '');
|
||
$('.libPayTotal').html('<span style="font-size: 18px; margin-left: 4px; margin-right: 2px">$</span>' + rdata.price);
|
||
$('.pay-price .org_price').text('$' + rdata.market_price + '/' + cycle);
|
||
$('.pay-price .libPayCycle').html('/' + cycle);
|
||
|
||
layerThat.renderPaypalBtn(rdata);
|
||
});
|
||
},
|
||
renderPaypalBtn: function (rdata) {
|
||
$('#paypal-button-container').empty();
|
||
|
||
jQuery
|
||
.ajax({
|
||
url: '/static/js/polyfill.min.js?v=1715756461542',
|
||
dataType: 'script',
|
||
cache: true,
|
||
})
|
||
.done(function () {
|
||
var httpPromise = function (config) {
|
||
return new Promise((resolve, reject) => {
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: config.url,
|
||
data: config.data,
|
||
success: function (res) {
|
||
resolve(res);
|
||
},
|
||
error: function (err) {
|
||
reject(err);
|
||
},
|
||
});
|
||
});
|
||
};
|
||
var check_response = function (response) {
|
||
return new Promise((resolve, reject) => {
|
||
if (response.status) {
|
||
return resolve(response.res);
|
||
}
|
||
bt.msg(response);
|
||
reject(response.res);
|
||
});
|
||
};
|
||
jQuery
|
||
.ajax({
|
||
url: 'https://www.paypal.com/sdk/js?client-id=' + rdata.paypal_client_id,
|
||
dataType: 'script',
|
||
cache: true,
|
||
})
|
||
.done(function () {
|
||
var buttons = paypal.Buttons({
|
||
// 只渲染paypal支付按钮
|
||
fundingSource: paypal.FUNDING.PAYPAL,
|
||
// 绑定PayPal订单创建事件处理函数,请求paypal订单创建接口
|
||
// 注意: 该函数必须返回Promise对象, 若使用 JQuery.ajax() 函数
|
||
// 请使用 new Promise(fn(resolve(), reject())) 创建Promise对象并将其返回
|
||
// Promise必须返回从接口获取的id
|
||
createOrder: () => {
|
||
return httpPromise({
|
||
url: '/auth?action=get_paypal_session_id',
|
||
data: { oid: rdata.order_id },
|
||
})
|
||
.then(check_response)
|
||
.then(res => res);
|
||
},
|
||
// 绑定支付确认事件,请求paypal订单支付确认接口并传递orderId
|
||
// 注意: 该函数必须返回Promise对象,若使用 JQuery.ajax() 函数 请参照 step3
|
||
// Promise最终请展示支付结果
|
||
onApprove: data => {
|
||
return (
|
||
httpPromise({
|
||
url: '/auth?action=check_paypal_status',
|
||
data: { paypal_order_id: data.orderID },
|
||
})
|
||
// res是支付成功跳转的url
|
||
.then(check_response)
|
||
.then(res => {
|
||
layer.msg('Payment successful', { icon: 1 });
|
||
setTimeout(() => {
|
||
location.reload();
|
||
}, 1500);
|
||
})
|
||
);
|
||
},
|
||
});
|
||
buttons.render('#paypal-button-container');
|
||
});
|
||
});
|
||
},
|
||
// 渲染抵扣卷
|
||
renderVoucher: function (callback) {
|
||
var layerThat = this;
|
||
var config = layerThat.getConfig();
|
||
var removeLoad = layerThat.addLoading('.libPay-qcode-item:not(.hide)');
|
||
bt.soft.pro.get_voucher(config.pid, function (rdata) {
|
||
removeLoad();
|
||
|
||
if (callback) callback(rdata);
|
||
|
||
$('.voucher-group').empty();
|
||
if (rdata == null && !Array.isArray(rdata)) rdata = [];
|
||
if (rdata.length == 0) {
|
||
$('.voucher-group').addClass('hide');
|
||
$('#use-voucher').addClass('disabled').text('No vouchers');
|
||
return;
|
||
}
|
||
|
||
var $li = null;
|
||
that.each(rdata, function (index, item) {
|
||
var name = item.cycle_unit == 'month' && item.cycle == 999 ? 'Lifetime' : item.cycle + that.pro.conver_unit(item.cycle_unit);
|
||
$li = $('<li class="pay-cycle-btn ' + (index === 0 ? 'active' : '') + '"><span>' + name + '</span></li>').data($.extend({ pid: config.pid }, item));
|
||
$('.voucher-group').append($li);
|
||
});
|
||
|
||
$('.voucher-group').removeClass('hide');
|
||
$('#use-voucher').removeClass('disabled').text('Pay');
|
||
});
|
||
},
|
||
// 渲染授权列表
|
||
renderAuthList: function (callback) {
|
||
var layerThat = this;
|
||
var config = layerThat.getConfig();
|
||
var removeLoad = layerThat.addLoading('.libPay-qcode-item:not(.hide)');
|
||
bt.send('get_product_auth', 'auth/get_product_auth', { page: 1, pageSize: 15, pid: config.pid }, function (rdata) {
|
||
removeLoad();
|
||
|
||
if (callback) callback(rdata);
|
||
|
||
$('.auth-group').empty();
|
||
if (rdata == null && !Array.isArray(rdata)) rdata = [];
|
||
if (rdata.length == 0) {
|
||
$('.auth-group').addClass('hide');
|
||
$('#use-auth').addClass('disabled').text('No authorization');
|
||
return;
|
||
}
|
||
|
||
var html = '';
|
||
$.each(rdata, function (index, item) {
|
||
if (config.pid == item.product_id) {
|
||
html +=
|
||
'<li class="pay-cycle-btn ' +
|
||
(index == 0 ? 'active' : '') +
|
||
'" data-id="' +
|
||
item.serial_no +
|
||
'" style="width:180px"><span>' +
|
||
(item.cycle === 999 ? 'Lifetime' : bt.format_data(item.end_time)) +
|
||
'</span></li>';
|
||
}
|
||
});
|
||
$('.auth-group').append(html);
|
||
$('.auth-group').removeClass('hide');
|
||
$('#use-auth').removeClass('disabled').text('Authorization');
|
||
});
|
||
},
|
||
});
|
||
});
|
||
// if (!bt.get_cookie('bt_user_info')) {
|
||
// bt.pub.bind_btname(function () {
|
||
// window.location.reload();
|
||
// });
|
||
// return false;
|
||
// }
|
||
},
|
||
product_cache: {}, //产品周期缓存
|
||
order_cache: {},
|
||
// 获取产品周期 ,并进行对象缓存
|
||
get_product_discount_cache: function (config, callback) {
|
||
var that = this;
|
||
if (typeof this.product_cache[config.pid] != 'undefined') {
|
||
if (callback) callback(this.product_cache[config.pid]);
|
||
} else {
|
||
bt.soft.pro.get_product_discount_by(config.pid, function (rdata) {
|
||
//rdata = {"36": {"discount": 1, "did": 0, "price": 3564, "name": "正常", "sprice": 3564}, "24": {"discount": 1, "did": 0, "price": 2376, "name": "正常", "sprice": 2376}, "12": {"discount": 1, "did": 0, "price": 1188, "name": "正常", "sprice": 1188}, "6": {"discount": 1, "did": 0, "price": 594, "name": "正常", "sprice": 594}, "3": {"discount": 1, "did": 0, "price": 297, "name": "正常", "sprice": 297}, "1": {"discount": 1, "did": 0, "price": 99, "name": "正常", "sprice": 99}, "pid": "100000045"};
|
||
if (typeof rdata.status === 'boolean') {
|
||
if (!rdata.status) {
|
||
bt.msg(rdata);
|
||
return false;
|
||
}
|
||
}
|
||
that.product_cache[config.pid] = rdata;
|
||
setTimeout(function () {
|
||
delete that.product_cache[config.pid];
|
||
}, 60000);
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
// 产品页面刷新
|
||
product_pay_page_refresh: function (config) {
|
||
var that = this;
|
||
var condition = config.condition;
|
||
switch (condition) {
|
||
case 1:
|
||
var loadT = bt.load();
|
||
bt.send('get_product_auth', 'auth/get_product_auth', { page: 1, pageSize: 15, pid: config.pid }, function (res) {
|
||
bt.soft.pro.get_voucher(config.pid, function (rdata) {
|
||
loadT.close();
|
||
var _arry = [
|
||
{ title: '微信支付', condition: 2 },
|
||
{ title: 'Stripe', condition: 3 },
|
||
{ title: 'voucher', condition: 4 },
|
||
{ title: 'Authorization', condition: 7, _pid: config.pid },
|
||
];
|
||
// if (config.renew) {
|
||
// _arry.splice(_arry.length - 1, 1);
|
||
// _arry[rdata.length > 0 ? '2' : '1'].active = true;
|
||
// config.condition = rdata.length > 0 ? 4 : 2;
|
||
// } else {
|
||
_arry[res.length > 0 ? '3' : rdata.length > 0 ? '2' : '1'].active = true;
|
||
config.condition = res.length > 0 ? 7 : rdata.length > 0 ? 4 : 3;
|
||
// }
|
||
if (res == null) res = [];
|
||
if (rdata == null) rdata = [];
|
||
$('#libPay-mode .li-con')
|
||
.empty()
|
||
.append(
|
||
that.product_pay_swicth('payment', {
|
||
name: config.name,
|
||
pid: config.pid,
|
||
data: _arry,
|
||
voucher_data: rdata,
|
||
})
|
||
);
|
||
if (config.renew) {
|
||
if (rdata.length > 0) config.voucher_data = rdata;
|
||
} else {
|
||
if (rdata.length > 0) config.voucher_data = rdata;
|
||
if (res.length > 0) config.voucher_data = res;
|
||
}
|
||
that.product_pay_page_refresh(config);
|
||
});
|
||
});
|
||
break;
|
||
case 2:
|
||
case 3:
|
||
$('#libPay-content .li-tit').text('Choose your plan');
|
||
config.pay = condition;
|
||
if (config.pid == '100000030') {
|
||
$('#libPay-tips').show();
|
||
} else {
|
||
$('#libPay-tips').hide();
|
||
}
|
||
var loadT = bt.load();
|
||
bt.soft.get_product_discount_cache(config, function (rdata) {
|
||
loadT.close();
|
||
var _arry = [];
|
||
var index = 0;
|
||
try {
|
||
delete rdata.pid;
|
||
} catch (error) {
|
||
console.log(rdata.pid);
|
||
}
|
||
that.each(rdata, function (key, item) {
|
||
_arry.push($.extend({ cycle: parseInt(key) }, item));
|
||
});
|
||
_arry[index].active = true;
|
||
$('#libPay-content .li-con')
|
||
.empty()
|
||
.append(
|
||
that.product_pay_swicth('time', {
|
||
name: config.name,
|
||
pid: config.pid,
|
||
data: _arry,
|
||
})
|
||
);
|
||
config.condition = 5;
|
||
config = $.extend(config, _arry[index]);
|
||
that.product_pay_page_refresh(config);
|
||
});
|
||
break;
|
||
case 4:
|
||
var loadP = bt.load('Getting deduction volume information!');
|
||
clearInterval(bt.soft.pub.wxpayTimeId);
|
||
$('#libPay-content').empty().append('<div class="li-tit c4"></div><div class="li-con c5"></div>');
|
||
$('#libPay-pay').empty();
|
||
$('#libPay-content .li-tit').text('Vouchers');
|
||
$('#libPay-pay').removeAttr('data-qecode');
|
||
$('#libPay-tips').hide();
|
||
|
||
function callback(rdata) {
|
||
loadP.close();
|
||
if (rdata == null && !Array.isArray(rdata)) rdata = [];
|
||
if (rdata.length == 0) {
|
||
$('#libPay-content .li-con').empty();
|
||
that.product_pay_page_refresh({ condition: 6, pid: '', code: false });
|
||
return false;
|
||
}
|
||
rdata[0].active = true;
|
||
$('#libPay-content .li-con').append(
|
||
that.product_pay_swicth('voucher', {
|
||
name: config.name,
|
||
pid: config.pid,
|
||
data: rdata,
|
||
})
|
||
);
|
||
config.condition = 6;
|
||
that.product_pay_page_refresh($.extend(config, rdata[0]));
|
||
}
|
||
if (config.voucher_data) {
|
||
callback(config.voucher_data);
|
||
} else {
|
||
bt.soft.pro.get_voucher(config.pid, function (rdata) {
|
||
callback(rdata);
|
||
});
|
||
}
|
||
break;
|
||
case 5:
|
||
$('#libPay-content .li-con').css('height', 'auto');
|
||
$('.libPay-mask').show();
|
||
if ($('#libPay-pay').attr('data-qecode')) {
|
||
var qcode = $('#libPay-content li').eq(config.dom_index).data('qrcode-url');
|
||
$('#libPay-pay').find('.sale-price').html(config.price.toFixed(2));
|
||
$('#libPay-pay')
|
||
.find('.cost-price')
|
||
.css('display', config.sprice > config.price ? 'inline-block' : 'none')
|
||
.html('$ ' + config.sprice.toFixed(2));
|
||
$('#libPay-pay').find('#PayQcode').html('<div class="loading">Loading, please wait!</div>');
|
||
if (qcode) {
|
||
$('#libPay-pay').find('#PayQcode').empty().qrcode(qcode);
|
||
that.product_pay_monitor({ pid: config.pid, name: config.name });
|
||
$('.libPay-mask').hide();
|
||
return false;
|
||
}
|
||
} else {
|
||
$('#libPay-pay').html('<div class="cloading">Loading, please wait!</div>');
|
||
}
|
||
var paream = { pid: config.pid, cycle: config.cycle };
|
||
paream.source = parseInt(bt.get_cookie('pay_source') || 0);
|
||
console.log(paream.source);
|
||
if (paream.source === 0) {
|
||
if ($('.btpro-gray').length == 1) {
|
||
// 是否免费版
|
||
paream.source = 27;
|
||
} else {
|
||
paream.source = 28;
|
||
}
|
||
}
|
||
if (!paream.pid) delete paream.pid;
|
||
if (bt.get_cookie('serial_no') != null) paream.serial_no = config.serial_no || bt.get_cookie('serial_no');
|
||
that.pro.create_order(paream, function (rdata) {
|
||
if (rdata.status === false) {
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
layer.msg(rdata.msg, { icon: 2 });
|
||
return;
|
||
}
|
||
config.pay = parseInt($('#libPay-mode .pay-cycle-btn.active').data('condition'));
|
||
// 二维码显示界面
|
||
$('#libPay-pay')
|
||
.empty()
|
||
.append(that.product_pay_swicth(config.pay == 2 ? 'wechat' : 'alipay', $.extend({ order_no: rdata.order_no, stripe_publishable_key: rdata.stripe_publishable_key }, config)));
|
||
});
|
||
$('#libPay-pay').on('click', '#checkout-button', function () {
|
||
var loadT = bt.load('Getting the session ID,Please waiting!');
|
||
var stripe = Stripe($(this).data('keys'));
|
||
that.pro.get_check_out_info($(this).data('code'), function (res) {
|
||
loadT.close();
|
||
if (res.id) {
|
||
stripe.redirectToCheckout({ sessionId: res.id });
|
||
} else {
|
||
layer.msg('Payment order failed, please contact administrator!', { icon: 2 });
|
||
}
|
||
});
|
||
});
|
||
break;
|
||
case 6:
|
||
var _html = $('<div class="paymethod-submit text-center"></div>');
|
||
var _button = $(
|
||
'<button class="btn btn-success btn-sm f16 ' + (config.serial_no ? '' : 'disabled') + '" style="width: 200px; height: 40px;">' + (config.serial_no ? 'Pay' : 'No vouchers') + '</button>'
|
||
);
|
||
_button.click(function (ev) {
|
||
if (!config.serial_no) {
|
||
layer.msg('No vouchers');
|
||
return false;
|
||
}
|
||
bt.soft.pro.create_order_voucher(config.pid, config.code, config.id, config.cycle, config.cycle_unit, config.charge_type, function (rdata) {
|
||
layer.closeAll();
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
bt.msg(rdata.res);
|
||
});
|
||
});
|
||
$('#libPay-pay').empty().append(_html.append(_button));
|
||
break;
|
||
case 7:
|
||
if (config.renew) return false;
|
||
var loadA = bt.load('Obtaining authorization information!');
|
||
$('#libPay-content').empty().append('<div class="li-tit c4"></div><div class="li-con c5"></div>');
|
||
$('#libPay-pay').empty();
|
||
var _pid = config.pid;
|
||
$('#libPay-content .li-tit').text('Authorization information');
|
||
bt.send('get_product_auth', 'auth/get_product_auth', { page: 1, pageSize: 15, pid: config.pid }, function (res) {
|
||
loadA.close();
|
||
if (res.status == false) {
|
||
layer.msg(res.msg, { icon: res.status ? 1 : 2 });
|
||
return false;
|
||
}
|
||
_html = $('<ul class="pay-btn-group"></ul>');
|
||
if (res.length == 0) {
|
||
_html.append($('<li class="pay-cycle-btn" id="no_authorization" style="width:180px;cursor: default;" disabled="disabled"><span> No authorization</span></li>'));
|
||
}
|
||
var authorization_flag = false;
|
||
$.each(res, function (index, item) {
|
||
if (_pid == item.product_id) {
|
||
_html.append(
|
||
$('<li class="pay-cycle-btn ' + (index == 0 ? 'active' : '') + '" data-id="' + item.serial_no + '" style="width:180px"><span>' + bt.format_data(item.end_time) + '</span></li>')
|
||
);
|
||
authorization_flag = true;
|
||
}
|
||
if (authorization_flag == false && index == res.length - 1) {
|
||
_html.append($('<li class="pay-cycle-btn" id="no_authorization" style="width:180px;cursor: default;" disabled="disabled"><span> No authorization</span></li>'));
|
||
}
|
||
});
|
||
$('#libPay-content .li-con').empty().append(_html);
|
||
$('#libPay-content ul li').click(function () {
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
});
|
||
$('#libPay-pay')
|
||
.empty()
|
||
.append($('<div class="lib-price-box text-center"><button type="button" id="authorization" style="margin-top:30px" class="btn btn-success ">Authorization</button></div>'));
|
||
//授权
|
||
$('#authorization').unbind();
|
||
var html = $('#libPay-content .li-con ul li span').html() || '';
|
||
if (html.indexOf('No authorization') > 0) {
|
||
$('#authorization').attr('disabled', 'disabled');
|
||
} else {
|
||
$('#authorization').removeAttr('disabled');
|
||
$('#authorization').on('click', function (e) {
|
||
var _serial_no = $('#libPay-content .active').attr('data-id');
|
||
if (typeof _serial_no == 'undefined') return false;
|
||
var loadU = bt.load('Under licensing!');
|
||
bt.send('auth_activate', 'auth/auth_activate', { serial_no: _serial_no }, function (res) {
|
||
loadU.close();
|
||
if (res) {
|
||
layer.msg(res.msg, { icon: res.status ? 1 : 2 });
|
||
if (res.status) {
|
||
window.location.reload();
|
||
}
|
||
}
|
||
});
|
||
});
|
||
}
|
||
});
|
||
break;
|
||
}
|
||
},
|
||
// 产品购买,渲染方法
|
||
product_pay_swicth: function (type, config) {
|
||
var _html = '',
|
||
that = this;
|
||
switch (type) {
|
||
case 'type': // 产品类型(配置参数)
|
||
_html = $('<ul class="li-c-item"></ul>');
|
||
this.each(config, function (index, item) {
|
||
_html.append(
|
||
$(
|
||
'<li class="pay-cycle-btn ' +
|
||
(item.active ? 'active' : '') +
|
||
'">' +
|
||
(item.recommend ? '<span class="recommend-pay-icon"></span>' : '') +
|
||
'<span class="item-name pull-left">' +
|
||
item.title +
|
||
'</span>' +
|
||
'<span class="item-info f12 pull-right c7">' +
|
||
item.ps +
|
||
'</span>' +
|
||
'</li>'
|
||
)
|
||
.data(item)
|
||
.click(function (ev) {
|
||
var data = $(this).data();
|
||
if (!$(this).hasClass('active')) that.product_pay_page_refresh($.extend({ condition: 1 }, data));
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
})
|
||
);
|
||
});
|
||
break;
|
||
case 'payment': // 产品付款方式
|
||
_html = $('<ul class="pay-btn-group"></ul>');
|
||
this.each(config.data, function (index, item) {
|
||
if (item.title != '微信支付') {
|
||
_html.append(
|
||
$('<li class="pay-cycle-btn ' + (item.active ? 'active' : '') + '" data-condition="' + item.condition + '"><span>' + item.title + '</span></li>')
|
||
.data($.extend({ pid: config.pid, name: config.name }, item))
|
||
.click(function (ev) {
|
||
var data = $(this).data();
|
||
if (!$(this).hasClass('active')) that.product_pay_page_refresh($.extend({ condition: $(this).attr('data-condition') }, data));
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
})
|
||
);
|
||
}
|
||
});
|
||
break;
|
||
case 'time': // 产品开通时长(配置参数)
|
||
_html = $('<ul class="pay-btn-group"></ul>');
|
||
this.each(config.data, function (index, item) {
|
||
_html.append(
|
||
$(
|
||
'<li class="pay-cycle-btn ' +
|
||
(item.active ? 'active' : '') +
|
||
'"><span data-unit=' +
|
||
item.cycle_unit +
|
||
'>' +
|
||
that.pro.conver_unit(item.cycle + item.cycle_unit) +
|
||
'</span>' +
|
||
(item.discount_rate != 1 ? '<em style="width:50px">' + (100 - item.discount_rate * 100) + '% off</em>' : '') +
|
||
'</li>'
|
||
)
|
||
.data(
|
||
$.extend(
|
||
{
|
||
pid: config.pid,
|
||
dom_index: index,
|
||
},
|
||
item
|
||
)
|
||
)
|
||
.click(function (ev) {
|
||
var data = $(this).data();
|
||
if (!$(this).hasClass('active')) that.product_pay_page_refresh($.extend({ condition: 5 }, data));
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
})
|
||
);
|
||
});
|
||
break;
|
||
case 'voucher': // 产品抵扣卷(配置参数)
|
||
_html = $('<ul class="pay-btn-group voucher-group"></ul>');
|
||
|
||
this.each(config.data, function (index, item) {
|
||
_html.append(
|
||
$(
|
||
'<li class="pay-cycle-btn ' +
|
||
(item.active ? 'active' : '') +
|
||
'"><span>' +
|
||
(item.cycle_unit == 'month' && item.cycle == 999 ? '永久' : item.cycle + that.pro.conver_unit(item.cycle_unit)) +
|
||
'</span></li>'
|
||
)
|
||
.data($.extend({ pid: config.pid }, item))
|
||
.click(function (ev) {
|
||
var data = $(this).data();
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
that.product_pay_page_refresh($.extend({ condition: 6 }, data));
|
||
})
|
||
);
|
||
});
|
||
break;
|
||
case 'wechat':
|
||
case 'alipay':
|
||
_html = $(
|
||
'<div class="lib-price-box text-center">' +
|
||
'<span class="lib-price-name f14"><b>Total</b></span>' +
|
||
'<span class="price-txt"><b class="sale-price">$' +
|
||
config.price.toFixed(2) +
|
||
'</b></span>' +
|
||
'<s class="cost-price" style="display: ' +
|
||
(config.market_price > config.price ? 'inline-block' : 'none') +
|
||
';">$ ' +
|
||
config.market_price.toFixed(2) +
|
||
'</s></div>' +
|
||
'<div class="lib-price-box text-center">' +
|
||
'<button type="button" id="checkout-button" style="margin-top:30px" class="btn btn-success " data-code="' +
|
||
config.order_no +
|
||
'" data-keys="' +
|
||
config.stripe_publishable_key +
|
||
'">Pay Now</button>'
|
||
);
|
||
// $(_html).find('#PayQcode').qrcode(config.data);
|
||
$('.libPay-mask').hide();
|
||
// that.product_pay_monitor({ pid: config.pid, name: config.name });
|
||
break;
|
||
}
|
||
return _html;
|
||
},
|
||
|
||
// 支付状态监听
|
||
product_pay_monitor: function (config) {
|
||
var that = this;
|
||
function callback(rdata) {
|
||
if (rdata.status) {
|
||
clearInterval(bt.soft.pub.wxpayTimeId);
|
||
layer.closeAll();
|
||
var title = '';
|
||
if (config.pid == 100000032 || config.pid === '') {
|
||
title = config.pid === '' ? '专业版支付成功!' : '企业版支付成功!';
|
||
setTimeout(function () {
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
location.reload(true);
|
||
}, 2000); // 需要重服务端重新获取软件列表,并刷新软件管理浏览器页面
|
||
} else {
|
||
title = config.name + '插件支付成功!';
|
||
setTimeout(function () {
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
location.reload(true);
|
||
}, 2000); // 需要重服务端重新获取软件列表,
|
||
}
|
||
bt.msg({ msg: title, icon: 1, shade: [0.3, '#000'] });
|
||
}
|
||
}
|
||
clearInterval(bt.soft.pub.wxpayTimeId);
|
||
function intervalFun() {
|
||
if (config.pid) {
|
||
that.pro.get_plugin_coupon(config.pid, callback);
|
||
} else {
|
||
that.pro.get_re_order_status(callback);
|
||
}
|
||
}
|
||
intervalFun();
|
||
bt.soft.pub.wxpayTimeId = setInterval(function () {
|
||
intervalFun();
|
||
}, 2500);
|
||
},
|
||
updata_ltd: function (is_alone) {
|
||
var param = { name: 'YakPanel 企业版', pid: 100000032, limit: 'ltd' };
|
||
if (is_alone || false) $.extend(param, { source: 5, is_alone: true });
|
||
bt.soft.product_pay_view(param);
|
||
},
|
||
//遍历数组和对象
|
||
each: function (obj, fn) {
|
||
var key,
|
||
that = this;
|
||
if (typeof fn !== 'function') return that;
|
||
obj = obj || [];
|
||
if (obj.constructor === Object) {
|
||
for (key in obj) {
|
||
if (fn.call(obj[key], key, obj[key])) break;
|
||
}
|
||
} else {
|
||
for (key = 0; key < obj.length; key++) {
|
||
if (fn.call(obj[key], key, obj[key])) break;
|
||
}
|
||
}
|
||
return that;
|
||
},
|
||
/**
|
||
* @description 升级专业版
|
||
*/
|
||
updata_pro: function (num) {
|
||
var param = {
|
||
name: 'Pro',
|
||
pid: 100000058,
|
||
limit: 'pro',
|
||
};
|
||
if (num) param['totalNum'] = num;
|
||
bt.set_cookie('pay_source', num);
|
||
bt.soft.product_pay_view(param);
|
||
},
|
||
/**
|
||
* @description 续费专业版
|
||
*/
|
||
renew_pro: function () {
|
||
var config = { name: 'Pro', pid: '100000058', limit: 'pro', renew: true };
|
||
if (!bt.get_cookie('serial_no')) delete config.renew;
|
||
bt.soft.product_pay_view(config);
|
||
},
|
||
// updata_pro: function() {
|
||
// bt.pub.get_user_info(function(rdata) {
|
||
// if (!rdata.status) {
|
||
// bt.pub.bind_btname(0, function(rdata) {
|
||
// if (rdata.status) bt.soft.updata_pro();
|
||
// })
|
||
// return;
|
||
// }
|
||
// var payhtml = '<div class="libPay" style="padding:15px 30px 30px 30px">\
|
||
// <div class="libpay-con">\
|
||
// </div>\
|
||
// <p style="position:absolute;bottom:17px;left:0;width:100%;text-align:center;color:red">' + lan.public_backup.buy_multiplev_bt_pro + '<a class="btlink" href="https://www.yakpanel.com/download/linuxpro.html#price" target="_blank">' + lan.public_backup.goto_bt + '</a></p>\
|
||
// </div>';
|
||
|
||
// bt.open({
|
||
// type: 1,
|
||
// title: lan.public_backup.up_pro_use_allplug_free,
|
||
// area: ['616px', '540px'],
|
||
// closeBtn: 2,
|
||
// shadeClose: false,
|
||
// content: payhtml
|
||
// });
|
||
// setTimeout(function() {
|
||
// bt.soft.get_product_discount('', 0);
|
||
// $(".pay-btn-group > li").click(function() {
|
||
// $(this).addClass("active").siblings().removeClass("active");
|
||
// });
|
||
// }, 100)
|
||
// })
|
||
// },
|
||
re_plugin_pay: function (pluginName, pid, type) {
|
||
bt.pub.get_user_info(function (rdata) {
|
||
if (!rdata.status) {
|
||
bt.pub.bind_btname(0, function (rdata) {
|
||
if (rdata.status) bt.soft.re_plugin_pay(pluginName, pid, type);
|
||
});
|
||
return;
|
||
}
|
||
var txt = lan.public_backup.buy;
|
||
if (type) txt = lan.public_backup.renew;
|
||
var payhtml =
|
||
'<div class="libPay" style="padding:15px 30px 30px 30px">\
|
||
<div class="libPay-item f14 plr15 libPay-select">\
|
||
<div class="li-tit c3">' +
|
||
lan.public_backup.type +
|
||
'</div>\
|
||
<div class="li-con c6">\
|
||
<ul class="li-c-item">\
|
||
<li class="active"><span class="item-name pull-left">' +
|
||
pluginName +
|
||
'</span><span class="item-info f12 pull-right c7">' +
|
||
lan.public_backup.apiece_of_plug +
|
||
'</span></li>\
|
||
<li><span class="item-name">' +
|
||
lan.public_backup.up_pro +
|
||
'</span><span class="item-info f12 pull-right c7">' +
|
||
lan.public_backup.use_allplug_free +
|
||
'</span></li>\
|
||
</ul>\
|
||
</div>\
|
||
</div>\
|
||
<div class="libpay-con">\
|
||
</div>\
|
||
</div>';
|
||
|
||
layer.open({
|
||
type: 1,
|
||
title: txt + pluginName,
|
||
area: ['616px', '680px'],
|
||
closeBtn: 2,
|
||
shadeClose: false,
|
||
content: payhtml,
|
||
});
|
||
setTimeout(function () {
|
||
bt.soft.get_product_discount(pluginName, pid);
|
||
$('.li-c-item li').click(function () {
|
||
var i = $(this).index();
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
if (i == 0) {
|
||
bt.soft.get_product_discount(pluginName, pid);
|
||
$('.pro-info').hide();
|
||
} else {
|
||
bt.soft.get_product_discount('', 0);
|
||
$('.pro-info').show();
|
||
}
|
||
});
|
||
$('.pay-btn-group > li').click(function () {
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
});
|
||
}, 100);
|
||
});
|
||
},
|
||
|
||
re_plugin_pay_other: function (pluginName, pid, type, price) {
|
||
bt.pub.get_user_info(function (rdata) {
|
||
if (!rdata.status) {
|
||
bt.pub.bind_btname(0, function (rdata) { });
|
||
return;
|
||
}
|
||
var txt = lan.public_backup.buy;
|
||
if (type) txt = lan.public_backup.renew;
|
||
var payhtml =
|
||
'<div class="libPay" style="padding:15px 30px 30px 30px">\
|
||
<div class="libpay-con">\
|
||
<div class="payment-con">\
|
||
<div class="pay-weixin">\
|
||
<div class="libPay-item f14 plr15">\
|
||
<div class="li-tit c4">' +
|
||
txt +
|
||
lan.public_backup.duration +
|
||
'</div>\
|
||
<div class="li-con c6" id="PayCycle"><ul class="pay-btn-group">\
|
||
<li class="pay-cycle-btn active" onclick="bt.soft.get_rscode_other(' +
|
||
pid +
|
||
',' +
|
||
price +
|
||
',1,' +
|
||
type +
|
||
')"><span>' +
|
||
lan.public_backup.month1 +
|
||
'</span></li>\
|
||
<li class="pay-cycle-btn" onclick="bt.soft.get_rscode_other(' +
|
||
pid +
|
||
',' +
|
||
price +
|
||
',3,' +
|
||
type +
|
||
')"><span>' +
|
||
lan.public_backup.month3 +
|
||
'</span></li>\
|
||
<li class="pay-cycle-btn" onclick="bt.soft.get_rscode_other(' +
|
||
pid +
|
||
',' +
|
||
price +
|
||
',6,' +
|
||
type +
|
||
')"><span>' +
|
||
lan.public_backup.month6 +
|
||
'</span></li>\
|
||
<li class="pay-cycle-btn" onclick="bt.soft.get_rscode_other(' +
|
||
pid +
|
||
',' +
|
||
price +
|
||
',12,' +
|
||
type +
|
||
')"><span>' +
|
||
lan.public_backup.year +
|
||
'</span></li>\
|
||
</ul></div>\
|
||
</div>\
|
||
<div class="lib-price-box text-center"><span class="lib-price-name f14"><b>' +
|
||
lan.public_backup.total +
|
||
'</b></span><span class="price-txt"><b class="sale-price"></b>' +
|
||
lan.public_backup.rmb +
|
||
'</span><s class="cost-price"></s></div>\
|
||
<div class="paymethod">\
|
||
<div class="pay-wx"></div>\
|
||
<div class="pay-wx-info f16 text-center"><span class="wx-pay-ico mr5"></span>' +
|
||
lan.public_backup.pay_by_wechatqrcore +
|
||
'</div>\
|
||
</div>\
|
||
</div>\
|
||
</div>\
|
||
</div>\
|
||
</div>';
|
||
|
||
layer.open({
|
||
type: 1,
|
||
title: txt + pluginName,
|
||
area: ['616px', '450px'],
|
||
closeBtn: 2,
|
||
shadeClose: false,
|
||
content: payhtml,
|
||
});
|
||
bt.soft.get_rscode_other(pid, price, 1, type);
|
||
setTimeout(function () {
|
||
$('.pay-btn-group > li').click(function () {
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
});
|
||
}, 100);
|
||
});
|
||
},
|
||
get_rscode_other: function (pid, price, cycle, type) {
|
||
var loadT = layer.msg(lan.public_backup.get_payment_info, { icon: 16, time: 0, shade: 0.3 });
|
||
$.post('/auth?action=create_plugin_other_order', { pid: pid, cycle: cycle, type: type }, function (rdata) {
|
||
layer.close(loadT);
|
||
if (!rdata.status) {
|
||
layer.closeAll();
|
||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||
return;
|
||
}
|
||
|
||
if (!rdata.msg.code) {
|
||
layer.closeAll();
|
||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||
soft.flush_cache();
|
||
return;
|
||
}
|
||
$('.sale-price').text((price * cycle).toFixed(2));
|
||
$('.pay-wx').html('');
|
||
$('.pay-wx').qrcode(rdata.msg.code);
|
||
bt.set_cookie('other_oid', rdata.msg.oid);
|
||
bt.soft.get_order_stat(rdata.msg.oid, type);
|
||
});
|
||
},
|
||
get_order_stat: function (order_id, type) {
|
||
if (bt.get_cookie('other_oid') != order_id) return;
|
||
setTimeout(function () {
|
||
$.post('/auth?action=get_order_stat', { oid: order_id, type: type }, function (stat) {
|
||
if (stat == 1) {
|
||
layer.closeAll();
|
||
soft.flush_cache();
|
||
return;
|
||
}
|
||
|
||
if ($('.pay-btn-group').length > 0) {
|
||
bt.soft.get_order_stat(order_id, type);
|
||
}
|
||
});
|
||
}, 1000);
|
||
},
|
||
get_voucher_list: function (pid) {
|
||
$('#couponlist').html("<div class='cloading'>" + lan.public_backup.loading + '</div>');
|
||
bt.soft.pro.get_voucher(pid, function (rdata) {
|
||
if (rdata != null && rdata.length > 0) {
|
||
var con = '';
|
||
var len = rdata.length;
|
||
for (var i = 0; i < len; i++) {
|
||
if (rdata[i].status != 1) {
|
||
var cyc = rdata[i].cycle + bt.soft.pro.conver_unit(rdata[i].unit);
|
||
if (rdata[i].cycle == 999) {
|
||
cyc = lan.public_backup.permanent;
|
||
}
|
||
con += '<li class="pay-cycle-btn" data-coupon-id ="' + rdata[i].id + '" data-charge-type ="' + rdata[i].charge_type + '" data-code="' + rdata[i].code + '"><span>' + cyc + '</span></li>';
|
||
}
|
||
}
|
||
$('#couponlist').html('<ul class="pay-btn-group">' + con + '</ul>');
|
||
$('.pay-btn-group > li').click(function () {
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
$('.paymethod-submit button').css({ 'background-color': '#20a53a', 'border-color': '#20a53a' });
|
||
});
|
||
$('.paymethod-submit button').click(function () {
|
||
var _active = $('#couponlist .pay-btn-group .active'),
|
||
code = _active.attr('data-code'),
|
||
coupon_id = _active.attr('data-coupon-id'),
|
||
charge_type = _active.attr('data-charge-type');
|
||
|
||
var _span = $('#couponlist .pay-btn-group .active span'),
|
||
cycle = parseInt(_span.html()),
|
||
cycle_unit = _span.html.indexOf('Month') ? 'month' : 'year';
|
||
if (code == undefined) {
|
||
layer.msg(lan.public_backup.choose_cash_coupon);
|
||
} else {
|
||
bt.soft.pro.create_order_voucher(pid, code, coupon_id, cycle, cycle_unit, charge_type, function (rdata) {
|
||
layer.closeAll();
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
bt.msg(rdata.res);
|
||
});
|
||
}
|
||
});
|
||
} else {
|
||
$('#couponlist').html("<p class='text-center' style='margin-top:70px'>" + lan.public_backup.no_cash_coupon + '</p>');
|
||
}
|
||
});
|
||
},
|
||
get_rscode: function (pid, price, sprice, cycle) {
|
||
$('.sale-price').text(price);
|
||
if (price == sprice) {
|
||
$('.cost-price')
|
||
.text(sprice + lan.public_backup.rmb)
|
||
.hide();
|
||
} else {
|
||
$('.cost-price')
|
||
.text(sprice + lan.public_backup.rmb)
|
||
.show();
|
||
}
|
||
$('.pay-wx').html('<span class="loading">' + lan.public_backup.loading + '</span>');
|
||
$('.libPay').append('<div class="payloadingmask" style="height:100%;width:100%;position:absolute;top:0;left:0;z-index:1"></div>');
|
||
bt.soft.pro.create_order(pid, cycle, function (rdata) {
|
||
$('.payloadingmask').remove();
|
||
if (rdata.status === false) {
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
layer.msg(rdata.msg, { icon: 2 });
|
||
return;
|
||
}
|
||
$('.pay-wx').html('');
|
||
$('.pay-wx').qrcode(rdata.msg);
|
||
clearInterval(bt.soft.pub.wxpayTimeId);
|
||
if (pid) {
|
||
bt.soft.pub.wxpayTimeId = setInterval(function () {
|
||
bt.soft.pro.get_plugin_coupon(pid, function (rdata) {
|
||
if (rdata.status) {
|
||
layer.closeAll();
|
||
clearInterval(bt.soft.pub.wxpayTimeId);
|
||
bt.msg({ msg: lan.public_backup.pay_plug_success, icon: 16, time: 0, shade: [0.3, '#000'] });
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
return;
|
||
}
|
||
});
|
||
}, 3000);
|
||
} else {
|
||
bt.soft.pub.wxpayTimeId = setInterval(function () {
|
||
bt.soft.pro.get_re_order_status(function (rdata) {
|
||
if (rdata.status) {
|
||
layer.closeAll();
|
||
clearInterval(bt.soft.pub.wxpayTimeId);
|
||
bt.msg({ msg: lan.public_backup.pay_pro_success, icon: 16, time: 0, shade: [0.3, '#000'] });
|
||
bt.set_cookie('force', 1);
|
||
if (soft) soft.flush_cache();
|
||
return;
|
||
}
|
||
});
|
||
}, 3000);
|
||
}
|
||
});
|
||
},
|
||
get_product_discount: function (pluginName, pid) {
|
||
if (pluginName == undefined) pluginName = '';
|
||
if (pid == undefined) pid = 0;
|
||
var con =
|
||
'<div class="libPay-item f14 plr15">\
|
||
<div class="li-tit c4">' +
|
||
lan.public_backup.pay_method +
|
||
'</div>\
|
||
<div class="li-con c6" id="Payment"><ul class="pay-btn-group pay-cycle"><li class="pay-cycle-btn active"><span>' +
|
||
lan.public_backup.pay_by_wechat +
|
||
'</span></li><li class="pay-cycle-btn" onclick="bt.soft.get_voucher_list(' +
|
||
pid +
|
||
')"><span>' +
|
||
lan.public_backup.cash_coupon +
|
||
'</span></li></ul></div>\
|
||
</div>\
|
||
<div class="payment-con">\
|
||
<div class="pay-weixin">\
|
||
<div class="libPay-item f14 plr15">\
|
||
<div class="li-tit c4">' +
|
||
lan.public_backup.opening_time +
|
||
'</div>\
|
||
<div class="li-con c6" id="PayCycle"></div>\
|
||
</div>\
|
||
<div class="lib-price-box text-center"><span class="lib-price-name f14"><b>' +
|
||
lan.public_backup.total +
|
||
'</b></span><span class="price-txt"><b class="sale-price"></b>' +
|
||
lan.public_backup.rmb +
|
||
'</span><s class="cost-price"></s></div>\
|
||
<div class="paymethod">\
|
||
<div class="pay-wx"></div>\
|
||
<div class="pay-wx-info f16 text-center"><span class="wx-pay-ico mr5"></span>' +
|
||
lan.public_backup.pay_by_wechatqrcore +
|
||
'</div>\
|
||
</div>\
|
||
</div>\
|
||
<div class="pay-coupon" style="display:none">\
|
||
<div class="libPay-item f14 plr15">\
|
||
<div class="li-tit c4 ">' +
|
||
lan.public_backup.cash_coupon_list +
|
||
'</div>\
|
||
<div class="li-con c6" id="couponlist"><div class="btn-group"></div></div>\
|
||
</div>\
|
||
<div class="paymethod-submit text-center">\
|
||
<button class="btn btn-success btn-sm f16" style="width:200px;height:40px;background-color:#999;border-color:#888">' +
|
||
lan.public_backup.submit +
|
||
'</button>\
|
||
</div>\
|
||
</div>\
|
||
</div>';
|
||
$('.libpay-con').html("<div class='cloading'>" + lan.public_backup.loading + '</div>');
|
||
|
||
bt.soft.pro.get_product_discount_by(pluginName, function (rdata) {
|
||
if (rdata != null) {
|
||
var coucon = '';
|
||
var qarr = Object.keys(rdata);
|
||
var qlen = qarr.length;
|
||
if (pluginName) qlen = qlen - 1;
|
||
//折扣列表
|
||
for (var i = 0; i < qlen; i++) {
|
||
var j = qarr[i];
|
||
var a = rdata[j].price.toFixed(2);
|
||
var b = rdata[j].sprice.toFixed(2);
|
||
var c = rdata[j].discount;
|
||
coucon +=
|
||
'<li class="pay-cycle-btn" onclick="bt.soft.get_rscode(' +
|
||
pid +
|
||
',' +
|
||
a +
|
||
',' +
|
||
b +
|
||
',' +
|
||
j +
|
||
')"><span>' +
|
||
bt.soft.pro.conver_unit(j) +
|
||
'</span>' +
|
||
(c == 1 ? '' : '<em>' + c * 10 + lan.public_backup.discount + '</em>') +
|
||
'</li>';
|
||
}
|
||
$('.libpay-con').html(con);
|
||
$('#PayCycle').html('<ul class="pay-btn-group">' + coucon + '</ul>');
|
||
$('.pay-btn-group li').click(function () {
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
});
|
||
$('.pay-cycle li').click(function () {
|
||
var i = $(this).index();
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
$('.payment-con > div').eq(i).show().siblings().hide();
|
||
});
|
||
$('#PayCycle .pay-btn-group li').eq(0).click();
|
||
}
|
||
});
|
||
},
|
||
get_index_list: function (callback) {
|
||
bt.send('get_index_list', 'plugin/get_index_list', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_sort_index: function (data, callback) {
|
||
var loading = bt.load();
|
||
bt.send('sort_index', 'plugin/sort_index', { ssort: data }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_soft_list: function (p, type, search, callback) {
|
||
if (p == undefined) p = 1;
|
||
if (type == undefined) type = 0;
|
||
if (search == undefined) search = '';
|
||
var force = bt.get_cookie('force');
|
||
if (force == undefined) force = 0;
|
||
p = p + '';
|
||
if (p.indexOf('not_load') == -1) {
|
||
var loading = bt.load(lan.public.the, 1);
|
||
} else {
|
||
var loading = null;
|
||
p = p.split('not_load')[0];
|
||
}
|
||
|
||
bt.send('get_soft_list', 'plugin/get_soft_list', { p: p, type: type, tojs: 'soft.get_list', force: force, query: search }, function (rdata) {
|
||
if (loading) loading.close();
|
||
bt.set_cookie('force', 0);
|
||
if (rdata.pro_authorization_sn != null) {
|
||
bt.set_cookie('serial_no', rdata.pro_authorization_sn);
|
||
} else {
|
||
bt.clear_cookie('serial_no');
|
||
}
|
||
bt.set_cookie('pro_end', rdata.pro);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
to_index: function (name, callback) {
|
||
var status = $('#index_' + name).prop('checked') ? '0' : '1';
|
||
if (name.indexOf('php-') >= 0) {
|
||
var verinfo = name.replace(/\./, '');
|
||
status = $('#index_' + verinfo).prop('checked') ? '0' : '1';
|
||
}
|
||
if (status == 1) {
|
||
bt.send('add_index', 'plugin/add_index', { sName: name }, function (rdata) {
|
||
rdata.time = 1000;
|
||
if (!rdata.status) bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
} else {
|
||
bt.send('remove_index', 'plugin/remove_index', { sName: name }, function (rdata) {
|
||
rdata.time = 1000;
|
||
if (!rdata.status) bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
add_make_args: function (name, init) {
|
||
name = bt.soft.get_name(name);
|
||
pdata = {
|
||
name: name,
|
||
args_name: $("input[name='make_name']").val(),
|
||
init: init,
|
||
ps: $("input[name='make_ps']").val(),
|
||
args: $("input[name='make_args']").val(),
|
||
};
|
||
if (pdata.args_name.length < 1 || pdata.args.length < 1) {
|
||
layer.msg('Custom module name and parameter cannot be empty!');
|
||
return;
|
||
}
|
||
loadT = bt.load('Adding custom module...');
|
||
bt.send('add_make_args', 'plugin/add_make_args', pdata, function (rdata) {
|
||
loadT.close();
|
||
bt.soft.get_make_args(name);
|
||
bt.msg(rdata);
|
||
if (rdata.status === true) bt.soft.loadOpen.close();
|
||
});
|
||
},
|
||
show_make_args: function (name) {
|
||
name = bt.soft.get_name(name);
|
||
var _aceEditor = '';
|
||
bt.soft.loadOpen = bt.open({
|
||
type: 1,
|
||
title: 'Add custom module',
|
||
area: '500px',
|
||
btn: [lan.public.submit, lan.public.close],
|
||
content:
|
||
'<div class="bt-form c6">\
|
||
<from class="bt-form" id="outer_url_form" style="padding:30px 10px;display:inline-block;">\
|
||
<div class="line">\
|
||
<span class="tname">Name</span>\
|
||
<div class="info-r" style="margin-left: 100px;">\
|
||
<input name="make_name" class="bt-input-text mr5" type="text" placeholder="Enter module name e.g., test_1" style="width:350px" value="">\
|
||
</div>\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname">Details</span>\
|
||
<div class="info-r" style="margin-left: 100px;">\
|
||
<input name="make_ps" class="bt-input-text mr5" placeholder="Description within 30 words" type="text" style="width:350px" value="">\
|
||
</div>\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname">Parameter</span>\
|
||
<div class="info-r" style="margin-left: 100px;">\
|
||
<input name="make_args" class="bt-input-text mr5" type="text" placeholder="As:--add-module=/tmp/echo/echo-nginx-module-master" style="width:350px" value="">\
|
||
</div>\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname">Prefix script</span>\
|
||
<div class="info-r" style="margin-left: 100px;">\
|
||
<div id="preposition_shell" class="bt-input-text" style="height:300px;width:350px;font-size:11px;line-height:20px;"></div>\
|
||
</div>\
|
||
</div>\
|
||
</from>\
|
||
</div>',
|
||
success: function (layer, index) {
|
||
_aceEditor = ace.edit('preposition_shell', {
|
||
theme: 'ace/theme/chrome', //主题
|
||
mode: 'ace/mode/sh', // 语言类型
|
||
wrap: true,
|
||
showInvisibles: false,
|
||
showPrintMargin: false,
|
||
showFoldWidgets: false,
|
||
useSoftTabs: true,
|
||
tabSize: 2,
|
||
showPrintMargin: false,
|
||
readOnly: false,
|
||
});
|
||
_aceEditor.setValue('# The shell script content executed before compilation is usually prepared for the dependent installation and source download of the third-party module');
|
||
},
|
||
yes: function () {
|
||
bt.soft.add_make_args(name, _aceEditor.getValue());
|
||
},
|
||
});
|
||
},
|
||
modify_make_args: function (name, args_name) {
|
||
name = bt.soft.get_name(name);
|
||
var _aceEditor = '';
|
||
bt.soft.loadOpen = bt.open({
|
||
type: 1,
|
||
title: 'Edit custom option module[' + name + ':' + args_name + ']',
|
||
area: '500px',
|
||
btn: [lan.public.submit, lan.public.close],
|
||
content:
|
||
'<div class="bt-form c6">\
|
||
<from class="bt-form" id="outer_url_form" style="padding:30px 10px;display:inline-block;">\
|
||
<div class="line">\
|
||
<span class="tname" style="width: 125px;padding-right: 5px;">Module name</span>\
|
||
<div class="info-r">\
|
||
<input name="make_name" class="bt-input-text mr5" type="text" placeholder="Only letters, numbers, underscores" style="width:350px" value="' +
|
||
bt.soft.make_data[args_name].name +
|
||
'">\
|
||
</div>\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname" style="width: 125px;padding-right: 5px;">Module details</span>\
|
||
<div class="info-r">\
|
||
<input name="make_ps" class="bt-input-text mr5" placeholder="Description within 30 words" type="text" style="width:350px" value="' +
|
||
bt.soft.make_data[args_name].ps +
|
||
'">\
|
||
</div>\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname" style="width: 125px;padding-right: 5px;">Module parameter</span>\
|
||
<div class="info-r">\
|
||
<input name="make_args" class="bt-input-text mr5" type="text" placeholder="As:--add-module=/tmp/echo/echo-nginx-module-master" style="width:350px" value="' +
|
||
bt.soft.make_data[args_name].args +
|
||
'">\
|
||
</div>\
|
||
</div>\
|
||
<div class="line">\
|
||
<span class="tname" style="width: 125px;padding-right: 5px;">Prefix script</span>\
|
||
<div class="info-r">\
|
||
<div id="preposition_shell" class="bt-input-text" style="height:300px;width:350px;font-size:11px;line-height:20px;"></div>\
|
||
</div>\
|
||
</div>\
|
||
</from>\
|
||
</div>',
|
||
success: function (layer, index) {
|
||
_aceEditor = ace.edit('preposition_shell', {
|
||
theme: 'ace/theme/chrome', //主题
|
||
mode: 'ace/mode/sh', // 语言类型
|
||
wrap: true,
|
||
showInvisibles: false,
|
||
showPrintMargin: false,
|
||
showFoldWidgets: false,
|
||
useSoftTabs: true,
|
||
tabSize: 2,
|
||
showPrintMargin: false,
|
||
readOnly: false,
|
||
});
|
||
_aceEditor.setValue(bt.soft.make_data[args_name].init);
|
||
},
|
||
yes: function () {
|
||
bt.soft.add_make_args(name, _aceEditor.getValue());
|
||
},
|
||
});
|
||
},
|
||
set_make_args: function (_this, name, args_name) {
|
||
name = bt.soft.get_name(name);
|
||
if ($('.args_' + args_name)[0].checked) {
|
||
bt.soft.make_config.push(args_name);
|
||
} else {
|
||
index = bt.soft.make_config.indexOf(args_name);
|
||
if (index === -1) return;
|
||
bt.soft.make_config.splice(index, 1);
|
||
}
|
||
index = bt.soft.make_config.indexOf('');
|
||
if (index !== -1) bt.soft.make_config.splice(index, 1);
|
||
bt.send('set_make_args', 'plugin/set_make_args', { name: name, args_names: bt.soft.make_config.join('\n') }, function (rdata) {
|
||
if (!rdata.status) {
|
||
bt.msg(rdata);
|
||
}
|
||
});
|
||
},
|
||
//遍历数组和对象
|
||
each: function (obj, fn) {
|
||
var key,
|
||
that = this;
|
||
if (typeof fn !== 'function') return that;
|
||
obj = obj || [];
|
||
if (obj.constructor === Object) {
|
||
for (key in obj) {
|
||
if (fn.call(obj[key], key, obj[key])) break;
|
||
}
|
||
} else {
|
||
for (key = 0; key < obj.length; key++) {
|
||
if (fn.call(obj[key], key, obj[key])) break;
|
||
}
|
||
}
|
||
return that;
|
||
},
|
||
del_make_args: function (name, args_name) {
|
||
name = bt.soft.get_name(name);
|
||
bt.confirm({ msg: 'Confirm delete[' + name + ':' + args_name + ']module?', title: 'Delete[' + name + ':' + args_name + ']module!' }, function () {
|
||
loadT = bt.load('Removing module[' + args_name + ']...');
|
||
bt.send('del_make_args', 'plugin/del_make_args', { name: name, args_name: args_name }, function (rdata) {
|
||
bt.soft.get_make_args(name);
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
},
|
||
get_make_args: function (name) {
|
||
name = bt.soft.get_name(name);
|
||
loadT = bt.load('Getting optional modules...');
|
||
bt.send('get_make_args', 'plugin/get_make_args', { name: name }, function (rdata) {
|
||
loadT.close();
|
||
var module_html = '';
|
||
bt.soft.make_config = rdata.config.split('\n');
|
||
bt.soft.make_data = {};
|
||
for (var i = 0; i < rdata.args.length; i++) {
|
||
bt.soft.make_data[rdata.args[i].name] = rdata.args[i];
|
||
var checked_str = bt.soft.make_config.indexOf(rdata.args[i].name) == -1 ? '' : 'checked="checked"';
|
||
module_html +=
|
||
'<tr>\
|
||
<td>\
|
||
<input class="args_' +
|
||
rdata.args[i].name +
|
||
'" onclick="bt.soft.set_make_args(this,\'' +
|
||
name +
|
||
"','" +
|
||
rdata.args[i].name +
|
||
'\')" type="checkbox" ' +
|
||
checked_str +
|
||
' />\
|
||
</td>\
|
||
<td>' +
|
||
rdata.args[i].name +
|
||
'</td><td>' +
|
||
rdata.args[i].ps +
|
||
'</td>\
|
||
<td>\
|
||
<a onclick="bt.soft.modify_make_args(\'' +
|
||
name +
|
||
"','" +
|
||
rdata.args[i].name +
|
||
'\')" class="btlink">Edit</a>\
|
||
| <a onclick="bt.soft.del_make_args(\'' +
|
||
name +
|
||
"','" +
|
||
rdata.args[i].name +
|
||
'\')" class="btlink">Del</a>\
|
||
</td>\
|
||
</tr>';
|
||
}
|
||
$('.modules_list').html(module_html);
|
||
});
|
||
},
|
||
check_make_is: function (name) {
|
||
name = bt.soft.get_name(name);
|
||
var shows = ['nginx', 'apache', 'mysql', 'php'];
|
||
for (var i = 0; i < shows.length; i++) {
|
||
if (name.indexOf(shows[i]) === 0) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
get_name: function (name) {
|
||
if (name.indexOf('php-') === 0) {
|
||
return 'php';
|
||
}
|
||
return name;
|
||
},
|
||
install: function (name, that) {
|
||
var _this = this;
|
||
if (bt.soft.is_install) {
|
||
layer.msg('Installing other software, please operate later!', { icon: 0 });
|
||
return false;
|
||
}
|
||
_this.get_soft_find(name, function (rdata) {
|
||
var arrs = ['apache', 'nginx', 'mysql'];
|
||
if ($.inArray(name, arrs) >= 0 || name.indexOf('php-') >= 0) {
|
||
var SelectVersion = '',
|
||
shtml = name;
|
||
if (rdata.versions.length > 1) {
|
||
for (var i = 0; i < rdata.versions.length; i++) {
|
||
var item = rdata.versions[i];
|
||
SelectVersion += '<option>' + name + ' ' + item.m_version + '</option>';
|
||
}
|
||
shtml = "<select id='SelectVersion' class='bt-input-text' style='margin-left:30px'>" + SelectVersion + '</select>';
|
||
} else {
|
||
shtml = "<span id='SelectVersion'>" + name + '</span>';
|
||
}
|
||
var loadOpen = bt.open({
|
||
type: 1,
|
||
title: name + lan.soft.install_title,
|
||
area: '400px',
|
||
content:
|
||
"<div class='bt-form pd20 pd20 c6' style='padding-bottom:50px'>\
|
||
<div class='version line' style='padding-left:15px'>" +
|
||
lan.soft.install_version +
|
||
':' +
|
||
shtml +
|
||
"</div>\
|
||
<div class='fangshi line' style='padding-left:15px'>" +
|
||
lan.bt.install_type +
|
||
":<label data-title='" +
|
||
lan.bt.install_src_title +
|
||
"'>" +
|
||
lan.bt.install_src +
|
||
"<input type='checkbox'></label><label data-title='" +
|
||
lan.bt.install_rpm_title +
|
||
"'>" +
|
||
lan.bt.install_rpm +
|
||
"<input type='checkbox' checked></label></div>\
|
||
<div class='install_modules' style='display: none;'>\
|
||
<div style='margin-bottom:15px;padding-top:15px;border-top:1px solid #ececec;'><button onclick=\"bt.soft.show_make_args('" +
|
||
name +
|
||
"')\" class='btn btn-success btn-sm'>Add custom module</button></div>\
|
||
<div class='select_modules divtable' style='margin-bottom:20px'>\
|
||
<table class='table table-hover'>\
|
||
<thead>\
|
||
<tr>\
|
||
<th width='0px'></th>\
|
||
<th width='90px'>Module name</th>\
|
||
<th >Module details</th>\
|
||
<th width='70px'>Operation</th>\
|
||
</tr>\
|
||
</thead>\
|
||
<tbody class='modules_list'></tbody>\
|
||
</table>\
|
||
</div>\
|
||
</div>\
|
||
<div class='bt-form-submit-btn'>\
|
||
<button type='button' class='btn btn-danger btn-sm btn-title btn-close'>" +
|
||
lan.public.close +
|
||
"</button>\
|
||
<button type='button' id='bi-btn' class='btn btn-success btn-sm btn-title bi-btn'>" +
|
||
lan.public.submit +
|
||
'</button>\
|
||
</div>\
|
||
</div>',
|
||
success: function ($layer, index) {
|
||
$layer.find('.btn-close').click(function () {
|
||
layer.close(index);
|
||
});
|
||
},
|
||
});
|
||
|
||
$('.fangshi input').click(function () {
|
||
$(this).attr('checked', 'checked').parent().siblings().find('input').removeAttr('checked');
|
||
var type = $('.fangshi input:eq(0)').prop('checked') ? '0' : '1';
|
||
if (type === '1') {
|
||
$('.install_modules').hide();
|
||
return;
|
||
}
|
||
|
||
if (bt.soft.check_make_is(name)) {
|
||
$('.install_modules').show();
|
||
bt.soft.get_make_args(name);
|
||
}
|
||
});
|
||
|
||
$('#bi-btn').click(function () {
|
||
loadOpen.close();
|
||
var info = $('#SelectVersion').val().toLowerCase();
|
||
name = info.split(' ')[0];
|
||
version = info.split(' ')[1];
|
||
var type = $('.fangshi input:eq(0)').prop('checked') ? '0' : '1';
|
||
if (rdata.versions.length > 1) {
|
||
_this.install_soft(rdata, version, type);
|
||
} else {
|
||
_this.install_soft(rdata, rdata.versions[0].m_version, type, that);
|
||
}
|
||
});
|
||
} else if (rdata.versions.length > 1) {
|
||
var SelectVersion = '';
|
||
for (var i = 0; i < rdata.versions.length; i++) {
|
||
var item = rdata.versions[i];
|
||
var v_type = parseInt(item.beta) === 1 ? ' Beta' : ' Stable';
|
||
// SelectVersion += '<option>' + name + ' ' + item.full_version + v_type + '</option>';
|
||
var version = parseInt(rdata.type) === 5 ? item.m_version : item.full_version;
|
||
SelectVersion += '<option>' + name + ' ' + version + v_type + '</option>';
|
||
}
|
||
var loadOpen = bt.open({
|
||
type: 1,
|
||
title: name + lan.soft.install_title,
|
||
area: '350px',
|
||
content:
|
||
"<div class='bt-form pd20 pb70 c6'>\
|
||
<div class='version line'>" +
|
||
lan.soft.install_version +
|
||
":<select id='SelectVersion' class='bt-input-text' style='margin-left:30px'>" +
|
||
SelectVersion +
|
||
"</select></div>\
|
||
<div class='bt-form-submit-btn'>\
|
||
<button type='button' class='btn btn-danger btn-sm btn-title' onclick='layer.closeAll()'>" +
|
||
lan.public.close +
|
||
"</button>\
|
||
<button type='button' id='bi-btn' class='btn btn-success btn-sm btn-title bi-btn'>" +
|
||
lan.public.submit +
|
||
'</button>\
|
||
</div>\
|
||
</div>',
|
||
});
|
||
$('#bi-btn').click(function () {
|
||
loadOpen.close();
|
||
var info = $('#SelectVersion').val().toLowerCase();
|
||
name = info.split(' ')[0];
|
||
version = info.split(' ')[1];
|
||
_this.install_soft(rdata, version, 0, that);
|
||
});
|
||
} else {
|
||
// _this.install_soft(rdata, rdata.versions[0].full_version, 0, that);
|
||
_this.install_soft(rdata, parseInt(rdata.type) == 5 ? rdata.versions[0].m_version : rdata.versions[0].full_version, 0, that);
|
||
}
|
||
});
|
||
},
|
||
is_loop_speed: true,
|
||
is_install: false,
|
||
//显示进度
|
||
show_speed: function () {
|
||
bt.send(
|
||
'get_lines',
|
||
'ajax/get_lines',
|
||
{
|
||
num: 10,
|
||
filename: '/tmp/panelShell.pl',
|
||
},
|
||
function (rdata) {
|
||
if ($('#install_show').length < 1) return;
|
||
if (rdata.status === true) {
|
||
$('#install_show').text(rdata.msg);
|
||
$('#install_show').scrollTop(1000000000);
|
||
}
|
||
setTimeout(function () {
|
||
bt.soft.show_speed();
|
||
}, 1000);
|
||
}
|
||
);
|
||
},
|
||
loadT: null,
|
||
speed_msg: "<pre style='margin-bottom: 0px;height:250px;text-align: left;background-color: #000;color: #fff;white-space: pre-wrap;' id='install_show'>[MSG]</pre>",
|
||
//显示进度窗口
|
||
// show_speed_window: function(msg, callback) {
|
||
// bt.soft.loadT = layer.open({
|
||
// title: false,
|
||
// type: 1,
|
||
// closeBtn: 0,
|
||
// shade: 0.3,
|
||
// area: "500px",
|
||
// offset: "30%",
|
||
// content: bt.soft.speed_msg.replace('[MSG]', msg),
|
||
// success: function(layers, index) {
|
||
// setTimeout(function() {
|
||
// bt.soft.show_speed();
|
||
// }, 1000);
|
||
// if (callback) callback();
|
||
// }
|
||
// });
|
||
// },
|
||
show_speed_window: function (config, callback) {
|
||
if (!config.soft) config['soft'] = { type: 10 };
|
||
if (config.soft.type == 5) {
|
||
//使用消息盒子安装
|
||
if (callback) callback();
|
||
return false;
|
||
} else if (config.soft.type == 10 && !config.status) {
|
||
//第三方安装, 非安装,仅下载安装脚本
|
||
if (callback) callback();
|
||
return false;
|
||
}
|
||
layer.closeAll();
|
||
bt.soft.loadT = layer.open({
|
||
title: config.title || 'Executing setup script, please wait...',
|
||
type: 1,
|
||
closeBtn: false,
|
||
maxmin: true,
|
||
shade: false,
|
||
skin: 'install_soft',
|
||
area: ['500px', '300px'],
|
||
content:
|
||
"<pre style='width:500px;margin-bottom: 0px;height:100%;border-radius:0px; text-align: left;background-color: #000;color: #fff;white-space: pre-wrap;' id='install_show'>" +
|
||
config.msg +
|
||
'</pre>',
|
||
success: function (layers, index) {
|
||
if (typeof config.event === 'string') {
|
||
$(config.event).removeAttr('onclick').html('Installing');
|
||
}
|
||
$('.layui-layer-max').hide();
|
||
bt.soft.is_loop_speed = true;
|
||
bt.soft.is_install = true;
|
||
bt.soft.show_speed();
|
||
if (callback) callback();
|
||
},
|
||
end: function () {
|
||
bt.soft.is_install = false;
|
||
bt.soft.is_loop_speed = false;
|
||
},
|
||
min: function () {
|
||
$('.layui-layer-max').show();
|
||
},
|
||
restore: function () {
|
||
$('.layui-layer-max').hide();
|
||
},
|
||
});
|
||
},
|
||
// install_soft: function(item, version, type,that) { //安装单版本
|
||
// if (type == undefined) type = 0;
|
||
// item.title = bt.replace_all(item.title, '-' + version, '');
|
||
// var msg = item.type != 5 ? lan.soft.lib_insatll_confirm.replace('{1}', item.title) : lan.get('install_confirm', [item.title, version]);
|
||
|
||
// bt.confirm({ msg: '<div style="word-break: break-word;">'+msg+'</div>', title: item.type != 5 ? lan.soft.lib_install : lan.soft.install_title }, function() {
|
||
// bt.soft.show_speed_window(lan.soft.lib_install_the, function() {
|
||
// bt.send('install_plugin', 'plugin/install_plugin', { sName: item.name, version: version, type: type }, function(rdata) {
|
||
|
||
// if (rdata.size) {
|
||
// layer.close(bt.soft.loadT);
|
||
// _this.install_other(rdata)
|
||
// return;
|
||
// }
|
||
// layer.close(bt.soft.loadT);
|
||
// bt.pub.get_task_count();
|
||
// if (soft) soft.get_list();
|
||
// bt.msg(rdata);
|
||
// })
|
||
// })
|
||
// })
|
||
// },
|
||
install_soft: function (item, version, type, that) {
|
||
//安装单版本
|
||
if (type == undefined) type = 0;
|
||
var loadT = '';
|
||
item.title = bt.replace_all(item.title, '-' + version, '');
|
||
layer.confirm(
|
||
item.type != 5 ? lan.soft.lib_insatll_confirm.replace('{1}', item.title) : lan.get('install_confirm', [item.title, version]),
|
||
{
|
||
btn: [lan.public.confirm, lan.public.close],
|
||
title: item.type != 5 ? lan.soft.lib_install : lan.soft.install_title,
|
||
icon: 0,
|
||
closeBtn: 2,
|
||
},
|
||
function () {
|
||
layer.closeAll();
|
||
bt.soft.show_speed_window(
|
||
{
|
||
title: 'Installing ' + item.title + ', please wait...',
|
||
msg: lan.soft.lib_install_the,
|
||
soft: item,
|
||
event: that,
|
||
},
|
||
function () {
|
||
if (item.type == 10)
|
||
loadT = layer.msg('Getting third party installation information, please wait<img src="/static/img/ing.gif">', {
|
||
icon: 16,
|
||
time: 0,
|
||
shade: [0.3, '#000'],
|
||
});
|
||
bt.send(
|
||
'install_plugin',
|
||
'plugin/install_plugin',
|
||
{
|
||
sName: item.name,
|
||
version: version,
|
||
type: type,
|
||
},
|
||
function (rdata) {
|
||
if (rdata.size) {
|
||
layer.close(loadT);
|
||
bt.soft.install_other(rdata, status, that);
|
||
return;
|
||
}
|
||
layer.close(bt.soft.loadT);
|
||
bt.pub.get_task_count(function (rdata) {
|
||
if (rdata > 0 && item.type === 5) messagebox();
|
||
});
|
||
if (!rdata.status) {
|
||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||
} else {
|
||
if (window.location.pathname != '/soft') {
|
||
window.location.reload();
|
||
}
|
||
}
|
||
setTimeout(function () {
|
||
if (typeof soft != 'undefined') soft.get_list();
|
||
}, 2000);
|
||
}
|
||
);
|
||
}
|
||
);
|
||
}
|
||
);
|
||
},
|
||
install_other: function (data, status, callback) {
|
||
layer.closeAll();
|
||
var loadT = layer.open({
|
||
type: 1,
|
||
area: '500px',
|
||
title: (data.update ? lan.public_backup.update : lan.public_backup.install) + lan.public_backup.third_party_plug,
|
||
closeBtn: 2,
|
||
shift: 5,
|
||
shadeClose: false,
|
||
btn: [data.update ? lan.public_backup.update : lan.public_backup.install, lan.public_backup.cancel],
|
||
content:
|
||
'<style>\
|
||
.install_three_plugin{padding:25px;}\
|
||
.plugin_user_info p { font-size: 14px;}\
|
||
.plugin_user_info {padding: 15px 30px;line-height: 26px;background: #f5f6fa;border-radius: 5px;border: 1px solid #efefef;}\
|
||
.btn-content{text-align: center;margin-top: 25px;}\
|
||
</style>\
|
||
<div class="bt-form c7 install_three_plugin pb70">\
|
||
<div class="plugin_user_info">\
|
||
<p><b>' +
|
||
lan.public_backup.name +
|
||
'</b>' +
|
||
data.title +
|
||
'</p>\
|
||
<p><b>' +
|
||
lan.public_backup.version +
|
||
'</b>' +
|
||
data.versions +
|
||
'</p>\
|
||
<p><b>' +
|
||
lan.public_backup.ps +
|
||
'</b>' +
|
||
(data.update ? data.update : data.ps) +
|
||
'</p>\
|
||
<p><b>' +
|
||
lan.public_backup.size +
|
||
'</b>' +
|
||
bt.format_size(data.size, true) +
|
||
'</p>\
|
||
<p><b>' +
|
||
lan.public_backup.author +
|
||
'</b>' +
|
||
data.author +
|
||
'</p>\
|
||
<p><b>' +
|
||
lan.public_backup.source +
|
||
'</b><a class="btlink" href="' +
|
||
data.home +
|
||
'" target="_blank">' +
|
||
data.home +
|
||
'</a></p>\
|
||
</div>\
|
||
<ul class="help-info-text c7">\
|
||
' +
|
||
(data.update ? '<li>' + lan.public_backup.update_wait + '</li>' : '<li>' + lan.public_backup.install_wait + '</li><li>' + lan.public_backup.exist_cover + '</li>') +
|
||
'\
|
||
</ul>\
|
||
</div>',
|
||
yes: function (index, event) {
|
||
soft.input_zip(data.name, data.tmp_path, data, callback);
|
||
},
|
||
});
|
||
},
|
||
update_soft: function (name, title, version, min_version, update_msg, type, callback) {
|
||
var _this = this;
|
||
var msg = '<li>' + lan.public_backup.update_tips + '</li>';
|
||
if (name == 'mysql')
|
||
msg = "<ul style='color:red;'><li>" + lan.public_backup.db_update_tips + '</li><li>' + lan.public_backup.update_tips1 + '</li><li>' + lan.public_backup.update_tips + '</li></ul>';
|
||
if (update_msg)
|
||
msg +=
|
||
'<div style=" margin-top: 10px;"><span style="font-size: 14px;font-weight: 900;">Update description: </span><hr style="margin-top: 5px; margin-bottom: 5px;" /><pre>' +
|
||
update_msg.replace(/(_bt_)/g, '\n') +
|
||
'</pre><hr style="margin-top: -5px; margin-bottom: -5px;" /></div>';
|
||
bt.show_confirm(
|
||
lan.public_backup.update + '[' + title + ']',
|
||
lan.public_backup.update_tips2.replace('{1}', title).replace('{2}', version).replace('{3}', min_version),
|
||
function () {
|
||
// bt.soft.show_speed_window('Updating to [' + title + '-' + version + '.' + min_version + '],Please wait...', function() {
|
||
// bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: version, upgrade: version }, function(rdata) {
|
||
// if (rdata.size) {
|
||
// _this.install_other(rdata)
|
||
// return;
|
||
// }
|
||
// layer.close(bt.soft.loadT);
|
||
// bt.pub.get_task_count(function(rdata){
|
||
// if(rdata > 0 && item.type === 5) messagebox();
|
||
// });
|
||
// if (soft) soft.get_list();
|
||
// if (rdata.status === true && rdata.msg.indexOf('queue') === -1) rdata.msg = 'Update completed!';
|
||
// bt.msg(rdata);
|
||
// })
|
||
// })
|
||
// bt.soft.show_speed_window({ title: 'Updating to [' + title + '-' + version + '.' + min_version + '],Please wait...', status: true, soft: { type: parseInt(type) } }, function () {
|
||
// bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: version + '.' + min_version, upgrade: version + '.' + min_version }, function (rdata) {
|
||
// console.log(rdata);
|
||
// if (rdata.size) {
|
||
// _this.install_other(rdata);
|
||
// return;
|
||
// }
|
||
// layer.close(bt.soft.loadT);
|
||
// bt.pub.get_task_count(function (rdata) {
|
||
// if (rdata > 0 && item.type === 5) messagebox();
|
||
// });
|
||
// if (typeof soft != 'undefined') soft.get_list();
|
||
// bt.msg(rdata);
|
||
// });
|
||
// });
|
||
_this.get_soft_find(name, function (item) {
|
||
var full_version = parseInt(item.type) === 5 ? version : version + '.' + min_version;
|
||
bt.soft.show_speed_window({ title: 'Updating to [' + title + '-' + version + '.' + min_version + '],Please wait...', status: true, soft: { type: parseInt(type) } }, function () {
|
||
bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: full_version, upgrade: full_version }, function (rdata) {
|
||
console.log(rdata);
|
||
if (rdata.size) {
|
||
_this.install_other(rdata);
|
||
return;
|
||
}
|
||
layer.close(bt.soft.loadT);
|
||
bt.pub.get_task_count(function (rdata) {
|
||
if (rdata > 0 && parseInt(item.type) === 5) messagebox();
|
||
});
|
||
if (typeof soft != 'undefined') {
|
||
callback && callback()
|
||
soft.get_list()
|
||
};
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
});
|
||
},
|
||
msg
|
||
);
|
||
},
|
||
un_install: function (name) {
|
||
var _this = this;
|
||
_this.get_soft_find(name, function (item) {
|
||
var version = '';
|
||
for (var i = 0; i < item.versions.length; i++) {
|
||
if (item.versions[i].setup && bt.contains(item.version, item.versions[i].m_version)) {
|
||
version = item.versions[i].m_version;
|
||
if (version.indexOf('.') < 0) version += '.' + item.versions[i].version;
|
||
break;
|
||
}
|
||
}
|
||
var title = bt.replace_all(item.title, '-' + version, '');
|
||
bt.confirm({ msg: lan.soft.uninstall_confirm.replace('{1}', title).replace('{2}', version), title: lan.soft.uninstall, icon: 3, closeBtn: 2 }, function () {
|
||
var loadT = bt.load(lan.soft.lib_uninstall_the);
|
||
bt.send('uninstall_plugin', 'plugin/uninstall_plugin', { sName: name, version: version }, function (rdata) {
|
||
loadT.close();
|
||
bt.pub.get_task_count();
|
||
if (soft) soft.get_list();
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
});
|
||
},
|
||
get_soft_find: function (name, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('get_soft_find', 'plugin/get_soft_find', { sName: name }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_config_path: function (name) {
|
||
var fileName = '';
|
||
if (bt.os == 'Linux') {
|
||
switch (name) {
|
||
case 'mysql':
|
||
case 'mysqld':
|
||
fileName = '/etc/my.cnf';
|
||
break;
|
||
case 'nginx':
|
||
fileName = '/www/server/nginx/conf/nginx.conf';
|
||
break;
|
||
case 'pureftpd':
|
||
fileName = '/www/server/pure-ftpd/etc/pure-ftpd.conf';
|
||
break;
|
||
case 'apache':
|
||
fileName = '/www/server/apache/conf/httpd.conf';
|
||
break;
|
||
case 'tomcat':
|
||
fileName = '/www/server/tomcat/conf/server.xml';
|
||
break;
|
||
case 'memcached':
|
||
fileName = '/etc/init.d/memcached';
|
||
break;
|
||
case 'redis':
|
||
fileName = '/www/server/redis/redis.conf';
|
||
break;
|
||
case 'openlitespeed':
|
||
fileName = '/usr/local/lsws/conf/httpd_config.conf';
|
||
break;
|
||
default:
|
||
fileName = '/www/server/php/' + name + '/etc/php.ini';
|
||
break;
|
||
}
|
||
}
|
||
return fileName;
|
||
},
|
||
set_lib_config: function (name, title) {
|
||
var loadT = bt.load(lan.soft.menu_temp);
|
||
bt.send('getConfigHtml', 'plugin/getConfigHtml', { name: name }, function (rhtml) {
|
||
loadT.close();
|
||
if (rhtml.status === false) {
|
||
if (name == 'phpguard') {
|
||
layer.msg(lan.soft.menu_phpsafe, { icon: 1 });
|
||
} else {
|
||
layer.msg(rhtml.msg, { icon: 2 });
|
||
}
|
||
return;
|
||
}
|
||
bt.open({
|
||
type: 1,
|
||
shift: 5,
|
||
offset: '20%',
|
||
closeBtn: 2,
|
||
area: '700px',
|
||
title: '' + title,
|
||
content: rhtml.replace('"javascript/text"', '"text/javascript"'),
|
||
});
|
||
/*rtmp = rhtml.split('<script type="javascript/text">')
|
||
if (rtmp.length < 2) {
|
||
rtmp = rhtml.split('<script type="text/javascript">')
|
||
}
|
||
rcode = rtmp[1].replace('</script>','');
|
||
setTimeout(function(){
|
||
if(!!(window.attachEvent && !window.opera)){
|
||
execScript(rcode);
|
||
}else{
|
||
window.eval(rcode);
|
||
}
|
||
},200)*/
|
||
});
|
||
},
|
||
save_config: function (fileName, data) {
|
||
var encoding = 'utf-8';
|
||
var loadT = bt.load(lan.soft.the_save);
|
||
bt.send('SaveFileBody', 'files/SaveFileBody', { data: data, path: fileName, encoding: encoding }, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.database = {
|
||
get_list: function (page, search, callback) {
|
||
if (page == undefined) page = 1;
|
||
search = search == undefined ? '' : search;
|
||
var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order') : '';
|
||
|
||
var data = 'tojs=database.get_list&table=databases&limit=15&p=' + page + '&search=' + search + order;
|
||
bt.pub.get_data(data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_root_pass: function (callback) {
|
||
bt.send('getKey', 'data/getKey', { table: 'config', key: 'mysql_root', id: 1 }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_root: function (type) {
|
||
if (type == 'mongo' || type == 'pgsql') {
|
||
var t = bt.data.database.getType();
|
||
bt_tools.send('database/' + t + '/get_root_pwd', function (rdata) {
|
||
if (type == 'pgsql') bt.data.database.mongo['list'][0]['title'] = lan.database.admin_password;
|
||
var bs = bt.render_form(bt.data.database.mongo);
|
||
$('.password' + bs).val(rdata.msg);
|
||
});
|
||
} else {
|
||
bt.database.get_root_pass(function (rdata) {
|
||
var bs = bt.render_form(bt.data.database.root);
|
||
$('.password' + bs).val(rdata);
|
||
});
|
||
}
|
||
},
|
||
set_data_pass: function (callback) {
|
||
var bs = bt.render_form(bt.data.database.data_pass, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
return bs;
|
||
},
|
||
set_data_access: function (name) {
|
||
var loading = bt.load();
|
||
bt.send('GetDatabaseAccess', 'database/GetDatabaseAccess', { name: name }, function (rdata) {
|
||
loading.close();
|
||
var bs = bt.render_form(bt.data.database.data_access);
|
||
$('.name' + bs).val(name);
|
||
$('.bt-form .line .tname').css('width', '125px');
|
||
setTimeout(function () {
|
||
if (rdata.msg.permission == '127.0.0.1' || rdata.msg.permission == '%') {
|
||
$('.dataAccess' + bs).val(rdata.msg.permission);
|
||
} else {
|
||
$('.dataAccess' + bs)
|
||
.val('ip')
|
||
.trigger('change');
|
||
$('#dataAccess_subid').val(rdata.msg.permission);
|
||
}
|
||
$('#force_ssl').prop('checked', rdata.msg.ssl ? true : false);
|
||
$('#force_ssl').change(function () {
|
||
var open_type = $('#force_ssl').prop('checked');
|
||
if (open_type) {
|
||
var t =
|
||
'<div>\
|
||
<h3 style="font-size: 18px;font-weight:600;">Warning! This feature requires Advanced Knowledge!</h3>\
|
||
<ul style="width:91%;margin-top: 19px;border: 1px solid #ececec;border-radius: 10px;background: #f7f7f7;padding: 15px;list-style-type: inherit;padding-left:25px;">\
|
||
<li style="color:red;">After enabling the forced SSL connection, it may affect your application connection and database performance.</li>\
|
||
</ul>\
|
||
</div>';
|
||
var loadP = layer.confirm(
|
||
t,
|
||
{
|
||
btn: ['Confirm', 'Cancel'],
|
||
icon: 3,
|
||
area: '561px',
|
||
closeBtn: 2,
|
||
title: 'Confirm Open?',
|
||
},
|
||
function () {
|
||
$('#force_ssl').prop('checked', true);
|
||
layer.close(loadP);
|
||
},
|
||
function () {
|
||
$('#force_ssl').prop('checked', false);
|
||
layer.close(loadP);
|
||
}
|
||
);
|
||
}
|
||
});
|
||
}, 100);
|
||
});
|
||
},
|
||
add_database: function (cloudList, callback) {
|
||
var type = bt.data.database.getType();
|
||
if (type === 'mysql') {
|
||
bt.data.database.data_add.list[2].items[0].value = bt.get_random(16);
|
||
bt.data.database.data_add.list[4].items[0].items = cloudList;
|
||
bt.render_form(bt.data.database.data_add, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
} else {
|
||
var copyDataAdd = $.extend(true, {}, bt.data.database.data_add);
|
||
copyDataAdd.list[2].items[0].value = bt.get_random(16);
|
||
switch (type) {
|
||
case 'sqlserver':
|
||
case 'mongodb':
|
||
case 'pgsql':
|
||
delete copyDataAdd.list[0].items[1];
|
||
copyDataAdd.list.splice(3);
|
||
copyDataAdd.list.push(bt.data.database.data_add.list[4]);
|
||
copyDataAdd.list.push(bt.data.database.data_add.list[5]);
|
||
copyDataAdd.list[3].items[0].items = cloudList;
|
||
break;
|
||
}
|
||
// 没有本地或者远程数据库
|
||
if (cloudList.length == 0) {
|
||
copyDataAdd.list[copyDataAdd.list.length - 1].hide = true;
|
||
}
|
||
bt.render_form($.extend(true, {}, copyDataAdd), function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
del_database: function (data, callback) {
|
||
var loadT = bt.load(lan.get('del_all_task_the', [data.name]));
|
||
var type = bt.data.database.getType();
|
||
var params = { url: 'database?action=DeleteDatabase', data: data };
|
||
if (type != 'mysql') {
|
||
params.url = 'database/' + type + '/DeleteDatabase';
|
||
params.data = { data: JSON.stringify(data) };
|
||
}
|
||
bt_tools.send(params, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
sync_database: function (sid, callback) {
|
||
var loadT = bt.load(lan.database.sync_the);
|
||
var type = bt.data.database.getType();
|
||
var params = { url: 'database?action=SyncGetDatabases', data: { sid: sid } };
|
||
if (type != 'mysql') {
|
||
params.url = 'database/' + type + '/SyncGetDatabases';
|
||
params.data = { data: JSON.stringify({ sid: sid }) };
|
||
}
|
||
bt_tools.send(params, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
sync_to_database: function (data, callback) {
|
||
var loadT = bt.load(lan.database.sync_the);
|
||
var type = bt.data.database.getType();
|
||
var params = { url: 'database?action=SyncToDatabases', data: data };
|
||
if (type != 'mysql') {
|
||
params.url = 'database/' + type + '/SyncToDatabases';
|
||
params.data = { data: JSON.stringify(data) };
|
||
}
|
||
bt_tools.send(params, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
open_phpmyadmin: function (name, username, password) {
|
||
if ($('#toPHPMyAdmin').attr('action').indexOf('phpmyadmin') == -1) {
|
||
layer.msg(lan.database.phpmyadmin_err, { icon: 2, shade: [0.3, '#000'] });
|
||
setTimeout(function () {
|
||
window.location.href = '/soft';
|
||
}, 3000);
|
||
return;
|
||
}
|
||
$('#toPHPMyAdmin').attr('action', $('#toPHPMyAdmin').attr('public-data'));
|
||
var murl = $('#toPHPMyAdmin').attr('action');
|
||
$('#pma_username').val(username);
|
||
$('#pma_password').val(password);
|
||
$('#db').val(name);
|
||
layer.msg(lan.database.phpmyadmin, { icon: 16, shade: [0.3, '#000'], time: 1000 });
|
||
setTimeout(function () {
|
||
$('#toPHPMyAdmin').submit();
|
||
layer.closeAll();
|
||
}, 200);
|
||
},
|
||
submit_phpmyadmin: function (name, username, password, pub) {
|
||
if (pub === true) {
|
||
$('#toPHPMyAdmin').attr('action', $('#toPHPMyAdmin').attr('public-data'));
|
||
} else {
|
||
$('#toPHPMyAdmin').attr('action', '/phpmyadmin/index.php');
|
||
}
|
||
var murl = $('#toPHPMyAdmin').attr('action');
|
||
$('#pma_username').val(username);
|
||
$('#pma_password').val(password);
|
||
$('#db').val(name);
|
||
layer.msg(lan.database.phpmyadmin, { icon: 16, shade: [0.3, '#000'], time: 1000 });
|
||
setTimeout(function () {
|
||
$('#toPHPMyAdmin').submit();
|
||
layer.closeAll();
|
||
}, 200);
|
||
},
|
||
input_sql: function (fileName, dataName) {
|
||
bt.confirm({ msg: lan.database.input_confirm, title: lan.database.input_title }, function (index) {
|
||
var loading = bt.load(lan.database.input_the);
|
||
var type = bt.data.database.getType();
|
||
var params = { url: 'database?action=InputSql', data: { file: fileName, name: dataName } };
|
||
if (type != 'mysql') {
|
||
params.url = 'database/' + type + '/InputSql';
|
||
params.data = { data: JSON.stringify({ file: fileName, name: dataName }) };
|
||
}
|
||
bt_tools.send(params, function (rdata) {
|
||
loading.close();
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
},
|
||
backup_data: function (id, callback) {
|
||
var loadT = bt.load(lan.database.backup_the);
|
||
var type = bt.data.database.getType();
|
||
var params = { url: 'database?action=ToBackup', data: { id: id } };
|
||
if (type != 'mysql') {
|
||
params.url = 'database/' + type + '/ToBackup';
|
||
params.data = { data: JSON.stringify({ id: id }) };
|
||
}
|
||
bt_tools.send(params, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_backup: function (id, success, error) {
|
||
bt.confirm({ msg: lan.database.backup_del_confirm, title: lan.database.backup_del_title }, function (index) {
|
||
var loadT = bt.load();
|
||
bt.send('DelBackup', 'database/DelBackup', { id: id }, function (frdata) {
|
||
loadT.close();
|
||
bt.msg(frdata);
|
||
if (frdata.status) {
|
||
success && success(frdata);
|
||
} else {
|
||
error && error(frdata);
|
||
}
|
||
});
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.send('get_config', 'config/get_config', {}, function (rdata) {
|
||
bt.config = rdata;
|
||
});
|
||
|
||
bt.plugin = {
|
||
get_plugin_byhtml: function (name, callback) {
|
||
bt.send('getConfigHtml', 'plugin/getConfigHtml', { name: name }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_firewall_state: function (callback) {
|
||
var typename = getCookie('serverType');
|
||
var name = 'btwaf_httpd';
|
||
if (typename == 'nginx') name = 'btwaf';
|
||
bt.send('a', 'plugin/a', { name: name, s: 'get_total_all' }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.site = {
|
||
get_list: function (page, search, type, callback) {
|
||
if (page == undefined) page = 1;
|
||
type = type == undefined ? '&type=-1' : '&type=' + type;
|
||
search = search == undefined ? '' : search;
|
||
var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order') : '';
|
||
var data = 'tojs=site.get_list&table=sites&limit=15&p=' + page + '&search=' + search + order + type;
|
||
bt.pub.get_data(data, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_domains: function (id, callback) {
|
||
var data = 'table=domain&list=True&search=' + id;
|
||
bt.pub.get_data(
|
||
data,
|
||
function (rdata) {
|
||
if (callback) callback(rdata);
|
||
},
|
||
1
|
||
);
|
||
},
|
||
get_type: function (callback) {
|
||
bt.send('get_site_types', 'site/get_site_types', '', function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
add_type: function (name, callback) {
|
||
bt.send('add_site_type', 'site/add_site_type', { name: name }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
edit_type: function (data, callback) {
|
||
bt.send('modify_site_type_name', 'site/modify_site_type_name', { id: data.id, name: data.name }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_type: function (id, callback) {
|
||
bt.send('remove_site_type', 'site/remove_site_type', { id: id }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_type: function (data, callback) {
|
||
bt.send('set_site_type', 'site/set_site_type', { id: data.id, site_ids: data.site_array }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_domains: function (id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetSiteDomains', 'site/GetSiteDomains', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
add_domains: function (id, webname, domains, callback) {
|
||
var loading = bt.load();
|
||
bt.send('AddDomain', 'site/AddDomain', { domain: domains, webname: webname, id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
del_domain: function (siteId, siteName, domain, port, callback) {
|
||
var loading = bt.load();
|
||
bt.send('DelDomain', 'site/DelDomain', { id: siteId, webname: siteName, domain: domain, port: port }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
get_dirbind: function (id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetDirBinding', 'site/GetDirBinding', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
add_dirbind: function (id, domain, dirName, callback) {
|
||
var loading = bt.load();
|
||
bt.send('AddDirBinding', 'site/AddDirBinding', { id: id, domain: domain, dirName: dirName }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_dirbind: function (id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('DelDirBinding', 'site/DelDirBinding', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_dir_rewrite: function (data, callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetDirRewrite', 'site/GetDirRewrite', data, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_path: function (id, callback) {
|
||
bt.send('getKey', 'data/getKey', { table: 'sites', key: 'path', id: id }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_dir_userini: function (id, path, callback) {
|
||
bt.send('GetDirUserINI', 'site/GetDirUserINI', { id: id, path: path }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_dir_userini: function (path, id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetDirUserINI', 'site/SetDirUserINI', { path: path, id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_logs_status: function (id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('logsOpen', 'site/logsOpen', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_runpath: function (id, path, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetSiteRunPath', 'site/SetSiteRunPath', { id: id, runPath: path }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_path: function (id, path, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetPath', 'site/SetPath', { id: id, path: path }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_path_new: function (id, path, name, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetPath', 'site/SetPath', { id: id, path: path, name: name }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_pwd: function (id, username, password, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetHasPwd', 'site/SetHasPwd', { id: id, username: username, password: password }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
close_site_pwd: function (id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetHasPwd', 'site/CloseHasPwd', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_limitnet: function (id, callback) {
|
||
bt.send('GetLimitNet', 'site/GetLimitNet', { id: id }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_limitnet: function (id, perserver, perip, limit_rate, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetLimitNet', 'site/SetLimitNet', { id: id, perserver: perserver, perip: perip, limit_rate: limit_rate }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
close_limitnet: function (id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('CloseLimitNet', 'site/CloseLimitNet', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_rewrite_list: function (siteName, callback) {
|
||
bt.send('GetRewriteList', 'site/GetRewriteList', { siteName: siteName }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_rewrite_tel: function (name, data, callback) {
|
||
var loading = bt.load(lan.site.saving_txt);
|
||
bt.send('SetRewriteTel', 'site/SetRewriteTel', { name: name, data: data }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_index: function (id, callback) {
|
||
bt.send('GetIndex', 'site/GetIndex', { id: id }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_index: function (id, index, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetIndex', 'site/SetIndex', { id: id, Index: index }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_config: function (siteName, callback) {
|
||
if (bt.os == 'Linux') {
|
||
var sPath = '/www/server/panel/vhost/' + bt.get_cookie('serverType') + '/' + siteName + '.conf';
|
||
bt.files.get_file_body(sPath, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
set_site_config: function (siteName, data, encoding, callback) {
|
||
var loading = bt.load(lan.site.saving_txt);
|
||
if (bt.os == 'Linux') {
|
||
var sPath = '/www/server/panel/vhost/' + bt.get_cookie('serverType') + '/' + siteName + '.conf';
|
||
bt.files.set_file_body(sPath, data, 'utf-8', function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
set_phpversion: function (siteName, version, other, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetPHPVersion', 'site/SetPHPVersion', { siteName: siteName, version: version, other: other }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
// 重定向列表
|
||
get_redirect_list: function (name, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('GetRedirectList', 'site/GetRedirectList', { sitename: name }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
// 重定向列表
|
||
get_redirect_list: function (name, callback) {
|
||
var loadT = layer.load();
|
||
bt.send('GetRedirectList', 'site/GetRedirectList', { sitename: name }, function (rdata) {
|
||
layer.close(loadT);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
create_redirect: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('CreateRedirect', 'site/CreateRedirect', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
modify_redirect: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('ModifyRedirect', 'site/ModifyRedirect', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
remove_redirect: function (sitename, redirectname, callback) {
|
||
bt.show_confirm(lan.public_backup.del_rep + '[' + redirectname + ']', lan.public_backup.sure_del_rep, function () {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('DeleteRedirect', 'site/DeleteRedirect', { sitename: sitename, redirectname: redirectname }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
get_redirect_config: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('GetRedirectFile', 'site/GetRedirectFile', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
save_redirect_config: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('SaveProxyFile', 'site/SaveRedirectFile', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_proxy: function (siteName, callback) {
|
||
bt.send('GetProxy', 'site/GetProxy', { name: siteName }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_proxy: function (siteName, type, proxyUrl, toDomain, sub1, sub2, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetProxy', 'site/SetProxy', { name: siteName, type: type, proxyUrl: proxyUrl, toDomain: toDomain, sub1: sub1, sub2: sub2 }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_open_proxy_cache: function (siteName, callback) {
|
||
var loading = bt.load();
|
||
bt.send('ProxyCache', 'site/ProxyCache', { siteName: siteName }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_proxy_list: function (name, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('GetProxyList', 'site/GetProxyList', { sitename: name }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
create_proxy: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('CreateProxy', 'site/CreateProxy', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
remove_proxy: function (sitename, proxyname, callback) {
|
||
bt.show_confirm(lan.public_backup.del_proxy + '[' + proxyname + ']', lan.public_backup.sure_del_proxy, function () {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('RemoveProxy', 'site/RemoveProxy', { sitename: sitename, proxyname: proxyname }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
},
|
||
modify_proxy: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('ModifyProxy', ' site/ModifyProxy', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_proxy_config: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('GetProxyFile', 'site/GetProxyFile', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
save_proxy_config: function (obj, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('SaveProxyFile', 'site/SaveProxyFile', obj, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_security: function (id, name, callback) {
|
||
bt.send('GetSecurity', 'site/GetSecurity', { id: id, name: name }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_security: function (id, name, fix, domains, status, return_rule, callback) {
|
||
var loading = bt.load(lan.site.the_msg);
|
||
bt.send('SetSecurity', 'site/SetSecurity', { id: id, name: name, fix: fix, domains: domains, status: status, return_rule: return_rule }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_301: function (siteName, callback) {
|
||
bt.send('Get301Status', 'site/Get301Status', { siteName: siteName }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_site_301: function (siteName, srcDomain, toUrl, type, callback) {
|
||
var loading = bt.load();
|
||
bt.send('Set301Status', 'site/Set301Status', { siteName: siteName, toDomain: toUrl, srcDomain: srcDomain, type: type }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_tomcat: function (siteName, callback) {
|
||
var loading = bt.load(lan.public.config);
|
||
bt.send('SetTomcat', 'site/SetTomcat', { siteName: siteName }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_logs: function (siteName, callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetSiteLogs', 'site/GetSiteLogs', { siteName: siteName }, function (rdata) {
|
||
loading.close();
|
||
if (rdata.status !== true) rdata.msg = '';
|
||
if (rdata.msg == '') rdata.msg = lan.public_backup.no_log;
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_error_logs: function (siteName, callback) {
|
||
var loading = bt.load();
|
||
bt.send(
|
||
'get_site_err_log',
|
||
'site/get_site_err_log',
|
||
{
|
||
siteName: siteName,
|
||
},
|
||
function (rdata) {
|
||
loading.close();
|
||
if (rdata.status !== true) rdata.msg = '';
|
||
if (rdata.msg == '') rdata.msg = lan.public_backup.no_log;
|
||
if (callback) callback(rdata);
|
||
}
|
||
);
|
||
},
|
||
get_site_ssl: function (siteName, callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('GetSSL', 'site/GetSSL', { siteName: siteName }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
create_let: function (data, callback) {
|
||
var loadT = layer.open({
|
||
title: false,
|
||
type: 1,
|
||
closeBtn: 0,
|
||
shade: 0.3,
|
||
area: '500px',
|
||
offset: '30%',
|
||
content:
|
||
"<pre style='margin-bottom: 0px;height:250px;text-align: left;background-color: #000;color: #fff;white-space: pre-wrap;' id='create_lst'>" + lan.public_backup.preparing_for_cert + '...</pre>',
|
||
success: function (layers, index) {
|
||
bt.site.get_let_logs();
|
||
bt.send('CreateLet', 'site/CreateLet', data, function (rdata) {
|
||
layer.close(loadT);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
});
|
||
},
|
||
get_let_logs: function () {
|
||
bt.send(
|
||
'get_lines',
|
||
'ajax/get_lines',
|
||
{
|
||
num: 10,
|
||
filename: '/www/server/panel/logs/letsencrypt.log',
|
||
},
|
||
function (rdata) {
|
||
if ($('#create_lst').text() === '') return;
|
||
if (rdata.status === true) {
|
||
$('#create_lst').text(rdata.msg);
|
||
$('#create_lst').scrollTop($('#create_lst')[0].scrollHeight);
|
||
}
|
||
setTimeout(function () {
|
||
bt.site.get_let_logs();
|
||
}, 1000);
|
||
}
|
||
);
|
||
},
|
||
get_dns_api: function (callback) {
|
||
var loadT = bt.load();
|
||
bt.send('GetDnsApi', 'site/GetDnsApi', {}, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_dns_api: function (data, callback) {
|
||
var loadT = bt.load();
|
||
bt.send('SetDnsApi', 'site/SetDnsApi', data, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
verify_domain: function (partnerOrderId, siteName, callback) {
|
||
var loadT = bt.load(lan.site.ssl_apply_2);
|
||
bt.send('Completed', 'ssl/Completed', { partnerOrderId: partnerOrderId, siteName: siteName }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_dv_ssl: function (domain, path, callback) {
|
||
var loadT = bt.load(lan.site.ssl_apply_1);
|
||
bt.send('GetDVSSL', 'ssl/GetDVSSL', { domain: domain, path: path }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_module_config: function (param, callback) {
|
||
var loadT = bt.load('Obtaining the alarm configuration, please wait...');
|
||
bt.send(
|
||
'get_module_config',
|
||
'push/get_module_config',
|
||
{
|
||
name: param.name,
|
||
type: param.type,
|
||
},
|
||
function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
}
|
||
);
|
||
},
|
||
|
||
// 设置
|
||
set_push_config: function (param, callback) {
|
||
var loadT = bt.load('Please wait while setting alarm configuration...');
|
||
bt.send(
|
||
'set_push_config',
|
||
'push/set_push_config',
|
||
{
|
||
name: param.name,
|
||
id: param.id,
|
||
data: param.data,
|
||
},
|
||
function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
}
|
||
);
|
||
},
|
||
// 获取消息推送配置
|
||
get_msg_configs: function (callback) {
|
||
var loadT = bt.load('Getting the message push configuration, please wait...');
|
||
bt.send('get_msg_configs', 'config/get_msg_configs', {}, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
// 下载证书
|
||
download_cert: function (param, callback) {
|
||
var loadT = bt.load('Please wait while downloading the certificate...');
|
||
bt.send(
|
||
'download_cert',
|
||
'site/download_cert',
|
||
{
|
||
siteName: param.siteName,
|
||
ssl_type: param.ssl_type || 'csr',
|
||
pem: param.pem,
|
||
key: param.key,
|
||
pwd: param.pwd || '', //密码,非必填
|
||
},
|
||
function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
}
|
||
);
|
||
},
|
||
get_ssl_info: function (partnerOrderId, siteName, callback) {
|
||
var loadT = bt.load(lan.site.ssl_apply_3);
|
||
bt.send('GetSSLInfo', 'ssl/GetSSLInfo', { partnerOrderId: partnerOrderId, siteName: siteName }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_cert_ssl: function (certName, siteName, callback) {
|
||
var loadT = bt.load(lan.public_backup.deploy_cert);
|
||
bt.send('SetCertToSite', 'ssl/SetCertToSite', { certName: certName, siteName: siteName }, function (rdata) {
|
||
loadT.close();
|
||
site.reload();
|
||
if (callback) callback(rdata);
|
||
setTimeout(() => {
|
||
bt.msg(rdata);
|
||
}, 100);
|
||
});
|
||
},
|
||
remove_cert_ssl: function (certName, callback) {
|
||
bt.show_confirm(lan.public_backup.del_cert, lan.public_backup.sure_del_cert, function () {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('RemoveCert', 'ssl/RemoveCert', { certName: certName }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
});
|
||
},
|
||
set_http_to_https: function (siteName, callback) {
|
||
var loading = bt.load();
|
||
bt.send('HttpToHttps', 'site/HttpToHttps', { siteName: siteName }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
close_http_to_https: function (siteName, callback) {
|
||
var loading = bt.load();
|
||
bt.send('CloseToHttps', 'site/CloseToHttps', { siteName: siteName }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
bt.msg(rdata);
|
||
});
|
||
},
|
||
set_ssl: function (siteName, data, callback) {
|
||
if (data.path) {
|
||
//iis导入证书
|
||
} else {
|
||
var loadT = bt.load(lan.site.saving_txt);
|
||
bt.send('SetSSL', 'site/SetSSL', { type: 1, siteName: siteName, key: data.key, csr: data.csr }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
}
|
||
},
|
||
set_ssl_status: function (action, siteName, callback) {
|
||
var loadT = bt.load(lan.site.get_ssl_list);
|
||
bt.send(action, 'site/' + action, { updateOf: 1, siteName: siteName }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_cer_list: function (callback) {
|
||
var loadT = bt.load(lan.site.the_msg);
|
||
bt.send('GetCertList', 'ssl/GetCertList', {}, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_order_list: function (siteName, callback) {
|
||
bt.send('GetOrderList', 'ssl/GetOrderList', { siteName: siteName }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_site: function (data, callback) {
|
||
var loadT = bt.load(lan.get('del_all_task_the', [data.webname]));
|
||
bt.send('DeleteSite', 'site/DeleteSite', data, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
add_site: function (callback) {
|
||
var _form = $.extend(true, {}, bt.data.site.add);
|
||
bt.site.get_all_phpversion(function (rdata) {
|
||
bt.site.get_type(function (tdata) {
|
||
for (var i = 0; i < _form.list.length; i++) {
|
||
if (_form.list[i].name == 'version') {
|
||
var items = [];
|
||
for (var j = rdata.length - 1; j >= 0; j--) {
|
||
var o = rdata[j];
|
||
o.value = o.version;
|
||
o.title = o.name;
|
||
items.push(o);
|
||
}
|
||
_form.list[i].items = items;
|
||
} else if (_form.list[i].name == 'type_id') {
|
||
for (var x = 0; x < tdata.length; x++) _form.list[i].items.push({ value: tdata[x].id, title: tdata[x].name });
|
||
}
|
||
}
|
||
var bs = bt.render_form(_form, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
$('.placeholder').click(function () {
|
||
$(this).hide();
|
||
$('.webname' + bs).focus();
|
||
});
|
||
$('.path' + bs).val($('#defaultPath').text());
|
||
$('.webname' + bs).focus(function () {
|
||
$('.placeholder').hide();
|
||
});
|
||
$('.webname' + bs).blur(function () {
|
||
if ($(this).val().length == 0) {
|
||
$('.placeholder').show();
|
||
}
|
||
});
|
||
$('.webname' + bs).focus(function () {
|
||
var _this = $(this),
|
||
tips =
|
||
'www will not add by default, if you need to access,please add it like:\
|
||
<br>hostname.com\
|
||
<br>www.hostname.com';
|
||
_this.attr('placeholder', '');
|
||
var loadT = layer.tips(tips, _this, {
|
||
tips: [1, '#20a53a'],
|
||
time: 0,
|
||
area: _this[0].clientWidth + 'px',
|
||
});
|
||
$(this).one('blur', function () {
|
||
layer.close(loadT);
|
||
});
|
||
});
|
||
$('.line').on('mouseenter', '.bt-ico-ask', function () {
|
||
var idd = $(this).attr('class').split(' ')[1],
|
||
tip = $(this).attr('tip');
|
||
layer.tips(tip, '.' + idd + '', { tips: [1, '#d4d4d4'], time: 0, area: '300px' });
|
||
});
|
||
$('.line').on('mouseleave', '.bt-ico-ask', function () {
|
||
layer.closeAll('tips');
|
||
});
|
||
$('.domain_textarea').parents('.bt-form').css({ 'max-height': '565px', overflow: 'auto' });
|
||
});
|
||
});
|
||
},
|
||
get_all_phpversion: function (callback) {
|
||
bt.send('GetPHPVersion', 'site/GetPHPVersion', {}, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_site_phpversion: function (siteName, callback) {
|
||
bt.send('GetSitePHPVersion', 'site/GetSitePHPVersion', { siteName: siteName }, function (rdata) {
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
stop: function (id, name, callback) {
|
||
bt.confirm({ title: lan.public_backup.stop_site + ' 【' + name + '】', msg: lan.site.site_stop_txt }, function (index) {
|
||
if (index > 0) {
|
||
var loadT = bt.load();
|
||
bt.send('SiteStop', 'site/SiteStop', { id: id, name: name }, function (ret) {
|
||
loadT.close();
|
||
if (site && typeof callback == 'undefined') {
|
||
site.get_list();
|
||
} else {
|
||
if (callback) callback(ret);
|
||
}
|
||
bt.msg(ret);
|
||
});
|
||
}
|
||
});
|
||
},
|
||
start: function (id, name, callback) {
|
||
bt.confirm({ title: lan.public_backup.start_site + ' 【' + name + '】', msg: lan.site.site_start_txt }, function (index) {
|
||
if (index > 0) {
|
||
var loadT = bt.load();
|
||
bt.send('SiteStart', 'site/SiteStart', { id: id, name: name }, function (ret) {
|
||
loadT.close();
|
||
if (site && typeof callback == 'undefined') {
|
||
site.get_list();
|
||
} else {
|
||
if (callback) callback(ret);
|
||
}
|
||
bt.msg(ret);
|
||
});
|
||
}
|
||
});
|
||
},
|
||
backup_data: function (id, callback) {
|
||
var loadT = bt.load(lan.database.backup_the);
|
||
bt.send('ToBackup', 'site/ToBackup', { id: id }, function (rdata) {
|
||
loadT.close();
|
||
bt.msg(rdata);
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_backup: function (id, siteId, siteName) {
|
||
bt.confirm({ msg: lan.site.webback_del_confirm, title: lan.site.del_bak_file }, function (index) {
|
||
var loadT = bt.load();
|
||
bt.send('DelBackup', 'site/DelBackup', { id: id }, function (frdata) {
|
||
loadT.close();
|
||
if (frdata.status) {
|
||
if (site) site.site_detail(siteId, siteName);
|
||
}
|
||
bt.msg(frdata);
|
||
});
|
||
});
|
||
},
|
||
set_endtime: function (id, dates, callback) {
|
||
var loadT = bt.load(lan.site.saving_txt);
|
||
bt.send('SetEdate', 'site/SetEdate', { id: id, edate: dates }, function (rdata) {
|
||
loadT.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_default_path: function (type, callback) {
|
||
var vhref = '';
|
||
if (bt.os == 'Linux') {
|
||
switch (type) {
|
||
case 0:
|
||
vhref = '/www/server/panel/data/defaultDoc.html';
|
||
break;
|
||
case 1:
|
||
vhref = '/www/server/panel/data/404.html';
|
||
break;
|
||
case 2:
|
||
var serverType = bt.get_cookie('serverType');
|
||
vhref = '/www/server/apache/htdocs/index.html';
|
||
if (serverType == 'nginx') vhref = '/www/server/nginx/html/index.html';
|
||
break;
|
||
case 3:
|
||
vhref = '/www/server/stop/index.html';
|
||
break;
|
||
}
|
||
}
|
||
if (callback) callback(vhref);
|
||
},
|
||
get_default_site: function (callback) {
|
||
var loading = bt.load();
|
||
bt.send('GetDefaultSite', 'site/GetDefaultSite', {}, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
set_default_site: function (name, callback) {
|
||
var loading = bt.load();
|
||
bt.send('SetDefaultSite', 'site/SetDefaultSite', { name: name }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_dir_auth: function (id, callback) {
|
||
var loading = bt.load();
|
||
bt.send('get_dir_auth', 'site/get_dir_auth', { id: id }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
get_php_deny: function (website, callback) {
|
||
var loading = bt.load();
|
||
bt.send('get_file_deny', 'config/get_file_deny', { website: website }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
edit_php_deny: function (data, callback) {
|
||
var loading = bt.load();
|
||
bt.send('set_file_deny', 'config/set_file_deny', data, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
del_php_deny: function (data, callback) {
|
||
var loading = bt.load();
|
||
bt.send('del_file_deny', 'config/del_file_deny', data, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
create_dir_guard: function (data, callback) {
|
||
var loading = bt.load();
|
||
bt.send('set_dir_auth', 'site/set_dir_auth', { id: data.id, name: data.name, site_dir: data.site_dir, username: data.username, password: data.password }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
edit_dir_account: function (data, callback) {
|
||
var loading = bt.load();
|
||
bt.send('modify_dir_auth_pass', 'site/modify_dir_auth_pass', { id: data.id, name: data.name, username: data.username, password: data.password }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
},
|
||
delete_dir_guard: function (id, data, callback) {
|
||
var loading = bt.load();
|
||
bt.show_confirm(lan.public_backup.del + '[' + data + ']', lan.public_backup.del_dir, function () {
|
||
bt.send('delete_dir_auth', 'site/delete_dir_auth', { id: id, name: data }, function (rdata) {
|
||
loading.close();
|
||
if (callback) callback(rdata);
|
||
});
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.form = {
|
||
btn: {
|
||
close: function (title, callback) {
|
||
var obj = { title: lan.public_backup.turn_off, name: 'btn-danger' };
|
||
if (title) obj.title = title;
|
||
if (callback) obj['callback'] = callback;
|
||
return obj;
|
||
},
|
||
submit: function (title, callback) {
|
||
var obj = { title: lan.public_backup.submit, name: 'submit', css: 'btn-success' };
|
||
if (title) obj.title = title;
|
||
if (callback) obj['callback'] = callback;
|
||
return obj;
|
||
},
|
||
},
|
||
item: {
|
||
data_access: {
|
||
title: 'Permission',
|
||
items: [
|
||
{
|
||
name: 'dataAccess',
|
||
type: 'select',
|
||
width: '100px',
|
||
items: [
|
||
{ title: lan.public_backup.local_server, value: '127.0.0.1' },
|
||
{ title: lan.public_backup.every_one, value: '%' },
|
||
{ title: lan.public_backup.specify_ip, value: 'ip' },
|
||
],
|
||
callback: function (obj) {
|
||
var subid = obj.attr('name') + '_subid';
|
||
$('#' + subid).remove();
|
||
if (obj.val() == 'ip') {
|
||
obj
|
||
.parent()
|
||
.append(
|
||
'<input id="' + subid + '" class="bt-input-text mr5" type="text" name="address" placeholder="' + lan.public_backup.access_ip_tips + '" style="width: 203px; display: inline-block;">'
|
||
);
|
||
}
|
||
},
|
||
},
|
||
],
|
||
},
|
||
password: {
|
||
title: lan.public_backup.pass,
|
||
name: 'password',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
width: '311px',
|
||
value: bt.get_random(16),
|
||
event: {
|
||
css: 'glyphicon-repeat',
|
||
callback: function (obj) {
|
||
bt.refresh_pwd(16, obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
},
|
||
};
|
||
|
||
bt.data = {
|
||
database: {
|
||
getType: function () {
|
||
return bt.get_cookie('db_page_model') || 'mysql';
|
||
},
|
||
root: {
|
||
title: lan.database.edit_pass_title,
|
||
area: '530px',
|
||
list: [
|
||
{
|
||
title: lan.public_backup.rootpass,
|
||
name: 'password',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
width: '311px',
|
||
event: {
|
||
css: 'glyphicon-repeat',
|
||
callback: function (obj) {
|
||
bt.refresh_pwd(16, obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
],
|
||
btns: [
|
||
bt.form.btn.close(),
|
||
bt.form.btn.submit(lan.public_backup.submit, function (rdata, load) {
|
||
var loading = bt.load();
|
||
var type = bt.data.database.getType();
|
||
var params = { url: 'database?action=SetupPassword', data: rdata };
|
||
if (type != 'mysql') {
|
||
params.url = 'database/' + type + '/SetupPassword';
|
||
params.data = { data: JSON.stringify(rdata) };
|
||
}
|
||
bt_tools.send(params, function (rRet) {
|
||
loading.close();
|
||
bt.msg(rRet);
|
||
if (rRet.status) load.close();
|
||
});
|
||
}),
|
||
],
|
||
},
|
||
mongo: {
|
||
title: lan.database.edit_pass_title,
|
||
area: '530px',
|
||
list: [
|
||
{
|
||
title: lan.public_backup.rootpass,
|
||
name: 'password',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
width: '311px',
|
||
event: {
|
||
css: 'glyphicon-repeat',
|
||
callback: function (obj) {
|
||
bt.refresh_pwd(16, obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
],
|
||
btns: [
|
||
bt.form.btn.close(),
|
||
bt.form.btn.submit(lan.public_backup.submit, function (rdata, load) {
|
||
var loading = bt.load();
|
||
var type = bt.data.database.getType();
|
||
var url = 'database/' + type + '/set_auth_status';
|
||
if (type == 'pgsql') url = 'database/' + type + '/set_root_pwd';
|
||
bt_tools.send(
|
||
{
|
||
url: url,
|
||
data: { data: JSON.stringify($.extend(rdata, { status: 1 })) },
|
||
},
|
||
function (rRet) {
|
||
loading.close();
|
||
bt.msg(rRet);
|
||
load.close();
|
||
}
|
||
);
|
||
}),
|
||
],
|
||
},
|
||
data_add: {
|
||
title: lan.database.add_title,
|
||
area: '530px',
|
||
list: [
|
||
{
|
||
title: 'DBName',
|
||
items: [
|
||
{
|
||
name: 'name',
|
||
placeholder: lan.public_backup.new_db_name,
|
||
type: 'text',
|
||
width: '65%',
|
||
callback: function (obj) {
|
||
$('input[name="db_user"]').val(obj.val());
|
||
},
|
||
},
|
||
{
|
||
name: 'codeing',
|
||
type: 'select',
|
||
width: '27%',
|
||
items: [
|
||
{ title: 'utf-8', value: 'utf8' },
|
||
{ title: 'utf8mb4', value: 'utf8mb4' },
|
||
{ title: 'gbk', value: 'gbk' },
|
||
{ title: 'big5', value: 'big5' },
|
||
],
|
||
},
|
||
],
|
||
},
|
||
{
|
||
name: 'db_user',
|
||
title: lan.public_backup.user_name,
|
||
placeholder: lan.public_backup.db_user,
|
||
width: '65%',
|
||
},
|
||
bt.form.item.password,
|
||
bt.form.item.data_access,
|
||
{
|
||
title: lan.public_backup.add_to,
|
||
items: [
|
||
{
|
||
name: 'sid',
|
||
width: '65%',
|
||
type: 'select',
|
||
items: [],
|
||
},
|
||
],
|
||
},
|
||
{
|
||
html: '\
|
||
<div class="line" style="padding:0;">\
|
||
<span class="tname checkType">Force SSL</span>\
|
||
<div style="display: inline-block;">\
|
||
<input type="checkbox" name="active" id="check_ssl" class="btswitch btswitch-ios">\
|
||
<label for="check_ssl" class="btswitch-btn" style="margin-top: 5px;"></label>\
|
||
</div>\
|
||
</div>\
|
||
',
|
||
},
|
||
],
|
||
btns: [
|
||
bt.form.btn.close(),
|
||
bt.form.btn.submit(lan.public_backup.submit, function (rdata, load, callback) {
|
||
if (!rdata.address) rdata.address = rdata.dataAccess;
|
||
if (!rdata.ps) rdata.ps = rdata.name;
|
||
if (!rdata.ssl) rdata.ssl = $('#check_ssl').prop('checked') ? 'REQUIRE SSL' : '';
|
||
var loading = bt.load();
|
||
var type = bt.data.database.getType();
|
||
var param = {
|
||
url: 'database/' + type + '/AddDatabase',
|
||
data: { data: JSON.stringify(rdata) },
|
||
};
|
||
if (type == 'mysql') {
|
||
rdata['dtype'] = 'MySQL';
|
||
param = { url: 'database?action=AddDatabase', data: rdata };
|
||
}
|
||
bt_tools.send(param, function (rRet) {
|
||
loading.close();
|
||
if (rRet.status) load.close();
|
||
if (callback) callback(rRet);
|
||
bt.msg(rRet);
|
||
});
|
||
}),
|
||
],
|
||
success: function () {
|
||
$('[name=sid]').after('<a class="btlink" onclick="layer.closeAll();database.open_cloud_server()" style="margin-left: 10px;">' + lan.public.manage_cloud_server + '</a>');
|
||
var type = bt.data.database.getType();
|
||
// 当前类型为mongodb
|
||
if (type == 'mongodb') {
|
||
// 是否开启安全认证,没开启隐藏用户名跟密码
|
||
if (!mongodb.mongoDBAccessStatus) {
|
||
$('.layui-layer.layui-layer-page .line').eq(1).hide();
|
||
$('.layui-layer.layui-layer-page .line').eq(2).hide();
|
||
}
|
||
// 远程服务器类型判断
|
||
$('[name=sid]').change(function () {
|
||
// 为远程服务器时,默认开启安全认证
|
||
if ($(this).val() != 0) {
|
||
$('.layui-layer.layui-layer-page .line').eq(1).show();
|
||
$('.layui-layer.layui-layer-page .line').eq(2).show();
|
||
} else {
|
||
if (!mongodb.mongoDBAccessStatuss) {
|
||
$('.layui-layer.layui-layer-page .line').eq(1).hide();
|
||
$('.layui-layer.layui-layer-page .line').eq(2).hide();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
},
|
||
},
|
||
data_access: {
|
||
title: lan.public_backup.set_db_permissions,
|
||
area: '480px',
|
||
list: [
|
||
{ title: 'name', name: 'name', hide: true },
|
||
bt.form.item.data_access,
|
||
{
|
||
title: 'Force SSL',
|
||
items: [
|
||
{
|
||
name: 'force_ssl',
|
||
type: 'switch',
|
||
value: 'false',
|
||
},
|
||
],
|
||
},
|
||
],
|
||
btns: [
|
||
bt.form.btn.close(),
|
||
{
|
||
title: lan.public_backup.submit,
|
||
name: 'submit',
|
||
css: 'btn-success',
|
||
callback: function (rdata, load) {
|
||
var loading = bt.load();
|
||
rdata.access = rdata.dataAccess;
|
||
if (rdata.access == 'ip') rdata.access = rdata.address;
|
||
rdata.ssl = $('#force_ssl').prop('checked') ? 'REQUIRE SSL' : '';
|
||
bt.send('SetDatabaseAccess', 'database/SetDatabaseAccess', rdata, function (rRet) {
|
||
loading.close();
|
||
bt.msg(rRet);
|
||
if (rRet.status) load.close();
|
||
});
|
||
},
|
||
},
|
||
],
|
||
},
|
||
data_pass: {
|
||
title: lan.public_backup.change_db_pass,
|
||
area: '530px',
|
||
list: [
|
||
{ title: 'id', name: 'id', hide: true },
|
||
{ title: lan.public_backup.user_name, name: 'name', disabled: true },
|
||
{
|
||
title: lan.public_backup.pass,
|
||
name: 'password',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
event: {
|
||
css: 'glyphicon-repeat',
|
||
callback: function (obj) {
|
||
bt.refresh_pwd(16, obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
],
|
||
btns: [
|
||
{ title: lan.public_backup.turn_off, name: 'close' },
|
||
{
|
||
title: lan.public_backup.submit,
|
||
name: 'submit',
|
||
css: 'btn-success',
|
||
callback: function (rdata, load, callback) {
|
||
var loading = bt.load();
|
||
var type = bt.data.database.getType();
|
||
var params = { url: 'database?action=ResDatabasePassword', data: rdata };
|
||
if (type != 'mysql') {
|
||
params.url = 'database/' + type + '/ResDatabasePassword';
|
||
params.data = { data: JSON.stringify(rdata) };
|
||
}
|
||
bt_tools.send(params, function (rRet) {
|
||
loading.close();
|
||
bt.msg(rRet);
|
||
if (rRet.status) load.close();
|
||
if (callback) callback(rRet);
|
||
});
|
||
},
|
||
},
|
||
],
|
||
},
|
||
},
|
||
site: {
|
||
add: {
|
||
title: lan.site.site_add,
|
||
area: '680px',
|
||
list: [
|
||
{
|
||
title: lan.public_backup.domain,
|
||
name: 'webname',
|
||
class: 'domain_textarea',
|
||
items: [
|
||
{
|
||
type: 'textarea',
|
||
width: '420px',
|
||
height: '80px',
|
||
style: 'padding:10px;line-height: 15px;',
|
||
callback: function (obj) {
|
||
var array = obj.val().split('\n');
|
||
var ress = array[0].split(':')[0];
|
||
var res = bt.strim(ress.replace(new RegExp(/([-.])/g), '_'));
|
||
var ftp_user = res;
|
||
var data_user = res;
|
||
if (!isNaN(res.substr(0, 1))) {
|
||
ftp_user = 'ftp_' + ftp_user;
|
||
data_user = 'sql_' + data_user;
|
||
}
|
||
if (data_user.length > 16) data_user = data_user.substr(0, 16);
|
||
obj.data('ftp', ftp_user);
|
||
obj.data('database', data_user);
|
||
$('.ftp_username').val(ftp_user);
|
||
$('.datauser').val(data_user);
|
||
var _form = obj.parents('div.bt-form');
|
||
var _path_obj = _form.find('input[name="path"]');
|
||
var path = _path_obj.val();
|
||
var defaultPath = $('#defaultPath').text();
|
||
var dPath = bt.rtrim(defaultPath, '/');
|
||
if (path.substr(0, dPath.length) == dPath) _path_obj.val(dPath + '/' + ress);
|
||
_form.find('input[name="ps"]').val(ress);
|
||
clearTimeout(bt.setTimeouts);
|
||
bt.setTimeouts = setTimeout(function () {
|
||
if (bt.check_domain(ress)) {
|
||
if (ress.indexOf('www.') !== 0) {
|
||
$('.redirect_checkbox label').html('Add [<span>www.' + ress + '</span>] domain name to the main domain name');
|
||
} else if (ress.indexOf('www.') === 0) {
|
||
$('.redirect_checkbox label').html('Add <span>' + ress.replace(/^www\./, '') + '</span> to the main domain');
|
||
}
|
||
$('.redirect_checkbox').show();
|
||
} else {
|
||
$('.redirect_checkbox,redirect_tourl').hide();
|
||
}
|
||
}, 100);
|
||
},
|
||
placeholder: lan.public_backup.domian_tips,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
title: '',
|
||
name: 'redirect',
|
||
class: 'redirect_checkbox',
|
||
hide: true,
|
||
items: [
|
||
{
|
||
type: 'checkbox',
|
||
text: '',
|
||
callback: function (obj) {
|
||
var domain = $('.redirect_checkbox').find('span').text(),
|
||
domain_textarea = $('.domain_textarea textarea'),
|
||
domainList = domain_textarea.val().split('\n'),
|
||
domain_one = domainList[0].split(':')[0];
|
||
if (obj.redirect) {
|
||
domain_textarea.val(domain_textarea.val() + '\r' + domain);
|
||
var line = $(
|
||
bt.render_form_line({
|
||
title: 'Redirect',
|
||
name: 'tourl',
|
||
class: 'redirect_tourl',
|
||
items: [
|
||
{
|
||
type: 'radio_group',
|
||
value: 0,
|
||
list: [
|
||
{ value: 0, text: 'No' },
|
||
{
|
||
value: 1,
|
||
text: 'Redirect the main domain name [<span title="' + domain_one + '"> ' + domain_one + '</span>] to [<span title="' + domain + '">' + domain + '</span>] domain name',
|
||
},
|
||
{
|
||
value: 2,
|
||
text: 'Redirect the [<span title="' + domain + '">' + domain + '</span>] domain name to the main domain [<span title="' + domain_one + '">' + domain_one + '</span>]',
|
||
},
|
||
],
|
||
},
|
||
],
|
||
}).html
|
||
);
|
||
$('.redirect_checkbox.line').after(line);
|
||
} else {
|
||
for (var i = domainList.length - 1; i >= 0; i--) {
|
||
if (domainList[i] === domain) domainList.splice(i, 1);
|
||
}
|
||
domain_textarea.val(domainList.join('\n'));
|
||
$('.redirect_checkbox').next('.redirect_tourl').remove();
|
||
}
|
||
},
|
||
},
|
||
],
|
||
},
|
||
{ title: lan.public_backup.ps, name: 'ps', placeholder: lan.public_backup.site_ps },
|
||
{
|
||
title: lan.public_backup.root_dir,
|
||
name: 'path',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
width: '330px',
|
||
event: {
|
||
css: 'glyphicon-folder-open',
|
||
callback: function (obj) {
|
||
bt.select_path(obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
{
|
||
title: 'FTP',
|
||
items: [
|
||
{
|
||
name: 'ftp',
|
||
type: 'select',
|
||
items: [
|
||
{ value: 'false', title: lan.public_backup.dont_create },
|
||
{ value: 'true', title: lan.public_backup.create },
|
||
],
|
||
callback: function (obj) {
|
||
var subid = obj.attr('name') + '_subid';
|
||
$('#' + subid).remove();
|
||
if (obj.val() == 'true') {
|
||
var _bs = obj.parents('div.bt-form').attr('data-id');
|
||
var ftp_user = $('textarea[name="webname"]').data('ftp');
|
||
var item = {
|
||
title: lan.public_backup.set_ftp,
|
||
class: 'pb0',
|
||
name: 'ftp_tips',
|
||
items: [
|
||
{ name: 'ftp_username', title: lan.public_backup.user_name, width: '160px', value: ftp_user },
|
||
{ name: 'ftp_password', title: lan.public_backup.pass, width: '160px', value: bt.get_random(16) },
|
||
],
|
||
ps_help: lan.public_backup.ftp_tips,
|
||
};
|
||
var _tr = bt.render_form_line(item);
|
||
|
||
obj.parents('div.line').append('<div class="line pb0" id=' + subid + '>' + _tr.html + '</div>');
|
||
}
|
||
},
|
||
},
|
||
],
|
||
},
|
||
{
|
||
title: lan.public_backup.db,
|
||
items: [
|
||
{
|
||
name: 'sql',
|
||
type: 'select',
|
||
items: [
|
||
{ value: 'false', title: lan.public_backup.dont_create },
|
||
{ value: 'MySQL', title: 'MySQL' },
|
||
{ value: 'SQLServer', title: 'SQLServer' },
|
||
],
|
||
callback: function (obj) {
|
||
var subid = obj.attr('name') + '_subid';
|
||
$('#' + subid).remove();
|
||
if (obj.val() != 'false') {
|
||
if (bt.os == 'Linux' && obj.val() == 'SQLServer') {
|
||
obj.val('false');
|
||
bt.msg({ msg: lan.public_backup.unsupport_sqlserver, icon: 2 });
|
||
return;
|
||
}
|
||
var _bs = obj.parents('div.bt-form').attr('data-id');
|
||
var data_user = $('textarea[name="webname"]').data('database');
|
||
var item = {
|
||
title: lan.public_backup.db_set,
|
||
class: 'pb0',
|
||
name: 'sql_tips',
|
||
items: [
|
||
{ name: 'datauser', title: lan.public_backup.user_name, width: '160px', value: data_user },
|
||
{ name: 'datapassword', title: lan.public_backup.pass, width: '160px', value: bt.get_random(16) },
|
||
],
|
||
ps_help: lan.public_backup.create_site_tips,
|
||
};
|
||
var _tr = bt.render_form_line(item);
|
||
obj.parents('div.line').append('<div class="line pb0" id=' + subid + '>' + _tr.html + '</div>');
|
||
}
|
||
},
|
||
},
|
||
{
|
||
name: 'codeing',
|
||
type: 'select',
|
||
items: [
|
||
{ value: 'utf8', title: 'utf-8' },
|
||
{ value: 'utf8mb4', title: 'utf8mb4' },
|
||
{ value: 'gbk', title: 'gbk' },
|
||
{ value: 'big5', title: 'big5' },
|
||
],
|
||
},
|
||
],
|
||
},
|
||
{
|
||
title: 'Program type',
|
||
type: 'select',
|
||
name: 'type',
|
||
disabled: bt.contains(bt.get_cookie('serverType'), 'IIS') ? false : true,
|
||
items: [
|
||
{ value: 'PHP', title: 'PHP' },
|
||
{ value: 'Asp', title: 'Asp' },
|
||
{ value: 'Aspx', title: 'Aspx' },
|
||
],
|
||
callback: function (obj) {
|
||
if (obj.val() == 'Asp' || obj.val() == 'Aspx') {
|
||
obj.parents('div.line').next().hide();
|
||
} else {
|
||
obj.parents('div.line').next().show();
|
||
}
|
||
},
|
||
},
|
||
{
|
||
title: lan.public_backup.php_v,
|
||
name: 'version',
|
||
type: 'select',
|
||
items: [{ value: '00', title: lan.public_backup.sitic }],
|
||
},
|
||
{
|
||
title: lan.public_backup.site_classification,
|
||
name: 'type_id',
|
||
type: 'select',
|
||
width: 'auto',
|
||
items: [],
|
||
},
|
||
{
|
||
title: 'SSL',
|
||
class: 'ssl_checkbox',
|
||
items: [
|
||
{
|
||
type: 'checkbox',
|
||
name: 'set_ssl',
|
||
text: 'Apply for SSL',
|
||
callback: function (obj) {
|
||
if (!obj.set_ssl) {
|
||
$('[name="force_ssl"]').prop('checked', false);
|
||
}
|
||
},
|
||
},
|
||
{
|
||
type: 'checkbox',
|
||
name: 'force_ssl',
|
||
text: 'HTTP redirect to HTTPS',
|
||
callback: function (obj) {
|
||
if (obj.force_ssl) {
|
||
$('[name="set_ssl"]').prop('checked', true);
|
||
}
|
||
},
|
||
},
|
||
{
|
||
type: 'html',
|
||
html: '<ul class="help-info-text c7" style="color:red;margin-top:0;"><li style="line-height: 17px;">If you need to apply for SSL, please make sure that the domain name has added A record resolution for the domain name</li></ul>',
|
||
},
|
||
],
|
||
},
|
||
],
|
||
btns: [
|
||
{ title: lan.public_backup.turn_off, name: 'close' },
|
||
{
|
||
title: lan.public_backup.submit,
|
||
name: 'submit',
|
||
css: 'btn-success',
|
||
callback: function (rdata, load, callback) {
|
||
var loading = bt.load();
|
||
if (!rdata.webname) {
|
||
bt.msg({ msg: lan.public_backup.domain_format_not_right, icon: 2 });
|
||
return;
|
||
}
|
||
var webname = bt.replace_all(rdata.webname, 'http:\\/\\/', '');
|
||
webname = bt.replace_all(webname, 'https:\\/\\/', '');
|
||
var arrs = webname.split('\n');
|
||
var list = [];
|
||
var domain_name, port;
|
||
for (var i = 0; i < arrs.length; i++) {
|
||
if (arrs[i]) {
|
||
var temp = arrs[i].split(':');
|
||
var item = {};
|
||
item['name'] = temp[0];
|
||
item['port'] = temp.length > 1 ? temp[1] : 80;
|
||
if (!bt.check_domain(item.name)) {
|
||
bt.msg({ msg: lan.site.domain_err_txt, icon: 2 });
|
||
return;
|
||
}
|
||
if (i > 0) {
|
||
list.push(arrs[i]);
|
||
} else {
|
||
domain_name = item.name;
|
||
port = item.port;
|
||
}
|
||
}
|
||
}
|
||
var domain = {};
|
||
domain['domain'] = domain_name;
|
||
domain['domainlist'] = list;
|
||
domain['count'] = list.length;
|
||
rdata.webname = JSON.stringify(domain);
|
||
rdata.port = port;
|
||
rdata.tourl = parseInt($('[name="tourl"]:checked').val());
|
||
if (rdata.redirect) {
|
||
if (rdata.tourl) {
|
||
var domains = $('#tourl_' + rdata.tourl)
|
||
.next()
|
||
.find('span');
|
||
rdata.redirect = $(domains[0]).text();
|
||
rdata.tourl = $(domains[1]).text();
|
||
} else {
|
||
delete rdata.redirect;
|
||
delete rdata.tourl;
|
||
}
|
||
} else {
|
||
delete rdata.redirect;
|
||
delete rdata.tourl;
|
||
}
|
||
rdata.set_ssl = rdata.set_ssl ? 1 : 0;
|
||
rdata.force_ssl = rdata.force_ssl ? 1 : 0;
|
||
bt.send('AddSite', 'site/AddSite', rdata, function (rRet) {
|
||
loading.close();
|
||
if (rRet.siteStatus) load.close();
|
||
if (callback) callback(rRet);
|
||
});
|
||
},
|
||
},
|
||
],
|
||
},
|
||
},
|
||
ftp: {
|
||
add: {
|
||
title: lan.ftp.add_title,
|
||
area: '530px',
|
||
list: [
|
||
{
|
||
title: lan.public_backup.user_name,
|
||
name: 'ftp_username',
|
||
callback: function (obj) {
|
||
var defaultPath = $('#defaultPath').text();
|
||
var wootPath = bt.rtrim(defaultPath, '/');
|
||
if (bt.contains($('input[name="path"]').val(), wootPath)) {
|
||
$('input[name="path"]').val(wootPath + '/' + obj.val());
|
||
}
|
||
},
|
||
},
|
||
{
|
||
title: lan.public_backup.pass,
|
||
name: 'ftp_password',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
width: '330px',
|
||
value: bt.get_random(16),
|
||
event: {
|
||
css: 'glyphicon-repeat',
|
||
callback: function (obj) {
|
||
bt.refresh_pwd(16, obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
{
|
||
title: lan.public_backup.root_dir,
|
||
name: 'path',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
event: {
|
||
css: 'glyphicon-folder-open',
|
||
callback: function (obj) {
|
||
bt.select_path(obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
],
|
||
btns: [
|
||
{ title: lan.public_backup.turn_off, name: 'close' },
|
||
{
|
||
title: lan.public_backup.submit,
|
||
name: 'submit',
|
||
css: 'btn-success',
|
||
callback: function (rdata, load, callback) {
|
||
var loading = bt.load();
|
||
if (!rdata.ps) rdata.ps = rdata.ftp_username;
|
||
bt.send('AddUser', 'ftp/AddUser', rdata, function (rRet) {
|
||
loading.close();
|
||
if (rRet.status) load.close();
|
||
if (callback) callback(rRet);
|
||
bt.msg(rRet);
|
||
});
|
||
},
|
||
},
|
||
],
|
||
},
|
||
set_port: {
|
||
title: lan.ftp.port_title,
|
||
skin: '',
|
||
area: '500px',
|
||
list: [{ title: lan.public_backup.default_port, name: 'port', width: '250px' }],
|
||
btns: [
|
||
{ title: lan.public_backup.turn_off, name: 'close' },
|
||
{
|
||
title: lan.public_backup.submit,
|
||
name: 'submit',
|
||
css: 'btn-success',
|
||
callback: function (rdata, load, callback) {
|
||
var loading = bt.load();
|
||
bt.send('setPort', 'ftp/setPort', rdata, function (rRet) {
|
||
loading.close();
|
||
if (rRet.status) load.close();
|
||
//if(callback) callback(rRet);
|
||
bt.msg(rRet);
|
||
});
|
||
},
|
||
},
|
||
],
|
||
},
|
||
set_password: {
|
||
title: lan.ftp.pass_title,
|
||
area: '530px',
|
||
list: [
|
||
{ title: 'id', name: 'id', hide: true },
|
||
{ title: lan.public_backup.user_name, name: 'ftp_username', disabled: true },
|
||
{
|
||
title: lan.public_backup.pass,
|
||
name: 'new_password',
|
||
items: [
|
||
{
|
||
type: 'text',
|
||
event: {
|
||
css: 'glyphicon-repeat',
|
||
callback: function (obj) {
|
||
bt.refresh_pwd(16, obj);
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
],
|
||
btns: [
|
||
{ title: lan.public_backup.turn_off, name: 'close' },
|
||
{
|
||
title: lan.public_backup.submit,
|
||
name: 'submit',
|
||
css: 'btn-success',
|
||
callback: function (rdata, load, callback) {
|
||
bt.confirm({ msg: lan.ftp.pass_confirm, title: lan.ftp.stop_title }, function () {
|
||
var loading = bt.load();
|
||
bt.send('SetUserPassword', 'ftp/SetUserPassword', rdata, function (rRet) {
|
||
loading.close();
|
||
if (rRet.status) load.close();
|
||
if (callback) callback(rRet);
|
||
bt.msg(rRet);
|
||
});
|
||
});
|
||
},
|
||
},
|
||
],
|
||
},
|
||
},
|
||
};
|
||
var form_group = {
|
||
select_all: function (_arry) {
|
||
for (var j = 0; j < _arry.length; j++) {
|
||
this.select(_arry[j]);
|
||
}
|
||
},
|
||
select: function (elem) {
|
||
$(elem).after(
|
||
'<div class="bt_select_group"><div class="bt_select_active"><span class="select_val default">请选择</span><span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span> </div><ul class="bt_select_ul"></ul></div>'
|
||
);
|
||
var _html = '',
|
||
select_el = $(elem),
|
||
select_group = select_el.next(),
|
||
select_ul = select_group.find('.bt_select_ul'),
|
||
select_val = select_group.find('.select_val'),
|
||
select_icon = select_group.find('.glyphicon');
|
||
select_el.find('option').each(function (index, el) {
|
||
var active = select_el.val() === $(el).val(),
|
||
_val = $(el).val(),
|
||
_name = $(el).text();
|
||
_html += '<li data-val="' + _val + '" class="' + (active ? 'active' : '') + '">' + _name + '</li>';
|
||
if (active) {
|
||
select_val.text(_name);
|
||
_val !== '' ? select_val.removeClass('default') : select_val.addClass('default');
|
||
}
|
||
});
|
||
select_el.hide();
|
||
select_ul.html(_html);
|
||
$(elem)
|
||
.next('.bt_select_group')
|
||
.find('.bt_select_active')
|
||
.unbind('click')
|
||
.click(function (e) {
|
||
if (!$(this).next().hasClass('active')) {
|
||
$(this)
|
||
.parents()
|
||
.find('li')
|
||
.siblings()
|
||
.find('.bt_select_ul.active')
|
||
.each(function () {
|
||
is_show_slect_parent(this);
|
||
});
|
||
$(this)
|
||
.parents('.rec-box')
|
||
.siblings()
|
||
.find('.bt_select_ul.active')
|
||
.each(function () {
|
||
is_show_slect_parent(this);
|
||
});
|
||
}
|
||
is_show_select_ul($(this).next().hasClass('active'));
|
||
$(document).click(function (ev) {
|
||
is_show_select_ul(true);
|
||
$(this).unbind('click');
|
||
ev.stopPropagation();
|
||
ev.preventDefault();
|
||
});
|
||
e.stopPropagation();
|
||
e.preventDefault();
|
||
});
|
||
$(elem)
|
||
.next('.bt_select_group')
|
||
.find('.bt_select_ul li')
|
||
.unbind('click')
|
||
.click(function () {
|
||
var _val = $(this).attr('data-val'),
|
||
_name = $(this).text();
|
||
$(this).addClass('active').siblings().removeClass('active');
|
||
_val !== '' ? select_val.removeClass('default') : select_val.addClass('default');
|
||
select_val.text(_name);
|
||
select_el.val(_val);
|
||
$(elem)
|
||
.find('option[value="' + _val + '"]')
|
||
.change();
|
||
is_show_select_ul(true);
|
||
});
|
||
function is_show_slect_parent(that) {
|
||
$(that).removeClass('active fadeInUp animated');
|
||
$(that).prev().find('.glyphicon').removeAttr('style');
|
||
$(that).parent().removeAttr('style');
|
||
}
|
||
function is_show_select_ul(active) {
|
||
if (active) {
|
||
select_group.removeAttr('style');
|
||
select_icon.css({ transform: 'rotate(0deg)' });
|
||
select_ul.removeClass('active fadeInUp animated');
|
||
} else {
|
||
select_group.css('borderColor', '#20a53a');
|
||
select_icon.css({ transform: 'rotate(180deg)' });
|
||
select_ul.addClass('active fadeInUp animated');
|
||
}
|
||
}
|
||
},
|
||
checkbox: function () {
|
||
$('input[type="checkbox"]').each(function (index, el) {
|
||
$(el).hide();
|
||
$(el).after('<div class="bt_checkbox_group ' + ($(this).prop('checked') ? 'active' : 'default') + '"></div>');
|
||
});
|
||
$('.bt_checkbox_group').click(function () {
|
||
$(this).prev().click();
|
||
if ($(this).hasClass('active')) {
|
||
$(this).removeClass('active');
|
||
$(this).prev().removeAttr('checked');
|
||
} else {
|
||
$(this).addClass('active');
|
||
$(this).prev().attr('checked', 'checked');
|
||
}
|
||
});
|
||
},
|
||
};
|
||
|
||
bt.public = {
|
||
// 设置目录配额
|
||
modify_path_quota: function (data, callback) {
|
||
var loadT = bt.load(lan.public.modify_path_quota);
|
||
$.post('/project/quota/modify_path_quota', data, function (res) {
|
||
loadT.close();
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
|
||
// 设置mysql配额
|
||
modify_mysql_quota: function (data, callback) {
|
||
var loadT = bt.load(lan.public.modify_mysql_quota);
|
||
$.post('/project/quota/modify_mysql_quota', data, function (res) {
|
||
loadT.close();
|
||
if (callback) callback(res);
|
||
});
|
||
},
|
||
|
||
/**
|
||
* @description 获取quoto容量
|
||
*/
|
||
|
||
get_quota_config: function (type) {
|
||
return {
|
||
fid: 'quota',
|
||
title: lan.public.capacity,
|
||
width: 120,
|
||
template: function (row, index) {
|
||
var quota = row.quota;
|
||
if (!quota.size) return '<a href="javascript:;" class="btlink">' + lan.public.notConfigured + '</a>';
|
||
var size = quota.size * 1024 * 1024;
|
||
var speed = ((quota.used / size) * 100).toFixed(2);
|
||
var quotaFull = false;
|
||
if (quota.size > 0 && quota.used >= size) quotaFull = true;
|
||
return (
|
||
'<div class=""><div class="progress mb0 cursor" style="height:12px;line-height:12px;vertical-align:middle;border-radius:2px;margin-top:3px;" title="' +
|
||
lan.public.currentUsedCapacity +
|
||
': ' +
|
||
(quotaFull ? lan.public.finished : bt.format_size(quota.used)) +
|
||
'\n' +
|
||
lan.public.currentUsedCapacity +
|
||
': ' +
|
||
bt.format_size(size) +
|
||
'\n' +
|
||
lan.public.modifyQuotaCapacity +
|
||
'">' +
|
||
'<div class="progress-bar progress-bar-' +
|
||
(speed >= 90 ? 'danger' : 'success') +
|
||
'" style="height:15px;line-height:15px;width: ' +
|
||
speed +
|
||
'%;display: inline-block;" role="progressbar" aria-valuemin="0" aria-valuemax="100"></div>' +
|
||
'</div>'
|
||
);
|
||
},
|
||
event: function (row, index, ev) {
|
||
var quota = row.quota;
|
||
var size = quota.size * 1024 * 1024;
|
||
var usedList = bt.format_size(quota.used).split(' ');
|
||
var quotaFull = false;
|
||
if (quota.size > 0 && quota.used >= size) quotaFull = true;
|
||
var types = {
|
||
site: lan.site.website,
|
||
ftp: lan.site.add_site.ftp,
|
||
database: lan.site.database,
|
||
};
|
||
layer.open({
|
||
type: 1,
|
||
title: '[' + row.name + '] ' + types[type] + ' ' + lan.public.quotaCapacity,
|
||
area: '476px',
|
||
closeBtn: 2,
|
||
btn: [lan.public.save, lan.public.cancel],
|
||
content:
|
||
'<div class="bt-form pd20"><div class="line">' +
|
||
'<span class="tname" style="width:180px">' +
|
||
lan.public.currentUsedCapacity +
|
||
'</span>' +
|
||
'<div class="info-r">' +
|
||
'<input type="text" name="used" disabled placeholder="" class="bt-input-text mr10 " style="width:120px;" value="' +
|
||
(!quotaFull ? (quota.size != 0 ? usedList[0] : 0) : lan.public.capacityFinished) +
|
||
'" /><span>' +
|
||
(!quotaFull ? (quota.size != 0 ? usedList[1] : 'MB') : '') +
|
||
'</span>' +
|
||
'</div>' +
|
||
'<span class="tname" style="width:180px">' +
|
||
lan.public.quotaCapacity +
|
||
'</span>' +
|
||
'<div class="info-r">' +
|
||
'<input type="text" name="quota_size" placeholder="" class="bt-input-text mr10 " style="width:120px;" value="' +
|
||
quota.size +
|
||
'" /><span>MB</span>' +
|
||
'</div>' +
|
||
'</div>' +
|
||
'<ul class="help-info-text c7">' +
|
||
'<li style="color:red;">' +
|
||
lan.public.capacityTips1 +
|
||
'</li>' +
|
||
'<li class="' +
|
||
(type == 'database' ? 'hide' : '') +
|
||
'">' +
|
||
lan.public.capacityTips2 +
|
||
'</li>' +
|
||
'<li class="' +
|
||
(type == 'database' ? 'hide' : '') +
|
||
'">' +
|
||
lan.public.capacityTips3 +
|
||
'</li>' +
|
||
'<li class="' +
|
||
(type == 'database' ? '' : 'hide') +
|
||
'">' +
|
||
lan.public.capacityTips4 +
|
||
'</li>' +
|
||
'<li>' +
|
||
lan.public.capacityTips5 +
|
||
'</li>' +
|
||
'</ul>' +
|
||
'</div>',
|
||
yes: function (indexs) {
|
||
var quota_size = $('[name="quota_size"]').val();
|
||
if (type === 'site' || type === 'ftp') {
|
||
bt.public.modify_path_quota({ data: JSON.stringify({ size: quota_size, path: row.path }) }, function (res) {
|
||
if (res.status) {
|
||
bt.msg(res);
|
||
layer.close(indexs);
|
||
setTimeout(function () {
|
||
location.reload();
|
||
}, 200);
|
||
} else {
|
||
layer.msg(res.msg, { icon: res.status ? 1 : 2, area: '650px', time: 0, shade: 0.3, closeBtn: 2 });
|
||
}
|
||
});
|
||
} else {
|
||
bt.public.modify_mysql_quota({ data: JSON.stringify({ size: quota_size, db_name: row.name }) }, function (res) {
|
||
bt.msg(res);
|
||
if (res.status) {
|
||
layer.close(indexs);
|
||
setTimeout(function () {
|
||
location.reload();
|
||
}, 200);
|
||
}
|
||
});
|
||
}
|
||
},
|
||
});
|
||
},
|
||
};
|
||
},
|
||
};
|
||
|
||
//设置面板SSL
|
||
function setPanelSSL() {
|
||
var loadT = layer.msg(lan.config.ssl_msg, { icon: 16, time: 0, shade: [0.3, '#000'] });
|
||
bt.send('get_cert_source', 'config/get_cert_source', {}, function (rdata) {
|
||
layer.close(loadT);
|
||
var sdata = rdata;
|
||
var _data = {
|
||
title: 'Panel SSL',
|
||
area: '630px',
|
||
class: 'ssl_cert_from',
|
||
list: [
|
||
{
|
||
html:
|
||
'<div><i class="layui-layer-ico layui-layer-ico3"></i><h3>' +
|
||
lan.config.ssl_open_ps +
|
||
'</h3><ul><li style="color:red;">' +
|
||
lan.config.ssl_open_ps_1 +
|
||
'</li><li>' +
|
||
lan.config.ssl_open_ps_2 +
|
||
'</li><li>' +
|
||
lan.config.ssl_open_ps_3 +
|
||
'</li></ul></div>',
|
||
},
|
||
{
|
||
title: 'Cert Type',
|
||
name: 'cert_type',
|
||
type: 'select',
|
||
width: '200px',
|
||
value: sdata.cert_type,
|
||
items: [
|
||
{ value: '1', title: 'Self-signed certificate' },
|
||
{ value: '2', title: "Let's Encrypt" },
|
||
],
|
||
callback: function (obj) {
|
||
var subid = obj.attr('name') + '_subid';
|
||
$('#' + subid).remove();
|
||
if (obj.val() == '2') {
|
||
var _tr = bt.render_form_line({
|
||
title: 'Admin E-Mail',
|
||
name: 'email',
|
||
width: '320px',
|
||
placeholder: 'Admin E-Mail',
|
||
value: sdata.email,
|
||
});
|
||
obj.parents('div.line').append('<div class="line" id=' + subid + '>' + _tr.html + '</div>');
|
||
}
|
||
},
|
||
},
|
||
{
|
||
html:
|
||
'<div class="details"><input type="checkbox" id="checkSSL" /><label style="font-weight: 400;margin: -1px 5px 0px;" for="checkSSL">' +
|
||
lan.config.ssl_open_ps_4 +
|
||
'</label><a target="_blank" class="btlink" href="https://www.yakpanel.com/forum/d/167-common-problems-after-opening-the-panel-certificate">' +
|
||
lan.config.ssl_open_ps_5 +
|
||
'</a></p></div>',
|
||
},
|
||
],
|
||
btns: [
|
||
{
|
||
title: 'Close',
|
||
name: 'close',
|
||
callback: function (rdata, load, callback) {
|
||
load.close();
|
||
$('#panelSSL').prop('checked', false);
|
||
},
|
||
},
|
||
{
|
||
title: 'Submit',
|
||
name: 'submit',
|
||
css: 'btn-success',
|
||
callback: function (rdata, load, callback) {
|
||
if (!$('#checkSSL').is(':checked')) {
|
||
bt.msg({ status: false, msg: 'Please confirm the risk first!' });
|
||
return;
|
||
}
|
||
var confirm = layer.confirm('Whether to open the panel SSL certificate', { title: 'Tips', btn: ['Confirm', 'Cancel'], icon: 0, closeBtn: 2 }, function () {
|
||
var loading = bt.load();
|
||
bt.send('SetPanelSSL', 'config/SetPanelSSL', rdata, function (rdata) {
|
||
loading.close();
|
||
if (rdata.status) {
|
||
layer.msg(rdata.msg, { icon: 1 });
|
||
$.get('/system?action=ReWeb', function () { });
|
||
setTimeout(function () {
|
||
window.location.href = (window.location.protocol.indexOf('https') != -1 ? 'http://' : 'https://') + window.location.host + window.location.pathname;
|
||
}, 1500);
|
||
} else {
|
||
layer.msg(rdata.msg, { icon: 2 });
|
||
}
|
||
});
|
||
});
|
||
},
|
||
},
|
||
],
|
||
end: function () { },
|
||
};
|
||
|
||
var _bs = bt.render_form(_data);
|
||
// setTimeout(function () {
|
||
// $('.cert_type' + _bs).trigger('change')
|
||
// }, 200);
|
||
});
|
||
}
|
||
|
||
var dynamic = {
|
||
loadList: [],
|
||
fileFunList: {},
|
||
load: false,
|
||
callback: null,
|
||
|
||
// 初始化执行
|
||
execution: function () {
|
||
for (var i = 0; i < this.loadList.length; i++) {
|
||
var fileName = this.loadList[i];
|
||
if (fileName in this.fileFunList) this.fileFunList[fileName]();
|
||
}
|
||
},
|
||
|
||
/**
|
||
* @description 动态加载js,css文件
|
||
* @param urls {string|array} 文件路径或文件数组
|
||
* @param fn {function|undefined} 回调函数
|
||
*/
|
||
require: function (urls, fn) {
|
||
if (!Array.isArray(urls)) urls = [urls];
|
||
|
||
this.fileFunList = {};
|
||
|
||
var i = 0;
|
||
var that = this;
|
||
var total = urls.length;
|
||
var callback = function () {
|
||
i++;
|
||
if (i < total) {
|
||
that.loadFile(urls[i], callback);
|
||
} else {
|
||
fn && fn();
|
||
}
|
||
};
|
||
this.loadFile(urls[i], callback);
|
||
},
|
||
/**
|
||
* @description 加载js,css文件
|
||
* @param {string} url 文件路径
|
||
* @param {function} fn 回调函数
|
||
*/
|
||
loadFile: function (url, fn) {
|
||
this.load = true;
|
||
|
||
var that = this;
|
||
var element = this.createElement(url);
|
||
|
||
if (element.readyState) {
|
||
element.onreadystatechange = function (ev) {
|
||
if (element.readyState === 'loaded' || element.readyState === 'complete') {
|
||
element.onreadystatechange = null;
|
||
that.execution();
|
||
fn && fn.call(that);
|
||
that.load = false;
|
||
}
|
||
};
|
||
} else {
|
||
element.onload = function (ev) {
|
||
that.execution();
|
||
fn && fn.call(that);
|
||
that.load = false;
|
||
};
|
||
}
|
||
document.getElementsByTagName('head')[0].appendChild(element);
|
||
},
|
||
/**
|
||
* @description 创建元素
|
||
* @param {string} url 文件路径
|
||
* @returns
|
||
*/
|
||
createElement: function (url) {
|
||
var element = null;
|
||
if (url.indexOf('.js?v=1715756461542') > -1) {
|
||
element = document.createElement('script');
|
||
element.type = 'text/javascript';
|
||
element.src = bt.url_merge('/vue/' + url);
|
||
} else if (url.indexOf('.css?v=1715756461542') > -1) {
|
||
element = document.createElement('link');
|
||
element.rel = 'stylesheet';
|
||
element.href = bt.url_merge('/vue/' + url);
|
||
}
|
||
return element;
|
||
},
|
||
/**
|
||
* @default 执行延迟文件内容执行
|
||
* @param fileName {string} 文件名称,不要加文件后缀
|
||
* @param callback {function} 回调行数
|
||
*/
|
||
delay: function delay(fileName, callback) {
|
||
if (!this.load) {
|
||
callback();
|
||
return false;
|
||
}
|
||
this.fileFunList[fileName] = callback;
|
||
},
|
||
};
|
||
|
||
// 过滤编码
|
||
bt.htmlEncode = {
|
||
/**
|
||
* @description 正则转换特殊字符
|
||
* @param {string} layid 字符内容
|
||
*/
|
||
htmlEncodeByRegExp: function (str) {
|
||
if (typeof str == 'undefined' || str.length == 0) return '';
|
||
return str
|
||
.replace(/&/g, '&')
|
||
.replace(/</g, '<')
|
||
.replace(/>/g, '>')
|
||
.replace(/ /g, ' ')
|
||
.replace(/\'/g, ''')
|
||
.replace(/\"/g, '"')
|
||
.replace(/\(/g, '(')
|
||
.replace(/\)/g, ')')
|
||
.replace(/`/g, '`')
|
||
.replace(/=/g, '=');
|
||
},
|
||
};
|