@flatbiz/antd
Version:
164 lines (160 loc) • 5.86 kB
TypeScript
import { FormProps } from 'antd';
import { ReactNode } from 'react';
declare const PresetDefaultGrid: {
xs: number;
sm: number;
md: number;
lg: number;
xl: number;
xxl: number;
};
export type TBoxBreakpoint = "xs" | "sm" | "md" | "lg" | "xl" | "xxl";
export type Gutter = number | undefined | Partial<Record<TBoxBreakpoint, number>>;
export type GutterParams = Gutter | [
Gutter,
Gutter
];
export interface BoxRowProps {
/**
* 在不同响应尺寸下的元素占位格数
* 应用到所有Col子元素上
*/
defaultGrid?: Partial<typeof PresetDefaultGrid>;
/** 间距 */
gutter?: GutterParams;
/** flex 布局的垂直对齐方式 */
align?: "top" | "middle" | "bottom" | "stretch";
/** flex 布局的水平排列方式 */
justify?: "start" | "end" | "center" | "space-around" | "space-between" | "space-evenly";
/** 尺寸变化回调 */
onBoxBreakpointChange?: (breakpoint: TBoxBreakpoint) => void;
}
export type TFormLayoutPreClassNameProps = {
/**
* label宽度,Form内部所有FormItem label都生效
* ```
* 1. 可设置数值
* 2. 可设置`auto`自适应
* ```
*/
labelWidth?: "auto" | "70" | "80" | "90" | "100" | "110" | "120" | "130" | "140" | "150" | "160" | "170" | "180" | "190" | "200";
/** labelItem 竖直布局 */
labelItemVertical?: boolean;
/** label 对齐方式 */
labelAlign?: "left" | "right";
/** formItem之间竖直间距,默认值:24 */
formItemGap?: "24" | "15" | "8" | "5" | "0";
/**
* className 中可能会包含 preDefinedClassName.form.xx,优先级大于 labelWidth、labelItemVertical、labelAlign、formItemGap
*/
className?: string;
};
export type FormWrapperProps<Values = any> = TFormLayoutPreClassNameProps & FormProps<Values> & {
children: ReactNode;
};
export type EasyFormProps = Omit<FormWrapperProps, "children"> & {
/**
* 定义一行显示几列(当外层宽度尺寸大于 992px(lg) 时,一行显示几列), 默认值:3
* ```
* 1. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响(column=1除外)
* 2. 宽度尺寸定义
* xs: 宽度 < 576px
* sm: 宽度 ≥ 576px
* md: 宽度 ≥ 768px
* lg: 宽度 ≥ 992px
* xl: 宽度 ≥ 1200px
* xxl: 宽度 ≥ 1600px
* 3. 列数尺寸定义
* {
* 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },
* 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },
* 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },
* 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },
* };
* ```
*/
column?: 1 | 2 | 3 | 4;
/**
* 强制定义一行显示几列,不考虑响应式
* ```
* 1. 优先级大于column
* 2. 建议优先使用column配置
* ```
*/
forceColumn?: 1 | 2 | 3 | 4;
/**
* Form显示宽度,可数值、可百分比;在小屏幕尺寸(xs、sm)上无效
*/
width?: number | string;
/** 网格间距 */
gridGutter?: BoxRowProps["gutter"];
children: ReactNode;
/**
* 是否为纯净模式,对EasyForm的子节点不做任何包装处理
*/
isPure?: boolean;
/**
* true: 当前EasyForm组件不使用Antd Form包裹,可在Form、EasyForm、FormWrapper内部使用
*/
nonuseFormWrapper?: boolean;
/**
* 栅格占位格数,最大值:24
* ```
* 1. 当前EasyForm处在 EasyForm 直接子节点中有效,即当前EasyForm在EasyForm栅格中的占位格数;
* 2. 父节点使用属性值,当前节点不使用属性值
* ```
*/
span?: number;
};
/**
* 简单Form布局,可自定义网格布局
* ```
* 1. demo:https://fex.qa.tcshuke.com/docs/admin/main/form/grid
* 2. EasyForm的children列表会进行网格化布局
* 3. 自定义栅格占位格数的4中方式
* 3.1 设置FormItemWrapper、FormItemText组件span属性;
* 3.2 使用 EasyFormItemSpan 包裹children item,设置span属性
* 3.3 使用 <BoxGrid.Col span={24} ></BoxGrid.Col> 包裹,设置响应式属性
* 3.4 设置 EasyForm isPure = true设置纯净模式,对EasyForm的子节点不做任何包装处理
* 4. EasyForm可嵌套使用,嵌套内部的<EasyForm />节点Form相关属性失效,例如属性form、initialValues等都失效
* <EasyForm form={form}>
* ....
* <EasyForm>...</EasyForm>
* ....
* <EasyForm>...</EasyForm>
* ....
* </EasyForm>
* 5. 布局网格以当前组件的宽度来计算的,不是屏幕宽度
* 6. EasyForm 子节点包含 hidden = true 会被忽略
* 7. 通过 column 可定义一行显示几列FormItem
* 8. 通过 labelItemVertical 可定义 formitem 竖直布局
* 9. 通过 formItemGap 可定义 formItem竖直方向间隙
* 10. 通过 forceColumn 可强制定义一行显示几列,不考虑响应式
* 11. 通过 labelWidth 可控制Form内部所有label的宽度(可实现整齐效果)
* 12. 自定义栅格占位格数,见下方`例如`
* 例如
* <EasyForm column={3}>
* <FormItemWrapper name="field1" label="条件1">
* <Input placeholder="请输入" allowClear={true} />
* </FormItemWrapper>
* <!-- !!自定义栅格占位格数第一种方式:可通过使用 BoxGrid.Col 包裹元素来自定义网格占比 -->
* <BoxGrid.Col span={24}>
* <FormItemWrapper name="field5" label="条件5">
* <Input placeholder="请输入" allowClear={true} />
* </FormItemWrapper>
* </BoxGrid.Col>
* <!-- !!自定义栅格占位格数第二种方式:如果为FormItemWrapper组件,可设置span属性 -->
* <FormItemWrapper name="field6" label="条件6" span={24}>
* <Input placeholder="请输入" allowClear={true} />
* </FormItemWrapper>
* <FormItemWrapper noStyle span={24}>
* <Button>按钮</Buttone>
* </FormItemWrapper>
* </EasyForm>
* ```
*/
export declare const EasyForm: {
(props: EasyFormProps): import("react").JSX.Element;
domTypeName: string;
};
export {};