478 lines
14 KiB
PHP
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);
|
|
}
|
|
}
|
|
} |