48 lines
1.4 KiB
Vue
48 lines
1.4 KiB
Vue
<template>
|
|
<li :class="[prefixCls + '-wrap']" v-show="!hidden">
|
|
<div :class="[prefixCls + '-title']">{{ label }}</div>
|
|
<ul>
|
|
<li :class="[prefixCls]" ref="options"><slot></slot></li>
|
|
</ul>
|
|
</li>
|
|
</template>
|
|
<script>
|
|
const prefixCls = 'ivu-select-group';
|
|
|
|
export default {
|
|
name: 'OptionGroup',
|
|
props: {
|
|
label: {
|
|
type: String,
|
|
default: ''
|
|
}
|
|
},
|
|
data () {
|
|
return {
|
|
prefixCls: prefixCls,
|
|
hidden: false // for search
|
|
};
|
|
},
|
|
methods: {
|
|
queryChange () {
|
|
this.$nextTick(() => {
|
|
const options = this.$refs.options.querySelectorAll('.ivu-select-item');
|
|
let hasVisibleOption = false;
|
|
for (let i = 0; i < options.length; i++) {
|
|
if (options[i].style.display !== 'none') {
|
|
hasVisibleOption = true;
|
|
break;
|
|
}
|
|
}
|
|
this.hidden = !hasVisibleOption;
|
|
});
|
|
}
|
|
},
|
|
mounted () {
|
|
this.$on('on-query-change', () => {
|
|
this.queryChange();
|
|
return true;
|
|
});
|
|
}
|
|
};
|
|
</script>
|