feat: 小菜记账 v1.0 - 完整功能实现

核心功能:
- 记账CRUD(支出/收入/分类/备注/日期)
- 统计分析(概览/分类占比/每日趋势)
- 预算管理(按月设置/进度条/超支提醒)
- 数据导出CSV

安全与认证:
- HMAC-SHA256签名token认证
- 用户数据隔离
- 输入验证与错误处理
- CORS配置

前端优化:
- 骨架屏加载
- 账单按日期分组
- 预算页面重构(快捷预设+Numpad)
- SvgIcon组件(H5+微信双端适配)
- 下拉刷新

后端优化:
- 共享日期工具函数
- 数据库连接池优化
- 健康检查端点
- 优雅关闭处理

技术栈:
- 前端:Uni-app (Vue 3 + Pinia)
- 后端:Node.js + Express + MySQL
This commit is contained in:
2026-05-29 16:14:15 +08:00
commit c7f29aa7a7
70 changed files with 32282 additions and 0 deletions

17
server/src/utils/date.ts Normal file
View File

@@ -0,0 +1,17 @@
const MONTH_REGEX = /^\d{4}-(0[1-9]|1[0-2])$/
export function getCurrentMonth(): string {
const d = new Date()
const offset = 8 * 60 * 60 * 1000
const local = new Date(d.getTime() + offset)
return local.toISOString().slice(0, 7)
}
export function getMonthRange(m: string): { startDate: string; endDate: string } | null {
if (!MONTH_REGEX.test(m)) return null
const [year, mon] = m.split('-').map(Number)
const startDate = `${m}-01`
const lastDay = new Date(year, mon, 0).getDate()
const endDate = `${m}-${String(lastDay).padStart(2, '0')}`
return { startDate, endDate }
}