You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
364 lines
10 KiB
PHP
364 lines
10 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Lib\Rs;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class SysConfigController extends Controller
|
|
{
|
|
/**
|
|
* 获取配置列表
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function list(Request $request)
|
|
{
|
|
// 获取查询参数
|
|
$configName = $request->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());
|
|
}
|
|
}
|
|
}
|