declare namespace API {
  type AliyunOSS = {
    'access-key-id'?: string;
    'access-key-secret'?: string;
    'base-path'?: string;
    'bucket-name'?: string;
    'bucket-url'?: string;
    endpoint?: string;
  };

  type Api = {
    /** api组 */
    apiGroup?: string;
    createTime?: string;
    /** api中文描述 */
    description?: string;
    id?: number;
    /** 方法:创建POST(默认)|查看GET|更新PUT|删除DELETE */
    method?: string;
    /** api路径 */
    path?: string;
    updateTime?: string;
  };

  type ApiGroup = {
    checkable?: boolean;
    children?: ApiGroupSon[];
    key?: string;
    title?: string;
  };

  type ApiGroupSon = {
    key?: number;
    title?: string;
  };

  type Autocode = {
    root?: string;
    server?: string;
    'server-api'?: string;
    'server-initialize'?: string;
    'server-model'?: string;
    'server-plug'?: string;
    'server-request'?: string;
    'server-router'?: string;
    'server-service'?: string;
    'transfer-restart'?: boolean;
    web?: string;
    'web-api'?: string;
    'web-form'?: string;
    'web-table'?: string;
  };

  type AwsS3 = {
    'base-url'?: string;
    bucket?: string;
    'disable-ssl'?: boolean;
    endpoint?: string;
    'path-prefix'?: string;
    region?: string;
    's3-force-path-style'?: boolean;
    'secret-id'?: string;
    'secret-key'?: string;
  };

  type Captcha = {
    /** 验证码高度 */
    'img-height'?: number;
    /** 验证码宽度 */
    'img-width'?: number;
    /** 验证码长度 */
    'key-long'?: number;
    /** 防爆破验证码开启此数，0代表每次登录都需要验证码，其他数字代表错误密码此数，如3代表错误三次后出现验证码 */
    'open-captcha'?: number;
    /** 防爆破验证码超时时间，单位：s(秒) */
    'open-captcha-timeout'?: number;
  };

  type CasbinInfo = {
    /** 方法 */
    method?: string;
    /** 路径 */
    path?: string;
  };

  type CasbinInReceive = {
    casbinInfos?: CasbinInfo[];
    /** 权限id */
    roleId?: number;
  };

  type ChangePasswordReq = {
    /** 新密码 */
    newPassword?: string;
    /** 密码 */
    password?: string;
  };

  type CORS = {
    mode?: string;
    whitelist?: CORSWhitelist[];
  };

  type CORSWhitelist = {
    'allow-credentials'?: boolean;
    'allow-headers'?: string;
    'allow-methods'?: string;
    'allow-origin'?: string;
    'expose-headers'?: string;
  };

  type Department = {
    children?: Department[];
    code?: string;
    createTime?: string;
    email?: string;
    id?: number;
    /** userId */
    leader?: string;
    name?: string;
    parentId?: number;
    path?: string;
    phone?: string;
    remark?: string;
    sort?: number;
    /** 状态 */
    status?: boolean;
    updateTime?: string;
  };

  type DepartmentResponse = {
    department?: Department;
  };

  type Detail = {
    /** 需要比较时间的字段 */
    compareField?: string;
    /** 时间间隔 */
    interval?: string;
    /** 需要清理的表名 */
    tableName?: string;
  };

  type Dictionary = {
    createTime?: string;
    /** 描述 */
    desc?: string;
    id?: number;
    /** 字典名（中） */
    name?: string;
    /** 状态 */
    status?: boolean;
    sysDictionaryDetails?: DictionaryDetail[];
    /** 字典名（英） */
    type?: string;
    updateTime?: string;
  };

  type DictionaryDetail = {
    createTime?: string;
    id?: number;
    /** 展示值 */
    label?: string;
    /** 排序标记 */
    sort?: number;
    /** 启用状态 */
    status?: boolean;
    /** 关联标记 */
    sysDictionaryID?: number;
    updateTime?: string;
    /** 字典值 */
    value?: number;
  };

