<?php namespace App\Admin\Actions; use App\Admin\Service\OrderService; use App\Exceptions\InvalidRequestException; use App\Models\Order; use App\Models\Order as OrderModel; use Dcat\Admin\Grid\BatchAction; use Dcat\Admin\Grid\Tools\AbstractTool; use Illuminate\Http\Request; use Dcat\Admin\Grid\RowAction; class OrderCancelAction extends RowAction { /** * 按钮样式定义,默认 btn btn-white waves-effect * * @var string */ protected $style = 'btn btn-white waves-effect'; /** * 按钮文本 * * @return string|void */ public function title() { return '取消'; } public function html() { $class = $this->getElementClass(); // 获取当前行数据ID $id = $this->getKey(); // 获取当前行数据的用户名 $username = $this->row; return '<a style="cursor: pointer;" class="'.$class. ' btn btn-primary btn-sm btn-mini" href="javascript:void(0)">取消</a>'; } /** * 确认弹窗,如果不需要则返回空即可 * * @return array|string|void */ public function confirm() { // 只显示标题 // return '您确定要发送新的提醒消息吗?'; // 显示标题和内容 return ['是否确认取消?']; } /** * 处理请求 * 如果你的类中包含了此方法,则点击按钮后会自动向后端发起ajax请求,并且会通过此方法处理请求逻辑 * * @param Request $request */ public function handle(Request $request) { // 你的代码逻辑 $id = $this->getKey(); // 获取 parameters 方法传递的参数 $rowData = $request->get('rowData'); $orderInfo = Order::getOne($rowData["order_id"]??0); if(empty($orderInfo)){ $this->response()->error('没找到相关的订单数据')->refresh(); } try{ OrderService::cancelOrder($rowData["order_id"]??0); }catch (InvalidRequestException $e){ $this->response()->error($e->getMessage())->refresh(); } return $this->response()->success('取消成功')->refresh(); } /** * 设置请求参数 * * @return array|void */ public function parameters() { return [ 'rowData' => $this->row, ]; } }