- 数据库支持 SQLite / MySQL 运行时配置与切换,未配置时仍可启动,配置后自动建表 - 新增默认分类与标签初始化,注册用户自动创建 - 新增注册开关(默认关闭,可在系统设置开启;无用户时允许创建首个账号) - 合并数据库、注册与 AI 配置为「系统设置」页,拆分「模型使用情况」独立页面 - AI 一键设置支持新建分类与标签 - 前端构建产物打包进可执行 jar,后端增加 SPA 路由回退 - jar 更名为 finance-app,补全 Gradle Wrapper,移除 archive 任务 - 更新 DeepSeek 模型说明文案
102 lines
3.3 KiB
Markdown
102 lines
3.3 KiB
Markdown
# 收支管理系统
|
||
|
||
个人收支管理系统,支持收入/支出记录管理、分类管理、月度统计与图表展示。
|
||
|
||
## 技术栈
|
||
|
||
| 层级 | 技术 |
|
||
|---|---|
|
||
| 后端 | 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/ # 页面组件
|
||
```
|