操作按钮

列表页面,编辑/添加页面,查看详情页面;一般都有响应的操作按钮;

系统每个页面都自带一套操作按钮

可通过disabledAction属性禁用系统的操作按钮

#project\app\admin\controller\Category.php

namespace app\admin\controller;

class Category extends \easyadmin\controller\Admin
{
    //不显示 删除按钮 ;
    protected $disabledAction = ['delete'];// new edit show  delete , 默认4种按钮都显示
}
        

也可以同addAction方法自己任意添加按钮

addAction 方法 参数说明:
字段 说明 类型 必填 默认值
name 按钮显示名称 string
url 按钮的URL; 添加 options.format 后失效
javascript:: 点击按钮不做任何操作, 自己通过 class 绑定事件
完整的http地址: 例如: http://easyadmin.wansh.cc/
window.xxxxx: js的window.xxx 处理; 例如 window.history.back(); window.location.reload();
一个字符串: 会调用 thinkphp6 的 url 生成方法 url('xxxx')
string
options 按钮的选项 array
options.class options 中的 class ; 给按钮增加额外的 class 样式 string
options.icon options 中的 icon ; 设置按钮的 icon ,参考 layui 的ICON string
options.params options 中的 params ; 设置按钮的 参数 array
options.template options 中的 template ; 设置按钮的模板渲染路径, 会在project\app\admin\views\ 目录中查找 string
options.confirm options 中的 confirm ; 点击按钮的是否弹窗一个 确认询问弹窗; 如果需要,直接 填写 提示的内容文案 string
options.btn_type options 中的 btn_type ; 按钮的类型
a: a 素 a 标签
btn: layui-button a 标签 添加了 layui-button 样式
button: button-button button标签 type button
submit: button-submit button标签 type submit
string
options.referer options 中的 referer ; 用户点击执行完成以后,是否跳转回来源页面 bool false
options.condition 列表表格中的按钮可用; options 中的 condition ; 判断是否显示这个按钮, 返回真显示
$page->addAction('打款', 'ali_pay', [
    'icon' => 'layui-icon layui-icon-spread-left',
    'class' => ['layui-btn-danger', 'layui-btn-xs'],
    'confirm' => '确定要打款吗? 提交后不可撤销!',
    'condition' => function ($row) {
        if ($row['u_is_disabled']) {
            return false;
        }
        // 返回 true 页面显示这个操作按钮
        return $row['is_complete'] == 0 && $row['type'] == 1;
    }
]);
                            
函数 false
options.format 覆盖 url 参数; 如果使用 url 不能满足需求;可尝试使用 format
$page->addAction('打款', false, [
    'icon' => 'layui-icon layui-icon-release',
    'class' => ['layui-btn-primary', 'layui-btn-xs'],
    'format'=>function($row){
        // 当前行的 数据 数组
        return url('admin/app_keyword/lists',['app_id'=>$row['id']]);
    }
]);
                            
函数 false
options.url_no_id 配置 options.format 后生效; url_no_id:true, 则默认不在URL 后面追加 id 参数 bool false
添加按钮示例

(a) 列表页面添加按钮

列表页面默认会有一个添加按钮; 表格会有,查看,编辑,删除 按钮;自定义按钮就重写configList方法来实现自己的需求:

#project\app\admin\controller\Category.php

namespace app\admin\controller;

use easyadmin\app\libs\PageList;
use easyadmin\app\libs\Btn;

class Category extends \easyadmin\controller\Admin
{
    /**
     * 定义列表字段
     * @param PageList $page
     */
    protected function configList(PageList $page)
    {
        //定义表格 行的 操作按钮
        $page
            ->addAction('查看', 'show', [
                'icon' => 'layui-icon layui-icon-release',
                'class' => ['layui-btn-primary', 'layui-btn-xs'],
            ])
            ->addAction('编辑', 'edit', [
                'icon' => 'layui-icon layui-icon-edit',
                'class' => ['layui-btn-primary', 'layui-btn-xs']
            ])
            ->addAction('删除', 'delete', [
                'icon' => 'layui-icon layui-icon-delete',
                'class' => ['layui-btn-danger', 'layui-btn-xs'],
                'confirm' => '确定要删除数据吗?',

                 // 是否显示删除按钮
                'condition' => function ($row){
                    // $row  是表格中 一行的数据
                    return $row['filed']==1;
                 }
            ]);

        //定义页面的添加按钮
        $addBtn = new Btn();
        $addBtn->setLabel('添加');
        $addBtn->setUrl('add');
        $addBtn->setIcon('layui-icon layui-icon-add-1');
        $page->setActionAdd($addBtn);
    }
}

(b) 添加编辑页面按钮

添加编辑页面默认有 返回 保存 和 删除 按钮 ; 如果不能满足需求,只需要重写 configFormAction方法实现自己的业务;

#project\app\admin\controller\Category.php

namespace app\admin\controller;
use easyadmin\app\libs\Actions;


class Category extends \easyadmin\controller\Admin
{

