feat: 导航页SEO/GEO优化 + 手机端完全适配 + App候选码 + 业务系统板块

- SEO: 添加meta description/keywords/Open Graph/结构化数据/地理信息
- GEO: 添加geo.region/geo.position/ICBM等地理标记
- 手机端完全重写响应式: 咨询表单/导航卡片/hero区/标签全部适配
- 新增App候选码板块: 后台管理+导航页动态展示(支持录屏视频/下载链接)
- 新增业务系统板块: 进销存/OA/财务/工单等,支持按年/按月/定制定价
- 后台新增App候选码管理页面(增删改查+上下架)
- 后台新增业务系统管理页面(增删改查+上下架)
- 导航页设置新增新板块标题配置
- 公开API: GET /api/v1/showcase/apps + /api/v1/showcase/systems
This commit is contained in:
2026-09-09 03:32:22 +08:00
parent 278b07aa97
commit 69c59f4fbd
9 changed files with 629 additions and 9 deletions

149
web/dist/index.html vendored
View File

@@ -2,8 +2,53 @@
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gotest · 模板导航</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0">
<title>Gotest · 多行业网站模板集合 - 企业官网/电商/外卖/游戏/应用/音乐模板一站式导航</title>
<meta name="description" content="Gotest 提供 19 套精心设计的多行业网站模板,覆盖企业官网、跨境电商、外卖平台、游戏、应用商店、音乐平台 6 大行业,支持响应式设计,一键预览,即刻上线。">
<meta name="keywords" content="网站模板,企业官网模板,电商模板,响应式网站,网站设计,模板导航,跨境电商模板,外卖平台模板,游戏网站模板,应用商店模板,音乐平台模板,低成本建站">
<meta name="author" content="焉耆青梧映星软件开发工作室">
<meta name="robots" content="index, follow">
<meta name="googlebot" content="index, follow">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="/">
<meta property="og:title" content="Gotest · 多行业网站模板集合">
<meta property="og:description" content="19 套精心设计的多行业网站模板,覆盖 6 大行业,响应式设计,一键预览。">
<meta property="og:site_name" content="Gotest 模板导航">
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Gotest · 多行业网站模板集合">
<meta name="twitter:description" content="19 套精心设计的多行业网站模板,覆盖 6 大行业,响应式设计,一键预览。">
<!-- GEO -->
<meta name="geo.region" content="CN-XJ">
<meta name="geo.placename" content="焉耆回族自治县">
<meta name="geo.position" content="42.05;86.57">
<meta name="ICBM" content="42.05, 86.57">
<link rel="canonical" href="/">
<!-- Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Gotest 模板导航",
"description": "多行业网站模板集合,覆盖企业官网、跨境电商、外卖、游戏、应用、音乐 6 大行业",
"url": "/",
"potentialAction": {
"@type": "SearchAction",
"target": "/?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "焉耆青梧映星软件开发工作室",
"url": "/",
"sameAs": []
}
</script>
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect width='100' height='100' rx='22' fill='%23000'/><text x='50' y='70' font-size='58' font-weight='bold' fill='white' text-anchor='middle' font-family='Arial'>G</text></svg)">
<script>
// Prevent FOUC: apply theme before render
@@ -53,6 +98,8 @@ body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Ro
.g-game .glow{background:linear-gradient(135deg,#0c0a09 0%,#7c3aed 40%,#d946ef 100%)}
.g-app .glow{background:linear-gradient(135deg,#0c4a6e 0%,#0ea5e9 40%,#7dd3fc 100%)}
.g-music .glow{background:linear-gradient(135deg,#312e81 0%,#7c3aed 40%,#f472b6 100%)}
.g-appshow .glow{background:linear-gradient(135deg,#0f766e 0%,#14b8a6 40%,#5eead4 100%)}
.g-bizsys .glow{background:linear-gradient(135deg,#1e3a5f 0%,#3b82f6 40%,#93c5fd 100%)}
/* Admin */
.admin-row{display:flex;justify-content:center;margin-top:56px}
.admin-btn{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;border-radius:100px;background:var(--admin-btn-bg);color:var(--text);text-decoration:none;font-size:15px;font-weight:600;transition:all .25s}
@@ -68,9 +115,8 @@ body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Ro
[data-theme="dark"] .theme-toggle .icon-moon{opacity:0;transform:rotate(90deg) scale(.5)}
/* Footer */
.foot{text-align:center;padding:32px 0 0;color:var(--text-sub);font-size:12px}
/* Responsive */
/* Responsive - base tablet */
@media(max-width:900px){.grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.grid{grid-template-columns:1fr}.hero h1{font-size:36px}}
/* Anim */
.item{animation:up .6s ease both}
.item:nth-child(1){animation-delay:.05s}.item:nth-child(2){animation-delay:.12s}.item:nth-child(3){animation-delay:.19s}
@@ -84,7 +130,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Ro
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}
.form-group{margin-bottom:16px}
.form-group label{display:block;font-size:14px;font-weight:600;color:var(--text);margin-bottom:6px}
.form-group input,.form-group textarea{width:100%;padding:12px 16px;border:2px solid var(--input-border);border-radius:12px;font-size:15px;transition:all .3s;background:var(--input-bg);color:var(--text)}
.form-group input,.form-group textarea{width:100%;padding:12px 16px;border:2px solid var(--input-border);border-radius:12px;font-size:15px;transition:all .3s;background:var(--input-bg);color:var(--text);-webkit-appearance:none;appearance:none}
.form-group input::placeholder,.form-group textarea::placeholder{color:var(--text-sub)}
.form-group input:focus,.form-group textarea:focus{outline:none;border-color:#667eea;background:var(--card);box-shadow:0 0 0 4px rgba(102,126,234,0.1)}
.form-group textarea{resize:vertical;min-height:100px}
@@ -95,7 +141,40 @@ body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Ro
.success-icon{width:64px;height:64px;background:linear-gradient(135deg,#10b981 0%,#059669 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:32px;color:#fff}
.consult-success h3{font-size:24px;font-weight:700;color:var(--text);margin-bottom:8px}
.consult-success p{font-size:16px;color:var(--text-sub)}
@media(max-width:600px){.form-row{grid-template-columns:1fr}.consult-section{padding:24px;margin:48px 16px}}
/* ===== Mobile Responsive ===== */
@media(max-width:600px){
.wrap{padding:24px 16px 48px}
.hero{padding:24px 0 32px}
.hero h1{font-size:28px;letter-spacing:-1px}
.hero p{font-size:15px}
.hero-pills{gap:6px;margin-top:20px}
.pill{padding:5px 12px;font-size:12px}
.sec{margin-bottom:36px}
.sec-head{gap:8px;margin-bottom:16px}
.sec-head h2{font-size:20px}
.sec-head .sub{font-size:12px}
.grid{grid-template-columns:1fr !important;gap:14px}
.item-banner{height:120px}
.item-body{padding:14px 16px}
.item-title{font-size:15px}
.item-desc{font-size:12px}
.item-go{opacity:1;transform:scale(1)}
.theme-toggle{width:40px;height:40px;top:16px;right:16px}
.consult-section{margin:36px 0 0;padding:0;border-radius:0;box-shadow:none;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%)}
.consult-header{padding:24px 20px 0;margin-bottom:20px}
.consult-header h2{font-size:22px}
.consult-header p{font-size:14px}
.consult-form{padding:20px;border-radius:0;margin:0 16px 16px}
.form-row{grid-template-columns:1fr;gap:0}
.form-group{margin-bottom:12px}
.form-group label{font-size:13px;margin-bottom:4px}
.form-group input,.form-group textarea{padding:10px 14px;font-size:14px;border-width:1px}
.submit-btn{padding:14px;font-size:16px;margin-top:4px}
.admin-row{margin-top:36px}
.admin-btn{padding:12px 24px;font-size:14px}
.foot{padding:24px 16px 0;font-size:11px}
}
</style>
</head>
<body>
@@ -176,6 +255,18 @@ body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Ro
</div>
</div>
<!-- App 候选码 -->
<div class="sec" id="sec-apps" style="display:none">
<div class="sec-head"><h2 id="s_sec_appshow_title">App 候选码</h2><span class="sub" id="s_sec_appshow_sub">精选应用</span><div class="sec-line"></div></div>
<div class="grid" id="appShowGrid"></div>
</div>
<!-- 业务系统 -->
<div class="sec" id="sec-systems" style="display:none">
<div class="sec-head"><h2 id="s_sec_bizsys_title">业务系统</h2><span class="sub" id="s_sec_bizsys_sub">定制 / 年付</span><div class="sec-line"></div></div>
<div class="grid" id="bizSysGrid"></div>
</div>
<!-- Admin -->
<div class="admin-row">
<a class="admin-btn" href="/admin">
@@ -275,6 +366,10 @@ body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Ro
s_sec_app_sub: 'nav_sec_app_sub',
s_sec_music_title: 'nav_sec_music_title',
s_sec_music_sub: 'nav_sec_music_sub',
s_sec_appshow_title: 'nav_sec_appshow_title',
s_sec_appshow_sub: 'nav_sec_appshow_sub',
s_sec_bizsys_title: 'nav_sec_bizsys_title',
s_sec_bizsys_sub: 'nav_sec_bizsys_sub',
};
for (var elId in map) {
var val = s[map[elId]];
@@ -286,6 +381,48 @@ body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Ro
} catch(e) {}
})();
// 加载 App 候选码
(async function(){
try {
var resp = await fetch('/api/v1/showcase/apps');
var result = await resp.json();
if (result.code !== 0 || !result.data.list || result.data.list.length === 0) return;
var grid = document.getElementById('appShowGrid');
var items = result.data.list;
var gradients = ['#0f766e,#14b8a6,#5eead4','#7c2d12,#ea580c,#fdba74','#1e3a5f,#2563eb,#60a5fa','#581c87,#9333ea,#d8b4fe','#065f46,#10b981,#6ee7b7'];
grid.innerHTML = items.map(function(item, i) {
var g = gradients[i % gradients.length].split(',');
return '<a class="item" href="' + (item.download_url || '#') + '" target="_blank">' +
'<div class="item-banner g-appshow"><div class="glow" style="background:linear-gradient(135deg,' + g[0] + ' 0%,' + g[1] + ' 40%,' + g[2] + ' 100%)"></div><div class="pattern"></div>' +
'<span class="item-tag">' + (item.category || 'App') + '</span><div class="item-go">\u2192</div></div>' +
'<div class="item-body"><div class="item-title">' + item.name + '</div><div class="item-desc">' + (item.description || '') + '</div></div></a>';
}).join('');
document.getElementById('sec-apps').style.display = '';
} catch(e) {}
})();
// 加载业务系统
(async function(){
try {
var resp = await fetch('/api/v1/showcase/systems');
var result = await resp.json();
if (result.code !== 0 || !result.data.list || result.data.list.length === 0) return;
var grid = document.getElementById('bizSysGrid');
var items = result.data.list;
var gradients = ['#1e3a5f,#3b82f6,#93c5fd','#0f766e,#14b8a6,#5eead4','#7c2d12,#ea580c,#fdba74','#581c87,#9333ea,#d8b4fe','#065f46,#10b981,#6ee7b7'];
grid.innerHTML = items.map(function(item, i) {
var g = gradients[i % gradients.length].split(',');
var priceLabel = item.price_type === '定制' ? '定制开发' : (item.price || '咨询报价');
return '<div class="item">' +
'<div class="item-banner g-bizsys"><div class="glow" style="background:linear-gradient(135deg,' + g[0] + ' 0%,' + g[1] + ' 40%,' + g[2] + ' 100%)"></div><div class="pattern"></div>' +
'<span class="item-tag">' + (item.category || '系统') + '</span><div class="item-go">\u2192</div></div>' +
'<div class="item-body"><div class="item-title">' + item.name + '</div><div class="item-desc">' + (item.description || '') + '</div>' +
'<div style="margin-top:8px"><span style="display:inline-block;padding:3px 10px;border-radius:6px;font-size:12px;font-weight:600;background:rgba(59,130,246,0.1);color:#3b82f6">' + priceLabel + '</span></div></div></div>';
}).join('');
document.getElementById('sec-systems').style.display = '';
} catch(e) {}
})();
document.getElementById('consultForm').addEventListener('submit', async function(e) {
e.preventDefault();