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