|
|
|
/**
|
|
|
|
* 取回网站数据列表
|
|
|
|
* @param {Number} page 当前页
|
|
|
|
* @param {String} search 搜索条件
|
|
|
|
*/
|
|
|
|
function getWeb(page, search) {
|
|
|
|
search = $("#SearchValue").prop("value");
|
|
|
|
page = page == undefined ? '1':page;
|
|
|
|
var order = getCookie('order');
|
|
|
|
if(order){
|
|
|
|
order = '&order=' + order;
|
|
|
|
} else {
|
|
|
|
order = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
var sUrl = '/site/list';
|
|
|
|
var pdata = 'limit=10&p=' + page + '&search=' + search + order;
|
|
|
|
var loadT = layer.load();
|
|
|
|
//取回数据
|
|
|
|
$.post(sUrl, pdata, function(data) {
|
|
|
|
layer.close(loadT);
|
|
|
|
//构造数据列表
|
|
|
|
var body = '';
|
|
|
|
$("#webBody").html(body);
|
|
|
|
for (var i = 0; i < data.data.length; i++) {
|
|
|
|
//当前站点状态
|
|
|
|
if (data.data[i].status == lan.site.running || data.data[i].status == '1') {
|
|
|
|
var status = "<a href='javascript:;' title='"+lan.site.running_title+"' onclick=\"webStop(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:rgb(92, 184, 92)'>"+lan.site.running_text+" </span><span style='color:rgb(92, 184, 92)' class='glyphicon glyphicon-play'></span></a>";
|
|
|
|
} else {
|
|
|
|
var status = "<a href='javascript:;' title='"+lan.site.stopped_title+"' onclick=\"webStart(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:red'>"+lan.site.stopped+" </span><span style='color:rgb(255, 0, 0);' class='glyphicon glyphicon-pause'></span></a>";
|
|
|
|
}
|
|
|
|
|
|
|
|
//是否有备份
|
|
|
|
if (data.data[i].backup_count > 0) {
|
|
|
|
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ")\">有备份</a>";
|
|
|
|
} else {
|
|
|
|
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ")\">无备份</a>";
|
|
|
|
}
|
|
|
|
//是否设置有效期
|
|
|
|
var web_end_time = (data.data[i].edate == "0000-00-00") ? '永久': data.data[i].edate;
|
|
|
|
//表格主体
|
|
|
|
var shortwebname = data.data[i].name;
|
|
|
|
var shortpath = data.data[i].path;
|
|
|
|
if(data.data[i].name.length > 30) {
|
|
|
|
shortwebname = data.data[i].name.substring(0, 30) + "...";
|
|
|
|
}
|
|
|
|
if(data.data[i].path.length > 30){
|
|
|
|
shortpath = data.data[i].path.substring(0, 30) + "...";
|
|
|
|
}
|
|
|
|
var idname = data.data[i].name.replace(/\./g,'_');
|
|
|
|
|
|
|
|
body = "<tr><td><input type='checkbox' name='id' title='"+data.data[i].name+"' onclick='checkSelect();' value='" + data.data[i].id + "'></td>\
|
|
|
|
<td><a class='btlink webtips' href='javascript:;' onclick=\"webEdit(" + data.data[i].id + ",'" + data.data[i].name + "','" + data.data[i].edate + "','" + data.data[i].addtime + "')\" title='"+data.data[i].name+"'>" + shortwebname + "</td>\
|
|
|
|
<td>" + status + "</td>\
|
|
|
|
<td>" + backup + "</td>\
|
|
|
|
<td><a class='btlink' title='打开目录"+data.data[i].path+"' href=\"javascript:openPath('"+data.data[i].path+"');\">" + shortpath + "</a></td>\
|
|
|
|
<td><a class='btlink setTimes' id='site_"+data.data[i].id+"' data-ids='"+data.data[i].id+"'>" + web_end_time + "</a></td>\
|
|
|
|
<td><a class='btlinkbed' href='javascript:;' data-id='"+data.data[i].id+"'>" + data.data[i].ps + "</a></td>\
|
|
|
|
<td><input class='btswitch btswitch-ios' id='closewaf_"+idname+"' type='checkbox'><label class='btswitch-btn' for='closewaf_"+idname+"' onclick=\"set_site_obj_state('" + data.data[i].name + "','open')\" style='width:2.4em;height:1.4em;margin-bottom: 0'></label></td>\
|
|
|
|
<td style='text-align:right; color:#bbb'>\
|
|
|
|
<a href='javascript:;' class='btlink' onclick=\"webEdit(" + data.data[i].id + ",'" + data.data[i].name + "','" + data.data[i].edate + "','" + data.data[i].addtime + "')\">设置</a>\
|
|
|
|
| <a href='javascript:;' class='btlink' onclick=\"webDelete('" + data.data[i].id + "','" + data.data[i].name + "')\" title='删除站点'>删除</a>\
|
|
|
|
</td></tr>"
|
|
|
|
|
|
|
|
$("#webBody").append(body);
|
|
|
|
//setEdate(data.data[i].id,data.data[i].edate);
|
|
|
|
//设置到期日期
|
|
|
|
function getDate(a) {
|
|
|
|
var dd = new Date();
|
|
|
|
dd.setTime(dd.getTime() + (a == undefined || isNaN(parseInt(a)) ? 0 : parseInt(a)) * 86400000);
|
|
|
|
var y = dd.getFullYear();
|
|
|
|
var m = dd.getMonth() + 1;
|
|
|
|
var d = dd.getDate();
|
|
|
|
return y + "-" + (m < 10 ? ('0' + m) : m) + "-" + (d < 10 ? ('0' + d) : d);
|
|
|
|
}
|
|
|
|
$('#webBody').on('click','#site_'+ data.data[i].id,function(){
|
|
|
|
var _this = $(this);
|
|
|
|
var id = $(this).attr('data-ids');
|
|
|
|
laydate.render({
|
|
|
|
elem: '#site_'+ id //指定元素
|
|
|
|
,min:getDate(1)
|
|
|
|
,max:'2099-12-31'
|
|
|
|
,vlue:getDate(365)
|
|
|
|
,type:'date'
|
|
|
|
,format :'yyyy-MM-dd'
|
|
|
|
,trigger:'click'
|
|
|
|
,btns:['perpetual', 'confirm']
|
|
|
|
,theme:'#20a53a'
|
|
|
|
,done:function(dates){
|
|
|
|
if(_this.html() == '永久'){
|
|
|
|
dates = '0000-00-00';
|
|
|
|
}
|
|
|
|
var loadT = layer.msg(lan.site.saving_txt, { icon: 16, time: 0, shade: [0.3, "#000"]});
|
|
|
|
$.post('/site/set_end_date','id='+id+'&edate='+dates,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:5});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.click();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if(body.length < 10){
|
|
|
|
body = "<tr><td colspan='8'>当前没有站点数据</td></tr>";
|
|
|
|
$(".dataTables_paginate").hide();
|
|
|
|
$("#webBody").html(body);
|
|
|
|
}
|
|
|
|
//输出数据列表
|
|
|
|
$(".btn-more").hover(function(){
|
|
|
|
$(this).addClass("open");
|
|
|
|
},function(){
|
|
|
|
$(this).removeClass("open");
|
|
|
|
});
|
|
|
|
//输出分页
|
|
|
|
$("#webPage").html(data.page);
|
|
|
|
// $("#webPage").html('<div class="site_type"><span>站点分类:</span><select class="bt-input-text mr5" style="width:100px"><option value="-1">全部分类</option><option value="0">默认分类</option></select></div>');
|
|
|
|
|
|
|
|
$(".btlinkbed").click(function(){
|
|
|
|
var dataid = $(this).attr("data-id");
|
|
|
|
var databak = $(this).text();
|
|
|
|
if(databak == null){
|
|
|
|
databak = '';
|
|
|
|
}
|
|
|
|
$(this).hide().after("<input class='baktext' type='text' data-id='"+dataid+"' name='bak' value='" + databak + "' placeholder='备注信息' onblur='getBakPost(\"sites\")' />");
|
|
|
|
$(".baktext").focus();
|
|
|
|
});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getBakPost(b) {
|
|
|
|
$(".baktext").hide().prev().show();
|
|
|
|
var c = $(".baktext").attr("data-id");
|
|
|
|
var a = $(".baktext").val();
|
|
|
|
if(a == "") {
|
|
|
|
a = '空';
|
|
|
|
}
|
|
|
|
setWebPs(b, c, a);
|
|
|
|
$("a[data-id='" + c + "']").html(a);
|
|
|
|
$(".baktext").remove();
|
|
|
|
}
|
|
|
|
|
|
|
|
function setWebPs(b, e, a) {
|
|
|
|
console.log(b,e,a);
|
|
|
|
var d = layer.load({shade: true,shadeClose: false});
|
|
|
|
var c = 'ps=' + a;
|
|
|
|
$.post('/site/set_ps', 'id=' + e + "&" + c, function(data) {
|
|
|
|
if(data['status']) {
|
|
|
|
getWeb(1);
|
|
|
|
layer.closeAll();
|
|
|
|
layer.msg('修改成功!', {icon: 1});
|
|
|
|
} else {
|
|
|
|
layer.closeAll();
|
|
|
|
layer.msg('修改失败!', {icon: 2});
|
|
|
|
}
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//添加站点
|
|
|
|
function webAdd(type) {
|
|
|
|
if (type == 1) {
|
|
|
|
var array;
|
|
|
|
var str="";
|
|
|
|
var domainlist='';
|
|
|
|
var domain = array = $("#mainDomain").val().replace('http://','').replace('https://','').split("\n");
|
|
|
|
var webport=[];
|
|
|
|
var checkDomain = domain[0].split('.');
|
|
|
|
if(checkDomain.length < 1){
|
|
|
|
layer.msg(lan.site.domain_err_txt,{icon:2});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
for(var i=1; i<domain.length; i++){
|
|
|
|
domainlist += '"'+domain[i]+'",';
|
|
|
|
}
|
|
|
|
|
|
|
|
webport = domain[0].split(":")[1];//主域名端口
|
|
|
|
if(webport == undefined){
|
|
|
|
webport="80";
|
|
|
|
}
|
|
|
|
|
|
|
|
domainlist = domainlist.substring(0,domainlist.length-1);//子域名json
|
|
|
|
domain ='{"domain":"'+domain[0]+'","domainlist":['+domainlist+'],"count":'+domain.length+'}';//拼接joson
|
|
|
|
var loadT = layer.msg(lan.public.the_get,{icon:16,time:0,shade: [0.3, "#000"]})
|
|
|
|
var data = $("#addweb").serialize()+"&port="+webport+"&webinfo="+domain;
|
|
|
|
|
|
|
|
$.post('/site/add', data, function(ret) {
|
|
|
|
if (ret.status == true) {
|
|
|
|
getWeb(1);
|
|
|
|
layer.closeAll();
|
|
|
|
layer.msg('成功创建站点',{icon:1})
|
|
|
|
} else {
|
|
|
|
layer.msg(ret.msg, {icon: 2});
|
|
|
|
}
|
|
|
|
layer.close(loadT);
|
|
|
|
},'json');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$.post('/site/get_php_version',function(rdata){
|
|
|
|
|
|
|
|
var defaultPath = $("#defaultPath").html();
|
|
|
|
var php_version = "<div class='line'><span class='tname'>"+lan.site.php_ver+"</span><select class='bt-input-text' name='version' id='c_k3' style='width:100px'>";
|
|
|
|
for (var i=rdata.length-1;i>=0;i--) {
|
|
|
|
php_version += "<option value='"+rdata[i].version+"'>"+rdata[i].name+"</option>";
|
|
|
|
}
|
|
|
|
|
|
|
|
var www = syncPost('/site/get_root_dir');
|
|
|
|
|
|
|
|
php_version += "</select><span id='php_w' style='color:red;margin-left: 10px;'></span></div>";
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
skin: 'demo-class',
|
|
|
|
area: '640px',
|
|
|
|
title: '添加网站',
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 0,
|
|
|
|
shadeClose: false,
|
|
|
|
content: "<form class='bt-form pd20 pb70' id='addweb'>\
|
|
|
|
<div class='line'>\
|
|
|
|
<span class='tname'>"+lan.site.domain+"</span>\
|
|
|
|
<div class='info-r c4'>\
|
|
|
|
<textarea id='mainDomain' class='bt-input-text' name='webname' style='width:458px;height:100px;line-height:22px' /></textarea>\
|
|
|
|
</div>\
|
|
|
|
</div>\
|
|
|
|
<div class='line'>\
|
|
|
|
<span class='tname'>备注</span>\
|
|
|
|
<div class='info-r c4'>\
|
|
|
|
<input id='Wbeizhu' class='bt-input-text' type='text' name='ps' placeholder='"+lan.site.note_ph+"' style='width:458px' />\
|
|
|
|
</div>\
|
|
|
|
</div>\
|
|
|
|
<div class='line'>\
|
|
|
|
<span class='tname'>根目录</span>\
|
|
|
|
<div class='info-r c4'>\
|
|
|
|
<input id='inputPath' class='bt-input-text mr5' type='text' name='path' value='"+www['dir']+"/' placeholder='"+www['dir']+"' style='width:458px' />\
|
|
|
|
<span class='glyphicon glyphicon-folder-open cursor' onclick='changePath(\"inputPath\")'></span>\
|
|
|
|
</div>\
|
|
|
|
</div>\
|
|
|
|
"+php_version+"\
|
|
|
|
<div class='bt-form-submit-btn'>\
|
|
|
|
<button type='button' class='btn btn-danger btn-sm btn-title' onclick='layer.closeAll()'>取消</button>\
|
|
|
|
<button type='button' class='btn btn-success btn-sm btn-title' onclick=\"webAdd(1)\">提交</button>\
|
|
|
|
</div>\
|
|
|
|
</form>",
|
|
|
|
});
|
|
|
|
|
|
|
|
$(function() {
|
|
|
|
var placeholder = "<div class='placeholder c9' style='top:10px;left:10px'>"+lan.site.domain_help+"</div>";
|
|
|
|
$('#mainDomain').after(placeholder);
|
|
|
|
$(".placeholder").click(function(){
|
|
|
|
$(this).hide();
|
|
|
|
$('#mainDomain').focus();
|
|
|
|
})
|
|
|
|
$('#mainDomain').focus(function() {
|
|
|
|
$(".placeholder").hide();
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#mainDomain').blur(function() {
|
|
|
|
if($(this).val().length==0){
|
|
|
|
$(".placeholder").show();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
//验证PHP版本
|
|
|
|
$("select[name='version']").change(function(){
|
|
|
|
if($(this).val() == '52'){
|
|
|
|
var msgerr = 'PHP5.2在您的站点有漏洞时有跨站风险,请尽量使用PHP5.3以上版本!';
|
|
|
|
$('#php_w').text(msgerr);
|
|
|
|
}else{
|
|
|
|
$('#php_w').text('');
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
$('#mainDomain').on('input', function() {
|
|
|
|
var array;
|
|
|
|
var res,ress;
|
|
|
|
var str = $(this).val().replace('http://','').replace('https://','');
|
|
|
|
var len = str.replace(/[^\x00-\xff]/g, "**").length;
|
|
|
|
array = str.split("\n");
|
|
|
|
ress =array[0].split(":")[0];
|
|
|
|
res = ress.replace(new RegExp(/([-.])/g), '_');
|
|
|
|
if(res.length > 15){
|
|
|
|
res = res.substr(0,15);
|
|
|
|
}
|
|
|
|
|
|
|
|
var placeholder = $("#inputPath").attr('placeholder');
|
|
|
|
$("#inputPath").val(placeholder+'/'+ress);
|
|
|
|
|
|
|
|
if(res.length > 15){
|
|
|
|
res = res.substr(0,15);
|
|
|
|
}
|
|
|
|
|
|
|
|
$("#Wbeizhu").val(ress);
|
|
|
|
})
|
|
|
|
|
|
|
|
//备注
|
|
|
|
$('#Wbeizhu').on('input', function() {
|
|
|
|
var str = $(this).val();
|
|
|
|
var len = str.replace(/[^\x00-\xff]/g, "**").length;
|
|
|
|
if (len > 20) {
|
|
|
|
str = str.substring(0, 20);
|
|
|
|
$(this).val(str);
|
|
|
|
layer.msg('不能超出20个字符!', {
|
|
|
|
icon: 0
|
|
|
|
});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
//获取当前时间时间戳,截取后6位
|
|
|
|
var timestamp = new Date().getTime().toString();
|
|
|
|
var dtpw = timestamp.substring(7);
|
|
|
|
});
|
|
|
|
}, 'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//修改网站目录
|
|
|
|
function webPathEdit(id){
|
|
|
|
$.post('/site/get_dir_user_ini','&id='+id, function(data){
|
|
|
|
var userini = data['data'];
|
|
|
|
var webpath = userini['path'];
|
|
|
|
var userinicheckeds = userini.userini?'checked':'';
|
|
|
|
var logscheckeds = userini.logs?'checked':'';
|
|
|
|
var opt = ''
|
|
|
|
var selected = '';
|
|
|
|
for(var i=0;i<userini.runPath.dirs.length;i++){
|
|
|
|
selected = '';
|
|
|
|
if(userini.runPath.dirs[i] == userini.runPath.runPath){
|
|
|
|
selected = 'selected';
|
|
|
|
}
|
|
|
|
opt += '<option value="'+ userini.runPath.dirs[i] +'" '+selected+'>'+ userini.runPath.dirs[i] +'</option>'
|
|
|
|
}
|
|
|
|
var webPathHtml = "<div class='webedit-box soft-man-con'>\
|
|
|
|
<div class='label-input-group ptb10'>\
|
|
|
|
<input type='checkbox' name='userini' id='userini'"+userinicheckeds+" /><label class='mr20' for='userini' style='font-weight:normal'>防跨站攻击(open_basedir)</label>\
|
|
|
|
<input type='checkbox' name='logs' id='logs'"+logscheckeds+" /><label for='logs' style='font-weight:normal'>写访问日志</label>\
|
|
|
|
</div>\
|
|
|
|
<div class='line mt10'>\
|
|
|
|
<span class='mr5'>网站目录</span>\
|
|
|
|
<input class='bt-input-text mr5' type='text' style='width:50%' placeholder='网站根目录' value='"+webpath+"' name='webdir' id='inputPath'>\
|
|
|
|
<span onclick='changePath("inputPath")' class='glyphicon glyphicon-folder-open cursor mr20'></span>\
|
|
|
|
<button class='btn btn-success btn-sm' onclick='setSitePath("+id+")'>保存</button>\
|
|
|
|
</div>\
|
|
|
|
<div class='line mtb15'>\
|
|
|
|
<span class='mr5'>运行目录</span>\
|
|
|
|
<select class='bt-input-text' type='text' style='width:50%; margin-right:41px' name='runPath' id='runPath'>"+opt+"</select>\
|
|
|
|
<button class='btn btn-success btn-sm' onclick='setSiteRunPath("+id+")' style='margin-top: -1px;'>保存</button>\
|
|
|
|
</div>\
|
|
|
|
<ul class='help-info-text c7 ptb10'>\
|
|
|
|
<li>部分程序需要指定二级目录作为运行目录,如ThinkPHP5,Laravel</li>\
|
|
|
|
<li>选择您的运行目录,点保存即可</li>\
|
|
|
|
</ul>"
|
|
|
|
+'<div class="user_pw_tit" style="margin-top: -8px;padding-top: 11px;">'
|
|
|
|
+'<span class="tit">密码访问</span>'
|
|
|
|
+'<span class="btswitch-p"><input '+(userini.pass?'checked':'')+' class="btswitch btswitch-ios" id="pathSafe" type="checkbox">'
|
|
|
|
+'<label class="btswitch-btn phpmyadmin-btn" for="pathSafe" onclick="pathSafe('+id+')"></label>'
|
|
|
|
+'</span>'
|
|
|
|
+'</div>'
|
|
|
|
+'<div class="user_pw" style="margin-top: 10px;display:'+(userini.pass?'block;':'none;')+'">'
|
|
|
|
+'<p><span>授权账号</span><input id="username_get" class="bt-input-text" name="username_get" value="" type="text" placeholder="不修改请留空"></p>'
|
|
|
|
+'<p><span>访问密码</span><input id="password_get_1" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="不修改请留空"></p>'
|
|
|
|
+'<p><span>重复密码</span><input id="password_get_2" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="不修改请留空"></p>'
|
|
|
|
+'<p><button class="btn btn-success btn-sm" onclick="setPathSafe('+id+')">保存</button></p>'
|
|
|
|
+'</div>'
|
|
|
|
+'</div>';
|
|
|
|
|
|
|
|
$("#webedit-con").html(webPathHtml);
|
|
|
|
$("#userini").change(function(){
|
|
|
|
$.post('/site/set_dir_user_ini','path='+webpath,function(userini){
|
|
|
|
layer.msg(userini.msg+'<p style="color:red;">注意:设置防跨站需要重启PHP才能生效!</p>',{icon:userini.status?1:2});
|
|
|
|
},'json');
|
|
|
|
});
|
|
|
|
|
|
|
|
$("#logs").change(function(){
|
|
|
|
$.post('/site/logs_open','id='+id,function(userini){
|
|
|
|
layer.msg(userini.msg,{icon:userini.status?1:2});
|
|
|
|
},'josn');
|
|
|
|
});
|
|
|
|
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//是否设置访问密码
|
|
|
|
function pathSafe(id){
|
|
|
|
var isPass = $('#pathSafe').prop('checked');
|
|
|
|
if(!isPass){
|
|
|
|
$(".user_pw").show();
|
|
|
|
} else {
|
|
|
|
var loadT = layer.msg(lan.public.the,{icon:16,time:10000,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/close_has_pwd',{id:id},function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
$(".user_pw").hide();
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//设置访问密码
|
|
|
|
function setPathSafe(id){
|
|
|
|
var username = $("#username_get").val();
|
|
|
|
var pass1 = $("#password_get_1").val();
|
|
|
|
var pass2 = $("#password_get_2").val();
|
|
|
|
if(pass1 != pass2){
|
|
|
|
layer.msg('两次输入的密码不一致!',{icon:2});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:10000,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/set_has_pwd',{id:id,username:username,password:pass1},function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//提交运行目录
|
|
|
|
function setSiteRunPath(id){
|
|
|
|
var NewPath = $("#runPath").val();
|
|
|
|
var loadT = layer.msg(lan.public.the,{icon:16,time:10000,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/set_site_run_path','id='+id+'&runPath='+NewPath,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
var ico = rdata.status?1:2;
|
|
|
|
layer.msg(rdata.msg,{icon:ico});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//提交网站目录
|
|
|
|
function setSitePath(id){
|
|
|
|
var NewPath = $("#inputPath").val();
|
|
|
|
var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:10000,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/set_path','id='+id+'&path='+NewPath,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//修改网站备注
|
|
|
|
function webBakEdit(id){
|
|
|
|
$.post("/data?action=getKey','table=sites&key=ps&id="+id,function(rdata){
|
|
|
|
var webBakHtml = "<div class='webEdit-box padding-10'>\
|
|
|
|
<div class='line'>\
|
|
|
|
<label><span>"+lan.site.note_ph+"</span></label>\
|
|
|
|
<div class='info-r'>\
|
|
|
|
<textarea name='beizhu' id='webbeizhu' col='5' style='width:96%'>"+rdata+"</textarea>\
|
|
|
|
<br><br><button class='btn btn-success btn-sm' onclick='SetSitePs("+id+")'>保存</button>\
|
|
|
|
</div>\
|
|
|
|
</div>";
|
|
|
|
$("#webedit-con").html(webBakHtml);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//提交网站备注
|
|
|
|
function SetSitePs(id){
|
|
|
|
var myPs = $("#webbeizhu").val();
|
|
|
|
$.post('/data?action=setPs','table=sites&id='+id+'&ps='+myPs,function(rdata){
|
|
|
|
layer.msg(rdata?lan.public.edit_ok:lan.public.edit_err,{icon:rdata?1:2});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//设置默认文档
|
|
|
|
function setIndexEdit(id){
|
|
|
|
$.post('/site/get_index','id='+id,function(data){
|
|
|
|
var rdata = data['index'];
|
|
|
|
rdata = rdata.replace(new RegExp(/(,)/g), "\n");
|
|
|
|
var setIndexHtml = "<div id='SetIndex'><div class='SetIndex'>\
|
|
|
|
<div class='line'>\
|
|
|
|
<textarea class='bt-input-text' id='Dindex' name='files' style='height: 180px; width:50%; line-height:20px'>"+rdata+"</textarea>\
|
|
|
|
<button type='button' class='btn btn-success btn-sm pull-right' onclick='setIndexList("+id+")' style='margin: 70px 130px 0px 0px;'>"+lan.public.save+"</button>\
|
|
|
|
</div>\
|
|
|
|
<ul class='help-info-text c7 ptb10'>\
|
|
|
|
<li>默认文档,每行一个,优先级由上至下。</li>\
|
|
|
|
</ul>\
|
|
|
|
</div></div>";
|
|
|
|
$("#webedit-con").html(setIndexHtml);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 停止一个站点
|
|
|
|
* @param {Int} wid 网站ID
|
|
|
|
* @param {String} wname 网站名称
|
|
|
|
*/
|
|
|
|
function webStop(wid, wname) {
|
|
|
|
layer.confirm('站点停用后将无法访问,您真的要停用这个站点吗?', {icon:3,closeBtn:2},function(index) {
|
|
|
|
if (index > 0) {
|
|
|
|
var loadT = layer.load();
|
|
|
|
$.post("/site/stop","id=" + wid + "&name=" + wname, function(ret) {
|
|
|
|
layer.msg(ret.msg,{icon:ret.status?1:2})
|
|
|
|
layer.close(loadT);
|
|
|
|
getWeb(1);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 启动一个网站
|
|
|
|
* @param {Number} wid 网站ID
|
|
|
|
* @param {String} wname 网站名称
|
|
|
|
*/
|
|
|
|
function webStart(wid, wname) {
|
|
|
|
layer.confirm('即将启动站点,您真的要启用这个站点吗?',{icon:3,closeBtn:2}, function(index) {
|
|
|
|
if (index > 0) {
|
|
|
|
var loadT = layer.load()
|
|
|
|
$.post("/site/start","id=" + wid + "&name=" + wname, function(ret) {
|
|
|
|
layer.msg(ret.msg,{icon:ret.status?1:2})
|
|
|
|
layer.close(loadT);
|
|
|
|
getWeb(1);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 删除一个网站
|
|
|
|
* @param {Number} wid 网站ID
|
|
|
|
* @param {String} wname 网站名称
|
|
|
|
*/
|
|
|
|
function webDelete(wid, wname){
|
|
|
|
var thtml = "<div class='options'>\
|
|
|
|
<label><input type='checkbox' id='delpath' name='path'><span>"+lan.site.root_dir+"</span></label>\
|
|
|
|
</div>";
|
|
|
|
var info = '是否要删除同名根目录';
|
|
|
|
safeMessage('删除站点'+"["+wname+"]",info, function(){
|
|
|
|
var path='';
|
|
|
|
if($("#delpath").is(":checked")){
|
|
|
|
path='&path=1';
|
|
|
|
}
|
|
|
|
var loadT = layer.msg(lan.public.the,{icon:16,time:10000,shade: [0.3, '#000']});
|
|
|
|
$.post("/site/delete","id=" + wid + "&webname=" + wname + path, function(ret){
|
|
|
|
layer.closeAll();
|
|
|
|
layer.msg(ret.msg,{icon:ret.status?1:2})
|
|
|
|
getWeb(1);
|
|
|
|
},'json');
|
|
|
|
},thtml);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//批量删除
|
|
|
|
function allDeleteSite(){
|
|
|
|
var checkList = $("input[name=id]");
|
|
|
|
var dataList = new Array();
|
|
|
|
for(var i=0;i<checkList.length;i++){
|
|
|
|
if(!checkList[i].checked) continue;
|
|
|
|
var tmp = new Object();
|
|
|
|
tmp.name = checkList[i].title;
|
|
|
|
tmp.id = checkList[i].value;
|
|
|
|
dataList.push(tmp);
|
|
|
|
}
|
|
|
|
|
|
|
|
var thtml = "<div class='options'>\
|
|
|
|
<label style=\"width:100%;\"><input type='checkbox' id='delpath' name='path'><span>"+lan.site.all_del_info+"</span></label>\
|
|
|
|
</div>";
|
|
|
|
safeMessage(lan.site.all_del_site,"<a style='color:red;'>"+lan.get('del_all_site',[dataList.length])+"</a>",function(){
|
|
|
|
layer.closeAll();
|
|
|
|
var path = '';
|
|
|
|
if($("#delpath").is(":checked")){
|
|
|
|
path='&path=1';
|
|
|
|
}
|
|
|
|
syncDeleteSite(dataList,0,'',path);
|
|
|
|
},thtml);
|
|
|
|
}
|
|
|
|
|
|
|
|
//模拟同步开始批量删除
|
|
|
|
function syncDeleteSite(dataList,successCount,errorMsg,path){
|
|
|
|
if(dataList.length < 1) {
|
|
|
|
layer.msg(lan.get('del_all_site_ok',[successCount]),{icon:1});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var loadT = layer.msg(lan.get('del_all_task_the',[dataList[0].name]),{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.ajax({
|
|
|
|
type:'POST',
|
|
|
|
url:'/site?action=DeleteSite',
|
|
|
|
data:'id='+dataList[0].id+'&webname='+dataList[0].name+path,
|
|
|
|
async: true,
|
|
|
|
success:function(frdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(frdata.status){
|
|
|
|
successCount++;
|
|
|
|
$("input[title='"+dataList[0].name+"']").parents("tr").remove();
|
|
|
|
}else{
|
|
|
|
if(!errorMsg){
|
|
|
|
errorMsg = '<br><p>'+lan.site.del_err+':</p>';
|
|
|
|
}
|
|
|
|
errorMsg += '<li>'+dataList[0].name+' -> '+frdata.msg+'</li>'
|
|
|
|
}
|
|
|
|
|
|
|
|
dataList.splice(0,1);
|
|
|
|
syncDeleteSite(dataList,successCount,errorMsg,path);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 域名管理
|
|
|
|
* @param {Int} id 网站ID
|
|
|
|
*/
|
|
|
|
function domainEdit(id, name, msg, status) {
|
|
|
|
$.post('/site/get_domain' ,{pid:id}, function(domain) {
|
|
|
|
|
|
|
|
var echoHtml = "";
|
|
|
|
for (var i = 0; i < domain.length; i++) {
|
|
|
|
echoHtml += "<tr>\
|
|
|
|
<td><a title='"+lan.site.click_access+"' target='_blank' href='http://" + domain[i].name + ":" + domain[i].port + "' class='btlinkbed'>" + domain[i].name + "</a></td>\
|
|
|
|
<td><a class='btlinkbed'>" + domain[i].port + "</a></td>\
|
|
|
|
<td class='text-center'><a class='table-btn-del' href='javascript:;' onclick=\"delDomain(" + id + ",'" + name + "','" + domain[i].name + "','" + domain[i].port + "',1)\"><span class='glyphicon glyphicon-trash'></span></a></td>\
|
|
|
|
</tr>";
|
|
|
|
}
|
|
|
|
var bodyHtml = "<textarea id='newdomain' class='bt-input-text' style='height: 100px; width: 340px;padding:5px 10px;line-height:20px'></textarea>\
|
|
|
|
<input type='hidden' id='newport' value='80' />\
|
|
|
|
<button type='button' class='btn btn-success btn-sm pull-right' style='margin:30px 35px 0 0' onclick=\"domainAdd(" + id + ",'" + name + "',1)\">添加</button>\
|
|
|
|
<div class='divtable mtb15' style='height:350px;overflow:auto'>\
|
|
|
|
<table class='table table-hover' width='100%'>\
|
|
|
|
<thead><tr><th>"+lan.site.domain+"</th><th width='70px'>端口</th><th width='50px' class='text-center'>操作</th></tr></thead>\
|
|
|
|
<tbody id='checkDomain'>" + echoHtml + "</tbody>\
|
|
|
|
</table>\
|
|
|
|
</div>";
|
|
|
|
$("#webedit-con").html(bodyHtml);
|
|
|
|
if(msg != undefined){
|
|
|
|
layer.msg(msg,{icon:status?1:5});
|
|
|
|
}
|
|
|
|
var placeholder = "<div class='placeholder c9' style='left:28px;width:330px;top:16px;'>每行填写一个域名,默认为80端口<br>泛解析添加方法 *.domain.com<br>如另加端口格式为 www.domain.com:88</div>";
|
|
|
|
$('#newdomain').after(placeholder);
|
|
|
|
$(".placeholder").click(function(){
|
|
|
|
$(this).hide();
|
|
|
|
$('#newdomain').focus();
|
|
|
|
})
|
|
|
|
$('#newdomain').focus(function() {
|
|
|
|
$(".placeholder").hide();
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#newdomain').blur(function() {
|
|
|
|
if($(this).val().length==0){
|
|
|
|
$(".placeholder").show();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
$("#newdomain").on("input",function(){
|
|
|
|
var str = $(this).val();
|
|
|
|
if(isChineseChar(str)) {
|
|
|
|
$('.btn-zhm').show();
|
|
|
|
} else{
|
|
|
|
$('.btn-zhm').hide();
|
|
|
|
}
|
|
|
|
})
|
|
|
|
//checkDomain();
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
function DomainRoot(id, name,msg) {
|
|
|
|
$.get('/data?action=getData&table=domain&list=True&search=' + id, function(domain) {
|
|
|
|
var echoHtml = "";
|
|
|
|
for (var i = 0; i < domain.length; i++) {
|
|
|
|
echoHtml += "<tr><td><a title='"+lan.site.click_access+"' target='_blank' href='http://" + domain[i].name + ":" + domain[i].port + "' class='btlinkbed'>" + domain[i].name + "</a></td><td><a class='btlinkbed'>" + domain[i].port + "</a></td><td class='text-center'><a class='table-btn-del' href='javascript:;' onclick=\"delDomain(" + id + ",'" + name + "','" + domain[i].name + "','" + domain[i].port + "',1)\"><span class='glyphicon glyphicon-trash'></span></a></td></tr>";
|
|
|
|
}
|
|
|
|
var index = layer.open({
|
|
|
|
type: 1,
|
|
|
|
skin: 'demo-class',
|
|
|
|
area: '450px',
|
|
|
|
title: lan.site.domain_man,
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 0,
|
|
|
|
shadeClose: true,
|
|
|
|
content: "<div class='divtable padding-10'>\
|
|
|
|
<textarea id='newdomain'></textarea>\
|
|
|
|
<input type='hidden' id='newport' value='80' />\
|
|
|
|
<button type='button' class='btn btn-success btn-sm pull-right' style='margin:30px 35px 0 0' onclick=\"domainAdd(" + id + ",'" + name + "')\">添加</button>\
|
|
|
|
<table class='table table-hover' width='100%' style='margin-bottom:0'>\
|
|
|
|
<thead><tr><th>"+lan.site.domain+"</th><th width='70px'>"+lan.site.port+"</th><th width='50px' class='text-center'>"+lan.site.operate+"</th></tr></thead>\
|
|
|
|
<tbody id='checkDomain'>" + echoHtml + "</tbody>\
|
|
|
|
</table></div>"
|
|
|
|
});
|
|
|
|
if(msg != undefined){
|
|
|
|
layer.msg(msg,{icon:1});
|
|
|
|
}
|
|
|
|
var placeholder = "<div class='placeholder'>"+lan.site.domain_help+"</div>";
|
|
|
|
$('#newdomain').after(placeholder);
|
|
|
|
$(".placeholder").click(function(){
|
|
|
|
$(this).hide();
|
|
|
|
$('#newdomain').focus();
|
|
|
|
})
|
|
|
|
$('#newdomain').focus(function() {
|
|
|
|
$(".placeholder").hide();
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#newdomain').blur(function() {
|
|
|
|
if($(this).val().length==0){
|
|
|
|
$(".placeholder").show();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
$("#newdomain").on("input",function(){
|
|
|
|
var str = $(this).val();
|
|
|
|
if(isChineseChar(str)) $('.btn-zhm').show();
|
|
|
|
else $('.btn-zhm').hide();
|
|
|
|
})
|
|
|
|
//checkDomain();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
//编辑域名/端口
|
|
|
|
function cancelSend(){
|
|
|
|
$(".changeDomain,.changePort").hide().prev().show();
|
|
|
|
$(".changeDomain,.changePort").remove();
|
|
|
|
}
|
|
|
|
//遍历域名
|
|
|
|
function checkDomain() {
|
|
|
|
$("#checkDomain tr").each(function() {
|
|
|
|
var $this = $(this);
|
|
|
|
var domain = $(this).find("td:first-child").text();
|
|
|
|
$(this).find("td:first-child").append("<i class='lading'></i>");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 添加域名
|
|
|
|
* @param {Int} id 网站ID
|
|
|
|
* @param {String} webname 主域名
|
|
|
|
*/
|
|
|
|
function domainAdd(id, webname,type) {
|
|
|
|
var Domain = $("#newdomain").val().split("\n");
|
|
|
|
|
|
|
|
var domainlist = '';
|
|
|
|
for(var i=0; i<Domain.length; i++){
|
|
|
|
domainlist += Domain[i]+ ',';
|
|
|
|
}
|
|
|
|
|
|
|
|
if(domainlist.length < 3){
|
|
|
|
layer.msg(lan.site.domain_empty,{icon:5});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
domainlist = domainlist.substring(0,domainlist.length-1);
|
|
|
|
var loadT = layer.load();
|
|
|
|
var data = "domain=" + domainlist + "&webname=" + webname + "&id=" + id;
|
|
|
|
$.post('/site/add_domain', data, function(retuls) {
|
|
|
|
layer.close(loadT);
|
|
|
|
domainEdit(id, webname, retuls.msg, retuls.status);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 删除域名
|
|
|
|
* @param {Number} wid 网站ID
|
|
|
|
* @param {String} wname 主域名
|
|
|
|
* @param {String} domain 欲删除的域名
|
|
|
|
* @param {Number} port 对应的端口
|
|
|
|
*/
|
|
|
|
function delDomain(wid, wname, domain, port,type) {
|
|
|
|
var num = $("#checkDomain").find("tr").length;
|
|
|
|
if(num==1){
|
|
|
|
layer.msg(lan.site.domain_last_cannot);
|
|
|
|
}
|
|
|
|
layer.confirm(lan.site.domain_del_confirm,{icon:3,closeBtn:2}, function(index) {
|
|
|
|
var url = "/site/del_domain"
|
|
|
|
var data = "id=" + wid + "&webname=" + wname + "&domain=" + domain + "&port=" + port;
|
|
|
|
var loadT = layer.msg(lan.public.the_del,{time:0,icon:16});
|
|
|
|
$.post(url,data, function(ret) {
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(ret.msg,{icon:ret.status?1:2})
|
|
|
|
if(type == 1){
|
|
|
|
layer.close(loadT);
|
|
|
|
domainEdit(wid,wname)
|
|
|
|
}else{
|
|
|
|
layer.closeAll();
|
|
|
|
DomainRoot(wid, wname);
|
|
|
|
}
|
|
|
|
},'json');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 判断IP/域名格式
|
|
|
|
* @param {String} domain 源文本
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
function isDomain(domain) {
|
|
|
|
//domain = 'http://'+domain;
|
|
|
|
var re = new RegExp();
|
|
|
|
re.compile("^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
|
|
|
|
if (re.test(domain)) {
|
|
|
|
return (true);
|
|
|
|
} else {
|
|
|
|
return (false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
*设置数据库备份
|
|
|
|
* @param {Number} sign 操作标识
|
|
|
|
* @param {Number} id 编号
|
|
|
|
* @param {String} name 主域名
|
|
|
|
*/
|
|
|
|
function webBackup(id, name) {
|
|
|
|
var loadT =layer.msg('正在备份,请稍候...', {icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/to_backup', "id="+id, function(rdata) {
|
|
|
|
layer.closeAll();
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
|
|
|
|
getBackup(id);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*删除网站备份
|
|
|
|
* @param {Number} webid 网站编号
|
|
|
|
* @param {Number} id 文件编号
|
|
|
|
* @param {String} name 主域名
|
|
|
|
*/
|
|
|
|
function webBackupDelete(id,pid){
|
|
|
|
layer.confirm('真的要删除备份包吗?',{title:'删除备份文件!',icon:3,closeBtn:2},function(index){
|
|
|
|
var loadT =layer.msg('正在删除,请稍候...', {icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/del_backup','id='+id, function(rdata){
|
|
|
|
layer.closeAll();
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
getBackup(pid);
|
|
|
|
},'json');
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function getBackup(id,name,page) {
|
|
|
|
|
|
|
|
if(page == undefined){
|
|
|
|
page = '1';
|
|
|
|
}
|
|
|
|
$.post('/site/get_backup','search=' + id + '&limit=5&p='+page, function(frdata){
|
|
|
|
var body = '';
|
|
|
|
for (var i = 0; i < frdata.data.length; i++) {
|
|
|
|
if(frdata.data[i].type == '1') {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
var ftpdown = "<a class='btlink' href='/files/download?filename="+frdata.data[i].filename+"&name="+frdata.data[i].name+"' target='_blank'>下载</a> | ";
|
|
|
|
body += "<tr><td><span class='glyphicon glyphicon-file'></span>"+frdata.data[i].name+"</td>\
|
|
|
|
<td>" + (toSize(frdata.data[i].size)) + "</td>\
|
|
|
|
<td>" + frdata.data[i].addtime + "</td>\
|
|
|
|
<td class='text-right' style='color:#ccc'>"+ ftpdown + "<a class='btlink' href='javascript:;' onclick=\"webBackupDelete('" + frdata.data[i].id + "',"+id+")\">删除</a></td>\
|
|
|
|
</tr>"
|
|
|
|
}
|
|
|
|
var ftpdown = '';
|
|
|
|
frdata.page = frdata.page.replace(/'/g,'"').replace(/getBackup\(/g,"getBackup(" + id + ",0,");
|
|
|
|
|
|
|
|
if(name == 0){
|
|
|
|
var sBody = "<table width='100%' id='webBackupList' class='table table-hover'>\
|
|
|
|
<thead><tr><th>文件名称</th><th>文件大小</th><th>打包时间</th><th width='140px' class='text-right'>操作</th></tr></thead>\
|
|
|
|
<tbody id='webBackupBody' class='list-list'>"+body+"</tbody>\
|
|
|
|
</table>"
|
|
|
|
$("#webBackupList").html(sBody);
|
|
|
|
$(".page").html(frdata.page);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
layer.closeAll();
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
skin: 'demo-class',
|
|
|
|
area: '700px',
|
|
|
|
title: '打包备份',
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 0,
|
|
|
|
shadeClose: false,
|
|
|
|
content: "<div class='bt-form ptb15 mlr15' id='webBackup'>\
|
|
|
|
<button class='btn btn-default btn-sm' style='margin-right:10px' type='button' onclick=\"webBackup('" + frdata['site']['id'] + "','" + frdata['site']['name'] + "')\">打包备份</button>\
|
|
|
|
<div class='divtable mtb15' style='margin-bottom:0'><table width='100%' id='webBackupList' class='table table-hover'>\
|
|
|
|
<thead><tr><th>文件名称</th><th>文件大小</th><th>打包时间</th><th width='140px' class='text-right'>操作</th></tr></thead>\
|
|
|
|
<tbody id='webBackupBody' class='list-list'>"+body+"</tbody>\
|
|
|
|
</table><div class='page'>"+frdata.page+"</div></div></div>"
|
|
|
|
});
|
|
|
|
},'json');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function goSet(num) {
|
|
|
|
//取选中对象
|
|
|
|
var el = document.getElementsByTagName('input');
|
|
|
|
var len = el.length;
|
|
|
|
var data = '';
|
|
|
|
var a = '';
|
|
|
|
var count = 0;
|
|
|
|
//构造POST数据
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
|
|
if (el[i].checked == true && el[i].value != 'on') {
|
|
|
|
data += a + count + '=' + el[i].value;
|
|
|
|
a = '&';
|
|
|
|
count++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//判断操作类别
|
|
|
|
if(num==1){
|
|
|
|
reAdd(data);
|
|
|
|
}
|
|
|
|
else if(num==2){
|
|
|
|
shift(data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//设置默认文档
|
|
|
|
function setIndex(id){
|
|
|
|
var quanju = (id==undefined)?lan.site.public_set:lan.site.local_site;
|
|
|
|
var data=id==undefined?"":"id="+id;
|
|
|
|
$.post('/site?action=GetIndex',data,function(rdata){
|
|
|
|
rdata= rdata.replace(new RegExp(/(,)/g), "\n");
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
area: '500px',
|
|
|
|
title: lan.site.setindex,
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 5,
|
|
|
|
shadeClose: true,
|
|
|
|
content:"<form class='bt-form' id='SetIndex'><div class='SetIndex'>"
|
|
|
|
+"<div class='line'>"
|
|
|
|
+" <span class='tname' style='padding-right:2px'>"+lan.site.default_doc+"</span>"
|
|
|
|
+" <div class='info-r'>"
|
|
|
|
+" <textarea id='Dindex' name='files' style='line-height:20px'>"+rdata+"</textarea>"
|
|
|
|
+" <p>"+quanju+lan.site.default_doc_help+"</p>"
|
|
|
|
+" </div>"
|
|
|
|
+"</div>"
|
|
|
|
+"<div class='bt-form-submit-btn'>"
|
|
|
|
+" <button type='button' id='web_end_time' class='btn btn-danger btn-sm btn-title' onclick='layer.closeAll()'>"+lan.public.cancel+"</button>"
|
|
|
|
+" <button type='button' class='btn btn-success btn-sm btn-title' onclick='setIndexList("+id+")'>"+lan.public.ok+"</button>"
|
|
|
|
+"</div>"
|
|
|
|
+"</div></form>"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//设置默认站点
|
|
|
|
function SetDefaultSite(){
|
|
|
|
var name = $("#defaultSite").val();
|
|
|
|
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=SetDefaultSite','name='+name,function(rdata){
|
|
|
|
layer.closeAll();
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:5});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//默认站点
|
|
|
|
function GetDefaultSite(){
|
|
|
|
$.post('/site?action=GetDefaultSite','',function(rdata){
|
|
|
|
var opt = '<option value="off">'+lan.site.default_site_no+'</option>';
|
|
|
|
var selected = '';
|
|
|
|
for(var i=0;i<rdata.sites.length;i++){
|
|
|
|
selected = '';
|
|
|
|
if(rdata.defaultSite == rdata.sites[i].name) selected = 'selected';
|
|
|
|
opt += '<option value="' + rdata.sites[i].name + '" ' + selected + '>' + rdata.sites[i].name + '</option>';
|
|
|
|
}
|
|
|
|
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
area: '430px',
|
|
|
|
title: lan.site.default_site_yes,
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 5,
|
|
|
|
shadeClose: true,
|
|
|
|
content:'<div class="bt-form ptb15 pb70">\
|
|
|
|
<p class="line">\
|
|
|
|
<span class="tname text-right">'+lan.site.default_site+'</span>\
|
|
|
|
<select id="defaultSite" class="bt-input-text" style="width: 300px;">'+opt+'</select>\
|
|
|
|
</p>\
|
|
|
|
<ul class="help-info-text c6 plr20">\
|
|
|
|
<li>'+lan.site.default_site_help_1+'</li>\
|
|
|
|
<li>'+lan.site.default_site_help_2+'</li>\
|
|
|
|
</ul>\
|
|
|
|
<div class="bt-form-submit-btn">\
|
|
|
|
<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">'+lan.public.cancel+'</button>\
|
|
|
|
<button class="btn btn-success btn-sm btn-title" onclick="SetDefaultSite()">'+lan.public.ok+'</button>\
|
|
|
|
</div>\
|
|
|
|
</div>'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function setIndexList(id){
|
|
|
|
var Dindex = $("#Dindex").val().replace(new RegExp(/(\n)/g), ",");
|
|
|
|
if(id == undefined ){
|
|
|
|
var data="id=&index="+Dindex;
|
|
|
|
} else{
|
|
|
|
var data="id="+id+"&index="+Dindex;
|
|
|
|
}
|
|
|
|
var loadT= layer.load(2);
|
|
|
|
$.post('/site/set_index',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
var ico = rdata.status? 1:5;
|
|
|
|
layer.msg(rdata.msg,{icon:ico});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*站点修改*/
|
|
|
|
function webEdit(id,website,endTime,addtime){
|
|
|
|
var eMenu = '';
|
|
|
|
eMenu = "<p onclick='dirBinding("+id+")' title='子目录绑定'>子目录绑定</p>"
|
|
|
|
+"<p onclick='webPathEdit("+id+")' title='网站目录'>网站目录</p>"
|
|
|
|
+"<p onclick='limitNet("+id+")' title='流量限制'>流量限制</p>"
|
|
|
|
+"<p onclick=\"rewrite('"+website+"')\" title='伪静态'>伪静态</p>"
|
|
|
|
+"<p onclick='setIndexEdit("+id+")' title='默认文档'>默认文档</p>"
|
|
|
|
+"<p onclick=\"configFile('"+website+"')\" title='配置文件'>配置文件</p>"
|
|
|
|
+"<p onclick=\"setSSL("+id+",'"+website+"')\" title='SSL'>SSL</p>"
|
|
|
|
+"<p onclick=\"phpVersion('"+website+"')\" title='PHP版本'>PHP版本</p>"
|
|
|
|
// +"<p onclick=\"to301('"+website+"')\" title='重定向'>重定向</p>"
|
|
|
|
// +"<p onclick=\"proxyList('"+website+"')\" title='反向代理'>反向代理</p>"
|
|
|
|
+"<p id='site_"+id+"' onclick=\"security('"+id+"','"+website+"')\" title='防盗链'>防盗链</p>"
|
|
|
|
+"<p id='site_"+id+"' onclick=\"getSiteLogs('"+website+"')\" title='查看站点请求日志'>响应日志</p>";
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
area: '640px',
|
|
|
|
title: '站点修改['+website+'] -- 添加时间['+addtime+']',
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 0,
|
|
|
|
content: "<div class='bt-form'>"
|
|
|
|
+"<div class='bt-w-menu pull-left' style='height: 565px;'>"
|
|
|
|
+" <p class='bgw' onclick=\"domainEdit(" + id + ",'" + website + "')\">"+lan.site.domain_man+"</p>"
|
|
|
|
+" "+eMenu+""
|
|
|
|
+"</div>"
|
|
|
|
+"<div id='webedit-con' class='bt-w-con webedit-con pd15'></div>"
|
|
|
|
+"</div>"
|
|
|
|
});
|
|
|
|
domainEdit(id,website);
|
|
|
|
//域名输入提示
|
|
|
|
var placeholder = "<div class='placeholder'>每行填写一个域名,默认为80端口<br>泛解析添加方法 *.domain.com<br>如另加端口格式为 www.domain.com:88</div>";
|
|
|
|
$('#newdomain').after(placeholder);
|
|
|
|
$(".placeholder").click(function(){
|
|
|
|
$(this).hide();
|
|
|
|
$('#newdomain').focus();
|
|
|
|
});
|
|
|
|
$('#newdomain').focus(function() {
|
|
|
|
$(".placeholder").hide();
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#newdomain').blur(function() {
|
|
|
|
if($(this).val().length==0){
|
|
|
|
$(".placeholder").show();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
//切换
|
|
|
|
var $p = $(".bt-w-menu p");
|
|
|
|
$p.click(function(){
|
|
|
|
$(this).addClass("bgw").siblings().removeClass("bgw");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//取网站日志
|
|
|
|
function getSiteLogs(siteName){
|
|
|
|
var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/get_logs',{siteName:siteName},function(logs){
|
|
|
|
console.log(logs);
|
|
|
|
layer.close(loadT);
|
|
|
|
if(logs.status !== true){
|
|
|
|
logs.msg = '';
|
|
|
|
}
|
|
|
|
if (logs.msg == '') logs.msg = '当前没有日志.';
|
|
|
|
var phpCon = '<textarea wrap="off" readonly="" style="white-space: pre;margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+logs.msg+'</textarea>';
|
|
|
|
$("#webedit-con").html(phpCon);
|
|
|
|
var ob = document.getElementById('error_log');
|
|
|
|
ob.scrollTop = ob.scrollHeight;
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//防盗链
|
|
|
|
function security(id,name){
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/get_security',{id:id,name:name},function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
var mbody = '<div>'
|
|
|
|
+'<p style="margin-bottom:8px"><span style="display: inline-block; width: 60px;">URL后缀</span><input class="bt-input-text" type="text" name="sec_fix" value="'+rdata.fix+'" style="margin-left: 5px;width: 425px;height: 30px;margin-right:10px;'+(rdata.status?'background-color: #eee;':'')+'" placeholder="多个请用逗号隔开,例:png,jpeg,jpg,gif,zip" '+(rdata.status?'readonly':'')+'></p>'
|
|
|
|
+'<p style="margin-bottom:8px"><span style="display: inline-block; width: 60px;">许可域名</span><input class="bt-input-text" type="text" name="sec_domains" value="'+rdata.domains+'" style="margin-left: 5px;width: 425px;height: 30px;margin-right:10px;'+(rdata.status?'background-color: #eee;':'')+'" placeholder="支持通配符,多个域名请用逗号隔开,例:*.test.com,test.com" '+(rdata.status?'readonly':'')+'></p>'
|
|
|
|
+'<div class="label-input-group ptb10"><label style="font-weight:normal"><input type="checkbox" name="sec_status" onclick="setSecurity(\''+name+'\','+id+')" '+(rdata.status?'checked':'')+'>启用防盗链</label></div>'
|
|
|
|
+'<ul class="help-info-text c7 ptb10">'
|
|
|
|
+'<li>默认允许资源被直接访问,即不限制HTTP_REFERER为空的请求</li>'
|
|
|
|
+'<li>多个URL后缀与域名请使用逗号(,)隔开,如: png,jpeg,zip,js</li>'
|
|
|
|
+'<li>当触发防盗链时,将直接返回404状态</li>'
|
|
|
|
+'</ul>'
|
|
|
|
+'</div>'
|
|
|
|
$("#webedit-con").html(mbody);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//设置防盗链
|
|
|
|
function setSecurity(name,id){
|
|
|
|
var data = {
|
|
|
|
fix:$("input[name='sec_fix']").val(),
|
|
|
|
domains:$("input[name='sec_domains']").val(),
|
|
|
|
status:$("input[name='sec_status']").val(),
|
|
|
|
name:name,
|
|
|
|
id:id
|
|
|
|
}
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/set_security',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
if(rdata.status) setTimeout(function(){Security(id,name);},1000);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//木马扫描
|
|
|
|
function CheckSafe(id,act){
|
|
|
|
if(act != undefined){
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=CheckSafe','id='+id,function(rdata){
|
|
|
|
$(".btnStart").hide()
|
|
|
|
setTimeout(function(){
|
|
|
|
CheckSafe(id);
|
|
|
|
},3000);
|
|
|
|
GetTaskCount();
|
|
|
|
layer.close(loadT)
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:5});
|
|
|
|
});
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$.post('/site?action=GetCheckSafe','id='+id,function(rdata){
|
|
|
|
var done = "<button type='button' class='btn btn-success btn-sm btnStart mr5' onclick=\"CheckSafe("+id+",1)\">"+lan.site.start_scan+"</button>\
|
|
|
|
<button type='button' class='btn btn-default btn-sm btnStart mr20' onclick=\"UpdateRulelist()\">"+lan.site.update_lib+"</button>\
|
|
|
|
<a class='f14 mr20' style='color:green;'>"+lan.site.scanned+":"+rdata.count+"</a><a class='f14' style='color:red;'>"+lan.site.risk_quantity+":"+rdata.error+"</a>";
|
|
|
|
|
|
|
|
if(rdata['scan']) done = "<a class='f14 mr20' style='color:green;'>"+lan.site.scanned+":"+rdata.count+"</a><a class='f14' style='color:red;'>"+lan.site.risk_quantity+":"+rdata.error+"</a>";
|
|
|
|
var echoHtml = "<div class='mtb15'>"
|
|
|
|
+ done
|
|
|
|
+"</div>"
|
|
|
|
for(var i=0;i<rdata.phpini.length;i++){
|
|
|
|
echoHtml += "<tr><td>"+lan.site.danger_fun+"</td><td>"+lan.site.danger+"</td><td>"+lan.site.danger_fun_no+":"+rdata.phpini[i].function+"<br>"+lan.site.file+":<a style='color: red;' href='javascript:;' onclick=\"OnlineEditFile(0,'/www/server/php/"+rdata.phpini[i].version+"/etc/php.ini')\">/www/server/php/"+rdata.phpini[i].version+"/etc/php.ini</a></td></tr>";
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!rdata.sshd){
|
|
|
|
echoHtml += "<tr><td>"+lan.site.ssh_port+"</td><td>"+lan.site.high_risk+"</td><td>"+lan.site.sshd_tampering+"</td></tr>";
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!rdata.userini){
|
|
|
|
echoHtml += "<tr><td>"+lan.site.xss_attack+"</td><td>"+lan.site.danger+"</td><td>"+lan.site.site_xss_attack+"</td></tr>";
|
|
|
|
}
|
|
|
|
|
|
|
|
for(var i=0;i<rdata.data.length;i++){
|
|
|
|
echoHtml += "<tr><td>"+rdata.data[i].msg+"</td><td>"+rdata.data[i].level+"</td><td>文件:<a style='color: red;' href='javascript:;' onclick=\"OnlineEditFile(0,'"+rdata.data[i].filename+"')\">"+rdata.data[i].filename+"</a><br>"+lan.site.mod_time+":"+rdata.data[i].etime+"<br>"+lan.site.code+":"+rdata.data[i].code+"</td></tr>";
|
|
|
|
}
|
|
|
|
|
|
|
|
var body = "<div>"
|
|
|
|
+"<div class='divtable mtb15'><table class='table table-hover' width='100%' style='margin-bottom:0'>"
|
|
|
|
+"<thead><tr><th width='100px'>"+lan.site.behavior+"</th><th width='70px'>"+lan.site.risk+"</th><th>"+lan.site.details+"</th></tr></thead>"
|
|
|
|
+"<tbody id='checkDomain'>" + echoHtml + "</tbody>"
|
|
|
|
+"</table></div>"
|
|
|
|
|
|
|
|
$("#webedit-con").html(body);
|
|
|
|
$(".btnStart").click(function(){
|
|
|
|
fly('btnStart');
|
|
|
|
});
|
|
|
|
if(rdata['scan']){
|
|
|
|
c = $("#site_"+id).attr('class');
|
|
|
|
if(c != 'active') return;
|
|
|
|
setTimeout(function(){
|
|
|
|
CheckSafe(id);
|
|
|
|
},1000);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function UpdateRulelist(){
|
|
|
|
var loadT = layer.msg(lan.site.to_update,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=UpdateRulelist','',function(rdata){
|
|
|
|
layer.close(loadT)
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:5});
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//流量限制
|
|
|
|
function limitNet(id){
|
|
|
|
$.post('/site/get_limit_net','id='+id, function(rdata){
|
|
|
|
var status_selected = rdata.perserver != 0?'checked':'';
|
|
|
|
if(rdata.perserver == 0){
|
|
|
|
rdata.perserver = 300;
|
|
|
|
rdata.perip = 25;
|
|
|
|
rdata.limit_rate = 512;
|
|
|
|
}
|
|
|
|
var limitList = "<option value='1' "+((rdata.perserver == 0 || rdata.perserver == 300)?'selected':'')+">"+lan.site.limit_net_1+"</option>"
|
|
|
|
+"<option value='2' "+((rdata.perserver == 200)?'selected':'')+">"+lan.site.limit_net_2+"</option>"
|
|
|
|
+"<option value='3' "+((rdata.perserver == 50)?'selected':'')+">"+lan.site.limit_net_3+"</option>"
|
|
|
|
+"<option value='4' "+((rdata.perserver == 500)?'selected':'')+">"+lan.site.limit_net_4+"</option>"
|
|
|
|
+"<option value='5' "+((rdata.perserver == 400)?'selected':'')+">"+lan.site.limit_net_5+"</option>"
|
|
|
|
+"<option value='6' "+((rdata.perserver == 60)?'selected':'')+">"+lan.site.limit_net_6+"</option>"
|
|
|
|
+"<option value='7' "+((rdata.perserver == 150)?'selected':'')+">"+lan.site.limit_net_7+"</option>"
|
|
|
|
var body = "<div class='dirBinding flow c4'>"
|
|
|
|
+'<p class="label-input-group ptb10"><label style="font-weight:normal"><input type="checkbox" name="status" '+status_selected+' onclick="saveLimitNet('+id+')" style="width:15px;height:15px;margin-right:5px" />'+lan.site.limit_net_8+'</label></p>'
|
|
|
|
+"<p class='line' style='padding:10px 0'><span class='span_tit mr5'>"+lan.site.limit_net_9+":</span><select class='bt-input-text mr20' name='limit' style='width:90px'>"+limitList+"</select></p>"
|
|
|
|
+"<p class='line' style='padding:10px 0'><span class='span_tit mr5'>"+lan.site.limit_net_10+":</span><input class='bt-input-text mr20' style='width: 90px;' type='number' name='perserver' value='"+rdata.perserver+"' /></p>"
|
|
|
|
+"<p class='line' style='padding:10px 0'><span class='span_tit mr5'>"+lan.site.limit_net_12+":</span><input class='bt-input-text mr20' style='width: 90px;' type='number' name='perip' value='"+rdata.perip+"' /></p>"
|
|
|
|
+"<p class='line' style='padding:10px 0'><span class='span_tit mr5'>"+lan.site.limit_net_14+":</span><input class='bt-input-text mr20' style='width: 90px;' type='number' name='limit_rate' value='"+rdata.limit_rate+"' /></p>"
|
|
|
|
+"<button class='btn btn-success btn-sm mt10' onclick='saveLimitNet("+id+",1)'>"+lan.public.save+"</button>"
|
|
|
|
+"</div>"
|
|
|
|
+"<ul class='help-info-text c7 mtb15'><li>"+lan.site.limit_net_11+"</li><li>"+lan.site.limit_net_13+"</li><li>"+lan.site.limit_net_15+"</li></ul>"
|
|
|
|
$("#webedit-con").html(body);
|
|
|
|
|
|
|
|
$("select[name='limit']").change(function(){
|
|
|
|
var type = $(this).val();
|
|
|
|
perserver = 300;
|
|
|
|
perip = 25;
|
|
|
|
limit_rate = 512;
|
|
|
|
switch(type){
|
|
|
|
case '1':
|
|
|
|
perserver = 300;
|
|
|
|
perip = 25;
|
|
|
|
limit_rate = 512;
|
|
|
|
break;
|
|
|
|
case '2':
|
|
|
|
perserver = 200;
|
|
|
|
perip = 10;
|
|
|
|
limit_rate = 1024;
|
|
|
|
break;
|
|
|
|
case '3':
|
|
|
|
perserver = 50;
|
|
|
|
perip = 3;
|
|
|
|
limit_rate = 2048;
|
|
|
|
break;
|
|
|
|
case '4':
|
|
|
|
perserver = 500;
|
|
|
|
perip = 10;
|
|
|
|
limit_rate = 2048;
|
|
|
|
break;
|
|
|
|
case '5':
|
|
|
|
perserver = 400;
|
|
|
|
perip = 15;
|
|
|
|
limit_rate = 1024;
|
|
|
|
break;
|
|
|
|
case '6':
|
|
|
|
perserver = 60;
|
|
|
|
perip = 10;
|
|
|
|
limit_rate = 512;
|
|
|
|
break;
|
|
|
|
case '7':
|
|
|
|
perserver = 150;
|
|
|
|
perip = 4;
|
|
|
|
limit_rate = 1024;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
$("input[name='perserver']").val(perserver);
|
|
|
|
$("input[name='perip']").val(perip);
|
|
|
|
$("input[name='limit_rate']").val(limit_rate);
|
|
|
|
});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//保存流量限制配置
|
|
|
|
function saveLimitNet(id, type){
|
|
|
|
var isChecked = $("input[name='status']").attr('checked');
|
|
|
|
if(isChecked == undefined || type == 1 ){
|
|
|
|
var data = 'id='+id+'&perserver='+$("input[name='perserver']").val()+'&perip='+$("input[name='perip']").val()+'&limit_rate='+$("input[name='limit_rate']").val();
|
|
|
|
var loadT = layer.msg(lan.public.config,{icon:16,time:10000})
|
|
|
|
$.post('/site/save_limit_net',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
limitNet(id);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
}else{
|
|
|
|
var loadT = layer.msg(lan.public.config,{icon:16,time:10000})
|
|
|
|
$.post('/site/close_limit_net',{id:id},function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
limitNet(id);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//子目录绑定
|
|
|
|
function dirBinding(id){
|
|
|
|
$.post('/site/get_dir_binding',{'id':id},function(data){
|
|
|
|
var rdata = data['data'];
|
|
|
|
var echoHtml = '';
|
|
|
|
for(var i=0;i<rdata.binding.length;i++){
|
|
|
|
echoHtml += "<tr><td>"+rdata.binding[i].domain+"</td><td>"+rdata.binding[i].port+"</td><td>"+rdata.binding[i].path+"</td><td class='text-right'><a class='btlink' href='javascript:setDirRewrite("+rdata.binding[i].id+");'>伪静态</a> | <a class='btlink' href='javascript:delDirBind("+rdata.binding[i].id+","+id+");'>删除</a></td></tr>";
|
|
|
|
}
|
|
|
|
|
|
|
|
var dirList = '';
|
|
|
|
for(var n=0;n<rdata.dirs.length;n++){
|
|
|
|
dirList += "<option value='"+rdata.dirs[n]+"'>"+rdata.dirs[n]+"</option>";
|
|
|
|
}
|
|
|
|
|
|
|
|
var body = "<div class='dirBinding c5'>"
|
|
|
|
+ "域名:<input class='bt-input-text mr20' type='text' name='domain' />"
|
|
|
|
+ "子目录:<select class='bt-input-text mr20' name='dirName'>"+dirList+"</select>"
|
|
|
|
+ "<button class='btn btn-success btn-sm' onclick='addDirBinding("+id+")'>添加</button>"
|
|
|
|
+ "</div>"
|
|
|
|
+ "<div class='divtable mtb15' style='height:470px;overflow:auto'><table class='table table-hover' width='100%' style='margin-bottom:0'>"
|
|
|
|
+ "<thead><tr><th>域名</th><th width='70'>端口</th><th width='100'>子目录</th><th width='100' class='text-right'>操作</th></tr></thead>"
|
|
|
|
+ "<tbody id='checkDomain'>" + echoHtml + "</tbody>"
|
|
|
|
+ "</table></div>";
|
|
|
|
|
|
|
|
$("#webedit-con").html(body);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//子目录伪静态
|
|
|
|
function setDirRewrite(id){
|
|
|
|
$.post('/site/get_dir_bind_rewrite','id='+id,function(rdata){
|
|
|
|
if(!rdata.status){
|
|
|
|
var confirmObj = layer.confirm('你真的要为这个子目录创建独立的伪静态规则吗?',{icon:3,closeBtn:2},function(){
|
|
|
|
$.post('/site/get_dir_bind_rewrite','id='+id+'&add=1',function(rdata){
|
|
|
|
layer.close(confirmObj);
|
|
|
|
showRewrite(rdata);
|
|
|
|
},'json');
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
showRewrite(rdata);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//显示伪静态
|
|
|
|
function showRewrite(rdata){
|
|
|
|
var rList = '';
|
|
|
|
for(var i=0;i<rdata.rlist.length;i++){
|
|
|
|
rList += "<option value='"+rdata.rlist[i]+"'>"+rdata.rlist[i]+"</option>";
|
|
|
|
}
|
|
|
|
var webBakHtml = "<div class='c5 plr15'>\
|
|
|
|
<div class='line'>\
|
|
|
|
<select class='bt-input-text mr20' id='myRewrite' name='rewrite' style='width:30%;'>"+rList+"</select>\
|
|
|
|
<textarea class='bt-input-text mtb15' style='height: 260px; width: 470px; line-height:18px;padding:5px;' id='rewriteBody'>"+rdata.data+"</textarea></div>\
|
|
|
|
<button id='SetRewriteBtn' class='btn btn-success btn-sm' onclick=\"SetRewrite('"+rdata.filename+"')\">保存</button>\
|
|
|
|
<ul class='help-info-text c7 ptb10'>\
|
|
|
|
<li>请选择您的应用,若设置伪静态后,网站无法正常访问,请尝试设置回default</li>\
|
|
|
|
<li>您可以对伪静态规则进行修改,修改完后保存即可。</li>\
|
|
|
|
</ul>\
|
|
|
|
</div>";
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
area: '500px',
|
|
|
|
title: '配置伪静态规则',
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 5,
|
|
|
|
shadeClose: true,
|
|
|
|
content:webBakHtml
|
|
|
|
});
|
|
|
|
|
|
|
|
$("#myRewrite").change(function(){
|
|
|
|
var rewriteName = $(this).val();
|
|
|
|
$.post('/files/get_body','path='+rdata['rewrite_dir']+'/'+rewriteName+'.conf',function(fileBody){
|
|
|
|
$("#rewriteBody").val(fileBody.data.data);
|
|
|
|
},'json');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//添加子目录绑定
|
|
|
|
function addDirBinding(id){
|
|
|
|
var domain = $("input[name='domain']").val();
|
|
|
|
var dirName = $("select[name='dirName']").val();
|
|
|
|
if(domain == '' || dirName == '' || dirName == null){
|
|
|
|
layer.msg(lan.site.d_s_empty,{icon:2});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var data = 'id='+id+'&domain='+domain+'&dirName='+dirName
|
|
|
|
$.post('/site/add_dir_bind',data,function(rdata){
|
|
|
|
dirBinding(id);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//删除子目录绑定
|
|
|
|
function delDirBind(id,siteId){
|
|
|
|
layer.confirm(lan.site.s_bin_del,{icon:3,closeBtn:2},function(){
|
|
|
|
$.post('/site/del_dir_bind','id='+id,function(rdata){
|
|
|
|
dirBinding(siteId);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//反向代理
|
|
|
|
function proxyList(siteName,type){
|
|
|
|
if(type == 1){
|
|
|
|
type = $("input[name='status']").attr('checked')?'0':'1';
|
|
|
|
toUrl = encodeURIComponent($("input[name='toUrl']").val());
|
|
|
|
toDomain = encodeURIComponent($("input[name='toDomain']").val());
|
|
|
|
var sub1 = encodeURIComponent($("input[name='sub1']").val());
|
|
|
|
var sub2 = encodeURIComponent($("input[name='sub2']").val());
|
|
|
|
var data = 'name='+siteName+'&type='+type+'&proxyUrl='+toUrl+'&toDomain=' + toDomain + '&sub1=' + sub1 + '&sub2=' + sub2;
|
|
|
|
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=SetProxy',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(rdata.status) {
|
|
|
|
Proxy(siteName);
|
|
|
|
}else{
|
|
|
|
$("input[name='status']").attr('checked',false)
|
|
|
|
}
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=GetProxy','name='+siteName,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(rdata.proxyUrl == null) rdata.proxyUrl = '';
|
|
|
|
var status_selected = rdata.status?'checked':'';
|
|
|
|
var disabled = rdata.status?'disabled':'';
|
|
|
|
var body = "<div>"
|
|
|
|
+"<p style='margin-bottom:8px'><span style='display: inline-block; width: 104px;'>"+lan.site.proxy_url+"</span><input "+disabled+" class='bt-input-text' type='text' name='toUrl' value='"+rdata.proxyUrl+"' style='margin-left: 5px;width: 380px;height: 30px;margin-right:10px;' placeholder='"+lan.site.proxy_url_info+"' /></p>"
|
|
|
|
+"<p style='margin-bottom:8px'><span style='display: inline-block; width: 104px;'>"+lan.site.proxy_domain+"</span><input "+disabled+" class='bt-input-text' type='text' name='toDomain' value='"+rdata.toDomain+"' style='margin-left: 5px;width: 380px;height: 30px;margin-right:10px;' placeholder='"+lan.site.proxy_domian_info+"' /></p>"
|
|
|
|
+"<p style='margin-bottom:8px'><span style='display: inline-block; width: 104px;'>"+lan.site.con_rep+"</span><input "+disabled+" class='bt-input-text' type='text' name='sub1' value='"+rdata.sub1+"' style='margin-left: 5px;width: 182px;height: 30px;margin-right:10px;' placeholder='"+lan.site.con_rep_info+"' />"
|
|
|
|
+"<input class='bt-input-text' type='text' name='sub2' "+disabled+" value='"+rdata.sub2+"' style='margin-left: 5px;width: 183px;height: 30px;margin-right:10px;' placeholder='"+lan.site.to_con+"' /></p>"
|
|
|
|
+'<div class="label-input-group ptb10"><label style="font-weight:normal"><input type="checkbox" name="status" '+status_selected+' onclick="Proxy(\''+siteName+'\',1)" />'+lan.site.proxy_enable+'</label><label style="margin-left: 18px;"><input '+(rdata.cache?'checked':'')+' type="checkbox" name="status" onclick="OpenCache(\''+siteName+'\',1)" />'+lan.site.proxy_cache+'</label></div>'
|
|
|
|
+'<ul class="help-info-text c7 ptb10">'
|
|
|
|
+'<li>'+lan.site.proxy_help_1+'</li>'
|
|
|
|
+'<li>'+lan.site.proxy_help_2+'</li>'
|
|
|
|
+'<li>'+lan.site.proxy_help_3+'</li>'
|
|
|
|
+'<li>'+lan.site.proxy_help_4+'</li>'
|
|
|
|
+'<li>'+lan.site.proxy_help_5+'</li>'
|
|
|
|
+'</ul>'
|
|
|
|
+"</div>";
|
|
|
|
$("#webedit-con").html(body);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//开启缓存
|
|
|
|
function OpenCache(siteName){
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=ProxyCache',{siteName:siteName},function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//301重定向
|
|
|
|
function to301(siteName,type){
|
|
|
|
if(type == 1){
|
|
|
|
type = $("input[name='status']").attr('checked')?'0':'1';
|
|
|
|
toUrl = encodeURIComponent($("input[name='toUrl']").val());
|
|
|
|
srcDomain = encodeURIComponent($("select[name='srcDomain']").val());
|
|
|
|
var data = 'siteName='+siteName+'&type='+type+'&toDomain='+toUrl+'&srcDomain='+srcDomain;
|
|
|
|
$.post('site?action=Set301Status',data,function(rdata){
|
|
|
|
To301(siteName);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=Get301Status','siteName='+siteName,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
var domain_tmp = rdata.domain.split(',');
|
|
|
|
var domains = '';
|
|
|
|
var selected = '';
|
|
|
|
for(var i=0;i<domain_tmp.length;i++){
|
|
|
|
selected = '';
|
|
|
|
if(domain_tmp[i] == rdata.src) selected = 'selected';
|
|
|
|
domains += "<option value='"+domain_tmp[i]+"' "+selected+">"+domain_tmp[i]+"</option>";
|
|
|
|
}
|
|
|
|
|
|
|
|
if(rdata.url == null) rdata.url = '';
|
|
|
|
var status_selected = rdata.status?'checked':'';
|
|
|
|
var isRead = rdata.status?'readonly':'';
|
|
|
|
var body = "<div>"
|
|
|
|
+"<p style='margin-bottom:8px'><span style='display: inline-block; width: 90px;'>"+lan.site.access_domain+"</span><select class='bt-input-text' name='srcDomain' style='margin-left: 5px;width: 380px;height: 30px;margin-right:10px;"+(rdata.status?'background-color: #eee;':'')+"' "+(rdata.status?'disabled':'')+"><option value='all'>"+lan.site.all_site+"</option>"+domains+"</select></p>"
|
|
|
|
+"<p style='margin-bottom:8px'><span style='display: inline-block; width: 90px;'>"+lan.site.target_url+"</span><input class='bt-input-text' type='text' name='toUrl' value='"+rdata.url+"' style='margin-left: 5px;width: 380px;height: 30px;margin-right:10px;"+(rdata.status?'background-color: #eee;':'')+"' placeholder='"+lan.site.eg_url+"' "+isRead+" /></p>"
|
|
|
|
+'<div class="label-input-group ptb10"><label style="font-weight:normal"><input type="checkbox" name="status" '+status_selected+' onclick="To301(\''+siteName+'\',1)" />'+lan.site.enable_301+'</label></div>'
|
|
|
|
+'<ul class="help-info-text c7 ptb10">'
|
|
|
|
+'<li>'+lan.site.to301_help_1+'</li>'
|
|
|
|
+'<li>'+lan.site.to301_help_2+'</li>'
|
|
|
|
+'</ul>'
|
|
|
|
+"</div>";
|
|
|
|
$("#webedit-con").html(body);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//文件验证
|
|
|
|
function file_check(){
|
|
|
|
$(".check_message").html('<div style="margin-left:100px">\
|
|
|
|
<input type="checkbox" name="checkDomain" id="checkDomain" checked="">\
|
|
|
|
<label class="mr20" for="checkDomain" style="font-weight:normal">提前校验域名(提前发现问题,减少失败率)</label>\
|
|
|
|
</div>');
|
|
|
|
$("#lets_help").html('<li>申请之前,请确保域名已解析,如未解析会导致审核失败</li>\
|
|
|
|
<li>Let\'s Encrypt免费证书,有效期3个月,支持多域名。默认会自动续签</li>\
|
|
|
|
<li>若您的站点使用了CDN或301重定向会导致续签失败</li>\
|
|
|
|
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li>');
|
|
|
|
}
|
|
|
|
|
|
|
|
dnsapis = {};
|
|
|
|
//DNS验证
|
|
|
|
function dns_check(){
|
|
|
|
var loadT = layer.msg('正在安装DNS组件,请稍候...',{icon:16,time:0,shade:0.3});
|
|
|
|
$.post('/site?action=GetDnsApi',{},function(rdata){
|
|
|
|
layer.close(loadT)
|
|
|
|
var obody = '<span class="tname">选择DNS接口</span><select onchange="dns_select(this)" class="bt-input-text" style="width:120px" name="dns_select" id="dns_selects">';
|
|
|
|
for(var i=0;i<rdata.length;i++){
|
|
|
|
dnsapis[rdata[i]['name']] = rdata[i];
|
|
|
|
obody += '<option value="'+rdata[i]['name']+'" title="'+rdata[i]['ps']+'">'+rdata[i]['title']+'</option>';
|
|
|
|
}
|
|
|
|
obody += '</select><span id="dnsapi_edit"></span> 等待 <input type="number" class="bt-input-text" name="dnssleep" value="20" style="width:50px;vertical-align:-1px" min="10" max="120" />秒'
|
|
|
|
$(".check_message").html(obody);
|
|
|
|
$("#lets_help").html("<li>在DNS验证中,我们提供了3个自动化DNS-API,并提供了手动模式</li><li>使用DNS接口申请证书可自动续期,手动模式下证书到期后手需重新申请</li><li>使用【宝塔DNS云解析】接口前您需要确认当前要申请SSL证书的域名DNS为【云解析】</li><li>使用【DnsPod/阿里云DNS】接口前您需要先在弹出的窗口中设置对应接口的API</li>")
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//证书夹
|
|
|
|
function ssl_admin(siteName){
|
|
|
|
var loadT = layer.msg('正在提交任务...',{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.get('/site/get_cert_list',function(data){
|
|
|
|
layer.close(loadT);
|
|
|
|
var rdata = data['data'];
|
|
|
|
var tbody = '';
|
|
|
|
for(var i=0;i<rdata.length;i++){
|
|
|
|
tbody += '<tr><td>'+rdata[i].subject+'</td><td>'+rdata[i].dns.join('<br>')+'</td><td>'+rdata[i].notAfter+'</td><td>'+rdata[i].issuer+'</td><td style="text-align: right;"><a onclick="set_cert_ssl(\''+rdata[i].subject+'\',\''+siteName+'\')" class="btlink">部署</a> | <a onclick="remove_ssl(\''+rdata[i].subject+'\')" class="btlink">删除</a></td></tr>'
|
|
|
|
}
|
|
|
|
var txt = '<div class="mtb15" style="line-height:30px">\
|
|
|
|
<button style="margin-bottom: 7px;display:none;" class="btn btn-success btn-sm">添加</button>\
|
|
|
|
<div class="divtable"><table class="table table-hover"><thead><tr><th>域名</th><th>信任名称</th><th>到期时间</th><th>品牌</th><th class="text-right" width="75">操作</th></tr></thead>\
|
|
|
|
<tbody>'+tbody+'</tbody>\
|
|
|
|
</table></div></div>';
|
|
|
|
$(".tab-con").html(txt);
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//删除证书
|
|
|
|
function remove_ssl(certName){
|
|
|
|
SafeMessage('删除证书','您真的要从证书夹删除证书吗?',function(){
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/ssl?action=RemoveCert',{certName:certName},function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
$("#ssl_admin").click();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//从证书夹部署
|
|
|
|
function set_cert_ssl(certName,siteName){
|
|
|
|
var loadT = layer.msg('正在部署证书...',{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/ssl?action=SetCertToSite',{certName:certName,siteName:siteName},function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//宝塔ssl
|
|
|
|
function setSSL(id,siteName){
|
|
|
|
var mBody = '<div class="tab-nav">\
|
|
|
|
<span class="on" onclick="opSSL(\'lets\','+id+',\''+siteName+'\')">Let\'s Encrypt</span>\
|
|
|
|
<span onclick="opSSL(\'other\','+id+',\''+siteName+'\')">其他证书</span>\
|
|
|
|
<span class="sslclose" onclick="closeSSL(\''+siteName+'\')">关闭</span>\
|
|
|
|
<span id="ssl_admin" onclick="ssl_admin(\''+siteName+'\')">证书夹</span>'
|
|
|
|
+ '<div class="ss-text pull-right mr30" style="position: relative;top:-4px">\
|
|
|
|
<em>强制HTTPS</em>\
|
|
|
|
<div class="ssh-item">\
|
|
|
|
<input class="btswitch btswitch-ios" id="toHttps" type="checkbox">\
|
|
|
|
<label class="btswitch-btn" for="toHttps" onclick="httpToHttps(\''+siteName+'\')"></label>\
|
|
|
|
</div>\
|
|
|
|
</div></div>'
|
|
|
|
+ '<div class="tab-con" style="padding: 0px;"></div>'
|
|
|
|
|
|
|
|
$("#webedit-con").html(mBody);
|
|
|
|
opSSL('lets',id,siteName);
|
|
|
|
$(".tab-nav span").click(function(){
|
|
|
|
$(this).addClass("on").siblings().removeClass("on");
|
|
|
|
});
|
|
|
|
// var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
// $.post('/site?action=GetSSL','siteName='+siteName,function(rdata){
|
|
|
|
// layer.close(loadT);
|
|
|
|
// $("#toHttps").attr('checked',rdata.httpTohttps);
|
|
|
|
// switch(rdata.type){
|
|
|
|
// case -1:
|
|
|
|
// $(".tab-nav span").eq(3).addClass("on").siblings().removeClass("on");
|
|
|
|
// var txt = "<div class='mtb15' style='line-height:30px'>"+lan.site.ssl_help_1+"</div>";
|
|
|
|
// $(".tab-con").html(txt);
|
|
|
|
// break;
|
|
|
|
// case 1:
|
|
|
|
// $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on");
|
|
|
|
// setCookie('letssl',1);
|
|
|
|
// var lets = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>'
|
|
|
|
// + '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>'
|
|
|
|
// + '</div>'
|
|
|
|
// + '<ul class="help-info-text c7 pull-left"><li>'+lan.site.ssl_help_2+'</li><li>'+lan.site.ssl_help_3+'</li></ul>'
|
|
|
|
// $(".tab-con").html(lets);
|
|
|
|
// $(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('CloseSSLConf','"+siteName+"')\" style='margin-left:10px'>"+lan.site.ssl_close+"</button></div>");
|
|
|
|
// break;
|
|
|
|
// case 0:
|
|
|
|
// $(".tab-nav span").eq(2).addClass("on").siblings().removeClass("on");
|
|
|
|
// BTssl('other',id,siteName);
|
|
|
|
// break;
|
|
|
|
// case 2:
|
|
|
|
// $(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on");
|
|
|
|
// BTssl('a',id,siteName);
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//关闭SSL
|
|
|
|
function closeSSL(siteName){
|
|
|
|
var txt = "<div class='mtb15' style='line-height:30px'>本站点未设置SSL,如需设置SSL,请选择切换类目申请开启SSL<br/>\
|
|
|
|
<p style='color:red;'>关闭SSL以后,请务必清除浏览器缓存再访问站点</p>\
|
|
|
|
</div>";
|
|
|
|
setCookie('letssl',0);
|
|
|
|
$(".tab-con").html(txt);
|
|
|
|
}
|
|
|
|
|
|
|
|
// function closeSSL(siteName){
|
|
|
|
// var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
// $.post('site?action=GetSSL','siteName='+siteName,function(rdata){
|
|
|
|
// layer.close(loadT);
|
|
|
|
// switch(rdata.type){
|
|
|
|
// case -1:
|
|
|
|
// var txt = "<div class='mtb15' style='line-height:30px'>"+lan.site.ssl_help_1+"</div>";
|
|
|
|
// setCookie('letssl',0);
|
|
|
|
// $(".tab-con").html(txt);
|
|
|
|
// break;
|
|
|
|
// case 1:
|
|
|
|
// var txt = "Let's Encrypt";
|
|
|
|
// closeSSLHTML(txt,siteName);
|
|
|
|
// break;
|
|
|
|
// case 0:
|
|
|
|
// var txt = lan.site.other;
|
|
|
|
// closeSSLHTML(txt,siteName);
|
|
|
|
// break;
|
|
|
|
// case 2:
|
|
|
|
// var txt = lan.site.bt_ssl;
|
|
|
|
// closeSSLHTML(txt,siteName);
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
//设置httpToHttps
|
|
|
|
function httpToHttps(siteName){
|
|
|
|
var isHttps = $("#toHttps").attr('checked');
|
|
|
|
if(isHttps){
|
|
|
|
layer.confirm('关闭强制HTTPS后需要清空浏览器缓存才能看到效果,继续吗?',{icon:3,title:"关闭强制HTTPS"},function(){
|
|
|
|
$.post('site?action=CloseToHttps','siteName='+siteName,function(rdata){
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}else{
|
|
|
|
$.post('site?action=HttpToHttps','siteName='+siteName,function(rdata){
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//关闭SSL内容
|
|
|
|
function closeSSLHTML(txt,siteName){
|
|
|
|
$(".tab-con").html("<div class='line mtb15'>"+lan.get('ssl_enable',[txt])+"</div><div class='line mtb15'><button class='btn btn-success btn-sm' onclick=\"ocSSL('CloseSSLConf','"+siteName+"')\">"+lan.site.ssl_close+"</button></div>");
|
|
|
|
}
|
|
|
|
|
|
|
|
//SSL
|
|
|
|
function opSSL(type,id,siteName){
|
|
|
|
var b = '<div class="btssl"><div class="line mtb15"><span class="tname text-center">'+lan.site.domain+'</span><select id="domainlist" class="bt-input-text" style="width:220px"></select></div>'
|
|
|
|
+ '<div class="line mtb15" style="margin-left:80px"><button class="btn btn-success btn-sm btsslApply">'+lan.site.btapply+'</button></div>'
|
|
|
|
+ '<div class="btssllist mtb15"><div class="divtable"><div id="btssl_table_list" style="max-height:205px;border:#ddd 1px solid;overflow:auto"><table class="table table-hover" style="border:none"><thead><tr><th>域名</th><th>到期时间</th><th>状态<a href="https://www.bt.cn/bbs/thread-7860-1-1.html" class="bt-ico-ask" title="查看说明" target="_blank">?</a></th><th class="text-right" width="120">操作</th></tr></thead><tbody id="ssllist"></tbody></table></div></div></div>'
|
|
|
|
+ '<ul class="help-info-text c7 ptb15"><li>'+lan.site.bt_ssl_help_5+'(包括根域名)</li><li>'+lan.site.bt_ssl_help_6+'</li><li>'+lan.site.bt_ssl_help_7+'</li><li>建议使用二级域名为www的域名申请证书,此时系统会默认赠送顶级域名为可选名称</li><li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>'
|
|
|
|
+ '</div>';
|
|
|
|
|
|
|
|
var lets = '<div class="btssl"><div class="label-input-group">'
|
|
|
|
+ '<div class="line mtb10"><form><span class="tname text-center">验证方式</span><div style="margin-top:7px;display:inline-block"><input type="radio" name="c_type" onclick="file_check()" id="check_file" checked="checked" /><label class="mr20" for="check_file" style="font-weight:normal">文件验证</label><input type="radio" onclick="dns_check()" name="c_type" id="check_dns" /><label class="mr20" for="check_dns" style="font-weight:normal">DNS验证</label></div></form></div>'
|
|
|
|
+ '<div class="check_message line"><div style="margin-left:100px"><input type="checkbox" name="checkDomain" id="checkDomain" checked=""><label class="mr20" for="checkDomain" style="font-weight:normal">提前校验域名(提前发现问题,减少失败率)</label></div></div>'
|
|
|
|
+ '</div><div class="line mtb10"><span class="tname text-center">管理员邮箱</span><input class="bt-input-text" style="width:240px;" type="text" name="admin_email" /></div>'
|
|
|
|
+ '<div class="line mtb10"><span class="tname text-center">'+lan.site.domain+'</span><ul id="ymlist" style="padding: 5px 10px;max-height:180px;overflow:auto; width:240px;border:#ccc 1px solid;border-radius:3px"></ul></div>'
|
|
|
|
+ '<div class="line mtb10" style="margin-left:100px"><button class="btn btn-success btn-sm letsApply">'+lan.site.btapply+'</button></div>'
|
|
|
|
+ '<ul class="help-info-text c7" id="lets_help"><li>'+lan.site.bt_ssl_help_5+'</li><li>'+lan.site.bt_ssl_help_8+'</li><li>'+lan.site.bt_ssl_help_9+'</li><li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>'
|
|
|
|
+ '</div>';
|
|
|
|
|
|
|
|
var other = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text"></textarea></div>'
|
|
|
|
+ '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text"></textarea></div>'
|
|
|
|
+ '<div class="ssl-btn pull-left mtb15" style="width:100%"><button class="btn btn-success btn-sm" onclick="saveSSL(\''+siteName+'\')">'+lan.public.save+'</button></div></div>'
|
|
|
|
+ '<ul class="help-info-text c7 pull-left"><li>'+lan.site.bt_ssl_help_10+'</li><li>如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书</li><li>PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt</li><li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>';
|
|
|
|
switch(type){
|
|
|
|
case 'b':
|
|
|
|
$(".tab-con").html(b);
|
|
|
|
var opt = '';
|
|
|
|
$.get('/data?action=getData&table=domain&list=True&search=' + id, function(rdata) {
|
|
|
|
for(var i=0;i<rdata.length;i++){
|
|
|
|
var isIP = isValidIP(rdata[i].name);
|
|
|
|
var x = isContains(rdata[i].name, '*');
|
|
|
|
if(!isIP && !x){
|
|
|
|
opt+='<option>'+rdata[i].name+'</option>'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$("#domainlist").html(opt);
|
|
|
|
})
|
|
|
|
getSSLlist(siteName);
|
|
|
|
$(".btsslApply").click(function(){
|
|
|
|
var ym = $("#domainlist").val();
|
|
|
|
if(ym.indexOf('www.') != -1){
|
|
|
|
var len = $("#domainlist")[0].length;
|
|
|
|
var rootDomain = ym.split(/www\./)[1];
|
|
|
|
var mn = 0;
|
|
|
|
for(var i=0;i<len;i++){
|
|
|
|
if($("#domainlist")[0][i].innerText == rootDomain) mn++;
|
|
|
|
}
|
|
|
|
if(mn < 1){
|
|
|
|
layer.msg('您为域名['+ym+']申请证书,但程序检测到您没有将其根域名['+rootDomain+']绑定并解析到站点,这会导致证书签发失败!',{icon:2,time:5000});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$.post("/data?action=getKey","table=sites&key=path&id="+id,function(rdata){
|
|
|
|
//第一步
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_1,{icon:16,time:0,shade:0.3});
|
|
|
|
$.post("/ssl?action=GetDVSSL","domain="+ym+"&path="+rdata,function(tdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(tdata.status){
|
|
|
|
layer.msg(tdata.msg,{icon:1});
|
|
|
|
var partnerOrderId = tdata.data.partnerOrderId;
|
|
|
|
//第二步
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_2,{icon:16,time:0,shade:0.3});
|
|
|
|
$.post("/ssl?action=Completed","partnerOrderId="+partnerOrderId+"&siteName="+siteName,function(ydata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(!ydata.status){
|
|
|
|
layer.msg(ydata.msg,{icon:2});
|
|
|
|
getSSLlist(siteName);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
//第三步
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_3,{icon:16,time:0,shade:0.3});
|
|
|
|
$.post("/ssl?action=GetSSLInfo","partnerOrderId="+partnerOrderId+"&siteName="+siteName,function(zdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(zdata.msg,{icon:zdata.status?1:2});
|
|
|
|
getSSLlist(siteName);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
layer.msg(tdata.msg,{icon:2})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
case 'lets':
|
|
|
|
/*
|
|
|
|
$.get("/ssl?action=GetUserInfo",function(sdata){
|
|
|
|
if(!sdata.status){
|
|
|
|
$(".tab-con").html(a);
|
|
|
|
$(".help-info-text").html("<li>"+lan.site.+"</li><li>let's Encrypt证书有效期为3个月</li><li>3个月有效期后自动续签</li>");
|
|
|
|
$("#btusername").blur(function(){
|
|
|
|
if(!(/^1(3|4|5|7|8)\d{9}$/.test($(this).val()))){
|
|
|
|
$("#btusername").css("border","1px solid #e53451");
|
|
|
|
$("#btusername").next("i").html(lan.site.phone_input);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
$("#btusername").removeAttr("style").css("width","200px");
|
|
|
|
$("#btusername").next("i").empty();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
$(".btlogin").click(function(){
|
|
|
|
var data = "username="+$("#btusername").val()+"&password="+$("#btpassword").val();
|
|
|
|
$.post("/ssl?action=GetToken",data,function(tdata){
|
|
|
|
if(tdata.status){
|
|
|
|
layer.msg(tdata.msg,{icon:1});
|
|
|
|
BTssl('lets',id,siteName);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
layer.msg(tdata.msg,{icon:2})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
else{}
|
|
|
|
});*/
|
|
|
|
if(getCookie('letssl') == 1){
|
|
|
|
$.post('site?action=GetSSL','siteName='+siteName,function(rdata){
|
|
|
|
if(rdata.csr === false){
|
|
|
|
setCookie('letssl',0);
|
|
|
|
opSSL(type,id,siteName);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var lets = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>'
|
|
|
|
+ '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>'
|
|
|
|
+ '</div>'
|
|
|
|
+ '<ul class="help-info-text c7 pull-left"><li>'+lan.site.ssl_help_2+'</li><li>'+lan.site.ssl_help_3+'</li></ul>';
|
|
|
|
$(".tab-con").html(lets);
|
|
|
|
$(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('CloseSSLConf','"+siteName+"')\" style='margin-left:10px'>"+lan.site.ssl_close+"</button></div>");
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
$(".tab-con").html(lets);
|
|
|
|
var opt='';
|
|
|
|
$.post('/site/get_site_domains',{id:id}, function(rdata) {
|
|
|
|
var data = rdata['data'];
|
|
|
|
for(var i=0;i<data.domains.length;i++){
|
|
|
|
var isIP = isValidIP(data.domains[i].name);
|
|
|
|
var x = isContains(data.domains[i].name, '*');
|
|
|
|
if(!isIP && !x){
|
|
|
|
opt+='<li style="line-height:26px"><input type="checkbox" style="margin-right:5px; vertical-align:-2px" value="'+data.domains[i].name+'">'+data.domains[i].name+'</li>'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$("input[name='admin_email']").val(data.email);
|
|
|
|
$("#ymlist").html(opt);
|
|
|
|
$("#ymlist li input").click(function(e){
|
|
|
|
e.stopPropagation();
|
|
|
|
})
|
|
|
|
$("#ymlist li").click(function(){
|
|
|
|
var o = $(this).find("input");
|
|
|
|
if(o.prop("checked")){
|
|
|
|
o.prop("checked",false)
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
o.prop("checked",true);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
$(".letsApply").click(function(){
|
|
|
|
var c = $("#ymlist input[type='checkbox']");
|
|
|
|
var str = [];
|
|
|
|
var domains = '';
|
|
|
|
for(var i=0; i<c.length; i++){
|
|
|
|
if(c[i].checked){
|
|
|
|
str.push(c[i].value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
domains = JSON.stringify(str);
|
|
|
|
newSSL(siteName,domains);
|
|
|
|
|
|
|
|
})
|
|
|
|
},'json');
|
|
|
|
break;
|
|
|
|
case 'other':
|
|
|
|
$(".tab-con").html(other);
|
|
|
|
var key = '';
|
|
|
|
var csr = '';
|
|
|
|
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('site/get_ssl','siteName='+siteName,function(data){
|
|
|
|
// console.log(data);
|
|
|
|
layer.close(loadT);
|
|
|
|
var rdata = data['data'];
|
|
|
|
if(rdata.status){
|
|
|
|
$(".ssl-btn").append("<button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>"+lan.site.ssl_close+"</button>");
|
|
|
|
}
|
|
|
|
if(rdata.key == false) rdata.key = '';
|
|
|
|
if(rdata.csr == false) rdata.csr = '';
|
|
|
|
$("#key").val(rdata.key);
|
|
|
|
$("#csr").val(rdata.csr);
|
|
|
|
},'json');
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
// table_fixed("btssl_table_list")
|
|
|
|
}
|
|
|
|
|
|
|
|
//取证书列表
|
|
|
|
function getSSLlist(siteName){
|
|
|
|
var tr='';
|
|
|
|
var loadT = layer.msg(lan.site.get_ssl_list,{icon:16,time:0,shade:0.3});
|
|
|
|
$.get("/ssl?action=GetOrderList&siteName="+siteName,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(rdata.status){
|
|
|
|
for(var i=0;i<rdata.data.length;i++){
|
|
|
|
var txt = '';
|
|
|
|
var tips = '';
|
|
|
|
var icoask = '';
|
|
|
|
txt = (rdata.data[i].stateName == lan.site.order_success) ? '<a href="javascript:onekeySSl(\''+rdata.data[i].partnerOrderId+'\',\''+siteName+'\');" class="btlink">'+lan.site.deploy+'</a>' : '';
|
|
|
|
if(rdata.data[i].stateName == lan.site.domain_wait) {
|
|
|
|
txt = '<a href="javascript:VerifyDomain(\''+rdata.data[i].partnerOrderId+'\',\''+siteName+'\');" class="btlink">'+lan.site.domain_validate+'</a>';
|
|
|
|
//tips = lan.site.domain_check;
|
|
|
|
//icoask = '<i class="ico-font-ask" title="'+tips+'">?</i>';
|
|
|
|
}
|
|
|
|
if(rdata.data[i].setup){
|
|
|
|
txt = lan.site.deployed+' | <a class="btlink" href="javascript:ocSSL(\'CloseSSLConf\',\''+siteName+'\')">'+lan.public.close+'</a></div>';
|
|
|
|
}
|
|
|
|
|
|
|
|
tr += '<tr><td>'+rdata.data[i].commonName+'</td><td>'+getLocalTime(rdata.data[i].endtime).split(" ")[0]+'</td><td title='+tips+'>'+rdata.data[i].stateName+icoask+'</td><td class="text-right">'+txt+'</td></tr>'
|
|
|
|
}
|
|
|
|
$("#ssllist").html(tr);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//一键部署证书
|
|
|
|
function onekeySSl(partnerOrderId,siteName){
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_3,{icon:16,time:0,shade:0.3});
|
|
|
|
$.post("/ssl?action=GetSSLInfo","partnerOrderId="+partnerOrderId+"&siteName="+siteName,function(zdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(zdata.msg,{icon:zdata.status?1:2});
|
|
|
|
getSSLlist(siteName);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
//验证域名
|
|
|
|
function VerifyDomain(partnerOrderId,siteName){
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_2,{icon:16,time:0,shade:0.3});
|
|
|
|
$.post("/ssl?action=Completed","partnerOrderId="+partnerOrderId+'&siteName='+siteName,function(ydata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(!ydata.status){
|
|
|
|
layer.msg(ydata.msg,{icon:2});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
//第三步
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_3,{icon:16,time:0,shade:0.3});
|
|
|
|
$.post("/ssl?action=GetSSLInfo","partnerOrderId="+partnerOrderId+"&siteName="+siteName,function(zdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(zdata.status) getSSLlist();
|
|
|
|
layer.msg(zdata.msg,{icon:zdata.status?1:2});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//开启与关闭SSL
|
|
|
|
function ocSSL(action,siteName){
|
|
|
|
var loadT = layer.msg('正在获取证书列表,请稍后..',{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post("/site/"+action,'siteName='+siteName+'&updateOf=1',function(rdata){
|
|
|
|
layer.close(loadT)
|
|
|
|
|
|
|
|
if(!rdata.status){
|
|
|
|
if(!rdata.out){
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
setSSL(siteName);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
data = "<p>证书获取失败:</p><hr />"
|
|
|
|
for(var i=0;i<rdata.out.length;i++){
|
|
|
|
data += "<p>域名: "+rdata.out[i].Domain+"</p>"
|
|
|
|
+ "<p>错误类型: "+rdata.out[i].Type+"</p>"
|
|
|
|
+ "<p>详情: "+rdata.out[i].Detail+"</p>"
|
|
|
|
+ "<hr />";
|
|
|
|
}
|
|
|
|
layer.msg(data,{icon:2,time:0,shade:0.3,shadeClose:true});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
setCookie('letssl',0);
|
|
|
|
// $.post('/system?action=ServiceAdmin','name='+getCookie('serverType')+'&type=reload',function(result){
|
|
|
|
// //setSSL(siteName);
|
|
|
|
// if(!result.status) layer.msg(result.msg,{icon:2});
|
|
|
|
// },'json');
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
if(action == 'close_ssl_conf'){
|
|
|
|
layer.msg('已关闭SSL,请务必清除浏览器缓存后再访问站点!',{icon:1,time:5000});
|
|
|
|
}
|
|
|
|
$(".bt-w-menu .bgw").click();
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//生成SSL
|
|
|
|
function newSSL(siteName,domains){
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_2,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
var force = '';
|
|
|
|
if($("#checkDomain").prop("checked")) force = '&force=true';
|
|
|
|
var email = $("input[name='admin_email']").val();
|
|
|
|
$.post('/site/create_let','siteName='+siteName+'&domains='+domains+'&updateOf=1&email='+email + force,function(rdata){
|
|
|
|
layer.close(loadT)
|
|
|
|
if(rdata.status){
|
|
|
|
var mykeyhtml = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>'
|
|
|
|
+ '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>'
|
|
|
|
+ '</div>'
|
|
|
|
+ '<ul class="help-info-text c7 pull-left"><li>'+lan.site.ssl_help_2+'</li><li>'+lan.site.ssl_help_3+'</li></ul>';
|
|
|
|
$(".btssl").html(mykeyhtml);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
// setCookie('letssl',1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!rdata.out){
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
//setSSL(siteName);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
data = "<p>"+rdata.msg+"</p><hr />"
|
|
|
|
if(rdata.err[0].length > 10) data += '<p style="color:red;">' + rdata.err[0].replace(/\n/g,'<br>') + '</p>';
|
|
|
|
if(rdata.err[1].length > 10) data += '<p style="color:red;">' + rdata.err[1].replace(/\n/g,'<br>') + '</p>';
|
|
|
|
// setCookie('letssl',0);
|
|
|
|
layer.msg(data,{icon:2,area:'500px',time:0,shade:0.3,shadeClose:true});
|
|
|
|
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//保存SSL
|
|
|
|
function saveSSL(siteName){
|
|
|
|
var data = 'type=1&siteName='+siteName+'&key='+encodeURIComponent($("#key").val())+'&csr='+encodeURIComponent($("#csr").val());
|
|
|
|
var loadT = layer.msg(lan.site.saving_txt,{icon:16,time:20000,shade: [0.3, '#000']})
|
|
|
|
$.post('/site/set_ssl',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(rdata.status){
|
|
|
|
layer.msg(rdata.msg,{icon:1});
|
|
|
|
$(".ssl-btn").find(".btn-default").remove();
|
|
|
|
$(".ssl-btn").append("<button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>"+lan.site.ssl_close+"</button>");
|
|
|
|
}else{
|
|
|
|
layer.msg(rdata.msg,{icon:2,time:0,shade:0.3,shadeClose:true});
|
|
|
|
}
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//更新SSL
|
|
|
|
function ChangeSaveSSL(siteName){
|
|
|
|
var loadT = layer.msg(lan.site.ssl_apply_4,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('site?action=CreateLet','siteName='+siteName+'&updateOf=2',function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//PHP版本
|
|
|
|
function phpVersion(siteName){
|
|
|
|
$.post('/site/get_site_php_version','siteName='+siteName,function(version){
|
|
|
|
// console.log(version);
|
|
|
|
if(version.status === false){
|
|
|
|
layer.msg(version.msg,{icon:5});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
$.post('/site/get_php_version',function(rdata){
|
|
|
|
var versionSelect = "<div class='webEdit-box'>\
|
|
|
|
<div class='line'>\
|
|
|
|
<span class='tname' style='width:100px'>"+lan.site.php_ver+"</span>\
|
|
|
|
<div class='info-r'>\
|
|
|
|
<select id='phpVersion' class='bt-input-text mr5' name='phpVersion' style='width:110px'>";
|
|
|
|
var optionSelect = '';
|
|
|
|
for(var i=0;i<rdata.length;i++){
|
|
|
|
optionSelect = version.phpversion == rdata[i].version?'selected':'';
|
|
|
|
versionSelect += "<option value='"+ rdata[i].version +"' "+ optionSelect +">"+ rdata[i].name +"</option>"
|
|
|
|
}
|
|
|
|
versionSelect += "</select>\
|
|
|
|
<button class='btn btn-success btn-sm' onclick=\"setPHPVersion('"+siteName+"')\">"+lan.site.switch+"</button>\
|
|
|
|
</div>\
|
|
|
|
<span id='php_w' style='color:red;margin-left: 32px;'></span>\
|
|
|
|
</div>\
|
|
|
|
<ul class='help-info-text c7 ptb10'>\
|
|
|
|
<li>"+lan.site.switch_php_help1+"</li>\
|
|
|
|
<li>"+lan.site.switch_php_help2+"</li>\
|
|
|
|
<li>"+lan.site.switch_php_help3+"</li>\
|
|
|
|
</ul>\
|
|
|
|
</div>\
|
|
|
|
</div>";
|
|
|
|
if(version.nodejsversion){
|
|
|
|
var nodejs_checked = '';
|
|
|
|
if(version.nodejs != -1) nodejs_checked = 'checked';
|
|
|
|
versionSelect += '<div class="webEdit-box padding-10">\
|
|
|
|
<div class="linex">\
|
|
|
|
<label style="font-weight:normal">\
|
|
|
|
<input type="checkbox" name="status" onclick="Nodejs(\''+siteName+'\')" style="width:15px;height:15px;" '+nodejs_checked+' />'+lan.site.enable_nodejs+'\
|
|
|
|
</label>\
|
|
|
|
</div>\
|
|
|
|
<ul class="help-info-text c7 ptb10">\
|
|
|
|
<li>'+lan.site.nodejs_help1+' '+version.nodejsversion+';</li>\
|
|
|
|
<li>'+lan.site.nodejs_help2+'</li>\
|
|
|
|
<li>'+lan.site.nodejs_help3+'</li>\
|
|
|
|
</ul>\
|
|
|
|
</div>'
|
|
|
|
}
|
|
|
|
$("#webedit-con").html(versionSelect);
|
|
|
|
//验证PHP版本
|
|
|
|
$("select[name='phpVersion']").change(function(){
|
|
|
|
if($(this).val() == '52'){
|
|
|
|
var msgerr = 'PHP5.2在您的站点有漏洞时有跨站风险,请尽量使用PHP5.3以上版本!';
|
|
|
|
$('#php_w').text(msgerr);
|
|
|
|
}else{
|
|
|
|
$('#php_w').text('');
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},'json');
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//设置PHP版本
|
|
|
|
function setPHPVersion(siteName){
|
|
|
|
var data = 'version='+$("#phpVersion").val()+'&siteName='+siteName;
|
|
|
|
var loadT = layer.msg('正在保存...',{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site/set_php_version',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//配置文件
|
|
|
|
function configFile(webSite){
|
|
|
|
var info = syncPost('/site/get_host_conf', {siteName:webSite});
|
|
|
|
$.post('/files/get_body','path='+info['host'],function(rdata){
|
|
|
|
var mBody = "<div class='webEdit-box padding-10'>\
|
|
|
|
<textarea style='height: 320px; width: 445px; margin-left: 20px;line-height:18px' id='configBody'>"+rdata.data.data+"</textarea>\
|
|
|
|
<div class='info-r'>\
|
|
|
|
<button id='SaveConfigFileBtn' class='btn btn-success btn-sm' style='margin-top:15px;'>保存</button>\
|
|
|
|
<ul class='help-info-text c7 ptb10'>\
|
|
|
|
<li>此处为站点主配置文件,若您不了解配置规则,请勿随意修改.</li>\
|
|
|
|
</ul>\
|
|
|
|
</div>\
|
|
|
|
</div>";
|
|
|
|
$("#webedit-con").html(mBody);
|
|
|
|
var editor = CodeMirror.fromTextArea(document.getElementById("configBody"), {
|
|
|
|
extraKeys: {"Ctrl-Space": "autocomplete"},
|
|
|
|
lineNumbers: true,
|
|
|
|
matchBrackets:true,
|
|
|
|
});
|
|
|
|
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
|
|
|
|
$("#SaveConfigFileBtn").click(function(){
|
|
|
|
$("#configBody").empty();
|
|
|
|
$("#configBody").text(editor.getValue());
|
|
|
|
saveConfigFile(webSite,rdata.data.encoding, info['host']);
|
|
|
|
})
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//保存配置文件
|
|
|
|
function saveConfigFile(webSite,encoding,path){
|
|
|
|
var data = 'encoding='+encoding+'&data='+encodeURIComponent($("#configBody").val())+'&path='+path;
|
|
|
|
var loadT = layer.msg('保存中...',{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/files/save_body',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(rdata.status){
|
|
|
|
layer.msg(rdata.msg,{icon:1});
|
|
|
|
}else{
|
|
|
|
layer.msg(rdata.msg,{icon:2,time:0,shade:0.3,shadeClose:true});
|
|
|
|
}
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
//伪静态
|
|
|
|
function rewrite(siteName){
|
|
|
|
$.post("/site/get_rewrite_list", 'siteName='+siteName,function(rdata){
|
|
|
|
var info = syncPost('/site/get_rewrite_conf', {siteName:siteName});
|
|
|
|
var filename = info['rewrite'];
|
|
|
|
$.post('/files/get_body','path='+filename,function(fileBody){
|
|
|
|
var centent = fileBody['data']['data'];
|
|
|
|
var rList = '';
|
|
|
|
for(var i=0;i<rdata.rewrite.length;i++){
|
|
|
|
if (i==0){
|
|
|
|
rList += "<option value='0'>"+rdata.rewrite[i]+"</option>";
|
|
|
|
} else {
|
|
|
|
rList += "<option value='"+rdata.rewrite[i]+"'>"+rdata.rewrite[i]+"</option>";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var webBakHtml = "<div class='bt-form'>\
|
|
|
|
<div class='line'>\
|
|
|
|
<select id='myRewrite' class='bt-input-text mr20' name='rewrite' style='width:30%;'>"+rList+"</select>\
|
|
|
|
<textarea class='bt-input-text' style='height: 260px; width: 480px; line-height:18px;margin-top:10px;padding:5px;' id='rewriteBody'>"+centent+"</textarea></div>\
|
|
|
|
<button id='SetRewriteBtn' class='btn btn-success btn-sm'>保存</button>\
|
|
|
|
<button id='SetRewriteBtnTel' class='btn btn-success btn-sm'>另存为模板</button>\
|
|
|
|
<ul class='help-info-text c7 ptb15'>\
|
|
|
|
<li>请选择您的应用,若设置伪静态后,网站无法正常访问,请尝试设置回default</li>\
|
|
|
|
<li>您可以对伪静态规则进行修改,修改完后保存即可。</li>\
|
|
|
|
</ul>\
|
|
|
|
</div>";
|
|
|
|
$("#webedit-con").html(webBakHtml);
|
|
|
|
|
|
|
|
var editor = CodeMirror.fromTextArea(document.getElementById("rewriteBody"), {
|
|
|
|
extraKeys: {"Ctrl-Space": "autocomplete"},
|
|
|
|
lineNumbers: true,
|
|
|
|
matchBrackets:true,
|
|
|
|
});
|
|
|
|
|
|
|
|
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
|
|
|
|
$("#SetRewriteBtn").click(function(){
|
|
|
|
$("#rewriteBody").empty();
|
|
|
|
$("#rewriteBody").text(editor.getValue());
|
|
|
|
setRewrite(filename);
|
|
|
|
});
|
|
|
|
$("#SetRewriteBtnTel").click(function(){
|
|
|
|
$("#rewriteBody").empty();
|
|
|
|
$("#rewriteBody").text(editor.getValue());
|
|
|
|
setRewriteTel();
|
|
|
|
});
|
|
|
|
|
|
|
|
$("#myRewrite").change(function(){
|
|
|
|
var rewriteName = $(this).val();
|
|
|
|
if(rewriteName == '0'){
|
|
|
|
rpath = filename;
|
|
|
|
}else{
|
|
|
|
var info = syncPost('/site/get_rewrite_tpl', {tplname:rewriteName});
|
|
|
|
if (!info['status']){
|
|
|
|
layer.msg(info['msg']);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
rpath = info['data'];
|
|
|
|
}
|
|
|
|
|
|
|
|
$.post('/files/get_body','path='+rpath,function(fileBody){
|
|
|
|
$("#rewriteBody").val(fileBody['data']['data']);
|
|
|
|
editor.setValue(fileBody['data']['data']);
|
|
|
|
},'json');
|
|
|
|
});
|
|
|
|
},'json');
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//设置伪静态
|
|
|
|
function setRewrite(filename){
|
|
|
|
var data = 'data='+encodeURIComponent($("#rewriteBody").val())+'&path='+filename+'&encoding=utf-8';
|
|
|
|
var loadT = layer.msg(lan.site.saving_txt,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/files/save_body',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
if(rdata.status){
|
|
|
|
layer.msg(rdata.msg,{icon:1});
|
|
|
|
}else{
|
|
|
|
layer.msg(rdata.msg,{icon:2,time:0,shade:0.3,shadeClose:true});
|
|
|
|
}
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
var aindex = null;
|
|
|
|
|
|
|
|
//保存为模板
|
|
|
|
function setRewriteTel(act){
|
|
|
|
if(act != undefined){
|
|
|
|
name = $("#rewriteName").val();
|
|
|
|
if(name == ''){
|
|
|
|
layer.msg(lan.site.template_empty,{icon:5});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var data = 'data='+encodeURIComponent($("#rewriteBody").val())+'&name='+name;
|
|
|
|
var loadT = layer.msg(lan.site.saving_txt,{icon:16,time:0,shade: [0.3, '#000']});
|
|
|
|
$.post('/site?action=SetRewriteTel',data,function(rdata){
|
|
|
|
layer.close(loadT);
|
|
|
|
layer.close(aindex);
|
|
|
|
|
|
|
|
layer.msg(rdata.msg,{icon:rdata.status?1:5});
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
aindex = layer.open({
|
|
|
|
type: 1,
|
|
|
|
shift: 5,
|
|
|
|
closeBtn: 2,
|
|
|
|
area: '320px', //宽高
|
|
|
|
title: '保存为Rewrite模板',
|
|
|
|
content: '<div class="bt-form pd20 pb70">\
|
|
|
|
<div class="line">\
|
|
|
|
<input type="text" class="bt-input-text" name="rewriteName" id="rewriteName" value="" placeholder="'+lan.site.template_name+'" style="width:100%" />\
|
|
|
|
</div>\
|
|
|
|
<div class="bt-form-submit-btn">\
|
|
|
|
<button type="button" class="btn btn-danger btn-sm">'+lan.public.cancel+'</button>\
|
|
|
|
<button type="button" id="rewriteNameBtn" class="btn btn-success btn-sm" onclick="SetRewriteTel(1)">'+lan.public.ok+'</button>\
|
|
|
|
</div>\
|
|
|
|
</div>'
|
|
|
|
});
|
|
|
|
$(".btn-danger").click(function(){
|
|
|
|
layer.close(aindex);
|
|
|
|
});
|
|
|
|
$("#rewriteName").focus().keyup(function(e){
|
|
|
|
if(e.keyCode == 13) $("#rewriteNameBtn").click();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
//修改默认页
|
|
|
|
function siteDefaultPage(){
|
|
|
|
stype = getCookie('serverType');
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
area: '460px',
|
|
|
|
title: '修改默认页',
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 0,
|
|
|
|
content: '<div class="changeDefault pd20">\
|
|
|
|
<button class="btn btn-default btn-sm mg10" style="width:188px" onclick="changeDefault(1)">默认文档</button>\
|
|
|
|
<button class="btn btn-default btn-sm mg10" style="width:188px" onclick="changeDefault(2)">404错误页</button>\
|
|
|
|
<button class="btn btn-default btn-sm mg10" style="width:188px" onclick="changeDefault('+(stype=='nginx'?3:4)+')">'+(stype=='nginx'?'Nginx':'Apache')+'空白页</button>\
|
|
|
|
<button class="btn btn-default btn-sm mg10" style="width:188px" onclick="changeDefault(5)">默认站点停止页</button>\
|
|
|
|
</div>'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function changeDefault(type){
|
|
|
|
var vhref='';
|
|
|
|
switch(type){
|
|
|
|
case 1:
|
|
|
|
vhref = '/www/server/panel/data/defaultDoc.html';
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
vhref = '/www/server/panel/data/404.html';
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
vhref = '/www/server/nginx/html/index.html';
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
vhref = '/www/server/apache/htdocs/index.html';
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
vhref = '/www/server/stop/index.html';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
onlineEditFile(0,vhref);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getClassType(){
|
|
|
|
var select = $('.site_type > select');
|
|
|
|
$.post('/site/get_site_types',function(rdata){
|
|
|
|
$(select).html('');
|
|
|
|
$(select).append('<option value="-1">全部分类</option>');
|
|
|
|
for (var i = 0; i<rdata.length; i++) {
|
|
|
|
$(select).append('<option value="'+rdata[i]['id']+'">'+rdata[i]['name']+'</option>');
|
|
|
|
}
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
getClassType();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function setClassType(){
|
|
|
|
$.post('/site/get_site_types',function(rdata){
|
|
|
|
|
|
|
|
var list = '';
|
|
|
|
for (var i = 0; i<rdata.length; i++) {
|
|
|
|
list +='<tr><td>' + rdata[i]['name'] + '</td>\
|
|
|
|
<td><a class="btlink edit_type" onclick="editClassType(\''+rdata[i]['id']+'\',\''+rdata[i]['name']+'\')">编辑</a> | <a class="btlink del_type" onclick="removeClassType(\''+rdata[i]['id']+'\',\''+rdata[i]['name']+'\')">删除</a>\
|
|
|
|
</td></tr>';
|
|
|
|
}
|
|
|
|
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
area: '350px',
|
|
|
|
title: '网站分类管理',
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 0,
|
|
|
|
content: '<div class="bt-form edit_site_type">\
|
|
|
|
<div class="divtable mtb15" style="overflow:auto">\
|
|
|
|
<div class="line "><div class="info-r ml0">\
|
|
|
|
<input name="type_name" class="bt-input-text mr5 type_name" placeholder="请填写分类名称" type="text" style="width:50%" value=""><button name="btn_submit" class="btn btn-success btn-sm mr5 ml5 btn_submit" onclick="addClassType();">添加</button></div>\
|
|
|
|
</div>\
|
|
|
|
<table id="type_table" class="table table-hover" width="100%">\
|
|
|
|
<thead><tr><th>名称</th><th width="80px">操作</th></tr></thead>\
|
|
|
|
<tbody>'+list+'</tbody>\
|
|
|
|
</table>\
|
|
|
|
</div>\
|
|
|
|
</div>'
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
function addClassType(){
|
|
|
|
var name = $("input[name=type_name]").val();
|
|
|
|
$.post('/site/add_site_type','name='+name, function(rdata){
|
|
|
|
showMsg(rdata.msg,function(){
|
|
|
|
if (rdata.status){
|
|
|
|
layer.closeAll();
|
|
|
|
setClassType();
|
|
|
|
getClassType();
|
|
|
|
}
|
|
|
|
},{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
}
|
|
|
|
|
|
|
|
function removeClassType(id,name){
|
|
|
|
if (id == 0){
|
|
|
|
layer.msg('默认分类不可删除/不可编辑!',{icon:2});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
layer.confirm('是否确定删除分类?',{title: '删除分类【'+ name +'】' }, function(){
|
|
|
|
$.post('/site/remove_site_type','id='+id, function(rdata){
|
|
|
|
showMsg(rdata.msg,function(){
|
|
|
|
if (rdata.status){
|
|
|
|
layer.closeAll();
|
|
|
|
setClassType();
|
|
|
|
getClassType();
|
|
|
|
}
|
|
|
|
},{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function editClassType(id,name){
|
|
|
|
if (id == 0){
|
|
|
|
layer.msg('默认分类不可删除/不可编辑!',{icon:2});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
layer.open({
|
|
|
|
type: 1,
|
|
|
|
area: '350px',
|
|
|
|
title: '修改分类管理【' + name + '】',
|
|
|
|
closeBtn: 2,
|
|
|
|
shift: 0,
|
|
|
|
content: "<form class='bt-form bt-form pd20 pb70' id='mod_pwd'>\
|
|
|
|
<div class='line'>\
|
|
|
|
<span class='tname'>分类名称</span>\
|
|
|
|
<div class='info-r'><input name=\"site_type_mod\" class='bt-input-text mr5' type='text' value='"+name+"' /></div>\
|
|
|
|
</div>\
|
|
|
|
<div class='bt-form-submit-btn'>\
|
|
|
|
<button id='site_type_mod' type='button' class='btn btn-success btn-sm btn-title'>提交</button>\
|
|
|
|
</div>\
|
|
|
|
</form>"
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#site_type_mod').unbind().click(function(){
|
|
|
|
var _name = $('input[name=site_type_mod]').val();
|
|
|
|
$.post('/site/modify_site_type_name','id='+id+'&name='+_name, function(rdata){
|
|
|
|
showMsg(rdata.msg,function(){
|
|
|
|
if (rdata.status){
|
|
|
|
layer.closeAll();
|
|
|
|
setClassType();
|
|
|
|
getClassType();
|
|
|
|
}
|
|
|
|
},{icon:rdata.status?1:2});
|
|
|
|
},'json');
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|