一个基于 NestJS + Vue 3 开发的个人记账应用,提供简单、直观、高效的记账体验。
NestJS 11- Node.js 框架MariaDB/MySQL- 数据库TypeORM- ORM 框架class-validator- DTO 验证
Vue 3+Vite 7- 构建工具TypeScript- 全程类型安全Axios- HTTP 请求Element Plus- UI 组件库
- ✅ 账单 CRUD - 新增、查询、修改、删除
- ✅ 分类管理 - 支出/收入分类下拉选择
- ✅ 筛选查询 - 按类型、分类、日期范围筛选
- ✅ 实时统计 - 总余额、收入、支出自动计算
- ✅ 分页加载 - 每页 20 条,支持翻页
- ✅ 数据备份 - 导出/导入 CSV
- 📱 导航栏 - 首页、统计、设置三页面
- 📊 统计页面 - 收支概览 + 分类统计
- ⚙️ 设置页面 - 关于信息
- 💰 金额单位 - 前端元,后端分,避免精度问题
- 🕐 时间显示 - 完整日期时间,UTC+8 时区
- 🎨 浅粉色主题 - 磨砂玻璃质感 UI
- 📱 响应式布局 - 固定导航栏
- Node.js (v20+)
- MariaDB / MySQL
- pnpm 或 npm
CREATE DATABASE finance_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;cd bean_finance
pnpm install
# 配置数据库连接 (src/app.module.ts)
pnpm run start:dev后端默认运行在 http://localhost:3000
cd bean_finance_frontend
pnpm install
pnpm run dev前端默认运行在 http://localhost:5173
餐饮、交通、购物、娱乐、住房、医疗、教育、通讯、其他
工资、奖金、投资、其他
| 字段 | 类型 | 说明 |
|---|---|---|
id |
number | 主键自增 |
amount |
int | 金额 (单位:分) |
type |
enum | income(收入) / expense(支出) |
category |
string | 账单分类 |
note |
string | 备注信息 |
recordedAt |
timestamp | 记账时间 |
createdAt |
timestamp | 创建时间 |
- 金额精度: 全程使用"分"作为整数单位存储,前端展示时转换为"元"
- 时区处理: 前端统一使用 UTC+8 时区,避免时间显示错乱
- 前后端分离: 通过 CORS 跨域通信,Axios 封装 API
- 响应式 UI: Vue computed 实现余额实时计算
个人练手项目,持续迭代中...
