6
0
Fork 0
jiqu-library-server/app/Admin/Controllers/OrderController.php

374 lines
15 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\CreateOrderPackage;
use App\Admin\Actions\Show\OrderConsigneeInfo;
use App\Admin\Actions\Show\OrderCreatePackage;
use App\Admin\Actions\Show\OrderPay;
use App\Admin\Actions\Show\OrderReduce;
use App\Admin\Actions\Show\OrderRemark;
use App\Admin\Renderable\PackageProductSimpleTable;
use App\Admin\Repositories\Order;
use App\Models\Order as OrderModel;
use App\Models\OrderLog;
use App\Models\OrderPackage;
use App\Models\OrderProduct;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Widgets\Box;
use Illuminate\Http\Request;
class OrderController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$builder = Order::with('user');
return Grid::make($builder, function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('sn');
$grid->column('user.phone');
$grid->column('total_amount')->display(function ($value) {
return bcdiv($value, 100, 2);
})->prepend('¥');
$grid->column('order_status')->display(function ($value) {
return $this->order_status;
})->using([
0=>'待付款',
1=>'待发货',
2=>'发货中',
3=>'已发货',
9=>'已完成',
10=>'已取消',
])->dot([
0=>'primary',
1=>'warning',
2=>'danger',
3=>'success',
9=>'success',
10=>'#b3b9bf',
]);
$grid->column('pay_way')->using([
'wxpay'=>'微信支付',
'alipay'=>'支付宝',
'offline'=>'线下支付',
'none'=>'无',
])->label([
'wxpay'=>'success',
'alipay'=>'primary',
'offline'=>'warning',
'none'=>'#b3b9bf',
]);
$grid->column('pay_at');
// $grid->column('consignee_name');
// $grid->column('consignee_telephone');
// $grid->column('consignee_zone');
// $grid->column('consignee_address');
// $grid->column('status')->using([
// 0=>'待支付',
// 1=>'待收货',
// 9=>'已完成',
// 10=>'已取消',
// ])->dot([
// 0=>'primary',
// 1=>'danger',
// 9=>'success',
// 10=>'#b3b9bf',
// ]);
// $grid->column('shipping_state')->display(function ($v) {
// if ($this->status <1) {
// return -1;
// }
// return $v;
// })->using([
// -1=> '-',
// 0 => '待发货',
// 1 => '发货中',
// 2 => '已完成',
// ])->dot([
// 0 => 'primary',
// 1 => 'danger',
// 2 => 'success',
// ]);
// $grid->column('completed_at');
$grid->column('created_at')->sortable();
$grid->model()->orderBy('created_at', 'desc');
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableView(false);
// $actions->append(new CreateOrderPackage());
});
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->equal('sn')->width(3);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return function (Row $row) use ($id) {
$row->column(5, function ($column) use ($id) {
$builder = Order::with(['user', 'userCoupon']);
$column->row(Show::make($id, $builder, function (Show $show) {
// $show->field('id');
$show->field('sn');
$show->field('order_status')->as(function ($v) {
return $this->order_status;
})->using([
0=>'待付款',
1=>'待发货',
2=>'发货中',
3=>'已发货',
9=>'已完成',
10=>'已取消',
])->dot([
0=>'primary',
1=>'warning',
2=>'danger',
3=>'success',
9=>'success',
10=>'#b3b9bf',
]);
$show->field('total_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('¥');
$show->field('created_at');
$show->field('pay_way')->using([
'wxpay'=>'微信支付',
'alipay'=>'支付宝',
'offline'=>'线下支付',
'none'=>'无',
])->showLabel([
'微信支付'=>'success',
'支付宝'=>'primary',
'线下支付'=>'warning',
'无'=>'#b3b9bf',
]);
$show->field('pay_at');
$show->divider();
$show->field('consignee_name');
$show->field('consignee_telephone');
$show->field('consignee')->as(function () {
return $this->consignee_zone . ' '. $this->consignee_address;
});
// $show->field('user.phone');
$show->divider();
$show->field('products_total_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('¥');
$show->field('vip_discount_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('- ¥');
if ($show->model()->user_coupon_id) {
$show->field('userCoupon.coupon_name')->label();
$show->field('coupon_discount_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('- ¥');
}
$show->field('shipping_fee')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('+ ¥');
$show->field('reduced_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('- ¥');
$show->divider();
$show->field('note');
$show->field('remark');
$show->panel()
->tools(function (Show\Tools $tools) use ($show) {
$tools->disableEdit();
$tools->disableDelete();
if ($show->model()->status == OrderModel::STATUS_PENDING) {
if (Admin::user()->can('dcat.admin.orders.reduce')) {
$tools->append(new OrderReduce());
}
if (Admin::user()->can('dcat.admin.orders.pay')) {
$tools->append(new OrderPay());
}
}
$tools->append(new OrderRemark());
if ($show->model()->isPending() || $show->model()->isWaitShipping() || $show->model()->isShipping()) {
$tools->append(new OrderConsigneeInfo());
}
});
}));
});
$row->column(7, function ($column) use ($id) {
$builder = OrderProduct::where('order_id', $id);
$productGrid = Grid::make($builder, function (Grid $grid) {
$grid->column('name');
$grid->column('cover')->image(50, 50);
$grid->column('sell_price')->display(function ($value) {
return bcdiv($value, 100, 2);
})->prepend('¥');
$grid->column('quantity');
$grid->column('remain_quantity');
$grid->column('product_total_amount')->display(function () {
return bcdiv($this->sell_price * $this->quantity, 100, 2);
})->prepend('¥');
$grid->column('after_sale_state')->using([
0=>'正常',
1=>'售后中',
2=>'售后完成',
])->dot([
0=>'success',
1=>'danger',
2=>'primary',
]);
$grid->disableActions();
$grid->disablePagination();
$grid->disableRefreshButton();
});
$packageBuilder = OrderPackage::with('packageProducts')->where('order_id', $id);
$packageGrid = Grid::make($packageBuilder, function (Grid $grid) {
$grid->column('shipping_company', '物流公司');
$grid->column('shipping_number', '物流单号');
$grid->column('packageProducts', '包裹商品')->display('包裹商品')->modal(function ($modal) {
$modal->title('商品');
return PackageProductSimpleTable::make(['id'=>$this->id]);
})->setHeaderAttributes(['style' => 'color:#5b69bc']);
$grid->column('created_at', '发货时间');
$grid->column('status', '包裹状态')->using([
OrderPackage::STATUS_WAIT => '揽收',
OrderPackage::STATUS_ONTHEWAY =>'途中',
OrderPackage::STATUS_DISTRIBUTE=>'派送',
OrderPackage::STATUS_CHECK=>'签收',
OrderPackage::STATUS_QUESTION => '疑难',
OrderPackage::STATUS_REFUND => '退签',
OrderPackage::STATUS_REFUSE => '拒签',
OrderPackage::STATUS_OTHER => '其他',
OrderPackage::STATUS_AUTOCHECK => '自动签收',
])->dot([
OrderPackage::STATUS_REFUND =>'danger',
OrderPackage::STATUS_REFUSE =>'danger',
OrderPackage::STATUS_AUTOCHECK =>'success',
OrderPackage::STATUS_CHECK =>'success',
OrderPackage::STATUS_WAIT =>'primary',
OrderPackage::STATUS_ONTHEWAY =>'primary',
OrderPackage::STATUS_DISTRIBUTE=>'primary',
OrderPackage::STATUS_QUESTION =>'warning',
]);
$grid->column('is_failed', '作废')->bool();
$grid->model()->orderBy('created_at', 'desc');
$grid->disableActions();
$grid->disablePagination();
$grid->disableRefreshButton();
});
$logBuilder = OrderLog::with('administrator')->where('order_id', $id);
$orderLogoGrid = Grid::make($logBuilder, function (Grid $grid) {
$grid->column('administrator.name', '操作人');
$grid->column('content', '操作明细')->display(function ($content) {
return $content;
});
$grid->column('created_at', '操作时间');
$grid->model()->orderBy('created_at', 'desc');
$grid->disableActions();
$grid->disablePagination();
$grid->disableRefreshButton();
});
$column->row(Box::make('订单商品', $productGrid));
$packagesBox = Box::make('发货包裹', $packageGrid);
//显示发货动作
$order = OrderModel::findOrFail($id);
if ($order->isWaitShipping() || $order->isShipping()) {
$packagesBox->tool(new OrderCreatePackage(null, $id));
}
$column->row($packagesBox->collapsable());
$logsBox = Box::make('操作记录', $orderLogoGrid);
$column->row($logsBox->collapsable());
});
};
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Order(), function (Form $form) {
$form->display('id');
$form->text('user_id');
$form->text('sn');
$form->text('user_coupon_id');
$form->text('coupon_discount_amount');
$form->text('vip_discount_amount');
$form->text('reduced_amount');
$form->text('shipping_fee');
$form->text('products_total_amount');
$form->text('total_amount');
$form->text('weight');
$form->text('note');
$form->text('remark');
$form->text('pay_sn');
$form->text('pay_way');
$form->text('pay_at');
$form->text('consignee_name');
$form->text('consignee_telephone');
$form->text('consignee_zone');
$form->text('consignee_address');
$form->text('status');
$form->text('completed_at');
$form->display('created_at');
$form->display('updated_at');
});
}
public function orders(Request $request)
{
$sn = $request->input('q');
$query = OrderModel::select('id', 'sn as text');
if ($sn) {
$query->where('sn', 'like', "%$sn%");
return $query->paginate(null);
}
return response()->json($query->get());
}
public function orderProducts(Request $request)
{
$orderId = $request->input('q');
$query = OrderProduct::select('id', 'name as text');
if ($orderId) {
$query->where('order_id', $orderId);
}
return response()->json($query->get());
}
}