<template>
<el-select
placeholder="请选择"
filterable
multiple
collapse-tags
value-key="key"
size="medium"
style="width: 100%"
v-model="selectValue"
:clearable="clearable"
@clear="clear"
@change="change"
>
<li
class="el-select-dropdown__item"
:class="{ selected: SelectedAll }"
@click="onSelectedAll"
>
<span>全选</span>
</li>
<el-option
:label="item[label]"
:value="item[valueKey]"
:key="key"
v-for="(item, key) in List"
>
</el-option>
</el-select>
</template>
<script>
export default {
props: {
label: {
type: String,
default: "label",
},
valueKey: {
type: String,
default: "value",
},
value: {
type: Array,
default: () => [],
},
clearable: {
type: Boolean,
default: false,
},
List: {
type: Array,
default: () => [],
},
},
data() {
return {
selectValue: [],
};
},
computed: {
SelectedAll() {
return this.selectValue.length === this.List.length;
},
},
watch: {
value(newVal) {
this.selectValue = newVal;
},
selectValue(newVal) {
this.$emit("input", newVal);
},
},
methods: {
clear() {
this.$emit("clear");
},
change(e) {
this.$emit("change", e);
},
onSelectedAll() {
if (this.SelectedAll) {
this.selectValue = [];
} else {
this.selectValue = this.List.map((item) => item[this.valueKey]);
}
},
},
};
</script>
//使用
<all-select
v-model="value"
:List.sync="List"
:label="'label'"
:valueKey="'valueKey'"
@input="input"
clearable
></all-select>