erp-backend/app/Http/Controllers/SystemConfigController.php
2026-04-01 17:07:04 +08:00

478 lines
14 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\SystemConfigRequest;
use App\Models\SystemConfig;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
class SystemConfigController extends Controller
{
/**
* 系统配置列表
*/
public function index(Request $request)
{
$query = SystemConfig::query()->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);
}
}
}