Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 50s
更新了前端构建产物包括JavaScript、CSS和HTML文件,主要涉及以下变更: 1. 新增了多个组件和工具函数,包括异常页面组件、iframe组件等 2. 更新了活动管理、产品管理、优惠券管理等业务模块 3. 优化了构建配置和依赖管理 4. 修复了一些样式和功能问题 5. 更新了测试相关文件 同时更新了部分后端服务接口和测试用例。这些变更主要是为了支持新功能和改进现有功能的用户体验。
303 lines
7.5 KiB
Markdown
303 lines
7.5 KiB
Markdown
# 实时奖品价格统计功能 - 任务拆分文档
|
||
|
||
## 任务依赖图
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[货币格式化函数] --> B[优化UI显示]
|
||
C[验证价格计算逻辑] --> D[添加价格变化动画]
|
||
E[编写单元测试] --> F[集成测试验证]
|
||
G[代码审查优化] --> H[文档更新]
|
||
|
||
B --> I[功能完成]
|
||
D --> I
|
||
F --> I
|
||
H --> I
|
||
```
|
||
|
||
## 原子化任务列表
|
||
|
||
### 任务1:货币格式化函数实现
|
||
**任务ID**: TASK-001
|
||
**优先级**: High
|
||
**预估时间**: 30分钟
|
||
**前置依赖**: 无
|
||
|
||
#### 输入契约
|
||
- **输入数据**: 数值类型的金额
|
||
- **环境依赖**: TypeScript环境,Intl.NumberFormat支持
|
||
- **前置条件**: 无
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 格式化的人民币字符串(¥1,234.56)
|
||
- **交付物**: `formatCurrency`函数实现
|
||
- **验收标准**:
|
||
- 正确显示人民币符号
|
||
- 支持千分位分隔符
|
||
- 保留两位小数
|
||
- 处理边界值(0,负数,大数)
|
||
|
||
#### 实现约束
|
||
- **技术栈**: TypeScript + Vue 3
|
||
- **质量标准**: 100%测试覆盖率
|
||
- **性能要求**: 函数执行时间 < 1ms
|
||
|
||
#### 具体实现
|
||
```typescript
|
||
// 在wizard/index.vue中添加
|
||
function formatCurrency(amount: number): string {
|
||
return new Intl.NumberFormat('zh-CN', {
|
||
style: 'currency',
|
||
currency: 'CNY',
|
||
minimumFractionDigits: 2,
|
||
maximumFractionDigits: 2
|
||
}).format(amount)
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 任务2:UI显示优化
|
||
**任务ID**: TASK-002
|
||
**优先级**: High
|
||
**预估时间**: 45分钟
|
||
**前置依赖**: TASK-001
|
||
|
||
#### 输入契约
|
||
- **输入数据**: `totalCost`计算结果,`formatCurrency`函数
|
||
- **环境依赖**: Vue 3模板语法,Element Plus组件
|
||
- **前置条件**: 货币格式化函数已完成
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 优化后的UI界面
|
||
- **交付物**: 更新后的模板代码和样式
|
||
- **验收标准**:
|
||
- 正确显示格式化后的总价格
|
||
- 与现有统计信息保持一致的视觉风格
|
||
- 响应式布局正常
|
||
|
||
#### 实现约束
|
||
- **技术栈**: Vue 3模板语法 + SCSS
|
||
- **质量标准**: 通过视觉审查
|
||
- **性能要求**: 无额外性能开销
|
||
|
||
#### 具体实现
|
||
```vue
|
||
<!-- 修改第195-197行 -->
|
||
<div class="reward-stats">
|
||
<span class="stat-item">总计:{{ rows.length }} 个奖品</span>
|
||
<span class="stat-item ml-4">总价值:{{ formatCurrency(totalCost) }}</span>
|
||
</div>
|
||
```
|
||
|
||
---
|
||
|
||
### 任务3:价格计算逻辑验证
|
||
**任务ID**: TASK-003
|
||
**优先级**: Medium
|
||
**预估时间**: 30分钟
|
||
**前置依赖**: 无
|
||
|
||
#### 输入契约
|
||
- **输入数据**: 奖品列表数据,价格缓存
|
||
- **环境依赖**: Vue 3计算属性系统
|
||
- **前置条件**: 现有`totalCost`计算属性
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 验证结果和优化建议
|
||
- **交付物**: 计算逻辑分析报告
|
||
- **验收标准**:
|
||
- 验证计算准确性
|
||
- 检查边界条件处理
|
||
- 确认性能满足要求
|
||
|
||
#### 实现约束
|
||
- **技术栈**: Vue 3 computed
|
||
- **质量标准**: 100%计算准确性
|
||
- **性能要求**: 计算时间 < 100ms
|
||
|
||
#### 测试用例
|
||
```typescript
|
||
// 测试场景
|
||
const testCases = [
|
||
{ rows: [], expected: 0 },
|
||
{ rows: [{product_id: 1, quantity: 2}], priceCache: {1: 100}, expected: 200},
|
||
{ rows: [{product_id: 1, quantity: 1}, {product_id: 2, quantity: 2}], priceCache: {1: 50, 2: 30}, expected: 110}
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
### 任务4:价格变化动画效果
|
||
**任务ID**: TASK-004
|
||
**优先级**: Low
|
||
**预估时间**: 60分钟
|
||
**前置依赖**: TASK-002
|
||
|
||
#### 输入契约
|
||
- **输入数据**: 价格变化事件
|
||
- **环境依赖**: CSS3动画,Vue过渡系统
|
||
- **前置条件**: UI显示已完成
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 动画效果实现
|
||
- **交付物**: CSS动画样式和Vue过渡配置
|
||
- **验收标准**:
|
||
- 价格变化时有平滑动画
|
||
- 动画时长适中(200-300ms)
|
||
- 不影响性能
|
||
|
||
#### 实现约束
|
||
- **技术栈**: CSS3 + Vue Transition
|
||
- **质量标准**: 动画流畅,无明显卡顿
|
||
- **性能要求**: 使用GPU加速,避免重排重绘
|
||
|
||
#### 具体实现
|
||
```scss
|
||
// 添加动画样式
|
||
.price-update-animation {
|
||
animation: priceFlash 0.3s ease-in-out;
|
||
}
|
||
|
||
@keyframes priceFlash {
|
||
0% { transform: scale(1); }
|
||
50% { transform: scale(1.05); color: var(--el-color-success); }
|
||
100% { transform: scale(1); }
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 任务5:单元测试编写
|
||
**任务ID**: TASK-005
|
||
**优先级**: Medium
|
||
**预估时间**: 45分钟
|
||
**前置依赖**: TASK-001, TASK-003
|
||
|
||
#### 输入契约
|
||
- **输入数据**: 格式化函数,计算逻辑
|
||
- **环境依赖**: Vitest测试框架
|
||
- **前置条件**: 核心功能已实现
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 测试用例和测试报告
|
||
- **交付物**: 完整的单元测试文件
|
||
- **验收标准**:
|
||
- 覆盖所有核心函数
|
||
- 测试边界条件
|
||
- 测试错误处理
|
||
|
||
#### 实现约束
|
||
- **技术栈**: Vitest + Vue Test Utils
|
||
- **质量标准**: 100%函数覆盖率
|
||
- **性能要求**: 测试执行时间 < 5s
|
||
|
||
#### 测试用例设计
|
||
```typescript
|
||
// formatCurrency测试
|
||
describe('formatCurrency', () => {
|
||
test('should format positive numbers correctly', () => {
|
||
expect(formatCurrency(1234.56)).toBe('¥1,234.56')
|
||
})
|
||
|
||
test('should handle zero correctly', () => {
|
||
expect(formatCurrency(0)).toBe('¥0.00')
|
||
})
|
||
|
||
test('should handle negative numbers correctly', () => {
|
||
expect(formatCurrency(-1234.56)).toBe('¥-1,234.56')
|
||
})
|
||
})
|
||
```
|
||
|
||
---
|
||
|
||
### 任务6:集成测试验证
|
||
**任务ID**: TASK-006
|
||
**优先级**: Medium
|
||
**预估时间**: 30分钟
|
||
**前置依赖**: TASK-002, TASK-005
|
||
|
||
#### 输入契约
|
||
- **输入数据**: 完整的功能实现
|
||
- **环境依赖**: 浏览器环境,测试数据
|
||
- **前置条件**: 单元测试已通过
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 集成测试报告
|
||
- **交付物**: 测试验证结果
|
||
- **验收标准**:
|
||
- 功能在真实环境中正常工作
|
||
- 性能指标满足要求
|
||
- 用户体验良好
|
||
|
||
#### 测试场景
|
||
1. 添加多个奖品,验证价格实时更新
|
||
2. 修改奖品数量,验证重新计算
|
||
3. 删除奖品,验证价格减少
|
||
4. 清空所有奖品,验证显示为0
|
||
|
||
---
|
||
|
||
### 任务7:代码审查与优化
|
||
**任务ID**: TASK-007
|
||
**优先级**: Low
|
||
**预估时间**: 30分钟
|
||
**前置依赖**: TASK-006
|
||
|
||
#### 输入契约
|
||
- **输入数据**: 完整的代码实现
|
||
- **环境依赖**: 代码审查工具,ESLint
|
||
- **前置条件**: 功能测试已通过
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 优化后的代码
|
||
- **交付物**: 代码审查报告
|
||
- **验收标准**:
|
||
- 符合项目代码规范
|
||
- 性能优化到位
|
||
- 代码可读性好
|
||
|
||
#### 审查要点
|
||
- TypeScript类型安全
|
||
- Vue最佳实践
|
||
- 性能优化建议
|
||
- 代码注释完整性
|
||
|
||
---
|
||
|
||
### 任务8:文档更新
|
||
**任务ID**: TASK-008
|
||
**优先级**: Low
|
||
**预估时间**: 20分钟
|
||
**前置依赖**: TASK-007
|
||
|
||
#### 输入契约
|
||
- **输入数据**: 最终实现的功能
|
||
- **环境依赖**: Markdown文档格式
|
||
- **前置条件**: 代码审查已完成
|
||
|
||
#### 输出契约
|
||
- **输出数据**: 更新的文档
|
||
- **交付物**: 完整的项目文档
|
||
- **验收标准**:
|
||
- 文档与实际实现一致
|
||
- 包含使用说明
|
||
- 包含维护指南
|
||
|
||
#### 文档内容
|
||
- 功能说明
|
||
- 实现细节
|
||
- 使用示例
|
||
- 注意事项
|
||
|
||
## 总体时间估算
|
||
- **总预估时间**: 5小时30分钟
|
||
- **关键路径**: TASK-001 → TASK-002 → TASK-005 → TASK-006 → TASK-007 → TASK-008
|
||
- **可并行任务**: TASK-003, TASK-004
|
||
|
||
## 风险与应对
|
||
1. **时间风险**: 预留20%缓冲时间
|
||
2. **技术风险**: 提前验证技术方案可行性
|
||
3. **集成风险**: 及早进行集成测试
|
||
4. **性能风险**: 持续监控性能指标 |