mirror of
https://github.com/vbenjs/vue-vben-admin.git
synced 2025-08-26 08:36:19 +08:00
feat(form): add prop autoSubmitOnEnter (#620)
为Form添加autoSubmitOnEnter属性,当设置为true时,可以在input组件上按下回车时自动提交表单
This commit is contained in:
@@ -1,5 +1,11 @@
|
|||||||
<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 @@
|
|||||||
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 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 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 @@
|
|||||||
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 @@
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
handleToggleAdvanced,
|
handleToggleAdvanced,
|
||||||
|
handleEnterPress,
|
||||||
formModel,
|
formModel,
|
||||||
defaultValueRef,
|
defaultValueRef,
|
||||||
advanceState,
|
advanceState,
|
||||||
|
@@ -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 {
|
|||||||
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 {
|
|||||||
// 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
|
||||||
|
Reference in New Issue
Block a user