讨论 技术讨论 在列表页面中,可以根据不同的条件把数据显示在不同的tab上吗?

在列表页面中,可以根据不同的条件把数据显示在不同的tab上吗?

WX_pX4 发表于    阅读:123    回复:10

问题描述:

在列表页面中,可以根据不同的条件把数据显示在不同的tab上吗?

环境信息:

PHP8.1 ModStartCMS V8.0.0

评论

数据范围标签

根据数据范围标签进行数据筛选,列表以多 Tab 形式展示

$grid
    ->scopeFilter('all', '全部', function (ScopeFilter $filter) {
        // 没有任何筛选条件
    })
    ->scopeFilter('male', '男', function (ScopeFilter $filter) {
        $filter->where('gender', 'male');
    })
    ->scopeFilter('female', '女', function (ScopeFilter $filter) {
        $filter->where('gender', 'female');
    })
    ->scopeDefault('all');



 

ok. thanks.

 

新的问题。 我现在根据不同的条件可以分页显示,但是hookItemOperateRendering()增加的操作只在`all` Tab上显示?如何让它们在其他tab上也显示?

 

你判断当前页面的 _scope 值,这个值是在 URL 中的参数

 

噢, 好的。 如果我在->hookItemOperateRendering(function (ItemOperate $itemOperate) {} 对当前的item的几个属性做了更新或改动,如何能让前端列表强制刷新呢?比如下面的代码verify_status通过JS改变了,前端页自动刷新了,但是我同时还想更新`status`, 除非手动在页面reload,否则不会更新。我实验了在`$itemOperate->prepend(TextLink::success('审核通过', 'javascript:;', 'data-edit-quick="verify_status:' . PostVerifyStatus::VERIFY_PASS . '"'));` 再拼接一个`data-edit-quick="status"`, 但是好像只有前面那个attributes的起作用。

->hookItemOperateRendering(function (ItemOperate $itemOperate) {
    // 当前行数据
    $item = $itemOperate->item();
    switch ($item->verify_status) {
        case PostVerifyStatus::VERIFYING:
            $itemOperate->prepend(TextLink::success('审核通过', 'javascript:;', 'data-edit-quick="verify_status:' . PostVerifyStatus::VERIFY_PASS . '"'));
            $itemOperate->prepend(TextLink::danger('审核拒绝', 'javascript:;', 'data-edit-quick="verify_status:' . PostVerifyStatus::VERIFY_FAIL . '"'));
            break;
    }
    if ($item->verify_status === PostVerifyStatus::VERIFY_PASS) {
        $item->forceFill([
            'status' => PostContentStatus::SHOW
        ]);
        $item->save();
        $item->refresh();
    }

    if ($item->verify_status === PostVerifyStatus::VERIFY_FAIL) {
        $item->forceFill([
            'status' => PostContentStatus::HIDE
        ]);
        $item->save();
        $item->refresh();
    }

})


 

给你一些参考代码

spacer.gif

36831_lclh_6360.png


 

谢谢提供的代码。 不过,我并不想再增加一个独立的操作选项。 有没有办法在controller里直接让grid refresh? 而不是必须通过response 对象,比如示例中Response::redirect(CRUDUtil::jsGridRefresh())。 就是想$item->verify_status 更新成‘通过’后,就自动更新‘status' 成'显示’, 反之亦然。你看我的代码已经实现了更新‘status’的值,数据库中记录也更新了,就是在页面需要手动‘reload'才可以看到更新后的‘status’值。

 

@WX_pX4: 那实现不了

 

或者说, 在controller中可以dispatch 一个event,前端js 响应这个event? 类似livewire中firing event? (https://laravel-livewire.com/docs/2.x/events#from-component)

 

现阶段还不支持。

这是个好思路,不过还是要综合考虑安全、权限等各方面因素。

 
1
我来评论
QQ
微信