踩坑记29 一些用于 el-cascader 的工具函数

2021.9.24

坑89el-cascader:一些配置 el-cascader 时写的工具函数。

允许选任意一级选项:配置  :props="{ checkStrictly: true }"

参考: Cascader 级联选择器 | ElementPlus (element-plus.org)

// 获取适用于el-cascader级联选择器的数据树,传入data为树结构数组,children为其中对象的子树数组
export function getTreeForCascader(data,valueStr,labelStr){
    return data.map(item=>{
        return {
            value: item[valueStr],
            label: item[labelStr],
            children: (item.children && item.children.length>0)?
                getTreeForCascader(item.children,valueStr,labelStr):undefined
        }
    })
}


// 向el-cascader级联选择器的数据树传入无上级的选项,ParentId为0
export function allowNoneParentId(tree){
    tree.push({ value:0, label:'无' })
    return tree
}


// 查找对象内包含几层children,nextCount表示层数/向下找几次
// 用于el-cascader级联选择器显示数据的过滤判断
// 例如,传入一级菜单obj,nextCount=2,是找两次到三级菜单
export function hasNextChildren(obj,nextCount=1){
    if(nextCount<=1){
        return Boolean(obj.children && obj.children.length)
    }else{
        return obj.children && obj.children.length && obj.children.some(node=>{
            return hasNextChildren(node,nextCount-1)
        })
    }
}


// 获取指定层数的适用于el-cascader级联选择器的数据树,传入data为树型结构的数组,level即为级联层数
// 该层无节点的枝会被剔除
export function getLevelTreeForCascader(data,valueStr,labelStr,level=1){
    if(level<=1){
        return data.map(item=>({
            value: item[valueStr],
            label: item[labelStr],
            })
        )
    }else{
        return data.filter(item=>hasNextChildren(item,level-1))
            .map(item=>{
                return {
                    value: item[valueStr],
                    label: item[labelStr],
                    children: getLevelTreeForCascader(item.children,valueStr,labelStr,level-1)
                }
            })
    }
}


// 改变数组中对象的属性名称,包括子树children的
// changeMap中,source是原名称,target是目标名称
export function changeAttrName(arr,changeMap){
    return arr.map(item=>{
        let changedItem={}
        changeMap.forEach(pair=>{
            changedItem[pair.target]=item[pair.source]
        })
        if(item.children && item.children.length){
            changedItem.children=changeAttrName(item.children,changeMap)
        }
        return changedItem
    })
}

by 莫得感情踩坑机(限定)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值