Laravel-admin 中如何将列表的展现方式改为 tab 选项卡的方式

我有看到框架带有tab前端组件,但是那个组件的内容只能传字符串,我希望可以将框架默认的列表直接在tab框中展现,这样我就能实现类似“已付款、未付款、已退款”这样的分组显示列表的效果了。
望不吝赐教!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

可以的但是要改一下源码,在Encore\Admin\Grid 里面加一个下面这个方法

    /**
     * Output as string.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->render();
    }

---------------------------------控制器里----------------------------
use Encore\Admin\Widgets\Tab;

$tab = new Tab();
$content = Admin::grid(datas::class, function (Grid $grid) {});
$tab->add('选项卡一', $content);
$tab->add('选项卡二', '哈哈哈哈哈');
return $tab;

列表,表单都适用

4年前 评论
绝世坏蛋 (楼主) 4年前
zhuai 4年前
KevinDev 3年前
acvc225 2年前
uncle_ren 1年前
讨论数量: 16
// 未支付
$grid->model()->whereNull('paid_at');

// 已支付
$grid->model()->whereNotNull('paid_at');

// 已退款
$grid->model()->whereNotNull('refund_at');

类似这样,在tab里各放一个grid就行

4年前 评论
绝世坏蛋 (楼主) 4年前

我也遇到类似问题,我是通过自定义tools来实现

$grid->tools(function (Grid\Tools $tools) use ($user) {\
  $tools->append(new GridView($user));\
});
 class GridView extends AbstractTool
    {
        public $user;
        public function __construct(User $user)
        {
            $this->user = $user;
        }
        public function script()
        {
            $url = Request::fullUrlWithQuery(['view' => '_view_']);

            return <<<EOT

$('input:radio.grid-view').change(function () {

    var url = "$url".replace('_view_', $(this).val());

    $.pjax({container:'#pjax-container', url: url });

});

EOT;
        }

        public function render()
        {
            Admin::script($this->script());

            $options = [
                'check' => '签到',
                'live' => '演播',
            ];

            return view('admin.operation.user.grid-view', compact('options'));
        }
    }
4年前 评论
绝世坏蛋 (楼主) 4年前

可以的但是要改一下源码,在Encore\Admin\Grid 里面加一个下面这个方法

    /**
     * Output as string.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->render();
    }

---------------------------------控制器里----------------------------
use Encore\Admin\Widgets\Tab;

$tab = new Tab();
$content = Admin::grid(datas::class, function (Grid $grid) {});
$tab->add('选项卡一', $content);
$tab->add('选项卡二', '哈哈哈哈哈');
return $tab;

列表,表单都适用

4年前 评论
绝世坏蛋 (楼主) 4年前
zhuai 4年前
KevinDev 3年前
acvc225 2年前
uncle_ren 1年前

有BUG 1.批量选中的时候所有Tab都会被选中 2. 筛选 只有当前默认tab 才能正常用。
目前发现的就这2个,如果你解决了告诉我下

4年前 评论
wangyaxiong 3年前
Tomorrowxxy 2年前

看到很多人没说到点子上,秉着为爱发电的精神,我说说我的做法


use Encore\Admin\Layout\Content;
use Encore\Admin\Widgets\Tab;
// ......


protected function grid()
    {

        $grid = new Grid(new ApplyList());

        $query = request()->query();
        $current = $query['current'] ?? 'all';

        if ($current == 'toverify') {
            $grid->model()->where("status", ApplyList::StatusToVerify);
        }
        $grid->header(function () use ($current) {
            $tab = new Tab();
            $tab->addLink('全部', admin_url("apply/lists") . '?current=all', $current == 'all');
            $tab->addLink('待审核', admin_url("apply/lists") . '?current=toverify', $current == 'toverify');
            return $tab->render();
        });
        // ......
    }
1年前 评论
绝世坏蛋 (楼主) 1年前

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