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'=>'备注',
],