mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange.git
synced 2026-08-19 12:24:09 +00:00
66 lines
1.2 KiB
Vue
66 lines
1.2 KiB
Vue
<template>
|
|
<div class="custom-control custom-checkbox d-flex">
|
|
<input
|
|
:name="name"
|
|
:checked="internalValue"
|
|
:id="id || name"
|
|
type="checkbox"
|
|
class="custom-control-input"
|
|
@click="handleClick">
|
|
<label :for="id || name" class="custom-control-label my-auto">
|
|
<slot/>
|
|
</label>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'Checkbox',
|
|
|
|
props: {
|
|
id: { type: String, default: null },
|
|
name: { type: String, default: 'checkbox' },
|
|
value: { type: Boolean, default: false },
|
|
checked: { type: Boolean, default: false }
|
|
},
|
|
|
|
data: () => ({
|
|
internalValue: false
|
|
}),
|
|
|
|
watch: {
|
|
value (val) {
|
|
this.internalValue = val
|
|
},
|
|
|
|
checked (val) {
|
|
this.internalValue = val
|
|
},
|
|
|
|
internalValue (val, oldVal) {
|
|
if (val !== oldVal) {
|
|
this.$emit('input', val)
|
|
}
|
|
}
|
|
},
|
|
|
|
created () {
|
|
this.internalValue = this.value
|
|
|
|
if ('checked' in this.$options.propsData) {
|
|
this.internalValue = this.checked
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
handleClick (e) {
|
|
this.$emit('click', e)
|
|
|
|
if (!e.isPropagationStopped) {
|
|
this.internalValue = e.target.checked
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|