  type Email = {
    /** 收件人 */
    from?: string;
    /** 服务器地址 */
    host?: string;
    /** 是否SSL */
    'is-ssl'?: boolean;
    /** 昵称 */
    nickname?: string;
    /** 端口 */
    port?: number;
    /** 密钥 */
    secret?: string;
    /** 收件人:多个以英文逗号分隔 */
    to?: string;
  };

  type Excel = {
    dir?: string;
  };

  type File = {
    createTime?: string;
    id?: number;
    /** 文件名 */
    name?: string;
    path?: string;
    /** 文件标签 */
    tag?: string;
    updateTime?: string;
  };

  type FileResponse = {
    file?: File;
  };

  type FkResult = {
    list?: any;
  };

  type GetById = {
    /** 主键ID */
    id?: number;
  };

  type GetFkSelect = {
    /** 关键字 */
    keyword?: string;
  };

  type getSysDictionaryDetailFindDictionaryDetailParams = {
    createTime?: string;
    id?: number;
    /** 展示值 */
    label?: string;
    /** 排序标记 */
    sort?: number;
    /** 启用状态 */
    status?: boolean;
    /** 关联标记 */
    sysDictionaryID?: number;
    updateTime?: string;
    /** 字典值 */
    value?: number;
  };

  type getSysDictionaryDetailGetDictionaryDetailListParams = {
    createTime?: string;
    id?: number;
    /** 关键字 */
    keyword?: string;
    /** 展示值 */
    label?: string;
    /** 页码 */
    page?: number;
    /** 每页大小 */
    pageSize?: number;
    /** 排序标记 */
    sort?: number;
    /** 启用状态 */
    status?: boolean;
    /** 关联标记 */
    sysDictionaryID?: number;
    updateTime?: string;
    /** 字典值 */
    value?: number;
  };

  type getSysDictionaryFindDictionaryParams = {
    createTime?: string;
    /** 描述 */
    desc?: string;
    id?: number;
    /** 字典名（中） */
    name?: string;
    /** 状态 */
    status?: boolean;
    /** 字典名（英） */
    type?: string;
    updateTime?: string;
  };

  type getSysDictionaryGetDictionaryListParams = {
    createTime?: string;
    /** 描述 */
    desc?: string;
    id?: number;
    /** 关键字 */
    keyword?: string;
    /** 字典名（中） */
    name?: string;
    /** 页码 */
    page?: number;
    /** 每页大小 */
    pageSize?: number;
    /** 状态 */
    status?: boolean;
    /** 字典名（英） */
    type?: string;
    updateTime?: string;
  };

  type getSysOperationRecordFindOperationRecordParams = {
    /** 代理 */
    agent?: string;
    /** 请求Body */
    body?: string;
    createTime?: string;
    /** 错误信息 */
    error_message?: string;
    id?: number;
    /** 请求ip */
    ip?: string;
    /** 延迟 */
    latency?: string;
    /** 请求方法 */
    method?: string;
    /** 请求路径 */
    path?: string;
    /** 响应Body */
    resp?: string;
    /** 请求状态 */
    status?: number;
    updateTime?: string;
    /** 用户id */
    user_id?: number;
  };

  type getSysOperationRecordGetOperationRecordListParams = {
    /** 代理 */
    agent?: string;
    /** 请求Body */
    body?: string;
    createTime?: string;
    /** 错误信息 */
    error_message?: string;
    id?: number;
    /** 请求ip */
    ip?: string;
    /** 关键字 */
    keyword?: string;
    /** 延迟 */
    latency?: string;
    /** 请求方法 */
    method?: string;
    /** 页码 */
    page?: number;
    /** 每页大小 */
    pageSize?: number;
    /** 请求路径 */
    path?: string;
    /** 响应Body */
    resp?: string;
    /** 请求状态 */
    status?: number;
    updateTime?: string;
    /** 用户id */
    user_id?: number;
  };

  type HuaWeiObs = {
    'access-key'?: string;
    bucket?: string;
    endpoint?: string;
    path?: string;
    'secret-key'?: string;
  };

