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;