201 lines
7.8 KiB
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 ? $order->created_at->format('Y-m-d H:i:s') : '',
|
|
'customer_name' => $order->customer->name ?? '',
|
|
'customer_nickname' => $order->customer->nickname ?? '',
|
|
'customer_phone' => $order->customer->phone ?? '',
|
|
]));
|
|
}
|
|
}
|