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
@@ -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 一览**