在我创建一个动作并使用onlyOnTableRow
标志后,它将显示为一个按钮,并显示在每一行上。该按钮用于将行的状态从pending
更改为approved
或declined
。现在,我想使用dropdown而不是button,这样我就不会有两个按钮(一个用于approve
,另一个用于decline
),而且我还想显示这个按钮,或者至少为那些状态为pending
的行启用它,否则按钮/下拉框应该被禁用(或者隐藏,无关紧要)。
// 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()
];
}
}
发布于 2021-03-18 09:50:31
这就是我如何解决这个问题的。我找不到一种方法将dropdown插入到行中,但这个解决方案已经足够接近了:
// 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
)
https://stackoverflow.com/questions/66675999
复制