From 1078cd1aa797d849000da658426d43e8e39dc760 Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq.com> Date: Tue, 10 Feb 2026 16:59:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86-=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E9=85=8D=E7=BD=AE=E5=8F=8A=E7=BF=BB=E8=AF=91=EF=BC=8C?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/BaseController.php | 4 +- .../Controllers/Admin/ConfigController.php | 150 ++++++++++++++++++ .../Controllers/Admin/RolesController.php | 54 +++---- app/Http/Controllers/Admin/UserController.php | 4 +- app/Models/AdminConfigs.php | 25 +++ database/seeders/AdminConfigSeeder.php | 82 ++++++++++ database/seeders/AdminMenuSeeder.php | 2 +- routes/admin/api.php | 4 + 8 files changed, 293 insertions(+), 32 deletions(-) create mode 100644 app/Http/Controllers/Admin/ConfigController.php create mode 100644 app/Models/AdminConfigs.php create mode 100644 database/seeders/AdminConfigSeeder.php diff --git a/app/Http/Controllers/Admin/BaseController.php b/app/Http/Controllers/Admin/BaseController.php index 4fc6878..e169a67 100644 --- a/app/Http/Controllers/Admin/BaseController.php +++ b/app/Http/Controllers/Admin/BaseController.php @@ -26,8 +26,8 @@ class BaseController extends Controller $validator = Validator::make($data, [ 'id' => 'required|numeric' ], [ - 'id.required' => __('validation.admin_role.id_empty'), - 'id.numeric' => __('validation.admin_role.id_numeric') + 'id.required' => __('validation.id_empty'), + 'id.numeric' => __('validation.id_numeric') ]); if ($validator->fails()) { throw new ValidationException($validator); diff --git a/app/Http/Controllers/Admin/ConfigController.php b/app/Http/Controllers/Admin/ConfigController.php new file mode 100644 index 0000000..4b4bebe --- /dev/null +++ b/app/Http/Controllers/Admin/ConfigController.php @@ -0,0 +1,150 @@ +responseService = $responseService; + $this->logService = $logService; + } + + // + public function index(): JsonResponse + { + try { + $columns = ['id', 'title', 'name', 'content']; + $data = AdminConfigs::query()->select($columns)->get()->toArray(); + $this->translationContent($data); + return $this->responseService->success($data); + } catch (Exception $e) { + $m_prefix = __('exception.get_data_failed'); + return $this->responseService->systemError( + $m_prefix . ':' . $e->getMessage() + ); + } + } + + protected function translationContent(array &$data) + { + foreach ($data as &$value) { + $value['title'] = __('controller.config.' . $value['name']); + if (empty($value['content'])) { + continue; + } + foreach ($value['content'] as &$val) { + $val['title'] = __('controller.config.' . $val['name']); + } + } + } + + public function update(Request $request, string $id): JsonResponse + { + try { + $this->validateId($id, AdminConfigs::class); + + $model = AdminConfigs::findOrFail($id); + $oldValue = $model->toArray(); + $data = $request->all(); + $content = $data['content']; + if (empty($content)) { + throw new CustomException( + __('validation.admin_config.content_empty') + ); + } + + $default_arr = ['name', 'value']; + $validator_data = []; + foreach ($content as $key => $value) { + $validator_data[$value['name']] = $value['value']; + // 处理多余字段 + $array_keys = array_keys($value); + $diff_keys = array_diff($array_keys, $default_arr); + if ($diff_keys) { + foreach ($diff_keys as $v) { + unset($value[$v]); + } + } + $content[$key] = $value; + } + + if ($oldValue['name'] == 'parking_lot') { + $rules = [ + 'parking_lot_id' => 'required', + 'parking_lot_sum' => 'required|numeric', + 'zombie_car_parking_duration' => 'required|numeric', + ]; + $messages = [ + 'parking_lot_id.required' => __( + 'validation.admin_config.parking_lot_id_empty' + ), + 'parking_lot_sum.required' => __( + 'validation.admin_config.parking_lot_sum_empty' + ), + 'parking_lot_sum.numeric' => __( + 'validation.admin_config.parking_lot_sum_num' + ), + 'zombie_car_parking_duration.required' => __( + 'validation.admin_config.zombie_car_empty' + ), + 'zombie_car_parking_duration.numeric' => __( + 'validation.admin_config.zombie_car_num' + ), + ]; + + $validator = Validator::make($validator_data, $rules, $messages); + if ($validator->fails()) { + throw new ValidationException($validator); + } + } + + $model->update([ + 'content' => $content, + 'updated_at' => get_datetime() + ]); + + $this->logService->logUpdated($model, $oldValue, '系统配置更新'); + return $this->responseService->success( + null, + __('admin.update_succeeded') + ); + } catch (ValidationException|CustomException $e) { + throw $e; + } catch (Exception $e) { + return $this->responseService->systemError( + __('exception.update_admin_config_failed') . ':' . $e->getMessage( + ) + ); + } + } + + +} diff --git a/app/Http/Controllers/Admin/RolesController.php b/app/Http/Controllers/Admin/RolesController.php index 7df89ce..e8731d3 100644 --- a/app/Http/Controllers/Admin/RolesController.php +++ b/app/Http/Controllers/Admin/RolesController.php @@ -107,7 +107,7 @@ class RolesController extends BaseController throw $e; } catch (Exception $e) { return $this->responseService->systemError( - __('exception.create_admin_user_failed') . ':' . $e->getMessage( + __('exception.admin_role.create_failed') . ':' . $e->getMessage( ) ); } @@ -152,6 +152,31 @@ class RolesController extends BaseController return $this->extracted($id); } + /** + * @param string $id + * @return JsonResponse + */ + protected function extracted(string $id): JsonResponse + { + try { + $this->validateId($id, AdminRoles::class); + $data = [ + 'menu_list' => (new AdminMenuService())->getMenuTreeCacheList( + AdminRoleMenu::getMenuIdArr($id) + ), + 'item' => AdminRoles::query() + ->where('id', $id) + ->get() + ->toArray() + ]; + return $this->responseService->success($data); + } catch (Exception $e) { + return $this->responseService->systemError( + __('exception.get_data_failed') . ':' . $e->getMessage() + ); + } + } + /** * @param string $id * @return JsonResponse @@ -181,7 +206,7 @@ class RolesController extends BaseController throw $e; } catch (Exception $e) { return $this->responseService->systemError( - __('exception.create_admin_user_failed') . ':' . $e->getMessage( + __('exception.admin_role.update_failed') . ':' . $e->getMessage( ) ); } @@ -210,31 +235,6 @@ class RolesController extends BaseController } } - /** - * @param string $id - * @return JsonResponse - */ - protected function extracted(string $id): JsonResponse - { - try { - $this->validateId($id, AdminRoles::class); - $data = [ - 'menu_list' => (new AdminMenuService())->getMenuTreeCacheList( - AdminRoleMenu::getMenuIdArr($id) - ), - 'item' => AdminRoles::query() - ->where('id', $id) - ->get() - ->toArray() - ]; - return $this->responseService->success($data); - } catch (Exception $e) { - return $this->responseService->systemError( - __('exception.get_data_failed') . ':' . $e->getMessage() - ); - } - } - /** * @return JsonResponse * @throws InvalidArgumentException diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 122ae94..9b8a521 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -131,7 +131,7 @@ class UserController extends BaseController throw $e; } catch (Exception $e) { return $this->responseService->systemError( - __('exception.create_admin_user_failed') . ':' . $e->getMessage( + __('exception.admin_user.create_failed') . ':' . $e->getMessage( ) ); } @@ -235,7 +235,7 @@ class UserController extends BaseController throw $e; } catch (Exception $e) { return $this->responseService->systemError( - __('exception.create_admin_user_failed') . ':' . $e->getMessage( + __('exception.admin_user.update_failed') . ':' . $e->getMessage( ) ); } diff --git a/app/Models/AdminConfigs.php b/app/Models/AdminConfigs.php new file mode 100644 index 0000000..0e3486b --- /dev/null +++ b/app/Models/AdminConfigs.php @@ -0,0 +1,25 @@ + 'json' + ]; +} diff --git a/database/seeders/AdminConfigSeeder.php b/database/seeders/AdminConfigSeeder.php new file mode 100644 index 0000000..3cffddc --- /dev/null +++ b/database/seeders/AdminConfigSeeder.php @@ -0,0 +1,82 @@ +insert($this->data()); + } + + protected function data(): array + { + $created_at = date("Y-m-d H:i:s", time()); + return [ + [ + 'title' => '车场配置', + 'name' => 'parking_lot', + 'content' => json_encode([ + [ + 'name' => 'parking_lot_id', + 'value' => 666 + ], + [ + 'name' => 'parking_lot_sum', + 'value' => 1000 + ], + [ + 'name' => 'parking_lot_image_path', + 'value' => '/home/wwwroot/test/saas-8' + ], + [ + 'name' => 'zombie_car_parking_duration', + 'value' => 10 + ], + [ + 'name' => 'numberplate_fuzzy_search', + 'value' => 1 + ], + [ + 'name' => 'automatically_clear_photo_cycle', + 'value' => 10 + ] + ]), + 'status' => 1, + 'created_at' => $created_at + ], + [ + 'title' => '第三方平台配置', + 'name' => 'third_party', + 'content' => json_encode([ + [ + 'name' => 'report_data_switch', + 'value' => 1 + ], + [ + 'name' => 'third_parking_lot_id', + 'value' => 666 + ], + [ + 'name' => 'report_api_url', + 'value' => 'https://xg-saas-8.icecloud-car.cc' + ], + [ + 'name' => 'report_cycle', + 'value' => 60 + ], + ]), + 'status' => 1, + 'created_at' => $created_at + ] + ]; + } +} diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index 6dc0a60..8e280ff 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -19,7 +19,7 @@ class AdminMenuSeeder extends Seeder private function data(): array { - $not_datetime = get_datetime(); + $not_datetime = date("Y-m-d H:i:s", time()); return [ [ 'id' => 1, diff --git a/routes/admin/api.php b/routes/admin/api.php index 7c2cdba..ad74712 100644 --- a/routes/admin/api.php +++ b/routes/admin/api.php @@ -1,6 +1,7 @@ 'admin'], function () { // 首页 Route::get('/index', [IndexController::class, 'index']); Route::get('/menu', [IndexController::class, 'menu']); + // 系统总配置 + Route::get('/config/index', [ConfigController::class, 'index']); + Route::put('/config/{id}', [ConfigController::class, 'update']); // 角色 Route::apiResource('roles', RolesController::class); Route::get('/role/rule', [RolesController::class, 'rule']);