feat: form compact mode support (#5165)

dev-v5
Netfan 2024-12-17 20:51:17 +08:00 committed by GitHub
parent 181e38733c
commit b22d900e27
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 26 additions and 4 deletions

View File

@ -357,6 +357,13 @@ export interface FormCommonConfig {
* 所有表单项的props * 所有表单项的props
*/ */
componentProps?: ComponentProps; componentProps?: ComponentProps;
/**
* 是否紧凑模式(移除表单底部为显示校验错误信息所预留的空间)。
* 在有设置校验规则的场景下建议不要将其设置为true
* 默认为false。但用作表格的搜索表单时默认为true
* @default false
*/
compact?: boolean;
/** /**
* 所有表单项的控件样式 * 所有表单项的控件样式
*/ */

View File

@ -138,7 +138,11 @@ defineExpose({
<template> <template>
<div <div
:class=" :class="
cn('col-span-full w-full pb-6 text-right', rootProps.actionWrapperClass) cn(
'col-span-full w-full text-right',
rootProps.compact ? 'pb-2' : 'pb-6',
rootProps.actionWrapperClass,
)
" "
:style="queryFormStyle" :style="queryFormStyle"
> >

View File

@ -55,7 +55,7 @@ const values = useFormValues();
const errors = useFieldError(fieldName); const errors = useFieldError(fieldName);
const fieldComponentRef = useTemplateRef<HTMLInputElement>('fieldComponentRef'); const fieldComponentRef = useTemplateRef<HTMLInputElement>('fieldComponentRef');
const formApi = formRenderProps.form; const formApi = formRenderProps.form;
const compact = formRenderProps.compact;
const isInValid = computed(() => errors.value?.length > 0); const isInValid = computed(() => errors.value?.length > 0);
const FieldComponent = computed(() => { const FieldComponent = computed(() => {
@ -281,8 +281,10 @@ function autofocus() {
'form-valid-error': isInValid, 'form-valid-error': isInValid,
'flex-col': isVertical, 'flex-col': isVertical,
'flex-row items-center': !isVertical, 'flex-row items-center': !isVertical,
'pb-6': !compact,
'pb-2': compact,
}" }"
class="flex pb-6" class="flex"
v-bind="$attrs" v-bind="$attrs"
> >
<FormLabel <FormLabel

View File

@ -273,6 +273,10 @@ export interface FormRenderProps<
* 使 * 使
*/ */
commonConfig?: FormCommonConfig; commonConfig?: FormCommonConfig;
/**
*
*/
compact?: boolean;
/** /**
* v-model * v-model
*/ */

View File

@ -68,6 +68,7 @@ const { isMobile } = usePreferences();
const slots = useSlots(); const slots = useSlots();
const [Form, formApi] = useTableForm({ const [Form, formApi] = useTableForm({
compact: true,
handleSubmit: async () => { handleSubmit: async () => {
const formValues = formApi.form.values; const formValues = formApi.form.values;
formApi.setLatestSubmissionValues(toRaw(formValues)); formApi.setLatestSubmissionValues(toRaw(formValues));
@ -284,6 +285,10 @@ watch(
}, },
); );
const isCompactForm = computed(() => {
return formApi.getState()?.compact;
});
onMounted(() => { onMounted(() => {
props.api?.mount?.(gridRef.value, formApi); props.api?.mount?.(gridRef.value, formApi);
init(); init();
@ -338,7 +343,7 @@ onUnmounted(() => {
<div <div
v-if="formOptions" v-if="formOptions"
v-show="showSearchForm !== false" v-show="showSearchForm !== false"
class="relative rounded py-3 pb-4" :class="cn('relative rounded py-3', isCompactForm ? 'pb-6' : 'pb-4')"
> >
<slot name="form"> <slot name="form">
<Form> <Form>