Files
dukang_official/src/App.tsx
T
2026-07-29 22:22:10 +08:00

647 lines
31 KiB
TypeScript
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.
import { useCallback, useEffect, useMemo, useState, type CSSProperties } from 'react'
import './App.css'
const sections = [
{ id: 'hero', label: 'LP-H 首屏', title: '你请客,我买单', summary: '杜康好客:你请客,我买单。买酒送等价好客权益,到合作门店抵餐。' },
{ id: 'brand', label: 'LP-01 品牌传承', title: '品牌传承', summary: '杜康被尊为秫酒酒宗、酒祖与酒神,是华夏酿造文明的精神图腾。' },
{ id: 'poetry', label: 'LP-02 诗酒文化', title: '诗酒文化', summary: '何以解忧,唯有杜康。曹操《短歌行》主诗签,苏轼、白居易、辛弃疾辅诗签。' },
{ id: 'qingxiang', label: 'LP-03 清香宝典', title: '清香', summary: '千年杜康,醉美清香。绵·净·雅,杏花村同源同脉,一清到底。' },
{ id: 'haoke', label: 'LP-04 好客模式', title: '好客模式', summary: '买酒送等价好客权益;到合作门店按面额抵餐。酒餐同赴,线上线下一体。' },
{ id: 'system', label: 'LP-05 三端协同', title: '三端协同', summary: '城市合伙人拓店 → 用户购酒得权益 → 门店核销结算 → 再反哺城市运营。' },
{ id: 'tech', label: 'LP-06 科技驱动', title: '科技驱动', summary: '四端一体、全链路闭环、宴请场景数字化、城市运营中台。' },
{ id: 'subsidy', label: 'LP-07 酒厂实力', title: '酒厂实力', summary: '十亿级支持,与餐饮共度寒冬。支持细则以合作政策为准。' },
{ id: 'partner', label: 'LP-08 城市合伙人', title: '城市合伙人', summary: '携酒祖入城,共建一座城的好客。了解合作方式,不承诺收益。' },
{ id: 'tech-detail', label: 'LP-09 科技板块', title: '科技板块', summary: '可运营、可结算、可规模化的好客系统:用户端、门店核销端、合伙人端、总部管控。' },
{ id: 'contact', label: 'LP-10 联系我们', title: '联系我们', summary: '扫码咨询项目负责人吕丹,电话 13073729990。无留资表单。' },
]
const navItems = [
{ href: '#brand', label: '品牌传承' },
{ href: '#poetry', label: '诗酒文化' },
{ href: '#qingxiang', label: '清香' },
{ href: '#haoke', label: '好客模式' },
{ href: '#system', label: '三端协同' },
{ href: '#tech', label: '科技驱动' },
{ href: '#subsidy', label: '酒厂实力' },
{ href: '#partner', label: '城市合伙人' },
{ href: '#tech-detail', label: '科技板块' },
{ href: '#contact', label: '联系我们' },
]
const heritageCards = [
{
title: '导语',
text: '杜康,被尊为秫酒「酒宗」「酒祖」,更被世人敬奉为「酒神」。从典籍到诗篇,从故里到祠祀,杜康不只是一杯酒的名字——它是华夏酿造文明的精神图腾。',
},
{
title: '典籍立祖',
text: '《世本》载「杜康作秫酒」;《说文解字》谓「少康,杜康也」。酒之所兴,肇自上皇——杜康造酒,写入中华文明的源头叙事。',
},
{
title: '故里承源',
text: '杜康村、杜康泉、空桑涧……酒祖故里的山水与作坊,延续着「以秫为骨、以曲为魂」的古老智慧,让技进乎道,香传千年。',
},
{
title: '酒以成礼',
text: '从封坛祭祖到「饮惟祀」的酒德观念,杜康文化把粮食之精,升华为礼乐之器——国之大事,在祀在戎,酒以成礼。',
},
]
const timeline = [
'先秦典籍立名',
'魏晋诗性转化',
'杜康祠祀千年',
'当代酒祖品牌复兴',
]
const qingxiangPositions = [
{ title: '企业定位', text: '承千年清韵,铸清香白酒标杆企业。' },
{ title: '品质定位', text: '守古法清酿,酿纯粹绵柔清雅好酒。' },
{ title: '品牌定位', text: '传酒祖清魂,塑高端清香文化名酒。' },
{ title: '营销定位', text: '拓清香赛道,引全民清雅饮酒新风尚。' },
]
const tastingSteps = [
{ title: '抿', text: '微启触香,品粮香本味' },
{ title: '咂', text: '舌卷含香,品绵柔入喉' },
{ title: '呵', text: '缓缓呵气,品回甘生津' },
]
const systemEnds = [
{
title: '城市合伙人',
role: '开城运营者:拓店、组仓配、带团队,让品牌在一座城真正落地。',
caps: '门店拓展与入驻协同 · 推广与代下单 · 佣金与经营数据可见',
},
{
title: '合作门店',
role: '好客权益核销端:把用户带回餐桌,用核销结算反哺门店经营。',
caps: '手机号/核销码核销 · 核销记录可查 · 结算路径清晰',
},
{
title: '用户',
role: '购酒与权益的享受者:小程序下单,酒到席、权益到店。',
caps: '清香选购 · 1:1 好客权益 · 同城配送/现场提货',
},
]
const techPoints = [
{
title: '四端一体',
text: '用户小程序、门店核销、城市合伙人、总部管控——权限分离、数据同源,开城可复制。',
},
{
title: '全链路闭环',
text: '下单履约、好客权益发放、门店核销、结算回款可视可追,减少「口头承诺、纸面对账」。',
},
{
title: '宴请场景数字化',
text: '面向商务宴请高频人群:酒到席、权益到店,把一次消费同时服务「喝」与「吃」。',
},
{
title: '城市运营中台',
text: '拓店、推广归因、经营数据与热力洞察,服务合伙人把一座城「盘清楚、推得动」。',
},
]
const techPorts = [
{
title: '用户端',
text: '清香选购与展示 · 下单履约(同城配送/现场提货) · 好客权益领取与使用 · 售后工单与发票入口',
},
{
title: '门店核销端',
text: '手机号/核销码核销 · 核销记录可查 · 结算与提现协同(细则以政策为准)',
},
{
title: '城市合伙人端',
text: '门店资料与入驻协同 · 推广/代下单 · 佣金与经营数据可见 · 子账号与权限管理',
},
{
title: '总部管控与数据',
text: '城市开通与审核 · 全链路订单/核销洞察 · 热力与经营分析 · 结算打款协同',
},
]
function App() {
const isStageMode = useMemo(() => new URLSearchParams(window.location.search).get('mode') === 'stage', [])
const [activeIndex, setActiveIndex] = useState(0)
const [autoPlay, setAutoPlay] = useState(false)
const [panelOpen, setPanelOpen] = useState(true)
const activeSection = sections[activeIndex] ?? sections[0]
useEffect(() => {
document.body.classList.toggle('stage-mode', isStageMode)
return () => document.body.classList.remove('stage-mode')
}, [isStageMode])
useEffect(() => {
if (!isStageMode) return
const hashIndex = sections.findIndex((section) => `#${section.id}` === window.location.hash)
if (hashIndex >= 0) setActiveIndex(hashIndex)
}, [isStageMode])
useEffect(() => {
if (isStageMode) return
const observer = new IntersectionObserver(
(entries) => {
const visible = entries
.filter((entry) => entry.isIntersecting)
.sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0]
if (visible?.target.id) {
const nextIndex = sections.findIndex((section) => section.id === visible.target.id)
if (nextIndex >= 0) setActiveIndex(nextIndex)
}
},
{ threshold: [0.35, 0.6, 0.8] },
)
sections.forEach((section) => {
const node = document.getElementById(section.id)
if (node) observer.observe(node)
})
return () => observer.disconnect()
}, [isStageMode])
const goToSection = useCallback((index: number) => {
const safeIndex = Math.max(0, Math.min(index, sections.length - 1))
setActiveIndex(safeIndex)
if (isStageMode) {
window.history.replaceState(null, '', `?mode=stage#${sections[safeIndex].id}`)
return
}
document.getElementById(sections[safeIndex].id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })
}, [isStageMode])
useEffect(() => {
if (!isStageMode) return
const root = document.getElementById('root')
root?.setAttribute('tabindex', '-1')
root?.focus({ preventScroll: true })
const handleKeyDown = (event: KeyboardEvent) => {
const key = event.key
const code = event.code
const isNext = key === 'ArrowRight' || code === 'ArrowRight' || key === 'ArrowDown' || code === 'ArrowDown' || key === 'PageDown' || code === 'PageDown' || key === ' '
const isPrev = key === 'ArrowLeft' || code === 'ArrowLeft' || key === 'ArrowUp' || code === 'ArrowUp' || key === 'PageUp' || code === 'PageUp'
const isHome = key === 'Home' || code === 'Home'
const isEnd = key === 'End' || code === 'End'
if (!isNext && !isPrev && !isHome && !isEnd) return
event.preventDefault()
event.stopPropagation()
setActiveIndex((current) => {
let next = current
if (isNext) next = Math.min(current + 1, sections.length - 1)
if (isPrev) next = Math.max(current - 1, 0)
if (isHome) next = 0
if (isEnd) next = sections.length - 1
window.history.replaceState(null, '', `?mode=stage#${sections[next].id}`)
return next
})
}
window.addEventListener('keydown', handleKeyDown, true)
return () => {
window.removeEventListener('keydown', handleKeyDown, true)
root?.removeAttribute('tabindex')
}
}, [isStageMode])
useEffect(() => {
if (!isStageMode || !autoPlay) return
const timer = window.setInterval(() => {
setActiveIndex((current) => {
const next = current >= sections.length - 1 ? 0 : current + 1
window.history.replaceState(null, '', `?mode=stage#${sections[next].id}`)
return next
})
}, 8000)
return () => window.clearInterval(timer)
}, [autoPlay, isStageMode])
const progress = ((activeIndex + 1) / sections.length) * 100
return (
<div className={isStageMode ? 'site is-stage' : 'site'}>
<header className="topbar">
<a className="brand-lockup" href="#hero" onClick={() => goToSection(0)}>
<img className="haoke-logo-img" src="/assets/haoke-logo.png" alt="杜康好客" />
<span>
<strong>杜康好客</strong>
<small>酒祖清香</small>
</span>
</a>
<nav className="nav-links" aria-label="主导航">
{navItems.map((item) => (
<a href={item.href} key={item.href}>{item.label}</a>
))}
</nav>
<a className="nav-cta" href="#contact">扫码咨询</a>
</header>
<main
className={isStageMode ? 'stage-track' : undefined}
style={isStageMode ? { transform: `translate3d(-${activeIndex * 100}vw, 0, 0)` } : undefined}
>
<section className="page-section hero-section poetic-section reveal-section" id="hero">
<div className="ink-cloud ink-cloud-one" />
<div className="hero-copy">
<p className="brand-main">杜康好客</p>
<p className="brand-sub">酒祖清香 · 清香系列</p>
<h1>你请客,我买单</h1>
<p className="hero-text">买酒送等价好客权益,到合作门店抵餐——让酒与席,同赴一场清雅之约。</p>
<div className="hero-actions">
<a className="primary-button" href="#haoke">了解好客模式</a>
<a className="secondary-button" href="#partner">了解城市合伙人</a>
</div>
</div>
<div className="hero-visual" aria-label="杜康好客清香系列 T30 产品视觉">
<img className="hero-bottle" src="/assets/t30-hero-bottle.png" alt="杜康好客清香系列 T30" />
</div>
</section>
<section className={`page-section poetic-section brand-section${activeIndex === 1 ? ' is-entered' : ''}`} id="brand">
<div className="section-heading">
<img className="ornament haoke-mark" src="/assets/haoke-logo.png" alt="杜康好客" />
<span className="eyebrow">品牌传承</span>
<h2>酒祖杜康:中国酒文化的精神原点</h2>
</div>
<div className="brand-layout">
<div className="heritage-grid">
{heritageCards.map((card, index) => (
<article className="paper-card" key={card.title} style={{ '--slide-i': index } as CSSProperties}>
<span>{card.title}</span>
<p>{card.text}</p>
</article>
))}
</div>
<figure className="heritage-figure">
<img src="/assets/heritage-scene.png" alt="酒祖杜康祠堂造像" />
<figcaption>酒祖承源 · 杜康留香</figcaption>
</figure>
</div>
<div className="timeline" aria-label="品牌传承时间线">
{timeline.map((item, index) => (
<div className="timeline-item" key={item} style={{ '--slide-i': index } as CSSProperties}>{item}</div>
))}
</div>
<p className="closing-line">站在今日回望,杜康如一坛陈年佳酿——愈久愈醇,愈传愈清。</p>
</section>
<section className={`page-section poetic-section poetry-section${activeIndex === 2 ? ' is-entered' : ''}`} id="poetry">
<div className="poetry-main-card reveal-card">
<img className="ornament haoke-mark" src="/assets/haoke-logo.png" alt="杜康好客" />
<span className="eyebrow">诗酒文化</span>
<h2>何以解忧,唯有杜康</h2>
<p className="lead">「诗酒」二字,是中国人心里最动人的共鸣。千载光阴里,曹操、杜甫、白居易、苏轼、辛弃疾……无数名家以杜康为意象,把一抹醇香写进东方美学。</p>
<blockquote>
<span>对酒当歌,人生几何?</span>
<strong>何以解忧,唯有杜康。</strong>
<cite>——东汉 · 曹操《短歌行》</cite>
</blockquote>
<p>从魏武的感喟,到唐人的开眉,再到宋人的神思——杜康完成了从「酒祖」到「诗心密码」的转化,成为文人精神世界的通行意象。</p>
<p className="closing-inline">斟半盏清醑,展卷轻吟:让酒香携着古人的魂魄,穿越千年与我们共醉。</p>
</div>
<div className="poetry-tags">
<article style={{ '--slide-i': 0 } as CSSProperties}>
<b>苏轼</b>
<span>「他年血食汝,当配杜康神。」</span>
<small>——宋 · 苏轼</small>
</article>
<article style={{ '--slide-i': 1 } as CSSProperties}>
<b>白居易</b>
<span>「不似杜康神用速,十分一盏便开眉。」</span>
<small>——唐 · 白居易</small>
</article>
<article style={{ '--slide-i': 2 } as CSSProperties}>
<b>辛弃疾</b>
<span>「杜康初筮,正得云雷。」</span>
<small>——宋 · 辛弃疾</small>
</article>
</div>
</section>
<section className="page-section poetic-section qingxiang-section" id="qingxiang">
<div className="section-heading">
<img className="ornament haoke-mark" src="/assets/haoke-logo.png" alt="杜康好客" />
<span className="eyebrow">清香宝典</span>
<h2>千年杜康,醉美清香</h2>
<p>浓香内卷、酱香回落的时代,清香正成为确定性更强的黄金赛道。酒祖杜康扎根山西杏花村——千年酒都,与清香名酒同源同脉,一清到底。</p>
</div>
<div className="data-band">
<div>
<strong>1000亿元</strong>
<span>2024年中国清香白酒销售收入,同比增长约13%;利润约350亿元</span>
<small>来源:黑格咨询《2025中国清香白酒产业发展报告》</small>
</div>
<div>
<strong>45.6%</strong>
<span>2025年消费者白酒香型偏好中清香型约45.6%(酱香约43.04%,浓香约41.76%</span>
<small>来源:艾媒咨询</small>
</div>
</div>
<div className="feature-layout">
<div className="position-grid">
{qingxiangPositions.map((item) => (
<article key={item.title}>
<h3>{item.title}</h3>
<p>{item.text}</p>
</article>
))}
</div>
<div className="craft-card">
<h3> · · </h3>
<p>粮香纯正无杂味,清香干净通透;入口绵柔顺滑,落口爽利干脆;杂醇含量低,不口干、不上头,醒酒快——适配小酌与宴席多场景。</p>
<p className="craft-extra">大麦、豌豆、高粱三种原料;清香「7321」工艺,讲究「清蒸二次清」「一清到底」,味道更醇厚。产地:扎根杏花村千年酿酒圣地,同源同脉,品质有据。</p>
<div className="tasting-detail">
{tastingSteps.map((step) => (
<div key={step.title}>
<strong>{step.title}</strong>
<p>{step.text}</p>
</div>
))}
</div>
<p className="mission-line">坚守纯粹品质,悦享清逸人生。</p>
<p className="product-tag">产品露出:杜康好客 · 清香系列 T30</p>
</div>
</div>
<figure className="store-figure">
<img src="/assets/store-preview.png" alt="杜康清香酒文馆效果示意" />
<figcaption>杜康清香 · 沉浸式酒文馆示意</figcaption>
</figure>
<p className="footnote">行业数据引自公开研究报告,仅供参考;具体以权威发布为准。</p>
</section>
<section className="page-section poetic-section haoke-section" id="haoke">
<div className="section-heading centered">
<span className="eyebrow">杜康好客</span>
<h2>你请客,我买单</h2>
<p>杜康好客,是酒祖杜康面向宴请场景的供应链与权益平台:总部供酒,城市合伙人推广,门店核销好客权益,用户一次购买,同时覆盖「酒 + 餐」。</p>
<p className="mode-line">买酒,送等价好客权益;到合作门店,按面额抵餐。</p>
</div>
<div className="three-columns">
<article>
<span>01</span>
<h3>酒餐同赴</h3>
<p>商务宴请不必再「酒一套、餐一套」分开算。买多少酒,送多少面额的好客权益,让席间更从容。</p>
</article>
<article>
<span>02</span>
<h3>线上线下一体</h3>
<p>小程序购酒、同城送达或现场提货;好客权益到合作门店核销——品牌、履约与核销,同一条链路。</p>
</article>
<article>
<span>03</span>
<h3>与餐饮共度时艰</h3>
<p>把酒厂资源与门店客流重新连上:用户得实惠,门店得核销结算,合伙人得城市运营空间——让清香美酒,成为餐桌上的暖流。</p>
</article>
</div>
<p className="closing-line">千年酒祖的清香,遇见一套可落地的好客机制。</p>
<div className="section-cta">
<a className="primary-button" href="#system">了解三端协同</a>
</div>
</section>
<section className="page-section poetic-section system-section" id="system">
<div className="section-heading">
<span className="eyebrow">三端协同</span>
<h2>城市合伙人 · 门店 · 用户,一城一盘棋</h2>
<p>杜康好客用一套系统,把「推得动、核得清、买得爽」连成闭环——每一端各司其职,全城一起把清香与好客做起来。</p>
</div>
<div className="system-grid">
{systemEnds.map((item) => (
<article key={item.title}>
<h3>{item.title}</h3>
<p>{item.role}</p>
<small>{item.caps}</small>
</article>
))}
</div>
<p className="loop-line">闭环示意:合伙人拓店 用户购酒得权益 门店核销结算 再反哺城市运营</p>
<p className="closing-line">三端同屏,好客才成立;系统在线,信任才可复制。</p>
<div className="section-cta">
<a className="primary-button" href="#tech">进入科技驱动</a>
</div>
</section>
<section className="page-section tech-section tech-drive-section" id="tech">
<div className="tech-orbit" />
<div className="section-heading dark-heading">
<span className="eyebrow">科技驱动</span>
<h2>让白酒行业,跑在可运营的数字轨道上</h2>
<p>传统白酒拼品牌、拼渠道;杜康好客把「购酒—权益—核销—结算」做成在线闭环,让酒厂资源、城市运营与餐饮门店,第一次用同一套系统对话。</p>
</div>
<div className="tech-grid">
{techPoints.map((item) => (
<article key={item.title}>
<span>{item.title}</span>
<p>{item.text}</p>
</article>
))}
</div>
<p className="industry-claim">科技不是白酒的装饰,而是穿越周期的基础设施——帮酒厂更精准触达,帮餐饮更快回血,帮合伙人更可控地开城。</p>
<div className="section-cta">
<a className="primary-button tech-button" href="#tech-detail">查看科技板块详情</a>
</div>
</section>
<section className="page-section tech-section subsidy-section" id="subsidy">
<div className="section-heading dark-heading centered">
<span className="eyebrow">酒厂实力</span>
<h2>十亿级支持,与餐饮共度寒冬</h2>
<p className="sub-title">酒祖杜康清香 · 真资源入场,真补贴到位</p>
<p>当餐饮遭遇客流与成本的双重压力,杜康好客选择站到餐桌这一边:以酒厂之力,把补贴与流量送进合作门店,把清香美酒变成可核销、可回血的经营助力。</p>
</div>
<div className="subsidy-number reveal-number">十亿</div>
<p className="number-desc">酒厂专项支持规模:十亿级资源投入,用于权益让利、门店激励与城市拓展——不是口号,是可落地的好客供给。</p>
<div className="subsidy-points">
<article>
<h3>品牌硬实力</h3>
<p>酒祖杜康清香背书,杏花村产区同源同脉;宴请场景有故事、有品质、有辨识度。</p>
</article>
<article>
<h3>补贴真机制</h3>
<p>用户购酒即获等价好客权益,到店抵餐;门店核销有结算路径,让「请吃饭」变成双方都愿意持续的生意。</p>
</article>
<article>
<h3>共度周期</h3>
<p>寒冬里最缺的不是又一张海报,而是把客流、酒水与结算打通的系统——杜康好客,为此而来。</p>
</article>
</div>
<p className="closing-line dark-closing">酒厂出资源,科技出闭环,门店与用户同受益。</p>
<p className="footnote dark-footnote">支持细则以合作政策为准。</p>
</section>
<section className="page-section tech-section partner-section" id="partner">
<div className="section-heading dark-heading">
<span className="eyebrow">城市合伙人</span>
<h2>携酒祖入城,共建一座城的好客</h2>
<p>若你认同酒祖杜康的清香价值,也看好「酒 + 餐」的数字化机会——欢迎了解城市合伙人:用系统化能力,把品牌、门店与用户在一座城运营起来。</p>
</div>
<div className="partner-detail-grid">
<article><h3>杜康实力</h3><p>酒祖品牌 + 清香产品矩阵 + 十亿级支持背书</p></article>
<article><h3>科技底座</h3><p>三端协同、全链路可追踪,开城不靠口头账</p></article>
<article><h3>定制风格</h3><p>城市策略、拓店节奏与运营支持,按城匹配</p></article>
<article><h3>适合谁</h3><p>有本地餐饮/渠道资源 · 认同长期运营 · 愿意用系统做管理的城市操盘手</p></article>
<article className="span-2"><h3>我们提供</h3><p>品牌与货盘支持 · 四端系统权限 · 拓店与培训协同 · 结算与数据可见</p></article>
</div>
<div className="hero-actions">
<a className="primary-button tech-button" href="#contact">了解合作方式</a>
<a className="secondary-button tech-secondary" href="#tech-detail">查看科技板块</a>
</div>
</section>
<section className="page-section tech-section tech-detail-section" id="tech-detail">
<div className="section-heading dark-heading centered">
<span className="eyebrow">科技板块</span>
<h2>可运营、可结算、可规模化的好客系统</h2>
<p>杜康好客科技板块,围绕「开城—履约—核销—结算—洞察」构建四端能力,让白酒宴请场景从经验驱动,升级为数据与流程驱动。</p>
</div>
<div className="ports-grid">
{techPorts.map((port) => (
<article key={port.title}>
<h3>{port.title}</h3>
<p>{port.text}</p>
</article>
))}
</div>
<div className="tech-highlights">
<span>一套账本贯穿购酒到核销</span>
<span>权限分离保障多方协作</span>
<span>开城可复制降低口头协同成本</span>
</div>
<p className="closing-line dark-closing">科技板块的目标很明确:让每一瓶清香、每一笔好客权益、每一次门店核销,都跑在可信的轨道上。</p>
<p className="contact-hint">了解更多请联系杜康好客 · 项目负责人</p>
</section>
<section className="page-section tech-section contact-section" id="contact">
<div className="section-heading dark-heading">
<span className="eyebrow">联系我们</span>
<h2>扫码咨询 · 对接项目负责人</h2>
<p>现场如需进一步了解酒祖杜康清香、好客模式或城市合作,请扫码添加对接人,或致电联系。</p>
<p className="contact-role">杜康好客 · 项目负责人</p>
<div className="contact-person">
<strong>吕丹</strong>
<a href="tel:13073729990">13073729990</a>
</div>
</div>
<div className="qr-card">
<img src="/assets/qr-contact.svg" alt="微信二维码占位图" />
<span>扫一扫上方二维码,添加项目负责人微信</span>
</div>
<footer className="footer in-section">
<strong>杜康好客 · 酒祖清香</strong>
<span>你请客,我买单</span>
<span>© 杜康好客 2026</span>
<span>ICP备2026004970号</span>
<p>理性饮酒,未成年人禁止饮酒。本展示内容仅供品牌与合作了解,不构成任何收益承诺。行业数据引自公开研究报告,仅供参考。支持细则以合作政策为准。</p>
</footer>
</section>
</main>
{isStageMode && (
<>
<button
aria-label="上一节"
className="stage-click-zone stage-click-prev"
disabled={activeIndex <= 0}
onClick={() => goToSection(activeIndex - 1)}
type="button"
>
<span></span>
</button>
<button
aria-label="下一节"
className="stage-click-zone stage-click-next"
disabled={activeIndex >= sections.length - 1}
onClick={() => goToSection(activeIndex + 1)}
type="button"
>
<span></span>
</button>
{panelOpen ? (
<aside className="stage-panel is-open" aria-label="展控模式控制面板">
<div className="stage-status">
<span>好客发布会 · 展控模式</span>
<div className="stage-status-right">
<b>{String(activeIndex + 1).padStart(2, '0')} / {String(sections.length).padStart(2, '0')}</b>
<button
type="button"
className="stage-collapse-btn"
onClick={() => setPanelOpen(false)}
aria-label="收起展控面板"
>
收起
</button>
</div>
</div>
<p>{activeSection.summary}</p>
<div className="autoplay-row">
<button
type="button"
className={autoPlay ? 'is-on' : ''}
onClick={() => setAutoPlay((value) => !value)}
>
{autoPlay ? '自动播:开' : '自动播:关'}
</button>
<button type="button" onClick={() => goToSection(0)}>回首屏</button>
</div>
<div className="highlight-jumps">
<button type="button" onClick={() => goToSection(2)}>诗酒</button>
<button type="button" onClick={() => goToSection(7)}>十亿</button>
<button type="button" onClick={() => goToSection(6)}>科技四端</button>
</div>
<div className="stage-qr-grid">
<div>
<img src="/assets/qr-host.svg" alt="主持人控场二维码占位" />
<span>控场码 · 需配对</span>
</div>
<div>
<img src="/assets/qr-audience.svg" alt="观众伴读二维码占位" />
<span>观展码 · 同步摘要</span>
</div>
</div>
<div className="stage-keys">键盘 上一节 · 下一节 · 空格下一节 · Home / End</div>
</aside>
) : (
<button
type="button"
className="stage-panel-toggle"
onClick={() => setPanelOpen(true)}
aria-label="展开展控面板"
>
展控
</button>
)}
</>
)}
<div className={`progress-bar ${isStageMode ? 'with-label' : ''}`} aria-hidden={!isStageMode}>
<div style={{ width: `${progress}%` }} />
{isStageMode && (
<span className="progress-label">{activeSection.label}</span>
)}
</div>
{isStageMode && (
<div className="stage-dots" aria-label="展控章节导航">
{sections.map((section, index) => (
<button
aria-label={`跳转到${section.title}`}
className={index === activeIndex ? 'active' : ''}
key={section.id}
onClick={() => goToSection(index)}
type="button"
/>
))}
</div>
)}
</div>
)
}
export default App