diff --git a/app/Http/Controllers/Admin/StrategyController.php b/app/Http/Controllers/Admin/StrategyController.php new file mode 100644 index 00000000..7a0ea8ec --- /dev/null +++ b/app/Http/Controllers/Admin/StrategyController.php @@ -0,0 +1,60 @@ +when($request->query('keywords'), function (Builder $builder, $keywords) { + $builder->whereRaw("concat(ifnull(name,''),ifnull(intro,'')) like ?",["%{$keywords}%"]); + })->withCount('images')->withSum('images', 'size')->latest()->paginate(); + return view('admin.strategy.index', compact('strategies')); + } + + public function add(): View + { + return view('admin.strategy.add'); + } + + public function edit(Request $request): View + { + $strategy = Strategy::query()->findOrFail($request->route('id')); + return view('admin.strategy.edit', compact('strategy')); + } + + public function create(StrategyRequest $request): Response + { + $group = new Strategy(); + $group->fill($request->validated()); + $group->save(); + return $this->success('创建成功'); + } + + 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('保存失败'); + } + return $this->success('保存成功'); + } + + public function delete(Request $request): Response + { + if ($group = Strategy::query()->find($request->route('id'))) { + $group->delete(); + } + return $this->success('删除成功'); + } +} diff --git a/app/Http/Requests/Admin/StrategyRequest.php b/app/Http/Requests/Admin/StrategyRequest.php new file mode 100644 index 00000000..9838591d --- /dev/null +++ b/app/Http/Requests/Admin/StrategyRequest.php @@ -0,0 +1,19 @@ + 'collection', ]; + const DRIVERS = [ + StrategyKey::Local => '本地', + StrategyKey::S3 => 'Amazon S3', + StrategyKey::Oss => '阿里云 OSS', + StrategyKey::Cos => '腾讯云 COS', + StrategyKey::Kodo => '七牛云 Kodo', + StrategyKey::Uss => '又拍云 USS', + StrategyKey::Sftp => 'SFTP', + StrategyKey::Ftp => 'FTP', + StrategyKey::Webdav => 'WebDav', + ]; + protected static function booted() { static::creating(function (self $strategy) { diff --git a/resources/views/admin/strategy/add.blade.php b/resources/views/admin/strategy/add.blade.php new file mode 100644 index 00000000..d2dbcf49 --- /dev/null +++ b/resources/views/admin/strategy/add.blade.php @@ -0,0 +1,76 @@ + +
+
+
+
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+ 取消 + 确认创建 +
+
+
+
+
+ + @push('scripts') + + @endpush + +
diff --git a/resources/views/admin/strategy/edit.blade.php b/resources/views/admin/strategy/edit.blade.php new file mode 100644 index 00000000..7f9f7b30 --- /dev/null +++ b/resources/views/admin/strategy/edit.blade.php @@ -0,0 +1,3 @@ + + edit + diff --git a/resources/views/admin/strategy/index.blade.php b/resources/views/admin/strategy/index.blade.php new file mode 100644 index 00000000..f115d1d3 --- /dev/null +++ b/resources/views/admin/strategy/index.blade.php @@ -0,0 +1,67 @@ +@section('title', '角色组管理') + + +
+
+ 创建储存策略 +
+ + +
+ + + @foreach($strategies as $strategy) + + {{ $strategy->id }} + {{ $strategy->name }} + + + {{ \App\Models\Strategy::DRIVERS[$strategy->key] }} + + + {{ $strategy->images_count }} + {{ \App\Utils::formatSize($strategy->images_sum_size * 1024) }} + + 编辑 + 删除 + + + @endforeach + + @if($strategies->isEmpty()) + + @else +
+ {{ $strategies->links() }} +
+ @endif +
+ + @push('scripts') + + @endpush + +
diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php index c46f444b..ed942a47 100644 --- a/resources/views/layouts/sidebar.blade.php +++ b/resources/views/layouts/sidebar.blade.php @@ -60,7 +60,7 @@ 图片管理 - + 储存策略 diff --git a/routes/web.php b/routes/web.php index 7b537199..07b6def9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -19,6 +19,7 @@ use App\Http\Controllers\User\AlbumController; use App\Http\Controllers\User\ProfileController; use App\Http\Controllers\Admin\GroupController as AdminGroupController; +use App\Http\Controllers\Admin\StrategyController as AdminStrategyController; Route::get('/', fn () => view('welcome'))->name('/'); Route::post('upload', [Controller::class, 'upload']); @@ -51,6 +52,15 @@ Route::group(['prefix' => 'admin', 'middleware' => ['auth.admin']], function () Route::put('{id}', [AdminGroupController::class, 'update'])->name('admin.group.update'); Route::delete('{id}', [AdminGroupController::class, 'delete'])->name('admin.group.delete'); }); + + Route::group(['prefix' => 'strategies'], function () { + Route::get('', [AdminStrategyController::class, 'index'])->name('admin.strategies'); + Route::get('create', [AdminStrategyController::class, 'add'])->name('admin.strategy.add'); + Route::post('create', [AdminStrategyController::class, 'create'])->name('admin.strategy.create'); + Route::get('{id}', [AdminStrategyController::class, 'edit'])->name('admin.strategy.edit'); + Route::put('{id}', [AdminStrategyController::class, 'update'])->name('admin.strategy.update'); + Route::delete('{id}', [AdminStrategyController::class, 'delete'])->name('admin.strategy.delete'); + }); }); require __DIR__.'/image.php';