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

328 lines
11KB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
  6. <title>仪表盘</title>
  7. <link rel="stylesheet" href="../static/web/font/css/font-awesome.min.css">
  8. <link rel="stylesheet" href="../static/web/css/bootstrap.min.css">
  9. <link rel="stylesheet" href="../static/web/css/admin.css">
  10. <script>const cfg_biz_dedebizUrl = '<?php echo $cfg_biz_dedebizUrl;?>'; const cfg_webname = '<?php echo $cfg_webname;?>';</script>
  11. <script src="../static/web/js/jquery.min.js"></script>
  12. <script src="../static/web/js/bootstrap.bundle.min.js"></script>
  13. <script src="../static/web/js/webajax.js"></script>
  14. <script src="../static/web/js/chart.min.js"></script>
  15. <script src="js/indexbody.js"></script>
  16. <script src="js/main.js"></script>
  17. <base target="_self">
  18. </head>
  19. <body>
  20. <div class="container-fluid">
  21. <div class="row">
  22. <div id="body-tips" class="col-md-12"></div>
  23. <div class="col-md-12 my-3">
  24. <div class="card">
  25. <div class="card-header">
  26. <a href="#statChart"><i class="fa fa-bar-chart"></i> 流量统计表</a>
  27. </div>
  28. <div class="card-body">
  29. <table class="table">
  30. <tbody>
  31. <tr class="title">
  32. <td width="20%" class="border-top-0"></td>
  33. <td width="20%" class="border-top-0">浏览次数(PV)</td>
  34. <td width="20%" class="border-top-0">独立访客(UV)</td>
  35. <td width="20%" class="border-top-0">独立地址(IP)</td>
  36. <td width="20%" class="border-top-0">浏览次数(VV)</td>
  37. </tr>
  38. <tr class="bg-white">
  39. <td class="today">今日</td>
  40. <td class="today" id="today_pv">0</td>
  41. <td class="today" id="today_uv">0</td>
  42. <td class="today" id="today_ip">0</td>
  43. <td class="today" id="today_vv">0</td>
  44. </tr>
  45. <tr class="bg-white">
  46. <td>昨日</td>
  47. <td id="yestoday_pv">0</td>
  48. <td id="yestoday_uv">0</td>
  49. <td id="yestoday_ip">0</td>
  50. <td id="yestoday_vv">0</td>
  51. </tr>
  52. <tr class="bg-white">
  53. <td>历史累计</td>
  54. <td id="total_pv">0</td>
  55. <td id="total_uv">0</td>
  56. <td id="total_ip">0</td>
  57. <td id="total_vv">0</td>
  58. </tr>
  59. </tbody>
  60. </table>
  61. </div>
  62. </div>
  63. </div>
  64. <div class="col-md-6 my-3">
  65. <div class="card">
  66. <div class="card-header">
  67. <a href="javascript:Copyinfo()"><i class="fa fa-gear"></i> 软件信息</a>
  68. <span id="text">软件:<?php echo $cfg_version_detail;?>|操作系统:<?php echo PHP_OS;?>|Web服务器:<?php echo $_SERVER['SERVER_SOFTWARE'];?>|PHP:<?php echo @phpversion();?>|数据库:<?php echo $dsql->GetVersion();?></span>
  69. </div>
  70. <div class="card-body">
  71. <table class="table table-borderless">
  72. <tr>
  73. <td>
  74. <div class="web-info">
  75. <p>操作系统</p>
  76. <span><?php echo PHP_OS;?></span>
  77. </div>
  78. </td>
  79. <td>
  80. <div class="web-info">
  81. <p>WEB服务器</p>
  82. <span><?php echo $_SERVER['SERVER_SOFTWARE'];?></span>
  83. </div>
  84. </td>
  85. <td>
  86. <div class="web-info">
  87. <p>IP地址</p>
  88. <span><?php echo gethostbyname($_SERVER['SERVER_NAME']);?></span>
  89. </div>
  90. </td>
  91. <td>
  92. <div class="web-info">
  93. <p>PHP版本</p>
  94. <span><?php echo @phpversion();?></span>
  95. </div>
  96. </td>
  97. <td>
  98. <div class="web-info">
  99. <p>数据库版本</p>
  100. <span><?php echo $dsql->GetVersion();?></span>
  101. </div>
  102. </td>
  103. </tr>
  104. </table>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="col-md-6 my-3">
  109. <div class="card">
  110. <div class="card-header">
  111. <span><i class="fa fa-database"></i> 版本授权</span>
  112. <a href="javascript:;" id="systemUpdate" class="float-right">软件更新<span class="updates-dot"></span></a>
  113. </div>
  114. <div class="card-body" id="system-info">正在加载</div>
  115. </div>
  116. </div>
  117. <div class="col-md-6 my-3">
  118. <div class="card">
  119. <div class="card-header">
  120. <a name="statChart"><i class="fa fa-line-chart"></i> 流量统计图</a>
  121. </div>
  122. <div class="card-body">
  123. <canvas id="statChart"></canvas>
  124. </div>
  125. </div>
  126. </div>
  127. <div class="col-md-6 my-3">
  128. <div class="card">
  129. <div class="card-header">
  130. <span><i class="fa fa-file-word-o"></i> 最新文档</span>
  131. </div>
  132. <div class="card-body" id="system-word">正在加载</div>
  133. </div>
  134. </div>
  135. </div>
  136. </div>
  137. <div id="mdlUpdate" class="modal fade" tabindex="-1" aria-hidden="true">
  138. <div class="modal-dialog modal-xl">
  139. <div class="modal-content">
  140. <div class="modal-header">
  141. <h5 class="modal-title">软件更新</h5>
  142. <button type="button" class="update-close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times"></i></button>
  143. </div>
  144. <div class="modal-body">
  145. <div id="stepArea0" class="stepArea">
  146. <span>获取服务器版本资源失败,无法正常升级,请联系DedeBIZ官方团队。</span>
  147. </div>
  148. <div id="stepArea1" class="stepArea">
  149. <span class="spinner-border text-success" role="status"></span>
  150. <span id="step1Msg">对比版本更改的文件</span>
  151. </div>
  152. <div id="stepArea2" class="stepArea">
  153. <p>本更新提供了重要的安全性更新,建议所有用户升级,软件更新覆盖以下文件,请做好备份。</p>
  154. <div id="_fileList">正在加载</div>
  155. </div>
  156. <div id="stepArea3" class="stepArea">
  157. <p>发下以下版本的更新文件</p>
  158. <div id="_verList">正在加载</div>
  159. </div>
  160. <div id="stepArea4" class="stepArea">
  161. <p>
  162. <span class="spinner-border text-success" role="status"></span>
  163. <span>正在进行以下操作,耐心等待...</span>
  164. </p>
  165. <div id="_updateMsg">正在加载</div>
  166. </div>
  167. <div id="stepArea5" class="stepArea">已是最新软件版本。</div>
  168. <div id="_msgInfo" class="mt-3"></div>
  169. </div>
  170. <div class="modal-footer">
  171. <div id="btnStep0" class="btnStep">
  172. <button id="btnCancel" type="button" class="btn btn-secondary" data-dismiss="modal">知道了</button>
  173. </div>
  174. <div id="btnStep1" class="btnStep"></div>
  175. <div id="btnStep2" class="btnStep">
  176. <button id="btnCancel" type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
  177. <button id="btnBackup" type="button" class="btn btn-outline-success">备份</button>
  178. <button id="btnGoStep3" type="button" class="btn btn-success">下一步</button>
  179. </div>
  180. <div id="btnStep3" class="btnStep">
  181. <button id="btnCancel" type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
  182. <button id="btnGoStep4" type="button" class="btn btn-success">下载</button>
  183. </div>
  184. <div id="btnStep5" class="btnStep">
  185. <button id="btnOK" type="button" class="btn btn-success" data-dismiss="modal">完成</button>
  186. </div>
  187. </div>
  188. </div>
  189. </div>
  190. </div>
  191. <script>
  192. var currentStep = 1;
  193. var hasNewVer = false;
  194. //步骤
  195. function dedeAlter(msg, t = 'info', loading = false) {
  196. let loadingStr = loading ? '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>' : '';
  197. return `<div class="alert alert-${t}">${loadingStr}
  198. ${msg}
  199. </div>`;
  200. }
  201. //显示步骤区域
  202. function showStepArea(step) {
  203. $(".stepArea").hide();
  204. $(".btnStep").hide();
  205. $("#stepArea" + step).show();
  206. $("#btnStep" + step).show();
  207. }
  208. function update() {
  209. $.get("api.php?action=update", function (data) {
  210. let rs = JSON.parse(data);
  211. if (rs.code === 0) {
  212. $("#_updateMsg").html(rs.msg);
  213. if (rs.data.finish === false) {
  214. setTimeout(() => {
  215. update();
  216. }, 500);
  217. } else {
  218. currentStep++
  219. $("#_msgInfo").html('');
  220. $("#_msgInfo").hide();
  221. showStepArea(currentStep);
  222. }
  223. }
  224. })
  225. }
  226. $(document).ready(function () {
  227. $.get("api.php?action=has_new_version", function (data) {
  228. try {
  229. let rs = JSON.parse(data);
  230. if (rs.code === 0) {
  231. if (rs.result.HasNew === true) {
  232. hasNewVer = true;
  233. $(".updates-dot").show();
  234. } else {
  235. hasNewVer = false;
  236. $(".updates-dot").hide();
  237. }
  238. } else {
  239. $(".updates-dot").hide();
  240. showStepArea(0);
  241. }
  242. } catch (error) {
  243. console.log("获取软件信息失败")
  244. }
  245. })
  246. $("#btnCancel").click(function () {
  247. currentStep = 1;
  248. $("#_fileList").html(``);
  249. })
  250. $("#btnBackup").click(function () {
  251. let alertMsg = dedeAlter("正在备份差异文件", 'info', true);
  252. $("#_msgInfo").html(alertMsg);
  253. $("#_msgInfo").show();
  254. $.get("api.php?action=update_backup", function (data) {
  255. let rs = JSON.parse(data);
  256. if (rs.code === 0) {
  257. alertMsg = dedeAlter(`成功备份差异文件,目录:${rs.data.backupdir}`, 'success');
  258. $("#_msgInfo").html(alertMsg);
  259. }
  260. })
  261. })
  262. $("#systemUpdate").click(function () {
  263. if (hasNewVer === false) {
  264. currentStep = 5;
  265. showStepArea(currentStep);
  266. $('#mdlUpdate').modal('show');
  267. return;
  268. }
  269. $('#mdlUpdate').modal('show');
  270. showStepArea(currentStep);
  271. currentStep++;
  272. $.get("api.php?action=get_changed_files", function (data) {
  273. let rs = JSON.parse(data);
  274. if (rs.code === 0) {
  275. let fstr = '<ul class="list-group list-group-flush">';
  276. let i = 1;
  277. rs.data.files.forEach(file => {
  278. fstr += `<li class='list-group-item'>第${i}个文件:..\\${file['filename']}</li>`;
  279. i++;
  280. });
  281. fstr += '</ul>';
  282. $("#_fileList").html(fstr);
  283. showStepArea(currentStep);
  284. } else {
  285. showStepArea(0);
  286. }
  287. })
  288. })
  289. $('#mdlUpdate').on('hidden.bs.modal', function (event) {
  290. currentStep = 1;
  291. $("#_msgInfo").html('');
  292. $("#_msgInfo").hide();
  293. })
  294. $("#btnGoStep3").click(function () {
  295. currentStep++
  296. $("#_msgInfo").html('');
  297. $("#_msgInfo").hide();
  298. showStepArea(currentStep);
  299. $.get("api.php?action=get_update_versions", function (data) {
  300. let rs = JSON.parse(data);
  301. if (rs.code === 0) {
  302. let fstr = '<ul class="list-group list-group-flush">';
  303. let i = 1;
  304. rs.result.Versions.forEach(ver => {
  305. fstr += `<li class='list-group-item'>版本号:${ver.ver},发布日期:${ver.r} <a href='https://www.zhelixie.com/DedeBIZ/DedeCMSV6/commits/tag/${ver.ver}' class='btn btn-outline-success float-right' target='_blank'>更新记录</a></li>`;
  306. i++;
  307. });
  308. fstr += '</ul>';
  309. $("#_verList").html(fstr);
  310. } else {
  311. showStepArea(0);
  312. }
  313. })
  314. })
  315. $("#btnGoStep4").click(function () {
  316. currentStep++
  317. $("#_msgInfo").html('');
  318. $("#_msgInfo").hide();
  319. showStepArea(currentStep);
  320. update();
  321. })
  322. $("#btnOK").click(function () {
  323. location.reload();
  324. })
  325. })
  326. </script>
  327. </body>
  328. </html>