database.html 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. {extend name="../../base/view/common/base" /}
  2. <!-- 主体 -->
  3. {block name="body"}
  4. <div class="p-page">
  5. <table class="layui-hide" id="backup" lay-filter="backup"></table>
  6. </div>
  7. <script type="text/html" id="toolbarDemo">
  8. <div class="layui-btn-group">
  9. <span class="layui-btn layui-btn-sm layui-btn-normal" lay-event="backup">数据备份</span>
  10. </div>
  11. <span id="dataTips" style="font-size:12px; margin-left:10px"></span>
  12. </script>
  13. {/block}
  14. <!-- /主体 -->
  15. <!-- 脚本 -->
  16. {block name="script"}
  17. <script>
  18. function gouguInit() {
  19. var table = layui.table, form = layui.form;
  20. var tableIns = table.render({
  21. elem: '#backup',
  22. title: '数据备份',
  23. toolbar: '#toolbarDemo',
  24. defaultToolbar: false,
  25. url: "/home/database/database", //数据接口
  26. page: false,
  27. cols: [
  28. [ //表头
  29. { type: 'checkbox' },
  30. {
  31. field: 'name',
  32. title: '数据表',
  33. width: 200
  34. },
  35. {
  36. field: 'status',
  37. title: '状态',
  38. width: 100,
  39. templet: function (d) {
  40. return '<span id="table_' + d.name + '">-</span>';
  41. }
  42. },
  43. {
  44. field: 'engine',
  45. title: '存储引擎',
  46. align: 'center',
  47. width: 80
  48. }, {
  49. field: 'row_format',
  50. title: '行格式',
  51. align: 'center',
  52. width: 80
  53. }, {
  54. field: 'rows',
  55. title: '行数',
  56. align: 'center',
  57. width: 60,
  58. }, {
  59. field: 'data_size',
  60. title: '字节数',
  61. align: 'center',
  62. width: 80
  63. }, {
  64. field: 'data_length',
  65. title: '数据大小',
  66. align: 'center',
  67. width: 80
  68. }, {
  69. field: 'comment',
  70. title: '数据表注释'
  71. }, {
  72. field: 'create_time',
  73. title: '创建时间',
  74. width: 160,
  75. align: 'center'
  76. }
  77. ]
  78. ],
  79. done: function (res, curr, count) {
  80. $('#dataTips').html(res.msg);
  81. }
  82. });
  83. //递归备份表
  84. function backup(tab, status, table) {
  85. layer.closeAll();
  86. layer.msg("备份中...,请勿关闭本页面", { time: 200000 });
  87. $.get("/home/database/backup", tab, function (data) {
  88. if (data.code == 0) {
  89. showmsg(data.data.tab.table, data.msg);
  90. if (data.data.tab.start == 'ok') {
  91. layer.msg('备份完成');
  92. window.onbeforeunload = function () { return null }
  93. return;
  94. }
  95. backup(data.data.tab, tab.id != data.data.tab.id);
  96. } else {
  97. layer.msg('立即备份');
  98. }
  99. }, "json");
  100. }
  101. //修改备份状态
  102. function showmsg(table, msg) {
  103. console.log(table);
  104. $("#table_" + table).addClass('span-color-2').html(msg);
  105. }
  106. //监听行工具事件
  107. table.on('toolbar(backup)', function (obj) {
  108. var checkData = table.checkStatus(obj.config.id).data;
  109. var len = checkData.length;
  110. var tables = [];
  111. if (len == 0) {
  112. layer.msg('请先选择表');
  113. return false;
  114. }
  115. for (var i = 0; i < len; i++) {
  116. tables.push(checkData[i].name);
  117. }
  118. if (obj.event === 'backup') {
  119. layer.confirm('系统自带的备份功能仅是辅助工具,建议使用第三方专业的工具备份更安全!<br>确认要备份选中的' + len + '个数据表吗?', {
  120. icon: 3,
  121. title: '提示'
  122. }, function (index) {
  123. $.ajax({
  124. url: "/home/database/backup",
  125. type: 'post',
  126. data: { 'tables': tables },
  127. success: function (res) {
  128. if (res.code == 0) {
  129. layer.msg("开始备份,请不要关闭本页面!");
  130. window.onbeforeunload = function () { return "正在备份数据库,请不要关闭!" }
  131. backup(res.data.tab);
  132. }
  133. if (res.code == 2) {
  134. layer.confirm('检测到有一个备份任务未完成,请先清除未完成的备份', {
  135. icon: 3,
  136. title: '提示'
  137. }, function (index) {
  138. $.ajax({
  139. url: "/home/database/del",
  140. data: { 'lock': 1 },
  141. success: function (res) {
  142. layer.msg(res.msg);
  143. }
  144. })
  145. })
  146. }
  147. else {
  148. layer.msg(res.msg);
  149. }
  150. }
  151. })
  152. layer.close(index);
  153. });
  154. } else if (obj.event === 'optimize') {
  155. layer.confirm('确认要优化选中的' + len + '个数据表吗?', {
  156. icon: 3,
  157. title: '提示'
  158. }, function (index) {
  159. $.ajax({
  160. url: "/home/database/optimize",
  161. type: 'post',
  162. data: { 'tables': tables },
  163. success: function (res) {
  164. layer.msg(res.msg);
  165. if (res.code == 0) {
  166. setTimeout(function () {
  167. location.reload();
  168. }, 2000)
  169. }
  170. }
  171. })
  172. layer.close(index);
  173. });
  174. } else if (obj.event === 'repair') {
  175. layer.confirm('确认要修复选中的' + len + '个数据表吗?', {
  176. icon: 3,
  177. title: '提示'
  178. }, function (index) {
  179. $.ajax({
  180. url: "/home/database/repair",
  181. type: 'post',
  182. data: { 'tables': tables },
  183. success: function (res) {
  184. layer.msg(res.msg);
  185. if (res.code == 0) {
  186. setTimeout(function () {
  187. location.reload();
  188. }, 2000)
  189. }
  190. }
  191. })
  192. layer.close(index);
  193. });
  194. }
  195. });
  196. }
  197. </script>
  198. {/block}
  199. <!-- /脚本 -->