Files
rxthinkcmf-wiki/RXThinkCMF_Laravel13_NaiveVue/zh/why.md
T
2026-10-08 17:50:29 +08:00

250 lines
8.4 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.
# 1.2 为什么选择我们
## 声明式 CRUD,开发效率倍增
项目最大的特点是声明式 CRUD 架构。只需在数据库中建好表,通过代码生成器即可一键生成完整的前后端 CRUD 模块:
```bash
# 通过 Web 界面操作:开发工具 → 代码生成,选择表 → 配置 → 生成
# 或通过命令行
php artisan generate:code {表名}
```
生成器会自动完成:
- **后端代码**:Model、FormRequest、Service、Controller 全套文件
- **前端页面**:列表页、编辑弹窗、详情弹窗
- **API 接口**:前端 TypeScript API 模块
- **菜单权限**:自动插入菜单记录和权限节点
- **路由注册**:自动将新模块接入 `routes/api.php`
一个标准 CRUD 模块从手写到调试通常需要 1-2 天,使用生成器只需几分钟。
## 完整的 RBAC 权限体系
系统内置了企业级的基于角色的访问控制:
- **用户管理**:用户增删改查、重置密码、角色分配
- **角色管理**:角色增删改查、菜单权限分配
- **菜单管理**:菜单树形结构、权限节点定义
- **部门管理**:组织架构树形管理
- **权限粒度**:精确到每个操作(`sys:user:add`、`sys:user:delete` 等)
- **超级管理员**:用户 ID=1 自动拥有所有权限,无需额外配置
后端通过 `#[Permission('sys:user:add')]` 注解声明,中间件反射统一鉴权;前端通过 `v-perm` 指令自动控制按钮的显示和隐藏,与后端权限保持一致。
## 声明式 Laravel 架构
项目采用"声明式配置 + 基类钩子"模式,代码结构清晰。以本项目内置的示例服务 `app/Services/ExampleService.php` 为例:
```php
<?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;
/**
* 绑定的模型类
*/
protected string $modelClass = Example::class;
/**
* LIKE 模糊匹配字段
*
* @var array<int, string>
*/
protected array $pageLikeFields = ['name'];
/**
* 精确匹配字段
*
* status 用于按状态筛选。
*
* @var array<int, string>
*/
protected array $pageEqFields = ['status'];
/**
* 唯一性校验字段
*
* @var array<int, string>
*/
protected array $uniqueFields = ['name'];
/**
* 字典翻译配置:[字段 => 字典编码]
*
* 读取时为 status 补 statusText。
*
* @var array<string, string>
*/
protected array $serializeMaps = [
'status' => 'example_status',
];
}
```
控制器只需声明注解并调用通用方法(`app/Http/Controllers/Api/ExampleController.php`):
```php
class ExampleController extends Controller
{
/**
* 构造函数
*
* 注入示例业务服务,供各接口方法复用。
*
* @param ExampleService $exampleService 示例业务服务
*/
public function __construct(protected ExampleService $exampleService) {}
/**
* 查询分页
*
* 对应权限:sys:example:page,操作日志类型:查询。
*
* @return JsonResponse 分页数据
*/
#[OperationLog('示例管理-查询分页', OperationLog::TYPE_QUERY)]
#[Permission('sys:example:page', '示例分页')]
public function page(): JsonResponse
{
return $this->_page($this->exampleService); // 一行搞定分页查询
}
/**
* 新增
*
* @param ExampleRequest $request 已通过校验的示例请求
* @return JsonResponse 新增结果
*/
#[OperationLog('示例管理-新增', OperationLog::TYPE_ADD, '新增示例:{name}')]
#[Permission('sys:example:add', '添加示例')]
public function add(ExampleRequest $request): JsonResponse
{
return $this->_add($this->exampleService, $request->validated());
}
}
```
所有模块遵循相同的分层模式(Controller → Service → Model,FormRequest 做格式验证),新成员上手快,代码可维护性强。
## 丰富的内置模块
系统预置了 20+ 个常用业务模块,开箱即用:
- **系统管理**:用户、角色、菜单、部门、职级、岗位、租户
- **系统配置**:字典管理、系统配置、参数管理
- **内容管理**:文章管理、分类管理、公告管理、友情链接
- **系统监控**:登录日志、操作日志、定时任务
- **开发工具**:代码生成器、文件上传、示例模块
这些模块不仅可以直接使用,也是学习本框架开发模式的最佳参考(详见 [第 6 章 业务模块](/zh/modules/user.html))。
## Vue3 + ElementPlus 前端
前端采用主流技术栈,开发体验优秀:
- **Vue3 Composition API**:更灵活的组件逻辑组织
- **TypeScript**:类型安全,减少运行时错误
- **ElementPlus**:成熟的企业级 UI 组件库
- **Pinia**:轻量级状态管理
- **Vite**:极速的开发服务器和构建工具
- **动态路由**:菜单和路由由后端驱动,前端无需硬编码
## 开箱即用的开发体验
从获取源码到运行项目,只需几步:
```bash
# 1. 从官方网站 https://www.rxthink.cn 下载源码包并解压
cd RXThinkCMF_Laravel13_EleVue
# 2. 一键初始化(依赖 + .env + APP_KEY + 迁移 + 前端构建)
composer setup
# 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. 修改 .env 数据库配置后,启动后端(含队列 / 日志 / Vite)
composer dev
# 5. 启动前端(独立 EleVue 仓库)
cd ui && npm install && npm run dev
```
访问前端地址即可使用。默认超级管理员账号 `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
DB_CONNECTION=mysql # MySQL(默认推荐)
# DB_CONNECTION=pgsql # PostgreSQL
# DB_CONNECTION=sqlsrv # SQL Server
# DB_CONNECTION=oracle # Oracle(需 pdo_oci 扩展)
# DB_CONNECTION=sqlite # SQLite
```
业务代码零修改,Eloquent 自动处理 SQL 差异;代码生成器与跨库迁移工具([7.6 数据库迁移工具](/zh/tools/db-migrate.html))同步适配多种驱动。
## 多租户与数据权限
内置企业级多租户隔离体系:
- **租户隔离**:通过 `BaseTenantService` 基类自动处理 `tenant_id` 过滤与填充
- **数据权限**:支持全部数据 / 本部门数据 / 仅本人数据三种范围(`HasDataScope` 按角色解析,当前默认全部数据)
- **超级管理员**:`tenant_id=0` 的用户不受租户隔离限制,创建数据时自动代入默认租户
详见 [5.8 多租户隔离](/zh/core/tenant.html) 与 [5.9 数据权限](/zh/core/data-scope.html)。
## 持续更新
项目持续迭代,紧跟技术发展:
- 后端升级至 Laravel 13 + PHP 8.3(本版本)
- 声明式 CRUD 体系持续增强,覆盖导入导出、定时任务、代码生成等场景
- 前端持续升级 Vue3 + ElementPlus 主流栈
- 代码生成器功能不断增强
- 安全机制持续完善(JWT fail-close 校验、演示模式、受信代理等)
## 适用场景
项目适合以下场景:
- 企业内部管理系统(ERP、CRM、OA 等)
- 内容管理系统(CMS)
- 数据管理后台
- SaaS 多租户平台
- 快速原型开发
- 学习 Laravel + Vue 全栈开发