# 收支管理系统 个人收支管理系统,支持收入/支出记录管理、分类管理、月度统计与图表展示。 ## 技术栈 | 层级 | 技术 | |---|---| | 后端 | 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` 环境变量,会自动作为首次配置并保存。 登录后可通过右上角用户菜单 →「数据库设置」随时切换数据库;切换后原数据库的数据保留,不做自动迁移。 ## 启动后端 ```bash cd finance-app set JAVA_HOME=D:\venv\jdk-21 gradlew.bat bootRun ``` - 后端地址:http://localhost:8080 - API 文档:http://localhost:8080/doc.html ## 启动前端 ```bash cd finance-app/frontend npm run dev ``` - 前端地址:http://localhost:5173 ## 构建可执行 jar(前后端一体化) 将前端构建产物一并打入 jar,单文件同时提供前端页面与后端接口: ```bash 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,可另指定端口): ```bash 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/ # 页面组件 ```