diff --git a/packages/contact-card/test/__snapshots__/demo.spec.js.snap b/packages/contact-card/test/__snapshots__/demo.spec.js.snap
index e2b29b9c2..cec6b9b2e 100644
--- a/packages/contact-card/test/__snapshots__/demo.spec.js.snap
+++ b/packages/contact-card/test/__snapshots__/demo.spec.js.snap
@@ -13,7 +13,7 @@ exports[`renders demo correctly 1`] = `
diff --git a/packages/radio/index.js b/packages/radio/index.js
new file mode 100644
index 000000000..5e16175b1
--- /dev/null
+++ b/packages/radio/index.js
@@ -0,0 +1,77 @@
+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
+ },
+
+ 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;
+ }
+ },
+
+ created() {
+ this.findParent('van-radio-group');
+ },
+
+ methods: {
+ onClickLabel() {
+ if (!this.isDisabled && !this.labelDisabled) {
+ this.currentValue = this.name;
+ }
+ }
+ },
+
+ render(h) {
+ const checked = this.currentValue === this.name;
+ const { isDisabled, checkedColor } = this;
+ const iconStyle = checkedColor && checked && !isDisabled && { color: checkedColor };
+
+ return (
+
{
+ this.$emit('click');
+ }}
+ >
+
+
+
+
+ {this.$slots.default && (
+
+ {this.$slots.default}
+
+ )}
+
+ );
+ }
+});
diff --git a/packages/radio/index.vue b/packages/radio/index.vue
deleted file mode 100644
index 1f6834f30..000000000
--- a/packages/radio/index.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/radio/test/__snapshots__/demo.spec.js.snap b/packages/radio/test/__snapshots__/demo.spec.js.snap
index ebb115345..cfd5841db 100644
--- a/packages/radio/test/__snapshots__/demo.spec.js.snap
+++ b/packages/radio/test/__snapshots__/demo.spec.js.snap
@@ -4,18 +4,18 @@ exports[`renders demo correctly 1`] = `
-
@@ -25,17 +25,13 @@ exports[`renders demo correctly 1`] = `