import type { FormInstance } from 'antd'; import type { CSSProperties, ReactElement, ReactNode, DependencyList } from 'react'; export interface FilterItemType { key: string; label?: string; type?: string; /** * @description 共4列 传入1|2|3|4 */ colSpan?: number; /** * @deprecated 不要传入label即可 */ hideLabel?: boolean; /** * 控制是否默认隐藏,但筛选项可见 */ defaultHidden?: boolean; /** * 控制是否隐藏筛选项 */ hidden?: boolean; /** * @description 禁止用户设置隐藏 */ lockVisible?: boolean; extraProps?: Record; renderFormItem?: (form: FormInstance) => ReactElement; initialValue?: any; } export type ActionType = 'submit' | 'reset'; export interface FilterView { title: string; key?: string; value?: T; fields: { key: string; hidden: boolean; }[]; } export interface FilterProps { data?: FilterItemType[]; defaultValue?: T; value?: T; /** * * @param value 表单的值 * @param actionType 通过查询还是重置按钮触发 * @returns */ onChange?: (value: T, actionType: 'submit' | 'reset') => void; onValuesChange?: (changedValues: Partial, allValues: T, form: FormInstance) => void; defaultActiveKeys?: string[]; storageKey?: string; style?: CSSProperties; defaultCollapsed?: boolean; /** * @description 是否简化筛选器,简化版不包含标签以及选项保存 */ simple?: boolean; /** * @description 是否自动生成placeholder * @default false * 根据item.type以及item.label生成,自动注入到extraProps属性里,带有select则是请选择否则就是请输入 */ autoPlaceholder?: boolean; /** * @description 当字段隐藏时,保留字段值并在查询返回,如果不希望选项被隐藏后返回数据还有这个选项值,请设置false * @default true */ preserveFields?: boolean; /** * @description reset行为通过form.resetFields实现,与原先保持一致 * 当前reset行为是通过内部的emptyValue以及defaultValue */ legacyReset?: true; componentOptions?: ComponentOption[]; /** * @description 自动触发过滤的依赖 */ filterDependencies?: DependencyList; /** * @description Form表单的实例,默认会由内部生成,一般情况不需要处理 */ form?: FormInstance; /** * @description 启用列配置,当simple为false的时候,默认启用,优先级比simple高 */ enableFieldsConfig?: boolean; /** * @description 存储 */ storage?: { data?: FilterView[]; /** 不要和data同时传入 */ get?: () => null | Promise[]> | FilterView[]; set?: (payload: { data: FilterView[]; target: FilterView; action: 'delete' | 'set'; }) => Promise | void | FilterView[] | Promise[]>; }; } export interface ComponentOption { type: string; colSpan?: number; render: (item: FilterItemType) => ReactNode; }