/// <reference types="react" />
import { TableProps, ColumnProps } from 'antd/lib/table/interface';
import { ButtonType } from 'antd/lib/button';
export interface Field {
    /**
     * 字段名称
     */
    field: string;
    /**
     * 字段标签
     */
    label: string;
    /**
     * 默认为1，最多为3，超过3按3算，小于1 按1算，
     * 可以参考 antd Descriptions / DescriptionItem 里面文档里面的 span 的用法
     *  */
    span?: number;
    /**
     * 字段类型，目前支持
     * text                文本输入（默认）
     * number               文本输入（数字）
     * autocomplete          文本输入（自动完成）
     * select               普通选择器
     * multiselect          多项选择器
     * dictselect           字典选择器（必须指定字典ID）
     * treeselect           静态树选择器（暂不支持动态树）
     * radio                单选框（强㓡使用外置LABLE）
     * checkbox             复选框（强制使用外围LABEL）
     * datetime             时间（如 2010-06-25 12:00:00）
     * date                 日期 (如 2010-06-25)
     * month                月份 (如 2010-06-01) 返回选择月份的首日
     * timerange            时间区间
     * daterange            日期区间
     *
     * 支持中：
     * radiomore            单选，可自定义更多
     * switch               双状态切换
     * sider                区间划动
    */
    type?: 'text' | 'number' | 'autocomplete' | 'select' | 'multiselect' | 'treeselect' | 'radio' | 'radiomore' | 'checkbox' | 'datetime' | 'date' | 'month' | 'timerange' | 'daterange';
    /**
     * 是否展示
     */
    show?: boolean;
    /**
     * 输入框里面的提示
     */
    placeholder?: string;
    /**
     * 是否可以清除 支持 text
     *   */
    allowClear?: boolean;
    /**
     * 带图标的文本框，说明：仅支持 text类型
     */
    icon?: string;
    /**
     * select / multiselect / radio / checkbox 时，需要带的选项
     * 使用方法1: 传入一个数组 ，以 {name:string,value:string|number} 的结构传入
     * 使用方法2: 传入一个对象， 以 data: any[] 传入选项数据，再指定 name : stirng, value ： string 来指定需要显示在页面的名称和选中后的取值
     */
    options?: {
        name: string;
        value: string | number;
    }[] | {
        data: any[];
        nameField: string;
        valueField: string;
    };
    /**
     * 扩展属性,具体使用方法后续说明
     *  */
    config?: any;
}
export interface Button {
    /**
     * 按钮文本
     */
    label: string;
    /**
     * 按钮ICON
     */
    icon?: string;
    /**
     * 按钮样式，参考 Antd Button
     */
    type?: ButtonType;
    /**
     * 是否展示 ，默认 true
    */
    show?: boolean;
    /**
     * 至少选中一条才激活按钮，默认为false
     * 需要与 VTable 里面的 select 结合使用
     */
    mustSelect?: boolean;
    /**
     * 上传地址（设置后，此按钮将变成上传按钮，暂不支持），
     * 1. 默认为 false: 不上传
     * 2. 传 true 时，上传到通用上传接口 /api-fileupload/upload
     * 3. 传字符串时，传到指定的接口
     */
    upload?: boolean | string;
    /**
     * 扩展属性,具体使用方法后续说明
     *  */
    config?: any;
    /**
     * 操作提示
     */
    confirm?: string;
    /**
     * 点击事件
     * */
    onClick: (ids?: string[], objs?: any[], param?: any) => void;
}
export interface SelectBarOpts {
    /**
     * 标题:只能是文字
     * 1. 当类型为 tree，且启动搜索时，标题为一个输入框里面的 placeHolder
     */
    title: string;
    /**
     * 额外操作（标题后方）
     */
    actions?: React.ReactNode;
    /**
     * tree: 静态树，必须传值
     * organization: 组织机构（用户权限可见）
     * organizationroot：组织机构 （全）
     * list: 列表
     * custom： 自定义
     *
     * 后续支持：
     * dynamictree: 动态树
     * collapse: 折叠选框
     * chart: vap 内置的 chart 图形, 比如 bar, pie 等等
     * echart: 自定义 echart 配置项
     */
    type: 'organization' | 'organizationroot' | 'tree' | 'list' | 'chart' | 'custom';
    /**
     * 宽度，默认为250
     */
    width?: number;
    /**
     * 自定义样式
     */
    style?: React.CSSProperties;
    /**
     * 选中中后事件
     * 1：如果是 VTable 里面使用，可以返回一个搜索对象
     * 2: 如果是自定义，请不要返回
     */
    onSelect: (item: any, parent?: any) => any;
    /**
     * 扩展属性
     *  */
    config?: any;
}
export interface SearchBarOpts {
    /**
     * Label 是否在标签外面，默认为 false
     * 说明：某些组件不支持：
     * checkbox,radio,等
     * 如果包含了这些组件，会强制转换为 true
     */
    fieldOutside?: boolean;
    /**
     * 1. 默认为250
     * 2. 可以传1个数字 ，也可以传2个数字组成的一个数组
     * 3. 当传一个数字时，代表每个Field的总体宽度，如果是 outSide 模式，则Label宽度为80（容纳5个汉字）
     * 4. 如果想手动指定label宽度，则传入两个数字的数组，分别 为 [总宽度, label宽度]
     */
    fieldWidth?: number | [number, number];
    /**
     * 默认参数
     */
    default?: any;
    /**
     * 搜索参数
     */
    fields?: Field[];
    /**
     * 搜索参数支持的列，最多支持4，默认为3
     */
    cols?: 1 | 2 | 3 | 4;
    /**
     * 操作按钮列表
     *
     * */
    buttons?: (Button | null)[];
}
export interface InnerSearchBarOpts extends SearchBarOpts {
    /**
     * 触发搜索时调用
     */
    onSearch?: (param: any) => void;
    /**
     * 选中的列ID
     */
    selectedRowKeys?: string[];
    /**
     * 选中的对象
     */
    selectObjects?: any[];
    /**
     * 展开回调，仅在表格里面使用
     */
    onExpands?: () => void;
    /**
     * 数据表请求参数
     */
    param?: any;
}
export interface VTableColumn extends ColumnProps<any> {
    /**
     * 是否展示 ，默认 true
    */
    show?: boolean;
}
/**
 * -----------------------------------------------------
 * --------------------VTable-----------------------
 * --------------------------------------------------------
 * */
