Browse Source

feat: 优化用户管理

xiansin 2 years ago
parent
commit
1b0dc8c81a

+ 64 - 0
server/app/Admin/Actions/Grid/UserConsumeRecord.php

xqd
@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Admin\Actions\Grid;
+
+use App\Models\UserConsumeRecord as UserConsumeRecordModel;
+use Dcat\Admin\Actions\Response;
+use Dcat\Admin\Contracts\LazyRenderable;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Grid\GridAction;
+use Dcat\Admin\Grid\RowAction;
+use Dcat\Admin\Layout\Content;
+use Dcat\Admin\Traits\HasPermissions;
+use Dcat\Admin\Traits\LazyWidget;
+use Dcat\Admin\Widgets\Modal;
+use Illuminate\Contracts\Auth\Authenticatable;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Request;
+
+class UserConsumeRecord extends RowAction implements LazyRenderable
+{
+    use LazyWidget;
+
+    /**
+     * @return string
+     */
+	protected $title = '金币收支';
+
+
+    public function handle($a = '')
+    {
+        return $this->getKey();
+	}
+
+    public function grid()
+    {
+        $id = \request()->input('key');
+        return Grid::make(new UserConsumeRecordModel, function (Grid $grid) use ($id){
+            $grid->model()->where('user_id',$id);
+            $grid->column('id')->sortable();
+            $grid->column('type',admin_trans('user-consume-record.fields.type'))
+                ->using(config('global.consume_type'))
+                ->label(['success','info','primary']);
+            $grid->column('before', admin_trans('user-consume-record.fields.before'))
+                ->label('info');
+            $grid->column('change',admin_trans('user-consume-record.fields.change'))
+                ->label('danger');
+            $grid->column('current',admin_trans('user-consume-record.fields.current'))
+                ->label('success');
+            $grid->column('remark',admin_trans('user-consume-record.fields.remark'));
+            $grid->column('created_at','消费时间');
+
+            $grid->disableRowSelector();
+            $grid->disableActions();
+            $grid->disableToolbar();
+        });
+	}
+
+    public function render()
+    {
+        return $this->grid();
+	}
+
+
+}

+ 56 - 0
server/app/Admin/Actions/Grid/UserEpisodeRecord.php

xqd
@@ -0,0 +1,56 @@
+<?php
+
+namespace App\Admin\Actions\Grid;
+
+use App\Models\UserEpisodesRecord;
+use Dcat\Admin\Contracts\LazyRenderable;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Grid\RowAction;
+use Dcat\Admin\Traits\LazyWidget;
+
+class UserEpisodeRecord extends RowAction implements LazyRenderable
+{
+    use LazyWidget;
+
+    /**
+     * @return string
+     */
+	protected $title = '消费记录';
+
+
+    public function handle($a = '')
+    {
+        return $this->getKey();
+	}
+
+    public function grid()
+    {
+        $id = \request()->input('key');
+        return Grid::make(UserEpisodesRecord::with(['user','episodes']), function (Grid $grid) use ($id){
+            $grid->model()->where('user_id',$id);
+            $grid->column('id')->sortable();
+            $grid->column('episodes.name','短剧名称')->label('info');
+            $grid->column('list_id','第几集')->label('primary');
+            $grid->column('platform','所属平台')
+                ->display(function (){
+                    return $this->user->info->platform;
+                })
+                ->using(config('global.platform'))
+                ->label('primary','success');
+            $grid->column('price','金币')->label('danger');
+            $grid->column('created_at','消费时间');
+
+
+            $grid->disableActions();
+            $grid->disableRowSelector();
+            $grid->disableToolbar();
+        });
+	}
+
+    public function render()
+    {
+        return $this->grid();
+	}
+
+
+}

+ 66 - 0
server/app/Admin/Actions/Grid/UserRechargeRecord.php

xqd
@@ -0,0 +1,66 @@
+<?php
+
+namespace App\Admin\Actions\Grid;
+
+use App\Models\UserConsumeRecord;
+use Dcat\Admin\Actions\Response;
+use Dcat\Admin\Contracts\LazyRenderable;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Grid\GridAction;
+use Dcat\Admin\Grid\RowAction;
+use Dcat\Admin\Layout\Content;
+use Dcat\Admin\Traits\HasPermissions;
+use Dcat\Admin\Traits\LazyWidget;
+use Dcat\Admin\Widgets\Modal;
+use Illuminate\Contracts\Auth\Authenticatable;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Request;
+use \App\Models\UserRechargeRecord as UserRechargeRecordModel;
+
+class UserRechargeRecord extends RowAction implements LazyRenderable
+{
+    use LazyWidget;
+
+    /**
+     * @return string
+     */
+	protected $title = '充值记录';
+
+
+    public function handle($a = '')
+    {
+        return $this->getKey();
+	}
+
+    public function grid()
+    {
+        $id = \request()->input('key');
+        return Grid::make(UserRechargeRecordModel::with(['user','combo']), function (Grid $grid) use ($id){
+            $grid->model()->where('user_id',$id);
+            $grid->column('id')->sortable();
+
+            $grid->column('pay_id','订单号');
+            $grid->column('combo.name','充值套餐');
+            $grid->column('price',admin_trans('user-recharge-record.fields.price'))->label('danger');
+            $grid->column('platform','所属平台')->display(function (){
+                return $this->user->info->platform;
+            })->using(config('global.platform'))->label('primary','success');
+            $grid->column('gold',admin_trans('user-recharge-record.fields.gold'))->label('info');
+            $grid->column('gift',admin_trans('user-recharge-record.fields.gift'))->label('primary');
+            //$grid->column('pay_id');
+            $grid->column('created_at','充值时间')->sortable();
+
+
+            $grid->disableRowSelector();
+            $grid->disableActions();
+            $grid->disableToolbar();
+        });
+	}
+
+    public function render()
+    {
+        return $this->grid();
+	}
+
+
+}

