f86e9c0542a028351a3a121bbe9c5843.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. <?php if (!defined('THINK_PATH')) exit(); /*a:3:{s:76:"D:\phpStudy\WWW\layui_admin\public/../application/admin\view\data\index.html";i:1539767239;s:69:"D:\phpStudy\WWW\layui_admin\application\admin\view\public\header.html";i:1542340311;s:69:"D:\phpStudy\WWW\layui_admin\application\admin\view\public\footer.html";i:1542617006;}*/ ?>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title><?php echo config('WEB_SITE_TITLE'); ?></title>
  7. <meta name="renderer" content="webkit">
  8. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  10. <link rel="stylesheet" href="/static/admin/js/layui/css/layui.css" >
  11. <link rel="stylesheet" href="/static/admin/css/admin.css" >
  12. <link rel="stylesheet" href="/static/admin/css/plugins/viewer/viewer.css"><!--viewer图片查看器-->
  13. <link rel="stylesheet" href="/static/admin/css/font-awesome.min.css"><!--fontAwesome图标库-->
  14. <link rel="stylesheet" href="/static/admin/css/plugins/cropper/ImgCropping.css" ><!--图片裁剪组件-->
  15. <link rel="stylesheet" href="/static/admin/css/plugins/cropper/cropper.min.css" ><!--图片裁剪组件-->
  16. <!--<link rel="stylesheet" href="/static/admin/css/plugins/animate/animate.min.css" >-->
  17. <link rel="stylesheet" href="/static/admin/js/plugins/zTree/zTreeStyle.css" ><!--zTree组件-->
  18. <link rel="stylesheet" href="/static/admin/css/plugins/formSelects/formSelects-v4.css" ><!--select多选组件-->
  19. <link rel="stylesheet" href="/static/admin/js/plugins/webuploader/webuploader.css" ><!--webUploader上传组件-->
  20. <link rel="stylesheet" href="/static/admin/js/plugins/webuploader/style.css" ><!--webUploader上传组件-->
  21. <link rel="stylesheet" href="/static/admin/js/plugins/wx-audio/wx-audio.css" ><!--音频播放器组件-->
  22. <link rel="stylesheet" href="/static/admin/css/plugins/toastr/toastr.css" ><!--toastr通知组件-->
  23. <style>
  24. /*layui滚动条自适应*/
  25. /*.layui-body{overflow-y: scroll;}*/
  26. /*body{overflow-y: scroll;}*/
  27. /*灯箱图片*/
  28. /*.closeP{width:60px;height:60px;text-align: center;line-height: 70px;border-radius:30px;background:rgba(0,0,0,0.5);font-size: 25px;position: fixed;top:-23px;right:-20px;color: #ccc;cursor: pointer;}*/
  29. /*.cha{position:relative;top:1px;right:8px;}*/
  30. /*.closeP:hover{color: white}*/
  31. /*.showP{width: 100%;height: 100vh;background: rgba(0,0,0,0.5);text-align: center;position: fixed;top: 0;left: 0;z-index: 1000;}*/
  32. /*图标*/
  33. /*#chooseicon {margin:20px;}*/
  34. /*#chooseicon ul { margin:5px 0 0 0;}*/
  35. /*#chooseicon ul li{width:41px;height:41px;line-height:41px;border:1px solid #e7e7e7;padding:1px;margin:1px;text-align: center;font-size:18px;float: left;}*/
  36. /*#chooseicon ul li:hover{border:1px solid #2c3e50;cursor:pointer;}*/
  37. /* 输入框添加蓝色边框效果,阴影边框效果 */
  38. /*.layui-input:focus,*/
  39. /*.layui-textarea:focus {*/
  40. /*border-color: rgba(91, 192, 222, 0.8) !important;*/
  41. /*-webkit-box-shadow: 0 0 5px rgba(91, 192, 222, .5);*/
  42. /*-moz-box-shadow: 0 0 5px rgba(91, 192, 222, .5);*/
  43. /*box-shadow: 0 0 5px rgba(91, 192, 222, .5);*/
  44. /*}*/
  45. /*.layui-input:hover,*/
  46. /*.layui-textarea:hover {*/
  47. /*border-color: rgba(91, 192, 222, 0.8) !important;*/
  48. /*-webkit-box-shadow: 0 0 5px rgba(91, 192, 222, .5);*/
  49. /*-moz-box-shadow: 0 0 5px rgba(91, 192, 222, .5);*/
  50. /*box-shadow: 0 0 5px rgba(91, 192, 222, .5);*/
  51. /*}*/
  52. /*!* 表单验证失败红色边框效果,阴影效果 *!*/
  53. /*.layui-form-danger, .layui-form-danger:focus, .layui-form-danger:hover{*/
  54. /*border-color: rgba(255,87,34, .8) !important;*/
  55. /*-webkit-box-shadow: 0 0 5px rgba(255,87,34, .5);*/
  56. /*-moz-box-shadow: 0 0 5px rgba(255,87,34, .5);*/
  57. /*box-shadow: 0 0 5px rgba(255,87,34, .5);*/
  58. /*}*/
  59. </style>
  60. </head>
  61. <body>
  62. <div class="layui-fluid">
  63. <div class="layui-card">
  64. <div class="layui-form layui-card-header layuiadmin-card-header-auto">
  65. <button class="layui-btn layuiBtn" data-type="backups" id="export">
  66. <i class="fa fa-refresh"></i> 立即备份
  67. </button>
  68. <button class="layui-btn layui-btn-info layuiBtn" data-type="optimize">
  69. <i class="fa fa-line-chart"></i> 优化表
  70. </button>
  71. <button class="layui-btn layui-btn-normal layuiBtn" data-type="repair" >
  72. <i class="fa fa-wrench"></i> 修复表
  73. </button>
  74. </div>
  75. <div class="layui-card-body">
  76. <table id="LAY-table-manage" lay-filter="LAY-table-manage"></table>
  77. <!--操作模板-->
  78. <script type="text/html" id="opeBar">
  79. <a class="layui-btn layui-btn-info layui-btn-xs" title="优化表" onclick="together('<?php echo url('optimize'); ?>','{{d.name}}')" ><i class="fa fa-line-chart"></i></a>
  80. <a class="layui-btn layui-btn-normal layui-btn-xs" title="修复表" onclick="together('<?php echo url('repair'); ?>','{{d.name}}')" ><i class="fa fa-wrench"></i></a>
  81. </script>
  82. </div>
  83. </div>
  84. </div>
  85. <div id="headCrop" style="display:none">
  86. <div class="tailoring-content-one">
  87. <label title="选择图片" for="chooseImg" class="layui-btn">
  88. <input type="file" accept="image/jpg,image/jpeg,image/png" name="file" id="chooseImg" class="hidden" onchange="selectImg(this)"><i class="fa fa-cloud-upload"></i>
  89. 选择图片
  90. </label>
  91. </div>
  92. <div class="ibox-content">
  93. <div class="tailoring-content">
  94. <div class="tailoring-content-two">
  95. <div class="tailoring-box-parcel" style="text-align: center">
  96. <img id="tailoringImg">
  97. <span class="word" style="position:relative;top:50%;font-size:14px;color: #c2c2c2">仅支持JPG、JPEG、PNG格式的图片文件</span><br>
  98. <!--<span class="size" style="position:relative;top:50%;font-size:16px">文件不能大于2MB</span>-->
  99. </div>
  100. <div class="preview-box-parcel">
  101. <!--<p>图片预览:</p>-->
  102. <div class="square previewImg"></div>
  103. <div class="circular previewImg"></div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="modal-footer">
  109. <span class="layui-btn cropper-reset-btn" style="float:left">复位</span>
  110. <span class="layui-btn zoomIn" style="float:left">放大</span>
  111. <span class="layui-btn zoomOut" style="float:left">缩小</span>
  112. <span class="layui-btn cropper-rotate-btn" style="float:left">旋转</span>
  113. <span class="layui-btn cropper-scaleX-btn" style="float:left">换向</span>
  114. <span class="layui-btn " id="sureCut"><i class="fa fa-save"></i> 保存</span>
  115. <span class="layui-btn layui-btn-primary" onclick="layer.closeAll()"><i class="fa fa-close"></i> 关闭</span>
  116. </div>
  117. </div>
  118. <script src="/static/admin/js/jquery.min.js"></script>
  119. <script src="/static/admin/js/layui/layui.js"></script>
  120. <script src="/static/admin/js/plugins/viewer/viewer.js"></script><!--viewer图片查看器-->
  121. <script src="/static/admin/js/Icon.js"></script><!--fontAwesome图标库-->
  122. <script src="/static/admin/js/wk.js"></script><!--封装方法-->
  123. <script src="/static/admin/js/common.js"></script><!--全局监听ajax-->
  124. <script src="/static/admin/js/plugins/cropper/cropper.min.js"></script><!--图片裁剪组件-->
  125. <script src="/static/admin/js/plugins/zTree/jquery.ztree.core-3.5.js"></script><!--zTree组件-->
  126. <script src="/static/admin/js/plugins/zTree/jquery.ztree.excheck-3.5.js"></script><!--zTree选择组件-->
  127. <!--<script src="/static/admin/js/plugins/zTree/jquery.ztree.exedit-3.5.js"></script>--><!--zTree编辑组件-->
  128. <script src="/static/admin/js/plugins/webuploader/webuploader.js"></script><!--webUploader上传组件-->
  129. <script src="/static/admin/js/plugins/wangEditor-3.1.1/release/wangEditor.js" ></script><!--wangEditor编辑器-->
  130. <script src="/static/admin/js/plugins/wx-audio/wx-audio.js" ></script><!--音频播放器组件-->
  131. <script src="/static/admin/js/plugins/clipboard/clipboard.js" ></script><!--粘贴板组件-->
  132. <script src="/static/admin/js/plugins/jqprint/jQuery.print.js" ></script><!--打印组件-->
  133. <script src="/static/admin/js/plugins/toastr/toastr.js" ></script><!--toastr通知组件-->
  134. <script src="/static/admin/js/plugins/ueditor/ueditor.config.js" ></script><!--百度富文本-->
  135. <script src="/static/admin/js/plugins/ueditor/ueditor.all.js" ></script><!--百度富文本-->
  136. <script>
  137. layui.config({
  138. base: '/src/' //静态资源所在路径
  139. }).extend({
  140. index: 'lib/index' //主入口模块
  141. , formSelects: 'formSelects-v4'
  142. , dropdown: 'dropdown'
  143. }).use(['index','dropdown','formSelects']),function(){
  144. var formSelects = layui.formSelects
  145. };
  146. </script>
  147. <script>
  148. toastr.options = {
  149. "newestOnTop": false, //新的toastr会显示在旧的toastr前面
  150. "preventDuplicates": false, //重复内容的提示框只出现一次
  151. "target": "body", // 默认为'body', 设置toastr的目标容器
  152. "closeButton": true,//关闭按钮
  153. "debug": false,//调试模式
  154. "progressBar": true,//进度条
  155. "closeOnHover": true,//hover关闭
  156. "positionClass": "toast-bottom-right",//toastr显示位置
  157. "showDuration": "400",//显示的时间
  158. "hideDuration": "100",//消失的时间
  159. "timeOut": "7000",//停留的时间
  160. "extendedTimeOut": "100",//控制时间
  161. "showEasing": "swing",//显示时的动画缓冲方式
  162. "hideEasing": "linear",//消失时的动画缓冲方式
  163. "showMethod": "layui-anim layui-anim-up",//显示时的动画方式
  164. "hideMethod": "layui-anim layui-anim-fadeout",//消失时的动画方式
  165. }
  166. //view初始化查看图片
  167. $(function(){
  168. $('.layui-append-img,.layui-circle').viewer({
  169. url: 'data-original',
  170. });
  171. })
  172. //关闭自动填充
  173. $('input').attr('autocomplete',"off");
  174. // //图片灯箱
  175. // function imgDisplay(obj) {
  176. // var src = $(obj).attr("src");
  177. // var imgHtml = '<div class="showP"><img src=' + src + ' style="margin-top: 120px;height:50%;margin-bottom:120px;" /><p class="closeP" onclick="closePicture(this)"><span class="cha">×</span></p></div>'
  178. // $('body').append(imgHtml);
  179. // }
  180. //
  181. // //关闭图片灯箱
  182. // function closePicture(obj) {
  183. // $(obj).parent("div").remove();
  184. // }
  185. //tips框
  186. $('#offAll').on('mouseover', function(){
  187. var that = this;
  188. layer.tips('<span style="color:#686B6D;"><i class="fa fa-info-circle"></i> 若未勾选默认禁用全部</span>', that,{tips: [2, '#F2F2F2'],time: 10000});
  189. });
  190. //tips框
  191. $('#onAll').on('mouseover', function(){
  192. var that = this;
  193. layer.tips('<span style="color:#686B6D;"><i class="fa fa-info-circle"></i> 若未勾选默认启用全部</span>', that,{tips: [2, '#F2F2F2',''],time: 10000});
  194. });
  195. //tips框
  196. $('#excel').on('mouseover', function(){
  197. var that = this;
  198. layer.tips('<span style="color:#686B6D;"><i class="fa fa-info-circle"></i> 导出筛选完成数据</span>', that,{tips: [2, '#F2F2F2',''],time: 10000});
  199. });
  200. //关闭tips框
  201. $('#offAll,#onAll,#export,#excel').on('mouseout', function(){
  202. layer.closeAll('tips');
  203. });
  204. //layui公共操作
  205. layui.use(['form','table'], function() {
  206. var form = layui.form
  207. ,table = layui.table
  208. //重置搜索框
  209. $('#empty').on('click', function () {
  210. $('.layui-input').val('');
  211. // $(".search").trigger("chosen:updated");
  212. $('select').each(function (i, j) {
  213. $(j).find("option:selected").attr("selected", false);
  214. form.render('select')
  215. })
  216. });
  217. //表格排序
  218. table.on('sort(LAY-table-manage)', function(obj){
  219. table.reload('LAY-table', {
  220. initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态
  221. ,where: { //请求参数
  222. field: obj.field //排序字段
  223. ,order: obj.type //排序方式
  224. }
  225. });
  226. });
  227. //监听搜索
  228. form.on('submit(LAY-search)', function (data) {
  229. //执行重载
  230. table.reload('LAY-table', {
  231. page: {
  232. curr: 1 //重新从第 1 页开始
  233. }
  234. ,where: data.field
  235. });
  236. });
  237. //地区三级联动
  238. form.on('select(province)', function(data){
  239. getArea("province",data.value);
  240. });
  241. form.on('select(city)', function(data){
  242. getArea("city",data.value);
  243. });
  244. function getArea(type,id){
  245. $.ajax({
  246. url:"<?php echo url('admin/Base/place'); ?>",
  247. dataType:"json",
  248. data:'id='+id,
  249. type:'post',
  250. success:function(res){
  251. var opt = null;
  252. $.each(res.msg,function(key,vo){
  253. opt = opt+"<option value="+vo.district_id+">"+vo.district+"</option>";
  254. })
  255. if(type=="province"){
  256. $("#city").empty();
  257. $("#city").append('<option value="">---- 请选择市 ----</option>');
  258. $("#district").empty();
  259. $("#district").append('<option value="">---- 请选择区 ----</option>');
  260. $("#city").append(opt);
  261. }else if(type == "city"){
  262. $("#district").empty();
  263. $("#district").append('<option value="">---- 请选择区 ----</option>');
  264. $("#district").append(opt);
  265. }
  266. form.render('select');
  267. }
  268. })
  269. }
  270. });
  271. </script>
  272. <script>
  273. layui.use(['index', 'table'], function () {
  274. var $ = layui.$
  275. , form = layui.form
  276. , table = layui.table
  277. table.render({
  278. elem: '#LAY-table-manage'
  279. , url: '<?php echo url("Data/index"); ?>'
  280. ,response: {
  281. statusCode: 220 //成功的状态码,默认:0
  282. }
  283. , page: false
  284. , even: false //开启隔行背景
  285. , size: 'lg' //sm小尺寸的表格 lg大尺寸
  286. // ,width:100
  287. , cellMinWidth: 150
  288. , limits: [5, 10, 15, 20, 25, 30]
  289. , limit: "<?php echo config('pages'); ?>"
  290. , loading: true
  291. , id: 'LAY-table'
  292. , cols: [[
  293. {type: 'checkbox', fixed: 'left',LAY_CHECKED:true}
  294. , {field: 'name', width: '', title: '表名',align: 'center'}
  295. , {field: 'comment', width: '', title: '注释', align: 'center'}
  296. , {field: 'engine', width: 90, title: '引擎', align: 'center'}
  297. , {field: 'rows', width: '', title: '数据量', align: 'center',templet:'<div>【{{d.rows}}】条记录</div>'}
  298. , {field: 'data_length', width: '', title: '数据大小',align: 'center'}
  299. , {field: 'create_time', width: '', title: '创建时间', align: 'center',templet:"<div>{{d.create_time?layui.util.toDateString(d.create_time,'yyyy-MM-dd HH:MM'):''}}</div>"}
  300. , {width: '', title: '状态', align: 'center',templet:"<div><span class='layui-badge layui-bg-orange' id='backup_{{d.name}}'>等待备份...</span></div>"}
  301. , {fixed: 'right', width: 100, title: '操作', align: 'center', toolbar: '#opeBar'}
  302. ]]
  303. });
  304. //事件
  305. var active = {
  306. //备份数据库
  307. backups: function() {
  308. var $export = $('#export');
  309. $('.layui-btn').addClass('layui-disabled').attr('disabled','disabled');
  310. $export.html("正在发送备份请求...");
  311. $.post("<?php echo url('export'); ?>",{ids:getIds()},function (data) {
  312. if (data.code) {
  313. tables = data.data.tables;
  314. $export.html(data.msg + "开始备份,请不要关闭本页面!");
  315. backup(data.data.tab);
  316. window.onbeforeunload = function () {
  317. return "正在备份数据库,请不要关闭!";
  318. };
  319. } else {
  320. if (data.code == 100) {
  321. wk.error(data.msg, 2, '');
  322. }
  323. $export.html("立即备份");
  324. setTimeout(function () {
  325. $('.layui-btn').removeClass('layui-disabled').removeAttr('disabled');
  326. }, 1500);
  327. }
  328. });
  329. }
  330. //优化表
  331. ,optimize:function(){
  332. together("<?php echo url('optimize'); ?>",getIds());
  333. }
  334. //修复表
  335. ,repair:function(){
  336. together("<?php echo url('repair'); ?>",getIds());
  337. }
  338. };
  339. $('.layuiBtn').on('click', function () {
  340. var type = $(this).data('type');
  341. active[type] ? active[type].call(this) : '';
  342. });
  343. //获取选中目标
  344. var getIds = function () {
  345. var ids = [];
  346. var checkStatus = table.checkStatus('LAY-table')
  347. ,data = checkStatus.data;
  348. $.each(data,function(index,item){
  349. ids.push(item['name'])
  350. });
  351. return ids;
  352. }
  353. //开始备份
  354. var backup = function(tab, status) {
  355. var $export = $('#export');
  356. status && showmsg(tab.id, "开始备份...(0%)");
  357. $.get("<?php echo url('export'); ?>", tab, function (data) {
  358. if (data.code) {
  359. showmsg(tab.id, data.msg);
  360. if (!$.isPlainObject(data.data.tab)) {
  361. $('.layui-btn').removeClass('layui-disabled').removeAttr('disabled');
  362. $export.html("备份完成,点击重新备份");
  363. window.onbeforeunload = function () {
  364. return null;
  365. };
  366. return;
  367. }
  368. backup(data.data.tab, tab.id != data.data.tab.id);
  369. } else {
  370. if(data.code == 100){
  371. wk.error(data.msg,2,'');
  372. }
  373. $export.html("立即备份");
  374. setTimeout(function () {
  375. $('.layui-btn').removeClass('layui-disabled').removeAttr('disabled');
  376. }, 1500);
  377. }
  378. });
  379. }
  380. var showmsg = function(id, msg) {
  381. var w = $('#backup_'+tables[id]);
  382. w.removeClass('layui-bg-green').addClass('layui-bg-orange');
  383. if(msg == '备份完成!'){
  384. w.removeClass('layui-bg-orange').addClass('layui-bg-green');
  385. }
  386. w.html(msg);
  387. // w.css('color','#1BB394');
  388. }
  389. });
  390. //优化表&修复表
  391. var together = function(url,data){
  392. $.ajax({
  393. url:url,
  394. data:"ids="+data,
  395. type:'post',
  396. dataType:'json',
  397. success:function(res){
  398. if(res.code == 200){
  399. wk.success(res.msg,1,'');
  400. } else if (res.code == 100){
  401. wk.error(res.msg,2,'');
  402. }
  403. }
  404. })
  405. }
  406. </script>
  407. </body>
  408. </html>