一个覆盖资产全生命周期(申请 → 审批 → 采购 → 入库 → 领用 → 归还)的前后端分离项目
- 后端:Spring Boot 3.4、Spring Security、JJWT、Spring Data JPA、Flyway、MySQL、Spring Mail (JavaMailSender)
- 前端:Vue 3 + Vite + TypeScript + Element Plus + Pinia + Vue Router
- 测试:JUnit 5、MockMvc、Vue TSC
- 其他:OpenAPI(Swagger UI)、Docker、GitHub Actions
backend/asset-backend # Spring Boot 服务
frontend/asset-frontend # Vue3 + Element Plus 前端
infra/postman # Postman/Insomnia 示例
docker-compose.yml # 一键启动 MySQL + 后端 + 前端
README.md # 当前文档
cp docker/.env.example .env # 可选,覆盖默认环境
docker compose up -d # 启动 mysql + backend + frontend
# 前端将监听 0.0.0.0:80
# 后端将监听 0.0.0.0:8080手动启动后端方法1(mvnw):
cd backend/asset-backend
./mvnw spring-boot:run \
-Dspring-boot.run.jvmArguments="\
-DDB_URL=jdbc:mysql://localhost:3306/asset \
-DDB_USERNAME=root \
-DDB_PASSWORD=123456 \
-DJWT_SECRET=popcap"手动启动后端方法2(IntelliJ IDEA):
- 导入项目:打开 IDEA,选择
Open,指向backend/asset-backend目录(识别为 Maven 项目)。 - 配置数据库:确保本地 MySQL 已启动(端口 3306,账号 root/123456)且存在
asset库。- 若使用 Docker 启动的 MySQL,会自动初始化,无需额外配置。
- 若需修改数据库配置,可在 Run Configuration 的 Environment variables 中添加
DB_PASSWORD=your_password等。
- 运行:找到
src/main/java/com/project/asset/AssetBackendApplication.java,点击运行(Run)。
Flyway 会在首次启动时自动创建并初始化数据库(含种子数据、角色、权限、示例资产等)。
手动启动前端:
Node.js 要求:22.12 及以上(或 20.19+)。项目当前在 Node 22.11.0 下会收到 Vite 的版本提示,请按提示升级。
cd frontend/asset-frontend
npm install
npm run dev # 默认端口 5173,可在 env 中自定义构建产物:
npm run build| 角色 | 账号 | 密码 | 权限说明 |
|---|---|---|---|
| 系统管理员 | admin | admin123 | 拥有所有权限 |
| 部门管理员 | dept_admin | 123456 | 资产审批、领用/归还、审计查看 |
| 运营负责人 | ops_lead | 123456 | 与部门管理员相同,用于演示多账号审批 |
| 仓库主管 | warehouse | 123456 | 资产入库、采购、审批、领用/归还、库存维护 |
| 审计员 | auditor | 123456 | 审计日志查看、导出 |
| 普通员工 | user1 | 123456 | 资产申请、查看 |
| 角色编码 | 说明 | 核心权限 |
|---|---|---|
ROLE_ADMIN |
系统管理员 | asset:*, user:manage, role:manage, permission:view, audit:view |
ROLE_DEPT_ADMIN |
部门管理员 | asset:view/approve/checkout/return, audit:view |
ROLE_ASSET_ADMIN |
资产管理员 | asset:view/stockin/checkout/return/purchase/apply/approve, asset:admin |
ROLE_AUDITOR |
审计员 | audit:view, audit:export |
ROLE_VENDOR_MANAGER |
供应商管理员 | vendor:manage, asset:view |
ROLE_USER |
普通员工 | asset:view, asset:apply |
- JJWT + Spring Security 实现 access/refresh token,支持刷新、权限点注解(
@PreAuthorize) - RBAC 权限模型(用户-角色-权限),前后端均支持按钮/路由级别的权限控制
- 资产生命周期 API(申请/审批/入库/领用/归还)+ 审批记录 + 审计日志
- (New) 资产归还提醒:可配置 SMTP 邮箱服务、自定义提醒频率(Cron)及提前提醒天数,自动发送邮件提醒即将到期或已逾期的资产。
- (New) 移动端适配:前端 UI 针对移动端设备进行了响应式优化,支持在手机/平板上进行资产申请、审批、查看等操作。
- 统一响应结构
{code,message,data}、全局异常处理、参数校验、分页/排序 - Flyway 数据库迁移 + 种子数据
- Swagger UI (
/swagger-ui.html) + Postman/Insomnia 示例 - 单元测试(UserService、JwtTokenProvider)+ Integration Test(完整流程)
- Vue3 + Element Plus 前端:登录、仪表盘、申请管理、库存操作、系统管理、审计日志
- Docker前后端一键部署支持
- Swagger UI:
http://localhost:8080/swagger-ui.html - OpenAPI JSON:
http://localhost:8080/v3/api-docs - Postman/Insomnia:
infra/postman/asset-management.postman_collection.json
后端:
cd backend/asset-backend
./mvnw test前端类型检查 + 构建:
cd frontend/asset-frontend
npm run build后端(application.yml 支持读取):
| 变量 | 默认值 | 说明 |
|---|---|---|
DB_URL |
jdbc:mysql://localhost:3306/asset?... |
|
DB_USERNAME |
root |
|
DB_PASSWORD |
123456 |
|
JWT_SECRET |
popcap |
|
JWT_ACCESS_EXPIRATION |
3600(秒) |
|
JWT_REFRESH_EXPIRATION |
604800(秒) |
|
ASSET_LOAN_REMINDER_ENABLED |
true |
是否开启归还提醒任务 |
ASSET_LOAN_REMINDER_CRON |
0 0 9 ? * MON |
默认提醒任务 Cron 表达式 |
前端(env.example):
VITE_API_BASE_URL=http://localhost:8080/api
VITE_DEV_SERVER_PORT=5173
cd backend/asset-backend
docker build -t asset-backend .docker compose up -ddocker-compose.yml 会启动:
mysql:初始化数据库asset,默认账号/密码root/123456asset-backend:等待 mysql 就绪后启动,暴露 8080 端口(JWT 默认为popcap)asset-frontend:构建并启动前端(Nginx),暴露 80 端口,反向代理 API 请求到后端
.github/workflows/ci.yml 包含:
- Checkout + JDK 17
- 后端
mvnw -B test - 前端
npm ci && npm run build
可根据实际仓库改造后直接启用。
POST /api/auth/login # 登录
POST /api/asset-requests # 创建资产申请
POST /api/asset-requests/{id}/approve
POST /api/inventory/stock-in
POST /api/inventory/{id}/checkout
POST /api/inventory/{id}/return
GET /api/audit-logs
GET /api/system/reminder-settings # 获取提醒配置
PUT /api/system/reminder-settings # 更新提醒配置更多请参阅 Swagger UI。
./mvnw spring-boot:run启动后端,留意控制台输出的 Flyway 日志。- 前端
.env设置VITE_API_BASE_URL指向真实后端。 - 若需要进一步扩展,可增加采购模块、报废流程、Redis 刷新 token 黑名单等。
欢迎根据业务需求继续完善。Enjoy! 🎉