vue自定义级联面板

<template>
    <div class="cascader-wrapper">
        <div v-for="(item, index) in loops" :key="index" class="cascader-item">
            <p 
              v-for="(inner, index2) in item.t" 
              :key="inner.ID" 
              @click="handleClick(inner, index, index2)"
              :class="['cascader-text', activeIDS[index].includes(inner.ID) ? 'active':'']" >
                <span>{{inner.OrgName}},{{ inner.ID }}</span> 
                <i v-if="inner.children" class="iconfont icon-arrow-right"></i>
            </p>
        </div>
    </div>
</template>
<script>
export default {
    name: 'CascaderPanel',
    props: {
        panelData: {
            type: Array,
            default: () => []
        }
    },
    data () {
        return {
            loops: [],
            activeIDS: [[],[],[],[],[]] // 最多5层
        }
    },
    watch: {
      panelData: {
        handler(val) {
            this.loops = [{t: val}]
        },
        immediate: true
      }
    },
    methods: {
        handleClick(e, colIndex, rowIndex) {
            this.$set(this.activeIDS, colIndex, [e.ID])
            if(e.children && e.children.length) {
                this.loops.splice(colIndex + 1, this.loops.length - 1, {t: e.children})
            } else {
                this.loops.splice(colIndex + 1)
            }
        }
    }
}
</script>
<style lang="scss" scoped>

.cascader-wrapper {
    display: flex;
    .cascader-item {
        background-color: #fff;
        line-height: 1;
        color: #000000ff;
        font-size: 14px;
        width: 317px;
        height: calc(100vh - 300px);
        border-right: 1px solid #E5E6EB;
        transition: all 0.5s;
        .cascader-text {
            padding: 10px 16px;
            margin:0;
            &.active {
                background-color: #F2F3F5;
                cursor: pointer;
            }
            &:hover {
                color: #1ba6f7;
            }
        }
        .icon-arrow-right {
            float: right;
            margin-right: 12px;
        }
    }
}
</style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue级联选择器可以实现单项、二级和三级级联,甚至是多级级联。在web开发中,我们经常需要使用级联选择器来解决表单中的选择问题。根据引用,可以实现以下几种情况的级联选择器: 1. 单个级联:可以是下拉选择框或单选的形式。 2. 单个级联:可以是多项选择的形式。 3. 二级联动:例如省份和城市的级联选择。 4. 三级联动:例如省份、城市和区县的级联选择。 5. 多级级联:可以根据实际需求设置多级联动。 关于Vue级联选择器的具体实现和使用方法,可以参考引用中关于element组件的级联选择器的说明。通过组件嵌套的方式,可以实现级联选择器的功能。同时,引用中提到了实现数据的绑定以组件的形式调用级联选择器的功能。 因此,如果你想实现Vue级联选择器的三级联动,可以按照上述引用内容的指导,使用Vue级联选择器组件进行实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于vue2.0实现的级联选择器](https://download.csdn.net/download/weixin_38655987/14819357)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [VUE教你实现element级联选择器 | 多级菜单](https://blog.csdn.net/qq_34119437/article/details/89474796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值