215 lines
8.3 KiB
PHP
215 lines
8.3 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use App\Admin\Actions\Grid\DrawActivityClose;
|
|
use App\Admin\Actions\Grid\DrawActivityPublish;
|
|
use App\Admin\Actions\Show\DrawActivityPublish as DrawActivityPublishShowAction;
|
|
use App\Admin\Renderable\DrawActivityPrizeTable;
|
|
use App\Admin\Renderable\DrawActivityTicketTable;
|
|
use App\Admin\Renderable\DrawLogTable;
|
|
use App\Admin\Repositories\DrawActivity as DrawActivityRepository;
|
|
use App\Enums\DrawActivityStatus;
|
|
use App\Exceptions\BizException;
|
|
use App\Models\DrawActivity;
|
|
use Dcat\Admin\Admin;
|
|
use Dcat\Admin\Form;
|
|
use Dcat\Admin\Grid;
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
use Dcat\Admin\Layout\Row;
|
|
use Dcat\Admin\Show;
|
|
use Dcat\Admin\Widgets\Tab;
|
|
|
|
class DrawActivityController extends AdminController
|
|
{
|
|
public function update($id)
|
|
{
|
|
$drawActivity = DrawActivity::findOrFail($id);
|
|
|
|
if ($drawActivity->isClosed()) {
|
|
throw new BizException('活动已结束');
|
|
}
|
|
|
|
return parent::update($id);
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
$drawActivity = DrawActivity::findOrFail($id);
|
|
|
|
if ($drawActivity->isPublished()) {
|
|
throw new BizException('活动已发布');
|
|
}
|
|
|
|
return Admin::json()
|
|
->alert()
|
|
->status(true)
|
|
->message(trans('admin.delete_succeeded'));
|
|
}
|
|
|
|
/**
|
|
* Make a grid builder.
|
|
*
|
|
* @return Grid
|
|
*/
|
|
protected function grid()
|
|
{
|
|
return Grid::make(new DrawActivityRepository(), function (Grid $grid) {
|
|
// 设置弹窗的宽和高
|
|
$grid->setDialogFormDimensions('70%', '90%');
|
|
|
|
$grid->model()->orderBy('id', 'desc');
|
|
|
|
$grid->column('id')->sortable();
|
|
$grid->column('name');
|
|
$grid->column('start_at')->display(function ($v) {
|
|
return $v?->toDateTimeString() ?: '-';
|
|
});
|
|
$grid->column('end_at')->display(function ($v) {
|
|
return $v?->toDateTimeString() ?: '-';
|
|
});
|
|
$grid->column('published_at')->display(function ($v) {
|
|
return $v?->toDateTimeString() ?: '-';
|
|
})->sortable();
|
|
$grid->column('real_status')->display(function ($status) {
|
|
return $status->label();
|
|
});
|
|
$grid->column('bg_image')->image(null, 80, 80);
|
|
$grid->column('bg_color')->display(function () {
|
|
return $this->getBgColorLabel();
|
|
});
|
|
|
|
if (Admin::user()->can('dcat.admin.draw_activities.create')) {
|
|
$grid->enableDialogCreate();
|
|
$grid->showCreateButton();
|
|
}
|
|
|
|
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
|
if (! $actions->row->isClosed() && Admin::user()->can('dcat.admin.draw_activities.edit')) {
|
|
$actions->quickEdit(true);
|
|
}
|
|
|
|
if (Admin::user()->can('dcat.admin.draw_activities.show')) {
|
|
$actions->append('<a style="cursor: pointer;" target="_blank" href="'.admin_route('draw_activities.show', ['draw_activity' => $actions->row]).'"><i class="feather icon-eye"></i> 显示</a>');
|
|
}
|
|
|
|
if (! $actions->row->isClosed() && $actions->row->isPublished() && Admin::user()->can('dcat.admin.draw_activities.close')) {
|
|
$actions->append(new DrawActivityClose());
|
|
}
|
|
|
|
if (! $actions->row->isPublished() && Admin::user()->can('dcat.admin.draw_activities.publish')) {
|
|
$actions->append(new DrawActivityPublish());
|
|
}
|
|
|
|
if ($actions->row->isPublished() && Admin::user()->can('dcat.admin.draw_activities.ticket_list')) {
|
|
$actions->append('<a style="cursor: pointer;" target="_blank" href="'.admin_route('draw_activities.ticket_list', ['draw_activity' => $actions->row]).'"><i class="feather icon-eye"></i> 抽奖次数</a>');
|
|
}
|
|
|
|
if ($actions->row->isPublished() && Admin::user()->can('dcat.admin.draw_activities.log_list')) {
|
|
$actions->append('<a style="cursor: pointer;" target="_blank" href="'.admin_route('draw_activities.log_list', ['draw_activity' => $actions->row]).'"><i class="feather icon-eye"></i> 中奖记录</a>');
|
|
}
|
|
|
|
if (! $actions->row->isPublished() && Admin::user()->can('dcat.admin.draw_activities.destroy')) {
|
|
$actions->disableDelete(false);
|
|
}
|
|
});
|
|
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$filter->panel(false);
|
|
$filter->like('name')->width(3);
|
|
$filter->where('status', function ($builder) {
|
|
return match (DrawActivityStatus::tryFrom($this->input)) {
|
|
DrawActivityStatus::Created => $builder->onlyCreated(),
|
|
DrawActivityStatus::Publishing => $builder->onlyPublishing(),
|
|
DrawActivityStatus::Unstart => $builder->onlyUnstart(),
|
|
DrawActivityStatus::Running => $builder->onlyRunning(),
|
|
DrawActivityStatus::Closed =>$builder->onlyClosed(),
|
|
default => $builder,
|
|
};
|
|
})->select(DrawActivityStatus::options())->width(3);
|
|
});
|
|
});
|
|
}
|
|
|
|
protected function detail($id)
|
|
{
|
|
$drawActivity = DrawActivity::findOrFail($id);
|
|
|
|
$row = new Row();
|
|
|
|
$row->column(5, Show::make($id, $drawActivity, function (Show $show) {
|
|
$show->field('name');
|
|
$show->field('desc')->unescape();
|
|
$show->field('start_at');
|
|
$show->field('end_at');
|
|
$show->field('real_status')->unescape()->as(function () {
|
|
return $this->real_status->label();
|
|
});
|
|
$show->field('published_at');
|
|
$show->field('bg_image')->image();
|
|
$show->field('bg_color')->unescape()->as(function () {
|
|
return $this->getBgColorLabel();
|
|
});
|
|
|
|
$show->panel()
|
|
->tools(function (Show\Tools $tools) use ($show) {
|
|
$tools->disableEdit();
|
|
$tools->disableDelete();
|
|
|
|
if (! $show->model()->isPublished() && Admin::user()->can('dcat.admin.draw_activities.publish')) {
|
|
$tools->append(new DrawActivityPublishShowAction());
|
|
}
|
|
});
|
|
}));
|
|
|
|
$row->column(7, tap(new Tab(), function (Tab $tab) use ($drawActivity) {
|
|
if (request()->routeIs('dcat.admin.draw_activities.ticket_list')) {
|
|
$tab->add('抽奖次数', new DrawActivityTicketTable(['draw_activity_id' => $drawActivity->id]), true);
|
|
} elseif (request()->routeIs('dcat.admin.draw_activities.log_list')) {
|
|
$tab->add('中奖记录', new DrawLogTable(['draw_activity_id' => $drawActivity->id]), true);
|
|
} else {
|
|
$tab->add('活动奖品', new DrawActivityPrizeTable(['draw_activity_id' => $drawActivity->id]), true);
|
|
}
|
|
|
|
$tab->withCard();
|
|
}));
|
|
|
|
return $row;
|
|
}
|
|
|
|
protected function form()
|
|
{
|
|
return Form::make(new DrawActivityRepository(), function (Form $form) {
|
|
$form->text('name')
|
|
->rules(['bail', 'required', 'string', 'max:255'])
|
|
->setLabelClass(['asterisk'])
|
|
->attribute('required', true);
|
|
$form->editor('desc')
|
|
->height('600');
|
|
|
|
if ($form->isEditing() && $form->model()->isPublished()) {
|
|
$form->display('start_at');
|
|
$form->display('end_at');
|
|
} else {
|
|
$form->datetime('start_at');
|
|
$form->datetime('end_at');
|
|
}
|
|
|
|
$form->image('bg_image')
|
|
->move('draw/activities')
|
|
->uniqueName()
|
|
->saveFullUrl()
|
|
->removable(false)
|
|
->autoUpload()
|
|
->retainable();
|
|
$form->text('bg_color')->help('十六进制颜色码');
|
|
|
|
$form->submitted(function (Form $form) {
|
|
if ($form->isEditing() && $form->model()->isPublished()) {
|
|
$form->deleteInput(['start_at', 'end_at']);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|