🎈 OwlAdmin : 看看在后端构建页面有多简单~

先看一段代码, 对 OwlAdmin 有一点点印象

以下这段代码就构建了一个完整的 crud 列表:

public function list()
{
    $crud = $this->baseCRUD()
        // 头部工具栏
        ->headerToolbar([
            // 添加按钮, 传入 true 则为弹窗模式表单
            $this->createButton(true),
            // 其余的操作, 包含批量操作/刷新/筛选按钮
            ...$this->baseHeaderToolBar(),
        ])
        ->filter(
            // 此处为筛选的表单
            $this->baseFilter()->body([
                // 一个基础的 input 用来搜索名称
                TextControl::make()->name('title')->label('名称')->size('md'),
                // 封装的组件, 一个包含 启用/禁用 的下拉列表
                Components::make()->enabledFilter(),
            ])
        )
        ->columns([
            // 这里设置了表格的列信息
            TableColumn::make()->name('id')->label('ID'),
            TableColumn::make()->name('title')->label('名称'),
            TableColumn::make()->name('image')->label('图片')->type('image')->enlargeAble(true),
            TableColumn::make()->name('sort')->label('排序')->sortable(true),
            // 同理, 封装用于将 1/0 回显为文字
            Components::make()->enabledTableColumn(),
            TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true),
            // 行操作, 包含 详情/编辑/删除
            $this->rowActions(true),
        ]);

    return $this->baseList($crud);
}



示例一 : 对 enabled 字段的封装

对于常用的页面元素, 可以提取为 function 在需要的地方粘粘粘就完了~

// 在表单中使用
public function enabledForm()
{
    return SwitchControl::make()->name('enabled')->label('是否启用')->value(EnabledDefine::STATUS_ENABLED);
}

// 在筛选表单中使用
public function enabledFilter()
{
    return SelectControl::make()
        ->name('enabled')
        ->label('是否启用')
        ->size('md')
        ->clearable(true)
        ->options(EnabledDefine::STATUS);
}

// 在列表/详情中皆可按以上形式封装
// 我将这些方法封装在了 Components 中, 使用方式如下:
Components::make()->enabledForm();
Components::make()->enabledFilter();



示例二 : 在列表工具栏中添加一个弹窗表单, 保存设置项

第一步: 创建一个弹窗表单
public function setting()
{
    // 最外层为按钮的结构, 按钮的文字, 样式
    return amisMake()->DialogAction()->label('额度设置')->level('success')->dialog(
        // 弹窗的结构
        amisMake()->Dialog()->title('额度设置')->body(
            // Form 结构
            amisMake()->Form()->mode('horizontal')
                ->initApi(admin_url('xxx/get_setting')) // 初始化数据
                ->api(admin_url('xxx/save_setting'))    // 提交数据
                ->body([
                    $this->limitNumberControl('am_limit', '上午限额'),
                    $this->limitNumberControl('pm_limit', '下午限额'),
                ])
        )
    );
}

// 两个相同的组件提取为方法
private function limitNumberControl($name, $label)
{
    return NumberControl::make()
        ->name($name)                  // 字段名
        ->label($label)                // 标签名
        ->displayMode('enhance')       // 设置为增强模式(左右有 +/- 按钮)
        ->min(0)                       // 最小值
        ->max(999999)                  // 最大值
        ->value(0)                     // 默认值
        ->required(true);              // 必填
}
第二步: 添加到列表的工具栏中
// 将 setting() 添加到 crud 的 headerToolbar 方法中即可
// ...
->headerToolbar([
    $this->setting(),
    // ...
])



其他示例 : 框架内置的导出按钮的封装

与示例二中的添加弹窗表单类似, 可以在 headerToolbar 中添加 exportAction() , 来为列表增加导出按钮
里面封装了一个下拉按钮, 包含三种导出类型 全部/本页/选中项
逻辑与 示例二 一致, 只是封装上复杂了亿点点, 多了一点 js 的操作

有兴趣的同学可自行参阅 -> 源码


包括框架内的 rowAction() baseCRUD() baseFilter() baseForm() 等一系列的方法, 都是封装组件的一种体现
  • 对于组件 : 你想咋封装就咋封装, 内置 198class , 给你良好的编辑体验

  • 对于框架 : 几乎所有的方法你都可以重写来更改逻辑~

doge   “因为我们生来就是自由的~ 塔塔开~”

本作品采用《CC 协议》,转载必须注明作者和本文链接
海到无涯天作案,山登绝顶我为峰
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

比如你列表的table 中的columns 最好简化一下
columns([
[“label”=>”标题”,”dataIndex”=>”title”,”valueType”=>”text”],

])
我的做法是生成json的配置,保存在菜单中,前台页面直接读取当前菜单的list 或者 form的 json配置直接生成页面。
我用的是antdesign pro

2周前 评论
Slowlyo (楼主) 2周前

有没有表格excel导出的方法

2周前 评论
Slowlyo (楼主) 2周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!