From 1e31bd67941a165b4b9a828efd2a2a3a0ec3deca Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Wed, 29 Dec 2021 17:00:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=83=A8=E5=88=86=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Actions/Grid/Frozen.php | 44 ++++++++++ app/Admin/Controllers/UserController.php | 52 +++++++++--- app/Admin/Forms/Frozen.php | 103 +++++++++++++++++++++++ app/Models/User.php | 5 ++ app/Models/UserInfo.php | 10 +++ database/seeders/AdminMenuSeeder.php | 5 -- resources/lang/zh_CN/user.php | 1 + 7 files changed, 201 insertions(+), 19 deletions(-) create mode 100644 app/Admin/Actions/Grid/Frozen.php create mode 100644 app/Admin/Forms/Frozen.php diff --git a/app/Admin/Actions/Grid/Frozen.php b/app/Admin/Actions/Grid/Frozen.php new file mode 100644 index 00000000..95aaee4d --- /dev/null +++ b/app/Admin/Actions/Grid/Frozen.php @@ -0,0 +1,44 @@ +'; + + public function title() + { + if ($this->title) { + return $this->title.' 资产冻结'; + } + + return '资产冻结'; + } + + /** + * @param Model|Authenticatable|HasPermissions|null $user + * + * @return bool + */ + protected function authorize($user): bool + { + return $user->can('dcat.admin.product_sku_verifies.verify'); + } + + public function render() + { + $form = FrozenForm::make()->payload(['id'=>$this->getKey()]); + return Modal::make() + ->lg() + ->title($this->title()) + ->body($form) + ->button($this->title()); + } +} diff --git a/app/Admin/Controllers/UserController.php b/app/Admin/Controllers/UserController.php index b7feaa35..f9539b9e 100644 --- a/app/Admin/Controllers/UserController.php +++ b/app/Admin/Controllers/UserController.php @@ -4,6 +4,7 @@ namespace App\Admin\Controllers; use App\Admin\Actions\Grid\DisableUser; use App\Admin\Actions\Grid\EnableUser; +use App\Admin\Actions\Grid\Frozen; use App\Admin\Repositories\User; use Dcat\Admin\Admin; use Dcat\Admin\Form; @@ -11,6 +12,7 @@ use Dcat\Admin\Grid; use Dcat\Admin\Http\Controllers\AdminController; use Dcat\Admin\Layout\Row; use Dcat\Admin\Show; +use Illuminate\Support\Facades\Request; class UserController extends AdminController { @@ -21,25 +23,42 @@ class UserController extends AdminController */ protected function grid() { - $builder = User::with(['userVip', 'userInfo', 'userVip.vip']); + $builder = User::with(['userVip', 'userInfo', 'wallet', 'balance', 'userInfo.inviterInfo.user']); return Grid::make($builder, function (Grid $grid) { - $grid->column('id')->sortable(); + // $grid->column('id')->sortable(); $grid->column('phone'); - // $grid->column('username'); - // $grid->column('password'); - $grid->column('userInfo.avatar')->image(50); - $grid->column('userVip.vip.name')->label(); - $grid->column('last_login_ip'); - $grid->column('last_login_at')->sortable(); + $grid->column('userInfo.agent_level')->display(function ($value) { + return $this->userInfo?->agent_level_name??'未知'; + })->label(); + + $grid->column('userInfo.inviterInfo.user.phone', '推荐人手机'); + $grid->column('userInfo.growth_value', '消费值'); + $grid->column('userInfo.group_sales_value', '业绩'); + + $grid->column('wallet.balance', '可提')->display(function ($value) { + $value = bcdiv($value, 100, 2); + if ($this->wallet?->is_frozen) { + $value.= "  冻结"; + } + return $value; + })->prepend('¥'); + $grid->column('balance.balance', '余额')->display(function ($value) { + $value = bcdiv($value, 100, 2); + if ($this->balance?->is_frozen) { + $value.= "  冻结"; + } + return $value; + })->prepend('¥'); + + $grid->column('created_at')->sortable(); $grid->column('register_ip'); - // $grid->column('remember_token'); $grid->column('status')->using([-1=>'冻结', 1=>'正常', 2=>'禁用']) ->dot([ -1 => '#b3b9bf', 1 => 'primary', 2 => '#b3b9bf', ]); - $grid->column('created_at'); + $grid->model()->orderBy('created_at', 'desc'); /** 操作 **/ //新增 @@ -62,7 +81,10 @@ class UserController extends AdminController } } - // todo-禁用可提,禁用余额 + // todo-冻结资产 + if (Admin::user()->can('dcat.admin.users.frozen')) { + $actions->append(new Frozen()); + } }); $grid->filter(function (Grid\Filter $filter) { @@ -95,14 +117,15 @@ class UserController extends AdminController $show->panel() ->tools(function ($tools) { $tools->disableEdit(); - // $tools->disableList(); $tools->disableDelete(); - // 显示快捷编辑按钮 - // $tools->showQuickEdit(); + // todo-修改手机号 + // todo-修改银行卡 }); })); }); $row->column(5, function () { + + // todo_粉丝列表 }); }; } @@ -125,6 +148,7 @@ class UserController extends AdminController $form->display('created_at'); $form->display('updated_at'); + $form->hidden('register_ip')->value(Request::getClientIp()); }); } } diff --git a/app/Admin/Forms/Frozen.php b/app/Admin/Forms/Frozen.php new file mode 100644 index 00000000..484927d0 --- /dev/null +++ b/app/Admin/Forms/Frozen.php @@ -0,0 +1,103 @@ +can('dcat.admin.users.frozen'); + } + + /** + * Handle the form request. + * + * @param array $input + * + * @return mixed + */ + public function handle(array $input) + { + $id = $this->payload['id'] ?? 0; + $user = User::findOrFail($id); + try { + DB::beginTransaction(); + //可提冻结 + if (in_array('wallet', $input['frozen'])) { + if (is_null($user->wallet)) { + $user->wallet()->create([ + 'is_frozen' =>1, + ]); + } else { + $user->wallet()->update([ + 'is_frozen' => 1, + ]); + } + } else {//可提解冻 + $user->wallet()->update([ + 'is_frozen' => 0, + ]); + } + //余额冻结 + if (in_array('balance', $input['frozen'])) { + if (is_null($user->balance)) { + $user->balance()->create([ + 'is_frozen' =>1, + ]); + } else { + $user->balance()->update([ + 'is_frozen' => 1, + ]); + } + } else {//余额解冻 + $user->balance()->update([ + 'is_frozen' => 0, + ]); + } + 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() + { + $id = $this->payload['id'] ?? 0; + $user = User::findOrFail($id); + $this->checkbox('frozen', '冻结')->options([ + 'wallet'=>'可提', 'balance'=>'余额', + ])->canCheckAll()->customFormat(function () use ($user) { + $v = []; + if ($user->wallet?->is_frozen) { + $v[] = 'wallet'; + } + if ($user->balance?->is_frozen) { + $v[] = 'balance'; + } + return $v; + }); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 981befa3..4be0ba33 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -335,6 +335,11 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac ] ); + //初始化钱包 + $user->wallet()->create(); + //初始化余额 + $user->balance()->create(); + return $user; } } diff --git a/app/Models/UserInfo.php b/app/Models/UserInfo.php index 044aa104..5efa3f50 100644 --- a/app/Models/UserInfo.php +++ b/app/Models/UserInfo.php @@ -131,6 +131,16 @@ class UserInfo extends Model }); } + /** + * 用户 + * + * @return void + */ + public function user() + { + return $this->belongsTo(User::class); + } + /** * 获取此用户的邀请人信息 */ diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index ca993647..eb326268 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -33,11 +33,6 @@ class AdminMenuSeeder extends Seeder 'icon' => '', 'uri' => 'users', ], - [ - 'title' => '会员等级', - 'icon' => '', - 'uri' => 'vips', - ], ], ], [ diff --git a/resources/lang/zh_CN/user.php b/resources/lang/zh_CN/user.php index d59a9363..c1f93f35 100644 --- a/resources/lang/zh_CN/user.php +++ b/resources/lang/zh_CN/user.php @@ -23,6 +23,7 @@ return [ ], 'userInfo'=>[ 'avatar' => '头像', + 'agent_level'=>'管理级别', ], 'status_remark'=>'备注', ],