import { ObservableMap } from 'mobx';
import { AxiosInstance } from 'axios';
import { Config, ConfigKeys, DefaultConfig, getConfig } from '../configure';
import Record, { RecordProps } from './Record';
import Group from './Group';
import Field, { FieldProps, Fields } from './Field';
import EventManager from '../event-manager';
import DataSetSnapshot from './DataSetSnapshot';
import { CheckedStrategy, DataSetExportStatus, DataSetSelection, DataSetStatus, DataToJSON, ExportMode, RecordStatus, SortOrder } from './enum';
import { Lang } from '../locale-context/enum';
import Transport, { TransportProps } from './Transport';
import { FeedBack } from './FeedBack';
import ValidationResult from '../validator/ValidationResult';
import LookupCache from './LookupCache';
export declare type DataSetChildren = {
    [key: string]: DataSet;
};
export declare type Events = {
    [key: string]: Function;
};
export declare function addDataSetField(dataSet: DataSet, name: string): Field;
export declare function initDataSetField(dataSet: DataSet, name: string, fieldProps?: FieldProps): [Field, Map<string, Field> | undefined];
export interface RecordValidationErrors {
    field: Field;
    errors: ValidationResult[];
    valid: boolean;
}
export interface ValidationErrors {
    record: Record;
    errors: RecordValidationErrors[];
    valid: boolean;
}
export interface AllValidationErrors {
    dataSet: ValidationSelfErrors[];
    records: ValidationErrors[];
}
export interface ValidationRule {
    name: string;
    value: number;
    message?: string;
    disabled?: boolean | ((props: {
        dataSet: DataSet;
    }) => boolean);
}
export interface ValidationSelfErrors extends ValidationRule {
    dataSet: DataSet;
    valid: boolean;
}
export interface QueryParams {
    page?: number | undefined;
    pagesize?: number | undefined;
    count?: 'Y' | 'N' | undefined;
    defaultCount?: 'Y' | 'N' | undefined;
    onlyCount?: 'Y' | 'N' | undefined;
    totalCount?: number | undefined;
}
export interface DataSetProps {
    /**
     * 唯一标识
     * @see children
     */
    id?: string;
    /**
     * 对应后台ds的name，用于自动生成约定的submitUrl, queryUrl, tlsUrl，也可用于级联
     * @see children
     */
    name?: string;
    /**
     * 主键字段名，一般用作级联行表的查询字段
     */
    primaryKey?: string;
    /**
     * 语言
     */
    lang?: Lang;
    /**
     * 字段组
     */
    fields?: FieldProps[];
    /**
     * 查询字段组
     */
    queryFields?: FieldProps[];
    /**
     * 记录动态属性
     */
    record?: RecordProps;
    /**
     * 事件
     */
    events?: Events;
    /**
     * 初始化数据
     */
    data?: object[];
    /**
     * 初始化后自动查询
     * @default false
     */
    autoQuery?: boolean;
    /**
     * 提交成功后响应的数据不符合回写条件时自动查询
     * @default true
     */
    autoQueryAfterSubmit?: boolean;
    /**
     * 初始化时，如果没有记录且autoQuery为false，则自动创建记录
     * @default false;
     */
    autoCreate?: boolean;
    /**
     * 查询时通知后端是否自动统计总数， 用于分页
     * 当设为 false 时， 查询的参数默认会带上count=N的参数（通过 configure 设置默认 autoCount 属性时，参数为defaultCount=N，用于区分全局设置和自定义设置），参数名和值可以通过全局配置 generatePageQuery 设置
     * 当查询结果中 countKey 对应的值是 Y 时，会发起计数查询的请求，请求地址同 read 的地址， 请求参数会带上 onlyCount=Y 的参数，参数名和值可以通过全局配置 generatePageQuery 设置
     * @default true;
     */
    autoCount?: boolean;
    /**
     * 自动定位到第一条
     * @default true;
     */
    autoLocateFirst?: boolean;
    /**
     * 自动定位到新建记录
     * @default true;
     */
    autoLocateAfterCreate?: boolean;
    /**
     * 当前记录被删除时自动定位其他记录
     * @default true;
     */
    autoLocateAfterRemove?: boolean;
    /**
     * 查询时是否校验查询字段或查询数据集
     * @default false;
     */
    validateBeforeQuery?: boolean;
    /**
     * 始终校验全部数据
     * @default false;
     */
    forceValidate?: boolean;
    /**
     * 选择的模式
     * @default "multiple"
     */
    selection?: DataSetSelection | false;
    /**
     * 查询前，当有记录更改过时，是否警告提示
     * @default true
     */
    modifiedCheck?: boolean;
    /**
     * 查询前，当有记录更改过时， 提示信息或弹窗的属性 modifiedCheckMessage
     * @default
     */
    modifiedCheckMessage?: any;
    /**
     * 分页大小
     * @default 10
     */
    pageSize?: number;
    /**
     * 严格分页大小
     * @default true
     */
    strictPageSize?: boolean;
    /**
     * 前端分页、后端分页还是不分页
     */
    paging?: boolean | 'server';
    /**
     * 查询返回的json中对应的数据的key
     * @default "rows"
     */
    dataKey?: string;
    /**
     * 查询返回的json中对应的总数的key
     * @default "total"
     */
    totalKey?: string;
    /**
     * 查询返回的json中对应是否要发起异步计数的key
     * @default "needCountFlag"
     */
    countKey?: string;
    /**
     * 查询条件数据源
     */
    queryDataSet?: DataSet;
    /**
     * 查询参数
     */
    queryParameter?: object;
    /**
     * 查询请求的url
     */
    queryUrl?: string;
    /**
     * 记录提交请求的url
     */
    submitUrl?: string;
    /**
     * 多语言查询请求的url
     */
    tlsUrl?: string;
    /**
     * 远程校验查询请求的url。如唯一性校验。
     */
    validateUrl?: string;
    /**
     * 导出请求的url
     */
    exportUrl?: string;
    /**
     * 导出模式
     */
    exportMode?: ExportMode;
    /**
     * 自定义CRUD的请求配置
     */
    transport?: TransportProps;
    /**
     * 查询和提交数据的反馈配置
     */
    feedback?: FeedBack;
    /**
     * 级联行数据集, 当为数组时，数组成员必须是有name属性的DataSet
     * @example
     * { name_1: 'ds-id-1', name_2: 'ds-id-2' }
     * { name_1: ds1, name_2: ds2 }
     * [ds1, ds2]
     */
    children?: {
        [key: string]: string | DataSet;
    } | DataSet[];
    /**
     * 树形数据当前节点 id 字段名，与 parentField 组合使用。
     * 适用于平铺数据；渲染性能相对 childrenField 比较差；变更节点层级可直接修改 idField 和 parentField 对应的值
     */
    idField?: string;
    /**
     * 树形数据当前父节点 id 字段名，与 idField 组合使用。
     * 适用于平铺数据；变更节点层级可直接修改 idField 和 parentField 对应的值
     */
    parentField?: string;
    /**
     * 树形数据子数据集字段名， 如果要异步加载子节点需设置 idField 和 parentField 或者使用 appendData 方法。
     * 适用于树形数据；变更节点层级需要操作 record.parent 和 record.children
     */
    childrenField?: string;
    /**
     * 树形数据标记节点是否展开的字段名
     */
    expandField?: string;
    /**
     * 树形数据标记节点是否为选中的字段名，在展开按钮后面会显示checkbox
     */
    checkField?: string;
    /**
     * 树形数据节点选中状态是否独自控制（父子节点选中状态不再关联）
     */
    treeCheckStrictly?: boolean;
    /**
     * 缓存选中记录，使切换分页时仍保留选中状态。
     * 当设置了primaryKey或有字段设置了unique才起作用。
     */
    cacheSelection?: boolean;
    /**
     * 缓存变更记录，使切换分页时仍保留变更数据。
     * 当设置了primaryKey或有字段设置了unique才起作用。
     */
    cacheModified?: boolean;
    /**
     * 覆盖默认axios
     */
    axios?: AxiosInstance;
    /**
     * 数据转为json的方式
     * dirty - 只转换变更的数据，包括本身无变更但级联有变更的数据
     * dirty-field - 只转数据中变更了的字段（包括主键和unique以及ignore为never的字段），包括本身无变更但级联有变更的数据
     * selected - 只转换选中的数据，无关数据的变更状态
     * all - 转换所有数据
     * normal - 转换所有数据，且不会带上__status, __id等附加字段
     * dirty-self - 同dirty， 但不转换级联数据
     * dirty-field-self - 同dirty-field， 但不转换级联数据
     * selected-self - 同selected， 但不转换级联数据
     * all-self - 同all， 但不转换级联数据
     * normal-self - 同normal， 但不转换级联数据
     * @default dirty
     */
    dataToJSON?: DataToJSON;
    /**
     * 级联查询参数
     */
    cascadeParams?: (parent: Record, primaryKey?: string) => object;
    /**
     * 组合列排序查询
     */
    combineSort?: boolean;
    /**
     * 树形选择策略
     */
    selectionStrategy?: CheckedStrategy;
    status?: DataSetStatus;
    /**
     * dataSet校验规则
     */
    validationRules?: ValidationRule[];
}
export declare type DataSetContext = {
    getConfig: typeof getConfig;
};
export default class DataSet extends EventManager {
    static defaultProps: DataSetProps;
    id?: string;
    children: DataSetChildren;
    private prepareForReport?;
    get queryParameter(): object;
    set queryParameter(queryParameter: object);
    private pending;
    performance: {
        url?: string | undefined;
        timing: {
            fetchStart: number;
            fetchEnd: number;
            loadStart: number;
            loadEnd: number;
        };
    };
    originalData: Record[];
    resetInBatch: boolean;
    validating: boolean;
    context?: DataSetContext | undefined;
    lookupCaches?: ObservableMap<string, LookupCache>;
    selectionStrategy?: CheckedStrategy;
    parent?: DataSet;
    name?: string;
    parentName?: string;
    records: Record[];
    fields: Fields;
    props: DataSetProps;
    pageSize: number;
    combineSort?: boolean;
    /**
     * 多列排序保存排序字段顺序(内部使用)
     */
    combineSortFieldNames?: ObservableMap<string, SortOrder>;
    get totalCount(): number;
    set totalCount(totalCount: number);
    private get realTotalCount();
    status: DataSetStatus;
    counting?: Promise<any>;
    exportStatus: DataSetExportStatus | undefined;
    exportProgress: number;
    currentPage: number;
    selection: DataSetSelection | false;
    get cachedSelected(): Record[];
    set cachedSelected(cachedSelected: Record[]);
    get cachedUnSelected(): Record[];
    get cachedDirtyRecords(): [Record[], Record[], Record[]];
    get cachedCreated(): Record[];
    get cachedUpdated(): Record[];
    get cachedDestroyed(): Record[];
    get cachedModified(): Record[];
    set cachedModified(cachedModified: Record[]);
    dataToJSON: DataToJSON;
    state: ObservableMap<string, any>;
    validationSelfErrors: ValidationSelfErrors[] | undefined;
    $needToSortFields?: boolean;
    get isAllPageSelection(): boolean;
    get cascadeRecords(): Record[];
    get axios(): AxiosInstance;
    get dataKey(): string;
    get totalKey(): string;
    get countKey(): string;
    get lang(): Lang;
    set lang(lang: Lang);
    get queryDataSet(): DataSet | undefined;
    /**
     * 设置查询的DataSet.
     * @param {DataSet} ds DataSet.
     */
    set queryDataSet(ds: DataSet | undefined);
    get queryUrl(): string | undefined;
    /**
     * 设置提交的Url.
     * @param {String} url 提交的Url.
     */
    set queryUrl(url: string | undefined);
    get submitUrl(): string | undefined;
    /**
     * 设置查询的Url.
     * @param {String} url 查询的Url.
     */
    set submitUrl(url: string | undefined);
    get tlsUrl(): string | undefined;
    /**
     * 设置多语言的Url.
     * @param {String} url 多语言的Url.
     */
    set tlsUrl(url: string | undefined);
    get validateUrl(): string | undefined;
    /**
     * 设置远程校验查询请求的url.
     * @param {String} url 远程校验查询请求的url.
     */
    set validateUrl(url: string | undefined);
    get exportUrl(): string | undefined;
    /**
     * 设置导出请求的url.
     * @param {String} url 远程校验查询请求的url.
     */
    set exportUrl(url: string | undefined);
    /**
     * 服务端导出还是客户端导出
     */
    get exportMode(): ExportMode;
    set transport(transport: Transport);
    get transport(): Transport;
    get feedback(): FeedBack;
    get data(): Record[];
    set data(records: Record[]);
    get dirtyRecords(): [Record[], Record[], Record[]];
    /**
     * 获取新建的记录集
     * @return 记录集
     */
    get created(): Record[];
    /**
     * 获取变更的记录集
     * @return 记录集
     */
    get updated(): Record[];
    /**
     * 获取删除的记录集
     * @return 记录集
     */
    get destroyed(): Record[];
    /**
     * 获取选中的记录集
     * @return 记录集
     */
    get selected(): Record[];
    /**
     * 获取未选中的记录集， 在 isAllPageSelection 为 true 时有效
     * @return 记录集
     */
    get unSelected(): Record[];
    get currentSelected(): Record[];
    get currentUnSelected(): Record[];
    get treeSelected(): Record[];
    get totalPage(): number;
    get currentIndex(): number;
    set currentIndex(index: number);
    /**
     * 记录数
     */
    get length(): number;
    get hasChildren(): boolean;
    get treeRecords(): Record[];
    get treeData(): Record[];
    get paging(): boolean | 'server';
    set paging(paging: boolean | 'server');
    get groups(): string[];
    get groupedRecords(): Group[];
    get groupedTreeRecords(): Group[];
    /**
     * 获取当前索引的记录
     * @return record 记录
     */
    get current(): Record | undefined;
    /**
     * 将记录设定为当前索引
     * @param record 记录
     */
    set current(record: Record | undefined);
    get uniqueKeys(): string[] | undefined;
    get cacheKeys(): string[] | undefined;
    get cacheSelectionKeys(): string[] | undefined;
    get cacheModifiedKeys(): string[] | undefined;
    cachedRecords: Record[];
    /**
     * 获取所有记录包括缓存的选择记录
     * @param index 索引
     * @returns {Record}
     */
    get all(): Record[];
    get dirty(): boolean;
    private inBatchSelection;
    private syncChildrenRemote;
    constructor(props?: DataSetProps, context?: DataSetContext);
    processListener(): void;
    destroy(): void;
    setState(item: string | object, value?: any): DataSet;
    getState(key: string): any;
    snapshot(): DataSetSnapshot;
    restore(snapshot: DataSetSnapshot): DataSet;
    setAllPageSelection(enable: boolean): void;
    toData(): object[];
    /**
     * 对应参数后续会废弃
     * @param isSelected
     * @param noCascade
     */
    toJSONData(isSelected?: boolean, noCascade?: boolean): object[];
    /**
     * 等待选中或者所有记录准备就绪
     * @returns Promise
     */
    ready(_isSelect?: boolean): Promise<any>;
    /**
     * 查询记录
     * @param page 页码
     * @param params 查询参数
     * @param cache 是否保留 cachedRecords
     * @return Promise
     */
    query(page?: number, params?: object, cache?: boolean): Promise<any>;
    /**
     * 查询更多记录，查询到的结果会拼接到原有数据之后
     * @param page 页码
     * @param params 查询参数
     * @return Promise
     */
    queryMore(page?: number, params?: object): Promise<any>;
    queryMoreChild(parent: Record, page?: number, params?: object): Promise<any>;
    doQuery(page: any, params?: object, cache?: boolean, paging?: boolean): Promise<any>;
    doQueryMore(page: any, params?: object): Promise<any>;
    doQueryMoreChild(parent: Record, page: any, params?: object): Promise<any>;
    /**
     * TODO 参数废弃
     * 将数据集中的增删改的记录进行远程提交
     * @param isSelect 如果为true，则只提交选中记录
     * @param noCascade 如果为true，则不提交级联数据
     * @return Promise
     */
    submit(isSelect?: boolean, noCascade?: boolean): Promise<any>;
    /**
     * 强制将数据集中的增删改的记录进行远程提交, 绕过校验
     * @return Promise
     */
    forceSubmit(): Promise<any>;
    /**
     * 导出数据
     * @param object columns 导出的列
     * @param number exportQuantity 导出数量
     */
    export(columns?: any, exportQuantity?: number): Promise<void | any[]>;
    /**
     * 可以把json数组通过ds配置转化成可以直接浏览的数据信息
     * @param result 需要转化内容
     * @param columnsExport 表头信息
     */
    displayDataTransform(result: any[], columnsExport: any): any[];
    /**
     * 客户端导出方法
     * @param data 表头数据
     * @param quantity 输入一次导出数量
     * @param isFile 是否导出为文件
     */
    private doClientExport;
    /**
     * 重置更改
     */
    reset(): DataSet;
    /**
     * 定位到指定页码，如果paging为true或`server`，则做远程查询，约定当为Tree 状态的server时候 跳转到下一页也就是index为当前的index加上1
     * @param page 页码
     * @return Promise
     */
    page(page: number): Promise<any>;
    /**
     * 变更检查，当有变更时会弹确认框
     * @param message 提示信息或者是confirm的参数
     * @param dataSet 触发查询数据源
     * @param source 修改提示信息来源 查询条：'query' 翻页： undefined
     * @return Promise
     */
    modifiedCheck(message?: any, dataSet?: DataSet, source?: string): Promise<boolean>;
    /**
     * 定位记录
     * @param index 索引
     * @return Promise
     */
    locate(index: number): Promise<Record | undefined>;
    /**
     * 定位到第一条记录
     * @return Promise
     */
    first(): Promise<Record | undefined>;
    /**
     * 定位到最后一条记录
     * @return Promise
     */
    last(): Promise<Record | undefined>;
    /**
     * 定位到当前记录的上一条记录
     * 若当前页中当前记录为第一条记录且有上一页，则会查询上一页并定位到上一页的最后一条记录
     * @return Promise
     */
    pre(): Promise<Record | undefined>;
    /**
     * 定位到当前记录的下一条记录
     * 若当前页中当前记录为最后一条记录且有下一页，则会查询下一页并定位到下一页的第一条记录
     * @return Promise
     */
    next(): Promise<Record | undefined>;
    /**
     * 定位到首页
     * @return Promise
     */
    firstPage(): Promise<any>;
    /**
     * 定位到上一页
     * @return Promise
     */
    prePage(): Promise<any>;
    /**
     * 定位到下一页
     * @return Promise
     */
    nextPage(): Promise<any>;
    /**
     * 定位到尾页
     * @return Promise
     */
    lastPage(): Promise<any>;
    /**
     * 创建一条记录
     * @param data 数据对象
     * @param dataIndex 记录所在的索引
     * @return 新建的记录
     */
    create(data?: object, dataIndex?: number): Record;
    /**
     * 立即删除记录
     * @param records 记录或者记录数组，默认当前记录
     * @param confirmMessage 提示信息或弹窗的属性
     * @return Promise
     */
    delete(records?: Record | Record[], confirmMessage?: any): Promise<any>;
    /**
     * 临时删除记录
     * @param records 记录或者记录数组
     * @param locate 是否需要进行定位操作
     */
    remove(records?: Record | Record[], forceRemove?: boolean, locate?: boolean): void;
    /**
     * 临时删除所有记录
     */
    removeAll(forceRemove?: boolean): void;
    /**
     * 删除所有记录
     * @param confirmMessage 提示信息或弹窗的属性
     */
    deleteAll(confirmMessage?: any): Promise<any>;
    /**
     * 将若干数据记录插入记录堆栈顶部
     * @param records 数据集
     * @return 堆栈数量
     */
    push(...records: Record[]): number;
    /**
     * 将若干数据记录插入记录堆栈底部
     * @param records 数据集
     * @return 堆栈数量
     */
    unshift(...records: Record[]): number;
    /**
     * 从记录堆栈顶部获取记录
     * @return 记录
     */
    pop(): Record | undefined;
    /**
     * 从记录堆栈底部获取记录
     * @return 记录
     */
    shift(): Record | undefined;
    /**
     * 删除指定索引的若干记录，并可插入若干新记录
     * @param from 索引开始的位置
     * @default 0
     * @param deleteCount 删除的数量
     * @default 0
     * @param records 插入的若干新记录
     * @return 被删除的记录集
     */
    splice(from: number, deleteCount: number, ...items: Record[]): (Record | undefined)[];
    /**
     * 切换记录的顺序
     */
    move(from: number, to: number): void;
    /**
     * 截取指定索引范围的记录集，不改变原记录堆栈
     * @param start 开始索引
     * @default 0
     * @param end 结束索引
     * @default 记录堆栈长度
     * @return 被删除的记录集
     */
    slice(start?: number, end?: number): Record[];
    /**
     * 获取记录所在的索引
     * @param record 记录
     * @param fromIndex 开始检索的索引
     * @return 索引
     */
    indexOf(record: Record, fromIndex?: number): number;
    /**
     * 根据函数查找记录
     * @param fn 查询函数
     * @returns 记录
     */
    find(fn: (record: Record, index: number, array: Record[]) => boolean): Record | undefined;
    /**
     * 根据函数查找记录所在的索引
     * @param fn 查询函数
     * @returns 索引
     */
    findIndex(fn: (record: Record, index: number, array: Record[]) => boolean): number;
    /**
     * 根据函数遍历
     * @param fn 遍历函数
     * @param thisArg this对象
     */
    forEach(fn: (record: Record, index: number, array: Record[]) => void, thisArg?: any): void;
    /**
     * 根据函数遍历并输出新数组
     * @param fn 遍历函数
     * @param thisArg this对象
     * @returns 输出新数组
     */
    map<U>(fn: (record: Record, index: number, array: Record[]) => U, thisArg?: any): U[];
    /**
     * 根据函数遍历，当有返回值为true时，输出true
     * @param fn 遍历函数
     * @param thisArg this对象
     * @returns boolean
     */
    some(fn: (record: Record, index: number, array: Record[]) => boolean, thisArg?: any): boolean;
    /**
     * 根据函数遍历，当有返回值为false时，输出false
     * @param fn 遍历函数
     * @param thisArg this对象
     * @returns boolean
     */
    every(fn: (record: Record, index: number, array: Record[]) => boolean, thisArg?: any): boolean;
    /**
     * 根据函数过滤并返回记录集
     * @param fn 过滤函数
     * @param thisArg this对象
     * @returns {Record[]}
     */
    filter(fn: (record: Record, index: number, array: Record[]) => boolean, thisArg?: any): Record[];
    /**
     * 为数组中的所有元素调用指定的回调函数。 回调函数的返回值是累计结果，并在下次调用回调函数时作为参数提供。
     * @param fn 累计函数
     * @param initialValue 初始值
     * @returns {U}
     */
    reduce<U>(fn: (previousValue: U, record: Record, index: number, array: Record[]) => U, initialValue: U): U;
    /**
     * 按降序调用数组中所有元素的指定回调函数。 回调函数的返回值是累计结果，并在下次调用回调函数时作为参数提供。
     * @param fn 累计函数
     * @param initialValue 初始值
     * @returns {U}
     */
    reduceRight<U>(fn: (previousValue: U, record: Record, index: number, array: Record[]) => U, initialValue: U): U;
    /**
     * 反转记录的顺序。
     */
    reverse(): Record[];
    /**
     * 服务端排序
     *
     * @param sortInfo 字段名 或 有顺序的字段列表
     */
    sort(sortInfo: string | Map<string, SortOrder>): void;
    /**
     * 选中记录
     * @param recordOrIndex 记录或记录索引
     */
    select(recordOrIndex: Record | number): void;
    /**
     * 取消选中记录
     * @param recordOrIndex 记录或记录索引
     */
    unSelect(recordOrIndex: Record | number): void;
    /**
     * 全选
     */
    selectAll(filter?: (record: Record) => boolean): void;
    /**
     * 取消全选
     */
    unSelectAll(): void;
    /**
     * 批量勾选
     */
    batchSelect(recordOrId: (Record | number)[]): void;
    /**
     * 批量取消勾选
     */
    batchUnSelect(recordOrId: (Record | number)[]): void;
    treeSelect(record: Record): void;
    treeUnSelect(record: Record): void;
    clearCachedRecords(): void;
    clearCachedSelected(): void;
    setCachedSelected(cachedSelected: Record[]): void;
    setCachedCreated(cachedCreated: Record[]): void;
    setCachedUpdated(cachedUpdated: Record[]): void;
    setCachedDestroyed(cachedDestroyed: Record[]): void;
    clearCachedModified(): void;
    setCachedModified(cachedModified: Record[]): void;
    /**
     * 获取指定索引的记录
     * @param index 索引
     * @returns {Record}
     */
    get(index: number): Record | undefined;
    /**
     * 从树形数据中获取指定索引的根节点记录
     * @param index 索引
     * @returns {Record}
     */
    getFromTree(index: number): Record | undefined;
    /**
     * 判断是否有新增、变更或者删除的记录
     * @deprecated
     * @return true | false
     */
    isModified(): boolean;
    /**
     * 获取指定分页的记录集
     * @param page 如果page为空或者paging为server，则获取当前分页的记录集
     * @return 记录集
     */
    /**
     * 根据记录ID查找记录
     * @param id 记录ID
     * @return 记录
     */
    findRecordById(id: number | string): Record | undefined;
    /**
     * 清除校验结果
     */
    clearValidationError(): void;
    /**
     * 校验数据记录是否有效 对应参数后续会废弃
     * @param isSelected 是否只校验选中记录
     * @param noCascade 是否级联校验
     * @return true | false
     */
    validate(isSelected?: boolean, noCascade?: boolean): Promise<boolean>;
    /**
     * 校验dataSet是否有效
     * @return true | false
     */
    validateSelf(): boolean;
    reportValidityImmediately(valid: boolean, errors?: ValidationErrors[], fromField?: boolean): void;
    reportSelfValidityImmediately(valid: boolean, errors?: ValidationSelfErrors[]): void;
    reportValidity(result: ValidationErrors, fromField?: boolean): void;
    getValidationErrors(): ValidationErrors[];
    getValidationSelfErrors(): ValidationSelfErrors[];
    private getValidationSelfError;
    getAllValidationErrors(): AllValidationErrors;
    /**
     * 根据字段名获取字段
     * @param fieldName 字段名
     * @returns 字段
     */
    getField(fieldName?: string): Field | undefined;
    /**
     * 获取分组字段名
     * @returns 字段名列表
     */
    getGroups(): string[];
    initFields(fieldProps: FieldProps[]): [string, Field][];
    addField(name: string, fieldProps?: FieldProps): Field;
    commitData(allData: any[], total?: number, onlyDelete?: boolean): DataSet;
    /**
     * 数据集头行级联绑定
     * @param ds 头数据集
     * @param name 头数据集字段名
     */
    bind(ds: DataSet, name: string): void;
    /**
     * 设置查询的参数.
     * @param {string} para 参数名.
     * @param {any} value 参数值.
     */
    setQueryParameter(para: string, value: any): void;
    /**
     * 获取查询的参数.
     * @param {string} para 参数名.
     * @return {any} 参数值.
     */
    getQueryParameter(para: string): any;
    appendData(allData?: (object | Record)[], parent?: Record): DataSet;
    loadData(allData?: (object | Record)[], total?: number, cache?: boolean): DataSet;
    processData(allData: (object | Record)[], status?: RecordStatus, parent?: Record): Record[];
    private deleteRecord;
    private findInAllPage;
    private getIndexInCurrentPage;
    private transferRecords;
    private initChildren;
    private initQueryDataSet;
    private initEvents;
    private loadDataFromResponse;
    private initCombineSort;
    private appendDataFromResponse;
    private write;
    private read;
    private count;
    private storeRecords;
    releaseCachedRecords(cache?: boolean): void;
    releaseCachedModified(): void;
    releaseCachedSelected(): void;
    private changeStatus;
    private changeSubmitStatus;
    private handleCascade;
    private handleLoadSuccess;
    private handleLoadFail;
    private handleSubmitSuccess;
    private handleSubmitFail;
    private syncChildren;
    private syncChild;
    private checkReadable;
    /**
     * page相关请求设置
     * @param page 在那个页面, 小于0时不分页
     * @param pageSizeInner 页面大小
     * @param onlyCount 只做计数
     */
    private generatePageQueryString;
    private generateOrderQueryString;
    /**
     * 返回configure 配置的值
     * @param page 在那个页面, 小于0时不分页
     * @param pageSizeInner 页面大小
     * @param onlyCount 只做计数
     */
    private generateQueryString;
    private getParentParams;
    private generateQueryParameter;
    getConfig<T extends ConfigKeys>(key: T): T extends keyof DefaultConfig ? DefaultConfig[T] : Config[T];
}
