国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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