import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.BbmSSMjL.js";const y=JSON.parse('{"title":"1.2 为什么选择我们","description":"","frontmatter":{},"headers":[],"relativePath":"zh/why.md","filePath":"zh/why.md"}'),l={name:"zh/why.md"};function h(k,s,p,e,r,d){return a(),n("div",null,[...s[0]||(s[0]=[t(`

1.2 为什么选择我们 ​

声明式 CRUD,开发效率倍增 ​

项目最大的特点是声明式 CRUD 架构。只需在数据库中建好表,通过代码生成器即可一键生成完整的前后端 CRUD 模块:

bash
# 通过 Web 界面操作:开发工具 → 代码生成,选择表 → 配置 → 生成
# 或通过命令行
php artisan generate:code {表名}

生成器会自动完成:

一个标准 CRUD 模块从手写到调试通常需要 1-2 天,使用生成器只需几分钟。

完整的 RBAC 权限体系 ​

系统内置了企业级的基于角色的访问控制:

后端通过 #[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 章 业务模块)。

Vue3 + NaiveUI 前端 ​

前端采用主流技术栈,开发体验优秀:

开箱即用的开发体验 ​

从获取源码到运行项目,只需几步:

bash
# 1. 从官方网站 https://www.rxthink.cn 下载源码包并解压
cd RXThinkCMF_Laravel13_NaiveVue

# 2. 一键初始化(依赖 + .env + APP_KEY + 迁移 + 前端构建)
composer setup

# 3. 导入数据库(本项目 migrations 为空,以 SQL 脚本为准)
mysql -uroot -proot -e "CREATE DATABASE \\\`rxthinkcmf.laravel13.naivevue\\\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -uroot -proot rxthinkcmf.laravel13.naivevue < document/mysql/rxthinkcmf.laravel13.naivevue.sql

# 4. 修改 .env 数据库配置后,启动后端(含队列 / 日志 / Vite)
composer dev

# 5. 启动前端
cd ui && npm install && npm run dev

访问前端地址即可使用。默认超级管理员账号 admin / 123456 可直接登录。

TIP

完整步骤请参考 1.4 新手入门指南;Windows + Laragon 环境请参考 2.2 Laragon 环境搭建;想跳过手动环境安装可直接用 2.8 Docker 快速体验。

多数据库支持 ​

通过环境变量一键切换数据库:

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 数据库迁移工具)同步适配多种驱动。

多租户与数据权限 ​

内置企业级多租户隔离体系:

详见 5.8 多租户隔离 与 5.9 数据权限。

持续更新 ​

项目持续迭代,紧跟技术发展:

适用场景 ​

项目适合以下场景:

`,43)])])}const F=i(l,[["render",h]]);export{y as __pageData,F as default};