Files
2026-10-11 19:06:33 +08:00

5.8 KiB
Raw Permalink Blame History

1.5 技术栈说明

后端技术栈

类别 技术选型 版本 说明
语言 PHP >= 8.3 强类型严格模式(composer.json ^8.3)
框架 Laravel 13.x 核心 Web 框架(laravel/framework ^13.0)
ORM Eloquent 随框架 数据库操作,模型薄封装 + Trait 复用
认证 firebase/php-jwt 7.1+ JWT 双令牌签发与解析(Redis 有状态)
Excel phpoffice/phpspreadsheet 5.10+ Excel 导入导出
IP 归属地 zoujingli/ip2region 3.0+ 登录日志 IP 归属地解析(IPv4/IPv6)
数据库 MySQL 8.0+ 主数据库(另支持 PostgreSQL / SQL Server / Oracle / SQLite,五套初始化脚本齐备)
缓存 Redis 6.0+ 必需:JWT 会话、权限缓存、验证码、字典缓存(phpredis 扩展)
Web 服务器 Nginx 1.18+ 推荐(Docker 方案内置)
Web 服务器 Apache 2.4+ 兼容(Laragon mod_php 方式,见 2.2 Laragon 环境搭建)
包管理 Composer 2.x 依赖管理(composer setup 一键初始化)
代码格式化 laravel/pint 1.27+(dev) 提交前格式化(Pint 风格)
日志查看 laravel/pail 1.2+(dev) 实时日志流(composer dev 内置)
测试 phpunit/phpunit 12.5+(dev) Feature / Unit 测试

前端技术栈

前端为本仓库 ui/ 目录内的 NaiveVue 管理后台(Vue3 + NaiveUI),与本后端通过 API 对接:

类别 技术选型 版本 说明
框架 Vue 3.5+(实际 ^3.5.1) 核心 UI 框架(Composition API)
语言 TypeScript 4.9+(实际 ^4.9.5) 类型安全
UI 库 NaiveUI 2.40+(实际 ^2.40.0) 组件库
构建工具 Vite 5.4+(实际 ^5.4.3) 开发服务器与构建
状态管理 Pinia 2.2+(实际 ^2.2.2) 全局状态管理
路由 Vue Router 4.4+(实际 ^4.4.3) 路由管理
HTTP Axios 1.7+(实际 ^1.7.7) HTTP 请求
富文本 TinyMce / Quill 5.10+ 富文本编辑器
图表 ECharts 5.5+ 数据可视化
CSS TailwindCSS + Less 3.4+ 原子化 CSS 与预处理
权限 v-perm 指令 - 按钮级权限指令,与后端 #[Permission] 对应
包管理 pnpm - 高效包管理器

:::tip 前端工程结构、开发实践详见 第 9 章 前端开发;后端代码生成器会把前端页面模板输出到 ui/ 目录(见 10.6 自定义模板开发)。 :::

架构特点

一次 API 请求的完整链路(与 4.2 请求处理链路 一致):

┌─────────────────────────────────────────────────────────┐
│                  前端(Vue3 + NaiveUI)                     │
│            通过 API 调用后端服务,纯 JSON 交互              │
└──────────────────────────┬──────────────────────────────┘
                           │ HTTP (JSON)
                           ▼
┌─────────────────────────────────────────────────────────┐
│                     后端(Laravel 13)                    │
│                                                          │
│  路由(routes/api.php) → 中间件栈 → 控制器 → 服务 → 模型    │
│                                                          │
│  中间件栈(7 个):                                        │
│  Proxy(真实IP) → Cors(跨域) → ForceJsonResponse(强制JSON) │
│    → auth.jwt(JWT认证+#[Permission]鉴权)                   │
│    → tenant(租户上下文) → log.operation(操作日志)            │
│    → Demo(演示模式防护)                                    │
│                                                          │
│  Service 层:BaseService 属性声明 + 6 个 Trait 组合          │
│  (CRUD / 查询 / 文件 / 数据权限 / 字典翻译 / 唯一校验)      │
└──────────────────────────┬──────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────┐
│                   数据层(MySQL + Redis)                  │
│   MySQL 主存储(Eloquent + 软删除 + 审计字段)               │
│   Redis 会话 / 缓存 / 队列(JWT 双令牌、字典、权限缓存)      │
└─────────────────────────────────────────────────────────┘

核心设计决策:

决策 说明
声明式配置 + 基类钩子 Service 子类只声明属性(查询字段、唯一规则、字典映射…),通用逻辑由 BaseService + 6 个 Trait 完成
菜单即权限 menu.permission 字段即权限编码,#[Permission] 注解 + 中间件反射鉴权
统一响应 HTTP 200 + body {code, ok, msg, data},camelCase/snake_case 自动转换
fail-close 安全 JWT_SECRET 为空或不足 32 字符时拒绝启动(AppServiceProvider 启动校验)
验证职责分层 FormRequest 只做格式验证,Service 只做业务规则