feat: 后端全量更新 - 含所有本次需求

- Contract.php: 返回合约账户余额(balance_contract)
- My.php: 地址管理增加BTC/ETH
- AppContract.php: 一键平仓(closeall)
- AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2)
- site.php: 手续费减半(0.018→0.009)
- agent_permission_setup.sql: 代理权限SQL
- crypto_news_crawler.py: 新闻自动采集脚本
This commit is contained in:
li
2026-03-30 20:16:32 +08:00
commit 1b24994e74
6721 changed files with 1308571 additions and 0 deletions
+235
View File
@@ -0,0 +1,235 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="btpanel/ajax/addCrontab">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">任务类型:</label>
<div class="col-xs-12 col-sm-8">
<select id="sType" data-rule="required" class="form-control selectpicker" name="sType">
{foreach name="data['sTypeArray']" item="vo"}
<option value="{$key}" {if condition="$key == 'toShell'" }selected{/if}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">任务名称:</label>
<div class="col-xs-12 col-sm-8">
<input id="name" data-rule="required" class="form-control" name="name" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">执行周期:</label>
<div class="col-xs-12 col-sm-8">
<div class="row">
<div class="col-xs-12 col-sm-3">
<select id="type" data-rule="required" class="form-control selectpicker" name="type">
{foreach name="data['cycleArray']" item="vo"}
<option value="{$key}">{$vo}</option>
{/foreach}
</select>
</div>
<div id='whereDom'></div>
</div>
</div>
</div>
<div id="sTypeDom" style="display: none;"></div>
<div class="form-group sbody" style="display: none;">
<label class="control-label col-xs-12 col-sm-2" id="sBodyTitle">脚本内容:</label>
<div class="col-xs-12 col-sm-8">
<textarea name="sBody" cols="30" rows="10" class="form-control"></textarea>
</div>
</div>
<div class="form-group urladdress" style="display: none;">
<label class="control-label col-xs-12 col-sm-2">URL地址:</label>
<div class="col-xs-12 col-sm-8">
<input type="number" name="urladdress" value="http://" class="form-control" placeholder="URL地址">
</div>
</div>
<div class="form-group rememory" style="display: none;">
<label class="control-label col-xs-12 col-sm-2">提示:</label>
<div class="col-xs-12 col-sm-8">
释放PHP、MYSQL、PURE-FTPD、APACHE、NGINX的内存占用,建议在每天半夜执行!
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
<!-- 每天 -->
<script type="text/html" id='day-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="hour" value="1" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="30" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- N天 -->
<script type="text/html" id='day-n-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input id="where1" type="number" name="where1" value="1" class="form-control" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereHourDom">
<div class="input-group">
<input type="number" name="hour" value="1" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="30" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- 每小时 -->
<script type="text/html" id='hour-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="minute" value="30" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- N小时 -->
<script type="text/html" id='hour-n-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="where1" value="1" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="30" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- N分钟 -->
<script type="text/html" id='minute-n-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="where1" value="1" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- 每周 -->
<script type="text/html" id='week-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<select id="week" class="form-control selectpicker" name="week">
{foreach name="data['weekArray']" item="vo"}
<option value="{$key}" {if condition="$key == '1'"}selected{/if}>{$vo}</option>
{/foreach}
</select>
</div>
<div class="col-xs-12 col-sm-3" id="whereHourDom">
<div class="input-group">
<input type="number" name="hour" value="1" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="30" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<script type="text/html" id='month-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input id="where1" type="number" name="where1" value="1" class="form-control" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereHourDom">
<div class="input-group">
<input type="number" name="hour" value="1" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="30" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<script type="text/html" id='sTypeSiteTpl'>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2"><%=title%>:</label>
<div class="col-xs-12 col-sm-8">
<select id="sName" class="selectpicker form-control" name="sName">
<% for(var i=0; i<data.length; i++){ %>
<option value="<%=data[i].ps%>"><%=data[i].name == 'ALL'?data[i].ps:data[i].name+'['+data[i].ps+']'%></option>
<% } %>
</select>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">备份到:</label>
<div class="col-xs-12 col-sm-8">
<select id="backupTo" class="selectpicker form-control" name="backupTo">
<% for(var i=0; i<orderOpt.length; i++){ %>
<option value="<%=orderOpt[i].value%>"><%=orderOpt[i].name%></option>
<% } %>
</select>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">保留最新:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="save" type="number" name="save" value="{$row['save']?:3}" class="form-control" placeholder="保留最新" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
</div>
</script>
<script type="text/html" id='sTypePathTpl'>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2"><%=title%>:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="sName" type="text" name="sName" value="{$row['sName']?:'/www/wwwroot/'}" class="form-control" placeholder="" data-rule="required">
<span class="input-group-addon getDir"><i class="fa fa-folder-open"></i></span>
</div>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">备份到:</label>
<div class="col-xs-12 col-sm-8">
<select id="backupTo" class="selectpicker form-control" name="backupTo">
<% for(var i=0; i<orderOpt.length; i++){ %>
<option value="<%=orderOpt[i].value%>"><%=orderOpt[i].name%></option>
<% } %>
</select>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">保留最新:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="save" type="number" name="save" value="{$row['save']?:3}" class="form-control" placeholder="保留最新" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
</div>
</script>
+236
View File
@@ -0,0 +1,236 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="btpanel/ajax/modifyCrond">
<input type="hidden" name="id" value="{$row['id']}" class="form-control">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">任务类型:</label>
<div class="col-xs-12 col-sm-8">
<select id="sType" data-rule="required" class="form-control selectpicker" name="sType">
{foreach name="data['sTypeArray']" item="vo"}
<option value="{$key}" {if condition="$key == $row['sType']" }selected{/if}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">任务名称:</label>
<div class="col-xs-12 col-sm-8">
<input id="name" data-rule="required" class="form-control" name="name" type="text" value="{$row['name']}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">执行周期:</label>
<div class="col-xs-12 col-sm-8">
<div class="row">
<div class="col-xs-12 col-sm-3">
<select id="type" data-rule="required" class="form-control selectpicker" name="type">
{foreach name="data['cycleArray']" item="vo"}
<option value="{$key}" {if condition="$key == $row['type']" }selected{/if}>{$vo}</option>
{/foreach}
</select>
</div>
<div id='whereDom'></div>
</div>
</div>
</div>
<div id="sTypeDom"></div>
<div class="form-group sbody">
<label class="control-label col-xs-12 col-sm-2" id="sBodyTitle">脚本内容:</label>
<div class="col-xs-12 col-sm-8">
<textarea name="sBody" cols="30" rows="10" class="form-control">{$row['sBody']}</textarea>
</div>
</div>
<div class="form-group urladdress">
<label class="control-label col-xs-12 col-sm-2">URL地址:</label>
<div class="col-xs-12 col-sm-8">
<input type="number" name="urladdress" value="{$row['urladdress']?:'http://'}" class="form-control" placeholder="URL地址">
</div>
</div>
<div class="form-group rememory">
<label class="control-label col-xs-12 col-sm-2">提示:</label>
<div class="col-xs-12 col-sm-8">
释放PHP、MYSQL、PURE-FTPD、APACHE、NGINX的内存占用,建议在每天半夜执行!
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
<!-- 每天 -->
<script type="text/html" id='day-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="hour" value="{$row['where_hour']?:1}" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="{$row['where_minute']?:30}" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- N天 -->
<script type="text/html" id='day-n-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input id="where1" type="number" name="where1" value="{$row['where1']?:1}" class="form-control" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereHourDom">
<div class="input-group">
<input type="number" name="hour" value="{$row['where_hour']?:1}" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="{$row['where_minute']?:30}" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- 每小时 -->
<script type="text/html" id='hour-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="minute" value="{$row['where_minute']?:30}" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- N小时 -->
<script type="text/html" id='hour-n-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="where1" value="{$row['where1']?:1}" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="{$row['where_minute']?:30}" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- N分钟 -->
<script type="text/html" id='minute-n-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input type="number" name="where1" value="{$row['where1']?:30}" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- 每周 -->
<script type="text/html" id='week-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<select id="week" class="form-control selectpicker" name="week">
{foreach name="data['weekArray']" item="vo"}
<option value="{$key}" {if condition="$key == $row['where1']"}selected{/if}>{$vo}</option>
{/foreach}
</select>
</div>
<div class="col-xs-12 col-sm-3" id="whereHourDom">
<div class="input-group">
<input type="number" name="hour" value="{$row['where_hour']?:1}" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="{$row['where_minute']?:30}" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<!-- 每月 -->
<script type="text/html" id='month-tpl'>
<div class="col-xs-12 col-sm-3" id="where1Dom">
<div class="input-group">
<input id="where1" type="number" name="where1" value="{$row['where1']?:1}" class="form-control" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereHourDom">
<div class="input-group">
<input type="number" name="hour" value="{$row['where_hour']?:1}" class="form-control" data-rule="required">
<span class="input-group-addon">小时</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" id="whereMinuteDom">
<div class="input-group">
<input type="number" name="minute" value="{$row['where_minute']?:30}" class="form-control" data-rule="required">
<span class="input-group-addon">分钟</span>
</div>
</div>
</script>
<script type="text/html" id='sTypeSiteTpl'>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2"><%=title%>:</label>
<div class="col-xs-12 col-sm-8">
<select id="sName" class="selectpicker form-control" name="sName">
<% for(var i=0; i<data.length; i++){ %>
<option value="<%=data[i].ps%>"><%=data[i].name == 'ALL'?data[i].ps:data[i].name+'['+data[i].ps+']'%></option>
<% } %>
</select>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">备份到:</label>
<div class="col-xs-12 col-sm-8">
<select id="backupTo" class="selectpicker form-control" name="backupTo">
<% for(var i=0; i<orderOpt.length; i++){ %>
<option value="<%=orderOpt[i].value%>"><%=orderOpt[i].name%></option>
<% } %>
</select>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">保留最新:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="save" type="number" name="save" value="{$row['save']?:3}" class="form-control" placeholder="保留最新" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
</div>
</script>
<script type="text/html" id='sTypePathTpl'>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2"><%=title%>:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="sName" type="text" name="sName" value="{$row['sName']?:'/www/wwwroot/'}" class="form-control" placeholder="" data-rule="required">
<span class="input-group-addon getDir"><i class="fa fa-folder-open"></i></span>
</div>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">备份到:</label>
<div class="col-xs-12 col-sm-8">
<select id="backupTo" class="selectpicker form-control" name="backupTo">
<% for(var i=0; i<orderOpt.length; i++){ %>
<option value="<%=orderOpt[i].value%>"><%=orderOpt[i].name%></option>
<% } %>
</select>
</div>
</div>
<div class="form-group site_list">
<label class="control-label col-xs-12 col-sm-2">保留最新:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="save" type="number" name="save" value="{$row['save']?:3}" class="form-control" placeholder="保留最新" data-rule="required">
<span class="input-group-addon"></span>
</div>
</div>
</div>
</script>
+55
View File
@@ -0,0 +1,55 @@
<style>
.layui-layer-fast .layui-layer-btn{
text-align: right !important;
}
</style>
<div class="panel panel-solid">
<div class="panel-heading">
任务列表
<button type="button" class="btn btn-default btn-xs btn-refresh" style="margin-left: 10px;"><i class="fa fa-refresh"></i></button>
<button type="button" class="btn btn-default btn-xs btn-add">新建</button>
</div>
<div class="panel-body">
<table class="table table-striped table-bordered text-center">
<thead>
<tr>
<th>任务名称</th>
<th>状态</th>
<th>周期</th>
<th>执行时机</th>
<th>保存数量</th>
<th>备份到</th>
<th>添加时间</th>
<th>操作</th>
</tr>
</thead>
<tbody id="table-crontab"></tbody>
</table>
</div>
</div>
<script type="text/html" id="crontabtpl">
<% for(var i=0; i<data.length; i++){ %>
<tr data-id='<%=data[i].id%>'>
<td data-field="name"><%=data[i].name%></td>
<td data-field="status"><a href="javascript:;" class="set_task_status" data-id="<%=data[i].id%>">
<%if(data[i].status != 1){%>
<span class="text-red" data-status="1" style="cursor:pointer" title="启用该计划任务">停用<i class="fa fa-fw fa-pause"></i></span>
<%}else{%>
<span class="text-green" data-status="0" style="cursor:pointer" title="停用该计划任务">正常<i class="fa fa-fw fa-play"></i></span>
<%}%>
</a>
</td>
<td data-field="type"><%=data[i].type%></td>
<td data-field="cycle"><%=data[i].cycle%></td>
<td data-field="save"><%=data[i].save?data[i].save+'份':'-'%></td>
<td data-field="backupTo"><%=data[i].backupTo%></td>
<td data-field="addtime"><%=data[i].addtime%></td>
<td data-id='<%=data[i].id%>'>
<button type="button" class="btn btn-default btn-xs btn-StartTask">执行</button>
<button type="button" class="btn btn-default btn-xs btn-edit">编辑</button>
<button type="button" class="btn btn-default btn-xs btn-GetLogs">日志</button>
<button type="button" class="btn btn-danger btn-xs btn-del">删除</button>
</td>
</tr>
<% } %>
</script>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+135
View File
@@ -0,0 +1,135 @@
<div class="panel panel-solid">
<div class="panel-body">
<div class="row text-center" style="height:100px">
<div class="col-md-3 col-sm-6 col-xs-12" id="panel-load">
<input type="hidden" class="knob knob-load" value="0" data-width="100%" data-height="90"
data-fgColor="#3c8dbc" disabled>
<div class="knob-label">负载状态</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12" id="panel-cpu">
<input type="hidden" class="knob knob-cpu" value="0" data-width="100%" data-height="90"
data-fgColor="#3c8dbc" disabled>
<div class="knob-label">CPU使用率</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12" id="panel-memory">
<i class="fa fa-rocket hidden" aria-hidden="true" style="z-index: 999;"></i>
<input type="hidden" class="knob knob-memory" value="0" data-width="100%" data-height="90"
data-fgColor="#3c8dbc" disabled>
<div class="knob-label">内存使用率</div>
</div>
<div class="col-md-3 col-sm-6 col-xs-12" id="panel-disk">
<input type="hidden" class="knob knob-disk" value="0" data-width="100%" data-height="90"
data-fgColor="#3c8dbc" disabled>
<div class="knob-label">空间使用率</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="nav-tabs-custom">
<ul class="nav nav-tabs" id="liveLine">
<li class="active"><a href="#line-net" data-toggle="tab" data-chart='net'>流量</a></li>
<li><a href="#line-cpu" data-toggle="tab" data-chart='cpu'>CPU</a></li>
</ul>
<div class="tab-content penel-liveLine">
<div class="active tab-pane" id="line-net">
<div class="row margin text-center" id="net-info">
<div class="col-md-3 col-sm-6">
<p>
<i class="fa fa-upload text-orange" aria-hidden="true"></i> 上行: <a id="upSpeed">0 KB</a>
</p>
</div>
<div class="col-md-3 col-sm-6">
<p>
<i class="fa fa-download text-blue" aria-hidden="true"></i> 下行: <a id="downSpeed">0
KB</a>
</p>
</div>
<div class="col-md-3 col-sm-6">
<p>总发送: <a id="upAll">0 KB</a></p>
</div>
<div class="col-md-3 col-sm-6">
<p>总接收: <a id="downAll">0 KB</a></p>
</div>
</div>
<div class="row margin">
<div id="chart-net" class="chart-line" style="width:100%;"></div>
</div>
</div>
<div class="tab-pane" id="line-cpu">
<div class="row margin">
<div id="chart-cpu" class="chart-line" style="width:100%;"></div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-3 col-xs-12">
<div class="panel panel-ServerInfo">
<div class="panel-body" style="padding-top:0;">
<table class="table">
<tbody>
<tr>
<td width="140">操作系统</td>
<td>{$SystemTotal.system}</td>
</tr>
<tr>
<td>面板版本</td>
<td>{$SystemTotal.version}</td>
</tr>
<tr>
<td width="140">已不间断运行</td>
<td>{$SystemTotal.time}</td>
</tr>
<tr>
<td width="140">PHP版本</td>
<td>{:PHP_VERSION}</td>
</tr>
<tr>
<td width="140">运行方式</td>
<td>{:php_sapi_name()}</td>
</tr>
<tr>
<td>{:__('Software')}</td>
<td>{$Think.server.SERVER_SOFTWARE}</td>
</tr>
<tr>
<td>{:__('ThinkPHP版本')}</td>
<td>{:THINK_VERSION}</td>
</tr>
<tr>
<td>{:__('FastAdmin version')}</td>
<td>{$Think.config.fastadmin.version}</td>
</tr>
<tr>
<td>{:__('Sapi name')}</td>
<td>{:php_sapi_name()}</td>
</tr>
<tr>
<td>{:__('Debug mode')}</td>
<td>{$Think.config.app_debug?__('Yes'):__('No')}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="panel panel-solid">
<div class="panel-heading">
网站信息
<div class="pull-right">
<select id='siteType'>
<option value="-1">全部分类</option>
{foreach $SiteTypes as $vo}
<option value="{$vo.id}">{$vo.name}</option>
{/foreach}
</select>
</div>
</div>
<div class="panel-body">
<table id="table" class="table table-bordered text-center" width="100%"></table>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+90
View File
@@ -0,0 +1,90 @@
<style>
.label {
cursor: pointer;
}
.page span,
.page a {
display: inline-block;
height: 28px;
line-height: 28px;
padding: 0 10px;
font-family: "Arial";
font-size: 13px;
color: #666;
float: left;
border: 1px solid #ececec;
border-right: none;
}
.page a.prev {
border-left: #ddd solid 1px
}
.page a:hover {
background: #e8e8e8;
color: #20a53a;
text-shadow: 0 1px 0 #fff;
cursor: pointer
}
.page spanold {
font-size: 12px;
padding: 4px 10px !important;
border-style: solid;
border-width: 1px;
border-color: #ddd #ddd #ccc;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
display: inline-block;
line-height: 16px;
background: #f5f5f5;
color: #333;
text-shadow: 0 1px 0 #fff
}
.page .Pcurrent {
color: #fff;
background: #20a53a;
cursor: default;
border-color: #20a53a;
}
.page .Pcount {
color: #333;
padding: 0 10px;
margin-right: 0px;
border-right: 1px solid #ececec;
}
</style>
<div class="panel panel-solid">
<div class="panel-heading">面板操作日志
<div class="pull-right">
<span class="label label-default label-run-logs">面板运行日志</span>
</div>
</div>
<div class="panel-body">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>编号</th>
<th>用户</th>
<th>操作类型</th>
<th>详情</th>
<th>操作时间</th>
</tr>
</thead>
<tbody id="table-logs"></tbody>
</table>
<div class="page" id="table-page" data-events="navPages"></div>
</div>
</div>
<script type="text/html" id="logstpl">
<% for(var i=0; i<data.length; i++){ %>
<tr>
<td><%=data[i].id%></td>
<td><%=data[i].username%></td>
<td><%=data[i].type%></td>
<td><%=data[i].log%></td>
<td><%=data[i].addtime%></td>
</tr>
<% } %>
</script>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+87
View File
@@ -0,0 +1,87 @@
<style>
.label {
cursor: pointer;
}
</style>
<div class="row" style="height:300px">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="panel panel-solid">
<div class="panel-heading">平均负载
<div class="pull-right">
<span class="label label-default label-date" data-date="yesterday">昨天</span>
<span class="label label-success label-active label-date" data-date="today">今天</span>
<span class="label label-default label-date" data-date="last7">最近7天</span>
<span class="label label-default label-date" data-date="last30">最近30天</span>
<span class="label label-default label-date datetimerange">自定义</span>
</div>
</div>
<div class="panel-body">
<div id="chart-load" class="chart-line" style="width:100%;height:330px" data-action="getLoadAverage"></div>
</div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="panel panel-solid">
<div class="panel-heading">CPU
<div class="pull-right">
<span class="label label-default label-date" data-date="yesterday">昨天</span>
<span class="label label-success label-active label-date" data-date="today">今天</span>
<span class="label label-default label-date" data-date="last7">最近7天</span>
<span class="label label-default label-date" data-date="last30">最近30天</span>
<span class="label label-default label-date datetimerange">自定义</span>
</div>
</div>
<div class="panel-body">
<div id="chart-cpu" class="chart-line" style="width:100%;height:330px" data-action="getCpuIo" data-start="" data-end=""></div>
</div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="panel panel-solid">
<div class="panel-heading">内存IO
<div class="pull-right">
<span class="label label-default label-date" data-date="yesterday">昨天</span>
<span class="label label-success label-active label-date" data-date="today">今天</span>
<span class="label label-default label-date" data-date="last7">最近7天</span>
<span class="label label-default label-date" data-date="last30">最近30天</span>
<span class="label label-default label-date datetimerange">自定义</span>
</div>
</div>
<div class="panel-body">
<div id="chart-memory" class="chart-line" style="width:100%;height:330px" data-action="getCpuIo"></div>
</div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="panel panel-solid">
<div class="panel-heading">磁盘IO
<div class="pull-right">
<span class="label label-default label-date" data-date="yesterday">昨天</span>
<span class="label label-success label-active label-date" data-date="today">今天</span>
<span class="label label-default label-date" data-date="last7">最近7天</span>
<span class="label label-default label-date" data-date="last30">最近30天</span>
<span class="label label-default label-date datetimerange">自定义</span>
</div>
</div>
<div class="panel-body">
<div id="chart-disk" class="chart-line" style="width:100%;height:330px" data-action="getDiskIo"></div>
</div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="panel panel-solid">
<div class="panel-heading">网络IO
<div class="pull-right">
<span class="label label-default label-date" data-date="yesterday">昨天</span>
<span class="label label-success label-active label-date" data-date="today">今天</span>
<span class="label label-default label-date" data-date="last7">最近7天</span>
<span class="label label-default label-date" data-date="last30">最近30天</span>
<span class="label label-default label-date datetimerange">自定义</span>
</div>
</div>
<div class="panel-body">
<div id="chart-net" class="chart-line" style="width:100%;height:330px" data-action="GetNetWorkIo"></div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB