import type { Component, VNode, ComponentPublicInstance } from 'vue';
import type { ElDialog, ElButton } from 'element-plus';
declare type ElDialogProps = Partial<typeof ElDialog>;
declare type ElButtonProps = Partial<typeof ElButton>;
declare type NullType = null | undefined;
export declare type TableColumn = {
    prop?: string;
    label?: string;
    render?({ row, $index }: {
        row: any;
        $index: number;
    }): Component | Array<Component>;
    renderHeader?({ column, $index }: {
        column: any;
        $index: number;
    }): Component | Array<Component>;
    [propName: string]: any;
};
export declare type TableDataRow = {
    [propName: string]: any;
    _options?: ITableDataRowOptions;
};
export declare type CustomVNode = VNode & {
    children?: SlotRenderType;
};
export declare type SlotRenderType = {
    render?(): VNode | Array<VNode>;
    header?(): VNode | Array<VNode>;
    default?(): VNode | Array<VNode>;
    renderHeader?(): VNode | Array<VNode>;
};
export declare type CreateCrudBtnConfig = {
    label?: string;
    injectEdit?: boolean;
    injectDelete?: boolean;
};
export declare type AnyObject = {
    [propName: string]: any;
    _options?: TableDataRow['_options'];
};
export declare type FormRef = {
    getFormModel(): AnyObject;
    getFormRef(): {
        resetFields(): void;
        clearValidate(): void;
        validate(callback: (valid: boolean) => void): Promise<(valid: boolean) => void>;
    };
} & Element & ComponentPublicInstance;
export declare type DataFunc = {
    (queryParams: AnyObject): Promise<{
        total: number;
        content: Array<TableDataRow>;
    }> | any;
};
export interface ICrudAdd {
    api(): Promise<any>;
    formComponent: Component;
    successMsg?: string | NullType;
    errorMsg?: string | NullType;
    dialogProps?: ElDialogProps;
}
export interface ICrudEdit {
    api(): Promise<any>;
    detailApi?: Promise<any> | NullType;
    formComponent: Component;
    successMsg?: string | NullType;
    errorMsg?: string | NullType;
    dialogProps?: ElDialogProps;
    buttonProps?: ElButtonProps;
}
export interface ICrudDelete {
    api(): Promise<any>;
    crudSort?: number | NullType;
    confirmText?: string | NullType;
    successMsg?: string | NullType;
    errorMsg?: string | NullType;
    buttonProps?: ElButtonProps;
}
export interface ICrud {
    add?: ICrudAdd;
    edit?: ICrudEdit;
    delete?: ICrudDelete;
}
export interface ITableDataRowOptions {
    uid?: string;
    loadingDelete?: boolean;
    disabledEdit?: boolean;
    disabledDelete?: boolean;
    permission?: {
        edit?: boolean;
        delete?: boolean;
    };
}
export declare class TableDataRowOptions implements ITableDataRowOptions {
    uid: string;
    loadingDelete: boolean;
    disabledEdit: boolean;
    disabledDelete: boolean;
    permission: {
        edit?: boolean | undefined;
        delete?: boolean | undefined;
    } | undefined;
}
export declare class TablePagination {
    pageNum: number;
    pageSize: number;
    total: undefined;
    layout: string;
    background: boolean;
    position: string;
}
export {};