  type IdsReq = {
    ids?: number[];
  };

  type InitDB = {
    /** 数据库名 */
    dbName: string;
    /** 数据库类型 */
    dbType?: string;
    /** 服务器地址 */
    host?: string;
    /** DB initial langauge // added by mohamed hassan to support multilanguage */
    language?: string;
    /** 数据库密码 */
    password?: string;
    /** 数据库连接端口 */
    port?: string;
    /** 数据库用户名 */
    userName: string;
  };

  type JWT = {
    /** 缓冲时间 */
    'buffer-time'?: string;
    /** 过期时间 */
    'expires-time'?: string;
    /** 签发者 */
    issuer?: string;
    /** jwt签名 */
    'signing-key'?: string;
  };

  type Language = {
    dir?: string;
    language?: string;
  };

  type Local = {
    /** 本地文件访问路径 */
    path?: string;
    /** 本地文件存储路径 */
    'store-path'?: string;
  };

  type Login = {
    captcha?: string;
    captchaId?: string;
    password?: string;
    username?: string;
  };

  type LoginResponse = {
    expiresAt?: number;
    token?: string;
    user?: User;
  };

  type Menu = {
    children?: Menu[];
    component?: string;
    createTime?: string;
    externalLink?: string;
    hidden?: boolean;
    icon?: string;
    id?: number;
    key?: string;
    /** 路由name */
    name?: string;
    parentId?: number;
    path?: string;
    permission?: string;
    /** 备注 */
    remark?: string;
    sort?: number;
    title?: string;
    /** 菜单类型（M目录 C菜单 F按钮） */
    type?: string;
    updateTime?: string;
  };

  type Mssql = {
    /** 高级配置 */
    config?: string;
    /** 数据库名 */
    'db-name'?: string;
    /** 数据库引擎，默认InnoDB */
    engine?: string;
    /** 是否开启Gorm全局日志 */
    'log-mode'?: string;
    /** 是否通过zap写入日志文件 */
    'log-zap'?: boolean;
    /** 空闲中的最大连接数 */
    'max-idle-conns'?: number;
    /** 打开到数据库的最大连接数 */
    'max-open-conns'?: number;
    /** 数据库密码 */
    password?: string;
    /** 服务器地址:端口 */
    path?: string;
    /** :端口 */
    port?: string;
    /** 全局表前缀，单独定义TableName则不生效 */
    prefix?: string;
    /** 是否开启全局禁用复数，true表示开启 */
    singular?: boolean;
    /** 数据库用户名 */
    username?: string;
  };

  type Mysql = {
    /** 高级配置 */
    config?: string;
    /** 数据库名 */
    'db-name'?: string;
    /** 数据库引擎，默认InnoDB */
    engine?: string;
    /** 是否开启Gorm全局日志 */
    'log-mode'?: string;
    /** 是否通过zap写入日志文件 */
    'log-zap'?: boolean;
    /** 空闲中的最大连接数 */
    'max-idle-conns'?: number;
    /** 打开到数据库的最大连接数 */
    'max-open-conns'?: number;
    /** 数据库密码 */
    password?: string;
    /** 服务器地址:端口 */
    path?: string;
    /** :端口 */
    port?: string;
    /** 全局表前缀，单独定义TableName则不生效 */
    prefix?: string;
    /** 是否开启全局禁用复数，true表示开启 */
    singular?: boolean;
    /** 数据库用户名 */
    username?: string;
  };

  type NamesResult = {
    list?: any;
  };

  type OperationRecord = {
    /** 代理 */
    agent?: string;
    /** 请求Body */
    body?: string;
    createTime?: string;
    /** 错误信息 */
    error_message?: string;
    id?: number;
    /** 请求ip */
    ip?: string;
    /** 延迟 */
    latency?: string;
    /** 请求方法 */
    method?: string;
    /** 请求路径 */
    path?: string;
    /** 响应Body */
    resp?: string;
    /** 请求状态 */
    status?: number;
    updateTime?: string;
    /** 用户id */
    user_id?: number;
  };

  type Oracle = {
    /** 高级配置 */
    config?: string;
    /** 数据库名 */
    'db-name'?: string;
    /** 数据库引擎，默认InnoDB */
    engine?: string;
    /** 是否开启Gorm全局日志 */
    'log-mode'?: string;
    /** 是否通过zap写入日志文件 */
    'log-zap'?: boolean;
    /** 空闲中的最大连接数 */
    'max-idle-conns'?: number;
    /** 打开到数据库的最大连接数 */
    'max-open-conns'?: number;
    /** 数据库密码 */
    password?: string;
    /** 服务器地址:端口 */
    path?: string;
    /** :端口 */
    port?: string;
    /** 全局表前缀，单独定义TableName则不生效 */
    prefix?: string;
    /** 是否开启全局禁用复数，true表示开启 */
    singular?: boolean;
    /** 数据库用户名 */
    username?: string;
  };

  type PageInfo = {
    /** 关键字 */
    keyword?: string;
    /** 页码 */
    page?: number;
    /** 每页大小 */
    pageSize?: number;
  };

  type PageResult = {
    list?: any;
    page?: number;
    pageSize?: number;
    total?: number;
  };

  type Pgsql = {
    /** 高级配置 */
    config?: string;
    /** 数据库名 */
    'db-name'?: string;
    /** 数据库引擎，默认InnoDB */
    engine?: string;
    /** 是否开启Gorm全局日志 */
    'log-mode'?: string;
    /** 是否通过zap写入日志文件 */
    'log-zap'?: boolean;
    /** 空闲中的最大连接数 */
    'max-idle-conns'?: number;
    /** 打开到数据库的最大连接数 */
    'max-open-conns'?: number;
    /** 数据库密码 */
    password?: string;
    /** 服务器地址:端口 */
    path?: string;
    /** :端口 */
    port?: string;
    /** 全局表前缀，单独定义TableName则不生效 */
    prefix?: string;
    /** 是否开启全局禁用复数，true表示开启 */
    singular?: boolean;
    /** 数据库用户名 */
    username?: string;
  };

  type PolicyPathResponse = {
    paths?: CasbinInfo[];
  };

  type Post = {
    code?: string;
    createTime?: string;
    id?: number;
    name?: string;
    remark?: string;
    sort?: number;
    /** 状态 */
    status?: boolean;
    updateTime?: string;
  };

  type PostResponse = {
    post?: Post;
  };

  type Qiniu = {
    /** 秘钥AK */
    'access-key'?: string;
    /** 空间名称 */
    bucket?: string;
    /** CDN加速域名 */
    'img-path'?: string;
    /** 秘钥SK */
    'secret-key'?: string;
    /** 上传是否使用CDN上传加速 */
    'use-cdn-domains'?: boolean;
    /** 是否使用https */
    'use-https'?: boolean;
    /** 存储区域 */
    zone?: string;
  };

  type Redis = {
    /** 服务器地址:端口 */
    addr?: string;
    /** redis的哪个数据库 */
    db?: number;
    /** 密码 */
    password?: string;
  };

  type Register = {
    avatarId?: number;
    deptId?: number;
    email?: string;
    enable?: boolean;
    nickName?: string;
    passWord?: string;
    phone?: string;
    postId?: number;
    /** 多岗位 */
    postIds?: string;
    roleId?: number;
    /** 多角色 */
    roleIds?: string;
    userName?: string;
  };

  type Response = {
    code?: number;
    data?: any;
    msg?: string;
    success?: boolean;
  };

  type Role = {
    apiIds?: string;
    code?: string;
    createTime?: string;
    dataScope?: string;
    deptIds?: string;
    id?: number;
    menuIds?: string;
    name?: string;
    remark?: string;
    sort?: number;
    /** 状态 */
    status?: boolean;
    updateTime?: string;
  };

  type RolePermissionResponse = {
    apiIds?: number[];
    dataScope?: string;
    deptIds?: number[];
    menuIds?: number[];
    roleId?: number;
  };

  type RoleResponse = {
    role?: Role;
  };

  type RoleSelectResponse = {
    label?: string;
    value?: number;
  };

  type Route = {
    access?: string;
    component?: string;
    icon?: string;
    key?: string;
    name?: string;
    path?: string;
    routes?: Route[];
  };

  type RoutesResponse = {
    routes?: Route[];
  };

  type SearchApiParams = {
    /** api组 */
    apiGroup?: string;
    createTime?: string;
    /** 排序方式:升序false(默认)|降序true */
    desc?: boolean;
    /** api中文描述 */
    description?: string;
    id?: number;
    /** 关键字 */
    keyword?: string;
    /** 方法:创建POST(默认)|查看GET|更新PUT|删除DELETE */
    method?: string;
    /** 排序 */
    orderKey?: string;
    /** 页码 */
    page?: number;
    /** 每页大小 */
    pageSize?: number;
    /** api路径 */
    path?: string;
    updateTime?: string;
  };

  type SearchPostParams = {
    code?: string;
    createTime?: string;
    /** 排序方式:升序false(默认)|降序true */
    desc?: boolean;
    id?: number;
    /** 关键字 */
    keyword?: string;
    name?: string;
    /** 排序 */
    orderKey?: string;
    /** 页码 */
    page?: number;
    /** 每页大小 */
    pageSize?: number;
    remark?: string;
    sort?: number;
    /** 状态 */
    status?: boolean;
    updateTime?: string;
  };

  type Server = {
    'aliyun-oss'?: AliyunOSS;
    /** auto */
    autocode?: Autocode;
    'aws-s3'?: AwsS3;
    captcha?: Captcha;
    /** 跨域配置 */
    cors?: CORS;
    'db-list'?: SpecializedDB[];
    email?: Email;
    excel?: Excel;
    'hua-wei-obs'?: HuaWeiObs;
    jwt?: JWT;
    language?: Language;
    /** oss */
    local?: Local;
    mssql?: Mssql;
    /** gorm */
    mysql?: Mysql;
    oracle?: Oracle;
    pgsql?: Pgsql;
    qiniu?: Qiniu;
    redis?: Redis;
    sqlite?: Sqlite;
    system?: System;
    'tencent-cos'?: TencentCOS;
    timer?: Timer;
    zap?: Zap;
  };

  type SetUserRole = {
    /** 角色ID */
    roleId?: number;
  };

  type SetUserRoles = {
    id?: number;
    /** 角色ID */
    roleIds?: number[];
  };

  type SpecializedDB = {
    'alias-name'?: string;
    /** 高级配置 */
    config?: string;
    /** 数据库名 */
    'db-name'?: string;
    disable?: boolean;
    /** 数据库引擎，默认InnoDB */
    engine?: string;
    /** 是否开启Gorm全局日志 */
    'log-mode'?: string;
    /** 是否通过zap写入日志文件 */
    'log-zap'?: boolean;
    /** 空闲中的最大连接数 */
    'max-idle-conns'?: number;
    /** 打开到数据库的最大连接数 */
    'max-open-conns'?: number;
    /** 数据库密码 */
    password?: string;
    /** 服务器地址:端口 */
    path?: string;
    /** :端口 */
    port?: string;
    /** 全局表前缀，单独定义TableName则不生效 */
    prefix?: string;
    /** 是否开启全局禁用复数，true表示开启 */
    singular?: boolean;
    type?: string;
    /** 数据库用户名 */
    username?: string;
  };

  type Sqlite = {
    /** 高级配置 */
    config?: string;
    /** 数据库名 */
    'db-name'?: string;
    /** 数据库引擎，默认InnoDB */
    engine?: string;
    /** 是否开启Gorm全局日志 */
    'log-mode'?: string;
    /** 是否通过zap写入日志文件 */
    'log-zap'?: boolean;
    /** 空闲中的最大连接数 */
    'max-idle-conns'?: number;
    /** 打开到数据库的最大连接数 */
    'max-open-conns'?: number;
    /** 数据库密码 */
    password?: string;
    /** 服务器地址:端口 */
    path?: string;
    /** :端口 */
    port?: string;
    /** 全局表前缀，单独定义TableName则不生效 */
    prefix?: string;
    /** 是否开启全局禁用复数，true表示开启 */
    singular?: boolean;
    /** 数据库用户名 */
    username?: string;
  };

  type SysAPIByGroupResponse = {
    apis?: ApiGroup[];
  };

  type SysAPIListResponse = {
    apis?: Api[];
  };

  type SysAPIResponse = {
    api?: Api;
  };

  type SysCaptchaResponse = {
    captchaId?: string;
    captchaLength?: number;
    openCaptcha?: boolean;
    picPath?: string;
  };

  type SysConfigResponse = {
    config?: Server;
  };

  type System = {
    /** 端口值 */
    addr?: number;
    /** 数据库类型:mysql(默认)|sqlite|sqlserver|postgresql */
    'db-type'?: string;
    /** 环境值 */
    env?: string;
    'iplimit-count'?: number;
    'iplimit-time'?: number;
    /** Oss类型 */
    'oss-type'?: string;
    'router-prefix'?: string;
    /** 多点登录拦截 */
    'use-multipoint'?: boolean;
    /** 使用redis */
    'use-redis'?: boolean;
  };

  type System = {
    config?: Server;
  };

  type TencentCOS = {
    'base-url'?: string;
    bucket?: string;
    'path-prefix'?: string;
    region?: string;
    'secret-id'?: string;
    'secret-key'?: string;
  };

  type Timer = {
    detail?: Detail[];
    /** CRON表达式 */
    spec?: string;
    /** 是否启用 */
    start?: boolean;
    /** 是否精确到秒 */
    with_seconds?: boolean;
  };

  type Tree = {
    children?: Tree[];
    key?: number;
    title?: string;
  };

  type TreeResponse = {
    tree?: Tree[];
  };

  type UpdateRolePermissionParams = {
    apiIds?: number[];
    dataScope?: string;
    deptIds?: number[];
    menuIds?: number[];
    roleId?: number;
  };

  type User = {
    avatarId?: number;
    createTime?: string;
    deptId?: number;
    /** 用户邮箱 */
    email?: string;
    /** 状态 */
    enable?: boolean;
    id?: number;
    lastLoginTime?: string;
    nickName?: string;
    /** 用户手机号 */
    phone?: string;
    postId?: number;
    /** 多岗位 */
    postIds?: string;
    remark?: string;
    roleId?: number;
    /** 多角色 */
    roleIds?: string;
    updateTime?: string;
    /** 用户登录名 */
    userName?: string;
  };

  type UserResponse = {
    user?: User;
  };

  type UserView = {
    avatarId?: number;
    avatarUrl?: string;
    createTime?: string;
    deptId?: number;
    /** 用户邮箱 */
    email?: string;
    /** 状态 */
    enable?: boolean;
    id?: number;
    lastLoginTime?: string;
    nickName?: string;
    /** 用户手机号 */
    phone?: string;
    postId?: number;
    /** 多岗位 */
    postIds?: string;
    remark?: string;
    roleId?: number;
    /** 多角色 */
    roleIds?: string;
    roles?: RoleSelectResponse[];
    updateTime?: string;
    /** 用户登录名 */
    userName?: string;
  };

  type Zap = {
    /** 日志文件夹 */
    director?: string;
    /** 编码级 */
    'encode-level'?: string;
    /** 输出 */
    format?: string;
    /** 级别 */
    level?: string;
    /** 输出控制台 */
    'log-in-console'?: boolean;
    /** 日志留存时间 */
    'max-age'?: number;
    /** 日志前缀 */
    prefix?: string;
    /** 显示行 */
    'show-line'?: boolean;
    /** 栈名 */
    'stacktrace-key'?: string;
  };
}
