我使用docs中指定的表度量创建了以下类。
class OrdersInInvoiceWithExpireDate extends Table
{
/**
* Calculate the value of the metric.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return mixed
*/
public function calculate(NovaRequest $request)
{
$invoiceOrders = Order::onlyInvoice()->get();
$rows = [];
foreach ($invoiceOrders as $invoiceOrder) {
$iconClass = '';
$icon = '';
$subtitle = '';
...
$rows[] = MetricTableRow::make()
->icon($icon)
->iconClass($iconClass)
->title($invoiceOrder->order_number)
->subtitle($subtitle)
->actions(function () use($invoiceOrder) {
return [
MenuItem::make('Edit', '/resources/orders/' . $invoiceOrder->id),
];
});
}
return $rows;
}
每一行都有一个“编辑”操作,可以在编辑模式下打开订单,效果很好。有没有办法直接在表中添加“删除”操作,单击该操作会提示确认,如果确认,则删除所选行。这将允许在不打开订单页面的情况下删除该行。
主要问题是您需要提交 POST 或 DELETE 请求,同时还要处理 JavaScript 中的自定义确认弹出窗口。在自定义字段中从头开始编写此功能是可能的,但需要付出巨大的努力。
我遇到的一个包是 nova-action-buttons,它允许您直接向指标或资源表添加操作按钮。您可以使用以下命令安装它:
composer require pavloniym/nova-action-buttons
它允许操作作为内联字段运行。
您还需要创建一个通过 ID 删除资源的操作。一种可能的解决方案是:
use App\Nova\Actions\DeleteResource;
return [
MetricTableRow::make()
->icon($icon)
->iconClass($iconClass)
->title($invoiceOrder->order_number)
->subtitle($subtitle)
->actions(function () use ($invoiceOrder) {
return [
MenuItem::make('Edit', '/resources/orders/' . $invoiceOrder->id),
ActionButton::make('Delete')
->action(new DeleteResource(), $invoiceOrder->id),
];
}),
];