From f36ba0db6ba8afaa922e085112d604a607d716be Mon Sep 17 00:00:00 2001 From: Wisp X Date: Thu, 13 Jan 2022 10:45:26 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=9B=BE=E7=89=87=E9=87=8D?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/User/ImageController.php | 14 +++++ app/Http/Requests/ImageRenameRequest.php | 52 +++++++++++++++++++ resources/views/images.blade.php | 40 ++++++++++++-- routes/web.php | 1 + 4 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 app/Http/Requests/ImageRenameRequest.php diff --git a/app/Http/Controllers/User/ImageController.php b/app/Http/Controllers/User/ImageController.php index c5caf77a..55042ccc 100644 --- a/app/Http/Controllers/User/ImageController.php +++ b/app/Http/Controllers/User/ImageController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\User; use App\Enums\ImagePermission; use App\Http\Controllers\Controller; +use App\Http\Requests\ImageRenameRequest; use App\Models\Album; use App\Models\Image; use App\Models\User; @@ -66,6 +67,19 @@ class ImageController extends Controller return $this->success('success', compact('images')); } + public function rename(ImageRenameRequest $request): Response + { + /** @var User $user */ + $user = Auth::user(); + /** @var Image $image */ + if ($image = $user->images()->find($request->input('id'))) { + $image->alias_name = $request->input('name'); + $image->save(); + } + + return $this->success('重命名成功', $image->only('id', 'filename')); + } + public function movement(Request $request): Response { /** @var User $user */ diff --git a/app/Http/Requests/ImageRenameRequest.php b/app/Http/Requests/ImageRenameRequest.php new file mode 100644 index 00000000..6de5bce9 --- /dev/null +++ b/app/Http/Requests/ImageRenameRequest.php @@ -0,0 +1,52 @@ + 'required|numeric', + 'name' => 'required|max:50|string', + ]; + } + + public function messages() + { + return [ + 'id.required' => '请选择一张图片', + 'id.numeric' => '图片选择异常', + 'name.required' => '请输入名称', + 'name.max' => '名称长度不能超过 50 个字符', + 'name.string' => '名称格式不正确' + ]; + } + + protected function failedValidation(Validator $validator) + { + throw (new HttpResponseException($this->error($validator->errors()->first()))); + } +} diff --git a/resources/views/images.blade.php b/resources/views/images.blade.php index c7af4d16..3002a230 100644 --- a/resources/views/images.blade.php +++ b/resources/views/images.blade.php @@ -90,8 +90,8 @@
-

__name__

-

__date__

+

__name__

+

__date__

__name__ @@ -466,8 +466,42 @@ refresh: {text: '刷新', action: _ => resetImages()}, rename: { text: '重命名', - action: e => {}, visible: () => ds.getSelection().length === 1, + action: e => { + let item = $(e).data('json'); + Swal.fire({ + title: '请输入图片名称', + input: 'text', + value: item.filename, + inputAttributes: { + autocapitalize: 'off' + }, + showCancelButton: true, + confirmButtonText: '确认', + showLoaderOnConfirm: true, + preConfirm: (value) => { + return axios.put('{{ route('user.images.rename') }}', { + id: item.id, + name: value, + }).then(response => { + if (! response.data.status) { + throw new Error(response.data.message) + } + return response.data; + }).catch(error => Swal.showValidationMessage('服务异常,请稍后重试。')); + }, + allowOutsideClick: () => !Swal.isLoading() + }).then((result) => { + if (result.isConfirmed) { + if (result.value.status) { + $(e).find('p.filename').attr('title', result.value.data.filename).text(result.value.data.filename) + toastr.success(result.value.message); + } else { + toastr.error(result.value.message); + } + } + }) + }, }, open: { text: '新窗口打开', diff --git a/routes/web.php b/routes/web.php index 20e544d8..3e10d3c9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -26,6 +26,7 @@ Route::group(['middleware' => ['auth']], function () { Route::group(['prefix' => 'user'], function () { Route::get('images', [ImageController::class, 'images'])->name('user.images'); Route::delete('images', [ImageController::class, 'delete'])->name('user.images.delete'); + Route::put('images/rename', [ImageController::class, 'rename'])->name('user.images.rename'); Route::put('images/movement', [ImageController::class, 'movement'])->name('user.images.movement'); Route::get('albums', [AlbumController::class, 'albums'])->name('user.albums'); Route::post('albums', [AlbumController::class, 'create'])->name('user.album.create');