Simple Linux Panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
mdserver-web/static/js/soft.js

2855 lines
119 KiB

//软件管理
function phpSoftMain(name,key){
if(!isNaN(name)){
var nametext = "php"+name;
name = name.replace(".","");
}
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/plugin?action=getPluginInfo&name=php',function(rdata){
layer.close(loadT);
nameA = rdata.versions[key];
bodys = [
'<p class="bgw pstate" data-id="0"><a href="javascript:service(\''+name+'\','+nameA.run+')">'+lan.soft.php_main1+'</a><span class="spanmove"></span></p>',
'<p data-id="1"><a id="phpext" href="javascript:SetPHPConfig(\''+name+'\','+nameA.pathinfo+')">'+lan.soft.php_main5+'</a><span class="spanmove"></span></p>',
'<p data-id="2"><a href="javascript:SetPHPConf(\''+name+'\')">'+lan.soft.config_edit+'</a><span class="spanmove"></span></p>',
'<p data-id="3"><a href="javascript:phpUploadLimit(\''+name+'\','+nameA.max+')">'+lan.soft.php_main2+'</a><span class="spanmove"></span></p>',
'<p class="phphide" data-id="4"><a href="javascript:phpTimeLimit(\''+name+'\','+nameA.maxTime+')">'+lan.soft.php_main3+'</a><span class="spanmove"></span></p>',
'<p data-id="5"><a href="javascript:configChange(\''+name+'\')">'+lan.soft.php_main4+'</a><span class="spanmove"></span></p>',
'<p data-id="6"><a href="javascript:disFun(\''+name+'\')">'+lan.soft.php_main6+'</a><span class="spanmove"></span></p>',
'<p class="phphide" data-id="7"><a href="javascript:SetFpmConfig(\''+name+'\')">'+lan.soft.php_main7+'</a><span class="spanmove"></span></p>',
'<p class="phphide" data-id="8"><a href="javascript:GetPHPStatus(\''+name+'\')">'+lan.soft.php_main8+'</a><span class="spanmove"></span></p>',
'<p class="phphide" data-id="9"><a href="javascript:GetFpmLogs(\''+name+'\')">FPM日志</a><span class="spanmove"></span></p>',
'<p class="phphide" data-id="10"><a href="javascript:GetFpmSlowLogs(\''+name+'\')">慢日志</a><span class="spanmove"></span></p>',
'<p data-id="11"><a href="javascript:BtPhpinfo(\''+name+'\')">phpinfo</a><span class="spanmove"></span></p>'
]
var sdata = '';
if(rdata.phpSort == false){
rdata.phpSort = [0,1,2,3,4,5,6,7,8,9,10,11];
}else{
rdata.phpSort = rdata.phpSort.split('|');
}
for(var i=0;i<rdata.phpSort.length;i++){
sdata += bodys[rdata.phpSort[i]];
}
layer.open({
type: 1,
area: '640px',
title: nametext+lan.soft.admin,
closeBtn: 2,
shift: 0,
content: '<div class="bt-w-main" style="width:640px;">\
<input name="softMenuSortOrder" type="hidden" />\
<div class="bt-w-menu soft-man-menu">\
'+sdata+'\
</div>\
<div id="webEdit-con" class="bt-w-con pd15" style="height:555px;overflow:auto">\
<div class="soft-man-con"></div>\
</div>\
</div>'
});
if(name== "52"){
$(".phphide").hide();
}
if(rdata.versions.length < 5){
$(".phphide").hide();
$(".pstate").hide();
SetPHPConfig(name,nameA.pathinfo);
$("p[data-id='4']").addClass('bgw');
}else{
service(name,nameA.run);
}
$(".bt-w-menu p a").click(function(){
var txt = $(this).text();
$(this).parent().addClass("bgw").siblings().removeClass("bgw");
if(txt != lan.soft.php_menu_ext) $(".soft-man-con").removeAttr("style");
});
$(".soft-man-menu").dragsort({dragSelector: ".spanmove", dragEnd: MenusaveOrder});
});
}
//FPM日志
function GetFpmLogs(phpversion){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/ajax?action=GetFpmLogs&version='+phpversion,function(logs){
layer.close(loadT);
if(logs.status !== true){
logs.msg = '';
}
if (logs.msg == '') logs.msg = '当前没有fpm日志.';
var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+logs.msg+'</textarea>';
$(".soft-man-con").html(phpCon);
var ob = document.getElementById('error_log');
ob.scrollTop = ob.scrollHeight;
});
}
//FPM-Slow日志
function GetFpmSlowLogs(phpversion){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/ajax?action=GetFpmSlowLogs&version='+phpversion,function(logs){
layer.close(loadT);
if(logs.status !== true){
logs.msg = '';
}
if (logs.msg == '') logs.msg = '当前没有慢日志.';
var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+logs.msg+'</textarea>';
$(".soft-man-con").html(phpCon);
var ob = document.getElementById('error_log');
ob.scrollTop = ob.scrollHeight;
});
}
//配置修改
function SetPHPConf(version){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=GetPHPConf','version='+version,function(rdata){
layer.close(loadT);
var mlist = '';
for(var i=0;i<rdata.length;i++){
var w = '70'
if(rdata[i].name == 'error_reporting') w = '250';
var ibody = '<input style="width: '+w+'px;" class="bt-input-text mr5" name="'+rdata[i].name+'" value="'+rdata[i].value+'" type="text" >';
switch(rdata[i].type){
case 0:
var selected_1 = (rdata[i].value == 1)?'selected':'';
var selected_0 = (rdata[i].value == 0)?'selected':'';
ibody = '<select class="bt-input-text mr5" name="'+rdata[i].name+'" style="width: '+w+'px;"><option value="1" '+selected_1+'>开启</option><option value="0" '+selected_0+'>关闭</option></select>'
break;
case 1:
var selected_1 = (rdata[i].value == 'On')?'selected':'';
var selected_0 = (rdata[i].value == 'Off')?'selected':'';
ibody = '<select class="bt-input-text mr5" name="'+rdata[i].name+'" style="width: '+w+'px;"><option value="On" '+selected_1+'>开启</option><option value="Off" '+selected_0+'>关闭</option></select>'
break;
}
mlist += '<p><span>'+rdata[i].name+'</span>'+ibody+', <font>'+rdata[i].ps+'</font></p>'
}
var phpCon = '<style>.conf_p p{margin-bottom: 2px}</style><div class="conf_p" style="margin-bottom:0">\
'+mlist+'\
<div style="margin-top:10px; padding-right:15px" class="text-right"><button class="btn btn-success btn-sm mr5" onclick="SetPHPConf('+version+')">'+lan.public.fresh+'</button><button class="btn btn-success btn-sm" onclick="SubmitPHPConf('+version+')">'+lan.public.save+'</button></div>\
</div>'
$(".soft-man-con").html(phpCon);
});
}
//提交PHP配置
function SubmitPHPConf(version){
var data = {
version:version,
display_errors:$("select[name='display_errors']").val(),
'cgi.fix_pathinfo':$("select[name='cgi.fix_pathinfo']").val(),
'date.timezone':$("input[name='date.timezone']").val(),
short_open_tag:$("select[name='short_open_tag']").val(),
asp_tags:$("select[name='asp_tags']").val()||'On',
safe_mode:$("select[name='safe_mode']").val(),
max_execution_time:$("input[name='max_execution_time']").val(),
max_input_time:$("input[name='max_input_time']").val(),
memory_limit:$("input[name='memory_limit']").val(),
post_max_size:$("input[name='post_max_size']").val(),
file_uploads:$("select[name='file_uploads']").val(),
upload_max_filesize:$("input[name='upload_max_filesize']").val(),
max_file_uploads:$("input[name='max_file_uploads']").val(),
default_socket_timeout:$("input[name='default_socket_timeout']").val(),
error_reporting:$("input[name='error_reporting']").val()||'On'
}
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=SetPHPConf',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
function MenusaveOrder() {
var data = $(".soft-man-menu > p").map(function() { return $(this).attr("data-id"); }).get();
var ssort = data.join("|");
$("input[name=softMenuSortOrder]").val(ssort);
$.post('/ajax?action=phpSort','ssort='+ssort,function(){});
};
//服务
function service(name,status){
if(status == 'false') status = false;
if(status == 'true') status = true;
var serviceCon ='<p class="status">'+lan.soft.status+':<span>'+(status?lan.soft.on:lan.soft.off)+'</span><span style="color: '+(status?'#20a53a;':'red;')+' margin-left: 3px;" class="glyphicon '+(status?'glyphicon glyphicon-play':'glyphicon-pause')+'"></span></p>\
<div class="sfm-opt">\
<button class="btn btn-default btn-sm" onclick="ServiceAdmin(\''+name+'\',\''+(status?'stop':'start')+'\')">'+(status?lan.soft.stop:lan.soft.start)+'</button>\
<button class="btn btn-default btn-sm" onclick="ServiceAdmin(\''+name+'\',\'restart\')">'+lan.soft.restart+'</button>\
<button class="btn btn-default btn-sm" onclick="ServiceAdmin(\''+name+'\',\'reload\')">'+lan.soft.reload+'</button>\
</div>';
$(".soft-man-con").html(serviceCon);
var help = '<ul class="help-info-text c7 mtb15" style="padding-top:30px"><li>'+lan.soft.mysql_mem_err+'</li></ul>';
if(name == 'mysqld'){
$(".soft-man-con").append(help);
}
}
//更新软件列表
function updateSoftList(){
$.get('/plugin?action=getCloudPlugin',function(rdata){ });
}
//php上传限制
function phpUploadLimit(version,max){
var LimitCon = '<p class="conf_p"><input class="phpUploadLimit bt-input-text mr5" type="number" value="'+max+'" name="max">MB<button class="btn btn-success btn-sm" onclick="SetPHPMaxSize(\''+version+'\')" style="margin-left:20px">'+lan.public.save+'</button></p>';
$(".soft-man-con").html(LimitCon);
}
//php超时限制
function phpTimeLimit(version,max){
var LimitCon = '<p class="conf_p"><input class="phpTimeLimit bt-input-text mr5" type="number" value="'+max+'">'+lan.bt.s+'<button class="btn btn-success btn-sm" onclick="SetPHPMaxTime(\''+version+'\')" style="margin-left:20px">'+lan.public.save+'</button></p>';
$(".soft-man-con").html(LimitCon);
}
//设置超时限制
function SetPHPMaxTime(version){
var max = $(".phpTimeLimit").val();
var loadT = layer.msg(lan.soft.the_save,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=setPHPMaxTime','version='+version+'&time='+max,function(rdata){
$(".bt-w-menu .active").attr('onclick',"phpTimeLimit('"+version+"',"+max+")");
$(".bt-w-menu .active a").attr('href',"javascript:phpTimeLimit('"+version+"',"+max+");");
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//设置PHP上传限制
function SetPHPMaxSize(version){
max = $(".phpUploadLimit").val();
if(max < 2){
alert(max);
layer.msg(lan.soft.php_upload_size,{icon:2});
return;
}
var loadT = layer.msg(lan.soft.the_save,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=setPHPMaxSize','&version='+version+'&max='+max,function(rdata){
$(".bt-w-menu .active").attr('onclick',"phpUploadLimit('"+version+"',"+max+")");
$(".bt-w-menu .active a").attr('href',"javascript:phpUploadLimit('"+version+"',"+max+");");
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
})
}
//配置修改
function configChange(type){
var con = '<p style="color: #666; margin-bottom: 7px">'+lan.bt.edit_ps+'</p><textarea class="bt-input-text" style="height: 320px; line-height:18px;" id="textBody"></textarea>\
<button id="OnlineEditFileBtn" class="btn btn-success btn-sm" style="margin-top:10px;">'+lan.public.save+'</button>\
<ul class="help-info-text c7 ptb15">\
<li>'+lan.get('config_edit_ps',[type])+'</li>\
</ul>';
$(".soft-man-con").html(con);
var fileName = '';
switch(type){
case 'mysqld':
fileName = '/etc/my.cnf';
break;
case 'nginx':
fileName = '/www/server/nginx/conf/nginx.conf';
break;
case 'pure-ftpd':
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;
default:
fileName = '/www/server/php/'+type+'/etc/php.ini';
break;
}
var loadT = layer.msg(lan.soft.get,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files?action=GetFileBody', 'path=' + fileName, function(rdata) {
layer.close(loadT);
$("#textBody").empty().text(rdata.data);
$(".CodeMirror").remove();
var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), {
extraKeys: {"Ctrl-Space": "autocomplete"},
lineNumbers: true,
matchBrackets:true,
});
editor.focus();
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
$("#OnlineEditFileBtn").click(function(){
$("#textBody").text(editor.getValue());
confSafe(fileName);
});
});
}
//配置保存
function confSafe(fileName){
var data = encodeURIComponent($("#textBody").val());
var encoding = 'utf-8';
var loadT = layer.msg(lan.soft.the_save, {
icon: 16,
time: 0
});
$.post('/files?action=SaveFileBody', 'data=' + data + '&path=' + fileName+'&encoding='+encoding, function(rdata) {
layer.close(loadT);
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2
});
});
}
//设置PATHINFO
function SetPathInfo(version,type){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=setPathInfo','version='+version+'&type='+type,function(rdata){
var pathinfo = (type == 'on')?true:false;
var pathinfoOpt = '<a style="color:red;" href="javascript:SetPathInfo(\''+version+'\',\'off\');">'+lan.public.off+'</a>'
if(!pathinfo){
pathinfoOpt = '<a class="link" href="javascript:SetPathInfo(\''+version+'\',\'on\');">'+lan.public.on+'</a>'
}
var pathinfo1 = '<td>PATH_INFO</td><td>'+lan.soft.php_menu_ext+'</td><td>'+lan.soft.mvc_ps+'</td><td><span class="ico-'+(pathinfo?'start':'stop')+' glyphicon glyphicon-'+(pathinfo?'ok':'remove')+'"></span></td><td style="text-align: right;" width="50">'+pathinfoOpt+'</td>';
$("#pathInfo").html(pathinfo1);
$(".bt-w-menu .bgw").attr('onclick',"SetPHPConfig('"+version+"',"+pathinfo+",1)");
$(".bt-w-menu .bgw a").attr('href',"javascript:SetPHPConfig('"+version+"',"+pathinfo+",1);");
layer.msg(rdata.msg,{icon:1});
});
}
//PHP扩展配置
function SetPHPConfig(version,pathinfo,go){
$.get('/ajax?action=GetPHPConfig&version='+version,function(rdata){
var body = ""
var opt = ""
for(var i=0;i<rdata.libs.length;i++){
if(rdata.libs[i].versions.indexOf(version) == -1) continue;
if(rdata.libs[i]['task'] == '-1' && rdata.libs[i].phpversions.indexOf(version) != -1){
opt = '<a style="color:green;" href="javascript:messagebox();">'+lan.soft.the_install+'</a>'
}else if(rdata.libs[i]['task'] == '0' && rdata.libs[i].phpversions.indexOf(version) != -1){
opt = '<a style="color:#C0C0C0;" href="javascript:messagebox();">'+lan.soft.sleep_install+'</a>'
}else if(rdata.libs[i].status){
opt = '<a style="color:red;" href="javascript:UninstallPHPLib(\''+version+'\',\''+rdata.libs[i].name+'\',\''+rdata.libs[i].title+'\','+pathinfo+');">'+lan.soft.uninstall+'</a>'
}else{
opt = '<a class="btlink" href="javascript:InstallPHPLib(\''+version+'\',\''+rdata.libs[i].name+'\',\''+rdata.libs[i].title+'\','+pathinfo+');">'+lan.soft.install+'</a>'
}
body += '<tr>'
+'<td>'+rdata.libs[i].name+'</td>'
+'<td>'+rdata.libs[i].type+'</td>'
+'<td>'+rdata.libs[i].msg+'</td>'
+'<td><span class="ico-'+(rdata.libs[i].status?'start':'stop')+' glyphicon glyphicon-'+(rdata.libs[i].status?'ok':'remove')+'"></span></td>'
+'<td style="text-align: right;">'+opt+'</td>'
+'</tr>'
}
var pathinfoOpt = '<a style="color:red;" href="javascript:SetPathInfo(\''+version+'\',\'off\');">'+lan.soft.off+'</a>'
if(!rdata.pathinfo){
pathinfoOpt = '<a class="btlink" href="javascript:SetPathInfo(\''+version+'\',\'on\');">'+lan.soft.on+'</a>'
}
var pathinfo1 = '<tr id="pathInfo"><td>PATH_INFO</td><td>'+lan.soft.php_menu_ext+'</td><td>'+lan.soft.mvc_ps+'</td><td><span class="ico-'+(rdata.pathinfo?'start':'stop')+' glyphicon glyphicon-'+(rdata.pathinfo?'ok':'remove')+'"></span></td><td style="text-align: right;" width="50">'+pathinfoOpt+'</td></tr>';
var con='<div class="divtable" id="phpextdiv" style="margin-right:10px;height: 420px; overflow: auto; margin-right: 0px;">'
+'<table class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0">'
+'<thead>'
+'<tr>'
+'<th>'+lan.soft.php_ext_name+'</th>'
+'<th width="64">'+lan.soft.php_ext_type+'</th>'
+'<th>'+lan.soft.php_ext_ps+'</th>'
+'<th width="40">'+lan.soft.php_ext_status+'</th>'
+'<th style="text-align: right;" width="50">'+lan.public.action+'</th>'
+'</tr>'
+'</thead>'
+'<tbody>'+pathinfo1+body+'</tbody>'
+'</table>'
+'</div>'
+'<ul class="help-info-text c7 pull-left"><li>请按实际需求安装扩展,不要安装不必要的PHP扩展,这会影响PHP执行效率,甚至出现异常</li><li>Redis扩展只允许在1个PHP版本中使用,安装到其它PHP版本请在[软件管理]重装Redis</li><li>opcache/xcache/apc等脚本缓存扩展,请只安装其中1个,否则可能导致您的站点程序异常</li></ul>';
var divObj = document.getElementById('phpextdiv');
var scrollTopNum = 0;
if(divObj) scrollTopNum = divObj.scrollTop;
$(".soft-man-con").html(con);
document.getElementById('phpextdiv').scrollTop = scrollTopNum;
});
if(go == undefined){
setTimeout(function(){
if($(".bgw #phpext").html() != '安装扩展'){
return;
}
SetPHPConfig(version,pathinfo);
},3000);
}
}
//安装扩展
function InstallPHPLib(version,name,title,pathinfo){
layer.confirm(lan.soft.php_ext_install_confirm.replace('{1}',name),{icon:3,closeBtn:2},function(){
name = name.toLowerCase();
var data = "name="+name+"&version="+version+"&type=1";
var loadT = layer.msg(lan.soft.add_install,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files?action=InstallSoft', data, function(rdata)
{
setTimeout(function(){
layer.close(loadT);
SetPHPConfig(version,pathinfo,true);
setTimeout(function(){
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},1000);
},1000);
});
fly("bi-btn");
InstallTips();
GetTaskCount();
});
}
//卸载扩展
function UninstallPHPLib(version,name,title,pathinfo){
layer.confirm(lan.soft.php_ext_uninstall_confirm.replace('{1}',name),{icon:3,closeBtn:2},function(){
name = name.toLowerCase();
var data = 'name='+name+'&version='+version;
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files?action=UninstallSoft',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
SetPHPConfig(version,pathinfo,true);
});
});
}
//禁用函数
function disFun(version){
$.get('/ajax?action=GetPHPConfig&version='+version,function(rdata){
var disable_functions = rdata.disable_functions.split(',');
var dbody = ''
for(var i=0;i<disable_functions.length;i++){
if(disable_functions[i] == '') continue;
dbody += "<tr><td>"+disable_functions[i]+"</td><td><a style='float:right;' href=\"javascript:disable_functions('"+version+"','"+disable_functions[i]+"','"+rdata.disable_functions+"');\">"+lan.public.del+"</a></td></tr>";
}
var con = "<div class='dirBinding'>"
+"<input class='bt-input-text mr5' type='text' placeholder='"+lan.soft.fun_ps1+"' id='disable_function_val' style='height: 28px; border-radius: 3px;width: 410px;' />"
+"<button class='btn btn-success btn-sm' onclick=\"disable_functions('"+version+"',1,'"+rdata.disable_functions+"')\">"+lan.public.add+"</button>"
+"</div>"
+"<div class='divtable mtb15' style='height:350px;overflow:auto'><table class='table table-hover' width='100%' style='margin-bottom:0'>"
+"<thead><tr><th>"+lan.soft.php_ext_name+"</th><th width='100' class='text-right'>"+lan.public.action+"</th></tr></thead>"
+"<tbody id='blacktable'>" + dbody + "</tbody>"
+"</table></div>";
con +='\
<ul class="help-info-text">\
<li>'+lan.soft.fun_ps2+'</li>\
<li>'+lan.soft.fun_ps3+'</li>\
</ul>';
$(".soft-man-con").html(con);
});
}
//设置禁用函数
function disable_functions(version,act,fs){
var fsArr = fs.split(',');
if(act == 1){
var functions = $("#disable_function_val").val();
for(var i=0;i<fsArr.length;i++){
if(functions == fsArr[i]){
layer.msg(lan.soft.fun_msg,{icon:5});
return;
}
}
fs += ',' + functions;
msg = lan.public.add_success;
}else{
fs = '';
for(var i=0;i<fsArr.length;i++){
if(act == fsArr[i]) continue;
fs += fsArr[i] + ','
}
msg = lan.public.del_success;
fs = fs.substr(0,fs.length -1);
}
var data = 'version='+version+'&disable_functions='+fs;
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=setPHPDisable',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.status?msg:rdata.msg,{icon:rdata.status?1:2});
disFun(version);
});
}
//性能调整
function SetFpmConfig(version,action){
if(action == 1){
$.post('/system?action=GetMemInfo','',function(memInfo){
var limit_children = parseInt(memInfo['memTotal'] / 8);
var max_children = Number($("input[name='max_children']").val());
var start_servers = Number($("input[name='start_servers']").val());
var min_spare_servers = Number($("input[name='min_spare_servers']").val());
var max_spare_servers = Number($("input[name='max_spare_servers']").val());
var pm = $("select[name='pm']").val();
if(limit_children < max_children){
layer.msg('当前服务器内存不足,最大允许['+limit_children+']个子进程!',{icon:2});
$("input[name='max_children']").focus();
return;
}
if(max_children < max_spare_servers){
layer.msg(lan.soft.php_fpm_err1,{icon:2});
return;
}
if(min_spare_servers > start_servers) {
layer.msg(lan.soft.php_fpm_err2,{icon:2});
return;
}
if(max_spare_servers < min_spare_servers){
layer.msg(lan.soft.php_fpm_err3,{icon:2});
return;
}
if(max_children < start_servers){
layer.msg(lan.soft.php_fpm_err4,{icon:2});
return;
}
if(max_children < 1 || start_servers < 1 || min_spare_servers < 1 || max_spare_servers < 1){
layer.msg(lan.soft.php_fpm_err5,{icon:2});
return;
}
var data = 'version='+version+'&max_children='+max_children+'&start_servers='+start_servers+'&min_spare_servers='+min_spare_servers+'&max_spare_servers='+max_spare_servers + '&pm='+pm;
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=setFpmConfig',data,function(rdata){
layer.close(loadT);
var loadT = layer.msg(rdata.msg,{icon:rdata.status?1:2});
}).error(function(){
layer.close(loadT);
layer.msg(lan.public.config_ok,{icon:1});
});
});
return;
}
$.post('/config?action=getFpmConfig','version='+version,function(rdata){
var limitList = "<option value='0'>"+lan.soft.concurrency_m+"</option>"
+"<option value='1' "+(rdata.max_children==30?'selected':'')+">30"+lan.soft.concurrency+"</option>"
+"<option value='2' "+(rdata.max_children==50?'selected':'')+">50"+lan.soft.concurrency+"</option>"
+"<option value='3' "+(rdata.max_children==100?'selected':'')+">100"+lan.soft.concurrency+"</option>"
+"<option value='4' "+(rdata.max_children==200?'selected':'')+">200"+lan.soft.concurrency+"</option>"
+"<option value='5' "+(rdata.max_children==300?'selected':'')+">300"+lan.soft.concurrency+"</option>"
+"<option value='6' "+(rdata.max_children==500?'selected':'')+">500"+lan.soft.concurrency+"</option>"
var pms = [{'name':'static','title':lan.bt.static},{'name':'dynamic','title':lan.bt.dynamic}];
var pmList = '';
for(var i=0;i<pms.length;i++){
pmList += '<option value="'+pms[i].name+'" '+((pms[i].name == rdata.pm)?'selected':'')+'>'+pms[i].title+'</option>';
}
var body="<div class='bingfa'>"
+"<p class='line'><span class='span_tit'>"+lan.soft.concurrency_type+":</span><select class='bt-input-text' name='limit' style='width:100px;'>"+limitList+"</select></p>"
+"<p class='line'><span class='span_tit'>"+lan.soft.php_fpm_model+":</span><select class='bt-input-text' name='pm' style='width:100px;'>"+pmList+"</select><span class='c9'>*"+lan.soft.php_fpm_ps1+"</span></p>"
+"<p class='line'><span class='span_tit'>max_children:</span><input class='bt-input-text' type='number' name='max_children' value='"+rdata.max_children+"' /><span class='c9'>*"+lan.soft.php_fpm_ps2+"</span></p>"
+"<p class='line'><span class='span_tit'>start_servers:</span><input class='bt-input-text' type='number' name='start_servers' value='"+rdata.start_servers+"' /> <span class='c9'>*"+lan.soft.php_fpm_ps3+"</span></p>"
+"<p class='line'><span class='span_tit'>min_spare_servers:</span><input class='bt-input-text' type='number' name='min_spare_servers' value='"+rdata.min_spare_servers+"' /> <span class='c9'>*"+lan.soft.php_fpm_ps4+"</span></p>"
+"<p class='line'><span class='span_tit'>max_spare_servers:</span><input class='bt-input-text' type='number' name='max_spare_servers' value='"+rdata.max_spare_servers+"' /> <span class='c9'>*"+lan.soft.php_fpm_ps5+"</span></p>"
+"<div class='mtb15'><button class='btn btn-success btn-sm' onclick='SetFpmConfig(\""+version+"\",1)'>"+lan.public.save+"</button></div>"
+"</div>"
$(".soft-man-con").html(body);
$("select[name='limit']").change(function(){
var type = $(this).val();
var max_children = rdata.max_children;
var start_servers = rdata.start_servers;
var min_spare_servers = rdata.min_spare_servers;
var max_spare_servers = rdata.max_spare_servers;
switch(type){
case '1':
max_children = 30;
start_servers = 5;
min_spare_servers = 5;
max_spare_servers = 20;
break;
case '2':
max_children = 50;
start_servers = 15;
min_spare_servers = 15;
max_spare_servers = 35;
break;
case '3':
max_children = 100;
start_servers = 20;
min_spare_servers = 20;
max_spare_servers = 70;
break;
case '4':
max_children = 200;
start_servers = 25;
min_spare_servers = 25;
max_spare_servers = 150;
break;
case '5':
max_children = 300;
start_servers = 30;
min_spare_servers = 30;
max_spare_servers = 180;
break;
case '6':
max_children = 500;
start_servers = 35;
min_spare_servers = 35;
max_spare_servers = 250;
break;
}
$("input[name='max_children']").val(max_children);
$("input[name='start_servers']").val(start_servers);
$("input[name='min_spare_servers']").val(min_spare_servers);
$("input[name='max_spare_servers']").val(max_spare_servers);
});
});
}
//phpinfo
function BtPhpinfo(version){
var con = '<button class="btn btn-default btn-sm" onclick="GetPHPInfo(\''+version+'\')">'+lan.soft.phpinfo+'</button>';
$(".soft-man-con").html(con);
}
//获取PHPInfo
function GetPHPInfo(version){
var loadT = layer.msg(lan.soft.get,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/ajax?action=GetPHPInfo&version='+version,function(rdata){
layer.close(loadT);
layer.open({
type: 1,
title: "PHP-"+version+"-PHPINFO",
area: ['70%','90%'],
closeBtn: 2,
shadeClose: true,
content:rdata.replace('a:link {color: #009; text-decoration: none; background-color: #fff;}','').replace('a:link {color: #000099; text-decoration: none; background-color: #ffffff;}','')
});
});
}
//nginx
function nginxSoftMain(name,version){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/system?action=GetConcifInfo',function(rdata){
layer.close(loadT);
nameA = rdata['web'];
var status = name=='nginx'?'<p onclick="GetNginxStatus()">'+lan.soft.nginx_status+'</p>':'';
var menu = '';
if(version != undefined || version !=''){
var menu = '<p onclick="softChangeVer(\''+name+'\',\''+version+'\')">'+lan.soft.nginx_version+'</p>';
}
var waf = ''
if(name == 'nginx'){
waf = '<p onclick="waf()">'+lan.soft.waf_title+'</p>'
}
var logsPath = (name == 'nginx')?'/www/wwwlogs/nginx_error.log':'/www/wwwlogs/error_log';
layer.open({
type: 1,
area: '640px',
title: name+lan.soft.admin,
closeBtn: 2,
shift: 0,
content: '<div class="bt-w-main" style="width:640px;">\
<div class="bt-w-menu">\
<p class="bgw" onclick="service(\''+name+'\','+nameA.status+')">'+lan.soft.web_service+'</p>\
<p onclick="configChange(\''+name+'\')">'+lan.soft.config_edit+'</p>\
'+waf+'\
'+menu+'\
'+status+'\
<p onclick="showLogs(\''+logsPath+'\')">错误日志</p>\
</div>\
<div id="webEdit-con" class="bt-w-con pd15" style="height:555px;overflow:auto">\
<div class="soft-man-con"></div>\
</div>\
</div>'
});
service(name,nameA.status);
$(".bt-w-menu p").click(function(){
//var i = $(this).index();
$(this).addClass("bgw").siblings().removeClass("bgw");
});
});
}
//显示指定日志
function showLogs(logPath){
var loadT = layer.msg(lan.public.the_get,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/ajax?action=GetOpeLogs',{path:logPath},function(rdata){
layer.close(loadT);
if(rdata.msg == '') rdata.msg = '当前没有日志!';
var ebody = '<div class="soft-man-con"><textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+rdata.msg+'</textarea></div>';
$(".soft-man-con").html(ebody);
var ob = document.getElementById('error_log');
ob.scrollTop = ob.scrollHeight;
});
}
//WAF防火墙
function waf(){
var loadT = layer.msg(lan.public.the_get,{icon:16,time:0,shade: [0.3, '#000']});
$.get("/waf?action=GetConfig",function(rdata){
layer.close(loadT);
if(rdata.status == -1){
layer.msg(lan.soft.waf_not,{icon:5,time:5000});
return;
}
var whiteList = ""
for(var i=0;i<rdata.ipWhitelist.length;i++){
if(rdata.ipWhitelist[i] == "") continue;
whiteList += "<tr><td>"+rdata.ipWhitelist[i]+"</td><td><a href=\"javascript:deleteWafKey('ipWhitelist','"+rdata.ipWhitelist[i]+"');\">"+lan.public.del+"</a></td></tr>";
}
var blackList = ""
for(var i=0;i<rdata.ipBlocklist.length;i++){
if(rdata.ipBlocklist[i] == "") continue;
blackList += "<tr><td>"+rdata.ipBlocklist[i]+"</td><td><a href=\"javascript:deleteWafKey('ipBlocklist','"+rdata.ipBlocklist[i]+"');\">"+lan.public.del+"</a></td></tr>";
}
var cc = rdata.CCrate.split('/')
var con = "<div class='wafConf'>\
<div class='wafConf-btn'>\
<span>"+lan.soft.waf_title+"</span><div class='ssh-item'>\
<input class='btswitch btswitch-ios' id='closeWaf' type='checkbox' "+(rdata.status == 1?'checked':'')+">\
<label class='btswitch-btn' for='closeWaf' onclick='CloseWaf()'></label>\
</div>\
<div class='pull-right'>\
<button class='btn btn-default btn-sm' onclick='gzEdit()'>"+lan.soft.waf_edit+"</button>\
<button class='btn btn-default btn-sm' onclick='upLimit()'>"+lan.soft.waf_up_title+"</button>\
</div>\
</div>\
<div class='wafConf_checkbox label-input-group ptb10 relative'>\
<input type='checkbox' id='waf_UrlDeny' "+(rdata['UrlDeny'] == 'on'?'checked':'')+" onclick=\"SetWafConfig('UrlDeny','"+(rdata['UrlDeny'] == 'on'?'off':'on')+"')\" /><label for='waf_UrlDeny'>"+lan.soft.waf_input1+"</label>\
<input type='checkbox' id='waf_CookieMatch' "+(rdata['CookieMatch'] == 'on'?'checked':'')+" onclick=\"SetWafConfig('CookieMatch','"+(rdata['CookieMatch'] == 'on'?'off':'on')+"')\" /><label for='waf_CookieMatch'>"+lan.soft.waf_input2+"</label>\
<input type='checkbox' id='waf_postMatch' "+(rdata['postMatch'] == 'on'?'checked':'')+" onclick=\"SetWafConfig('postMatch','"+(rdata['postMatch'] == 'on'?'off':'on')+"')\" /><label for='waf_postMatch'>"+lan.soft.waf_input3+"</label>\
<input type='checkbox' id='waf_CCDeny' "+(rdata['CCDeny'] == 'on'?'checked':'')+" onclick=\"SetWafConfig('CCDeny','"+(rdata['CCDeny'] == 'on'?'off':'on')+"')\" /><label for='waf_CCDeny'>"+lan.soft.waf_input4+"</label>\
<input type='checkbox' id='waf_attacklog' "+(rdata['attacklog'] == 'on'?'checked':'')+" onclick=\"SetWafConfig('attacklog','"+(rdata['attacklog'] == 'on'?'off':'on')+"')\" /><label for='waf_attacklog'>"+lan.soft.waf_input5+"</label>\
<span class='glyphicon glyphicon-folder-open' style='position: absolute; right: 10px; top: 12px; color: orange;cursor: pointer' onclick='openPath(\"/www/wwwlogs/waf\")'></span>\
</div>\
<div class='wafConf_cc'>\
<span>"+lan.soft.waf_input6+"</span><input id='CCrate_1' class='bt-input-text' type='number' value='" + cc[0] + "' style='width:80px;margin-right:30px'/>\
<span>"+lan.soft.waf_input7+"("+lan.bt.s+")</span><input id='CCrate_2' class='bt-input-text' type='number' value='" + cc[1] + "' style='width:80px;'/>\
<button onclick=\"SetWafConfig('CCrate','')\" class='btn btn-default btn-sm'>"+lan.public.ok+"</button>\
</div>\
<div class='wafConf_ip'>\
<fieldset>\
<legend>"+lan.soft.waf_input8+"</legend>\
<input type='text' id='ipWhitelist_val' class='bt-input-text mr5' placeholder='"+lan.soft.waf_ip+"' style='width:175px;' /><button onclick=\"addWafKey('ipWhitelist')\" class='btn btn-default btn-sm'>"+lan.public.add+"</button>\
<div class='table-overflow'><table class='table table-hover'>"+whiteList+"</table></div>\
</fieldset>\
<fieldset>\
<legend>"+lan.soft.waf_input9+"</legend>\
<input type='text' id='ipBlocklist_val' class='bt-input-text mr5' placeholder='"+lan.soft.waf_ip+"' style='width:175px;' /><button onclick=\"addWafKey('ipBlocklist')\" class='btn btn-default btn-sm'>"+lan.public.add+"</button>\
<div class='table-overflow'><table class='table table-hover'>"+blackList+"</table></div>\
</fieldset>\
</div>\
</div>"
$(".soft-man-con").html(con);
});
}
//上传限制
function upLimit(){
var loadT = layer.msg(lan.public.the_get,{icon:16,time:0,shade: [0.3, '#000']});
$.get("/waf?action=GetConfig",function(rdata){
layer.close(loadT);
var black_fileExt = ''
for(var i=0;i<rdata.black_fileExt.length;i++){
black_fileExt += "<tr><td>"+rdata.black_fileExt[i]+"</td><td><a style='float:right;' href=\"javascript:deleteWafKey('black_fileExt','"+rdata.black_fileExt[i]+"');\">"+lan.public.del+"</a></td></tr>";
}
if($("#blacktable").html() != undefined){
$("#blacktable").html(black_fileExt);
$("#black_fileExt_val").val('');
return;
}
layer.open({
type: 1,
area: '300px',
title: lan.soft.waf_up_title,
closeBtn: 2,
shift: 0,
content:"<div class='dirBinding mlr15'>"
+"<input class='bt-input-text mr5' type='text' placeholder='"+lan.soft.waf_up_from1+"' id='black_fileExt_val' style='height: 28px; border-radius: 3px;width: 219px;margin-top:15px' />"
+"<button class='btn btn-success btn-sm' onclick=\"addWafKey('black_fileExt')\">"+lan.public.add+"</button>"
+"</div>"
+"<div class='divtable' style='margin:15px'><table class='table table-hover' width='100%' style='margin-bottom:0'>"
+"<thead><tr><th>"+lan.soft.waf_up_from2+"</th><th width='100' class='text-right'>"+lan.public.action+"</th></tr></thead>"
+"<tbody id='blacktable'>" + black_fileExt + "</tbody>"
+"</table></div>"
});
});
}
//设置waf状态
function CloseWaf(){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/waf?action=SetStatus','',function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:5});
if(rdata.status) waf();
});
}
//取规则文件
function GetWafFile(name){
OnlineEditFile(0,'/www/server/panel/vhost/wafconf/' + name);
}
//规则编辑
function gzEdit(){
layer.open({
type: 1,
area: '360px',
title: lan.soft.waf_edit,
closeBtn: 2,
shift: 0,
content:"<div class='gzEdit'><button class='btn btn-default btn-sm' onclick=\"GetWafFile('cookie')\">Cookie</button>\
<button class='btn btn-default btn-sm' onclick=\"GetWafFile('post')\">POST</button>\
<button class='btn btn-default btn-sm' onclick=\"GetWafFile('url')\">URL</button>\
<button class='btn btn-default btn-sm' onclick=\"GetWafFile('user-agent')\">User-Agent</button>\
<button class='btn btn-default btn-sm' onclick=\"GetWafFile('args')\">Args</button>\
<button class='btn btn-default btn-sm' onclick=\"GetWafFile('whiteurl')\">"+lan.soft.waf_url_white+"</button>\
<button class='btn btn-default btn-sm' onclick=\"GetWafFile('returnhtml')\">"+lan.soft.waf_index+"</button>\
<button class='btn btn-default btn-sm' onclick=\"updateWaf('returnhtml')\">"+lan.soft.waf_cloud+"</button></div>"
});
}
//更新WAF规则
function updateWaf(){
var loadT = layer.msg(lan.soft.waf_update,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/waf?action=updateWaf','',function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:5});
});
}
//设置WAF配置值
function SetWafConfig(name,value){
if(name == 'CCrate'){
var CCrate_1 = $("#CCrate_1").val();
var CCrate_2 = $("#CCrate_2").val();
if (CCrate_1 < 1 || CCrate_1 > 3000 || CCrate_2 < 1 || CCrate_2 > 1800){
layer.msg(lan.soft.waf_cc_err,{icon:5});
return;
}
value = CCrate_1 + '/' + CCrate_2;
}
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/waf?action=SetConfigString','name='+name+'&value='+value,function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:5});
if(rdata.status) waf();
});
}
//删除WAF指定值
function deleteWafKey(name,value){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/waf?action=SetConfigList&act=del','name='+name+'&value='+value,function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:5});
if(rdata.status) waf();
if(name == 'black_fileExt') upLimit();
});
}
//删除WAF指定值
function addWafKey(name){
var value = $('#'+name+'_val').val();
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/waf?action=SetConfigList&act=add','name='+name+'&value='+value,function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:5});
if(rdata.status) waf();
if(name == 'black_fileExt') upLimit();
});
}
//查看Nginx负载状态
function GetNginxStatus(){
$.post('/ajax?action=GetNginxStatus','',function(rdata){
var con = "<div><table class='table table-hover table-bordered'>\
<tr><th>"+lan.bt.nginx_active+"</th><td>"+rdata.active+"</td></tr>\
<tr><th>"+lan.bt.nginx_accepts+"</th><td>"+rdata.accepts+"</td></tr>\
<tr><th>"+lan.bt.nginx_handled+"</th><td>"+rdata.handled+"</td></tr>\
<tr><th>"+lan.bt.nginx_requests+"</th><td>"+rdata.requests+"</td></tr>\
<tr><th>"+lan.bt.nginx_reading+"</th><td>"+rdata.Reading+"</td></tr>\
<tr><th>"+lan.bt.nginx_writing+"</th><td>"+rdata.Writing+"</td></tr>\
<tr><th>"+lan.bt.nginx_waiting+"</th><td>"+rdata.Waiting+"</td></tr>\
</table></div>";
$(".soft-man-con").html(con);
})
}
//查看PHP负载状态
function GetPHPStatus(version){
$.post('/ajax?action=GetPHPStatus','version='+version,function(rdata){
var con = "<div style='height:420px;overflow:hidden;'><table class='table table-hover table-bordered GetPHPStatus' style='margin:0;padding:0'>\
<tr><th>"+lan.bt.php_pool+"</th><td>"+rdata.pool+"</td></tr>\
<tr><th>"+lan.bt.php_manager+"</th><td>"+((rdata['process manager'] == 'dynamic')?lan.bt.dynamic:lan.bt.static)+"</td></tr>\
<tr><th>"+lan.bt.php_start+"</th><td>"+rdata['start time']+"</td></tr>\
<tr><th>"+lan.bt.php_accepted+"</th><td>"+rdata['accepted conn']+"</td></tr>\
<tr><th>"+lan.bt.php_queue+"</th><td>"+rdata['listen queue']+"</td></tr>\
<tr><th>"+lan.bt.php_max_queue+"</th><td>"+rdata['max listen queue']+"</td></tr>\
<tr><th>"+lan.bt.php_len_queue+"</th><td>"+rdata['listen queue len']+"</td></tr>\
<tr><th>"+lan.bt.php_idle+"</th><td>"+rdata['idle processes']+"</td></tr>\
<tr><th>"+lan.bt.php_active+"</th><td>"+rdata['active processes']+"</td></tr>\
<tr><th>"+lan.bt.php_total+"</th><td>"+rdata['total processes']+"</td></tr>\
<tr><th>"+lan.bt.php_max_active+"</th><td>"+rdata['max active processes']+"</td></tr>\
<tr><th>"+lan.bt.php_max_children+"</th><td>"+rdata['max children reached']+"</td></tr>\
<tr><th>"+lan.bt.php_slow+"</th><td>"+rdata['slow requests']+"</td></tr>\
</table></div>";
$(".soft-man-con").html(con);
$(".GetPHPStatus td,.GetPHPStatus th").css("padding","7px");
})
}
//软件管理窗口
function SoftMan(name,version){
switch(name){
case 'nginx':
nginxSoftMain(name,version);
return;
break;
case 'apache':
nginxSoftMain(name,version);
return;
break;
case 'mysql':
name='mysqld';
break;
}
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/system?action=GetConcifInfo',function(rdata){
layer.close(loadT);
var nameA = rdata[name.replace('mysqld','mysql')];
var menu = '<p onclick="configChange(\''+name+'\')">'+lan.soft.config_edit+'</p><p onclick="softChangeVer(\''+name+'\',\''+version+'\')">'+lan.soft.nginx_version+'</p>';
if(name == "phpmyadmin"){
menu = '<p onclick="phpVer(\''+name+'\',\''+nameA.phpversion+'\')">'+lan.soft.php_version+'</p><p onclick="safeConf(\''+name+'\','+nameA.port+','+nameA.auth+')">'+lan.soft.safe+'</p>';
}
if(version == undefined || version == ''){
var menu = '<p onclick="configChange(\''+name+'\')">'+lan.soft.config_edit+'</p>';
}
if(name == 'mysqld'){
menu += '<p onclick="changeMySQLDataPath()">'+lan.soft.save_path+'</p><p onclick="changeMySQLPort()">'+lan.site.port+'</p><p onclick="mysqlRunStatus()">'+lan.soft.status+'</p><p onclick="mysqlStatus()">'+lan.soft.php_main7+'</p><p onclick="mysqlLog()">'+lan.soft.log+'</p><p onclick="mysqlSlowLog()">慢日志</p>';
}
else if(name == 'memcached'){
menu += '<p onclick="MemcachedStatus()">负载状态</p><p onclick="MemcachedCache()">性能调整</p>';
}
else if(name == 'redis'){
menu += '<p onclick="RedisStatus()">负载状态</p>';
}
else if(name == 'tomcat'){
menu += '<p onclick="showLogs(\'/www/server/tomcat/logs/catalina.out\')">运行日志</p>';
}
layer.open({
type: 1,
area: '640px',
title: name+lan.soft.admin,
closeBtn: 2,
shift: 0,
content: '<div class="bt-w-main" style="width:640px;">\
<div class="bt-w-menu">\
<p class="bgw" onclick="service(\''+name+'\',\''+nameA.status+'\')">'+lan.soft.service+'</p>'
+menu+
'</div>\
<div id="webEdit-con" class="bt-w-con pd15" style="height:555px;overflow:auto">\
<div class="soft-man-con"></div>\
</div>\
</div>'
});
service(name,nameA.status);
$(".bt-w-menu p").click(function(){
//var i = $(this).index();
$(this).addClass("bgw").siblings().removeClass("bgw");
});
});
}
//redis负载状态
function RedisStatus(){
var loadT = layer.msg('正在获取...',{icon:16,time:0,shade:0.3});
$.get('/ajax?action=GetRedisStatus',function(rdata){
layer.close(loadT);
hit = (parseInt(rdata.keyspace_hits) / (parseInt(rdata.keyspace_hits) + parseInt(rdata.keyspace_misses)) * 100).toFixed(2);
var Con = '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 490px;">\
<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\
<tbody>\
<tr><th>uptime_in_days</th><td>'+rdata.uptime_in_days+'</td><td>已运行天数</td></tr>\
<tr><th>tcp_port</th><td>'+rdata.tcp_port+'</td><td>当前监听端口</td></tr>\
<tr><th>connected_clients</th><td>'+rdata.connected_clients+'</td><td>连接的客户端数量</td></tr>\
<tr><th>used_memory_rss</th><td>'+ToSize(rdata.used_memory_rss)+'</td><td>Redis当前占用的系统内存总量</td></tr>\
<tr><th>used_memory</th><td>'+ToSize(rdata.used_memory)+'</td><td>Redis当前已分配的内存总量</td></tr>\
<tr><th>used_memory_peak</th><td>'+ToSize(rdata.used_memory_peak)+'</td><td>Redis历史分配内存的峰值</td></tr>\
<tr><th>mem_fragmentation_ratio</th><td>'+rdata.mem_fragmentation_ratio+'%</td><td>内存碎片比率</td></tr>\
<tr><th>total_connections_received</th><td>'+rdata.total_connections_received+'</td><td>运行以来连接过的客户端的总数量</td></tr>\
<tr><th>total_commands_processed</th><td>'+rdata.total_commands_processed+'</td><td>运行以来执行过的命令的总数量</td></tr>\
<tr><th>instantaneous_ops_per_sec</th><td>'+rdata.instantaneous_ops_per_sec+'</td><td>服务器每秒钟执行的命令数量</td></tr>\
<tr><th>keyspace_hits</th><td>'+rdata.keyspace_hits+'</td><td>查找数据库键成功的次数</td></tr>\
<tr><th>keyspace_misses</th><td>'+rdata.keyspace_misses+'</td><td>查找数据库键失败的次数</td></tr>\
<tr><th>hit</th><td>'+hit+'%</td><td>查找数据库键命中率</td></tr>\
<tr><th>latest_fork_usec</th><td>'+rdata.latest_fork_usec+'</td><td>最近一次 fork() 操作耗费的微秒数</td></tr>\
<tbody>\
</table></div>'
$(".soft-man-con").html(Con);
});
}
//memcached负载状态
function MemcachedStatus(){
var loadT = layer.msg('正在获取...',{icon:16,time:0,shade:0.3});
$.get('/ajax?action=GetMemcachedStatus',function(rdata){
layer.close(loadT);
var Con = '<div class="divtable">\
<table class="table table-hover table-bordered" style="width: 490px;">\
<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\
<tbody>\
<tr><th>BindIP</th><td>'+rdata.bind+'</td><td>监听IP</td></tr>\
<tr><th>PORT</th><td>'+rdata.port+'</td><td>监听端口</td></tr>\
<tr><th>CACHESIZE</th><td>'+rdata.cachesize+' MB</td><td>最大缓存容量</td></tr>\
<tr><th>MAXCONN</th><td>'+rdata.maxconn+'</td><td>最大连接数限制</td></tr>\
<tr><th>curr_connections</th><td>'+rdata.curr_connections+'</td><td>当前打开的连接数</td></tr>\
<tr><th>cmd_get</th><td>'+rdata.cmd_get+'</td><td>GET请求数</td></tr>\
<tr><th>get_hits</th><td>'+rdata.get_hits+'</td><td>GET命中次数</td></tr>\
<tr><th>get_misses</th><td>'+rdata.get_misses+'</td><td>GET失败次数</td></tr>\
<tr><th>hit</th><td>'+rdata.hit.toFixed(2)+'%</td><td>GET命中率</td></tr>\
<tr><th>curr_items</th><td>'+rdata.curr_items+'</td><td>当前被缓存的数据行数</td></tr>\
<tr><th>evictions</th><td>'+rdata.evictions+'</td><td>因内存不足而被清理的缓存行数</td></tr>\
<tr><th>bytes</th><td>'+ToSize(rdata.bytes)+'</td><td>当前已使用内存</td></tr>\
<tr><th>bytes_read</th><td>'+ToSize(rdata.bytes_read)+'</td><td>请求总大小</td></tr>\
<tr><th>bytes_written</th><td>'+ToSize(rdata.bytes_written)+'</td><td>发送总大小</td></tr>\
<tbody>\
</table></div>'
$(".soft-man-con").html(Con);
});
}
//memcached性能调整
function MemcachedCache(){
var loadT = layer.msg('正在获取...',{icon:16,time:0,shade:0.3});
$.get('/ajax?action=GetMemcachedStatus',function(rdata){
layer.close(loadT);
var memCon = '<div class="conf_p" style="margin-bottom:0">\
<p><span>BindIP</span><input style="width: 120px;" class="bt-input-text mr5" name="membind" value="'+rdata.bind+'" type="text" ><font>监听IP,请勿随意修改</font></p>\
<p><span>PORT</span><input style="width: 120px;" class="bt-input-text mr5" max="65535" name="memport" value="'+rdata.port+'" type="number" ><font>监听端口,一般无需修改</font></p>\
<p><span>CACHESIZE</span><input style="width: 120px;" class="bt-input-text mr5" name="memcachesize" value="'+rdata.cachesize+'" type="number" >MB,<font>缓存大小,建议不要大于512M</font></p>\
<p><span>MAXCONN</span><input style="width: 120px;" class="bt-input-text mr5" name="memmaxconn" value="'+rdata.maxconn+'" type="number" ><font>最大连接数,建议不要大于40960</font></p>\
<div style="margin-top:10px; padding-right:230px" class="text-right"><button class="btn btn-success btn-sm" onclick="SetMemcachedConf()">'+lan.public.save+'</button></div>\
</div>'
$(".soft-man-con").html(memCon);
});
}
//memcached提交配置
function SetMemcachedConf(){
var data = {
ip:$("input[name='membind']").val(),
port:$("input[name='memport']").val(),
cachesize:$("input[name='memcachesize']").val(),
maxconn:$("input[name='memmaxconn']").val()
}
if(data.ip.split('.').length < 4){
layer.msg('IP地址格式不正确!',{icon:2});
return;
}
if(data.port < 1 || data.port > 65535){
layer.msg('端口范围不正确!',{icon:2});
return;
}
if(data.cachesize < 8){
layer.msg('缓存值过小',{icon:2});
return;
}
if(data.maxconn < 4){
layer.msg('最大连接数过小',{icon:2});
return;
}
var loadT = layer.msg('正在保存...',{icon:16,time:0,shade:0.3});
$.post('/ajax?action=SetMemcachedCache',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//数据库存储信置
function changeMySQLDataPath(act){
if(act != undefined){
layer.confirm(lan.soft.mysql_to_msg,{closeBtn:2,icon:3},function(){
var datadir = $("#datadir").val();
var data = 'datadir='+datadir;
var loadT = layer.msg(lan.soft.mysql_to_msg1,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/database?action=SetDataDir',data,function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:5});
});
});
return;
}
$.post('/database?action=GetMySQLInfo','',function(rdata){
var LimitCon = '<p class="conf_p">\
<input id="datadir" class="phpUploadLimit bt-input-text mr5" style="width:350px;" type="text" value="'+rdata.datadir+'" name="datadir">\
<span onclick="ChangePath(\'datadir\')" class="glyphicon glyphicon-folder-open cursor mr20" style="width:auto"></span><button class="btn btn-success btn-sm" onclick="changeMySQLDataPath(1)">'+lan.soft.mysql_to+'</button>\
</p>';
$(".soft-man-con").html(LimitCon);
});
}
//MySQL-Slow日志
function mysqlSlowLog(){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/database?action=GetSlowLogs',{},function(logs){
layer.close(loadT);
if(logs.status !== true){
logs.msg = '';
}
if (logs.msg == '') logs.msg = '当前没有慢日志.';
var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+logs.msg+'</textarea>';
$(".soft-man-con").html(phpCon);
var ob = document.getElementById('error_log');
ob.scrollTop = ob.scrollHeight;
});
}
//数据库日志
function mysqlLog(act){
//获取二进制日志相关信息
$.post('/database?action=BinLog',"status=1",function(rdata){
var limitCon = '<p class="conf_p">\
<span class="f14 c6 mr20">'+lan.soft.mysql_log_bin+' </span><span class="f14 c6 mr20">'+ToSize(rdata.msg)+'</span>\
<button class="btn btn-success btn-xs va0" onclick="SetBinLog();">'+(rdata.status?lan.soft.off:lan.soft.on)+'</button>\
<p class="f14 c6 mtb10" style="border-top:#ddd 1px solid; padding:10px 0">'+lan.soft.mysql_log_err+'<button class="btn btn-default btn-xs" style="float:right;" onclick="closeMySqlLog();">'+lan.soft.mysql_log_close+'</button></p>\
<textarea readonly style="margin: 0px;width: 515px;height: 440px;background-color: #333;color:#fff; padding:0 5px" id="error_log"></textarea>\
</p>'
$(".soft-man-con").html(limitCon);
//获取错误日志
$.post('/database?action=GetErrorLog',"",function(error_body){
if(error_body.status === false){
layer.msg(error_body.msg,{icon:5});
error_body = lan.soft.mysql_log_ps1;
}
if(error_body == "") error_body = lan.soft.mysql_log_ps1;
$("#error_log").text(error_body);
var ob = document.getElementById('error_log');
ob.scrollTop = ob.scrollHeight;
});
});
}
//取数据库运行状态
function mysqlRunStatus(){
$.post('/database?action=GetRunStatus',"",function(rdata){
var cache_size = ((parseInt(rdata.Qcache_hits)/(parseInt(rdata.Qcache_hits)+parseInt(rdata.Qcache_inserts)))* 100).toFixed(2) + '%';
if(cache_size == 'NaN%') cache_size = 'OFF';
var Con = '<div class="divtable"><table class="table table-hover table-bordered" style="width: 490px;margin-bottom:10px;background-color:#fafafa">\
<tbody>\
<tr><th>'+lan.soft.mysql_status_title1+'</th><td>'+getLocalTime(rdata.Run)+'</td><th>'+lan.soft.mysql_status_title5+'</th><td>'+parseInt(rdata.Questions/rdata.Uptime)+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title2+'</th><td>'+rdata.Connections+'</td><th>'+lan.soft.mysql_status_title6+'</th><td>'+parseInt((parseInt(rdata.Com_commit) + parseInt(rdata.Com_rollback)) / rdata.Uptime) +'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title3+'</th><td>'+ToSize(rdata.Bytes_sent)+'</td><th>'+lan.soft.mysql_status_title7+'</th><td>'+rdata.File+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title4+'</th><td>'+ToSize(rdata.Bytes_received)+'</td><th>'+lan.soft.mysql_status_title8+'</th><td>'+rdata.Position+'</td></tr>\
</tbody>\
</table>\
<table class="table table-hover table-bordered" style="width: 490px;">\
<thead style="display:none;"><th></th><th></th><th></th><th></th></thead>\
<tbody>\
<tr><th>'+lan.soft.mysql_status_title9+'</th><td>'+rdata.Threads_running+'/'+rdata.Max_used_connections+'</td><td colspan="2">'+lan.soft.mysql_status_ps1+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title10+'</th><td>'+((1-rdata.Threads_created/rdata.Connections)* 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps2+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title11+'</th><td>'+((1-rdata.Key_reads / rdata.Key_read_requests) * 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps3+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title12+'</th><td>'+((1-rdata.Innodb_buffer_pool_reads/rdata.Innodb_buffer_pool_read_requests) * 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps4+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title13+'</th><td>'+cache_size+'</td><td colspan="2">'+lan.soft.mysql_status_ps5+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title14+'</th><td>'+((rdata.Created_tmp_disk_tables/rdata.Created_tmp_tables) * 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps6+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title15+'</th><td>'+rdata.Open_tables+'</td><td colspan="2">'+lan.soft.mysql_status_ps7+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title16+'</th><td>'+rdata.Select_full_join+'</td><td colspan="2">'+lan.soft.mysql_status_ps8+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title17+'</th><td>'+rdata.Select_range_check+'</td><td colspan="2">'+lan.soft.mysql_status_ps9+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title18+'</th><td>'+rdata.Sort_merge_passes+'</td><td colspan="2">'+lan.soft.mysql_status_ps10+'</td></tr>\
<tr><th>'+lan.soft.mysql_status_title19+'</th><td>'+rdata.Table_locks_waited+'</td><td colspan="2">'+lan.soft.mysql_status_ps11+'</td></tr>\
<tbody>\
</table></div>'
$(".soft-man-con").html(Con);
});
}
//数据库配置状态
function mysqlStatus(){
//获取MySQL配置
$.post('/database?action=GetDbStatus',"",function(rdata){
var key_buffer_size = ToSizeM(rdata.mem.key_buffer_size)
var query_cache_size = ToSizeM(rdata.mem.query_cache_size)
var tmp_table_size = ToSizeM(rdata.mem.tmp_table_size)
var innodb_buffer_pool_size = ToSizeM(rdata.mem.innodb_buffer_pool_size)
var innodb_additional_mem_pool_size = ToSizeM(rdata.mem.innodb_additional_mem_pool_size)
var innodb_log_buffer_size = ToSizeM(rdata.mem.innodb_log_buffer_size)
var sort_buffer_size = ToSizeM(rdata.mem.sort_buffer_size)
var read_buffer_size = ToSizeM(rdata.mem.read_buffer_size)
var read_rnd_buffer_size = ToSizeM(rdata.mem.read_rnd_buffer_size)
var join_buffer_size = ToSizeM(rdata.mem.join_buffer_size)
var thread_stack = ToSizeM(rdata.mem.thread_stack)
var binlog_cache_size = ToSizeM(rdata.mem.binlog_cache_size)
var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size
var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size
var memSize = a + rdata.mem.max_connections * b
var memCon = '<div class="conf_p" style="margin-bottom:0">\
<div style="border-bottom:#ccc 1px solid;padding-bottom:10px;margin-bottom:10px"><span><b>'+lan.soft.mysql_set_msg+'</b></span>\
<select class="bt-input-text" name="mysql_set" style="margin-left:-4px">\
<option value="0">'+lan.soft.mysql_set_select+'</option>\
<option value="1">1-2GB</option>\
<option value="2">2-4GB</option>\
<option value="3">4-8GB</option>\
<option value="4">8-16GB</option>\
<option value="5">16-32GB</option>\
</select>\
<span>'+lan.soft.mysql_set_maxmem+': </span><input style="width:70px;background-color:#eee;" class="bt-input-text mr5" name="memSize" type="text" value="'+memSize.toFixed(2)+'" readonly>MB\
</div>\
<p><span>key_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="key_buffer_size" value="'+key_buffer_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_key_buffer_size+'</font></p>\
<p><span>query_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="query_cache_size" value="'+query_cache_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_query_cache_size+'</font></p>\
<p><span>tmp_table_size</span><input style="width: 70px;" class="bt-input-text mr5" name="tmp_table_size" value="'+tmp_table_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_tmp_table_size+'</font></p>\
<p><span>innodb_buffer_pool_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_buffer_pool_size" value="'+innodb_buffer_pool_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_innodb_buffer_pool_size+'</font></p>\
<p><span>innodb_log_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_log_buffer_size" value="'+innodb_log_buffer_size+'" type="number">MB, <font>'+lan.soft.mysql_set_innodb_log_buffer_size+'</font></p>\
<p style="display:none;"><span>innodb_additional_mem_pool_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_additional_mem_pool_size" value="'+innodb_additional_mem_pool_size+'" type="number" >MB</p>\
<p><span>sort_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="sort_buffer_size" value="'+(sort_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_sort_buffer_size+'</font></p>\
<p><span>read_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="read_buffer_size" value="'+(read_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_read_buffer_size+' </font></p>\
<p><span>read_rnd_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="read_rnd_buffer_size" value="'+(read_rnd_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_read_rnd_buffer_size+' </font></p>\
<p><span>join_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="join_buffer_size" value="'+(join_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_join_buffer_size+'</font></p>\
<p><span>thread_stack</span><input style="width: 70px;" class="bt-input-text mr5" name="thread_stack" value="'+(thread_stack * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_thread_stack+'</font></p>\
<p><span>binlog_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="binlog_cache_size" value="'+(binlog_cache_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_binlog_cache_size+'</font></p>\
<p><span>thread_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="thread_cache_size" value="'+rdata.mem.thread_cache_size+'" type="number" ><font> '+lan.soft.mysql_set_thread_cache_size+'</font></p>\
<p><span>table_open_cache</span><input style="width: 70px;" class="bt-input-text mr5" name="table_open_cache" value="'+rdata.mem.table_open_cache+'" type="number" > <font>'+lan.soft.mysql_set_table_open_cache+'</font></p>\
<p><span>max_connections</span><input style="width: 70px;" class="bt-input-text mr5" name="max_connections" value="'+rdata.mem.max_connections+'" type="number" ><font> '+lan.soft.mysql_set_max_connections+'</font></p>\
<div style="margin-top:10px; padding-right:15px" class="text-right"><button class="btn btn-success btn-sm mr5" onclick="ReBootMySqld()">'+lan.soft.mysql_set_restart+'</button><button class="btn btn-success btn-sm" onclick="SetMySQLConf()">'+lan.public.save+'</button></div>\
</div>'
$(".soft-man-con").html(memCon);
$(".conf_p input[name*='size'],.conf_p input[name='max_connections'],.conf_p input[name='thread_stack']").change(function(){
ComMySqlMem();
});
$(".conf_p select[name='mysql_set']").change(function(){
MySQLMemOpt($(this).val());
ComMySqlMem();
});
});
}
//重启MySQL
function ReBootMySqld(){
var loadT = layer.msg(lan.get('service_the',[lan.bt.restart,'MySQLd']),{icon:16,time:0,shade:0.3});
$.post('/system?action=ServiceAdmin','name=mysqld&type=restart',function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//计算MySQL内存开销
function ComMySqlMem(){
var key_buffer_size = parseInt($("input[name='key_buffer_size']").val());
var query_cache_size = parseInt($("input[name='query_cache_size']").val());
var tmp_table_size = parseInt($("input[name='tmp_table_size']").val());
var innodb_buffer_pool_size = parseInt($("input[name='innodb_buffer_pool_size']").val());
var innodb_additional_mem_pool_size = parseInt($("input[name='innodb_additional_mem_pool_size']").val());
var innodb_log_buffer_size = parseInt($("input[name='innodb_log_buffer_size']").val());
var sort_buffer_size = $("input[name='sort_buffer_size']").val() / 1024;
var read_buffer_size = $("input[name='read_buffer_size']").val() / 1024;
var read_rnd_buffer_size = $("input[name='read_rnd_buffer_size']").val() / 1024;
var join_buffer_size = $("input[name='join_buffer_size']").val() / 1024;
var thread_stack = $("input[name='thread_stack']").val() / 1024;
var binlog_cache_size = $("input[name='binlog_cache_size']").val() / 1024;
var max_connections = $("input[name='max_connections']").val();
var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size
var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size
var memSize = a + max_connections * b
$("input[name='memSize']").val(memSize.toFixed(2));
}
//MySQL内存优化方案
function MySQLMemOpt(opt){
var query_size = parseInt($("input[name='query_cache_size']").val());
switch(opt){
case '1':
$("input[name='key_buffer_size']").val(128);
if(query_size) $("input[name='query_cache_size']").val(64);
$("input[name='tmp_table_size']").val(64);
$("input[name='innodb_buffer_pool_size']").val(256);
$("input[name='sort_buffer_size']").val(768);
$("input[name='read_buffer_size']").val(768);
$("input[name='read_rnd_buffer_size']").val(512);
$("input[name='join_buffer_size']").val(1024);
$("input[name='thread_stack']").val(256);
$("input[name='binlog_cache_size']").val(64);
$("input[name='thread_cache_size']").val(64);
$("input[name='table_open_cache']").val(128);
$("input[name='max_connections']").val(100);
break;
case '2':
$("input[name='key_buffer_size']").val(256);
if(query_size) $("input[name='query_cache_size']").val(128);
$("input[name='tmp_table_size']").val(384);
$("input[name='innodb_buffer_pool_size']").val(384);
$("input[name='sort_buffer_size']").val(768);
$("input[name='read_buffer_size']").val(768);
$("input[name='read_rnd_buffer_size']").val(512);
$("input[name='join_buffer_size']").val(2048);
$("input[name='thread_stack']").val(256);
$("input[name='binlog_cache_size']").val(64);
$("input[name='thread_cache_size']").val(96);
$("input[name='table_open_cache']").val(192);
$("input[name='max_connections']").val(200);
break;
case '3':
$("input[name='key_buffer_size']").val(384);
if(query_size) $("input[name='query_cache_size']").val(192);
$("input[name='tmp_table_size']").val(512);
$("input[name='innodb_buffer_pool_size']").val(512);
$("input[name='sort_buffer_size']").val(1024);
$("input[name='read_buffer_size']").val(1024);
$("input[name='read_rnd_buffer_size']").val(768);
$("input[name='join_buffer_size']").val(2048);
$("input[name='thread_stack']").val(256);
$("input[name='binlog_cache_size']").val(128);
$("input[name='thread_cache_size']").val(128);
$("input[name='table_open_cache']").val(384);
$("input[name='max_connections']").val(300);
break;
case '4':
$("input[name='key_buffer_size']").val(512);
if(query_size) $("input[name='query_cache_size']").val(256);
$("input[name='tmp_table_size']").val(1024);
$("input[name='innodb_buffer_pool_size']").val(1024);
$("input[name='sort_buffer_size']").val(2048);
$("input[name='read_buffer_size']").val(2048);
$("input[name='read_rnd_buffer_size']").val(1024);
$("input[name='join_buffer_size']").val(4096);
$("input[name='thread_stack']").val(384);
$("input[name='binlog_cache_size']").val(192);
$("input[name='thread_cache_size']").val(192);
$("input[name='table_open_cache']").val(1024);
$("input[name='max_connections']").val(400);
break;
case '5':
$("input[name='key_buffer_size']").val(1024);
if(query_size) $("input[name='query_cache_size']").val(384);
$("input[name='tmp_table_size']").val(2048);
$("input[name='innodb_buffer_pool_size']").val(4096);
$("input[name='sort_buffer_size']").val(4096);
$("input[name='read_buffer_size']").val(4096);
$("input[name='read_rnd_buffer_size']").val(2048);
$("input[name='join_buffer_size']").val(8192);
$("input[name='thread_stack']").val(512);
$("input[name='binlog_cache_size']").val(256);
$("input[name='thread_cache_size']").val(256);
$("input[name='table_open_cache']").val(2048);
$("input[name='max_connections']").val(500);
break;
}
}
//设置MySQL配置参数
function SetMySQLConf(){
$.post('/system?action=GetMemInfo','',function(memInfo){
//var memSize = memInfo['memTotal'];
//var setSize = parseInt($("input[name='memSize']").val());
//if(memSize < setSize){
// var msg = lan.soft.mysql_set_err.replace('{1}',memSize).replace('{2}',setSize);
// layer.msg(msg,{icon:2,time:5000});
// return;
//}
var query_cache_size = parseInt($("input[name='query_cache_size']").val());
var query_cache_type = 0;
if(query_cache_size > 0){
query_cache_type = 1;
}
var data = {
key_buffer_size:parseInt($("input[name='key_buffer_size']").val()),
query_cache_size:query_cache_size,
query_cache_type:query_cache_type,
tmp_table_size:parseInt($("input[name='tmp_table_size']").val()),
max_heap_table_size:parseInt($("input[name='tmp_table_size']").val()),
innodb_buffer_pool_size:parseInt($("input[name='innodb_buffer_pool_size']").val()),
innodb_log_buffer_size:parseInt($("input[name='innodb_log_buffer_size']").val()),
sort_buffer_size:parseInt($("input[name='sort_buffer_size']").val()),
read_buffer_size:parseInt($("input[name='read_buffer_size']").val()),
read_rnd_buffer_size:parseInt($("input[name='read_rnd_buffer_size']").val()),
join_buffer_size:parseInt($("input[name='join_buffer_size']").val()),
thread_stack:parseInt($("input[name='thread_stack']").val()),
binlog_cache_size:parseInt($("input[name='binlog_cache_size']").val()),
thread_cache_size:parseInt($("input[name='thread_cache_size']").val()),
table_open_cache:parseInt($("input[name='table_open_cache']").val()),
max_connections:parseInt($("input[name='max_connections']").val())
};
$.post('/database?action=SetDbConf',data,function(rdata){
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
})
}
//转换单们到MB
function ToSizeM(byteLen){
var a = parseInt(byteLen) / 1024 /1024;
return a || 0;
}
//设置二进制日志
function SetBinLog(){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade:0.3});
$.post('/database?action=BinLog',"",function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:5});
mysqlLog();
});
}
//清空日志
function closeMySqlLog(){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade:0.3});
$.post('/database?action=GetErrorLog',"close=1",function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:5});
mysqlLog();
});
}
//数据库端口
function changeMySQLPort(act){
if(act != undefined){
layer.confirm(lan.soft.mysql_port_title,{closeBtn:2,icon:3},function(){
var port = $("#dataport").val();
var data = 'port='+port;
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/database?action=SetMySQLPort',data,function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:5});
});
});
return;
}
$.post('/database?action=GetMySQLInfo','',function(rdata){
var LimitCon = '<p class="conf_p">\
<input id="dataport" class="phpUploadLimit bt-input-text mr20" type="number" value="'+rdata.port+'" name="dataport">\
<button style="margin-top: -1px;" class="btn btn-success btn-sm" onclick="changeMySQLPort(1)">'+lan.public.edit+'</button>\
</p>';
$(".soft-man-con").html(LimitCon);
});
}
//软件切换版本
function softChangeVer(name,version){
if(name == "mysqld") name = "mysql";
var veropt = version.split("|");
var SelectVersion = '';
for(var i=0; i<veropt.length; i++){
SelectVersion += '<option>'+name+' '+veropt[i]+'</option>';
}
var body = "<div class='ver line'><span class='tname'>"+lan.soft.select_version+"</span><select id='selectVer' class='bt-input-text mr20' name='phpVersion' style='width:160px'>";
body += SelectVersion+'</select><button class="btn btn-success btn-sm">'+lan.soft.version_to+'</button></div>';
if(name == 'mysql'){
body += "<ul class='help-info-text c7 ptb15'><li style='color:red;'>"+lan.soft.mysql_f+"</li></ul>"
}
$(".soft-man-con").html(body);
$(".btn-success").click(function(){
var ver = $("#selectVer").val();
oneInstall(name,ver.split(" ")[1]);
});
selectChange();
}
//phpmyadmin切换php版本
function phpVer(name,version){
$.post('/site?action=GetPHPVersion',function(rdata){
var body = "<div class='ver line'><span class='tname'>"+lan.soft.php_version+"</span><select id='get' class='bt-input-text mr20' name='phpVersion' style='width:110px'>";
var optionSelect = '';
for(var i=0;i<rdata.length;i++){
optionSelect = rdata[i].version == version?'selected':'';
body += "<option value='"+ rdata[i].version +"' "+ optionSelect +">"+ rdata[i].name +"</option>"
}
body += '</select><button class="btn btn-success btn-sm" onclick="phpVerChange(\'phpversion\',\'get\')">'+lan.public.save+'</button></div>';
$(".soft-man-con").html(body);
})
}
function phpVerChange(type,msg){
var data = type + '=' + $("#" + msg).val();
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/ajax?action=setPHPMyAdmin',data,function(rdata){
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status){
setTimeout(function(){
window.location.reload();
},3000);
}
})
}
//phpmyadmin安全设置
function safeConf(name,port,auth){
var con = '<div class="ver line">\
<span style="margin-right:10px">'+lan.soft.pma_port+'</span>\
<input class="bt-input-text phpmyadmindk mr20" name="Name" id="pmport" value="'+port+'" placeholder="'+lan.soft.pma_port_title+'" maxlength="5" type="number">\
<button class="btn btn-success btn-sm" onclick="phpmyadminport()">'+lan.public.save+'</button>\
</div>\
<div class="user_pw_tit">\
<span class="tit">'+lan.soft.pma_pass+'</span>\
<span class="btswitch-p"><input class="btswitch btswitch-ios" id="phpmyadminsafe" type="checkbox" '+(auth?'checked':'')+'>\
<label class="btswitch-btn phpmyadmin-btn" for="phpmyadminsafe" onclick="phpmyadminSafe()"></label>\
</span>\
</div>\
<div class="user_pw">\
<p><span>'+lan.soft.pma_user+'</span><input id="username_get" class="bt-input-text" name="username_get" value="" type="text" placeholder="'+lan.soft.edit_empty+'"></p>\
<p><span>'+lan.soft.pma_pass1+'</span><input id="password_get_1" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="'+lan.soft.edit_empty+'"></p>\
<p><span>'+lan.soft.pma_pass2+'</span><input id="password_get_2" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="'+lan.soft.edit_empty+'"></p>\
<p><button class="btn btn-success btn-sm" onclick="phpmyadmin(\'get\')">'+lan.public.save+'</button></p>\
</div>\
<ul class="help-info-text c7"><li>'+lan.soft.pma_ps+'</li></ul>';
$(".soft-man-con").html(con);
if(auth){
$(".user_pw").show();
}
}
//修改phpmyadmin端口
function phpmyadminport(){
var pmport = $("#pmport").val();
if(pmport < 80 || pmport > 65535){
layer.msg(lan.firewall.port_err,{icon:2});
return;
}
var data = 'port=' + pmport;
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/ajax?action=setPHPMyAdmin',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//phpmyadmin二级密码
function phpmyadminSafe(){
var stat = $("#phpmyadminsafe").prop("checked");
if(stat) {
$(".user_pw").hide();
phpmyadmin('close');
}else{
$(".user_pw").show();
}
}
//设置phpmyadmin二级密码
function phpmyadmin(msg){
type = 'password';
if(msg == 'close'){
password_1 = msg;
username = msg;
layer.confirm(lan.soft.pma_pass_close,{closeBtn:2,icon:3},function(){
var data = type + '=' + msg + '&siteName=phpmyadmin';
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/ajax?action=setPHPMyAdmin',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
});
return;
}else{
username = $("#username_get").val()
password_1 = $("#password_get_1").val()
password_2 = $("#password_get_2").val()
if(username.length < 1 || password_1.length < 1){
layer.msg(lan.soft.pma_pass_empty,{icon:2});
return;
}
if(password_1 != password_2){
layer.msg(lan.bt.pass_err_re,{icon:2});
return;
}
}
msg = password_1 + '&username='+username + '&siteName=phpmyadmin';
var data = type + '=' + msg;
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/ajax?action=setPHPMyAdmin',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//首页软件列表
function indexsoft(){
var loadT = layer.msg(lan.soft.get_list,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/plugin?action=getPluginList','display=1',function(rdata){
layer.close(loadT);
var con = '';
for(var i=0;i<rdata['data'].length - 1;i++){
var len = rdata.data[i].versions.length;
var version_info = '';
for(var j=0;j<len;j++){
if(rdata.data[i].versions[j].status) continue;
version_info += rdata.data[i].versions[j].version + '|';
}
if(version_info != ''){
version_info = version_info.substring(0,version_info.length-1);
}
if(rdata.data[i].display){
var isDisplay = false;
if(rdata.data[i].name != 'php'){
for(var n=0; n<len; n++){
if(rdata.data[i].versions[n].status == true){
isDisplay = true;
var version = rdata.data[i].versions[n].version;
if(rdata.data[i].versions[n].run == true){
state='<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
}
else{
state='<span style="color:red" class="glyphicon glyphicon-pause"></span>'
}
}
}
if(isDisplay){
var clickName = 'SoftMan';
if(rdata.data[i].tip == 'lib'){
clickName = 'PluginMan';
version_info = rdata.data[i].title;
}
con += '<div class="col-sm-3 col-md-3 col-lg-3" data-id="'+rdata.data[i].pid+'">\
<span class="spanmove"></span>\
<div onclick="' + clickName + '(\''+rdata.data[i].name+'\',\''+version_info+'\')">\
<div class="image"><img src="/static/img/soft_ico/ico-'+rdata.data[i].name+'.png"></div>\
<div class="sname">'+rdata.data[i].title+' '+version+state+'</div>\
</div>\
</div>'
}
}
else{
for(var n=0; n<len; n++){
if(rdata.data[i].versions[n].status == true){
var version = rdata.data[i].versions[n].version;
if(rdata.data[i].versions[n].run == true){
state='<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
}
else{
state='<span style="color:red" class="glyphicon glyphicon-pause"></span>'
}
}
if(rdata.data[i].versions[n].display == true ){
con += '<div class="col-sm-3 col-md-3 col-lg-3" data-id="'+rdata.data[i].pid+'">\
<span class="spanmove"></span>\
<div onclick="phpSoftMain(\''+rdata.data[i].versions[n].version+'\','+n+')">\
<div class="image"><img src="/static/img/soft_ico/ico-'+rdata.data[i].name+'.png"></div>\
<div class="sname">'+rdata.data[i].title+' '+rdata.data[i].versions[n].version+state+'</div>\
</div>\
</div>'
}
}
}
}
}
$("#indexsoft").html(con);
//软件位置移动
var softboxlen = $("#indexsoft > div").length;
var softboxsum = 12;
var softboxcon = '';
var softboxn =softboxlen;
if(softboxlen <= softboxsum){
for(var i=0;i<softboxsum-softboxlen;i++){
softboxn +=1000;
softboxcon +='<div class="col-sm-3 col-md-3 col-lg-3 no-bg" data-id="'+softboxn+'"></div>'
}
$("#indexsoft").append(softboxcon);
}
$("#indexsoft").dragsort({ dragSelector: ".spanmove", dragBetween: true, dragEnd: saveOrder, placeHolderTemplate: "<div class='col-sm-3 col-md-3 col-lg-3 dashed-border'></div>" });
function saveOrder() {
var data = $("#indexsoft > div").map(function() { return $(this).attr("data-id"); }).get();
var ssort = data.join("|");
$("input[name=list1SortOrder]").val(ssort);
$.post("/plugin?action=savePluginSort",'ssort=' + ssort,function(rdata){});
};
});
}
//插件设置菜单
function PluginMan(name,title){
loadT = layer.msg(lan.soft.menu_temp,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/plugin?action=getConfigHtml&name=' + name,function(rhtml){
layer.close(loadT);
if(rhtml.status === false){
if(name == "phpguard"){
layer.msg(lan.soft.menu_phpsafe,{icon:1})
}
else{
layer.msg(rhtml.msg,{icon:2});
}
return;
}
layer.open({
type: 1,
shift: 5,
offset: '20%',
closeBtn: 2,
area: '700px',
title: ''+ title,
content: rhtml
});
rcode = rhtml.split('<script type="javascript/text">')[1]
if(!rcode) rcode = rhtml.split('<script type="text/javascript">')[1]
rcode = rcode.replace('</script>','');
setTimeout(function(){
if(!!(window.attachEvent && !window.opera)){
execScript(rcode);
}else{
window.eval(rcode);
}
},200)
});
}
//设置插件
function SetPluginConfig(name,param,def){
if(def == undefined) def = 'SetConfig';
loadT = layer.msg(lan.config.config_save,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/plugin?action=a&name='+name+'&s=' + def,param,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//取七牛文件列表
function GetFileList(name){
var loadT = layer.msg(lan.soft.qiniu_lise,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/ajax?action=GetQiniuFileList&name='+name,function(rdata){
layer.close(loadT);
if(rdata.status === false){
layer.msg(rdata.msg,{icon:2});
return;
}
var tBody = ''
for(var i=0;i<rdata.length;i++){
tBody += "<tr>\
<td>"+rdata[i].key+"</td>\
<td>"+rdata[i].mimeType+"</td>\
<td>"+ToSize(rdata[i].fsize)+"</td>\
<td>"+getLocalTime(rdata[i].putTime)+"</td>\
</tr>"
}
layer.open({
type: 1,
skin: 'demo-class',
area: '700px',
title: lan.soft.qiniu_file_title,
closeBtn: 2,
shift: 0,
content: "<div class='divtable' style='margin:17px'>\
<table width='100%' class='table table-hover'>\
<thead>\
<tr>\
<th>"+lan.soft.qiniu_th1+"</th>\
<th>"+lan.soft.qiniu_th2+"</th>\
<th>"+lan.soft.qiniu_th3+"</th>\
<th>"+lan.soft.qiniu_th4+"</th>\
</tr>\
</thead>\
<tbody class='list-list'>"+tBody+"</tbody>\
</table>\
</div>"
});
});
}
//取软件列表
function GetSList(isdisplay){
if(isdisplay !== true){
var loadT = layer.msg(lan.soft.get_list,{icon:16,time:0,shade: [0.3, '#000']})
}
if(!isdisplay || isdisplay === true)
isdisplay = getCookie('p'+getCookie('softType'));
if(isdisplay == true || isdisplay == 'true') isdisplay = 1;
var search = $("#SearchValue").val();
if(search != ''){
search = '&search=' + search;
}
var type = '';
var istype = getCookie('softType');
if(istype == 'undefined' || istype == 'null' || !istype) {
istype = '0';
}
type = '&type='+istype;
var page = '';
if(isdisplay){
page = '&p='+isdisplay;
setCookie('p'+getCookie('softType'),isdisplay);
}
$.post('/plugin?action=getPluginList&tojs=GetSList'+search+type+page,'',function(rdata){
layer.close(loadT);
var tBody = '';
var sBody = '';
var pBody = '';
for(var i=0;i<rdata.type.length;i++){
var c = '';
if(istype == rdata.type[i].type){
c = 'class="on"';
}
tBody += '<span typeid="'+rdata.type[i].type+'" '+c+'>'+rdata.type[i].title+'</span>';
}
$(".softtype").html(tBody);
$("#softPage").html(rdata.page);
$("#softPage .Pcount").css({"position":"absolute","left":"0"})
$(".task").text(rdata.data[rdata.length - 1]);
for(var i=0;i<rdata.data.length - 1;i++){
var len = rdata.data[i].versions.length;
var version_info = '';
var version = '';
var softPath ='';
var titleClick = '';
var state = '';
var indexshow = '';
var checked = '';
checked = rdata.data[i].display? 'checked':'';
for(var j=0;j<len;j++){
if(rdata.data[i].versions[j].status) continue;
version_info += rdata.data[i].versions[j].version + '|';
}
if(version_info != ''){
version_info = version_info.substring(0,version_info.length-1);
}
var handle = '<a class="btlink" onclick="AddVersion(\''+rdata.data[i].name+'\',\''+version_info+'\',\''+rdata.data[i].tip+'\',this,\''+rdata.data[i].title+'\')">'+lan.soft.install+'</a>';
var isSetup = false;
if(rdata.data[i].name != 'php'){
for(var n=0; n<len; n++){
if(rdata.data[i].versions[n].status == true){
isSetup = true;
if(rdata.data[i].tip == 'lib'){
var mupdate = (rdata.data[i].versions[n].no == rdata.data[i].versions[n].version)? '': '<a class="btlink" onclick="SoftUpdate(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\',\''+rdata.data[i].versions[n].version+'\')">更新</a> | ';
handle = mupdate + '<a class="btlink" onclick="PluginMan(\''+rdata.data[i].name+'\',\''+rdata.data[i].title+'\')">'+lan.soft.setup+'</a> | <a class="btlink" onclick="UninstallVersion(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\',\''+rdata.data[i].title+'\')">'+lan.soft.uninstall+'</a>';
titleClick = 'onclick="PluginMan(\''+rdata.data[i].name+'\',\''+rdata.data[i].title+'\')" style="cursor:pointer"';
}else{
var mupdate = (rdata.data[i].versions[n].no == rdata.data[i].update[n])? '': '<a class="btlink" onclick="SoftUpdate(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\',\''+rdata.data[i].update[n]+'\')">更新</a> | ';
if(rdata.data[i].versions[n].no == '') mupdate = '';
handle = mupdate + '<a class="btlink" onclick="SoftMan(\''+rdata.data[i].name+'\',\''+version_info+'\')">'+lan.soft.setup+'</a> | <a class="btlink" onclick="UninstallVersion(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\',\''+rdata.data[i].title+'\')">'+lan.soft.uninstall+'</a>';
titleClick = 'onclick="SoftMan(\''+rdata.data[i].name+'\',\''+version_info+'\')" style="cursor:pointer"';
}
version = rdata.data[i].versions[n].version;
softPath = '<span class="glyphicon glyphicon-folder-open" title="'+rdata.data[i].path+'" onclick="openPath(\''+rdata.data[i].path+'\')"></span>';
indexshow = '<div class="index-item"><input class="btswitch btswitch-ios" id="index_'+rdata.data[i].name+'" type="checkbox" '+checked+'><label class="btswitch-btn" for="index_'+rdata.data[i].name+'" onclick="toIndexDisplay(\''+rdata.data[i].name+'\',\''+version+'\')"></label></div>';
if(rdata.data[i].versions[n].run == true){
state='<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
}
else{
state='<span style="color:red" class="glyphicon glyphicon-pause"></span>'
}
}
var isTask = rdata.data[i].versions[n].task;
if(isTask == '-1'){
handle = '<a style="color:green;" href="javascript:task();">'+lan.soft.the_install+'</a>'
}else if(isTask == '0'){
handle = '<a style="color:#C0C0C0;" href="javascript:task();">'+lan.soft.sleep_install+'</a>'
}
}
var enddate = '<td class="c9 text-center">'+rdata.data[i].end+'</td>';
if(rdata.data[i].price > 0){
var price = '<td class="text-center" style="color:#fc6d26">¥'+rdata.data[i].price+'</td>';
var uninstall = ''
if(isSetup){
uninstall = ' | <a class="btlink" onclick="UninstallVersion(\''+rdata.data[i].name+'\',\'1.0\',\''+rdata.data[i].title+'\')">'+lan.soft.uninstall+'</a>'
}
if(rdata.data[i].end == '未开通' || rdata.data[i].end == '已到期' || rdata.data[i].end == '待支付'){
handle = '<a class="btlink" onclick="Renewinstall(\''+rdata.data[i].title+'\',\''+rdata.data[i].product_id+'\')">立即购买</a>' + uninstall
titleClick = 'onclick="Renewinstall(\''+rdata.data[i].title+'\',\''+rdata.data[i].product_id+'\')" style="cursor:pointer"';
if(rdata.data[i].end == '已到期') {
handle = '<a class="btlink" onclick="Renewinstall(\''+rdata.data[i].title+'\',\''+rdata.data[i].product_id+'\',1)">立即续费</a>' + uninstall
}
enddate = '<td class="c9 text-center">'+rdata.data[i].end+'&nbsp;&nbsp;<span class="glyphicon glyphicon-repeat cursor" onclick="FPStatus()" title="刷新状态"></span></td>';
}
if(rdata.data[i].end.indexOf('20') != -1 || rdata.data[i].end == '已到期') enddate = '<td class="c9 text-center">'+rdata.data[i].end+'<a class="btlink" onclick="Renewinstall(\''+rdata.data[i].title+'\',\''+rdata.data[i].product_id+'\',1)"> (续费)</a></td>';
}else{
var price = '<td class="c9 text-center">免费</td>';
}
sBody += '<tr>'
+'<td><span '+titleClick+'><img src="/static/img/soft_ico/ico-'+rdata.data[i].name+'.png">'+rdata.data[i].title+' '+version+'</span></td>'
//+'<td>'+rdata.data[i].versions[0].no+'</td>'
//+'<td>'+rdata.data[i].type+'</td>'
+'<td>'+rdata.data[i].ps+'</td>'
+price
+enddate
+'<td>'+softPath+'</td>'
+'<td>'+state+'</td>'
+'<td>'+indexshow+'</td>'
+'<td style="text-align: right;">'+handle+'</td>'
+'</tr>'
}
else{
var pnum = 0;
for(var n=0; n<len; n++){
if(rdata.data[i].versions[n].status == true){
checked = rdata.data[i].versions[n]['display'] ? "checked":"";
var mupdate = (rdata.data[i].versions[n].no == rdata.data[i].update[n])? '': '<a class="btlink" onclick="SoftUpdate(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\',\''+rdata.data[i].update[n]+'\')">更新</a> | ';
handle = mupdate + '<a class="btlink" onclick="phpSoftMain(\''+rdata.data[i].versions[n].version+'\','+n+')">'+lan.soft.setup+'</a> | <a class="btlink" onclick="UninstallVersion(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\',\''+rdata.data[i].title+'\')">'+lan.soft.uninstall+'</a>';
softPath = '<span class="glyphicon glyphicon-folder-open" title="'+rdata.data[i].path+'" onclick="openPath(\''+rdata.data[i].path+"/"+rdata.data[i].versions[n].version.replace(/\./,"")+'\')"></span>';
titleClick = 'onclick="phpSoftMain(\''+rdata.data[i].versions[n].version+'\','+n+')" style="cursor:pointer"';
indexshow = '<div class="index-item"><input class="btswitch btswitch-ios" id="index_'+rdata.data[i].name+rdata.data[i].versions[n].version.replace(/\./,"")+'" type="checkbox" '+checked+'><label class="btswitch-btn" for="index_'+rdata.data[i].name+rdata.data[i].versions[n].version.replace(/\./,"")+'" onclick="toIndexDisplay(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\')"></label></div>';
if(rdata.data[i].versions[n].run == true){
state='<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
}
else{
state='<span style="color:red" class="glyphicon glyphicon-pause"></span>'
}
}
else{
handle = '<a class="btlink" onclick="oneInstall(\''+rdata.data[i].name+'\',\''+rdata.data[i].versions[n].version+'\')">'+lan.soft.install+'</a>';
softPath ='';
checked = '';
indexshow = '';
titleClick ='';
state = '';
}
var pps = rdata.data[i].ps;
if(rdata.data[i].apache == '2.2' && rdata.data[i].versions[n].fpm == true){
pps += "<a style='color:red;'>, "+lan.soft.apache22+"</a>";
}
if(rdata.data[i].apache == '2.2' && rdata.data[i].versions[n].fpm == false) pnum++;
if(rdata.data[i].apache != '2.2' && rdata.data[i].versions[n].fpm == false){
pps += "<a style='color:red;'>, "+lan.soft.apache24+"</a>";
}
var isTask = rdata.data[i].versions[n].task;
if(isTask == '-1'){
if(rdata.data[i].apache == '2.2') pnum++;
handle = '<a style="color:green;" href="javascript:task();">'+lan.soft.the_install+'</a>'
}else if(isTask == '0'){
if(rdata.data[i].apache == '2.2') pnum++;
handle = '<a style="color:#C0C0C0;" href="javascript:task();">'+lan.soft.sleep_install+'</a>'
}
pBody += '<tr>'
+'<td><span '+titleClick+'><img src="/static/img/soft_ico/ico-'+rdata.data[i].name+'.png">'+rdata.data[i].title+'-'+rdata.data[i].versions[n].version+'</span></td>'
//+'<td>'+rdata.data[i].versions[n].no+'</td>'
//+'<td>'+rdata.data[i].type+'</td>'
+'<td>'+pps+'</td>'
+'<td class="c9 text-center">免费</td>'
+'<td class="c9 text-center">--</td>'
+'<td>'+softPath+'</td>'
+'<td>'+state+'</td>'
+'<td>'+indexshow+'</td>'
+'<td style="text-align: right;">'+handle+'</td>'
+'</tr>'
}
if(pnum > 0){
setCookie('apacheVersion','2.2');
setCookie('phpVersion',1);
}else{
setCookie('apacheVersion','');
setCookie('phpVersion',0);
}
}
}
sBody += pBody;
$("#softList").html(sBody);
$(".menu-sub span").click(function(){
setCookie('softType',$(this).attr('typeid'));
$(this).addClass("on").siblings().removeClass("on");
GetSList();
})
})
}
//刷新状态
function FPStatus(){
$.get("/auth?action=flush_pay_status",function(res){
layer.msg(res.msg,{icon:res.status?"1":"2"})
})
}
//更新
function SoftUpdate(name,version,update){
var msg = "<li>建议您在服务器负载闲时进行软件更新.</li>";
if(name == 'mysql') msg = "<ul style='color:red;'><li>更新数据库有风险,建议在更新前,先备份您的数据库.</li><li>如果您的是云服务器,强烈建议您在更新前做一个快照.</li><li>建议您在服务器负载闲时进行软件更新.</li></ul>";
SafeMessage('更新['+name+']','更新过程可能会导致服务中断,您真的现在就将['+name+']更新到['+update+']吗?',function(){
var data = "name="+name+"&version="+version+"&type=0&upgrade=" + update;
var loadT = layer.msg('正在更新['+name+'-'+version+'],请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/plugin?action=install', data, function(rdata) {
if(rdata.status){
GetTaskCount();
layer.msg('已添加到任务列表,请稍候...',{icon:1});
}else{
layer.msg('更新失败!',{icon:2});
}
layer.close(loadT);
});
},msg);
}
//续费
function Renewinstall(pluginName,pid,an){
if(an === undefined){
var txt = "开通";
}
else{
var txt = "续费";
}
var payhtml = '<div class="libPay" style="padding:15px 30px 30px 30px">\
<div class="libPay-item f14 plr15 libPay-select">\
<div class="li-tit c3">类型</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">1款插件</span></li>\
<li><span class="item-name">升级为专业版</span><span class="item-info f12 pull-right c7">所有插件免费使用</span></li>\
</ul>\
<p class="pro-info" style="position:absolute;top:151px;left:42px;color: #FF7301;font-size: 12px;display:none">(专业版过期了需要续费后才能登陆使用或者进SSH执行免费版升级命令来切换成免费版)</p>\
</div>\
</div>\
<div class="libpay-con">\
</div>\
</div>';
layer.open({
type: 1,
title: txt + pluginName,
area: ['616px','680px'],
closeBtn: 2,
shadeClose: false,
content:payhtml
});
get_plugin_price(pluginName,pid,1);
$(".li-c-item li").click(function(){
var i = $(this).index();
$(this).addClass("active").siblings().removeClass("active");
if(i==0){
get_plugin_price(pluginName,pid,1);
$(".pro-info").hide();
}
else{
get_product_discount();
$(".pro-info").show();
}
});
$(".pay-btn-group > li").click(function(){
$(this).addClass("active").siblings().removeClass("active");
});
}
//升级为专业版
function updatapro(){
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">注:如需购买多台永久授权,请登录宝塔官网购买。<a class="btlink" href="https://www.bt.cn/download/linuxpro.html#price" target="_blank">去宝塔官网</a></p>\
</div>';
layer.open({
type: 1,
title: '升级专业版,所有插件,免费使用',
area: ['616px','540px'],
closeBtn: 2,
shadeClose: false,
content:payhtml
});
get_product_discount();
$(".pay-btn-group > li").click(function(){
$(this).addClass("active").siblings().removeClass("active");
});
}
//取插件折扣信息
function get_plugin_price(pluginName,pid,an){
var con = '<div class="libPay-item f14 plr15">\
<div class="li-tit c4">付款方式</div>\
<div class="li-con c6" id="Payment"><ul class="pay-btn-group pay-cycle"><li class="pay-cycle-btn active"><span>微信支付</span></li><li class="pay-cycle-btn" onclick="get_plugin_coupon('+pid+')"><span>代金券</span></li></ul></div>\
</div>\
<div class="payment-con">\
<div class="pay-weixin">\
<div class="libPay-item f14 plr15">\
<div class="li-tit c4">开通时长</div>\
<div class="li-con c6" id="PayCycle"><div class="btn-group"></div></div>\
</div>\
<div class="lib-price-box text-center"><span class="lib-price-name f14"><b>总计</b></span><span class="price-txt"><b class="sale-price"></b>元</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>微信扫码支付</div>\
</div>\
</div>\
<div class="pay-coupon" style="display:none">\
<div class="libPay-item f14 plr15" style="height:200px;overflow:auto">\
<div class="li-tit c4 ">代金券列表</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">提交</button>\
</div>\
</div>\
</div>'
$(".libpay-con").html("<div class='cloading'>加载中,请稍后</div>");
$.post('/auth?action=get_plugin_price',{pluginName:pluginName},function(rdata){
if(rdata.status === false){
//未绑定
var payhtml = '<div class="libLogin pd20" style="padding-top:100px"><div class="bt-form text-center"><div class="line mb15"><h3 class="c2 f16 text-center mtb20">绑定宝塔官网账号</h3></div><div class="line"><input class="bt-input-text" name="username2" type="text" placeholder="手机" id="p1" aautocomplete="new-password"></div><div class="line"><input autocomplete="new-password" class="bt-input-text" type="password" name="password2" placeholder="密码" id="p2"></div><div class="line"><input class="login-button" value="登录" type="button" onclick="loginBT(\''+pluginName+'\',\''+pid+'\')"></div><p class="text-right"><a class="btlink" href="https://www.bt.cn/register.html" target="_blank">未有账号,去注册</a></p></div></div>';
$(".libPay-select").hide();
$(".libpay-con").html(payhtml);
}
else if(an === undefined){
//同意协议
var payhtml = '<div class="shuoming pd20"><div class="alert alert-danger f16" style="line-height:30px">注意:您购买的插件只在当前服务器有效。<br>本插件为特价期间,可能存在一定的稳定性问题。<br>有任何问题,欢迎咨询QQ394030111反馈。</div><div class="line text-center"><input id="apply-ps" class="login-button" value="同意" type="button" disabled style="background:#999;border-color:#999;box-shadow:inset 0 1px 2px #999"></div></div>';
$(".libPay-select").hide();
$(".libpay-con").html(payhtml);
var imin=6;
var timehwnd = setInterval(function countdown(){
imin--;
var applyObj = $("#apply-ps");
if(imin == 0){
applyObj.prop("value","同意");
applyObj.removeAttr("disabled");
applyObj.attr("onclick","anTo('"+pluginName+"','"+pid+"')");
applyObj.removeAttr("style");
clearInterval(timehwnd);
}else{
applyObj.prop("value","同意("+imin+")");
}
},1000);
}
else{
$(".libPay-select").show();
$(".libpay-con").html(con);
$("#PayCycle .btn-group").html(rdata);
$(".pay-cycle li").click(function(){
var i = $(this).index();
$(this).addClass("active").siblings().removeClass("active");
$(".payment-con > div").eq(i).show().siblings().hide();
});
$(".btn-group .btn-success").click();
$(".btn-group .btn").click(function(){
$(this).addClass("btn-success").siblings().removeClass("btn-success");
});
}
})
}
//取插件优惠券
function get_plugin_coupon(pid){
var con = '';
$("#couponlist").html("<div class='cloading'>加载中,请稍后</div>");
$.post('/auth?action=get_voucher_plugin',{pid:pid},function(rdata){
if(rdata !=''){
for(var i=0,l=rdata.length;i<l;i++){
con += '<li class="pay-cycle-btn" data-code="'+rdata[i].code+'"><span>'+rdata[i].cycle+conver_unit(rdata[i].unit)+'</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 code = $("#couponlist .pay-btn-group .active").attr("data-code");
if(code == undefined){
layer.msg("请选择代金券");
}
else{
useCoupon_plugin(code,pid);
}
})
}
else{
$("#couponlist").html("<p class='text-center' style='margin-top:70px'>暂无代金券</p>");
}
})
}
//取专业版代金券
function get_pro_coupon(){
$("#couponlist").html("<div class='cloading'>加载中,请稍后</div>");
$.get("/auth?action=get_voucher",function(rdata){
if(rdata !=null){
var con = '';
var len = rdata.length;
for(var i=0; i<len; i++){
if(rdata[i].status !=1){
var cyc = rdata[i].cycle+conver_unit(rdata[i].unit);
if(rdata[i].cycle == 999){
cyc = "永久"
}
con += '<li class="pay-cycle-btn" 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 code = $("#couponlist .pay-btn-group .active").attr("data-code");
if(code == undefined){
layer.msg("请选择代金券");
}
else{
useCoupon(code);
}
})
}
else{
$("#couponlist").html("<p class='text-center' style='margin-top:70px'>暂无代金券</p>");
}
})
}
//插件代金券续费
function useCoupon_plugin(code,pid){
var loadT = layer.msg("提交中,请稍后。",{ icon: 16, time: 0, shade: [0.3, "#000"]});
$.post("/auth?action=create_order_voucher_plugin",{pid:pid,code:code},function(rdata){
layer.closeAll();
layer.msg(rdata.msg);
})
}
//专业版代金券续费
function useCoupon(code){
var loadT = layer.msg("提交中,请稍后。",{ icon: 16, time: 0, shade: [0.3, "#000"]});
$.post("/auth?action=create_order_voucher",{code:code},function(rdata){
layer.closeAll();
layer.msg(rdata.msg);
if(rdata.status === true){
layer.msg("支付成功!专业版升级中,请勿操作!",{icon: 16, time: 0, shade: [0.3, "#000"]});
$.get("/system?action=UpdatePro",function(rr){
show_upVip();
}).error(function(){
show_upVip();
});
}
})
}
function show_upVip(){
layer.closeAll();
layer.msg("恭喜您,升级完成!",{icon:1});
setTimeout(function(){window.location.href = '/';},3000);
}
//取专业版产品折扣信息
function get_product_discount(){
var con = '<div class="libPay-item f14 plr15">\
<div class="li-tit c4">付款方式</div>\
<div class="li-con c6" id="Payment"><ul class="pay-btn-group pay-cycle"><li class="pay-cycle-btn active"><span>微信支付</span></li><li class="pay-cycle-btn" onclick="get_pro_coupon()"><span>代金券</span></li></ul></div>\
</div>\
<div class="payment-con">\
<div class="pay-weixin">\
<div class="libPay-item f14 plr15">\
<div class="li-tit c4">开通时长</div>\
<div class="li-con c6" id="PayCycle"></div>\
</div>\
<div class="lib-price-box text-center"><span class="lib-price-name f14"><b>总计</b></span><span class="price-txt"><b class="sale-price"></b>元</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>微信扫码支付</div>\
</div>\
</div>\
<div class="pay-coupon" style="display:none">\
<div class="libPay-item f14 plr15" style="height:200px;overflow:auto">\
<div class="li-tit c4 ">代金券列表</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">提交</button>\
</div>\
</div>\
</div>'
$(".libpay-con").html("<div class='cloading'>加载中,请稍后</div>");
$.get("/auth?action=get_product_discount_by",function(rdata){
if(rdata !=null){
var coucon = '';
var qarr = Object.keys(rdata);
var qlen = qarr.length;
//折扣列表
for(var i=0;i<qlen;i++){
var j = qarr[i];
var a = rdata[j].price;
var b = rdata[j].sprice;
var c = rdata[j].discount;
coucon +='<li class="pay-cycle-btn" onclick="getRsCodePro('+a+','+b+','+j+')"><span>'+conver_unit(j)+'</span>'+(c==1?"":'<em>'+c*10+'折</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();
}
})
}
//单位转换
function conver_unit(name){
var unit= '';
switch (name){
case "year":
unit = "年";
break;
case "month":
unit = "个月";
break;
case "day":
unit = "天";
break;
case "1":
unit = "1个月";
break;
case "3":
unit = "3个月";
break;
case "6":
unit = "6个月";
break;
case "12":
unit = "1年";
break;
case "24":
unit = "2年";
break;
case "36":
unit = "3年";
break;
case "999":
unit = "永久";
break;
}
return unit;
}
var wxpayTimeId = 0;
function getRsCode(pid,price,sprice,cycle){
$(".sale-price").text(price);
if(price == sprice){
$(".cost-price").text(sprice+'元').hide();
}
else{
$(".cost-price").text(sprice+'元').show();
}
$(".pay-wx").html('<span class="loading">加载中,请稍后</span>');
$(".libPay").append('<div class="payloadingmask" style="height:100%;width:100%;position:absolute;top:0;left:0;z-index:9;background:#fff;opacity:0"></div>');
$.post('/auth?action=get_buy_code',{pid:pid,cycle:cycle},function(rdata){
$(".payloadingmask").remove();
if(rdata.status === false){
layer.msg(rdata.msg,{icon:2});
return;
}
$(".pay-wx").html('');
$(".pay-wx").qrcode(rdata.msg);
clearInterval(wxpayTimeId);
wxpayTimeId = setInterval(function(){
$.post('/auth?action=check_pay_status',{id:pid},function(rdata){
if(rdata.status) {
layer.closeAll();
layer.msg('支付成功!',{icon:1});
clearInterval(wxpayTimeId);
return;
}
})
},3000);
});
}
function getRsCodePro(price,sprice,cycle){
$(".sale-price").text(price);
if(price == sprice){
$(".cost-price").text(sprice+'元').hide();
}
else{
$(".cost-price").text(sprice+'元').show();
}
$(".pay-wx").html('<span class="loading">加载中,请稍后</span>');
$(".libPay").append('<div class="payloadingmask" style="height:100%;width:100%;position:absolute;top:0;left:0;z-index:1"></div>');
$.post('/auth?action=create_order',{cycle:cycle},function(rdata){
$(".payloadingmask").remove();
if(rdata.status === false){
layer.msg(rdata.msg,{icon:2});
return;
}
$(".pay-wx").html('');
$(".pay-wx").qrcode(rdata.msg);
clearInterval(wxpayTimeId);
wxpayTimeId = setInterval(function(){
$.post('/auth?action=get_re_order_status',function(rdata){
if(rdata.status) {
layer.closeAll();
layer.msg("支付成功!专业版升级中,请勿操作!",{icon: 16, time: 0, shade: [0.3, "#000"]});
clearInterval(wxpayTimeId);
$.get("/system?action=UpdatePro",function(rr){
show_upVip();
}).error(function(){
show_upVip();
});
return;
}
})
},3000);
});
}
function anTo(pluginName,pid){
layer.closeAll();
Renewinstall(pluginName,pid,1);
}
//登陆宝塔官网帐户
function loginBT(pluginName,pid){
p1 = $("#p1").val();
p2 = $("#p2").val();
var loadT = layer.msg(lan.config.token_get,{icon:16,time:0,shade: [0.3, '#000']});
$.post("/ssl?action=GetToken", "username=" + p1 + "&password=" + p2, function(b){
layer.close(loadT);
layer.msg(b.msg, {icon: b.status?1:2});
if(b.status) {
layer.closeAll();
Renewinstall(pluginName,pid);
}
});
}
//独立安装
function oneInstall(name,version){
var isError = false
if (name == 'pure') name += '-'+version.toLowerCase();
if (name == 'apache' || name == 'nginx'){
$.ajax({
url:'/ajax?action=GetInstalled',
type:'get',
async:false,
success:function(rdata){
if(rdata.webserver != name && rdata.webserver != false){
layer.msg(lan.soft.err_install2,{icon:2})
isError = true;
return;
}
}
});
}
if(name == 'php'){
if(getCookie('apacheVersion') == '2.2' && getCookie('phpVersion') == 1){
layer.msg(lan.soft.apache22_err,{icon:5});
return;
}
}
var optw = '';
if(name == 'mysql'){
optw = "<br><br><li style='color:red;'>"+lan.soft.mysql_f+"</li>"
var sUrl = '/data?action=getData&table=databases';
$.ajax({
url:sUrl,
type:"GET",
async:false,
success:function(dataD){
if(dataD.data.length > 0) {
layer.msg(lan.soft.mysql_d,{icon:5,time:5000})
isError = true;;
}
}
});
}
if (isError) return;
var one = layer.open({
type: 1,
title: lan.soft.type_title,
area: '350px',
closeBtn: 2,
shadeClose: true,
content:"<div class='bt-form pd20 pb70 c6'>\
<div class='version line'>"+lan.soft.install_version+":<span style='margin-left:30px'>"+name+" "+version+"</span>"+optw+"</div>\
<div class='fangshi line'>"+lan.bt.install_type+":<label data-title='"+lan.bt.install_rpm_title+"'>"+lan.bt.install_rpm+"<input type='checkbox' checked></label><label data-title='"+lan.bt.install_src_title+"'>"+lan.bt.install_src+"<input type='checkbox'></label></div>\
<div class='bt-form-submit-btn'>\
<button type='button' class='btn btn-danger btn-sm btn-title one-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>"
})
$('.fangshi input').click(function(){
$(this).attr('checked','checked').parent().siblings().find("input").removeAttr('checked');
});
$("#bi-btn").click(function(){
var type = $('.fangshi input').prop("checked") ? '1':'0';
var data = "name="+name+"&version="+version+"&type="+type;
var loadT = layer.msg(lan.soft.add_install,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files?action=InstallSoft', data, function(rdata) {
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
GetSList();
})
});
$(".one-close").click(function(){
layer.close(one);
})
InstallTips();
fly("bi-btn");
}
function AddVersion(name,ver,type,obj,title){
if(type == "lib"){
layer.confirm(lan.get('install_confirm',[title,ver]),{icon:3,closeBtn:2},function(){
$(obj).text(lan.soft.install_the);
var data = "name="+name;
var loadT = layer.msg(lan.soft.the_install,{icon:16,time:0,shade: [0.3, '#000']});
$.post("/plugin?action=install",data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
setTimeout(function(){GetSList()},2000)
});
});
return;
}
var titlename = name;
var veropt = ver.split("|");
var SelectVersion = '';
for(var i=0; i<veropt.length; i++){
SelectVersion += '<option>'+name+' '+veropt[i]+'</option>';
}
if(name == 'phpmyadmin' || name == 'nginx' || name == 'apache'){
var isError = false
$.ajax({
url:'/ajax?action=GetInstalled',
type:'get',
async:false,
success:function(rdata){
if(name == 'nginx'){
if(rdata.webserver != name.toLowerCase() && rdata.webserver != false){
layer.msg(lan.soft.err_install1,{icon:2})
isError = true;
return;
}
}
if(name == 'apache'){
if(rdata.webserver != name.toLowerCase() && rdata.webserver != false){
layer.msg(lan.soft.err_install2,{icon:2})
isError = true;
return;
}
}
if(name == 'phpmyadmin'){
if (rdata.php.length < 1){
layer.msg(lan.soft.err_install3,{icon:2})
isError = true;
return;
}
if (!rdata.mysql.setup){
layer.msg(lan.soft.err_install4,{icon:2})
isError = true;
return;
}
}
}
});
if(isError) return;
}
layer.open({
type: 1,
title: titlename+lan.soft.install_title,
area: '350px',
closeBtn: 2,
shadeClose: true,
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='fangshi line'>"+lan.bt.install_type+":<label data-title='"+lan.bt.install_rpm_title+"'>"+lan.bt.install_rpm+"<input type='checkbox' checked></label><label data-title='"+lan.bt.install_src_title+"'>"+lan.bt.install_src+"<input type='checkbox'></label></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>"
})
selectChange();
$('.fangshi input').click(function(){
$(this).attr('checked','checked').parent().siblings().find("input").removeAttr('checked');
});
$("#bi-btn").click(function(){
var info = $("#SelectVersion").val().toLowerCase();
var name = info.split(" ")[0];
var version = info.split(" ")[1];
var type = $('.fangshi input').prop("checked") ? '1':'0';
var data = "name="+name+"&version="+version+"&type="+type;
var loadT = layer.msg(lan.soft.add_install,{icon:16,time:0,shade: [0.3, '#000']});
$.post("/plugin?action=install",data,function(rdata){
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
GetSList();
});
});
InstallTips();
fly("bi-btn");
}
function selectChange(){
$("#SelectVersion,#selectVer").change(function(){
var info = $(this).val();
var name = info.split(" ")[0];
var version = info.split(" ")[1];
max=64
msg="64M"
if(name == 'mysql'){
memSize = getCookie('memSize');
switch(version){
case '5.1':
max = 256;
msg = '256M';
break;
case '8.0':
max = 5200;
msg = '6GB';
break;
case '5.7':
max = 1500;
msg = '2GB';
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}',version),{icon:5});
}
}
});
}
//卸载软件
function UninstallVersion(name,version,title){
var isError = false
if(name == 'mysql'){
var sUrl = '/data?action=getData&table=databases';
$.ajax({
url:sUrl,
type:"GET",
async:false,
success:function(dataD){
if(dataD.data.length > 0) {
layer.msg(lan.soft.mysql_del_err + '<p style="color:red">强行卸载: curl http://h.bt.cn/mu.sh|bash</p>',{icon:5,time:8000});
isError = true;;
}
}
});
}
if(isError) return;
layer.confirm(lan.soft.uninstall_confirm.replace('{1}',title).replace('{2}',version),{icon:3,closeBtn:2},function(){
var data = 'name='+name+'&version='+version;
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/plugin?action=unInstall',data,function(rdata){
layer.close(loadT)
GetSList();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
})
});
}
//获取插件列表
function GetLibList(){
var loadT = layer.msg(lan.soft.get_list,{icon:16,time:0,shade: [0.3, '#000']})
$.post('/ajax?action=GetLibList','',function(rdata){
layer.close(loadT)
var tBody = ''
for(var i=0;i<rdata.length;i++){
tBody += "<tr>\
<td>"+rdata[i].name+"</td>\
<td>"+rdata[i].type+"</td>\
<td>"+rdata[i].ps+"</td>\
<td>--</td>\
<td>"+rdata[i].status+"</td>\
<td style='text-align: right;'>"+rdata[i].optstr+"</td>\
</tr>"
}
$("#softList").append(tBody);
});
}
//设置插件
function SetLibConfig(name,action){
if(action == 1){
var access_key = $("input[name='access_key']").val();
var secret_key = $("input[name='secret_key']").val();
var bucket_name = $("input[name='bucket_name']").val();
if(access_key.length < 1 || secret_key.length < 1 || bucket_name.length < 1){
layer.msg(lan.soft.from_err,{icon:2});
return;
}
var bucket_domain = $("input[name='bucket_domain']").val();
var data = 'name='+name+'&access_key='+access_key+'&secret_key='+secret_key+'&bucket_name='+bucket_name+'&bucket_domain='+bucket_domain;
var loadT = layer.msg(lan.soft.lib_the,{icon:16,time:0,shade:[0.3,'#000']});
$.post('/ajax?action=SetQiniuAS',data,function(rdata){
layer.close(loadT);
if(rdata.status) layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
}).error(function(){
layer.close(loadT);
layer.msg(lan.public.error,{icon:2});
});
return;
}
if(name == 'beta'){
neice();
return;
}
$.post('/ajax?action=GetQiniuAS','name='+name,function(rdata){
var keyMsg = rdata.info.key.split('|');
var secretMsg = rdata.info.secret.split('|');
var bucketMsg = rdata.info.bucket.split('|');
var domainMsg = rdata.info.domain.split('|');
var body="<div class='bt-form bingfa pd20 pb70'>"
+"<p><span class='span_tit'>"+keyMsg[0]+":</span><input placeholder='"+keyMsg[1]+"' style='width: 300px;' type='text' name='access_key' value='"+rdata.AS[0]+"' /> *"+keyMsg[2]+" "+'<a href="'+rdata.info.help+'" style="color:green" target="_blank"> ['+lan.public.help+']</a>'+"</p>"
+"<p><span class='span_tit'>"+secretMsg[0]+":</span><input placeholder='"+secretMsg[1]+"' style='width: 300px;' type='text' name='secret_key' value='"+rdata.AS[1]+"' /> *"+secretMsg[2]+"</p>"
+"<p><span class='span_tit'>"+bucketMsg[0]+":</span><input placeholder='"+bucketMsg[1]+"' style='width: 300px;' type='text' name='bucket_name' value='"+rdata.AS[2]+"' /> *"+bucketMsg[2]+"</p>"
+"<p><span class='span_tit'>"+domainMsg[0]+":</span><input placeholder='"+domainMsg[1]+"' style='width: 300px;' type='text' name='bucket_domain' value='"+rdata.AS[3]+"' /> *"+domainMsg[2]+"</p>"
+'<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="GetQiniuFileList(\''+name+'\')" style="margin-right: 4px;">'+lan.public.list+'</button>'
+"<button class='btn btn-success btn-sm btn-title' onclick=\"SetLibConfig('"+name+"',1)\">"+lan.public.save+"</button>"
+'</div>'
+"</div>"
layer.open({
type: 1,
shift: 5,
closeBtn: 2,
area: '700px',
title: lan.soft.lib_config+rdata.info.name,
content: body
});
});
}
//安装插件
function InstallLib(name){
layer.confirm(lan.soft.lib_insatll_confirm.replace('{1}',name),{title:lan.soft.lib_install,icon:3,closeBtn:2}, function() {
var loadT = layer.msg(lan.soft.lib_install_the,{icon:16,time:0,shade:[0.3,'#000']});
$.post('/ajax?action=InstallLib','name='+name,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status){
GetSList();
SetLibConfig(name);
}
});
});
}
//卸载插件
function UninstallLib(name){
layer.confirm(lan.soft.lib_uninsatll_confirm.replace('{1}',name),{title:lan.soft.lib_uninstall,icon:3,closeBtn:2}, function() {
var loadT = layer.msg(lan.soft.lib_uninstall_the,{icon:16,time:0,shade:[0.3,'#000']});
$.post('/ajax?action=UninstallLib','name='+name,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status){
GetSList();
}
});
});
}
//首页显示
function toIndexDisplay(name,version){
var status = $("#index_"+name).prop("checked")?"0":"1";
if(name == "php"){
var verinfo = version.replace(/\./,"");
status = $("#index_"+name+verinfo).prop("checked")?"0":"1";
}
var data= "name="+name+"&status="+status+"&version="+version;
$.post("plugin?action=setPluginStatus",data,function(rdata){
if(rdata.status){
layer.msg(rdata.msg,{icon:1})
}
})
}
//刷新缓存
function flush_cache(){
var loadT = layer.msg(lan.soft.get_list,{icon:16,time:0,shade: [0.3, '#000']})
$.post('/plugin?action=flush_cache',{},function(rdata){
layer.close(loadT)
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
$(function(){
if(window.document.location.pathname == '/soft'){
setInterval(function(){GetSList(true);},5000);
}
});
updateSoftList();