<template>
|
|
<view class="l-radio-group" :class="'l-radio-group--'+ direction">
|
|
<slot />
|
|
</view>
|
|
</template>
|
|
<script lang="uts" setup>
|
|
import { RadioGroupProps } from './type';
|
|
|
|
const emit = defineEmits(['change', 'update:modelValue'])
|
|
const props = withDefaults(defineProps<RadioGroupProps>(), {
|
|
allowUncheck: false,
|
|
disabled: false,
|
|
direction: 'horizontal'
|
|
// size: 'medium'
|
|
})
|
|
const innerValue = ref<any|null>(null);
|
|
const groupValue = computed({
|
|
set(value: any|null) {
|
|
innerValue.value = value
|
|
emit('update:modelValue', value)
|
|
emit('change', value)
|
|
},
|
|
get():any|null {
|
|
return props.value ?? props.modelValue ?? props.defaultValue ?? innerValue.value
|
|
}
|
|
} as WritableComputedOptions<any|null>)
|
|
|
|
const handleRadioChange = (val: any) => {
|
|
if (props.allowUncheck && val == groupValue.value) {
|
|
groupValue.value = ''
|
|
} else {
|
|
groupValue.value = val
|
|
}
|
|
}
|
|
provide('limeRadioGroupProps', props)
|
|
provide('limeRadioGroupValue', groupValue)
|
|
provide('limeRadioGroupChange', handleRadioChange)
|
|
|
|
</script>
|
|
<style lang="scss">
|
|
.l-radio-group {
|
|
flex-direction: row;
|
|
}
|
|
|
|
.l-radio-group--vertical {
|
|
flex-direction: column;
|
|
}
|
|
</style>
|