修改 wiki
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
schema_version: 1
|
||||
module_path: ""
|
||||
title: 耳机品牌与 OTA 升级管理平台(前后端编排)
|
||||
scope:
|
||||
- .gitignore
|
||||
- README.md
|
||||
- DEPLOY.md
|
||||
- docker-compose.yml
|
||||
- scripts/
|
||||
- .env
|
||||
- .env.example
|
||||
source_files: []
|
||||
depends_on: []
|
||||
related_to: []
|
||||
@@ -0,0 +1,4 @@
|
||||
- **服务编排**:`docker-compose.yml` 定义 `backend`(Node.js + Sequelize)和 `frontend`(Nginx 静态托管)两个服务,共用 `audio-network` 桥接网络,前端通过 Nginx 反向代理 `/api` 至后端。
|
||||
- **配置边界**:根目录 `.env` 为唯一环境变量源,Compose 注入后端容器;`.env.example` 提供模板,禁止子模块各自维护环境文件。
|
||||
- **存储契约**:宿主机 `/data/projects/source` 挂载至后端容器,作为 OTA 升级包的持久化共享卷,前后端以此路径为约定进行文件交互。
|
||||
- **部署流水线**:`scripts/upload.sh` 基于 rsync/ssh 将前端构建产物、后端源码与编排文件增量推送至服务器,配合 `DEPLOY.md` 形成本地→远端的标准化运维路径。
|
||||
@@ -0,0 +1 @@
|
||||
通过 Docker Compose 统一编排 Vue 3 前端与 Express 后端,并以标准化脚本驱动从本地到远程服务器的增量同步与容器化部署。
|
||||
@@ -0,0 +1,9 @@
|
||||
schema_version: 1
|
||||
module_path: frontend
|
||||
title: 耳机品牌与 OTA 升级管理前端
|
||||
scope:
|
||||
- frontend/
|
||||
source_files: []
|
||||
depends_on: []
|
||||
related_to:
|
||||
- path: backend
|
||||
@@ -0,0 +1 @@
|
||||
Vue 3, Vite, Element Plus, Axios, Vue Router
|
||||
@@ -0,0 +1,4 @@
|
||||
- **技术栈**: 采用 Vue 3 (Composition API) + Vite 构建,UI 框架为 Element Plus,路由使用 vue-router。
|
||||
- **目录结构**: 遵循经典的前端分层架构:`src/api` 封装 Axios 请求与业务接口;`src/views` 存放页面级组件;`src/components` 存放通用 UI 组件;`src/layout` 定义整体布局(侧边栏、顶部导航);`src/utils` 提供认证、HTTP 拦截器等工具函数。
|
||||
- **核心机制**: `src/utils/request.js` 实现了统一的 HTTP 拦截器,处理 JWT Token 注入、401/403 错误自动跳转登录及全局错误提示。`src/router/index.js` 配置了基于角色的路由守卫,支持超级管理员权限控制。
|
||||
- **状态管理**: 未引入 Pinia/Vuex,认证状态(Token、用户信息)通过 `localStorage` 配合 `src/utils/auth.js` 中的工具函数进行持久化与管理。
|
||||
@@ -0,0 +1 @@
|
||||
基于 Vue 3 和 Element Plus 构建的耳机品牌、型号及 OTA 升级管理的单页应用。
|
||||
@@ -0,0 +1,3 @@
|
||||
- API 模块按业务领域拆分(如 auth.js, brand.js),统一导出异步方法并依赖 @/utils/request 实例。
|
||||
- 视图组件采用路径映射命名规范,每个业务模块在 views 下拥有独立文件夹及 index.vue 入口文件。
|
||||
- 认证逻辑集中在 utils/auth.js,提供 getToken, isSuperAdmin, clearAuth 等原子操作供路由守卫和组件调用。
|
||||
@@ -0,0 +1,9 @@
|
||||
schema_version: 1
|
||||
module_path: backend
|
||||
title: 耳机品牌与型号管理后端 API
|
||||
scope:
|
||||
- backend/
|
||||
source_files: []
|
||||
depends_on: []
|
||||
related_to:
|
||||
- path: frontend
|
||||
@@ -0,0 +1 @@
|
||||
Node.js 22 (Alpine) + Express v4;Sequelize v6 + mysql2 访问 MySQL;ioredis 连接 Redis 缓存 EQ;@aws-sdk/client-s3 上传 OTA 包与测量文件;axios 调用 Meilisearch 搜索索引;jsonwebtoken 签发/验证 JWT;zod 做参数校验;winston 输出到 `logs/app.log`。
|
||||
@@ -0,0 +1,4 @@
|
||||
- 入口 `src/app.js` 加载 `.env`(`config/loadEnv.js` 从仓库根目录读取)、注册 CORS/JSON/bodyLimit 中间件、挂载路由数组并调用 `sequelize.sync()` 建表后执行 `ensureBootstrapSuperAdmin` 引导超级管理员。
|
||||
- 分层组织:`routes/` 按业务域拆分(auth, brands, models, ota, blacklist, otaTargetDevice, shareCodeLogs, users, dashboard),由 `routes/index.js` 汇总导出供 app 遍历挂载;`models/` 使用 Sequelize 定义实体并通过 `index.js` 统一导出;`services/` 封装外部依赖(S3、Redis、Meilisearch、曲线服务);`middleware/` 提供认证与请求体大小限制;`utils/` 暴露 JWT、密码哈希、统一响应格式;`validators/` 以 zod schema 校验入参。
|
||||
- 认证边界:`middleware/auth.js` 解析 Bearer token 注入 `req.user`,受保护路由在各自文件中通过 `router.use(authMiddleware)` 全局启用,仅 `/health`、根路径等公开接口例外;`requireSuperAdmin` 用于超管专用端点。
|
||||
- 启动流程:`start.sh` → `node src/app.js` → `loadEnv` → `sequelize.sync()` → `userBootstrap.ensureBootstrapSuperAdmin()` → `app.listen(8083)`,异常时降级继续运行。
|
||||
@@ -0,0 +1 @@
|
||||
基于 Express + Sequelize 的 RESTful 服务,提供耳机品牌、型号、OTA 升级、用户与黑名单管理的后端接口。
|
||||
@@ -0,0 +1 @@
|
||||
包管理器锁定为 `pnpm@11.5.2`,安装需 `pnpm install --frozen-lockfile`;本地开发可用 `pnpm dev`(nodemon 热重载),生产通过 `start.sh`/`stop.sh`/`restart.sh` 或 Docker 镜像启动;首次启动若 `dashboard_user` 为空则根据 `DASHBOARD_ADMIN_USERNAME/PASSWORD` 环境变量创建初始超级管理员。
|
||||
@@ -0,0 +1,5 @@
|
||||
- 所有 API 返回统一 JSON 结构,包含 `code`(1:成功 / 0:错误 / 2:无数据)、`msg` 和 `data` 字段,由 `utils/response.js` 的 `ApiResponse` 生成。
|
||||
- 受保护路由在各自文件顶部通过 `router.use(authMiddleware)` 全局启用 JWT 校验,仅健康检查等公开接口例外。
|
||||
- 更新操作显式判断请求体字段是否为 `undefined` 或 `'null'` 字符串,区分“未提供”与“设为空”,避免覆盖现有值。
|
||||
- 关键业务动作(登录、CRUD、权限拒绝)通过 `logger.info/warn/error` 记录到 `logs/app.log`,错误堆栈附带上下文信息。
|
||||
- 环境变量集中通过 `config/loadEnv.js` 从仓库根目录 `.env` 加载,Docker 场景下由 compose env_file 注入而不覆盖已有变量。
|
||||
Reference in New Issue
Block a user