1
0
Fork 0
party-rank-server/app/Admin/Controllers/BannerController.php

109 lines
5.2 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Admin\Components;
use App\Admin\Services\BannerService;
use App\Enums\TargetType;
use App\Models\Banner;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page;
class BannerController extends AdminController
{
protected string $serviceName = BannerService::class;
protected $placeOptions;
public function list(): Page
{
$crud = $this->baseCRUD()
->filterTogglable(false)
->columnsTogglable(false)
->headerToolbar([
$this->createButton(true),
])
->quickSaveItemApi(admin_url('quick-edit/banner/$id'))
->filter($this->baseFilter()->actions()->body([
amisMake()->SelectControl()->name('place_id')->label(__('banner.place_id'))->options($this->getPlaceOptions())->size('md')->clearable(),
amisMake()->TextControl()->name('title')->label(__('banner.title'))->size('md')->clearable(),
amisMake()->Component()->setType('submit')->label(__('admin.search'))->level('primary'),
]))
->columns([
amisMake()->TableColumn()->name('id')->label(__('banner.id')),
amisMake()->TableColumn()->name('place.name')->label(__('banner.place_id')),
amisMake()->TableColumn()->name('title')->label(__('banner.title')),
amisMake()->Image()->name('picture')->label(__('banner.picture'))->width(30),
amisMake()
->TableColumn()
->name('sort')
->label(__('banner.sort'))
->align('center')
->quickEdit(Components::make()->sortControl('sort', __('banner.sort'))->saveImmediately(true)),
Components::make()->switchControl('table')->name('is_enable')->label(__('article.is_enable')),
$this->rowActions(true),
]);
return $this->baseList($crud);
}
public function form(): Form
{
return $this->baseForm()->title('')->body([
amisMake()->SelectControl()->name('place_id')->label(__('banner.place_id'))->options($this->getPlaceOptions())->required(true),
amisMake()->TextControl()->name('title')->label(__('banner.title'))->required(true),
amisMake()->ImageControl()->name('picture')->label(__('banner.picture'))->autoUpload(true),
// {target_type: app/h5, target_url: ''}
amisMake()
->ComboControl()
->scaffold(['target_type' => TargetType::App, 'target_url' => ''])
->subFormMode('horizontal')
->multiLine()
->name('link_config')
->label(__('banner.link_config'))
->items([
amisMake()->SelectControl()->name('target_type')->label(__('banner.target_type'))->options(TargetType::map()),
amisMake()->TextControl()->name('target_url')->label(__('banner.target_url')),
]),
Components::make()->sortControl('sort', __('banner.sort')),
amisMake()->TextareaControl()->name('description')->label(__('banner.description')),
amisMake()->DateTimeControl()->name('published_at')->label(__('banner.published_at'))->value(now())->format('YYYY-MM-DD HH:mm:ss')->description('*默认当前时间'),
Components::make()->switchControl('form')->name('is_enable')->label(__('banner.is_enable'))->value(true),
]);
}
public function detail(): Form
{
return $this->baseDetail()->title('')->body([
amisMake()->TextControl()->name('place.name')->label(__('banner.place_id'))->static(),
amisMake()->TextControl()->name('title')->label(__('banner.title'))->static(),
amisMake()->TextControl()->name('picture')->label(__('banner.picture'))->static()->staticSchema(amisMake()->image()),
amisMake()
->ComboControl()
->subFormMode('horizontal')
->multiLine()
->static(true)
->name('link_config')
->label(__('banner.link_config'))
->items([
amisMake()->SelectControl()->name('target_type')->label(__('banner.target_type'))->options(TargetType::map())->static(true),
amisMake()->TextControl()->name('target_url')->label(__('banner.target_url'))->static(true),
]),
amisMake()->TextControl()->name('sort')->label(__('banner.sort'))->static(true),
amisMake()->TextControl()->name('description')->label(__('banner.description'))->static(true),
amisMake()->TextControl()->name('published_at')->label(__('banner.published_at'))->static(true),
Components::make()->switchControl('show')->name('is_enable')->label(__('banner.is_enable')),
amisMake()->TextControl()->name('created_at')->label(__('banner.created_at'))->static(true),
]);
}
public function getPlaceOptions()
{
if (!$this->placeOptions) {
$this->placeOptions = Banner::getPlaceList()->map(fn($item) => ['value' => $item->id, 'label' => $item->name]);
}
return $this->placeOptions;
}
}