docs(tabs): 更新标签页视图组件设计与交互细节

- 采用固定内边距策略,解决标签页悬停时的布局抖动问题
- 统一关闭按钮尺寸为14x14px,提升视觉一致性
- 优化活动标签和悬停状态的层级管理,确保视觉层次正确
- 增强视觉反馈,添加内嵌阴影效果改善用户体验
- 添加平滑颜色过渡动画(0.2秒),提升交互流畅度
- 支持玻璃拟态设计系统,实现现代化视觉风格
- 完善工具箱图标支持,确保标签页工具功能准确显示
This commit is contained in:
eafonyang
2026-07-15 09:58:56 +08:00
parent 003b44e2bd
commit f48f1cce70
27 changed files with 670 additions and 212 deletions
@@ -0,0 +1,7 @@
schema_version: 1
module_path: ""
title: Luxsin CMS Dashboard(前后端单体仓库)
scope: []
source_files: []
depends_on: []
related_to: []
@@ -0,0 +1 @@
前端:Vue 3 + Vite + Element Plus + vue-router + axios;后端:Express + Sequelize(ORM) + MySQL2 + JSON Web Token + Multer(文件上传) + Axios(上游曲线服务) + Winston(日志) + ioredis + @aws-sdk/client-s3;构建产物由 Nginx 静态托管,开发期使用 nodemon 热重载。
@@ -0,0 +1,5 @@
仓库为前后端同仓部署结构:
- `backend/src` 采用经典 Express 分层:`app.js` 入口挂载 CORS、JSON/bodyLimit 中间件后按目录遍历加载 `routes/*``models/*` 通过 Sequelize 定义 ORM 实体并由 `config/database.js` 初始化连接;`services/*` 封装外部依赖(S3/OtaStorage/MeasurementStorage/CurveClient/Squiglink),`middleware/auth.js` 负责 JWT 校验,`validators/*` 使用 Zod 做入参校验。
- `frontend/src``layout/index.vue` 作为全局壳,内部用 `el-container` 组合侧栏(`sidebar-glass`)、顶栏(`lux-header`)、主内容区(`TabsView` 多标签页)和底栏;路由由 `router/index.js` 驱动,API 调用集中在 `api/*.js`,鉴权状态在 `utils/auth.js`
- 样式体系完全收敛到 `frontend/src/styles/lux-theme.css`,通过 `:root` CSS 变量统一色板、模糊半径、阴影层级,并以 `.lux-shell` 命名空间覆盖 Element Plus 组件默认样式,实现 Glassmorphism + Dimensional Layering + Dark Mode OLED 三层次视觉。
- 部署层由根级 `docker-compose.yml` 编排:后端容器暴露 8083,前端以 nginx:alpine 静态托管 `frontend/dist`,并通过 `nginx.conf` 反向代理 `/api` 到后端;`autoeq/` 下存放测量 CSV 数据供服务读取。
@@ -0,0 +1 @@
基于 Vue3 + Element Plus 与 Express/Sequelize 的耳机品牌型号 OTA 管理平台,提供玻璃拟态暗色主题的管理后台。
@@ -0,0 +1 @@
本地启动需先复制 `.env.example``.env` 并填写数据库/Redis/S3 等环境变量;运行 `docker compose up -d` 即可同时拉起后端与前端(端口 8082/8083)。前端单独开发:`cd frontend && pnpm dev`;后端单独开发:`cd backend && pnpm dev`
@@ -0,0 +1,6 @@
- CSS 主题通过 `:root` 下的 `--lux-*` 变量集中管理颜色、模糊、阴影、圆角,组件样式一律引用这些变量而非硬编码色值。
- 所有覆盖 Element Plus 的全局样式都包裹在 `.lux-shell` 命名空间下,避免污染登录页等非 shell 页面。
- 后端路由文件只导出 `{ path, handler }` 对象数组,由 `routes/index.js` 统一遍历注册,新增接口只需新建文件并在 index 中引入。
- 模型定义遵循 `src/models/<Name>.js` 单文件一个 Sequelize Model 的模式,并通过 `src/models/index.js` 统一关联与导出。
- 业务逻辑从路由中下沉到 `src/services/*`,路由仅做参数校验与响应包装,保持控制器薄而纯。
- 前端 API 模块按资源维度拆分为 `api/*.js`,每个模块暴露同名函数,组件通过 `import { listModels } from '@/api/model'` 直接调用。