diff --git a/app/Http/Controllers/Admin/ImageController.php b/app/Http/Controllers/Admin/ImageController.php index 19f29551..54b9d7cb 100644 --- a/app/Http/Controllers/Admin/ImageController.php +++ b/app/Http/Controllers/Admin/ImageController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Image; +use App\Services\UserService; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\View\View; @@ -13,7 +14,13 @@ class ImageController extends Controller public function index(Request $request): View { $statuses = []; - $images = Image::query()->with('user')->latest()->paginate(40); + $images = Image::query()->with('user', 'album', 'group', 'strategy')->latest()->paginate(40); + $images->getCollection()->each(function (Image $image) { + $image->append('url', 'pathname'); + $image->album?->setVisible(['name']); + $image->group?->setVisible(['name']); + $image->strategy?->setVisible(['name']); + }); return view('admin.image.index', compact('images', 'statuses')); } @@ -22,8 +29,11 @@ class ImageController extends Controller return $this->success(); } - public function delete(): Response + public function delete(Request $request): Response { - return $this->success(); + /** @var Image $image */ + $image = Image::with('user', 'strategy', 'album')->find($request->route('id')); + (new UserService())->deleteImages([$image->id]); + return $this->success('删除成功'); } } diff --git a/app/Http/Controllers/User/ImageController.php b/app/Http/Controllers/User/ImageController.php index 5e3070e9..f9634f17 100644 --- a/app/Http/Controllers/User/ImageController.php +++ b/app/Http/Controllers/User/ImageController.php @@ -8,6 +8,7 @@ use App\Http\Requests\ImageRenameRequest; use App\Models\Album; use App\Models\Image; use App\Models\User; +use App\Services\UserService; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -142,19 +143,7 @@ class ImageController extends Controller { /** @var User $user */ $user = Auth::user(); - $model = Image::with('strategy', 'album')->where('user_id', $user->id)->whereIn('id', $request->all() ?: []); - DB::transaction(function () use ($model, $user) { - /** @var Image $image */ - foreach ($model->cursor() as $image) { - // 相册图片数量更新 - $image->album?->decrement('image_num'); - // 更新相册图片数量 - $image->delete(); - } - // 更新数量 - $user->image_num = $user->images()->count(); - $user->save(); - }); + (new UserService())->deleteImages($request->all() ?: [], $user); return $this->success('删除成功'); } } diff --git a/app/Models/Image.php b/app/Models/Image.php index 7132ab9b..1efc49c3 100644 --- a/app/Models/Image.php +++ b/app/Models/Image.php @@ -3,7 +3,6 @@ namespace App\Models; use App\Enums\GroupConfigKey; -use App\Enums\Strategy\LocalOption; use App\Enums\StrategyKey; use App\Services\ImageService; use Carbon\Carbon; @@ -13,7 +12,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Cache; -use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use League\Flysystem\Filesystem; @@ -77,8 +75,6 @@ class Image extends Model 'album_id', 'group_id', 'strategy_id', - 'is_unhealthy', - 'permission', ]; protected $casts = [ diff --git a/app/Services/UserService.php b/app/Services/UserService.php new file mode 100644 index 00000000..d6905952 --- /dev/null +++ b/app/Services/UserService.php @@ -0,0 +1,47 @@ +when(! is_null($user), function (Builder $builder) use ($user) { + $builder->where('user_id', $user->id); + })->whereIn('id', $keys); + + DB::transaction(function () use ($model, $keys, &$count) { + /** @var Image $image */ + foreach ($model->cursor() as $image) { + // 相册图片数量更新 + $image->album?->decrement('image_num'); + // 更新相册图片数量 + $image->delete(); + // 更新数量 + if ($image->user) { + $image->user->image_num = $image->user->images()->count(); + $image->user->save(); + } + + $count++; + } + }); + + return $count; + } +} diff --git a/public/css/app.css b/public/css/app.css index 42c88020..f354467f 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -730,6 +730,9 @@ select { .col-span-3 { grid-column: span 3 / span 3; } +.float-right { + float: right; +} .m-2 { margin: 0.5rem; } @@ -1090,6 +1093,9 @@ select { .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } +.grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); +} .flex-row { flex-direction: row; } @@ -1800,6 +1806,9 @@ select { .opacity-75 { opacity: 0.75; } +.opacity-50 { + opacity: 0.5; +} .shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); @@ -2083,6 +2092,9 @@ select { .group:hover .group-hover\:block { display: block; } +.group:hover .group-hover\:flex { + display: flex; +} .group:hover .group-hover\:hidden { display: none; } @@ -2094,6 +2106,20 @@ select { --tw-text-opacity: 1; color: rgb(59 130 246 / var(--tw-text-opacity)); } +.group:hover .group-hover\:opacity-50 { + opacity: 0.5; +} +.group:hover .group-hover\:opacity-25 { + opacity: 0.25; +} +.group:hover .group-hover\:blur-sm { + --tw-blur: blur(4px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} +.group:hover .group-hover\:brightness-50 { + --tw-brightness: brightness(.5); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} .dark .dark\:bg-gray-900 { --tw-bg-opacity: 1; background-color: rgb(17 24 39 / var(--tw-bg-opacity)); @@ -2112,6 +2138,14 @@ select { right: 1.5rem; } + .sm\:top-4 { + top: 1rem; + } + + .sm\:right-4 { + right: 1rem; + } + .sm\:col-span-3 { grid-column: span 3 / span 3; } @@ -2269,6 +2303,14 @@ select { right: 1.5rem; } + .md\:top-3 { + top: 0.75rem; + } + + .md\:right-3 { + right: 0.75rem; + } + .md\:col-span-2 { grid-column: span 2 / span 2; } @@ -2377,6 +2419,10 @@ select { margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); } + .md\:rounded-sm { + border-radius: 0.125rem; + } + .md\:p-6 { padding: 1.5rem; } @@ -2418,6 +2464,14 @@ select { right: 2rem; } + .lg\:top-4 { + top: 1rem; + } + + .lg\:right-4 { + right: 1rem; + } + .lg\:col-span-5 { grid-column: span 5 / span 5; } diff --git a/resources/views/admin/image/index.blade.php b/resources/views/admin/image/index.blade.php index e830e144..3eb7e1b0 100644 --- a/resources/views/admin/image/index.blade.php +++ b/resources/views/admin/image/index.blade.php @@ -1,16 +1,30 @@ @section('title', '图片管理') - - test - -
@if($images->isNotEmpty())
@foreach($images as $image) -
- +
+ + + + +
+ @if($image->user) +
+ + {{ $image->user->name }} +
+ @else +
+ +
+ 游客 + @endif +
@endforeach
@@ -22,15 +36,199 @@ @endif
- @push('scripts') + + + + + + + + +@push('scripts') @endpush diff --git a/resources/views/components/default-avatar.blade.php b/resources/views/components/default-avatar.blade.php new file mode 100644 index 00000000..78b5e73b --- /dev/null +++ b/resources/views/components/default-avatar.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/resources/views/components/modal.blade.php b/resources/views/components/modal.blade.php index 661fbebd..8b2f18bd 100644 --- a/resources/views/components/modal.blade.php +++ b/resources/views/components/modal.blade.php @@ -1,4 +1,4 @@ -