Unverified 提交 9b2d41ea 作者: Netfan 提交者: GitHub

feat(form): add prop autoSubmitOnEnter (#620)

为Form添加autoSubmitOnEnter属性,当设置为true时,可以在input组件上按下回车时自动提交表单
上级 3bb6d11e
<template> <template>
<Form v-bind="{ ...$attrs, ...$props }" :class="getFormClass" ref="formElRef" :model="formModel"> <Form
v-bind="{ ...$attrs, ...$props }"
:class="getFormClass"
ref="formElRef"
:model="formModel"
@keypress.enter="handleEnterPress"
>
<Row :style="getRowWrapStyle"> <Row :style="getRowWrapStyle">
<slot name="formHeader"></slot> <slot name="formHeader"></slot>
<template v-for="schema in getSchema" :key="schema.field"> <template v-for="schema in getSchema" :key="schema.field">
...@@ -81,11 +87,9 @@ ...@@ -81,11 +87,9 @@
const { prefixCls } = useDesign('basic-form'); const { prefixCls } = useDesign('basic-form');
// Get the basic configuration of the form // Get the basic configuration of the form
const getProps = computed( const getProps = computed((): FormProps => {
(): FormProps => { return { ...props, ...unref(propsRef) } as FormProps;
return { ...props, ...unref(propsRef) } as FormProps; });
}
);
const getFormClass = computed(() => { const getFormClass = computed(() => {
return [ return [
...@@ -97,12 +101,10 @@ ...@@ -97,12 +101,10 @@
}); });
// Get uniform row style // Get uniform row style
const getRowWrapStyle = computed( const getRowWrapStyle = computed((): CSSProperties => {
(): CSSProperties => { const { baseRowStyle = {} } = unref(getProps);
const { baseRowStyle = {} } = unref(getProps); return baseRowStyle;
return baseRowStyle; });
}
);
const getSchema = computed((): FormSchema[] => { const getSchema = computed((): FormSchema[] => {
const schemas: FormSchema[] = unref(schemaRef) || (unref(getProps).schemas as any); const schemas: FormSchema[] = unref(schemaRef) || (unref(getProps).schemas as any);
...@@ -213,6 +215,17 @@ ...@@ -213,6 +215,17 @@
formModel[key] = value; formModel[key] = value;
} }
function handleEnterPress(e: KeyboardEvent) {
const { autoSubmitOnEnter } = unref(getProps);
if (!autoSubmitOnEnter) return;
if (e.key === 'Enter' && e.target && e.target instanceof HTMLElement) {
const target: HTMLElement = e.target as HTMLElement;
if (target && target.tagName && target.tagName.toUpperCase() == 'INPUT') {
handleSubmit();
}
}
}
const formActionType: Partial<FormActionType> = { const formActionType: Partial<FormActionType> = {
getFieldsValue, getFieldsValue,
setFieldsValue, setFieldsValue,
...@@ -236,6 +249,7 @@ ...@@ -236,6 +249,7 @@
return { return {
handleToggleAdvanced, handleToggleAdvanced,
handleEnterPress,
formModel, formModel,
defaultValueRef, defaultValueRef,
advanceState, advanceState,
......
...@@ -37,6 +37,8 @@ export const basicProps = { ...@@ -37,6 +37,8 @@ export const basicProps = {
type: Object as PropType<Partial<ColEx>>, type: Object as PropType<Partial<ColEx>>,
}, },
autoSetPlaceHolder: propTypes.bool.def(true), autoSetPlaceHolder: propTypes.bool.def(true),
// 在INPUT组件上单击回车时,是否自动提交
autoSubmitOnEnter: propTypes.bool.def(false),
submitOnReset: propTypes.bool, submitOnReset: propTypes.bool,
size: propTypes.oneOf(['default', 'small', 'large']).def('default'), size: propTypes.oneOf(['default', 'small', 'large']).def('default'),
// 禁用表单 // 禁用表单
......
...@@ -83,6 +83,8 @@ export interface FormProps { ...@@ -83,6 +83,8 @@ export interface FormProps {
fieldMapToTime?: FieldMapToTime; fieldMapToTime?: FieldMapToTime;
// Placeholder is set automatically // Placeholder is set automatically
autoSetPlaceHolder?: boolean; autoSetPlaceHolder?: boolean;
// Auto submit on press enter on input
autoSubmitOnEnter?: boolean;
// Check whether the information is added to the label // Check whether the information is added to the label
rulesMessageJoinLabel?: boolean; rulesMessageJoinLabel?: boolean;
// Whether to show collapse and expand buttons // Whether to show collapse and expand buttons
...@@ -125,7 +127,10 @@ export interface FormSchema { ...@@ -125,7 +127,10 @@ export interface FormSchema {
// Auxiliary text // Auxiliary text
subLabel?: string; subLabel?: string;
// Help text on the right side of the text // Help text on the right side of the text
helpMessage?: string | string[] | ((renderCallbackParams: RenderCallbackParams) => string | string[]); helpMessage?:
| string
| string[]
| ((renderCallbackParams: RenderCallbackParams) => string | string[]);
// BaseHelp component props // BaseHelp component props
helpComponentProps?: Partial<HelpComponentProps>; helpComponentProps?: Partial<HelpComponentProps>;
// Label width, if it is passed, the labelCol and WrapperCol configured by itemProps will be invalid // Label width, if it is passed, the labelCol and WrapperCol configured by itemProps will be invalid
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论