-
Notifications
You must be signed in to change notification settings - Fork 0
02 frontend extension guide
github-actions[bot] edited this page Apr 1, 2026
·
1 revision
| 路径 | 说明 |
|---|---|
frontend/src/views/ |
页面级组件,按业务域分子目录(projects、commissions、testing 等) |
frontend/src/router/ |
路由;index.ts 汇总;modules/*.ts 按模块拆分 |
frontend/src/api/ |
对后端 REST 的封装(axios 实例、URL 路径) |
frontend/src/stores/ |
Pinia 状态(如 user.ts) |
frontend/src/utils/ |
工具:request.ts(拦截器、幂等键)、auth.ts、permission.ts、apiField.ts 等 |
frontend/src/components/ |
可复用组件(如 Layout) |
frontend/src/types/ |
TypeScript 类型定义 |
frontend/src/composables/ |
组合式函数 |
路径别名 @ → src(vite.config.ts)。
- 组件文件:PascalCase,如
CommissionList.vue。 - 组合式 API:优先
<script setup lang="ts">。 - API 函数:语义化命名,与后端资源对齐(如
fetchCommissionList)。
统一使用 frontend/src/utils/request.ts 导出的 axios 实例:
-
baseURL: '/api',实际请求为/api/v1/...(注意与 Vite 代理配合)。 - 自动附加
Authorization: Bearer <access>(utils/auth.ts)。 - 对 POST/PUT/PATCH/DELETE(除登录、刷新路径)自动添加
Idempotency-Key,与后端幂等中间件一致。
拦截器行为要点:
- 若 JSON 含
code且为 200 / 201(含字符串"200"),则 resolve 为data字段内容(若存在),否则为整包。 -
无
code字段 的响应(如登录返回access/refresh)整包返回。
因此调用分页接口时,业务代码拿到的常是:
{ count, page, page_size, results }集成爬虫、工标网等接口时,若存在 data 嵌套,使用 unwrapCrawlPayload(utils/apiField.ts)与 apiField 双读 snake_case / camelCase。
- 路由
meta.permission与utils/permission.ts、stores/user中的权限列表配合,控制菜单与进入页面。 - 全局路由守卫会
ensureProfile()拉取/system/me/,避免刷新后权限为空。
新增业务页面时:
- 在
views/<domain>/增加页面组件。 - 在
router/modules/<domain>.ts注册路由及meta.title/meta.permission。 - 若侧栏由
Sidebar.vue维护,同步增加菜单项(按现有模式)。
-
views/example/ExampleList.vue:表格 +onMounted调api/example.ts中listExamples。 -
api/example.ts:
import request from '@/utils/request'
export function listExamples(params?: Record<string, unknown>) {
return request.get('/v1/examples/', { params })
}-
router/modules/example.ts导出RouteRecordRaw[],并在router/index.ts中import与展开。
- 列表查询参数与 DRF
filter/search/ordering对齐。 - 日期提交格式与后端
DateField/DateTimeField一致(常用 ISO 字符串)。 - 上传文件使用
FormData与对应Content-Type(勿被默认 JSON 拦截器误用)。
| 命令 | 作用 |
|---|---|
npm run dev |
Vite 开发服务器 |
npm run build |
vue-tsc -b && vite build 产出 dist/
|
CI(.github/workflows/frontend-ci.yml)还会执行 npm run type-check、npm run lint(若 package.json 未定义脚本需补齐或调整 CI)。
- 在功能分支开发,保持单次 MR 目标单一。
- 提交前本地
npm run build,确保类型与打包通过。 - 与 UI 规范保持一致:Element Plus 组件、现有布局与间距习惯。
- MR 描述中说明:路由/权限变更、是否依赖后端迁移或新环境变量。
- 不要在页面中手写完整 API 根路径时忽略
/api与/v1前缀的一致性。 - 令牌仅存
localStorage时,注意 XSS 风险;生产应配合 CSP、依赖审计与 HTTPS。 - 大列表注意分页与后端
page_size上限(默认最大 100)。