@using Dpz.Core.EnumLibrary
@model Dpz.Core.Public.ViewModel.Steam.VmSteamGame
<div class="steam-container">
<a asp-action="Index" data-pjax class="steam-back-btn">
<i class="fa fa-arrow-left"></i> 返回游戏列表
</a>
@if (Model.Achievements.Count == 0)
{
<div class="steam-empty">
<i class="fa fa-frown-o steam-empty__icon"></i>
<h3>暂无成就数据</h3>
<p>该游戏可能暂不支持成就系统,或数据尚未同步。</p>
</div>
}
else
{
var unlockedAchievements = Model.Achievements.Where(x => x.UnlockTime.HasValue).ToList();
var lockedAchievements = Model.Achievements.Where(x => !x.Hidden && x.UnlockTime == null).ToList();
var hiddenAchievements = Model.Achievements.Where(x => x.Hidden && x.UnlockTime == null).ToList();
var totalCount = Model.Achievements.Count;
var unlockedCount = unlockedAchievements.Count;
var percent = totalCount > 0 ? ((decimal)unlockedCount / totalCount * 100).ToString("F1") : "0";
var time = TimeSpan.FromMinutes(Model.PlayTime);
<div class="steam-detail-header">
<img src="@Model.ImageLogo" alt="@Model.Name" class="steam-detail-header__cover"/>
<div class="steam-detail-header__info">
<h1 class="steam-detail-header__title">@Model.Name</h1>
<div class="steam-detail-header__meta">
<div class="steam-detail-header__meta-item">
<i class="fa-regular fa-clock"></i>
<span>游戏时长:@($"{time.TotalHours:0} 小时")</span>
</div>
<div class="steam-detail-header__meta-item">
<i class="fa fa-trophy"></i>
<span>总成就:@totalCount</span>
</div>
</div>
<div class="steam-summary">
<div class="steam-summary__stats">
<span>总体进度</span>
<span>@unlockedCount / @totalCount (@percent%)</span>
</div>
<div class="steam-summary__progress-track">
<div class="steam-summary__progress-bar" style="width: 0" data-width="@percent%"></div>
</div>
</div>
<div class="steam-stats-grid">
<div class="steam-stat-box">
<span class="steam-stat-box__value" style="color: #10b981">@unlockedCount</span>
<span class="steam-stat-box__label">已解锁</span>
</div>
<div class="steam-stat-box">
<span class="steam-stat-box__value" style="color: var(--color-text-secondary)">@lockedAchievements.Count</span>
<span class="steam-stat-box__label">未解锁</span>
</div>
@if (hiddenAchievements.Any())
{
<div class="steam-stat-box">
<span class="steam-stat-box__value" style="color: #6366f1">@hiddenAchievements.Count</span>
<span class="steam-stat-box__label">隐藏</span>
</div>
}
</div>
</div>
</div>
@if (unlockedAchievements.Any())
{
<div class="steam-group" data-group-id="unlocked-@Model.Id">
<div class="steam-group__header">
<h2 class="steam-group__title">
<i class="fa fa-check-circle" style="color: #10b981;"></i>
已解锁成就 (@unlockedCount)
</h2>
<i class="fa fa-chevron-down steam-group__icon"></i>
</div>
<div class="steam-group__content">
@foreach (var item in unlockedAchievements.OrderByDescending(x => x.UnlockTime))
{
<div class="steam-achievement">
<div class="steam-achievement__icon">
<img src="@item.Icon" alt="@item.DisplayName" loading="lazy"/>
</div>
<div class="steam-achievement__info">
<div class="steam-achievement__name">@item.DisplayName</div>
<div class="steam-achievement__desc">@item.Description</div>
</div>
<div class="steam-achievement__status">
<span class="steam-status-badge steam-status-badge--unlocked">
<i class="fa fa-check"></i> 已解锁
</span>
<small style="margin-top: 4px;">@item.UnlockTime?.ToString("yyyy-MM-dd HH:mm:ss")</small>
</div>
</div>
}
</div>
</div>
}
@if (lockedAchievements.Any())
{
<div class="steam-group steam-is-collapsed" data-group-id="locked-@Model.Id">
<div class="steam-group__header">
<h2 class="steam-group__title">
<i class="fa-regular fa-circle" style="color: var(--color-text-muted);"></i>
待解锁成就 (@lockedAchievements.Count)
</h2>
<i class="fa fa-chevron-down steam-group__icon"></i>
</div>
<div class="steam-group__content">
@foreach (var item in lockedAchievements)
{
<div class="steam-achievement">
<div class="steam-achievement__icon" style="opacity: 0.5; filter: grayscale(1);">
<img src="@item.Icon" alt="@item.DisplayName" loading="lazy"/>
</div>
<div class="steam-achievement__info">
<div class="steam-achievement__name">@item.DisplayName</div>
<div class="steam-achievement__desc">@item.Description</div>
</div>
<div class="steam-achievement__status">
<span class="steam-status-badge steam-status-badge--locked">
<i class="fa fa-lock"></i> 未解锁
</span>
</div>
</div>
}
</div>
</div>
}
@if (hiddenAchievements.Any())
{
<div class="steam-group steam-is-collapsed" data-group-id="hidden-@Model.Id">
<div class="steam-group__header">
<h2 class="steam-group__title">
<i class="fa fa-eye-slash" style="color: #6366f1;"></i>
隐藏成就 (@hiddenAchievements.Count)
</h2>
<i class="fa fa-chevron-down steam-group__icon"></i>
</div>
<div class="steam-group__content">
@foreach (var item in hiddenAchievements)
{
<div class="steam-achievement">
<div class="steam-achievement__icon" style="opacity: 0.5;">
<img src="@item.Icon" alt="隐藏成就" loading="lazy"/>
</div>
<div class="steam-achievement__info">
<div class="steam-achievement__name">隐藏成就</div>
<div class="steam-achievement__desc">继续探索以发现此成就...</div>
</div>
<div class="steam-achievement__status">
<span class="steam-status-badge steam-status-badge--hidden">
<i class="fa fa-eye-slash"></i> 隐藏
</span>
</div>
</div>
}
</div>
</div>
}
<div style="margin-top: var(--spacing-xl);">
@{
var commentModel = (CommentNode.Steam, Model.Id.ToString());
}
<partial name="_GlobalCommentPartial" model="@commentModel"/>
</div>
}
</div>
评论加载中...