declare interface AnyObject {
  [key: string]: any
}

/* FForm */
declare namespace FormTypes {
  interface FormOpts {
    ref: any // 表单实例
    labelPosition?: string // label对齐方式
    labelWidth?: string // label宽度
    btnSlotName?: string // 按钮插槽名称
    formData: AnyObject // 表单数据
    fieldList: FieldList[] // 表单项
    rules?: any // 表单验证规则
    listTypeInfo?: any // 下拉框数据
    operatorList?: OperatorList[] // 操作按钮
  }
  interface FieldList {
    isHideItem?: boolean // 是否隐藏
    label?: string // label
    value?: string // 字段名
    labelSlotName?: string // label插槽名称
    labelRender?: (...ags: any[]) => any // label render渲染
    className?: string // 表单项class
    isTrim?: boolean // el-input 是否去除空格
    rules?: any // 表单项验证规则
    labelWidth?: string|number // label宽度
    widthSize?: number // 表单项宽度
    slotName?: string // 表单输入框插槽名称
    textShow?: boolean // 是否文本展示
    textValue?: string // 文本展示值
    isSelfCom?: boolean // 是否自定义组件
    type?: string // 表单类型
    ref?: string // 表单组件实例
    list?: string // 下拉框数据变量名称
    arrLabel?: string // 下拉框label字段
    arrKey?: string // 下拉框value字段
    event?: string // 触发handleEvent事件的标识
    comp?: any // 组件名称
    placeholder?: string // 提示语
    bind?: any // 绑定数据(Objec or Function(formData))
    width?: string // 组件宽度
    prepend?: string // el-input输入框前置内容
    append?: string // el-input输入框后置内容
    childSlotName?: string // 子组件插槽名称
    eventHandle?: AnyObject // 事件处理函数
  }
  interface OperatorList {
    label?: string // 按钮名称
    fun?: (val: any) => void // 按钮点击事件
    bind?: AnyObject // 绑定数据
    isHideBtn?: boolean // 是否隐藏按钮
    render?: (...ags: any[]) => any // render函数
  }
}

/* Vite */
declare type Recordable<T = any> = Record<string, T>

/* __APP_INFO__ */
declare const __APP_INFO__: {
  pkg: {
    name: string
    version: string
    dependencies: Recordable<string>
    devDependencies: Recordable<string>
  }
  lastBuildTime: string
}
// Map声明全局变量
declare interface TypeMap {
  [key: string]: { type: string; val: string }
}

declare interface Window {
	nextLoading: boolean;
	BMAP_SATELLITE_MAP: any;
	BMap: any;
	__env__: any;
	$changeLang: (lang: string) => void;
}

// 声明一个模块，防止引入文件时报错
declare module '*.json';
declare module '*.png';
declare module '*.jpg';
declare module '*.scss';
declare module '*.ts';
declare module '*.js';