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

276 lines
10 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\CreateOrderPackage;
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\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('user_coupon_id');
// $grid->column('coupon_discount_amount');
// $grid->column('products_total_amount')->display(function ($value) {
// return bcdiv($value, 100, 2);
// })->prepend('¥');
// $grid->column('vip_discount_amount')->display(function ($value) {
// return bcdiv($value, 100, 2);
// })->prepend('¥');
// $grid->column('coupon_discount_amount')->display(function ($value) {
// return bcdiv($value, 100, 2);
// })->prepend('¥');
// $grid->column('reduced_amount')->display(function ($value) {
// return bcdiv($value, 100, 2);
// })->prepend('¥');
// $grid->column('weight');
// $grid->column('shipping_fee')->display(function ($value) {
// return bcdiv($value, 100, 2);
// })->prepend('¥');
$grid->column('total_amount')->display(function ($value) {
return bcdiv($value, 100, 2);
})->prepend('¥');
// $grid->column('note');
// $grid->column('remark');
// $grid->column('pay_sn');
$grid->column('pay_way');
$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->equal('id');
});
});
}
/**
* 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('total_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('¥');
$show->field('created_at');
$show->field('pay_way');
$show->field('pay_at');
$show->field('user.phone');
$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('¥');
$show->field('userCoupon.coupon_name')->label();
$show->field('coupon_discount_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('¥');
$show->field('reduced_amount')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('¥');
$show->field('shipping_fee')->as(function ($v) {
return bcdiv($v, 100, 2);
})->prepend('¥');
$show->panel()
->tools(function (Show\Tools $tools) use ($show) {
$tools->disableEdit();
$tools->disableDelete();
});
}));
});
$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('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', '包裹商品')->setHeaderAttributes(['style' => 'color:#5b69bc']);
$grid->column('created_at', '发货时间');
$grid->disableActions();
$grid->disablePagination();
$grid->disableRefreshButton();
});
$logBuilder = OrderLog::with('administrator')->where('order_id', $id);
$orderLogoGrid = Grid::make($logBuilder, function (Grid $grid) {
$grid->column('administrator', '操作人');
$grid->column('content', '操作明细');
$grid->column('craeted_at', '操作时间');
$grid->disableActions();
$grid->disablePagination();
$grid->disableRefreshButton();
});
$column->row(Box::make('订单商品', $productGrid));
$packagesBox = Box::make('发货包裹', $packageGrid);
$packagesBox->tool('<button class="btn btn-sm btn-light shadow-none">发货</button>');
$column->row($packagesBox->collapsable());
$logsBox = Box::make('操作记录', $orderLogoGrid);
$logsBox->tool('<button class="btn btn-sm btn-light shadow-none">改价</button>');
$logsBox->tool('<button class="btn btn-sm btn-light shadow-none">支付</button>');
$logsBox->tool('<button class="btn btn-sm btn-light shadow-none">修改收货地址</button>');
$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());
}
}