Browse Source
fix: form support `disabledOnInputListener` (#5127)
* fix: form support `disabledOnInputListener`
* chore: docs update
pull/5129/head
Netfan
1 year ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with
24 additions and
4 deletions
-
apps/web-ele/src/adapter/form.ts
-
apps/web-ele/src/views/demos/form/basic.vue
-
packages/@core/ui-kit/form-ui/src/config.ts
-
packages/@core/ui-kit/form-ui/src/form-render/form-field.vue
-
packages/@core/ui-kit/form-ui/src/form-render/form.vue
-
packages/@core/ui-kit/form-ui/src/types.ts
|
|
|
@ -14,6 +14,8 @@ setupVbenForm<ComponentType>({ |
|
|
|
Upload: 'fileList', |
|
|
|
CheckboxGroup: 'model-value', |
|
|
|
}, |
|
|
|
// select等组件的筛选功能会抛出input事件,需要禁用表单的input事件监听以免错误地更新了组件值
|
|
|
|
disabledOnInputListener: true, |
|
|
|
}, |
|
|
|
defineRules: { |
|
|
|
required: (value, _params, ctx) => { |
|
|
|
|
|
|
|
@ -139,6 +139,7 @@ const [Form, formApi] = useVbenForm({ |
|
|
|
fieldName: 'select', |
|
|
|
label: 'Select', |
|
|
|
componentProps: { |
|
|
|
filterable: true, |
|
|
|
options: [ |
|
|
|
{ value: 'A', label: '选项A' }, |
|
|
|
{ value: 'B', label: '选项B' }, |
|
|
|
|
|
|
|
@ -44,11 +44,15 @@ export function setupVbenForm< |
|
|
|
>(options: VbenFormAdapterOptions<T>) { |
|
|
|
const { config, defineRules } = options; |
|
|
|
|
|
|
|
const { disabledOnChangeListener = false, emptyStateValue = undefined } = |
|
|
|
(config || {}) as FormCommonConfig; |
|
|
|
const { |
|
|
|
disabledOnChangeListener = false, |
|
|
|
disabledOnInputListener = false, |
|
|
|
emptyStateValue = undefined, |
|
|
|
} = (config || {}) as FormCommonConfig; |
|
|
|
|
|
|
|
Object.assign(DEFAULT_FORM_COMMON_CONFIG, { |
|
|
|
disabledOnChangeListener, |
|
|
|
disabledOnInputListener, |
|
|
|
emptyStateValue, |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
@ -33,6 +33,7 @@ const { |
|
|
|
description, |
|
|
|
disabled, |
|
|
|
disabledOnChangeListener, |
|
|
|
disabledOnInputListener, |
|
|
|
emptyStateValue, |
|
|
|
fieldName, |
|
|
|
formFieldProps, |
|
|
|
@ -227,10 +228,14 @@ function fieldBindEvent(slotProps: Record<string, any>) { |
|
|
|
|
|
|
|
return onChange?.(e?.target?.[bindEventField] ?? e); |
|
|
|
}, |
|
|
|
onInput: () => {}, |
|
|
|
...(disabledOnInputListener ? { onInput: undefined } : {}), |
|
|
|
}; |
|
|
|
} |
|
|
|
return {}; |
|
|
|
return disabledOnInputListener |
|
|
|
? { |
|
|
|
onInput: undefined, |
|
|
|
} |
|
|
|
: {}; |
|
|
|
} |
|
|
|
|
|
|
|
function createComponentProps(slotProps: Record<string, any>) { |
|
|
|
|
|
|
|
@ -90,6 +90,7 @@ const computedSchema = computed( |
|
|
|
controlClass = '', |
|
|
|
disabled, |
|
|
|
disabledOnChangeListener = false, |
|
|
|
disabledOnInputListener = false, |
|
|
|
emptyStateValue = undefined, |
|
|
|
formFieldProps = {}, |
|
|
|
formItemClass = '', |
|
|
|
@ -111,6 +112,7 @@ const computedSchema = computed( |
|
|
|
return { |
|
|
|
disabled, |
|
|
|
disabledOnChangeListener, |
|
|
|
disabledOnInputListener, |
|
|
|
emptyStateValue, |
|
|
|
hideLabel, |
|
|
|
hideRequiredMark, |
|
|
|
|
|
|
|
@ -154,6 +154,11 @@ export interface FormCommonConfig { |
|
|
|
* @default false |
|
|
|
*/ |
|
|
|
disabledOnChangeListener?: boolean; |
|
|
|
/** |
|
|
|
* 是否禁用所有表单项的input事件监听 |
|
|
|
* @default false |
|
|
|
*/ |
|
|
|
disabledOnInputListener?: boolean; |
|
|
|
/** |
|
|
|
* 所有表单项的空状态值,默认都是undefined,naive-ui的空状态值是null |
|
|
|
*/ |
|
|
|
@ -371,6 +376,7 @@ export interface VbenFormAdapterOptions< |
|
|
|
config?: { |
|
|
|
baseModelPropName?: string; |
|
|
|
disabledOnChangeListener?: boolean; |
|
|
|
disabledOnInputListener?: boolean; |
|
|
|
emptyStateValue?: null | undefined; |
|
|
|
modelPropNameMap?: Partial<Record<T, string>>; |
|
|
|
}; |
|
|
|
|