diff --git a/app/Admin/Controllers/UserController.php b/app/Admin/Controllers/UserController.php index c37c453..39de552 100644 --- a/app/Admin/Controllers/UserController.php +++ b/app/Admin/Controllers/UserController.php @@ -43,9 +43,9 @@ class UserController extends AdminController amis()->TableColumn('last_login_at', __('admin.users.last_login_at')), amis()->TableColumn('last_ip', __('admin.users.last_login_ip')), - Operation::make()->label(__('admin.actions'))->buttons([ - $this->rowShowTypeButton('drawer', 'xl'), - ]) + // Operation::make()->label(__('admin.actions'))->buttons([ + // $this->rowShowTypeButton('drawer', 'xl'), + // ]) ]); return $this->baseList($crud); @@ -57,10 +57,47 @@ class UserController extends AdminController ]); } - public function detail(): Form + public function detail() { - return $this->baseDetail()->body([ + $form = amisMake()->form()->title('')->panelClassName('border-r border-t-0 border-b-0 border-l-0')->mode('horizontal') + ->static(true)->actions([]) + ->body([ + amis()->FieldSetControl()->title('用户信息')->body([ + amis()->TextControl('nick_name', __('admin.users.nick_name'))->required(true), + amis()->Image()->type('static-image')->name('avatar')->label( __('admin.users.avatar'))->height('80px')->width('80px')->thumbMode('cover')->enlargeAble(true)->required(true), + amis()->TextControl('phone', __('admin.users.phone'))->required(true), + amis()->DateTimeControl('created_at', __('admin.users.created_at'))->format('YYYY-MM-DD HH:mm:ss')->required(true), + amis()->DateTimeControl('bind_phone_at', __('admin.users.bind_phone_at'))->format('YYYY-MM-DD HH:mm:ss')->required(true), + + amis()->TextControl('last_ip', __('admin.users.last_login_ip'))->required(true), + amis()->DateTimeControl('last_login_at', __('admin.users.last_login_at'))->format('YYYY-MM-DD HH:mm:ss')->required(true), + ]), + ]); + return amisMake()->Grid()->columns([ + amis()->Column()->body($form)->md(4), + amis()->Column()->body([ + amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal') + ->static(true)->actions([]) + ->body([ + amis()->FieldSetControl()->title('竞猜场次')->body([ + amisMake()->CRUDTable()->affixHeader(false)->perPage(10)->loadDataOnce(true) + ->title('') + ->api() + ->columns([ + + ]), + ]) + ]) + ])->md(8), ]); } + + public function detailActions() + { + return [ + //返回 + amis()->Button()->actionType('cancel')->label(__('admin.back'))->primary() + ]; + } } \ No newline at end of file diff --git a/app/Admin/Controllers/UserGameController.php b/app/Admin/Controllers/UserGameController.php new file mode 100644 index 0000000..ecc83e7 --- /dev/null +++ b/app/Admin/Controllers/UserGameController.php @@ -0,0 +1,93 @@ +baseCRUD()->tableLayout('fixed') + ->headerToolbar([ + amis('reload')->align('right'), + amis('filter-toggler')->align('right'), + ]) + ->filter($this->baseFilter()->labelWidth('80px')->body([ + amis()->GroupControl()->mode('horizontal')->body([ + amis()->SelectControl('activity', __('admin.activities.name'))->options(Activity::sort()->pluck('name', 'id')->toArray()) + ->columnRatio(3), + amis()->TextControl('user_name', __('admin.users.nick_name')) + ->columnRatio(3) + ->placeholder(__('admin.users.nick_name')), + amis()->TextControl('user_phone', __('admin.users.phone')) + ->columnRatio(3) + ->placeholder(__('admin.users.phone')), + ]) + ])) + ->columns([ + amis()->TableColumn('activity.name', __('admin.activities.name')), + amis()->TableColumn('game.name', __('admin.activity_games.name')), + amis()->TableColumn('user.nick_name', __('admin.users.nick_name')), + amis()->TableColumn('user.phone', __('admin.users.phone'))->copyable(), + amis()->TableColumn('score', __('admin.user_games.score')), + amis()->TableColumn('is_right', __('admin.user_games.is_right'))->type('mapping')->map([ + "0"=>"-", + "1"=>"正确", + ]), + ]); + + return $this->baseList($crud); + } + + public function form($isEdit = false): Form + { + return $this->baseForm()->body([ + + ]); + } + + public function detail() + { + $form = amisMake()->form()->title('')->panelClassName('border-r border-t-0 border-b-0 border-l-0')->mode('horizontal') + ->static(true)->actions([]) + ->body([ + + ]); + + return amisMake()->Grid()->columns([ + amis()->Column()->body($form)->md(4), + amis()->Column()->body([ + ])->md(8), + ]); + } + + public function detailActions() + { + return [ + //返回 + amis()->Button()->actionType('cancel')->label(__('admin.back'))->primary() + ]; + } + + /** + * 发货 + */ + public function shipping(UserGift $userGift, Request $request) + { + $res = $this->service->shippingGift($userGift, $request->input()); + + return $this->autoResponse($res, '发货'); + } +} \ No newline at end of file diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 8861b88..7bdeb96 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -43,8 +43,10 @@ Route::group([ $router->resource('activity_gifts', \App\Admin\Controllers\ActivityGiftController::class); $router->post('user_gifts/{user_gift}/shipping', [\App\Admin\Controllers\UserGiftController::class, 'shipping']); - $router->resource('user_gifts', \App\Admin\Controllers\UserGiftController::class); + $router->resource('user_gifts', \App\Admin\Controllers\UserGiftController::class)->only(['index']); + $router->resource('user_games', \App\Admin\Controllers\UserGameController::class)->only(['index']); + //修改上传 $router->post('upload_file', [\App\Admin\Controllers\IndexController::class, 'uploadFile']); $router->post('upload_image', [\App\Admin\Controllers\IndexController::class, 'uploadImage']); diff --git a/app/Models/Filters/UserGameFilter.php b/app/Models/Filters/UserGameFilter.php new file mode 100644 index 0000000..4b606a7 --- /dev/null +++ b/app/Models/Filters/UserGameFilter.php @@ -0,0 +1,28 @@ +where('activity_id', $activityId); + } + + public function userName($userName) + { + return $this->whereHas('user', function($q) use ($userName) { + return $q->where('nick_name', 'like', '%'.$userName.'%'); + }); + } + + public function userPhone($userPhone) + { + return $this->whereHas('user', function($q) use ($userPhone) { + return $q->where('phone', 'like', $userPhone.'%'); + }); + } +} diff --git a/app/Models/UserGame.php b/app/Models/UserGame.php index 963b38b..e7744b2 100644 --- a/app/Models/UserGame.php +++ b/app/Models/UserGame.php @@ -4,10 +4,11 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use EloquentFilter\Filterable; class UserGame extends Model { - use HasFactory; + use HasFactory, Filterable; protected $fillable = [ 'user_id', @@ -16,4 +17,19 @@ class UserGame extends Model 'score', 'is_right' ]; + + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } + + public function activity() + { + return $this->belongsTo(Activity::class, 'activity_id'); + } + + public function game() + { + return $this->belongsTo(ActivityGame::class, 'game_id'); + } } diff --git a/app/Services/Admin/UserGameService.php b/app/Services/Admin/UserGameService.php new file mode 100644 index 0000000..5aa8888 --- /dev/null +++ b/app/Services/Admin/UserGameService.php @@ -0,0 +1,21 @@ + 'activity', 'icon' => 'akar-icons:star', 'url' => '/activity', 'order' => 3, 'children' => [ ['title'=> 'activites', 'icon'=> 'bx:football', 'url' => '/activities', 'order'=>1], - ['title'=> 'user_gifts', 'icon'=> 'akar-icons:gift', 'url' => '/user_gifts', 'order'=>1], + ['title'=> 'user_games', 'icon'=> 'material-symbols:list-alt-outline', 'url' => '/user_games', 'order'=>2], + ['title'=> 'user_gifts', 'icon'=> 'akar-icons:gift', 'url' => '/user_gifts', 'order'=>3], ] ], ['title' => 'web_content', 'icon' => 'ic:outline-collections-bookmark', 'url' => '', 'order'=>4, diff --git a/lang/zh_CN/admin.php b/lang/zh_CN/admin.php index 8453721..a95127c 100644 --- a/lang/zh_CN/admin.php +++ b/lang/zh_CN/admin.php @@ -362,5 +362,9 @@ return [ 'shipping_company' => '快递公司', 'shipping_number' => '快递号码', 'state' => '状态', + ], + 'user_games' => [ + 'score' => '竞猜比分', + 'is_right' => '状态', ] ]; diff --git a/lang/zh_CN/menu.php b/lang/zh_CN/menu.php index d85562a..65f53bc 100644 --- a/lang/zh_CN/menu.php +++ b/lang/zh_CN/menu.php @@ -15,6 +15,7 @@ return [ 'ads' => '广告管理', 'activity' => '活动中心', 'activites'=> '足彩竞猜', + 'user_games' => '竞猜记录', 'user_gifts' => '获奖列表', 'users' => '会员管理' ];