import { TableProps, ColumnProps } from 'antd/lib/table/interface';
import { QueryPanelOpts } from '../QueryPanel/interface';
import { TreePanelOpts } from '../TreePanel/interface';
import { ColumnTransate } from '../../display/Table/interface';
export interface DataTableColumn<T> extends ColumnProps<T> {
    /**
     * 是否展示 ，默认 true
    */
    show?: boolean;
    /**
     * transate:翻译
     */
    transate?: ColumnTransate;
}
/**
 * -----------------------------------------------------
 * --------------------DataTable-----------------------
 * --------------------------------------------------------
 * */
/**
 * DataTable 的 Props 继承于 antd 的 Table 的 Props
 * 对原先的Table组件进行了一致性的调整和简化。易于统一的规范化使用
 * 说明：默认rowKey 为 `id`
*/
export interface DataTableProps<T> extends TableProps<T> {
    /**
     * 查询条件Panel
    */
    queryPanel?: QueryPanelOpts;
    /**
     * 树选择Panel，支持动态树和静态树，包含 loadData 参数的为动态树
    */
    treePanel?: TreePanelOpts;
    /**
     * 树的宽度，默认250
    */
    treePanelWidth?: number;
    /**
     * 列定义，参考 antd table columns ，扩展 show 属性
    */
    columns: DataTableColumn<T>[];
    /**
     * 是否自动 fetch ，默认为TRUE
     */
    autoLoad?: boolean;
    /**
     * dva的命名空间，
     * 说明， 如果是标准的 list-model 模型， 可以只传递一个 namespace 参数 即 模型在 dva 里面的命名空间
     * 非标准模型依然可以使用旧的方式分别 传入 fetch/total/dataSource
     */
    namespace?: string;
    /**
     * 发动 fetch 的事件字符串，由 {moduleName}/{moudleMethod} 组成
    */
    fetch?: string;
    /**
     * 记录总数
    */
    total?: number;
    /**
     * 每页显示记录数，默认为10
    */
    pageSize?: number;
    /**
     * 是否可以多选，如果为 true，则出现多选框功能
    */
    select?: boolean;
    /**
     * 默认搜索参数
    */
    default?: any;
    /**
     * 序号字段
     * 1. 不传（或者传false） ：不显示 “序号”
     * 2. 传 true 显示 “序号”
     * 3. 传指定标题 ：显示指定标题
     *
     */
    showIndex?: boolean | string;
}
/**
 * -----------------------------------------------------
 * --------------------TableLayout-----------------------
 * --------------------------------------------------------
 * */
/**
 * 过滤器，目前支持单选和多选，通常用于类型选择，状态过滤等
*/
export interface Filter {
    /**
     * 过滤字段的标题
    */
    name: string;
    /**
     * 对应进行查询的字段
    */
    field: string;
    /**
     * 类型，默认是Radio 'raido'|'checkbox'|'daterange'
    */
    type?: string;
    /**
     * 过滤器的选项列表,{name:xx,value:xx}[]
    */
    options?: {
        name: string;
        value: string | number;
    }[];
    /**
     * 是否显示
    */
    show?: boolean;
    /**
     * 自定义ClassName
    */
    className?: string;
    /**
     * 后面后一个过滤器是否与本过滤器显示在同一行
    */
    inline?: boolean;
}
/**
 * 搜索条件，以输入的方式展示
*/
export interface Search {
    /**
     * 搜索的名称
    */
    name: string;
    /**
     * 对应进行查询的字段
    */
    field: string;
}
/**
 * 一项操作,以Button进行展示
*/
export interface Action {
    /**
     * 操作名
    */
    name: string;
    /**
     * 上传
     * 当为 string 时， upload 为上传地址
     * 当为 true 时,  upload 的上传地址为 默认上传地址 ：/api-fileup/fileup/uploadFile
    */
    upload?: string | boolean;
    /**
     * 操作按钮上的图标
    */
    icon?: string;
    /**
     * 按钮类型
    */
    type?: string;
    /**
     * 是否需要选择，必须 table 的 select 为 true 时，才能使用，否则没法激活
    */
    mustSelect?: boolean;
    /**
     * 是否显示，默认为true，用于条件判断
    */
    show?: boolean;
    /**
     * 点击操作，当mustSelect为 true时，方法可以接收一个参数，为当前选中的项
    */
    action?: Function;
}
/**
 * TableLayout 的 Props 继承于 antd 的 Table 的 Props
 * 对原先的Table组件进行了一致性的调整和简化。易于统一的规范化使用
 * 说明：默认rowKey 为 `id`
*/
export interface TableLayoutOpts<T> extends TableProps<T> {
    /**
     * 列定义，参考 antd table columns ，扩展 show 属性
    */
    columns: DataTableColumn<T>[];
    /**
     * dva的命名空间，
     * 说明， 如果是标准的 list-model 模型， 可以只传递一个 namespace 参数 即 模型在 dva 里面的命名空间
     * 非标准模型依然可以使用旧的方式分别 传入 fetch/total/dataSource
     */
    namespace?: string;
    /**
     * 发动 fetch 的事件字符串，由 {moduleName}/{moudleMethod} 组成
    */
    fetch?: string;
    /**
     * 记录总数
    */
    total?: number;
    /**
     * 每页显示记录数，默认为10
    */
    pageSize?: number;
    /**
     * 是否可以多选，如果为 true，则出现多选框功能
    */
    select?: boolean;
    /**
     * 可根据条件进行过滤的字段
    */
    filters?: Filter[];
    /**
     * 可根据条件进行搜索的字段
    */
    searchs?: Search[];
    /**
     * 可以进行的操作
    */
    actions?: Action[];
    /**
     * 默认的排序，如果不传，则按 rowKey 倒序排列
    */
    sort?: {
        order: string;
        by: string;
    };
    /**
     * 默认搜索参数
    */
    default?: any;
    /**
     * 序号字段
     * 1. 不传（或者传false） ：不显示 “序号”
     * 2. 传 true 显示 “序号”
     * 3. 传指定标题 ：显示指定标题
     *
     */
    showIndex?: boolean | string;
}
