Files
ledgerly/README.md
T
rosercode c1f5d02564 feat: 支持数据库运行时配置与多数据库,重构设置页并完善打包
- 数据库支持 SQLite / MySQL 运行时配置与切换,未配置时仍可启动,配置后自动建表
- 新增默认分类与标签初始化,注册用户自动创建
- 新增注册开关(默认关闭,可在系统设置开启;无用户时允许创建首个账号)
- 合并数据库、注册与 AI 配置为「系统设置」页,拆分「模型使用情况」独立页面
- AI 一键设置支持新建分类与标签
- 前端构建产物打包进可执行 jar,后端增加 SPA 路由回退
- jar 更名为 finance-app,补全 Gradle Wrapper,移除 archive 任务
- 更新 DeepSeek 模型说明文案
2026-09-18 12:33:41 +08:00

102 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 收支管理系统
个人收支管理系统,支持收入/支出记录管理、分类管理、月度统计与图表展示。
## 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | 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/ # 页面组件
```