model()->where('order_product_id', $orderProductId); } $grid->column('id')->sortable()->if(function () { return Admin::user()->can('dcat.admin.after_sales.show'); })->then(function (Column $column) { $column->link(function ($value) { return admin_route('after_sales.show', ['after_sale' => $value]); }); }); $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('user.userInfo.nickname'); $grid->column('order.sn')->if(function () { return Admin::user()->can('dcat.admin.orders.show'); }) ->then(function (Column $column) { $column->link(function ($value) { return admin_url('orders/'.$this->order_id); }); }) ->else(function (Column $column) { $column->copyable(); }); $grid->column('orderProduct.name'); $grid->column('num'); $grid->column('amount')->display(function ($value) { if (in_array($this->type, [AfterSaleModel::TYPE_CHANGE, AfterSaleModel::TYPE_FILL])) { return '0.00'; } return bcdiv($value, 100, 2); })->prepend('¥'); $grid->column('type')->using([ AfterSaleModel::TYPE_REFUND_AND_RETURN => '退款退货', AfterSaleModel::TYPE_REFUND => '退款', AfterSaleModel::TYPE_CHANGE => '换货', AfterSaleModel::TYPE_FILL => '漏发', ])->label(); $grid->column('state')->using(AfterSaleModel::$stateText)->dot([ AfterSaleModel::STATE_APPLY=>'warning', AfterSaleModel::STATE_VERIFY=>'danger', AfterSaleModel::STATE_AGREE=>'warning', AfterSaleModel::STATE_SHIPPING=>'primary', AfterSaleModel::STATE_FINANCE=>'primary', AfterSaleModel::STATE_FINISH=>'success', ]); // $grid->column('remarks'); // $grid->column('tracking_number'); $grid->column('created_at'); $grid->column('updated_at')->sortable(); $grid->model()->orderBy('created_at', 'desc'); $grid->actions(function (Grid\Displayers\Actions $actions) { if (Admin::user()->can('dcat.admin.after_sales.show')) { $actions->disableView(false); } if (Admin::user()->can('dcat.admin.after_sales.tags')) { $actions->append(new AfterSaleSetTag()); } }); $grid->setResource('after-sales'); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->equal('state')->select(AfterSaleModel::$stateText)->width(3); $filter->equal('user.phone')->width(3); $filter->equal('order.sn')->width(3); $filter->equal('sn')->width(3); $filter->where('tags', function ($query) { $query->whereHas('tags', function ($q) { $q->whereIn('tags.id', $this->input); }); }, '标签')->multipleSelect(Tag::AfterSaleTag()->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(4, function ($column) use ($id) { $builder = AfterSale::with(['user', 'user.userInfo', 'order', 'orderProduct', 'tags']); $column->row(Show::make($id, $builder, function (Show $show) { $show->field('id'); $show->field('sn'); $show->field('order.sn', '售后订单')->unescape()->as(function ($value) { if (Admin::user()->can('dcat.admin.orders.show')) { return ''.$value.''; } return $value; }); $show->field('order_product.name', '售后商品')->as(function ($value) { return $value.'*'. $this->num; }); // $show->field('num'); if (in_array($show->model()->type, [AfterSaleModel::TYPE_REFUND_AND_RETURN, AfterSaleModel::TYPE_REFUND])) { $show->field('amount', '售后金额')->as(function ($amount) { return '¥'.bcdiv($amount, 100, 2); }); } $show->field('type')->using([ AfterSaleModel::TYPE_REFUND_AND_RETURN => '退款退货', AfterSaleModel::TYPE_REFUND => '退款', AfterSaleModel::TYPE_CHANGE => '换货', AfterSaleModel::TYPE_FILL => '漏发', ])->label(); $show->field('state')->using(AfterSaleModel::$stateText)->dot([ AfterSaleModel::STATE_APPLY=>'warning', AfterSaleModel::STATE_VERIFY=>'danger', AfterSaleModel::STATE_AGREE=>'warning', AfterSaleModel::STATE_SHIPPING=>'primary', AfterSaleModel::STATE_FINANCE=>'primary', AfterSaleModel::STATE_FINISH=>'success', AfterSaleModel::STATE_CANCEL=>'#b3b9bf', ]); $show->field('user.user_info.nickname', '下单用户'); $show->field('user.phone'); if (in_array($show->model()->type, [AfterSaleModel::TYPE_REFUND_AND_RETURN, AfterSaleModel::TYPE_CHANGE])) { $show->field('tracking_number'); } $show->field('tags')->as(function () { return $this->tags->pluck('name'); })->label(); if (in_array($show->model()->type, [AfterSaleModel::TYPE_REFUND_AND_RETURN, AfterSaleModel::TYPE_REFUND, AfterSaleModel::TYPE_CHANGE])) { $show->field('sales_value', '销售值'); } // $show->field('order_product.cover')->image(); $show->field('created_at'); $show->field('updated_at'); $show->panel() ->tools(function (Show\Tools $tools) use ($show) { $tools->disableEdit(); $tools->disableDelete(); if ($show->model()->state == AfterSaleModel::STATE_VERIFY) { $tools->append(new AfterSaleVerify()); } if ($show->model()->state == AfterSaleModel::STATE_SHIPPING) { //拒绝确认收货 $tools->append(new AfterSaleShippingFail()); if ($show->model()->type == AfterSaleModel::TYPE_FILL) { //同意确认收货 $tools->append(new AfterSaleShippingFill()); } else { //同意确认收货 $tools->append(new AfterSaleShipping()); } } if ($show->model()->state == AfterSaleModel::STATE_FINANCE) { if (in_array($show->model()->type, [AfterSaleModel::TYPE_REFUND_AND_RETURN, AfterSaleModel::TYPE_REFUND])) { $tools->append(new AfterSaleFinance()); } elseif (in_array($show->model()->type, [AfterSaleModel::TYPE_CHANGE])) { $tools->append(new AfterSaleFinanceShipping()); } } }); })); }); $row->column(8, function ($column) use ($id) { $afterSale = AfterSaleModel::findOrFail($id); $builder = AfterSaleModel::with('orderProduct')->where('order_product_id', $afterSale?->order_product_id)->where('id', '<>', $id); $column->row(Box::make('相关售后', Grid::make($builder, function (Grid $grid) { $grid->column('orderProduct.name'); $grid->column('num'); $grid->column('amount')->display(function ($value) { if (in_array($this->type, [AfterSaleModel::TYPE_CHANGE, AfterSaleModel::TYPE_FILL])) { return '0.00'; } return bcdiv($value, 100, 2); })->prepend('¥'); $grid->column('type')->using([ AfterSaleModel::TYPE_REFUND_AND_RETURN => '退款退货', AfterSaleModel::TYPE_REFUND => '退款', AfterSaleModel::TYPE_CHANGE => '换货', AfterSaleModel::TYPE_FILL => '漏发', ])->label(); $grid->column('state')->using(AfterSaleModel::$stateText)->dot([ AfterSaleModel::STATE_APPLY=>'warning', AfterSaleModel::STATE_VERIFY=>'danger', AfterSaleModel::STATE_AGREE=>'warning', AfterSaleModel::STATE_SHIPPING=>'primary', AfterSaleModel::STATE_FINANCE=>'primary', AfterSaleModel::STATE_FINISH=>'success', ]); $grid->column('created_at'); $grid->column('id', '操作')->display(function () { return '查看'; })->link(function ($value) { return admin_route('after_sales.show', ['after_sale' => $this->id]); }); // $grid->column('remarks'); // $grid->column('tracking_number'); $grid->disableCreateButton(); $grid->disableActions(); $grid->disablePagination(); $grid->disableRefreshButton(); }))); $logs = AfterSaleLog::where('after_sale_id', $id)->latest('id')->get(); $title = '售后明细'; $column->row(admin_view('admin.show.timeline', compact('title', 'logs'))); }); }; } /** * Make a form builder. * * @return Form */ protected function form() { return Form::make(new AfterSale(), function (Form $form) { $form->display('id'); $form->text('user_id'); $form->text('order_id'); $form->text('sn'); $form->text('order_product_id'); $form->text('num'); $form->text('amount'); $form->text('type'); $form->text('state'); $form->text('description'); $form->text('images'); $form->text('remarks'); $form->text('tracking_number'); $form->display('created_at'); $form->display('updated_at'); }); } }