diff --git a/app/Admin/Controllers/ActivityController.php b/app/Admin/Controllers/ActivityController.php index 2162b59..fd4adee 100644 --- a/app/Admin/Controllers/ActivityController.php +++ b/app/Admin/Controllers/ActivityController.php @@ -6,10 +6,13 @@ 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\ActivityService; use App\Traits\CustomActionTrait; use App\Admin\Components; +use App\Enums\Score; class ActivityController extends AdminController { @@ -44,7 +47,7 @@ class ActivityController extends AdminController //发布活动-todo //结算活动(参与时间结束后,且最后一场竞猜结束,点击结算则发送奖品)-todo $this->rowShowTypeButton('drawer', 'xl'),//活动详情-todo-//竞猜赛程//活动奖品 - $this->rowEditTypeButton('drawer', 'xl'), + $this->rowEditTypeButton('drawer', 'lg'), $this->rowDeleteButton()->visibleOn('${state === 0}'), ]) ]); @@ -57,15 +60,118 @@ class ActivityController extends AdminController return $this->baseForm()->body([ amis()->TextControl('name', __('admin.activities.name'))->required(true), Components::make()->cropImageControl('cover', __('admin.activities.cover'), 1.5)->required(true), - amis()->DateRangeControl('activity_at', __('admin.activities.activity_at'))->clearable(false)->format('YYYY-MM-DD HH:mm:ss')->required(true), + amis()->DateRangeControl('start_at', __('admin.activities.activity_at'))->extraName('end_at')->clearable(false)->format('YYYY-MM-DD HH:mm:ss')->required(true), amis()->TextareaControl('rules', __('admin.activities.rules')) ]); } - public function detail(): Form - { - return $this->baseDetail()->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([ + amis()->FieldSetControl()->title('活动信息')->body([ + amis()->TextControl('name', __('admin.activities.name'))->required(true), + amis()->Image()->type('static-image')->name('cover')->label( __('admin.activities.cover'))->height('80px')->width('80px')->thumbMode('cover')->enlargeAble(true)->required(true), + amis()->DateRangeControl('start_at', __('admin.activities.activity_at'))->extraName('end_at')->clearable(false)->format('YYYY-MM-DD HH:mm:ss')->required(true), + amis()->TextareaControl('rules', __('admin.activities.rules')) + ]), + ]); + + 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) + ->headerToolbar([ + DialogAction::make()->className('absolute top-3 right-4')->label(__('admin.create'))->dialog( + Dialog::make()->title('新增竞猜场次')->body([ + amisMake()->form()->title('') + ->api([ + 'method'=>'post', + 'url'=>admin_url('activity_games'), + "data" => [ + 'activity_id'=>'${activity_id}', + 'name'=>'${game_name}', + 'home_field'=>'${home_field}', + 'home_logo'=>'${home_logo}', + 'away'=>'${away}', + 'away_logo'=>'${away_logo}', + 'game_at'=>'${game_at}', + 'mark'=>'${mark}', + ], + ]) + ->body([ + amis()->TextControl('activity_id', '活动ID')->hidden(true)->value('${id}'), + amis()->TextControl('game_name', __('admin.activity_games.name'))->required(true), + amis()->GroupControl()->mode('horizontal')->body([ + amis()->TextControl('home_field', __('admin.activity_games.home_field'))->required(), + Components::make()->cropImageControl('home_logo', __('admin.activity_games.home_logo'))->required(true), + ]), + amis()->GroupControl()->mode('horizontal')->body([ + amis()->TextControl('away', __('admin.activity_games.away'))->required(), + Components::make()->cropImageControl('away_logo', __('admin.activity_games.away_logo'))->required(true), + ]), + amis()->DateTimeControl('game_at', __('admin.activity_games.game_at'))->format('YYYY-MM-DD HH:mm:ss')->required(true), + Components::make()->sortControl('mark', __('admin.activity_games.mark'))->required(true), + ]) + ])->size('lg') + ) + ]) + ->title('') + ->api(admin_url('activity_games?_action=getData&state=1&activity_id=${id}')) + ->columns([ + amis()->TableColumn('name', __('admin.activity_games.name')), + amis()->TableColumn('home_field', __('admin.activity_games.home_field')), + amis()->TableColumn('home_logo', __('admin.activity_games.home_logo'))->type('image')->height('30px')->width('30px'), + amis()->TableColumn('away', __('admin.activity_games.away')), + amis()->TableColumn('away_logo', __('admin.activity_games.away_logo'))->type('image')->height('30px')->width('30px'), + amis()->TableColumn('game_at', __('admin.activity_games.game_at')), + amis()->TableColumn('mark', __('admin.activity_games.mark')), + amis()->TableColumn('score', __('admin.activity_games.score')), + amisMake()->Operation()->label(__('admin.actions'))->buttons([ + // amisMake()->AjaxAction()->label('发布')->level('link') + // ->actionType('ajax') + // ->confirmText(__('admin.confirm_delete')) + // ->api([ + // 'method' => 'delete', + // 'url' => admin_url('activity_games/${id}') + // ]) + amisMake()->AjaxAction()->label('删除')->level('link') + ->actionType('ajax') + ->confirmText(__('admin.confirm_delete')) + ->api([ + 'method' => 'delete', + 'url' => admin_url('activity_games/${id}') + ])->visibleOn('${state} == 0'), + amisMake()->DialogAction()->label('结果') + ->level('link') + ->dialog(Dialog::make()->title('比赛结果')->body([ + amisMake()->form()->title('') + ->api('put:'.admin_url('/activity_games/${id}')) + ->body([ + amis()->TextControl('id', '场次ID')->hidden(true)->value('${id}'), + amis()->TextControl('state', '状态')->hidden(true)->value(2), + amis()->SelectControl('score', __('admin.activity_games.score')) + ->options(Score::options()), + ]) + ]))->visibleOn('${state} == 1'), + ]), + ]) + ]), + ]) + ])->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/ArticleController.php b/app/Admin/Controllers/ArticleController.php index 2983bcb..387ffc1 100644 --- a/app/Admin/Controllers/ArticleController.php +++ b/app/Admin/Controllers/ArticleController.php @@ -15,6 +15,7 @@ use App\Traits\CustomActionTrait; class ArticleController extends AdminController { use CustomActionTrait; + protected string $serviceName = ArticleService::class; public function list():Page diff --git a/app/Admin/routes.php b/app/Admin/routes.php index a8d7bee..69c979c 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -36,6 +36,8 @@ Route::group([ $router->resource('activities', \App\Admin\Controllers\ActivityController::class); + $router->resource('activity_games', \App\Admin\Controllers\ActivityGameController::class); + //修改上传 $router->post('upload_file', [\App\Admin\Controllers\IndexController::class, 'uploadFile']); $router->post('upload_image', [\App\Admin\Controllers\IndexController::class, 'uploadImage']); diff --git a/app/Enums/Score.php b/app/Enums/Score.php index ddfd66c..8d653a4 100644 --- a/app/Enums/Score.php +++ b/app/Enums/Score.php @@ -40,7 +40,7 @@ enum Score: string { $options = []; foreach(self::cases() as $score){ - $options[$score->name] = $score->value; + $options[$score->value] = $score->value; } return $options; } diff --git a/app/Models/ActivityGame.php b/app/Models/ActivityGame.php index baf1963..8dd4ed7 100644 --- a/app/Models/ActivityGame.php +++ b/app/Models/ActivityGame.php @@ -4,8 +4,14 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use EloquentFilter\Filterable; class ActivityGame extends Model { - use HasFactory; + use HasFactory,Filterable; + + public function scopeSort($q) + { + + } } diff --git a/app/Models/Filters/ActivityFilter.php b/app/Models/Filters/ActivityFilter.php index 1c7d660..e914580 100644 --- a/app/Models/Filters/ActivityFilter.php +++ b/app/Models/Filters/ActivityFilter.php @@ -15,7 +15,7 @@ class ActivityFilter extends ModelFilter return $this->where('id', $id); } /** - * 昵称 + * 活动名称 */ public function name($name) { diff --git a/app/Services/Admin/ActivityService.php b/app/Services/Admin/ActivityService.php index 4bc1c9e..fe6a3c8 100644 --- a/app/Services/Admin/ActivityService.php +++ b/app/Services/Admin/ActivityService.php @@ -26,10 +26,6 @@ class ActivityService extends BaseService $columns = $this->getTableColumns(); $model = $this->getModel(); - $activityAt = explode(',', Arr::get($data, 'activity_at')); - $data['start_at'] = Arr::get($activityAt, 0) ?? null; - $data['end_at'] = Arr::get($activityAt, 1) ?? null; - $data['cover'] = $this->saveImage('cover', 'activities/cover')[0] ?? ''; foreach ($data as $k => $v) { @@ -47,11 +43,6 @@ class ActivityService extends BaseService { $columns = $this->getTableColumns(); $model = $this->query()->whereKey($primaryKey)->first(); - if(isset($data['activity_at'])){ - $activityAt = explode(',', Arr::get($data, 'activity_at')); - $data['start_at'] = Arr::get($activityAt, 0) ?? null; - $data['end_at'] = Arr::get($activityAt, 1) ?? null; - } if(isset($data['cover'])){ $data['cover'] = $this->saveImage('cover', 'activities/cover')[0] ?? ''; diff --git a/lang/zh_CN/admin.php b/lang/zh_CN/admin.php index 209a881..d749229 100644 --- a/lang/zh_CN/admin.php +++ b/lang/zh_CN/admin.php @@ -322,5 +322,15 @@ return [ 'end_at' => '结束时间', 'rules' => '规则内容', 'cover' => '活动封面' + ], + 'activity_games' => [ + 'name' => '场次名称', + 'home_field' => '主场', + 'home_logo' => '主场logo', + 'away' => '客场', + 'away_logo' => '客场logo', + 'game_at' => '比赛时间', + 'mark' => '分数', + 'score' => '比赛结果' ] ];