column('id')->sortable(); $grid->column('sn')->copyable(); $grid->column('tags', '标签')->display(function ($tags) { $array = []; foreach ($this->tags as $key => $tag) { $array[] = $tag->name; } return $array; })->label(); $grid->column('user.phone')->copyable(); $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', ])->filter( OrderStatusIn::make([ 0=>'待付款', 1=>'待发货', 2=>'发货中', 3=>'已发货', 9=>'已完成', 10=>'已取消', ]) ); $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('created_at')->sortable(); $grid->model()->orderBy('created_at', 'desc'); $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableView(false); if (Admin::user()->can('dcat.admin.orders.tags')) { $actions->append(new OrderSetTag()); } // $actions->append(new CreateOrderPackage()); }); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->equal('sn')->width(3); $filter->where('tags', function ($query) { $query->whereHas('tags', function ($q) { $q->whereIn('tags.id', $this->input); }); }, '标签')->multipleSelect(Tag::orderTag()->pluck('name', 'id'))->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', 'tags']); $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->field('tags')->as(function () { return $this->tags->pluck('name'); })->label(); $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('user_coupon.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([ 0=>true, 1=>false, ]); $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($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()); } }