Remove InfoGenie-frontend and Go .env from version control; add .env.example templates; ignore .claude local settings. Admin UI reads site gate from env only. Note: rotate secrets if repo history was ever public. Made-with: Cursor
7.8 KiB
7.8 KiB
万象口袋 — 前端文档
技术栈:React 18 · React Router 6 · Tailwind CSS v4 · axios · Vite 6
包名:infogenie-frontend(见 package.json)
命令
| 命令 | 说明 |
|---|---|
npm run dev / npm start |
开发服务器(Vite,默认端口 3000) |
npm run build |
生产构建,输出 dist/ |
npm run preview |
本地预览 dist/ 构建结果 |
项目结构(关键文件)
infogenie-frontend/
├── index.html ← Vite HTML 入口(根目录,非 public/)
├── vite.config.js ← Vite 配置(React 插件、Tailwind 插件、路径别名)
├── package.json
├── .env.development ← 开发环境变量(VITE_*)
├── .env.production ← 生产环境变量
├── public/ ← 静态资源(不参与构建,直接复制到 dist/)
│ ├── assets/logo.png
│ ├── icons/
│ ├── aimodelapp/ ← AI 小应用静态页
│ ├── smallgame/ ← 小游戏静态页
│ └── toolbox/ ← 工具箱静态页
└── src/
├── index.js ← React 根挂载
├── App.js ← 路由、布局、全局 Provider
├── components/ ← 公共组件(含 FullscreenEmbed、SmallGameIcons 等)
├── pages/ ← 页面组件(含 AdminPage、SmallGamePage)
├── contexts/ ← 全局 Context
├── hooks/ ← 自定义 Hooks(如 useFeatureCardClickStats)
├── utils/ ← Axios 封装、可见性过滤等
├── config/ ← 环境变量解析、Api60sConfig、StaticPageConfig
└── styles/
├── index.css ← Tailwind 入口 + 全局 base 样式 + 自定义动画
└── shared.js ← 设计系统组件(Tailwind 函数组件)
Vite 配置(vite.config.js)
| 特性 | 说明 |
|---|---|
@vitejs/plugin-react |
React Fast Refresh + JSX 转换(含 .js 扩展名支持) |
@tailwindcss/vite |
Tailwind CSS v4 Vite 插件 |
treat-js-as-jsx |
内联插件,使 .js 文件中的 JSX 正常编译 |
resolve.alias['@'] |
@/ 映射到 src/ |
base: '/' |
部署根路径 |
server.port: 3000 |
开发服务器端口 |
环境变量(src/config/env.js)
变量名使用 Vite 规范的 VITE_ 前缀(通过 import.meta.env 访问):
| 变量 | 作用 | 开发默认 / 生产默认 |
|---|---|---|
VITE_API_URL |
万象口袋 Go 后端 根地址 | dev:http://127.0.0.1:5002;prod 见 .env.production |
VITE_AUTH_URL |
认证中心 页面 域名 | https://auth.shumengya.top |
VITE_AUTH_API_URL |
认证中心 API 根地址 | https://auth.api.shumengya.top |
VITE_DEBUG |
调试开关 | 'true' 开启 |
VITE_SITE_ADMIN_GATE |
管理员后台口令,须与后端 INFOGENIE_SITE_ADMIN_TOKEN 一致 |
本地写在 .env.development,勿提交 |
运行时可通过 window.ENV_CONFIG 查看解析结果(若已注入)。
迁移注意:由 CRA 迁出后,原
REACT_APP_*已统一为VITE_*。
主应用结构(src/)
路由(src/App.js)
| 路径 | 页面 |
|---|---|
/ |
首页 |
/login |
登录 |
/auth/callback |
认证回调 |
/60sapi · /60sapi/:itemId |
60s API 列表与详情 |
/smallgame |
休闲游戏 |
/toolbox |
工具箱 |
/aimodel |
AI 应用(需登录) |
/profile |
个人中心 |
/admin |
管理员后台(本地 admin_token 校验) |
* |
重定向首页 |
管理员后台(src/pages/AdminPage.js)
- 浏览器
localStorage.admin_token与内置口令一致方可进入(与后端INFOGENIE_SITE_ADMIN_TOKEN用于接口时是同一套站点管理员概念)。 - 功能分区(左侧):概览、状态监控、AI 上游、60s 数据源、60s 前台展示、AI 前台展示。
- 状态监控:
- 并行请求
GET /api/health(MySQL / 60s 上游 / Redis Ping)与GET /api/admin/site/diagnostics(进程监听、MySQL/Redis 连接目标、库名/用户、SMTP、认证中心 URL 等;不含密码)。 - 请求诊断接口时携带头
X-Site-Admin-Token: <admin_token>。 - 「刷新探测与配置」会同时刷新上述两个数据源。
- 并行请求
休闲游戏页(src/pages/SmallGamePage.js)
- 游戏列表来自
src/config/StaticPageConfig.js的SMALL_GAMES。 - 卡片图标由
src/components/SmallGameIcons.js按game.id渲染 Emoji(如 2048→🔢、俄罗斯方块→🧱 等),嵌入在FeatureCardIcon内。
其他关键组件
RandomSiteBackground:全站随机背景,毛玻璃模糊,会话级缓存。Header/Footer/Navigation:导航与布局。FullscreenEmbed:全屏 iframe(游戏、工具箱、AI 静态页),支持注入 token、加载超时提示。ParticleEffect:全局点击粒子动画。
样式系统(src/styles/)
Tailwind CSS v4
- 入口:
src/styles/index.css,顶部@import "tailwindcss" - 配置:Tailwind v4 CSS-first,无独立
tailwind.config.js,自定义动画通过@theme块定义
自定义动画(可直接在 className 中使用):
| 类名 | 效果 | 用途 |
|---|---|---|
animate-page-enter |
opacity: 0→1, translateY: 20px→0, 0.8s |
页面进入 |
animate-fade-up |
opacity: 0→1, translateY: 12px→0, 0.35s |
卡片网格出现 |
设计系统(src/styles/shared.js)
所有组件均为 React 函数组件,接受 className prop(可与 Tailwind 类合并):
PageWrapper、Container、FeatureGrid、CatalogCard、FeatureCardFeatureCardUseCount:卡片右上角点击次数角标ModuleCard:首页大模块卡片(Link)accentFromGradient:从 gradient 字符串提取首色
HTTP(src/utils/api.js)
- axios 实例默认
baseURL = ENV_CONFIG.API_URL,请求头自动带Bearer token import.meta.env.DEV控制仅开发环境打印 URL- 支持
skipErrorToast: true,用于静默失败场景(如点击统计)
静态资源(public/)
与 Vite 主站并列的大量免构建页面:
public/aimodelapp/<应用名>/:AI 小应用(HTML +script.js+ 可选env.js)。- 统一聊天入口:
public/aimodelapp/shared/ai-chat.js。 - 优先请求
POST /api/aimodelapp/chat/stream(SSE),失败或无内容时回退POST /api/aimodelapp/chat。
- 统一聊天入口:
public/smallgame/、public/toolbox/:独立页,由FullscreenEmbed打开。
各 aimodelapp 子目录的 env.js / API_CONFIG 需指向与主站一致的 Go 后端地址(通常与 VITE_API_URL 同源或同网段)。
与后端协作要点
- 登录:token 存
localStorage,AI 与受保护接口依赖 JWT(萌芽认证中心签发)。 - AI:静态页通过配置的 API 调 Go 的
/api/aimodelapp/*;流式为text/event-stream。 - 站点开关:60s / AI 应用显隐由
GET /api/site/*-disabled等驱动。 - 卡片统计:列表页
CatalogCard与feature-card-clicks接口对接;可选 Redis 缓存由后端控制。 - 管理员:写配置类接口需后端配置
INFOGENIE_SITE_ADMIN_TOKEN,与前端管理员口令一致。
其他文档
- Go 后端 API、Redis、健康与诊断:
infogenie-backend-go/后端文档.md - 仓库总览与多模块说明:
../README.md