技术栈与组合
四种组合共享同一套功能、接口约定与响应格式,因此可以按团队熟悉的技术栈自由选择。
| Python (FastAPI) | Java (Spring Boot) | |
|---|---|---|
| React | React 19 + Vite + shadcn/ui · FastAPI async | React 19 + Vite + shadcn/ui · Spring Boot 3.2 |
| Vue | Vue 3 + Vite + DaisyUI · FastAPI async | Vue 3 + Vite + DaisyUI · Spring Boot 3.2 |
| 组件 | React 模板 | Vue 模板 |
|---|---|---|
| 框架 | React 19 | Vue 3.5+(Composition API) |
| 构建 | Vite | Vite |
| 语言 | TypeScript | TypeScript |
| 样式 | Tailwind CSS v4 + shadcn/ui(含 PWA) | Tailwind CSS v4 + DaisyUI |
| HTTP | 原生 fetch 封装(401 自动登出) | 原生 fetch 封装(401 自动登出) |
| 路由 | react-router v7 | vue-router v4 |
| 状态 | React Context(lib/) |
Pinia(stores/) |
| 图标 | lucide-react | lucide-vue-next |
| 组件 | Python 模板 | Java 模板 |
|---|---|---|
| 框架 | FastAPI | Spring Boot 3.2 |
| ORM | SQLAlchemy 2.0(async) | Spring Data JPA |
| 数据库 | SQLite(aiosqlite) | SQLite 文件(./data/app.db,Flyway 迁移) |
| 认证 | PyJWT + bcrypt | Sa-Token(uuid 风格令牌)+ BCrypt |
| 密钥 | 环境变量 JWT_SECRET_KEY(弱密钥拒绝启动) |
无需密钥(服务端会话令牌) |
| 接口文档 | 内置 Swagger /docs |
无内置 Swagger,接口以控制器为准 |
两套后端的功能与权限模型一致,只有少数细节不同:
logout:Python 要求已登录;Java 兼容未登录调用并同样返回成功。- 权限拦截返回:两栈在无权限时都返回 403,并记录一条审计日志。
- 启动初始化:Python 在启动时执行
create_all+ 种子数据 + 权限/菜单同步;Java 由 Flyway 迁移并依次执行权限和菜单同步任务。
除数据导出文件外,所有接口统一返回:
{ "code": 0, "message": "success", "data": {} }出错时 code 为 -1,message 为中文提示。分页数据统一为 { list, total, page, pageSize }。详见 API 接口。
POST /api/data/export 成功时返回 ZIP 文件;一次性密码在 X-Export-Password 响应头中返回。