Files
YwxAppThink/addon/haonav/view/frontend/index/index.html
T

259 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{$seo.title|default='网址导航 - 首页'}</title>
<meta name="keywords" content="{$seo.keywords|default='网址导航,常用网址,上网导航'}">
<meta name="description" content="{$seo.description|default='简洁实用的网址导航,支持分类管理、搜索聚合、我的导航与暗黑模式'}">
<link rel="canonical" href="{$siteUrl|default=''}/haonav/index.html">
{notempty name="jsonld"}<script type="application/ld+json">{$jsonld|raw}</script>{/notempty}
<link rel="stylesheet" href="/static/haonav/css/nav.css">
<link rel="manifest" href="/static/haonav/manifest.json">
<meta name="theme-color" content="#667eea">
<style>
.widget-row{display:flex;gap:16px;margin-bottom:18px;flex-wrap:wrap;}
.weather-widget{background:var(--nav-card-bg,#fff);color:var(--nav-card-text,#333);border-radius:12px;padding:14px 18px;display:flex;align-items:center;gap:12px;box-shadow:0 2px 10px rgba(0,0,0,.06);min-width:220px;flex-wrap:wrap;}
.weather-widget .w-city{font-weight:700;font-size:16px;}
.weather-widget .w-temp{color:#f76b1c;font-weight:700;}
.weather-widget .w-tips{color:var(--nav-muted,#999);font-size:12px;width:100%;}
.hotsearch-widget{flex:1;min-width:280px;background:var(--nav-card-bg,#fff);border-radius:12px;padding:12px 16px;box-shadow:0 2px 10px rgba(0,0,0,.06);}
.hotsearch-widget .hs-head{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:var(--nav-card-text,#333);margin-bottom:8px;}
.hotsearch-widget .hs-tabs a{font-weight:400;font-size:13px;color:var(--nav-muted,#999);cursor:pointer;margin-left:10px;}
.hotsearch-widget .hs-tabs a.active{color:#1E9FFF;font-weight:700;}
.hotsearch-widget .hs-list{list-style:none;margin:0;padding:0;columns:2;column-gap:24px;}
.hotsearch-widget .hs-list li{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:14px;break-inside:avoid;}
.hotsearch-widget .hs-list li .rk{width:18px;text-align:center;color:#bbb;font-weight:700;font-style:normal;}
.hotsearch-widget .hs-list li:nth-child(1) .rk,.hotsearch-widget .hs-list li:nth-child(2) .rk,.hotsearch-widget .hs-list li:nth-child(3) .rk{color:#f76b1c;}
.hotsearch-widget .hs-list li a{color:var(--nav-card-text,#333);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hotsearch-widget .hs-list li a:hover{color:#1E9FFF;}
@media (max-width:640px){.hotsearch-widget .hs-list{columns:1;}}
</style>
</head>
<body>
<!-- 顶部导航栏 -->
<div class="navbar">
<div class="navbar-content">
<a href="/haonav/index.html" class="logo">🚀 网址导航</a>
<form class="search-box" id="searchForm">
<select id="searchEngine">
<option value="baidu" {$config.default_engine == 'baidu' ? 'selected' : ''}>百度</option>
<option value="bing" {$config.default_engine == 'bing' ? 'selected' : ''}>必应</option>
<option value="google" {$config.default_engine == 'google' ? 'selected' : ''}>Google</option>
<option value="sogou" {$config.default_engine == 'sogou' ? 'selected' : ''}>搜狗</option>
<option value="site" {$config.default_engine == 'site' ? 'selected' : ''}>站内</option>
</select>
<input type="text" id="searchInput" autocomplete="off" placeholder="搜索网站 / 关键词,或按 / 聚焦">
<button type="submit">🔍 搜索</button>
</form>
<div class="nav-actions">
<div class="nav-links">
<a href="/haonav/index.html" class="active">首页</a>
<a href="/haonav/rank.html">排行榜</a>
<a href="/haonav/submit.html">投稿</a>
<a href="/haonav/search.html">全站搜索</a>
</div>
<button class="icon-btn" id="themeToggle" title="切换暗黑模式">🌙</button>
<button class="icon-btn" id="pwaInstallBtn" title="安装为桌面应用" style="display:none;">📲</button>
<button class="icon-btn" id="setHomeBtn" title="设为首页 / 收藏本站">📌</button>
<select id="bgPicker" title="切换背景" style="border:none;border-radius:20px;padding:6px 8px;background:var(--nav-tag-bg);color:var(--nav-card-text);cursor:pointer;">
<option value="default">默认背景</option>
<option value="linear-gradient(135deg,#11998e 0%,#38ef7d 100%)">清新绿</option>
<option value="linear-gradient(135deg,#2193b0 0%,#6dd5ed 100%)">天空蓝</option>
<option value="linear-gradient(135deg,#ee9ca7 0%,#ffdde1 100%)">樱花粉</option>
<option value="linear-gradient(135deg,#232526 0%,#414345 100%)">暗夜灰</option>
</select>
<!-- 会员区:未登录显示登录/注册,已登录显示头像下拉 -->
<div class="user-area" id="userArea">
<button class="nav-btn" id="btnLogin">登录</button>
<button class="nav-btn nav-btn-primary" id="btnRegister">注册</button>
</div>
</div>
</div>
</div>
<div class="main-content">
<!-- 广告位:首页顶部 -->
{notempty name="ads.home_top"}
<div class="ad-box ad-home-top">
<span class="ad-label">广告</span>
{volist name="ads.home_top" id="ad"}
{if $ad.type == 1}
<a class="ad-item" href="/haonav/ad/click?id={$ad.id}" target="_blank" rel="nofollow">
<img src="{$ad.image}" alt="{$ad.title}" loading="lazy">
</a>
{else/}
{$ad.code|raw}
{/if}
{/volist}
</div>
{/notempty}
<!-- 顶部小组件:天气 + 实时热搜 -->
<div class="widget-row">
<div class="weather-widget" id="weatherWidget" style="display:none;">
<span class="w-city" id="wCity"></span>
<span class="w-type" id="wType"></span>
<span class="w-temp" id="wTemp"></span>
<span class="w-tips" id="wTips"></span>
</div>
<div class="hotsearch-widget" id="hotSearchWidget" style="display:none;">
<div class="hs-head"><span>🔥 实时热搜</span> <span class="hs-tabs" id="hsTabs">
<a data-src="baidu" class="active">百度</a>
<a data-src="weibo">微博</a>
<a data-src="zhihu">知乎</a>
</span></div>
<ol class="hs-list" id="hotSearchList"></ol>
</div>
</div>
<!-- 我的导航(收藏) -->
<div class="mynav">
<div class="mynav-head">
<h3>⭐ 我的导航 <span class="tip" id="myNavTip">(点击卡片上的 ★ 收藏,可拖拽排序)</span></h3>
<button class="nav-btn" id="favShareBtn" title="生成分享链接,把收藏夹分享给好友">🔗 分享收藏夹</button>
</div>
<div class="mynav-list" id="myNavList"></div>
<div class="mynav-empty" id="myNavEmpty">还没有收藏,点击任意网址卡片右上角的 ★ 添加到这里~</div>
</div>
<!-- 热门推荐 -->
<div class="hot-recommend">
<h3>🔥 热门推荐</h3>
<div class="hot-grid">
{volist name='hotspot' id='vo'}
<div class="hot-item">
<a href="/haonav/site/{$vo.id}.html" target="_blank" style="display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit;flex:1;min-width:0;">
<span class="hot-icon"><img src="{$vo.show_icon}" loading="lazy" alt="{$vo.title}"></span>
<span class="hot-info">
<h4>{$vo.title}</h4>
<p>{$vo.description |default='暂无描述'}</p>
{if $vo.rating_count > 0}<span class="website-rating">⭐ {$vo.rating} ({$vo.rating_count})</span>{/if}
</span>
</a>
<span class="qr-btn js-qr" data-url="{$vo.url}" title="二维码"></span>
</div>
{/volist}
</div>
</div>
{volist name="data" id="vo" key="k"}
<!-- 分类区块 -->
<div class="category-block" id="cat-{$k}">
<div class="section-title">
<h2>📋 <a href="/haonav/category/{$vo.id}.html" target="_blank"> {$vo.title} </a></h2>
</div>
<div class="website-grid">
{volist name="vo.links" id="site"}
<div class="website-card" data-sid="{$site.id}">
<span class="fav-btn js-fav" data-id="{$site.id}" data-title="{$site.title}" data-url="{$site.url}" data-icon="{$site.show_icon}" title="收藏"></span>
<span class="qr-btn js-qr" data-url="{$site.url}" title="二维码"></span>
<a href="/haonav/site/{$site.id}.html" target="_blank" title="{$site.title}" style="text-decoration:none;color:inherit;display:block;">
<div class="website-icon"><img src="{$site.show_icon}" loading="lazy" alt="{$site.title}"></div>
<div class="website-name">{$site.title}</div>
{if $site.rating_count > 0}<div class="website-rating">⭐ {$site.rating}<span class="rc">({$site.rating_count})</span></div>{/if}
</a>
</div>
{/volist}
</div>
</div>
{/volist}
<!-- 友情链接 / 推荐 -->
<div class="hot-recommend">
<div class="section-title"><h2>🤝 友情链接</h2></div>
<div class="hot-grid">
{volist name='links' id='vo'}
<div class="hot-item">
<a href="{$vo.url}" target="_blank" style="display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit;flex:1;min-width:0;">
<span class="hot-icon"><img src="{$vo.show_icon}" loading="lazy" alt="{$vo.title}"></span>
<span class="hot-info">
<h4>{$vo.title}</h4>
<p>{$vo.description |default='暂无描述'}</p>
{if $vo.rating_count > 0}<span class="website-rating">⭐ {$vo.rating} ({$vo.rating_count})</span>{/if}
</span>
</a>
<span class="qr-btn js-qr" data-url="{$vo.url}" title="二维码"></span>
</div>
{/volist}
</div>
</div>
<!-- 广告位:首页底部 -->
{notempty name="ads.home_bottom"}
<div class="ad-box ad-home-bottom">
<span class="ad-label">广告</span>
{volist name="ads.home_bottom" id="ad"}
{if $ad.type == 1}
<a class="ad-item" href="/haonav/ad/click?id={$ad.id}" target="_blank" rel="nofollow">
<img src="{$ad.image}" alt="{$ad.title}" loading="lazy">
</a>
{else/}
{$ad.code|raw}
{/if}
{/volist}
</div>
{/notempty}
</div>
<!-- 底部 -->
<div class="footer">
<p>© 2026 网址导航 - 让上网更简单 | <a href="/haonav/apply.html">申请收录</a> | <a href="/haonav/apply.html">广告合作</a> | <a href="#" rel="nofollow">关于我们</a></p>
<p><a target="_blank" rel="nofollow" href="http://beian.miit.gov.cn/">{$siteConf.beian |default='蜀ICP备2022005627号-3'}</a></p>
</div>
<!-- 二维码弹层 -->
<div class="qr-mask" id="qrMask">
<div class="qr-box">
<img id="qrImg" src="" alt="二维码">
<p id="qrText"></p>
<span class="close">关闭</span>
</div>
</div>
<!-- 收藏夹分享弹层 -->
<div class="qr-mask" id="favShareMask">
<div class="qr-box" style="max-width:460px;text-align:left;">
<h3 style="margin:0 0 14px;">🔗 分享我的收藏夹</h3>
<label style="display:flex;align-items:center;gap:8px;font-size:14px;margin-bottom:12px;cursor:pointer;">
<input type="checkbox" id="favShareToggle"> 开启分享(关闭后链接立即失效)
</label>
<input type="text" id="favShareTitle" placeholder="分享页标题,如:我的常用网址" maxlength="100"
style="width:100%;padding:9px 12px;border:1px solid var(--nav-border,#ddd);border-radius:8px;font-size:14px;margin-bottom:12px;box-sizing:border-box;">
<div id="favShareLinkBox" style="display:none;">
<div style="display:flex;gap:8px;">
<input type="text" id="favShareLink" readonly
style="flex:1;padding:9px 12px;border:1px solid var(--nav-border,#ddd);border-radius:8px;font-size:13px;box-sizing:border-box;">
<button class="nav-btn nav-btn-primary" id="favShareCopy">复制</button>
</div>
<p style="font-size:12px;color:var(--nav-muted);margin:8px 0 0;">被访问 <b id="favShareViews">0</b> 次 · <a href="#" id="favShareReset">重置链接</a>(旧链接失效)</p>
</div>
<p id="favShareMsg" style="font-size:13px;color:var(--nav-muted);margin:12px 0 0;"></p>
<div style="text-align:right;margin-top:16px;"><span class="close" style="cursor:pointer;color:var(--nav-primary);">关闭</span></div>
</div>
</div>
<!-- 登录 / 注册 弹层由全局组件 auth.js 自动注入,无需在此书写 -->
<!-- 设为首页 / 收藏本站 提示弹层 -->
<div class="qr-mask" id="homeTipMask">
<div class="qr-box" style="max-width:440px;text-align:left;">
<h3 style="margin:0 0 12px;">📌 把导航带在身边</h3>
<p style="margin:0 0 8px;font-size:14px;"><b>收藏本站:</b><kbd>Ctrl</kbd> + <kbd>D</kbd>Mac<kbd></kbd> + <kbd>D</kbd>)加入书签。</p>
<p style="margin:0 0 8px;font-size:14px;"><b>设为浏览器首页:</b></p>
<ol style="margin:0 0 8px;padding-left:20px;font-size:13px;line-height:1.8;color:var(--nav-muted,#666);">
<li>Chrome / Edge:设置 → 启动时 → 打开特定网页,填入本站地址</li>
<li>Firefox:设置 → 主页 → 自定义网址,填入本站地址</li>
</ol>
<p style="margin:0 0 4px;font-size:13px;color:var(--nav-muted,#666);">本站地址:<span id="homeTipUrl" style="user-select:all;"></span></p>
<span class="close">关闭</span>
</div>
</div>
<script src="/static/haonav/js/nav.js"></script>
<script src="/static/haonav/js/auth.js"></script>
</body>
</html>