feat: form compact mode support (#5165)
parent
181e38733c
commit
b22d900e27
|
@ -357,6 +357,13 @@ export interface FormCommonConfig {
|
||||||
* 所有表单项的props
|
* 所有表单项的props
|
||||||
*/
|
*/
|
||||||
componentProps?: ComponentProps;
|
componentProps?: ComponentProps;
|
||||||
|
/**
|
||||||
|
* 是否紧凑模式(移除表单底部为显示校验错误信息所预留的空间)。
|
||||||
|
* 在有设置校验规则的场景下,建议不要将其设置为true
|
||||||
|
* 默认为false。但用作表格的搜索表单时,默认为true
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
compact?: boolean;
|
||||||
/**
|
/**
|
||||||
* 所有表单项的控件样式
|
* 所有表单项的控件样式
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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"
|
||||||
>
|
>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -273,6 +273,10 @@ export interface FormRenderProps<
|
||||||
* 表单项通用后备配置,当子项目没配置时使用这里的配置,子项目配置优先级高于此配置
|
* 表单项通用后备配置,当子项目没配置时使用这里的配置,子项目配置优先级高于此配置
|
||||||
*/
|
*/
|
||||||
commonConfig?: FormCommonConfig;
|
commonConfig?: FormCommonConfig;
|
||||||
|
/**
|
||||||
|
* 紧凑模式(移除表单每一项底部为校验信息预留的空间)
|
||||||
|
*/
|
||||||
|
compact?: boolean;
|
||||||
/**
|
/**
|
||||||
* 组件v-model事件绑定
|
* 组件v-model事件绑定
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue