feat: form compact mode support (#5165)
							parent
							
								
									181e38733c
								
							
						
					
					
						commit
						b22d900e27
					
				| 
						 | 
				
			
			@ -357,6 +357,13 @@ export interface FormCommonConfig {
 | 
			
		|||
   * 所有表单项的props
 | 
			
		||||
   */
 | 
			
		||||
  componentProps?: ComponentProps;
 | 
			
		||||
  /**
 | 
			
		||||
   * 是否紧凑模式(移除表单底部为显示校验错误信息所预留的空间)。
 | 
			
		||||
   * 在有设置校验规则的场景下,建议不要将其设置为true
 | 
			
		||||
   * 默认为false。但用作表格的搜索表单时,默认为true
 | 
			
		||||
   * @default false
 | 
			
		||||
   */
 | 
			
		||||
  compact?: boolean;
 | 
			
		||||
  /**
 | 
			
		||||
   * 所有表单项的控件样式
 | 
			
		||||
   */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,7 +138,11 @@ defineExpose({
 | 
			
		|||
<template>
 | 
			
		||||
  <div
 | 
			
		||||
    :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"
 | 
			
		||||
  >
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ const values = useFormValues();
 | 
			
		|||
const errors = useFieldError(fieldName);
 | 
			
		||||
const fieldComponentRef = useTemplateRef<HTMLInputElement>('fieldComponentRef');
 | 
			
		||||
const formApi = formRenderProps.form;
 | 
			
		||||
 | 
			
		||||
const compact = formRenderProps.compact;
 | 
			
		||||
const isInValid = computed(() => errors.value?.length > 0);
 | 
			
		||||
 | 
			
		||||
const FieldComponent = computed(() => {
 | 
			
		||||
| 
						 | 
				
			
			@ -281,8 +281,10 @@ function autofocus() {
 | 
			
		|||
        'form-valid-error': isInValid,
 | 
			
		||||
        'flex-col': isVertical,
 | 
			
		||||
        'flex-row items-center': !isVertical,
 | 
			
		||||
        'pb-6': !compact,
 | 
			
		||||
        'pb-2': compact,
 | 
			
		||||
      }"
 | 
			
		||||
      class="flex pb-6"
 | 
			
		||||
      class="flex"
 | 
			
		||||
      v-bind="$attrs"
 | 
			
		||||
    >
 | 
			
		||||
      <FormLabel
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -273,6 +273,10 @@ export interface FormRenderProps<
 | 
			
		|||
   * 表单项通用后备配置,当子项目没配置时使用这里的配置,子项目配置优先级高于此配置
 | 
			
		||||
   */
 | 
			
		||||
  commonConfig?: FormCommonConfig;
 | 
			
		||||
  /**
 | 
			
		||||
   * 紧凑模式(移除表单每一项底部为校验信息预留的空间)
 | 
			
		||||
   */
 | 
			
		||||
  compact?: boolean;
 | 
			
		||||
  /**
 | 
			
		||||
   * 组件v-model事件绑定
 | 
			
		||||
   */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,7 @@ const { isMobile } = usePreferences();
 | 
			
		|||
const slots = useSlots();
 | 
			
		||||
 | 
			
		||||
const [Form, formApi] = useTableForm({
 | 
			
		||||
  compact: true,
 | 
			
		||||
  handleSubmit: async () => {
 | 
			
		||||
    const formValues = formApi.form.values;
 | 
			
		||||
    formApi.setLatestSubmissionValues(toRaw(formValues));
 | 
			
		||||
| 
						 | 
				
			
			@ -284,6 +285,10 @@ watch(
 | 
			
		|||
  },
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const isCompactForm = computed(() => {
 | 
			
		||||
  return formApi.getState()?.compact;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
  props.api?.mount?.(gridRef.value, formApi);
 | 
			
		||||
  init();
 | 
			
		||||
| 
						 | 
				
			
			@ -338,7 +343,7 @@ onUnmounted(() => {
 | 
			
		|||
        <div
 | 
			
		||||
          v-if="formOptions"
 | 
			
		||||
          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">
 | 
			
		||||
            <Form>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue