模型树实操

很多时候,数据都是有层级和分类的,使用laravel的Dcat框架,可以快速搭建一个结构清晰、且可以鼠标拖拽排序的后台;先上例子更直观:
在这里插入图片描述
这里是Dcat的模型树使用文档,戳一下

重点注意事项有:

  • 1、数据库表的parent_id字段一定要默认为0,
  • 2、数据库表parent_id、order、title一定要有,不过这三个字段支持修改,可在Model中进行修改;其它字段没有要求
<?php

namespace App\Models\Demo;

use Dcat\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use ModelTree;

    protected $table = 'demo_categories';

    // 父级ID字段名称,默认值为 parent_id
    protected $parentColumn = 'pid';

    // 排序字段名称,默认值为 order
    protected $orderColumn = 'sort';

    // 标题字段名称,默认值为 title
    protected $titleColumn = 'name';

    // Since v2.1.6-beta,定义depthColumn属性后,将会在数据表保存当前行的层级
    protected $depthColumn = 'depth';
}
tree的使用

去 Dcat 后台用代码生成工具生成 Controller 文件,生成以后直接用我下面的代码覆盖:

<?php

namespace App\Admin\Controllers\SecondPhase;

use App\Models\CancerDetectionMethods;
use App\Models\CancerDetectionSamples;
use App\Models\CancerRecommendSearch;
use App\Models\CancerSiteInfo;
use App\Models\CancerSiteMethods;
use App\Models\CancerTargets;
use App\Models\LsDicLabel;
use App\Services\CancerTargetTreesService;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Column;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Tree;
use Dcat\Admin\Widgets\Box;
use Dcat\Admin\Widgets\Form as WidgetForm;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class CancerTargetsController extends AdminController
{
    public function index(Content $content)
    {
        return $content
            ->title('模型树')
            ->body(function (Row $row) {
                $row->column(6, $this->treeView()->render());

                $row->column(6, function (Column $column) {
                    $form = new WidgetForm();
                    $form->action(admin_url('cancer-target-tree'));

                    $form->select('parent_id', '父级')->options(CancerTargets::selectOptions());
                    $form->text('title', '名称')->required();

                    $column->append(Box::make('新增', $form));
                });
            });
    }

    protected function treeView()
    {
        return new Tree(new CancerTargets(), function (Tree $tree) {
            $tree->disableCreateButton();
            $tree->disableQuickCreateButton();
            $tree->disableEditButton();
            $tree->maxDepth(4);

            $tree->branch(function ($branch) {
                $payload = $branch['id'].' - '.$branch['title'];

                if ($branch['level'] === 4) {
                    $url     = admin_url('/cancer-site/'.$branch['id'].'/edit');
                    $payload .= <<<HTML
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="$url" class="dd-nodrag">位点管理</a>
HTML;
                }

                return $payload;
            });
        });
    }

    protected function form()
    {
        return Form::make(new CancerTargets(), function (Form $form) {

            $form->model()->with([
                'methods:id, name',
            ]);

            $form->display('id');
            $form->select('parent_id', '父级')
                ->options(CancerTargets::selectOptions())
                ->saving(function ($v) {
                    return (int)$v;
                });
            $form->text('title', '名称')->required();
            $form->hidden('level', '等级');

            $form->disableViewButton();
            $form->footer(function ($footer) {

                // 去掉`重置`按钮
                $footer->disableReset();

                // 去掉`查看`checkbox
                $footer->disableViewCheck();

                // 去掉`继续编辑`checkbox
                $footer->disableEditingCheck();

                // 去掉`继续创建`checkbox
                $footer->disableCreatingCheck();

                // 设置`查看`默认选中
                $footer->defaultViewChecked();

                // 设置`继续编辑`默认选中
                $footer->defaultEditingChecked();

                // 设置`继续创建`默认选中
                $footer->defaultCreatingChecked();
            });
          
        });
    }

}

大功告成

Dcat Admin是一个基于Laravel-admin二次开发而成的后台构建工具,只需很少的代码即可构建出一个功能完善的高颜值后台系统。支持页面一键生成CURD代码,内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码。 Dcat Admin后台构建工具特点: 用户管理 RBAC 权限管理,支持无限极权限节点 菜单管理 使用 pjax 构建无刷新页面,支持按需加载静态资源,可以无限扩展组件而不影响整体性能 松耦合的页面构建与数据作设计,可轻松切换数据源 多主题切换,内置多种主题色 可轻松构建无菜单栏的独立页面(如可用于构建弹窗选择器等功能) 插件功能 可视化代码生成器,可根据数据表一键生成增删改查页面 数据表格构建工具,内置丰富的表格常用功能(如组合表头、数据导出、搜索、快捷创建、批量作等) 树状表格功能构建工具,支持分页和局部加载 数据表单构建工具,内置丰富的表单类型,支持表单异步提交 分步表单构建工具 弹窗表单构建工具 数据详情页构建工具 无限层级树页面构建工具,支持用拖拽的方式实现数据的层级、排序等作 内置丰富的常用页面组件(如图表、数据统计卡片、下拉菜单、Tab 卡片、提示工具等) Section 功能(类似 Wordpress 的 Filter 和 blade 模板的 section 标签) 异步文件上传表单,支持分块多线程上传 多应用/多后台(暂未实现) 插件市场,只需在管理页面轻轻点击鼠标即可完成插件的安装、更新和卸载等作(暂未实现) Dcat Admin后台构建工具环境: PHP >= 7.1.0 Laravel 5.5.0 ~ 7.* Fileinfo PHP Extension
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值