首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Laravel Nova将操作显示为特定行上的下拉列表

使用Laravel Nova将操作显示为特定行上的下拉列表
EN

Stack Overflow用户
提问于 2021-03-17 23:16:50
回答 1查看 628关注 0票数 0

在我创建一个动作并使用onlyOnTableRow标志后,它将显示为一个按钮,并显示在每一行上。该按钮用于将行的状态从pending更改为approveddeclined。现在,我想使用dropdown而不是button,这样我就不会有两个按钮(一个用于approve,另一个用于decline),而且我还想显示这个按钮,或者至少为那些状态为pending的行启用它,否则按钮/下拉框应该被禁用(或者隐藏,无关紧要)。

代码语言:javascript
运行
复制
// ApproveVacation.php
class ApproveVacation extends Action
{
    use InteractsWithQueue, Queueable;

    public function handle(ActionFields $fields, Collection $models)
    {
        foreach($models as $model) {
            $model->update([
                'status' => 'approved'
            ]);
        }
        return Action::message('Successfully approved!');
    }

    public function fields()
    {
        return [];
    }
}

//Vacation.php
class Vacation extends Resource
{
   ...
   public function actions(Request $request)
   {
      return [
         (new ApproveVacation())->onlyOnTableRow()
      ];
   }
}
EN

回答 1

Stack Overflow用户

发布于 2021-03-18 17:50:31

这就是我如何解决这个问题的。我找不到一种方法将dropdown插入到行中,但这个解决方案已经足够接近了:

代码语言:javascript
运行
复制
// ApproveVacation.php
class ApproveVacation extends Action
{
    use InteractsWithQueue, Queueable;

    public function handle(ActionFields $fields, Collection $models)
    {
       foreach($models as $model) {
          $model->update([
             'status' => $fields->status
          ]);
       }
       return Action::message('Status has been successfully updated!');
    }

    public function fields()
    {
       return [
          Select::make('Status')->options([
             'approved' => 'Approve',
             'declined' => 'Decline',
          ])->default(function ($request) {
              return 'approved';
          })
       ];
    }
}

//Vacation.php
class Vacation extends Resource
{
   ...
   public function actions(Request $request)
   {
      return [
         (new UpdateVacationStatus())->onlyOnTableRow()->canSee(function ($request) {
            if ($request instanceof ActionRequest) {
                return false;  
            }

            return $this->resource instanceof Model && $this->resource->status == 'pending';    
        })
    ];
   }
}

此代码将添加在单击时显示模式的按钮。在模式中将有一个字段,它是Status,它将是下拉列表(因为它被设置为Select类型)。

此外,为了避免显示每个字段的按钮,我在actions函数中添加了条件。它检查传递的参数是否为Model类型,这意味着该参数表示表中的一行,只有您可以检查所需的其他条件(对我来说,检查status是否为pending)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66675999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档