Files
张翔 929f3ed250 chore: 添加设计分析参考和辅助脚本
- IHG设计分析HTML参考页面
- 布局检查、DOM诊断、验收测试等辅助脚本
2026-06-07 16:22:11 +08:00

890 lines
31 KiB
HTML
Raw Permalink 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>Novalon × IHG 设计模式融合</title>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=Noto+Sans+SC:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root {
--color-ink: #1C1C1C;
--color-ink-light: #595959;
--color-ink-muted: #A3A3A3;
--color-cinnabar: #C41E3A;
--color-paper: #FFFFFF;
--color-paper-warm: #FAFAFA;
--color-ink-dark: #0A0A0A;
--spacing-xs: 0.5rem;
--spacing-sm: 1rem;
--spacing-md: 1.5rem;
--spacing-lg: 2rem;
--spacing-xl: 3rem;
--spacing-2xl: 4rem;
--radius-lg: 1rem;
--radius-xl: 1.5rem;
--shadow-soft: 0 1px 3px rgba(0,0,0,0.04);
--shadow-hover: 0 16px 32px rgba(0,0,0,0.08);
--transition-default: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, sans-serif;
background: var(--color-paper);
color: var(--color-ink);
line-height: 1.7;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--spacing-lg);
}
/* Header - Group Brand Navigation */
.header {
position: sticky;
top: 0;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(0, 0, 0, 0.06);
z-index: 100;
}
.header-content {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--spacing-md) 0;
}
.group-logo {
display: flex;
align-items: center;
gap: var(--spacing-sm);
font-family: 'Noto Serif SC', serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--color-ink);
text-decoration: none;
}
.group-logo-mark {
width: 40px;
height: 40px;
background: linear-gradient(135deg, var(--color-ink) 0%, var(--color-ink-dark) 100%);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: 700;
}
.nav-links {
display: flex;
gap: var(--spacing-xl);
align-items: center;
}
.nav-link {
color: var(--color-ink-light);
text-decoration: none;
font-weight: 500;
transition: var(--transition-default);
position: relative;
}
.nav-link:hover {
color: var(--color-ink);
}
.nav-link.active {
color: var(--color-ink);
}
.nav-link.active::after {
content: '';
position: absolute;
bottom: -8px;
left: 0;
right: 0;
height: 2px;
background: var(--color-cinnabar);
}
/* Hero Section */
.hero {
padding: var(--spacing-2xl) 0 var(--spacing-xl);
text-align: center;
}
.hero-label {
display: inline-block;
font-size: 0.875rem;
font-weight: 600;
color: var(--color-cinnabar);
letter-spacing: 0.1em;
text-transform: uppercase;
margin-bottom: var(--spacing-md);
}
.hero h1 {
font-family: 'Noto Serif SC', serif;
font-size: clamp(2.5rem, 5vw, 3.5rem);
font-weight: 700;
margin-bottom: var(--spacing-md);
line-height: 1.2;
}
.hero p {
font-size: 1.125rem;
color: var(--color-ink-light);
max-width: 640px;
margin: 0 auto;
}
/* Breadcrumb */
.breadcrumb {
display: flex;
gap: var(--spacing-xs);
align-items: center;
padding: var(--spacing-lg) 0;
font-size: 0.875rem;
color: var(--color-ink-muted);
}
.breadcrumb a {
color: var(--color-ink-light);
text-decoration: none;
transition: var(--transition-default);
}
.breadcrumb a:hover {
color: var(--color-ink);
}
/* Category Tabs */
.category-tabs {
display: flex;
gap: var(--spacing-md);
margin-bottom: var(--spacing-xl);
border-bottom: 1px solid rgba(0, 0, 0, 0.08);
overflow-x: auto;
}
.category-tab {
padding: var(--spacing-sm) var(--spacing-md);
border: none;
background: none;
font-size: 1rem;
font-weight: 500;
color: var(--color-ink-light);
cursor: pointer;
position: relative;
white-space: nowrap;
transition: var(--transition-default);
}
.category-tab:hover {
color: var(--color-ink);
}
.category-tab.active {
color: var(--color-ink);
}
.category-tab.active::after {
content: '';
position: absolute;
bottom: -1px;
left: 0;
right: 0;
height: 3px;
background: var(--color-ink);
border-radius: 3px 3px 0 0;
}
/* Category Description */
.category-description {
background: var(--color-paper-warm);
padding: var(--spacing-xl);
border-radius: var(--radius-xl);
margin-bottom: var(--spacing-xl);
}
.category-description h2 {
font-family: 'Noto Serif SC', serif;
font-size: 1.5rem;
margin-bottom: var(--spacing-sm);
}
.category-description p {
color: var(--color-ink-light);
}
/* Product Grid */
.products-section {
padding: var(--spacing-xl) 0 var(--spacing-2xl);
}
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
gap: var(--spacing-lg);
}
/* Product Card */
.product-card {
background: var(--color-paper);
border-radius: var(--radius-xl);
overflow: hidden;
box-shadow: var(--shadow-soft);
transition: var(--transition-default);
cursor: pointer;
text-decoration: none;
color: inherit;
display: block;
}
.product-card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-hover);
}
.product-card-image {
aspect-ratio: 16 / 10;
background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
.product-card-image::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, var(--color-ink) 0%, var(--color-ink-dark) 100%);
opacity: 0.03;
}
.product-card-icon {
font-family: 'Noto Serif SC', serif;
font-size: 3rem;
color: var(--color-ink-muted);
font-weight: 700;
}
.product-card-content {
padding: var(--spacing-lg);
}
.product-card-category {
font-size: 0.75rem;
font-weight: 600;
color: var(--color-cinnabar);
letter-spacing: 0.08em;
text-transform: uppercase;
margin-bottom: var(--spacing-xs);
}
.product-card h3 {
font-family: 'Noto Serif SC', serif;
font-size: 1.375rem;
margin-bottom: var(--spacing-sm);
}
.product-card p {
color: var(--color-ink-light);
font-size: 0.9375rem;
line-height: 1.6;
}
.product-card-meta {
display: flex;
gap: var(--spacing-sm);
margin-top: var(--spacing-md);
padding-top: var(--spacing-md);
border-top: 1px solid rgba(0, 0, 0, 0.06);
}
.product-tag {
font-size: 0.75rem;
padding: 4px 12px;
background: rgba(0, 0, 0, 0.04);
border-radius: 100px;
color: var(--color-ink-light);
}
/* Product Detail Page (Inline Preview) */
.product-detail-preview {
display: none;
background: var(--color-paper-warm);
border-radius: var(--radius-xl);
padding: var(--spacing-2xl);
margin-bottom: var(--spacing-xl);
}
.product-detail-preview.active {
display: block;
}
.product-detail-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: var(--spacing-xl);
}
.product-detail-title h1 {
font-family: 'Noto Serif SC', serif;
font-size: 2.25rem;
margin-bottom: var(--spacing-sm);
}
.product-detail-title .product-detail-category {
font-size: 0.875rem;
font-weight: 600;
color: var(--color-cinnabar);
letter-spacing: 0.08em;
text-transform: uppercase;
}
.product-detail-content {
display: grid;
grid-template-columns: 1.5fr 1fr;
gap: var(--spacing-xl);
}
.product-detail-main h2 {
font-family: 'Noto Serif SC', serif;
font-size: 1.25rem;
margin: var(--spacing-lg) 0 var(--spacing-sm);
}
.product-detail-main p {
color: var(--color-ink-light);
margin-bottom: var(--spacing-sm);
}
.feature-list {
list-style: none;
}
.feature-list li {
display: flex;
gap: var(--spacing-sm);
padding: var(--spacing-sm) 0;
color: var(--color-ink-light);
}
.feature-list li::before {
content: '';
width: 6px;
height: 6px;
background: var(--color-cinnabar);
border-radius: 50%;
margin-top: 8px;
flex-shrink: 0;
}
.product-detail-sidebar {
position: sticky;
top: 100px;
align-self: start;
}
.sidebar-card {
background: var(--color-paper);
border-radius: var(--radius-lg);
padding: var(--spacing-lg);
box-shadow: var(--shadow-soft);
}
.primary-btn {
display: block;
width: 100%;
padding: var(--spacing-md);
background: var(--color-ink);
color: white;
border: none;
border-radius: var(--radius-lg);
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: var(--transition-default);
text-align: center;
text-decoration: none;
}
.primary-btn:hover {
background: var(--color-ink-dark);
transform: translateY(-1px);
}
.secondary-btn {
display: block;
width: 100%;
padding: var(--spacing-md);
background: transparent;
color: var(--color-ink);
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: var(--radius-lg);
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: var(--transition-default);
margin-top: var(--spacing-sm);
}
.secondary-btn:hover {
border-color: var(--color-ink);
}
/* Footer Brands */
.footer-section {
background: var(--color-ink-dark);
color: white;
padding: var(--spacing-2xl) 0;
margin-top: var(--spacing-2xl);
}
.footer-brands {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: var(--spacing-md);
margin-top: var(--spacing-lg);
}
.footer-brand-link {
color: rgba(255, 255, 255, 0.7);
text-decoration: none;
font-size: 0.875rem;
transition: var(--transition-default);
}
.footer-brand-link:hover {
color: white;
}
/* Demo Controls */
.demo-controls {
position: fixed;
bottom: var(--spacing-lg);
right: var(--spacing-lg);
background: var(--color-paper);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-hover);
padding: var(--spacing-md);
z-index: 1000;
}
.demo-controls h4 {
font-size: 0.875rem;
margin-bottom: var(--spacing-sm);
color: var(--color-ink);
}
.demo-toggle {
display: flex;
flex-direction: column;
gap: var(--spacing-xs);
}
.demo-btn {
padding: var(--spacing-xs) var(--spacing-md);
background: var(--color-paper-warm);
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 6px;
font-size: 0.8125rem;
cursor: pointer;
transition: var(--transition-default);
}
.demo-btn:hover {
background: rgba(0, 0, 0, 0.04);
}
.demo-btn.active {
background: var(--color-ink);
color: white;
border-color: var(--color-ink);
}
/* Close button for detail */
.close-detail {
background: transparent;
border: none;
color: var(--color-ink-muted);
font-size: 1.5rem;
cursor: pointer;
padding: var(--spacing-xs);
transition: var(--transition-default);
}
.close-detail:hover {
color: var(--color-ink);
}
/* Responsive */
@media (max-width: 768px) {
.product-grid {
grid-template-columns: 1fr;
}
.product-detail-content {
grid-template-columns: 1fr;
}
.nav-links {
display: none;
}
.demo-controls {
display: none;
}
}
</style>
</head>
<body>
<!-- Header -->
<header class="header">
<div class="container">
<div class="header-content">
<a href="#" class="group-logo">
<div class="group-logo-mark"></div>
<span>Novalon</span>
</a>
<nav class="nav-links">
<a href="#" class="nav-link active">产品品牌</a>
<a href="#" class="nav-link">解决方案</a>
<a href="#" class="nav-link">服务</a>
<a href="#" class="nav-link">关于</a>
</nav>
</div>
</div>
</header>
<!-- Main Content -->
<main>
<div class="container">
<!-- Breadcrumb -->
<nav class="breadcrumb">
<a href="#">首页</a>
<span>/</span>
<span>产品品牌</span>
</nav>
<!-- Hero -->
<section class="hero">
<span class="hero-label">Product Portfolio</span>
<h1>Novalon 产品品牌矩阵</h1>
<p>从企业级数字化到智能化转型,我们的产品矩阵覆盖不同规模、不同阶段的企业需求,为您提供量身定制的解决方案</p>
</section>
<!-- Category Tabs -->
<div class="category-tabs" id="categoryTabs">
<button class="category-tab active" data-category="enterprise">企业旗舰系列</button>
<button class="category-tab" data-category="growth">成长加速系列</button>
<button class="category-tab" data-category="specialized">专业工具系列</button>
</div>
<!-- Category Description -->
<div class="category-description" id="categoryDescription">
<h2>企业旗舰系列</h2>
<p>为大型企业和集团客户打造的全栈数字化解决方案,以深度业务理解和行业最佳实践为基础,助力企业实现卓越运营</p>
</div>
<!-- Product Detail Preview -->
<div class="product-detail-preview" id="productDetail">
<div class="product-detail-header">
<div class="product-detail-title">
<span class="product-detail-category" id="detailCategory">企业旗舰系列</span>
<h1 id="detailTitle">产品名称</h1>
</div>
<button class="close-detail" onclick="closeProductDetail()">&times;</button>
</div>
<div class="product-detail-content">
<div class="product-detail-main">
<p id="detailDescription">产品描述</p>
<h2>核心功能</h2>
<ul class="feature-list" id="detailFeatures">
<li>功能特性一</li>
<li>功能特性二</li>
<li>功能特性三</li>
</ul>
<h2>产品优势</h2>
<p id="detailBenefits">产品优势描述</p>
</div>
<div class="product-detail-sidebar">
<div class="sidebar-card">
<a href="#" class="primary-btn">预约演示</a>
<button class="secondary-btn">获取白皮书</button>
</div>
</div>
</div>
</div>
<!-- Product Grid -->
<section class="products-section">
<div class="product-grid" id="productGrid">
<!-- Products will be inserted here -->
</div>
</section>
</div>
<!-- Footer Brands -->
<footer class="footer-section">
<div class="container">
<h3 style="font-family: 'Noto Serif SC', serif; font-size: 1.25rem; margin-bottom: var(--spacing-sm);">Novalon 品牌家族</h3>
<p style="color: rgba(255,255,255,0.6); font-size: 0.9375rem;">探索我们所有的产品品牌,找到最适合您的解决方案</p>
<div class="footer-brands" id="footerBrands">
<!-- Footer brand links will be inserted here -->
</div>
</div>
</footer>
</main>
<!-- Demo Controls -->
<div class="demo-controls">
<h4>设计模式展示</h4>
<div class="demo-toggle">
<button class="demo-btn active" onclick="toggleView('grid')">品牌概览</button>
<button class="demo-btn" onclick="toggleView('detail')">单品详情</button>
</div>
</div>
<script>
// Product Data
const products = {
enterprise: [
{
id: 'stockpilot',
title: 'StockPilot',
category: '企业旗舰系列',
description: '智能供应链决策平台,融合AI预测与优化算法,为企业提供端到端的供应链数字化解决方案',
tags: ['AI驱动', '供应链', 'SaaS'],
features: ['智能需求预测', '库存优化引擎', '供应链可视性', '协同决策平台'],
benefits: '通过先进的机器学习算法精准预测市场需求,减少库存积压同时提升服务水平,帮助企业在不确定性中找到最优解'
},
{
id: 'novaflow',
title: 'NovaFlow',
category: '企业旗舰系列',
description: '企业级业务流程管理平台,通过低代码方式快速构建和部署复杂业务流程',
tags: ['BPM', '低代码', '流程自动化'],
features: ['可视化流程设计器', '智能流程推荐', '多系统集成', '性能监控'],
benefits: '让业务人员也能参与流程设计,大幅缩短数字化转型周期,同时保持企业级的稳定性和可扩展性'
},
{
id: 'insighthub',
title: 'InsightHub',
category: '企业旗舰系列',
description: '一站式数据分析与商业智能平台,将分散的数据转化为可执行的洞察',
tags: ['BI', '数据分析', '可视化'],
features: ['多源数据连接', '自助分析', 'AI增强分析', '实时仪表板'],
benefits: '打破数据孤岛,让每个业务决策者都能轻松获取洞察,从经验驱动转向数据驱动'
}
],
growth: [
{
id: 'startos',
title: 'StartOS',
category: '成长加速系列',
description: '面向成长型企业的一站式运营管理系统,涵盖CRM、项目、财务等核心模块',
tags: ['中小企业', '一体化', 'SaaS'],
features: ['客户管理', '项目协作', '财务对账', '数据分析'],
benefits: '开箱即用的完整解决方案,让成长型企业无需复杂IT投入即可获得世界一流的管理工具'
},
{
id: 'connex',
title: 'Connex',
category: '成长加速系列',
description: '智能客户连接平台,整合全渠道触点,打造无缝客户体验',
tags: ['客户体验', '全渠道', '营销自动化'],
features: ['全渠道接入', '客户画像', '智能路由', '满意度分析'],
benefits: '在正确的时间通过正确的渠道与客户沟通,提升转化率和客户忠诚度'
}
],
specialized: [
{
id: 'secureguard',
title: 'SecureGuard',
category: '专业工具系列',
description: '企业级安全合规管理套件,帮助企业满足各种监管要求',
tags: ['安全', '合规', '审计'],
features: ['风险评估', '合规管理', '安全监控', '审计追踪'],
benefits: '化繁为简,让复杂的合规管理变成可落地的日常工作'
},
{
id: 'devcloud',
title: 'DevCloud',
category: '专业工具系列',
description: '云原生开发与运维平台,赋能研发团队高效交付软件',
tags: ['DevOps', '云原生', 'CI/CD'],
features: ['代码管理', '自动化构建', '容器部署', '监控告警'],
benefits: '从代码到生产的全链路自动化,让软件开发像流水线一样高效可靠'
}
]
};
let currentCategory = 'enterprise';
let activeView = 'grid';
// Initialize
function init() {
renderProducts();
renderFooterBrands();
setupTabs();
}
// Render Products
function renderProducts() {
const grid = document.getElementById('productGrid');
const categoryProducts = products[currentCategory];
grid.innerHTML = categoryProducts.map(product => `
<a href="#" class="product-card" onclick="showProductDetail('${product.id}', '${currentCategory}'); return false;">
<div class="product-card-image">
<span class="product-card-icon">${product.title.charAt(0)}</span>
</div>
<div class="product-card-content">
<div class="product-card-category">${product.category}</div>
<h3>${product.title}</h3>
<p>${product.description}</p>
<div class="product-card-meta">
${product.tags.map(tag => `<span class="product-tag">${tag}</span>`).join('')}
</div>
</div>
</a>
`).join('');
}
// Render Footer Brands
function renderFooterBrands() {
const footer = document.getElementById('footerBrands');
const allProducts = [...products.enterprise, ...products.growth, ...products.specialized];
footer.innerHTML = allProducts.map(product => `
<a href="#" class="footer-brand-link" onclick="quickJumpTo('${product.id}'); return false;">${product.title}</a>
`).join('');
}
// Setup Tabs
function setupTabs() {
const tabs = document.querySelectorAll('.category-tab');
tabs.forEach(tab => {
tab.addEventListener('click', () => {
tabs.forEach(t => t.classList.remove('active'));
tab.classList.add('active');
currentCategory = tab.dataset.category;
updateCategoryDescription();
renderProducts();
closeProductDetail();
});
});
}
// Update Category Description
function updateCategoryDescription() {
const desc = document.getElementById('categoryDescription');
const descriptions = {
enterprise: {
title: '企业旗舰系列',
text: '为大型企业和集团客户打造的全栈数字化解决方案,以深度业务理解和行业最佳实践为基础,助力企业实现卓越运营'
},
growth: {
title: '成长加速系列',
text: '面向快速成长企业的轻量化解决方案,在保持简洁易用的同时提供强大的功能,助力企业规模化发展'
},
specialized: {
title: '专业工具系列',
text: '针对特定业务领域的专业工具,深入业务痛点,提供业界领先的专业解决方案'
}
};
desc.innerHTML = `
<h2>${descriptions[currentCategory].title}</h2>
<p>${descriptions[currentCategory].text}</p>
`;
}
// Show Product Detail
function showProductDetail(productId, category) {
const allProducts = [...products.enterprise, ...products.growth, ...products.specialized];
const product = allProducts.find(p => p.id === productId);
if (!product) return;
document.getElementById('detailCategory').textContent = product.category;
document.getElementById('detailTitle').textContent = product.title;
document.getElementById('detailDescription').textContent = product.description;
document.getElementById('detailFeatures').innerHTML = product.features.map(f => `<li>${f}</li>`).join('');
document.getElementById('detailBenefits').textContent = product.benefits;
document.getElementById('productDetail').classList.add('active');
document.getElementById('productDetail').scrollIntoView({ behavior: 'smooth', block: 'start' });
}
// Close Product Detail
function closeProductDetail() {
document.getElementById('productDetail').classList.remove('active');
}
// Quick Jump
function quickJumpTo(productId) {
const allProducts = [...products.enterprise, ...products.growth, ...products.specialized];
const product = allProducts.find(p => p.id === productId);
if (product) {
// Find and switch to the correct category
let targetCategory = 'enterprise';
if (products.growth.find(p => p.id === productId)) targetCategory = 'growth';
if (products.specialized.find(p => p.id === productId)) targetCategory = 'specialized';
// Switch tabs
const tabs = document.querySelectorAll('.category-tab');
tabs.forEach(t => t.classList.remove('active'));
document.querySelector(`[data-category="${targetCategory}"]`).classList.add('active');
currentCategory = targetCategory;
updateCategoryDescription();
renderProducts();
// Show detail after a short delay
setTimeout(() => {
showProductDetail(productId, targetCategory);
}, 100);
}
}
// Toggle View (Demo Control)
function toggleView(view) {
const buttons = document.querySelectorAll('.demo-btn');
buttons.forEach(btn => btn.classList.remove('active'));
event.target.classList.add('active');
if (view === 'grid') {
closeProductDetail();
document.getElementById('productGrid').style.display = 'grid';
} else {
showProductDetail('stockpilot', 'enterprise');
}
}
// Initialize on load
document.addEventListener('DOMContentLoaded', init);
</script>
</body>
</html>