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

2271 lines
86 KiB

7 years ago
/**
* 取回网站数据列表
* @param {Number} page 当前页
* @param {String} search 搜索条件
*/
function getWeb(page, search, type_id) {
7 years ago
search = $("#SearchValue").prop("value");
page = page == undefined ? '1':page;
6 years ago
var order = getCookie('order');
7 years ago
if(order){
order = '&order=' + order;
6 years ago
} else {
7 years ago
order = '';
}
6 years ago
var type = '';
if ( typeof(type_id) == 'undefined' ){
type = '&type_id=0';
} else {
type = '&type_id='+type_id;
}
7 years ago
var sUrl = '/site/list';
var pdata = 'limit=10&p=' + page + '&search=' + search + order + type;
7 years ago
var loadT = layer.load();
//取回数据
7 years ago
$.post(sUrl, pdata, function(data) {
7 years ago
layer.close(loadT);
//构造数据列表
6 years ago
var body = '';
$("#webBody").html(body);
7 years ago
for (var i = 0; i < data.data.length; i++) {
//当前站点状态
6 years ago
if (data.data[i].status == '正在运行' || data.data[i].status == '1') {
var status = "<a href='javascript:;' title='停用这个站点' onclick=\"webStop(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:rgb(92, 184, 92)'>运行中</span><span style='color:rgb(92, 184, 92)' class='glyphicon glyphicon-play'></span></a>";
7 years ago
} else {
6 years ago
var status = "<a href='javascript:;' title='启用这个站点' onclick=\"webStart(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:red'>已停止</span><span style='color:rgb(255, 0, 0);' class='glyphicon glyphicon-pause'></span></a>";
7 years ago
}
//是否有备份
if (data.data[i].backup_count > 0) {
6 years ago
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ")\">有备份</a>";
7 years ago
} else {
6 years ago
var backup = "<a href='javascript:;' class='btlink' onclick=\"getBackup(" + data.data[i].id + ")\">无备份</a>";
7 years ago
}
//是否设置有效期
6 years ago
var web_end_time = (data.data[i].edate == "0000-00-00") ? '永久': data.data[i].edate;
7 years ago
//表格主体
var shortwebname = data.data[i].name;
var shortpath = data.data[i].path;
6 years ago
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,'_');
7 years ago
6 years ago
body = "<tr><td><input type='checkbox' name='id' title='"+data.data[i].name+"' onclick='checkSelect();' value='" + data.data[i].id + "'></td>\
7 years ago
<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>\
6 years ago
<td><a class='btlink' title='打开目录"+data.data[i].path+"' href=\"javascript:openPath('"+data.data[i].path+"');\">" + shortpath + "</a></td>\
7 years ago
<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>\
6 years ago
<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>\
7 years ago
<td style='text-align:right; color:#bbb'>\
6 years ago
<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>\
7 years ago
</td></tr>"
6 years ago
$("#webBody").append(body);
7 years ago
//setEdate(data.data[i].id,data.data[i].edate);
//设置到期日期
6 years ago
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);
}
7 years ago
$('#webBody').on('click','#site_'+ data.data[i].id,function(){
6 years ago
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();
7 years ago
});
}
6 years ago
if(body.length < 10){
6 years ago
body = "<tr><td colspan='9'>当前没有站点数据</td></tr>";
// $(".dataTables_paginate").hide();
6 years ago
$("#webBody").html(body);
7 years ago
}
//输出数据列表
$(".btn-more").hover(function(){
$(this).addClass("open");
},function(){
$(this).removeClass("open");
});
//输出分页
$("#webPage").html(data.page);
6 years ago
// $("#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>');
7 years ago
$(".btlinkbed").click(function(){
var dataid = $(this).attr("data-id");
var databak = $(this).text();
6 years ago
if(databak == null){
databak = '';
7 years ago
}
6 years ago
$(this).hide().after("<input class='baktext' type='text' data-id='"+dataid+"' name='bak' value='" + databak + "' placeholder='备注信息' onblur='getBakPost(\"sites\")' />");
7 years ago
$(".baktext").focus();
});
readerTableChecked();
7 years ago
},'json');
7 years ago
}
6 years ago
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) {
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');
}
7 years ago
//添加站点
function webAdd(type) {
if (type == 1) {
var array;
var str="";
var domainlist='';
var domain = array = $("#mainDomain").val().replace('http://','').replace('https://','').split("\n");
6 years ago
var webport=[];
7 years ago
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]+'",';
}
6 years ago
webport = domain[0].split(":")[1];//主域名端口
if(webport == undefined){
webport="80";
7 years ago
}
6 years ago
7 years ago
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"]})
6 years ago
var data = $("#addweb").serialize()+"&port="+webport+"&webinfo="+domain;
6 years ago
$.post('/site/add', data, function(ret) {
6 years ago
if (ret.status == true) {
7 years ago
getWeb(1);
layer.closeAll();
layer.msg('成功创建站点',{icon:1})
7 years ago
} else {
6 years ago
layer.msg(ret.msg, {icon: 2});
7 years ago
}
layer.close(loadT);
6 years ago
},'json');
7 years ago
return;
}
6 years ago
$.post('/site/get_php_version',function(rdata){
7 years ago
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'>";
6 years ago
for (var i=rdata.length-1;i>=0;i--) {
7 years ago
php_version += "<option value='"+rdata[i].version+"'>"+rdata[i].name+"</option>";
}
6 years ago
var www = syncPost('/site/get_root_dir');
7 years ago
php_version += "</select><span id='php_w' style='color:red;margin-left: 10px;'></span></div>";
layer.open({
type: 1,
skin: 'demo-class',
area: '640px',
6 years ago
title: '添加网站',
7 years ago
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'>\
6 years ago
<span class='tname'>备注</span>\
7 years ago
<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'>\
6 years ago
<span class='tname'>根目录</span>\
7 years ago
<div class='info-r c4'>\
6 years ago
<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>\
7 years ago
</div>\
</div>\
"+php_version+"\
<div class='bt-form-submit-btn'>\
6 years ago
<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>\
7 years ago
</div>\
</form>",
});
6 years ago
7 years ago
$(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('');
}
})
6 years ago
$('#mainDomain').on('input', function() {
6 years ago
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);
6 years ago
})
6 years ago
//备注
7 years ago
$('#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);
6 years ago
layer.msg('不能超出20个字符!', {
7 years ago
icon: 0
});
}
})
//获取当前时间时间戳,截取后6位
var timestamp = new Date().getTime().toString();
var dtpw = timestamp.substring(7);
});
6 years ago
}, 'json');
7 years ago
}
//修改网站目录
function webPathEdit(id){
6 years ago
$.post('/site/get_dir_user_ini','&id='+id, function(data){
var userini = data['data'];
6 years ago
var webpath = userini['path'];
6 years ago
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 = '';
6 years ago
if(userini.runPath.dirs[i] == userini.runPath.runPath){
selected = 'selected';
}
6 years ago
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'>\
6 years ago
<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>\
6 years ago
</div>\
<div class='line mt10'>\
6 years ago
<span class='mr5'>网站目录</span>\
<input class='bt-input-text mr5' type='text' style='width:50%' placeholder='网站根目录' value='"+webpath+"' name='webdir' id='inputPath'>\
6 years ago
<span onclick='changePath(&quot;inputPath&quot;)' class='glyphicon glyphicon-folder-open cursor mr20'></span>\
6 years ago
<button class='btn btn-success btn-sm' onclick='setSitePath("+id+")'>保存</button>\
6 years ago
</div>\
<div class='line mtb15'>\
6 years ago
<span class='mr5'>运行目录</span>\
6 years ago
<select class='bt-input-text' type='text' style='width:50%; margin-right:41px' name='runPath' id='runPath'>"+opt+"</select>\
6 years ago
<button class='btn btn-success btn-sm' onclick='setSiteRunPath("+id+")' style='margin-top: -1px;'>保存</button>\
6 years ago
</div>\
<ul class='help-info-text c7 ptb10'>\
6 years ago
<li>部分程序需要指定二级目录作为运行目录如ThinkPHP5Laravel</li>\
<li>选择您的运行目录点保存即可</li>\
6 years ago
</ul>"
+'<div class="user_pw_tit" style="margin-top: -8px;padding-top: 11px;">'
6 years ago
+'<span class="tit">密码访问</span>'
6 years ago
+'<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;')+'">'
6 years ago
+'<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>'
6 years ago
+'<p><button class="btn btn-success btn-sm" onclick="setPathSafe('+id+')">保存</button></p>'
6 years ago
+'</div>'
+'</div>';
6 years ago
$("#webedit-con").html(webPathHtml);
6 years ago
$("#userini").change(function(){
6 years ago
$.post('/site/set_dir_user_ini','path='+webpath,function(userini){
6 years ago
layer.msg(userini.msg+'<p style="color:red;">注意:设置防跨站需要重启PHP才能生效!</p>',{icon:userini.status?1:2});
6 years ago
},'json');
});
6 years ago
$("#logs").change(function(){
6 years ago
$.post('/site/logs_open','id='+id,function(userini){
6 years ago
layer.msg(userini.msg,{icon:userini.status?1:2});
6 years ago
},'josn');
7 years ago
});
6 years ago
},'json');
7 years ago
}
//是否设置访问密码
6 years ago
function pathSafe(id){
7 years ago
var isPass = $('#pathSafe').prop('checked');
if(!isPass){
$(".user_pw").show();
6 years ago
} else {
7 years ago
var loadT = layer.msg(lan.public.the,{icon:16,time:10000,shade: [0.3, '#000']});
6 years ago
$.post('/site/close_has_pwd',{id:id},function(rdata){
7 years ago
layer.close(loadT);
6 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
7 years ago
$(".user_pw").hide();
6 years ago
},'json');
7 years ago
}
}
//设置访问密码
6 years ago
function setPathSafe(id){
7 years ago
var username = $("#username_get").val();
var pass1 = $("#password_get_1").val();
var pass2 = $("#password_get_2").val();
if(pass1 != pass2){
6 years ago
layer.msg('两次输入的密码不一致!',{icon:2});
7 years ago
return;
}
6 years ago
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){
7 years ago
layer.close(loadT);
6 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
},'json');
7 years ago
}
//提交运行目录
6 years ago
function setSiteRunPath(id){
7 years ago
var NewPath = $("#runPath").val();
var loadT = layer.msg(lan.public.the,{icon:16,time:10000,shade: [0.3, '#000']});
6 years ago
$.post('/site/set_site_run_path','id='+id+'&runPath='+NewPath,function(rdata){
7 years ago
layer.close(loadT);
var ico = rdata.status?1:2;
layer.msg(rdata.msg,{icon:ico});
6 years ago
},'json');
7 years ago
}
//提交网站目录
6 years ago
function setSitePath(id){
7 years ago
var NewPath = $("#inputPath").val();
6 years ago
var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:10000,shade: [0.3, '#000']});
$.post('/site/set_path','id='+id+'&path='+NewPath,function(rdata){
7 years ago
layer.close(loadT);
6 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},'json');
7 years ago
}
//修改网站备注
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>\
6 years ago
<br><br><button class='btn btn-success btn-sm' onclick='SetSitePs("+id+")'>保存</button>\
7 years ago
</div>\
</div>";
6 years ago
$("#webedit-con").html(webBakHtml);
7 years ago
});
}
//设置默认文档
6 years ago
function setIndexEdit(id){
$.post('/site/get_index','id='+id,function(data){
var rdata = data['index'];
rdata = rdata.replace(new RegExp(/(,)/g), "\n");
7 years ago
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>\
6 years ago
<button type='button' class='btn btn-success btn-sm pull-right' onclick='setIndexList("+id+")' style='margin: 70px 130px 0px 0px;'>"+lan.public.save+"</button>\
7 years ago
</div>\
<ul class='help-info-text c7 ptb10'>\
6 years ago
<li>默认文档每行一个优先级由上至下</li>\
7 years ago
</ul>\
</div></div>";
$("#webedit-con").html(setIndexHtml);
6 years ago
},'json');
7 years ago
}
/**
* 停止一个站点
* @param {Int} wid 网站ID
* @param {String} wname 网站名称
*/
function webStop(wid, wname) {
6 years ago
layer.confirm('站点停用后将无法访问,您真的要停用这个站点吗?', {icon:3,closeBtn:2},function(index) {
7 years ago
if (index > 0) {
6 years ago
var loadT = layer.load();
$.post("/site/stop","id=" + wid + "&name=" + wname, function(ret) {
7 years ago
layer.msg(ret.msg,{icon:ret.status?1:2})
layer.close(loadT);
getWeb(1);
6 years ago
},'json');
7 years ago
}
});
}
/**
* 启动一个网站
* @param {Number} wid 网站ID
* @param {String} wname 网站名称
*/
function webStart(wid, wname) {
6 years ago
layer.confirm('即将启动站点,您真的要启用这个站点吗?',{icon:3,closeBtn:2}, function(index) {
7 years ago
if (index > 0) {
var loadT = layer.load()
6 years ago
$.post("/site/start","id=" + wid + "&name=" + wname, function(ret) {
7 years ago
layer.msg(ret.msg,{icon:ret.status?1:2})
layer.close(loadT);
getWeb(1);
6 years ago
},'json');
7 years ago
}
});
}
/**
* 删除一个网站
* @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>根目录</span></label>\
7 years ago
</div>";
6 years ago
var info = '是否要删除同名根目录';
safeMessage('删除站点'+"["+wname+"]",info, function(){
var path='';
7 years ago
if($("#delpath").is(":checked")){
path='&path=1';
}
var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:10000,shade: [0.3, '#000']});
6 years ago
$.post("/site/delete","id=" + wid + "&webname=" + wname + path, function(ret){
7 years ago
layer.closeAll();
layer.msg(ret.msg,{icon:ret.status?1:2})
getWeb(1);
6 years ago
},'json');
7 years ago
},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>";
6 years ago
safeMessage(lan.site.all_del_site,"<a style='color:red;'>"+lan.get('del_all_site',[dataList.length])+"</a>",function(){
7 years ago
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
*/
6 years ago
function domainEdit(id, name, msg, status) {
$.post('/site/get_domain' ,{pid:id}, function(domain) {
7 years ago
var echoHtml = "";
for (var i = 0; i < domain.length; i++) {
6 years ago
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>";
7 years ago
}
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' />\
6 years ago
<button type='button' class='btn btn-success btn-sm pull-right' style='margin:30px 35px 0 0' onclick=\"domainAdd(" + id + ",'" + name + "',1)\">添加</button>\
7 years ago
<div class='divtable mtb15' style='height:350px;overflow:auto'>\
<table class='table table-hover' width='100%'>\
6 years ago
<thead><tr><th>"+lan.site.domain+"</th><th width='70px'></th><th width='50px' class='text-center'></th></tr></thead>\
7 years ago
<tbody id='checkDomain'>" + echoHtml + "</tbody>\
</table>\
</div>";
$("#webedit-con").html(bodyHtml);
if(msg != undefined){
layer.msg(msg,{icon:status?1:5});
}
6 years ago
var placeholder = "<div class='placeholder c9' style='left:28px;width:330px;top:16px;'>每行填写一个域名,默认为80端口<br>泛解析添加方法 *.domain.com<br>如另加端口格式为 www.domain.com:88</div>";
7 years ago
$('#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();
6 years ago
if(isChineseChar(str)) {
$('.btn-zhm').show();
} else{
$('.btn-zhm').hide();
}
7 years ago
})
//checkDomain();
6 years ago
},'json');
7 years ago
}
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' />\
6 years ago
<button type='button' class='btn btn-success btn-sm pull-right' style='margin:30px 35px 0 0' onclick=\"domainAdd(" + id + ",'" + name + "')\">添加</button>\
7 years ago
<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>");
6 years ago
});
7 years ago
}
/**
* 添加域名
* @param {Int} id 网站ID
* @param {String} webname 主域名
*/
6 years ago
function domainAdd(id, webname,type) {
7 years ago
var Domain = $("#newdomain").val().split("\n");
6 years ago
var domainlist = '';
7 years ago
for(var i=0; i<Domain.length; i++){
6 years ago
domainlist += Domain[i]+ ',';
7 years ago
}
if(domainlist.length < 3){
layer.msg(lan.site.domain_empty,{icon:5});
return;
}
6 years ago
7 years ago
domainlist = domainlist.substring(0,domainlist.length-1);
var loadT = layer.load();
var data = "domain=" + domainlist + "&webname=" + webname + "&id=" + id;
6 years ago
$.post('/site/add_domain', data, function(retuls) {
7 years ago
layer.close(loadT);
6 years ago
domainEdit(id, webname, retuls.msg, retuls.status);
},'json');
7 years ago
}
/**
* 删除域名
* @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) {
6 years ago
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){
7 years ago
layer.close(loadT);
6 years ago
domainEdit(wid,wname)
}else{
layer.closeAll();
DomainRoot(wid, wname);
}
},'json');
7 years ago
});
}
/**
* 判断IP/域名格式
* @param {String} domain 源文本
* @return bool
*/
6 years ago
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);
7 years ago
}
6 years ago
}
7 years ago
/**
*设置数据库备份
* @param {Number} sign 操作标识
* @param {Number} id 编号
* @param {String} name 主域名
*/
6 years ago
function webBackup(id, name) {
6 years ago
var loadT =layer.msg('正在备份,请稍候...', {icon:16,time:0,shade: [0.3, '#000']});
$.post('/site/to_backup', "id="+id, function(rdata) {
6 years ago
layer.closeAll();
6 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
getBackup(id);
6 years ago
},'json');
7 years ago
}
/**
*删除网站备份
* @param {Number} webid 网站编号
* @param {Number} id 文件编号
* @param {String} name 主域名
*/
6 years ago
function webBackupDelete(id,pid){
6 years ago
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){
7 years ago
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
getBackup(pid);
6 years ago
},'json');
7 years ago
})
}
function getBackup(id,name,page) {
6 years ago
7 years ago
if(page == undefined){
page = '1';
6 years ago
}
6 years ago
$.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;
7 years ago
}
6 years ago
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>"
7 years ago
}
6 years ago
var ftpdown = '';
frdata.page = frdata.page.replace(/'/g,'"').replace(/getBackup\(/g,"getBackup(" + id + ",0,");
7 years ago
6 years ago
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>"
});
6 years ago
},'json');
7 years ago
}
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);
}
}
//设置默认文档
7 years ago
function setIndex(id){
7 years ago
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>"
6 years ago
+" <button type='button' class='btn btn-success btn-sm btn-title' onclick='setIndexList("+id+")'>"+lan.public.ok+"</button>"
7 years ago
+"</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>'
});
});
}
6 years ago
function setIndexList(id){
7 years ago
var Dindex = $("#Dindex").val().replace(new RegExp(/(\n)/g), ",");
6 years ago
if(id == undefined ){
var data="id=&index="+Dindex;
} else{
var data="id="+id+"&index="+Dindex;
7 years ago
}
var loadT= layer.load(2);
6 years ago
$.post('/site/set_index',data,function(rdata){
7 years ago
layer.close(loadT);
var ico = rdata.status? 1:5;
layer.msg(rdata.msg,{icon:ico});
6 years ago
},'json');
7 years ago
}
/*站点修改*/
function webEdit(id,website,endTime,addtime){
var eMenu = "<p onclick='dirBinding("+id+")' title='子目录绑定'>子目录绑定</p>"
6 years ago
+"<p onclick='webPathEdit("+id+")' title='网站目录'>网站目录</p>"
6 years ago
+"<p onclick='limitNet("+id+")' title='流量限制'>流量限制</p>"
+"<p onclick=\"rewrite('"+website+"')\" title='伪静态'>伪静态</p>"
6 years ago
+"<p onclick='setIndexEdit("+id+")' title='默认文档'>默认文档</p>"
6 years ago
+"<p onclick=\"configFile('"+website+"')\" title='配置文件'>配置文件</p>"
6 years ago
+"<p onclick=\"setSSL("+id+",'"+website+"')\" title='SSL'>SSL</p>"
6 years ago
+"<p onclick=\"phpVersion('"+website+"')\" title='PHP版本'>PHP版本</p>"
6 years ago
// +"<p onclick=\"to301('"+website+"')\" title='重定向'>重定向</p>"
// +"<p onclick=\"proxyList('"+website+"')\" title='反向代理'>反向代理</p>"
6 years ago
+"<p id='site_"+id+"' onclick=\"security('"+id+"','"+website+"')\" title='防盗链'>防盗链</p>"
6 years ago
+"<p id='site_"+id+"' onclick=\"getSiteLogs('"+website+"')\" title='查看站点请求日志'>响应日志</p>";
7 years ago
layer.open({
type: 1,
area: '640px',
6 years ago
title: '站点修改['+website+'] -- 添加时间['+addtime+']',
7 years ago
closeBtn: 2,
shift: 0,
content: "<div class='bt-form'>"
+"<div class='bt-w-menu pull-left' style='height: 565px;'>"
6 years ago
+" <p class='bgw' onclick=\"domainEdit(" + id + ",'" + website + "')\">"+lan.site.domain_man+"</p>"
7 years ago
+" "+eMenu+""
+"</div>"
+"<div id='webedit-con' class='bt-w-con webedit-con pd15'></div>"
+"</div>"
});
6 years ago
domainEdit(id,website);
7 years ago
//域名输入提示
6 years ago
var placeholder = "<div class='placeholder'>每行填写一个域名,默认为80端口<br>泛解析添加方法 *.domain.com<br>如另加端口格式为 www.domain.com:88</div>";
7 years ago
$('#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");
});
}
//取网站日志
6 years ago
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);
7 years ago
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;
6 years ago
},'json');
7 years ago
}
//防盗链
6 years ago
function security(id,name){
7 years ago
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
6 years ago
$.post('/site/get_security',{id:id,name:name},function(rdata){
7 years ago
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>'
6 years ago
+'<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>'
7 years ago
+'<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);
6 years ago
},'json');
7 years ago
}
//设置防盗链
6 years ago
function setSecurity(name,id){
7 years ago
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']});
6 years ago
$.post('/site/set_security',data,function(rdata){
7 years ago
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status) setTimeout(function(){Security(id,name);},1000);
6 years ago
},'json');
7 years ago
}
//木马扫描
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){
7 years ago
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>'
7 years ago
+"<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>"
7 years ago
+"</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);
7 years ago
$("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');
7 years ago
}
//保存流量限制配置
function saveLimitNet(id, type){
7 years ago
var isChecked = $("input[name='status']").attr('checked');
if(isChecked == undefined || type == 1 ){
7 years ago
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){
7 years ago
layer.close(loadT);
limitNet(id);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},'json');
7 years ago
}else{
var loadT = layer.msg(lan.public.config,{icon:16,time:10000})
$.post('/site/close_limit_net',{id:id},function(rdata){
7 years ago
layer.close(loadT);
limitNet(id);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},'json');
7 years ago
}
}
//子目录绑定
6 years ago
function dirBinding(id){
$.post('/site/get_dir_binding',{'id':id},function(data){
var rdata = data['data'];
7 years ago
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>";
7 years ago
}
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'>"
6 years ago
+ "域名:<input class='bt-input-text mr20' type='text' name='domain' />"
+ "子目录:<select class='bt-input-text mr20' name='dirName'>"+dirList+"</select>"
6 years ago
+ "<button class='btn btn-success btn-sm' onclick='addDirBinding("+id+")'>添加</button>"
6 years ago
+ "</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>";
7 years ago
$("#webedit-con").html(body);
6 years ago
},'json');
7 years ago
}
//子目录伪静态
function setDirRewrite(id){
$.post('/site/get_dir_bind_rewrite','id='+id,function(rdata){
7 years ago
if(!rdata.status){
var confirmObj = layer.confirm('你真的要为这个子目录创建独立的伪静态规则吗?',{icon:3,closeBtn:2},function(){
$.post('/site/get_dir_bind_rewrite','id='+id+'&add=1',function(rdata){
7 years ago
layer.close(confirmObj);
showRewrite(rdata);
},'json');
7 years ago
});
return;
}
showRewrite(rdata);
},'json');
7 years ago
}
//显示伪静态
function showRewrite(rdata){
7 years ago
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>\
7 years ago
<ul class='help-info-text c7 ptb10'>\
<li>请选择您的应用若设置伪静态后网站无法正常访问请尝试设置回default</li>\
<li>您可以对伪静态规则进行修改修改完后保存即可</li>\
7 years ago
</ul>\
</div>";
layer.open({
type: 1,
area: '500px',
title: '配置伪静态规则',
7 years ago
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');
7 years ago
});
}
//添加子目录绑定
6 years ago
function addDirBinding(id){
7 years ago
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);
7 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},'json');
7 years ago
}
//删除子目录绑定
function delDirBind(id,siteId){
7 years ago
layer.confirm(lan.site.s_bin_del,{icon:3,closeBtn:2},function(){
$.post('/site/del_dir_bind','id='+id,function(rdata){
dirBinding(siteId);
7 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},'json');
7 years ago
});
}
//反向代理
6 years ago
function proxyList(siteName,type){
7 years ago
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);
});
}
//开启缓存
6 years ago
function openCache(siteName){
7 years ago
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重定向
6 years ago
function to301(siteName,type){
7 years ago
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);
});
}
6 years ago
6 years ago
//文件验证
6 years ago
// 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>');
// }
6 years ago
7 years ago
//证书夹
6 years ago
function sslAdmin(siteName){
6 years ago
var loadT = layer.msg('正在提交任务...',{icon:16,time:0,shade: [0.3, '#000']});
6 years ago
$.get('/site/get_cert_list',function(data){
7 years ago
layer.close(loadT);
6 years ago
var rdata = data['data'];
7 years ago
var tbody = '';
for(var i=0;i<rdata.length;i++){
6 years ago
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="setCertSsl(\''+rdata[i].subject+'\',\''+siteName+'\')" class="btlink">部署</a> | <a onclick="removeSsl(\''+rdata[i].subject+'\')" class="btlink">删除</a></td></tr>'
7 years ago
}
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);
6 years ago
},'json');
7 years ago
}
//删除证书
6 years ago
function removeSsl(certName){
safeMessage('删除证书','您真的要从证书夹删除证书吗?',function(){
7 years ago
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
6 years ago
$.post('/site/remove_cert',{certName:certName},function(rdata){
7 years ago
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
$("#ssl_admin").click();
6 years ago
},'json');
7 years ago
});
}
//从证书夹部署
6 years ago
function setCertSsl(certName,siteName){
7 years ago
var loadT = layer.msg('正在部署证书...',{icon:16,time:0,shade: [0.3, '#000']});
6 years ago
$.post('/site/set_cert_to_site',{certName:certName,siteName:siteName},function(rdata){
7 years ago
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
},'json');
7 years ago
}
6 years ago
//ssl
function setSSL(id,siteName){
7 years ago
var mBody = '<div class="tab-nav">\
6 years ago
<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>\
6 years ago
<span id="ssl_admin" onclick="sslAdmin(\''+siteName+'\')">证书夹</span>'
7 years ago
+ '<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);
6 years ago
opSSL('lets',id,siteName);
7 years ago
$(".tab-nav span").click(function(){
$(this).addClass("on").siblings().removeClass("on");
});
6 years ago
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/site/get_ssl','siteName='+siteName,function(rdata){
layer.close(loadT);
$("#toHttps").attr('checked',rdata.data.httpTohttps);
switch(rdata.data.type){
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">密钥(KEY)<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.data.key+'</textarea></div>'
+ '<div class="ssl-con-key pull-left">证书(PEM格式)<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.data.csr+'</textarea></div>'
+ '</div>'
+ '<ul class="help-info-text c7 pull-left"><li>已为您自动生成Let\'s Encrypt免费证书</li>\
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容然后保存即可</li></ul>'
$(".tab-con").html(lets);
$(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>关闭SSL</button></div>");
break;
case 0:
case 3:
$(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on");
opSSL('other',id,siteName);
break;
case 2:
$(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on");
opSSL('a',id,siteName);
break;
}
},'json');
7 years ago
}
6 years ago
6 years ago
function closeSSL(siteName){
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/site/get_ssl','siteName='+siteName,function(rdata){
layer.close(loadT);
switch(rdata.data.type){
case -1:
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);
break;
case 0:
var txt = "Let's Encrypt";
closeSSLHTML(txt,siteName);
break;
case 1:
var txt = '其它';
closeSSLHTML(txt,siteName);
break;
case 2:
var txt = 'SSL';
closeSSLHTML(txt,siteName);
break;
}
},'json');
7 years ago
}
6 years ago
//关闭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('close_ssl_conf','"+siteName+"')\">关闭SSL</button></div>");
}
6 years ago
7 years ago
//设置httpToHttps
function httpToHttps(siteName){
var isHttps = $("#toHttps").attr('checked');
if(isHttps){
layer.confirm('关闭强制HTTPS后需要清空浏览器缓存才能看到效果,继续吗?',{icon:3,title:"关闭强制HTTPS"},function(){
6 years ago
$.post('/site/close_to_https','siteName='+siteName,function(rdata){
7 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
},'json');
7 years ago
});
}else{
6 years ago
$.post('/site/http_to_https','siteName='+siteName,function(rdata){
7 years ago
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
},'json');
7 years ago
}
}
6 years ago
7 years ago
6 years ago
//SSL
function opSSL(type,id,siteName){
6 years ago
var lets = '<div class="btssl"><div class="label-input-group">'
6 years ago
+ '<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></label></div></form></div>'
6 years ago
+ '<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>'
6 years ago
+ '<div class="line mtb10"><span class="tname text-center">域名</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">申请</button></div>'
+ '<ul class="help-info-text c7" id="lets_help"><li>申请之前请确保域名已解析如未解析会导致审核失败</li>\
<li>Let\'s Encrypt免费证书有效期3个月支持多域名默认会自动续签</li>\
<li>若您的站点使用了CDN或301重定向会导致续签失败</li>\
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>'
7 years ago
+ '</div>';
6 years ago
var other = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">密钥(KEY)<br><textarea id="key" class="bt-input-text"></textarea></div>'
+ '<div class="ssl-con-key pull-left">证书(PEM格式)<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+'\')">保存</button></div></div>'
+ '<ul class="help-info-text c7 pull-left"><li>粘贴您的*.key以及*.pem内容,然后保存即可<a href=\'http://www.bt.cn/bbs/thread-704-1-1.html\' class=\'btlink\' target=\'_blank\'>[帮助]</a></li>\
<li>如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书</li><li>PEM = .crt + (root_bundle).crt</li>\
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>';
7 years ago
switch(type){
case 'lets':
if(getCookie('letssl') == 1){
6 years ago
$.post('/site/get_ssl','siteName='+siteName,function(data){
var rdata = data['data'];
7 years ago
if(rdata.csr === false){
setCookie('letssl',0);
6 years ago
opSSL(type,id,siteName);
7 years ago
return;
}
6 years ago
var lets = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">密钥(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">证书(PEM格式)<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>'
7 years ago
+ '</div>'
6 years ago
+ '<ul class="help-info-text c7 pull-left"><li>已为您自动生成Let\'s Encrypt免费证书</li>\
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容然后保存即可</li></ul>';
7 years ago
$(".tab-con").html(lets);
6 years ago
$(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>关闭SSL</button></div>");
},'json');
7 years ago
return;
}
$(".tab-con").html(lets);
var opt='';
6 years ago
$.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, '*');
7 years ago
if(!isIP && !x){
6 years ago
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>'
7 years ago
}
}
6 years ago
$("input[name='admin_email']").val(data.email);
7 years ago
$("#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);
})
6 years ago
},'json');
7 years ago
break;
case 'other':
$(".tab-con").html(other);
var key = '';
var csr = '';
6 years ago
var loadT = layer.msg('正在提交任务...',{icon:16,time:0,shade: [0.3, '#000']});
6 years ago
$.post('site/get_ssl','siteName='+siteName,function(data){
7 years ago
layer.close(loadT);
6 years ago
var rdata = data['data'];
6 years ago
if (rdata.type == 0){
setCookie('letssl', 1);
}
7 years ago
if(rdata.status){
6 years ago
$(".ssl-btn").append("<button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>关闭SSL</button>");
7 years ago
}
if(rdata.key == false) rdata.key = '';
if(rdata.csr == false) rdata.csr = '';
$("#key").val(rdata.key);
$("#csr").val(rdata.csr);
6 years ago
},'json');
7 years ago
break;
}
}
//一键部署证书
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);
})
}
//验证域名
6 years ago
function verifyDomain(partnerOrderId,siteName){
7 years ago
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
6 years ago
function ocSSL(action,siteName){
6 years ago
var loadT = layer.msg('正在获取证书列表,请稍后..',{icon:16,time:0,shade: [0.3, '#000']});
$.post("/site/"+action,'siteName='+siteName+'&updateOf=1',function(rdata){
7 years ago
layer.close(loadT)
if(!rdata.status){
if(!rdata.out){
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
setSSL(siteName);
7 years ago
return;
}
6 years ago
data = "<p>证书获取失败:</p><hr />"
7 years ago
for(var i=0;i<rdata.out.length;i++){
6 years ago
data += "<p>域名: "+rdata.out[i].Domain+"</p>"
+ "<p>错误类型: "+rdata.out[i].Type+"</p>"
+ "<p>详情: "+rdata.out[i].Detail+"</p>"
+ "<hr />";
7 years ago
}
layer.msg(data,{icon:2,time:0,shade:0.3,shadeClose:true});
return;
}
6 years ago
7 years ago
setCookie('letssl',0);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
if(action == 'close_ssl_conf'){
layer.msg('已关闭SSL,请务必清除浏览器缓存后再访问站点!',{icon:1,time:5000});
7 years ago
}
6 years ago
$(".tab-nav .on").click();
6 years ago
},'json');
7 years ago
}
//生成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();
6 years ago
$.post('/site/create_let','siteName='+siteName+'&domains='+domains+'&updateOf=1&email='+email + force,function(rdata){
7 years ago
layer.close(loadT)
if(rdata.status){
var mykeyhtml = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">密钥(KEY)<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.data.key+'</textarea></div>'
+ '<div class="ssl-con-key pull-left">证书(PEM格式)<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.data.csr+'</textarea></div>'
7 years ago
+ '</div>'
6 years ago
+ '<ul class="help-info-text c7 pull-left"><li>已为您自动生成Let\'s Encrypt免费证书</li>\
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容然后保存即可</li></ul>';
7 years ago
$(".btssl").html(mykeyhtml);
layer.msg(rdata.data.msg,{icon:rdata.status?1:2});
6 years ago
setCookie('letssl',1);
7 years ago
return;
}
if(!rdata.out){
layer.msg(rdata.msg,{icon:rdata.status?1:2});
setSSL(siteName);
7 years ago
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>';
6 years ago
setCookie('letssl',0);
7 years ago
layer.msg(data,{icon:2,area:'500px',time:0,shade:0.3,shadeClose:true});
6 years ago
},'json');
7 years ago
}
//保存SSL
6 years ago
function saveSSL(siteName){
7 years ago
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']})
6 years ago
$.post('/site/set_ssl',data,function(rdata){
7 years ago
layer.close(loadT);
if(rdata.status){
layer.msg(rdata.msg,{icon:1});
$(".ssl-btn").find(".btn-default").remove();
6 years ago
$(".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>");
7 years ago
}else{
layer.msg(rdata.msg,{icon:2,time:0,shade:0.3,shadeClose:true});
}
6 years ago
},'json');
7 years ago
}
//PHP版本
6 years ago
function phpVersion(siteName){
6 years ago
$.post('/site/get_site_php_version','siteName='+siteName,function(version){
6 years ago
// console.log(version);
7 years ago
if(version.status === false){
layer.msg(version.msg,{icon:5});
return;
}
6 years ago
$.post('/site/get_php_version',function(rdata){
7 years ago
var versionSelect = "<div class='webEdit-box'>\
<div class='line'>\
6 years ago
<span class='tname' style='width:100px'>PHP版本</span>\
7 years ago
<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>\
6 years ago
<button class='btn btn-success btn-sm' onclick=\"setPHPVersion('"+siteName+"')\">"+lan.site.switch+"</button>\
7 years ago
</div>\
<span id='php_w' style='color:red;margin-left: 32px;'></span>\
</div>\
<ul class='help-info-text c7 ptb10'>\
6 years ago
<li>请根据您的程序需求选择版本</li>\
<li>若非必要,请尽量不要使用PHP5.2,这会降低您的服务器安全性</li>\
<li>PHP7不支持mysql扩展默认安装mysqli以及mysql-pdo</li>\
7 years ago
</ul>\
</div>\
</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('');
}
})
6 years ago
},'json');
},'json');
7 years ago
}
//设置PHP版本
6 years ago
function setPHPVersion(siteName){
7 years ago
var data = 'version='+$("#phpVersion").val()+'&siteName='+siteName;
6 years ago
var loadT = layer.msg('正在保存...',{icon:16,time:0,shade: [0.3, '#000']});
6 years ago
$.post('/site/set_php_version',data,function(rdata){
7 years ago
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
6 years ago
},'json');
7 years ago
}
//配置文件
6 years ago
function configFile(webSite){
var info = syncPost('/site/get_host_conf', {siteName:webSite});
$.post('/files/get_body','path='+info['host'],function(rdata){
7 years ago
var mBody = "<div class='webEdit-box padding-10'>\
6 years ago
<textarea style='height: 320px; width: 445px; margin-left: 20px;line-height:18px' id='configBody'>"+rdata.data.data+"</textarea>\
7 years ago
<div class='info-r'>\
6 years ago
<button id='SaveConfigFileBtn' class='btn btn-success btn-sm' style='margin-top:15px;'>保存</button>\
7 years ago
<ul class='help-info-text c7 ptb10'>\
6 years ago
<li>此处为站点主配置文件,若您不了解配置规则,请勿随意修改.</li>\
7 years ago
</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());
6 years ago
saveConfigFile(webSite,rdata.data.encoding, info['host']);
7 years ago
})
6 years ago
},'json');
7 years ago
}
//保存配置文件
6 years ago
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){
7 years ago
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});
}
6 years ago
},'json');
7 years ago
}
//伪静态
6 years ago
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){
6 years ago
var centent = fileBody['data']['data'];
7 years ago
var rList = '';
for(var i=0;i<rdata.rewrite.length;i++){
6 years ago
if (i==0){
rList += "<option value='0'>"+rdata.rewrite[i]+"</option>";
} else {
rList += "<option value='"+rdata.rewrite[i]+"'>"+rdata.rewrite[i]+"</option>";
}
7 years ago
}
var webBakHtml = "<div class='bt-form'>\
<div class='line'>\
<select id='myRewrite' class='bt-input-text mr20' name='rewrite' style='width:30%;'>"+rList+"</select>\
6 years ago
<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>\
7 years ago
<ul class='help-info-text c7 ptb15'>\
6 years ago
<li>请选择您的应用若设置伪静态后网站无法正常访问请尝试设置回default</li>\
<li>您可以对伪静态规则进行修改修改完后保存即可</li>\
7 years ago
</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());
6 years ago
setRewrite(filename);
7 years ago
});
$("#SetRewriteBtnTel").click(function(){
$("#rewriteBody").empty();
$("#rewriteBody").text(editor.getValue());
6 years ago
setRewriteTel();
7 years ago
});
$("#myRewrite").change(function(){
var rewriteName = $(this).val();
6 years ago
if(rewriteName == '0'){
6 years ago
rpath = filename;
7 years ago
}else{
6 years ago
var info = syncPost('/site/get_rewrite_tpl', {tplname:rewriteName});
if (!info['status']){
layer.msg(info['msg']);
return;
}
rpath = info['data'];
7 years ago
}
6 years ago
6 years ago
$.post('/files/get_body','path='+rpath,function(fileBody){
6 years ago
$("#rewriteBody").val(fileBody['data']['data']);
editor.setValue(fileBody['data']['data']);
},'json');
7 years ago
});
6 years ago
},'json');
6 years ago
},'json');
7 years ago
}
//设置伪静态
6 years ago
function setRewrite(filename){
7 years ago
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']});
6 years ago
$.post('/files/save_body',data,function(rdata){
7 years ago
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});
}
6 years ago
},'json');
7 years ago
}
var aindex = null;
6 years ago
7 years ago
//保存为模板
6 years ago
function setRewriteTel(act){
7 years ago
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', //宽高
6 years ago
title: '保存为Rewrite模板',
7 years ago
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();
});
}
//修改默认页
7 years ago
function siteDefaultPage(){
7 years ago
stype = getCookie('serverType');
layer.open({
type: 1,
area: '460px',
6 years ago
title: '修改默认页',
7 years ago
closeBtn: 2,
shift: 0,
content: '<div class="changeDefault pd20">\
6 years ago
<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>\
6 years ago
<button class="btn btn-default btn-sm mg10" style="width:188px" onclick="changeDefault('+(stype=='nginx'?3:4)+')">'+(stype=='nginx'?'Nginx':'Apache')+'空白页</button>\
6 years ago
<button class="btn btn-default btn-sm mg10" style="width:188px" onclick="changeDefault(5)">默认站点停止页</button>\
7 years ago
</div>'
});
}
7 years ago
7 years ago
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;
}
7 years ago
onlineEditFile(0,vhref);
6 years ago
}
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>');
}
$(select).bind('change',function(){
var select_id = $(this).val();
// console.log(select_id);
getWeb(1,'',select_id);
})
},'json');
}
getClassType();
6 years ago
function setClassType(){
$.post('/site/get_site_types',function(rdata){
var list = '';
6 years ago
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>\
6 years ago
</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();
6 years ago
}
},{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();
6 years ago
}
},{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');
});
}
6 years ago
function moveClassTYpe(){
$.post('/site/get_site_types',function(rdata){
var option = '';
for (var i = 0; i<rdata.length; i++) {
option +='<option value="'+rdata[i]['id']+'">'+rdata[i]['name']+'</option>';
}
6 years ago
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;height:80px;">\
<div class="line"><span class="tname">默认站点</span>\
<div class="info-r">\
<select class="bt-input-text mr5" name="type_id" style="width:200px">'+option+'\
</select>\
</div>\
</div>\
</div>\
<div class="bt-form-submit-btn"><button onclick="setSizeClassType();" type="button" class="btn btn-sm btn-success">提交</button></div>\
</div>'
});
},'json');
}
6 years ago
function setSizeClassType(){
var data = {};
data['id'] = $('select[name=type_id]').val();
var ids = [];
$('table').find('td').find('input').each(function(i,obj){
checked = $(this).prop('checked');
if (checked) {
ids.push($(this).val());
}
});
data['site_ids'] = JSON.stringify(ids);
$.post('/site/set_site_type',data, function(rdata){
showMsg(rdata.msg,function(){
if (rdata.status){
layer.closeAll();
}
},{icon:rdata.status?1:2});
},'json');
}
6 years ago