9981e77bf1f13d7b487134e5f398c04410679788
- 账单导入支持 zip 压缩包,加密包自动检测并弹窗输入解压密码(引入 zip4j) - 新增美团、招商银行、交通银行账单解析器及对应账单类型 - 支付方式列表改为后端动态获取,前端筛选与新增/编辑表单动态渲染 - 支付方式筛选从「更多筛选」移至常用筛选栏,移除「银行卡」选项 - 收支记录支持多选批量删除 - 补充相关三语文案并透传业务错误码
收支管理系统
个人收支管理系统,支持收入/支出记录管理、分类管理、月度统计与图表展示。
技术栈
| 层级 | 技术 |
|---|---|
| 后端 | Spring Boot 3.3.6 + Java 21 + MyBatis-Plus + MySQL / SQLite |
| 前端 | Vue 3 + TypeScript + Vite + Naive UI + ECharts |
| 构建 | Gradle 8.13 (后端) / npm (前端) |
| 认证 | JWT |
| API 文档 | Knife4j (OpenAPI 3) |
| JDK 版本 | 21.0.12.1 (Temurin LTS) |
| Node.js 版本 | v24.0.0 |
前置条件
- JDK 21.0.12.1 Temurin LTS,安装在
D:\venv\jdk-21 - Node.js v24.0.0
数据库配置
系统支持在服务启动后再配置数据库,无需启动前准备:
- 未检测到配置时,应用仍可正常启动,前端会引导进入「初始化数据库」页面;
- 支持 SQLite(本地单文件,零配置)与 MySQL 两种数据库;
- 保存配置后立即生效并自动建表,无需手动执行 SQL;
- 配置持久化在
config/database.json(已加入.gitignore),SQLite 数据默认位于data/目录; - 新注册用户会自动获得一套默认分类与标签;
- 兼容旧部署:若无本地配置但存在
DB_URL/DB_USERNAME/DB_PASSWORD环境变量,会自动作为首次配置并保存。
登录后可通过右上角用户菜单 →「数据库设置」随时切换数据库;切换后原数据库的数据保留,不做自动迁移。
启动后端
cd finance-app
set JAVA_HOME=D:\venv\jdk-21
gradlew.bat bootRun
- 后端地址:http://localhost:8080
- API 文档:http://localhost:8080/doc.html
启动前端
cd finance-app/frontend
npm run dev
构建可执行 jar(前后端一体化)
将前端构建产物一并打入 jar,单文件同时提供前端页面与后端接口:
gradle bootJar
- 该任务会先执行前端
npm run build,再把frontend/dist复制到 jar 内的BOOT-INF/classes/static/ - 构建环境需具备 Node(开发容器通过
NODE_HOME指向系统 nvm Node,npm 走本地 verdaccio 源) - 输出文件:
build/libs/finance-app-0.0.1-SNAPSHOT.jar
启动(默认 8080,可另指定端口):
java -jar build/libs/finance-app-0.0.1-SNAPSHOT.jar --server.port=18081
访问对应端口即可同时使用前端与接口;刷新 /dashboard 等子路由会由后端回退到 index.html。
项目结构
finance-app/
├── build.gradle
├── src/main/java/cn/rosercode/finance/
│ ├── controller/ # 接口层
│ ├── service/ # 业务层
│ ├── mapper/ # 数据访问层
│ ├── entity/ # 实体类
│ ├── dto/ # 请求对象
│ ├── vo/ # 响应对象
│ ├── config/ # 配置类
│ ├── common/ # 公共类
│ ├── interceptor/ # 拦截器
│ └── util/ # 工具类
├── src/main/resources/
│ ├── application.yml
│ ├── mapper/
│ └── sql/init.sql
└── frontend/ # Vue 3 前端
└── src/
├── api/ # API 请求封装
├── router/ # 路由配置
├── store/ # 状态管理
└── views/ # 页面组件
Languages
Java
62%
Vue
26.2%
TypeScript
10.8%
Go Template
0.9%