jingcai-php/app/Admin/Controllers/OrderFakeController.php

201 lines
7.8 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Model\Order;
use App\Model\OrderFake;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Http\Request;
class OrderFakeController extends AdminController
{
use ControllerTrait;
protected $title = '跟单膨胀人数';
protected function grid()
{
return Grid::make(OrderFake::class, function (Grid $grid) {
$grid->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(<<<JS
Dcat.init('{$orderSnField->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 ?? '',
]));
}
}