import { InjectionToken } from '@angular/core'; import { Observable } from 'rxjs'; /** * 分页返回字段映射 */ export const NA_PAGINATION_MAPPING = new InjectionToken( 'NA_PAGINATION_MAPPING' ); /** * 分页默认配置 */ export const NA_PAGINATION_DEFAULT = new InjectionToken( 'NA_PAGINATION_DEFAULT' ); /** * 数据返回字段名映射 */ export interface INaPaginationMapping { /** * 分页数据 */ data?: string; /** * 数据总数 */ total?: string; /** * 当前页码 */ pageIndex?: string; /** * 每页展示多少数据 */ pageSize?: string; } export class NaPaginationMapping implements INaPaginationMapping { data = 'data'; total = 'total'; pageIndex = 'pageIndex'; pageSize = 'pageSize'; } /** * 分页 */ export interface INaPagination extends NaPaginationTmp { /** * 是否正在加载数据? */ loading?: (loading: boolean) => void; /** * 当前页码改变时的回调函数 */ pageIndexChangeFn?: (index: number) => (void | any); /** * 查询一页多少条改变时的回调函数 */ pageSizeChangeFn?: (size: number) => (void | any); /** * Http请求参数(参数跟随分页) */ params?: any; /** * 分页查询逻辑 */ execute: () => Observable; /** * 分页查询(保持当前页) * * 参数只存在当前分页 */ doQuery: (...args: any) => void; /** * 分页查询(从第一页开始查询) * * 参数只存在当前分页 */ doReQuery: (...args: any) => void; /** * 重置(从第一页开始查询) * */ doReSet: () => void; } export interface NaPaginationTmp { /** * 分页数据 */ data?: Array; /** * 数据总数 */ total?: number; /** * 当前页码,可双向绑定 */ pageIndex?: number; /** * 每页展示多少数据,可双向绑定 */ pageSize?: number; /** * 页数选择器可选值(指定每页可以显示多少条) */ pageSizeOptions?: number[]; } export class NaPagination implements NaPaginationTmp { data = []; total = 0; pageIndex = 1; pageSize = 10; pageSizeOptions = [10, 20, 30, 50, 100]; } export interface NaPaginationOptions { /** * 当前页码,可双向绑定 */ pageIndex?: number; /** * 每页展示多少数据,可双向绑定 */ pageSize?: number; /** * 页数选择器可选值(指定每页可以显示多少条) */ pageSizeOptions?: number[]; /** * 是否正在加载数据? */ loading?: (loading: boolean) => void; /** * 当前页码改变时的回调函数 */ pageIndexChangeFn?: (index: number) => (void | any); /** * 查询一页多少条改变时的回调函数 */ pageSizeChangeFn?: (size: number) => (void | any); /** * Http请求参数 */ params?: any; /** * 加载数据 */ onLoad?: (body: any) => Observable; }