功能:今日风云榜独立页 /leaderboard/today,导航新增「今日榜」按钮

This commit is contained in:
2026-02-28 13:50:51 +08:00
parent 0662901b1b
commit 7643740eda
5 changed files with 183 additions and 83 deletions

View File

@@ -100,10 +100,31 @@ class LeaderboardController extends Controller
return view('leaderboard.index', compact(
'topLevels', 'topExp', 'topWealth', 'topCharm',
'todayExp', 'todayGold', 'todayCharm',
));
}
/**
* 今日风云榜独立页(经验/金币/魅力今日排行)
*/
public function todayIndex(): View
{
$todayTtl = 60 * 5;
$today = today()->toDateString();
$topN = (int) \App\Models\Sysparam::getValue('leaderboard_limit', '20');
$todayExp = Cache::remember("leaderboard:today_exp:{$today}", $todayTtl,
fn () => $this->currencyService->todayLeaderboard('exp', $topN, $today)
);
$todayGold = Cache::remember("leaderboard:today_gold:{$today}", $todayTtl,
fn () => $this->currencyService->todayLeaderboard('gold', $topN, $today)
);
$todayCharm = Cache::remember("leaderboard:today_charm:{$today}", $todayTtl,
fn () => $this->currencyService->todayLeaderboard('charm', $topN, $today)
);
return view('leaderboard.today', compact('todayExp', 'todayGold', 'todayCharm'));
}
/**
* 用户个人流水日志页(查询自己的经验/金币/魅力操作历史)
*/

View File

@@ -75,6 +75,10 @@
class="text-yellow-400 hover:text-yellow-300 font-bold flex items-center transition hidden sm:flex">
<span class="mr-1">🏆</span> 风云榜
</a>
<a href="{{ route('leaderboard.today') }}"
class="text-green-400 hover:text-green-300 font-bold flex items-center transition hidden sm:flex">
<span class="mr-1">📅</span> 今日榜
</a>
<a href="{{ route('guestbook.index') }}"
class="text-indigo-200 hover:text-white font-bold flex items-center transition hidden sm:flex">
<span class="mr-1">✉️</span> 留言板

View File

@@ -19,10 +19,14 @@
{{-- 说明条 --}}
<div class="bg-indigo-50 border-b border-indigo-100 py-3 shrink-0">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex justify-between items-center text-sm">
<p class="text-indigo-800 font-medium"> 累计榜 <span class="font-bold text-red-500">15分钟</span>
刷新,今日榜每 <span class="font-bold text-green-600">5分钟</span> 刷新。努力提升自己,让全服铭记你的名字!</p>
<a href="{{ route('currency.my-logs') }}" class="text-indigo-600 font-semibold hover:underline text-xs">📊
查看我的积分日志 </a>
<p class="text-indigo-800 font-medium"> 数据 <span class="font-bold text-red-500">15分钟</span>
自动刷新一次。努力提升自己,让全服铭记你的名字!</p>
<div class="flex items-center gap-4">
<a href="{{ route('leaderboard.today') }}" class="text-green-600 font-semibold hover:underline text-xs">📅
今日风云榜 </a>
<a href="{{ route('currency.my-logs') }}" class="text-indigo-600 font-semibold hover:underline text-xs">📊
我的积分日志 </a>
</div>
</div>
</div>
@@ -107,83 +111,5 @@
</div>
</div>
{{-- ═══ 今日榜每5分钟更新来自流水记录表═══ --}}
<h2 class="text-lg font-bold text-gray-700 mt-10 mb-4 flex items-center gap-2">
<span>📅</span> 今日排行榜
<span class="text-xs text-gray-400 font-normal">今日获得量排名5分钟更新</span>
</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
{{-- 今日经验榜 --}}
<div class="bg-white rounded-xl shadow-sm border border-amber-200 overflow-hidden">
<div
class="bg-gradient-to-r from-amber-500 to-orange-400 px-4 py-3 flex justify-between items-center text-white">
<h2 class="font-bold text-lg"> 今日修为榜</h2>
<span class="text-xs bg-amber-800/30 px-2 py-0.5 rounded">今日Exp</span>
</div>
<div class="p-0 overflow-y-auto max-h-64">
@if ($todayExp->isEmpty())
<p class="text-center text-gray-400 py-8 text-sm">今日暂无记录</p>
@else
@foreach ($todayExp as $i => $row)
<div class="flex items-center gap-3 px-4 py-2 border-b border-gray-50 hover:bg-amber-50">
<span class="w-6 text-center font-bold text-gray-400">{{ $i + 1 }}</span>
<span class="flex-1 text-sm font-medium truncate">{{ $row->username }}</span>
<span class="text-amber-600 font-semibold text-sm">+{{ number_format($row->total) }}</span>
</div>
@endforeach
@endif
</div>
</div>
{{-- 今日金币榜 --}}
<div class="bg-white rounded-xl shadow-sm border border-yellow-200 overflow-hidden">
<div
class="bg-gradient-to-r from-yellow-500 to-yellow-400 px-4 py-3 flex justify-between items-center text-yellow-900">
<h2 class="font-bold text-lg">💰 今日财富榜</h2>
<span class="text-xs bg-yellow-800/20 px-2 py-0.5 rounded">今日Coin</span>
</div>
<div class="p-0 overflow-y-auto max-h-64">
@if ($todayGold->isEmpty())
<p class="text-center text-gray-400 py-8 text-sm">今日暂无记录</p>
@else
@foreach ($todayGold as $i => $row)
<div class="flex items-center gap-3 px-4 py-2 border-b border-gray-50 hover:bg-yellow-50">
<span class="w-6 text-center font-bold text-gray-400">{{ $i + 1 }}</span>
<span class="flex-1 text-sm font-medium truncate">{{ $row->username }}</span>
<span class="text-yellow-600 font-semibold text-sm">+{{ number_format($row->total) }}</span>
</div>
@endforeach
@endif
</div>
</div>
{{-- 今日魅力榜 --}}
<div class="bg-white rounded-xl shadow-sm border border-pink-200 overflow-hidden">
<div
class="bg-gradient-to-r from-pink-500 to-rose-400 px-4 py-3 flex justify-between items-center text-white">
<h2 class="font-bold text-lg">🌸 今日魅力榜</h2>
<span class="text-xs bg-pink-800/30 px-2 py-0.5 rounded">今日Charm</span>
</div>
<div class="p-0 overflow-y-auto max-h-64">
@if ($todayCharm->isEmpty())
<p class="text-center text-gray-400 py-8 text-sm">今日暂无记录</p>
@else
@foreach ($todayCharm as $i => $row)
<div class="flex items-center gap-3 px-4 py-2 border-b border-gray-50 hover:bg-pink-50">
<span class="w-6 text-center font-bold text-gray-400">{{ $i + 1 }}</span>
<span class="flex-1 text-sm font-medium truncate">{{ $row->username }}</span>
<span class="text-pink-600 font-semibold text-sm">+{{ number_format($row->total) }}</span>
</div>
@endforeach
@endif
</div>
</div>
</div>
</div>
</main>
@endsection

