Files
laws_chery_client/src/components/jero/JSelectMultiple.vue
T
2024-06-11 15:39:01 +08:00

95 lines
1.9 KiB
Vue

<template>
<a-select
mode="multiple"
:placeholder="placeholder"
:value="arrayValue"
@change="onChange"
option-filter-prop="children"
>
<a-select-option
v-for="(item,index) in newOptions"
:key="index"
:getPopupContainer="getParentContainer"
:value="item.value">
{{ item.text || item.label }}
</a-select-option>
</a-select>
</template>
<script>
// option {label:,value:}
export default {
name: 'JSelectMultiple',
props: {
placeholder: {
type: String,
default: '',
required: false
},
value: {
type: String,
required: false
},
readOnly: {
type: Boolean,
required: false,
default: false
},
options: {
type: Array,
required: true
},
triggerChange: {
type: Boolean,
required: false,
default: false
},
spliter: {
type: String,
required: false,
default: ','
},
popContainer: {
type: String,
default: '',
required: false
}
},
data () {
return {
newOptions: [],
arrayValue: !this.value ? [] : this.value.split(this.spliter) // arrayValue是已选中的数据
}
},
watch: {
value (val) {
if (!val) {
this.arrayValue = []
} else {
this.arrayValue = this.value.split(this.spliter)
}
}
},
created () {
this.newOptions = this.options
},
methods: {
onChange (selectedValue) {
this.newOptions = this.options
if (this.triggerChange) {
this.$emit('change', selectedValue.join(this.spliter))
} else {
this.$emit('input', selectedValue.join(this.spliter))
}
},
getParentContainer (node) {
if (!this.popContainer) {
return node.parentNode
} else {
return document.querySelector(this.popContainer)
}
}
}
}
</script>