From d31d1bb8d9fc0c5a4685246e5b0b32934c1da180 Mon Sep 17 00:00:00 2001 From: Wisp X Date: Wed, 26 Jan 2022 17:48:04 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=82=A8=E5=AD=98=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/StrategyController.php | 27 ++++-- app/Models/Strategy.php | 12 ++- resources/views/admin/strategy/edit.blade.php | 92 ++++++++++++++++++- resources/views/components/textarea.blade.php | 2 +- 4 files changed, 122 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Admin/StrategyController.php b/app/Http/Controllers/Admin/StrategyController.php index 0755a816..a2a9e7cb 100644 --- a/app/Http/Controllers/Admin/StrategyController.php +++ b/app/Http/Controllers/Admin/StrategyController.php @@ -7,6 +7,7 @@ use App\Http\Requests\Admin\StrategyRequest; use App\Models\Group; use App\Models\Strategy; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; @@ -29,6 +30,7 @@ class StrategyController extends Controller public function edit(Request $request): View { + /** @var Strategy $strategy */ $strategy = Strategy::query()->findOrFail($request->route('id')); return view('admin.strategy.edit', compact('strategy')); } @@ -52,12 +54,25 @@ class StrategyController extends Controller public function update(StrategyRequest $request): Response { - /** @var Strategy $group */ - $group = Strategy::query()->findOrFail($request->route('id')); - $group->fill($request->validated()); - if (!$group->save()) { - return $this->error('保存失败'); - } + $validated = $request->validated(); + /** @var Strategy $strategy */ + $strategy = Strategy::query()->findOrFail($request->route('id')); + $strategy->fill($request->validated()); + DB::transaction(function () use ($strategy, $validated) { + $strategy->save(); + $strategy->groups->each(function (Group $group) { + /** @var Pivot $pivot */ + $pivot = $group->pivot; + $pivot->delete(); + }); + DB::table('group_strategy')->insert( + Group::query() + ->whereIn('id', $validated['groups'] ?: []) + ->pluck('id') + ->transform(fn ($id) => ['group_id' => $id, 'strategy_id' => $strategy->id]) + ->toArray() + ); + }); return $this->success('保存成功'); } diff --git a/app/Models/Strategy.php b/app/Models/Strategy.php index 3e029908..3ae7d550 100644 --- a/app/Models/Strategy.php +++ b/app/Models/Strategy.php @@ -14,7 +14,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany; /** * @property int $id - * @property string $key + * @property int $key * @property string $name * @property string $intro * @property \Illuminate\Support\Collection $configs @@ -57,7 +57,13 @@ class Strategy extends Model protected static function booted() { static::saving(function (self $strategy) { - $strategy->configs['domain'] = rtrim($strategy->configs['domain'], '/').'/uploads'; + $strategy->configs['root'] = $strategy->configs->get('root', ''); + $strategy->configs['domain'] = rtrim($strategy->configs->get('domain', env('APP_URL')), '/').'/uploads'; + + // 本地储存,创建符号链接 + if ($strategy->key === StrategyKey::Local) { + // TODO + } }); } @@ -70,7 +76,7 @@ class Strategy extends Model public function groups(): BelongsToMany { - return $this->belongsToMany(Group::class, 'group_strategy', 'group_id', 'strategy_id'); + return $this->belongsToMany(Group::class, 'group_strategy', 'strategy_id', 'group_id'); } public function images(): HasMany diff --git a/resources/views/admin/strategy/edit.blade.php b/resources/views/admin/strategy/edit.blade.php index 86a6980a..2189fad4 100644 --- a/resources/views/admin/strategy/edit.blade.php +++ b/resources/views/admin/strategy/edit.blade.php @@ -1,5 +1,95 @@ @section('title', '编辑储存策略') - edit +
+
+
+
+
+ +
+ +
+ +
+ + +
+ +
+ + {{ $strategy->intro }} +
+ +
+ + + @foreach(\App\Models\Strategy::DRIVERS as $key => $driver) + + @endforeach + +
+ +
+
+ + + 储存路径设置错误或没有读写权限可能会导致图片保存失败 +
+
+ + +
+
+ 取消 + 确认修改 +
+
+
+
+
+ + @push('scripts') + + @endpush +
diff --git a/resources/views/components/textarea.blade.php b/resources/views/components/textarea.blade.php index c5ccf877..0fe5d07c 100644 --- a/resources/views/components/textarea.blade.php +++ b/resources/views/components/textarea.blade.php @@ -1,3 +1,3 @@ @props(['disabled' => false]) - +