View File

@@ -0,0 +1,147 @@
{{--
文件功能:今日风云榜页面(独立页)
展示今日经验成长榜、今日金币获得榜、今日魅力增长榜
数据来自 user_currency_logs 流水表5分钟缓存刷新
风格与累计风云榜一致
@extends layouts.app
--}}
@extends('layouts.app')
@section('title', '今日风云榜 - 飘落流星')
@section('nav-icon', '📅')
@section('nav-title', '今日风云榜')
@section('content')
{{-- 说明条 --}}
<div class="bg-green-50 border-b border-green-100 py-3 shrink-0">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex justify-between items-center text-sm">
<p class="text-green-800 font-medium">🌅 今日榜每 <span class="font-bold text-red-500">5分钟</span>
自动刷新,统计今日所有正向积分获得量,凌晨清零重启。</p>
<div class="flex items-center gap-4">
<a href="{{ route('leaderboard.index') }}" class="text-indigo-600 font-semibold hover:underline text-xs">🏆
查看累计风云榜 </a>
<a href="{{ route('currency.my-logs') }}" class="text-green-600 font-semibold hover:underline text-xs">📊
我的积分日志 </a>
</div>
</div>
</div>
{{-- 主内容区 --}}
<main class="p-4 sm:p-6 lg:p-8">
<div class="max-w-7xl mx-auto">
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
{{-- 今日经验榜 --}}
<div class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden flex flex-col">
<div
class="bg-gradient-to-r from-amber-600 to-amber-500 px-4 py-3 flex justify-between items-center text-white">
<h2 class="font-bold text-lg flex items-center"><span class="mr-2 text-xl"></span> 今日修为榜</h2>
<span class="text-xs bg-amber-800/40 px-2 py-0.5 rounded">今日Exp</span>
</div>
<div class="p-0 overflow-y-auto max-h-[600px] flex-1">
@if ($todayExp->isEmpty())
<div class="flex flex-col items-center justify-center py-16 text-gray-400">
<span class="text-4xl mb-2">😴</span>
<p class="text-sm">今日暂无记录</p>
</div>
@else
@foreach ($todayExp as $i => $row)
<div
class="flex items-center gap-3 px-4 py-2.5 border-b border-gray-50 hover:bg-amber-50 transition">
@if ($i === 0)
<span class="w-6 text-center text-lg">🥇</span>
@elseif ($i === 1)
<span class="w-6 text-center text-lg">🥈</span>
@elseif ($i === 2)
<span class="w-6 text-center text-lg">🥉</span>
@else
<span
class="w-6 text-center text-sm font-bold text-gray-400">{{ $i + 1 }}</span>
@endif
<span class="flex-1 text-sm font-medium truncate">{{ $row->username }}</span>
<span class="text-amber-600 font-bold text-sm">+{{ number_format($row->total) }}</span>
</div>
@endforeach
@endif
</div>
</div>
{{-- 今日金币榜 --}}
<div class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden flex flex-col">
<div
class="bg-gradient-to-r from-yellow-500 to-yellow-400 px-4 py-3 flex justify-between items-center text-yellow-900">
<h2 class="font-bold text-lg flex items-center"><span class="mr-2 text-xl">💰</span> 今日财富榜</h2>
<span class="text-xs bg-yellow-800/20 px-2 py-0.5 rounded">今日Coin</span>
</div>
<div class="p-0 overflow-y-auto max-h-[600px] flex-1">
@if ($todayGold->isEmpty())
<div class="flex flex-col items-center justify-center py-16 text-gray-400">
<span class="text-4xl mb-2">😴</span>
<p class="text-sm">今日暂无记录</p>
</div>
@else
@foreach ($todayGold as $i => $row)
<div
class="flex items-center gap-3 px-4 py-2.5 border-b border-gray-50 hover:bg-yellow-50 transition">
@if ($i === 0)
<span class="w-6 text-center text-lg">🥇</span>
@elseif ($i === 1)
<span class="w-6 text-center text-lg">🥈</span>
@elseif ($i === 2)
<span class="w-6 text-center text-lg">🥉</span>
@else
<span
class="w-6 text-center text-sm font-bold text-gray-400">{{ $i + 1 }}</span>
@endif
<span class="flex-1 text-sm font-medium truncate">{{ $row->username }}</span>
<span class="text-yellow-600 font-bold text-sm">+{{ number_format($row->total) }}</span>
</div>
@endforeach
@endif
</div>
</div>
{{-- 今日魅力榜 --}}
<div class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden flex flex-col">
<div
class="bg-gradient-to-r from-pink-600 to-pink-500 px-4 py-3 flex justify-between items-center text-white">
<h2 class="font-bold text-lg flex items-center"><span class="mr-2 text-xl">🌸</span> 今日魅力榜</h2>
<span class="text-xs bg-pink-800/40 px-2 py-0.5 rounded">今日Charm</span>
</div>
<div class="p-0 overflow-y-auto max-h-[600px] flex-1">
@if ($todayCharm->isEmpty())
<div class="flex flex-col items-center justify-center py-16 text-gray-400">
<span class="text-4xl mb-2">😴</span>
<p class="text-sm">今日暂无记录</p>
</div>
@else
@foreach ($todayCharm as $i => $row)
<div
class="flex items-center gap-3 px-4 py-2.5 border-b border-gray-50 hover:bg-pink-50 transition">
@if ($i === 0)
<span class="w-6 text-center text-lg">🥇</span>
@elseif ($i === 1)
<span class="w-6 text-center text-lg">🥈</span>
@elseif ($i === 2)
<span class="w-6 text-center text-lg">🥉</span>
@else
<span
class="w-6 text-center text-sm font-bold text-gray-400">{{ $i + 1 }}</span>
@endif
<span class="flex-1 text-sm font-medium truncate">{{ $row->username }}</span>
<span class="text-pink-600 font-bold text-sm">+{{ number_format($row->total) }}</span>
</div>
@endforeach
@endif
</div>
</div>
</div>
<p class="text-center text-xs text-gray-400 mt-6">凌晨 00:00 自动重置 · 数据每 5 分钟刷新</p>
</div>
</main>
@endsection

View File

@@ -40,6 +40,8 @@ Route::middleware(['chat.auth'])->group(function () {
// ---- 第九阶段:外围矩阵 - 风云排行榜 ----
Route::get('/leaderboard', [\App\Http\Controllers\LeaderboardController::class, 'index'])->name('leaderboard.index');
// 今日风云榜(独立页,经验/金币/魅力今日排行)
Route::get('/leaderboard/today', [\App\Http\Controllers\LeaderboardController::class, 'todayIndex'])->name('leaderboard.today');
// 用户个人积分流水日志(查询自己的经验/金币/魅力历史)
Route::get('/my/currency-logs', [\App\Http\Controllers\LeaderboardController::class, 'myLogs'])->name('currency.my-logs');