From 89414f173e6c34411c7fbe984932aef1f3670380 Mon Sep 17 00:00:00 2001 From: zuihou <244387066@qq.com> Date: Sat, 16 Oct 2021 21:25:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(Form):=20=E6=96=B0=E5=A2=9E=20ApiRadioGrou?= =?UTF-8?q?p=20=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/demo/select-demo.ts | 8 +- src/components/Form/index.ts | 1 + src/components/Form/src/componentMap.ts | 2 + .../Form/src/components/ApiRadioGroup.vue | 130 ++++++++++++++++++ src/components/Form/src/types/index.ts | 1 + src/views/demo/form/index.vue | 44 ++++++ 6 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 src/components/Form/src/components/ApiRadioGroup.vue diff --git a/mock/demo/select-demo.ts b/mock/demo/select-demo.ts index fc35a395..631c6bb0 100644 --- a/mock/demo/select-demo.ts +++ b/mock/demo/select-demo.ts @@ -1,11 +1,11 @@ import { MockMethod } from 'vite-plugin-mock'; import { resultSuccess } from '../_util'; -const demoList = (keyword) => { +const demoList = (keyword, count = 20) => { const result = { list: [] as any[], }; - for (let index = 0; index < 20; index++) { + for (let index = 0; index < count; index++) { result.list.push({ name: `${keyword ?? ''}选项${index}`, id: `${index}`, @@ -20,9 +20,9 @@ export default [ timeout: 1000, method: 'get', response: ({ query }) => { - const { keyword } = query; + const { keyword, count } = query; console.log(keyword); - return resultSuccess(demoList(keyword)); + return resultSuccess(demoList(keyword, count)); }, }, ] as MockMethod[]; diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts index f9cce5e4..9859b29a 100644 --- a/src/components/Form/index.ts +++ b/src/components/Form/index.ts @@ -9,5 +9,6 @@ export { useForm } from './src/hooks/useForm'; export { default as ApiSelect } from './src/components/ApiSelect.vue'; export { default as RadioButtonGroup } from './src/components/RadioButtonGroup.vue'; export { default as ApiTreeSelect } from './src/components/ApiTreeSelect.vue'; +export { default as ApiRadioGroup } from './src/components/ApiRadioGroup.vue'; export { BasicForm }; diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts index 4bfbdf11..6d0b1a6b 100644 --- a/src/components/Form/src/componentMap.ts +++ b/src/components/Form/src/componentMap.ts @@ -21,6 +21,7 @@ import { Divider, } from 'ant-design-vue'; +import ApiRadioGroup from './components/ApiRadioGroup.vue'; import RadioButtonGroup from './components/RadioButtonGroup.vue'; import ApiSelect from './components/ApiSelect.vue'; import ApiTreeSelect from './components/ApiTreeSelect.vue'; @@ -43,6 +44,7 @@ componentMap.set('Select', Select); componentMap.set('ApiSelect', ApiSelect); componentMap.set('TreeSelect', TreeSelect); componentMap.set('ApiTreeSelect', ApiTreeSelect); +componentMap.set('ApiRadioGroup', ApiRadioGroup); componentMap.set('Switch', Switch); componentMap.set('RadioButtonGroup', RadioButtonGroup); componentMap.set('RadioGroup', Radio.Group); diff --git a/src/components/Form/src/components/ApiRadioGroup.vue b/src/components/Form/src/components/ApiRadioGroup.vue new file mode 100644 index 00000000..712cfba8 --- /dev/null +++ b/src/components/Form/src/components/ApiRadioGroup.vue @@ -0,0 +1,130 @@ + + + diff --git a/src/components/Form/src/types/index.ts b/src/components/Form/src/types/index.ts index 1cd6a02c..c63b3408 100644 --- a/src/components/Form/src/types/index.ts +++ b/src/components/Form/src/types/index.ts @@ -92,6 +92,7 @@ export type ComponentType = | 'ApiSelect' | 'TreeSelect' | 'ApiTreeSelect' + | 'ApiRadioGroup' | 'RadioButtonGroup' | 'RadioGroup' | 'Checkbox' diff --git a/src/views/demo/form/index.vue b/src/views/demo/form/index.vue index 72744cdf..7188f725 100644 --- a/src/views/demo/form/index.vue +++ b/src/views/demo/form/index.vue @@ -410,6 +410,50 @@ span: 8, }, }, + { + field: 'field34', + component: 'ApiRadioGroup', + label: '远程Radio', + helpMessage: ['ApiRadioGroup组件', '使用接口提供的数据生成选项'], + required: true, + componentProps: { + api: optionsListApi, + params: { + count: 2, + }, + resultField: 'list', + // use name as label + labelField: 'name', + // use id as value + valueField: 'id', + }, + defaultValue: '1', + colProps: { + span: 8, + }, + }, + { + field: 'field35', + component: 'ApiRadioGroup', + label: '远程Radio', + helpMessage: ['ApiRadioGroup组件', '使用接口提供的数据生成选项'], + required: true, + componentProps: { + api: optionsListApi, + params: { + count: 2, + }, + resultField: 'list', + // use name as label + labelField: 'name', + // use id as value + valueField: 'id', + isBtn: true, + }, + colProps: { + span: 8, + }, + }, { field: 'divider-linked', component: 'Divider',