This commit is contained in:
flucout 2023-12-30 10:20:44 +08:00
parent f81cd68e80
commit 79fddbb943
5 changed files with 484 additions and 460 deletions

Binary file not shown.

View File

@ -49,6 +49,7 @@ Route::group('api', function () {
Route::get('/index/get_win_date', 'api/get_win_date'); Route::get('/index/get_win_date', 'api/get_win_date');
Route::get('/panel/is_pro', 'api/is_pro'); Route::get('/panel/is_pro', 'api/is_pro');
Route::get('/getIpAddress', 'api/get_ip_address'); Route::get('/getIpAddress', 'api/get_ip_address');
Route::get('/GetAD', 'api/return_empty');
Route::post('/Auth/GetAuthToken', 'api/get_auth_token'); Route::post('/Auth/GetAuthToken', 'api/get_auth_token');
Route::post('/Auth/GetBindCode', 'api/return_error'); Route::post('/Auth/GetBindCode', 'api/return_error');
Route::post('/Auth/GetSSLList', 'api/get_ssl_list'); Route::post('/Auth/GetSSLList', 'api/get_ssl_list');

View File

@ -1,458 +1,483 @@
/* /*
*宝塔面板去除各种计算题与延时等待 *宝塔面板去除各种计算题与延时等待
*/ */
if("undefined" != typeof bt && bt.hasOwnProperty("show_confirm")){ if("undefined" != typeof bt && bt.hasOwnProperty("show_confirm")){
bt.show_confirm = function(title, msg, callback, error) { bt.show_confirm = function(title, msg, callback, error) {
layer.open({ layer.open({
type: 1, type: 1,
title: title, title: title,
area: "365px", area: "365px",
closeBtn: 2, closeBtn: 2,
shadeClose: true, shadeClose: true,
btn: [lan['public'].ok, lan['public'].cancel], btn: [lan['public'].ok, lan['public'].cancel],
content: "<div class='bt-form webDelete pd20'>\ content: "<div class='bt-form webDelete pd20'>\
<p style='font-size:13px;word-break: break-all;margin-bottom: 5px;'>" + msg + "</p>" + (error || '') + "\ <p style='font-size:13px;word-break: break-all;margin-bottom: 5px;'>" + msg + "</p>" + (error || '') + "\
</div>", </div>",
yes: function (index, layero) { yes: function (index, layero) {
layer.close(index); layer.close(index);
if (callback) callback(); if (callback) callback();
} }
}); });
} }
} }
if("undefined" != typeof bt && bt.hasOwnProperty("prompt_confirm")){ if("undefined" != typeof bt && bt.hasOwnProperty("prompt_confirm")){
bt.prompt_confirm = function (title, msg, callback) { bt.prompt_confirm = function (title, msg, callback) {
layer.open({ layer.open({
type: 1, type: 1,
title: title, title: title,
area: "350px", area: "350px",
closeBtn: 2, closeBtn: 2,
btn: ['确认', '取消'], btn: ['确认', '取消'],
content: "<div class='bt-form promptDelete pd20'>\ content: "<div class='bt-form promptDelete pd20'>\
<p>" + msg + "</p>\ <p>" + msg + "</p>\
</div>", </div>",
yes: function (layers, index) { yes: function (layers, index) {
layer.close(layers) layer.close(layers)
if (callback) callback() if (callback) callback()
} }
}); });
} }
} }
if("undefined" != typeof bt && bt.hasOwnProperty("compute_confirm")){ if("undefined" != typeof bt && bt.hasOwnProperty("compute_confirm")){
bt.compute_confirm = function (config, callback) { bt.compute_confirm = function (config, callback) {
layer.open({ layer.open({
type: 1, type: 1,
title: config.title, title: config.title,
area: '430px', area: '430px',
closeBtn: 2, closeBtn: 2,
shadeClose: true, shadeClose: true,
btn: [lan['public'].ok, lan['public'].cancel], btn: [lan['public'].ok, lan['public'].cancel],
content: content:
'<div class="bt-form hint_confirm pd30">\ '<div class="bt-form hint_confirm pd30">\
<div class="hint_title">\ <div class="hint_title">\
<i class="hint-confirm-icon"></i>\ <i class="hint-confirm-icon"></i>\
<div class="hint_con">' + <div class="hint_con">' +
config.msg + config.msg +
'</div>\ '</div>\
</div>\ </div>\
</div>', </div>',
yes: function (layers, index) { yes: function (layers, index) {
layer.close(layers) layer.close(layers)
if (callback) callback() if (callback) callback()
} }
}); });
} }
} }
if("undefined" != typeof database && database.hasOwnProperty("del_database")){ if("undefined" != typeof bt && bt.hasOwnProperty("input_confirm")){
database.del_database = function (wid, dbname, obj, callback) { bt.input_confirm = function (config, callback) {
var is_db_type = false, del_data = [] layer.open({
if (typeof wid === 'object') { type: 1,
del_data = wid title: config.title,
is_db_type = wid.some(function (item) { area: '430px',
return item.db_type > 0 closeBtn: 2,
}) shadeClose: true,
var ids = []; btn: [lan['public'].ok, lan['public'].cancel],
for (var i = 0; i < wid.length; i++) { content:
ids.push(wid[i].id); '<div class="bt-form hint_confirm pd30">\
} <div class="hint_title">\
wid = ids <i class="hint-confirm-icon"></i>\
} <div class="hint_con">' +
var type = $('.database-pos .tabs-item.active').data('type'), config.msg +
title = '', '</div>\
tips = ''; </div>\
title = typeof dbname === "function" ? '批量删除数据库' : '删除数据库 - [ ' + dbname + ' ]'; </div>',
tips = is_db_type || !recycle_bin_db_open || type !== 'mysql' ? '<span class="color-red">当前列表存在彻底删除后无法恢复的数据库</span>,请仔细查看列表,以防误删,是否继续操作?' : '当前列表数据库将迁移至数据库回收站,如需彻底删除请前往数据库回收站,是否继续操作?' yes: function (layers, index) {
var arrs = wid instanceof Array ? wid : [wid] layer.close(layers);
var ids = JSON.stringify(arrs), if (callback) callback();
countDown = 9; },
if (arrs.length == 1) countDown = 4 });
var loadT = bt.load('正在检测数据库数据信息,请稍候...'), }
param = { url: 'database/' + bt.data.db_tab_name + '/check_del_data', data: { data: JSON.stringify({ ids: ids }) } } }
if (bt.data.db_tab_name == 'mysql') param = { url: 'database?action=check_del_data', data: { ids: ids } } if("undefined" != typeof database && database.hasOwnProperty("del_database")){
bt_tools.send(param, function (res) { database.del_database = function (wid, dbname, obj, callback) {
loadT.close() var is_db_type = false, del_data = []
layer.open({ if (typeof wid === 'object') {
type: 1, del_data = wid
title: title, is_db_type = wid.some(function (item) {
area: '740px', return item.db_type > 0
skin: 'verify_site_layer_info', })
closeBtn: 2, var ids = [];
shadeClose: true, for (var i = 0; i < wid.length; i++) {
content: '<div class="check_delete_site_main hint_confirm pd30">' + ids.push(wid[i].id);
"<div class='hint_title'>\ }
<i class=\'hint-confirm-icon\'></i>\ wid = ids
<div class=\'hint_con\'>"+ tips + "</div>\ }
</div>"+ var type = $('.database-pos .tabs-item.active').data('type'),
'<div id="check_layer_content" class="ptb15">' + title = '',
'</div>' + tips = '';
'<div class="check_layer_message">' + title = typeof dbname === "function" ? '批量删除数据库' : '删除数据库 - [ ' + dbname + ' ]';
(is_db_type ? '<span class="color-red">注意:远程数据库暂不支持数据库回收站,选中的数据库将彻底删除</span><br>' : '') + tips = is_db_type || !recycle_bin_db_open || type !== 'mysql' ? '<span class="color-red">当前列表存在彻底删除后无法恢复的数据库</span>,请仔细查看列表,以防误删,是否继续操作?' : '当前列表数据库将迁移至数据库回收站,如需彻底删除请前往数据库回收站,是否继续操作?'
(!recycle_bin_db_open ? '<span class="color-red">风险操作:当前数据库回收站未开启,删除数据库将永久消失</span><br>' : '') var arrs = wid instanceof Array ? wid : [wid]
+ '<span class="color-red">请仔细阅读以上要删除信息,防止数据库被误删</span></div>' + var ids = JSON.stringify(arrs),
'</div>', countDown = 9;
btn: ['下一步', lan.public.cancel], if (arrs.length == 1) countDown = 4
success: function (layers) { var loadT = bt.load('正在检测数据库数据信息,请稍候...'),
setTimeout(function () { $(layers).css('top', ($(window).height() - $(layers).height()) / 2); }, 50) param = { url: 'database/' + bt.data.db_tab_name + '/check_del_data', data: { data: JSON.stringify({ ids: ids }) } }
var rdata = res.data, if (bt.data.db_tab_name == 'mysql') param = { url: 'database?action=check_del_data', data: { ids: ids } }
newTime = parseInt(new Date().getTime() / 1000), bt_tools.send(param, function (res) {
t_icon = ' <span class="glyphicon glyphicon-info-sign" style="color: red;width:15px;height: 15px;;vertical-align: middle;"></span>'; loadT.close()
for (var j = 0; j < rdata.length; j++) { layer.open({
for (var i = 0; i < del_data.length; i++) { type: 1,
if (rdata[j].id == del_data[i].id) { title: title,
var is_time_rule = (newTime - rdata[j].st_time) > (86400 * 30) && (rdata[j].total > 1024 * 10), area: '740px',
is_database_rule = res.db_size <= rdata[j].total, skin: 'verify_site_layer_info',
database_time = bt.format_data(rdata[j].st_time, 'yyyy-MM-dd'), closeBtn: 2,
database_size = bt.format_size(rdata[j].total); shadeClose: true,
var f_size = database_size content: '<div class="check_delete_site_main hint_confirm pd30">' +
var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库' + database_size; "<div class='hint_title'>\
if (rdata[j].total < 2048) t_size = '注意事项:当前数据库不为空,可能为重要数据,请谨慎操作.\n数据库' + database_size; <i class=\'hint-confirm-icon\'></i>\
if (rdata[j].total === 0) t_size = ''; <div class=\'hint_con\'>"+ tips + "</div>\
rdata[j]['t_size'] = t_size </div>"+
rdata[j]['f_size'] = f_size '<div id="check_layer_content" class="ptb15">' +
rdata[j]['database_time'] = database_time '</div>' +
rdata[j]['is_time_rule'] = is_time_rule '<div class="check_layer_message">' +
rdata[j]['is_database_rule'] = is_database_rule (is_db_type ? '<span class="color-red">注意:远程数据库暂不支持数据库回收站,选中的数据库将彻底删除</span><br>' : '') +
rdata[j]['db_type'] = del_data[i].db_type (!recycle_bin_db_open ? '<span class="color-red">风险操作:当前数据库回收站未开启,删除数据库将永久消失</span><br>' : '')
rdata[j]['conn_config'] = del_data[i].conn_config + '<span class="color-red">请仔细阅读以上要删除信息,防止数据库被误删</span></div>' +
} '</div>',
} btn: ['下一步', lan.public.cancel],
} success: function (layers) {
var filterData = rdata.filter(function (el) { setTimeout(function () { $(layers).css('top', ($(window).height() - $(layers).height()) / 2); }, 50)
return ids.indexOf(el.id) != -1 var rdata = res.data,
}) newTime = parseInt(new Date().getTime() / 1000),
bt_tools.table({ t_icon = ' <span class="glyphicon glyphicon-info-sign" style="color: red;width:15px;height: 15px;;vertical-align: middle;"></span>';
el: '#check_layer_content', for (var j = 0; j < rdata.length; j++) {
data: filterData, for (var i = 0; i < del_data.length; i++) {
height: '300px', if (rdata[j].id == del_data[i].id) {
column: [ var is_time_rule = (newTime - rdata[j].st_time) > (86400 * 30) && (rdata[j].total > 1024 * 10),
{ fid: 'name', title: '数据库名称' }, is_database_rule = res.db_size <= rdata[j].total,
{ database_time = bt.format_data(rdata[j].st_time, 'yyyy-MM-dd'),
title: '数据库大小', template: function (row) { database_size = bt.format_size(rdata[j].total);
return '<span class="' + (row.is_database_rule ? 'warning' : '') + '" style="width: 110px;" title="' + row.t_size + '">' + row.f_size + (row.is_database_rule ? t_icon : '') + '</span>' var f_size = database_size
} var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库' + database_size;
}, if (rdata[j].total < 2048) t_size = '注意事项:当前数据库不为空,可能为重要数据,请谨慎操作.\n数据库' + database_size;
{ if (rdata[j].total === 0) t_size = '';
title: '数据库位置', template: function (row) { rdata[j]['t_size'] = t_size
var type_column = '-' rdata[j]['f_size'] = f_size
switch (row.db_type) { rdata[j]['database_time'] = database_time
case 0: rdata[j]['is_time_rule'] = is_time_rule
type_column = '本地数据库' rdata[j]['is_database_rule'] = is_database_rule
break; rdata[j]['db_type'] = del_data[i].db_type
case 1: rdata[j]['conn_config'] = del_data[i].conn_config
case 2: }
type_column = '远程数据库' }
break; }
} var filterData = rdata.filter(function (el) {
return '<span style="width: 110px;" title="' + type_column + '">' + type_column + '</span>' return ids.indexOf(el.id) != -1
} })
}, bt_tools.table({
{ el: '#check_layer_content',
title: '创建时间', template: function (row) { data: filterData,
return '<span ' + (is_time_rule && row.total != 0 ? 'class="warning"' : '') + ' title="' + (row.is_time_rule && row.total != 0 ? '重要:此数据库创建时间较早,可能为重要数据,请谨慎操作.' : '') + '时间:' + row.database_time + '">' + row.database_time + '</span>' height: '300px',
} column: [
}, { fid: 'name', title: '数据库名称' },
{ {
title: '删除结果', align: 'right', template: function (row, index, ev, _that) { title: '数据库大小', template: function (row) {
var _html = '' return '<span class="' + (row.is_database_rule ? 'warning' : '') + '" style="width: 110px;" title="' + row.t_size + '">' + row.f_size + (row.is_database_rule ? t_icon : '') + '</span>'
switch (row.db_type) { }
case 0: },
_html = type !== 'mysql' ? '彻底删除' : (!recycle_bin_db_open ? '彻底删除' : '移至回收站') {
break; title: '数据库位置', template: function (row) {
case 1: var type_column = '-'
case 2: switch (row.db_type) {
_html = '彻底删除' case 0:
break; type_column = '本地数据库'
} break;
return '<span style="width: 110px;" class="' + (_html === '彻底删除' ? 'warning' + (row.db_type > 0 ? ' remote_database' : '') : '') + '">' + _html + '</span>' case 1:
} case 2:
} type_column = '远程数据库'
], break;
success: function () { }
$('#check_layer_content').find('.glyphicon-info-sign').click(function (e) { return '<span style="width: 110px;" title="' + type_column + '">' + type_column + '</span>'
var msg = $(this).parent().prop('title') }
msg = msg.replace('数据库:','<br>数据库:') },
layer.tips(msg, $(this).parent(), { tips: [1, 'red'], time: 3000 }) {
$(document).click(function (ev) { title: '创建时间', template: function (row) {
layer.closeAll('tips'); return '<span ' + (is_time_rule && row.total != 0 ? 'class="warning"' : '') + ' title="' + (row.is_time_rule && row.total != 0 ? '重要:此数据库创建时间较早,可能为重要数据,请谨慎操作.' : '') + '时间:' + row.database_time + '">' + row.database_time + '</span>'
$(this).unbind('click'); }
ev.stopPropagation(); },
ev.preventDefault(); {
}); title: '删除结果', align: 'right', template: function (row, index, ev, _that) {
e.stopPropagation(); var _html = ''
e.preventDefault(); switch (row.db_type) {
}); case 0:
if ($('.remote_database').length) { _html = type !== 'mysql' ? '彻底删除' : (!recycle_bin_db_open ? '彻底删除' : '移至回收站')
$('.remote_database').each(function (index, el) { break;
var id = $(el).parent().parent().parent().index() case 1:
$('#check_layer_content tbody tr').eq(id).css('background-color', '#ff00000a') case 2:
}) _html = '彻底删除'
} break;
} }
}) return '<span style="width: 110px;" class="' + (_html === '彻底删除' ? 'warning' + (row.db_type > 0 ? ' remote_database' : '') : '') + '">' + _html + '</span>'
}, }
yes: function (indes, layers) { }
title = typeof dbname === "function" ? '二次验证信息,批量删除数据库' : '二次验证信息,删除数据库 - [ ' + dbname + ' ]'; ],
if (type !== 'mysql') { success: function () {
tips = '<span class="color-red">当前数据库暂不支持数据库回收站,删除后将无法恢复</span>,此操作不可逆,是否继续操作?'; $('#check_layer_content').find('.glyphicon-info-sign').click(function (e) {
} else { var msg = $(this).parent().prop('title')
tips = is_db_type ? '<span class="color-red">远程数据库不支持数据库回收站,删除后将无法恢复</span>,此操作不可逆,是否继续操作?' : recycle_bin_db_open ? '删除后如需彻底删除请前往数据库回收站,是否继续操作?' : '删除后可能会影响业务使用,此操作不可逆,是否继续操作?' msg = msg.replace('数据库:','<br>数据库:')
} layer.tips(msg, $(this).parent(), { tips: [1, 'red'], time: 3000 })
layer.open({ $(document).click(function (ev) {
type: 1, layer.closeAll('tips');
title: title, $(this).unbind('click');
icon: 0, ev.stopPropagation();
skin: 'delete_site_layer', ev.preventDefault();
area: "530px", });
closeBtn: 2, e.stopPropagation();
shadeClose: true, e.preventDefault();
content: "<div class=\'bt-form webDelete hint_confirm pd30\' id=\'site_delete_form\'>" + });
"<div class='hint_title'>\ if ($('.remote_database').length) {
<i class=\'hint-confirm-icon\'></i>\ $('.remote_database').each(function (index, el) {
<div class=\'hint_con\'>"+ tips + "</div>\ var id = $(el).parent().parent().parent().index()
</div>"+ $('#check_layer_content tbody tr').eq(id).css('background-color', '#ff00000a')
"<div style=\'color:red;margin:18px 0 18px 18px;font-size:14px;font-weight: bold;\'>注意:数据无价,请谨慎操作!!!" + (type === 'mysql' && !recycle_bin_db_open ? '<br>风险操作:当前数据库回收站未开启,删除数据库将永久消失!' : '') + "</div>"+ })
"</div>", }
btn: ['确认删除', '取消删除'], }
yes: function (indexs) { })
var data = { },
id: wid, yes: function (indes, layers) {
name: dbname title = typeof dbname === "function" ? '二次验证信息,批量删除数据库' : '二次验证信息,删除数据库 - [ ' + dbname + ' ]';
}; if (type !== 'mysql') {
if (typeof dbname === "function") { tips = '<span class="color-red">当前数据库暂不支持数据库回收站,删除后将无法恢复</span>,此操作不可逆,是否继续操作?';
delete data.id; } else {
delete data.name; tips = is_db_type ? '<span class="color-red">远程数据库不支持数据库回收站,删除后将无法恢复</span>,此操作不可逆,是否继续操作?' : recycle_bin_db_open ? '删除后如需彻底删除请前往数据库回收站,是否继续操作?' : '删除后可能会影响业务使用,此操作不可逆,是否继续操作?'
} }
layer.close(indexs) layer.open({
layer.close(indes) type: 1,
if (typeof dbname === "function") { title: title,
dbname(data) icon: 0,
} else { skin: 'delete_site_layer',
data.id = data.id[0] area: "530px",
bt.database.del_database(data, function (rdata) { closeBtn: 2,
layer.closeAll() shadeClose: true,
if (callback) callback(rdata); content: "<div class=\'bt-form webDelete hint_confirm pd30\' id=\'site_delete_form\'>" +
bt.msg(rdata); "<div class='hint_title'>\
}) <i class=\'hint-confirm-icon\'></i>\
} <div class=\'hint_con\'>"+ tips + "</div>\
} </div>"+
}) "<div style=\'color:red;margin:18px 0 18px 18px;font-size:14px;font-weight: bold;\'>注意:数据无价,请谨慎操作!!!" + (type === 'mysql' && !recycle_bin_db_open ? '<br>风险操作:当前数据库回收站未开启,删除数据库将永久消失!' : '') + "</div>"+
} "</div>",
}) btn: ['确认删除', '取消删除'],
}) yes: function (indexs) {
} var data = {
} id: wid,
if("undefined" != typeof site && site.hasOwnProperty("del_site")){ name: dbname
site.del_site = function (wid, wname, callback) { };
title = typeof wname === "function" ? '批量删除站点' : '删除站点 [ ' + wname + ' ]'; if (typeof dbname === "function") {
layer.open({ delete data.id;
type: 1, delete data.name;
title: title, }
icon: 0, layer.close(indexs)
skin: 'delete_site_layer', layer.close(indes)
area: "440px", if (typeof dbname === "function") {
closeBtn: 2, dbname(data)
shadeClose: true, } else {
content: "<div class=\'bt-form webDelete pd30\' id=\'site_delete_form\'>" + data.id = data.id[0]
'<i class="layui-layer-ico layui-layer-ico0"></i>' + bt.database.del_database(data, function (rdata) {
"<div class=\'f13 check_title\'>是否要删除关联的FTP、数据库、站点目录</div>" + layer.closeAll()
"<div class=\"check_type_group\">" + if (callback) callback(rdata);
"<label><input type=\"checkbox\" name=\"ftp\"><span>FTP</span></label>" + bt.msg(rdata);
"<label><input type=\"checkbox\" name=\"database\"><span>数据库</span>" + (!recycle_bin_db_open ? '<span class="glyphicon glyphicon-info-sign" style="color: red"></span>' : '') + "</label>" + })
"<label><input type=\"checkbox\" name=\"path\"><span>站点目录</span>" + (!recycle_bin_open ? '<span class="glyphicon glyphicon-info-sign" style="color: red"></span>' : '') + "</label>" + }
"</div>" + }
"</div>", })
btn: [lan.public.ok, lan.public.cancel], }
success: function (layers, indexs) { })
$(layers).find('.check_type_group label').hover(function () { })
var name = $(this).find('input').attr('name'); }
if (name === 'database' && !recycle_bin_db_open) { }
layer.tips('风险操作:当前数据库回收站未开启,删除数据库将永久消失!', this, { tips: [1, 'red'], time: 0 }) if("undefined" != typeof site && site.hasOwnProperty("del_site")){
} else if (name === 'path' && !recycle_bin_open) { site.del_site = function (wid, wname, callback) {
layer.tips('风险操作:当前文件回收站未开启,删除站点目录将永久消失!', this, { tips: [1, 'red'], time: 0 }) title = typeof wname === "function" ? '批量删除站点' : '删除站点 [ ' + wname + ' ]';
} layer.open({
}, function () { type: 1,
layer.closeAll('tips'); title: title,
}); icon: 0,
}, skin: 'delete_site_layer',
yes: function (indexs) { area: "440px",
var data = { id: wid, webname: wname }; closeBtn: 2,
$('#site_delete_form input[type=checkbox]').each(function (index, item) { shadeClose: true,
if ($(item).is(':checked')) data[$(item).attr('name')] = 1 content: "<div class=\'bt-form webDelete pd30\' id=\'site_delete_form\'>" +
}) '<i class="layui-layer-ico layui-layer-ico0"></i>' +
var is_database = data.hasOwnProperty('database'), is_path = data.hasOwnProperty('path'), is_ftp = data.hasOwnProperty('ftp'); "<div class=\'f13 check_title\'>是否要删除关联的FTP、数据库、站点目录</div>" +
if ((!is_database && !is_path) && (!is_ftp || is_ftp)) { "<div class=\"check_type_group\">" +
if (typeof wname === "function") { "<label><input type=\"checkbox\" name=\"ftp\"><span>FTP</span></label>" +
wname(data) "<label><input type=\"checkbox\" name=\"database\"><span>数据库</span>" + (!recycle_bin_db_open ? '<span class="glyphicon glyphicon-info-sign" style="color: red"></span>' : '') + "</label>" +
return false; "<label><input type=\"checkbox\" name=\"path\"><span>站点目录</span>" + (!recycle_bin_open ? '<span class="glyphicon glyphicon-info-sign" style="color: red"></span>' : '') + "</label>" +
} "</div>" +
bt.site.del_site(data, function (rdata) { "</div>",
layer.close(indexs); btn: [lan.public.ok, lan.public.cancel],
if (callback) callback(rdata); success: function (layers, indexs) {
bt.msg(rdata); $(layers).find('.check_type_group label').hover(function () {
}) var name = $(this).find('input').attr('name');
return false if (name === 'database' && !recycle_bin_db_open) {
} layer.tips('风险操作:当前数据库回收站未开启,删除数据库将永久消失!', this, { tips: [1, 'red'], time: 0 })
if (typeof wname === "function") { } else if (name === 'path' && !recycle_bin_open) {
delete data.id; layer.tips('风险操作:当前文件回收站未开启,删除站点目录将永久消失!', this, { tips: [1, 'red'], time: 0 })
delete data.webname; }
} }, function () {
layer.close(indexs) layer.closeAll('tips');
var ids = JSON.stringify(wid instanceof Array ? wid : [wid]), countDown = typeof wname === 'string' ? 4 : 9; });
title = typeof wname === "function" ? '二次验证信息,批量删除站点' : '二次验证信息,删除站点 [ ' + wname + ' ]'; },
var loadT = bt.load('正在检测站点数据信息,请稍候...') yes: function (indexs) {
bt.send('check_del_data', 'site/check_del_data', { ids: ids }, function (res) { var data = { id: wid, webname: wname };
loadT.close() $('#site_delete_form input[type=checkbox]').each(function (index, item) {
layer.open({ if ($(item).is(':checked')) data[$(item).attr('name')] = 1
type: 1, })
title: title, var is_database = data.hasOwnProperty('database'), is_path = data.hasOwnProperty('path'), is_ftp = data.hasOwnProperty('ftp');
closeBtn: 2, if ((!is_database && !is_path) && (!is_ftp || is_ftp)) {
skin: 'verify_site_layer_info', if (typeof wname === "function") {
area: '740px', wname(data)
content: '<div class="check_delete_site_main pd30">' + return false;
'<i class="layui-layer-ico layui-layer-ico0"></i>' + }
'<div class="check_layer_title">堡塔温馨提示您,请冷静几秒钟,确认以下要删除的数据。</div>' + bt.site.del_site(data, function (rdata) {
'<div class="check_layer_content">' + layer.close(indexs);
'<div class="check_layer_item">' + if (callback) callback(rdata);
'<div class="check_layer_site"></div>' + bt.msg(rdata);
'<div class="check_layer_database"></div>' + })
'</div>' + return false
'</div>' + }
'<div class="check_layer_error ' + (is_database && data['database'] && !recycle_bin_db_open ? '' : 'hide') + '"><span class="glyphicon glyphicon-info-sign"></span>风险事项:当前未开启数据库回收站功能,删除数据库后,数据库将永久消失!</div>' + if (typeof wname === "function") {
'<div class="check_layer_error ' + (is_path && data['path'] && !recycle_bin_open ? '' : 'hide') + '"><span class="glyphicon glyphicon-info-sign"></span>风险事项:当前未开启文件回收站功能,删除站点目录后,站点目录将永久消失!</div>' + delete data.id;
'<div class="check_layer_message"><span style="color:red">注意:请仔细阅读以上要删除信息,防止网站数据被误删</span></div>' + delete data.webname;
'</div>', }
// recycle_bin_db_open && layer.close(indexs)
// recycle_bin_open && var ids = JSON.stringify(wid instanceof Array ? wid : [wid]), countDown = typeof wname === 'string' ? 4 : 9;
btn: ['确认删除', '取消删除'], title = typeof wname === "function" ? '二次验证信息,批量删除站点' : '二次验证信息,删除站点 [ ' + wname + ' ]';
success: function (layers) { var loadT = bt.load('正在检测站点数据信息,请稍候...')
var html = '', rdata = res.data; bt.send('check_del_data', 'site/check_del_data', { ids: ids }, function (res) {
for (var i = 0; i < rdata.length; i++) { loadT.close()
var item = rdata[i], newTime = parseInt(new Date().getTime() / 1000), layer.open({
t_icon = '<span class="glyphicon glyphicon-info-sign" style="color: red;width:15px;height: 15px;;vertical-align: middle;"></span>'; type: 1,
title: title,
site_html = (function (item) { closeBtn: 2,
if (!is_path) return '' skin: 'verify_site_layer_info',
var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10), area: '740px',
is_path_rule = res.file_size <= item.total, content: '<div class="check_delete_site_main pd30">' +
dir_time = bt.format_data(item.st_time, 'yyyy-MM-dd'), '<i class="layui-layer-ico layui-layer-ico0"></i>' +
dir_size = bt.format_size(item.total); '<div class="check_layer_title">堡塔温馨提示您,请冷静几秒钟,确认以下要删除的数据。</div>' +
'<div class="check_layer_content">' +
var f_html = '<i ' + (is_path_rule ? 'class="warning"' : '') + ' style = "vertical-align: middle;" > ' + (item.limit ? '大于50MB' : dir_size) + '</i> ' + (is_path_rule ? t_icon : ''); '<div class="check_layer_item">' +
var f_title = (is_path_rule ? '注意:此目录较大,可能为重要数据,请谨慎操作.\n' : '') + '目录:' + item.path + '(' + (item.limit ? '大于' : '') + dir_size + ')'; '<div class="check_layer_site"></div>' +
'<div class="check_layer_database"></div>' +
return '<div class="check_layer_site">' + '</div>' +
'<span title="站点:' + item.name + '">站点名:' + item.name + '</span>' + '</div>' +
'<span title="' + f_title + '" >目录:<span style="vertical-align: middle;max-width: 160px;width: auto;">' + item.path + '</span> (' + f_html + ')</span>' + '<div class="check_layer_error ' + (is_database && data['database'] && !recycle_bin_db_open ? '' : 'hide') + '"><span class="glyphicon glyphicon-info-sign"></span>风险事项:当前未开启数据库回收站功能,删除数据库后,数据库将永久消失!</div>' +
'<span title="' + (is_time_rule ? '注意:此站点创建时间较早,可能为重要数据,请谨慎操作.\n' : '') + '时间:' + dir_time + '">创建时间:<i ' + (is_time_rule ? 'class="warning"' : '') + '>' + dir_time + '</i></span>' + '<div class="check_layer_error ' + (is_path && data['path'] && !recycle_bin_open ? '' : 'hide') + '"><span class="glyphicon glyphicon-info-sign"></span>风险事项:当前未开启文件回收站功能,删除站点目录后,站点目录将永久消失!</div>' +
'</div>' '<div class="check_layer_message"><span style="color:red">注意:请仔细阅读以上要删除信息,防止网站数据被误删</span></div>' +
}(item)), '</div>',
database_html = (function (item) { // recycle_bin_db_open &&
if (!is_database || !item.database) return ''; // recycle_bin_open &&
var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10), btn: ['确认删除', '取消删除'],
is_database_rule = res.db_size <= item.database.total, success: function (layers) {
database_time = bt.format_data(item.database.st_time, 'yyyy-MM-dd'), var html = '', rdata = res.data;
database_size = bt.format_size(item.database.total); for (var i = 0; i < rdata.length; i++) {
var item = rdata[i], newTime = parseInt(new Date().getTime() / 1000),
var f_size = '<i ' + (is_database_rule ? 'class="warning"' : '') + ' style = "vertical-align: middle;" > ' + database_size + '</i> ' + (is_database_rule ? t_icon : ''); t_icon = '<span class="glyphicon glyphicon-info-sign" style="color: red;width:15px;height: 15px;;vertical-align: middle;"></span>';
var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库' + database_size;
site_html = (function (item) {
return '<div class="check_layer_database">' + if (!is_path) return ''
'<span title="数据库:' + item.database.name + '">数据库:' + item.database.name + '</span>' + var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
'<span title="' + t_size + '">大小:' + f_size + '</span>' + is_path_rule = res.file_size <= item.total,
'<span title="' + (is_time_rule && item.database.total != 0 ? '重要:此数据库创建时间较早,可能为重要数据,请谨慎操作.' : '') + '时间:' + database_time + '">创建时间:<i ' + (is_time_rule && item.database.total != 0 ? 'class="warning"' : '') + '>' + database_time + '</i></span>' + dir_time = bt.format_data(item.st_time, 'yyyy-MM-dd'),
'</div>' dir_size = bt.format_size(item.total);
}(item))
if ((site_html + database_html) !== '') html += '<div class="check_layer_item">' + site_html + database_html + '</div>'; var f_html = '<i ' + (is_path_rule ? 'class="warning"' : '') + ' style = "vertical-align: middle;" > ' + (item.limit ? '大于50MB' : dir_size) + '</i> ' + (is_path_rule ? t_icon : '');
} var f_title = (is_path_rule ? '注意:此目录较大,可能为重要数据,请谨慎操作.\n' : '') + '目录:' + item.path + '(' + (item.limit ? '大于' : '') + dir_size + ')';
if (html === '') html = '<div style="text-align: center;width: 100%;height: 100%;line-height: 300px;font-size: 15px;">无数据</div>'
$('.check_layer_content').html(html) return '<div class="check_layer_site">' +
}, '<span title="站点:' + item.name + '">站点名:' + item.name + '</span>' +
yes: function (indes, layers) { '<span title="' + f_title + '" >目录:<span style="vertical-align: middle;max-width: 160px;width: auto;">' + item.path + '</span> (' + f_html + ')</span>' +
if (typeof wname === "function") { '<span title="' + (is_time_rule ? '注意:此站点创建时间较早,可能为重要数据,请谨慎操作.\n' : '') + '时间:' + dir_time + '">创建时间:<i ' + (is_time_rule ? 'class="warning"' : '') + '>' + dir_time + '</i></span>' +
wname(data) '</div>'
} else { }(item)),
bt.site.del_site(data, function (rdata) { database_html = (function (item) {
layer.closeAll() if (!is_database || !item.database) return '';
if (rdata.status) site.get_list(); var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
if (callback) callback(rdata); is_database_rule = res.db_size <= item.database.total,
bt.msg(rdata); database_time = bt.format_data(item.database.st_time, 'yyyy-MM-dd'),
}) database_size = bt.format_size(item.database.total);
}
} var f_size = '<i ' + (is_database_rule ? 'class="warning"' : '') + ' style = "vertical-align: middle;" > ' + database_size + '</i> ' + (is_database_rule ? t_icon : '');
}) var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库' + database_size;
})
} return '<div class="check_layer_database">' +
}) '<span title="数据库:' + item.database.name + '">数据库:' + item.database.name + '</span>' +
} '<span title="' + t_size + '">大小:' + f_size + '</span>' +
} '<span title="' + (is_time_rule && item.database.total != 0 ? '重要:此数据库创建时间较早,可能为重要数据,请谨慎操作.' : '') + '时间:' + database_time + '">创建时间:<i ' + (is_time_rule && item.database.total != 0 ? 'class="warning"' : '') + '>' + database_time + '</i></span>' +
if("undefined" != typeof bt && bt.hasOwnProperty("firewall") && bt.firewall.hasOwnProperty("add_accept_port")){ '</div>'
bt.firewall.add_accept_port = function(type, port, ps, callback) { }(item))
var action = "AddDropAddress"; if ((site_html + database_html) !== '') html += '<div class="check_layer_item">' + site_html + database_html + '</div>';
if (type == 'port') { }
ports = port.split(':'); if (html === '') html = '<div style="text-align: center;width: 100%;height: 100%;line-height: 300px;font-size: 15px;">无数据</div>'
if (port.indexOf('-') != -1) ports = port.split('-'); $('.check_layer_content').html(html)
for (var i = 0; i < ports.length; i++) { },
if (!bt.check_port(ports[i])) { yes: function (indes, layers) {
layer.msg('可用端口范围1-65535', { icon: 2 }); if (typeof wname === "function") {
// layer.msg(lan.firewall.port_err, { wname(data)
// icon: 5 } else {
// }); bt.site.del_site(data, function (rdata) {
return; layer.closeAll()
} if (rdata.status) site.get_list();
} if (callback) callback(rdata);
action = "AddAcceptPort"; bt.msg(rdata);
} })
}
loading = bt.load(); }
bt.send(action, 'firewall/' + action, { port: port, type: type, ps: ps }, function(rdata) { })
loading.close(); })
if (callback) callback(rdata); }
}) })
} }
} }
function SafeMessage(j, h, g, f) { if("undefined" != typeof bt && bt.hasOwnProperty("firewall") && bt.firewall.hasOwnProperty("add_accept_port")){
if(f == undefined) { bt.firewall.add_accept_port = function(type, port, ps, callback) {
f = "" var action = "AddDropAddress";
} if (type == 'port') {
var mess = layer.open({ ports = port.split(':');
type: 1, if (port.indexOf('-') != -1) ports = port.split('-');
title: j, for (var i = 0; i < ports.length; i++) {
area: "350px", if (!bt.check_port(ports[i])) {
closeBtn: 2, layer.msg('可用端口范围1-65535', { icon: 2 });
shadeClose: true, // layer.msg(lan.firewall.port_err, {
content: "<div class='bt-form webDelete pd20 pb70'><p>" + h + "</p>" + f + "<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>" // icon: 5
}); // });
$(".bt-cancel").click(function(){ return;
layer.close(mess); }
}); }
$("#toSubmit").click(function() { action = "AddAcceptPort";
layer.close(mess); }
g();
}) loading = bt.load();
} bt.send(action, 'firewall/' + action, { port: port, type: type, ps: ps }, function(rdata) {
$(document).ready(function () { loading.close();
if($('#updata_pro_info').length>0){ if (callback) callback(rdata);
$('#updata_pro_info').html(''); })
bt.set_cookie('productPurchase', 1); }
} }
function SafeMessage(j, h, g, f) {
if(f == undefined) {
f = ""
}
var mess = layer.open({
type: 1,
title: j,
area: "350px",
closeBtn: 2,
shadeClose: true,
content: "<div class='bt-form webDelete pd20 pb70'><p>" + h + "</p>" + f + "<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>"
});
$(".bt-cancel").click(function(){
layer.close(mess);
});
$("#toSubmit").click(function() {
layer.close(mess);
g();
})
}
$(document).ready(function () {
if($('#updata_pro_info').length>0){
$('#updata_pro_info').html('');
bt.set_cookie('productPurchase', 1);
}
}) })

View File

@ -57,12 +57,10 @@
__set_pyenv方法内temp_file = public.readFile(filename)这行代码下面加上 __set_pyenv方法内temp_file = public.readFile(filename)这行代码下面加上
```python ```python
temp_file = temp_file.replace('wget -O Tpublic.sh', '#wget -O Tpublic.sh')
temp_file = temp_file.replace('\cp -rpa Tpublic.sh', '#\cp -rpa Tpublic.sh')
temp_file = temp_file.replace('http://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh') temp_file = temp_file.replace('http://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh')
temp_file = temp_file.replace('https://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh') temp_file = temp_file.replace('https://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh')
``` ```
- class/plugin_deployment.py 文件SetupPackage方法内替换 public.GetConfigValue('home') => 'https://www.bt.cn' - class/plugin_deployment.py 文件SetupPackage方法内替换 public.GetConfigValue('home') => 'https://www.bt.cn'
- script/flush_plugin.py 文件删除clear_hosts()一行 - script/flush_plugin.py 文件删除clear_hosts()一行