forked from vbenjs/vue-vben-admin
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor(adapter): separate form and component adapters so that compo…
…nents adapt to components other than the form (vbenjs#4628) * refactor: global components can be customized * refactor: remove use Toast and reconstruct the form adapter
- Loading branch information
Showing
63 changed files
with
1,757 additions
and
2,095 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -134,7 +134,7 @@ If you think this project is helpful to you, you can help the author buy a cup o | |
|
||
![donate](https://unpkg.com/@vbenjs/[email protected]/source/sponsor.png) | ||
|
||
<a style="display: block;width: 100px;height: 50px;line-height: 50px; color: #fff;text-align: center; background: #408aed;border-radius: 4px;" href="https://www.paypal.com/paypalme/cvvben">Paypal Me</a> | ||
<a style="display: block;width: 100px;height: 50px;line-height: 50px; color: #fff;text-align: center; background: #408aee;border-radius: 4px;" href="https://www.paypal.com/paypalme/cvvben">Paypal Me</a> | ||
|
||
## Contributor | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
/** | ||
* 通用组件共同的使用的基础组件,原先放在 adapter/form 内部,限制了使用范围,这里提取出来,方便其他地方使用 | ||
* 可用于 vben-form、vben-modal、vben-drawer 等组件使用, | ||
*/ | ||
|
||
import type { BaseFormComponentType } from '@vben/common-ui'; | ||
|
||
import type { Component, SetupContext } from 'vue'; | ||
import { h } from 'vue'; | ||
|
||
import { globalShareState } from '@vben/common-ui'; | ||
import { $t } from '@vben/locales'; | ||
|
||
import { | ||
AutoComplete, | ||
Button, | ||
Checkbox, | ||
CheckboxGroup, | ||
DatePicker, | ||
Divider, | ||
Input, | ||
InputNumber, | ||
InputPassword, | ||
Mentions, | ||
notification, | ||
Radio, | ||
RadioGroup, | ||
RangePicker, | ||
Rate, | ||
Select, | ||
Space, | ||
Switch, | ||
Textarea, | ||
TimePicker, | ||
TreeSelect, | ||
Upload, | ||
} from 'ant-design-vue'; | ||
|
||
const withDefaultPlaceholder = <T extends Component>( | ||
component: T, | ||
type: 'input' | 'select', | ||
) => { | ||
return (props: any, { attrs, slots }: Omit<SetupContext, 'expose'>) => { | ||
const placeholder = props?.placeholder || $t(`placeholder.${type}`); | ||
return h(component, { ...props, ...attrs, placeholder }, slots); | ||
}; | ||
}; | ||
|
||
// 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明 | ||
export type ComponentType = | ||
| 'AutoComplete' | ||
| 'Checkbox' | ||
| 'CheckboxGroup' | ||
| 'DatePicker' | ||
| 'DefaultButton' | ||
| 'Divider' | ||
| 'Input' | ||
| 'InputNumber' | ||
| 'InputPassword' | ||
| 'Mentions' | ||
| 'PrimaryButton' | ||
| 'Radio' | ||
| 'RadioGroup' | ||
| 'RangePicker' | ||
| 'Rate' | ||
| 'Select' | ||
| 'Space' | ||
| 'Switch' | ||
| 'Textarea' | ||
| 'TimePicker' | ||
| 'TreeSelect' | ||
| 'Upload' | ||
| BaseFormComponentType; | ||
|
||
async function initComponentAdapter() { | ||
const components: Partial<Record<ComponentType, Component>> = { | ||
// 如果你的组件体积比较大,可以使用异步加载 | ||
// Button: () => | ||
// import('xxx').then((res) => res.Button), | ||
|
||
AutoComplete, | ||
Checkbox, | ||
CheckboxGroup, | ||
DatePicker, | ||
// 自定义默认按钮 | ||
DefaultButton: (props, { attrs, slots }) => { | ||
return h(Button, { ...props, attrs, type: 'default' }, slots); | ||
}, | ||
Divider, | ||
Input: withDefaultPlaceholder(Input, 'input'), | ||
InputNumber: withDefaultPlaceholder(InputNumber, 'input'), | ||
InputPassword: withDefaultPlaceholder(InputPassword, 'input'), | ||
Mentions: withDefaultPlaceholder(Mentions, 'input'), | ||
// 自定义主要按钮 | ||
PrimaryButton: (props, { attrs, slots }) => { | ||
return h(Button, { ...props, attrs, type: 'primary' }, slots); | ||
}, | ||
Radio, | ||
RadioGroup, | ||
RangePicker, | ||
Rate, | ||
Select: withDefaultPlaceholder(Select, 'select'), | ||
Space, | ||
Switch, | ||
Textarea: withDefaultPlaceholder(Textarea, 'input'), | ||
TimePicker, | ||
TreeSelect: withDefaultPlaceholder(TreeSelect, 'select'), | ||
Upload, | ||
}; | ||
|
||
// 将组件注册到全局共享状态中 | ||
globalShareState.setComponents(components); | ||
|
||
// 定义全局共享状态中的消息提示 | ||
globalShareState.defineMessage({ | ||
// 复制成功消息提示 | ||
copyPreferencesSuccess: (title, content) => { | ||
notification.success({ | ||
description: content, | ||
message: title, | ||
placement: 'bottomRight', | ||
}); | ||
}, | ||
}); | ||
} | ||
|
||
export { initComponentAdapter }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/** | ||
* 通用组件共同的使用的基础组件,原先放在 adapter/form 内部,限制了使用范围,这里提取出来,方便其他地方使用 | ||
* 可用于 vben-form、vben-modal、vben-drawer 等组件使用, | ||
*/ | ||
|
||
import type { BaseFormComponentType } from '@vben/common-ui'; | ||
|
||
import type { Component, SetupContext } from 'vue'; | ||
import { h } from 'vue'; | ||
|
||
import { globalShareState } from '@vben/common-ui'; | ||
import { $t } from '@vben/locales'; | ||
|
||
import { | ||
ElButton, | ||
ElCheckbox, | ||
ElCheckboxGroup, | ||
ElDivider, | ||
ElInput, | ||
ElInputNumber, | ||
ElNotification, | ||
ElRadioGroup, | ||
ElSelect, | ||
ElSpace, | ||
ElSwitch, | ||
ElTimePicker, | ||
ElTreeSelect, | ||
ElUpload, | ||
} from 'element-plus'; | ||
|
||
const withDefaultPlaceholder = <T extends Component>( | ||
component: T, | ||
type: 'input' | 'select', | ||
) => { | ||
return (props: any, { attrs, slots }: Omit<SetupContext, 'expose'>) => { | ||
const placeholder = props?.placeholder || $t(`placeholder.${type}`); | ||
return h(component, { ...props, ...attrs, placeholder }, slots); | ||
}; | ||
}; | ||
|
||
// 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明 | ||
export type ComponentType = | ||
| 'Checkbox' | ||
| 'CheckboxGroup' | ||
| 'DatePicker' | ||
| 'Divider' | ||
| 'Input' | ||
| 'InputNumber' | ||
| 'RadioGroup' | ||
| 'Select' | ||
| 'Space' | ||
| 'Switch' | ||
| 'TimePicker' | ||
| 'TreeSelect' | ||
| 'Upload' | ||
| BaseFormComponentType; | ||
|
||
async function initComponentAdapter() { | ||
const components: Partial<Record<ComponentType, Component>> = { | ||
// 如果你的组件体积比较大,可以使用异步加载 | ||
// Button: () => | ||
// import('xxx').then((res) => res.Button), | ||
|
||
Checkbox: ElCheckbox, | ||
CheckboxGroup: ElCheckboxGroup, | ||
// 自定义默认按钮 | ||
DefaulButton: (props, { attrs, slots }) => { | ||
return h(ElButton, { ...props, attrs, type: 'info' }, slots); | ||
}, | ||
// 自定义主要按钮 | ||
PrimaryButton: (props, { attrs, slots }) => { | ||
return h(ElButton, { ...props, attrs, type: 'primary' }, slots); | ||
}, | ||
Divider: ElDivider, | ||
Input: withDefaultPlaceholder(ElInput, 'input'), | ||
InputNumber: withDefaultPlaceholder(ElInputNumber, 'input'), | ||
RadioGroup: ElRadioGroup, | ||
Select: withDefaultPlaceholder(ElSelect, 'select'), | ||
Space: ElSpace, | ||
Switch: ElSwitch, | ||
TimePicker: ElTimePicker, | ||
TreeSelect: withDefaultPlaceholder(ElTreeSelect, 'select'), | ||
Upload: ElUpload, | ||
}; | ||
|
||
// 将组件注册到全局共享状态中 | ||
globalShareState.setComponents(components); | ||
|
||
// 定义全局共享状态中的消息提示 | ||
globalShareState.defineMessage({ | ||
// 复制成功消息提示 | ||
copyPreferencesSuccess: (title, content) => { | ||
ElNotification({ | ||
title, | ||
message: content, | ||
position: 'bottom-right', | ||
duration: 0, | ||
type: 'success', | ||
}); | ||
}, | ||
}); | ||
} | ||
|
||
export { initComponentAdapter }; |
Oops, something went wrong.