Skip to content

开发必读文档

接口对接

默认返回以下格式,如需修改请到 src/typings/http.d.ts 文件修改

ts
/** 基础响应 */
interface BaseResponse<T = unknown> {
  // 状态码
  code: number;
  // 消息
  msg: string;
  // 数据
  data: T;
}

网络请求

默认返回 data 中的数据而不是整个响应体

ts
try {
  const { token, refreshToken } = await fetchLogin({
    userName: username,
    password,
  });
} catch (error) {
  if (error instanceof HttpError) {
    // 这里可以根据状态码进行不同的处理
    // console.log(error.code)
  }
}

菜单数据(asyncRoutes.ts)

RoutesAlias.Layout 指向的是布局容器,后端返回的菜单数据中,component 字段需要指向 /index/index

roles 字段用于前端控制模式,通过获取用户信息接口返回的 roles 跟菜单数据 asyncRoutes 中的 roles 进行对比实现菜单过滤(只有拥有这些角色的用户才能访问)

后端模式直接通过接口返回对应角色的菜单即可,不需要返回 roles 字段

ts
{
    name: 'Dashboard',
    path: '/dashboard',
    component: RoutesAlias.Layout,
    meta: {
      title: 'menus.dashboard.title',
      icon: '&#xe721;',
      roles: ['R_SUPER', 'R_ADMIN']
    },
    children: [
      {
        path: 'console',
        name: 'Console',
        component: RoutesAlias.Dashboard,
        meta: {
          title: 'menus.dashboard.console',
          keepAlive: false,
          fixedTab: true
        }
      },
    ]
  }

打包大小说明

  • 完整版项目:约 10MB

  • 精简版项目:约 5MB

项目默认开启 gzip 压缩,因此会额外生成 .gz 文件:

关闭 gzip 时,实际打包体积约 4.5MB

开启 gzip 后,产物体积更小(浏览器请求时会优先加载 .gz 文件)

ts
viteCompression({
  verbose: false,
  disable: false,
  algorithm: 'gzip',
  ext: '.gz',
  threshold: 10240,
  deleteOriginFile: false,
})

进一步优化方案

若对体积有更高要求,可通过以下方式优化,可轻易降至 3.5MB 左右:

  • 精简或替换图标库

  • 移除非必要图片资源

  • 减少第三方库依赖,或替换为更轻量的方案

根据 MIT 许可证发布