generated from panliang/owl-admin-starter
109 lines
5.2 KiB
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;
|
|
}
|
|
}
|