PROJECT_INSIGHTS.md 5.2 KB

ColorMapRun H5 Card 项目开发备忘录 (Project Insights)

这份文档汇总了 AI 助手 (Gemini) 在协助开发过程中对项目的理解、架构分析以及关键技术细节。旨在帮助开发者快速上手或在不同环境间同步上下文。

1. 项目概况

  • 项目名称: ColorMapRun Mobile H5 Card
  • 核心功能: 为 ColorMapRun App 提供嵌入式的 H5 卡片页面,用于展示活动详情、排行榜、报名、游戏互动等功能。
  • 技术栈:
    • 前端框架: Vue.js (UniApp 风格,但在 SDK 模式下使用了原生 HTML/JS/CSS)。
    • 构建环境: 似乎是基于 UniApp 的工程结构,但在 sdk/ 目录下维护了一套独立的、无框架依赖的原生 H5 页面,用于嵌入 App。
    • 通信协议: 自定义 JSBridge (bridge.js) 与 Native App (Flutter) 交互。
    • 样式: CSS3, Flexbox, FontAwesome (部分页面)。

2. 核心目录结构

  • sdk/: (核心关注点) 包含可以直接在浏览器或 WebView 中运行的原生 HTML 页面。
    • detail.html: 核心页面之一,用于展示月度挑战赛详情、排行榜等。
    • index.html: 入口卡片页。
    • api.js: 封装了所有后端 API 请求,包含 Mock 数据机制。
    • bridge.js: 封装了与 App 的通信逻辑 (JSBridge)。
    • API_SERVER.md: 详细的后端接口文档(由 AI 维护更新)。
  • pages/: UniApp 的页面源码目录,包含各种业务模块的 Vue 组件。
    • tpl/: 通用模板 (style1, style2, style3...),包含活动首页、排行榜、报名页。
    • mytz/: 每月挑战 (Monthly Challenge) 模块。
    • game/: 游戏模块 (如 Grid 网格拼图)。
    • bm/: 报名 (BaoMing) 相关模块。
    • jbs/: 锦标赛 (JinBiaoSai) 模块。
  • common/: 公共工具库,如 tools.js (工具函数), api.js (UniApp 版 API 封装)。

3. API 交互机制 (sdk/api.js)

  • 封装方式: 所有接口挂载在全局 window.API 对象上。
  • Mock 模式:
    • 通过 URL 参数 ?env=mock 开启。
    • 开启后,API.request 会拦截请求并返回 api.js 内部定义的 MOCK_DB 数据。
    • 日志输出会详细打印 [API-Mock] Request[API-Mock] Response
  • 正式模式:
    • 默认请求 https://colormaprun.com/api/card/ (Base URL)。
    • 请求头包含 Content-Type: application/x-www-form-urlencodedtoken
    • 自动处理 401 Unauthorized,调用 Bridge.toLogin() 跳转登录。
  • 日志管理:
    • 引入了 Logger 工具。
    • 仅在 env=mock 时输出 Logger.logLogger.warn,生产环境静默(Logger.error 除外)。

4. Bridge 交互机制 (sdk/bridge.js)

  • 通信方式:
    1. 优先: window.uni.postMessage (UniApp WebView 标准)。
    2. 降级: URL 拦截协议 (如 action://to_login/) 或注入对象 (如 window.share_wx)。
  • 主要功能:
    • 页面跳转: toHome, toLogin, back, appAction (通用跳转)。
    • 功能调用: openMap, openMatch, shareWx, makePhoneCall 等。
  • 日志管理: 同样集成了 Logger 工具,生产环境隐藏敏感信息(如 Token)。

5. 关键业务模块与逻辑

5.1 月度挑战赛 (sdk/detail.html)

  • 功能: 展示用户当月的挑战进度(仪表盘)、积分/场地排行榜(领奖台 + 列表)。
  • 逻辑:
    • 优先加载当前月份数据。
    • 如果当前月份无数据,会自动向前回溯 6 个月查找有数据的月份。
    • 未登录处理: 新增了 renderGuestState,未登录用户显示随机头像和“去登录”提示。
    • UI 调整: 针对移动端进行了适配,Header 区域紧凑化以腾出更多列表空间。

5.2 游戏/网格挑战 (pages/game/grid)

  • 功能: 九宫格拼图游戏,点亮格子解锁奖励。
  • 数据结构: 依赖 getGrids 接口,返回 detailRs 包含格子的状态、关联活动 (ocaId) 或地图 (mapId)。

5.3 动态配置 (CardConfigQuery)

  • 后端通过 getCardConfig 接口返回 configJson 字符串。
  • 前端解析 JSON 后,动态应用:
    • CSS: 注入自定义样式。
    • 弹窗: 配置规则弹窗、消息弹窗的内容。
    • UI 元素: 如 tabActiveColor, teamType 等。

6. 待办与注意事项 (TODOs)

  1. API 返回结构待定:
    • getCardUri
    • getMatchFinishInfo
    • redisRebuild
    • 以上三个接口已在 api.js 和文档中占位,但 Mock 数据目前为空对象 {},需根据后端实际返回进行更新。
  2. 生产环境部署:
    • 上线前请确保 sdk/detail.html 等文件中的 env=mock 参数已移除或由 App 端正确控制。
    • 建议服务器开启 Gzip 压缩以优化加载速度。
  3. 代码同步:
    • sdk/api.js (原生版) 和 common/api.js (UniApp 版) 维护了两套类似的接口定义,修改时需注意同步(目前主要维护了 sdk/api.js)。

7. 常用调试指令

  • 开启 Mock: 在 URL 后追加 ?env=mock
  • 查看完整日志: 开启 Mock 模式后,控制台会输出详细的 Bridge 调用和 API 请求日志。