<template><div><el-selectv-model="selectedValues"multiplecollapse-tagsplaceholder="请选择电压等级"@change="handleChange"><el-option key="all" value="all" class="select-all-option"><el-checkboxv-model="isAllSelected"@change="handleSelectAll">全选</el-checkbox></el-option><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"><el-checkbox:value="selectedValues.includes(item.value)"@change="(val) => handleCheckboxChange(val, item)"@click.stop.native>{{ item.label }}</el-checkbox></el-option></el-select></div>
</template><script>
export default {name: 'EditEnterprise',data() {return {selectedValues: ['35'],options: [{ value: '1000', label: '交流1000kV', checked: false },{ value: '750', label: '交流750kV', checked: false },{ value: '35', label: '交流35kV', checked: false }],isAllSelected: false,}},watch: {selectedValues: {handler(newVal) {this.isAllSelected = newVal.length === this.options.length},immediate: true}},methods: {handleSelectAll(val) {if (val) {this.selectedValues = this.options.map(item => item.value)} else {this.selectedValues = []}},handleCheckboxChange(val, item) {const index = this.selectedValues.indexOf(item.value)if (val && index === -1) {this.selectedValues = [...this.selectedValues, item.value]} else if (!val && index > -1) {this.selectedValues = this.selectedValues.filter(v => v !== item.value)}},handleChange(values) {// 移除这个方法,因为不再需要手动同步checkbox状态if (values.includes('all')) {this.selectedValues = this.selectedValues.filter(v => v !== 'all')}}}
}
</script><style lang="scss" scoped>
.el-select {width: 240px;
}::v-deep .el-select-dropdown__item {padding: 0 20px;&.selected {color: inherit;}// 取消选项的点击效果&:hover {background-color: transparent;}
}
//全选多选框的位置-靠右对齐
.select-all-option{border-bottom: 1px solid #ccc;::v-deep .el-checkbox{display: flex;justify-content: flex-end;.el-checkbox__label {flex: 0;}}
}::v-deep .el-checkbox {width: 100%;height: 100%;display: flex;align-items: center;padding: 8px 0;margin: 0;// 增加checkbox的可点击区域.el-checkbox__label {flex: 1;padding-left: 10px;}// 让整个区域可点击&__input {position: relative;cursor: pointer;}
}
</style>
效果如下图所示: