/**
 * Namespace Api
 *
 * All backend api type
 */
declare namespace Api {
  namespace Common {
    /** common params of paginating */
    interface PaginatingCommonParams {
      /** current page number */
      current: number;
      /** page size */
      size: number;
      /** total count */
      total: number;
    }

    /** common params of paginating query list data */
    interface PaginatingQueryRecord<T = any> extends PaginatingCommonParams {
      list: T[];
    }

    /** common search params of table */
    type CommonSearchParams = Pick<Common.PaginatingCommonParams, 'current' | 'size'>;

    /**
     * enable status
     *
     * - "1": enabled
     * - "0": disabled
     */
    type EnableStatus = '0' | '1';

    /** common record */
    type CommonRecord<T = any> = {
      /** record id */
      id: number;
      /** record creator */
      createBy: string;
      /** record create time */
      createTime: string;
      /** record updater */
      updateBy: string;
      /** record update time */
      updateTime: string;
      /** record status */
      status: EnableStatus | null;
    } & T;
    /**
     * 通用状态
     */
    type commonStatus = 0 | 1;
  }

  /**
   * namespace Auth
   *
   * backend api module: "auth"
   */
  namespace Auth {
    interface LoginToken {
      access_token: string;
      refresh_token: string;
    }

    interface UserInfo {
      userId: string;
      username: string;
      roles: string[];
      buttons: string[];
      email: string;
      mobile: string;
      perms: string[];
    }
    interface UserPassWord {
      password: string;
      newPassword: string;
    }
  }

  /**
   * namespace Route
   *
   * backend api module: "route"
   */
  namespace Route {
    // type ElegantConstRoute = import('@elegant-router/types').ElegantConstRoute;

    interface MenuRoute extends ElegantConstRoute {
      id: string;
    }

    interface UserRoute {
      [x: string]: any;
      routes: MenuRoute[];
      home: import('@elegant-router/types').LastLevelRouteKey;
    }
  }
  /**
   * 商品管理模块
   */
  /**
   * 政企管理模块
   */
  namespace government {
    /**
     * 积分充值实体类
     *
     * PointsRecharge
     */
    interface PointsRecharge {
      /**
       * 渠道（企业ID）
       */
      channelId?: number;
      /**
       * 渠道（企业）名称
       */
      channelName?: string;
      /**
       * 创建者
       */
      createBy?: string;
      /**
       * 创建时间
       */
      createTime?: string;
      /**
       * 过期日期
       */
      expiryDate?: string;
      /**
       * 主键
       */
      id?: number;
      /**
       * 充值积分
       */
      points?: number;
      /**
       * 充值单号
       */
      rechargeNumber?: string;
      /**
       * 积分状态（1-未过期，2-过期）
       */
      rechargeStatus?: number;
      /**
       * 备注
       */
      remark?: string;
      /**
       * 充值类型
       */
      type?: number;
      /**
       * 更新时间
       */
      updateTime?: string;
      /**
       * 用户ID
       */
      userId?: number;
      /**
       * 员工名称
       */
      userName?: string;
      /**
       * 电话号码
       */
      userPhone?: string;
      [property: string]: any;
    }

    /**
     * 充值积分记录统计列表
     *
     * PointsRechargeVO
     */
    interface PointsRechargeVO {
      /**
       * 渠道（企业）名称
       */
      channelName?: string;
      /**
       * 操作时间
       */
      createTime?: string;
      /**
       * 总充值积分
       */
      totalPoints?: number;
      /**
       * 总充值人数
       */
      totalUserCount?: number;
      [property: string]: any;
    }
    /**
     * 积分任务执行失败记录列表
     */
    interface PointsFailureRecordVO {
      /**
       * 操作人
       */
      createBy?: string;
      /**
       * 时间
       */
      createTime?: string;
      /**
       * 失败状态数量
       */
      failureStatus?: number;
      /**
       * 任务名称
       */
      name?: string;
      /**
       * 成功状态数量
       */
      successStatus?: number;
      [property: string]: any;
    }
    /**
     * 渠道统计
     *
     * ChannelVO
     */
    interface ChannelVO {
      /**
       * 渠道名称
       */
      channelName?: string;
      /**
       * 企业编号
       */
      channelNo?: string;
      /**
       * 创建日期
       */
      createTime?: { [key: string]: any };
      /**
       * 正常员工数
       */
      normalCount?: number;
      /**
       * 总员工数
       */
      staffCount?: number;
      /**
       * 企业状态（1-正常，0-停用）
       */
      status: Api.Common.commonStatus;
      /**
       * 渠道类型（1-企业用户，2-B端用户，3-C端用户）
       */
      type?: number;
      /**
       * 渠道等级
       */
      level?: number;
      [property: string]: any;
    }
    /**
     * 员工列表
     */
    interface userList {
      /**
       * 可用
       */
      available: number;
      /**
       * 所属企业
       */
      channelName: string;

      /**
       * 已过期积分
       */
      expired: number;
      /**
       * 真实姓名
       */
      realName: string;
      /**
       * 状态  1正常 ，0 无效
       */
      status: Common.commonStatus;
      /**
       * 总积分
       */
      total: number;
      /**
       * 使用积分
       */
      used: number;
      /**
       *  手机号
       */
      userMobile: string;
      /**
       * 员工id
       */
      userId: number;
    }
    /**
     * 员工导入记录
     */
    interface importRecordList {
      batchNo: string;
      channel: string;
      completeTime: string;
      createTime: string;
      error: number;
      id: number;
      operator: string;
      phone: string;
      realName: string;
      success: number;
      taskName: string;
      total: number;
    }
  }
  namespace System {
    /** 字典类型 */
    type DictType = {
      /**
       * 字典类型ID
       */
      id: number;
      /**
       * 类型编码
       */
      code: string;
      /**
       * 类型名称
       */
      name: string;
      /**
       * 状态(1:启用;0:禁用)
       */
      status?: number;
      /**
       * 备注
       */
      remark?: string;
    };
    type roleList = Common.CommonRecord<{
      /**
       * 角色编码
       */
      code?: string;
      /**
       * 角色名称
       */
      name?: string;
      /**
       * 排序
       */
      sort?: number;
    }>;
    type DictData = Common.CommonRecord<{
      /**
       * 字典名称
       */
      name?: string;
      /**
       * 字典值
       */
      value?: string;
    }>;
    type DictDataList = {
      /**
       * 字典ID
       */
      id?: number;
      /**
       * 字典名称
       */
      name?: string;
      /**
       * 状态(1:启用;0:禁用)
       */
      status?: number;
      /**
       * 字典值
       */
      value?: string;
    };
  }
  namespace goods {
    interface ShopCategory {
      children?: ShopCategory[];
      iconUrl?: string;
      id?: number;
      level?: number;
      name?: string;
      parentId?: number;
      sort?: number;
      visible?: number;
      [property: string]: any;
    }
  }
}
