国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

411 linhas
19KB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="<?php echo $cfg_soft_lang; ?>">
  5. <title>系统概况</title>
  6. <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
  7. <base target="_self">
  8. <link rel="stylesheet" href="../static/css/bootstrap.min.css">
  9. <link rel="stylesheet" href="../static/font-awesome/css/font-awesome.min.css">
  10. <link rel="stylesheet" href="css/base.css">
  11. <link rel="stylesheet" href="css/indexbody.css">
  12. <script src="../static/js/jquery.js"></script>
  13. <script src="../static/js/bootstrap.bundle.js"></script>
  14. <script src="../static/js/webajax.js"></script>
  15. <script src="../static/js/chart.min.js"></script>
  16. <script src="js/indexbody.js"></script>
  17. <script src="js/main.js"></script>
  18. <style>
  19. table.stattable td{padding:.6rem;border-bottom:1px solid #dee2e6;text-align:right;vertical-align:middle}
  20. .table{margin-bottom:0}
  21. .stattable{width:100%}
  22. .web-info{padding:10px;background:#f6f6f6;border-radius:.2rem;text-align:center}
  23. .web-info p{margin-bottom:10px}
  24. </style>
  25. </head>
  26. <body>
  27. <div class="container-fluid">
  28. <div class="row">
  29. <div id="__testEvn" class="col-md-12"></div>
  30. <div class="col-md-12 mt-3">
  31. <div class="card">
  32. <div class="card-header"><a title="点击查看流量统计图" href="#statChart"><i class="fa fa-line-chart"></i></a>&nbsp;流量统计表</div>
  33. <div class="card-body">
  34. <table class="stattable">
  35. <tbody>
  36. <tr class="title">
  37. <td width="10%"></td>
  38. <td width="20%">浏览次数(PV)</td>
  39. <td width="20%">独立访客(UV)</td>
  40. <td width="20%">IP</td>
  41. <td width="18%" >访问次数</td>
  42. </tr>
  43. <tr class="bg-white">
  44. <td class="today">今日</td>
  45. <td class="today" id="today_pv"></td>
  46. <td class="today" id="today_uv"></td>
  47. <td class="today" id="today_ip"></td>
  48. <td class="today" id="today_vv"></td>
  49. </tr>
  50. <tr class="bg-white">
  51. <td>昨日</td>
  52. <td id="yestoday_pv"></td>
  53. <td id="yestoday_uv"></td>
  54. <td id="yestoday_ip"></td>
  55. <td id="yestoday_vv"></td>
  56. </tr>
  57. <tr class="bg-white grey9 hide" style="display:table-row">
  58. <td>历史累计</td>
  59. <td id="total_pv"></td>
  60. <td id="total_uv"></td>
  61. <td id="total_ip"></td>
  62. <td id="total_vv"></td>
  63. </tr>
  64. </tbody>
  65. </table>
  66. </div>
  67. </div>
  68. </div>
  69. <div class="col-md-6 mt-3 updatenews">
  70. <div class="card">
  71. <div class="card-header"><i class="fa fa-gear"></i>&nbsp;系统信息</div>
  72. <div class="card-body">
  73. <div id="updateinfos">
  74. <?php echo "<iframe name='stafrm' src='{$offUrl}&uptime={$oktime}' frameborder='0' id='stafrm' style='width:98%;height:70px;padding:.6rem'></iframe>"; ?>
  75. </div>
  76. <table width="98%" class="table table-borderless">
  77. <tr>
  78. <td>
  79. <div class="web-info">
  80. <p>操作系统</p>
  81. <span><?php echo PHP_OS; ?></span>
  82. </div>
  83. </td>
  84. <td>
  85. <div class="web-info">
  86. <p>Web服务器</p>
  87. <span><?php echo $_SERVER['SERVER_SOFTWARE']; ?></span>
  88. </div>
  89. </td>
  90. <td>
  91. <div class="web-info">
  92. <p>服务器IP</p>
  93. <span><?php echo gethostbyname($_SERVER['SERVER_NAME']); ?></span>
  94. </div>
  95. </td>
  96. <td>
  97. <div class="web-info">
  98. <p>PHP版本</p>
  99. <span><?php echo @phpversion(); ?></span>
  100. </div>
  101. </td>
  102. </tr>
  103. </table>
  104. </div>
  105. </div>
  106. </div>
  107. <div class="col-md-6 mt-3">
  108. <div class="card">
  109. <div class="card-header"><i class="fa fa-database"></i>&nbsp;版本授权</div>
  110. <div class="card-body" id="_systeminfo">正在载入</div>
  111. </div>
  112. </div>
  113. <div class="col-md-6 mt-3">
  114. <div class="card">
  115. <div class="card-header"><a name="statChart"><i class="fa fa-bar-chart"></i>&nbsp;流量统计图</a></div>
  116. <div class="card-body">
  117. <canvas id="statChart"></canvas>
  118. </div>
  119. </div>
  120. </div>
  121. <div class="col-md-6 mt-3">
  122. <div class="card">
  123. <div class="card-header"><i class="fa fa-file-word-o"></i>&nbsp;最新文档</div>
  124. <div class="card-body" id="newarticles">正在载入</div>
  125. </div>
  126. </div>
  127. </div>
  128. </div>
  129. <div class="footer mt-2">
  130. <div id="loaddiv" style="display:none">
  131. <p align="center"><img src="images/loadinglit.gif">请稍后,正在下载更新文件列表</p>
  132. </div>
  133. <div id="editTab">
  134. <span id="editTabBody">请稍候,正在载入</span>
  135. </div>
  136. <div id="addTab">
  137. <form name="addform" action="index_body.php">
  138. <input type="hidden" name="dopost" value="addnew">
  139. <table width="100%" border="0" cellspacing="0" cellpadding="0">
  140. <tr>
  141. <td height="30" colspan="3" background="images/tbg.gif">
  142. <div style="float:left;margin-left:10px">增加快捷操作项</div>
  143. <div style="float:right;padding:2px 10px 0 0">
  144. <a href="javascript:CloseTab('addTab')"><img src="images/close.gif"></a>
  145. </div>
  146. </td>
  147. </tr>
  148. <tr>
  149. <td colspan="2" style="height:10px;border-top:1px solid #8DA659"></td>
  150. </tr>
  151. <tr>
  152. <td width="22%" height="26" align="right">链接标题:</td>
  153. <td width="78%"><input name="title" type="text" class="pubinputs" style="margin-bottom:10px;width:260px"></td>
  154. </tr>
  155. <tr>
  156. <td width="22%" height="26" align="right">链接网址:</td>
  157. <td width="78%"><input name="link" type="text" class="pubinputs" style="width:260px"></td>
  158. </tr>
  159. <tr>
  160. <td height="36"></td>
  161. <td><input type="submit" name="Submit" value="保存项目" class="np coolbg"></td>
  162. </tr>
  163. </table>
  164. </form>
  165. </div>
  166. </div>
  167. <script>
  168. $(function(){
  169. $.get("index_testenv.php", function (data){
  170. if (data !== ''){
  171. $("#__testEvn").html(data);
  172. }
  173. });
  174. $.get("index_body.php?dopost=get_articles", function (data){
  175. if (data !== ''){
  176. $("#newarticles").html(data);
  177. }
  178. });
  179. });
  180. </script>
  181. <script>
  182. var dedebizInfo;
  183. function ViewDedeBIZ(){
  184. console.log(dedebizInfo);
  185. ShowMsg(`
  186. <table width="100%" class="table table-borderless">
  187. <tbody>
  188. <tr>
  189. <td style="width:50%">版本号:</td>
  190. <td>V${dedebizInfo.result.server_version}</td>
  191. </tr>
  192. <tr>
  193. <td style="width:50%">运行时间:</td>
  194. <td>${dedebizInfo.result.server_run_time}</td>
  195. </tr>
  196. <tr>
  197. <td style="width:50%">服务器系统:</td>
  198. <td>${dedebizInfo.result.server_goos}(${dedebizInfo.result.server_goarch})</td>
  199. </tr>
  200. <tr>
  201. <td style="width:50%">内存占用:</td>
  202. <td>${dedebizInfo.result.server_memory_usage}%</td>
  203. </tr>
  204. </tbody>
  205. </table>
  206. `);
  207. }
  208. function LoadServer(){
  209. $.get("index_body.php?dopost=system_info", function(data){
  210. let rsp = JSON.parse(data);
  211. if (rsp.code === 200){
  212. let infoStr = `<table width="100%" class="table table-borderless"><tbody>`;
  213. if (typeof rsp.result.domain !== "undefined"){
  214. infoStr += `
  215. <tr>
  216. <td style="width:50%">授权域名:</td>
  217. <td>${rsp.result.domain} <a href="<?php echo $cfg_biz_dedebizUrl;?>/auth/?domain=${rsp.result.domain}" class="btn btn-success btn-sm">查看</a></td>
  218. </tr>
  219. `;
  220. }
  221. if (typeof rsp.result.title !== "undefined"){
  222. infoStr += `
  223. <tr>
  224. <td style="width:50%">站点名称:</td>
  225. <td>${rsp.result.title}</td>
  226. </tr>
  227. `;
  228. }
  229. if (typeof rsp.result.stype !== "undefined"){
  230. infoStr += `
  231. <tr>
  232. <td style="width:50%">站点类型:</td>
  233. <td>${rsp.result.stype}</td>
  234. </tr>
  235. `;
  236. }
  237. if (typeof rsp.result.auth_version !== "undefined" && typeof rsp.result.auth_at !== "undefined"){
  238. infoStr += `
  239. <tr>
  240. <td style="width:50%">授权版本:</td>
  241. <td>V${rsp.result.auth_version}.x.x(时间:${rsp.result.auth_at})</td>
  242. </tr>
  243. `;
  244. }
  245. if (rsp.result.core === null || rsp.result.core.code != 200){
  246. //下面是DedeBIZ Core组件信息
  247. infoStr += `
  248. <tr>
  249. <td style="width:50%">版本组件:</td>
  250. <td><a href="<?php echo $cfg_biz_dedebizUrl;?>/start?code=-1008" target="_blank" class="btn btn-danger btn-sm">如何启动组件</a></td>
  251. </tr>
  252. `;
  253. } else {
  254. dedebizInfo = JSON.parse(rsp.result.core.data);
  255. infoStr += `
  256. <tr>
  257. <td style="width:50%">版本组件:</td>
  258. <td><a href="javascript:ViewDedeBIZ()" class="btn btn-success btn-sm">查看组件信息</a></td>
  259. </tr>
  260. `;
  261. }
  262. infoStr += "</tbody></table>";
  263. $("#_systeminfo").html(infoStr);
  264. } else {
  265. $("#_systeminfo").html(`
  266. <table width="100%" class="table table-borderless">
  267. <tbody>
  268. <tr>
  269. <td style="width:60%">尚未启动商业版服务,原因:${rsp.msg}</td>
  270. <td style="text-align:right">当前版本:社区版<a href="<?php echo $cfg_biz_dedebizUrl;?>/start?code=${rsp.code}" target="_blank" class="btn btn-success btn-sm" style="margin-left:10px">升级商业版</a></td>
  271. </tr>
  272. <tr>
  273. <td colspan="2">如果您已购买商业版授权,您可以在我们的授权中心查询到相信关授权信息,如果查询结果与实际授权不符,则说明您可能购买了非法商业授权,请及时与我们取得联系,谢谢。</td>
  274. </tr>
  275. </tbody>
  276. </table>
  277. `);
  278. }
  279. });
  280. }
  281. Date.prototype.Format = function (fmt) { //author: meizz
  282. var o = {
  283. "M+": this.getMonth() + 1, //月份
  284. "d+": this.getDate(), //日
  285. "h+": this.getHours(), //小时
  286. "m+": this.getMinutes(), //分
  287. "s+": this.getSeconds(), //秒
  288. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  289. "S": this.getMilliseconds() //毫秒
  290. };
  291. if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  292. for (var k in o)
  293. if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  294. return fmt;
  295. }
  296. function LoadStat() {
  297. $.get("index_body.php?dopost=get_statistics", function(data){
  298. let rsp = JSON.parse(data);
  299. if (rsp.code == 200) {
  300. var tpv = parseInt(rsp.result.pv);
  301. var tuv = parseInt(rsp.result.uv);
  302. var tip = parseInt(rsp.result.ip);
  303. var tvv = parseInt(rsp.result.vv);
  304. $("#today_pv").html(tpv);
  305. $("#today_uv").html(tuv);
  306. $("#today_ip").html(tip);
  307. $("#today_vv").html(tvv);
  308. $.get("index_body.php?dopost=get_statistics&sdate=-1", function(data){
  309. let rsp = JSON.parse(data);
  310. if (rsp.code == 200) {
  311. $("#total_pv").html(parseInt(rsp.result.pv)+tpv);
  312. $("#total_uv").html(parseInt(rsp.result.uv)+tuv);
  313. $("#total_ip").html(parseInt(rsp.result.ip)+tip);
  314. $("#total_vv").html(parseInt(rsp.result.vv)+tvv);
  315. }
  316. });
  317. }
  318. });
  319. var d = new Date();
  320. d.setDate(d.getDate() - 1);
  321. var s = d.Format("yyyy-MM-dd");
  322. s = s.replaceAll("-","");
  323. $.get("index_body.php?dopost=get_statistics&sdate="+s, function(data){
  324. let rsp = JSON.parse(data);
  325. if (rsp.code == 200) {
  326. $("#yestoday_pv").html(rsp.result.pv);
  327. $("#yestoday_uv").html(rsp.result.uv);
  328. $("#yestoday_ip").html(rsp.result.ip);
  329. $("#yestoday_vv").html(rsp.result.vv);
  330. }
  331. });
  332. }
  333. async function LoadStatChart() {
  334. const ctx = document.getElementById('statChart').getContext('2d');
  335. let labels = [];
  336. let pvs = [];
  337. let ips = [];
  338. let uvs = [];
  339. let vvs = [];
  340. for (let i = 15; i > 0; i--) {
  341. var d = new Date();
  342. d.setDate(d.getDate() - i);
  343. var s = d.Format("yyyy-MM-dd");
  344. labels.push(d.Format("MM-dd"));
  345. s = s.replaceAll("-","");
  346. let resp = await fetch("index_body.php?dopost=get_statistics&sdate="+s);
  347. let data = await resp.json();
  348. if (data.code == 200) {
  349. pvs.push(typeof data.result.pv=="undefined"? 0 : data.result.pv);
  350. ips.push(typeof data.result.ip=="undefined"? 0 : data.result.ip);
  351. uvs.push(typeof data.result.uv=="undefined"? 0 : data.result.uv);
  352. vvs.push(typeof data.result.vv=="undefined"? 0 : data.result.vv);
  353. }
  354. }
  355. const myChart = new Chart(ctx, {
  356. type: 'line',
  357. options: {
  358. responsive: true,
  359. plugins: {
  360. legend: {
  361. position: 'top',
  362. },
  363. title: {
  364. display: true,
  365. text: '<?php echo $cfg_webname; ?>流量统计图'
  366. }
  367. }
  368. },
  369. data: {
  370. labels: labels,
  371. datasets: [{
  372. label: 'IP',
  373. data: ips,
  374. borderColor: 'rgba(255, 99, 132, 1)',
  375. backgroundColor :'rgba(255, 99, 132, 0.2)',
  376. borderWidth: 1
  377. },
  378. {
  379. label: 'PV',
  380. data: pvs,
  381. borderColor: 'rgba(54, 162, 235, 1)',
  382. backgroundColor :'rgba(54, 162, 235, 0.2)',
  383. borderWidth: 1
  384. },{
  385. label: 'UV',
  386. data: uvs,
  387. borderColor: 'rgba(255, 206, 86, 1)',
  388. backgroundColor: 'rgba(255, 206, 86, 0.2)',
  389. borderWidth: 1
  390. },{
  391. label: '访问次数',
  392. data: vvs,
  393. borderColor: 'rgba(75, 192, 192, 1)',
  394. backgroundColor: 'rgba(75, 192, 192, 0.2)',
  395. borderWidth: 1
  396. }
  397. ]
  398. },
  399. });
  400. }
  401. $(document).ready(function(){
  402. LoadServer();
  403. LoadStat();
  404. LoadStatChart();
  405. setInterval(function(){
  406. LoadServer();
  407. }, 60000)
  408. });
  409. </script>
  410. </body>
  411. </html>