This commit is contained in:
gaofeng
2026-05-13 11:19:08 +08:00
parent 58c61ff7ba
commit 373e5841e2
5 changed files with 89 additions and 39 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/.idea /.idea
/runtime /runtime
/data /data
/doc

View File

@@ -219,7 +219,6 @@
<li class=""><a href="/">{:lang('index.home')}</a></li> <li class=""><a href="/">{:lang('index.home')}</a></li>
<li class=""><a href="{:url('visa/index')}">{:lang('index.online_application')}</a></li> <li class=""><a href="{:url('visa/index')}">{:lang('index.online_application')}</a></li>
<li class=""><a href="{:url('lookup/index')}">{:lang('index.entry_card_query')}</a></li> <li class=""><a href="{:url('lookup/index')}">{:lang('index.entry_card_query')}</a></li>
<li class=""><a href="{:url('contact/index')}">{:lang('contact.menu_contact')}</a></li>
<li class=""><a href="{:url('news/index')}">{:lang('index.usage_help')}</a></li> <li class=""><a href="{:url('news/index')}">{:lang('index.usage_help')}</a></li>
<div class="language-switcher nav-language-switcher"> <div class="language-switcher nav-language-switcher">
<button class="language-btn" id="languageBtn"> <button class="language-btn" id="languageBtn">

View File

@@ -20,7 +20,10 @@
<!-- ===== 新增:悬浮客服/返回顶部(小模块很实用) ===== --> <!-- ===== 新增:悬浮客服/返回顶部(小模块很实用) ===== -->
<div class="float-help"> <div class="float-help">
<a class="float-btn" href="/home/contact" title="{:lang('contact.menu_contact')}"><i class="bi bi-chat-dots"></i></a> <a class="float-btn float-phone" href="tel:{$company_phone}" title="{$company_phone}">
<i class="bi bi-chat-dots"></i>
<span class="float-phone-tooltip">{$company_phone}</span>
</a>
<a class="float-btn" href="#" title="{:lang('contact.back_to_top')}" onclick="window.scrollTo({top:0,behavior:'smooth'});return false;"> <a class="float-btn" href="#" title="{:lang('contact.back_to_top')}" onclick="window.scrollTo({top:0,behavior:'smooth'});return false;">
<i class="bi bi-arrow-up"></i> <i class="bi bi-arrow-up"></i>
</a> </a>

View File

@@ -1,57 +1,47 @@
<!-- ===== Topbar / Navbar ===== -->
<header class="topbar"> <header class="topbar">
<nav class="navbar navbar-expand-xl"> <nav class="navbar navbar-expand-xl">
<div class="container py-2 topbar-inner"> <div class="container py-2 topbar-inner">
<!-- 顶栏:永远一行 -->
<div class="topbar-head"> <div class="topbar-head">
<a class="brand-wrap" href="#"> <a class="brand-wrap" href="{$base_path}/">
<span class="brand-badge brand-badge-logo"></span> <span class="brand-badge brand-badge-logo"></span>
<span> <span>
<div class="brand-title">{$country}TDAC</div> <span class="brand-title">{$country}TDAC</span>
<div class="brand-sub">Online Application Service</div> <span class="brand-sub">Online Application Service</span>
</span> </span>
</a> </a>
<div class="topbar-right"> <div class="topbar-right">
<!-- 手机端语言:始终显示,不进折叠菜单 --> <button class="navbar-toggler d-xl-none text-white border-0" type="button"
<div class="dropdown lang-mobile d-lg-none"> data-bs-toggle="collapse"
<button class="btn btn-sm lang-btn dropdown-toggle" data-bs-toggle="dropdown">{if $think_lang == 'en-us'}English{else/}中文 {/if}</button> data-bs-target="#nav"
<ul class="dropdown-menu dropdown-menu-end"> aria-controls="nav"
<li><a class="dropdown-item language" data-id="zh-cn" href="#">中文</a></li> aria-expanded="false"
<li><a class="dropdown-item language" data-id="en-us" href="#">English</a></li> aria-label="Toggle navigation">
</ul>
</div>
<button class="navbar-toggler d-xl-none text-white border-0" type="button"
data-bs-toggle="collapse" data-bs-target="#nav">
<span class="navbar-toggler-icon" style="filter: invert(1)"></span> <span class="navbar-toggler-icon" style="filter: invert(1)"></span>
</button> </button>
</div> </div>
</div> </div>
<!-- 折叠菜单:永远在下一行展开 -->
<div class="collapse navbar-collapse" id="nav"> <div class="collapse navbar-collapse" id="nav">
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2 mt-2 mt-lg-0"> <ul class="navbar-nav mx-auto align-items-lg-center gap-lg-2 mt-2 mt-lg-0">
<li class="nav-item"><a class="nav-link" href="{$base_path}/">{:lang('index.home')}</a></li> <li class="nav-item"><a class="nav-link" href="{$base_path}/">{:lang('index.home')}</a></li>
<li class="nav-item"><a class="nav-link" href="{:url('visa/index')}">{:lang('index.online_application')}</a></li> <li class="nav-item"><a class="nav-link" href="{:url('visa/index')}">{:lang('index.online_application')}</a></li>
<li class="nav-item"><a class="nav-link" href="{:url('lookup/index')}">{:lang('index.entry_card_query')}</a></li> <li class="nav-item"><a class="nav-link" href="{:url('lookup/index')}">{:lang('index.entry_card_query')}</a></li>
<li class="nav-item"><a class="nav-link" href="{:url('contact/index')}">{:lang('contact.menu_contact')}</a></li>
<li class="nav-item"><a class="nav-link" href="{:url('news/index')}">{:lang('index.usage_help')}</a></li> <li class="nav-item"><a class="nav-link" href="{:url('news/index')}">{:lang('index.usage_help')}</a></li>
<!-- PC 端语言:仍放在菜单里(手机端隐藏避免重复) -->
<li class="nav-item dropdown ms-lg-2 d-none d-lg-block">
<button class="btn btn-sm lang-btn dropdown-toggle" data-bs-toggle="dropdown">{if $think_lang == 'en-us'}English{else/}中文 {/if}</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item language" data-id="zh-cn" href="#">中文</a></li>
<li><a class="dropdown-item language" data-id="en-us" href="#">English</a></li>
</ul>
</li>
</ul> </ul>
<div class="nav-user-actions">
<a class="nav-user-link" href="{:url('user/index')}">
<i class="bi bi-person-circle"></i><span>个人中心</span>
</a>
{if session('user.id')}
<a class="nav-user-link nav-user-link--plain" href="{:url('login/logout')}">
<i class="bi bi-box-arrow-right"></i><span>退出</span>
</a>
{/if}
</div>
</div> </div>
</div> </div>
</nav> </nav>
</header> </header>
<script> <script>

