223 lines
5.7 KiB
Markdown
223 lines
5.7 KiB
Markdown
# Design: 拆件流程管理页面架构设计
|
||
|
||
## 架构概述
|
||
拆件流程管理页面采用基于状态管理的步骤式设计,使用Element Plus Timeline组件作为核心导航结构,确保用户可以流畅地在四个步骤间切换,同时保持数据的连续性和一致性。
|
||
|
||
## 技术架构
|
||
|
||
### 组件结构
|
||
```
|
||
DisassemblyWorkflow.vue (主组件)
|
||
├── StepNavigation (步骤导航)
|
||
│ └── ElementPlus Timeline
|
||
├── StepContent (步骤内容容器)
|
||
│ ├── PreviewStep (第一步)
|
||
│ ├── DisassemblyStep (第二步)
|
||
│ ├── ModelStep (第三步)
|
||
│ └── ShippingStep (第四步)
|
||
└── StepActions (步骤操作按钮)
|
||
```
|
||
|
||
### 状态管理设计
|
||
使用Vue 3 Composition API的reactive进行状态管理:
|
||
|
||
```javascript
|
||
const workflowState = reactive({
|
||
currentStep: 1,
|
||
contentData: {
|
||
previewImage: '', // 预览图URL
|
||
modelUrl: '', // 3D模型URL
|
||
disassemblyImages: [], // 拆件后图片列表
|
||
generatedModel: '', // 生成的模型URL
|
||
shippingInfo: {} // 发货信息
|
||
},
|
||
stepStatus: {
|
||
1: 'completed', // preview
|
||
2: 'current', // disassembly
|
||
3: 'pending', // model
|
||
4: 'pending' // shipping
|
||
}
|
||
})
|
||
```
|
||
|
||
## 设计模式
|
||
|
||
### 1. 步骤覆盖逻辑
|
||
为了实现在已有下一步状态时,上一步操作可以覆盖下一步内容,设计了以下逻辑:
|
||
|
||
```javascript
|
||
// 步骤覆盖检查
|
||
const checkStepOverride = (targetStep) => {
|
||
const currentMaxStep = Math.max(...Object.keys(workflowState.stepStatus)
|
||
.filter(step => workflowState.stepStatus[step] !== 'pending'))
|
||
|
||
return targetStep <= currentMaxStep
|
||
}
|
||
|
||
// 覆盖下游步骤
|
||
const overrideDownstreamSteps = (fromStep) => {
|
||
Object.keys(workflowState.stepStatus).forEach(step => {
|
||
const stepNum = parseInt(step)
|
||
if (stepNum > fromStep) {
|
||
workflowState.stepStatus[step] = 'pending'
|
||
}
|
||
})
|
||
}
|
||
```
|
||
|
||
### 2. 响应式布局适配
|
||
采用"桌面优先"设计策略:
|
||
|
||
```css
|
||
/* 桌面端布局 (>=1024px) */
|
||
.disassembly-layout {
|
||
display: grid;
|
||
grid-template-columns: 1fr 300px;
|
||
gap: 24px;
|
||
}
|
||
|
||
/* 平板端布局 (768px-1024px) */
|
||
@media (max-width: 1024px) {
|
||
.disassembly-layout {
|
||
grid-template-columns: 1fr;
|
||
gap: 16px;
|
||
}
|
||
}
|
||
|
||
/* 移动端布局 (<768px) */
|
||
@media (max-width: 768px) {
|
||
.step-content {
|
||
padding: 16px;
|
||
}
|
||
|
||
.action-buttons {
|
||
flex-direction: column;
|
||
gap: 8px;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 国际化设计
|
||
所有用户可见文本通过Vue I18n管理:
|
||
|
||
```javascript
|
||
// 国际化键值结构
|
||
const i18nKeys = {
|
||
disassembly: {
|
||
title: '拆件流程',
|
||
steps: {
|
||
preview: '内容预览',
|
||
disassembly: '拆件结果',
|
||
model: '模型生成',
|
||
shipping: '物流发货'
|
||
},
|
||
actions: {
|
||
startDisassembly: '开始拆件',
|
||
regenerate: '重新生成',
|
||
generateModel: '生成模型',
|
||
export: '导出',
|
||
ship: '发货',
|
||
submitShipping: '提交发货信息'
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## 关键交互设计
|
||
|
||
### 1. 步骤导航交互
|
||
- Timeline组件显示四个步骤的进度
|
||
- 当前步骤高亮显示,已完成步骤显示勾选标记
|
||
- 点击已完成的步骤可以跳转到该步骤
|
||
- 点击未来步骤需要验证前置步骤是否完成
|
||
|
||
### 2. 预览交互设计
|
||
- **图片预览**:点击缩略图弹出全屏预览对话框
|
||
- **3D模型预览**:使用ModelViewer组件,支持旋转、缩放等操作
|
||
- **模型放大**:第三步的模型支持点击放大到全屏预览
|
||
|
||
### 3. 步骤覆盖交互
|
||
- 在第二步点击"重新生成"时,如果已有第三步内容,会弹出确认对话框
|
||
- 用户确认后会清空第三步和第四步的所有内容
|
||
- 状态重新计算,确保步骤间的逻辑一致性
|
||
|
||
### 4. 表单验证设计
|
||
- 第四步的发货表单使用Element Plus Form组件
|
||
- 必填字段:收件人姓名、联系电话、收货地址
|
||
- 可选字段:备注、特殊要求
|
||
- 实时验证和提交前验证相结合
|
||
|
||
## 性能优化策略
|
||
|
||
### 1. 组件懒加载
|
||
```javascript
|
||
// 路由级别的懒加载
|
||
const DisassemblyWorkflow = defineAsyncComponent(() =>
|
||
import('@/views/disassembly/DisassemblyWorkflow.vue')
|
||
)
|
||
```
|
||
|
||
### 2. 图片懒加载
|
||
```javascript
|
||
// 使用vue3-lazyload进行图片懒加载
|
||
const lazyConfig = {
|
||
loading: '/images/loading.gif',
|
||
error: '/images/error.png'
|
||
}
|
||
```
|
||
|
||
### 3. 状态缓存
|
||
- 步骤数据在组件销毁前持久化到sessionStorage
|
||
- 页面刷新后可以恢复用户的进度状态
|
||
- 关键数据:当前步骤、已生成内容、用户输入的表单数据
|
||
|
||
## 用户体验设计
|
||
|
||
### 1. 加载状态
|
||
- 每个步骤切换时显示加载动画
|
||
- 拆件和模型生成过程显示进度条
|
||
- 骨架屏占位,提升感知性能
|
||
|
||
### 2. 错误处理
|
||
- 网络错误友好提示
|
||
- 文件加载失败的重试机制
|
||
- 表单验证错误的即时反馈
|
||
|
||
### 3. 反馈设计
|
||
- 成功操作的Toast提示
|
||
- 步骤完成的状态反馈
|
||
- 关键操作的确认对话框
|
||
|
||
## 可访问性考虑
|
||
|
||
### 1. 键盘导航
|
||
- 所有可交互元素支持Tab键导航
|
||
- 步骤导航支持左右箭头键切换
|
||
- 对话框支持ESC键关闭
|
||
|
||
### 2. 屏幕阅读器支持
|
||
- 为Timeline组件添加适当的ARIA标签
|
||
- 步骤状态变化时的ARIA Live通知
|
||
- 图片和模型预览的替代文本
|
||
|
||
## 扩展性设计
|
||
|
||
### 1. 步骤配置化
|
||
```javascript
|
||
const stepConfigs = [
|
||
{
|
||
id: 1,
|
||
component: 'PreviewStep',
|
||
title: t('disassembly.steps.preview'),
|
||
required: true
|
||
},
|
||
// ...更多步骤配置
|
||
]
|
||
```
|
||
|
||
### 2. 插件化操作
|
||
- 导出功能设计为可配置的插件接口
|
||
- 支持添加新的导出格式
|
||
- 模型预览功能可扩展为支持多种3D格式
|
||
|
||
这种设计确保了拆件流程页面的可维护性、可扩展性和良好的用户体验,同时遵循了项目的技术规范和设计标准。 |