input('config_name', ''); $configKey = $request->input('config_key', ''); $configType = $request->input('config_type', ''); $status = $request->input('status', null); $page = $request->input('page', 1); $pageSize = $request->input('page_size', 10); // 构建查询 $query = DB::table('sys_config') ->where('deleted', 0); // 添加查询条件 if (!empty($configName)) { $query->where('config_name', 'like', '%' . $configName . '%'); } if (!empty($configKey)) { $query->where('config_key', 'like', '%' . $configKey . '%'); } if (!empty($configType)) { $query->where('config_type', $configType); } if ($status !== null) { $query->where('status', $status); } // 计算总数 $total = $query->count(); // 分页查询 $configs = $query->orderBy('id', 'asc') ->skip(($page - 1) * $pageSize) ->take($pageSize) ->get(); foreach ($configs as $config) { if($config->config_type == 'IMAGE') { // 处理图片类型配置 $config->config_value = config('app.url') .'/'. $config->config_value; } } // 构造返回数据 $data = [ 'list' => $configs, 'total' => $total, 'page' => $page, 'page_size' => $pageSize, 'total_pages' => ceil($total / $pageSize) ]; return Rs::success($data); } /** * 保存配置信息 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function Save(Request $request) { $data = $request->validate([ 'id' => 'required|integer', 'config_name' => 'required|string|max:100', 'config_key' => [ 'required', 'string', 'max:100', Rule::unique('sys_config', 'config_key')->ignore($request->id, 'id'), ], 'config_value' => 'required|string', 'config_type' => 'required|string|in:STRING,INTEGER,BOOLEAN,JSON,IMAGE', 'remark' => 'nullable|string|max:255', 'status' => 'required|integer|in:0,1', ]); $conditions = ['id' => $data['id']]; $values = [ 'config_name' => $data['config_name'], 'config_key' => $data['config_key'], 'config_value' => $data['config_value'], 'config_type' => $data['config_type'], 'remark' => $data['remark'] ?? '', 'status' => $data['status'], ]; // 如果是新增记录 if ($data['id'] == 0) { $values['create_time'] = now(); $values['update_time'] = now(); } else { $values['update_time'] = now(); } $updated = DB::table('sys_config')->updateOrInsert($conditions, $values); if ($updated) { return Rs::success(); } return Rs::error('操作失败'); } /** * 删除配置 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function Delete(Request $request) { $data = $request->validate([ 'id' => 'required|integer', ]); $deleted = DB::table('sys_config')->where('id', $data['id'])->update(['deleted' => 1, 'update_time' => now()]); if ($deleted) { return Rs::success(); } return Rs::error('删除失败'); } /** * 获取配置详情 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getInfo(Request $request) { $data = $request->validate([ 'id' => 'required|integer', ]); $config = DB::table('sys_config') ->where('id', $data['id']) ->where('deleted', 0) ->first(); if ($config) { return Rs::success($config); } return Rs::error('配置不存在'); } /** * 根据配置键获取配置值 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getByKey(Request $request) { $data = $request->validate([ 'config_key' => 'required|string', ]); $config = DB::table('sys_config') ->where('config_key', $data['config_key']) ->where('status', 1) ->where('deleted', 0) ->first(); if ($config) { return Rs::success([ 'config_key' => $config->config_key, 'config_value' => $config->config_value, 'config_type' => $config->config_type ]); } return Rs::error('配置不存在或已禁用'); } /** * 批量更新配置 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function batchUpdate(Request $request) { $data = $request->validate([ 'configs' => 'required|array', 'configs.*.id' => 'required|integer', 'configs.*.config_value' => 'required|string', ]); try { DB::beginTransaction(); foreach ($data['configs'] as $config) { DB::table('sys_config') ->where('id', $config['id']) ->where('deleted', 0) ->update([ 'config_value' => $config['config_value'], 'update_time' => now() ]); } DB::commit(); return Rs::success(); } catch (\Exception $e) { DB::rollBack(); return Rs::error('批量更新失败:' . $e->getMessage()); } } /** * 获取配置(仅支持指定配置项) * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getConfig(Request $request) { $data = $request->validate([ 'config_keys' => 'required|array', 'config_keys.*' => 'string', ]); $configKeys = $data['config_keys']; if (empty($configKeys)) { return Rs::error('config_keys 参数不能为空'); } // 从数据库获取指定且有效的配置项 $configs = DB::table('sys_config') ->whereIn('config_key', $configKeys) ->where('status', 1) ->where('deleted', 0) ->get(['config_key', 'config_value', 'config_type']) // 明确选择字段 ->keyBy('config_key') // 转为以 config_key 为 key 的集合 ->toArray(); $result = []; foreach ($configKeys as $key) { if (isset($configs[$key])) { $config = $configs[$key]; $value = $config->config_value; // 如果是图片类型,拼接完整 URL if ($config->config_type === 'IMAGE') { $value = rtrim(config('app.url'), '/') . '/' . ltrim($value, '/'); } $result[$key] = $value; } else { // 使用默认值 $result[$key] = $this->getDefaultConfigValue($key); } } return Rs::success($result); } /** * 获取配置的默认值 * @param string $configKey * @return string */ private function getDefaultConfigValue($configKey) { $defaults = [ 'system_title' => '后台管理系统', 'system_logo' => rtrim(config('app.url'), '/') . '/logo.png', 'system_version' => 'v1.0.0', 'page_size' => '10', ]; return $defaults[$configKey] ?? ''; } /** * 清除系统缓存 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function clearCache(Request $request) { try { $user = $request->attributes->get('payload'); $admin=DB::table('sys_user_role')->where(['user_id'=>$user['user_id'],'role_id'=>1])->first(); if(!$admin){ return Rs::error('无权限'); } // 清除应用缓存 Artisan::call('cache:clear'); // 清除配置缓存 Artisan::call('config:clear'); // 清除路由缓存 Artisan::call('route:clear'); // 清除视图缓存 Artisan::call('view:clear'); // 清除优化类加载器缓存 Artisan::call('clear-compiled'); // 清除OPcache缓存 if (function_exists('opcache_reset')) { opcache_reset(); } return Rs::success(['message' => '缓存清除成功']); } catch (\Exception $e) { return Rs::error('清除缓存失败:' . $e->getMessage()); } } /** * 重建系统缓存 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function rebuildCache(Request $request) { try { $user = $request->attributes->get('payload'); $admin=DB::table('sys_user_role')->where(['user_id'=>$user['user_id'],'role_id'=>1])->first(); if(!$admin){ return Rs::error('无权限'); } // 清除旧缓存 Artisan::call('cache:clear'); Artisan::call('config:clear'); Artisan::call('route:clear'); Artisan::call('view:clear'); // 重新生成缓存 Artisan::call('config:cache'); Artisan::call('route:cache'); Artisan::call('view:cache'); return Rs::success(['message' => '缓存重建成功']); } catch (\Exception $e) { return Rs::error('重建缓存失败:' . $e->getMessage()); } } }