78 lines
2.3 KiB
PHP
78 lines
2.3 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 文件功能:后台等级经验阈值配置控制器
|
||
|
|
*
|
||
|
|
* 将 sysparam 表中的 levelexp 配置拆分为独立后台页面,
|
||
|
|
* 以列表模式维护每一级所需的累计经验值。
|
||
|
|
*/
|
||
|
|
|
||
|
|
namespace App\Http\Controllers\Admin;
|
||
|
|
|
||
|
|
use App\Http\Controllers\Controller;
|
||
|
|
use App\Http\Requests\UpdateLevelExpConfigRequest;
|
||
|
|
use App\Models\Sysparam;
|
||
|
|
use App\Services\ChatStateService;
|
||
|
|
use Illuminate\Http\RedirectResponse;
|
||
|
|
use Illuminate\View\View;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 类功能:负责展示和保存等级经验阈值列表。
|
||
|
|
*/
|
||
|
|
class LevelExpConfigController extends Controller
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* 方法功能:注入系统参数缓存同步服务。
|
||
|
|
*/
|
||
|
|
public function __construct(
|
||
|
|
private readonly ChatStateService $chatState
|
||
|
|
) {}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 方法功能:显示等级经验阈值列表页。
|
||
|
|
*/
|
||
|
|
public function index(): View
|
||
|
|
{
|
||
|
|
$rawThresholds = Sysparam::getLevelExpThresholds();
|
||
|
|
$maxLevel = (int) Sysparam::getValue('maxlevel', '99');
|
||
|
|
|
||
|
|
$thresholds = collect($rawThresholds)
|
||
|
|
->values()
|
||
|
|
->map(fn (int $exp, int $index): array => [
|
||
|
|
'level' => $index + 1,
|
||
|
|
'exp' => $exp,
|
||
|
|
'increment' => $index === 0 ? $exp : $exp - $rawThresholds[$index - 1],
|
||
|
|
]);
|
||
|
|
|
||
|
|
return view('admin.level-exp-configs.index', [
|
||
|
|
'thresholds' => $thresholds,
|
||
|
|
'maxLevel' => $maxLevel,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 方法功能:保存等级经验阈值配置,并同步刷新缓存。
|
||
|
|
*/
|
||
|
|
public function update(UpdateLevelExpConfigRequest $request): RedirectResponse
|
||
|
|
{
|
||
|
|
$thresholds = $request->validated('thresholds');
|
||
|
|
|
||
|
|
// 将列表页提交的阈值重新拼成兼容旧逻辑的逗号字符串。
|
||
|
|
$body = implode(',', $thresholds);
|
||
|
|
|
||
|
|
Sysparam::updateOrCreate(
|
||
|
|
['alias' => 'levelexp'],
|
||
|
|
[
|
||
|
|
'body' => $body,
|
||
|
|
'guidetxt' => '按列表逐级维护升级所需的累计经验阈值',
|
||
|
|
]
|
||
|
|
);
|
||
|
|
|
||
|
|
// 同步更新 Redis / Cache,确保前台经验等级计算即时生效。
|
||
|
|
$this->chatState->setSysParam('levelexp', $body);
|
||
|
|
Sysparam::clearCache('levelexp');
|
||
|
|
|
||
|
|
return redirect()->route('admin.level-exp-configs.index')->with('success', '等级经验阈值已保存并生效!');
|
||
|
|
}
|
||
|
|
}
|