import { ModalProps } from 'antd/lib/modal/Modal';
import { FormComponentProps } from 'antd/lib/form/Form';
/**
 * 联动
*/
export interface Link {
    /**
     * 受影响的字段
    */
    field: string;
    /**
     * 目前只支持
     * 1. Input(Blur)
     * 2. Select(Change)
     * 3. Radio(Change)
     * 字段变化事件时，触发联动效果 ，当是input 时，为 blur
    */
    /**
     * 联动事件
    */
    call: (txt: string) => Promise<any[]> | any[] | string | {
        showed?: boolean;
        disabled?: boolean;
    };
    /**
     * 联动事件返回列表中，对应显示在页面上的 name 的属性字段
    */
    name?: string;
    /**
     * 联动事件返回列表中，对应显示在页面上的 value 的属性字段
    */
    value?: string;
}
/**
 * 表单的字段定义
*/
export interface Column {
    /**
     * 列名称
    */
    title: string;
    /**
     * 列字段
    */
    field: string;
    /**
     * 输入提示
    */
    placeholder?: string;
    /**
     * 是否显示，默认显示，不显示可以设置为showed:false
    */
    showed?: boolean;
    /**
     * 是否禁用，默认不禁用，禁用可以设置为 disabled:true
    */
    disabled?: boolean;
    /**
     * 字段类型 目前支持类型如下
     *
     * |字段|类型|说明|
     * |---:|---|:---|
     * |`text`|文本输入框| **默认** |
     * |`textlist`| 文本列表||
     * |`password`|密码输入框|  |
     * |`number`|数字输入框| |
     * |`select`|下拉单选| 必须同时指定 `options` |
     * |`selectcode`|下拉多选| 必须同时指定 `options` |
     * |`radio`|单选| 必须同时指定 `options` |
     * |`radiomore`|单选（手动输入）| 必须同时指定 `options`, 最后一项 ` { name: '自定义', value: FormModal.MORE }` |
     * |`checkbox`|多选| 必须同时指定 `options` |
     * |`switch`|二选一开关| 必须同时指定 `options` ，且第一项默认为正常 |
     * |`date`|日期| |
     * |`datetime`|时间| |
     * |`daterange`|日期范围| field必须指定为以 `,` 分隔的二个字段 |
     * |`month`|月份| 返回选择月份的首日 |
     * |`time`|时间| 返回 hh:mm:ss |
     * |`week`|星期| 返回选择星期的首日|
     * |`cascader`|二级联动| |
     * |`autocomplete`|自动联想(动态)| |
     * |`image`|图片| 默认为上传到上传接口，如果上传地址不同需要指定 |
     * |`icon`|ICON| 全部ICON |
     * |`customicon`|自定义ICON| 不含官方ICON的自定义ICON |
     * |`editor`|编辑器| 说明，仅在引用为layout/editor下有效，引用前需要自行安装braft-editor |
     *
     * */
    type?: string;
    /**
     * 字段选项，适用于 `checkbox` `radio` `switch` 等
     * 当字段类型为 `switch`时， 数组长度必须为 2, 第一个参数放正常状态，第二个参数放异常状态
    */
    options?: {
        name: string;
        value: string;
        [propName: string]: any;
    }[];
    /**
     * 后面的字段和此字段放在同一行，后续有时间再支持
     *
    */
    inline?: boolean;
    /**
     * 提示信息，仅type 为 input 时有效
     * 1. 为字文本时，提示文本
     * 2. 为对象时，提示标题，文本，提示图标可指定
     */
    tip?: string | {
        text: string;
        icon: string;
    };
    /**
     * rule 用法： https://github.com/yiminghe/async-validator
    */
    rule?: any[];
    /**
     * 字段联动，目前只支持 `text` `select` 类型，受影响的字段只能是具有 `options` 属性的类型
     *
    */
    link?: Link | Link[];
    /**
     *  扩展字段说明：
     *
     * 1. 当 type 为 organization 时，config 为  {businessLine?: string, useRoot?: boolean,} 业务线：默认为全部，使用root 默认为false
     * 2. 当 type 为 autocomplete 时, config 为  {fetch:stirng,'queryapi',field:string='name', name?:string = 'name',value:stringg = 'id'}
     */
    config?: any;
}
export interface UploadOpts {
    /**
     * 使用编辑器或上传时的namespace, 默认为 com.vrv.vap.portal
    */
    namespace?: string;
    /**
     * 使用编辑器或上传时的userId, 默认为 当前登录用户
    */
    userId?: string;
    /**
     * 使用编辑器或上传时的userName, 默认为 当前登录用户
    */
    userName?: string;
}
export interface FormModalProps extends ModalProps {
    /**
     * 表彰的列定义，传一个数组
    */
    columns: Column[];
    /**
     * 是否编辑模式，
    */
    isEdit?: boolean;
    /**
     * 表单对象信息
    */
    data?: any;
    /**
     * 对象的默认值
    */
    default?: any;
    /**
     * 上传参数
     * 在 upload、 editor里面可以根据条件传
    */
    upload?: UploadOpts;
}
export interface DataFormOpts extends FormComponentProps {
    loose: boolean;
    show: boolean;
    data: any;
    columns: Column[];
    upload?: UploadOpts;
}
