import { ModalProps } from 'antd/lib/modal/Modal';
import { ColumnProps } from 'antd/lib/table/interface';
/**
 * 联动
*/
export interface Link {
    /**
     * 受影响的字段
    */
    field: string;
    /**
     * 目前只支持
     * 1. Input(Blur)
     * 2. Select(Change)
     * 3. Radio(Change)
     * 字段变化事件时，触发联动效果 ，当是input 时，为 blur
    */
    /**
     * 联动事件
    */
    call: (txt: string) => {
        name: string;
        value: string | number;
    }[];
}
/**
 * 列信息，继承 antd - Table 的列信息，扩展了一些自定义属性
*/
export interface Column<T> extends ColumnProps<T> {
    /**
     * 类型，目前 仅支持 `select`（默认） 和 `switch` ，仅当有 option 时才生效 ,number
    */
    type?: string;
    /**
     * 是否不允许修改
    */
    readonly?: boolean;
    /**
     * 选项列表，说明，当type 为 `switch`时，选项列表的长度必须为 **2**， 且第 **0** 项为选中状态
    */
    options?: {
        name: string;
        value: string | number;
    }[];
    /**
     * 验证此字段必填
    */
    require?: boolean;
    /**
     * 验证此字段正则
    */
    pattern?: string | RegExp;
    /**
     * 提示信息
    */
    message?: string;
    /**
     * 联动
    */
    link?: Link;
}
export interface Option {
    name: string;
    value: string | number;
}
export interface SearchConf {
    title: string;
    field: string;
}
/**
 * 列表弹框的 Props 继承了 antd 里面 Modal 的 Props
 * 说明: **各种 modal 的原生 visable 属性，在vap项目里面，统一定制为 show**
*/
export interface ListModalProps<T> extends ModalProps {
    /**
     * 列定义
    */
    columns: Column<T>[];
    /**
     * 是否显示，相当于原生modal里面的 visable 属性
    */
    show: boolean;
    /**
     * 查询地址 必传，必须是 POST 接口
    */
    query: string;
    /**
     * 添加接口地址，传的话会有添加功能，必须是 PUT 接口
    */
    add?: string;
    /**
     * 添加接口地址，传的话会有编辑功能，必须是 PATCH 接口
    */
    edit?: string;
    /**
     * 删除接口地址，传的话会有删除功能，必须是 DELETE 接口
    */
    del?: string;
    /**
     * 是否支持多选,必须select有传时才能使用
    */
    mutiSelect?: boolean;
    /**
     * 传择回调，传入 select 后，弹框变为选择模式，不再支持增删改操作
    */
    select?: Function;
    /**
     * 默认查询参数
    */
    param?: any;
    /**
     * 数据的 rowKey ，默认为 'id'
    */
    rowKey?: string;
    /**
     * 删除时的id参数，默认为 'ids'
    */
    delKey?: string;
    /**
     * 搜索参数
    */
    search?: SearchConf[];
    /**
     * 使用小型模式
     *  */
    tiny?: boolean;
    /**
     * 其他操作
     */
    otherAction?: {
        render: (data: any) => Promise<any>;
        callback: Function;
        icon: string;
        tip: Function;
        remove?: boolean;
    }[];
    /**
     * 是否展示page 分页条
     */
    showPage?: boolean;
}
