完善后台

main
liutk 2024-05-20 11:38:21 +08:00
parent 831af90170
commit 1788620e8f
9 changed files with 211 additions and 8 deletions

View File

@ -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()
];
}
}

View File

@ -0,0 +1,93 @@
<?php
namespace App\Admin\Controllers;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Operation;
use Slowlyo\OwlAdmin\Renderers\Dialog;
use Slowlyo\OwlAdmin\Renderers\DialogAction;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use App\Services\Admin\UserGameService;
use App\Models\Activity;
use Illuminate\Http\Request;
class UserGameController extends AdminController
{
protected string $serviceName = UserGameService::class;
public function list(): Page
{
$crud = $this->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"=>"<span class='label label-danger'>正确</span>",
]),
]);
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, '发货');
}
}

View File

@ -43,7 +43,9 @@ 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']);

View File

@ -0,0 +1,28 @@
<?php
namespace App\Models\Filters;
use Illuminate\Support\Arr;
use EloquentFilter\ModelFilter;
class UserGameFilter extends ModelFilter
{
public function activityId($activity)
{
return $this->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.'%');
});
}
}

View File

@ -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');
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace App\Services\Admin;
use App\Models\UserGame;
use App\Models\Filters\UserGameFilter;
use Illuminate\Support\Arr;
/**
* @method UserGame getModel()
* @method UserGame|\Illuminate\Database\Query\Builder query()
*/
class UserGameService extends BaseService
{
protected string $modelName = UserGame::class;
protected string $modelFilterName = UserGameFilter::class;
protected array $withRelationships = ['user', 'game', 'activity'];
}

View File

@ -25,7 +25,8 @@ class AdminMenuSeeder extends Seeder
['title' => '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,

View File

@ -362,5 +362,9 @@ return [
'shipping_company' => '快递公司',
'shipping_number' => '快递号码',
'state' => '状态',
],
'user_games' => [
'score' => '竞猜比分',
'is_right' => '状态',
]
];

View File

@ -15,6 +15,7 @@ return [
'ads' => '广告管理',
'activity' => '活动中心',
'activites'=> '足彩竞猜',
'user_games' => '竞猜记录',
'user_gifts' => '获奖列表',
'users' => '会员管理'
];