Skip to content

02 architecture and tech stack

github-actions[bot] edited this page Apr 1, 2026 · 1 revision

架构与技术栈

适用对象

  • 开发与运维人员:部署、排障、接口联调。
  • 技术负责人:评估扩展点与安全边界。

前置条件

  • 已阅读仓库根目录 README.md 中的环境与端口说明。
  • 了解本系统为 前后端分离,浏览器只与前端静态资源及经 Nginx 反代的 API 交互。

页面入口(架构视角)

前端 路由frontend/src/router/index.ts 聚合各模块子路由:

  • 公共路由:/login
  • 主应用:/MainLayout,子路由包含 dashboardsystemprojectentrustmentsampleequipmentstaffenvironmentqualityconsumabletestingreports 等。
  • 通配:未匹配路径重定向至 /dashboard(非登录页)。

权限router.beforeEach 中调用 getRoutePermission + canAccessRoutePermission;无权限时提示并跳回 /dashboard

层级 路径/组件 说明
布局 MainLayout.vue 侧栏 Sidebar.vue + 顶栏 + <router-view>
菜单 Sidebar.vuerawMenuItems 与业务路由一致,按权限过滤
API frontend/src/utils/request.ts baseURL: '/api',统一处理 { code, message, data } 信封

字段说明

架构文档不定义业务字段;API 响应普遍采用:

{
  "code": 200,
  "message": "success",
  "data": { }
}

前端对 code 兼容数字与纯数字字符串(如 "200"),避免网关改写类型导致不解包 data

标准操作步骤(SOP)

本地开发

  1. 后端DJANGO_SETTINGS_MODULE=limis.settings.devmigrationsrunserver(默认 8000)。
  2. 前端:Vite 开发服务器,将 /api 代理至后端(见 frontend/vite.config.ts)。
  3. 鉴权:登录获取 JWT,请求头 Authorization: Bearer <token>;401 时清除 token 并跳转 /login

部署(Docker 概览)

  1. README 使用 docker compose 构建并启动。
  2. 对外通常 80 为前端,API 同域 /api/;数据库、Redis、MinIO 等端口以 docker-compose.yml 为准。

排查接口问题

  1. 浏览器 Network 查看响应体是否为信封格式。
  2. 若前端拿不到业务数据,核对 code 类型与 data 嵌套(见 apiField / unwrapCrawlPayload 等业务规则)。
  3. 后端模块权限:LimsModulePermission 与路由 lims_module 配置需一致。

常见错误

现象 可能原因 处理
前端列表为空但 Network 200 code 为字符串 "200" 旧逻辑未解包 已统一在 request.ts 处理,确认未使用绕过封装的请求
403/无权访问 用户角色未包含路由 meta.permission 在系统管理配置角色权限
重复提交 写操作带 Idempotency-Key 幂等设计,避免重复点击导致重复创建

数据核对清单

  • 生产环境 VITE_* 或构建产物中 API 基路径与 Nginx /api/ 一致。
  • JWT 过期策略与前端 handleUnauthorized 行为符合安全要求。
  • 后端 StandardPagination 分页返回 data.results 与前端列表解析一致。

与上下游模块关系

后端应用结构(概念)

  • apps/projects:工程项目、参建单位、分部分项、合同、见证人。
  • apps/commissions:委托单、委托项目行、合同评审。
  • apps/samples:样品、样品组、处置。
  • apps/testing:检测分类/方法/参数、任务 TestTask、原始记录 OriginalRecord、结果 TestResult、判定规则等。
  • apps/reports:报告模板、报告、审批与发放。
  • apps/standards:标准规范等(前端列表在 /quality/standards)。
  • apps/quality:内审、管评、不符合项等。
  • apps/system:用户、角色、审计日志等。

请求链路

浏览器 → Nginx(静态 + /api 反代)→ Gunicorn/Django → PostgreSQL
                              ↓
                         JWT 中间件 / 权限

与前端路由的映射关系

每个业务模块的 页面路由(如 /project)通过 API 客户端frontend/src/api/*)调用对应 ViewSet;权限字符串在路由 meta.permission 与后端模块权限中成对出现,部署与发版时需同步变更。

Clone this wiki locally