2023-11-27 15:26:48 +08:00
|
|
|
<template>
|
|
|
|
<el-select
|
|
|
|
v-model="value"
|
|
|
|
multiple
|
|
|
|
clearable
|
|
|
|
collapse-tags
|
|
|
|
placeholder="Select"
|
|
|
|
popper-class="custom-header"
|
|
|
|
:max-collapse-tags="1"
|
2024-01-10 11:14:58 +08:00
|
|
|
style="width: 240px"
|
2023-11-27 15:26:48 +08:00
|
|
|
>
|
|
|
|
<template #header>
|
|
|
|
<el-checkbox
|
|
|
|
v-model="checkAll"
|
|
|
|
:indeterminate="indeterminate"
|
|
|
|
@change="handleCheckAll"
|
|
|
|
>
|
|
|
|
All
|
|
|
|
</el-checkbox>
|
|
|
|
</template>
|
|
|
|
<el-option
|
|
|
|
v-for="item in cities"
|
|
|
|
:key="item.value"
|
|
|
|
:label="item.label"
|
|
|
|
:value="item.value"
|
|
|
|
/>
|
|
|
|
</el-select>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
|
import { ref, watch } from 'vue'
|
|
|
|
|
|
|
|
import type { CheckboxValueType } from 'element-plus'
|
|
|
|
|
|
|
|
const checkAll = ref(false)
|
|
|
|
const indeterminate = ref(false)
|
|
|
|
const value = ref<CheckboxValueType[]>([])
|
|
|
|
const cities = ref([
|
|
|
|
{
|
|
|
|
value: 'Beijing',
|
|
|
|
label: 'Beijing',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 'Shanghai',
|
|
|
|
label: 'Shanghai',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 'Nanjing',
|
|
|
|
label: 'Nanjing',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 'Chengdu',
|
|
|
|
label: 'Chengdu',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 'Shenzhen',
|
|
|
|
label: 'Shenzhen',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 'Guangzhou',
|
|
|
|
label: 'Guangzhou',
|
|
|
|
},
|
|
|
|
])
|
|
|
|
|
|
|
|
watch(value, (val) => {
|
|
|
|
if (val.length === 0) {
|
|
|
|
checkAll.value = false
|
|
|
|
indeterminate.value = false
|
|
|
|
} else if (val.length === cities.value.length) {
|
|
|
|
checkAll.value = true
|
|
|
|
indeterminate.value = false
|
|
|
|
} else {
|
|
|
|
indeterminate.value = true
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
const handleCheckAll = (val: CheckboxValueType) => {
|
|
|
|
indeterminate.value = false
|
|
|
|
if (val) {
|
|
|
|
value.value = cities.value.map((_) => _.value)
|
|
|
|
} else {
|
|
|
|
value.value = []
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
|
|
.custom-header {
|
|
|
|
.el-checkbox {
|
|
|
|
display: flex;
|
|
|
|
height: unset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|