+ 14 - 4
server/app/Admin/Controllers/UserController.php

xqd xqd xqd
@@ -2,12 +2,17 @@
 
 namespace App\Admin\Controllers;
 
-use App\Admin\Actions\Grid\UserConsume;
+use App\Admin\Actions\Grid\UserConsumeRecord as UserConsumeRecordGrid;
+use App\Admin\Actions\Grid\UserEpisodeRecord  as UserEpisodeRecordGrid;
+use App\Admin\Actions\Grid\UserRechargeRecord as UserRechargeRecordGrid;
+use App\Admin\Actions\Grid\UserRechargeRecord;
 use App\Models\User;
+use App\Models\UserConsumeRecord;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
 use Dcat\Admin\Http\Controllers\AdminController;
+use Dcat\Admin\Widgets\Modal;
 
 class UserController extends AdminController
 {
@@ -27,15 +32,19 @@ class UserController extends AdminController
                 $str .= '<img data-action="preview-img" src="' . $this->avatar . '" style="height:50px;width:50px;cursor:pointer;margin-right:10px;" class="img img-thumbnail">';
                 $str .= '<div>';
                 $str .= '<p style="margin-bottom: 5px">' . $this->nickname . '</p>';
-                $str .= '<p style="margin-bottom: 0px">' . $this->mobile . '</p>';
                 $str .= "</div>";
                 $str .= "</div>";
                 return $str;
             });
+            $grid->column('mobile','手机号');
             $grid->column('info.is_vip','是否会员')->using([0 => '否', 1 => '是'])->label(['gray', 'primary']);
-            $grid->column('info.integral','金币余额');
+            $grid->column('info.integral','订单数量');
+            $grid->column('episode','消费记录')->display('消费记录')->modal(new UserEpisodeRecordGrid());
+            $grid->column('recharge','充值记录')->display('充值记录')->modal(new UserRechargeRecordGrid());
+            $grid->column('info.integral','现有金币数')->label('success');
+            $grid->column('consumes','金币交易记录')->display('金币交易记录')->modal(new UserConsumeRecordGrid());
             $grid->column('info.platform','注册平台')->using([1 => '抖音', 2 => '快手'])->label(['gray', 'primary']);;
-            $grid->column('created_at','注册时间');
+            $grid->column('created_at','加入时间');
 
 
             $grid->filter(function (Grid\Filter $filter) {
@@ -95,6 +104,7 @@ class UserController extends AdminController
             $form->text('nickname')->disable();
             $form->image('avatar')->width(200)->disable();
             $form->text('open_id','openid')->disable();
+            $form->switch('status','是否拉黑')->default(0);
 
             $form->number('info.integral','金币');
 

+ 21 - 0
server/app/Models/User.php

xqd xqd
@@ -49,6 +49,12 @@ use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;
  * @property \Illuminate\Support\Carbon|null $deleted_at
  * @property-read \App\Models\UserInfo|null $info
  * @method static \Illuminate\Database\Eloquent\Builder|User whereDeletedAt($value)
+ * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\UserConsumeRecord[] $consumeRecords
+ * @property-read int|null $consume_records_count
+ * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\UserRechargeRecord[] $rechargeRecords
+ * @property-read int|null $recharge_records_count
+ * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\UserVipRecord[] $vipRecords
+ * @property-read int|null $vip_records_count
  */
 class User extends Authenticatable implements JWTSubject
 {
@@ -109,4 +115,19 @@ class User extends Authenticatable implements JWTSubject
     {
         return $this->belongsTo(UserInfo::class,'id','user_id');
     }
+
+    public function consumeRecords()
+    {
+        return $this->hasMany(UserConsumeRecord::class,'user_id','id');
+    }
+
+    public function rechargeRecords()
+    {
+        return $this->hasMany(UserRechargeRecord::class,'user_id','id');
+    }
+
+    public function vipRecords()
+    {
+        return $this->hasMany(UserVipRecord::class,'user_id','id');
+    }
 }

+ 1 - 0
server/resources/lang/zh/user-consume-record.php

xqd
@@ -8,6 +8,7 @@ return [
     ],
     'fields' => [
         'user_id' => 'user_id',
+        'type' => '类型',
         'before' => '消费后记录',
         'change' => '消费金币',
         'current' => '消费后金币',