国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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