# Likei H5 项目详情 最后扫描时间:2026-06-09 ## 1. 项目定位 `likei-h5` 是一个运行在宿主 App WebView 内的多业务移动端 H5 项目,核心技术栈为 `Vue 3 + Vite 7 + Pinia 3 + Vue Router 4 + Vue I18n 11 + Vant 4`。 项目不是单一落地页,而是按业务域拆分的前端集合,覆盖: - 角色中心:管理员、代理、BD、BD Leader、主播、金币代理。 - 钱包与资金流:提现、转账、兑换、薪资、KYC、银行卡。 - 充值与邀请:充值链路、支付方式、邀请不同角色或新用户。 - 排行榜与活动页:固定榜单、限时活动、游戏活动、世界杯专题。 默认运行模型优先适配 App 宿主环境,浏览器环境主要用于本地开发和调试。 ## 2. 快速启动 ### 2.1 环境要求 - Node:`^20.19.0 || >=22.12.0` - 包管理器:当前仓库没有锁文件,默认按 `npm` 使用。 - 开发服务:Vite,默认端口 `5173`,`strictPort: true`。 ### 2.2 常用命令 ```bash npm install npm run dev npm run dev:test npm run dev:prod npm run build npm run build:dev npm run build:test npm run build:prod npm run build:atu-prod npm run build:azizi-prod npm run preview npm run lint npm run docs:sync:security ``` 说明: - `npm run lint` 执行的是 `eslint . --fix`,会直接修改文件。 - 当前没有 `test` 脚本,构建是主要健康检查方式。 - 构建后会执行 `scripts/generate-version.js`,生成 `dist/version.json`。 ### 2.3 环境文件 根目录当前存在: - `.env` - `.env.development` - `.env.production` - `.env.production-atu` - `.env.production-azizi` - `.env.test` 环境读取集中在 `src/utils/env.js`,常用变量包括: - `VITE_USER_AUTH` - `VITE_NODE_ENV` - `VITE_API_BASE_URL` - `VITE_APP_TITLE` - `VITE_APP_VERSION` - `VITE_ENABLE_VERSION_CHECK` 协作注意:环境文件可能有本地改动,不要默认重置。 ## 3. 启动与运行链路 ### 3.1 主入口 入口文件:`src/main.js` 启动顺序: 1. 引入全局样式:`src/assets/main.css`、`src/styles/fonts.css`、`src/styles/global.css`。 2. 打印环境信息。 3. 安装运行时安全能力:`installRuntimeSecurity()`。 4. 安装受保护资源运行时:`installProtectedAssetRuntime()`。 5. 应用性能模式 class:`applyPerformanceModeClass()`。 6. 创建 Pinia,并启用 `pinia-plugin-persistedstate`。 7. 注册全局指令 `v-smart-img`。 8. 注册全局组件 `LoadingContent`。 9. 注册 router、pinia、i18n。 10. 按 URL `lang` 参数和页面规则初始化语言。 11. 挂载到 `#app`。 12. 空闲时检查版本,开启后每 5 分钟轮询版本。 ### 3.2 路由 路由文件:`src/router/index.js` 特点: - 使用 `createWebHashHistory`,适合 App WebView 和无需服务端 history rewrite 的 H5。 - 页面均为动态 import。 - 统一安装 `installRouteGuard(router)`。 - 未匹配路由重定向到 `/apply`。 当前主要路由域: - 公共入口:`/`、`/loading`、`/apply`、`/not_app`。 - 角色中心:`/admin-center`、`/agency-center`、`/bd-center`、`/bd-leader-center`、`/host-center`、`/coin-seller`。 - 钱包资金:`/available-income`、`/transfer`、`/exchange-gold-coins`、`/cash-withdraw`、`/cash-out`、`/KYC`、`/bank-card`。 - 充值:`/recharge`、`/recharge-pay-way`、`/map`、`/recharge-guide`。 - 邀请:`/invitation/invite-new-user`、`/invite-bd`、`/invite-bd-leader`、`/invite-agency`、`/invite-recharge-agency`。 - 排行榜:`/couple`、`/top-list`、`/weekly-star`、`/ranking`、`/games-king`。 - 活动页:`/recharge-reward`、`/login-reward`、`/daily-recharge`、`/activities/*`。 ### 3.3 App 桥接与请求头 宿主适配相关文件: - `src/utils/appBridge.js` - `src/utils/appConnectionManager.js` - `src/utils/appConnector.js` - `src/utils/routeGuard.js` 宿主注入兼容: - `window.app` - `window.webkit` - `window.FlutterPageControl` 推荐用法: - 路由守卫使用 `routeGuard` 保证受保护页面在 App 内建立连接。 - 页面如果自己直接使用接口,必须先通过 `connectToApp` 设置请求头。 - 活动页当前规则是:图片预加载和接口初始化分离,loading 只等待图片,业务接口在 `connectToApp(() => { loadInitialPageData() })` 成功后独立请求。 ## 4. 构建与 Vite 配置 配置文件:`vite.config.js` 关键点: - Vue 插件:`@vitejs/plugin-vue`。 - 自动按需组件:`unplugin-vue-components` + `VantResolver`。 - 路径别名:`@ -> src`。 - 开发服务: - host: `0.0.0.0` - port: `5173` - strictPort: `true` - `/oss` 代理到 `https://asset.global-interaction.com` - 预览服务: - host: `0.0.0.0` - port: `4173` - strictPort: `true` - 本地开发额外提供 `/oss` 本地静态资源中间件,优先读取 `public/oss`。 - 生产类模式会去掉部分日志: - `production` - `production-atu` - 默认移除 `console.log`、`console.debug`、`console.info` 和 `debugger`。 - 可通过 `LIKEI_KEEP_BUILD_LOGS=true` 保留构建日志。 构建产物命名: - JS:`js/[hash].js` - CSS:`css/[hash].[ext]` - 其他资源:`assets/[hash].[ext]` ## 5. 目录结构 ```text . ├─ docs/ 项目文档、活动页建页规则、安全文档 ├─ nginx/ 部署相关配置 ├─ public/ 公共静态资源,本地 OSS 镜像目录在 public/oss ├─ scripts/ 构建后版本生成、安全文档同步等脚本 ├─ src/ │ ├─ api/ 按业务域拆分的接口层 │ ├─ assets/ 本地图片、图标、字体、基础样式 │ ├─ components/ 公共组件 │ ├─ config/ 图片路径、安全白名单等配置 │ ├─ directives/ 自定义指令 │ ├─ locales/ 多语言资源与 i18n 初始化 │ ├─ router/ 路由定义 │ ├─ stores/ Pinia store │ ├─ styles/ 全局样式和字体 │ ├─ utils/ 桥接、HTTP、权限、缓存、图片、支付等基础设施 │ └─ views/ 页面级业务模块 ├─ vite.config.js └─ package.json ``` ## 6. 页面与业务地图 ### 6.1 `src/views` 当前一级页面目录: - `Activities` - `AdminCenter` - `AgencyCenter` - `ApplyHost` - `BDCenter` - `BDLeaderCenter` - `CPReward` - `GoodID` - `HostCenter` - `Invitation` - `LandingPage` - `PlatformPolicy` - `Ranking` - `Recharge` - `RechargeAgency` - `Wallet` ### 6.2 角色中心 - `AdminCenter`:管理员中心、团队管理、商品赠送、管理员政策。 - `AgencyCenter`:代理中心、消息、设置、团队账单、团队成员、邀请成员。 - `BDCenter`:BD 中心、收益详情、政策、商品赠送。 - `BDLeaderCenter`:BD Leader 中心。 - `HostCenter`:主播中心与主播设置。 - `RechargeAgency`:金币代理首页、搜索用户、卖家记录、招募说明。 ### 6.3 钱包与资金 目录:`src/views/Wallet` 包含: - 可用收益 - 转账与收款人搜索 - 金币兑换 - 资金详情 - 历史薪资 - 支付结果 - 提现、提现详情、KYC、银行卡 ### 6.4 充值与邀请 - `src/views/Recharge`:充值主页、支付方式、地图、充值引导。 - `src/views/Invitation`:邀请新用户、BD、BD Leader、代理、金币代理。 ### 6.5 排行榜 目录:`src/views/Ranking` 当前包含: - `Couple` - `GamesKing` - `KingAndQueen` - `Overall` - `WeeklyStar` ### 6.6 活动页 目录:`src/views/Activities` 当前包含: - `DailyRecharge` - `Games` - `GulbenFestival` - `LesserBairam` - `LoginReward` - `LuckyDollars` - `Reward` - `SpringFestival` - `WorldCup` 活动页特点: - 独立性高,常有专属 `page.config.js` 和 `页面创建信息.md`。 - 常见模块包括背景、排行榜、奖励弹窗、规则弹窗、任务、倒计时、赛事列表等。 - 当前活动页建页规则集中维护在 `docs/活动页/建页/`。 ### 6.7 WorldCup 当前状态 世界杯专题目录:`src/views/Activities/WorldCup` 当前包括: - 首页:`index.vue` - 详情页:`EventDetail/index.vue` - 专用接口:`src/api/worldCup.js` - 页面信息:`页面创建信息.md` - 接口说明:`世界杯接口说明.md` 已接入能力: - 排行榜与我的排名。 - Predict Now / Ended 赛事列表。 - 赛事详情。 - 押注模块。 - 押注记录。 - 奖励弹窗与规则弹窗。 - `connectToApp` 请求头初始化。 - loading 只等待阻塞图片,接口独立初始化。 - 大整数 `matchId` 按字符串处理,避免 JS 精度丢失。 ## 7. 权限与安全 ### 7.1 公共路径 公共路径白名单在: - `src/config/security.js` - `src/utils/permissionManager.js` `security.js` 中的 `PUBLIC_PATHS` 用于 HTTP 和路由安全判断;`permissionManager.js` 中的 `ROLE_PERMISSIONS.PUBLIC_PAGES` 用于权限矩阵。 新增公共页时,两处都要检查是否需要同步。 ### 7.2 角色模型 角色定义在 `src/utils/permissionManager.js`: - `admin` - `freightAgent` - `bdLeader` - `bd` - `agent` - `anchor` - `guest` 默认首页: - `admin` -> `/admin-center` - `freightAgent` -> `/coin-seller` - `agent` -> `/agency-center` - `bdLeader` -> `/bd-leader-center` - `bd` -> `/bd-center` - `anchor` -> `/host-center` - `guest` -> `/apply` 角色优先级: `admin > freightAgent > bdLeader > bd > agent > anchor > guest` ### 7.3 路由守卫 文件:`src/utils/routeGuard.js` 流程: 1. 公共页直接放行。 2. 非公共页检查 App 连接。 3. Debug 环境允许浏览器模式调试,非 Debug 环境受保护页面必须在官方 App 内。 4. 拉取用户资料和身份。 5. 用 `permissionManager` 判断页面权限。 6. 无权限时跳转到该用户默认首页。 ### 7.4 运行时安全 入口安装: - `installRuntimeSecurity()` - `installProtectedAssetRuntime()` 相关文件: - `src/utils/runtimeSecurity.js` - `src/utils/protectedAssets.js` - `src/utils/protectedAssetRuntime.js` 受保护资源策略: - 生产类模式下,`Activities/` 和 `Ranking/` 的 OSS 资源 URL 会被包装为 `likei-protected:`。 - 运行时再解析为真实 URL。 - `development` 和 `test` 模式不启用资源保护。 ## 8. API 与网络层 ### 8.1 接口目录 接口目录:`src/api` 当前模块: - `activity.js` - `admin.js` - `bdCenter.js` - `bdLeaderCenter.js` - `couple.js` - `goodId.js` - `host.js` - `invitation.js` - `itemDistribution.js` - `lottery.js` - `pay.js` - `ranking.js` - `recruit.js` - `task.js` - `teamBill.js` - `topList.js` - `upload.js` - `userInfo.js` - `wallet.js` - `weeklyStar.js` - `worldCup.js` 接口按业务域拆分。新增业务如果明显独立,可以新增 API 文件;已有业务的小扩展优先复用现有文件。 ### 8.2 HTTP 封装 文件:`src/utils/http.js` 导出: - `request` - `get` - `post` - `put` - `del` - `COMMON_HEADERS` - `ApiError` 职责: - 拼接 `VITE_API_BASE_URL`。 - 合并公共请求头和页面传入请求头。 - 支持 JSON 与 FormData。 - 统一包装 HTTP 错误、业务错误和网络错误。 - 非 Debug 环境中,非公共页接口必须在官方 App 连接后才允许请求。 当前注意点: - `post(url, data)` 如果 `data` 是空对象 `{}` 会正常发送 body。 - 如果 `data` 为 `null/undefined`,当前 HTTP 封装不会写 body。 - 活动页规则要求:POST 接口无业务参数时也传 `{}`。 ### 8.3 请求头来源 默认头在 `http.js` 中声明,App 连接成功后通过: - `setHeadersFromApp` - `updateCommonHeaders` - `connectToApp` - `setHttpHeaders` 更新到公共请求头。 页面直接请求接口前,需要确认是否已完成 `connectToApp`。 ## 9. 状态管理 ### 9.1 Pinia 当前 store: - `country` - `couple` - `gamesKing` - `identity` - `lang` - `lastImg` - `rechargeTarget` - `springFestival` Pinia 启用了 persisted state。 ### 9.2 utils 单例缓存 项目同时使用一些 utils 单例缓存: - `src/utils/userStore.js` - `src/utils/appConnectionManager.js` - `src/utils/applyStore.js` - `src/utils/coinSellerStore.js` - `src/utils/payeeStore.js` 这些不是普通纯函数,承担跨页面状态缓存职责。新增跨页状态前要先检查是否已有对应 store 或 utils。 ### 9.3 页面初始化抽象 相关文件: - `src/utils/usePageInitialization.js` - `src/utils/pageConfig.js` 适合用于角色中心类页面,统一处理: - App 连接。 - 用户信息。 - 团队信息。 - 余额。 - 工作统计。 - 初始化完成回调。 活动页或轻页面通常不强制使用这套抽象。 ## 10. 国际化与方向 入口:`src/locales/i18n.js` 语言资源: - `zh` - `en` - `ar` - `tr` - `bn` 特点: - `src/main.js` 会读取 URL hash query 中的 `lang` 参数。 - 阿语会设置 `dir=rtl`。 - 页面可根据语言或页面名单强制默认语言。 新增页面时: - 可复用现有 key 时优先复用。 - 新增多语言文案要同步所有目标语言文件。 - 活动页如果暂时使用英文固定文案,要在页面信息 md 中记录。 ## 11. 图片、资源与预加载 ### 11.1 本地与线上 OSS 图片路径配置:`src/config/imagePaths.js` 规则: - 开发环境:`/oss/h5/Azizi/` - 非开发环境:`https://asset.global-interaction.com/h5/Azizi/` 常用方法: - `getPngUrl(imagePath, filename)` - `getWebpUrl(imagePath, filename)` - `getMp4Url(imagePath, filename)` 本地 OSS 镜像目录: - `public/oss/h5/Azizi` 当前本地主要包含: - `Activities` ### 11.2 智能图片 全局指令: - `v-smart-img` 相关文件: - `src/directives/smartImage.js` - `src/utils/image/imageCacheManager.js` - `src/utils/image/imageHandler.js` - `src/utils/image/imagePreloader.js` - `src/config/imageCacheVersion.js` 活动页约定: - 项目自身静态图、OSS 活动图可用 `v-smart-img`。 - 接口返回的远程图片链接不要使用 `v-smart-img`,直接使用原生 ``。 ### 11.3 预加载 预加载工具: - `preloadImages` - `preloadImagesIdle` 当前活动页建页规则: - 新建 `index.vue` 必须有统一 loading。 - `completePreloading()` 只负责阻塞图片预加载。 - loading 不等待业务接口。 - 业务接口提取到 `loadInitialPageData()` 或同名页面初始化方法。 - 接口初始化在 `connectToApp` 成功后执行。 ## 12. 公共组件 常用公共组件: - `BackgroundLayer.vue` - `GeneralHeader.vue` - `itemCenter.vue` - `LoadingContent.vue` - `MaskLayer.vue` - `PageContainer.vue` - `PermissionGuard.vue` - `Toast.vue` - `VapMp4Player.vue` 活动页常用: - `itemCenter`:背景图 + 绝对定位内容层。 - `LoadingContent`:统一加载动画。 - `MaskLayer`:规则、奖励、历史、结果等弹窗遮罩。 - `GeneralHeader`:带标题与返回按钮的通用头部。 `itemCenter` 注意: - 页面初建阶段不预设 `min-height`。 - 页面开发完成后,如需稳定图片容器高度,再按图片比例补。 - 补 `min-height` 时同步补接近的 `max-height`,默认可用 `max-height = min-height + 1vw`。 ## 13. 活动页建页规则索引 活动页文档目录: - `docs/活动页/README.md` - `docs/活动页/建页/快速建立活动页方案.md` - `docs/活动页/建页/建页执行流程.md` - `docs/活动页/建页/建页操作模板.md` - `docs/活动页/建页/建页资料库.md` - `docs/活动页/创建记录/` - `docs/活动页/分析/` 当前核心规则: - 页面改动、模块补充、接口对接、样式同步和文档同步,都要联系建页规则执行。 - 新建或更新活动页时,页面模块、div 结构、方法、接口处理都要补中文注释。 - 能使用内联样式表达的固定布局、尺寸、间距、定位,优先使用内联样式。 - 页面根容器使用 `height: 100vh`,内部主内容滚动并隐藏滚动条。 - 页面任何模块都不展示可见滚动条。 - 弹窗统一使用 `MaskLayer`。 - 使用接口前必须先 `connectToApp`。 - loading 只等阻塞图片预加载,接口初始化独立。 - 多 tab 数据要使用独立数组和独立 request token。 - 多 tab 内容如果固定图片多,优先用 `v-show` 保留 DOM,避免图片反复加载。 - POST 接口无业务参数时也要传 `{}`。 - 大整数 ID,如 WorldCup `matchId`,按字符串传参,禁止 `Number(id)`。 ## 14. 开发接入流程 新增页面建议顺序: 1. 判断业务域,选择合适的 `src/views/` 目录。 2. 注册路由,明确 `path`、`name`、`component`、`meta`。 3. 判断是否公共页;如是公共页,同步检查 `security.js` 和 `permissionManager.js`。 4. 判断是否需要角色权限;如需要,补对应角色权限列表。 5. 判断是否使用 `usePageInitialization`。 6. 判断是否新增或复用 `src/api/*`。 7. 接入 `connectToApp`,确保接口请求头。 8. 接入 i18n、公共组件、Toast、MaskLayer 等现有能力。 9. 如果是活动页,同步 `页面创建信息.md` 或接口说明 md。 10. 跑构建验证。 新增 API 建议: - 明显新业务域:新增 `src/api/.js`。 - 现有业务小扩展:复用已有 API 文件。 - POST 无参数:传 `{}`。 - 大整数 ID:保持字符串。 新增活动页建议: - 先建页面信息 md。 - 再建 `page.config.js`。 - 扫描本地 OSS 图片清单。 - 生成基础 loading、背景、模块容器。 - 逐个模块迭代,不一次性生成所有业务。 ## 15. 脚本与版本 脚本目录:`scripts` 当前脚本: - `generate-version.js`:构建后生成版本文件。 - `build-with-version.js`:带版本日志控制的构建脚本。 - `sync-security-docs.js`:同步安全文档。 版本检查: - 文件:`src/utils/versionChecker.js` - 构建后版本信息写入 `dist/version.json`。 - 运行时可通过 `VITE_ENABLE_VERSION_CHECK` 开启版本检查。 - 默认每 5 分钟轮询一次。 - `major` 更新会清理更完整缓存。 - `minor/patch` 会检查图片缓存版本并清理 session 数据。 ## 16. 已知现状与风险 ### 16.1 README 路径 当前 `README.md` 和 `START.md` 仍指向 `docs/project-details.md`,但当前主维护文档是: - `docs/项目详情.md` 后续可以按需要同步根目录入口文档。 ### 16.2 无测试脚本 当前没有 `test` 脚本。验证主要依赖: - `npm run build` - 必要时手动打开本地页面检查。 ### 16.3 无锁文件 当前未见包管理锁文件,不同环境重新安装可能产生依赖解析差异。 ### 16.4 HTTP 错误解析 `src/utils/http.js` 在非 2xx 响应时直接 `await response.json()`,如果服务端返回非 JSON,可能额外抛解析错误。后续可优化为先 try JSON,失败再 fallback text。 ### 16.5 文档与页面演进快 活动页需求迭代频繁,建议每次页面改动后同步: - 页面自身 `页面创建信息.md` - 接口说明 md - 必要时同步 `docs/活动页/建页/` ## 17. 常用文件索引 项目入口: - `src/main.js` - `src/App.vue` - `src/router/index.js` 基础设施: - `src/utils/http.js` - `src/utils/env.js` - `src/utils/routeGuard.js` - `src/utils/permissionManager.js` - `src/utils/appBridge.js` - `src/utils/appConnector.js` - `src/utils/appConnectionManager.js` - `src/utils/versionChecker.js` 资源: - `src/config/imagePaths.js` - `src/directives/smartImage.js` - `src/utils/image/imagePreloader.js` - `src/utils/image/imageCacheManager.js` 活动页: - `docs/活动页/建页/建页执行流程.md` - `docs/活动页/建页/建页操作模板.md` - `docs/活动页/建页/建页资料库.md` - `src/views/Activities/WorldCup/页面创建信息.md` - `src/views/Activities/WorldCup/世界杯接口说明.md` 权限与安全: - `src/config/security.js` - `src/utils/runtimeSecurity.js` - `src/utils/protectedAssets.js` - `docs/安全/前端加固-中文.md` 构建: - `vite.config.js` - `scripts/generate-version.js` - `scripts/build-with-version.js`