diff --git a/app/Admin/Controllers/OrderFakeController.php b/app/Admin/Controllers/OrderFakeController.php new file mode 100644 index 00000000..ef6045f0 --- /dev/null +++ b/app/Admin/Controllers/OrderFakeController.php @@ -0,0 +1,200 @@ +model()->with([ + 'customer:id,name,nickname,phone', + 'order:order_sn,created_at', + 'creator:id,name,username', + 'updater:id,name,username', + ])->orderBy('id', 'desc'); + + $grid->column('order_sn', '订单号'); + $grid->column('customer.name', '发单人名称'); + $grid->column('fake_count', '膨胀人数'); + $grid->column('order.created_at', '订单创建时间'); + $grid->column('created_at', '创建时间'); + $grid->column('creator.name', '创建人')->display(function () { + if (!$this->creator) { + return '-'; + } + return $this->creator->name ?: $this->creator->username; + }); + $grid->column('updater.name', '更新人')->display(function () { + if (!$this->updater) { + return '-'; + } + return $this->updater->name ?: $this->updater->username; + }); + + $grid->filter(function ($filter) { + $filter->panel(); + $filter->like('order_sn', '订单号'); + $filter->where('customer_name', function ($query) { + $query->whereHas('customer', function ($q) { + $q->where('name', 'like', "%{$this->input}%"); + }); + }, '发单人名称'); + }); + + $grid->disableViewButton(); + $grid->scrollbarX(); + }); + } + + protected function form() + { + return Form::make(new OrderFake(), function (Form $form) { + $isEditing = (bool) $form->model()->id; + + $form->ignore(['_order_created_at', '_customer_name', '_customer_nickname', '_customer_phone']); + + if ($isEditing) { + $order = Order::with('customer:id,name,nickname,phone')->sn($form->model()->order_sn)->first(); + $form->display('order_sn', '订单号'); + $form->text('_order_created_at', '订单创建时间') + ->readonly() + ->default($order ? $order->created_at : ''); + $form->text('_customer_name', '订单发单人名称') + ->readonly() + ->default($order && $order->customer ? $order->customer->name : ''); + $form->text('_customer_nickname', '订单发单人昵称') + ->readonly() + ->default($order && $order->customer ? $order->customer->nickname : ''); + $form->text('_customer_phone', '订单发单人手机号') + ->readonly() + ->default($order && $order->customer ? $order->customer->phone : ''); + } else { + $lookupUrl = admin_url('order_fake/lookup'); + $orderSnField = $form->text('order_sn', '订单号')->required(); + $createdAtField = $form->text('_order_created_at', '订单创建时间')->readonly(); + $nameField = $form->text('_customer_name', '订单发单人名称')->readonly(); + $nicknameField = $form->text('_customer_nickname', '订单发单人昵称')->readonly(); + $phoneField = $form->text('_customer_phone', '订单发单人手机号')->readonly(); + $customerIdField = $form->hidden('customer_id'); + + $orderSnField->script(<<getElementClassSelector()}', function (\$self) { + var lookupUrl = '{$lookupUrl}'; + var \$createdAt = $('{$createdAtField->getElementClassSelector()}'); + var \$customerName = $('{$nameField->getElementClassSelector()}'); + var \$customerNickname = $('{$nicknameField->getElementClassSelector()}'); + var \$customerPhone = $('{$phoneField->getElementClassSelector()}'); + var \$customerId = $('{$customerIdField->getElementClassSelector()}'); + + function clearOrderInfo() { + \$createdAt.val(''); + \$customerName.val(''); + \$customerNickname.val(''); + \$customerPhone.val(''); + \$customerId.val(''); + } + + \$self.off('blur.orderFakeLookup').on('blur.orderFakeLookup', function () { + var orderSn = \$.trim(\$self.val()); + if (!orderSn) { + clearOrderInfo(); + return; + } + + \$.ajax({ + url: lookupUrl, + type: 'GET', + data: {order_sn: orderSn}, + dataType: 'json', + success: function (res) { + if (res.code === 200) { + \$createdAt.val(res.data.order_created_at || ''); + \$customerName.val(res.data.customer_name || ''); + \$customerNickname.val(res.data.customer_nickname || ''); + \$customerPhone.val(res.data.customer_phone || ''); + \$customerId.val(res.data.customer_id || ''); + } else { + clearOrderInfo(); + Dcat.error(res.message || '订单查询失败'); + } + }, + error: function () { + clearOrderInfo(); + Dcat.error('订单查询失败'); + } + }); + }); +}); +JS + ); + } + + $form->number('fake_count', '膨胀人数')->required()->min(1)->default(1); + $form->hidden('created_by'); + $form->hidden('updated_by'); + $form->saving(function (Form $form) use ($isEditing) { + if ($form->fake_count < 1) { + return $form->response()->error('膨胀人数必须大于0'); + } + + $orderSn = $isEditing ? $form->model()->order_sn : $form->order_sn; + $order = Order::with('customer:id,name,nickname,phone')->sn($orderSn)->first(); + if (!$order) { + return $form->response()->error('订单不存在'); + } + + $exists = OrderFake::where('order_sn', $orderSn) + ->where('id', '!=', $form->model()->id ?? 0) + ->exists(); + if ($exists) { + return $form->response()->error('该订单已添加膨胀记录'); + } + + $form->customer_id = $order->customer_id; + $form->updated_by = Admin::user()->id; + if (!$isEditing) { + $form->created_by = Admin::user()->id; + } + }); + + $form->footer(function ($footer) { + $footer->disableViewCheck(); + $footer->disableEditingCheck(); + }); + }); + } + + public function lookupOrder(Request $request) + { + $orderSn = trim($request->get('order_sn', '')); + if (!$orderSn) { + return response()->json($this->jsonFail('请输入订单号')); + } + + $order = Order::with('customer:id,name,nickname,phone')->sn($orderSn)->first(); + if (!$order) { + return response()->json($this->jsonFail('订单不存在')); + } + + return response()->json($this->jsonSuccess([ + 'customer_id' => $order->customer_id, + 'order_created_at' => $order->created_at, + 'customer_name' => $order->customer->name ?? '', + 'customer_nickname' => $order->customer->nickname ?? '', + 'customer_phone' => $order->customer->phone ?? '', + ])); + } +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index be7f8db9..c4af6a2d 100755 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -28,6 +28,8 @@ Route::group([ $router->get('/order/shopOrderMoney', 'OrderController@shopOrderMoney'); $router->get('/order_auto_fadan', 'OrderController@autoFadan'); $router->resource('/order', OrderController::class); + $router->get('/order_fake/lookup', 'OrderFakeController@lookupOrder'); + $router->resource('/order_fake', OrderFakeController::class); $router->resource('/customer', CustomerController::class); $router->resource('/report_shop_order', ReportShopOrderController::class); diff --git a/app/Model/OrderFake.php b/app/Model/OrderFake.php new file mode 100644 index 00000000..28565775 --- /dev/null +++ b/app/Model/OrderFake.php @@ -0,0 +1,36 @@ +belongsTo(Customer::class, 'customer_id', 'id'); + } + + public function order() + { + return $this->belongsTo(Order::class, 'order_sn', 'order_sn'); + } + + public function creator() + { + return $this->belongsTo(Administrator::class, 'created_by', 'id'); + } + + public function updater() + { + return $this->belongsTo(Administrator::class, 'updated_by', 'id'); + } +}