🟡 Admin 一般问题

以下问题影响用户体验或存在一定安全风险,建议按需修复。

🟡 A05 ✅ 已修复 性能 · users 模块

用户列表无服务端分页,大数据量时前端卡顿

API:GET /admin/users
问题描述:原接口无 LIMIT/OFFSET,所有用户数据一次返回,大数据量时响应体过大、前端渲染卡顿。
修复内容:
  1. ✅ 新增 page(默认1)和 limit(默认20,上限100)query 参数
  2. ✅ 返回结构改为 { data, total, page, limit, totalPages }
  3. ✅ Dashboard 等前端组件适配新的响应格式
🟡 A06 ✅ 已修复 可维护性 · logs 模块

审计日志和 API 日志无自动清理机制

API:GET /admin/audit-logs · GET /admin/api-logs
问题描述:audit_logsapi_usage_logs 表持续写入,无过期数据自动清理逻辑。审计日志每操作一条就插一条(频繁操作场景下增长极快),API 日志每次调用都插入一条。
长期影响:两张表无索引优化时会越来越慢;存储成本持续增长;admin 日志查询页面加载时间随数据量增加而增加。
改进建议:
  1. DELETE /admin/audit-logs/cleanup?days=90 — 手动清理审计日志(默认90天)
  2. DELETE /admin/api-logs/cleanup?days=30 — 手动清理API日志(默认30天)
  3. ✅ 系统 cron 每日 3AM 自动执行清理脚本(保留审计日志 90 天,API 日志 30 天)
  4. ❌ 数据库中仍为明文存储(未做 AES-256 加密)
🟡 A07 ✅ 已修复 功能缺陷 · email 模块

测试邮件功能标注"待实现"但前端已提供入口

API:POST /admin/email-config/test
源码位置:Financial_Admin/src/pages/EmailSettings.jsx
问题描述:管理员点击"保存并测试"按钮时,前端注释明确写出 // Note: Need backend to implement test email endpoint。当前行为:直接保存配置,然后显示"配置已保存!测试邮件功能待实现。"——给管理员造成困惑。
修复内容:
  1. POST /admin/email-config/test — 真实发送测试邮件到配置的 from 地址
  2. ✅ 连接失败返回详细错误(ECONNREFUSED/EAUTH/ETIMEDOUT)
  3. ✅ 前端调用真实测试接口,显示服务器返回结果
🟡 A08 ✅ 已修复 数据完整性 · budget-alerts 模块

预算预警使用率计算未考虑已删除的交易

API:GET /admin/budget-alerts(后端计算逻辑)
问题描述:预算预警的 spent 字段基于 transactions 表实时求和计算。如果某笔高额交易被用户删除,spent 下降,预警自动消失;但如果后来又导入了新的 CSV(覆盖模式),旧数据(含被删除的交易)会重新入库,spent 再次升高——同样的数据被计了两次(删除前的和重新导入的)。
改进建议:
  1. budget_alerts 表增加 last_checked_atlast_checked_tx_count 字段
  2. 定时任务检查 spentlast_checked_tx_count 是否匹配,不匹配则重新计算
  3. 或使用 SQL VIEW 实时计算而非存储 spent 字段
🟡 A09 ✅ 已修复 可维护性 · recurring 模块

定期账单"下次执行时间"无自动推进逻辑

API:GET /admin/recurring
修复内容:
  1. server/index.js 启动时执行一次 advanceRecurringBills()
  2. ✅ 每小时定时执行一次(setInterval(advanceRecurringBills, 60*60*1000)
  3. ✅ 遍历所有 is_active=1next_due_at <= now() 的记录
  4. ✅ 根据 frequency(daily/weekly/monthly/yearly)推进 next_due_at
🟡 A10 ✅ 已修复 体验 · csv-imports 模块

CSV 导入记录状态仅有"处理中"标识,无详细错误信息

API:GET /admin/csv-imports
问题描述:CSV 导入记录包含 total_rowssuccess_rowsfailed_rows 字段,但没有记录哪些行失败及失败原因。管理员看到失败数 > 0 时无法定位问题,用户也不知道如何修正 CSV 文件。
改进建议:
  1. 新增 csv_import_errors 表存储:import_id, row_number, error_message, raw_data
  2. 导入失败时记录错误原因(格式错误、必填字段缺失、金额类型错误等)
  3. Admin CSV 导入页面增加"查看错误"按钮,点击弹窗列出失败详情