在表指标中如何执行删除所选行的操作?

问题描述 投票:0回答:1

我使用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;
    }

每一行都有一个“编辑”操作,可以在编辑模式下打开订单,效果很好。有没有办法直接在表中添加“删除”操作,单击该操作会提示确认,如果确认,则删除所选行。这将允许在不打开订单页面的情况下删除该行。

laravel-nova
1个回答
0
投票

主要问题是您需要提交 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), 
               ];
           }),
];
© www.soinside.com 2019 - 2024. All rights reserved.