import { use } from '../utils'; import Icon from '../icon'; import findParent from '../mixins/find-parent'; const [sfc, bem] = use('radio'); export default sfc({ mixins: [findParent], props: { name: null, value: null, disabled: Boolean, checkedColor: String, labelPosition: String, labelDisabled: Boolean, shape: { type: String, default: 'round' } }, computed: { currentValue: { get() { return this.parent ? this.parent.value : this.value; }, set(val) { (this.parent || this).$emit('input', val); } }, isDisabled() { return this.parent ? this.parent.disabled || this.disabled : this.disabled; }, iconStyle() { const { checkedColor } = this; if (checkedColor && this.currentValue === this.name && !this.isDisabled) { return { borderColor: checkedColor, backgroundColor: checkedColor }; } } }, created() { this.findParent('van-radio-group'); }, methods: { onClickIcon() { if (!this.isDisabled) { this.currentValue = this.name; } }, onClickLabel() { if (!this.isDisabled && !this.labelDisabled) { this.currentValue = this.name; } } }, render(h) { const checked = this.currentValue === this.name; const CheckIcon = this.$scopedSlots.icon ? ( this.$scopedSlots.icon({ checked }) ) : ( ); const Label = this.$slots.default && ( {this.$slots.default} ); return (
{ this.$emit('click'); }} >
{CheckIcon}
{Label}
); } });