import { type Ref } from 'vue'; import { type MaybeRef, type MaybeRefOrGetter } from '../../utils/utils'; export type { MaybeRef, MaybeRefOrGetter }; /** 请求函数类型 */ export type RequestFunction = (params: P) => Promise; /** 分页配置 */ export interface PaginationConfig { /** 默认页码,默认 1 */ defaultPage?: number; /** 默认每页数量,默认 10 */ defaultPageSize?: number; /** 页码字段名,默认 'page' */ pageKey?: string; /** 每页数量字段名,默认 'pageSize' */ pageSizeKey?: string; } /** 转换结果类型 */ export interface TransformResultData { /** 列表数据 */ list: T[]; /** 总数 */ total: number; } /** Hook 配置选项 */ export interface UseTableRequestOptions { /** 请求参数(响应式) */ params?: MaybeRefOrGetter

; /** 是否立即执行,默认 true */ immediate?: boolean; /** 防抖延迟(毫秒),默认 0(不防抖) */ debounceDelay?: number; /** 分页配置 */ pagination?: PaginationConfig; /** 数据列表字段名,默认空(直接使用 response),支持点号分隔的嵌套路径,如 "data" 或 "data.list" */ dataField?: string; /** 总数字段名,默认空(自动推断),支持点号分隔的嵌套路径,如 "total" 或 "data.total" */ totalField?: string; /** 当前页码字段名,默认空(不修正),支持点号分隔的嵌套路径,如 "page" 或 "data.currentPage" */ currentPageField?: string; /** 请求前转换参数 */ transformParams?: (params: P, pagination: { page: number; pageSize: number; }) => any; /** 请求后转换结果,返回 { list, total } */ transformResult?: (response: R) => TransformResultData; /** 请求成功回调 */ onSuccess?: (data: T[], response: R) => void; /** 请求失败回调 */ onError?: (error: Error) => void; /** 是否开启增量模式(滚动加载),默认 false */ incremental?: boolean; } /** 分页信息 */ export interface PaginationState { /** 当前页码 */ page: number; /** 每页数量 */ pageSize: number; /** 总数 */ total: number; } /** Hook 返回值 */ export interface UseTableRequestReturn { /** 列表数据 */ data: Ref; /** 加载状态 */ loading: Ref; /** 错误信息 */ error: Ref; /** 分页信息 */ pagination: PaginationState; /** 手动触发请求 */ run: () => Promise; /** 翻页 */ onPageChange: (page: number) => Promise; /** 改变每页数量 */ onSizeChange: (size: number) => Promise; /** 刷新数据(增量模式下清空数据并重置页码,普通模式下等同于 run) */ refresh: () => Promise; } /** useTableRequest 全局配置选项 */ export interface UseTableRequestGlobalConfig { /** 是否立即执行,默认 true */ immediate?: boolean; /** 防抖延迟(毫秒),默认 0(不防抖) */ debounceDelay?: number; /** 分页配置 */ pagination?: PaginationConfig; /** 数据列表字段名,默认空(直接使用 response),支持点号分隔的嵌套路径,如 "data" 或 "data.list" */ dataField?: string; /** 总数字段名,默认空(自动推断),支持点号分隔的嵌套路径,如 "total" 或 "data.total" */ totalField?: string; /** 当前页码字段名,默认空(不修正),支持点号分隔的嵌套路径,如 "page" 或 "data.currentPage" */ currentPageField?: string; /** 是否开启增量模式(滚动加载),默认 false */ incremental?: boolean; } /** * 设置 useTableRequest 全局默认配置 * * @param config - 全局配置选项 * * @example * ```ts * import { setTableRequestGlobalConfig } from 'xn-fe-tools' * * // 在应用入口处设置全局默认配置 * setTableRequestGlobalConfig({ * immediate: true, * debounceDelay: 500, * pagination: { * defaultPageSize: 20, * pageKey: 'pageNum', * pageSizeKey: 'size', * }, * }) * ``` */ export declare function setTableRequestGlobalConfig(config: UseTableRequestGlobalConfig): void; /** * 获取当前 useTableRequest 全局配置 * * @returns 当前全局配置的副本 */ export declare function getTableRequestGlobalConfig(): UseTableRequestGlobalConfig; /** * 用于表格请求的 Hook,支持分页、防抖、自动/手动请求 * * @typeParam T - 列表项类型(返回值类型) * @typeParam R - 后端返回结果类型 * @typeParam P - 请求参数类型 * @param requestFn - 请求函数,接收参数并返回 Promise * @param options - 配置选项 * @returns 返回数据、状态和操作方法 * * @example * ```ts * const { data, loading, pagination, run, onPageChange, onSizeChange } = useTableRequest( * (params) => fetchUserList(params), * { * params: computed(() => ({ keyword: search.value })), * immediate: true, * pagination: { * defaultPage: 1, * defaultPageSize: 10, * pageKey: 'page', * pageSizeKey: 'pageSize', * }, * transformParams: (params, pagination) => ({ ...params, ...pagination }), * transformResult: (res) => ({ list: res.data.records, total: res.data.total }), * } * ) * ``` */ export declare function useTableRequest(requestFn: RequestFunction, options?: UseTableRequestOptions): UseTableRequestReturn; //# sourceMappingURL=index.d.ts.map