diff --git a/app/Http/Controllers/Admin/AuthController.php b/app/Http/Controllers/Admin/AuthController.php index e83c785..7bef810 100644 --- a/app/Http/Controllers/Admin/AuthController.php +++ b/app/Http/Controllers/Admin/AuthController.php @@ -5,10 +5,12 @@ namespace App\Http\Controllers\Admin; use App\Exceptions\CustomException; use App\Http\Controllers\Controller; use App\Models\AdminUsers; +use App\Services\AdminUsersService; use App\Services\ApiResponseService; use App\Services\OperationLogService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; @@ -156,4 +158,35 @@ class AuthController extends Controller return $this->responseService->systemError($m_prefix . ':' . $e->getMessage()); } } + + /** + * 修改翻译 + * @param Request $request + * @return JsonResponse + */ + public function translationSwitch(Request $request): JsonResponse + { + try { + $localeArr = array_keys(AdminUsersService::$localeArr); + $localeStr = implode(',',$localeArr); + $data = $request->all(); + $validator = Validator::make($data, [ + 'language' => 'required|in:'.$localeStr + ], [ + 'language.required' => __('admin.operation_failed'), + 'language.in' => __('admin.operation_failed'), + ]); + if ($validator->fails()) { + throw new ValidationException($validator); + } + $language = $data['language']; + $user = Auth::guard('sanctum')->user(); + $service = new AdminUsersService(new OperationLogService()); + $service->updateLocale($user->id, $language); + App::setLocale($language); + return $this->responseService->success([], __('admin.operation_successful')); + } catch (\Exception $e) { + return $this->responseService->systemError($e->getMessage()); + } + } } diff --git a/app/Http/Middleware/CheckPermission.php b/app/Http/Middleware/CheckPermission.php index b70d7e9..c13b638 100644 --- a/app/Http/Middleware/CheckPermission.php +++ b/app/Http/Middleware/CheckPermission.php @@ -66,14 +66,14 @@ class CheckPermission } // 特殊1 - $special = ['logout', 'me', 'menu', 'index']; + $special = ['logout', 'me', 'menu', 'index', 'translationSwitch', 'uploadImage']; if (in_array($newAction, $special)) { return false; } // 特殊2 $special2 = [ - 'rule', 'uploadImage', 'search', 'targetMode', 'buildingFloorList', + 'rule', 'search', 'targetMode', 'buildingFloorList', 'floorList', 'parkingSpaceList', 'statistics' ]; if (in_array($method, $special2)) { diff --git a/app/Http/Middleware/LanguageSwitcher.php b/app/Http/Middleware/LanguageSwitcher.php index 46c60af..0970b01 100644 --- a/app/Http/Middleware/LanguageSwitcher.php +++ b/app/Http/Middleware/LanguageSwitcher.php @@ -2,6 +2,7 @@ namespace App\Http\Middleware; +use App\Models\AdminUsers; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; diff --git a/app/Models/AdminUsers.php b/app/Models/AdminUsers.php index 2384672..f1ac84a 100644 --- a/app/Models/AdminUsers.php +++ b/app/Models/AdminUsers.php @@ -28,7 +28,8 @@ class AdminUsers extends Model 'status', 'avatar', 'packing_id', - 'last_login_time' + 'last_login_time', + 'locale' ]; /** diff --git a/app/Services/AdminUsersService.php b/app/Services/AdminUsersService.php index 7ffe5a0..a7d45c8 100644 --- a/app/Services/AdminUsersService.php +++ b/app/Services/AdminUsersService.php @@ -13,6 +13,16 @@ use Illuminate\Support\Facades\Hash; final class AdminUsersService { + /** + * @var string[] + */ + public static array $localeArr + = [ + 'zh-CN' => '简体中文', + 'zh-TW' => '繁體中文', + 'en' => 'English' + ]; + /** * @var OperationLogService */ @@ -208,4 +218,28 @@ final class AdminUsersService unset($item['roles']); return $item; } + + public function updateLocale($id, $locale) + { + try { + DB::beginTransaction(); + $model = AdminUsers::findOrFail($id); + $oldValue = $model->toArray(); + $update = [ + 'locale' => $locale, + 'updated_at' => get_datetime() + ]; + $model->update($update); + $this->logService->logUpdated( + $model, + $oldValue, + 'admin_user.update' + ); + DB::commit(); + return true; + } catch (Exception $e) { + DB::rollBack(); + throw $e; + } + } } diff --git a/routes/admin/api.php b/routes/admin/api.php index 646cae2..d3ff234 100644 --- a/routes/admin/api.php +++ b/routes/admin/api.php @@ -40,6 +40,7 @@ Route::group(['prefix' => 'admin'], function () { // 认证相关 Route::post('/logout', [AuthController::class, 'logout']); Route::get('/me', [AuthController::class, 'me']); + Route::post('/translationSwitch', [AuthController::class, 'translationSwitch']); // 首页 Route::get('/index', [IndexController::class, 'index']); Route::get('/index/statistics', [IndexController::class, 'parkingSpaceStatistics']);