vue-js 递归得到树结构 并且 递归计算文件夹大小

431 阅读1分钟
//递归得到树结构 并且 递归计算文件夹大小
    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)
    },

你觉得对你有帮助就收藏吧,省的自己遇到了不会弄找不到这个文章,自己项目中实现的,分享给大家,本来我也不会,百度了很多文章,自己才琢磨透了,不可能实现的功能,自己实现了,说不出的激动