function modify_port_val(port){ layer.open({ type: 1, area: '400px', title: '修改端口', closeBtn:2, shadeClose: false, btn:['确认','取消'], content: '
\ \
\ 面板端口\
\ \
\
\
\ \ ,如何放行端口?\
\
', yes:function(index,layero){ var check_port = $('#check_port').prop('checked'),_tips = ''; if(!check_port){ _tips = layer.tips('请勾选我已了解', '#check_port', {tips:[1,'#ff0000'],time:5000}); return false; } layer.close(_tips); $('#banport').val($('[name="portss"]').val()); var _data = $("#set-Config").serializeObject(); _data['port'] = $('[name="portss"]').val(); var loadT = layer.msg(lan.config.config_save,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/config?action=setPanel',_data,function(rdata){ layer.close(loadT); layer.msg(rdata.msg,{icon:rdata.status?1:2}); if(rdata.status){ layer.close(index); setTimeout(function(){ window.location.href = ((window.location.protocol.indexOf('https') != -1)?'https://':'http://') + rdata.host + window.location.pathname; },4000); } }); }, success:function(){ $('#check_port').click(function(){ layer.closeAll('tips'); }); } }); } $.fn.serializeObject = function(){ var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; //关闭面板 function ClosePanel(){ layer.confirm(lan.config.close_panel_msg,{title:lan.config.close_panel_title,closeBtn:2,icon:13,cancel:function(){ $("#closePl").prop("checked",false); }}, function() { $.post('/config?action=ClosePanel','',function(rdata){ layer.msg(rdata.msg,{icon:rdata.status?1:2}); setTimeout(function(){window.location.reload();},1000); }); },function(){ $("#closePl").prop("checked",false); }); } //设置自动更新 function SetPanelAutoUpload(){ loadT = layer.msg(lan.public.config,{icon:16,time:0}); $.post('/config?action=AutoUpdatePanel','',function(rdata){ layer.close(loadT); layer.msg(rdata.msg,{icon:rdata.status?1:2}); }); } $('#panel_verification').click(function(){ var _checked = $(this).prop('checked'); if(_checked){ layer.open({ type: 1, area: ['500px','530px'], title: 'Google身份认证绑定', closeBtn: 2, shift: 5, shadeClose: false, content: '
\
\ \

危险!此功能不懂别开启!

\ \
\
\
\
Android 应用下载
\
\
\
\
IOS 应用下载
\
\
\
\
\ \ \ 了解详情\
\
\ \ \
\
', success:function(layers,index){ $('.submit_verify').click(function(e){ var check_verification = $('#check_verification').prop('checked'); if(!check_verification){ layer.msg('请先勾选同意风险',{icon:0}); return false; } var loadT = layer.msg('正在开启Google身份认证,请稍后...', { icon: 16, time: 0, shade: [0.3, '#000'] }); set_two_step_auth({act:_checked},function(rdata){ layer.close(loadT); if (rdata.status) layer.closeAll(); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if(rdata.status && _checked){ $('.open_two_verify_view').click(); } }); }); $('.close_verify').click(function(){ layer.closeAll(); $('#panel_verification').prop('checked',!_checked); }); },cancel:function () { layer.closeAll(); $('#panel_verification').prop('checked',!_checked); } }); }else{ bt.confirm({ title: 'Google身份认证', msg: '是否关闭Google身份认证,是否继续?', cancel: function () { $('#panel_verification').prop('checked',!_checked); }}, function () { var loadT = layer.msg('正在关闭Google身份认证,请稍后...', { icon: 16, time: 0, shade: [0.3, '#000'] }); set_two_step_auth({act:_checked},function(rdata){ layer.close(loadT); if (rdata.status) layer.closeAll(); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if(rdata.status && _checked){ $('.open_two_verify_view').click(); } }); },function () { $('#panel_verification').prop('checked',!_checked); }); } // console.log(_data); }); $('.open_two_verify_view').click(function(){ var _checked = $('#panel_verification').prop('checked'); if(!_checked){ layer.msg('请先开启Google身份认证服务',{icon:0}); return false; } layer.open({ type: 1, area: ['600px','670px'], title: 'Google身份认证绑定', closeBtn: 2, shift: 5, shadeClose: false, content: '
\
基于Google Authenticator用户进行登录认证
\
\
1. 密钥绑定
\
\
\
账号:
\
密钥:
\
类型:基于时间
\
\
\
\
\
2. 扫码绑定 ( 使用Google 身份验证器APP扫码 )
\
\
\
\
\
\

提示:请使用“ Google 身份验证器APP ”绑定,各大软件商店均可下载该APP,支持安卓、IOS系统。使用教程

\

开启服务后,请立即使用“Google 身份验证器APP”绑定,以免出现无法登录的情况。

\
\
', success:function(e){ get_two_verify(function(res){ $('.verify_box_line .username').html(res.username); $('.verify_box_line .userkey').html(res.key); }); get_qrcode_data(function(res){ jQuery('#verify_qrcode').qrcode({ render: "canvas", text: res, height:150, width:150 }); }); } }); }); (function(){ check_two_step(function(res){ $('#panel_verification').prop('checked',res.status); }); })() function check_two_step(callback){ $.post('/config?action=check_two_step',function(res){ if(callback) callback(res); }); } function get_qrcode_data(callback){ $.post('/config?action=get_qrcode_data',function(res){ if(callback) callback(res); }); } function get_two_verify(callback){ $.post('/config?action=get_key',function(res){ if(callback) callback(res); }); } function set_two_step_auth(obj,callback){ $.post('/config?action=set_two_step_auth',{act:obj.act?1:0},function(res){ if(callback) callback(res); }); } $(".set-submit").click(function(){ var data = $("#set-Config").serialize(); layer.msg(lan.config.config_save,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/config?action=setPanel',data,function(rdata){ layer.closeAll(); layer.msg(rdata.msg,{icon:rdata.status?1:2}); if(rdata.status){ setTimeout(function(){ window.location.href = ((window.location.protocol.indexOf('https') != -1)?'https://':'http://') + rdata.host + window.location.pathname; },1500); } }); }); function modify_auth_path() { var auth_path = $("#admin_path").val(); btn = ""; layer.open({ type: 1, area: "500px", title: "修改安全入口", closeBtn: 2, shift: 5, shadeClose: false, content: '
\
\ 入口地址\
\ \
\
\ \ \
' }) } function set_auth_path() { var auth_path = $("input[name='auth_path_set']").val(); var loadT = layer.msg(lan.config.config_save, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=set_admin_path', { admin_path: auth_path }, function (rdata) { layer.close(loadT); if (rdata.status) { layer.closeAll(); $("#admin_path").val(auth_path); } setTimeout(function () { layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }, 200); }); } function syncDate() { var loadT = layer.msg(lan.config.config_sync,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/config?action=syncDate','',function(rdata){ layer.close(loadT); layer.msg(rdata.msg,{icon:1}); setTimeout(function(){ window.location.reload(); },1500); }); } //PHP守护程序 function Set502(){ var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/config?action=Set502','',function(rdata){ layer.close(loadT); layer.msg(rdata.msg,{icon:rdata.status?1:2}); }); } //绑定修改宝塔账号 function bindBTName(a,type){ var titleName = lan.config.config_user_binding; if(type == "b"){ btn = ""; } else{ titleName = lan.config.config_user_edit; btn = ""; } if(a == 1) { p1 = $("#p1").val(); p2 = $("#p2").val(); var loadT = layer.msg(lan.config.token_get,{icon:16,time:0,shade: [0.3, '#000']}); $.post(" /ssl?action=GetToken", "username=" + p1 + "&password=" + p2, function(b){ layer.close(loadT); layer.msg(b.msg, {icon: b.status?1:2}); if(b.status) { window.location.reload(); $("input[name='btusername']").val(p1); } }); return } layer.open({ type: 1, area: "290px", title: titleName, closeBtn: 2, shift: 5, shadeClose: false, content: "
"+lan.public.user+"
"+lan.public.pass+"
"+btn+"
" }) } //解除绑定宝塔账号 function UnboundBt(){ var name = $("input[name='btusername']").val(); layer.confirm(lan.config.binding_un_msg,{closeBtn:2,icon:3,title:lan.config.binding_un},function(){ $.get("/ssl?action=DelToken",function(b){ layer.msg(b.msg,{icon:b.status? 1:2}) $("input[name='btusername']").val(''); }) }) } //设置API function apiSetup(){ var loadT = layer.msg(lan.config.token_get,{icon:16,time:0,shade: [0.3, '#000']}); $.get('/api?action=GetToken',function(rdata){ layer.close(loadT); }); } //设置模板 function setTemplate(){ var template = $("select[name='template']").val(); var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/config?action=SetTemplates','templates='+template,function(rdata){ layer.close(loadT); layer.msg(rdata.msg,{icon:rdata.status?1:5}); if(rdata.status === true){ $.get('/system?action=ReWeb',function(){}); setTimeout(function(){ window.location.reload(); },3000); } }); } //设置面板SSL function setPanelSSL(){ var status = $("#panelSSL").prop("checked"); var loadT = layer.msg(lan.config.ssl_msg,{icon:16,time:0,shade: [0.3, '#000']}); if(status){ var confirm = layer.confirm('是否关闭面板SSL证书', {title:'提示',btn: ['确定','取消'],icon:0,closeBtn:2}, function() { bt.send('SetPanelSSL', 'config/SetPanelSSL', {}, function (rdata) { layer.close(loadT); if (rdata.status) { layer.msg(rdata.msg,{icon:1}); $.get('/system?action=ReWeb', function () { }); setTimeout(function () { window.location.href = ((window.location.protocol.indexOf('https') != -1) ? 'http://' : 'https://') + window.location.host + window.location.pathname; }, 1500); } else { layer.msg(res.rdata,{icon:2}); } }); return; }) } else { bt.send('get_cert_source', 'config/get_cert_source', {}, function (rdata) { layer.close(loadT); var sdata = rdata; var _data = { title: '面板SSL', area: '530px', class:'ssl_cert_from', list: [ { html:'

'+lan.config.ssl_open_ps+'

' }, { title: '类型', name: 'cert_type', type: 'select', width: '200px', value: sdata.cert_type, items: [{value: '1', title: '自签证书'}, {value: '2', title: 'Let\'s Encrypt'}], callback: function (obj) { var subid = obj.attr('name') + '_subid'; $('#' + subid).remove(); if (obj.val() == '2') { var _tr = bt.render_form_line({ title: '管理员邮箱', name: 'email', width: '250px', placeholder: '管理员邮箱', value: sdata.email }); obj.parents('div.line').append('
' + _tr.html + '
'); } } }, { html:'
'+lan.config.ssl_open_ps_5+'

' } ], btns: [ { title: '关闭', name: 'close', callback: function (rdata, load, callback) { load.close(); $("#panelSSL").prop("checked", false); } }, { title: '提交', name: 'submit', css: 'btn-success', callback: function (rdata, load, callback) { if(!$('#checkSSL').is(':checked')){ bt.msg({status:false,msg:'请先确认风险!'}) return; } var confirm = layer.confirm('是否开启面板SSL证书', {title:'提示',btn: ['确定','取消'],icon:0,closeBtn:2}, function() { var loading = bt.load(); bt.send('SetPanelSSL', 'config/SetPanelSSL', rdata, function (rdata) { loading.close() if (rdata.status) { layer.msg(rdata.msg,{icon:1}); $.get('/system?action=ReWeb', function () { }); setTimeout(function () { window.location.href = ((window.location.protocol.indexOf('https') != -1) ? 'http://' : 'https://') + window.location.host + window.location.pathname; }, 1500); } else { layer.msg(rdata.msg,{icon:2}); } }) }); } } ], end: function () { $("#panelSSL").prop("checked", false); } }; var _bs = bt.render_form(_data); setTimeout(function () { $('.cert_type' + _bs).trigger('change') }, 200); }); } } function GetPanelSSL(){ var loadT = layer.msg('正在获取证书信息...',{icon:16,time:0,shade: [0.3, '#000']}); $.post('/config?action=GetPanelSSL',{},function(cert){ layer.close(loadT); var certBody = '
\
\
密钥(KEY)
\ \
\
证书(PEM格式)
\ \
\
\ \
\
\ \
' layer.open({ type: 1, area: "600px", title: '自定义面板证书', closeBtn: 2, shift: 5, shadeClose: false, content:certBody }); }); } function SavePanelSSL(){ var data = { privateKey:$("#key").val(), certPem:$("#csr").val() } var loadT = layer.msg(lan.config.ssl_msg,{icon:16,time:0,shade: [0.3, '#000']}); $.post('/config?action=SavePanelSSL',data,function(rdata){ layer.close(loadT); if(rdata.status){ layer.closeAll(); } layer.msg(rdata.msg,{icon:rdata.status?1:2}); }); } function SetDebug() { var status_s = {false:'开启',true:'关闭'} var debug_stat = $("#panelDebug").prop('checked'); bt.confirm({ title: status_s[debug_stat] + "开发者模式", msg: "开启开发者模式后面板可能会占用大量内存开销,您真的要"+ status_s[debug_stat]+"开发者模式?", cancel: function () { $("#panelDebug").prop('checked',debug_stat); }}, function () { var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=set_debug', {}, function (rdata) { layer.close(loadT); if (rdata.status) layer.closeAll() layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); },function () { $("#panelDebug").prop('checked',debug_stat); }); } function set_local() { var status_s = { false: '开启', true: '关闭' } var debug_stat = $("#panelLocal").prop('checked'); bt.confirm({ title: status_s[debug_stat] + "离线模式", msg: "您真的要"+ status_s[debug_stat] + "离线模式 ?", cancel: function () { $("#panelLocal").prop('checked',debug_stat); }}, function () { var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=set_local', {}, function (rdata) { layer.close(loadT); if (rdata.status) layer.closeAll(); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); },function () { $("#panelLocal").prop('checked',debug_stat); }); } if(window.location.protocol.indexOf('https') != -1){ $("#panelSSL").attr('checked',true); } var weChat = { settiming:'', relHeight:500, relWidth:500, userLength:'', init:function(){ var _this = this; $('.layui-layer-page').css('display', 'none'); $('.layui-layer-page').width(_this.relWidth); $('.layui-layer-page').height(_this.relHeight); $('.bt-w-menu').height((_this.relWidth - 1) - $('.layui-layer-title').height()); var width = $(document).width(); var height = $(document).height(); var boxwidth = (width / 2) - (_this.relWidth / 2); var boxheight = (height / 2) - (_this.relHeight / 2); $('.layui-layer-page').css({ 'left':boxwidth +'px', 'top':boxheight+'px' }); $('.boxConter,.layui-layer-page').css('display', 'block'); $('.layui-layer-close').click(function(event) { window.clearInterval(_this.settiming); }); this.getUserDetails(); $('.iconCode').hide(); $('.personalDetails').show(); }, // 获取二维码 getQRCode:function(){ var _this = this; var qrLoading = layer.msg('正在获取二维码,请稍后...',{time:0,shade: [0.4,'#fff'],icon:16}); $.get('/wxapp?action=blind_qrcode', function(res) { layer.close(qrLoading); if (res.status){ $('#QRcode').empty(); $('#QRcode').qrcode({ render: "canvas", //也可以替换为table width: 200, height: 200, text:res.msg }); // $('.QRcode img').attr('src', res.msg); _this.settiming = setInterval(function(){ _this.verifyBdinding(); },2000); }else{ layer.msg('无法获取二维码,请稍后重试',{icon:2}); } }); }, // 获取用户信息 getUserDetails:function(type){ var _this = this; var conter = ''; $.get('/wxapp?action=get_user_info',function(res){ clearInterval(_this.settiming); if (!res.status){ layer.msg(res.msg,{icon:2,time:3000}); $('.iconCode').hide(); return false; } if (JSON.stringify(res.msg) =='{}'){ if (type){ layer.msg('当前绑定列表为空,请先绑定然后重试',{icon:2}); }else{ _this.getQRCode(); } $('.iconCode').show(); $('.personalDetails').hide(); return false; } $('.iconCode').hide(); $('.personalDetails').show(); var datas = res.msg; for(var item in datas){ conter += '
  • \
    \
    昵称:'+datas[item].nickName+'
    \
    \ 取消绑定\
    \
  • ' } conter += '
  • 添加绑定账号
  • ' $('.userList').empty().append(conter); }); }, // 添加绑定视图 addweChatView:function(){ $('.iconCode').show(); $('.personalDetails').hide(); this.getQRCode(); }, // 取消当前绑定 cancelBdinding:function(uid){ var _this = this; var bdinding = layer.confirm('您确定要取消当前绑定吗?',{ btn:['确认','取消'], icon:3, title:'取消绑定' },function(){ $.get('/wxapp?action=blind_del',{uid:uid}, function(res) { layer.msg(res.msg,{icon:res.status?1:2}); _this.getUserDetails(); }); },function(){ layer.close(bdinding); }); }, // 监听是否绑定 verifyBdinding:function(){ var _this = this; $.get('/wxapp?action=blind_result',function(res){ if(res){ layer.msg('绑定成功',{icon:1}); clearInterval(_this.settiming); _this.getUserDetails(); } }); }, } function open_wxapp(){ var rhtml = '' layer.open({ type: 1, title: "绑定微信", area: '500px', closeBtn: 2, shadeClose: false, content:rhtml }); weChat.init(); } $(function () { $.get("/ssl?action=GetUserInfo", function (b) { if (b.status) { $("input[name='btusername']").val(b.data.username); $("input[name='btusername']").next().text(lan.public.edit).attr("onclick", "bindBTName(2,'c')").css({ "margin-left": "-82px" }); $("input[name='btusername']").next().after('' + lan.config.binding_un + ''); } else { $("input[name='btusername']").next().text(lan.config.binding).attr("onclick", "bindBTName(2,'b')").removeAttr("style"); } bt_init(); }); }) function bt_init() { var btName = $("input[name='btusername']").val(); console.log(btName); if (!btName) { $('.wxapp_p .inputtxt').val("未绑定宝塔账号"); $('.wxapp_p .modify').attr("onclick", ""); } } function GetPanelApi() { var loadT = layer.msg('正在获取API接口信息...', { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=get_token', {}, function (rdata) { layer.close(loadT); isOpen = rdata.open ? 'checked' : ''; layer.open({ type: 1, area: "500px", title: "配置面板API", closeBtn: 2, shift: 5, shadeClose: false, content: '
    \
    \ API接口\
    \ \ \
    \
    \
    \ 接口密钥\
    \ \ \
    \
    \
    \ IP白名单
    (每行1个)
    \
    \ \ \
    \
    \ \
    ' }) }); } function showPawApi(){ layer.msg('面板API密钥仅支持一次性显示,请妥善保管。
    如需显示面板API密钥,请点击重置按钮,重新获取新的API密钥。
    注意事项:重置密钥后,已关联密钥产品,将失效,请重新添加新密钥至产品。',{icon:0,time:0,shadeClose:true,shade:0.1}); } function SetPanelApi(t_type,index) { var pdata = {} pdata['t_type'] = t_type if (t_type == 3) { pdata['limit_addr'] = $("textarea[name='api_limit_addr']").val() } if(t_type == 1){ var bdinding = layer.confirm('您确定要重置当前密钥吗?
    重置密钥后,已关联密钥产品,将失效,请重新添加新密钥至产品。',{ btn:['确认','取消'], icon:3, closeBtn: 2, title:'重置密钥' },function(){ var loadT = layer.msg('正在提交...', { icon: 16, time: 0, shade: [0.3, '#000'] }); set_token_req(pdata,function(rdata){ if (rdata.status) { $("input[name='panel_token_value']").val(rdata.msg); layer.msg('接口密钥已生成,重置密钥后,已关联密钥产品,将失效,请重新添加新密钥至产品。', { icon: 1, time: 0, shade: 0.3, shadeClose:true,closeBtn:2}); }else{ layer.msg(rdata.msg, { icon: 2}); } return false; }); }); return false } set_token_req(pdata,function(rdata){ layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); if (rdata.msg == '开启成功!') { if(t_type == 2 && index != '0') GetPanelApi(); } }); } function set_token_req(pdata,callback){ $.post('/config?action=set_token', pdata, function (rdata) { if(callback) callback(rdata); }); } function SetIPv6() { var loadT = layer.msg('正在配置,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=set_ipv6_status', {}, function (rdata) { layer.close(loadT); bt.msg(rdata); }); } function modify_basic_auth_to() { var pdata = { open: $("select[name='open']").val(), basic_user: $("input[name='basic_user']").val(), basic_pwd: $("input[name='basic_pwd']").val() } var loadT = layer.msg('正在配置BasicAuth服务,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=set_basic_auth', pdata, function (rdata) { layer.close(loadT); if (rdata.status) { layer.closeAll(); setTimeout(function () { window.location.reload(); }, 3000); } layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }); } function modify_basic_auth() { var loadT = layer.msg('正在获取配置,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/config?action=get_basic_auth_stat', {}, function (rdata) { layer.close(loadT); if (rdata.open) { show_basic_auth(rdata); } else { m_html = '
    ' + '

    危险!此功能不懂别开启!

    ' + '
    ' + '
    ' + '' + '什么是BasicAuth认证?

    ' var loadT = layer.confirm(m_html, { title: "风险提醒", area: "600px" }, function () { if (!$("#check_basic").prop("checked")) { layer.msg("请仔细阅读注意事项,并勾选同意承担风险!"); setTimeout(function () { modify_basic_auth();},3000) return; } layer.close(loadT) show_basic_auth(rdata); }); } }); } function show_basic_auth(rdata) { layer.open({ type: 1, area: "500px", title: "配置BasicAuth认证", closeBtn: 2, shift: 5, shadeClose: false, content: '
    \
    \ 服务状态\
    \ \
    \
    \
    \ 用户名\
    \ \
    \
    \
    \ 密码\
    \ \
    \
    \ \ \
    ' }) }