title; } return admin_trans_label(); } protected function description() { if (property_exists($this, 'description')) { return $this->description; } } protected function translation() { if (property_exists($this, 'translation')) { return $this->translation; } } public function create($drawActivityId, Content $content) { $drawActivity = DrawActivity::findOrFail($drawActivityId); return $content ->translation($this->translation()) ->title($this->title()) ->description($this->description()['create'] ?? trans('admin.create')) ->body($this->form($drawActivity)); } public function store($drawActivityId) { $drawActivity = DrawActivity::findOrFail($drawActivityId); if ($drawActivity->isPublished()) { throw new BizException('活动已发布'); } return $this->form($drawActivity)->store(); } public function edit($drawActivityId, $drawActivityPrizeId, Content $content) { $drawActivity = DrawActivity::findOrFail($drawActivityId); return $content ->translation($this->translation()) ->title($this->title()) ->description($this->description()['edit'] ?? trans('admin.edit')) ->body($this->form($drawActivity)->edit($drawActivityPrizeId)); } public function update($drawActivityId, $drawActivityPrizeId) { $drawActivity = DrawActivity::findOrFail($drawActivityId); if ($drawActivity->isClosed()) { throw new BizException('活动已结束'); } $drawActivityPrize = $drawActivity->prizes()->findOrFail($drawActivityPrizeId); return $this->form($drawActivity)->update($drawActivityPrize->id); } public function destroy($drawActivityId, $drawActivityPrizeId) { $drawActivity = DrawActivity::findOrFail($drawActivityId); if ($drawActivity->isPublished()) { throw new BizException('活动已发布'); } $drawActivity->prizes()->where('id', $drawActivityPrizeId)->delete(); return Admin::json() ->alert() ->status(true) ->message(trans('admin.delete_succeeded')) ->refresh(); } protected function form(DrawActivity $drawActivity) { return Form::make(new DrawActivityPrizeRepository(), function (Form $form) use ($drawActivity) { if ($form->isCreating()) { $form->hidden('draw_activity_id')->default($drawActivity->id); } if ($form->isCreating() || ! $drawActivity->isPublished()) { $form->radio('draw_prize_source', '来源') ->options([ 1 => '自定义', 2 => '奖品库', ]) ->when(1, function (Form $form) { $form->text('name', '名称') ->rules(['bail', 'required_if:draw_prize_source,1', 'nullable', 'string', 'max:255'], ['required_if' => '不能为空']) ->setLabelClass(['asterisk']); $form->image('icon', '图标') ->move('draw/prizes') ->uniqueName() ->saveFullUrl() ->removable(false) ->autoUpload() ->retainable() ->rules(['bail', 'required_if:draw_prize_source,1'], ['required_if' => '不能为空']) ->setLabelClass(['asterisk']); $form->select('type', '类型') ->options(DrawPrizeType::options()) ->rules(['bail', 'required_if:draw_prize_source,1', 'nullable', Rule::in(array_keys(DrawPrizeType::options()))], ['required_if' => '不能为空']) ->setLabelClass(['asterisk']); $form->text('amount', '面值/数量') ->rules(['bail', 'required_if:draw_prize_source,1', 'nullable', 'min:0', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'], ['required_if' => '不能为空']) ->setLabelClass(['asterisk']) ->help('精确到2位小数'); }) ->when(2, function (Form $form) { $form->select('draw_prize_id', '奖品') ->options(DrawPrize::pluck('name', 'id')) ->rules(['bail', 'required_if:draw_prize_source,2'], ['required_if' => '不能为空']) ->setLabelClass(['asterisk']); }) ->setLabelClass(['asterisk']) ->value($form->isEditing() ? 1 : 2) ->default(1); $form->radio('limited', '是否限量') ->options([ 0 => '否', 1 => '是', ]) ->when(1, function (Form $form) { $form->number('stock', '库存') ->min(0) ->rules(['required_if:limited,1', 'int', 'min:0'], ['required_if' => '不能为空']) ->setLabelClass(['asterisk']); }) ->default(1) ->customFormat(function ($v) { return $v ? 1 : 0; }) ->setLabelClass(['asterisk']); } else { $form->display('name', '名称') ->setLabelClass(['asterisk']); $form->image('icon', '图标') ->disable() ->setLabelClass(['asterisk']); $form->display('type', '类型') ->setLabelClass(['asterisk']) ->with(fn () => $this->type->label()); $form ->display('amount', '面值/数量') ->setLabelClass(['asterisk']) ->with(fn ($value) => trim_trailing_zeros($value)); } $form->number('weight', '权重') ->rules(['bail', 'required', 'int', 'min:0']) ->min(0) ->setLabelClass(['asterisk']) ->attribute('required', true); $form->number('sort', '排序')->default(0)->rules(['required', 'int']); $form->saving(function (Form $form) use ($drawActivity) { if (! $form->isCreating()) { $form->deleteInput('draw_activity_id'); } if ($form->isCreating() || ! $drawActivity->isPublished()) { if ($form->input('draw_prize_source') != 1) { $drawPrize = DrawPrize::findOrFail($form->input('draw_prize_id')); $form->input('name', $drawPrize->name); $form->input('icon', $drawPrize->icon); $form->input('type', $drawPrize->type); $form->input('amount', $drawPrize->amount); } $form->deleteInput(['draw_prize_source', 'draw_prize_id']); } else { $form->deleteInput(['name', 'icon', 'type', 'amount', 'limited', 'stock']); } }); }); } }