## 目标 - 创建若干“交易记录”(对公转账付款凭证)测试数据,并确保后台管理可以正常查看、筛选与分页。 - 全流程可回滚,严格隔离开发与生产数据。 ## 关键假设 - 交易记录以 `PaymentReceipt`(关联 `Invoice`)为核心:后端模型位于 `app/models/invoice.py`。 - 后端已提供发票与凭证相关 API: - 发票:`GET/POST /api/v1/invoice/*`(`app/api/v1/invoice/invoice.py`) - 凭证:`POST /api/v1/invoice/{id}/receipt`、列表 `GET /api/v1/transactions/receipts`(`app/api/v1/transactions/transactions.py`)。 - 现有后台页已覆盖发票列表 `web/src/views/transaction/invoice/index.vue`,尚无“凭证专属列表”页面。 ## 数据建模与来源 - `Invoice`:发票记录(开票状态、类型、抬头信息、公司税号、银行账户等)。 - `PaymentReceipt`:对公转账付款凭证(字段含 `invoice_id`、`url`、`note`、`verified`、`created_at`)。 - 为保证后台可见,需同时插入可查询的 `Invoice` 与其关联的 `PaymentReceipt`。 ## 实施路径 ### 方案 A:通过现有 API 批量生成(零代码改动,首选) - 步骤: - 调用 `POST /api/v1/invoice/create` 批量创建 5–10 条覆盖不同类型/状态的发票(含公司名、税号、银行账户等)。 - 对每条发票调用 `POST /api/v1/invoice/{id}/receipt` 上传/登记 1–2 条付款凭证(`file_url` 或 `url`、`note`、`verified`)。 - 可选:通过 `POST /api/v1/transactions/send-email` 生成邮件日志,验证通知链路。 - 优势:不改动代码,快速、低风险;与现有权限和审计链路一致。 ### 方案 B:后端种子脚本(仅开发环境,便于重复初始化) - 在 `app/core/init_app.py` 新增 `init_demo_transactions()`: - 仅在开发环境执行(如 `ENV=dev`);避免污染生产。 - 批量创建 `Invoice` 测试数据,再为每条 `Invoice` 创建若干 `PaymentReceipt`。 - 为可识别性,在 `note` 中加入 `DEMO` 标签或新增布尔字段(若允许)。 - 将该方法纳入现有 `init_data()` 的“开发模式”分支;保留一键清理逻辑(删除 `DEMO` 标记数据)。 ## 前端后台展示 - 新增后台页“交易记录”:`web/src/views/transaction/receipts/index.vue`(Naive UI): - 数据源:`GET /api/v1/transactions/receipts`;支持分页与筛选(手机号、公司名、税号、状态、类型等)。 - 列:凭证时间、公司名称、税号、转账备注(`note`)、审核状态(`verified`)、关联发票 ID/类型,查看详情。 - 行为:查看详情(`GET /api/v1/transactions/receipts/{id}`),跳转到发票详情。 - 菜单与权限: - 在后端 `init_menus()` 增加“交易记录”菜单,并为管理员角色在 `init_roles()` 授权;在 `init_apis()` 注册 `receipts` 相关 API。 - 备选轻改:在 `invoice/index.vue` 增加“凭证数/链接”列与详情入口,先实现可见性,后续再拆分独立列表页。 ## 验证步骤 - 数据验证: - 通过 API 查询:`GET /api/v1/invoice/list` 与 `GET /api/v1/transactions/receipts`,确认条数、筛选与分页正确。 - 随机抽样验证 `PaymentReceipt` 与对应 `Invoice` 关联完整、字段齐备。 - 前端验证: - 后台页加载正常、列渲染与筛选可用;详情跳转与状态标签正确。 - 安全验证: - 在生产环境禁用种子逻辑;标记测试数据,提供清理。 ## 回滚与清理 - 提供清理脚本/接口:按 `DEMO` 标记或 ID 范围批量删除测试发票与凭证。 - 菜单与权限变更可回退至原状态(移除菜单、撤销授权)。 ## 交付物 - (A)一组 API 请求示例(可直接运行)生成测试交易与凭证。 - (B)可选:开发环境种子函数与清理脚本。 - (C)前端“交易记录”后台页(或在发票页增加凭证列的最小改动)。 ## 备注 - 编码时为新增函数与接口补充函数级注释(功能、参数、返回值说明),遵循现有代码风格与安全规范。