View File

@@ -384,6 +384,7 @@ footer a:hover{ color:#fff; text-decoration:underline; }
gap: 10px; gap: 10px;
} }
.float-btn{ .float-btn{
position: relative;
width: 46px; height: 46px; width: 46px; height: 46px;
border-radius: 14px; border-radius: 14px;
border: 1px solid rgba(15,23,42,.12); border: 1px solid rgba(15,23,42,.12);
@@ -393,6 +394,28 @@ footer a:hover{ color:#fff; text-decoration:underline; }
color: rgba(15,23,42,.75); color: rgba(15,23,42,.75);
} }
.float-btn:hover{ color: var(--brand); border-color: rgba(11,95,168,.25); } .float-btn:hover{ color: var(--brand); border-color: rgba(11,95,168,.25); }
.float-phone-tooltip{
position: absolute;
right: 56px;
top: 50%;
transform: translateY(-50%);
padding: 8px 12px;
border-radius: 8px;
background: #0b1220;
color: #fff;
font-size: 13px;
line-height: 1;
white-space: nowrap;
box-shadow: 0 12px 26px rgba(2,6,23,.16);
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: opacity .18s ease, visibility .18s ease;
}
.float-phone:hover .float-phone-tooltip{
opacity: 1;
visibility: visible;
}
/* ===== Flow Stepper v2 ===== */ /* ===== Flow Stepper v2 ===== */
.flow2{ .flow2{
border: 1px solid var(--line); border: 1px solid var(--line);
@@ -537,8 +560,8 @@ footer a:hover{ color:#fff; text-decoration:underline; }
text-decoration:none; text-decoration:none;
min-width: 0; min-width: 0;
} }
.topbar .brand-title{ font-weight:700; letter-spacing:.2px; line-height:1.1; } .topbar .brand-title{ display:block; font-weight:700; letter-spacing:.2px; line-height:1.1; }
.topbar .brand-sub{ font-size:12px; opacity:.85; } .topbar .brand-sub{ display:block; font-size:12px; opacity:.85; }
.topbar .brand-title, .topbar .brand-title,
.topbar .brand-sub{ white-space: nowrap; } /* 避免抖动 */ .topbar .brand-sub{ white-space: nowrap; } /* 避免抖动 */
@@ -567,6 +590,34 @@ footer a:hover{ color:#fff; text-decoration:underline; }
color:#fff !important; color:#fff !important;
background: rgba(255,255,255,.08) !important; background: rgba(255,255,255,.08) !important;
} }
.topbar .nav-user-actions{
display: flex;
align-items: center;
justify-content: flex-end;
gap: 8px;
flex: 0 0 auto;
}
.topbar .nav-user-link{
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 34px;
padding: 0 10px;
border: 1px solid rgba(255,255,255,.28);
border-radius: 8px;
color: rgba(255,255,255,.9);
text-decoration: none;
font-size: 14px;
font-weight: 700;
white-space: nowrap;
background: rgba(255,255,255,.06);
}
.topbar .nav-user-link:hover{
color: #fff;
border-color: rgba(255,255,255,.42);
background: rgba(255,255,255,.12);
text-decoration: none;
}
.navbar-collapse{ .navbar-collapse{
text-align: center; text-align: center;
} }
@@ -577,7 +628,7 @@ footer a:hover{ color:#fff; text-decoration:underline; }
} }
.topbar .navbar-collapse{ .topbar .navbar-collapse{
flex: 1 1 auto; flex: 1 1 auto;
justify-content: flex-end; /* 菜单靠右 */ justify-content: center;
} }
/* PC 不需要右侧(手机语言 + 汉堡),避免空盒子影响对齐 */ /* PC 不需要右侧(手机语言 + 汉堡),避免空盒子影响对齐 */
@@ -606,6 +657,12 @@ footer a:hover{ color:#fff; text-decoration:underline; }
width: 100%; width: 100%;
} }
.topbar .nav-user-actions{
width: 100%;
justify-content: center;
padding: 4px 0 2px;
}
/* 右侧按钮统一高度对齐 */ /* 右侧按钮统一高度对齐 */
.topbar .lang-btn{ .topbar .lang-btn{
height: 34px; height: 34px;