//递归得到树结构 并且 递归计算文件夹大小
getTreeAndCalcFloderSizeFn(data, url, originalCurrentData) {
console.log(data, url, originalCurrentData)
let size = 0;
// 1. 如果是文件夹 就要 获取它里面 所有文件的总大小,将这个总大小赋值给当前文件夹对象的size
// 1.1 先计算最外层所有文件夹的大小
data.map(item => {
if (item.url == url) {
originalCurrentData = item.child;
this.currentPath = item.url;
let floderArrObjTmp = [];
originalCurrentData.forEach(item => {
//如果是文件夹,size是没有数据的,需要计算其子文件总大小
floderArrObjTmp.push(
{
name: item.name,
type: item.type,
url: item.url,
child: item.child,
storeCategory: '标准存储',
size: item.type == "folder"?this.calculate(item.child):item.size,//大小
encryptionStatus: '未加密',
lastModifiedTime: item.lastChangeDate//最后修改时间
}
);
});
this.floderArrObj = floderArrObjTmp;
return false;
} else {
if (item.child) {
this.getTreeAndCalcFloderSizeFn(item.child, url);
}
}
});
},
//递归计算文件夹大小
calculate(originalCurrentData) {
//定义变量累积每一个文件的大小
let size = 0;
originalCurrentData.forEach(item=>{
if (item.type=="file") {
//是文件
size += item.size;
} else {
//是文件夹
size += this.calculate(item.child);
}
})
return size;
},
//查询文件目录,返回文件树
searchFolderFn(isLoading) {
let paramsObj = {
parmsData: 'folderPath=' + '/',//获取 根目录,
isLoading: isLoading
}
searchFolder(paramsObj).then((result) => {
const {code, data} = result;
if (code == 1) {
if (data.child && Array.isArray(data.child)) {
this.AllOriginalDataTreeListArr = [data];
this.originalCurrentData = null;
////递归得到树结构 并且 递归计算文件夹大小
this.getTreeAndCalcFloderSizeFn([data], this.currentPath, this.originalCurrentData);
}
}
});
},
//点击当前行
fileNameClick(row) {
//如果点击的当前行是文件夹,可以查询子级
if (row.type == "folder") {
this.currentPath = row.url;
////递归得到树结构 并且 递归计算文件夹大小
this.getTreeAndCalcFloderSizeFn(this.AllOriginalDataTreeListArr, this.currentPath, this.originalCurrentData)
}
},
//返回上一级
returnPrev() {
let currentPathTemp = this.currentPath;
if (currentPathTemp != '/') {
//最后一个斜杠的下标
let lastSlashIdx = currentPathTemp.lastIndexOf('/');
let prevPath = '';
//上一级的path
if (lastSlashIdx !== 0) {
prevPath = currentPathTemp.slice(0, lastSlashIdx)
} else if (lastSlashIdx === 0) {
prevPath = '/'
}
this.currentPath = prevPath;
}
//递归得到树结构并且计算文件夹大小
this.getTreeAndCalcFloderSizeFn(this.AllOriginalDataTreeListArr, this.currentPath, this.originalCurrentData)
},
你觉得对你有帮助就收藏吧,省的自己遇到了不会弄找不到这个文章,自己项目中实现的,分享给大家,本来我也不会,百度了很多文章,自己才琢磨透了,不可能实现的功能,自己实现了,说不出的激动