108 lines
4.8 KiB
PHP
108 lines
4.8 KiB
PHP
<?php
|
|
// 前台页面公共页脚。
|
|
if (!defined('IN_APP')) { http_response_code(403); exit('Forbidden'); }
|
|
?>
|
|
</main>
|
|
<footer class="site-footer">
|
|
<div class="container footer-inner">
|
|
<div class="footer-brand">
|
|
<i class="fas fa-store"></i> <?= h(SITE_NAME) ?>
|
|
<p><?= __('footer.brand_slogan') ?></p>
|
|
</div>
|
|
<div class="footer-links">
|
|
<a href="index.php"><?= __('footer.nav_home') ?></a>
|
|
<a href="index.php#products"><?= __('footer.nav_all') ?></a>
|
|
<a href="cart.php"><?= __('footer.nav_cart') ?></a>
|
|
<a href="ticket.php"><?= __('footer.nav_ticket') ?></a>
|
|
<a href="announcements.php"><?= __('footer.nav_announce') ?></a>
|
|
<a href="mytickets.php"><?= __('footer.nav_mytickets') ?></a>
|
|
<a href="myorders.php"><?= __('footer.nav_myorders') ?></a>
|
|
</div>
|
|
</div>
|
|
<div class="footer-copy">
|
|
<p>© <?= date('Y') ?> <?= h(SITE_NAME) ?>. <?= __('footer.copyright') ?></p>
|
|
</div>
|
|
</footer>
|
|
<script src="assets/app.js?v=<?= $cssVer ?>"></script>
|
|
<script>
|
|
// 主题切换:写入 cookie 并即时切换 data-theme
|
|
(function () {
|
|
var btn = document.getElementById('themeToggle');
|
|
if (!btn) return;
|
|
// 初始化:根据当前主题设置正确图标(解决首次加载深色模式图标不匹配问题)
|
|
(function initThemeIcon() {
|
|
var current = document.documentElement.getAttribute('data-theme');
|
|
if (current === 'dark') {
|
|
btn.querySelector('i').className = 'fas fa-sun';
|
|
}
|
|
})();
|
|
btn.addEventListener('click', function () {
|
|
var root = document.documentElement;
|
|
var next = root.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
|
|
root.setAttribute('data-theme', next);
|
|
document.cookie = 'fnw_theme=' + next + ';path=/;max-age=31536000';
|
|
btn.querySelector('i').className = next === 'dark' ? 'fas fa-sun' : 'fas fa-moon';
|
|
});
|
|
})();
|
|
|
|
// 头像卡片:点击切换、点击外部关闭
|
|
(function () {
|
|
var btn = document.getElementById('avatarBtn');
|
|
var card = document.getElementById('userCard');
|
|
if (!btn || !card) return;
|
|
card.hidden = true; // 初始化兜底隐藏
|
|
btn.addEventListener('click', function (e) {
|
|
e.stopPropagation();
|
|
card.hidden = !card.hidden;
|
|
btn.setAttribute('aria-expanded', card.hidden ? 'false' : 'true');
|
|
});
|
|
document.addEventListener('click', function (e) {
|
|
if (!card.hidden && !card.contains(e.target) && !btn.contains(e.target)) {
|
|
card.hidden = true;
|
|
btn.setAttribute('aria-expanded', 'false');
|
|
}
|
|
});
|
|
})();
|
|
|
|
// 移动端导航:汉堡菜单展开/收起
|
|
(function () {
|
|
var toggle = document.getElementById('navToggle');
|
|
var links = document.getElementById('navLinks');
|
|
if (!toggle || !links) return;
|
|
toggle.addEventListener('click', function (e) {
|
|
e.stopPropagation();
|
|
var open = links.classList.toggle('open');
|
|
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
});
|
|
// 点击菜单内链接后自动收起
|
|
links.addEventListener('click', function (e) {
|
|
if (e.target.closest('a')) links.classList.remove('open');
|
|
});
|
|
document.addEventListener('click', function (e) {
|
|
if (!links.contains(e.target) && !toggle.contains(e.target)) {
|
|
links.classList.remove('open');
|
|
}
|
|
});
|
|
})();
|
|
|
|
// 发货信息:显示/隐藏敏感凭据(登录密码)
|
|
(function () {
|
|
document.querySelectorAll('.reveal-btn').forEach(function (btn) {
|
|
btn.addEventListener('click', function () {
|
|
var span = btn.previousElementSibling;
|
|
if (!span || !span.classList.contains('secret')) return;
|
|
var real = span.getAttribute('data-secret') || '';
|
|
if (btn.textContent === '显示') {
|
|
span.textContent = real;
|
|
btn.textContent = '隐藏';
|
|
} else {
|
|
span.textContent = real ? '●'.repeat(Math.max(6, real.length)) : '—';
|
|
btn.textContent = '显示';
|
|
}
|
|
});
|
|
});
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|