From 0d322304acd2946870ecebc00034473e66936cb9 Mon Sep 17 00:00:00 2001 From: liutk <961510893@qq.com> Date: Fri, 17 May 2024 12:08:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=B4=BB=E5=8A=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=96=B0=E5=A2=9E=E7=BC=96=E8=BE=91=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/ActivityController.php | 5 +- app/Models/Activity.php | 7 +++ app/Services/Admin/ActivityService.php | 63 +++++++++++++++++++ ...4_05_16_112901_create_activities_table.php | 2 +- ..._16_114849_create_activity_gifts_table.php | 1 + 5 files changed, 76 insertions(+), 2 deletions(-) diff --git a/app/Admin/Controllers/ActivityController.php b/app/Admin/Controllers/ActivityController.php index 698c252..2162b59 100644 --- a/app/Admin/Controllers/ActivityController.php +++ b/app/Admin/Controllers/ActivityController.php @@ -31,6 +31,7 @@ class ActivityController extends AdminController ->placeholder(__('admin.activities.name')), ]), ])) + ->itemCheckableOn('${state === 0}') ->columns([ amis()->TableColumn('id', __('admin.id'))->width('50px')->sortable(), amis()->TableColumn('name', __('admin.activities.name')), @@ -43,6 +44,8 @@ class ActivityController extends AdminController //发布活动-todo //结算活动(参与时间结束后,且最后一场竞猜结束,点击结算则发送奖品)-todo $this->rowShowTypeButton('drawer', 'xl'),//活动详情-todo-//竞猜赛程//活动奖品 + $this->rowEditTypeButton('drawer', 'xl'), + $this->rowDeleteButton()->visibleOn('${state === 0}'), ]) ]); @@ -53,7 +56,7 @@ class ActivityController extends AdminController { return $this->baseForm()->body([ amis()->TextControl('name', __('admin.activities.name'))->required(true), - Components::make()->cropImageControl('cover', __('admin.activities.cover'))->required(true), + Components::make()->cropImageControl('cover', __('admin.activities.cover'), 1.5)->required(true), amis()->DateRangeControl('activity_at', __('admin.activities.activity_at'))->clearable(false)->format('YYYY-MM-DD HH:mm:ss')->required(true), amis()->TextareaControl('rules', __('admin.activities.rules')) ]); diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 135548e..2537b82 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -9,4 +9,11 @@ use EloquentFilter\Filterable; class Activity extends Model { use HasFactory,Filterable; + + public function scopeSort($q) + { + $q->orderBy('state', 'asc') + ->orderBy('end_at', 'desc') + ->orderBy('created_at', 'desc'); + } } diff --git a/app/Services/Admin/ActivityService.php b/app/Services/Admin/ActivityService.php index 6dbc59e..4bc1c9e 100644 --- a/app/Services/Admin/ActivityService.php +++ b/app/Services/Admin/ActivityService.php @@ -5,6 +5,7 @@ namespace App\Services\Admin; use App\Models\Activity; use App\Models\Filters\ActivityFilter; use Illuminate\Support\Arr; +use App\Traits\UploadTrait; /** * @method Activity getModel() @@ -12,7 +13,69 @@ use Illuminate\Support\Arr; */ class ActivityService extends BaseService { + use UploadTrait; + protected string $modelName = Activity::class; protected string $modelFilterName = ActivityFilter::class; + + protected bool $modelSortAble = true; + + public function store($data): bool + { + $columns = $this->getTableColumns(); + $model = $this->getModel(); + + $activityAt = explode(',', Arr::get($data, 'activity_at')); + $data['start_at'] = Arr::get($activityAt, 0) ?? null; + $data['end_at'] = Arr::get($activityAt, 1) ?? null; + + $data['cover'] = $this->saveImage('cover', 'activities/cover')[0] ?? ''; + + foreach ($data as $k => $v) { + if (!in_array($k, $columns)) { + continue; + } + + $model->setAttribute($k, $v); + } + + return $model->save(); + } + + public function update($primaryKey, $data): bool + { + $columns = $this->getTableColumns(); + $model = $this->query()->whereKey($primaryKey)->first(); + if(isset($data['activity_at'])){ + $activityAt = explode(',', Arr::get($data, 'activity_at')); + $data['start_at'] = Arr::get($activityAt, 0) ?? null; + $data['end_at'] = Arr::get($activityAt, 1) ?? null; + } + + if(isset($data['cover'])){ + $data['cover'] = $this->saveImage('cover', 'activities/cover')[0] ?? ''; + } + + foreach ($data as $k => $v) { + if (!in_array($k, $columns)) { + continue; + } + + $model->setAttribute($k, $v); + } + + return $model->save(); + } + + + public function delete(string $ids): mixed + { + $ids = explode(',', $ids); + //判断活动未发布,才可删除 + if($this->query()->whereIn('id', $ids)->where('state', '<>', 0)->exists()){ + $this->setError('已发布活动不能删除'); + } + return $this->query()->whereIn('id', $ids)->delete(); + } } \ No newline at end of file diff --git a/database/migrations/2024_05_16_112901_create_activities_table.php b/database/migrations/2024_05_16_112901_create_activities_table.php index 3cbefe4..d10a5ad 100644 --- a/database/migrations/2024_05_16_112901_create_activities_table.php +++ b/database/migrations/2024_05_16_112901_create_activities_table.php @@ -18,7 +18,7 @@ return new class extends Migration $table->timestamp('start_at')->comment('开始时间'); $table->timestamp('end_at')->comment('结束时间'); $table->text('rules')->nullable()->comment('规则内容'); - $table->unsignedTinyInteger('state')->comment('状态:0未发布,1进行中,2已开奖'); + $table->unsignedTinyInteger('state')->default(0)->comment('状态:0未发布,1进行中,2已开奖'); $table->timestamps(); }); } diff --git a/database/migrations/2024_05_16_114849_create_activity_gifts_table.php b/database/migrations/2024_05_16_114849_create_activity_gifts_table.php index 0228e3e..0a7f467 100644 --- a/database/migrations/2024_05_16_114849_create_activity_gifts_table.php +++ b/database/migrations/2024_05_16_114849_create_activity_gifts_table.php @@ -17,6 +17,7 @@ return new class extends Migration $table->string('name')->comment('名称'); $table->string('logo')->nullable()->comment('图片'); $table->unsignedInteger('rank')->comment('第几名获得'); + $table->text('explain')->nullable()->comment('说明'); $table->timestamps(); }); }