update.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
  6. <meta http-equiv="Cache" content="no-cache">
  7. <meta http-equiv="Pragma" content="no-cache" />
  8. <meta http-equiv="Expires" content="0" />
  9. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  10. <title> 管理后台 </title>
  11. </head>
  12. <style>
  13. html,body{
  14. margin: 0;
  15. height: 100%;
  16. }
  17. body{
  18. background-color: #F2F2F4;
  19. }
  20. * {
  21. font-family: 'SF-Medium';
  22. }
  23. @-webkit-keyframes rotation{
  24. from {-webkit-transform: rotate(0deg);}
  25. to {-webkit-transform: rotate(360deg);}
  26. }
  27. .sf-loop{
  28. -webkit-transform: rotate(360deg);
  29. animation: rotation 3s linear infinite;
  30. -moz-animation: rotation 3s linear infinite;
  31. -webkit-animation: rotation 3s linear infinite;
  32. -o-animation: rotation 3s linear infinite;
  33. }
  34. .sf-set{
  35. position: relative;
  36. }
  37. .sf-set img{
  38. position:absolute;
  39. }
  40. .sf-set-1{
  41. height: 80px;
  42. left:0;
  43. top:0;
  44. z-index:1;
  45. }
  46. .sf-set-2{
  47. height: 64px;
  48. left:8px;
  49. top:8px;
  50. z-index:2;
  51. }
  52. .sf-group{
  53. position: relative;
  54. margin-left: 10px;
  55. margin-top: 10px;
  56. color:#000000;
  57. height: 400px;
  58. }
  59. .sf-group-btn{
  60. position: relative;
  61. height: 40px;
  62. font-size: 16px;
  63. margin-top: 10px;
  64. margin-left: 10px;
  65. }
  66. .layui-fluid .layui-card{
  67. border-radius: 12px
  68. }
  69. .sf-set-font{
  70. position: absolute;
  71. left:100px;
  72. font-size: 17px;
  73. font-weight: 600;
  74. }
  75. .sf-set-font .sf-text{
  76. font-weight: normal;
  77. font-size: 14px;
  78. }
  79. .sf-set-introduce{
  80. position: absolute;
  81. top:100px;
  82. font-size: 16px;
  83. margin: 10px auto;
  84. height:240px;
  85. overflow: hidden;
  86. text-overflow: ellipsis;
  87. display: -webkit-box;
  88. -webkit-line-clamp: 3;
  89. -webkit-box-orient: vertical;
  90. }
  91. .sf-set-more{
  92. position: absolute;
  93. bottom:10px;
  94. font-size: 16px;
  95. }
  96. .sf-group-btn .sf-download{
  97. position: absolute;
  98. bottom:10px;
  99. left:10px;
  100. }
  101. a{
  102. color:#007aff;
  103. }
  104. a:hover{
  105. color:#D8E7FD;
  106. }
  107. .layui-progress-bar {
  108. height: 3px;
  109. color:#007aff;
  110. }
  111. .layui-layer .layui-layer-admin .layui-layer-title{
  112. text-align: center;
  113. color:#000000;
  114. }
  115. .layui-anim-downbit{
  116. animation-name:layui-downbit
  117. }
  118. @keyframes layui-downbit{
  119. 0%{opacity:.3;transform:translate3d(0,-10px,0)}
  120. 100%{opacity:1;transform:translate3d(0,0,0)}
  121. }
  122. .loading{
  123. position: absolute;
  124. }
  125. .loading>div{
  126. position: absolute;
  127. width: 5px;
  128. height: 15px;
  129. border-radius: 10px;
  130. background-color: white;
  131. }
  132. .loading>div:nth-child(1){
  133. top: 15px;
  134. left: 0px;
  135. background-color: #D9D8DD;
  136. animation: loading infinite 1s 0.5s;
  137. }
  138. .loading>div:nth-child(2){
  139. top: 10.1442px;
  140. left: 10.1442px;
  141. transform: rotate(-45deg);
  142. background-color: #C9C8CD;
  143. animation: loading infinite 1s 0.375s;
  144. }
  145. .loading>div:nth-child(3){
  146. top: 0px;
  147. left: 15px;
  148. transform: rotate(90deg);
  149. background-color: #B8B7BC;
  150. animation: loading infinite 1s 0.25s;
  151. }
  152. .loading>div:nth-child(4){
  153. top: -10.1442px;
  154. left: 10.1442px;
  155. transform: rotate(45deg);
  156. background-color: #ADACB1;
  157. animation: loading infinite 1s 0.125s;
  158. }
  159. .loading>div:nth-child(5){
  160. top: -15px;
  161. left: 0px;
  162. transform: rotate(0deg);
  163. background-color: #A09FA4;
  164. animation: loading infinite 1s;
  165. }
  166. .loading>div:nth-child(6){
  167. top: -10.1442px;
  168. left: -10.1442px;
  169. transform: rotate(-45deg);
  170. background-color: white;
  171. animation: loading infinite 1s 0.875s;
  172. }
  173. .loading>div:nth-child(7){
  174. top: 0px;
  175. left: -15px;
  176. transform: rotate(90deg);
  177. background-color: white;
  178. animation: loading infinite 1s 0.75s;
  179. }
  180. .loading>div:nth-child(8){
  181. top: 10.1442px;
  182. left: -10.1442px;
  183. transform: rotate(45deg);
  184. background-color: white;
  185. animation: loading infinite 1s 0.625s;
  186. }
  187. @keyframes loading {
  188. 100%{
  189. opacity: 0.8;
  190. background-color: #D9D8DD;
  191. }
  192. 75%{
  193. opacity: 0.8;
  194. background-color: #C9C8CD;
  195. }
  196. 50% {
  197. opacity: 0.8;
  198. background-color: #B8B7BC;
  199. }
  200. 25%{
  201. opacity: 0.8;
  202. background-color: #ADACB1;
  203. }
  204. 0% {
  205. opacity: 0.8;
  206. background-color: #A09FA4;
  207. }
  208. }
  209. .sf-loading{
  210. position: relative;
  211. display: flex;
  212. justify-content: center;
  213. align-items: center;
  214. top:300px;
  215. }
  216. .sf-loading .sf-loading-font{
  217. position: absolute;
  218. top:70px;
  219. font-size: 18px;
  220. color:#626166;
  221. }
  222. /* @font-face{
  223. font-family: SF;
  224. src: url("{__FONT__}PingFang Bold.ttf");
  225. }
  226. @font-face{
  227. font-family: SF-Medium;
  228. src: url("{__FONT__}PingFang Medium.ttf");
  229. } */
  230. .sf-loading .sf-new-font{
  231. position: absolute;
  232. top:70px;
  233. font-size: 18px;
  234. color:#808A87;
  235. }
  236. .sf-loading .sf-new-font2{
  237. position: absolute;
  238. top:92px;
  239. font-size: 15px;
  240. color:#808A87;
  241. }
  242. </style>
  243. <body class="laytp-container">
  244. <div class="layui-row">
  245. <div class="layui-col-md6 layui-col-md-offset3 layui-col-sm8 layui-col-sm-offset2 layui-col-xs12">
  246. <div class="layui-fluid">
  247. <div id="sf_update" class="layui-anim layui-anim-downbit" style="display: none">
  248. <div class="layui-card">
  249. <div class="layui-card-body">
  250. <div id="sf_progress" style="display: none">
  251. <div class="layui-progress" lay-filter="uploadProgress" style="height:3px;margin-left:110px;top:68px">
  252. <div class="layui-progress-bar" lay-percent="0%"></div>
  253. </div>
  254. </div>
  255. <div class="sf-group">
  256. <div class="sf-set">
  257. <img class="sf-set-1" src="https://source.iduomi.cc/sf_set.png">
  258. <img id="sf_set" class="sf-set-2" src="https://source.iduomi.cc/sf_set2.png">
  259. </div>
  260. <div class="sf-set-font">
  261. <span class="module_title"></span> <span id="sf_edition">1.0</span>
  262. <div class="sf-text" style="padding-top: 2px">荣誉出品</div>
  263. <div class="sf-text" style="padding-top: 8px"><span id="sf_msg">3.3 GB</span></div>
  264. </div>
  265. <div class="sf-set-introduce">
  266. <div id="sf_introduce">暂无更新内容</div>
  267. </div>
  268. <div class="sf-set-more">
  269. <a lay-filter="uplog" lay-submit>了解更多...</a>
  270. </div>
  271. </div>
  272. </div>
  273. </div>
  274. <div id="sf_update_btn_group" class="layui-card">
  275. <div class="sf-group-btn">
  276. <div class="sf-download">
  277. <a id="sf_update_btn" lay-filter="update" lay-submit>下载并安装</a>
  278. </div>
  279. </div>
  280. </div>
  281. </div>
  282. <div id="sf_loading" class="sf-loading" style="display: none">
  283. <div class="loading">
  284. <div></div>
  285. <div></div>
  286. <div></div>
  287. <div></div>
  288. <div></div>
  289. <div></div>
  290. <div></div>
  291. <div></div>
  292. </div>
  293. <div class="sf-loading-font">正在检查更新...</div>
  294. </div>
  295. <div id="sf_new_version" class="sf-loading" style="display: none">
  296. <div class="sf-new-font"><span class="module_title"></span> <span id="sf_current_edition"></span></div>
  297. <div class="sf-new-font2">已是最新版本<span id="sf_edition_now"></span></div>
  298. </div>
  299. </div>
  300. </div>
  301. </div>
  302. <script type="application/javascript">
  303. document.write("<link rel='stylesheet' href='" + localStorage.getItem("staticDomain") + "/admin/css/sf-style.css?v=" + localStorage.getItem("version") + "'>");
  304. document.write("<link rel='stylesheet' href='" + localStorage.getItem("staticDomain") +
  305. "/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  306. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/layui/layui.js?v=" +
  307. localStorage.getItem("version") + "'><\/script>");
  308. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/laytp/layuiConfig.js?v=" +
  309. localStorage.getItem("version") + "'><\/script>");
  310. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/jquery_3.3.1.js?v=" +
  311. localStorage.getItem("version") + "'><\/script>");
  312. </script>
  313. <script type="text/html" id="SF_Uplog"></script>
  314. <script>
  315. layui.use(['element', 'form', 'notice', 'admin'], function () {
  316. var $ = layui.jquery;
  317. var form = layui.form;
  318. var admin = layui.admin;
  319. var element = layui.element;
  320. var layer = layui.layer;
  321. $("#sf_loading").show();
  322. facade.ajax({route: '/admin.console/check',successAlert:false}).done(function(res){
  323. $("#sf_loading").hide();
  324. if (res.code == 0) {
  325. var data = res.data;
  326. $("#sf_edition_now").text(data.mudule_info.edition);
  327. $(".module_title").text(data.mudule_info.module_title);
  328. if(data && data.data && data.data.code == 1){
  329. $("#sf_update").show();
  330. $("#sf_edition").text(data.data.data.edition);
  331. $("#sf_msg").text(data.data.data.filesize + ' MB');
  332. $("#sf_introduce").text('本次更新:' + data.data.data.introduce);
  333. var html = '<div class="layui-card layui-card-body"><ul class="layui-timeline">';
  334. $.each(data.data.data.update_log, function(index, value){
  335. html += '<li class="layui-timeline-item">\n' +
  336. ' <i class="layui-icon layui-timeline-axis"></i>\n' +
  337. ' <div class="layui-timeline-content layui-text">\n' +
  338. ' <h3 class="layui-timeline-title">'+index+'</h3>\n' +
  339. ' <p>\n';
  340. $.each(value, function(index, value){
  341. html += value + '<br>';
  342. });
  343. html +=' </p>\n' +
  344. ' </div>\n' +
  345. ' </li>';
  346. });
  347. html += '</ul></div>';
  348. $("#SF_Uplog").html(html);
  349. }else{
  350. $("#sf_new_version").show();
  351. }
  352. }else{
  353. $("#sf_loading").hide();
  354. }
  355. })
  356. form.on('submit(uplog)', function (data) {
  357. layer.open({
  358. title: '关于本更新',
  359. type: 1,
  360. shade: .1,
  361. area:['100%','100%'],
  362. anim: 2,
  363. content: $("#SF_Uplog").html()
  364. });
  365. return false;
  366. });
  367. function updateStatus(type = false){
  368. if(type){
  369. $("sf_msg").css('display','none');
  370. $("#sf_msg").text('正在准备下载...');
  371. $("#sf_update_btn").css('color','#8B8B8D');
  372. $("#sf_update_btn").text('正在下载...');
  373. $("#sf_set").addClass('sf-loop');
  374. }else{
  375. $("#sf_update_btn").css('color','#007aff');
  376. $("#sf_update_btn").text('下载并安装');
  377. $("#sf_set").removeClass('sf-loop');
  378. }
  379. }
  380. var percentage = 100;
  381. var progressNum = 0;
  382. function updateVersion(){
  383. facade.ajax({route: '/admin.console/updateVersion',SF_Action:true,successAlert:false}).done(function(res){
  384. console.log(res)
  385. if(res.code == 0){
  386. // var data = res.data;
  387. if(res.data.code == 0){
  388. setTimeout(function (){
  389. // updateStatus();
  390. },1000);
  391. }else if(res.data.code == 1){
  392. if(progressNum == 0){
  393. percentage = (100 / res.data.count);
  394. }
  395. $("#sf_progress").css('display','inherit');
  396. $("#sf_msg").text(res.data.msg);
  397. progressNum = percentage + progressNum;
  398. element.progress('uploadProgress', progressNum + '%');
  399. updateStatus();
  400. // updateVersion();
  401. $("#sf_update").hide();
  402. $("#sf_new_version").show();
  403. return;
  404. }else if(res.data.code == 2){
  405. $("#sf_msg").text(data.msg);
  406. element.progress('uploadProgress', '100%');
  407. $("#sf_update_btn_group").css('display','none');
  408. updateStatus();
  409. }else{
  410. facade.error('服务器错误!'+res.data.msg)
  411. $("#sf_msg").text(res.data.msg);
  412. updateStatus();
  413. }
  414. }
  415. })
  416. // $.ajax({
  417. // type: "POST",
  418. // url: '{:url("/Set/updateVersion")}',
  419. // dataType: "json",
  420. // success: function(data) {
  421. // if(data.data.code == 1){
  422. // if(progressNum == 0){
  423. // percentage = (100 / data.data.count);
  424. // }
  425. // $("#sf_progress").css('display','inherit');
  426. // $("#sf_msg").text(data.msg);
  427. // progressNum = percentage + progressNum;
  428. // element.progress('uploadProgress', progressNum + '%');
  429. // updateVersion();
  430. // }else if(data.data.code == 2){
  431. // $("#sf_msg").text(data.msg);
  432. // element.progress('uploadProgress', '100%');
  433. // $("#sf_update_btn_group").css('display','none');
  434. // updateStatus();
  435. // }else{
  436. // facade.error('服务器错误!')
  437. // $("#sf_msg").text(data.msg);
  438. // updateStatus();
  439. // }
  440. // },
  441. // error: function() {
  442. // $("#sf_loading").hide();
  443. // facade.error('服务器错误!')
  444. // updateStatus();
  445. // }
  446. // });
  447. }
  448. form.on('submit(update)', function (data) {
  449. let layerConfirm = layui.layer.confirm('更新前,请务必做好网站与数据的备份,如果因更新导致问题,本团队概不负责.', {
  450. title: "提示",
  451. skin: "laytp"
  452. }, function() {
  453. updateStatus(true);
  454. updateVersion()
  455. layui.layer.close(layerConfirm);
  456. return false;
  457. });
  458. });
  459. });
  460. </script>