orderBy('group', 'asc')->orderBy('sort', 'asc'); // 筛选条件 if ($request->filled('group')) { $query->where('group', $request->group); } if ($request->filled('key')) { $query->where('key', 'like', "%{$request->key}%"); } $perPage = $request->input('limit', 100); $configs = $query->paginate($perPage); return response()->json([ 'code' => 200, 'data' => [ 'list' => $configs->items(), 'total' => $configs->total(), 'current_page' => $configs->currentPage(), 'last_page' => $configs->lastPage(), ], 'message' => 'success' ]); } /** * 系统配置详情 */ public function show(string $id) { $config = SystemConfig::find($id); if (!$config) { return response()->json([ 'code' => 404, 'message' => '配置不存在' ], 404); } return response()->json([ 'code' => 200, 'data' => $config, 'message' => 'success' ]); } /** * 创建系统配置 */ public function store(SystemConfigRequest $request) { try { $config = SystemConfig::create([ 'group' => $request->group, 'key' => $request->key, 'value' => $request->value, 'type' => $request->type, 'label' => $request->label, 'description' => $request->description, 'options' => $request->options, 'rules' => $request->rules, 'sort' => $request->sort ?? 0, 'status' => $request->status ?? 'active', ]); // 清除缓存 Cache::forget('system_config_' . $config->group . '_' . $config->key); Cache::forget('system_config_group_' . $config->group); return response()->json([ 'code' => 200, 'data' => $config, 'message' => '系统配置创建成功' ]); } catch (\Exception $e) { return response()->json([ 'code' => 500, 'message' => '创建失败: ' . $e->getMessage() ], 500); } } /** * 更新系统配置 */ public function update(SystemConfigRequest $request, string $id) { $config = SystemConfig::find($id); if (!$config) { return response()->json([ 'code' => 404, 'message' => '配置不存在' ], 404); } try { $oldGroup = $config->group; $oldKey = $config->key; $config->update([ 'group' => $request->group ?? $config->group, 'key' => $request->key ?? $config->key, 'value' => $request->value ?? $config->value, 'type' => $request->type ?? $config->type, 'label' => $request->label ?? $config->label, 'description' => $request->description ?? $config->description, 'options' => $request->options ?? $config->options, 'rules' => $request->rules ?? $config->rules, 'sort' => $request->sort ?? $config->sort, 'status' => $request->status ?? $config->status, ]); // 清除新旧缓存 Cache::forget('system_config_' . $oldGroup . '_' . $oldKey); Cache::forget('system_config_group_' . $oldGroup); Cache::forget('system_config_' . $config->group . '_' . $config->key); Cache::forget('system_config_group_' . $config->group); return response()->json([ 'code' => 200, 'data' => $config, 'message' => '系统配置更新成功' ]); } catch (\Exception $e) { return response()->json([ 'code' => 500, 'message' => '更新失败: ' . $e->getMessage() ], 500); } } /** * 删除系统配置 */ public function destroy(string $id) { $config = SystemConfig::find($id); if (!$config) { return response()->json([ 'code' => 404, 'message' => '配置不存在' ], 404); } try { // 清除缓存 Cache::forget('system_config_' . $config->group . '_' . $config->key); Cache::forget('system_config_group_' . $config->group); $config->delete(); return response()->json([ 'code' => 200, 'message' => '系统配置删除成功' ]); } catch (\Exception $e) { return response()->json([ 'code' => 500, 'message' => '删除失败: ' . $e->getMessage() ], 500); } } /** * 获取配置值 */ public function getValue(Request $request) { $request->validate([ 'group' => 'required|string', 'key' => 'required|string', ]); $cacheKey = 'system_config_' . $request->group . '_' . $request->key; $value = Cache::remember($cacheKey, 3600, function () use ($request) { $config = SystemConfig::where('group', $request->group) ->where('key', $request->key) ->where('status', 'active') ->first(); return $config ? $config->value : null; }); return response()->json([ 'code' => 200, 'data' => [ 'group' => $request->group, 'key' => $request->key, 'value' => $value, ], 'message' => 'success' ]); } /** * 批量获取配置值 */ public function batchGetValues(Request $request) { $request->validate([ 'configs' => 'required|array|min:1', 'configs.*.group' => 'required|string', 'configs.*.key' => 'required|string', ]); $results = []; foreach ($request->configs as $config) { $cacheKey = 'system_config_' . $config['group'] . '_' . $config['key']; $value = Cache::remember($cacheKey, 3600, function () use ($config) { $configItem = SystemConfig::where('group', $config['group']) ->where('key', $config['key']) ->where('status', 'active') ->first(); return $configItem ? $configItem->value : null; }); $results[] = [ 'group' => $config['group'], 'key' => $config['key'], 'value' => $value, ]; } return response()->json([ 'code' => 200, 'data' => $results, 'message' => 'success' ]); } /** * 获取分组配置 */ public function getGroupConfigs(Request $request) { $request->validate([ 'group' => 'required|string', ]); $cacheKey = 'system_config_group_' . $request->group; $configs = Cache::remember($cacheKey, 3600, function () use ($request) { return SystemConfig::where('group', $request->group) ->where('status', 'active') ->orderBy('sort', 'asc') ->get() ->mapWithKeys(function ($config) { return [$config->key => $config->value]; }) ->toArray(); }); return response()->json([ 'code' => 200, 'data' => [ 'group' => $request->group, 'configs' => $configs, ], 'message' => 'success' ]); } /** * 获取配置分组列表 */ public function getGroups() { $groups = SystemConfig::select('group') ->distinct() ->orderBy('group', 'asc') ->pluck('group'); return response()->json([ 'code' => 200, 'data' => $groups, 'message' => 'success' ]); } /** * 批量更新配置 */ public function batchUpdate(Request $request) { $request->validate([ 'configs' => 'required|array|min:1', 'configs.*.id' => 'required|integer|exists:system_configs,id', 'configs.*.value' => 'required', ]); $successCount = 0; $failedConfigs = []; try { foreach ($request->configs as $configData) { $config = SystemConfig::find($configData['id']); if (!$config) { $failedConfigs[] = ['id' => $configData['id'], 'reason' => '配置不存在']; continue; } $config->update(['value' => $configData['value']]); // 清除缓存 Cache::forget('system_config_' . $config->group . '_' . $config->key); Cache::forget('system_config_group_' . $config->group); $successCount++; } return response()->json([ 'code' => 200, 'data' => [ 'success_count' => $successCount, 'failed_configs' => $failedConfigs, ], 'message' => "批量更新成功,成功 {$successCount} 个" ]); } catch (\Exception $e) { return response()->json([ 'code' => 500, 'message' => '批量更新失败: ' . $e->getMessage() ], 500); } } /** * 导入默认配置 */ public function importDefaults() { $defaultConfigs = [ // 系统设置 [ 'group' => 'system', 'key' => 'site_name', 'value' => 'ERP管理系统', 'type' => 'text', 'label' => '站点名称', 'description' => '系统显示的名称', 'sort' => 1, ], [ 'group' => 'system', 'key' => 'site_logo', 'value' => '', 'type' => 'image', 'label' => '站点Logo', 'description' => '系统Logo图片', 'sort' => 2, ], [ 'group' => 'system', 'key' => 'site_favicon', 'value' => '', 'type' => 'image', 'label' => '站点图标', 'description' => '浏览器标签页图标', 'sort' => 3, ], [ 'group' => 'system', 'key' => 'copyright', 'value' => '© 2026 ERP管理系统', 'type' => 'text', 'label' => '版权信息', 'description' => '页面底部版权信息', 'sort' => 4, ], // 业务设置 [ 'group' => 'business', 'key' => 'default_warehouse', 'value' => '1', 'type' => 'select', 'label' => '默认仓库', 'description' => '创建订单时的默认仓库', 'sort' => 1, ], [ 'group' => 'business', 'key' => 'auto_audit_order', 'value' => '0', 'type' => 'switch', 'label' => '自动审核订单', 'description' => '是否自动审核拉取的订单', 'sort' => 2, ], [ 'group' => 'business', 'key' => 'order_expire_hours', 'value' => '24', 'type' => 'number', 'label' => '订单过期时间', 'description' => '订单超过多少小时未处理自动取消(小时)', 'sort' => 3, ], // 打印设置 [ 'group' => 'print', 'key' => 'default_template', 'value' => '1', 'type' => 'select', 'label' => '默认打印模板', 'description' => '发货时的默认打印模板', 'sort' => 1, ], [ 'group' => 'print', 'key' => 'print_auto_open', 'value' => '1', 'type' => 'switch', 'label' => '自动打开打印窗口', 'description' => '发货后是否自动打开打印窗口', 'sort' => 2, ], ]; $importedCount = 0; try { foreach ($defaultConfigs as $configData) { $exists = SystemConfig::where('group', $configData['group']) ->where('key', $configData['key']) ->exists(); if (!$exists) { SystemConfig::create(array_merge($configData, [ 'status' => 'active', 'options' => null, 'rules' => null, ])); $importedCount++; } } // 清除所有配置缓存 Cache::flush(); return response()->json([ 'code' => 200, 'data' => ['imported_count' => $importedCount], 'message' => "成功导入 {$importedCount} 个默认配置" ]); } catch (\Exception $e) { return response()->json([ 'code' => 500, 'message' => '导入失败: ' . $e->getMessage() ], 500); } } }