diff --git a/packages/element3/packages/radio-group/RadioGroup.vue b/packages/element3/packages/radio-group/RadioGroup.vue
deleted file mode 100644
index e6bf217f8..000000000
--- a/packages/element3/packages/radio-group/RadioGroup.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
-
-
diff --git a/packages/element3/packages/radio-group/index.js b/packages/element3/packages/radio-group/index.js
deleted file mode 100644
index 8aec4a60d..000000000
--- a/packages/element3/packages/radio-group/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import RadioGroup from './RadioGroup.vue'
-
-/* istanbul ignore next */
-RadioGroup.install = function (app) {
- app.component(RadioGroup.name, RadioGroup)
-}
-
-export default RadioGroup
diff --git a/packages/element3/packages/theme-chalk/src/radioGroup.scss b/packages/element3/packages/theme-chalk/src/radioGroup.scss
new file mode 100644
index 000000000..86ac150f1
--- /dev/null
+++ b/packages/element3/packages/theme-chalk/src/radioGroup.scss
@@ -0,0 +1,9 @@
+@import 'mixins/mixins';
+@import 'common/var';
+
+@include b(radio-group) {
+ display: inline-block;
+ line-height: 1;
+ vertical-align: middle;
+ font-size: 0;
+}
diff --git a/packages/element3/src/components/Radio/tests/Radio.spec.js b/packages/element3/src/components/Radio/tests/Radio.spec.js
index a8c17c860..d41419afa 100644
--- a/packages/element3/src/components/Radio/tests/Radio.spec.js
+++ b/packages/element3/src/components/Radio/tests/Radio.spec.js
@@ -1,6 +1,6 @@
import { mount } from '@vue/test-utils'
import { ref, h, reactive } from 'vue'
-import RadioGroup from 'element-ui/packages/radio-group/RadioGroup'
+import RadioGroup from '../../RadioGroup/src/RadioGroup.vue'
import Radio from '../src/Radio.vue'
describe('Radio.vue', () => {
diff --git a/packages/element3/src/components/RadioButton/tests/RadioButton.spec.js b/packages/element3/src/components/RadioButton/tests/RadioButton.spec.js
index 7ec47e835..48086105f 100644
--- a/packages/element3/src/components/RadioButton/tests/RadioButton.spec.js
+++ b/packages/element3/src/components/RadioButton/tests/RadioButton.spec.js
@@ -1,5 +1,5 @@
import RadioButton from '../src/RadioButton.vue'
-import RadioGroup from 'element-ui/packages/radio-group/RadioGroup'
+import RadioGroup from '../../RadioGroup/src/RadioGroup.vue'
import { mount } from '@vue/test-utils'
import { ref, h, nextTick, reactive } from 'vue'
diff --git a/packages/element3/src/components/RadioGroup/index.js b/packages/element3/src/components/RadioGroup/index.js
new file mode 100644
index 000000000..30a0502c3
--- /dev/null
+++ b/packages/element3/src/components/RadioGroup/index.js
@@ -0,0 +1,7 @@
+import ElRadioGroup from './src/RadioGroup'
+
+ElRadioGroup.install = function (app) {
+ app.component(ElRadioGroup.name, ElRadioGroup)
+}
+
+export { ElRadioGroup }
diff --git a/packages/element3/src/components/RadioGroup/src/RadioGroup.vue b/packages/element3/src/components/RadioGroup/src/RadioGroup.vue
new file mode 100644
index 000000000..5b3061141
--- /dev/null
+++ b/packages/element3/src/components/RadioGroup/src/RadioGroup.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/packages/element3/src/components/RadioGroup/src/props.ts b/packages/element3/src/components/RadioGroup/src/props.ts
new file mode 100644
index 000000000..8d1295867
--- /dev/null
+++ b/packages/element3/src/components/RadioGroup/src/props.ts
@@ -0,0 +1,21 @@
+import { RadioGroupSize } from './types'
+import { PropType } from 'vue'
+
+export const props = {
+ modelValue: [String, Number, Symbol, Boolean],
+ size: {
+ type: String as PropType,
+ validator(val: string): boolean {
+ return ['medium', 'small', 'mini', ''].includes(val)
+ }
+ },
+ fill: {
+ type: String,
+ default: '#409EFF'
+ },
+ textColor: {
+ type: String,
+ default: '#ffffff'
+ },
+ disabled: Boolean
+}
diff --git a/packages/element3/src/components/RadioGroup/src/types.ts b/packages/element3/src/components/RadioGroup/src/types.ts
new file mode 100644
index 000000000..447b86fb2
--- /dev/null
+++ b/packages/element3/src/components/RadioGroup/src/types.ts
@@ -0,0 +1 @@
+export type RadioGroupSize = 'medium' | 'small' | 'mini'
diff --git a/packages/element3/src/components/RadioGroup/tests/RadioGroup.spec.ts b/packages/element3/src/components/RadioGroup/tests/RadioGroup.spec.ts
new file mode 100644
index 000000000..15801ab55
--- /dev/null
+++ b/packages/element3/src/components/RadioGroup/tests/RadioGroup.spec.ts
@@ -0,0 +1,67 @@
+import RadioGroup from '../src/RadioGroup.vue'
+import { mount } from '@vue/test-utils'
+import { ref } from 'vue'
+
+describe('radioGroup.vue', () => {
+ it('should show content', () => {
+ const wrapper = mount(RadioGroup, {
+ slots: {
+ default: 'radioGroup'
+ }
+ })
+
+ expect(wrapper).toHaveTextContent('radioGroup')
+ })
+
+ it('form-item size', async () => {
+ const wrapper = mount(RadioGroup, {
+ props: {
+ size: ''
+ },
+ global: {
+ provide: {
+ elFormItem: {
+ elFormItemSize: 'small'
+ }
+ }
+ }
+ })
+
+ expect(wrapper.vm.radioGroupSize).toEqual('small')
+
+ await wrapper.setProps({
+ size: 'medium'
+ })
+ expect(wrapper.vm.radioGroupSize).toEqual('medium')
+ })
+
+ it('size', async () => {
+ const wrapper = mount(RadioGroup, {
+ props: {
+ size: 'mini'
+ }
+ })
+
+ expect(wrapper.vm.radioGroupSize).toEqual('mini')
+
+ await wrapper.setProps({
+ size: 'small'
+ })
+ expect(wrapper.vm.radioGroupSize).toEqual('small')
+ })
+
+ it('modelValue', async () => {
+ const modelValue = ref('')
+ const wrapper = mount(RadioGroup, {
+ props: {
+ modelValue,
+ 'update:modelValue'(v) {
+ modelValue.value = v
+ }
+ }
+ })
+
+ await wrapper.setProps({ modelValue: '上海' })
+ expect(wrapper.vm.modelValue).toEqual('上海')
+ })
+})
diff --git a/packages/element3/src/components/RadioGroup/tests/props.spec.ts b/packages/element3/src/components/RadioGroup/tests/props.spec.ts
new file mode 100644
index 000000000..e2888c741
--- /dev/null
+++ b/packages/element3/src/components/RadioGroup/tests/props.spec.ts
@@ -0,0 +1,24 @@
+import { props } from '../src/props'
+
+describe('RadioGroup.props', () => {
+ it('size', () => {
+ const { size } = props
+
+ expect(size.validator('medium')).toBe(true)
+ expect(size.validator('small')).toBe(true)
+ expect(size.validator('mini')).toBe(true)
+ expect(size.validator('')).toBe(true)
+ })
+
+ it('fill', () => {
+ const { fill } = props
+
+ expect(fill.default).toBe('#409EFF')
+ })
+
+ it('textColor', () => {
+ const { textColor } = props
+
+ expect(textColor.default).toBe('#ffffff')
+ })
+})
diff --git a/packages/element3/src/index.js b/packages/element3/src/index.js
index 46c25fbb3..bc17a8cef 100644
--- a/packages/element3/src/index.js
+++ b/packages/element3/src/index.js
@@ -15,7 +15,7 @@ import { ElLink } from './components/Link'
// Form
import { ElRadio } from './components/Radio'
import { ElRadioButton } from './components/RadioButton'
-import ElRadioGroup from '../packages/radio-group'
+import { ElRadioGroup } from './components/RadioGroup'
import ElCheckbox from '../packages/checkbox'
import ElCheckboxButton from '../packages/checkbox-button'
import ElCheckboxGroup from '../packages/checkbox-group'