让DcatAdmin再放光芒系列 - 弹出确认框得到反馈后 再弹出Modal的实现

开篇

Dcat-admin 日常开发中,为了防止误操作,经常需要询问用户,得到反馈后,再进行下一步操作。下一步操用到Modal 模态框场景,比方说:实现某些任务,弹出modal,让用户了解任务的执行正常。

效果截图

让DcatAdmin再放光芒系列 - 弹出确认框得到反馈后 再弹出Modal的实现

让DcatAdmin再放光芒系列 - 弹出确认框得到反馈后 再弹出Modal的实现
** 插件扩展包安装 效果截图**

让DcatAdmin再放光芒系列 - 弹出确认框得到反馈后 再弹出Modal的实现

让DcatAdmin再放光芒系列 - 弹出确认框得到反馈后 再弹出Modal的实现

让DcatAdmin再放光芒系列 - 弹出确认框得到反馈后 再弹出Modal的实现

让DcatAdmin再放光芒系列 - 弹出确认框得到反馈后 再弹出Modal的实现

实现代码

创建一个动作类

<?php

namespace App\Admin\Actions;

use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Table;
use Dcat\Admin\Widgets\Modal;
use Dcat\Admin\Widgets\Card;
use Dcat\Admin\Actions\Action;
use Dcat\Admin\Actions\Response;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use App\Admin\Renderable\UserTable;
class ShowCurrentAdminUser extends Action
{
    /**
     * 按钮标题
     *
     * @var string
     */
    protected $title = '个人信息';

    /**
     * @var string
     */
    protected $modalId = 'show-current-user';

    // 设置模态框ID
    public function modalId($id){
      $this->modalId = $id;
      return $this;
    }
    /**
     * 处理当前动作的请求接口,如果不需要请直接删除
     *
     * @param Request $request
     *
     * @return Response
     */
    public function handle(Request $request)
    {
        return $this->response()
            ->success('查询成功')
            ->html('-');
    }

    /**
     * 处理响应的HTML字符串,附加到弹窗节点中
     *
     * @return string
     */
    protected function handleHtmlResponse()
    {
        return <<<'JS'
function (target, html, data) {
    var $modal = $(target.data('target'));
    // $modal.find('.modal-body').html(html)
    $modal.modal('show')
} 
JS;
    }

    /**
     * 设置HTML标签的属性
     *
     * @return void
     */
    protected function setupHtmlAttributes()
    {
        // 添加class
        $this->addHtmlClass('btn btn-primary');

        // 保存弹窗的ID
        $this->setHtmlAttribute('data-target', '#'.$this->modalId);

        parent::setupHtmlAttributes();
    }


    protected function userTable(){
        $modal = Modal::make();
        $modal->lg();
        $modal->title('这是一个异步弹窗');
        $modal->id($this->modalId);
        $modal->body(UserTable::make()->payload(['id'=>1]));
        return $modal->render();
    }

    /**
     * 设置按钮的HTML,这里我们需要附加上弹窗的HTML
     *
     * @return string|void
     */
    public function html()
    {
        // 按钮的html
        $html = parent::html();
        return $html.$this->userTable();
    }

    /**
     * 确认弹窗信息,如不需要可以删除此方法
     *
     * @return string|void
     */
    public function confirm()
    {
        return ['你确认要查看吗?', '查看用户更多信息'];
    }

    /**
     * 动作权限判断,返回false则表示无权限,如果不需要可以删除此方法
     *
     * @param Model|Authenticatable|HasPermissions|null $user
     *
     * @return bool
     */
    protected function authorize($user): bool
    {
        return true;
    }

    /**
     * 通过这个方法可以设置动作发起请求时需要附带的参数,如果不需要可以删除此方法
     *
     * @return array
     */
    protected function parameters()
    {
        return [];
    }
}

使用动作

public function index(Content $content)
{
  return $content->body(ShowCurrentAdminUser::make()->setKey('12'));
}

关键点

html() 中追加一个modal ,modal->body( )中,可以是其它任意组件,或异步加载组件。

 public function html()
    {
        // 按钮的html
        $html = parent::html();
        return $html.$this->userTable();
    }

在数据列表中使用

// 必须要设置 modalid 且ID不能在页面上有重复
$actions->prepend(ShowCurrentAdminUser::make()->modalId($actions->row->id)->setKey('你要传的数据'));

dcat-admin 并未停止不前,plus版 持续更新 保持活力

dcat-plus admin (plus版)沿用 dcat-admn 最新代码,并让dcat-admin 保持活力。已支持到Laravel11,并新增多个组件。

dcat-admin(plus版)未来属于集体

期待您的参与,让 dcat-admin 成为国内最开放,最好用的后台极速开发框架

加入微信技术交流群

加wx:Q3664839 拉你入群

加入QQ技术交流群

r1zlW5XiBx.png!large

本作品采用《CC 协议》,转载必须注明作者和本文链接
Dcat-Admin (plus版)是汇聚Filament,Laravel-admin , Dcat-admin 优点于一身的基于Laravel + Bootstrap 的极速开发框架
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9
Mutoulee

支持一个

4个月前 评论

演示扫码进不去

4个月前 评论
Dcatplus-杨光 (楼主) 3个月前

@Dcatplus-杨光 现有的Dcat-admin 项目可以无缝衔接到 你这个项目吗?

3个月前 评论
Dcatplus-杨光 (楼主) 3个月前
liaosp (作者) 3个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
Dcat-plus Admin @ 速码邦
文章
30
粉丝
49
喜欢
166
收藏
143
排名:455
访问:2.0 万
私信
所有博文
社区赞助商