header('订单列表') // 设置页面标题 ->description('') // 设置页面描述(可选) ->body($this->grid()); // 渲染网格 } /** * 显示订单详情页面. * * @param mixed $id 订单 ID * @param Content $content 内容布局实例 * @return Content 返回内容布局 */ public function show($id, Content $content) { return $content ->header('详情') // 设置页面标题 ->description('') // 设置页面描述(可选) ->body($this->detail($id)); // 渲染订单详情 } /** * 创建网格构建器. * * @return Grid 返回网格实例 */ protected function grid() { $grid = new Grid(new Order); // 创建新的网格实例,基于 Order 模型 $grid->model()->withTrashed()->latest(); // 显示软删除的记录,并按创建时间降序排列 // 定义网格的列 $grid->column('id'); // 显示订单 ID $grid->column('no', '流水号'); // 显示订单流水号 $grid->column('user.name', '用户'); // 显示用户名称 $grid->column('origin_amount', '订单原价'); // 显示订单原价 $grid->column('post_amount', '邮费'); // 显示邮费 $grid->column('coupon_amount', '优惠'); // 显示优惠金额 $grid->column('amount', '总价'); // 显示总价 $grid->column('status', '状态')->display(function ($status) { // 如果订单已付款,显示物流状态 if ($status == OrderStatusEnum::PAID) { return OrderShipStatusTransform::trans($this->ship_status); // 转换并显示物流状态 } return OrderStatusTransform::trans($status); // 转换并显示订单状态 }); $grid->column('type', '订单类型')->display(function ($type) { return OrderTypeTransform::trans($type); // 转换并显示订单类型 }); $grid->column('pay_type', '支付方式')->display(function ($type) { return OrderPayTypeTransform::trans($type); // 转换并显示支付方式 }); $grid->column('pay_no', '支付流水号'); // 显示支付流水号 $grid->column('paid_at', '支付时间'); // 显示支付时间 $grid->column('consignee_name', '收货人姓名'); // 显示收货人姓名 $grid->column('consignee_phone', '收货人手机'); // 显示收货人手机 $grid->column('created_at', '创建时间'); // 显示创建时间 // 禁用行选择器和创建按钮 $grid->disableRowSelector(); $grid->disableCreateButton(); // 自定义操作按钮 $grid->actions(function (Grid\Displayers\DropdownActions $actions) { $order = $actions->row; // 获取当前行的订单数据 // 根据订单状态添加相应的操作按钮 if ($order->status == OrderStatusEnum::APPLY_REFUND) { $actions->add(new OrderRefundAction()); // 添加退款操作按钮 } elseif ($order->status == OrderStatusEnum::PAID) { if ($order->ship_status == OrderShipStatusEnum::PENDING) { $actions->add(new OrderShipAction()); // 添加发货操作按钮 } elseif ($order->ship_status == OrderShipStatusEnum::DELIVERED) { $actions->add(new OrderReceivedAction()); // 添加确认收货操作按钮 } } $actions->disableEdit(); // 禁用编辑按钮 }); // 添加过滤器 $grid->filter(function (Filter $filter) { $filter->disableIdFilter(); // 禁用 ID 过滤 $filter->like('no', '流水号'); // 添加流水号模糊查询 $filter->where(function ($query) { // 根据用户名称查询用户 ID $users = User::query()->where('name', 'like', "%{$this->input}%")->pluck('id'); $query->whereIn('user_id', $users->all()); // 根据用户 ID 查询订单 }, '用户'); }); return $grid; // 返回构建好的网格 } /** * 创建订单详情展示构建器. * * @param mixed $id 订单 ID * @return Show 返回展示实例 */ protected function detail($id) { $show = new Show(Order::query()->withTrashed()->findOrFail($id)); // 查找并显示指定 ID 的订单记录 // 定义详情展示的字段 $show->field('id'); // 显示订单 ID $show->field('no', '流水号'); // 显示订单流水号 $show->field('user', '用户')->as(function ($user) { return optional($user)->name; // 显示用户名称 }); $show->divider(); // 添加分隔线 $show->field('amount', '总计'); // 显示订单总计 $show->field('status', '状态')->as(function ($status) { // 如果订单已付款,显示物流状态 if ($status == OrderStatusEnum::PAID) { return OrderShipStatusTransform::trans($this->ship_status); // 转换并显示物流状态 } return OrderStatusTransform::trans($status); // 转换并显示订单状态 }); $show->field('type', '订单类型')->as(function ($type) { return OrderTypeTransform::trans($type); // 转换并显示订单类型 }); $show->divider(); // 添加分隔线 $show->field('express_company', '物流公司'); // 显示物流公司 $show->field('express_no', '物流单号'); // 显示物流单号 $show->divider(); // 添加分隔线 $show->field('consignee_name', '收货人'); // 显示收货人姓名 $show->field('consignee_phone', '收货人手机'); // 显示收货人手机 $show->field('consignee_address', '收货地址'); // 显示收货地址 $show->divider(); // 添加分隔线 $show->field('pay_type', '支付类型')->as(function ($type) { return OrderPayTypeTransform::trans($type); // 转换并显示支付类型 }); $show->field('refund_reason', '退款理由'); // 显示退款理由 $show->field('pay_trade_no', '退款单号'); // 显示退款单号 $show->field('pay_no', '支付单号'); // 显示支付单号 $show->field('paid_at', '支付时间'); // 显示支付时间 $show->field('created_at', '创建时间'); // 显示创建时间 $show->field('updated_at', '修改时间'); // 显示修改时间 // 显示订单详情 $show->details('详情', function (Grid $details) { $details->column('id'); // 显示订单详情 ID $details->column('product.name', '商品名字'); // 显示商品名称 $details->column('price', '单价'); // 显示单价 $details->column('number', '数量'); // 显示数量 $details->column('is_commented', '是否评论')->display(function ($is) { return YesNoTransform::trans($is); // 转换并显示是否评论 }); $details->column('total', '小计'); // 显示小计 // 禁用行选择器、创建按钮、过滤器和操作按钮 $details->disableRowSelector(); $details->disableCreateButton(); $details->disableFilter(); $details->disableActions(); }); return $show; // 返回构建好的详情视图 } /** * 删除指定订单. * * @param mixed $id 订单 ID * @return \Illuminate\Http\JsonResponse 返回 JSON 响应 */ public function destroy($id) { try { DB::transaction(function () use ($id) { $order = Order::withTrashed()->findOrFail($id); // 查找指定 ID 的订单 $order->details()->delete(); // 删除订单详情 $order->forceDelete(); // 强制删除订单 }); $data = [ 'status' => true, 'message' => trans('admin.delete_succeeded'), // 返回成功消息 ]; } catch (\Throwable $e) { $data = [ 'status' => false, 'message' => trans('admin.delete_failed') . $e->getMessage(), // 返回失败消息及错误信息 ]; } return response()->json($data); // 返回 JSON 响应 } }