国内流行的内容管理系统(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.

466 lines
21KB

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