declare module '*.vue' {
  import Vue from vue
  export default Vue
}

import VueRouter, { Route } from 'vue-router'

declare module 'vue/types/vue' {
  interface Vue {
    /**
     * 全局 store
     */
    $store: Store;
  }
}

interface Task {
  name: string;
  type: string;
  file: File;
  size: number;
  /**
   * 上传状态
   * 
   * 0 未上传;
   * 1 上传中;
   * 2 上传成功;
   * 3 上传失败;
   */
  status: 0 | 1 | 2 | 3;
  progress: number;
}

interface Store {
  user?: User;

  /**
   * 首页统计 tab active值
   */
  statistic_tab_active: number;

  /**
   * 上传资源弹窗
   */
  upload_dialog: {
    visible: false;
    tasks: Array<Task>
  },

  /**
   * 资源预览弹窗
   */
  resource_preview_dialog: {
    visible: false;
    resource: Object
  },

  /**
   * 设置用户信息
   * 
   * @param user 
   */
  setUser(user: User): void;

  /**
   * 设置token信息
   * 
   * @param token 
   */
  setToken(token: string): void;

  /**
   * 上传文件
   */
  upload(): Promise;

  /**
   * 显示上传弹窗
   */
  showUploadDialog(): void;

  /**
   * 显示资源预览弹窗
   */
  showResourcePreviewDialog(resource:Object): void;
}

interface User {
  /**
   * 用户 ID
   */
  id: string;
  /**
   * 用户名
   */
  username: string;
  /**
   * 密码
   */
  password: string;
  /**
   * 姓名
   */
  name: string;
  /**
   * 照片，对应resource表的ID
   */
  photo: number;
  /**
   * 性别：0/女，1/男
   */
  sex: number;
  /**
   * 出生年月
   */
  birthday: Date;
  /**
   * 身份证号
   */
  idcard: string;
  /**
   * 职位
   */
  identity: string;
  /**
   * 电话
   */
  phone: string;
  /**
   * 邮箱
   */
  email: string;
  /**
   * 角色 ID
   */
  roleId: number;
  /**
   * 组织机构 ID
   */
  orgId: number;
  /**
   * 多级组织机构 ID 
   */
  orgIds: string;
}