/**
 * VTable 的 Props 继承于 antd 的 Table 的 Props
 * 对原先的Table组件进行了一致性的调整和简化。易于统一的规范化使用
 * 说明：默认rowKey 为 `id`
*/
export interface VTablePOpts extends TableProps<any> {
    /**
     * VTable 模式设置
     * common 默认： 普通模式
     * inner : 内置模式，放在布局组件里面显示时使用，使用此模式时，
     * fixed : 稳固模式，整个页面仅有VTable一个可见元素 时使用
     *
     */
    mode?: 'common' | 'inner' | 'fixed';
    /**
     * 在 fixed 模式下，除去固定的宽度
     */
    fixedHeight?: number;
    /**
     * 是否使用 table-layout: fixed,默认不使用
    */
    fixedCol?: boolean;
    /**
     * 左侧选择Panel
     * 树选择Panel，支持动态树和静态树，包含 loadData 参数的为动态树
    */
    selectBar?: SelectBarOpts;
    /**
     * 查询条件Panel
    */
    searchBar?: SearchBarOpts;
    /**
     * 序号字段
     * 1. 不传（或者传false） ：不显示 “序号”
     * 2. 传 true 显示 “序号”
     * 3. 传指定标题 ：显示指定标题
     *
     */
    showIndex?: boolean | string;
    /**
     * 列定义，参考 antd table columns ，扩展 show 属性
    */
    columns: VTableColumn[];
    /**
     * 是否自动 fetch ，默认为 true
     */
    autoLoad?: boolean;
    /**
     * dva的命名空间，
     * 说明， 如果是标准的 list-model 模型， 可以只传递一个 namespace 参数 即 模型在 dva 里面的命名空间
     * 非标准模型依然可以使用旧的方式分别 传入 fetch/total/dataSource
     */
    namespace?: string;
    /**
     * 发动 fetch 的事件字符串，由 {moduleName}/{moudleMethod} 组成
    */
    fetch?: string;
    /***
     * 搜索前转换查询参数
     */
    beforeSearch?: (param: any) => any;
    /**
     * 记录总数
    */
    total?: number;
    /**
     * 每页显示记录数，默认为10
    */
    /**
     * 是否可以多选，如果为 true，则出现多选框功能
    */
    select?: boolean;
    /**
     * 默认搜索参数
    */
    default?: any;
}
