更新 wiki
This commit is contained in:
@@ -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,显著提升了代码质量和可维护性。新的实现遵循现代设计系统指南,提供了更好的性能表现、更直观的交互流程和更健壮的错误处理机制,为后续功能扩展奠定了坚实的技术基础。
|
||||
Reference in New Issue
Block a user