Browse Source

翻译切换

master
wanghongjun 1 month ago
parent
commit
ddb553c1af
  1. 33
      app/Http/Controllers/Admin/AuthController.php
  2. 4
      app/Http/Middleware/CheckPermission.php
  3. 1
      app/Http/Middleware/LanguageSwitcher.php
  4. 3
      app/Models/AdminUsers.php
  5. 34
      app/Services/AdminUsersService.php
  6. 1
      routes/admin/api.php

33
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());
}
}
}

4
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)) {

1
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;

3
app/Models/AdminUsers.php

@ -28,7 +28,8 @@ class AdminUsers extends Model
'status',
'avatar',
'packing_id',
'last_login_time'
'last_login_time',
'locale'
];
/**

34
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;
}
}
}

1
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']);

Loading…
Cancel
Save