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

97 lines
1.9 KiB
Vue

<template>
<div>
<a-select
v-if="query"
style="width: 100%"
@change="handleSelectChange"
>
<a-select-option v-for="(item, index) in queryOption" :key="index" :value="item.value">
{{ item.text }}
</a-select-option>
</a-select>
<a-switch
v-else
v-model="checkStatus"
:disabled="disabled"
@change="handleChange"
v-bind="$attrs"
v-on="childListeners"/>
</div>
</template>
<script>
export default {
name: 'JSwitch',
props: {
value: {
type: [String, Number],
required: false
},
disabled: {
type: Boolean,
required: false,
default: false
},
options: {
type: Array,
required: false,
default: () => ['Y', 'N']
},
query: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
checkStatus: false
}
},
computed: {
queryOption () {
const arr = []
arr.push({ value: this.options[0], text: '是' })
arr.push({ value: this.options[1], text: '否' })
return arr
},
// 透传给下级组件的事件,需要排除本组件使用的change事件
childListeners () {
const result = Object.assign({},
this.$listeners
)
delete result.change
return result
}
},
watch: {
value: {
immediate: true,
handler (val) {
if (!this.query) {
if (!val) {
this.checkStatus = false
this.$emit('change', this.options[1])
} else {
this.checkStatus = this.options[0] + '' === val + ''
}
}
}
}
},
methods: {
handleChange (checked) {
const flag = checked === false ? this.options[1] : this.options[0]
this.$emit('change', flag)
},
handleSelectChange (value) {
this.$emit('change', value)
}
},
model: {
prop: 'value',
event: 'change'
}
}
</script>