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 + + + + + + + + + 选择角色组 + + @foreach(\App\Models\Group::query()->get() as $group) + groups->where('id', $group->id)->isNotEmpty() ? 'selected' : '' }}>{{ $group->name }} + @endforeach + + + + + + *名称 + + + + + 简介 + {{ $strategy->intro }} + + + + *储存策略 + + @foreach(\App\Models\Strategy::DRIVERS as $key => $driver) + key ? 'selected' : '' }}>{{ $driver }} + @endforeach + + + + + + 储存路径 + + 储存路径设置错误或没有读写权限可能会导致图片保存失败 + + + + + + *访问域名 + + + /uploads + + + + + + 取消 + 确认修改 + + + + + + + @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]) -merge(['class' => 'mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}>{{ $solt ?? '' }} +merge(['class' => 'mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}>{{ $slot ?? '' }}