<template>
|
|
<view class="l-radio-group" :class="'l-radio-group--'+ direction">
|
|
<slot />
|
|
</view>
|
|
</template>
|
|
<script lang="ts">
|
|
// @ts-nocheck
|
|
import { defineComponent, provide, ref, computed } from '@/uni_modules/lime-shared/vue'
|
|
import radioGroupProps from './props'
|
|
const name = 'l-radio-group'
|
|
export default defineComponent({
|
|
name,
|
|
props: radioGroupProps,
|
|
emits: ['update:value', 'update:modelValue', 'change', 'input'],
|
|
setup(props, { emit }) {
|
|
const innerValue = ref<any|null>(null);
|
|
const groupValue = computed({
|
|
set(value: any|null) {
|
|
innerValue.value = value;
|
|
emit('update:modelValue', value)
|
|
emit('change', value)
|
|
// #ifdef VUE2
|
|
emit('input', value)
|
|
// #endif
|
|
},
|
|
get():any|null {
|
|
return props.value || props.name || 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 {
|
|
// display: flex;
|
|
// flex-direction: row;
|
|
// }
|
|
|
|
// .l-radio-group--vertical {
|
|
// flex-direction: column;
|
|
// }
|
|
|
|
.l-radio-group {
|
|
// background-color: antiquewhite;
|
|
}
|
|
|
|
.l-radio-group--vertical {
|
|
:deep(.l-radio) {
|
|
display: flex;
|
|
// line-height: 64rpx;
|
|
}
|
|
|
|
:deep(l-radio) {
|
|
display: flex;
|
|
// line-height: 64rpx;
|
|
}
|
|
}
|
|
</style>
|