From e294430c860d2623958416b76ce7bf5aa598ecb9 Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 14 May 2026 11:17:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E6=96=B0=E5=A2=9E=E9=80=9A?= =?UTF-8?q?=E7=94=A8KV=E7=B3=BB=E7=BB=9F=E9=85=8D=E7=BD=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增后台配置管理相关的表单请求类,添加通用设置的列表查询和更新接口,支持按分组筛选配置项并返回标准化的配置数据 --- .../Api/V1/Admin/AdminSettingController.php | 60 +++++++++++++++++++ .../Admin/AdminSettingIndexRequest.php | 20 +++++++ .../Admin/AdminSettingUpdateRequest.php | 20 +++++++ routes/api/v1/admin/config.php | 12 ++++ 4 files changed, 112 insertions(+) create mode 100644 app/Http/Controllers/Api/V1/Admin/AdminSettingController.php create mode 100644 app/Http/Requests/Admin/AdminSettingIndexRequest.php create mode 100644 app/Http/Requests/Admin/AdminSettingUpdateRequest.php diff --git a/app/Http/Controllers/Api/V1/Admin/AdminSettingController.php b/app/Http/Controllers/Api/V1/Admin/AdminSettingController.php new file mode 100644 index 0000000..8b02d48 --- /dev/null +++ b/app/Http/Controllers/Api/V1/Admin/AdminSettingController.php @@ -0,0 +1,60 @@ +validated(); + $query = LotterySetting::query()->orderBy('setting_key'); + + if (! empty($validated['group'])) { + $query->where('group_name', $validated['group']); + } + + $items = $query->get()->map(fn (LotterySetting $s): array => [ + 'key' => $s->setting_key, + 'value' => $s->value_json, + 'group' => $s->group_name, + 'description' => $s->description_zh, + ]); + + return ApiResponse::success(['items' => $items]); + } + + public function update(AdminSettingUpdateRequest $request, string $key): JsonResponse + { + $setting = LotterySetting::query()->where('setting_key', $key)->first(); + if ($setting === null) { + return ApiResponse::error('Setting not found', 404); + } + + LotterySettings::put( + $key, + $request->validated('value'), + $setting->group_name, + $setting->description_zh, + ); + + $fresh = LotterySetting::query()->where('setting_key', $key)->first(); + + return ApiResponse::success([ + 'key' => $fresh->setting_key, + 'value' => $fresh->value_json, + 'group' => $fresh->group_name, + 'description' => $fresh->description_zh, + ]); + } +} diff --git a/app/Http/Requests/Admin/AdminSettingIndexRequest.php b/app/Http/Requests/Admin/AdminSettingIndexRequest.php new file mode 100644 index 0000000..b9fdf4d --- /dev/null +++ b/app/Http/Requests/Admin/AdminSettingIndexRequest.php @@ -0,0 +1,20 @@ + ['sometimes', 'nullable', 'string', 'max:64'], + ]; + } +} diff --git a/app/Http/Requests/Admin/AdminSettingUpdateRequest.php b/app/Http/Requests/Admin/AdminSettingUpdateRequest.php new file mode 100644 index 0000000..f253a84 --- /dev/null +++ b/app/Http/Requests/Admin/AdminSettingUpdateRequest.php @@ -0,0 +1,20 @@ + ['required'], + ]; + } +} diff --git a/routes/api/v1/admin/config.php b/routes/api/v1/admin/config.php index 1bfbe0f..3197a84 100644 --- a/routes/api/v1/admin/config.php +++ b/routes/api/v1/admin/config.php @@ -18,6 +18,7 @@ use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigItemsReplaceController; use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionIndexController; use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionStoreController; use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionPublishController; +use App\Http\Controllers\Api\V1\Admin\AdminSettingController; /** * 管理员配置管理路由(玩法/赔率/封顶)。 @@ -105,3 +106,14 @@ Route::middleware('admin.permission:prd.play_switch.manage|prd.odds.manage|prd.r ->name('risk-cap-versions.publish'); }); }); + +// 通用 KV 设置(钱包限额等) +Route::middleware('admin.permission:prd.wallet_reconcile.manage') + ->prefix('settings') + ->name('api.v1.admin.settings.') + ->group(function (): void { + Route::get('/', AdminSettingController::class.'@index') + ->name('index'); + Route::put('{key}', AdminSettingController::class.'@update') + ->name('update'); + });