var database = { get_list: function (page, search) { if (page == undefined) page = 1; if (!search) search = $("#SearchValue").val(); bt.database.get_list(page, search, function (rdata) { $('#databasePage').html(rdata.page); var _tab = bt.render({ table: '#DataBody', columns: [ { field: 'id', type: 'checkbox', width: 30 }, { field: 'name', title: '数据库名', width: '20%' }, { field: 'username', title: '用户名', sort: function () { database.get_list(); } }, { field: 'password', width: '15%', title: '密码', templet: function (item) { var _html = '**********'; _html += ''; _html += ''; return _html; } }, { field: 'backup', title: '备份', templet: function (item) { var backup = ''; var _msg = lan.database.backup_empty; if (item.backup_count > 0) _msg = lan.database.backup_ok; backup = "" + _msg + " | " backup += "" + lan.database.input + ""; return backup; } }, { field: 'ps', title: '备注', templet: function (item) { var _ps = "" if (item.password) { _ps += item.ps } else { _ps += '无法获取到密码,请通过改密按钮设置密码!'; } _ps += ""; return _ps; } }, { field: 'opt', width: 260, title: '操作', align: 'right', templet: function (item) { var option = "管理 | "; option += "工具 | "; option += "权限 | "; option += "改密 | "; option += "删除"; return option; } }, ], data: rdata.data }) }) }, rep_tools: function (db_name, res) { var loadT = layer.msg('正在获取数据,请稍候...', { icon: 16, time: 0 }); bt.send('GetInfo', 'database/GetInfo', { db_name: db_name }, function (rdata) { layer.close(loadT) if (rdata.status === false) { layer.msg(rdata.msg, { icon: 2 }); return; } var types = { InnoDB: "MyISAM", MyISAM: "InnoDB" }; var tbody = ''; for (var i = 0; i < rdata.tables.length; i++) { if (!types[rdata.tables[i].type]) continue; tbody += '\ \ ' + rdata.tables[i].table_name + '\ ' + rdata.tables[i].type + '\ ' + rdata.tables[i].collation + '\ ' + rdata.tables[i].rows_count + '\ ' + rdata.tables[i].data_size + '\ \ 修复 |\ 优化 |\ 转为' + types[rdata.tables[i].type] + '\ \ ' } if (res) { $(".gztr").html(tbody); $("#db_tools").html(''); $("input[type='checkbox']").attr("checked", false); $(".tools_size").html('大小:' + rdata.data_size); return; } layer.open({ type: 1, title: "MySQL工具箱【" + db_name + "】", area: ['780px', '580px'], closeBtn: 2, shadeClose: false, content: '
\
\ 数据库名称:'+ db_name + '\ 大小:'+ rdata.data_size + '\ \
\
\
\ \ \ \ \ \ \ \ \ \ \ \ \ ' + tbody + '\
表名引擎字符集行数大小操作
\
\
\
' }); tableFixed('database_fix'); //表格头固定 function tableFixed(name) { var tableName = document.querySelector('#' + name); tableName.addEventListener('scroll', scrollHandle); } function scrollHandle(e) { var scrollTop = this.scrollTop; //this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)'; $(this).find("thead").css({ "transform": "translateY(" + scrollTop + "px)", "position": "relative", "z-index": "1" }); } }); }, selected_tools: function (my_obj, db_name) { var is_checked = false if (my_obj) is_checked = my_obj.checked; var db_tools = $("input[value^='dbtools_']"); var n = 0; for (var i = 0; i < db_tools.length; i++) { if (my_obj) db_tools[i].checked = is_checked; if (db_tools[i].checked) n++; } if (n > 0) { var my_btns = '' $("#db_tools").html(my_btns); } else { $("#db_tools").html(''); } }, rep_database: function (db_name, tables) { dbs = database.rep_checkeds(tables) var loadT = layer.msg('已送修复指令,请稍候...', { icon: 16, time: 0 }); bt.send('ReTable', 'database/ReTable', { db_name: db_name, tables: JSON.stringify(dbs) }, function (rdata) { layer.close(loadT) layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); database.rep_tools(db_name, true); }); }, op_database: function (db_name, tables) { dbs = database.rep_checkeds(tables) var loadT = layer.msg('已送优化指令,请稍候...', { icon: 16, time: 0 }); bt.send('OpTable', 'database/OpTable', { db_name: db_name, tables: JSON.stringify(dbs) }, function (rdata) { layer.close(loadT) layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); database.rep_tools(db_name, true); }); }, to_database_type: function (db_name, tables, type) { dbs = database.rep_checkeds(tables) var loadT = layer.msg('已送引擎转换指令,请稍候...', { icon: 16, time: 0, shade: [0.3, "#000"] }); bt.send('AlTable', 'database/AlTable', { db_name: db_name, tables: JSON.stringify(dbs), table_type: type }, function (rdata) { layer.close(loadT); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); database.rep_tools(db_name, true); }); }, rep_checkeds: function (tables) { var dbs = [] if (tables) { dbs.push(tables) } else { var db_tools = $("input[value^='dbtools_']"); for (var i = 0; i < db_tools.length; i++) { if (db_tools[i].checked) dbs.push(db_tools[i].value.replace('dbtools_', '')); } } if (dbs.length < 1) { layer.msg('请至少选择一张表!', { icon: 2 }); return false; } return dbs; }, sync_to_database: function (type) { var data = []; $('input[type="checkbox"].check:checked').each(function () { if (!isNaN($(this).val())) data.push($(this).val()); }); bt.database.sync_to_database({ type: type, ids: JSON.stringify(data) }, function (rdata) { if (rdata.status) database.get_list(); }); }, sync_database: function () { bt.database.sync_database(function (rdata) { if (rdata.status) database.get_list(); }) }, add_database: function () { bt.database.add_database(function (rdata) { if (rdata.status) database.get_list(); }) }, batch_database: function (type, arr, result) { if (arr == undefined) { arr = []; result = { count: 0, error_list: [] }; $('input[type="checkbox"].check:checked').each(function () { var _val = $(this).val(); if (!isNaN(_val)) arr.push($(this).parents('tr').data('item')); }) bt.show_confirm(lan.database.del_all_title, "" + lan.get('del_all_database', [arr.length]) + "", function () { bt.closeAll(); database.batch_database(type, arr, result); }); return; } var item = arr[0]; switch (type) { case 'del': if (arr.length < 1) { database.get_list(); bt.msg({ msg: lan.get('del_all_database_ok', [result.count]), icon: 1, time: 5000 }); return; } bt.database.del_database({ id: item.id, name: item.name }, function (rdata) { if (rdata.status) { result.count += 1; } else { result.error_list.push({ name: item.item, err_msg: rdata.msg }); } arr.splice(0, 1) database.batch_database(type, arr, result); }) break; } }, del_database: function (id, name) { bt.show_confirm(lan.get('del', [name]), lan.get('confirm_del', [name]), function () { bt.database.del_database({ id: id, name: name }, function (rdata) { if (rdata.status) database.get_list(); bt.msg(rdata); }) }); }, set_data_pass: function (id, username, password) { var bs = bt.database.set_data_pass(function (rdata) { if (rdata.status) database.get_list(); bt.msg(rdata); }) $('.name' + bs).val(username); $('.id' + bs).val(id); $('.password' + bs).val(password); }, database_detail: function (id, dataname, page) { if (page == undefined) page = '1'; var loadT = bt.load(lan.public.the_get); bt.pub.get_data('table=backup&search=' + id + '&limit=5&type=1&tojs=database.database_detail&p=' + page, function (frdata) { loadT.close(); var ftpdown = ''; var body = ''; var port; frdata.page = frdata.page.replace(/'/g, '"').replace(/database.database_detail\(/g, "database.database_detail(" + id + ",'" + dataname + "',"); if ($('#DataBackupList').length <= 0) { bt.open({ type: 1, skin: 'demo-class', area: '700px', title: lan.database.backup_title, closeBtn: 2, shift: 5, shadeClose: false, content: "
" }); } setTimeout(function () { $('.databackup_page').html(frdata.page); var _tab = bt.render({ table: '#DataBackupList', columns: [ { field: 'name', title: '文件名称' }, { field: 'size', title: '文件大小', templet: function (item) { return bt.format_size(item.size); } }, { field: 'addtime', title: '备份时间' }, { field: 'opt', title: '操作', align: 'right', templet: function (item) { var _opt = '恢复 | '; _opt += '下载 | '; _opt += '删除' return _opt; } }, ], data: frdata.data }); $('#btn_data_backup').unbind('click').click(function () { bt.database.backup_data(id, dataname, function (rdata) { if (rdata.status) database.database_detail(id, dataname); }) }) }, 100) }); }, upload_files: function (name) { var path = bt.get_cookie('backup_path') + "/database/"; bt_upload_file.open(path, '.sql,.gz,.tar.gz,.zip', lan.database.input_up_type, function () { database.input_database(name); }); /* var index = layer.open({ type: 1, closeBtn: 2, title: lan.files.up_title + ' --- ' + lan.database.input_up_type + '', area: ['500px', '500px'], shadeClose: false, content: '
\ \ \ \ \ \ '+ lan.files.up_coding + ':\ \ \ \
' , end: function () { database.input_database(name); } }); $("#filesClose").click(function () { layer.close(index); database.input_database(name); }); UploadStart(true); */ }, input_database: function (name) { var path = bt.get_cookie('backup_path') + "/database"; bt.send('get_files', 'files/GetDir', 'reverse=True&sort=mtime&tojs=GetFiles&p=1&showRow=100&path=' + path, function (rdata) { var data = []; for (var i = 0; i < rdata.FILES.length; i++) { if (rdata.FILES[i] == null) continue; var fmp = rdata.FILES[i].split(";"); var ext = bt.get_file_ext(fmp[0]); if (ext != 'sql' && ext != 'zip' && ext != 'gz' && ext != 'tgz') continue; data.push({ name: fmp[0], size: fmp[1], etime: fmp[2], }) } if ($('#DataInputList').length <= 0) { bt.open({ type: 1, skin: 'demo-class', area: '600px', title: lan.database.input_title_file+'['+name+']', closeBtn: 2, shift: 5, shadeClose: false, content: '
' + '
' + '
' + bt.render_help([lan.database.input_ps1, lan.database.input_ps2, (bt.os != 'Linux' ? lan.database.input_ps3.replace(/\/www.*\/database/, path) : lan.database.input_ps3)]) + '
' }); } setTimeout(function () { var _tab = bt.render({ table: '#DataInputList', columns: [ { field: 'name', title: lan.files.file_name }, { field: 'etime', title: lan.files.file_etime, templet: function (item) { return bt.format_data(item.etime); } }, { field: 'size', title: lan.files.file_size, templet: function (item) { return bt.format_size(item.size) } }, { field: 'opt', title: '操作', align: 'right', templet: function (item) { return '导入 | 删除'; } }, ], data: data }); }, 100) }) }, remove_input_file: function (fileName,name) { layer.confirm(lan.get('recycle_bin_confirm', [fileName]), { title: lan.files.del_file, closeBtn: 2, icon: 3 }, function (index) { layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); $.post('/files?action=DeleteFile', 'path=' + encodeURIComponent(fileName), function (rdata) { layer.close(index); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); database.input_database(name); }); }); } }