From c164580e257f6a0cace5aa42019d806957af7cb9 Mon Sep 17 00:00:00 2001 From: Jing Li Date: Sun, 12 Nov 2023 15:55:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E8=AE=A2=E5=8D=95=E5=93=81?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/OfflineOrderController.php | 21 ++++++++++++++++++- app/Models/OfflineOrder.php | 5 +++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/Admin/Controllers/OfflineOrderController.php b/app/Admin/Controllers/OfflineOrderController.php index d0750b61..34ca11a9 100644 --- a/app/Admin/Controllers/OfflineOrderController.php +++ b/app/Admin/Controllers/OfflineOrderController.php @@ -9,6 +9,7 @@ use App\Enums\OfflineOrderStatus; use App\Enums\PayWay; use App\Models\OfflineOrder; use App\Models\OfflineOrderItem; +use App\Models\OfflineProductCategory; use App\Models\Store\Store; use Dcat\Admin\Admin; use Dcat\Admin\Grid; @@ -31,7 +32,7 @@ class OfflineOrderController extends AdminController CSS ); - $grid = new Grid(OfflineOrderRepository::with(['user', 'userInfo', 'store', 'staff', 'staffInfo'])); + $grid = new Grid(OfflineOrderRepository::with(['user', 'userInfo', 'store', 'staff', 'staffInfo', 'items.productCategory'])); $grid->model()->orderBy('id', 'desc'); @@ -68,6 +69,19 @@ class OfflineOrderController extends AdminController {$phone} HTML; }); + $grid->column('items', '品类')->display(function () { + return $this->items->map(function ($item) { + $category = $item->productCategory?->name; + + if ($item->discount_reduction_amount > 0) { + $discount = round(bcdiv($item->discount_reduction_amount*10, $item->products_total_amount, 3), 2); + + $category .= " {$discount}折"; + } + + return ''.$category.''; + })->join(''); + }); $grid->column('products_total_amount')->display(fn($v) => bcdiv($v, 100, 2))->prepend('¥'); $grid->column('discount_reduction_amount')->display(fn($v) => bcdiv($v, 100, 2))->prepend('¥'); $grid->column('points_deduction_amount')->display(fn($v) => bcdiv($v, 100, 2))->prepend('¥'); @@ -89,6 +103,11 @@ class OfflineOrderController extends AdminController $filter->like('payment_sn')->width(3); $filter->like('out_trade_no')->width(3); $filter->equal('store_id')->select(Store::pluck('title', 'id'))->width(3); + $filter->where('product_category_id', function ($q) { + $q->where(function ($q) { + $q->whereHas('items', fn($q) => $q->where('product_category_id', $this->input)); + }); + }, '品类')->select(OfflineProductCategory::pluck('name', 'id'))->width(3); $filter->where('staff_id', function ($q) { $q->where(function ($q) { $q->whereHas('staff', fn($q) => $q->where('phone', 'like', '%'.$this->input.'%')) diff --git a/app/Models/OfflineOrder.php b/app/Models/OfflineOrder.php index 4aee215f..239db4fa 100644 --- a/app/Models/OfflineOrder.php +++ b/app/Models/OfflineOrder.php @@ -75,6 +75,11 @@ class OfflineOrder extends Model return $this->morphMany(PayLog::class, 'payable'); } + public function items() + { + return $this->hasMany(OfflineOrderItem::class, 'order_id'); + } + public function isPending(): bool { return $this->status === OfflineOrderStatus::Pending;