restore.html 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>原动力 - 内容管理系统</title>
  7. <link href="/resource/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
  8. <link href="/resource/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
  9. <link href="/resource/css/ionicons.min.css" rel="stylesheet" type="text/css" />
  10. <link href="/resource/css/style.css" rel="stylesheet" type="text/css" />
  11. <link rel="stylesheet" type="text/css" href="/resource/js/webuploader-0.1.5/webuploader.css">
  12. <style type="text/css">
  13. .file-item{display:flex;align-items: center;height: 50px;justify-content: space-between;}
  14. .file-item .info,.file-item .state{margin:0;padding:0;font-size: 14px;}
  15. .file-item .state{margin-left:50px;}
  16. .file-item .close{cursor: pointer;}
  17. </style>
  18. </head>
  19. <body>
  20. <div class="row">
  21. <div class="col-md-12">
  22. <h1 class="panel-heading">备份/还原</h1>
  23. <!--breadcrumbs start -->
  24. <ul class="breadcrumb">
  25. <li><a href="/admin/dashboard/toIndex"><i class="fa fa-home"></i> 首页</a></li>
  26. <li class="active">备份/还原</li>
  27. </ul>
  28. <!--breadcrumbs end -->
  29. </div>
  30. </div>
  31. <section class="panel">
  32. <div class="panel-body">
  33. <form class="col s12" id="form1" method="POST">
  34. <div class="form-group form-control-medium">
  35. <label for="imagePath">选择数据库文件:</label>
  36. <div id="uploader" class="wu-example">
  37. <!--用来存放文件信息-->
  38. <div id="thelist" class="uploader-list"></div>
  39. <div class="btns">
  40. <div id="picker">选择文件</div>
  41. </div>
  42. </div>
  43. </div>
  44. <div class="form-btn-group-left">
  45. <button type="button" class="btn btn-info" onclick="confrim();">还原</button>
  46. </div>
  47. </form>
  48. </div>
  49. </section>
  50. <div aria-hidden="true" aria-labelledby="myModalLabel" role="dialog" tabindex="-1" id="confrim-dialog" class="modal fade">
  51. <div class="modal-dialog">
  52. <div class="modal-content">
  53. <div class="modal-header">
  54. <button aria-hidden="true" data-dismiss="modal" class="close" type="button">×</button>
  55. <h4 class="modal-title">操作提示?</h4>
  56. </div>
  57. <div class="modal-body">
  58. <div class="alert alert-block alert-danger">
  59. <strong>注意!</strong> 备份还原操作,会对原数据库数据表进行删除重建。
  60. </div>
  61. <h4 class="modal-title">您确定要执行还原操作吗?</h4>
  62. </div>
  63. <div class="modal-footer">
  64. <button type="button" class="btn btn-primary btn-addon btn-sm" onclick="restore();">确定</button>
  65. <button type="button" class="btn btn-default btn-sm" data-dismiss="modal">取消</button>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. <script src="/resource/js/jquery.min.js"></script>
  71. <script src="/resource/js/bootstrap.min.js"></script>
  72. <script src="/resource/js/webuploader-0.1.5/webuploader.js"></script>
  73. <script src="/resource/js/coco-message/coco-message.js"></script>
  74. <script>
  75. var files = 0;
  76. $(document).ready(function () {
  77. //初始化上传组件
  78. initUploader("picker","file-priview");
  79. })
  80. //初始化上传组件
  81. function initUploader(picker,el){
  82. uploader = WebUploader.create({
  83. auto: true,
  84. // swf文件路径
  85. swf: '/resource/js/webuploader-0.1.5/Uploader.swf',
  86. // 文件接收服务端。
  87. server: '/upload/uploadFile',
  88. // 选择文件的按钮。可选。
  89. // 内部根据当前运行是创建,可能是input元素,也可能是flash.
  90. pick: '#' + picker,
  91. fileNumLimit: 100,
  92. // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
  93. resize: false,
  94. accept: {
  95. title: 'Images',
  96. extensions: 'sql,txt',
  97. }
  98. });
  99. // 验证文件格式以及文件大小
  100. uploader.on("error", function (type) {
  101. var msg = "";
  102. if (type == "Q_TYPE_DENIED") {
  103. msg = "请上传SQL、TXT格式文件";
  104. }else {
  105. msg = "上传出错!请检查后重新上传!错误代码" + type;
  106. }
  107. uploader.reset();
  108. cocoMessage.error(msg);
  109. });
  110. // 当有文件被添加进队列的时候
  111. uploader.on('fileQueued', function(file) {
  112. $("#form1").prepend("<input id='file-input-" + file.id + "' type='hidden' name='files[" + files + "]' />");
  113. $("#thelist").append( '<div id="' + file.id + '" class="file-item">' +
  114. '<h4 class="info">' + file.name + '</h4>' +
  115. '<p class="state">等待上传...</p>' +
  116. '<i class="close fa fa-times-circle" onclick="removeFile(\''+file.id+'\')"></i>' +
  117. '</div>' );
  118. files++;
  119. });
  120. uploader.on('uploadSuccess', function(file, response) {
  121. $("#file-input-"+file.id).val(response.data.filepath);
  122. $("#" + file.id + ">.state").html('上传成功!');
  123. uploader.reset();
  124. cocoMessage.success("上传成功");
  125. });
  126. uploader.on('uploadError', function( file ) {
  127. uploader.reset();
  128. cocoMessage.error("上传失败");
  129. });
  130. }
  131. //删除文件上传队列
  132. function removeFile(id){
  133. $("#file-input-"+ id).remove();
  134. $("#" + id).remove();
  135. uploader.removeFile(id, true);
  136. }
  137. function confrim(){
  138. var inputs = $("input[id^='file-input-']");
  139. if(inputs.length <= 0){
  140. cocoMessage.error("请先选择备份文件");
  141. return;
  142. }
  143. $("#confrim-dialog").modal();
  144. }
  145. //还原数据库
  146. function restore(){
  147. var inputs = $("input[id^='file-input-']");
  148. var datas = new Array();
  149. for(var i = 0;i < inputs.length;i++){
  150. datas.push($(inputs[i]).val());
  151. }
  152. $.ajax({
  153. url : "/admin/database/restore",
  154. contentType : 'application/json',
  155. data : JSON.stringify(datas),
  156. type : "POST",
  157. dataType : "JSON",
  158. success : function(result) {
  159. $("#confrim-dialog").modal('hide');
  160. if(result.success){
  161. cocoMessage.success(result.info);
  162. }else{
  163. cocoMessage.error(result.info);
  164. }
  165. }
  166. });
  167. }
  168. </script>
  169. </body>
  170. </html>