column('id')->sortable()->if(function () { return Admin::user()->can('dcat.admin.orders.show'); })->then(function (Column $column) { $column->link(function ($value) { return admin_route('orders.show', ['order' => $value]); }); }); $grid->tools(function (Grid\Tools $tools) { //设置规格 if (Admin::user()->can('dcat.admin.orders.export_shipping_orders')) { $tools->append(new ExportShippingOrder()); } }); $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')->display(function ($v) { if ($v) { return '  '.$v->getMallOrderText(); } return ''; }); $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) { if (Admin::user()->can('dcat.admin.orders.show')) { $actions->disableView(false); } if (Admin::user()->can('dcat.admin.orders.tags')) { $actions->append(new OrderSetTag()); } if (Admin::user()->can('dcat.admin.distribution_pre_incomes.index')) { $actions->append(' 预收益明细'); } // $actions->append(new CreateOrderPackage()); }); $grid->setResource('orders'); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->equal('sn')->width(3); $filter->equal('user.phone')->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); $filter->between('created_at')->dateTime()->width(7); }); }); } /** * 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 = OrderModel::with(['user', 'userCoupon', 'tags'])->withCount('afterSales'); $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->html(function () { $content = ''; if ($this->pay_way) { $content = '  '.$this->pay_way->getMallOrderText(); } return <<
支付方式
{$content} 
HTML; }); $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('sales_value', '总销售值'); $show->field('is_settle', '是否结算')->using([ 0=>'未结算', 1=>'已结算', ])->dot([ 0=>'danger', 1=>'success', ]); $show->field('completed_at', '完成时间'); $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::withCount('afterSales')->where('order_id', $id); $productGrid = Grid::make($builder, function (Grid $grid) { $grid->column('name')->display(function ($value) { if ($this->gift_for_sku_id) { $value .= '-【赠品】'; } return $value; }); // $grid->column('cover')->image(50, 50); $grid->column('sell_price', '销售价格')->display(function ($value) { return bcdiv($value, 100, 2); })->prepend('¥'); $grid->column('vip_price', '会员价格')->display(function ($value) { return bcdiv($value, 100, 2); })->prepend('¥'); $grid->column('quantity'); $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('sales_value', '销售值'); $grid->column('remain_quantity'); $grid->column('product_total_amount')->display(function () { return bcdiv($this->total_amount, 100, 2); })->prepend('¥'); $grid->column('afterSalesCount', '售后情况')->display(function ($value) { return $value > 0 ? 1 : 0; })->using([ 0=>'正常', 1=>'有售后', ])->dot([ 0=>'success', 1=>'danger', ])->if(function () { return $this->afterSalesCount > 0 && Admin::user()->can('dcat.admin.after_sales.index'); }) ->then(function (Column $column) { $column->link(function ($value) { return admin_url('after-sales?order_product_id='.$this->id); }); }); $grid->disableActions(); $grid->disablePagination(); $grid->disableRefreshButton(); }); $packageBuilder = OrderPackage::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()); } public function exportShippingOrder(Request $request) { return response()->streamDownload(function () { $writer = WriterEntityFactory::createXLSXWriter(); $writer->openToBrowser('发货单'.date('Ymd').'.xlsx'); $writer->addRow(WriterEntityFactory::createRowFromArray([ '订单编号', '下单手机号', '商品编号', '商品名称', '数量', '姓名', '电话', '地址', '下单时间', '快递公司', '发货单号', '发货数量', ])); foreach (OrderModel::with('products', 'user')->needShipping()->cursor() as $order) { foreach ($order->products as $product) { if ($product->remain_quantity > 0) { $writer->addRow(WriterEntityFactory::createRowFromArray([ $order->sn, $order->user->phone, $product->sku_id, $product->name.'数量:'.$product->remain_quantity, $product->remain_quantity, $order->consignee_name, $order->consignee_telephone, $order->consignee_zone.$order->consignee_address, $order->created_at->toDateTimeString(), ])); } } }; $writer->close(); }); } }