Files
Mycontent/reactH5/README.md
2026-04-28 18:39:08 +08:00

82 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 卡若创业派对 · React H5预览
`miniprogram/` 对照迁移的 **Vite + TypeScript + React Router** 工程P1 为 Tab 四页:首页、目录、找伙伴、我的。
## 界面与小程序对齐(要点)
- **根布局**`src/index.css`):已去掉 Vite 模板的 `#root` 超宽/浅色/居中,改为 **整页黑底、内容左对齐、全宽**;宽屏时 `#root` **最大约 430px 居中**,接近真机宽度,避免布局被拉散。
- **全局与页面样式**`app-global.css` 与各页 `*.css``app.wxss` / 页 `*.wxss` 同步;`rpx``postcss-rpx-750` 换算(与 375 视口下小程序一致)。
- **TabBar**:色值与 `app.json` 一致(未选中 `#8e8e93`、选中 `#00CED1`**文案**与 `custom-tab-bar` 一致,读取 `mpConfig.mpUi.tabBar``home` / `chapters` / `match` / `my`),缺省为 首页/目录/找伙伴/我的;**找伙伴**显隐与 `features.matchEnabled` 一致(数据来自 `AppContext` 中的配置缓存,与 `app.getConfig()` 结果一致)。
## P1 接口与小程序对照
所有请求均为 **`/api/miniprogram/*`**,与小程序 `app.request` 路径一致;基域与现网一致为 **`https://soulapi.quwanzhi.com`**(同 `miniprogram/app.js``API_BASE_URL_PROD`)。实现见 `src/api/request.ts`Bearer、JSON、`success:false` 处理等与小程序对齐)。
| 区域 | 主要接口 |
|------|----------|
| 配置 | `GET /config/core``GET /config/audit-mode``getConfig.ts` 内组合,对齐小程序 `getConfig` |
| 首页 | `ckb/pinned-person``book/parts``vip/members?limit=24``earnings/leaderboard``book/recommended``book/latest-chapters``book/hot` |
| 目录 | `book/books``book/parts?bookId=``book/chapters-by-part?partId=``vip/status` |
| 找伙伴 | `match/config``user/purchase-status``user/profile``POST match/users``ckb/match``POST ckb/join` |
| 我的 | `user/dashboard-stats``earnings``withdraw/pending-confirm``vip/status``my/super-stats``balance``user/profile` |
| 登录 / 留资等 | `POST h5/login-by-phone``soulBridge``ckb/lead`;与小程序同名路径一致 |
## 样式与图标资源(与小程序同步)
仓库内 **无** `iconfont.woff2` 等字体二进制时,构建会提示字体 path 未解析,运行时可从 `public/static/` 加载(需自行放入与 iconfont 项目一致的 woff2/woff/ttf或从你们 iconfont 工程下载到 `reactH5/public/static/`)。
**一键从 `miniprogram/` 同步**`app.wxss`、P1 四页、TabBar、登录弹窗、开发登录的 `wxss` → 对应 `css`,并合并 `miniprogram/assets``public/assets``static``public/static`
```bash
python reactH5/scripts/sync_styles_from_miniprogram.py
```
`app.wxss` 中的 `page` 已映射为 `:root, html, body, #root``Icon` 字形表仍以 `miniprogram/components/icon/icon.js` 为准;更新后可于 `reactH5/` 下执行 `node scripts/extract-icon-map.mjs`
## 本地开发
```bash
cd reactH5
npm install
npm run dev
```
从首页/我的等页进入 **`/login` 手机号登录**(旧链接 `/dev-login` 会重定向到 `/login`)时,登录成功后会 **回到进入前的路由**(内部路径,避免跳回登录页循环)。
- 请求基址:通过 `VITE_API_BASE_URL` 注入;默认开发态为空字符串,**走同域**并由 Vite `server.proxy``/api` 转发到 `https://soulapi.quwanzhi.com`(见 `vite.config.ts`)。
-`.env.development` / `.env.production` 中可覆盖 `VITE_API_BASE_URL`(如直连完整 API 根 URL
## 生产环境CORS / 反代)
浏览器访问独立 H5 域名时,需满足其一:
- **网关/Nginx 反代**:与开发一致,将站点所在域的 `/api` 反代到 `soulapi.quwanzhi.com`(或实际 API 主机),页面仍只请求 `/api/miniprogram/...`;或
- **后端 CORS**:由 API 对 H5 来源放行;否则预检/跨域会拦截。
## 视口与样式验收375 设计宽)
- 与小程序 **750rpx 画布** 对照时,在 **375px 逻辑宽**`1rpx ≈ 0.5px``postcss-rpx-750` 或手算一致即可)。
- 色值/间距:对迁移后的 `*.css``miniprogram` 对应 `*.wxss` 做色值与关键尺寸 **grep 对照**
## 手机号登录(与小程序同账号)
- 接口:`POST /api/miniprogram/h5/login-by-phone`(与 `/api/miniprogram/dev/login-by-phone` 为同一实现),**按库内已绑定手机**匹配用户,老用户直接输入注册手机号即可。
- 开发环境(`APP_ENV=development`)下默认可用;**生产**需在 soul-api 环境变量中设置 `H5_PHONE_LOGIN_ENABLED=1`(或 `true`),否则该接口会返回 403。
## 微信能力H5 与小程序差异)
| 能力 | 说明 |
|------|------|
| 登录 | H5 为 **手机号登录**;小程序侧仍以微信能力为准,账号数据在 `users` 表统一 |
| 本地存储 | `localStorage``token``userInfo``user_phone``user_wechat` 等,对齐小程序 key |
| 支付 / 商户收款 / 跳转其它小程序 | P1 以 Toast 提示使用 **完整小程序**;不调用 `wx.requestPayment` 等 |
| 分享 | P1 未接微信分享,需在小程序内分享时保持真源行为 |
## 构建
```bash
npm run build
```
产物在 `reactH5/dist/`,可部署到任意静态站点,并按上文配置 `/api` 反代或 CORS。