version_upgrade.html 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. {extend name="base" /}
  2. {block name="resources"}
  3. <script type="text/javascript" src="ADMIN_JS/progressbar.js"></script>
  4. <link rel="stylesheet" type="text/css" href="ADMIN_CSS/upgrade/style.css" media="screen">
  5. <link rel="stylesheet" type="text/css" href="ADMIN_CSS/upgrade/jquery.easy-pie-chart.css" media="screen">
  6. <style>
  7. .chart{
  8. display:inline-block;
  9. float:unset;
  10. }
  11. .up-footer{padding:20px;text-align:center;}
  12. .up-footer button{
  13. background-color: #067cf3;
  14. padding:8px 15px;
  15. color:#FFF;
  16. border:none;
  17. border-radius:3px;
  18. font-size:15px;
  19. margin: 0 10px;
  20. }
  21. .up-footer button:nth-child(2){
  22. display: none;
  23. }
  24. .install-content{
  25. margin-top:40px;
  26. padding: 10px 0 10px 20px;
  27. border: 1px solid #AAD2E5;
  28. background-color: #E1F2FA;
  29. }
  30. .panel-title{
  31. font-size:15px;
  32. margin:7px auto;
  33. line-height:30px;
  34. color: #31708f;
  35. border-bottom:1px solid #aad2e5 !important;
  36. }
  37. .step-title{
  38. color: #31708f;
  39. font-weight:bold;
  40. }
  41. .step-text{
  42. color: #31708f;
  43. }
  44. #container {
  45. width: 300px;
  46. height: 300px;
  47. margin: 50px auto;
  48. position: relative;
  49. }
  50. .alert-warning-word {
  51. background-color: #FCF8E3;
  52. border-top: 1px solid #FBEED5;
  53. border-bottom: 1px solid #FBEED5;
  54. padding: 5px 20px;
  55. line-height: 30px;
  56. color: #C09853;
  57. }
  58. </style>
  59. {/block}
  60. {block name="main"}
  61. <div class="ns-tips">
  62. <div id="container"></div>
  63. <div style="clear:both;"></div>
  64. <div class="alert alert-warning alert-warning-word">
  65. <strong>警告!</strong>版本升级中,请不要关闭当前页面!
  66. </div>
  67. <div class="install-content alert alert-info">
  68. <div class="panel panel-default">
  69. <div class="panel-heading">
  70. <h3 class="panel-title">
  71. 详细过程
  72. </h3>
  73. </div>
  74. <div class="panel-body">
  75. <span class="step-title">整体进度&nbsp;:&nbsp;</span><span class="step-text count-percent">0%</span><br/>
  76. <span class="step-title">正在进行&nbsp;:&nbsp;</span><span class="step-text step-content"></span></span>
  77. </div>
  78. </div>
  79. </div>
  80. <div class="space-10"></div>
  81. <div class="up-view" >
  82. <div class="up-footer">
  83. <button class="up-btn" onclick="upgradeAction();">点击升级</button>
  84. <button class="up-btn" onclick="recovery(this);">撤回更新</button>
  85. </div>
  86. </div>
  87. </div>
  88. {/block}
  89. {block name="script"}
  90. <script type="text/javascript">
  91. var container = document.querySelector('#container');
  92. var bar = new ProgressBar.Circle(container, {
  93. color: '#067cf3',
  94. strokeWidth: 5, // 正好是从圆心开始画起,>50会越过圆心,<50画出的是圆环
  95. trailWidth: 0, // 也设置为50,就是一个未填充的圆形,而不是圆环。要么设置为0
  96. easing: 'easeInOut',
  97. duration: 10,
  98. text: {
  99. style: {
  100. color: '#31708f',
  101. display: 'inline-block',
  102. position: 'absolute',
  103. top: '50%',
  104. left: '50%',
  105. transform: 'translate(-50%,-50%)'
  106. },
  107. autoStyleContainer: false
  108. },
  109. fill: '#e1f2fa', // 圆形内容区域填充色,当需要画圆环时,效果应该最好。
  110. from: { color: '#aaa', width: 1},
  111. to: { color: '#333', width: 5},
  112. step: function(state, circle) {
  113. circle.path.setAttribute('stroke-width', state.width);
  114. var value = Math.round(circle.value() * 100);
  115. circle.setText(value+'%');
  116. }
  117. });
  118. bar.text.style.fontFamily = '"Raleway", Helvetica, sans-serif';
  119. bar.text.style.fontSize = '32px';
  120. //升级操作
  121. function upgradeAction(){
  122. $(".up-btn:eq(0)").attr('disabled',true);
  123. $(" .up-footer .up-btn:eq(0)").addClass("btn-disabled");
  124. $(" .up-footer .up-btn:eq(0)").css("background-color","#c0c1c1 !important");
  125. var index = 0;
  126. if({$version_info.file_count} > 0){
  127. upgrade(index);
  128. }else{
  129. execute();
  130. }
  131. }
  132. //下载文件
  133. function upgrade(index){
  134. $.ajax({
  135. type:'post',
  136. url : ns.url("admin/system/download"),
  137. data:{
  138. 'index':index,
  139. },
  140. success:function(data){
  141. if(data.code >= 0){
  142. //下载完毕
  143. if(data.code == 10){
  144. setProgress(50, "即将执行升级操作");
  145. execute();
  146. return;
  147. }
  148. setProgress((index+1)/{$version_info.file_count}*50, data.message+"下载完成");
  149. index++;
  150. upgrade(index);//递归调用
  151. }else{
  152. layer.msg('error',data.title);
  153. }
  154. }
  155. })
  156. }
  157. //备份将覆盖的文件
  158. function execute(){
  159. setProgress(50,"正在备份旧文件");
  160. $.ajax({
  161. type:'post',
  162. url : ns.url("admin/system/backupFile"),
  163. success:function(data){
  164. if(data.code == 0){
  165. setProgress(62, data.message +"备份完成");
  166. backupSql();
  167. }else{
  168. layer.msg(data.message);
  169. }
  170. }
  171. })
  172. }
  173. //备份数据库
  174. function backupSql(last_table = '', index = 0, series = ''){
  175. setProgress(62,"正在备份数据库...");
  176. $.ajax({
  177. type:'post',
  178. url : ns.url("admin/system/backupSql"),
  179. data: {last_table: last_table, index: index, series: series},
  180. success:function(data){
  181. if(data.code >= 0){
  182. if(data.code == 10) {
  183. //执行完毕
  184. setProgress(75, data.message+"备份完成");
  185. executeFile();
  186. } else {
  187. backupSql(data.data.last_table, data.data.index, data.data.series);
  188. setProgress(62, data.message);
  189. }
  190. }else{
  191. layer.msg(data.message);
  192. }
  193. }
  194. })
  195. }
  196. //更新文件覆盖
  197. function executeFile(){
  198. setProgress(75,"正在覆盖旧文件");
  199. $.ajax({
  200. type:'post',
  201. url : ns.url("admin/system/executeFile"),
  202. success:function(data){
  203. if(data.code >= 0){
  204. //执行完毕
  205. setProgress(86, data.message +"覆盖完毕");
  206. executeSql();
  207. }else{
  208. layer.msg(data.title);
  209. }
  210. }
  211. })
  212. }
  213. //更新sql 执行
  214. function executeSql(){
  215. setProgress(86,"正在执行sql语句");
  216. $.ajax({
  217. type:'post',
  218. url : ns.url("admin/system/executeSql"),
  219. success:function(data){
  220. if(data.code >= 0){
  221. upgradeEnd();
  222. setProgress(99, data.message+"执行完毕");
  223. }else{
  224. layer.msg(data.title);
  225. }
  226. }
  227. })
  228. }
  229. //更新结束
  230. function upgradeEnd(){
  231. setProgress(99,"正在更新");
  232. $.ajax({
  233. type:'post',
  234. url : ns.url("admin/system/upgradeEnd"),
  235. success:function(data){
  236. if(data.code >= 0){
  237. //执行完毕
  238. setProgress(100, "更新结束");
  239. $(".up-footer button:eq(0)").hide();
  240. $(".up-footer button:eq(1)").show();
  241. layer.alert('更新结束', {
  242. icon: 1,
  243. title: '提示',
  244. skin: 'layer-ext-moon'
  245. })
  246. }else{
  247. $(".up-btn").attr('disabled',false);
  248. $(" .up-footer .up-btn").removeClass("btn-disabled");
  249. layer.msg(data.message);
  250. }
  251. }
  252. })
  253. }
  254. //控制进度条
  255. function setProgress(width, text){
  256. var barValue = width /100;
  257. width = width.toFixed(2);
  258. bar.animate(barValue);
  259. $(".count-percent").text(width+"%");
  260. $(".step-content").text(text);
  261. }
  262. //撤回更新
  263. function recovery(){
  264. layer.msg('还原时间较长,请耐心等待!');
  265. $('.up-footer button:nth-child(2)').text("撤回更新...").css("background-color", '#999');
  266. $.ajax({
  267. type:'post',
  268. url : ns.url("admin/system/versionRecovery"),
  269. success:function(data){
  270. if(data.code >= 0){
  271. //执行完毕
  272. layer.msg('撤回成功');
  273. $(".up-footer button:eq(0)").show();
  274. $(".up-footer button:eq(1)").hide();
  275. location.href = ns.url("admin/system/upgrade");
  276. }else{
  277. layer.msg(data.message);
  278. }
  279. }
  280. })
  281. }
  282. </script>
  283. {/block}