Files
InfoGenie/InfoGenie-frontend/前端文档.md
树萌芽 6b3fcc1791 security: stop tracking env files; admin gate via VITE_SITE_ADMIN_GATE; Redis/cache/docs
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
2026-04-03 16:10:12 +08:00

7.8 KiB
Raw Permalink Blame History

万象口袋 — 前端文档

技术栈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 后端 根地址 devhttp://127.0.0.1:5002prod 见 .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/healthMySQL / 60s 上游 / Redis PingGET /api/admin/site/diagnostics进程监听、MySQL/Redis 连接目标、库名/用户、SMTP、认证中心 URL 等;不含密码)。
    • 请求诊断接口时携带头 X-Site-Admin-Token: <admin_token>
    • 「刷新探测与配置」会同时刷新上述两个数据源。

休闲游戏页(src/pages/SmallGamePage.js

  • 游戏列表来自 src/config/StaticPageConfig.jsSMALL_GAMES
  • 卡片图标由 src/components/SmallGameIcons.jsgame.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 类合并):

  • PageWrapperContainerFeatureGridCatalogCardFeatureCard
  • FeatureCardUseCount:卡片右上角点击次数角标
  • ModuleCard:首页大模块卡片(Link
  • accentFromGradient:从 gradient 字符串提取首色

HTTPsrc/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/streamSSE失败或无内容时回退 POST /api/aimodelapp/chat
  • public/smallgame/public/toolbox/:独立页,由 FullscreenEmbed 打开。

aimodelapp 子目录的 env.js / API_CONFIG 需指向与主站一致的 Go 后端地址(通常与 VITE_API_URL 同源或同网段)。


与后端协作要点

  1. 登录token 存 localStorageAI 与受保护接口依赖 JWT萌芽认证中心签发
  2. AI:静态页通过配置的 API 调 Go 的 /api/aimodelapp/*;流式为 text/event-stream
  3. 站点开关60s / AI 应用显隐由 GET /api/site/*-disabled 等驱动。
  4. 卡片统计:列表页 CatalogCardfeature-card-clicks 接口对接;可选 Redis 缓存由后端控制。
  5. 管理员:写配置类接口需后端配置 INFOGENIE_SITE_ADMIN_TOKEN,与前端管理员口令一致。

其他文档