


declare type DyFormType = 'input' | 'radio' | 'checkbox' | 'price' | 'number' | 'switch' | 'datetime' | 'image' | 'video' | 'richtext' | 'color' | 'select' | 'custom';

declare type DyFormModuleType = 'text' | 'textarea' | 'password';
declare type DyFormModuleDateType = 'year' | 'years' | 'month' | 'months' | 'date' | 'dates' | 'datetime' | 'week' | 'datetimerange' | 'daterange' | 'monthrange' | 'yearrange'

declare interface DyFormModule {
    rows?: number,
    type?: DyFormModuleType,
    min?: number
    multiple?: boolean
    loading?: boolean
    field?: string[]
    clearKey?: string[]
    onText?: string
    on?: string | number | boolean
    offText?: string
    off?: string | number | boolean
    step?: number
    valueFormat?: string
    datetype?: DyFormModuleDateType
    onChange?: (val: any) => void,
    onSelect?: (form: any) => void,
    /**
     * 上传文件的头部信息
     * @description 用于定义上传文件的头部信息
     * @default {}
     * @example { 'Authorization': 'Bearer 123|123' }
     * @example { 'Content-Type':'application/json' }
     */
    header?: object,
    /**
     * 上传文件
     * @description 当使用richtext/image时需要该属性
     * @description 适用组件 image richtext
     * @param file 上传的文件对象   
     * @param insertFn 插入图片的回调函数
     * @returns void
     * @example onUpload(file, insertFn) => { insertFn(file.path) }
     */
    onUpload?: (file: any, insertFn: (path: string) => void) => void,
    /**
     * 上传路径
     * @description 用于定义上传文件的路径
     * @description 适用组件 image richtext
     * @default /upload
     * @example /upload
     */
    uploadPath?: string,
    /**
     * 允许上传的文件类型
     * @description 用于定义上传文件的类型
     * @default void
     * @example 'image'
     */
    fileType?: string
    /**
     * 上传文件类型的提示信息
     * @description 用于定义上传文件类型的提示信息
     * @default '图片'
     * @example '图片'
     */
    fileTypeTip?: string
    /**
     * 上传文件的大小
     * @description 用于定义上传文件的大小 单位Kb
     * @default 400 // 400Kb
     * @example 400 // 400Kb
     */
    size?: number
    /**
     * 当组件为image时
     * @description 用于定义上传文件的提示信息
     */
    tips?: string
    /**
     * 组件为image时
     * @description 接受图片上传组件返回的报错信息
     * @param err 报错信息
     */
    onError?: (err: any) => void,
    /**
     * 组件为image时
     * @description 附件上传的最大数量
     */
    maxNum?: number

}
/**
 * 表单节点类型定义
 * @description 用于定义表单节点的类型
 */
declare interface DyFormNodeType {
    /**
     * 字段标签-标题
     * @description 用于告知用户该字段需填写的内容
     */
    label: string,
    /**
     * 表单提交的字段名
     * @description 用于定义该字段在表单对象中的属性名
     */
    prop: string,
    /**
     * 表单组件的类型
     * @description 当前表单组件的填报控件类型
     * @description 当需要不满足需求时该值传入custom可使用插槽自定义控件内容
     */
    type: DyFormType,
    isShow?: boolean | ((obj: any) => boolean),
    /**
     * 表单校验规则
     */
    rules?: any[],
    /**
     * 控件是否禁用
     */
    disabled?: boolean,
    /**
     * 表单组件的提示语
     * @description 用于定义该字段在表单对象中的提示语
     */
    placeholder?: string,
    /**
     * 控件的额外配置
     */
    module?: DyFormModule
    /**
     * 当组件为select、radio、checkbox时
     * @description 用于定义选项
     */
    options?: any[],
    /**
     * 是否根据clearKey清空选项
     * @description 用于定义是否根据clearKey清空选项
     * @default true
     */
    isClear?: boolean
    /**
     * 表单校验模式
     * @description 用于定义表单校验的模式
     * @description add和edit的判定条件为表单中是否存在id字段
     * @default 'all'
     * @example 'add' // 新增模式
     * @example 'edit' // 编辑模式
     * @example 'all' //全部校验
     */
    ruleType?: "add" | "edit" | "all"
    column?: number
    tips?: string
    tipStyle: any
}


export {
    DyFormNodeType,
    DyFormType,
    DyFormModuleType,
    DyFormModuleDateType,
    DyFormModule,
}