disableRowSelector(); $grid->model()->sort(); $grid->filter(function (Filter $filter) { $filter->panel(); $filter->like('sn')->width(4); $filter->equal('user_id')->select()->ajax('api/user?_paginate=1')->model(User::class, 'id', 'phone')->width(4); $filter->where('order_status', fn($q) => $q->filter(['status' => $this->input]))->select(OrderStatus::options())->width(4); $filter->whereBetween('created_at', function ($q) { $start = data_get($this->input, 'start'); $start = $start ? Carbon::createFromFormat('Y-m-d', $start) : null; $end = data_get($this->input, 'end'); $end = $end ? Carbon::createFromFormat('Y-m-d', $end) : null; if ($start) { if ($end) { $q->whereBetween('created_at', [$start, $end]); } $q->where('created_at', '>=', $start); } else if ($end) { $q->where('created_at', '<=', $end); } })->date()->width(4); }); $grid->column('sn')->copyable(); $grid->column('user.phone'); $grid->column('total_money'); $grid->column('order_status')->display(fn() => $this->status()->dot()); $grid->column('created_at'); $user = Admin::user(); $grid->showViewButton($user->can('dcat.admin.orders.show')); $grid->disableCreateButton(); $grid->disableEditButton(); $grid->disableDeleteButton(); }); } protected function detail($id) { $info = Order::with(['user'])->findOrFail($id); $row = new Row(); $row->column(6, Show::make($info, function (Show $show) { $show->disableEditButton(); $show->disableDeleteButton(); $info = $show->model(); $show->row(function (Show\Row $show) { $show->width(6)->field('user.phone'); $show->width(6)->field('sn'); $show->width(6)->field('status', '状态')->as(fn() => $this->status()->label())->unescape(); $show->width(6)->field('created_at'); }); $show->row(function (Show\Row $show) { $show->width(6)->field('total_money'); $show->width(6)->field('user_remarks'); }); $show->row(function (Show\Row $show) { $show->width(6)->field('score_discount_money'); $show->width(6)->field('score_discount_amount'); }); if ($info->coupon_money > 0) { $show->row(function (Show\Row $show) { $show->width(6)->field('coupon_money')->as(fn ($v) => '-'.floatval($v).'')->unescape(); $show->width(6)->field('coupon.name', '优惠券'); }); } $show->row(function (Show\Row $show) use ($info) { $show->width(6)->field('pay_money')->as(function ($value) { return ''.$value.'' . ($this->discount_price > 0 ? '(-'.$this->discount_price.')' : ''); })->unescape(); $show->width(6)->field('pay_way')->as(fn() => $this->pay_way?->label())->unescape(); if ($info->pay_status === PayStatus::Success) { $show->width(6)->field('pay_at'); $show->width(6)->field('pay_no'); } }); $show->row(function (Show\Row $show) use ($info) { // $show->width(6)->field('ship_status')->as(fn() => $this->ship_status->label())->unescape(); $show->width(6)->field('ship_money'); $show->width(6)->field('ship_address')->as(fn($v) => $v ? implode(',', Arr::only($v, ['name', 'phone', 'address'])) : ''); $show->width(6)->field('ship_way')->as(fn() => $this->ship_way?->label())->unescape(); $show->width(6)->field('ship_at'); }); $show->row(function (Show\Row $show) use ($info) { $show->width(6)->field('remarks'); }); $show->tools(function (Tools $tools) { $tools->append(new ShowCancel()); $tools->append(new ShowPay()); $tools->append(new ShowPayQuery()); $tools->append(new ShowShip()); $tools->append(new ShowReceive()); $tools->append(new ShowDelete()); $tools->append(new ShowPrice()); $tools->append(new ShowRemarks()); }); })); $row->column(6, function (Column $column) use ($info) { $column->row(Box::make('订单商品', Grid::make(OrderGoods::where('order_id', $info->id), function (Grid $grid) { $grid->disableRowSelector(); $grid->disableCreateButton(); $grid->disablePagination(); $grid->disableActions(); $grid->disableRefreshButton(); $grid->column('goods_name', '商品'); $grid->column('price', '价格'); $grid->column('amount', '数量'); $grid->column('ship_amount', '已发'); $grid->column('spec', '规格')->display(fn($v) => $v ? array_column($v, 'value') : '')->label(); $grid->column('money', '合计'); }))); $column->row(Box::make('发货单', Grid::make(OrderShip::with(['goods'])->where('order_id', $info->id)->sort(), function (Grid $grid) { $grid->disableRowSelector(); $grid->disableCreateButton(); $grid->disablePagination(); $grid->disableActions(); $grid->disableRefreshButton(); $grid->column('company', '物流公司')->display(fn() => data_get($this->ship_data, 'company')); $grid->column('sn', '运单号')->copyable(); $grid->column('goods', '商品')->display(function () { $html = ''; foreach($this->goods as $item) { $html .= << $item->goods_name $item->amount HTML; } return $html; }); $grid->column('ship_status', '状态')->display(fn() => $this->ship_status->text())->modal(function (Modal $modal) { $modal->icon('fa-truck'); $modal->title('物流信息'); return ShipLog::make(['id' => $this->id, 'ship' => $this->ship_data])->render(); }); $grid->column('created_at', '发货时间'); $grid->column('finish_at', '收货时间'); }))); $column->row(Box::make('操作记录', Grid::make(OrderOption::with(['user'])->where('order_id', $info->id)->orderBy('created_at', 'desc'), function (Grid $grid) { $grid->disableRowSelector(); $grid->disableCreateButton(); $grid->disablePagination(); $grid->disableActions(); $grid->disableRefreshButton(); $grid->column('user_id', '操作人')->display(function () { return match($this->user_type) { Administrator::class => $this->user->name, User::class => $this->user->phone, null => '', default => $this->user_type.': '.$this->user_id }; }); $grid->column('description', '描述'); $grid->column('created_at', '时间'); }))); }); return $row; } }