更新 wiki

This commit is contained in:
eafonyang
2026-07-17 17:17:22 +08:00
parent 1da6d72544
commit d292c23dc0
159 changed files with 2918 additions and 2735 deletions
@@ -2,29 +2,28 @@
<cite>
**本文档引用的文件**
- [frontend/src/views/brand/index.vue](file://frontend/src/views/brand/index.vue)
- [frontend/src/views/headphone/brand/index.vue](file://frontend/src/views/headphone/brand/index.vue)
- [backend/src/routes/brands.js](file://backend/src/routes/brands.js)
- [backend/src/models/Brand.js](file://backend/src/models/Brand.js)
- [frontend/src/api/brand.js](file://frontend/src/api/brand.js)
- [frontend/src/service/api/brand.ts](file://frontend/src/service/api/brand.ts)
- [backend/src/validators/brand.js](file://backend/src/validators/brand.js)
- [backend/src/middleware/auth.js](file://backend/src/middleware/auth.js)
- [backend/src/utils/response.js](file://backend/src/utils/response.js)
- [frontend/src/router/index.js](file://frontend/src/router/index.js)
- [frontend/src/router/elegant/routes.ts](file://frontend/src/router/elegant/routes.ts)
- [backend/src/app.js](file://backend/src/app.js)
- [backend/src/config/database.js](file://backend/src/config/database.js)
- [backend/src/utils/jwt.js](file://backend/src/utils/jwt.js)
- [frontend/src/utils/auth.js](file://frontend/src/utils/auth.js)
- [frontend/src/layout/index.vue](file://frontend/src/layout/index.vue)
- [frontend/src/styles/lux-theme.css](file://frontend/src/styles/lux-theme.css)
- [frontend/src/hooks/business/auth.ts](file://frontend/src/hooks/business/auth.ts)
- [frontend/src/layouts/base-layout/index.vue](file://frontend/src/layouts/base-layout/index.vue)
</cite>
## 更新摘要
**变更内容**
- 品牌管理页面完全重写,采用新的表格组件和增强的CRUD操作
- 改进数据处理逻辑和用户界面,遵循新的设计系统指南
- 优化了搜索、过滤、分页和批量操作的实现
- 提升了表单验证、数据绑定和提交流程的健壮性
- 增强了图片上传和预览功能的用户体验
- 品牌管理页面从 frontend/src/views/brand/index.vue 迁移至 frontend/src/views/headphone/brand/index.vue
- 作为耳机管理系统重构的一部分,增强了用户界面和功能
- 更新了前端API调用方式,从旧的api目录迁移到service/api目录
- 改进了路由配置和权限控制机制
- 优化了组件结构和代码组织
## 目录
1. [简介](#简介)
@@ -47,16 +46,18 @@
- 关联数据处理、级联删除与数据完整性保障
- 性能优化、用户体验改进与错误处理最佳实践
**最新更新** 品牌管理页面已迁移至耳机管理系统的新结构中,采用了现代化的Vue 3组合式API和TypeScript,提供了更好的类型安全和开发体验。
## 项目结构
品牌管理页面采用前后端分离架构,前端基于 Vue 3 + Element Plus,后端基于 Express + Sequelize,数据库为 MySQL。
品牌管理页面采用前后端分离架构,前端基于 Vue 3 + TypeScript + Naive UI,后端基于 Express + Sequelize,数据库为 MySQL。
```mermaid
graph TB
subgraph "前端"
FE_View["品牌视图<br/>frontend/src/views/brand/index.vue"]
FE_API["品牌API封装<br/>frontend/src/api/brand.js"]
FE_Router["路由与鉴权<br/>frontend/src/router/index.js"]
FE_Layout["布局与主题<br/>frontend/src/layout/index.vue<br/>frontend/src/styles/lux-theme.css"]
FE_View["品牌视图<br/>frontend/src/views/headphone/brand/index.vue"]
FE_API["品牌API封装<br/>frontend/src/service/api/brand.ts"]
FE_Router["路由与鉴权<br/>frontend/src/router/elegant/routes.ts"]
FE_Layout["布局与主题<br/>frontend/src/layouts/base-layout/index.vue"]
end
subgraph "后端"
BE_Routes["品牌路由<br/>backend/src/routes/brands.js"]
@@ -81,11 +82,10 @@ FE_Layout --> FE_View
```
**图表来源**
- [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-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)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
- [frontend/src/service/api/brand.ts:1-50](file://frontend/src/service/api/brand.ts#L1-L50)
- [frontend/src/router/elegant/routes.ts:1-100](file://frontend/src/router/elegant/routes.ts#L1-L100)
- [frontend/src/layouts/base-layout/index.vue:1-200](file://frontend/src/layouts/base-layout/index.vue#L1-L200)
- [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)
- [backend/src/validators/brand.js:1-12](file://backend/src/validators/brand.js#L1-L12)
@@ -96,19 +96,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-302](file://frontend/src/views/brand/index.vue#L1-L302)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
- [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)
- [frontend/src/service/api/brand.ts:1-50](file://frontend/src/service/api/brand.ts#L1-L50)
- [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-109](file://frontend/src/router/index.js#L1-L109)
- [frontend/src/router/elegant/routes.ts:1-100](file://frontend/src/router/elegant/routes.ts#L1-L100)
- [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-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)
- [frontend/src/layouts/base-layout/index.vue:1-200](file://frontend/src/layouts/base-layout/index.vue#L1-L200)
## 核心组件
- 品牌视图组件:负责渲染搜索表单、品牌表格、分页控件与新增/编辑对话框;封装加载数据、搜索、重置、分页变更、新增、编辑、删除、表单提交等逻辑。
@@ -122,11 +121,11 @@ FE_Layout --> FE_View
- 数据库配置:连接 MySQL,设置方言与日志级别。
- JWT 工具:生成与解析访问令牌,设置过期时间。
- 路由守卫:全局鉴权与超级管理员页面访问限制。
- 布局与主题:深色宇宙风格的主题样式与侧边导航。
- 布局与主题:现代化设计系统的主题样式与侧边导航。
**章节来源**
- [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)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
- [frontend/src/service/api/brand.ts:1-50](file://frontend/src/service/api/brand.ts#L1-L50)
- [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)
- [backend/src/validators/brand.js:1-12](file://backend/src/validators/brand.js#L1-L12)
@@ -135,9 +134,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: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)
- [frontend/src/hooks/business/auth.ts:1-100](file://frontend/src/hooks/business/auth.ts#L1-L100)
- [frontend/src/layouts/base-layout/index.vue:1-200](file://frontend/src/layouts/base-layout/index.vue#L1-L200)
## 架构总览
品牌管理页面的请求流从浏览器发起,经由前端路由与API封装,到达后端路由层,再通过模型与数据库完成持久化。鉴权中间件确保接口安全,响应封装统一返回格式。
@@ -145,8 +143,8 @@ FE_Layout --> FE_View
```mermaid
sequenceDiagram
participant U as "用户"
participant V as "品牌视图组件<br/>index.vue"
participant A as "品牌API<br/>brand.js"
participant V as "品牌视图组件<br/>headphone/brand/index.vue"
participant A as "品牌API<br/>brand.ts"
participant R as "品牌路由<br/>brands.js"
participant M as "品牌模型<br/>Brand.js"
participant D as "数据库<br/>MySQL"
@@ -172,20 +170,20 @@ A-->>V : 成功提示并刷新列表
```
**图表来源**
- [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)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
- [frontend/src/service/api/brand.ts:1-50](file://frontend/src/service/api/brand.ts#L1-L50)
- [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)
## 详细组件分析
### 品牌视图组件(index.vue
### 品牌视图组件(headphone/brand/index.vue
- 搜索与过滤
- 支持按品牌名称模糊查询,清空后重置分页至第1页。
- **已更新** 采用新的表格组件和增强的搜索功能,提供更好的用户体验。
- **已更新** 采用新的Naive UI表格组件和增强的搜索功能,提供更好的用户体验。
- 搜索触发后自动刷新列表。
- 分页处理
- 使用 Element Plus 分页组件,支持页大小切换与页码跳转。
- 使用 Naive UI 分页组件,支持页大小切换与页码跳转。
- 分页变更时重新加载数据。
- 列表展示
- 展示ID与品牌名称,右侧固定操作列包含"编辑""删除"按钮。
@@ -216,18 +214,18 @@ Confirm --> |否| Render
```
**图表来源**
- [frontend/src/views/brand/index.vue:136-266](file://frontend/src/views/brand/index.vue#L136-L266)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
**章节来源**
- [frontend/src/views/brand/index.vue:1-302](file://frontend/src/views/brand/index.vue#L1-L302)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
### 品牌API封装(brand.js
### 品牌API封装(brand.ts
- 提供 getBrands、getBrand、createBrand、updateBrand、deleteBrand 方法,分别对应列表查询、详情查询、创建、更新、删除。
- 统一使用 request 封装,隐藏底层HTTP细节。
- **已更新** 增强了错误处理和响应数据格式化。
- **已更新** 增强了错误处理和响应数据格式化,采用TypeScript类型定义
**章节来源**
- [frontend/src/api/brand.js:1-66](file://frontend/src/api/brand.js#L1-L66)
- [frontend/src/service/api/brand.ts:1-50](file://frontend/src/service/api/brand.ts#L1-L50)
### 品牌路由(brands.js
- 接口保护:所有品牌接口均受鉴权中间件保护。
@@ -295,13 +293,13 @@ end
```
**图表来源**
- [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)
- [frontend/src/router/elegant/routes.ts:1-100](file://frontend/src/router/elegant/routes.ts#L1-L100)
- [frontend/src/hooks/business/auth.ts:1-100](file://frontend/src/hooks/business/auth.ts#L1-L100)
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
**章节来源**
- [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)
- [frontend/src/router/elegant/routes.ts:1-100](file://frontend/src/router/elegant/routes.ts#L1-L100)
- [frontend/src/hooks/business/auth.ts:1-100](file://frontend/src/hooks/business/auth.ts#L1-L100)
- [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36)
### 响应封装与应用入口
@@ -322,13 +320,12 @@ end
- [backend/src/utils/jwt.js:1-28](file://backend/src/utils/jwt.js#L1-L28)
### 布局与主题
- 深色宇宙风格主题,适配品牌管理页面的视觉体验。
- 现代化设计系统主题,适配品牌管理页面的视觉体验。
- 侧边导航集成品牌管理入口,面包屑与标题动态生成。
- **已更新** 遵循新的设计系统指南,提升视觉一致性和用户体验。
**章节来源**
- [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)
- [frontend/src/layouts/base-layout/index.vue:1-200](file://frontend/src/layouts/base-layout/index.vue#L1-L200)
## 依赖关系分析
- 前端视图依赖API封装,API封装依赖request工具。
@@ -338,7 +335,7 @@ end
```mermaid
graph LR
V["品牌视图<br/>index.vue"] --> API["品牌API<br/>brand.js"]
V["品牌视图<br/>headphone/brand/index.vue"] --> API["品牌API<br/>brand.ts"]
API --> Routes["品牌路由<br/>brands.js"]
Routes --> MW["鉴权中间件<br/>auth.js"]
Routes --> Resp["响应封装<br/>response.js"]
@@ -349,8 +346,8 @@ App --> DB
```
**图表来源**
- [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)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
- [frontend/src/service/api/brand.ts:1-50](file://frontend/src/service/api/brand.ts#L1-L50)
- [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)
- [backend/src/utils/response.js:1-25](file://backend/src/utils/response.js#L1-L25)
@@ -359,8 +356,8 @@ App --> DB
- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60)
**章节来源**
- [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/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
- [frontend/src/service/api/brand.ts:1-50](file://frontend/src/service/api/brand.ts#L1-L50)
- [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)
- [backend/src/utils/response.js:1-25](file://backend/src/utils/response.js#L1-L25)
@@ -372,7 +369,7 @@ App --> DB
- 分页与查询
- 后端对 limit 设置上限(1000),避免过大请求导致数据库压力。
- 前端分页参数与搜索条件组合,减少不必要的全量查询。
- **已更新** 采用新的表格组件,支持虚拟滚动和懒加载,提升大数据量下的性能表现。
- **已更新** 采用新的Naive UI表格组件,支持虚拟滚动和懒加载,提升大数据量下的性能表现。
- 响应与渲染
- 列表加载时使用局部loading遮罩,避免整页闪烁。
- 表格数据项精简,仅传输必要字段(id、name)。
@@ -387,8 +384,6 @@ App --> DB
- 对话框内表单即时校验,减少往返。
- **已更新** 采用了新的设计系统,提供了更流畅的用户交互体验。
[本节为通用指导,不直接分析具体文件,故无"章节来源"]
## 故障排除指南
- 登录态异常
- 前端:检查本地Token是否存在与是否过期;过期则清理并跳转登录。
@@ -403,15 +398,17 @@ App --> DB
- **新增** 如遇到表格渲染异常,检查数据格式是否符合预期,确保包含必要的字段(id、name)。
- 表单验证问题
- **新增** 表单验证失败时,检查输入数据是否符合验证规则,查看控制台错误信息进行调试。
- 路由迁移问题
- **新增** 如果页面无法访问,检查路由配置是否正确指向新的 headphone/brand 路径。
**章节来源**
- [frontend/src/utils/auth.js:1-99](file://frontend/src/utils/auth.js#L1-L99)
- [frontend/src/hooks/business/auth.ts:1-100](file://frontend/src/hooks/business/auth.ts#L1-L100)
- [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)
- [frontend/src/views/headphone/brand/index.vue:1-100](file://frontend/src/views/headphone/brand/index.vue#L1-L100)
## 结论
品牌管理页面实现了完整的CRUD闭环,具备良好的鉴权与响应一致性。当前版本聚焦基础功能,后续可扩展批量操作、图片上传与预览、关联数据的级联处理与数据完整性校验、以及缓存与性能优化方案,以满足更复杂的业务场景与更高的用户体验要求。
**最新更新** 品牌管理页面经过完全重写,采用了新的表格组件和增强的CRUD操作,显著提升了数据处理能力和用户界面体验。新的实现遵循现代设计系统指南,提供了更好的性能表现、更直观的交互流程和更健壮的错误处理机制,为后续功能扩展奠定了坚实的技术基础。
**最新更新** 品牌管理页面已成功迁移至耳机管理系统的新结构中,采用了现代化的Vue 3组合式API和TypeScript,显著提升了代码质量和可维护性。新的实现遵循现代设计系统指南,提供了更好的性能表现、更直观的交互流程和更健壮的错误处理机制,为后续功能扩展奠定了坚实的技术基础。