    /**
     * 添加和更新页面的操作按钮
     * @param Actions $action
     * @throws ExceptionAlias
     */
    protected function configFormAction(Actions $action)
    {
        $id = $this->request->get($this->pk);

        $params = [];
        if ($id) {
            $params = [$this->pk => $id];
        }

        $action
            ->addAction('取消', 'window.history.back();', [
                'icon' => 'layui-icon layui-icon-return',
                'class' => ['layui-btn-primary'],
                'params' => $params
            ])
            ->addAction($id ? '更新' : '添加', 'javascript:', [
                'icon' => 'layui-icon layui-icon-ok',
                'params' => $params,
                'btn_type' => 'submit',
            ]);

        if ($id) {
            $action->addAction('删除', 'delete', [
                'icon' => 'layui-icon layui-icon-delete',
                'class' => ['layui-btn-danger'],
                'confirm' => '确定要删除数据吗?',
                'params' => $params
            ]);
        }

    }

}

(b) 查看详情页面按钮

查看详情页面按钮默认配置, 返回,编辑和删除按钮, 如果不能满足需求,只需要重写 configShowAction方法实现自己的业务;

#project\app\admin\controller\Category.php

namespace app\admin\controller;
use easyadmin\app\libs\Actions;


class Category extends \easyadmin\controller\Admin
{

    /**
     * 查看详情按钮默认配置, 可根据自己的业务需求实现
     * @param Actions $action
     * @throws ExceptionAlias
     */
    protected function configShowAction(Actions $action)
    {
        $id = $this->request->get($this->pk);
        if (empty($id)) return;

        $params = [
            $this->pk => $id
        ];

        $action
            ->addAction('返回', 'javascript:', [
                'icon' => 'layui-icon layui-icon-return',
                'class' => ['layui-btn-primary'],
                'params' => $params,
                'referer' => true,
            ])
            ->addAction('编辑', 'edit', [
                'icon' => 'layui-icon layui-icon-edit',
                'class' => [''],
                'params' => $params
            ])
            ->addAction('删除', 'delete', [
                'icon' => 'layui-icon layui-icon-delete',
                'class' => ['layui-btn-danger'],
                'confirm' => '确定要删除数据吗?',
                'params' => $params
            ]);
    }


}

所有的按钮都是用的 easyadmin\app\libs\Btn 类 具体的参数 详见 addAction 方法说明

自定义按钮
修改按钮模板: 可通过 options 选项种的 template 属性渲染自己的按钮模板
#project\app\admin\controller\Category.php

namespace app\admin\controller;
use easyadmin\app\libs\PageList;

class Category extends \easyadmin\controller\Admin
{

    /**
     * 配置列表页面
     * @param PageList $page
     */
    protected function configList(PageList $page)
    {
        //指定 按钮的模板路径
        $page->addAction('查看', 'show', [

            //会查找 project\app\admin\views\test\btn.html 文件 进行渲染按钮
            'template'=>'test:btn'
        ]);
    }
}
        

页面可用的变量

字段 说明 类型
label 按钮的显示文字 string
url 点击按钮跳转的URL string
class 按钮的 class 样式名 string
icon 按钮的图标 string
confirmText 点击按钮是否显示确认弹窗
false : 不显示弹窗
一段提示文字
string
btnType 按钮类型
a: a 素 a 标签
btn: layui-button a 标签 添加了 layui-button 样式
button: button-button button标签 type button
submit: button-submit button标签 type submit
string
referer options 中的 referer ; 用户点击执行完成以后,是否跳转回来源页面 string

具体实现代码为

#thinkeasyadmin\src\app\libs\Btn.php

namespace easyadmin\app\libs;

use easyadmin\app\libs\Template as TemplateAlias;
use think\Exception;
use think\Exception as ExceptionAlias;

class Btn
{

    /**
     * 渲染页面的按钮
     * @return string
     * @throws ExceptionAlias
     */
    public function __toString(): string
    {

        $url = $this->getUrl();

        $params = $this->getParams();

        $url = Lib::formatUrl($url, $params);

        //模板路径
        $path = $this->getTemplate();


        $data = [
            'url' => $url,
            'class' => implode(' ', $this->getClass()),
            'icon' => $this->getIcon(),
            'label' => $this->getLabel(),
            'confirmText' => $this->getIsConfirm(),
            'btnType' => $this->getBtnType(),
        ];

        if ($this->isReferer()) {
            $data['referer'] = request()->server('HTTP_REFERER');
        }else{
            $data['referer'] = '';
        }

        //渲染
        $template = new TemplateAlias();
        $template->fetch($path,$data);
        return '';
    }
}
        

完整的按钮实现详见 thinkeasyadmin\src\app\libs\Btn.php thinkeasyadmin\src\app\libs\Actions.php 两个类

可通过继承或者完全重写的方式实现自己的操作按钮

关于icon

系统默认是引入了 layui 的 icon ; 在可配置 icon 的地方 使用 layui-icon 的相关 class 即可

->addAction($id ? '更新' : '添加', 'javascript:', [
    'icon' => 'layui-icon layui-icon-ok',
]);

# 以上配置会生成
<i class="layui-icon layui-icon-ok"></i>
 

当然也可自己引入自己的icon; 我们这里用font-awesome-4.7.0举例

# 步骤
# 1. 首先重写 layout.html 布局文件,在布局文件中引入 icon 的css文件
# 2. 使用上文的配置方式配置即可


#project\app\admin\views\layout.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/font-awesome-4.7.0/css/font-awesome.min.css">
    .
    .
    .
    # 模板布局


# 配置
->addAction($id ? '更新' : '添加', 'javascript:', [
    'icon' => 'fa fa-user',
]);

# 以上配置会生成
<i class="fa fa-user"></i>