isClosed()) { throw new BizException('活动已结束'); } return parent::update($id); } public function destroy($id) { $drawActivity = DrawActivity::findOrFail($id); if ($drawActivity->isPublished()) { throw new BizException('活动已发布'); } $drawActivity->delete(); 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(' 显示'); } 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(' 抽奖次数'); } if ($actions->row->isPublished() && Admin::user()->can('dcat.admin.draw_activities.log_list')) { $actions->append(' 中奖记录'); } 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']); } }); }); } }