elemenet-plus级联选择器(el-cascader)一级单选 二级三级多选+hover弹窗样式修复+

一、需求背景

最近的需求需要实现级联选择器的一级只支持单选,二三级可以支持多选。对于原生的这个组件来说,并没有这个功能,所以需要自己在组件上进行二次封装。

二、实现原理

监听级联选择器的change事件,该事件的回调函数的参数即为选中的v-model绑定的值,并且利用prop开启多选配置:

const departProps = { multiple: true, label: 'name', children: 'data', value: 'id' };

此时的v-model值为一个数组,数组的第一项则为一级的id,第二项则为二级的id…以此类推。那么利用这个v-model值的特性,声明一个标识符,在触发change事件的时候,将标识符的值设置为数组0项(即第一级的id),然后过滤出符合一级id等于标识符值的v-model绑定值,最后将过滤好的数组重新赋值给v-model绑定值,这样就实现了一级单选(因为不等于标识符的都被过滤掉,自然也就不会勾选中),代码如下:

const index = ref(-1); // 标识符(重要)
const singleChoice = (item) => {
  item.forEach((i) => {
    if (i[0] !== index.value) {
      index.value = i[0];
    }
  }); // 如切换勾选,则让标识符的值等于勾选的父级的value
  const filterd = item.filter((v) => v[0] === index.value); // 过滤出与标识符相符的选项
  baseProjectValue.value.push(...filterd); //baseProjectValue为el-cascader的v-model值
};

样式问题修复:当级联选择器开启多选+折叠时,由于组件并未将hover弹窗插入到根元素下,导致即使对hover弹窗设置了z-index值,它依旧低于父组件的兄弟组件的z-index值,就会出现下图的效果:在这里插入图片描述
检查元素可以看到,级联选择器的下拉框z-index是足够大的,但是因为它并没有插到根节点下,而只是插入到当前的级联选择器中,所以想要让其高于 属于其父元素同等级的时间选择器的堆叠上下文 就需要对级联选择器的hover展示下拉框 的父元素设置z-index值,这样即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值