This commit is contained in:
ljy
2026-08-11 01:33:33 +08:00
parent cfafec8a3c
commit 738f00d442
129 changed files with 0 additions and 11642 deletions
-24
View File
@@ -1,24 +0,0 @@
---
description: 杜康好客官网项目总览与改动边界
alwaysApply: true
---
# 项目总览
杜康好客品牌官网 / 发布会展项单页:「你请客,我买单」。无路由、无后端、无 UI 库。
## 改哪里
- 逻辑与文案:`src/App.tsx`
- 视觉与布局:`src/App.css`
- 根排版 / scroll-snap`src/index.css`
- 站点图:`public/assets/`(路径 `/assets/...`
- 更完整说明见根目录 `AGENTS.md`
## 必须遵守
- 保持技术栈精简;非必要不新增依赖、路由或状态库
- 章节 `id` 须与 `sections`、`navItems`、DOM、展控 dots/panel 同步
- `public/assets/pdf-ref/` 仅设计参考,勿挂进生产 UI
- 保留合规文案(理性饮酒、无收益承诺、细则以政策为准、ICP)
- 布局或章节改动后,同时验证普通浏览与 `?mode=stage`
-25
View File
@@ -1,25 +0,0 @@
---
description: 发布会展控模式(stage)行为与样式约定
globs: src/App.tsx,src/App.css
alwaysApply: false
---
# 展控模式
## 入口与状态
- URL`?mode=stage` 或 `?mode=stage#sectionId`
- DOM`body.stage-mode`、`.site.is-stage`
- 翻页依赖 `sections` 数组顺序与 `id`;改章节数或 id 时同步 stage 逻辑
## 行为
- 键盘:←/→、↑/↓、Space、PageUp/PageDown、Home/End
- UI:圆点、可折叠面板、进度、可选自动播放
- 展控下隐藏普通顶栏导航 / CTA 的行为勿随意破坏
## 样式
- 大量 `.is-stage …` 覆盖负责更密排版与展项布局
- 普通模式改完后,必须用 `?mode=stage` 再验一遍各 LP
- 本地自测:`http://localhost:5173/?mode=stage#hero`
-28
View File
@@ -1,28 +0,0 @@
---
description: 双主题视觉与 LP 章节结构约定
globs: src/App.tsx,src/App.css,src/index.css
alwaysApply: false
---
# UI 与章节
## 双主题
- `hero``system``.poetic-section`(宣纸/国风:`--paper`、`--ink`、`--red`、`--gold`
- `tech``contact``.tech-section`(深色科技:`--tech`、`--tech-card`、`--tech-line`
- 普通模式 `activeIndex >= tech` 时顶栏加 `is-tech-theme`;展控(`?mode=stage`)不加
- 新增章节必须选对主题族;勿混用两套配色令牌
## 改章节
1. 更新 `sections` 常量(id / label / title / summary
2. 更新 `navItems`hero 通常不进顶栏)
3. 增加带正确 `id` 的 `<section className="page-section …">`
4. 同步展控 UIdots、panel、进度)
## 视觉原则
- 首屏品牌优先;章节多为 full-bleed 背景,保持 scroll-snap
- 动效沿用 `fadeRise`、`reveal-*`、`.is-entered`、`--slide-i`,勿堆叠无关徽章/卡片装饰
- 静态资源用 `/assets/...`;勿引用 `pdf-ref/`
- 响应式断点已有约 `1100px`、`760px`,优先扩展现有规则
-8
View File
@@ -1,8 +0,0 @@
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["react", "typescript", "oxc"],
"rules": {
"react/rules-of-hooks": "error",
"react/only-export-components": ["warn", { "allowConstantExport": true }]
}
}
-101
View File
@@ -1,101 +0,0 @@
# 杜康好客官网 — Agent 指南
面向后续开发者与 Cursor Agent:快速了解项目定位、改哪里、不能破坏什么。
## 项目定位
杜康好客品牌官网 / 发布会展项**单页**。核心主张「你请客,我买单」:买酒送等价好客权益,到合作门店抵餐。面向城市合伙人、合作门店与用户。
包名:`dukangguanwang`。无后端、无留资表单;联系方式为二维码 + 电话。
## 技术栈
| 层 | 选型 |
|----|------|
| UI | React 19 |
| 构建 | Vite 8 + `@vitejs/plugin-react` |
| 语言 | TypeScript`tsc -b` 后构建) |
| Lint | Oxlint |
| 路由 / 状态库 / UI 库 | **无** — 保持精简,非必要不新增依赖 |
React Compiler 未启用(见 README)。
## 关键入口
| 文件 | 职责 |
|------|------|
| [`src/App.tsx`](src/App.tsx) | 全部章节 DOM、文案常量、导航、展控逻辑 |
| [`src/App.css`](src/App.css) | 设计 token、章节样式、展控覆盖 |
| [`src/index.css`](src/index.css) | 根排版、scroll-snap、`stage-mode` body |
| [`src/main.tsx`](src/main.tsx) | StrictMode 挂载 |
| [`index.html`](index.html) | `zh-CN`、站点 meta |
产品表面几乎全集中在 `App.tsx` + `App.css``src/assets/` 为模板残留,站点图请用 `public/assets/`
## LP 章节(顺序固定)
`sections`、DOM `id``navItems`(及展控 dots/panel**必须同步**。
| id | 标签 | 视觉族 |
|----|------|--------|
| `hero` | LP-H 首屏 | `poetic-section` |
| `brand` | LP-01 品牌传承 | `poetic-section` |
| `poetry` | LP-02 诗酒文化 | `poetic-section` |
| `qingxiang` | LP-03 清香宝典 | `poetic-section` |
| `haoke` | LP-04 好客模式 | `poetic-section` |
| `system` | LP-05 三端协同 | `poetic-section` |
| `tech` | LP-06 科技驱动 | `tech-section` |
| `subsidy` | LP-07 酒厂实力 | `tech-section` |
| `partner` | LP-08 城市合伙人 | `tech-section` |
| `tech-detail` | LP-09 科技板块 | `tech-section` |
| `contact` | LP-10 联系我们 | `tech-section` |
锚点导航:固定 `.topbar` + hash。普通模式用 IntersectionObserver 更新 `activeIndex`
## 展控模式
- 入口:`?mode=stage``?mode=stage#sectionId`
- 行为:键盘翻页、点击区、圆点、可折叠面板、可选自动播放
- 样式:`body.stage-mode``.site.is-stage`,以及大量 `.is-stage …` 覆盖
**改布局或章节后,须同时验证普通浏览与展控。**
本地示例:`http://localhost:5173/?mode=stage#hero`
## 视觉语言(摘要)
`:root` 变量在 `App.css`
- 国风:`--paper` / `--ink` / `--red` / `--gold`
- 科技:`--tech` / `--tech-card` / `--tech-line`
- 内容宽:`--max`
字体:标题偏宋体系(Noto Serif SC / Songti);正文 Inter + 雅黑/苹方。设计基准约 1920 宽(`html` rem clamp)。章节多为 full-bleed 背景 + 纵向 scroll-snap。
## 静态资源
- 生产图:[`public/assets/`](public/assets/)`bg-*.png`、T30 瓶身、印章/logo、二维码等)
- 引用路径:`/assets/...`
- [`public/assets/pdf-ref/`](public/assets/pdf-ref/):PDF/设计参考,**不要挂进生产 UI**
## 常用命令
```bash
npm run dev # Vite 开发
npm run build # tsc -b && vite build
npm run preview # 预览 dist
npm run lint # oxlint
```
## 合规与文案
- 文案以中文为主,集中在 `App.tsx` 顶部常量与各 section JSX
- 保留页脚合规表述:理性饮酒、未成年人禁止饮酒、不构成收益承诺、细则以合作政策为准、ICP(`晋ICP备2026004970号`
- 合作/补贴类表述勿写成收益承诺
## 开发约定(速查)
1. 优先改 `App.tsx` / `App.css`,不要为单页硬上路由或组件库。
2. 新增章节:选对 `poetic-section``tech-section`,并更新 `sections``navItems`、DOM `id`、展控 UI。
3. 动效沿用现有 `fadeRise` / `reveal-*` / `.is-entered`,勿堆无关装饰。
4. 更细的 Cursor 规则见 [`.cursor/rules/`](.cursor/rules/)。
-32
View File
@@ -1,32 +0,0 @@
# React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
## React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
## Expanding the Oxlint configuration
If you are developing a production application, we recommend enabling type-aware lint rules by installing `oxlint-tsgolint` and editing `.oxlintrc.json`:
```json
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["react", "typescript", "oxc"],
"options": {
"typeAware": true
},
"rules": {
"react/rules-of-hooks": "error",
"react/only-export-components": ["warn", { "allowConstantExport": true }]
}
}
```
See the [Oxlint rules documentation](https://oxc.rs/docs/guide/usage/linter/rules) for the full list of rules and categories.
-17
View File
@@ -1,17 +0,0 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="description"
content="杜康好客品牌官网,你请客我买单。发布会展项单页展示,支持展控模式。"
/>
<title>杜康好客品牌官网|你请客,我买单</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
-1365
View File
File diff suppressed because it is too large Load Diff
-25
View File
@@ -1,25 +0,0 @@
{
"name": "dukangguanwang",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "oxlint",
"preview": "vite preview"
},
"dependencies": {
"react": "^19.2.7",
"react-dom": "^19.2.7"
},
"devDependencies": {
"@types/node": "^24.13.2",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.3",
"oxlint": "^1.71.0",
"typescript": "~6.0.2",
"vite": "^8.1.1"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 835 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

-27
View File
@@ -1,27 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1000" viewBox="0 0 1600 1000">
<defs>
<filter id="paperNoise">
<feTurbulence type="fractalNoise" baseFrequency="0.012" numOctaves="5" seed="8"/>
<feColorMatrix type="matrix" values="0.22 0 0 0 0.72 0 0.18 0 0 0.58 0 0 0.12 0 0.38 0 0 0 0.16 0"/>
</filter>
<radialGradient id="warm" cx="26%" cy="18%" r="74%">
<stop offset="0" stop-color="#fff8e8"/>
<stop offset="0.58" stop-color="#f4e2c3"/>
<stop offset="1" stop-color="#e7cfaa"/>
</radialGradient>
<linearGradient id="ink" x1="0" x2="1" y1="0" y2="1">
<stop offset="0" stop-color="#24160f" stop-opacity="0.18"/>
<stop offset="1" stop-color="#24160f" stop-opacity="0"/>
</linearGradient>
</defs>
<rect width="1600" height="1000" fill="url(#warm)"/>
<rect width="1600" height="1000" filter="url(#paperNoise)" opacity="0.62"/>
<path d="M-90 640C180 470 310 845 560 690C755 568 808 254 1086 276C1298 293 1368 496 1700 382" fill="none" stroke="#7d6a55" stroke-opacity="0.13" stroke-width="68" stroke-linecap="round"/>
<path d="M1220 64c80 30 148 96 182 172 31 68 21 132-26 158-54 30-134-8-190-78-75-93-67-217 34-252Z" fill="url(#ink)"/>
<path d="M112 178c180-76 286-68 346 22 50 75-8 161-148 202-112 32-250 6-316-60-48-48-17-116 118-164Z" fill="#a71922" opacity="0.045"/>
<g opacity="0.2" stroke="#c99a45" stroke-width="1">
<path d="M120 120h420"/><path d="M120 160h360"/><path d="M120 200h280"/>
<path d="M1040 780h380"/><path d="M1120 820h300"/><path d="M1180 860h240"/>
</g>
<text x="1340" y="248" writing-mode="tb" font-family="serif" font-size="76" font-weight="800" fill="#a71922" opacity="0.08">酒祖杜康</text>
</svg>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Some files were not shown because too many files have changed in this diff Show More