功能:今日风云榜独立页 /leaderboard/today,导航新增「今日榜」按钮
This commit is contained in:
@@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户个人流水日志页(查询自己的经验/金币/魅力操作历史)
|
||||
*/
|
||||
|
||||
@@ -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> 留言板
|
||||
|
||||
@@ -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
|
||||
|
||||
147
resources/views/leaderboard/today.blade.php
Normal file
147
resources/views/leaderboard/today.blade.php
Normal 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
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user