docs(tabs): 更新标签页视图组件设计与交互细节
- 采用固定内边距策略,解决标签页悬停时的布局抖动问题 - 统一关闭按钮尺寸为14x14px,提升视觉一致性 - 优化活动标签和悬停状态的层级管理,确保视觉层次正确 - 增强视觉反馈,添加内嵌阴影效果改善用户体验 - 添加平滑颜色过渡动画(0.2秒),提升交互流畅度 - 支持玻璃拟态设计系统,实现现代化视觉风格 - 完善工具箱图标支持,确保标签页工具功能准确显示
This commit is contained in:
@@ -12,11 +12,12 @@
|
||||
|
||||
## 更新摘要
|
||||
**所做更改**
|
||||
- 增强了标签页组件的交互体验,添加了平滑的颜色过渡动画(0.2s ease)
|
||||
- 支持新的玻璃拟态设计系统,提供更现代的视觉效果
|
||||
- 优化了图标和标签项的视觉反馈机制
|
||||
- 改进了主题样式与Element Plus组件的集成效果
|
||||
- **新增**:完善了工具箱图标支持,在标签页中正确显示工具箱相关功能
|
||||
- **现代化设计系统**:采用固定内边距策略,解决标签页悬停时的布局抖动问题
|
||||
- **一致的关闭按钮尺寸**:统一关闭按钮为14x14px,提供稳定的视觉体验
|
||||
- **改进的层级管理**:优化活动标签和悬停状态的z-index管理,确保正确的视觉层次
|
||||
- **增强的视觉反馈**:通过内嵌阴影提升交互反馈效果,改善用户体验
|
||||
- **平滑过渡动画**:添加0.2s颜色过渡动画,提供更流畅的交互体验
|
||||
- **玻璃拟态设计支持**:集成现代玻璃质感视觉效果
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
@@ -31,7 +32,7 @@
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本文件为标签页视图组件的综合技术文档,聚焦于标签页的状态管理、数据结构设计、事件处理系统、生命周期管理、主题与图标配置以及与路由系统的集成与状态同步机制。该组件基于 Vue 3 Composition API 与 Element Plus Tabs 实现,支持标签页的激活、关闭、右键菜单操作、持久化存储,并通过 KeepAlive 实现组件缓存与内存优化。**最新更新**:增强了平滑颜色过渡动画(0.2s ease)以改善交互体验,并支持新的玻璃拟态设计系统,同时完善了工具箱图标的完整支持。
|
||||
本文件为标签页视图组件的综合技术文档,聚焦于标签页的状态管理、数据结构设计、事件处理系统、生命周期管理、主题与图标配置以及与路由系统的集成与状态同步机制。该组件基于 Vue 3 Composition API 与 Element Plus Tabs 实现,支持标签页的激活、关闭、右键菜单操作、持久化存储,并通过 KeepAlive 实现组件缓存与内存优化。**最新更新**:实现了现代化的标签页设计系统,包括固定内边距策略、一致的关闭按钮尺寸、改进的层级管理和增强的视觉反馈效果。
|
||||
|
||||
## 项目结构
|
||||
标签页视图组件位于前端工程的组件目录中,与路由、布局及主题样式协同工作:
|
||||
@@ -64,7 +65,7 @@ TV --> TB
|
||||
- [TabsView.vue:1-53](file://frontend/src/components/TabsView.vue#L1-L53)
|
||||
- [index.js:1-109](file://frontend/src/router/index.js#L1-L109)
|
||||
- [tabs.js:1-9](file://frontend/src/utils/tabs.js#L1-L9)
|
||||
- [lux-theme.css:740-767](file://frontend/src/styles/lux-theme.css#L740-L767)
|
||||
- [lux-theme.css:776-847](file://frontend/src/styles/lux-theme.css#L776-L847)
|
||||
- [index.vue:1-231](file://frontend/src/views/toolbox/luxsin-controller/index.vue#L1-L231)
|
||||
|
||||
**章节来源**
|
||||
@@ -72,7 +73,7 @@ TV --> TB
|
||||
- [TabsView.vue:1-53](file://frontend/src/components/TabsView.vue#L1-L53)
|
||||
- [index.js:1-109](file://frontend/src/router/index.js#L1-L109)
|
||||
- [tabs.js:1-9](file://frontend/src/utils/tabs.js#L1-L9)
|
||||
- [lux-theme.css:740-767](file://frontend/src/styles/lux-theme.css#L740-L767)
|
||||
- [lux-theme.css:776-847](file://frontend/src/styles/lux-theme.css#L776-L847)
|
||||
- [index.vue:1-231](file://frontend/src/views/toolbox/luxsin-controller/index.vue#L1-L231)
|
||||
|
||||
## 核心组件
|
||||
@@ -88,11 +89,11 @@ TV --> TB
|
||||
- [index.js:6-72](file://frontend/src/router/index.js#L6-L72)
|
||||
- [tabs.js:1-9](file://frontend/src/utils/tabs.js#L1-L9)
|
||||
- [index.vue:151](file://frontend/src/layout/index.vue#L151)
|
||||
- [lux-theme.css:740-767](file://frontend/src/styles/lux-theme.css#L740-L767)
|
||||
- [lux-theme.css:776-847](file://frontend/src/styles/lux-theme.css#L776-L847)
|
||||
- [index.vue:1-231](file://frontend/src/views/toolbox/luxsin-controller/index.vue#L1-L231)
|
||||
|
||||
## 架构总览
|
||||
标签页视图组件通过路由钩子监听路由变化,动态生成或更新标签项;通过 Element Plus 的 Tabs 组件展示标签,通过 KeepAlive 实现组件缓存;通过 sessionStorage 持久化标签状态;通过右键菜单提供关闭、关闭其他、关闭全部等操作。**新增功能**:实现了平滑的颜色过渡动画,提升用户交互体验,并完善了工具箱图标的完整支持。
|
||||
标签页视图组件通过路由钩子监听路由变化,动态生成或更新标签项;通过 Element Plus 的 Tabs 组件展示标签,通过 KeepAlive 实现组件缓存;通过 sessionStorage 持久化标签状态;通过右键菜单提供关闭、关闭其他、关闭全部等操作。**现代化改进**:实现了固定内边距策略避免布局抖动,统一的关闭按钮尺寸,改进的层级管理和增强的视觉反馈效果。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
@@ -107,8 +108,9 @@ TV->>View : 渲染当前路由组件(KeepAlive)
|
||||
View-->>TV : 组件实例缓存
|
||||
TV->>TV : handleTabClick/右键菜单/关闭
|
||||
TV->>Store : persist() 更新状态
|
||||
Note over TV : 添加0.2s平滑颜色过渡动画
|
||||
Note over TV : 支持工具箱图标显示
|
||||
Note over TV : 固定内边距策略避免布局抖动
|
||||
Note over TV : 14x14px统一关闭按钮尺寸
|
||||
Note over TV : 改进的z-index层级管理
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
@@ -261,26 +263,28 @@ Note over TV : 工具箱路由支持 tools 图标
|
||||
- [TabsView.vue:193-200](file://frontend/src/components/TabsView.vue#L193-L200)
|
||||
- [index.js:68-72](file://frontend/src/router/index.js#L68-L72)
|
||||
|
||||
### 主题定制、图标配置与动态内容渲染
|
||||
### 现代化设计系统与视觉增强
|
||||
|
||||
**更新** 新增了平滑颜色过渡动画、玻璃拟态设计系统支持和工具箱图标完整支持
|
||||
**重大更新** 实现了现代化的标签页设计系统,解决了传统卡片标签的布局抖动问题
|
||||
|
||||
- **平滑过渡动画**:标签页图标和文本元素添加了 `transition: color 0.2s ease` 属性,提供流畅的颜色变化效果
|
||||
- **玻璃拟态设计**:通过 CSS 变量和 backdrop-filter 实现现代玻璃质感效果
|
||||
- **主题定制**:深色主题变量集中于 lux-theme.css,标签页样式通过 :deep 选择器覆盖 Element Plus 默认样式
|
||||
- **图标配置**:通过 icon 键值映射到 Element Plus 图标组件,支持 document/list/upload/collection/home/user/tools 等
|
||||
- **动态内容渲染**:router-view 结合 KeepAlive,通过 key 基于 fullPath 变更触发组件重新渲染
|
||||
- **工具箱图标支持**:在 iconMap 中添加了 `tools: Tools` 映射,工具箱路由配置了 `icon: 'tools'` 元信息
|
||||
- **固定内边距策略**:通过固定 padding-left 和 padding-right 为16px,彻底解决了 Element Plus 卡片标签在悬停时因关闭按钮展开导致的布局抖动问题
|
||||
- **一致的关闭按钮尺寸**:统一关闭按钮尺寸为14x14px,确保所有标签的视觉一致性
|
||||
- **改进的层级管理**:活动标签 z-index 设置为2,悬停标签 z-index 也设置为2,确保正确的视觉层次关系
|
||||
- **增强的视觉反馈**:活动标签添加青色内嵌阴影 `inset 0 2px 0 var(--lux-cyan)`,提供清晰的激活状态指示
|
||||
- **平滑过渡动画**:标签背景色、颜色、边框颜色和阴影都添加了0.2s的平滑过渡效果
|
||||
- **玻璃拟态设计**:标签页采用半透明背景和模糊效果,与现代设计系统保持一致
|
||||
- **优化的间距管理**:标签间间距固定为6px,避免动态变化导致的布局不稳定
|
||||
|
||||
**新增特性**:
|
||||
- 图标悬停和激活状态的平滑颜色过渡(0.2s ease)
|
||||
- 标签页背景色的渐变过渡效果
|
||||
- 玻璃拟态边框和阴影效果
|
||||
- 增强的视觉层次感和深度感
|
||||
- **工具箱图标完整支持**:工具箱功能在标签页中正确显示工具箱图标
|
||||
- 固定内边距策略消除布局抖动
|
||||
- 统一的14x14px关闭按钮尺寸
|
||||
- 改进的z-index层级管理系统
|
||||
- 青色内嵌阴影激活指示器
|
||||
- 0.2s平滑过渡动画效果
|
||||
- 玻璃拟态视觉风格集成
|
||||
|
||||
**章节来源**
|
||||
- [lux-theme.css:740-767](file://frontend/src/styles/lux-theme.css#L740-L767)
|
||||
- [lux-theme.css:776-847](file://frontend/src/styles/lux-theme.css#L776-L847)
|
||||
- [TabsView.vue:320-324](file://frontend/src/components/TabsView.vue#L320-L324)
|
||||
- [TabsView.vue:64-76](file://frontend/src/components/TabsView.vue#L64-L76)
|
||||
- [TabsView.vue:46-50](file://frontend/src/components/TabsView.vue#L46-L50)
|
||||
@@ -322,7 +326,8 @@ TB["toolbox/luxsin-controller/index.vue"] --> TV
|
||||
- 持久化频率:通过 watch 监听 tabs 与 activeKey 变化进行持久化,减少频繁写入
|
||||
- DOM 重绘:标签标题与图标采用固定宽度与省略号,避免布局抖动
|
||||
- 路由跳转:仅在 fullPath 与当前不同才执行跳转,避免重复导航
|
||||
- **动画性能**:使用 CSS transition 而非 JavaScript 动画,确保 0.2s 过渡动画的流畅性
|
||||
- **动画性能**:使用 CSS transition 而非 JavaScript 动画,确保0.2s过渡动画的流畅性
|
||||
- **布局稳定性**:固定内边距策略消除了悬停时的布局重排,提升滚动性能
|
||||
- **工具箱性能**:工具箱视图组件使用独立的请求处理和错误处理机制,避免影响主标签页性能
|
||||
|
||||
## 故障排查指南
|
||||
@@ -331,7 +336,10 @@ TB["toolbox/luxsin-controller/index.vue"] --> TV
|
||||
- 图标不显示:检查 meta.icon 键值是否正确且在 iconMap 中有对应映射
|
||||
- 标签状态丢失:检查 sessionStorage 写入权限与容量限制
|
||||
- 路由跳转无效:检查 fullPath 与当前路由是否一致,避免不必要的 router.push
|
||||
- **动画问题**:检查浏览器是否支持 CSS transition 和 backdrop-filter 属性
|
||||
- **布局抖动问题**:确认使用了固定内边距策略,避免 Element Plus 默认的动态padding行为
|
||||
- **关闭按钮尺寸不一致**:检查CSS规则是否正确应用了14x14px的统一尺寸
|
||||
- **层级显示异常**:确认活动标签和悬停标签的z-index设置正确
|
||||
- **动画卡顿**:检查浏览器是否支持CSS transition和backdrop-filter属性
|
||||
- **工具箱图标问题**:确认工具箱路由配置了正确的 `icon: 'tools'` 元信息,且 iconMap 中包含 `tools: Tools` 映射
|
||||
|
||||
**章节来源**
|
||||
@@ -340,27 +348,32 @@ TB["toolbox/luxsin-controller/index.vue"] --> TV
|
||||
- [TabsView.vue:64-76](file://frontend/src/components/TabsView.vue#L64-L76)
|
||||
- [TabsView.vue:125-141](file://frontend/src/components/TabsView.vue#L125-L141)
|
||||
- [TabsView.vue:197-199](file://frontend/src/components/TabsView.vue#L197-L199)
|
||||
- [lux-theme.css:776-847](file://frontend/src/styles/lux-theme.css#L776-L847)
|
||||
- [index.js:68-72](file://frontend/src/router/index.js#L68-L72)
|
||||
|
||||
## 结论
|
||||
标签页视图组件通过清晰的数据结构、完善的事件处理与路由集成,实现了标签的激活、关闭、右键菜单与持久化。**最新改进**:通过添加 0.2s 平滑颜色过渡动画、玻璃拟态设计系统支持和工具箱图标完整支持,显著提升了用户体验和视觉品质。结合 KeepAlive 缓存与现代化主题样式,提供了优秀的交互性能和美观的界面表现。工具箱功能的集成进一步完善了系统的功能完整性,为用户提供了便捷的设备管理和数据同步工具。建议在扩展新功能时遵循现有模式,保持标签状态与路由状态的一致性,并注意缓存范围与持久化策略的平衡。
|
||||
标签页视图组件通过清晰的数据结构、完善的事件处理与路由集成,实现了标签的激活、关闭、右键菜单与持久化。**现代化改进**:通过实现固定内边距策略、统一的关闭按钮尺寸、改进的层级管理和增强的视觉反馈效果,显著提升了用户体验和界面稳定性。结合 KeepAlive 缓存与现代化主题样式,提供了优秀的交互性能和美观的界面表现。工具箱功能的集成进一步完善了系统的功能完整性,为用户提供了便捷的设备管理和数据同步工具。建议在扩展新功能时遵循现有模式,保持标签状态与路由状态的一致性,并注意缓存范围与持久化策略的平衡。
|
||||
|
||||
## 附录
|
||||
- 常用配置项
|
||||
- 存储键名:TABS_STORAGE_KEY
|
||||
- 首页路径:HOME_PATH
|
||||
- 图标映射:document/list/upload/collection/home/user/tools
|
||||
- **新增动画配置**
|
||||
- 过渡时间:0.2s
|
||||
- 缓动函数:ease
|
||||
- 过渡属性:color
|
||||
- **现代化设计配置**
|
||||
- 固定内边距:padding-left: 16px, padding-right: 16px
|
||||
- 关闭按钮尺寸:width: 14px, height: 14px
|
||||
- 层级管理:活动标签 z-index: 2, 悬停标签 z-index: 2
|
||||
- 过渡动画:transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease
|
||||
- 激活指示器:box-shadow: inset 0 2px 0 var(--lux-cyan)
|
||||
- **工具箱功能配置**
|
||||
- 路由路径:/toolbox/luxsin-controller
|
||||
- 图标配置:icon: 'tools'
|
||||
- 功能描述:设备数据同步和控制工具
|
||||
- 最佳实践
|
||||
- **最佳实践**
|
||||
- 在路由 meta 中提供 title 与 icon,确保标签显示一致性
|
||||
- 控制 KeepAlive include 范围,避免过度缓存
|
||||
- 使用 sessionStorage 进行轻量级状态持久化,避免频繁写入
|
||||
- 利用 CSS transition 实现流畅的用户交互反馈
|
||||
- 为新功能模块配置合适的图标和元信息,确保在标签页中正确显示
|
||||
- 为新功能模块配置合适的图标和元信息,确保在标签页中正确显示
|
||||
- 使用固定内边距策略避免标签页布局抖动
|
||||
- 统一关闭按钮尺寸确保视觉一致性
|
||||
@@ -1,7 +1,7 @@
|
||||
# OTA固件管理页面
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
**本文引用的文件**
|
||||
- [Ota.js](file://backend/src/models/Ota.js)
|
||||
- [ota.js](file://backend/src/routes/ota.js)
|
||||
- [otaStorage.js](file://backend/src/services/otaStorage.js)
|
||||
@@ -18,15 +18,16 @@
|
||||
- [request.js](file://frontend/src/utils/request.js)
|
||||
- [router/index.js](file://frontend/src/router/index.js)
|
||||
- [DEPLOY.md](file://DEPLOY.md)
|
||||
- [lux-theme.css](file://frontend/src/styles/lux-theme.css)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 集成黑名单管理功能,支持按MAC地址阻止设备接收OTA更新
|
||||
- 集成定向升级功能,支持指定设备进行定向升级
|
||||
- 在OTA管理页面中新增黑名单和定向升级的操作入口
|
||||
- 新增黑名单和定向升级的独立管理页面
|
||||
- 完善OTA版本管理的完整生命周期管理体验
|
||||
- 统一操作按钮样式为圆形图标格式,提升可访问性和用户体验
|
||||
- 所有功能按钮(搜索、重置、新增等)采用统一的圆形设计语言
|
||||
- 为每个按钮添加适当的title属性,增强屏幕阅读器支持
|
||||
- 简化按钮实现,从冗长的文本按钮转换为简洁的图标按钮
|
||||
- 保持功能完整性,同时优化界面视觉一致性
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
@@ -40,10 +41,10 @@
|
||||
9. [结论](#结论)
|
||||
|
||||
## 简介
|
||||
本文件面向OTA固件管理页面的使用者与维护者,系统性阐述固件版本管理功能,涵盖固件上传、版本控制、强制更新配置、发布状态管理、兼容性检查、更新策略配置、用户通知机制、下载统计、版本历史与回滚功能,以及进度监控、错误处理与用户体验优化方案。**本次更新集成了黑名单管理和定向升级功能,提供更完整的OTA管理体验**。
|
||||
本文件面向OTA固件管理页面的使用者与维护者,系统性阐述固件版本管理功能,涵盖固件上传、版本控制、强制更新配置、发布状态管理、兼容性检查、更新策略配置、用户通知机制、下载统计、版本历史与回滚功能,以及进度监控、错误处理与用户体验优化方案。**本次更新统一了操作按钮的视觉风格,采用圆形图标设计提升界面的可访问性和用户体验**。
|
||||
|
||||
## 项目结构
|
||||
系统采用前后端分离架构,前端使用Vue 3 + Element Plus,后端使用Node.js + Express + Sequelize,数据库为MySQL。OTA模块位于独立的路由与模型中,存储策略针对不同设备型号采用差异化方案(X8上传至S3,X9本地存储)。**新增了黑名单和定向升级的独立管理模块**。
|
||||
系统采用前后端分离架构,前端使用Vue 3 + Element Plus,后端使用Node.js + Express + Sequelize,数据库为MySQL。OTA模块位于独立的路由与模型中,存储策略针对不同设备型号采用差异化方案(X8上传至S3,X9本地存储)。**新增了黑名单和定向升级的独立管理模块,并统一了所有操作按钮的圆形图标样式**。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
@@ -60,32 +61,36 @@ BLACKLIST_BE --> BLACKLIST_MODEL["黑名单模型<br/>models/BlackList.js"]
|
||||
FE --> TARGET_API["定向升级API<br/>api/otaTargetDevice.js"]
|
||||
TARGET_API --> TARGET_BE["定向升级路由<br/>routes/otaTargetDevice.js"]
|
||||
TARGET_BE --> TARGET_MODEL["定向升级模型<br/>models/OtaTargetDevice.js"]
|
||||
FE --> THEME["主题样式<br/>styles/lux-theme.css"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.vue:1-1003](file://frontend/src/views/ota/index.vue#L1-L1003)
|
||||
- [index.vue:1-1059](file://frontend/src/views/ota/index.vue#L1-L1059)
|
||||
- [ota.js:1-68](file://frontend/src/api/ota.js#L1-L68)
|
||||
- [blacklist.js:1-57](file://frontend/src/api/blacklist.js#L1-L57)
|
||||
- [otaTargetDevice.js:1-57](file://frontend/src/api/otaTargetDevice.js#L1-L57)
|
||||
- [blacklist.js:1-223](file://backend/src/routes/blacklist.js#L1-L223)
|
||||
- [otaTargetDevice.js:1-248](file://backend/src/routes/otaTargetDevice.js#L1-L248)
|
||||
- [lux-theme.css:479-521](file://frontend/src/styles/lux-theme.css#L479-L521)
|
||||
|
||||
## 核心组件
|
||||
- 前端视图组件:负责搜索、分页、表单校验、上传与CRUD操作,提供友好的用户交互体验。**新增了黑名单和定向升级的弹窗管理功能**。
|
||||
- 前端视图组件:负责搜索、分页、表单校验、上传与CRUD操作,提供友好的用户交互体验。**所有操作按钮已统一采用圆形图标设计,提升可访问性**。
|
||||
- API封装:统一封装GET/POST/PUT/DELETE请求,处理超时与认证头注入。
|
||||
- 后端路由:提供OTA版本列表、详情、创建、更新、删除与升级包上传接口。**新增黑名单和定向升级的CRUD接口**。
|
||||
- 数据模型:定义OTA版本的数据结构与约束,确保版本号唯一性与字段完整性。**新增黑名单和定向升级的数据模型**。
|
||||
- 存储服务:根据设备型号选择不同的存储策略(S3/X9本地),并生成公开访问链接。
|
||||
- 响应封装:统一返回格式,便于前端处理与展示。
|
||||
- 环境配置:区分开发/生产环境,影响存储目录与S3凭据策略。
|
||||
- **主题样式**:统一的圆形按钮样式和玻璃拟态效果,提升整体视觉一致性。
|
||||
|
||||
**章节来源**
|
||||
- [index.vue:1-1003](file://frontend/src/views/ota/index.vue#L1-L1003)
|
||||
- [index.vue:1-1059](file://frontend/src/views/ota/index.vue#L1-L1059)
|
||||
- [ota.js:1-68](file://frontend/src/api/ota.js#L1-L68)
|
||||
- [blacklist.js:1-57](file://frontend/src/api/blacklist.js#L1-L57)
|
||||
- [otaTargetDevice.js:1-57](file://frontend/src/api/otaTargetDevice.js#L1-L57)
|
||||
- [blacklist.js:1-223](file://backend/src/routes/blacklist.js#L1-L223)
|
||||
- [otaTargetDevice.js:1-248](file://backend/src/routes/otaTargetDevice.js#L1-L248)
|
||||
- [lux-theme.css:479-521](file://frontend/src/styles/lux-theme.css#L479-L521)
|
||||
|
||||
## 架构总览
|
||||
OTA固件管理页面的端到端流程如下:
|
||||
@@ -106,7 +111,7 @@ participant AX as "HTTP封装<br/>utils/request.js"
|
||||
participant RT as "后端路由<br/>routes/ota.js"
|
||||
participant MD as "数据模型<br/>models/Ota.js"
|
||||
participant ST as "存储服务<br/>services/otaStorage.js"
|
||||
U->>FE : 搜索/分页/新增/编辑
|
||||
U->>FE : 点击圆形图标按钮
|
||||
FE->>API : 调用列表/创建/更新/删除/上传
|
||||
API->>AX : 发起HTTP请求
|
||||
AX->>RT : 路由处理鉴权/参数校验
|
||||
@@ -127,7 +132,7 @@ API-->>FE : 渲染结果
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.vue:420-831](file://frontend/src/views/ota/index.vue#L420-L831)
|
||||
- [index.vue:56-66](file://frontend/src/views/ota/index.vue#L56-L66)
|
||||
- [ota.js:13-67](file://frontend/src/api/ota.js#L13-L67)
|
||||
- [blacklist.js:12-56](file://frontend/src/api/blacklist.js#L12-L56)
|
||||
- [otaTargetDevice.js:12-55](file://frontend/src/api/otaTargetDevice.js#L12-L55)
|
||||
@@ -142,6 +147,7 @@ API-->>FE : 渲染结果
|
||||
- CRUD操作:支持新增、编辑、复制(基于现有行)、删除,均通过API封装调用后端接口。
|
||||
- 分页与加载:支持每页数量切换与页码切换,加载状态通过Element Plus的loading指示。
|
||||
- **新增功能**:在更多操作菜单中集成了黑名单管理和定向升级功能,支持对单个OTA版本进行设备级别的管控。
|
||||
- **统一按钮样式**:**所有操作按钮已标准化为圆形图标格式,包括搜索、重置、新增等操作,每个按钮都添加了适当的title属性以提升可访问性**。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
@@ -171,11 +177,11 @@ Reload --> Render
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.vue:420-831](file://frontend/src/views/ota/index.vue#L420-L831)
|
||||
- [index.vue:56-66](file://frontend/src/views/ota/index.vue#L56-L66)
|
||||
- [ota.js:13-49](file://frontend/src/api/ota.js#L13-L49)
|
||||
|
||||
**章节来源**
|
||||
- [index.vue:1-1003](file://frontend/src/views/ota/index.vue#L1-L1003)
|
||||
- [index.vue:1-1059](file://frontend/src/views/ota/index.vue#L1-L1059)
|
||||
- [ota.js:1-68](file://frontend/src/api/ota.js#L1-L68)
|
||||
|
||||
### 后端路由与控制器
|
||||
@@ -358,15 +364,30 @@ BuildX9 --> Return
|
||||
- 分页与重置:支持页码与每页数量调整,重置搜索条件。
|
||||
- **新增弹窗管理**:黑名单和定向升级分别通过独立弹窗进行管理,支持MAC地址的批量添加和删除。
|
||||
- **MAC地址格式校验**:支持AA:BB:CC:DD:EE:FF格式的MAC地址输入和验证。
|
||||
- **统一按钮样式**:**所有操作按钮已标准化为圆形图标格式,提供更好的可访问性和一致的视觉体验**。
|
||||
- 后端:
|
||||
- 统一响应格式:code=1成功、code=0错误、code=2无数据。
|
||||
- 错误分类:参数错误、业务冲突(版本已存在)、存储异常(S3上传失败)、权限错误等。
|
||||
- 日志记录:关键操作与异常均有日志输出,便于排查。
|
||||
|
||||
**章节来源**
|
||||
- [index.vue:305-338](file://frontend/src/views/ota/index.vue#L305-L338)
|
||||
- [index.vue:56-66](file://frontend/src/views/ota/index.vue#L56-L66)
|
||||
- [response.js:1-25](file://backend/src/utils/response.js#L1-L25)
|
||||
- [ota.js:25-66](file://backend/src/routes/ota.js#L25-L66)
|
||||
- [lux-theme.css:479-521](file://frontend/src/styles/lux-theme.css#L479-L521)
|
||||
|
||||
### 统一按钮样式设计
|
||||
- **圆形图标按钮**:所有主要操作按钮(搜索、重置、新增等)均采用圆形设计,提升界面的一致性和现代感。
|
||||
- **可访问性增强**:每个按钮都添加了适当的title属性,确保屏幕阅读器能够正确描述按钮功能。
|
||||
- **图标语义化**:使用Element Plus提供的图标库,如Search(搜索)、Refresh(重置)、Plus(新增)等,确保图标含义清晰。
|
||||
- **交互反馈**:圆形按钮保持了良好的hover和active状态反馈,提供清晰的视觉交互提示。
|
||||
- **响应式设计**:圆形按钮在不同屏幕尺寸下都能保持良好的显示效果和可用性。
|
||||
|
||||
**章节来源**
|
||||
- [index.vue:56-66](file://frontend/src/views/ota/index.vue#L56-L66)
|
||||
- [blacklist.js:40-50](file://frontend/src/views/blacklist/index.vue#L40-L50)
|
||||
- [otaTargetDevice.js:40-50](file://frontend/src/views/ota-target-device/index.vue#L40-L50)
|
||||
- [lux-theme.css:479-521](file://frontend/src/styles/lux-theme.css#L479-L521)
|
||||
|
||||
### 黑名单管理功能
|
||||
- 功能概述:支持将特定设备的MAC地址加入黑名单,阻止这些设备接收OTA更新。
|
||||
@@ -379,7 +400,7 @@ BuildX9 --> Return
|
||||
- 数据验证:MAC地址格式必须符合AA:BB:CC:DD:EE:FF格式,且每个MAC地址都必须唯一。
|
||||
|
||||
**章节来源**
|
||||
- [index.vue:645-734](file://frontend/src/views/ota/index.vue#L645-L734)
|
||||
- [index.vue:683-772](file://frontend/src/views/ota/index.vue#L683-L772)
|
||||
- [blacklist.js:12-56](file://frontend/src/api/blacklist.js#L12-L56)
|
||||
- [blacklist.js:96-204](file://backend/src/routes/blacklist.js#L96-L204)
|
||||
|
||||
@@ -394,7 +415,7 @@ BuildX9 --> Return
|
||||
- 数据验证:MAC地址格式必须符合AA:BB:CC:DD:EE:FF格式,且每个MAC地址在同一个OTA版本内必须唯一。
|
||||
|
||||
**章节来源**
|
||||
- [index.vue:736-817](file://frontend/src/views/ota/index.vue#L736-L817)
|
||||
- [index.vue:774-855](file://frontend/src/views/ota/index.vue#L774-L855)
|
||||
- [otaTargetDevice.js:12-55](file://frontend/src/api/otaTargetDevice.js#L12-L55)
|
||||
- [otaTargetDevice.js:96-208](file://backend/src/routes/otaTargetDevice.js#L96-L208)
|
||||
|
||||
@@ -455,6 +476,9 @@ BE --> AW["AWS SDK"]
|
||||
- **黑名单和定向升级查询优化**:
|
||||
- 黑名单和定向升级列表查询支持按OTA版本过滤,减少不必要的数据传输。
|
||||
- 支持MAC地址模糊查询,提升用户体验。
|
||||
- **按钮样式性能**:
|
||||
- 圆形图标按钮减少了DOM节点复杂度,提升了渲染性能。
|
||||
- CSS样式采用高效的类选择器,避免了复杂的嵌套样式计算。
|
||||
|
||||
## 故障排除指南
|
||||
- 上传失败:
|
||||
@@ -473,6 +497,10 @@ BE --> AW["AWS SDK"]
|
||||
- MAC地址格式错误:确保输入AA:BB:CC:DD:EE:FF格式。
|
||||
- OTA版本不存在:确认选择的OTA版本ID有效。
|
||||
- 重复的MAC地址:黑名单和定向升级中的MAC地址在同一OTA版本内必须唯一。
|
||||
- **按钮样式问题**:
|
||||
- 如果圆形按钮显示异常,检查Element Plus图标库是否正确引入。
|
||||
- 确认CSS主题样式文件已正确加载,特别是lux-theme.css文件。
|
||||
- 检查浏览器控制台是否有CSS相关的错误信息。
|
||||
|
||||
**章节来源**
|
||||
- [ota.js:25-66](file://backend/src/routes/ota.js#L25-L66)
|
||||
@@ -480,6 +508,7 @@ BE --> AW["AWS SDK"]
|
||||
- [blacklist.js:159-183](file://backend/src/routes/blacklist.js#L159-L183)
|
||||
- [otaTargetDevice.js:142-208](file://backend/src/routes/otaTargetDevice.js#L142-L208)
|
||||
- [DEPLOY.md:226-256](file://DEPLOY.md#L226-L256)
|
||||
- [lux-theme.css:479-521](file://frontend/src/styles/lux-theme.css#L479-L521)
|
||||
|
||||
## 结论
|
||||
OTA固件管理页面通过清晰的前后端职责划分与统一的响应格式,实现了从版本上传、存储、查询到发布的完整闭环。**本次更新集成了黑名单管理和定向升级功能,显著提升了OTA管理的精细化程度和安全性**。X8/X9差异化存储策略兼顾了可扩展性与易用性,配合严格的参数校验与完善的错误处理,为设备端的兼容性检查与更新策略提供了可靠支撑。**新增的黑名单和定向升级功能使得OTA管理更加灵活,能够满足不同场景下的设备管控需求**。建议在后续迭代中进一步完善下载统计、版本历史与回滚功能,并持续优化上传体验与性能表现。
|
||||
OTA固件管理页面通过清晰的前后端职责划分与统一的响应格式,实现了从版本上传、存储、查询到发布的完整闭环。**本次更新统一了操作按钮的视觉风格,采用圆形图标设计显著提升了界面的可访问性和用户体验**。X8/X9差异化存储策略兼顾了可扩展性与易用性,配合严格的参数校验与完善的错误处理,为设备端的兼容性检查与更新策略提供了可靠支撑。**新增的黑名单和定向升级功能使得OTA管理更加灵活,能够满足不同场景下的设备管控需求**。统一的圆形按钮设计不仅提升了界面的现代化程度,还增强了屏幕阅读器的支持,使整个系统更加符合无障碍访问标准。建议在后续迭代中进一步完善下载统计、版本历史与回滚功能,并持续优化上传体验与性能表现。
|
||||
@@ -12,6 +12,12 @@
|
||||
- [app.js](file://backend/src/app.js)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 更新了搜索表单中的按钮组件样式,采用统一的圆形图标格式
|
||||
- 优化了视觉呈现效果,提升了用户体验
|
||||
- 简化了代码结构,提高了可维护性
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
@@ -29,6 +35,8 @@
|
||||
|
||||
该系统采用前后端分离架构,前端使用Vue.js框架构建用户界面,后端基于Express.js提供RESTful API服务。通过详细的日志记录,管理员可以追踪每个分享码的完整生命周期,从生成到使用的全过程监控。
|
||||
|
||||
**最新更新** 页面采用了标准化的圆形图标按钮设计,显著提升了视觉一致性和用户体验。
|
||||
|
||||
## 项目结构
|
||||
|
||||
分享码日志功能涉及前端视图组件和后端API服务两个主要部分:
|
||||
@@ -58,13 +66,13 @@ BE_Routes --> BE_Auth
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [log.vue:1-353](file://frontend/src/views/share-code/log.vue#L1-L353)
|
||||
- [log.vue:1-347](file://frontend/src/views/share-code/log.vue#L1-L347)
|
||||
- [shareCodeLog.js:1-26](file://frontend/src/api/shareCodeLog.js#L1-L26)
|
||||
- [shareCodeLogs.js:1-88](file://backend/src/routes/shareCodeLogs.js#L1-L88)
|
||||
- [ShareCodeLog.js:1-60](file://backend/src/models/ShareCodeLog.js#L1-L60)
|
||||
|
||||
**章节来源**
|
||||
- [log.vue:1-353](file://frontend/src/views/share-code/log.vue#L1-L353)
|
||||
- [log.vue:1-347](file://frontend/src/views/share-code/log.vue#L1-L347)
|
||||
- [shareCodeLog.js:1-26](file://frontend/src/api/shareCodeLog.js#L1-L26)
|
||||
- [shareCodeLogs.js:1-88](file://backend/src/routes/shareCodeLogs.js#L1-L88)
|
||||
- [ShareCodeLog.js:1-60](file://backend/src/models/ShareCodeLog.js#L1-L60)
|
||||
@@ -76,6 +84,7 @@ BE_Routes --> BE_Auth
|
||||
分享码日志页面采用Element Plus组件库构建,包含以下核心功能:
|
||||
|
||||
- **搜索表单**:支持MAC地址、分享码、操作类型、IP地址和时间范围的多维度过滤
|
||||
- **圆形图标按钮**:采用统一的圆形图标设计,提升视觉一致性
|
||||
- **数据表格**:展示分享码日志的完整信息,包括设备信息、操作详情和时间戳
|
||||
- **分页控制**:支持自定义每页条数和页码导航
|
||||
- **对话框展示**:提供EQ数据快照的可视化查看功能
|
||||
@@ -89,8 +98,10 @@ BE_Routes --> BE_Auth
|
||||
- **分页处理**:限制最大查询数量,确保系统性能
|
||||
- **响应格式**:统一的API响应格式,便于前端处理
|
||||
|
||||
**更新** 搜索表单中的按钮已标准化为圆形图标格式,包括搜索和重置按钮,提升了整体界面的视觉统一性。
|
||||
|
||||
**章节来源**
|
||||
- [log.vue:148-278](file://frontend/src/views/share-code/log.vue#L148-L278)
|
||||
- [log.vue:53-56](file://frontend/src/views/share-code/log.vue#L53-L56)
|
||||
- [shareCodeLogs.js:14-84](file://backend/src/routes/shareCodeLogs.js#L14-L84)
|
||||
|
||||
## 架构概览
|
||||
@@ -121,7 +132,7 @@ Frontend->>Frontend : 渲染表格和分页
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [log.vue:233-250](file://frontend/src/views/share-code/log.vue#L233-L250)
|
||||
- [log.vue:227-244](file://frontend/src/views/share-code/log.vue#L227-L244)
|
||||
- [shareCodeLogs.js:14-84](file://backend/src/routes/shareCodeLogs.js#L14-L84)
|
||||
- [auth.js:3-26](file://backend/src/middleware/auth.js#L3-L26)
|
||||
|
||||
@@ -137,7 +148,7 @@ Frontend->>Frontend : 渲染表格和分页
|
||||
6. **响应返回**:前端接收并渲染数据
|
||||
|
||||
**章节来源**
|
||||
- [log.vue:214-231](file://frontend/src/views/share-code/log.vue#L214-L231)
|
||||
- [log.vue:208-225](file://frontend/src/views/share-code/log.vue#L208-L225)
|
||||
- [shareCodeLogs.js:31-60](file://backend/src/routes/shareCodeLogs.js#L31-L60)
|
||||
|
||||
## 详细组件分析
|
||||
@@ -146,7 +157,7 @@ Frontend->>Frontend : 渲染表格和分页
|
||||
|
||||
#### 搜索表单组件
|
||||
|
||||
前端搜索表单提供了丰富的筛选选项:
|
||||
前端搜索表单提供了丰富的筛选选项,并采用了标准化的圆形图标按钮设计:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
@@ -160,6 +171,12 @@ class SearchForm {
|
||||
+handleSearch() void
|
||||
+handleReset() void
|
||||
}
|
||||
class CircularButtons {
|
||||
+el-button type="primary" circle : icon="Search"
|
||||
+el-button circle : icon="Refresh"
|
||||
+title属性
|
||||
@click事件处理
|
||||
}
|
||||
class Pagination {
|
||||
+number page
|
||||
+number pageSize
|
||||
@@ -172,14 +189,20 @@ class TableData {
|
||||
+formatDateTime(value) string
|
||||
+handleViewEq(row) void
|
||||
}
|
||||
SearchForm --> CircularButtons : "使用"
|
||||
SearchForm --> Pagination : "使用"
|
||||
SearchForm --> TableData : "管理"
|
||||
```
|
||||
|
||||
**更新** 搜索表单中的按钮已采用圆形图标设计,包括:
|
||||
- 搜索按钮:`type="primary" circle :icon="Search"`
|
||||
- 重置按钮:`circle :icon="Refresh"`
|
||||
- 统一的标题提示和点击事件处理
|
||||
|
||||
**图表来源**
|
||||
- [log.vue:170-180](file://frontend/src/views/share-code/log.vue#L170-L180)
|
||||
- [log.vue:159-163](file://frontend/src/views/share-code/log.vue#L159-L163)
|
||||
- [log.vue:157-158](file://frontend/src/views/share-code/log.vue#L157-L158)
|
||||
- [log.vue:53-56](file://frontend/src/views/share-code/log.vue#L53-L56)
|
||||
- [log.vue:164-170](file://frontend/src/views/share-code/log.vue#L164-L170)
|
||||
- [log.vue:153-157](file://frontend/src/views/share-code/log.vue#L153-L157)
|
||||
|
||||
#### 数据表格组件
|
||||
|
||||
@@ -196,7 +219,7 @@ SearchForm --> TableData : "管理"
|
||||
| create_at | 操作时间 | 日期时间 | 操作发生时间 |
|
||||
|
||||
**章节来源**
|
||||
- [log.vue:78-104](file://frontend/src/views/share-code/log.vue#L78-L104)
|
||||
- [log.vue:72-97](file://frontend/src/views/share-code/log.vue#L72-L97)
|
||||
|
||||
### 后端API分析
|
||||
|
||||
@@ -325,7 +348,7 @@ router_index --> log_vue
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [log.vue:154](file://frontend/src/views/share-code/log.vue#L154)
|
||||
- [log.vue:148](file://frontend/src/views/share-code/log.vue#L148)
|
||||
- [shareCodeLog.js:17](file://frontend/src/api/shareCodeLog.js#L17)
|
||||
- [shareCodeLogs.js:6](file://backend/src/routes/shareCodeLogs.js#L6)
|
||||
- [ShareCodeLog.js:2](file://backend/src/models/ShareCodeLog.js#L2)
|
||||
@@ -354,7 +377,7 @@ router_index --> log_vue
|
||||
- 确保只有认证用户可以访问
|
||||
|
||||
**章节来源**
|
||||
- [log.vue:154](file://frontend/src/views/share-code/log.vue#L154)
|
||||
- [log.vue:148](file://frontend/src/views/share-code/log.vue#L148)
|
||||
- [shareCodeLog.js:17](file://frontend/src/api/shareCodeLog.js#L17)
|
||||
- [shareCodeLogs.js:6](file://backend/src/routes/shareCodeLogs.js#L6)
|
||||
|
||||
@@ -413,7 +436,7 @@ Frontend->>Frontend : 重新渲染界面
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [log.vue:233-250](file://frontend/src/views/share-code/log.vue#L233-L250)
|
||||
- [log.vue:227-244](file://frontend/src/views/share-code/log.vue#L227-L244)
|
||||
|
||||
## 故障排除指南
|
||||
|
||||
@@ -469,7 +492,7 @@ HandleError --> ReturnError
|
||||
### 主要优势
|
||||
|
||||
1. **功能完整性**:提供了完整的查询、筛选、分页和展示功能
|
||||
2. **用户体验**:直观的界面设计和响应式交互
|
||||
2. **用户体验**:直观的界面设计和响应式交互,采用统一的圆形图标按钮设计
|
||||
3. **数据安全**:完善的认证授权机制
|
||||
4. **性能优化**:合理的分页策略和数据处理
|
||||
|
||||
@@ -480,4 +503,4 @@ HandleError --> ReturnError
|
||||
3. **统计分析**:添加图表化的数据统计和趋势分析
|
||||
4. **搜索增强**:支持更复杂的搜索语法和保存常用查询
|
||||
|
||||
该系统为音频仪表板提供了重要的审计和监控能力,为后续的功能扩展奠定了良好的基础。
|
||||
该系统为音频仪表板提供了重要的审计和监控能力,为后续的功能扩展奠定了良好的基础。**最新的圆形图标按钮设计进一步提升了界面的视觉一致性和用户体验。**
|
||||
@@ -18,6 +18,12 @@
|
||||
- [frontend/src/styles/lux-theme.css](file://frontend/src/styles/lux-theme.css)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 更新了搜索和重置按钮的图标实现方式,采用 Vue 3 组合式 API 图标格式(:icon="Search", :icon="Refresh")替代内联组件
|
||||
- 提升了界面一致性和性能表现
|
||||
- 优化了前端组件的图标使用规范
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
@@ -73,10 +79,10 @@ FE_Layout --> FE_View
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/brand/index.vue:1-311](file://frontend/src/views/brand/index.vue#L1-L311)
|
||||
- [frontend/src/views/brand/index.vue:1-302](file://frontend/src/views/brand/index.vue#L1-L302)
|
||||
- [frontend/src/api/brand.js:1-66](file://frontend/src/api/brand.js#L1-L66)
|
||||
- [frontend/src/router/index.js:1-91](file://frontend/src/router/index.js#L1-L91)
|
||||
- [frontend/src/layout/index.vue:1-338](file://frontend/src/layout/index.vue#L1-L338)
|
||||
- [frontend/src/router/index.js:1-109](file://frontend/src/router/index.js#L1-L109)
|
||||
- [frontend/src/layout/index.vue:1-365](file://frontend/src/layout/index.vue#L1-L365)
|
||||
- [frontend/src/styles/lux-theme.css:1-471](file://frontend/src/styles/lux-theme.css#L1-L471)
|
||||
- [backend/src/routes/brands.js:1-147](file://backend/src/routes/brands.js#L1-L147)
|
||||
- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23)
|
||||
@@ -88,18 +94,18 @@ FE_Layout --> FE_View
|
||||
- [backend/src/utils/jwt.js:1-28](file://backend/src/utils/jwt.js#L1-L28)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/brand/index.vue:1-311](file://frontend/src/views/brand/index.vue#L1-L311)
|
||||
- [frontend/src/views/brand/index.vue:1-302](file://frontend/src/views/brand/index.vue#L1-L302)
|
||||
- [backend/src/routes/brands.js:1-147](file://backend/src/routes/brands.js#L1-L147)
|
||||
- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23)
|
||||
- [frontend/src/api/brand.js:1-66](file://frontend/src/api/brand.js#L1-L66)
|
||||
- [backend/src/validators/brand.js:1-12](file://backend/src/validators/brand.js#L1-L12)
|
||||
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
|
||||
- [backend/src/utils/response.js:1-25](file://backend/src/utils/response.js#L1-L25)
|
||||
- [frontend/src/router/index.js:1-91](file://frontend/src/router/index.js#L1-L91)
|
||||
- [frontend/src/router/index.js:1-109](file://frontend/src/router/index.js#L1-L109)
|
||||
- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60)
|
||||
- [backend/src/config/database.js:1-24](file://backend/src/config/database.js#L1-L24)
|
||||
- [backend/src/utils/jwt.js:1-28](file://backend/src/utils/jwt.js#L1-L28)
|
||||
- [frontend/src/layout/index.vue:1-338](file://frontend/src/layout/index.vue#L1-L338)
|
||||
- [frontend/src/layout/index.vue:1-365](file://frontend/src/layout/index.vue#L1-L365)
|
||||
- [frontend/src/styles/lux-theme.css:1-471](file://frontend/src/styles/lux-theme.css#L1-L471)
|
||||
|
||||
## 核心组件
|
||||
@@ -117,7 +123,7 @@ FE_Layout --> FE_View
|
||||
- 布局与主题:深色宇宙风格的主题样式与侧边导航。
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/brand/index.vue:109-276](file://frontend/src/views/brand/index.vue#L109-L276)
|
||||
- [frontend/src/views/brand/index.vue:100-267](file://frontend/src/views/brand/index.vue#L100-L267)
|
||||
- [frontend/src/api/brand.js:1-66](file://frontend/src/api/brand.js#L1-L66)
|
||||
- [backend/src/routes/brands.js:1-147](file://backend/src/routes/brands.js#L1-L147)
|
||||
- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23)
|
||||
@@ -127,8 +133,8 @@ FE_Layout --> FE_View
|
||||
- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60)
|
||||
- [backend/src/config/database.js:1-24](file://backend/src/config/database.js#L1-L24)
|
||||
- [backend/src/utils/jwt.js:1-28](file://backend/src/utils/jwt.js#L1-L28)
|
||||
- [frontend/src/router/index.js:64-88](file://frontend/src/router/index.js#L64-L88)
|
||||
- [frontend/src/layout/index.vue:1-338](file://frontend/src/layout/index.vue#L1-L338)
|
||||
- [frontend/src/router/index.js:82-106](file://frontend/src/router/index.js#L82-L106)
|
||||
- [frontend/src/layout/index.vue:1-365](file://frontend/src/layout/index.vue#L1-L365)
|
||||
- [frontend/src/styles/lux-theme.css:1-471](file://frontend/src/styles/lux-theme.css#L1-L471)
|
||||
|
||||
## 架构总览
|
||||
@@ -152,7 +158,7 @@ M-->>R : 映射为items与total
|
||||
R-->>A : ApiResponse.success({items,total})
|
||||
A-->>V : 返回数据并更新表格与分页
|
||||
V-->>U : 展示品牌列表
|
||||
U->>V : 点击“新增/编辑”
|
||||
U->>V : 点击"新增/编辑"
|
||||
V->>A : 调用 createBrand 或 updateBrand
|
||||
A->>R : POST/PUT /api/brands/
|
||||
R->>M : create/update
|
||||
@@ -164,7 +170,7 @@ A-->>V : 成功提示并刷新列表
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/brand/index.vue:146-275](file://frontend/src/views/brand/index.vue#L146-L275)
|
||||
- [frontend/src/views/brand/index.vue:136-266](file://frontend/src/views/brand/index.vue#L136-L266)
|
||||
- [frontend/src/api/brand.js:10-65](file://frontend/src/api/brand.js#L10-L65)
|
||||
- [backend/src/routes/brands.js:14-144](file://backend/src/routes/brands.js#L14-L144)
|
||||
- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23)
|
||||
@@ -174,12 +180,13 @@ A-->>V : 成功提示并刷新列表
|
||||
### 品牌视图组件(index.vue)
|
||||
- 搜索与过滤
|
||||
- 支持按品牌名称模糊查询,清空后重置分页至第1页。
|
||||
- **已更新** 搜索和重置按钮采用圆形图标格式,使用 Vue 3 组合式 API 图标(:icon="Search", :icon="Refresh"),提升界面一致性和性能。
|
||||
- 搜索触发后自动刷新列表。
|
||||
- 分页处理
|
||||
- 使用 Element Plus 分页组件,支持页大小切换与页码跳转。
|
||||
- 分页变更时重新加载数据。
|
||||
- 列表展示
|
||||
- 展示ID与品牌名称,右侧固定操作列包含“编辑”“删除”按钮。
|
||||
- 展示ID与品牌名称,右侧固定操作列包含"编辑""删除"按钮。
|
||||
- 表单与对话框
|
||||
- 新增/编辑共用对话框,表单包含品牌名称字段与必填校验。
|
||||
- 提交前进行表单校验,根据是否存在id选择创建或更新。
|
||||
@@ -190,7 +197,7 @@ A-->>V : 成功提示并刷新列表
|
||||
flowchart TD
|
||||
Start(["进入品牌管理"]) --> Load["加载数据<br/>getBrands(skip,limit,name)"]
|
||||
Load --> Render["渲染表格与分页"]
|
||||
Render --> Search["搜索/重置"]
|
||||
Render --> Search["搜索/重置<br/>圆形图标按钮"]
|
||||
Search --> Load
|
||||
Render --> AddEdit["新增/编辑"]
|
||||
AddEdit --> Validate["表单校验"]
|
||||
@@ -205,10 +212,10 @@ Confirm --> |否| Render
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/brand/index.vue:146-275](file://frontend/src/views/brand/index.vue#L146-L275)
|
||||
- [frontend/src/views/brand/index.vue:136-266](file://frontend/src/views/brand/index.vue#L136-L266)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/brand/index.vue:1-311](file://frontend/src/views/brand/index.vue#L1-L311)
|
||||
- [frontend/src/views/brand/index.vue:1-302](file://frontend/src/views/brand/index.vue#L1-L302)
|
||||
|
||||
### 品牌API封装(brand.js)
|
||||
- 提供 getBrands、getBrand、createBrand、updateBrand、deleteBrand 方法,分别对应列表查询、详情查询、创建、更新、删除。
|
||||
@@ -247,7 +254,7 @@ G-->>C : ApiResponse.success({items,total})
|
||||
|
||||
### 品牌模型(Brand.js)
|
||||
- 字段:id(自增主键)、name(字符串,唯一且非空)。
|
||||
- 表名:brand,注释为“耳机品牌”。
|
||||
- 表名:brand,注释为"耳机品牌"。
|
||||
|
||||
**章节来源**
|
||||
- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23)
|
||||
@@ -281,12 +288,12 @@ end
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/router/index.js:64-88](file://frontend/src/router/index.js#L64-L88)
|
||||
- [frontend/src/router/index.js:82-106](file://frontend/src/router/index.js#L82-L106)
|
||||
- [frontend/src/utils/auth.js:1-99](file://frontend/src/utils/auth.js#L1-L99)
|
||||
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/router/index.js:1-91](file://frontend/src/router/index.js#L1-L91)
|
||||
- [frontend/src/router/index.js:1-109](file://frontend/src/router/index.js#L1-L109)
|
||||
- [frontend/src/utils/auth.js:1-99](file://frontend/src/utils/auth.js#L1-L99)
|
||||
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
|
||||
|
||||
@@ -311,7 +318,7 @@ end
|
||||
- 侧边导航集成品牌管理入口,面包屑与标题动态生成。
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/layout/index.vue:1-338](file://frontend/src/layout/index.vue#L1-L338)
|
||||
- [frontend/src/layout/index.vue:1-365](file://frontend/src/layout/index.vue#L1-L365)
|
||||
- [frontend/src/styles/lux-theme.css:1-471](file://frontend/src/styles/lux-theme.css#L1-L471)
|
||||
|
||||
## 依赖关系分析
|
||||
@@ -333,7 +340,7 @@ App --> DB
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/brand/index.vue:113-113](file://frontend/src/views/brand/index.vue#L113-L113)
|
||||
- [frontend/src/views/brand/index.vue:103-104](file://frontend/src/views/brand/index.vue#L103-L104)
|
||||
- [frontend/src/api/brand.js:1-66](file://frontend/src/api/brand.js#L1-L66)
|
||||
- [backend/src/routes/brands.js:1-147](file://backend/src/routes/brands.js#L1-L147)
|
||||
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
|
||||
@@ -343,7 +350,7 @@ App --> DB
|
||||
- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/brand/index.vue:1-311](file://frontend/src/views/brand/index.vue#L1-L311)
|
||||
- [frontend/src/views/brand/index.vue:1-302](file://frontend/src/views/brand/index.vue#L1-L302)
|
||||
- [frontend/src/api/brand.js:1-66](file://frontend/src/api/brand.js#L1-L66)
|
||||
- [backend/src/routes/brands.js:1-147](file://backend/src/routes/brands.js#L1-L147)
|
||||
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
|
||||
@@ -359,16 +366,18 @@ App --> DB
|
||||
- 响应与渲染
|
||||
- 列表加载时使用局部loading遮罩,避免整页闪烁。
|
||||
- 表格数据项精简,仅传输必要字段(id、name)。
|
||||
- **已更新** 使用 Vue 3 组合式 API 图标替代内联组件,提升渲染性能和一致性。
|
||||
- 缓存策略
|
||||
- 当前未实现专用缓存层;可在网关或Redis层引入读缓存,写操作采用“先写后删”策略,降低数据库热点。
|
||||
- 当前未实现专用缓存层;可在网关或Redis层引入读缓存,写操作采用"先写后删"策略,降低数据库热点。
|
||||
- 并发与幂等
|
||||
- 提交按钮增加loading状态,防止重复提交。
|
||||
- 后端接口对重复名称进行唯一性校验,避免脏数据。
|
||||
- 用户体验
|
||||
- 搜索支持清空重置,提升可用性。
|
||||
- 对话框内表单即时校验,减少往返。
|
||||
- **已更新** 统一的圆形图标设计提升界面一致性和可访问性。
|
||||
|
||||
[本节为通用指导,不直接分析具体文件,故无“章节来源”]
|
||||
[本节为通用指导,不直接分析具体文件,故无"章节来源"]
|
||||
|
||||
## 故障排除指南
|
||||
- 登录态异常
|
||||
@@ -380,12 +389,17 @@ App --> DB
|
||||
- 启动阶段同步表结构失败时,检查数据库连接参数与权限。
|
||||
- 接口返回异常
|
||||
- 统一响应code=0或2表示错误或无数据,前端据此提示并记录日志。
|
||||
- 图标显示问题
|
||||
- **新增** 如遇到图标显示异常,检查 @element-plus/icons-vue 是否正确导入,确保 Search、Refresh、Plus 图标已正确注册。
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/utils/auth.js:1-99](file://frontend/src/utils/auth.js#L1-L99)
|
||||
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
|
||||
- [backend/src/app.js:42-56](file://backend/src/app.js#L42-L56)
|
||||
- [backend/src/utils/response.js:1-25](file://backend/src/utils/response.js#L1-L25)
|
||||
- [frontend/src/views/brand/index.vue:103](file://frontend/src/views/brand/index.vue#L103)
|
||||
|
||||
## 结论
|
||||
品牌管理页面实现了完整的CRUD闭环,具备良好的鉴权与响应一致性。当前版本聚焦基础功能,后续可扩展批量操作、图片上传与预览、关联数据的级联处理与数据完整性校验、以及缓存与性能优化方案,以满足更复杂的业务场景与更高的用户体验要求。
|
||||
品牌管理页面实现了完整的CRUD闭环,具备良好的鉴权与响应一致性。当前版本聚焦基础功能,后续可扩展批量操作、图片上传与预览、关联数据的级联处理与数据完整性校验、以及缓存与性能优化方案,以满足更复杂的业务场景与更高的用户体验要求。
|
||||
|
||||
**最新更新** 通过采用 Vue 3 组合式 API 图标格式,显著提升了界面的统一性和性能表现,为后续功能扩展奠定了更好的技术基础。
|
||||
@@ -30,6 +30,7 @@
|
||||
- 新增squig.link外部数据导入功能,支持从第三方网站抓取频响数据
|
||||
- 增强型号表单的复杂处理能力,支持文件上传、品牌自动创建等功能
|
||||
- 完善批量操作的进度跟踪与错误处理机制
|
||||
- **更新**:标准化搜索和重置按钮为圆形图标格式,使用Vue 3组合式API图标,减少视觉混乱同时通过工具提示保持清晰的可用性
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
@@ -54,9 +55,10 @@
|
||||
- **新增**:squig.link外部数据导入功能
|
||||
- **新增**:组合式函数useModelList的状态管理
|
||||
- **新增**:5个专用对话框组件的完整功能
|
||||
- **更新**:标准化的圆形图标搜索和重置按钮设计
|
||||
|
||||
## 项目结构
|
||||
型号管理页面位于前端单页应用中,后端提供 REST 接口与数据模型支撑,前端通过 API 模块与后端交互。系统现已包含完整的对话框组件体系和组合式函数支持。
|
||||
型号管理页面位于前端单页应用中,后端提供 REST 接口与数据模型支撑,前端通过 API 模块与后端交互。系统现已包含完整的对话框组件体系和组合式函数支持,并采用统一的UI设计规范。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
@@ -109,7 +111,7 @@ BE_Routes_Brands --> BE_Models_Brand
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/model/index.vue:1-533](file://frontend/src/views/model/index.vue#L1-L533)
|
||||
- [frontend/src/views/model/index.vue:1-524](file://frontend/src/views/model/index.vue#L1-L524)
|
||||
- [frontend/src/views/model/composables/useModelList.js:1-191](file://frontend/src/views/model/composables/useModelList.js#L1-L191)
|
||||
- [frontend/src/views/model/components/ModelFormDialog.vue:1-555](file://frontend/src/views/model/components/ModelFormDialog.vue#L1-L555)
|
||||
- [frontend/src/views/model/components/CsvViewerDialog.vue:1-50](file://frontend/src/views/model/components/CsvViewerDialog.vue#L1-L50)
|
||||
@@ -118,7 +120,7 @@ BE_Routes_Brands --> BE_Models_Brand
|
||||
- [frontend/src/views/model/components/PushViewDialog.vue:1-60](file://frontend/src/views/model/components/PushViewDialog.vue#L1-L60)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/model/index.vue:1-533](file://frontend/src/views/model/index.vue#L1-L533)
|
||||
- [frontend/src/views/model/index.vue:1-524](file://frontend/src/views/model/index.vue#L1-L524)
|
||||
- [frontend/src/views/model/composables/useModelList.js:1-191](file://frontend/src/views/model/composables/useModelList.js#L1-L191)
|
||||
- [backend/src/routes/models.js:1-659](file://backend/src/routes/models.js#L1-L659)
|
||||
|
||||
@@ -134,6 +136,7 @@ BE_Routes_Brands --> BE_Models_Brand
|
||||
- **API模块**:封装所有型号相关的HTTP请求,包括新增的squig.link导入功能
|
||||
- **后端路由**:提供完整的REST接口,包括squig.link数据抓取功能
|
||||
- **服务层**:频响文件上传、EQ缓存读取、squig.link数据抓取等服务
|
||||
- **UI组件**:标准化的圆形图标按钮,提升界面一致性和用户体验
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/model/composables/useModelList.js:1-191](file://frontend/src/views/model/composables/useModelList.js#L1-L191)
|
||||
@@ -176,7 +179,7 @@ MD-->>V : 关闭对话框并刷新
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/model/index.vue:227-434](file://frontend/src/views/model/index.vue#L227-L434)
|
||||
- [frontend/src/views/model/index.vue:218-424](file://frontend/src/views/model/index.vue#L218-L424)
|
||||
- [frontend/src/views/model/composables/useModelList.js:31-191](file://frontend/src/views/model/composables/useModelList.js#L31-L191)
|
||||
- [frontend/src/views/model/components/ModelFormDialog.vue:158-464](file://frontend/src/views/model/components/ModelFormDialog.vue#L158-L464)
|
||||
- [frontend/src/api/model.js:157-165](file://frontend/src/api/model.js#L157-L165)
|
||||
@@ -184,7 +187,7 @@ MD-->>V : 关闭对话框并刷新
|
||||
- [backend/src/services/squiglink.js:261-310](file://backend/src/services/squiglink.js#L261-L310)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/model/index.vue:227-434](file://frontend/src/views/model/index.vue#L227-L434)
|
||||
- [frontend/src/views/model/index.vue:218-424](file://frontend/src/views/model/index.vue#L218-L424)
|
||||
- [frontend/src/views/model/composables/useModelList.js:31-191](file://frontend/src/views/model/composables/useModelList.js#L31-L191)
|
||||
|
||||
## 详细组件分析
|
||||
@@ -229,6 +232,29 @@ useModelList是型号管理页面的核心状态管理函数,提供统一的
|
||||
**章节来源**
|
||||
- [frontend/src/views/model/composables/useModelList.js:1-191](file://frontend/src/views/model/composables/useModelList.js#L1-L191)
|
||||
|
||||
### 标准化搜索和重置按钮设计
|
||||
**更新**:搜索和重置按钮已标准化为圆形图标格式,提升界面一致性和用户体验。
|
||||
|
||||
**设计特点**
|
||||
- **圆形图标按钮**:使用`circle`属性创建圆形外观,减少视觉混乱
|
||||
- **Vue 3组合式API图标**:通过`:icon`属性绑定Search和Refresh图标
|
||||
- **工具提示**:使用`title`属性提供清晰的功能说明
|
||||
- **统一样式**:搜索按钮使用`type="primary"`强调主要操作,重置按钮使用默认样式
|
||||
|
||||
**实现代码**
|
||||
```vue
|
||||
<el-button type="primary" circle :icon="Search" title="搜索" @click="handleSearch" />
|
||||
<el-button circle :icon="Refresh" title="重置" @click="handleReset" />
|
||||
```
|
||||
|
||||
**图标资源**
|
||||
- Search图标:来自`@element-plus/icons-vue`包
|
||||
- Refresh图标:来自`@element-plus/icons-vue`包
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/model/index.vue:29-31](file://frontend/src/views/model/index.vue#L29-L31)
|
||||
- [frontend/src/views/model/index.vue:221-228](file://frontend/src/views/model/index.vue#L221-L228)
|
||||
|
||||
### ModelFormDialog型号表单对话框
|
||||
ModelFormDialog是完整的型号创建和编辑对话框,支持复杂的表单处理和外部数据导入。
|
||||
|
||||
@@ -385,13 +411,13 @@ API-->>PP : 关闭进度弹窗并刷新
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/model/index.vue:402-428](file://frontend/src/views/model/index.vue#L402-L428)
|
||||
- [frontend/src/views/model/index.vue:395-419](file://frontend/src/views/model/index.vue#L395-L419)
|
||||
- [frontend/src/views/model/components/PushProgressDialog.vue:117-195](file://frontend/src/views/model/components/PushProgressDialog.vue#L117-L195)
|
||||
- [frontend/src/api/model.js:128-150](file://frontend/src/api/model.js#L128-L150)
|
||||
- [backend/src/routes/models.js:466-566](file://backend/src/routes/models.js#L466-L566)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/model/index.vue:402-428](file://frontend/src/views/model/index.vue#L402-L428)
|
||||
- [frontend/src/views/model/index.vue:395-419](file://frontend/src/views/model/index.vue#L395-L419)
|
||||
- [frontend/src/views/model/components/PushProgressDialog.vue:117-195](file://frontend/src/views/model/components/PushProgressDialog.vue#L117-L195)
|
||||
- [frontend/src/api/model.js:128-150](file://frontend/src/api/model.js#L128-L150)
|
||||
|
||||
@@ -460,6 +486,7 @@ API-->>PP : 关闭进度弹窗并刷新
|
||||
- Axios 请求封装
|
||||
- Vue 3 Composition API(组合式函数)
|
||||
- vue-json-pretty JSON展示组件
|
||||
- @element-plus/icons-vue 图标库
|
||||
- **后端依赖**
|
||||
- Express 路由
|
||||
- Sequelize ORM
|
||||
@@ -482,7 +509,7 @@ BE_Routes --> MS["Meilisearch"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/model/index.vue:227-434](file://frontend/src/views/model/index.vue#L227-L434)
|
||||
- [frontend/src/views/model/index.vue:218-424](file://frontend/src/views/model/index.vue#L218-L424)
|
||||
- [frontend/src/views/model/composables/useModelList.js:1-191](file://frontend/src/views/model/composables/useModelList.js#L1-L191)
|
||||
- [frontend/src/api/model.js:1-165](file://frontend/src/api/model.js#L1-L165)
|
||||
- [backend/src/routes/models.js:1-659](file://backend/src/routes/models.js#L1-L659)
|
||||
@@ -504,6 +531,9 @@ BE_Routes --> MS["Meilisearch"]
|
||||
- **squig.link抓取**
|
||||
- 使用内存缓存squigsites.json,减少外部请求频率
|
||||
- 并行处理多项操作,提高响应速度
|
||||
- **UI性能优化**
|
||||
- 圆形图标按钮减少DOM复杂度,提升渲染性能
|
||||
- 工具提示按需显示,避免不必要的重绘
|
||||
|
||||
**章节来源**
|
||||
- [backend/src/services/squiglink.js:33-48](file://backend/src/services/squiglink.js#L33-L48)
|
||||
@@ -528,6 +558,9 @@ BE_Routes --> MS["Meilisearch"]
|
||||
- URL格式错误:确认使用标准的squig.link分享链接
|
||||
- 数据抓取失败:检查网络连接和目标网站可用性
|
||||
- 文件匹配失败:确认分享参数与目标文件名匹配
|
||||
- **UI组件问题**
|
||||
- 图标不显示:检查@element-plus/icons-vue包是否正确安装
|
||||
- 工具提示异常:确认title属性设置正确
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/utils/request.js:27-69](file://frontend/src/utils/request.js#L27-L69)
|
||||
@@ -538,18 +571,20 @@ BE_Routes --> MS["Meilisearch"]
|
||||
- [backend/src/services/squiglink.js:261-310](file://backend/src/services/squiglink.js#L261-L310)
|
||||
|
||||
## 结论
|
||||
型号管理页面经过重构后,现已成为一个功能完整、架构清晰的现代化管理系统。通过useModelList组合式函数实现了状态管理的统一化,通过5个专用对话框组件提供了丰富的用户交互体验,通过squig.link导入功能扩展了数据来源的多样性。
|
||||
型号管理页面经过重构后,现已成为一个功能完整、架构清晰的现代化管理系统。通过useModelList组合式函数实现了状态管理的统一化,通过5个专用对话框组件提供了丰富的用户交互体验,通过squig.link导入功能扩展了数据来源的多样性,并通过标准化的圆形图标按钮设计提升了整体界面的一致性和用户体验。
|
||||
|
||||
系统的主要优势包括:
|
||||
- **模块化设计**:组合式函数和对话框组件的分离提高了代码的可维护性
|
||||
- **用户体验优化**:完整的进度跟踪和错误处理提升了用户满意度
|
||||
- **数据来源多样化**:支持本地文件上传和外部网站数据导入
|
||||
- **UI设计标准化**:统一的圆形图标按钮设计增强了界面一致性
|
||||
- **扩展性强**:基于Vue 3 Composition API的设计便于功能扩展
|
||||
|
||||
建议在后续版本中继续完善:
|
||||
- 添加更多外部数据源的支持
|
||||
- 增强数据验证和错误恢复机制
|
||||
- 优化大数据量场景下的性能表现
|
||||
- 进一步丰富图标库的使用,提升界面美观度
|
||||
|
||||
## 附录
|
||||
- **API 一览**
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 系统用户管理页面
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
**本文引用的文件**
|
||||
- [frontend/src/views/system/users/index.vue](file://frontend/src/views/system/users/index.vue)
|
||||
- [frontend/src/api/user.js](file://frontend/src/api/user.js)
|
||||
- [backend/src/routes/users.js](file://backend/src/routes/users.js)
|
||||
@@ -16,6 +16,12 @@
|
||||
- [backend/src/app.js](file://backend/src/app.js)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 更新了搜索和重置按钮的交互设计,采用统一的圆形图标格式
|
||||
- 改进了按钮的悬停状态和过渡效果,提升用户体验
|
||||
- 使用Vue 3组合式API图标组件实现一致的视觉风格
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
@@ -67,11 +73,11 @@ Services --> DB
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/system/users/index.vue:1-428](file://frontend/src/views/system/users/index.vue#L1-L428)
|
||||
- [frontend/src/views/system/users/index.vue:1-419](file://frontend/src/views/system/users/index.vue#L1-L419)
|
||||
- [backend/src/routes/users.js:1-180](file://backend/src/routes/users.js#L1-L180)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/system/users/index.vue:1-428](file://frontend/src/views/system/users/index.vue#L1-L428)
|
||||
- [frontend/src/views/system/users/index.vue:1-419](file://frontend/src/views/system/users/index.vue#L1-L419)
|
||||
- [backend/src/routes/users.js:1-180](file://backend/src/routes/users.js#L1-L180)
|
||||
|
||||
## 核心组件
|
||||
@@ -85,6 +91,15 @@ Services --> DB
|
||||
- **表单验证**:用户名长度验证、密码强度验证
|
||||
- **响应式设计**:适配不同屏幕尺寸的设备
|
||||
|
||||
#### 更新的交互设计
|
||||
|
||||
**已更新** 搜索和重置按钮现已采用统一的圆形图标格式,提升了交互清晰度和视觉一致性:
|
||||
|
||||
- **圆形图标按钮**:搜索按钮使用`Search`图标,重置按钮使用`Refresh`图标
|
||||
- **一致的悬停状态**:所有按钮具有统一的悬停效果和过渡动画
|
||||
- **改进的可访问性**:通过`title`属性提供更好的无障碍支持
|
||||
- **现代化设计风格**:符合Element Plus的设计规范
|
||||
|
||||
### 后端用户管理服务
|
||||
|
||||
后端提供了完整的用户管理API,包含以下核心功能:
|
||||
@@ -95,7 +110,7 @@ Services --> DB
|
||||
- **数据验证**:输入参数的完整性和安全性检查
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/system/users/index.vue:169-393](file://frontend/src/views/system/users/index.vue#L169-L393)
|
||||
- [frontend/src/views/system/users/index.vue:160-384](file://frontend/src/views/system/users/index.vue#L160-L384)
|
||||
- [backend/src/routes/users.js:35-177](file://backend/src/routes/users.js#L35-L177)
|
||||
|
||||
## 架构概览
|
||||
@@ -135,7 +150,7 @@ UserModel --> Database
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/system/users/index.vue:173](file://frontend/src/views/system/users/index.vue#L173)
|
||||
- [frontend/src/views/system/users/index.vue:163](file://frontend/src/views/system/users/index.vue#L163)
|
||||
- [backend/src/routes/users.js:12-13](file://backend/src/routes/users.js#L12-L13)
|
||||
|
||||
## 详细组件分析
|
||||
@@ -159,6 +174,24 @@ UserModel --> Database
|
||||
- **搜索功能**:基于用户名的模糊查询
|
||||
- **实时刷新**:操作完成后自动刷新数据
|
||||
|
||||
#### 更新的按钮交互设计
|
||||
|
||||
**已更新** 搜索区域采用了现代化的圆形图标按钮设计:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
SearchForm[搜索表单] --> UsernameInput[用户名输入框]
|
||||
UsernameInput --> SearchButton[圆形搜索按钮]
|
||||
UsernameInput --> ResetButton[圆形重置按钮]
|
||||
SearchButton --> HandleSearch[执行搜索逻辑]
|
||||
ResetButton --> HandleReset[重置表单并刷新]
|
||||
HandleSearch --> LoadData[加载数据]
|
||||
HandleReset --> LoadData
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/system/users/index.vue:13-16](file://frontend/src/views/system/users/index.vue#L13-L16)
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class UserManagementPage {
|
||||
@@ -168,6 +201,7 @@ class UserManagementPage {
|
||||
+pagination : Object
|
||||
+loadData() void
|
||||
+handleSearch() void
|
||||
+handleReset() void
|
||||
+handleCreateSubmit() void
|
||||
+handleChangePassword() void
|
||||
+handleToggleStatus() void
|
||||
@@ -189,11 +223,11 @@ UserManagementPage --> ValidationRules : validates
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/system/users/index.vue:169-393](file://frontend/src/views/system/users/index.vue#L169-L393)
|
||||
- [frontend/src/views/system/users/index.vue:160-384](file://frontend/src/views/system/users/index.vue#L160-L384)
|
||||
- [frontend/src/api/user.js:1-40](file://frontend/src/api/user.js#L1-L40)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/system/users/index.vue:1-428](file://frontend/src/views/system/users/index.vue#L1-L428)
|
||||
- [frontend/src/views/system/users/index.vue:1-419](file://frontend/src/views/system/users/index.vue#L1-L419)
|
||||
|
||||
### 用户路由和控制器
|
||||
|
||||
@@ -367,6 +401,7 @@ Vue[Vue 3]
|
||||
ElementPlus[Element Plus]
|
||||
Axios[Axios]
|
||||
Router[Vue Router]
|
||||
Icons[@element-plus/icons-vue]
|
||||
end
|
||||
subgraph "后端依赖"
|
||||
Express[Express.js]
|
||||
@@ -384,14 +419,15 @@ Express --> Sequelize
|
||||
Sequelize --> MySQL
|
||||
Express --> Winston
|
||||
Express --> Crypto
|
||||
UsersPage --> Icons
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/views/system/users/index.vue:170-173](file://frontend/src/views/system/users/index.vue#L170-L173)
|
||||
- [frontend/src/views/system/users/index.vue:161-164](file://frontend/src/views/system/users/index.vue#L161-L164)
|
||||
- [backend/src/app.js:6-12](file://backend/src/app.js#L6-L12)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/views/system/users/index.vue:170-173](file://frontend/src/views/system/users/index.vue#L170-L173)
|
||||
- [frontend/src/views/system/users/index.vue:161-164](file://frontend/src/views/system/users/index.vue#L161-L164)
|
||||
- [backend/src/app.js:6-12](file://backend/src/app.js#L6-L12)
|
||||
|
||||
## 性能考虑
|
||||
@@ -403,6 +439,7 @@ Express --> Crypto
|
||||
- **虚拟滚动**: 大数据量时的表格优化
|
||||
- **缓存策略**: 本地存储用户会话信息
|
||||
- **防抖处理**: 搜索框输入防抖
|
||||
- **图标优化**: 使用SVG图标减少资源加载
|
||||
|
||||
### 后端性能优化
|
||||
- **数据库索引**: 用户名字段建立索引
|
||||
@@ -439,6 +476,11 @@ Express --> Crypto
|
||||
- **原因**: 服务器内部异常
|
||||
- **解决**: 查看后端日志文件
|
||||
|
||||
#### 图标显示问题
|
||||
- **问题**: 圆形图标按钮显示异常
|
||||
- **原因**: @element-plus/icons-vue依赖缺失
|
||||
- **解决**: 确认依赖正确安装,检查浏览器控制台错误
|
||||
|
||||
**章节来源**
|
||||
- [backend/src/config/logger.js:10-26](file://backend/src/config/logger.js#L10-L26)
|
||||
- [frontend/src/utils/auth.js:46-50](file://frontend/src/utils/auth.js#L46-L50)
|
||||
@@ -450,12 +492,13 @@ Express --> Crypto
|
||||
### 主要优势
|
||||
- **完整的CRUD功能**: 支持用户的所有基本操作
|
||||
- **严格的安全控制**: 多层次的权限验证和保护机制
|
||||
- **良好的用户体验**: 响应式设计和直观的操作界面
|
||||
- **良好的用户体验**: 响应式设计和直观的圆形图标按钮
|
||||
- **可扩展的架构**: 清晰的分层设计便于功能扩展
|
||||
|
||||
### 技术特点
|
||||
- **现代化技术栈**: Vue 3 + Express.js + MySQL
|
||||
- **安全最佳实践**: JWT认证、密码哈希、权限控制
|
||||
- **统一的交互设计**: 标准化的圆形图标按钮和一致的悬停效果
|
||||
- **完整的开发流程**: 从设计到部署的完整解决方案
|
||||
- **详细的文档支持**: 清晰的代码注释和使用说明
|
||||
|
||||
|
||||
@@ -25,10 +25,11 @@
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 完全重构前端视觉设计系统,采用全新的玻璃拟态美学风格
|
||||
- 实现797+行自定义CSS属性,构建完整的空间主题色彩系统
|
||||
- 引入现代视觉语言,替代之前的Anthropic风格暖奶油设计
|
||||
- 新增多层级玻璃表面、模糊效果、光晕系统和深度层级管理
|
||||
- 全面增强玻璃拟态主题系统,提升透明度与模糊效果质量
|
||||
- 新增多层级阴影变量系统,优化视觉深度层次
|
||||
- 精炼色彩调色板,以青色强调色替代珊瑚粉色系
|
||||
- 重构表格样式系统,建立更清晰的视觉层级结构
|
||||
- 扩展CSS变量体系,支持1272行完整的设计令牌定义
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
@@ -49,7 +50,7 @@
|
||||
## 简介
|
||||
本项目是一个面向耳机品牌与型号管理的后台管理系统,包含前后端分离的完整实现:前端基于 Vue 3 + Element Plus,后端基于 Express + Sequelize(MySQL),通过 Docker Compose 进行容器化部署。系统提供品牌管理、型号管理、OTA 升级包管理、黑名单管理、定向升级、分享码日志以及用户认证等能力。
|
||||
|
||||
**最新更新**:系统已完成全面的设计系统重构,采用全新的玻璃拟态美学风格,结合空间主题色彩系统和现代视觉语言,为用户提供沉浸式的深色界面体验。
|
||||
**最新更新**:系统已完成全面的设计系统重构,采用全新的玻璃拟态美学风格,结合空间主题色彩系统和现代视觉语言,为用户提供沉浸式的深色界面体验。**最新增强版本引入了更精细的透明度控制、优化的模糊效果和重构的色彩系统,显著提升了整体视觉质量和用户体验。**
|
||||
|
||||
## 设计哲学与核心理念
|
||||
|
||||
@@ -88,12 +89,15 @@ Luxsin CMS Dashboard 采用三层融合设计语言,将登录页的精致玻
|
||||
--lux-space-200: #cbd5e1;
|
||||
--lux-space-100: #e2e8f0; /* strong text */
|
||||
|
||||
/* 品牌色 */
|
||||
/* 品牌色 - 已优化为青色强调色系 */
|
||||
--lux-cyan: #38bdf8; /* 主品牌 */
|
||||
--lux-cyan-light: #7dd3fc;
|
||||
--lux-cyan-glow: rgba(56, 189, 248, 0.25);
|
||||
--lux-indigo: #6366f1;
|
||||
--lux-violet: #7c3aed;
|
||||
--lux-coral: #fb7185; /* 保留用于渐变过渡 */
|
||||
--lux-coral-light: #fda4af;
|
||||
--lux-coral-glow: rgba(251, 113, 133, 0.25);
|
||||
```
|
||||
|
||||
### 语义化Token定义
|
||||
@@ -110,24 +114,27 @@ Luxsin CMS Dashboard 采用三层融合设计语言,将登录页的精致玻
|
||||
--lux-text-muted: #94a3b8; /* 辅助文本 — 对比度 5.8:1 */
|
||||
--lux-text-dim: #64748b; /* 最弱文本 — 对比度 3.5:1 (仅装饰性) */
|
||||
|
||||
/* 玻璃表面 */
|
||||
--lux-glass-bg-card: rgba(30, 41, 59, 0.55); /* 卡片 */
|
||||
--lux-glass-bg-table: rgba(30, 41, 59, 0.45); /* 表格 */
|
||||
/* 玻璃表面 - 透明度已优化 */
|
||||
--lux-glass-bg-card: rgba(30, 41, 59, 0.42); /* 卡片 - 透明度降低至42% */
|
||||
--lux-glass-bg-table: rgba(30, 41, 59, 0.20); /* 表格 - 透明度大幅降低至20% */
|
||||
--lux-glass-bg-input: rgba(15, 23, 42, 0.45); /* 输入框 */
|
||||
--lux-glass-bg-dialog: rgba(30, 41, 59, 0.72); /* 对话框 */
|
||||
--lux-glass-bg-sidebar: rgba(15, 23, 42, 0.60); /* 侧栏 */
|
||||
--lux-glass-bg-header: rgba(30, 41, 59, 0.75); /* 顶栏 */
|
||||
--lux-glass-bg-tab: rgba(30, 41, 59, 0.35); /* 标签页 */
|
||||
--lux-glass-bg-tab-active: rgba(30, 41, 59, 0.55); /* 激活标签页 */
|
||||
--lux-glass-bg-dropdown: rgba(30, 41, 59, 0.82); /* 下拉菜单 */
|
||||
|
||||
/* 玻璃边框 */
|
||||
/* 玻璃边框 - 增强可见性 */
|
||||
--lux-glass-border: rgba(255, 255, 255, 0.08);
|
||||
--lux-glass-border-hover: rgba(255, 255, 255, 0.14);
|
||||
--lux-glass-border-focus: rgba(56, 189, 248, 0.45);
|
||||
|
||||
/* 模糊强度 */
|
||||
/* 模糊强度 - 新增饱和度控制 */
|
||||
--lux-blur-sm: blur(8px);
|
||||
--lux-blur-md: blur(14px);
|
||||
--lux-blur-lg: blur(20px);
|
||||
--lux-blur-lg-saturate: blur(20px) saturate(1.4); /* 增强饱和度的模糊 */
|
||||
--lux-blur-xl: blur(24px);
|
||||
```
|
||||
|
||||
@@ -135,19 +142,24 @@ Luxsin CMS Dashboard 采用三层融合设计语言,将登录页的精致玻
|
||||
系统采用4级深度层级,通过阴影和透明度建立清晰的空间层次:
|
||||
|
||||
```css
|
||||
/* 4级 Elevation */
|
||||
/* 4级 Elevation - 已增强阴影效果 */
|
||||
--lux-shadow-card:
|
||||
0 4px 24px rgba(0, 0, 0, 0.22), /* 卡片基础阴影 */
|
||||
0 0 0 1px rgba(255, 255, 255, 0.05) inset, /* 内发光边框 */
|
||||
0 1px 0 rgba(255, 255, 255, 0.08) inset; /* 顶部高光 */
|
||||
|
||||
--lux-shadow-1: 0 2px 8px rgba(0, 0, 0, 0.18); /* 卡片 resting */
|
||||
--lux-shadow-2: 0 4px 16px rgba(0, 0, 0, 0.25); /* 卡片 hover / 浮起 */
|
||||
--lux-shadow-3: 0 8px 32px rgba(0, 0, 0, 0.35); /* 弹出层 */
|
||||
--lux-shadow-4: 0 25px 50px rgba(0, 0, 0, 0.50); /* 对话框 overlay */
|
||||
--lux-shadow-4: 0 25px 50px -12px rgba(0, 0, 0, 0.50); /* 对话框 overlay - 优化扩散范围 */
|
||||
|
||||
/* 品牌 glow (焦点态) */
|
||||
/* 品牌 glow (焦点态) - 青色强调色 */
|
||||
--lux-glow-cyan: 0 0 0 3px rgba(56, 189, 248, 0.15), 0 0 0 1px rgba(56, 189, 248, 0.45) inset;
|
||||
```
|
||||
|
||||
**章节来源**
|
||||
- [DESIGN.md:28-97](file://DESIGN.md#L28-L97)
|
||||
- [frontend/src/styles/lux-theme.css:11-78](file://frontend/src/styles/lux-theme.css#L11-L78)
|
||||
- [frontend/src/styles/lux-theme.css:11-83](file://frontend/src/styles/lux-theme.css#L11-L83)
|
||||
|
||||
## 玻璃拟态设计语言
|
||||
|
||||
@@ -167,9 +179,9 @@ Luxsin CMS Dashboard 采用三层融合设计语言,将登录页的精致玻
|
||||
graph TB
|
||||
subgraph "动态背景层"
|
||||
BG["深空背景 #0a0e14"]
|
||||
ORB1["青色光球 #22d3ee<br/>位置:左上角"]
|
||||
ORB2["紫色光球 #a78bfa<br/>位置:右侧中部"]
|
||||
ORB3["珊瑚色光球 #fb7185<br/>位置:底部中央"]
|
||||
ORB1["青色光球 #22d3ee<br/>位置:左上角<br/>尺寸:52vw × 52vw"]
|
||||
ORB2["紫色光球 #a78bfa<br/>位置:右侧中部<br/>尺寸:48vw × 48vw"]
|
||||
ORB3["珊瑚色光球 #fb7185<br/>位置:底部中央<br/>尺寸:42vw × 42vw"]
|
||||
end
|
||||
subgraph "内容层"
|
||||
UI["UI组件层<br/>z-index: 1+"]
|
||||
@@ -183,8 +195,8 @@ ORB3 --> UI
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/styles/lux-theme.css:98-129](file://frontend/src/styles/lux-theme.css#L98-L129)
|
||||
- [frontend/src/layout/index.vue:3-7](file://frontend/src/layout/index.vue#L3-L7)
|
||||
- [frontend/src/styles/lux-theme.css:103-134](file://frontend/src/styles/lux-theme.css#L103-L134)
|
||||
- [frontend/src/layout/index.vue:3-8](file://frontend/src/layout/index.vue#L3-L8)
|
||||
|
||||
### 字体系统与排版
|
||||
系统采用现代化的字体栈和排版规范:
|
||||
@@ -210,33 +222,37 @@ ORB3 --> UI
|
||||
|
||||
### 卡片组件(el-card)
|
||||
```
|
||||
背景: var(--lux-glass-bg-card)
|
||||
模糊: var(--lux-blur-lg) [20px]
|
||||
边框: 1px solid var(--lux-glass-border)
|
||||
背景: var(--lux-glass-bg-card) [透明度42%]
|
||||
模糊: var(--lux-blur-lg-saturate) [20px + 1.4x饱和度]
|
||||
边框: 1px solid rgba(255, 255, 255, 0.12)
|
||||
圆角: var(--lux-radius-lg) [14px]
|
||||
阴影: var(--lux-shadow-1)
|
||||
hover 阴影: var(--lux-shadow-2)
|
||||
阴影: var(--lux-shadow-card) [多层复合阴影]
|
||||
hover 阴影: var(--lux-shadow-2) + inset glow
|
||||
padding: 20px (body), 16px 20px (header)
|
||||
```
|
||||
|
||||
### 表格组件(el-table)
|
||||
### 表格组件(el-table)- **已重构**
|
||||
```
|
||||
表头背景: rgba(15, 23, 42, 0.65) + blur(14px)
|
||||
行背景: transparent (卡片底色透出)
|
||||
hover 行: rgba(56, 189, 248, 0.06)
|
||||
hover 行: rgba(56, 189, 248, 0.06) [青色高亮]
|
||||
边框色: rgba(255, 255, 255, 0.06)
|
||||
文字: var(--lux-text-body)
|
||||
表头文字: var(--lux-text-muted)
|
||||
圆角: 12px (overflow hidden)
|
||||
斑马纹: rgba(255, 255, 255, 0.025)
|
||||
固定列: 透明背景,透出卡片玻璃效果
|
||||
```
|
||||
|
||||
### 对话框组件(el-dialog, Teleport)
|
||||
```
|
||||
背景: var(--lux-glass-bg-dialog) + blur(24px)
|
||||
边框: 1px solid var(--lux-glass-border)
|
||||
背景: rgba(30, 41, 59, 0.72) + blur(24px) + saturate(1.5)
|
||||
边框: 1px solid rgba(255, 255, 255, 0.14)
|
||||
圆角: var(--lux-radius-xl) [18px]
|
||||
阴影: var(--lux-shadow-4) + inset glow
|
||||
header: 1px solid rgba(255, 255, 255, 0.08) 底分割
|
||||
光照效果: ::before 伪元素渐变叠层
|
||||
顶部辉光: ::after 伪元素青色渐变条
|
||||
```
|
||||
|
||||
### 输入框组件(el-input, el-select)
|
||||
@@ -244,17 +260,18 @@ header: 1px solid rgba(255, 255, 255, 0.08) 底分割
|
||||
背景: var(--lux-glass-bg-input)
|
||||
圆角: var(--lux-radius-md) [10px]
|
||||
边框: 1px solid var(--lux-glass-border)
|
||||
focus: 1px solid var(--lux-glass-border-focus) + var(--lux-glow-cyan)
|
||||
focus: var(--lux-glow-cyan) [青色光晕]
|
||||
placeholder: var(--lux-text-dim)
|
||||
```
|
||||
|
||||
### 按钮组件 - Primary
|
||||
```
|
||||
背景: linear-gradient(135deg, #38bdf8, #22d3ee)
|
||||
背景: #38bdf8 [纯色青色,非渐变]
|
||||
文字: #fff
|
||||
圆角: var(--lux-radius-md) [10px]
|
||||
阴影: 0 4px 12px rgba(56, 189, 248, 0.25)
|
||||
hover 阴影: 0 6px 16px rgba(56, 189, 248, 0.35)
|
||||
active: transform: scale(0.98)
|
||||
```
|
||||
|
||||
### 侧边栏组件
|
||||
@@ -264,8 +281,9 @@ hover 阴影: 0 6px 16px rgba(56, 189, 248, 0.35)
|
||||
宽度: 64px (collapsed) / 220px (expanded)
|
||||
边框右: 1px solid rgba(255, 255, 255, 0.08)
|
||||
z-index: 100 (L2)
|
||||
active item: gradient bg rgba(56,189,248,0.22) → rgba(99,102,241,0.14)
|
||||
+ 1px inset border rgba(56,189,248,0.25)
|
||||
active item: gradient bg rgba(56,189,248,0.18) → rgba(251,113,133,0.12)
|
||||
+ inset border rgba(56,189,248,0.2)
|
||||
+ 左侧3px青色指示条
|
||||
```
|
||||
|
||||
### 顶部导航栏
|
||||
@@ -280,6 +298,7 @@ active item: gradient bg rgba(56,189,248,0.22) → rgba(99,102,241,0.14)
|
||||
|
||||
**章节来源**
|
||||
- [DESIGN.md:169-279](file://DESIGN.md#L169-L279)
|
||||
- [frontend/src/styles/lux-theme.css:361-460](file://frontend/src/styles/lux-theme.css#L361-L460)
|
||||
|
||||
## 项目结构
|
||||
仓库采用前后端分层组织方式:
|
||||
@@ -327,9 +346,9 @@ BE_app --> BE_db
|
||||
- [frontend/src/main.js:1-26](file://frontend/src/main.js#L1-L26)
|
||||
- [frontend/src/App.vue:1-30](file://frontend/src/App.vue#L1-L30)
|
||||
- [frontend/src/router/index.js:1-103](file://frontend/src/router/index.js#L1-L103)
|
||||
- [frontend/src/layout/index.vue:1-351](file://frontend/src/layout/index.vue#L1-L351)
|
||||
- [frontend/src/layout/index.vue:1-365](file://frontend/src/layout/index.vue#L1-L365)
|
||||
- [frontend/src/views/home/index.vue:1-334](file://frontend/src/views/home/index.vue#L1-L334)
|
||||
- [frontend/src/styles/lux-theme.css:1-1259](file://frontend/src/styles/lux-theme.css#L1-L1259)
|
||||
- [frontend/src/styles/lux-theme.css:1-1272](file://frontend/src/styles/lux-theme.css#L1-L1272)
|
||||
- [frontend/src/components/SidebarLogo.vue:1-135](file://frontend/src/components/SidebarLogo.vue#L1-L135)
|
||||
- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60)
|
||||
- [backend/src/routes/index.js:1-15](file://backend/src/routes/index.js#L1-L15)
|
||||
@@ -356,8 +375,8 @@ BE_app --> BE_db
|
||||
- 使用 Sequelize 定义实体(如 Brand、Model),集中导出供路由与服务使用
|
||||
- 配置与基础设施
|
||||
- 数据库连接、环境变量加载、日志、Redis 等(部分在配置目录中)
|
||||
- **新增**:设计系统核心
|
||||
- 全局CSS主题变量、玻璃拟态样式、响应式组件规范
|
||||
- **增强版**:设计系统核心
|
||||
- 全局CSS主题变量、玻璃拟态样式、响应式组件规范、1272行完整设计令牌
|
||||
|
||||
**章节来源**
|
||||
- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60)
|
||||
@@ -366,7 +385,7 @@ BE_app --> BE_db
|
||||
- [frontend/src/router/index.js:1-103](file://frontend/src/router/index.js#L1-L103)
|
||||
- [backend/src/models/index.js:1-10](file://backend/src/models/index.js#L1-L10)
|
||||
- [backend/src/config/database.js:1-24](file://backend/src/config/database.js#L1-L24)
|
||||
- [frontend/src/styles/lux-theme.css:1-1259](file://frontend/src/styles/lux-theme.css#L1-L1259)
|
||||
- [frontend/src/styles/lux-theme.css:1-1272](file://frontend/src/styles/lux-theme.css#L1-L1272)
|
||||
|
||||
## 架构总览
|
||||
系统采用经典的前后端分离架构,前端静态资源由 Nginx 托管并通过反向代理将 /api 转发到后端;后端以 Express 提供服务,使用 Sequelize 访问 MySQL。
|
||||
@@ -378,7 +397,7 @@ Nginx["Nginx(前端容器)"]
|
||||
API["Express(后端容器)"]
|
||||
DB["MySQL"]
|
||||
Redis["Redis(可选)"]
|
||||
Theme["Lux Theme System<br/>Glassmorphism + Space Colors"]
|
||||
Theme["Enhanced Lux Theme System<br/>Advanced Glassmorphism + Space Colors<br/>1272+ CSS Variables"]
|
||||
Client --> Nginx
|
||||
Nginx --> |"/api/*" 代理| API
|
||||
Nginx --> Theme
|
||||
@@ -389,7 +408,7 @@ API --> Redis
|
||||
**图表来源**
|
||||
- [docker-compose.yml:1-48](file://docker-compose.yml#L1-L48)
|
||||
- [DEPLOY.md:1-269](file://DEPLOY.md#L1-L269)
|
||||
- [frontend/src/styles/lux-theme.css:1-1259](file://frontend/src/styles/lux-theme.css#L1-L1259)
|
||||
- [frontend/src/styles/lux-theme.css:1-1272](file://frontend/src/styles/lux-theme.css#L1-L1272)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
@@ -481,7 +500,7 @@ BRAND ||--o{ MODEL : "brand_name 关联"
|
||||
|
||||
**图表来源**
|
||||
- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23)
|
||||
- [backend/src/models/Model.js:1-53](file://backend/src/models/Model.js#L1-53)
|
||||
- [backend/src/models/Model.js:1-53](file://backend/src/models/Model.js#L1-L53)
|
||||
|
||||
**章节来源**
|
||||
- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23)
|
||||
@@ -504,17 +523,17 @@ OpenDialog --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [frontend/src/layout/index.vue:174-231](file://frontend/src/layout/index.vue#L174-L231)
|
||||
- [frontend/src/layout/index.vue:174-246](file://frontend/src/layout/index.vue#L174-L246)
|
||||
|
||||
**章节来源**
|
||||
- [frontend/src/layout/index.vue:174-231](file://frontend/src/layout/index.vue#L174-L231)
|
||||
- [frontend/src/layout/index.vue:174-246](file://frontend/src/layout/index.vue#L174-L246)
|
||||
|
||||
### 品牌标识组件
|
||||
新的品牌标识组件采用SVG图形和渐变效果,支持折叠状态下的自适应显示。
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Logo["SidebarLogo 组件"] --> Mark["SVG标志<br/>渐变填充 + 阴影滤镜"]
|
||||
Logo["SidebarLogo 组件"] --> Mark["SVG标志<br/>青紫渐变填充 + 阴影滤镜"]
|
||||
Logo --> Wordmark["品牌文字<br/>渐变色 + 间距调整"]
|
||||
Mark --> Collapsed["折叠状态<br/>仅显示图标"]
|
||||
Wordmark --> Expanded["展开状态<br/>显示完整品牌名"]
|
||||
@@ -564,10 +583,12 @@ Compose --> |"Node 8083 -> 8000"| BE_api["后端 API"]
|
||||
- 建议在网关层增加速率限制与请求体大小限制(后端已有 bodyLimit 中间件)
|
||||
- 扩展点
|
||||
- 可按功能域继续拆分路由与服务,引入缓存层(Redis)与消息队列以提升吞吐
|
||||
- **新增**:设计系统性能优化
|
||||
- **增强版**:设计系统性能优化
|
||||
- CSS变量预编译减少运行时开销
|
||||
- backdrop-filter性能考虑(移动端降级方案)
|
||||
- 动画过渡优化(GPU加速)
|
||||
- 透明度优化减少渲染压力
|
||||
- 阴影效果分层渲染
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
@@ -580,16 +601,25 @@ Compose --> |"Node 8083 -> 8000"| BE_api["后端 API"]
|
||||
- 确认镜像基础版本与 pnpm 版本一致,确保上传了 package.json 与锁文件
|
||||
- 环境变量未生效
|
||||
- 重新创建容器使 .env 生效
|
||||
- **新增**:设计系统相关问题
|
||||
- **增强版**:设计系统相关问题
|
||||
- 样式未生效:检查 lux-theme.css 是否正确引入
|
||||
- 玻璃效果异常:确认浏览器支持 backdrop-filter
|
||||
- 颜色显示异常:检查CSS变量定义顺序
|
||||
- 透明度问题:验证各组件透明度值是否符合预期
|
||||
- 模糊效果卡顿:检查设备性能,考虑降级方案
|
||||
|
||||
**章节来源**
|
||||
- [DEPLOY.md:226-269](file://DEPLOY.md#L226-L269)
|
||||
|
||||
## 结论
|
||||
本设计系统以清晰的模块化与容器化部署为基础,提供了完整的品牌与型号管理能力,并在认证、路由、模型与部署方面形成了稳定的工程实践。**最新的设计系统重构引入了革命性的玻璃拟态美学,通过797+行精心设计的CSS变量和组件规范,为用户创造了沉浸式的深色界面体验。**
|
||||
本设计系统以清晰的模块化与容器化部署为基础,提供了完整的品牌与型号管理能力,并在认证、路由、模型与部署方面形成了稳定的工程实践。**最新的增强版本通过1272行精心设计的CSS变量和组件规范,实现了革命性的玻璃拟态美学,为用户创造了更加沉浸式的深色界面体验。**
|
||||
|
||||
**主要改进包括**:
|
||||
- 优化的透明度控制系统,提供更细腻的视觉效果
|
||||
- 增强的阴影层级系统,建立更清晰的视觉层次
|
||||
- 精炼的青色强调色系统,替代原有的珊瑚粉色系
|
||||
- 重构的表格样式,提供更好的视觉层级和数据可读性
|
||||
- 完善的CSS变量体系,支持更好的维护和扩展性
|
||||
|
||||
后续可在缓存、监控与可观测性方面进一步增强,以满足更大规模的生产需求。同时,设计系统的持续演进将为产品带来更一致的视觉语言和更好的用户体验。
|
||||
|
||||
@@ -608,6 +638,6 @@ Compose --> |"Node 8083 -> 8000"| BE_api["后端 API"]
|
||||
- 首页视图:[frontend/src/views/home/index.vue](file://frontend/src/views/home/index.vue)
|
||||
- 品牌标识:[frontend/src/components/SidebarLogo.vue](file://frontend/src/components/SidebarLogo.vue)
|
||||
- 设计系统规范:[DESIGN.md](file://DESIGN.md)
|
||||
- 主题样式:[frontend/src/styles/lux-theme.css](file://frontend/src/styles/lux-theme.css)
|
||||
- 主题样式:**[enhanced]** [frontend/src/styles/lux-theme.css](file://frontend/src/styles/lux-theme.css)
|
||||
- 部署文档:[DEPLOY.md](file://DEPLOY.md)
|
||||
- 编排文件:[docker-compose.yml](file://docker-compose.yml)
|
||||
Reference in New Issue
Block a user