Files
EmailBill/openspec/changes/refactor-bill-list-component/tasks.md
SunCheng a88556c784 fix
2026-02-15 10:10:28 +08:00

136 lines
6.5 KiB
Markdown
Raw 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.
## 1. 组件基础结构搭建
- [x] 1.1 创建 `Web/src/components/Bill/BillListComponent.vue` 文件
- [x] 1.2 定义 TypeScript Props 接口dataSource, apiParams, transactions, showDelete, showCheckbox, enableFilter, enableSort, compact
- [x] 1.3 定义 Emits 接口load, click, delete, update:selectedIds
- [x] 1.4 创建组件骨架template、script setup、style scoped
- [x] 1.5 添加必要的 Vant 组件导入van-list, van-swipe-cell, van-dropdown-menu, van-loading, van-empty, van-icon, van-tag
## 2. 数据管理和状态
- [x] 2.1 实现 `dataSource` 模式切换逻辑api vs custom
- [x] 2.2 创建响应式数据状态transactions, loading, finished, page, pageSize
- [x] 2.3 实现筛选状态管理selectedType, selectedCategory, dateRange, sortBy
- [x] 2.4 实现多选状态管理localSelectedIds, 与 prop 同步)
- [x] 2.5 创建 computed 计算属性用于筛选和排序逻辑
## 3. API 数据加载
- [x] 3.1 导入 `@/api/transactionRecord` 的相关 API 方法
- [x] 3.2 实现初始加载逻辑fetchTransactions 方法)
- [x] 3.3 实现分页加载逻辑onLoad 方法,支持 van-list
- [x] 3.4 实现筛选条件变更时的数据重载逻辑
- [x] 3.5 处理 API 错误和加载状态
## 4. 筛选功能实现
- [x] 4.1 创建筛选栏 UIvan-dropdown-menu包含类型、分类、日期、排序四个下拉菜单
- [x] 4.2 实现类型筛选(支出、收入、不计入、全部)
- [x] 4.3 实现分类筛选(动态获取分类列表或预设常用分类)
- [x] 4.4 实现日期范围筛选(使用 van-calendar 弹出层)
- [x] 4.5 实现排序功能(金额降序、金额升序、时间降序、时间升序)
- [x] 4.6 添加筛选重置功能
- [x] 4.7 根据 `enableFilter` prop 控制筛选栏显示/隐藏
## 5. 账单列表展示
- [x] 5.1 创建账单卡片布局(基于 v2 风格,左侧图标、中间内容、右侧金额)
- [x] 5.2 实现紧凑模式样式(减少卡片间距至 6px内边距至 10px
- [x] 5.3 实现账单图标显示(根据分类映射图标,使用 getIconByClassify 方法)
- [x] 5.4 实现金额格式化(带符号、颜色区分支出/收入)
- [x] 5.5 实现类型标签显示(右上角,支出红色、收入绿色)
- [x] 5.6 实现时间格式化显示HH:MM 或 YYYY-MM-DD HH:MM
- [x] 5.7 实现空状态展示van-empty带友好文案
## 6. 左滑删除功能
- [x] 6.1 为每个账单项添加 van-swipe-cell 包裹
- [x] 6.2 创建删除按钮插槽(右侧滑出,红色按钮)
- [x] 6.3 实现删除确认对话框van-dialog
- [x] 6.4 实现删除 API 调用deleteTransaction
- [x] 6.5 删除成功后更新本地列表(移除对应项)
- [x] 6.6 显示删除成功/失败提示van-toast
- [x] 6.7 派发全局事件 `transaction-deleted`
- [x] 6.8 触发父组件 `@delete` 事件
- [x] 6.9 根据 `showDelete` prop 控制删除功能启用/禁用
## 7. 点击详情功能
- [x] 7.1 为账单卡片添加 @click 事件监听
- [x] 7.2 实现 handleClick 方法,触发 `@click` 事件并传递账单对象
- [x] 7.3 确保点击复选框或删除按钮时不触发详情事件(事件冒泡处理)
## 8. 多选功能
- [x] 8.1 在账单项左侧添加 van-checkbox根据 `showCheckbox` prop 控制显示)
- [x] 8.2 实现 checkbox 选中状态与 `selectedIds` prop 同步
- [x] 8.3 实现 toggleSelection 方法(切换选中状态)
- [x] 8.4 触发 `@update:selectedIds` 事件更新父组件状态
- [ ] 8.5 添加全选/取消全选功能(可选,视需求)
## 9. 样式和主题适配
- [x] 9.1 使用 SCSS 编写组件样式
- [x] 9.2 使用 CSS 变量适配 Vant 主题(`var(--van-danger-color)` 等)
- [x] 9.3 实现暗黑模式适配(检查暗色背景下的显示效果)
- [x] 9.4 根据 `compact` prop 调整卡片间距和内边距
- [x] 9.5 确保移动端响应式布局(处理小屏幕、横屏等情况)
- [x] 9.6 添加过渡动画(卡片删除、列表加载等)
## 10. 页面迁移 - TransactionsRecord
- [x] 10.1 在 `TransactionsRecord.vue` 中导入新组件 `BillListComponent`
- [x] 10.2 替换旧 `TransactionList` 组件为 `BillListComponent`
- [x] 10.3 传递必要的 propsshowCheckbox, selectedIds, apiParams
- [x] 10.4 更新事件监听(@click, @delete, @update:selectedIds
- [ ] 10.5 验证批量操作功能正常(选中、删除、导出等)
- [ ] 10.6 测试页面功能完整性
## 11. 页面迁移 - BillAnalysisView
- [x] 11.1 在 `BillAnalysisView.vue` 中导入新组件 `BillListComponent` (页面未使用旧组件,跳过)
- [x] 11.2 替换旧组件为 `BillListComponent` (页面未使用旧组件,跳过)
- [x] 11.3 传递筛选参数(如按分类、日期范围)(页面未使用旧组件,跳过)
- [x] 11.4 更新事件监听 (页面未使用旧组件,跳过)
- [x] 11.5 测试页面功能正常 (页面未使用旧组件,跳过)
## 12. 页面迁移 - 其他引用页面
- [x] 12.1 使用 grep 搜索所有引用旧 `TransactionList` 的文件
- [x] 12.2 逐个页面进行迁移(重复步骤 10-11 的流程)
- [x] 12.3 验证每个页面的功能和样式
- [x] 12.4 检查是否有遗漏的引用
## 13. CalendarV2 模块处理
- [x] 13.1 评估 `calendarV2/modules/TransactionList.vue` 的特殊功能Smart 按钮、日期联动等)
- [x] 13.2 决定是保留该文件还是迁移到新组件
- [x] 13.3 如保留,添加注释说明其特殊性;如迁移,确保功能对等
- [x] 13.4 测试 CalendarV2 的交易列表功能
## 14. 清理旧代码
- [x] 14.1 删除 `Web/src/components/TransactionList.vue`
- [x] 14.2 检查并删除相关的未使用导入
- [x] 14.3 更新 `AGENTS.md` 或相关文档,说明新组件的使用方式
- [x] 14.4 提交代码变更Git commit
## 15. 测试和验证
- [ ] 15.1 编写单元测试Vue Test Utils测试 props、emits、筛选、排序逻辑
- [ ] 15.2 手动测试所有功能点(筛选、排序、分页、删除、多选、详情)
- [ ] 15.3 测试暗黑模式显示效果
- [ ] 15.4 测试不同屏幕尺寸的响应式布局
- [ ] 15.5 测试 API 错误处理和边界情况(空数据、网络错误等)
- [ ] 15.6 回归测试所有迁移页面,确保无功能丢失
- [ ] 15.7 性能测试(加载 1000+ 条数据时的流畅度)
## 16. 文档和收尾
- [x] 16.1 编写组件使用文档Props、Emits、Slots 说明)
- [x] 16.2 更新 `Web/src/views/AGENTS.md`(如有)
- [x] 16.3 在组件文件顶部添加 JSDoc 注释
- [x] 16.4 代码格式化pnpm lint
- [x] 16.5 构建测试pnpm build
- [x] 16.6 最终代码审查