Files
SunCheng 6e95568906
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 18s
Docker Build & Deploy / Deploy to Production (push) Successful in 6s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 0s
Docker Build & Deploy / WeChat Notification (push) Successful in 1s
fix
2026-02-20 13:56:29 +08:00

120 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: PopupContainerV2 提供固定布局能力
PopupContainerV2 组件 SHALL 提供固定头部、可滚动内容、固定底部的布局模式,并采用 TransactionDetailSheet 的样式风格16px 圆角、Inter 字体、纯白背景)。
#### Scenario: PopupContainerV2 基础结构
- **WHEN** 使用 PopupContainerV2 组件
- **THEN** 组件基于 van-popup 实现底部弹窗
- **THEN** 弹窗顶部圆角为 16pxborderTopLeftRadius 和 borderTopRightRadius
- **THEN** 背景色为 #ffffff(亮色模式)或 #18181b(暗色模式)
#### Scenario: PopupContainerV2 固定头部
- **WHEN** 传入 title prop
- **THEN** 头部显示标题文本,字体为 Inter18pxfont-weight 600
- **THEN** 头部右侧显示关闭按钮van-icon cross
- **THEN** 头部固定在顶部,不随内容滚动
#### Scenario: PopupContainerV2 可滚动内容区域
- **WHEN** 在 default 插槽中放置内容
- **THEN** 内容区域可独立滚动
- **THEN** 滚动时头部和底部保持固定
- **THEN** 内容区域不提供默认 padding由使用方控制
#### Scenario: PopupContainerV2 固定底部
- **WHEN** 在 footer 插槽中放置操作按钮
- **THEN** 底部区域固定在底部,不随内容滚动
- **THEN** 底部区域保持与内容区域的视觉分隔
#### Scenario: PopupContainerV2 暗色模式支持
- **WHEN** 系统启用暗色模式prefers-color-scheme: dark
- **THEN** 背景色切换为 #18181b
- **THEN** 标题文本颜色切换为 #fafafa
- **THEN** 关闭按钮颜色切换为 #a1a1aa
## MODIFIED Requirements
### Requirement: TransactionDetailSheet 使用 PopupContainerV2 实现固定布局
TransactionDetailSheet 组件 SHALL 使用 PopupContainerV2 组件实现底部弹窗,并确保头部标题和底部操作按钮固定不随内容滚动。
#### Scenario: 打开交易详情弹窗
- **WHEN** 用户点击交易记录打开详情弹窗
- **THEN** 弹窗从底部弹出,使用 PopupContainerV2 组件
- **THEN** 弹窗顶部圆角为 16px
- **THEN** 头部显示固定标题"交易详情",字体为 Inter 18px
- **THEN** 底部固定显示"删除"和"保存"按钮
- **THEN** 中间内容区域(金额、时间、备注、类型、分类)可独立滚动
#### Scenario: 滚动交易详情内容
- **WHEN** 用户在交易详情弹窗中滚动内容
- **THEN** 头部标题始终固定在顶部可见
- **THEN** 底部操作按钮(删除、保存)始终固定在底部可见
- **THEN** 只有中间内容区域发生滚动
#### Scenario: 展开分类选择器后滚动
- **WHEN** 用户点击"分类"字段展开分类选择器
- **THEN** 分类选择器在内容区域内展开
- **THEN** 如果内容超出可视区域,用户可以滚动查看所有分类选项
- **THEN** 头部标题和底部按钮仍然保持固定
### Requirement: 保持现有功能和交互不变
TransactionDetailSheet 组件在重构后 SHALL 保持所有现有的功能和交互逻辑不变,包括但不限于金额编辑、日期选择、分类选择、保存、删除等操作。
#### Scenario: 金额编辑功能保持不变
- **WHEN** 用户点击金额数值进入编辑模式
- **THEN** 金额输入框自动聚焦并选中当前值
- **THEN** 用户输入新金额后失焦时自动格式化为两位小数
#### Scenario: 日期时间选择功能保持不变
- **WHEN** 用户点击"时间"字段
- **THEN** 弹出 van-datetime-picker 日期时间选择器
- **THEN** 选择器显示在最顶层(不受 PopupContainerV2 层级影响)
- **THEN** 确认后时间更新为选择的值
#### Scenario: 分类选择功能保持不变
- **WHEN** 用户点击"分类"字段
- **THEN** 展开 ClassifySelector 组件
- **THEN** 用户可以选择分类
- **THEN** 选择后自动触发保存
#### Scenario: 保存和删除功能保持不变
- **WHEN** 用户点击"保存"按钮
- **THEN** 验证必填字段(金额、分类、时间)
- **THEN** 调用 updateTransaction API 更新数据
- **THEN** 成功后显示提示并关闭弹窗
- **WHEN** 用户点击"删除"按钮
- **THEN** 显示确认对话框
- **THEN** 确认后调用 deleteTransaction API 删除数据
- **THEN** 成功后显示提示并关闭弹窗
### Requirement: 组件对外 API 兼容
TransactionDetailSheet 组件的 props 和 events SHALL 保持与重构前完全一致,确保零破坏性变更。
#### Scenario: Props 保持不变
- **WHEN** 父组件传递 `show``transaction` props
- **THEN** TransactionDetailSheet 正常接收并响应这些 props
- **THEN** 不需要修改任何调用方代码
#### Scenario: Events 保持不变
- **WHEN** 用户保存或删除交易
- **THEN** TransactionDetailSheet 触发 `update:show`, `save`, `delete` 事件
- **THEN** 事件参数格式与重构前完全一致