From e06c590496815e503eb6e7d94bc91f733346fa67 Mon Sep 17 00:00:00 2001 From: Jing Li Date: Sun, 3 Apr 2022 14:42:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Http/Controllers/Auth/LoginController.php | 2 ++ .../Api/Http/Middleware/CheckUserStatus.php | 25 +++++++++++++++++++ app/Endpoint/Api/routes.php | 5 +++- app/Models/User.php | 14 +++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 app/Endpoint/Api/Http/Middleware/CheckUserStatus.php diff --git a/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php b/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php index b26e995e..e4b63c4b 100644 --- a/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php +++ b/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php @@ -38,6 +38,8 @@ class LoginController extends Controller $user = $this->{$method}($request); + $user->checkStatus(); + if ($type === 'password') { if ($user->old_password) { $user->password = $request->input('password'); diff --git a/app/Endpoint/Api/Http/Middleware/CheckUserStatus.php b/app/Endpoint/Api/Http/Middleware/CheckUserStatus.php new file mode 100644 index 00000000..017ad02f --- /dev/null +++ b/app/Endpoint/Api/Http/Middleware/CheckUserStatus.php @@ -0,0 +1,25 @@ +user()) { + $user->checkStatus(); + } + + return $next($request); + } +} diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index c4b351f4..ebb68180 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -96,7 +96,10 @@ Route::group([ Route::post('unbind-user/{provider}', [Auth\SocialiteAuthController::class, 'unbindUser']); }); - Route::middleware(['auth:api'])->group(function () { + Route::middleware([ + 'auth:api', + \App\Endpoint\Api\Http\Middleware\CheckUserStatus::class, + ])->group(function () { // 我的信息 Route::get('me', [UserController::class, 'show']); Route::put('me', [UserController::class, 'update']); diff --git a/app/Models/User.php b/app/Models/User.php index 4e481af9..c99f856e 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Exceptions\BizException; use Dcat\Admin\Traits\HasDateTimeFormatter; use Illuminate\Auth\Authenticatable; use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; @@ -523,4 +524,17 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac return $user; } + + public function checkStatus() + { + if (in_array($this->status, [static::STATUS_ACTIVE, static::STATUS_INACTIVATED])) { + return; + } elseif ($this->status === static::STATUS_FROZEN) { + abort(403, '账号已冻结'); + } elseif ($this->status === static::STATUS_DISABLED) { + abort(403, '账号已禁用'); + } + + abort(403, '账号状态异常'); + } } From 77ee89c1aac124ca3fa01602bfc51b4a72f87404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Wed, 6 Apr 2022 11:05:44 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=BB=8F=E9=94=80=E5=95=86=E4=BD=99?= =?UTF-8?q?=E9=A2=9D=E5=85=85=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Actions/Grid/DealerWalletRecharge.php | 36 +++++++++ app/Admin/Controllers/DealerController.php | 4 + app/Admin/Forms/DealerWalletRecharge.php | 77 +++++++++++++++++++ app/Enums/DealerWalletAction.php | 1 + database/seeders/AdminPermissionSeeder.php | 1 + 5 files changed, 119 insertions(+) create mode 100644 app/Admin/Actions/Grid/DealerWalletRecharge.php create mode 100644 app/Admin/Forms/DealerWalletRecharge.php diff --git a/app/Admin/Actions/Grid/DealerWalletRecharge.php b/app/Admin/Actions/Grid/DealerWalletRecharge.php new file mode 100644 index 00000000..32e16491 --- /dev/null +++ b/app/Admin/Actions/Grid/DealerWalletRecharge.php @@ -0,0 +1,36 @@ + 充值  '; + } + + /** + * @param Model|Authenticatable|HasPermissions|null $user + * + * @return bool + */ + protected function authorize($user): bool + { + return $user->can('dcat.admin.dealers.wallet_recharge'); + } + + public function render() + { + $form = DealerWalletRechargeForm::make()->payload(['id'=>$this->getKey()]); + + return Modal::make() + ->lg() + ->title($this->title()) + ->body($form) + ->button($this->title()); + } +} diff --git a/app/Admin/Controllers/DealerController.php b/app/Admin/Controllers/DealerController.php index f6b3ad39..8499a29a 100644 --- a/app/Admin/Controllers/DealerController.php +++ b/app/Admin/Controllers/DealerController.php @@ -5,6 +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\Renderable\DealerEarningSimpleTable; use App\Admin\Renderable\DealerSubordinateCard; use App\Admin\Renderable\DealerUserProductLogSimpleTable; @@ -83,6 +84,9 @@ 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 ($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/DealerWalletRecharge.php new file mode 100644 index 00000000..2b466383 --- /dev/null +++ b/app/Admin/Forms/DealerWalletRecharge.php @@ -0,0 +1,77 @@ +can('dcat.admin.dealers.wallet_recharge'); + } + + /** + * Handle the form request. + * + * @param array $input + * + * @return mixed + */ + public function handle(array $input) + { + if (($input['change_balance'] ?? 0) <= 0) { + return $this->response()->error('充值金额必须大于0'); + } + + $dealer = Dealer::findOrFail($this->payload['id']); + + try { + DB::beginTransaction(); + + (new WalletService())->changeBalance( + $dealer->user, + $input['change_balance'], + DealerWalletAction::Recharge, + '充值', + Admin::user() + ); + + DB::commit(); + } catch (Throwable $th) { + DB::rollBack(); + + report($th); + + return $this->response()->error('操作失败:'.$th->getMessage()); + } + + return $this->response() + ->success(__('admin.update_succeeded')) + ->refresh(); + } + + /** + * Build a form here. + */ + public function form() + { + $this->currency('change_balance', '充值金额')->symbol('¥')->required(); + $this->confirm('是否确认充值?', '提交后该动作无法逆转'); + } +} diff --git a/app/Enums/DealerWalletAction.php b/app/Enums/DealerWalletAction.php index 1bacc3a6..4f0f0750 100644 --- a/app/Enums/DealerWalletAction.php +++ b/app/Enums/DealerWalletAction.php @@ -16,4 +16,5 @@ enum DealerWalletAction: int { case EarningIn = 11; case EarningOut = 12; case DeliveryBillPaid = 13; + case Recharge = 14; // 充值 } diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index 4c58862d..746c3e60 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -318,6 +318,7 @@ class AdminPermissionSeeder extends Seeder 'edit_lvl'=>['name' =>'修改经销商等级'], 'bonds'=>['name' =>'填写保证金'], 'edit_product'=>['name' =>'调整库存'], + 'wallet_recharge' => ['name' => '充值'], ], ], 'dealer_products'=>[ From 61c91570aa34c60be7fbc269f8995490c6f292cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Wed, 6 Apr 2022 13:43:11 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=80=85=E6=B4=A5?= =?UTF-8?q?=E8=B4=B4=E6=98=8E=E7=BB=86=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/DealerManagerSalesLogController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Admin/Controllers/DealerManagerSalesLogController.php b/app/Admin/Controllers/DealerManagerSalesLogController.php index a8450428..5febbe09 100644 --- a/app/Admin/Controllers/DealerManagerSalesLogController.php +++ b/app/Admin/Controllers/DealerManagerSalesLogController.php @@ -65,8 +65,9 @@ class DealerManagerSalesLogController extends AdminController $grid->filter(function (Grid\Filter $filter) { $filter->panel(false); - $filter->equal('user.phone', '手机号')->width(3); - $filter->between('order_completed_at', '结算时间')->dateTime()->width(7); + $filter->equal('user.phone', '手机号')->width(4); + $filter->between('order_completed_at', '结算时间')->dateTime()->width(4); + $filter->between('created_at', '创建时间')->dateTime()->width(4); }); }); }