mdserver-web/web/static/app/files.js

1907 lines
80 KiB
JavaScript
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//判断磁盘数量超出宽度
function isDiskWidth(){
var comlist_width = $("#comlist").width();
var body_width = $(".file-box").width();
$("#comlist").css({"width":(body_width-520)+"px","height":"34px","overflow":"auto"});
}
//打开回收站
function recycleBin(type){
$.post('/files/get_recycle_bin','',function(data){
// console.log(rdata);
var rdata = data['data'];
var body = ''
switch(type){
case 1:
for(var i=0;i<rdata.dirs.length;i++){
var shortwebname = rdata.dirs[i].name.replace(/'/,"\\'");
var shortpath = rdata.dirs[i].dname;
if(shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "...";
if(shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "...";
body += '<tr>\
<td><span class=\'ico ico-folder\'></span><span class="tname" title="'+rdata.dirs[i].name+'">'+shortwebname+'</span></td>\
<td><span title="'+rdata.dirs[i].dname+'">'+shortpath+'</span></td>\
<td>'+toSize(rdata.dirs[i].size)+'</td>\
<td>'+getLocalTime(rdata.dirs[i].time)+'</td>\
<td style="text-align: right;">\
<a class="btlink" href="javascript:;" onclick="reRecycleBin(\'' + rdata.dirs[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_re+'</a>\
| <a class="btlink" href="javascript:;" onclick="delRecycleBin(\'' + rdata.dirs[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_del+'</a>\
</td>\
</tr>';
}
for(var i=0;i<rdata.files.length;i++){
if(rdata.files[i].name.indexOf('BTDB_') != -1){
var shortwebname = rdata.files[i].name.replace(/'/,"\\'");
var shortpath = rdata.files[i].dname;
if(shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "...";
if(shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "...";
body += '<tr>\
<td><span class="ico ico-'+(getExtName(rdata.files[i].name))+'"></span><span class="tname" title="'+rdata.files[i].name+'">'+shortwebname.replace('BTDB_','')+'</span></td>\
<td><span title="'+rdata.files[i].dname+'">mysql://'+shortpath.replace('BTDB_','')+'</span></td>\
<td>-</td>\
<td>'+getLocalTime(rdata.files[i].time)+'</td>\
<td style="text-align: right;">\
<a class="btlink" href="javascript:;" onclick="reRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_re+'</a>\
| <a class="btlink" href="javascript:;" onclick="delRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_del+'</a>\
</td>\
</tr>';
continue;
}
var shortwebname = rdata.files[i].name.replace(/'/,"\\'");
var shortpath = rdata.files[i].dname;
if(shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "...";
if(shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "...";
body += '<tr>\
<td><span class="ico ico-'+(getExtName(rdata.files[i].name))+'"></span><span class="tname" title="'+rdata.files[i].name+'">'+shortwebname+'</span></td>\
<td><span title="'+rdata.files[i].dname+'">'+shortpath+'</span></td>\
<td>'+toSize(rdata.files[i].size)+'</td>\
<td>'+getLocalTime(rdata.files[i].time)+'</td>\
<td style="text-align: right;">\
<a class="btlink" href="javascript:;" onclick="reRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_re+'</a>\
| <a class="btlink" href="javascript:;" onclick="delRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_del+'</a>\
</td>\
</tr>'
}
$("#RecycleBody").html(body);
return;
break;
case 2:
for(var i=0;i<rdata.dirs.length;i++){
var shortwebname = rdata.dirs[i].name.replace(/'/,"\\'");
var shortpath = rdata.dirs[i].dname;
if(shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "...";
if(shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "...";
body += '<tr>\
<td><span class=\'ico ico-folder\'></span><span class="tname" title="'+rdata.dirs[i].name+'">'+shortwebname+'</span></td>\
<td><span title="'+rdata.dirs[i].dname+'">'+shortpath+'</span></td>\
<td>'+toSize(rdata.dirs[i].size)+'</td>\
<td>'+getLocalTime(rdata.dirs[i].time)+'</td>\
<td style="text-align: right;">\
<a class="btlink" href="javascript:;" onclick="reRecycleBin(\'' + rdata.dirs[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_re+'</a>\
| <a class="btlink" href="javascript:;" onclick="delRecycleBin(\'' + rdata.dirs[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_del+'</a>\
</td>\
</tr>'
}
$("#RecycleBody").html(body);
return;
break;
case 3:
for(var i=0;i<rdata.files.length;i++){
if(rdata.files[i].name.indexOf('BTDB_') != -1) continue;
var shortwebname = rdata.files[i].name.replace(/'/,"\\'");
var shortpath = rdata.files[i].dname;
if(shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "...";
if(shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "...";
body += '<tr>\
<td><span class="ico ico-'+(getExtName(rdata.files[i].name))+'"></span><span class="tname" title="'+rdata.files[i].name+'">'+shortwebname+'</span></td>\
<td><span title="'+rdata.files[i].dname+'">'+shortpath+'</span></td>\
<td>'+toSize(rdata.files[i].size)+'</td>\
<td>'+getLocalTime(rdata.files[i].time)+'</td>\
<td style="text-align: right;">\
<a class="btlink" href="javascript:;" onclick="reRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_re+'</a>\
| <a class="btlink" href="javascript:;" onclick="delRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_del+'</a>\
</td>\
</tr>';
}
$("#RecycleBody").html(body);
return;
break;
case 4:
for(var i=0;i<rdata.files.length;i++){
if(reisImage(getFileName(rdata.files[i].name))){
var shortwebname = rdata.files[i].name.replace(/'/,"\\'");
var shortpath = rdata.files[i].dname;
if(shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "...";
if(shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "...";
body += '<tr>\
<td><span class="ico ico-'+(getExtName(rdata.files[i].name))+'"></span><span class="tname" title="'+rdata.files[i].name+'">'+shortwebname+'</span></td>\
<td><span title="'+rdata.files[i].dname+'">'+shortpath+'</span></td>\
<td>'+toSize(rdata.files[i].size)+'</td>\
<td>'+getLocalTime(rdata.files[i].time)+'</td>\
<td style="text-align: right;">\
<a class="btlink" href="javascript:;" onclick="reRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_re+'</a>\
| <a class="btlink" href="javascript:;" onclick="delRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_del+'</a>\
</td>\
</tr>';
}
}
$("#RecycleBody").html(body);
return;
break;
case 5:
for(var i=0;i<rdata.files.length;i++){
if(rdata.files[i].name.indexOf('BTDB_') != -1) continue;
if(!(reisImage(getFileName(rdata.files[i].name)))){
var shortwebname = rdata.files[i].name.replace(/'/,"\\'");
var shortpath = rdata.files[i].dname;
if(shortwebname.length > 20) shortwebname = shortwebname.substring(0, 20) + "...";
if(shortpath.length > 20) shortpath = shortpath.substring(0, 20) + "...";
body += '<tr>\
<td><span class="ico ico-'+(getExtName(rdata.files[i].name))+'"></span><span class="tname" title="'+rdata.files[i].name+'">'+shortwebname+'</span></td>\
<td><span title="'+rdata.files[i].dname+'">'+shortpath+'</span></td>\
<td>'+toSize(rdata.files[i].size)+'</td>\
<td>'+getLocalTime(rdata.files[i].time)+'</td>\
<td style="text-align: right;">\
<a class="btlink" href="javascript:;" onclick="reRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_re+'</a>\
| <a class="btlink" href="javascript:;" onclick="delRecycleBin(\'' + rdata.files[i].rname.replace(/'/,"\\'") + '\',this)">'+lan.files.recycle_bin_del+'</a>\
</td>\
</tr>'
}
}
$("#RecycleBody").html(body);
return;
}
var tablehtml = '<div class="re-head">\
<div style="margin-left: 3px;" class="ss-text">\
<em>文件回收站</em>\
<div class="ssh-item">\
<input class="btswitch btswitch-ios" id="setRecycleBin" type="checkbox" '+(rdata.status?'checked':'')+'>\
<label class="btswitch-btn" for="setRecycleBin" onclick="setRecycleBin()"></label>\
</div>\
</div>\
<span style="line-height: 32px; margin-left: 30px;">注意:关闭回收站,删除的文件无法恢复!</span>\
<button style="float: right" class="btn btn-default btn-sm" onclick="closeRecycleBin();">清空回收站</button>\
</div>\
<div class="re-con">\
<div class="re-con-menu">\
<p class="on" onclick="recycleBin(1)">全部</p>\
<p onclick="recycleBin(2)">文件夹</p>\
<p onclick="recycleBin(3)">文件</p>\
<p onclick="recycleBin(4)">图片</p>\
<p onclick="recycleBin(5)">文档</p>\
</div>\
<div class="re-con-con">\
<div style="margin: 15px;" class="divtable">\
<table width="100%" class="table table-hover">\
<thead>\
<tr>\
<th>文件名</th><th>原位置</th>\
<th>大小</th><th width="150">删除时间</th>\
<th style="text-align: right;" width="110">操作</th>\
</tr>\
</thead>\
<tbody id="RecycleBody" class="list-list">'+body+'</tbody>\
</table></div></div></div>';
if(type == 'open'){
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: ['80%','606px'],
title: lan.files.recycle_bin_title,
content: tablehtml
});
if(window.location.href.indexOf("database") != -1){
recycleBin(6);
$(".re-con-menu p:last-child").addClass("on").siblings().removeClass("on");
}else{
recycleBin(1);
}
}
$(".re-con-menu p").click(function(){
$(this).addClass("on").siblings().removeClass("on");
})
},'json');
}
//去扩展名不处理
function getFileName(name){
var text = name.split("/");
var n = text.length-1;
text = text[n];
return text;
}
//判断图片文件
function reisImage(fileName){
var exts = ['jpg','jpeg','png','bmp','gif','tiff','ico'];
for(var i=0; i<exts.length; i++){
if(fileName == exts[i]) {
return true;
}
}
return false;
}
//从回收站恢复文件
function reRecycleBin(path,obj){
layer.confirm(lan.files.recycle_bin_re_msg,{title:lan.files.recycle_bin_re_title,closeBtn:2,icon:3},function(){
var loadT = layer.msg(lan.files.recycle_bin_re_the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files/re_recycle_bin','path='+encodeURIComponent(path),function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:5});
$(obj).parents('tr').remove();
},'json');
});
}
//从回收站删除
function delRecycleBin(path,obj){
layer.confirm(lan.files.recycle_bin_del_msg,{title:lan.files.recycle_bin_del_title,closeBtn:2,icon:3},function(){
var loadT = layer.msg(lan.files.recycle_bin_del_the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files/del_recycle_bin','path='+encodeURIComponent(path),function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:5});
$(obj).parents('tr').remove();
},'json');
});
}
//清空回收站
function closeRecycleBin(){
layer.confirm('清空回收站操作会永久删除回收站中的文件,继续吗?',{title:'清空回收站',closeBtn:2,icon:3},function(){
var loadT = layer.msg("<div class='myspeed'>正在删除,请稍候...</div>",{icon:16,time:0,shade: [0.3, '#000']});
setTimeout(function(){
getSpeed('.myspeed');
},1000);
$.post('/files/close_recycle_bin', '', function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:5});
$("#RecycleBody").html('');
},'json');
});
}
//回收站开关
function setRecycleBin(db){
var loadT = layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
var data = {}
if(db == 1){
data = {db:db};
}
$.post('/files/recycle_bin',data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:5});
},'json');
}
function openFilename(obj){
var path = $(obj).attr('data-path');
var ext = getSuffixName(path);
// console.log(path,ext);
if (inArray(ext,['html','htm','php','lua','rs','py','txt','md','js','css','scss','json','c','h','pl','java','log','conf','sh','json','ini', 'yml','yaml'])){
onlineEditFile(0, path);
}
if (inArray(ext,['png','jpeg','jpg','gif','webp','bmp','ico'])){
getImage(path);
}
if (inArray(ext,['svg'])){
var url = '/files/download?filename='+path;
layer.open({
type:1,
closeBtn: 1,
title:"SVG预览",
area: ['600px','500px'],
maxmin:true,
shadeClose: true,
content: '<iframe width="100%" height="100%"\
src="'+url+'"\
frameborder="0"\
border="0"\
marginwidth="0"\
marginheight="0"\
scrolling="yes"\
noresize=""\
allowfullscreen="allowfullscreen"\
mozallowfullscreen="mozallowfullscreen"\
msallowfullscreen="msallowfullscreen"\
oallowfullscreen="oallowfullscreen"\
webkitallowfullscreen="webkitallowfullscreen"\
allowfullscreen="true"></iframe>'
});
}
}
function searchFile(p){
getFiles(p);
}
//处理排序
function listFileOrder(skey, obj){
var or = getCookie('file_order');
var orderType = 'desc';
if(or){
var or_arr = or.split('|');
if(or.split('|')[1] == 'desc'){
orderType = 'asc';
} else if (or_arr[1] == 'asc'){
orderType = 'none';
} else {
orderType = 'desc';
}
}
setCookie('file_order',skey + '|' + orderType);
getFiles(1);
// console.log(obj,orderType);
// if(orderType == 'desc'){
// $(obj).find(".glyphicon-triangle-top").remove();
// $(obj).append("<span class='glyphicon glyphicon-triangle-bottom' style='margin-left:5px;color:#bbb'></span>");
// } else {
// $(obj).find(".glyphicon-triangle-bottom").remove();
// $(obj).append("<span class='glyphicon glyphicon-triangle-top' style='margin-left:5px;color:#bbb'></span>");
// }
}
function makeFilePage(showRow, page = ''){
var rows = ['10','50','100','200','500','1000','2000'];
var rowOption = '';
for(var i=0;i<rows.length;i++){
var rowSelected = '';
if(showRow == rows[i]) rowSelected = 'selected';
rowOption += '<option value="'+rows[i]+'" '+rowSelected+'>'+rows[i]+'</option>';
}
//分页
$("#filePage").html(page);
$("#filePage div").append("<span class='Pcount-item'>每页<select name='file_page' style='margin-left: 3px;margin-right: 3px;border:#ddd 1px solid;' class='showRow'>"+rowOption+"</select>条</span>");
$("#filePage .Pcount").css("left","16px");
}
//取数据
function getFiles(Path) {
if(isNaN(Path)){
var p = 1;
} else {
var p = Path;
Path = getCookie('open_dir_path');
}
var post = {};
post['path'] = Path;
post['p'] = p;
var file_row = $.cookie('file_row');
if(!file_row) {
file_row = '100';
}
post['row'] = file_row;
var body = '';
var totalSize = 0;
var search = '';
var search_file = $("#search_file").val();
if(search_file.length > 0){
post['search'] = search_file;
}
var search_all = '';
var all = $('#search_all').hasClass('active');
if(all){
post['all'] = 'yes';
}
var file_order = $.cookie('file_order');
if (file_order){
post['order'] = file_order.replace('|',' ');
}
var loadT = layer.load();
$.post('/files/get_dir', post, function(rdata) {
layer.close(loadT);
//构建分页
makeFilePage(file_row,rdata.page);
if(rdata.dir == null) {
rdata.dir = [];
}
for (var i = 0; i < rdata.dir.length; i++) {
var fmp = rdata.dir[i].split(";");
var cnametext =fmp[0] + fmp[5];
fmp[0] = fmp[0].replace(/'/, "\\'");
if(cnametext.length>20){
cnametext = cnametext.substring(0,20) + '...';
}
if(isChineseChar(cnametext)){
if(cnametext.length>10){
cnametext = cnametext.substring(0,10) + '...';
}
}
var timetext ='--';
if(getCookie('rank') == 'a'){
//列表展示
$("#set_list").addClass("active");
$("#set_icon").removeClass("active");
body += "<tr class='folderBoxTr' data-path='" + rdata.path + "/" + fmp[0] + "' filetype='dir'>\
<td><input type='checkbox' name='id' value='"+fmp[0]+"'></td>\
<td class='column-name'><span class='cursor' onclick=\"getFiles('" + rdata.path + "/" + fmp[0] + "')\">\
<span class='ico ico-folder'></span><a class='text' title='" + fmp[0] + fmp[5] + "'>" + cnametext + "</a></span></td>\
<td>"+toSize(fmp[1])+"</td>\
<td>"+getLocalTime(fmp[2])+"</td>\
<td>"+fmp[3]+"</td>\
<td>"+fmp[4]+"</td>\
<td class='editmenu'><span>\
<a class='btlink' href='javascript:;' onclick=\"copyFile('" + rdata.path +"/"+ fmp[0] + "')\">复制</a> | \
<a class='btlink' href='javascript:;' onclick=\"cutFile('" + rdata.path +"/"+ fmp[0]+ "')\">剪切</a> | \
<a class='btlink' href='javascript:;' onclick=\"reName(0,'" + fmp[0] + "');\">重命名</a> | \
<a class='btlink' href='javascript:;' onclick=\"setChmod(0,'" + rdata.path + "/"+fmp[0] + "');\">权限</a> | \
<a class='btlink' href='javascript:;' onclick=\"zip('" + rdata.path +"/" +fmp[0] + "');\">压缩</a> | \
<a class='btlink' href='javascript:;' onclick=\"deleteDir('" + rdata.path +"/"+ fmp[0] + "')\">删除</a></span>\
</td>\
</tr>";
} else {
//图标展示
$("#set_icon").addClass("active");
$("#set_list").removeClass("active");
body += "<div class='file folderBox menufolder' data-path='" + rdata.path + "/" + fmp[0] + "' filetype='dir' title='"+lan.files.file_name+"" + fmp[0]+"&#13;"+lan.files.file_size+""
+ toSize(fmp[1])+"&#13;"+lan.files.file_etime+""+getLocalTime(fmp[2])+"&#13;"+lan.files.file_auth+""+fmp[3]+"&#13;"+lan.files.file_own+""+fmp[4]+"'>\
<input type='checkbox' name='id' value='"+fmp[0]+"'>\
<div class='ico ico-folder' ondblclick=\"getFiles('" + rdata.path + "/" + fmp[0] + "')\"></div>\
<div class='titleBox' onclick=\"getFiles('" + rdata.path + "/" + fmp[0] + "')\">\
<span class='tname'>" + fmp[0] + "</span>\
</div>\
</div>";
}
}
for (var i = 0; i < rdata.files.length; i++) {
if(rdata.files[i] == null) continue;
var fmp = rdata.files[i].split(";");
var bodyZip = '';
var download = '';
var cnametext =fmp[0] + fmp[5];
fmp[0] = fmp[0].replace(/'/,"\\'");
if(isChineseChar(cnametext)){
if(cnametext.length>16){
cnametext = cnametext.substring(0,16) + '...';
}
} else{
if( cnametext.length > 48 ){
cnametext = cnametext.substring(0,48) + '...';
}
}
var displayCompress = 1;
if(isCompressFile(fmp[0])){
bodyZip = "<a class='btlink' href='javascript:;' onclick=\"unCompressFile('" + rdata.path +"/" +fmp[0] + "')\">解压</a> | ";
} else {
bodyZip = "<a class='btlink' href='javascript:;' onclick=\"zip('" + rdata.path +"/" +fmp[0] + "');\">压缩</a> | ";
}
if(isText(fmp[0])){
bodyZip += "<a class='btlink' href='javascript:;' onclick=\"onlineEditFile(0,'" + rdata.path +"/"+ fmp[0] + "')\">编辑</a> | ";
}
if(isImage(fmp[0])){
download = "<a class='btlink' href='javascript:;' onclick=\"getImage('" + rdata.path +"/"+ fmp[0] + "')\">预览</a> | ";
} else {
download = "<a class='btlink' href='javascript:;' onclick=\"getFileBytes('" + rdata.path +"/"+ fmp[0] + "',"+fmp[1]+")\">下载</a> | ";
}
totalSize += parseInt(fmp[1]);
if(getCookie("rank")=="a"){
body += "<tr style='cursor:pointer;' class='folderBoxTr' data-path='" + rdata.path +"/"+ fmp[0] + "' filetype='" + fmp[0] + "' ondblclick='openFilename(this)'>\
<td><input type='checkbox' name='id' value='"+fmp[0]+"'></td>\
<td class='column-name'><span class='ico ico-"+(getExtName(fmp[0]))+"'></span><a class='text' title='" + fmp[0] + fmp[5] + "'>" + cnametext + "</a></td>\
<td>" + (toSize(fmp[1])) + "</td>\
<td>" + ((fmp[2].length > 11)?fmp[2]:getLocalTime(fmp[2])) + "</td>\
<td>"+fmp[3]+"</td>\
<td>"+fmp[4]+"</td>\
<td class='editmenu'>\
<span><a class='btlink' href='javascript:;' onclick=\"copyFile('" + rdata.path +"/"+ fmp[0] + "')\">复制</a> | \
<a class='btlink' href='javascript:;' onclick=\"cutFile('" + rdata.path +"/"+ fmp[0] + "')\">剪切</a> | \
<a class='btlink' href='javascript:;' onclick=\"reName(0,'" + fmp[0] + "')\">重命名</a> | \
<a class='btlink' href=\"javascript:setChmod(0,'" + rdata.path +"/"+ fmp[0] + "');\">权限</a> | "
+ bodyZip
+ download
+ "<a class='btlink' href='javascript:;' onclick=\"deleteFile('" + rdata.path +"/"+ fmp[0] + "')\">删除</a>\
</span></td>\
</tr>";
}
else{
body += "<div class='file folderBox menufile' data-path='" + rdata.path +"/"+ fmp[0] + "' filetype='"+fmp[0]+"' title='文件名:" + fmp[0]+"&#13;大小:"
+ toSize(fmp[1])+"&#13;修改时间:"+getLocalTime(fmp[2])+"&#13;权限:"+fmp[3]+"&#13;所有者:"+fmp[4]+"' >\
<input type='checkbox' name='id' value='"+fmp[0]+"' />\
<div data-path='" + rdata.path +"/"+ fmp[0] + "' filetype='"+fmp[0]+"' class='ico ico-"+(getExtName(fmp[0]))+"' ondblclick='javascript;openFilename(this);'></div>\
<div class='titleBox'>\
<span class='tname'>" + fmp[0] + "</span>\
</div>\
</div>";
}
}
var dirInfo = '(共{1}个目录与{2}个文件,大小:'.replace('{1}',rdata.dir.length+'').replace('{2}',rdata.files.length+'')+'<font id="pathSize">'
+ (toSize(totalSize))+'<a class="btlink ml5" onClick="getPathSize()">获取</a></font>)';
$("#dir_info").html(dirInfo);
if( getCookie('rank') == 'a' ){
// console.log(post['order']);
var size_icon = '<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb">';
if (post['order'] == 'size desc'){
size_icon = '<span class="glyphicon glyphicon-triangle-bottom" style="margin-left:5px;color:#bbb">';
} else if (post['order'] == 'size asc'){
size_icon = '<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb">';
} else {
size_icon = '<span class="glyphicon glyphicon-option-horizontal" style="top:3px;margin-left:5px;color:#bbb">';
}
var mtime_icon = '<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb">';
if (post['order'] == 'mtime desc'){
mtime_icon = '<span class="glyphicon glyphicon-triangle-bottom" style="margin-left:5px;color:#bbb">';
} else if (post['order'] == 'mtime asc'){
mtime_icon = '<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb">';
} else {
mtime_icon = '<span class="glyphicon glyphicon-option-horizontal" style="top:3px;margin-left:5px;color:#bbb">';
}
var fname_icon = '<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb">';
if (post['order'] == 'fname desc'){
fname_icon = '<span class="glyphicon glyphicon-triangle-bottom" style="margin-left:5px;color:#bbb">';
} else if (post['order'] == 'fname asc'){
fname_icon = '<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb">';
} else {
fname_icon = '<span class="glyphicon glyphicon-option-horizontal" style="top:3px;margin-left:5px;color:#bbb">';
}
var tablehtml = '<table width="100%" border="0" cellpadding="0" cellspacing="0" class="table table-hover">\
<thead>\
<tr>\
<th width="30"><input type="checkbox" id="setBox" placeholder=""></th>\
<th onclick="listFileOrder(\'fname\',this)" style="cursor: pointer;">文件名'+fname_icon+'</th>\
<th onclick="listFileOrder(\'size\',this)" style="cursor: pointer;">大小'+size_icon+'</th>\
<th onclick="listFileOrder(\'mtime\',this)" style="cursor: pointer;">修改时间'+mtime_icon+'</th>\
<th>权限</th>\
<th>所有者</th>\
<th style="text-align: right;" width="330">操作</th>\
</tr>\
</thead>\
<tbody id="filesBody" class="list-list">'+body+'</tbody>\
</table>';
$("#fileCon").removeClass("fileList").html(tablehtml);
$("#tipTools").width($("#fileCon").width());
} else {
$("#fileCon").addClass("fileList").html(body);
$("#tipTools").width($("#fileCon").width());
}
$("#DirPathPlace input").val(rdata.path);
var BarTools = '<div class="btn-group">\
<button class="btn btn-default btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\
新建<span class="caret"></span>\
</button>\
<ul class="dropdown-menu">\
<li><a href="javascript:createFile(0,\'' + Path + '\');">新建空白文件</a></li>\
<li><a href="javascript:createDir(0,\'' + Path + '\');">新建目录</a></li>\
</ul>\
</div>';
if (rdata.path != '/') {
BarTools += ' <button onclick="javascript:backDir();" class="btn btn-default btn-sm glyphicon glyphicon-arrow-left" title="返回上一级"></button>';
}
setCookie('open_dir_path',rdata.path);
BarTools += ' <button onclick="javascript:getFiles(\'' + rdata.path + '\');" class="btn btn-default btn-sm glyphicon glyphicon-refresh" title="刷新"></button>\
<button onclick="webShell()" title="终端" type="button" class="btn btn-default btn-sm"><em class="ico-cmd"></em></button>';
var copyName = getCookie('copyFileName');
var cutName = getCookie('cutFileName');
var isPaste = (copyName == 'null') ? cutName : copyName;
// console.log('isPaste:',isPaste);
//---
if (isPaste != 'null' && isPaste != undefined) {
BarTools += ' <button onclick="javascript:pasteFile(\'' + (getFileName(isPaste)) + '\');" class="btn btn-Warning btn-sm">粘贴</button>';
}
$("#Batch").html('');
var batchTools = '';
var isBatch = getCookie('BatchSelected');
if (isBatch == 1 || isBatch == '1') {
batchTools += ' <button onclick="javascript:batchPaste();" class="btn btn-default btn-sm">粘贴所有</button>';
}
$("#Batch").html(batchTools);
$("#setBox").prop("checked", false);
$("#BarTools").html(BarTools);
$("input[name=id]").click(function(){
if($(this).prop("checked")) {
$(this).prop("checked", true);
$(this).parents("tr").addClass("ui-selected");
}
else{
$(this).prop("checked", false);
$(this).parents("tr").removeClass("ui-selected");
}
showSeclect();
});
$("#setBox").click(function() {
if ($(this).prop("checked")) {
$("input[name=id]").prop("checked", true);
$("#filesBody > tr").addClass("ui-selected");
} else {
$("input[name=id]").prop("checked", false);
$("#filesBody > tr").removeClass("ui-selected");
}
showSeclect();
});
//阻止冒泡
$("#filesBody .btlink").click(function(e){
e.stopPropagation();
});
$("input[name=id]").dblclick(function(e){
e.stopPropagation();
});
//禁用右键
$("#fileCon").bind("contextmenu",function(e){
return false;
});
bindselect();
// //绑定右键
$("#fileCon").mousedown(function(e){
var count = totalFile();
if(e.which == 3) {
if(count>1){
rightMenuClickAll(e);
} else {
return;
}
}
});
$(".folderBox,.folderBoxTr").mousedown(function(e){
var box = $(this);
var option = rightMenuClick(box.attr("filetype"),box.attr("data-path"),box.find("input").val());
box.contextify(option);
});
//每页行数
$(".showRow").change(function(){
setCookie('file_row',$(this).val());
getFiles(p);
});
pathPlaceBtn(rdata.path);
},'json');
// setTimeout(function(){getCookie('open_dir_path');},200);
}
//统计选择数量
function totalFile(){
var el = $("input[name='id']");
var len = el.length;
var count = 0;
for(var i=0;i<len;i++){
if(el[i].checked == true){
count++;
}
}
return count;
}
//绑定操作
function bindselect(){
$("#filesBody,#fileCon").selectable({
autoRefresh: false,
filter:"tr,.folderBox",
cancel: "a,span,input,.ico-folder",
selecting:function(e){
$(".ui-selecting").find("input").prop("checked", true);
showSeclect();
},
selected:function(e){
$(".ui-selectee").find("input").prop("checked", false);
$(".ui-selected", this).each(function() {
$(this).find("input").prop("checked", true);
showSeclect();
});
},
unselecting:function(e){
$(".ui-selectee").find("input").prop("checked", false);
$(".ui-selecting").find("input").prop("checked", true);
showSeclect();
$("#rmenu").hide();
}
});
$("#filesBody,#fileCon").selectable("refresh");
//重绑图标点击事件
$(".ico-folder").click(function(){
$(this).parent().addClass("ui-selected").siblings().removeClass("ui-selected");
$(".ui-selectee").find("input").prop("checked", false);
$(this).prev("input").prop("checked", true);
showSeclect();
})
}
//选择操作
function showSeclect(){
var count = totalFile();
var batchTools = '';
if(count > 1){
batchTools = '<button onclick="javascript:batch(1);" class="btn btn-default btn-sm">复制</button>\
<button onclick="javascript:batch(2);" class="btn btn-default btn-sm">剪切</button>\
<button onclick="javascript:batch(3);" class="btn btn-default btn-sm">权限</button>\
<button onclick="javascript:batch(5);" class="btn btn-default btn-sm">压缩</button>\
<button onclick="javascript:batch(4);" class="btn btn-default btn-sm">删除</button>';
}else{
//setCookie('BatchSelected', null);
}
$("#Batch").html(batchTools);
}
//滚动条事件
$(window).scroll(function () {
if($(window).scrollTop() > 16){
$("#tipTools").css({"position":"fixed","top":"0","left":"195px","box-shadow":"0 1px 10px 3px #ccc"});
}else{
$("#tipTools").css({"position":"absolute","top":"0","left":"0","box-shadow":"none"});
}
});
$("#tipTools").width($(".file-box").width());
$("#PathPlaceBtn").width($(".file-box").width()-700);
$("#DirPathPlace input").width($(".file-box").width()-700);
if($(window).width()<1160){
$("#PathPlaceBtn").width(290);
}
window.onresize = function(){
$("#tipTools").width($(".file-box").width()-30);
$("#PathPlaceBtn").width($(".file-box").width()-700);
$("#DirPathPlace input").width($(".file-box").width()-700);
if($(window).width()<1160){
$("#PathPlaceBtn,#DirPathPlace input").width(290);
}
pathLeft();
isDiskWidth();
}
//批量操作
function batch(type,access){
var path = $("#DirPathPlace input").val();
var el = document.getElementsByTagName('input');
var len = el.length;
var data='path='+path+'&type='+type;
var name = 'data';
var datas = [];
var oldType = getCookie('BatchPaste');
for(var i=0;i<len;i++){
if(el[i].checked == true && el[i].value != 'on'){
datas.push(el[i].value)
}
}
data += "&data=" + encodeURIComponent(JSON.stringify(datas))
if(type == 3 && access == undefined){
setChmod(0,lan.files.all);
return;
}
if(type < 3) setCookie('BatchSelected', '1');
setCookie('BatchPaste',type);
if(access == 1){
var access = $("#access").val();
var chown = $("#chown").val();
data += '&access='+access+'&user='+chown;
layer.closeAll();
}
if(type == 4){
allDeleteFileSub(data,path);
setCookie('BatchPaste',oldType);
return;
}
if(type == 5){
var names = '';
for(var i=0;i<len;i++){
if(el[i].checked == true && el[i].value != 'on'){
names += path + "/" + el[i].value + ',';
}
}
// console.log(names);
zip(names);
return;
}
myloadT = layer.msg("<div class='myspeed'>正在处理,请稍候...</div>",{icon:16,time:0,shade: [0.3, '#000']});
setTimeout(function(){getSpeed('.myspeed');},1000);
// console.log(data);
$.post('/files/set_batch_data',data,function(rdata){
layer.close(myloadT);
getFiles(path);
layer.msg(rdata.msg,{icon:1});
},'json');
}
//批量粘贴
function batchPaste(){
var path = $("#DirPathPlace input").val();
var type = getCookie('BatchPaste');
var data = 'type='+type+'&path='+path;
$.post('/files/check_exists_files',{dfile:path},function(rdata){
var result = rdata['data'];
if(result.length > 0){
var tbody = '';
for(var i=0;i<result.length;i++){
tbody += '<tr><td>'+result[i].filename+'</td><td>'+toSize(result[i].size)+'</td><td>'+getLocalTime(result[i].mtime)+'</td></tr>';
}
var mbody = '<div class="divtable"><table class="table table-hover" width="100%" border="0" cellpadding="0" cellspacing="0"><thead><th>文件名</th><th>大小</th><th>最后修改时间</th></thead>\
<tbody>'+tbody+'</tbody>\
</table></div>';
safeMessage('即将覆盖以下文件',mbody,function(){
batchPasteTo(data,path);
});
$(".layui-layer-page").css("width","500px");
}else{
batchPasteTo(data,path);
}
},'json');
}
function batchPasteTo(data,path){
myloadT = layer.msg("<div class='myspeed'>正在处理,请稍候...</div>",{icon:16,time:0,shade: [0.3, '#000']});
setTimeout(function(){getSpeed('.myspeed');},1000);
$.post('/files/batch_paste',data,function(rdata){
layer.close(myloadT);
setCookie('BatchSelected', null);
getFiles(path);
layer.msg(rdata.msg,{icon:1});
},'json');
}
function getSuffixName(fileName){
var extArr = fileName.split(".");
var exts = ['folder-unempty','sql','c','cpp','cs','flv','css','js',
'htm','html','java','log','mht','url','xml','ai','bmp','cdr','gif','ico',
'jpeg','jpg','JPG','png','psd','webp','ape','avi','mkv','mov','mp3','mp4',
'mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','rtf','docx','fdf','potm',
'pptx','txt','xlsb','xlsx','7z','cab','iso','rar','zip','gz','bt','file','apk','bookfolder',
'folder','folder-empty','fromchromefolder','documentfolder','fromphonefolder',
'mix','musicfolder','picturefolder','videofolder','sefolder','access','mdb','accdb',
'fla','doc','docm','dotx','dotm','dot','pdf',
'ppt','pptm','pot','xls','csv','xlsm','scss','svg','pl','py','php','md','json','sh','conf'];
var extLastName = extArr[extArr.length - 1];
for(var i=0; i<exts.length; i++){
if(exts[i]==extLastName){
return exts[i];
}
}
return 'file';
}
//取扩展名
function getExtName(fileName){
var extArr = fileName.split(".");
var exts = ['folder','folder-unempty','sql','c','cpp','cs','flv','css','js',
'htm','html','java','log','mht','php','url','xml','ai','bmp','cdr','gif','ico',
'jpeg','jpg','JPG','png','psd','webp','ape','avi','flv','mkv','mov','mp3','mp4',
'mpeg','mpg','rm','rmvb','swf','wav','webm','wma','wmv','rtf','docx','fdf','potm',
'pptx','txt','xlsb','xlsx','7z','cab','iso','rar','zip','gz','bt','file','apk','bookfolder',
'folder-empty','fromchromefolder','documentfolder','fromphonefolder',
'mix','musicfolder','picturefolder','videofolder','sefolder','access','mdb','accdb',
'fla','flv','doc','docm','dotx','dotm','dot','pdf','ppt','pptm','pot','xls','csv','xlsm'];
var extLastName = extArr[extArr.length - 1];
for(var i=0; i<exts.length; i++){
if(exts[i]==extLastName){
return exts[i];
}
}
return 'file';
}
//操作显示
function ShowEditMenu(){
$("#filesBody > tr").hover(function(){
$(this).addClass("hover");
},function(){
$(this).removeClass("hover");
}).click(function(){
$(this).addClass("on").siblings().removeClass("on");
});
}
//取磁盘
function getDisk() {
var LBody = '';
$.get('/system/disk_info', function(rdata) {
var rdata = rdata.data;
for (var i = 0; i < rdata.length; i++) {
LBody += "<span onclick=\"getFiles('" + rdata[i].path + "')\">\
<span class='glyphicon glyphicon-hdd'></span>&nbsp;" + (rdata[i].path=='/'?lan.files.path_root:rdata[i].path) + "(" + rdata[i].size[2] + ")</span>";
}
var trash = '<span id="recycle_bin" onclick="recycleBin(\'open\')" title="回收站" style="position: absolute; border-color: #ccc; right: 77px;">\
<span class="glyphicon glyphicon-trash"></span>&nbsp;回收站</span>';
$("#comlist").html(LBody+trash);
isDiskWidth();
},'json');
}
//返回上一级
function backDir() {
var str = $("#DirPathPlace input").val().replace('//','/');
if(str.substr(str.length-1,1) == '/'){
str = str.substr(0,str.length-1);
}
var Path = str.split("/");
var back = '/';
if (Path.length > 2) {
var count = Path.length - 1;
for (var i = 0; i < count; i++) {
back += Path[i] + '/';
}
if(back.substr(back.length-1,1) == '/'){
back = back.substr(0,back.length-1);
}
getFiles(back);
} else {
back += Path[0];
getFiles(back);
}
setTimeout('pathPlaceBtn(getCookie("open_dir_path"));',200);
}
//新建文件
function createFile(type, path) {
if (type == 1) {
var fileName = $("#newFileName").val();
layer.msg(lan.public.the, {
icon: 16,
time: 10000
});
$.post('/files/create_file', 'path=' + encodeURIComponent(path + '/' + fileName), function(rdata) {
layer.closeAll();
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2
});
if(rdata.status){
getFiles($("#DirPathPlace input").val());
onlineEditFile(0,path + '/' + fileName);
}
},'json');
return;
}
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: '320px',
title: '新建空白文件',
content: '<div class="bt-form pd20 pb70">\
<div class="line">\
<input type="text" class="bt-input-text" name="Name" id="newFileName" value="" placeholder="文件名" style="width:100%" />\
</div>\
<div class="bt-form-submit-btn">\
<button type="button" class="btn btn-danger btn-sm" onclick="layer.closeAll()">关闭</button>\
<button id="createFileBtn" type="button" class="btn btn-success btn-sm" onclick="createFile(1,\'' + path + '\')">新建</button>\
</div>\
</div>',
success:function(){
$("#newFileName").focus().keyup(function(e){
if(e.keyCode == 13) $("#createFileBtn").click();
});
}
});
}
//新建目录
function createDir(type, path) {
if (type == 1) {
var dirName = $("#newDirName").val();
layer.msg('正在处理,请稍候...', {
icon: 16,
time: 10000
});
$.post('/files/create_dir', 'path=' + encodeURIComponent(path + '/' + dirName), function(rdata) {
layer.closeAll();
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2
});
getFiles($("#DirPathPlace input").val());
},'json');
return;
}
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: '320px',
title: '新建目录',
content: '<div class="bt-form pd20 pb70">\
<div class="line">\
<input type="text" class="bt-input-text" name="Name" id="newDirName" value="" placeholder="目录名称" style="width:100%" />\
</div>\
<div class="bt-form-submit-btn">\
<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">关闭</button>\
<button type="button" id="createDirBtn" class="btn btn-success btn-sm btn-title" onclick="createDir(1,\'' + path + '\')">新建</button>\
</div>\
</div>',
success:function(){
$("#newDirName").focus().keyup(function(e){
if(e.keyCode == 13) {
$("#createDirBtn").click();
}
});
}
});
}
//删除文件
function deleteFile(fileName){
layer.confirm(lan.get('recycle_bin_confirm',[fileName]),{title:'删除文件',closeBtn:2,icon:3},function(){
layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files/delete', 'path=' + encodeURIComponent(fileName), function(rdata) {
layer.closeAll();
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2,
});
getFiles($("#DirPathPlace input").val());
},'json');
});
}
//删除目录
function deleteDir(dirName){
layer.confirm(lan.get('recycle_bin_confirm_dir',[dirName]),{title:'删除目录',closeBtn:2,icon:3},function(){
layer.msg('正在处理,请稍候...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files/delete_dir', 'path=' + encodeURIComponent(dirName), function(rdata) {
layer.closeAll();
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2
});
getFiles($("#DirPathPlace input").val());
},'json');
});
}
//批量删除文件
function allDeleteFileSub(data,path){
layer.confirm('您确实要把这些文件放入回收站吗?',{title:'批量删除文件',closeBtn:2,icon:3},function(){
layer.msg("<div class='myspeed'>正在处理,请稍候...</div>",{icon:16,time:0,shade: [0.3, '#000']});
setTimeout(function(){getSpeed('.myspeed');},1000);
$.post('/files/set_batch_data',data,function(rdata){
layer.closeAll();
getFiles(path);
layer.msg(rdata.msg,{icon:1});
},'json');
});
}
//重载文件列表
function reloadFiles(){
setInterval(function(){
var path = $("#DirPathPlace input").val();
getFiles(path);
},3000);
}
//下载文件
function downloadFile(action){
if(action == 1){
var fUrl = $("#mUrl").val();
fUrl = encodeURIComponent(fUrl);
var fpath = $("#dpath").val();
fname = encodeURIComponent($("#dfilename").val());
if (fUrl == "" ){
layer.msg("URL地址不能为空!",{icon:2});
return;
}
layer.closeAll();
layer.msg(lan.files.down_task,{time:0,icon:16,shade: [0.3, '#000']});
$.post('/files/download_file','path='+fpath+'&url='+fUrl+'&filename='+fname,function(rdata){
layer.closeAll();
getFiles(fpath);
getTaskCount();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},'json');
return;
}
var path = $("#DirPathPlace input").val();
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: '500px',
btn:["确定","关闭"],
title: lan.files.down_title,
content: '<form class="bt-form pd20">\
<div class="line">\
<span class="tname">URL地址:</span>\
<input type="text" class="bt-input-text" name="url" id="mUrl" placeholder="URL地址" style="width:330px" />\
</div>\
<div class="line">\
<span class="tname ">下载到:</span>\
<input type="text" class="bt-input-text" name="path" id="dpath" value="'+path+'" placeholder="下载到" style="width:330px" />\
</div>\
<div class="line">\
<span class="tname">文件名:</span>\
<input type="text" class="bt-input-text" name="filename" id="dfilename" value="" placeholder="文件名" style="width:330px" />\
</div>\
</form>',
success:function(){
$("#mUrl").keyup(function(){
durl = $(this).val();
tmp = durl.split('/');
$("#dfilename").val(tmp[tmp.length-1]);
});
},
yes:function(){
downloadFile(1);
}
});
}
//重命名
function reName(type, fileName) {
if (type == 1) {
var path = $("#DirPathPlace input").val();
var newFileName = encodeURIComponent(path + '/' + $("#newFileName").val());
var oldFileName = encodeURIComponent(path + '/' + fileName);
layer.msg(lan.public.the, {
icon: 16,
time: 10000
});
$.post('/files/mv_file', 'sfile=' + oldFileName + '&dfile=' + newFileName, function(rdata) {
layer.closeAll();
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2
});
getFiles(path);
},'json');
return;
}
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: '320px',
title: '重命名',
btn:["确定","取消"],
content: '<div class="bt-form pd20">\
<div class="line">\
<input type="text" class="bt-input-text" name="Name" id="newFileName" value="' + fileName + '" placeholder="文件名" style="width:100%" />\
</div>\
</div>',
success:function(){
$("#newFileName").focus().keyup(function(e){
if(e.keyCode == 13) $(".layui-layer-btn0").click();
});
},
yes:function(){
reName(1,fileName.replace(/'/,"\\'"));
}
});
}
//剪切
function cutFile(fileName) {
var path = $("#DirPathPlace input").val();
setCookie('cutFileName', fileName);
setCookie('copyFileName', null);
layer.msg('已剪切', {
icon: 1,
time: 1000,
});
setTimeout(function(){
getFiles(path);
},1000);
}
//复制
function copyFile(fileName) {
var path = $("#DirPathPlace input").val();
setCookie('copyFileName', fileName);
setCookie('cutFileName', null);
layer.msg('已复制', {
icon: 1,
time: 1000,
});
setTimeout(function(){
getFiles(path);
},1000);
}
//粘贴
function pasteFile(fileName) {
var path = $("#DirPathPlace input").val();
var copyName = getCookie('copyFileName');
var cutName = getCookie('cutFileName');
var filename = copyName;
if(cutName != 'null' && cutName != undefined) filename=cutName;
filename = filename.split('/').pop();
$.post('/files/check_exists_files',{dfile:path,filename:filename},function(result){
if(result.length > 0){
var tbody = '';
for(var i=0;i<result.length;i++){
tbody += '<tr><td>'+result[i].filename+'</td><td>'+toSize(result[i].size)+'</td><td>'+getLocalTime(result[i].mtime)+'</td></tr>';
}
var mbody = '<div class="divtable"><table class="table table-hover" width="100%" border="0" cellpadding="0" cellspacing="0"><thead><th>文件名</th><th>大小</th><th>最后修改时间</th></thead>\
<tbody>'+tbody+'</tbody>\
</table></div>';
safeMessage('即将覆盖以下文件',mbody,function(){
pasteTo(path,copyName,cutName,fileName);
});
} else {
pasteTo(path,copyName,cutName,fileName);
}
},'json');
}
function pasteTo(path,copyName,cutName,fileName){
if (copyName != 'null' && copyName != undefined) {
layer.msg(lan.files.copy_the, {
icon: 16,
time: 0,shade: [0.3, '#000']
});
//同目录下
if (copyName == path +'/'+ fileName){
fileName = '__copy__'+ fileName;
}
$.post('/files/copy_file', 'sfile=' + encodeURIComponent(copyName) + '&dfile=' + encodeURIComponent(path +'/'+ fileName), function(rdata) {
layer.closeAll();
layer.msg(rdata.msg, {
icon: rdata.status ? 1 : 2
});
getFiles(path);
},'json');
setCookie('copyFileName', null);
setCookie('cutFileName', null);
return;
}
if (cutName != 'null' && cutName != undefined) {
layer.msg(lan.files.mv_the, {
icon: 16,
time: 0,shade: [0.3, '#000']
});
$.post('/files/mv_file', 'sfile=' + encodeURIComponent(cutName) + '&dfile=' + encodeURIComponent(path + '/'+fileName), function(rdata) {
layer.closeAll();
layer.msg(rdata.msg, {icon: rdata.status ? 1 : 2});
getFiles(path);
},'json');
setCookie('copyFileName', null);
setCookie('cutFileName', null);
}
}
//压缩目录
function zip(dirName,submits) {
if(submits != undefined){
var sfile = $("#sfile").val();
var path = $("#path").val();
var ztype = $('select[name="z_type"]').val();
var dfile = $("#dfile").val();
layer.msg('正在压缩,请稍候...', {icon: 16,time: 0,shade: [0.3, '#000']});
$.post('/files/zip', 'sfile=' + sfile + '&dfile=' + dfile + '&type='+ztype+'&path='+encodeURIComponent(path), function(rdata) {
layer.closeAll();
if(rdata == null || rdata == undefined){
layer.msg('服务器正在后台压缩文件,请稍候刷新文件列表查看进度!',{icon:1});
getFiles($("#DirPathPlace input").val());
reloadFiles();
return;
}
showMsg(rdata.msg, function(){
if(rdata.status) {
getFiles($("#DirPathPlace input").val());
}
},{icon: rdata.status ? 1 : 2});
},'json');
return
}
var randStr = getRandomString(6);
if(dirName.indexOf(',') != -1){
dirNameArrs = dirName.split(',');
dirNameArr = dirNameArrs[0].split('/');
fileName = dirNameArr[dirNameArr.length-1];
sfile = dirName;
pathName = dirNameArrs[0].replace('/'+fileName,'');
} else {
dirNameArr = dirName.split('/');
fileName = dirNameArr[dirNameArr.length-1];
sfile = fileName;
pathName = dirName.replace('/'+fileName,'');
}
var defaultDfile = pathName + '/' + fileName+'_'+randStr+'.tar.gz';
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: '650px',
title: '压缩文件['+fileName+']',
btn: ['确定','取消'],
content: '<div class="bt-form pd20">'
+ '<div class="line noborder">'
+ '<span class="tname">压缩类型</span>\
<div class="info-r">\
<select class="bt-input-text mr5" name="z_type" style="width:458px;">\
<option value="tar_gz" selected>tar.gz (推荐)</option>\
<option value="zip">zip (通用格式)</option>\
<option value="rar">rar (WinRAR对中文兼容较好)</option>\
<option value="7z">7z (压缩率极高的压缩格式)</option>\
<option value="xz">xz (压缩率极高的压缩格式)</option>\
<option value="bz2">bz2 (压缩率极高的压缩格式)</option>\
</select>\
</div>\
</div>'
//
+ '<div class="line noborder">'
+ '<input type="text" id="sfile" value="' + sfile + '" style="display:none" />'
+ '<input type="text" id="path" value="' + pathName + '" style="display:none" />'
+ '<span class="tname">压缩路径</span>\
<input type="text" class="bt-input-text" id="dfile" value="' + defaultDfile + '" placeholder="压缩到" style="width: 75%; display: inline-block; margin: 0px 10px 0px 0px;" />\
<span id="change_dir" class="glyphicon glyphicon-folder-open cursor"></span>'
+ '</div>'
+'</div>',
success:function(){
$('#change_dir').click(function(){
changePathCallback('dfile', function(val){
var z_type = $('select[name="z_type"]').val();
$('#dfile').val(val+'/'+fileName+'_'+randStr+'.'+z_type.replace('_','.'));
$('#path').val(val);
});
});
$('select[name="z_type"]').change(function(){
var z_type = $(this).val();
var path = $('#path').val();
var newPathName = path+'/'+fileName+'_'+randStr;
if (z_type == 'tar_gz') {
$("#dfile").val(newPathName + '.tar.gz');
} else if (z_type == 'zip') {
$("#dfile").val(newPathName + '.zip');
} else if (z_type == 'rar') {
$("#dfile").val(newPathName + '.rar');
} else if (z_type == 'gz') {
$("#dfile").val(newPathName + '.gz');
} else if (z_type == '7z') {
$("#dfile").val(newPathName + '.7z');
} else if (z_type == 'xz') {
$("#dfile").val(newPathName + '.xz');
} else if (z_type == 'bz2') {
$("#dfile").val(newPathName + '.tar.bz2');
}
});
$("#dfile").change(function(){
var dfile = $(this).val();
$(this).val(dfile.replace(/\/\//g,'/'));
});
},
btn1: function(index){
zip(dirName,1);
return false;
}
});
}
//解压目录
function unZip(fileName, type) {
var path = $("#DirPathPlace input").val();
if(type.length ==3){
var sfile = encodeURIComponent($("#sfile").val());
var dfile = encodeURIComponent($("#dfile").val());
var coding = $("select[name='coding']").val();
var tip = layer.msg(lan.files.unzip_the, {icon: 16,time: 0,shade: [0.3, '#000']});
$.post('/files/unzip', 'sfile=' + sfile + '&dfile=' + dfile +'&type=' + type + '&path='+encodeURIComponent(path), function(rdata) {
layer.close(tip);
showMsg(rdata.msg, function(){
getFiles(path);
},{icon: rdata.status ? 1 : 2},2000);
},'json');
return;
}
type = (type == 1) ? 'tar':'zip';
var umpass = '';
if(type == 'zip'){
umpass = '<div class="line">\
<span class="tname">'+lan.files.zip_pass_title+'</span>\
<input type="text" class="bt-input-text" id="unpass" value="" placeholder="'+lan.files.zip_pass_msg+'" style="width:330px" />\
</div>';
}
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: '490px',
title: '解压文件',
content: '<div class="bt-form pd20 pb70">'
+'<div class="line unzipdiv">'
+'<span class="tname">'+lan.files.unzip_name+'</span><input type="text" class="bt-input-text" id="sfile" value="' +fileName + '" placeholder="'+lan.files.unzip_name_title+'" style="width:330px" /></div>'
+'<div class="line"><span class="tname">'+lan.files.unzip_to+'</span><input type="text" class="bt-input-text" id="dfile" value="'+path + '" placeholder="'+lan.files.unzip_to+'" style="width:330px" /></div>'
+ umpass +'<div class="line"><span class="tname">'+lan.files.unzip_coding+'</span><select class="bt-input-text" name="coding">'
+'<option value="UTF-8">UTF-8</option>'
+'<option value="gb18030">GBK</option>'
+'</select>'
+'</div>'
+'<div class="bt-form-submit-btn">'
+'<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">'+lan.public.close+'</button>'
+'<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title" onclick="unZip(\'' + fileName + '\',\''+type+'\')">'+lan.files.file_menu_unzip+'</button>'
+'</div>'
+'</div>'
});
}
function isCompressFile(fileName){
var ext = fileName.split('.');
var extName = ext[ext.length-1].toLowerCase();
var support = ['zip','gz','tgz','rar','7z','xz','bz2'];
for (x in support) {
if (support[x]==extName){
return true;
}
}
return false;
}
function unCompressFile(fileName, type = 0){
// 解压文件
var path = $("#DirPathPlace input").val();
if(type == 3){
var sfile = encodeURIComponent($("#sfile").val());
var dfile = encodeURIComponent($("#dfile").val());
var coding = $("select[name='coding']").val();
var tip = layer.msg('正在解压,请稍候...', {icon: 16,time: 0,shade: [0.3, '#000']});
$.post('/files/uncompress', 'sfile=' + sfile + '&dfile=' + dfile +'&type=' + type + '&path='+encodeURIComponent(path), function(rdata) {
layer.close(tip);
showMsg(rdata.msg, function(){
layer.closeAll();
getFiles(path);
},{icon: rdata.status ? 1 : 2},2000);
},'json');
return;
}
// var umpass = '<div class="line">\
// <span class="tname">解压密码</span>\
// <input type="text" class="bt-input-text" id="unpass" value="" placeholder="不需要请留空" style="width:330px" />\
// </div>';
layer.open({
type: 1,
shift: 5,
closeBtn: 1,
area: '490px',
title: '解压文件',
content: '<div class="bt-form pd20 pb70">\
<div class="line unzipdiv">\
<span class="tname">文件名</span>\
<input type="text" class="bt-input-text" id="sfile" value="' +fileName + '" placeholder="压缩文件名" style="width:330px" />\
</div>\
<div class="line">\
<span class="tname">解压到</span>\
<input type="text" class="bt-input-text" id="dfile" value="'+path + '" placeholder="解压到" style="width:330px" />\
</div>\
<div class="line">\
<span class="tname">编码</span>\
<select class="bt-input-text" name="coding">\
<option value="UTF-8">UTF-8</option>\
<option value="gb18030">GBK</option>\
</select>\
</div>\
<div class="bt-form-submit-btn">\
<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">关闭</button>\
<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title" onclick="unCompressFile(\'' + fileName + '\',\'3\')">解压</button>\
</div>\
</div>'
});
}
//是否压缩文件
function isZip(fileName){
var ext = fileName.split('.');
var extName = ext[ext.length-1].toLowerCase();
if( extName == 'zip') return 0;
if( extName == 'gz' || extName == 'tgz') return 1;
return -1;
}
//是否文本文件
function isText(fileName){
var exts = ['rar','zip','tar.gz','gz','iso','xsl','doc','xdoc','jpeg',
'jpg','png','gif','bmp','tiff','exe','so','7z','bz'];
return isExts(fileName,exts)?false:true;
}
//是否图片文件
function isImage(fileName){
var exts = ['jpg','jpeg','png','bmp','gif','tiff','ico'];
return isExts(fileName,exts);
}
//是否为指定扩展名
function isExts(fileName,exts){
var ext = fileName.split('.');
if(ext.length < 2) return false;
var extName = ext[ext.length-1].toLowerCase();
for(var i=0;i<exts.length;i++){
if(extName == exts[i]) return true;
}
return false;
}
//图片预览
function getImage(fileName){
var imgUrl = '/files/download?filename='+fileName;
layer.open({
type:1,
offset: '150px',
closeBtn: 1,
title:"图片预览",
area: '400px',
shadeClose: true,
content: '<div class="showpicdiv"><img style="max-width:400px;" src="'+imgUrl+'"></div>'
});
}
//获取文件数据
function getFileBytes(fileName, fileSize){
window.open('/files/download?filename='+encodeURIComponent(fileName));
}
//上传文件
function uploadFiles(){
var path = $("#DirPathPlace input").val()+"/";
layer.open({
type:1,
closeBtn: 1,
title:lan.files.up_title,
area: ['500px','300px'],
shadeClose:false,
content:'<div class="fileUploadDiv">\
<input type="hidden" id="input-val" value="'+path+'" />\
<input type="file" id="file_input" multiple="true" autocomplete="off" />\
<button type="button" id="opt" autocomplete="off">添加文件</button>\
<button type="button" id="up" autocomplete="off" >开始上传</button>\
<span id="totalProgress" style="position: absolute;top: 7px;right: 147px;"></span>\
<span style="float:right;margin-top: 9px;">\
<font>文件编码:</font>\
<select id="fileCodeing" >\
<option value="byte">二进制</option>\
<option value="utf-8">UTF-8</option>\
<option value="gb18030">GB2312</option>\
</select>\
</span>\
<button type="button" id="filesClose" autocomplete="off" onClick="layer.closeAll()" >关闭</button>\
<ul id="up_box"></ul>\
</div>'
});
uploadStart();
}
//设置权限
function setChmod(action,fileName){
if(action == 1){
var chmod = $("#access").val();
var chown = $("#chown").val();
var data = 'filename='+ encodeURIComponent(fileName)+'&user='+chown+'&access='+chmod;
var loadT = layer.msg('正在设置...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/files/set_file_access',data,function(rdata){
layer.close(loadT);
if(rdata.status) layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
var path = $("#DirPathPlace input").val();
getFiles(path)
},'json');
return;
}
var toExec = fileName == lan.files.all?'batch(3,1)':'setChmod(1,\''+fileName+'\')';
$.post('/files/file_access','filename='+encodeURIComponent(fileName),function(rdata){
// console.log(rdata);
var sys_users = rdata.sys_users;
var own_html = '';
var is_find_own_option = false;
for (var i = 0; i < sys_users.length; i++) {
var own = sys_users[i];
if (rdata.chown==own){
is_find_own_option = true;
own_html += '<option value="'+own+'" selected="selected">'+own+'</option>';
} else {
own_html += '<option value="'+own+'">'+own+'</option>';
}
}
if (!is_find_own_option){
own_html += '<option value="'+rdata.chown+'" selected="selected">'+rdata.chown+'</option>';
}
layer.open({
type:1,
closeBtn: 1,
title: '设置权限['+fileName+']',
area: '400px',
shadeClose:false,
content:'<div class="setchmod bt-form ptb15 pb70">\
<fieldset>\
<legend>所有者</legend>\
<p><input type="checkbox" id="owner_r" />读取</p>\
<p><input type="checkbox" id="owner_w" />写入</p>\
<p><input type="checkbox" id="owner_x" />执行</p>\
</fieldset>\
<fieldset>\
<legend>用户组</legend>\
<p><input type="checkbox" id="group_r" />读取</p>\
<p><input type="checkbox" id="group_w" />写入</p>\
<p><input type="checkbox" id="group_x" />执行</p>\
</fieldset>\
<fieldset>\
<legend>公共</legend>\
<p><input type="checkbox" id="public_r" />读取</p>\
<p><input type="checkbox" id="public_w" />写入</p>\
<p><input type="checkbox" id="public_x" />执行</p>\
</fieldset>\
<div class="setchmodnum"><input class="bt-input-text" type="text" id="access" maxlength="3" value="'+rdata.chmod+'">权限,\
<span>所有者\
<select id="chown" class="bt-input-text" style="width:100px;">\
'+own_html+'\
</select></span></div>\
<div class="bt-form-submit-btn">\
<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">关闭</button>\
<button type="button" class="btn btn-success btn-sm btn-title" onclick="'+toExec+'" >确定</button>\
</div>\
</div>'
});
onAccess();
$("#access").keyup(function(){
onAccess();
});
$("input[type=checkbox]").change(function(){
var idName = ['owner','group','public'];
var onacc = '';
for(var n=0;n<idName.length;n++){
var access = 0;
access += $("#"+idName[n]+"_x").prop('checked')?1:0;
access += $("#"+idName[n]+"_w").prop('checked')?2:0;
access += $("#"+idName[n]+"_r").prop('checked')?4:0;
onacc += access;
}
$("#access").val(onacc);
});
},'json');
}
function onAccess(){
var access = $("#access").val();
var idName = ['owner','group','public'];
for(var n=0;n<idName.length;n++){
$("#"+idName[n]+"_x").prop('checked',false);
$("#"+idName[n]+"_w").prop('checked',false);
$("#"+idName[n]+"_r").prop('checked',false);
}
for(var i=0;i<access.length;i++){
var onacc = access.substr(i,1);
if(i > idName.length) continue;
if(onacc > 7) $("#access").val(access.substr(0,access.length-1));
switch(onacc){
case '1':
$("#"+idName[i]+"_x").prop('checked',true);
break;
case '2':
$("#"+idName[i]+"_w").prop('checked',true);
break;
case '3':
$("#"+idName[i]+"_x").prop('checked',true);
$("#"+idName[i]+"_w").prop('checked',true);
break;
case '4':
$("#"+idName[i]+"_r").prop('checked',true);
break;
case '5':
$("#"+idName[i]+"_r").prop('checked',true);
$("#"+idName[i]+"_x").prop('checked',true);
break;
case '6':
$("#"+idName[i]+"_r").prop('checked',true);
$("#"+idName[i]+"_w").prop('checked',true);
break;
case '7':
$("#"+idName[i]+"_r").prop('checked',true);
$("#"+idName[i]+"_w").prop('checked',true);
$("#"+idName[i]+"_x").prop('checked',true);
break;
}
}
}
function forcePpageRefresh(){
location.reload(true);
}
//右键菜单
function rightMenuClick(type,path,name){
// console.log(type,path,name);
var displayZip = isZip(type);
var options = {items:[
{text: "复制", onclick: function() {copyFile(path)}},
{text: "剪切", onclick: function() {cutFile(path)}},
{text: "重命名", onclick: function() {reName(0,name)}},
{text: lan.files.file_menu_auth, onclick: function() {setChmod(0,path)}},
{text: lan.files.file_menu_zip, onclick: function() {zip(path)}},
]};
if(type == "dir"){
options.items.push({text: lan.files.file_menu_del, onclick: function() {
deleteDir(path)}
});
} else if(isText(type)){
options.items.push({text: lan.files.file_menu_edit, onclick: function() {
onlineEditFile(0,path);
}},{text: lan.files.file_menu_down, onclick: function() {
getFileBytes(path);
}},{ text: lan.files.file_menu_del, onclick: function() {
deleteFile(path);
}});
} else if(displayZip != -1){
options.items.push({text: lan.files.file_menu_unzip, onclick: function() {
unZip(path,displayZip);
}},{text: lan.files.file_menu_down, onclick: function() {
getFileBytes(path);
}},{text: lan.files.file_menu_del, onclick: function() {
deleteFile(path);
}});
} else if(isImage(type)){
options.items.push({text: lan.files.file_menu_img, onclick: function() {
getImage(path);
}},{text: lan.files.file_menu_down, onclick: function() {
getFileBytes(path);
}},{text: lan.files.file_menu_del, onclick: function() {
deleteFile(path);
}});
} else {
options.items.push({text: lan.files.file_menu_down, onclick: function() {
getFileBytes(path);
}},{text: lan.files.file_menu_del, onclick: function() {
deleteFile(path);
}});
}
options.items.push({text: '强制刷新页面', onclick: function() {
forcePpageRefresh();
}});
return options;
}
//右键批量操作
function rightMenuClickAll(e){
var menu = $("#rmenu");
var windowWidth = $(window).width(),
windowHeight = $(window).height(),
menuWidth = menu.outerWidth(),
menuHeight = menu.outerHeight(),
x = (menuWidth + e.clientX < windowWidth) ? e.clientX : windowWidth - menuWidth,
y = (menuHeight + e.clientY < windowHeight) ? e.clientY : windowHeight - menuHeight;
menu.css('top', y)
.css('left', x)
.css('position', 'fixed')
.css("z-index","1")
.show();
}
//取目录大小
function getPathSize(){
var path = encodeURIComponent($("#DirPathPlace input").val());
layer.msg("正在计算,请稍候...",{icon:16,time:0,shade: [0.3, '#000']})
$.post("/files/get_dir_size","path="+path,function(rdata){
layer.closeAll();
$("#pathSize").text(rdata.msg);
},'json');
}
$("body").not(".def-log").click(function(){
$("#rmenu").hide();
});
//指定路径
$("#DirPathPlace input").keyup(function(e){
if(e.keyCode == 13) {
var fpath = $(this).val();
fpath = filterPath(fpath);
getFiles(fpath);
}
});
function pathPlaceBtn(path){
var html = '';
var title = '';
if(path == '/'){
html = '<li><a title="/">'+lan.files.path_root+'</a></li>';
} else {
var dst_path = path.split("/");
for(var i = 0; i<dst_path.length; i++ ){
title += dst_path[i]+'/';
dst_path[0] = lan.files.path_root;
html += '<li><a title="'+title+'">'+dst_path[i]+'</a></li>';
}
}
html = '<div style="width:1200px;height:26px"><ul>'+html+'</ul></div>';
$("#PathPlaceBtn").html(html);
$("#PathPlaceBtn ul li a").click(function(e){
var go_path = $(this).attr("title");
if(go_path.length>1){
if(go_path.substr(go_path.length-1,go_path.length) =='/'){
go_path = go_path.substr(0,go_path.length-1);
}
}
getFiles(go_path);
e.stopPropagation();
});
pathLeft();
}
//计算当前目录偏移
function pathLeft(){
var UlWidth = $("#PathPlaceBtn ul").width();
var SpanPathWidth = $("#PathPlaceBtn").width() - 50;
var Ml = UlWidth - SpanPathWidth;
if(UlWidth > SpanPathWidth ){
$("#PathPlaceBtn ul").css("left",-Ml);
}
else{
$("#PathPlaceBtn ul").css("left",0);
}
}
//路径快捷点击
$("#PathPlaceBtn").on("click", function(e){
if($("#DirPathPlace").is(":hidden")){
$("#DirPathPlace").css("display","inline");
$("#DirPathPlace input").focus();
$(this).hide();
}else{
$("#DirPathPlace").hide();
$(this).css("display","inline");
}
$(document).one("click", function(){
$("#DirPathPlace").hide();
$("#PathPlaceBtn").css("display","inline");
});
e.stopPropagation();
});
$("#DirPathPlace").on("click", function(e){
e.stopPropagation();
});