GGSheng's picture
feat: deploy Gemma 4 to hf space
08c964e verified
{% extends "layout.html" %} {% block content %}
<link href="{{g.cdn_url}}/layer/layer.css" rel="stylesheet" />
<link href="{{g.cdn_url}}/jqueryCsxz/zyzn_1.css" rel="stylesheet" />
<div class="main-content">
<div class="container-fluid" style="padding-bottom: 54px">
<div class="pos-box bgw mtb15 radius4">
<div
class="flex tab-list"
id="configTab"
style="justify-content: space-between"
>
<div class="flex">
<div class="tabs-item" data-type="allConfig">全部设置</div>
<div class="tabs-item" data-type="baseConfig">
<span>基础设置</span>
</div>
<div class="tabs-item" data-type="panelConfig">
{{data['lan']['H2']}}
</div>
<div class="tabs-item" data-type="securityConfig">安全设置</div>
<div class="tabs-item" data-type="alertConfig">告警通知</div>
</div>
<div class="search pull-right">
<input
type="text"
id="search-val"
class="ser-text pull-left"
placeholder="搜索设置"
/>
<button
type="button"
class="ser-sub pull-left"
id="search-btn"
></button>
</div>
</div>
</div>
<div class="setbox bgw mtb15 tab-view-box configure-box">
<div class="panel-search hide" data-type="searchConfig">
<div class="configure-title">搜索设置</div>
<div style="padding-top: 25px"></div>
<div class="panel-search-box text-center"></div>
</div>
<div class="panel-config panel-base hide" data-type="baseConfig">
<div class="configure-title">基础设置</div>
<div class="configure-block">
<div class="line" title="关闭面板">
<div class="line-title">关闭面板</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="closePanel"
type="checkbox"
name="close_panel"
/>
<label
class="btswitch-btn"
for="closePanel"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">
仅关闭当前的面板服务,不影响web服务器,数据库等程序运行
</div>
</div>
</div>
<div class="line" title="面板SSL">
<div class="line-title">面板SSL</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="panelSsl"
type="checkbox"
name="ssl"
/>
<label
class="btswitch-btn"
for="panelSsl"
style="margin-bottom: 0"
></label>
</div>
<button
type="button"
class="btn btn-default btn-xs panelSslConfig"
style="vertical-align: middle; margin-left: 10px"
>
面板SSL配置
</button>
</div>
<div class="line-row-tips">
为面板设置https协议访问,提升面板访问安全性,<a
href="https://www.bt.cn/bbs/thread-105443-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
</div>
<div class="line" title="API接口">
<div class="line-title">API接口</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="apiInterface"
type="checkbox"
name="api"
/>
<label
class="btswitch-btn"
for="apiInterface"
style="margin-bottom: 0"
></label>
</div>
<button
type="button"
class="btn btn-default btn-xs apiInterfaceBtn"
style="vertical-align: middle; margin-left: 10px"
>
API接口配置
</button>
</div>
<div class="line-row-tips">
提供面板API接口访问的支持(堡塔APP需要开启该功能),<a
href="https://www.bt.cn/bbs/thread-20376-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
</div>
<div class="line" title="监听IPv6">
<div class="line-title">监听IPv6</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="monitorIPv6"
type="checkbox"
name="ipv6"
/>
<label
class="btswitch-btn"
for="monitorIPv6"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">监听IPv6地址的访问</div>
</div>
</div>
<div class="line" title="BasicAuth认证">
<div class="line-title">BasicAuth认证</div>
<div class="line-form">
<div class="line">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="basicAuth"
type="checkbox"
name="basic_auth"
/>
<label
class="btswitch-btn"
for="basicAuth"
style="margin-bottom: 0"
></label>
</div>
</div>
</div>
<div class="line-row-tips">
为面板增加一道基于BasicAuth的认证服务,有效防止面板被扫描,<a
href="https://www.bt.cn/bbs/thread-34374-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
<div class="line" title="动态口令认证">
<div class="line-title">动态口令认证</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="checkTwoStep"
type="checkbox"
name="check_two_step"
/>
<label
class="btswitch-btn"
for="checkTwoStep"
style="margin-bottom: 0"
></label>
</div>
<button
type="button"
class="btn btn-default btn-xs checkTwoStepConfig"
style="vertical-align: middle; margin-left: 10px"
>
动态口令配置
</button>
</div>
<div class="line-row-tips">
(Google
Authenticator,谷歌身份认证)为面板提供动态口令的登录的验证,<a
href="https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=105839"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
</div>
<div class="line" title="面板别名">
<div class="line-title">面板别名</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{session['title']}}"
name="webname"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">给面板取个别的名称,用于网页标题</div>
</div>
<div class="line" title="绑定域名">
<div class="line-title">绑定域名</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['domain']}}"
name="domain"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">
为面板绑定一个访问域名,<span class="color-red"
>注意:一旦绑定域名,只能通过域名访问面板</span
>
</div>
</div>
<div class="line" title="授权IP">
<div class="line-title">授权IP</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
placeholder="示例: 1.1.1.1,2.2.2.1-2.2.2.2"
name="limitip"
value="{{data['panel']['limitip']}}"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">
设置访问授权IP,多个IP地址,请使用“,”分割,<span class="color-red"
>注意:一旦设置授权IP,只有指定IP的电脑能访问面板</span
>
</div>
</div>
<div class="line" title="服务器IP">
<div class="line-title">服务器IP</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['address']}}"
name="address"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">
默认为外网IP,若您在本地虚拟机测试,请填写虚拟机内网IP
</div>
</div>
<div class="line" title="服务器时间">
<div class="line-title">服务器时间</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['systemdate']}}"
name="systemdate"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 syncDateBtn"
>
同步
</button>
<div class="line-row-tips">同步当前服务器时间</div>
</div>
<div class="line" title="默认建站目录">
<div class="line-title">默认建站目录</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['sites_path']}}"
name="sites_path"
/>
<div class="selected-file sitesPath">
<span class="glyphicon glyphicon-folder-open cursor"></span>
</div>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">创建的站点,默认将保存到该目录下</div>
</div>
<div class="line" title="默认备份目录">
<div class="line-title">默认备份目录</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['backup_path']}}"
name="backup_path"
/>
<div class="selected-file backupPath">
<span class="glyphicon glyphicon-folder-open cursor"></span>
</div>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">网站和站点默认的备份目录</div>
</div>
<div class="line" title="面板端口">
<div class="line-title">面板端口</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['port']}}"
name="port"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 setPanelPort"
>
设置
</button>
<div class="line-row-tips">
建议端口范围8888 - 65535,<span class="color-red"
>注意:有安全组的服务器请提前在安全组放行新端口</span
>,<a
href="https://www.bt.cn/bbs/thread-109457-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
<div class="line" title="安全入口">
<div class="line-title">安全入口</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['admin_path']}}"
name="entrance"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 setSafetyEntrance"
>
设置
</button>
<div class="line-row-tips">
面板管理入口,设置后只能通过指定安全入口登录面板,如: /www_bt_cn
</div>
</div>
<div class="line" title="面板账号">
<div class="line-title">面板账号</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="username"
value="{{session['username']}}"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 editPanelAccount"
>
设置
</button>
<div class="line-row-tips">设置面板账号</div>
</div>
<div class="line" title="面板密码">
<div class="line-title">面板密码</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="password"
value="********"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 editPanelPassword"
>
设置
</button>
<div class="line-row-tips">设置面板密码</div>
</div>
<div class="line" title="绑定宝塔账号">
<div class="line-title">绑定宝塔账号</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="bind_user_info"
disabled
/>
</div>
<button type="button" class="btn btn-success btn-sm ml5 bindBtUser">
设置
</button>
<button
type="button"
class="btn btn-default btn-sm ml5 unbindBtUser"
>
解绑
</button>
<div class="line-row-tips">
面板大多数功能依赖云端服务(证书申请,产品购买,软件列表等),该功能仅用于云端服务,不涉及敏感操作
</div>
</div>
<div class="line" title="临时访问授权">
<div class="line-title">临时访问授权</div>
<div class="line-input">
<button
type="button"
class="btn btn-success btn-sm setTempAuthView"
>
临时访问授权管理
</button>
</div>
<div class="line-row-tips">为非管理员临时提供面板访问权限</div>
</div>
</div>
</div>
<div class="panel-config hide" data-type="panelConfig">
<div class="configure-title">面板设置</div>
<div class="configure-block">
<div class="line" title="关闭面板">
<div class="line-title">关闭面板</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="closePanel"
type="checkbox"
name="close_panel"
/>
<label
class="btswitch-btn"
for="closePanel"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">
仅关闭当前的面板服务,不影响web服务器,数据库等程序运行
</div>
</div>
</div>
<div class="line" title="监听IPv6">
<div class="line-title">监听IPv6</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="monitorIPv6"
type="checkbox"
name="ipv6"
/>
<label
class="btswitch-btn"
for="monitorIPv6"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">监听IPv6地址的访问</div>
</div>
</div>
<div class="line" title="离线模式">
<div class="line-title">离线模式</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="offlineMode"
type="checkbox"
name="is_local"
/>
<label
class="btswitch-btn"
for="offlineMode"
style="margin-bottom: 0"
></label>
</div>
</div>
</div>
<div class="line-row-tips">
离线模式下,面板更新,插件购买等联网服务将无法使用
</div>
</div>
<div class="line" title="开发者模式">
<div class="line-title">开发者模式</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="developerMode"
type="checkbox"
name="debug"
/>
<label
class="btswitch-btn"
for="developerMode"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">
仅第三方开发者开发阶段使用(普通用户请勿开启)
</div>
</div>
</div>
<div class="line" title="API接口">
<div class="line-title">API接口</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="apiInterface"
type="checkbox"
name="api"
/>
<label
class="btswitch-btn"
for="apiInterface"
style="margin-bottom: 0"
></label>
</div>
<button
type="button"
class="btn btn-default btn-xs apiInterfaceBtn"
style="vertical-align: middle; margin-left: 10px"
>
API接口配置
</button>
</div>
<div class="line-row-tips">
提供面板API接口访问的支持(堡塔APP需要开启该功能),<a
href="https://www.bt.cn/bbs/thread-20376-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
</div>
<div class="line" title="在线客服">
<div class="line-title">在线客服</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="onlineService"
type="checkbox"
name="show_workorder"
/>
<label
class="btswitch-btn"
for="onlineService"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">显示在线客服功能按钮</div>
</div>
</div>
<div class="line" title="用户体验改善计划">
<div class="line-title">用户体验改善计划</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="setImprovement"
type="checkbox"
name="improvement"
/>
<label
class="btswitch-btn"
for="setImprovement"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">参加用户体验改善计划来帮助我们改进产品,<a href="https://www.bt.cn/new/agreement_privacy.html" target="_blank" class="btlink">查看隐私政策</a></div>
</div>
</div>
<div class="line" title="面板别名">
<div class="line-title">面板别名</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{session['title']}}"
name="webname"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">给面板取个别的名称,用于网页标题</div>
</div>
<div class="line" title="超时时间">
<div class="line-title">超时时间</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['session_timeout']}}"
name="session_timeout"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">
如果用户超过以上时间
<span class="color-red">{{data['session_timeout']}}秒</span
>,未操作面板,面板将自动退出登录
</div>
</div>
<div class="line" title="默认建站目录">
<div class="line-title">默认建站目录</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['sites_path']}}"
name="sites_path"
/>
<div class="selected-file sitesPath">
<span class="glyphicon glyphicon-folder-open cursor"></span>
</div>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">创建的站点,默认将保存到该目录下</div>
</div>
<div class="line" title="默认备份目录">
<div class="line-title">默认备份目录</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['backup_path']}}"
name="backup_path"
/>
<div class="selected-file backupPath">
<span class="glyphicon glyphicon-folder-open cursor"></span>
</div>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">网站和站点默认的备份目录</div>
</div>
<div class="line" title="服务器IP">
<div class="line-title">服务器IP</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['address']}}"
name="address"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">
默认为外网IP,若您在本地虚拟机测试,请填写虚拟机内网IP
</div>
</div>
<div class="line" title="服务器时间">
<div class="line-title">服务器时间</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['systemdate']}}"
name="systemdate"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 syncDateBtn"
>
同步
</button>
<div class="line-row-tips">同步当前服务器时间</div>
</div>
<div class="line" title="面板账号">
<div class="line-title">面板账号</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="username"
value="{{session['username']}}"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 editPanelAccount"
>
设置
</button>
<div class="line-row-tips">设置面板账号</div>
</div>
<div class="line" title="面板密码">
<div class="line-title">面板密码</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="password"
value="********"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 editPanelPassword"
>
设置
</button>
<div class="line-row-tips">设置面板密码</div>
</div>
<div class="line" title="绑定宝塔账号">
<div class="line-title">绑定宝塔账号</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="bind_user_info"
disabled
/>
</div>
<button type="button" class="btn btn-success btn-sm ml5 bindBtUser">
设置
</button>
<button
type="button"
class="btn btn-default btn-sm ml5 unbindBtUser"
>
解绑
</button>
<div class="line-row-tips">
面板大多数功能依赖云端服务(证书申请,产品购买,软件列表等),该功能仅用于云端服务,不涉及敏感操作
</div>
</div>
<div class="line" title="面板菜单栏隐藏">
<div class="line-title">面板菜单栏隐藏</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="menu_hide_list"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 menuBarManage"
>
设置
</button>
<div class="line-row-tips">隐藏左侧菜单栏目</div>
</div>
<div class="line" title="面板云端请求方式">
<div class="line-title">面板云端请求方式</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="request_type"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 request_type"
>
设置
</button>
<div class="line-row-tips">
面板请求云端时,使用的请求方式,默认支持python、curl、php,请根据实际情况切换
</div>
</div>
<div class="line" title="面板云端请求线路">
<div class="line-title">面板云端请求线路</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="request_iptype"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 request_iptype"
>
设置
</button>
<div class="line-row-tips">
面板请求云端时,使用的请求线路,默认支持auto、ipv4、ipv6,请根据实际情况切换
</div>
</div>
<div class="line" title="面板云端通讯节点配置">
<div class="line-title">面板云端通讯节点配置</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
name="node_config"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 node_config"
>
设置
</button>
<div class="line-row-tips">
请勿随意调整节点配置,仅获取云端数据出现未响应或错误时,可尝试切换该节点
</div>
</div>
</div>
</div>
<div class="panel-config hide" data-type="securityConfig">
<div class="configure-title">安全设置</div>
<div class="configure-block">
<div class="line" title="面板安全告警">
<div class="line-title">面板安全告警</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="panelSafe"
type="checkbox"
name="panel_safe"
/>
<label
class="btswitch-btn"
for="panelSafe"
style="margin-bottom: 0"
></label>
</div>
</div>
<button
type="button"
class="btn btn-default btn-xs panelSafeAlertMethod"
style="vertical-align: middle; margin-left: 10px"
>
提醒方式
</button>
</div>
<div class="line-row-tips">
告警内容包含:面板用户变更、面板日志删除、面板开启开发者、面板开启API
</div>
</div>
<div class="line" title="面板SSL">
<div class="line-title">面板SSL</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="panelSsl"
type="checkbox"
name="ssl"
/>
<label
class="btswitch-btn"
for="panelSsl"
style="margin-bottom: 0"
></label>
</div>
<button
type="button"
class="btn btn-default btn-xs panelSslConfig"
style="vertical-align: middle; margin-left: 10px"
>
面板SSL配置
</button>
</div>
<div class="line-row-tips">
为面板设置https协议访问,提升面板访问安全性,<a
href="https://www.bt.cn/bbs/thread-105443-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
</div>
<div class="line" title="BasicAuth认证">
<div class="line-title">BasicAuth认证</div>
<div class="line-form">
<div class="line">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="basicAuth"
type="checkbox"
name="basic_auth"
/>
<label
class="btswitch-btn"
for="basicAuth"
style="margin-bottom: 0"
></label>
</div>
</div>
</div>
<div class="line-row-tips">
为面板增加一道基于BasicAuth的认证服务,有效防止面板被扫描,<a
href="https://www.bt.cn/bbs/thread-34374-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
<div class="line" title="动态口令认证">
<div class="line-title">动态口令认证</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="checkTwoStep"
type="checkbox"
name="check_two_step"
/>
<label
class="btswitch-btn"
for="checkTwoStep"
style="margin-bottom: 0"
></label>
</div>
<button
type="button"
class="btn btn-default btn-xs checkTwoStepConfig"
style="vertical-align: middle; margin-left: 10px"
>
动态口令配置
</button>
</div>
<div class="line-row-tips">
(Google
Authenticator,谷歌身份认证)为面板提供动态口令的登录的验证,<a
href="https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=105839"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
</div>
<div class="line" title="访问设备验证">
<div class="line-title">访问设备验证</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="sslVerify"
type="checkbox"
name="ssl_verify"
/>
<label
class="btswitch-btn"
for="sslVerify"
style="margin-bottom: 0"
></label>
</div>
<button
type="button"
class="btn btn-default btn-xs sslVerifyConfig"
style="vertical-align: middle; margin-left: 10px"
>
访问设备验证配置
</button>
</div>
<div class="line-row-tips">
基于SSL证书双向验证,开启后电脑需要安装此证书,否则将无法访问,属于极高安全级别的访问限制方式,类似银行账号U盘密钥登录。<a
href="https://www.bt.cn/bbs/thread-77863-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
</div>
<div class="line" title="密码复杂度验证">
<div class="line-title">密码复杂度验证</div>
<div class="line-form">
<div class="line-row">
<div class="ssh-item" style="margin-left: 0; padding: 0">
<input
class="btswitch btswitch-ios"
id="passwordSafe"
type="checkbox"
name="paw_complexity"
/>
<label
class="btswitch-btn"
for="passwordSafe"
style="margin-bottom: 0"
></label>
</div>
</div>
<div class="line-row-tips">
为面板密码提供复杂度验证方式,复杂度验证规则:<span
class="color-red"
>密码必须满足密码长度大于8位且大写字母、小写字母、数字、特殊字符至少3项组合</span
>
</div>
</div>
</div>
<div class="line" title="绑定域名">
<div class="line-title">绑定域名</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['domain']}}"
name="domain"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">
为面板绑定一个访问域名,<span class="color-red"
>注意:一旦绑定域名,只能通过域名访问面板</span
>
</div>
</div>
<div class="line" title="授权IP">
<div class="line-title">授权IP</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
placeholder="示例: 1.1.1.1,2.2.2.1-2.2.2.2"
name="limitip"
value="{{data['panel']['limitip']}}"
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 savePanelConfig"
disabled
>
保存
</button>
<div class="line-row-tips">
设置访问授权IP,多个IP地址,请使用“,”分割,<span class="color-red"
>注意:一旦设置授权IP,只有指定IP的电脑能访问面板</span
>
</div>
</div>
<div class="line" title="面板端口">
<div class="line-title">面板端口</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['port']}}"
name="port"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 setPanelPort"
>
设置
</button>
<div class="line-row-tips">
建议端口范围8888 - 65535,<span class="color-red"
>注意:有安全组的服务器请提前在安全组放行新端口</span
>,<a
href="https://www.bt.cn/bbs/thread-109457-1-1.html"
class="btlink"
target="_blank"
>了解详情</a
>
</div>
</div>
<div class="line" title="安全入口">
<div class="line-title">安全入口</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="{{data['panel']['admin_path']}}"
name="entrance"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 setSafetyEntrance"
>
设置
</button>
<div class="line-row-tips">
面板管理入口,设置后只能通过指定安全入口登录面板,如: /www_bt_cn
</div>
</div>
<div class="line" title="未认证的响应状态">
<div class="line-title">未认证响应状态</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value=""
name="status_code"
disabled
/>
</div>
<button
type="button"
class="btn btn-success btn-sm ml5 setStatusCodeView"
>
设置
</button>
<div class="line-row-tips">
用于在未登录且未正确输入安全入口时的响应,可用于隐藏面板特征
</div>
</div>
<div class="line" title="密码过期时间">
<div class="line-title">密码过期时间</div>
<div class="line-input">
<input
type="text"
class="bt-input-text"
value="未设置"
name="paw_expire_time"
disabled
/>
<button
type="button"
class="btn btn-success btn-sm ml5 setPawExpiration"
>
设置
</button>
</div>
<div class="line-row-tips">
为面板密码设置过期时间,过期后需要重新设置密码
</div>
</div>
<div class="line" title="临时访问授权">
<div class="line-title">临时访问授权</div>
<div class="line-input">
<button
type="button"
class="btn btn-success btn-sm setTempAuthView"
>
临时访问授权管理
</button>
</div>
<div class="line-row-tips">为非管理员临时提供面板访问权限</div>
</div>
<div class="line" title="地区登录限制">
<div class="line-title" style="vertical-align:middle;">地区登录限制</div>
<div class="line-input" id="select-region" value="" data-value="">
</div>
<input type="text" class="area-duoxuan" style="width: 0;height: 0; display: none;" />
<div class="line-row-tips regional-entry-policy">设置面板地区登录策略</div>
</div>
</div>
</div>
<div class="panel-config alert-view-box hide" data-type="alertConfig">
<div class="tab-nav-border">
<span class="on">告警列表</span>
<span >告警设置</span>
<span>告警日志</span>
</div>
<div class="tab-con " style="padding:10px 0">
<div class="tab-block on">
<div id="addAlertTask" style="padding: 15px 45px;"></div>
<div id="alertList"></div>
</div>
<div class="tab-block " id="alertConfig"></div>
<div class="tab-block" id="alertLog"></div>
</div>
</div>
<div class="panel-search hide" style="padding-top: 25px"></div>
</div>
</div>
<style>
#configTab .ser-text{
border: #20a53a 1px solid;
}
#configTab .ser-sub{
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxAAAAMQBz4pYTAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAE2SURBVDiNndJBS1VRFMXx9UzNQUQD0caFk6YhEUFCOPETiJQfIygQbNQgCCeOGjYLGjRJkPoKoSGIRKADs1nQoEIEfw3cry6v+3oPN2z2ufuu8z/7nruC9ORNvMRXHOIFbrTogjQfOniKX87iR2P9HSv/A1zA+xK/wRwmMYV5vKt3r/sBnpTgcb9R8aw0D3sB1/GzTum3uZsfSnupCVgr8vwQgKXSLnR7I0nuJJFkN4PjY9WZbmMkyXGtx4YAjFY9aQI2knSS3B4CMFd1508HV3CE3QHfP17G2sdo7298UJfzChMtmy9jszTLbT4InpfgCx6Vme5hFd/8jW1cbQME93Hg39jDYmOKT5hGOmi7rNkk15KcJvmcZKv6E0k2k9xNsp1keZBx2vIi3tYkG+cBxJmV13HrN6Szg7ZCfX3NAAAAAElFTkSuQmCC) no-repeat center #20a53a;
}
.configure-box {
padding: 20px;
}
.configure-block > .line {
padding: 6px 0;
}
.configure-block > .line:hover {
background: #a5a5a514;
transition: background 0.2s;
cursor: pointer;
}
.configure-title {
line-height: 30px;
font-size: 14px;
border-bottom: 1px solid #e7e7e7;
padding: 5px 5px 8px 10px;
font-weight: bold;
color: #666;
}
.configure-box .configure-block {
padding: 25px 0;
}
.configure-box .line .line-title {
font-size: 12px;
color: #333;
display: inline-block;
width: 140px;
text-align: right;
padding-right: 15px;
height: 30px;
line-height: 30px;
vertical-align: top;
}
.configure-box .line input[type='text'] {
width: 260px;
}
.configure-box .line .line-tips {
margin-top: 5px;
color: #999;
margin-left: 135px;
}
.configure-box .line > button {
height: 30px;
vertical-align: top;
}
.configure-box .line .line-input input,
.configure-box .line .line-form input {
height: 30px;
line-height: 30px;
}
.configure-box .line .line-input {
display: inline-block;
position: relative;
}
.configure-box .line .line-form {
display: inline-block;
vertical-align: top;
}
.configure-box .line .line-form .ssh-item {
display: inline-block;
margin: 0;
padding: 0;
float: none;
vertical-align: middle;
}
.line-row,
.line-row-tips {
height: 30px;
line-height: 30px;
display: inline-block;
}
.line-row-tips {
margin-left: 10px !important;
color: #999;
}
.bt_warning {
color: #fc6d26;
}
.line-split {
border-bottom: 1px #ececec dashed;
margin: 10px 0;
}
.selected-file {
height: 30px;
line-height: 30px;
width: 40px;
text-align: center;
background: #fafafa;
position: absolute;
right: 0;
top: 0;
border: 1px solid #cccccc;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
cursor: pointer;
}
.btn-success[disabled] {
opacity: 0.65;
}
.info-title-tips {
width: 100%;
margin: 0 auto;
margin-bottom: 25px;
padding-left: 25px;
}
.download_Qcode {
overflow: hidden;
padding: 10px 0;
}
.download_Qcode .item_down {
width: 100%;
text-align: center;
border-right: 1px solid #ececee;
text-align: center;
box-sizing: border-box;
}
.download_Qcode .item_down:last-child {
border-right: none;
}
.download_Qcode .qcode_title {
margin-bottom: 5px;
}
.download_Qcode .item_down img {
width: 120px;
}
.create_temp_view {
padding: 15px 20px;
}
.create_temp_view .line .tname {
text-align: left;
float: inherit;
}
.create_temp_view .info-r {
margin: 0;
}
/*消息推送模块*/
.layui-layer.layui-layer-page.panel_push_form .bt-form .form-checkbox-label {
height: 18px;
line-height: 18px;
}
.layui-layer.layui-layer-page.panel_push_form .bt-form .inlineBlock.group span.unit {
line-height: 28px;
}
/*消息推送模块 end*/
#panel_menu_tab .bterror{text-decoration: underline;}
.line-row-tips i,
.line-title i {
display: inline-flex;
line-height: 1.4;
background-color: yellow;
font-style: normal;
}
.show-default {
position: relative;
top: -3px;
display: inline-block;
width: 4px;
height: 4px;
margin-left: 6px;
background-color: #cbcbcb;
border-radius: 50%;
}
/* 配置模块图标 */
.config-alert-icon{
width: 36px;
height: 36px;
display: inline-block;
background: url(../../static/img/config_alert.png);
background-size: 100%;
border-radius: 7px;
margin-right:8px;
}
.alert-icon-mail{background-position: 0 36px;}
.alert-icon-feishu{background-position: 0 144px;}
.alert-icon-weixin{background-position: 0 72px;}
.alert-icon-sms{background-position: 0 180px;}
.alert-icon-wx_account{background-position: 0 108px;}
.alert-config-content{
display: inline-block;
vertical-align: top;
}
.alert-config-content span{
font-weight: bold;
font-size: 14px;
}
.alert-config-content p{
font-size: 12px;
}
/* 添加告警任务 */
.panel_alert_task_view .bt_select_updown .bt_select_list{
max-height: 140px;
}
#addAlertTask .line .tname {
height: 35px;
line-height: 35px;
font-size: 13px;
}
#addAlertTask .bt_select_updown,
#addAlertTask .inlineBlock.group .unit,
#addAlertTask .bt-input-text {
height: 35px;
line-height: 35px;
}
#addAlertTask span.inlineBlock{
vertical-align: -3px;
}
#addAlertTask .bt_select_updown .bt_select_value {
height: 33px;
line-height: 33px;
}
#addAlertTask .bt_select_updown .bt_select_list .item {
height: 30px;
line-height: 30px;
}
#addAlertTask .bt_select_updown .bt_select_content {
font-size: 13px;
}
#addAlertTask .btn {
font-size: 13px;
padding: 7px 30px;
}
#addAlertTask .line .info-r {
margin-bottom: 10px;
}
/* 添加告警任务 end*/
/*ssl证书*/
.panel-ssl div.mb15{
text-align: center;
}
.panel-ssl .layer-info-title{
font-size: 20px;
color:#333;
margin-left: 5px;
}
.panel-ssl .bt-form .layui-layer-ico{
background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAWpJREFUSIm9llFuhCAQhn/wIlxjiUnZa3TTs6hnMew1tEmzvYYXEfqwwAoiQlzLk4Hh/xjGGQb4p0FSi6yvBagSIPrDTWoinjv1CE2+3byi4/T1M2aBPGEr6FlrXyhmA3QxsAMxyVsAjSc6Vx0ApE7K+voJix2Q6HH6/L2GIG3FU8I5g/W1QDU30ERMtwcBABoaHYVsaaxAZ423gly8zgQxyVtQNWzB3gLy/liqzgEFadFNt0dbBGJ9LYzIYUgSBKoGAM0WrASSBtlSEoGVQnxQUMfM5hWsCLLQ9D0KiuQKdr8M2ZBA6wUyBTTMAw/22pyEOI3FM7KOUTU34VTg2X5MbC4pOtop/z26XwZoIqDo9UhxZZJrc0Cn73tkri/mVQGkNZ9dyg5M8pZJrk3giyFMch3LvWjP4H7hgofQXftGDDebk9x8MX3GsGe33wWZJzkU8tYyPE+CHHDpnc32zJwqAnnAZY9X0Mj8Aa5a6BugrbJUAAAAAElFTkSuQmCC');
background-position:none;
width: 27px;
height: 27px;
}
.panel-ssl .explainDescribeList{
color:#333;
font-size:14px;
background:#F5F7FA;
margin-top:24px;
padding:10px 20px 10px 20px;
border-radius: 2px;
}
.panel-ssl .explainDescribeList>li {
list-style: none;
line-height: 30px;
}
.panel-ssl .pt10 .line{
padding-bottom: 0;
}
.panel-ssl .pt10 .line:first-child .tname{
font-size:14px;
}
.panel-ssl .pt10 .line .info-r{
margin-bottom: 0;
}
select[name='cert_type']{
width:420px !important;
}
.panel-ssl .sslSafeTips{
color:#666;
margin-top:20px;
}
.pd40{
padding:25px 40px ;
}
.panel-ssl .explainDescribeList img{
cursor: pointer;
border: 1px solid #dcdfe6;
margin-top: 10px;
}
.panel-ssl .ssl-con-box{
height: 542px;
overflow: auto;
}
.ssl-jump-view .explainDescribeList{
margin: 0;
margin-bottom: 15px;
}
/*ssl证书 end*/
/* 地区登录限制*/
#select-region .green{
color: #20a53a;
}
#select-region .bt_select_value{
display: flex;
flex-wrap: wrap;
min-height: 33px;
}
#select-region .bt_select_list{
position: absolute;
}
#select-region .bt_select_content {
background-color: #f4f4f5;
border-color: #e9e9eb;
color: #909399;
height: 24px;
padding: 0px 8px;
line-height: 22px;
border: 1px solid #e9e9eb;
border-radius: 4px;
white-space: nowrap;
align-items: center;
max-width: 100%;
margin: 4px 15px 4px 0;
overflow: unset;
font-size: 13px;
}
#select-region .arrow{
width: 15px;
float: left;
}
#select-region .svg{
margin-right: 10px;
fill: rgb(102, 102, 102);
}
#select-region .svg-ac{
transform: rotate(90deg);
fill: #20a53a;
}
#select-region .select-region{
position: relative;
}
#select-region .item-child .ac{
color: #20a53a;
}
#select-region .select-region .icon-item-active::before {
content: "";
display: inline-block;
width: 12px;
height: 6px;
border-left: 2px solid #20a532;
border-bottom: 2px solid #20a532;
transform: rotate(-45deg);
position: absolute;
right: 10px;
top: 8px;
}
/* 地区登录限制 end*/
/*new 动态告警列表*/
.inlineBlock.group .unit {
height: 32px;
line-height: 32px;
}
.bt-input-text,
.inlineBlock.group span.unit{
border-color:#DCDFE6;
}
.panel_alert_task_view .bt_select_updown,
.panel_alert_task_view .bt_select_updown .bt_select_value{
height: 32px;
line-height:32px;
}
.bt-form span.inlineBlock,
span.text-tips {
vertical-align: sub;
}
/*new 动态告警列表 end*/
</style>
{% endblock %} {% block scripts %}
<script src="{{g.cdn_url}}/js/jquery-2.2.4.min.js"></script>
<script
type="text/javascript"
src="{{g.cdn_url}}/js/jquery.qrcode.min.js"
></script>
<script type="text/javascript" src="{{g.cdn_url}}/laydate/laydate.js"></script>
<script src="{{g.cdn_url}}/language/{{session['lan']}}/lan.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script type="text/javascript" src="{{g.cdn_url}}/js/clipboard.min.js"></script>
<script src="{{g.cdn_url}}/js/public.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script src="{{g.cdn_url}}/js/public_backup.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script src="{{g.cdn_url}}/js/tools.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script src="{{g.cdn_url}}/js/jsencrypt.min.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script src="{{g.cdn_url}}/jqueryCsxz/City_data.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script src="{{g.cdn_url}}/jqueryCsxz/areadata.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script src="{{g.cdn_url}}/jqueryCsxz/auto_area.js?version={{g['version']}}&repair={{data['js_random']}}"></script>
<script
type="text/javascript"
src="{{g.cdn_url}}/amd/require.min.js"
data-main="{{g.cdn_url}}/amd/main"
></script>
<script type="text/javascript">
if(bt.get_storage('edit_ssh')) {
bt.set_storage('edit_ssh', '')
var time = setInterval(function (){
if(bt.get_cookie('ssl_config')=='1') {
clearInterval(time)
bt.set_cookie('ssl_config', '0')
$('[for=panelSsl]').eq(1).click()
}
},500)
}
window.localStorage.setItem('mypcip',"{{session['address']}}");
var mypcip = window.localStorage.getItem('mypcip')
var ipArr = mypcip.split('.'),numberIp = window.localStorage.getItem('mypcipShow')
$('.mypcip .cw').text(numberIp !== null && parseInt(numberIp) ? ipArr[0] + '.***.***.' + ipArr[ipArr.length - 1] : mypcip);
numberIp !== null && parseInt(numberIp) ? $('.mypcip').removeClass('active') : $('.mypcip').addClass('active')
$('.mypcip').mousedown(function () {
var stime = new Date().getTime();//当前时间
$(this).mouseup(function (e) {
if(new Date().getTime() - stime < 200) {//鼠标按下和松开的时间间隔小于200为点击事件
var is_show = $(this).hasClass('active')
$('.mypcip .cw').text(is_show ? ipArr[0] + '.***.***.' + ipArr[ipArr.length - 1] : mypcip);
window.localStorage.setItem('mypcipShow',is_show ? 1 : 0);
if(is_show) $(this).removeClass('active');
else $(this).addClass('active');
e.stopPropagation()
e.preventDefault()
}
});
})
$('.mypcip').on('dblclick', function () {
bt.pub.copy_pass(mypcip);
bt_tools.msg({msg:'复制成功',status: true});
})
bt.set_cookie('order', 'id desc');
bt.set_cookie('serverType', "{{session['webserver']}}");
$("#setBox").click(function () {
if ($(this).prop("checked")) {
$("input[name=id]").prop("checked", true);
} else {
$("input[name=id]").prop("checked", false);
}
});
$('[name="limitip"]').keyup(function () {
$('[name="limitip"]').val($(this).val().replace(/,/g,','))
})
var is_files_html = false;
var task_open = 0;
var task_close = false;
if ($(".current").attr("id") == 'memuAfiles') {
is_files_html = true;
}
$('.tabs-item').click(function () {
if($(this).data('type') === 'alertConfig') $('.search.pull-right').hide()
else $('.search.pull-right').show()
})
function task_stat(my_init) {
if (!my_init) {
my_init = 0;
if (task_open) return;
}
if (task_close) return;
$.post('/task?action=get_task_lists', {
status: -3
}, function (task_list) {
if (task_list.length == 0) {
if (my_init && is_files_html) GetFiles(getCookie('Path'));
if (task_open) {
layer.close(task_open);
task_open = false;
}
return;
}
var msg_body = '';
var is_add = false;
for (var i = 0; i < task_list.length; i++) {
if (task_list[i]['status'] == -1) {
if (!task_open || !$(".message-list").attr("class")) {
show_task();
}
if (task_list[i]['type'] == '1') {
msg_body +=
'<div class="mw-con">\
<ul class="waiting-down-list">\
<li>\
<div class="down-filse-name"><span class="fname" style="width:80%;" title="正在下载: ' +
task_list[i].shell + '">正在下载: ' + task_list[i].shell +
'</span><span style="position: absolute;left: 84%;top: 25px;color: #999;">' + task_list[i].log
.pre + '%</span><span class="btlink" onclick="remove_task(' + task_list[i].id + ')" style="position: absolute;top: 25px;right: 20px;">取消</span></div>\
<div class="down-progress"><div class="done-progress" style="width:' + task_list[i]
.log.pre + '%"></div></div>\
<div class="down-info"><span class="total-size"> ' + task_list[i].log.used + '/' +
ToSize(task_list[i].log.total) + '</span><span class="speed-size">' + (task_list[i].log.speed ==
0 ? '正在连接..' : task_list[i].log.speed) + '/s</span><span style="margin-left: 20px;">预计还要: ' +
task_list[i].log.time + '</span></div>\
</li>\
</ul>\
</div>'
} else {
msg_body +=
'<div class="mw-title"><span style="max-width: 88%;display: block;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">' +
task_list[i].name + ': ' + task_list[i].shell +
'</span><span class="btlink" onclick="remove_task(' + task_list[i].id + ')" style="position: absolute;top: 10px;right: 15px;">取消</span></div>\
<div class="mw-con codebg">\
<code>' + task_list[i].log + '</code>\
</div>'
}
} else {
if (!is_add) {
msg_body += '<div class="mw-title">等待执行任务</div><div class="mw-con"><ul class="waiting-list">';
is_add = true;
}
msg_body += '<li><span class="wt-list-name" style="width: 90%;">' + task_list[i].name + ': ' +
task_list[i].shell + '</span><span class="mw-cancel" onclick="remove_task(' + task_list[i].id +
')">X</span></li>';
}
}
if (task_open) {
if (is_add) {
msg_body += '</ul></div>';
}
$(".message-list").html(msg_body);
}
if (my_init > 3) {
if (is_files_html) GetFiles(getCookie('Path'));
my_init = 1;
}
my_init += 1
setTimeout(function () {
task_stat(my_init);
}, 1000);
});
}
function show_task() {
task_open = layer.open({
type: 1,
title: "实时任务队列",
area: '500px',
closeBtn: 2,
shadeClose: false,
shade: false,
offset: 'auto',
content: '<div style="margin: 10px;" class="message-list"></div>',
cancel: function () {
task_close = true;
}
});
}
function remove_task(id) {
loadT = layer.msg('正在取消任务...', {
time: 0,
icon: 16,
shade: [0.3, '#000']
});
$.post('/task?action=remove_task', {
id: id
}, function (rdata) {
layer.close(loadT)
layer.msg(rdata.msg);
});
}
task_stat();
var sessionInfo = {
title:"{{session['title']}}",
username:"{{session['username']}}",
statusCode:"{{data['status_code']}}"
}
// 消息推送
// $('.setAlarmType').on('click', function(){open_three_channel_auth('MsgPush')});
$('.setAlarmType').on('click', function(){$('[data-type=alertConfig]').click()});
$('#onlineCustomer').click(function (){
var customer = $("#wechat-customer");
var ltd_end = bt.get_cookie('ltd_end');
if (!(ltd_end > 0)){
if(!$('#pay_product_view').length > 0){
product_recommend.pay_product_sign('ltd',45,'ltd')
layer.msg('在线客服仅支持企业版用户使用', {icon: 5});
return false;
}
}else{
if(customer.hasClass('hide')){
customer.removeClass('hide');
}else{
customer.addClass('hide');
}
}
})
var num = 0,too = false,time = 0
$('.toolbar-right .service').hover(function () {
if(too) return false
$(this).css({'background-image':'url(/static/img/service_2.svg)','background-color':'rgb(32, 165, 58)'})
$('.toolbar-right').css({'border-top-left-radius': '4px','border-top-right-radius': '4px'})
$('#wechat-customer').removeClass('hide')
$('.wechat-close').hide()
num=0
},function () {
if(too) return false
$(this).attr('style','')
$('.toolbar-right').attr('style','')
clearTimeout(time)
time = setTimeout(function (){
$('#wechat-customer').addClass('hide')
},50)
num=1
})
$('.wechat-close').on('click',function(){
$('.toolbar-right .service').attr('style','')
$('.toolbar-right').attr('style','')
$(this).parent().addClass('hide');
too=false
})
$('#wechat-customer').hover(function (){
clearTimeout(time)
},function (){
if(too) return false
$('.toolbar-right .service').attr('style','')
$('.toolbar-right').attr('style','')
clearTimeout(time)
$('#wechat-customer').addClass('hide')
num=1
})
$('.toolbar-right .service').click(function (){
$('.wechat-close').show()
if(num==0){
too = true
num=1
}else if (num==1){
$(this).attr('style','')
$('.toolbar-right').attr('style','')
$('#wechat-customer').addClass('hide')
too=false
num=2
}else {
if ($('#wechat-customer').hasClass('hide')) {
too = true
$('.toolbar-right .service').css({'background-image':'url(/static/img/service_2.svg)','background-color':'rgb(32, 165, 58)'})
$('.toolbar-right').css({'border-top-left-radius': '4px','border-top-right-radius': '4px'})
$('#wechat-customer').removeClass('hide')
} else {
$('.toolbar-right .service').attr('style','')
$('.toolbar-right').attr('style','')
$('#wechat-customer').addClass('hide')
too=false
}
}
})
var id = 0;
$('.feedback').hover(function () {
$('#wechat-customer').addClass('hide')
id = layer.tips('点击打开调查问卷', '.feedback',{
tips: [4, 'rgb(54, 58, 80)'],
time: 0,
success: function (layero, index) {
var top = layero.css("top");
console.log(top)
layero.css("top", parseInt(top) + 20 + "px");
}
})
$('.toolbar-right').css({'border-bottom-left-radius': '10px','border-bottom-right-radius': '10px'})
$(this).css({'background-image':'url(/static/img/feedback_2.svg)','background-color':'rgb(32, 165, 58)'})
},function (){
layer.close(id)
$(this).attr('style','')
$('.toolbar-right').attr('style','')
})
$('.toolbar-right .feedback').on('click',function(){
if($('.nps_survey').length >= 1) return false; //防止多层
if(window.localStorage.getItem('panelNPS') == null) window.localStorage.setItem('panelNPS',true)
layer.open({
type:1,
title:false,
offset: 'auto',
btn:false,
area:'580px',
skin:'nps_survey',
closeBtn: 2,
content:'<div class="nps_survey_box"">\
<div class="nps_survey_banner">\
<span>\
<i></i>\
<span style="vertical-align: 4px;">宝塔面板产品体验调查</span>\
</span>\
</div>\
<div style="padding:30px 40px;">\
<div class="nps_survey_score" style="height: 130px;">\
<div class="survey_title">您向朋友或同事推荐宝塔面板的可能性有多大?</div>\
<ul class="survey_score_num small">\
<li data-content="0">0</li>\
<li data-content="1">1</li>\
<li data-content="2">2</li>\
<li data-content="3">3</li>\
<li data-content="4">4</li>\
<li data-content="5">5</li>\
<li data-content="6">6</li>\
</ul>\
<ul class="survey_score_num medium">\
<li data-content="7">7</li>\
<li data-content="8">8</li>\
</ul>\
<ul class="survey_score_num large">\
<li data-content="9">9</li>\
<li data-content="10">10</li>\
</ul>\
</div>\
<div class="nps_survey_content hide">\
<div class="nps_survey_line">\
<span class="nps_survey_title"><i>* </i>1.您的哪些需求在宝塔面板上还没有被满足的?</span>\
<textarea type="text" name="problem_one" placeholder=""></textarea>\
<div class="placeholder c9 problem_tips" style="top: 36px; left: 10px; display: block;font-size: 12px;">您在使用产品过程中有什么需求没有被满足,或遇到什么BUG没被解决,请将您的问题或需<br>求详细描述给我们,我们尽力为您解决及开发对应的功能</div>\
</div>\
<div class="nps_survey_line hide">\
<span class="nps_survey_title">2.您给出该分数的主要原因是什么?</span>\
<span class="nps_surver_tips">例如影响您评分的因素:功能、操作这些等等</span>\
<input type="text" name="problem_two">\
</div>\
<div class="nps_survey_line hide">\
<span class="nps_survey_title">3.您的哪些需求在宝塔面板上没有得到满足?</span>\
<span class="nps_surver_tips">您的建议很可能在下个版本更新发布</span>\
<input type="text" name="problem_three">\
</div>\
<div class="score_title"><span>我们特别重视您的需求反馈,我们会定期每周进行需求评审。希望能更好的帮到您</span></div>\
</div>\
<button class="btn btn-success set_survey_info" style="margin-top:30px">提交</button>\
</div>\
</div>\
<style>\
.nps_survey_banner{position: relative;background: url(/static/img/feedback/QA_banner.png);width:100%;background-size: 100%;height: 92px;margin-top: -1px;}\
.nps_survey_banner>span{position: absolute;left: 32px;top: 16px;font-size: 17px;color: #fff;}\
.nps_survey_banner i{background-image: url(/static/images/svg/logo-white.svg);background-repeat: no-repeat;background-size: 18px;display: inline-block;width: 20px;height: 20px;}\
.survey_title {font-size: 19px;font-weight: bold;text-align: center;color: #000;}\
.score_title{font-size:13px;color:#20a53a;text-align:center;line-height: 35px;}\
.nps_survey_score ul{position: relative;margin-top:25px;display: inline-block;border: 1px solid #ccc;border-radius: 2px;font-size:0;cursor: pointer;}\
.survey_score_num::before {content: "";height: 35px;width: 100%;display: inline-block;position: absolute;bottom: -37px;cursor: auto;}\
.nps_survey_score ul.small::before{background:linear-gradient(to bottom,#ffdfdd,#fff)}\
.nps_survey_score ul.medium::before{background:linear-gradient(to bottom,#fff2db,#fff);}\
.nps_survey_score ul.large::before{background:linear-gradient(to bottom,#ebf9e0,#fff)}\
.survey_score_num.small::after {content: "不可能推荐";position: absolute;top: 48px;left: 117px;font-size: 12px;cursor: auto;}\
.survey_score_num.medium::after {content: "可能推荐";position: absolute;top: 48px;left: 18px;font-size: 12px;cursor: auto;}\
.survey_score_num.large::after {content: "一定推荐";position: absolute;top: 48px;left: 18px;font-size: 12px;cursor: auto;}\
.survey_score_num li {position: relative;display: inline-block;width: 42px;height: 42px;line-height: 42px;text-align: center;font-size:15px;font-weight: bold;}\
.survey_score_num .act::before {content: attr(data-content);color: #fff;height: 52px;line-height: 52px;width: 100%;position: absolute;top: -5px;font-size: 19px;background: inherit;border-radius: 4px;font-weight: initial;text-align: left;padding-left: 10px;}\
.survey_score_num .ten::before {content: attr(data-content);color: #fff;height: 52px;line-height: 52px;width: 100%;position: absolute;top: -5px;font-size: 19px;background: inherit;border-radius: 4px;font-weight: initial;text-align: left;padding-left: 2px;}\
.survey_score_num .act::after {content: "分";font-size:12px;color: #fff;position: absolute;left:21px;margin-left: 2px;}\
.survey_score_num .ten::after {content: "分";font-size:12px;color: #fff;position: absolute;left:25px;}\
.survey_score_num li::before{content:"";position: absolute;right: 0;top:10px;border-right-style: solid;border-right-width: 1px;border-color: rgb(255 255 255 / 30%);height: 25px;}\
.survey_score_num li:last-child::before{border:none}\
.survey_score_num.small{border-color: #f3a8a5;background: #f7cfce;color: #ed6d68;}\
.survey_score_num.medium{border-color: #f4cf8f;background: #fbe6c0;color: #f7be56;margin: 0 5px;}\
.survey_score_num.large{border-color: #a7db88;background: #d8f0ca;color: #69be3d;}\
.nps_survey_content{margin-top: 35px;}\
.nps_survey_line{ font-size:15px;position: relative;}\
.nps_survey_line.problem_rule input,.nps_survey_line.problem_rule textarea{border-color:#f56c6c}\
.nps_survey_line.problem_rule::before{content:"请输入您的需求再提交~";position:absolute;top:72px;font-size:12px;color:#f56c6c}\
.nps_survey_line.problem_rule1::before{content:"请输入您的需求再提交~";position:absolute;top:190px;font-size:12px;color:#f56c6c}\
.nps_survey_line .nps_survey_title{margin:20px 0 7px 0;font-weight: bold;}\
.nps_survey_line .nps_survey_title i{color:red;}\
.nps_survey_line .nps_surver_tips{font-size:12px;color:#999;}\
.nps_survey_line p{color:#999;font-size:12px;margin-bottom:5px;}\
.nps_survey_line input{width:490px;height:45px;border:1px solid #cccccc;font-size:12px;margin-top: 5px;margin-bottom: 20px;padding-left: 5px;}\
.nps_survey_line textarea{width:500px;height:160px;border:1px solid #cccccc;font-size:12px;margin-top: 5px;margin-bottom: 20px;padding: 5px 10px;line-height: 22px;}\
.set_survey_info{margin: 5px auto 0;display: block;padding: 6px 40px;}\
</style>',
success:function(layers,indexs){
var goNum = 0;
var chooseScore = null;
//评分栏目鼠标经过事件
$('.survey_score_num').on('mouseenter','li',function(){
if(goNum < 1) {
$(window).resize()
goNum++
}
var _mouseScore = $(this).text()
if(!$(this).hasClass('act')&& !$(this).hasClass('ten')){
$.each($('.survey_score_num li'),function (i,v){
if(i != chooseScore){
$(v).removeAttr('class')
$(v).removeAttr('style')
}
})
$(this).addClass('act')
if(_mouseScore <= 6){
$(this).css({'background-color':'red','opacity': '0.8'})
}else if(_mouseScore == 7 || _mouseScore == 8){
$(this).css({'background-color':'#ff7f00','opacity': '0.8'})
}else if(_mouseScore == 10){
$(this).css({'background-color':'#20a53a','opacity': '0.8'})
$(this).addClass('ten')
} else{
$(this).css({'background-color':'#20a53a','opacity': '0.8'})
}
}
})
$('.survey_score_num').on('mouseout','li',function(){
$.each($('.survey_score_num li'),function (i,v){
if(i != chooseScore){
$(v).removeAttr('class')
$(v).removeAttr('style')
}
})
})
$('.survey_score_num').on('click','li',function (e){
chooseScore = $(this).text()
$.each($('.survey_score_num li'),function (i,v){
if(i != chooseScore){
$(v).removeAttr('class')
$(v).removeAttr('style')
}
})
$(this).css('opacity','1')
$('.nps_survey_content').removeClass('hide')
$('.nps_survey').css('top',($(window).height()-663)/2+'px')
// 取消按钮样式
$('.set_survey_info').removeAttr('style')
})
// 聚焦问题1取消验证类名
$('[name=problem_one]').focus(function(){
$('.nps_survey_line').removeClass('problem_rule')
})
// 文本域触发隐藏显示
$('.nps_survey_line .problem_tips').click(function () {
$(this).prev().focus()
})
$('.nps_survey_line textarea').on('focus',function () {
$('.nps_survey_line').removeClass('problem_rule1')
$(this).next().hide();
layer.tips($(this).next().html(), $(this), {
tips: [1, '#20a53a'],
time: 0,
area: $(this).width()
});
})
$('.nps_survey_line textarea').on('blur',function () {
if ($(this).val() === '') $(this).next().show();
layer.closeAll('tips')
})
// 设置调查信息
$('.set_survey_info').click(function(){
var _score = $('.act').text()
// _one = $('input[name=problem_one]').val(),
// _two = $('input[name=problem_two]').val(),
// _three = $('input[name=problem_three]').val()
// _two = _two == '' ? ' ' : _two
// _three = _three == '' ? ' ' : _three
if(_score == '') layer.msg('打个分数再提交吧,麻烦您了~',{icon:0})
// if(_one == ''){
// $('input[name=problem_one]').parent('.nps_survey_line').addClass('problem_rule')
// return false;
// }
// 文本域问题 清除所有校验
$('textarea').parent('.nps_survey_line').removeClass('problem_rule1')
// 排查未填写的必填项
_one = $('textarea[name=problem_one]').val()
if(_one == '') {
$('textarea[name=problem_one]').parent('.nps_survey_line').addClass('problem_rule1')
return false
}
$('textarea[name=problem_one]').parent('.nps_survey_line').removeClass('problem_rule1')
// 文本域问题 end
$.post('/config?action=write_nps',{software_name:'panel',product_type:0,rate:_score,questions:JSON.stringify({
"LMdrUlYWLMjhjYjczNTUyMDIwcoCSWTt": _one,
// "PCpsJvGUmMjRjYjczNTUyMDExLGAMKPd": _two,
// "IYlVujIciMmM4YjczNTUyMDMzfselTpB":_three,
"RS4shJeBIMmIwYjczNTUyMDJim9MuCVq":'v1-'+window.localStorage.getItem('panelVersion')})},
function (rdata) {
if(rdata.status){
layer.close(indexs)
layer.open({
title: false,
btn: false,
shadeClose: true,
shade:0.1,
closeBtn: 0,
skin:'qa_thank_dialog',
area: '230px',
content: '<div class="qa_thank_box" style="background-color:#F1F9F3;text-align: center;padding: 20px 0;"><img src="/static/img/feedback/QA_like.png" style="width: 55px;"><p style="margin-top: 15px;">感谢您的参与!</p></div>',
success: function (layero,index) {
$(layero).find('.layui-layer-content').css({'padding': '0','border-radius': '5px'})
$(layero).css({'border-radius': '5px','min-width': '230px'})
setTimeout(function(){layer.close(index)},3000)
}
})
}
});
})
},cancel:function(index){
var _width = $(window).width(),revers = Math.abs(_width) * -1,_height = $(window).height()
$('.nps_survey_box').append('<style>\
.nps_survey {-webkit-animation: slide-out-elliptic-right-bck 0.7s ease-in both;animation: slide-out-elliptic-right-bck 0.7s ease-in both;}\
@-webkit-keyframes slide-out-elliptic-right-bck {\
0% {\
-webkit-transform: translateX(0) rotateY(0) scale(1);\
transform: translateX(0) rotateY(0) scale(1);\
-webkit-transform-origin: '+revers+'px 200%;\
transform-origin: '+revers+'px 200%;\
opacity: 1;\
}\
100% {\
-webkit-transform: translateX('+(Number(_width)+200)+'px) rotateY(-30deg) scale(0);\
transform: translateX('+(Number(_width)+200)+'px) rotateY(-30deg) scale(0);\
-webkit-transform-origin: -60% 100%;\
transform-origin: -60% '+(_height-(_height-600))+'px;\
opacity: 1;\
}\
}\
</style>')
setTimeout(function(){layer.close(index)},700)
// 关闭nps
$.post('/config?action=stop_nps',{software_name:'panel'})
return false;
}
})
})
</script>
{% endblock %}
</div>