diff --git a/app/Admin/Actions/Grid/DealerWalletRecharge.php b/app/Admin/Actions/Grid/DealerWalletChange.php similarity index 58% rename from app/Admin/Actions/Grid/DealerWalletRecharge.php rename to app/Admin/Actions/Grid/DealerWalletChange.php index 32e16491..0ea43526 100644 --- a/app/Admin/Actions/Grid/DealerWalletRecharge.php +++ b/app/Admin/Actions/Grid/DealerWalletChange.php @@ -2,15 +2,15 @@ namespace App\Admin\Actions\Grid; -use App\Admin\Forms\DealerWalletRecharge as DealerWalletRechargeForm; +use App\Admin\Forms\DealerWalletChange as DealerWalletChangeForm; use Dcat\Admin\Grid\RowAction; use Dcat\Admin\Widgets\Modal; -class DealerWalletRecharge extends RowAction +class DealerWalletChange extends RowAction { public function title() { - return ' 充值  '; + return ' 变更余额  '; } /** @@ -20,12 +20,12 @@ class DealerWalletRecharge extends RowAction */ protected function authorize($user): bool { - return $user->can('dcat.admin.dealers.wallet_recharge'); + return $user->can('dcat.admin.dealers.wallet_change'); } public function render() { - $form = DealerWalletRechargeForm::make()->payload(['id'=>$this->getKey()]); + $form = DealerWalletChangeForm::make()->payload(['id'=>$this->getKey()]); return Modal::make() ->lg() diff --git a/app/Admin/Controllers/DealerController.php b/app/Admin/Controllers/DealerController.php index eaaff19a..6ad4341a 100644 --- a/app/Admin/Controllers/DealerController.php +++ b/app/Admin/Controllers/DealerController.php @@ -5,7 +5,7 @@ namespace App\Admin\Controllers; use App\Admin\Actions\Grid\DealerBonds; use App\Admin\Actions\Grid\DealerEditLvl; use App\Admin\Actions\Grid\DealerEditProduct; -use App\Admin\Actions\Grid\DealerWalletRecharge; +use App\Admin\Actions\Grid\DealerWalletChange; use App\Admin\Renderable\DealerEarningSimpleTable; use App\Admin\Renderable\DealerSubordinateCard; use App\Admin\Renderable\DealerUserProductLogSimpleTable; @@ -84,8 +84,8 @@ class DealerController extends AdminController if (Admin::user()->can('dcat.admin.dealers.edit_lvl')) { $actions->append(new DealerEditLvl()); } - if (Admin::user()->can('dcat.admin.dealers.wallet_recharge')) { - $actions->append(new DealerWalletRecharge()); + if (Admin::user()->can('dcat.admin.dealers.wallet_change')) { + $actions->append(new DealerWalletChange()); } if ($actions->row->lvl->value >= DealerLvl::Special->value && Admin::user()->can('dcat.admin.dealers.bonds')) { $actions->append(new DealerBonds()); diff --git a/app/Admin/Forms/DealerWalletRecharge.php b/app/Admin/Forms/DealerWalletChange.php similarity index 57% rename from app/Admin/Forms/DealerWalletRecharge.php rename to app/Admin/Forms/DealerWalletChange.php index 2b466383..5d3080ee 100644 --- a/app/Admin/Forms/DealerWalletRecharge.php +++ b/app/Admin/Forms/DealerWalletChange.php @@ -12,7 +12,7 @@ use Dcat\Admin\Widgets\Form; use Illuminate\Support\Facades\DB; use Throwable; -class DealerWalletRecharge extends Form implements LazyRenderable +class DealerWalletChange extends Form implements LazyRenderable { use LazyWidget; @@ -23,7 +23,7 @@ class DealerWalletRecharge extends Form implements LazyRenderable */ protected function authorize($user): bool { - return $user->can('dcat.admin.dealers.wallet_recharge'); + return $user->can('dcat.admin.dealers.wallet_change'); } /** @@ -35,20 +35,25 @@ class DealerWalletRecharge extends Form implements LazyRenderable */ public function handle(array $input) { - if (($input['change_balance'] ?? 0) <= 0) { - return $this->response()->error('充值金额必须大于0'); + if (bccomp($input['change_balance'], '0', 2) === -1) { + return $this->response()->error('金额必须大于0'); } $dealer = Dealer::findOrFail($this->payload['id']); + $action = DealerWalletAction::from($input['action']); + try { DB::beginTransaction(); (new WalletService())->changeBalance( $dealer->user, - $input['change_balance'], - DealerWalletAction::Recharge, - '充值', + match ($action) { + DealerWalletAction::Recharge => bcmul($input['change_balance'], '1', 2), + DealerWalletAction::Deduct => bcmul($input['change_balance'], '-1', 2), + }, + $action, + $input['remarks'], Admin::user() ); @@ -71,7 +76,15 @@ class DealerWalletRecharge extends Form implements LazyRenderable */ public function form() { - $this->currency('change_balance', '充值金额')->symbol('¥')->required(); + $this->radio('action', '操作') + ->options([ + DealerWalletAction::Recharge->value => '充值', + DealerWalletAction::Deduct->value => '扣除', + ]) + ->default(DealerWalletAction::Recharge->value) + ->required(); + $this->currency('change_balance', '金额')->symbol('¥')->required(); + $this->textarea('remarks', '备注')->required(); $this->confirm('是否确认充值?', '提交后该动作无法逆转'); } } diff --git a/app/Enums/DealerWalletAction.php b/app/Enums/DealerWalletAction.php index 4f0f0750..7cd5d19b 100644 --- a/app/Enums/DealerWalletAction.php +++ b/app/Enums/DealerWalletAction.php @@ -17,4 +17,5 @@ enum DealerWalletAction: int { case EarningOut = 12; case DeliveryBillPaid = 13; case Recharge = 14; // 充值 + case Deduct = 15; // 扣除 } diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index 572fa0f5..4fe1a3e6 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -319,7 +319,7 @@ class AdminPermissionSeeder extends Seeder 'edit_lvl'=>['name' =>'修改经销商等级'], 'bonds'=>['name' =>'填写保证金'], 'edit_product'=>['name' =>'调整库存'], - 'wallet_recharge' => ['name' => '充值'], + 'wallet_change' => ['name' => '变更余额'], ], ], 'dealer_products'=>[