guessing-miniprogram/app/Admin/Controllers/ActivityController.php

177 lines
11 KiB
PHP

<?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\ActivityService;
use App\Traits\CustomActionTrait;
use App\Admin\Components;
use App\Enums\Score;
class ActivityController extends AdminController
{
use CustomActionTrait;
protected string $serviceName = ActivityService::class;
public function list(): Page
{
$crud = $this->baseCRUD()->tableLayout('fixed')
->headerToolbar([
$this->createTypeButton('drawer', 'lg'),
...$this->baseHeaderToolBar(),
])
->filter($this->baseFilter()->labelWidth('80px')->body([
amis()->GroupControl()->mode('horizontal')->body([
amis()->TextControl('id', __('admin.id'))->columnRatio(3)
->placeholder(__('admin.id')),
amis()->TextControl('name', __('admin.activities.name'))->columnRatio(3)
->placeholder(__('admin.activities.name')),
]),
]))
->itemCheckableOn('${state === 0}')
->columns([
amis()->TableColumn('id', __('admin.id'))->width('50px')->sortable(),
amis()->TableColumn('name', __('admin.activities.name')),
amis()->TableColumn('state', __('admin.activities.state')),
amis()->TableColumn('start_at', __('admin.activities.start_at')),
amis()->TableColumn('end_at', __('admin.activities.end_at')),
amis()->TableColumn('created_at', __('admin.created_at'))->type('datetime')->sortable(true),
Operation::make()->label(__('admin.actions'))->buttons([
//发布活动-todo
//结算活动(参与时间结束后,且最后一场竞猜结束,点击结算则发送奖品)-todo
$this->rowShowTypeButton('drawer', 'xl'),//活动详情-todo-//竞猜赛程//活动奖品
$this->rowEditTypeButton('drawer', 'lg'),
$this->rowDeleteButton()->visibleOn('${state === 0}'),
])
]);
return $this->baseList($crud);
}
public function form($isEdit = false): Form
{
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('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 = 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()
];
}
}