6
0
Fork 0

撤销售后单

release
李静 2022-04-08 10:41:53 +08:00
parent 17caae4370
commit d59468ee70
5 changed files with 119 additions and 16 deletions

View File

@ -0,0 +1,33 @@
<?php
namespace App\Admin\Actions\Show;
use App\Admin\Forms\AfterSaleRevoke as AfterSaleRevokeForm;
use Dcat\Admin\Show\AbstractTool;
use Dcat\Admin\Widgets\Modal;
class AfterSaleRevoke extends AbstractTool
{
/**
* @return string
*/
protected $title = '<i class="feather icon-x-circle"></i>&nbsp;撤销';
/**
* 按钮样式定义,默认 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("<a href=\"javascript:void(0)\" class=\"btn btn-sm {$this->style}\">{$this->title}</a>&nbsp;&nbsp;");
}
}

View File

@ -5,6 +5,7 @@ namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\AfterSaleSetTag; use App\Admin\Actions\Grid\AfterSaleSetTag;
use App\Admin\Actions\Show\AfterSaleFinance; use App\Admin\Actions\Show\AfterSaleFinance;
use App\Admin\Actions\Show\AfterSaleFinanceShipping; use App\Admin\Actions\Show\AfterSaleFinanceShipping;
use App\Admin\Actions\Show\AfterSaleRevoke;
use App\Admin\Actions\Show\AfterSaleShipping; use App\Admin\Actions\Show\AfterSaleShipping;
use App\Admin\Actions\Show\AfterSaleShippingFail; use App\Admin\Actions\Show\AfterSaleShippingFail;
use App\Admin\Actions\Show\AfterSaleShippingFill; use App\Admin\Actions\Show\AfterSaleShippingFill;
@ -221,6 +222,11 @@ class AfterSaleController extends AdminController
$tools->append(new AfterSaleFinanceShipping()); $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());
}
}); });
})); }));
}); });

View File

@ -0,0 +1,63 @@
<?php
namespace App\Admin\Forms;
use App\Models\AfterSale;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Dcat\Admin\Widgets\Form;
class AfterSaleRevoke extends Form implements LazyRenderable
{
use LazyWidget;
/**
* 权限判断,如不需要可以删除此方法
*
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return $user->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('是否关闭售后单?', '该操作不可逆,确认后将取消售后单。');
}
}

View File

@ -146,7 +146,17 @@ class AfterSale extends Model
*/ */
public function isCancelled(): bool 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) { parent::saved(function ($afterSale) {
//如果取消订单 //如果取消订单
if ($afterSale->state == self::STATE_CANCEL) { if ($afterSale->state == self::STATE_CANCEL) {
$afterSale->createCancelLog(); $afterSale->logs()->create([
'after_sale_id' => $afterSale->id,
'name' => '取消申请',
'desc' => $afterSale->remarks,
]);
$afterSale->orderProduct->update([ $afterSale->orderProduct->update([
'after_sale_state'=>0, 'after_sale_state'=>0,
]); ]);

View File

@ -255,6 +255,7 @@ class AdminPermissionSeeder extends Seeder
'shipping'=>['name' =>'确认收货'], 'shipping'=>['name' =>'确认收货'],
'finances'=>['name' =>'售后打款'], 'finances'=>['name' =>'售后打款'],
'finance'=>['name' =>'确认打款'], 'finance'=>['name' =>'确认打款'],
'revoke'=>['name' =>'撤销'],
'tags'=>['name' =>'标签设置'], 'tags'=>['name' =>'标签设置'],
], ],
], ],