签入版本

This commit is contained in:
2026-10-08 17:50:29 +08:00
parent 809750b47e
commit e213a9b31d
444 changed files with 39366 additions and 37533 deletions
+111 -84
View File
@@ -5,18 +5,18 @@
项目最大的特点是声明式 CRUD 架构。只需在数据库中建好表,通过代码生成器即可一键生成完整的前后端 CRUD 模块:
```bash
# 通过 Web 界面操作,选择表 → 配置 → 生成
# 通过 Web 界面操作:开发工具 → 代码生成,选择表 → 配置 → 生成
# 或通过命令行
php think generate:code think_example
php artisan generate:code {表名}
```
生成器会自动完成:
- **后端代码**:Model、Validate、Logic、Controller 全套文件
- **后端代码**:Model、FormRequest、Service、Controller 全套文件
- **前端页面**:列表页、编辑弹窗、详情弹窗
- **API 接口**:前端 TypeScript API 模块
- **菜单权限**:自动插入菜单记录和权限节点
- **路由注册**:自动将新模块接入主路由
- **路由注册**:自动将新模块接入 `routes/api.php`
一个标准 CRUD 模块从手写到调试通常需要 1-2 天,使用生成器只需几分钟。
@@ -31,93 +31,125 @@ php think generate:code think_example
- **权限粒度**:精确到每个操作(`sys:user:add`、`sys:user:delete` 等)
- **超级管理员**:用户 ID=1 自动拥有所有权限,无需额外配置
前端通过 `v-perm` 指令自动控制按钮的显示和隐藏,与后端权限保持一致。
后端通过 `#[Permission('sys:user:add')]` 注解声明,中间件反射统一鉴权;前端通过 `v-perm` 指令自动控制按钮的显示和隐藏,与后端权限保持一致。
## 声明式 ThinkPHP 架构
## 声明式 Laravel 架构
项目遵循 ThinkPHP 最佳实践,代码结构清晰。以 `app/logic/ExampleLogic.php` 为例:
项目采用"声明式配置 + 基类钩子"模式,代码结构清晰。以本项目内置的示例服务 `app/Services/ExampleService.php` 为例:
```php
// 逻辑层只需声明属性配置,无需编写 CRUD 代码
class ExampleLogic extends BaseLogic
<?php
namespace App\Services;
use App\Models\Example;
use App\Services\Concerns\HasCrudOperations;
use App\Services\Concerns\HasQueryScopes;
use App\Services\Concerns\HasSerializeMaps;
use App\Services\Concerns\HasUniqueCheck;
/**
* 案例演示业务逻辑服务
*
* 继承 BaseService,案例作为示例数据,不参与多租户隔离。
*
* 说明:
* - 组合的 Trait 职责:
* - HasCrudOperations:add/update/delete/batchDelete 主流程;
* - HasQueryScopes:列表查询条件、排序白名单;
* - HasSerializeMaps:为 status 补 statusText(字典编码为 status);
* - HasUniqueCheck:新增/修改时校验 name 唯一;
* - 未 use HasDataScope,因此不做数据权限与租户隔离;
*/
class ExampleService extends BaseService
{
use HasCrudOperations, HasQueryScopes, HasSerializeMaps, HasUniqueCheck;
/**
* 关联的模型类
*
* @var string
* 绑定的模型类
*/
protected string $modelClass = Example::class;
/**
* LIKE 模糊匹配字段
*
* @var array
* @var array<int, string>
*/
protected array $pageLikeFields = ['name'];
/**
* 精确匹配字段
*
* @var array
* status 用于按状态筛选。
*
* @var array<int, string>
*/
protected array $pageEqFields = ['status'];
/**
* 默认排序规则
*
* @var array
*/
protected array $pageOrderBy = ['field' => 'sort', 'type' => 'asc'];
/**
* 唯一性校验字段
*
* @var array
* @var array<int, string>
*/
protected array $uniqueFields = ['name'];
/**
* 枚举显示名映射
* 字典翻译配置:[字段 => 字典编码]
*
* @var array
*/
protected array $serializeMaps = ['status' => 'example_status'];
/**
* 删除前处理:业务约束校验
* 读取时为 status 补 statusText。
*
* @param int $id 记录 ID
* @return void
* @var array<string, string>
*/
protected function beforeDelete(int $id): void
{
// 删除前校验
}
protected array $serializeMaps = [
'status' => 'example_status',
];
}
```
控制器只需调用通用方法:
控制器只需声明注解并调用通用方法(`app/Http/Controllers/Api/ExampleController.php`):
```php
class ExampleController extends BaseController
class ExampleController extends Controller
{
protected ExampleLogic $logic;
/**
* 构造函数
*
* 注入示例业务服务,供各接口方法复用。
*
* @param ExampleService $exampleService 示例业务服务
*/
public function __construct(protected ExampleService $exampleService) {}
protected function initialize(): void
/**
* 查询分页
*
* 对应权限:sys:example:page,操作日志类型:查询。
*
* @return JsonResponse 分页数据
*/
#[OperationLog('示例管理-查询分页', OperationLog::TYPE_QUERY)]
#[Permission('sys:example:page', '示例分页')]
public function page(): JsonResponse
{
$this->logic = new ExampleLogic();
return $this->_page($this->exampleService); // 一行搞定分页查询
}
#[Log('案例演示-查询分页', Log::TYPE_QUERY)]
#[Permission('sys:example:page', '案例分页')]
public function page(): Json
/**
* 新增
*
* @param ExampleRequest $request 已通过校验的示例请求
* @return JsonResponse 新增结果
*/
#[OperationLog('示例管理-新增', OperationLog::TYPE_ADD, '新增示例:{name}')]
#[Permission('sys:example:add', '添加示例')]
public function add(ExampleRequest $request): JsonResponse
{
return parent::_index($this->logic); // 一行搞定分页查询
return $this->_add($this->exampleService, $request->validated());
}
}
```
所有模块遵循相同的分层模式,新成员上手快,代码可维护性强。
所有模块遵循相同的分层模式(Controller → Service → Model,FormRequest 做格式验证),新成员上手快,代码可维护性强。
## 丰富的内置模块
@@ -129,7 +161,7 @@ class ExampleController extends BaseController
- **系统监控**:登录日志、操作日志、定时任务
- **开发工具**:代码生成器、文件上传、示例模块
这些模块不仅可以直接使用,也是学习本框架开发模式的最佳参考。
这些模块不仅可以直接使用,也是学习本框架开发模式的最佳参考(详见 [第 6 章 业务模块](/zh/modules/user.html))。
## Vue3 + ElementPlus 前端
@@ -142,73 +174,68 @@ class ExampleController extends BaseController
- **Vite**:极速的开发服务器和构建工具
- **动态路由**:菜单和路由由后端驱动,前端无需硬编码
前端开发常用命令:
```bash
cd ui
pnpm install # 安装依赖
pnpm dev # 启动开发服务器 (http://localhost:8001)
pnpm build # 生产环境构建
```
## 开箱即用的开发体验
从获取源码到运行项目,只需几步:
```bash
# 1. 从官方网站下载源码包并解压
cd thinkphp6
# 1. 从官方网站 https://www.rxthink.cn 下载源码包并解压
cd RXThinkCMF_Laravel13_EleVue
# 2. 安装依赖
composer install
# 2. 一键初始化(依赖 + .env + APP_KEY + 迁移 + 前端构建)
composer setup
# 3. 配置 .env(数据库、JWT 密钥)
# 3. 导入数据库(本项目 migrations 为空,以 SQL 脚本为准)
mysql -uroot -proot -e "CREATE DATABASE \`rxthinkcmf.laravel13.elevue\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -uroot -proot rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql
# 4. 导入数据库
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
# 4. 修改 .env 数据库配置后,启动后端(含队列 / 日志 / Vite)
composer dev
# 5. 启动后端
php think run
# 6. 启动前端
cd ui && pnpm install && pnpm dev
# 5. 启动前端(独立 EleVue 仓库)
cd ui && npm install && npm run dev
```
访问 `http://localhost:8001` 即可使用。默认超级管理员账号 `admin / 123456` 可直接登录。
访问前端地址即可使用。默认超级管理员账号 `admin / 123456` 可直接登录。
:::tip
完整步骤请参考 [1.4 新手入门指南](/zh/course.html);Windows + Laragon 环境请参考 [2.2 Laragon 环境搭建](/zh/quickstart/laragon.html);想跳过手动环境安装可直接用 [2.8 Docker 快速体验](/zh/quickstart/docker.html)。
:::
## 多数据库支持
通过环境变量一键切换五种数据库:
通过环境变量一键切换数据库:
```ini
; .env
[DATABASE]
TYPE = mysql ; MySQL(默认)
TYPE = pgsql ; PostgreSQL
TYPE = sqlsrv ; SQL Server
TYPE = oracle ; Oracle
TYPE = sqlite ; SQLite
# .env
DB_CONNECTION=mysql # MySQL(默认推荐)
# DB_CONNECTION=pgsql # PostgreSQL
# DB_CONNECTION=sqlsrv # SQL Server
# DB_CONNECTION=oracle # Oracle(需 pdo_oci 扩展)
# DB_CONNECTION=sqlite # SQLite
```
业务代码零修改,ORM 自动处理 SQL 差异。
业务代码零修改,Eloquent 自动处理 SQL 差异;代码生成器与跨库迁移工具([7.6 数据库迁移工具](/zh/tools/db-migrate.html))同步适配多种驱动。
## 多租户与数据权限
内置企业级多租户隔离体系:
- **租户隔离**:通过 `BaseTenantLogic` 基类自动处理 `tenant_id` 过滤与填充
- **数据权限**:支持全部数据 / 本部门数据 / 仅本人数据三种范围
- **租户隔离**:通过 `BaseTenantService` 基类自动处理 `tenant_id` 过滤与填充
- **数据权限**:支持全部数据 / 本部门数据 / 仅本人数据三种范围(`HasDataScope` 按角色解析,当前默认全部数据)
- **超级管理员**:`tenant_id=0` 的用户不受租户隔离限制,创建数据时自动代入默认租户
详见 [5.8 多租户隔离](/zh/core/tenant.html) 与 [5.9 数据权限](/zh/core/data-scope.html)。
## 持续更新
项目持续迭代,紧跟技术发展:
- ThinkPHP 版本持续升级至 6.1.x
- PHP 版本要求 8.2+
- 前端从 Vue 2 升级到 Vue3 + ElementPlus
- 后端升级至 Laravel 13 + PHP 8.3(本版本)
- 声明式 CRUD 体系持续增强,覆盖导入导出、定时任务、代码生成等场景
- 前端持续升级 Vue3 + ElementPlus 主流栈
- 代码生成器功能不断增强
- 安全机制持续完善
- 安全机制持续完善(JWT fail-close 校验、演示模式、受信代理等)
## 适用场景
@@ -219,4 +246,4 @@ TYPE = sqlite ; SQLite
- 数据管理后台
- SaaS 多租户平台
- 快速原型开发
- 学习 ThinkPHP + Vue 全栈开发
- 学习 Laravel + Vue 全栈开发