From d59468ee709b84850e53ad36df9dbb910c21d41e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Fri, 8 Apr 2022 10:41:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=92=A4=E9=94=80=E5=94=AE=E5=90=8E=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Actions/Show/AfterSaleRevoke.php | 33 ++++++++++ app/Admin/Controllers/AfterSaleController.php | 6 ++ app/Admin/Forms/AfterSaleRevoke.php | 63 +++++++++++++++++++ app/Models/AfterSale.php | 32 +++++----- database/seeders/AdminPermissionSeeder.php | 1 + 5 files changed, 119 insertions(+), 16 deletions(-) create mode 100644 app/Admin/Actions/Show/AfterSaleRevoke.php create mode 100644 app/Admin/Forms/AfterSaleRevoke.php diff --git a/app/Admin/Actions/Show/AfterSaleRevoke.php b/app/Admin/Actions/Show/AfterSaleRevoke.php new file mode 100644 index 00000000..b56ad8c9 --- /dev/null +++ b/app/Admin/Actions/Show/AfterSaleRevoke.php @@ -0,0 +1,33 @@ + 撤销'; + + /** + * 按钮样式定义,默认 btn btn-white waves-effect + * + * @var string + */ + protected $style = 'btn-danger'; + + public function render() + { + $form = AfterSaleRevokeForm::make()->payload(['id'=>$this->getKey()]); + + return Modal::make() + ->lg() + ->title($this->title) + ->body($form) + ->button("style}\">{$this->title}  "); + } +} diff --git a/app/Admin/Controllers/AfterSaleController.php b/app/Admin/Controllers/AfterSaleController.php index c4c66e9c..b8951156 100644 --- a/app/Admin/Controllers/AfterSaleController.php +++ b/app/Admin/Controllers/AfterSaleController.php @@ -5,6 +5,7 @@ namespace App\Admin\Controllers; use App\Admin\Actions\Grid\AfterSaleSetTag; use App\Admin\Actions\Show\AfterSaleFinance; use App\Admin\Actions\Show\AfterSaleFinanceShipping; +use App\Admin\Actions\Show\AfterSaleRevoke; use App\Admin\Actions\Show\AfterSaleShipping; use App\Admin\Actions\Show\AfterSaleShippingFail; use App\Admin\Actions\Show\AfterSaleShippingFill; @@ -221,6 +222,11 @@ class AfterSaleController extends AdminController $tools->append(new AfterSaleFinanceShipping()); } } + + if (! in_array($show->model()->state, [AfterSaleModel::STATE_FINISH, AfterSaleModel::STATE_CANCEL]) && + Admin::user()->can('dcat.admin.after_sales.revoke')) { + $tools->append(new AfterSaleRevoke()); + } }); })); }); diff --git a/app/Admin/Forms/AfterSaleRevoke.php b/app/Admin/Forms/AfterSaleRevoke.php new file mode 100644 index 00000000..4fd6efd1 --- /dev/null +++ b/app/Admin/Forms/AfterSaleRevoke.php @@ -0,0 +1,63 @@ +can('dcat.admin.after_sales.revoke'); + } + + /** + * Handle the form request. + * + * @param array $input + * + * @return mixed + */ + public function handle(array $input) + { + $afterSale = AfterSale::findOrFail($this->payload['id']); + + if ($afterSale->isCancelled()) { + return $this->response()->error('售后单已取消'); + } + + if ($afterSale->isFinished()) { + return $this->response()->error('售后单已完成'); + } + + $afterSale->update([ + 'state' => AfterSale::STATE_CANCEL, + 'remarks' => $input['remarks'] ?? null, + ]); + + return $this->response() + ->success(__('admin.update_succeeded')) + ->refresh(); + } + + /** + * Build a form here. + */ + public function form() + { + $this->text('remarks', '备注'); + $this->confirm('是否关闭售后单?', '该操作不可逆,确认后将取消售后单。'); + } +} diff --git a/app/Models/AfterSale.php b/app/Models/AfterSale.php index e3443f14..d21ea16f 100644 --- a/app/Models/AfterSale.php +++ b/app/Models/AfterSale.php @@ -146,7 +146,17 @@ class AfterSale extends Model */ public function isCancelled(): bool { - return $this->status === static::STATE_CANCEL; + return $this->state === static::STATE_CANCEL; + } + + /** + * 确认此售后单是否已完成 + * + * @return bool + */ + public function isFinished(): bool + { + return $this->state === static::STATE_FINISH; } /** @@ -180,20 +190,6 @@ class AfterSale extends Model ]); } - /** - * 取消售后订单日志 - * - * @return void - */ - protected function createCancelLog() - { - $this->logs()->create([ - 'after_sale_id' => $this->id, - 'name' => '取消申请', - 'desc' => '用户取消售后申请', - ]); - } - /** * 完成售后订单日志 * @@ -222,7 +218,11 @@ class AfterSale extends Model parent::saved(function ($afterSale) { //如果取消订单 if ($afterSale->state == self::STATE_CANCEL) { - $afterSale->createCancelLog(); + $afterSale->logs()->create([ + 'after_sale_id' => $afterSale->id, + 'name' => '取消申请', + 'desc' => $afterSale->remarks, + ]); $afterSale->orderProduct->update([ 'after_sale_state'=>0, ]); diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index e81859e4..572fa0f5 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -255,6 +255,7 @@ class AdminPermissionSeeder extends Seeder 'shipping'=>['name' =>'确认收货'], 'finances'=>['name' =>'售后打款'], 'finance'=>['name' =>'确认打款'], + 'revoke'=>['name' =>'撤销'], 'tags'=>['name' =>'标签设置'], ], ],