全新的前端ui

This commit is contained in:
eafonyang
2026-07-16 16:34:18 +08:00
parent 1a9003261d
commit e59d9c72ee
352 changed files with 39009 additions and 196 deletions
@@ -0,0 +1,7 @@
schema_version: 1
module_path: ""
title: Luxsin 音频设备管理后台(前后端单体仓库)
scope: []
source_files: []
depends_on: []
related_to: []
@@ -0,0 +1 @@
后端:Express + Sequelize + JWT + Redis + Meilisearch + AWS S3X9 OTA 包存储)+ squiglink 曲线客户端;前端:Vue 3 + Vite + Element Plus + axios;构建与运行:pnpm v11、Node 22、Docker ComposeNginx 静态托管 + Node API)。
@@ -0,0 +1,7 @@
仓库采用前后端分离、Docker Compose 编排的单体部署形态:
- `backend/src` 为 Express 应用,入口 `app.js` 通过 `routes/index.js` 聚合各业务路由(auth、brands、models、ota、blacklist、users 等),按 MVC 分层组织:`models/` 使用 Sequelize 定义数据模型并统一由 `models/index.js` 初始化连接;`services/` 封装外部依赖(S3、Redis EQ 缓存、Meilisearch、squiglink 曲线服务、OTA 存储);`middleware/` 注入认证与请求体大小限制;`validators/` 用 zod 校验入参。
- `frontend/` 为 Vue 3 + Element Plus SPAVite 构建产物 `dist/` 由 Nginx 容器静态托管,并通过 `/api` 反向代理到后端 8000 端口;`src/api/` 按领域拆分 API 调用,`views/` 对应功能页面,`components/` 存放通用组件(TabsView、ChangePasswordDialog 等)。
- `frontend_v2/` 是基于 Soybean Admin 模板的重构分支,采用 pnpm workspace 多包结构(@soybeanjs/axios、hooks、scripts 等),尚未替换主前端。
- `autoeq/` 存放第三方测量 CSV/TXT 数据及日期归档,供 OTA 推送时读取频响曲线。
- 根级 `docker-compose.yml` 编排 backendNode 22 Alpine 镜像)与 frontendnginx:alpine)两个服务,共享 `audio-network` 网络,宿主机卷挂载 `/data/projects/source` 用于 X9 OTA 包本地存储。
- 部署脚本 `scripts/upload.sh` 负责将 dist、后端源码、compose 文件上传至服务器 `/data/project/dashboard/`,环境变量集中维护在根 `.env`
@@ -0,0 +1 @@
基于 Node.js + Vue 3 的 Luxsin 音频设备与 OTA 升级管理后台,提供品牌/型号/黑名单/OTA/用户等管理能力。
@@ -0,0 +1 @@
首次部署需在服务器创建 `/data/project/dashboard/.env`(参考 `.env.example`)并手动上传代码后执行 `docker compose build --no-cache backend && docker compose up -d`;本地开发推荐先 `cd frontend && pnpm build` 生成 dist,再分别启动后端与前端 dev server,或直接用 `./scripts/upload.sh all` 一键上传。
@@ -0,0 +1,5 @@
- 后端路由按领域拆分为独立文件(如 `routes/models.js``routes/ota.js`),并在 `routes/index.js` 中统一注册,控制器内直接操作 Sequelize model。
- 每个业务模块配套一个 `validators/<module>.js`,使用 zod schema 对入参进行结构化校验,路由层在执行业务前调用 validator。
- 对外部依赖(S3、Redis、Meilisearch、squiglink)统一收敛到 `services/` 目录下的单一 client 文件,路由层不直接调用 SDK。
- 前端 API 调用按领域拆分到 `src/api/*.js`,统一通过 `src/utils/request.js` 封装的 axios 实例发起,携带 JWT 与基础路径。
- 前端视图按功能域划分目录(`views/brand/``views/model/``views/ota/` 等),复杂页面内部再细分 `components/``composables/`