@inject IWebHostEnvironment Env
@inject IConfiguration Config
@inject Microsoft.AspNetCore.Identity.UserManager<ApplicationUser> Accounts
@{
var path = Context.Request.Path.Value ?? "/";
var signedIn = User.Identity?.IsAuthenticated == true;
var demoAccount = signedIn && (await Accounts.GetUserAsync(User))?.IsDemo == true;
var links = new[] { ("/", "⌂", "今日"), ("/Diary", "✎", "情绪日记"), ("/Nearby", "◎", "附近推荐"), ("/Review", "↗", "情绪回顾"), ("/Favorites", "♡", "想去清单"), ("/Experiences", "▧", "我的体验"), ("/Settings", "⚙", "个人设置") };
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>@ViewData["Title"] · 耳间 EARSystem</title>
<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="/css/site.css" asp-append-version="true" />
</head>
<body>
<div id="csrf" hidden>@Html.AntiForgeryToken()</div>
<div class="app-shell @(signedIn ? "" : "public-shell")">
<aside class="sidebar">
<a class="brand" href="/"><span class="brand-mark">e</span><span>耳间<small>EAR SYSTEM</small></span></a>
<p class="brand-caption">感受自己,也发现生活。</p>
@if (signedIn) {
<nav class="side-nav" aria-label="主导航">
@foreach (var link in links) { <a class="@(path == link.Item1 || path.StartsWith(link.Item1 + "/") ? "active" : "")" href="@link.Item1"><span class="nav-icon">@link.Item2</span>@link.Item3</a> }
@if (User.IsInRole("Admin")) { <a href="/Admin" class="@(path.StartsWith("/Admin") ? "active" : "")"><span class="nav-icon">▦</span>管理后台</a> }
</nav>
<div class="sidebar-bottom"><div class="little-leaf">✿</div><p>每一种心情<br />都值得被好好安放。</p>
<form action="/Account/Logout" method="post">@Html.AntiForgeryToken()<button class="text-button" type="submit">退出登录 ↗</button></form>
</div>
} else {
<nav class="side-nav"><a href="/Account/Login">登录</a><a href="/Account/Register">创建账号</a></nav>
<div class="sidebar-bottom"><p>写下今天,<br />找到适合此刻的去处。</p></div>
}
</aside>
<main class="main-content">
<header class="topbar"><span>YOUR EVERYDAY, A LITTLE BETTER</span><div><span class="date-chip" id="today-date"></span><span class="avatar">@(signedIn ? "耳" : "✿")</span></div></header>
@if (demoAccount) { <div class="demo-banner"><span>✿ 演示账号</span> 初始日记与体验为合成样本,可用于体验完整流程。</div> }
@if (TempData["Notice"] != null) { <div class="notice" role="status">@TempData["Notice"]</div> }
@RenderBody()
<footer class="page-footer">耳间 EARSystem <span>·</span> 让每一次记录,连接更适合你的生活。</footer>
</main>
</div>
@if (signedIn) {
<nav class="mobile-nav" aria-label="手机导航"><a href="/Diary">✎<span>记录</span></a><a href="/Nearby">◎<span>附近</span></a><a href="/Review">↗<span>回顾</span></a><a href="/Settings">◉<span>我的</span></a></nav>
}
<div id="toast" role="status" aria-live="polite"></div>
<script src="/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
@inject IWebHostEnvironment Env
@inject IConfiguration Config
@inject Microsoft.AspNetCore.Identity.UserManager<ApplicationUser> Accounts
@{
var path = Context.Request.Path.Value ?? "/";
var signedIn = User.Identity?.IsAuthenticated == true;
var demoAccount = signedIn && (await Accounts.GetUserAsync(User))?.IsDemo == true;
var links = new[] { ("/", "⌂", "今日"), ("/Diary", "✎", "情绪日记"), ("/Nearby", "◎", "附近推荐"), ("/Review", "↗", "情绪回顾"), ("/Favorites", "♡", "想去清单"), ("/Experiences", "▧", "我的体验"), ("/Settings", "⚙", "个人设置") };
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>@ViewData["Title"] · 耳间 EARSystem</title>
<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="/css/site.css" asp-append-version="true" />
</head>
<body>
<div id="csrf" hidden>@Html.AntiForgeryToken()</div>
<div class="app-shell @(signedIn ? "" : "public-shell")">
<aside class="sidebar">
<a class="brand" href="/"><span class="brand-mark">e</span><span>耳间<small>EAR SYSTEM</small></span></a>
<p class="brand-caption">感受自己,也发现生活。</p>
@if (signedIn) {
<nav class="side-nav" aria-label="主导航">
@foreach (var link in links) { <a class="@(path == link.Item1 || path.StartsWith(link.Item1 + "/") ? "active" : "")" href="@link.Item1"><span class="nav-icon">@link.Item2</span>@link.Item3</a> }
@if (User.IsInRole("Admin")) { <a href="/Admin" class="@(path.StartsWith("/Admin") ? "active" : "")"><span class="nav-icon">▦</span>管理后台</a> }
</nav>
<div class="sidebar-bottom"><div class="little-leaf">✿</div><p>每一种心情<br />都值得被好好安放。</p>
<form action="/Account/Logout" method="post">@Html.AntiForgeryToken()<button class="text-button" type="submit">退出登录 ↗</button></form>
</div>
} else {
<nav class="side-nav"><a href="/Account/Login">登录</a><a href="/Account/Register">创建账号</a></nav>
<div class="sidebar-bottom"><p>写下今天,<br />找到适合此刻的去处。</p></div>
}
</aside>
<main class="main-content">
<header class="topbar"><span>YOUR EVERYDAY, A LITTLE BETTER</span><div><span class="date-chip" id="today-date"></span><span class="avatar">@(signedIn ? "耳" : "✿")</span></div></header>
@if (demoAccount) { <div class="demo-banner"><span>✿ 演示账号</span> 初始日记与体验为合成样本,可用于体验完整流程。</div> }
@if (TempData["Notice"] != null) { <div class="notice" role="status">@TempData["Notice"]</div> }
@RenderBody()
<footer class="page-footer">耳间 EARSystem <span>·</span> 让每一次记录,连接更适合你的生活。</footer>
</main>
</div>
@if (signedIn) {
<nav class="mobile-nav" aria-label="手机导航"><a href="/Diary">✎<span>记录</span></a><a href="/Nearby">◎<span>附近</span></a><a href="/Review">↗<span>回顾</span></a><a href="/Settings">◉<span>我的</span></a></nav>
}
<div id="toast" role="status" aria-live="polite"></div>
<script src="/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>