chore: 入库生产基线(2026-10-26 工作树快照)
- 含首页壳/容器页/授权页/分享图/首页配置等此前未入库的在途改动 - 新增未跟踪的 pages/index/mall.vue(第 5 个 tabBar 页,pages.json 已引用) - 排除本地备份文件(*.bak* / *.origin-bak) Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
58
AGENTS.md
58
AGENTS.md
@@ -29,7 +29,7 @@ CRMEB 商城小程序(uniapp,manifest `name=DoubaShop`),同时是**整
|
||||
| `mixins/webviewHost.js` | 宿主公共能力:postMessage 分发(location/share/copyLink/setTitle/requestProfile)、原生授权面板、授权回传、静默登录复用 |
|
||||
| `mixins/shareCard.js` | 分享图:按当前 H5 URL 反查 box_app App 表;朋友圈本地图转换 |
|
||||
| `App.vue` | 冷启动静默登录、`globalData`(`spid` / `appShowAt`)、`onShow`(前台化时间戳) |
|
||||
| `pages/annex/auth/index.vue` | 独立授权页(`navigateTo` 进入,成功写 `__AUTH_RESULT__` 后 `navigateBack`) |
|
||||
| `pages/annex/auth/index.vue` | 独立授权页(`navigateTo` 进入,**先手机号 → 再问头像昵称**,结束写 `__AUTH_RESULT__` 后 `navigateBack`,见 §4.4) |
|
||||
| `pages/guide/index.vue` | `pages.json` 第一个页面(冷启动入口,无广告时 `switchTab` 到首页壳) |
|
||||
|
||||
## 3. 硬约定
|
||||
@@ -86,6 +86,62 @@ CRMEB 商城小程序(uniapp,manifest `name=DoubaShop`),同时是**整
|
||||
误清会毁掉刚用上的记录(实测:普通加载与 `#norestore=1` 落点加载都不清)。
|
||||
- ⚠️ 首页壳只在**重载目标是 mama-box** 时清;重载目标是某个应用(`shareHref` 指向它)时不能清。
|
||||
|
||||
### 4.4 独立授权页:只采集手机号,再按库里资料决定是否问复用(2026-09-22 改版)
|
||||
|
||||
页面交互按 `box_app/design/授权流程演示/index.html` 重做,链路与契约(`backUrl` / `__AUTH_RESULT__` 形状 /
|
||||
宿主 `consumeAuthResult`)**都没变**,只改了页内流程:
|
||||
|
||||
```
|
||||
S0 半弹窗问手机号 ─「否」→ 直接 navigateBack(不写结果)
|
||||
└「是,授权手机号」= <button open-type="getPhoneNumber"> 本身 → 拿 code
|
||||
→ POST /api/mp/public/auth/profile?code=… 落库手机号
|
||||
→ GET /api/mp/public/auth/profile?openid=… 查库(判分支、取值展示)
|
||||
├ 库里有昵称/头像 → 问「是否复用」→ 是/否都收尾返回
|
||||
└ 库里没有 → **不追问、不给表单**,直接收尾返回
|
||||
收尾 = 写 __AUTH_RESULT__(手机号 + 库里真实值) → navigateBack
|
||||
```
|
||||
|
||||
五个必须守住的点(前三条照抄演示页 README 的告诫):
|
||||
|
||||
1. **「是,授权手机号」按钮本身必须是 `open-type="getPhoneNumber"`** —— 手机号没有可编程调起的 API,
|
||||
不能「先点按钮 → 关弹窗 → 代码调起」。
|
||||
2. **手机号落库的成功判据是 `code===200 && result.phone` 非空**(后端解密失败会如实返回 400)。不满足就
|
||||
**留在手机号弹窗**报错,绝不写 `__AUTH_RESULT__`、绝不提示成功 —— 假成功会让 H5 闸门拦截 → 用户反复授权
|
||||
反复被拦(2026-09-18 死循环事故)。
|
||||
3. **判「库里是否已有资料」用 `!!(userName || avatar)`,不能用「记录是否存在」**:`GET/POST auth/profile`
|
||||
对任何 openid 都返回 200 并现场建一条空记录,用存在性判断会 100% 命中「老用户」分支。
|
||||
4. **查库判分支必须走 `GET`,不能拿手机号那次 `POST` 的返回凑**(2026-09-22 修):后端的
|
||||
「先取后授权」兜底回填(本地 → 上游用户中心 → `CrmebService.user_info_by_openid` 同步 CRMEB 商城)
|
||||
**只在 `get_user_auth`(GET)里做,`apply_auth`(POST)只 find_one/建空记录**。用户只在商城
|
||||
有昵称/头像时,POST 返回仍是空 → 会误判成新用户,白丢「是否复用」那一屏。
|
||||
⚠️ 顺带明确:这一屏的昵称/头像**不是**当场从微信取的(`getUserProfile` 已废弃,昵称/头像只能由
|
||||
用户手势触发 `input type=nickname` / `chooseAvatar`),展示的永远是**库里已存过的值**。
|
||||
5. **本页只采集手机号**(2026-09-22 产品定案):库里没有昵称/头像时**不追问、不给表单**,
|
||||
直接收尾返回 —— 所以 `chooseAvatar` / `input type=nickname` / `/api/upload` 这条采集链
|
||||
已从本页移除,昵称/头像改由小程序其它流程 / 上游用户中心 / 商城同步维护。
|
||||
⚠️ 由此:`get_user_auth`(GET) 里读 CRMEB 商城用户表回填 `nickname`/`avatar` 的兜底
|
||||
(`CrmebService.user_info_by_openid`,命中标 `fromCRMEB=true`)**必须保留**(2026-09-22 确认)——
|
||||
它是头像目前**唯一稳定来源**(上游用户中心只有 `nickname`、没有 avatar,本页又不再采集)。
|
||||
去掉它 = 头像恒空、「是否复用」那一屏基本不再出现、H5 侧展示一起变空。
|
||||
口径:H5 侧仍只读 box_app(不直连商城);box_app 对 H5 是上游、对商城是下游。
|
||||
|
||||
其它:手机号落库与随后的昵称头像**解耦**(所以「不同步直接返回」不会丢手机号);「复用」是普通 button
|
||||
(不调微信接口),会再 POST 一次把 `authorized` 置位;工具宫格数据来自 `GET /api/mp/apps`
|
||||
(**仅展示、不可点击**,未授权时右上角显示小锁),拉取失败只是宫格留空、不阻塞授权。
|
||||
|
||||
⚠️ **CSS 陷阱(2026-09-22 真机截图返工)**:页面顶部有条 `button` 全局 reset
|
||||
(`.auth-page button { padding:0; border:none; … }`,特异性 (0,1,1),scoped 编译后约 (0,2,1)),
|
||||
它**高于**单类选择器 `.bsec` / `.bmain` / `.cta`((0,1,0))。所以按钮自己的 `padding` / `border`
|
||||
规则必须写成 `.auth-page .bsec { … }` 这样带前缀提权,否则会被 reset 清成 0 ——
|
||||
表现是「否」没有边框只剩文字、所有按钮高度塌成一行字高。同理 `.bwx` 这种只改底色的变体
|
||||
要写成 `.auth-page .bmain.bwx`,否则会被同级的 `.auth-page .bmain` 底色盖掉。
|
||||
|
||||
### 4.5 授权页宫格的内容风险(未决)
|
||||
|
||||
宫格按演示页照搬了「已有 36.5万+ 位妈妈在用」+ 三个内联 SVG 插画头像(`SOCIAL_COUNT` 常量),
|
||||
以及「全部免费 / 换手机不丢」等承诺 —— **演示页 README 明确标注这些是占位数据**,
|
||||
上线前必须核实真实数字并取得产品/合规确认,否则涉嫌虚假宣传。
|
||||
|
||||
## 5. 本仓库状态提醒
|
||||
|
||||
- ⚠️ `mixins/shareCard.js` **未被 git 跟踪**(untracked),但两个宿主页都 import 它 —— 提交时别漏,否则一旦丢工作区这份文件就没了。
|
||||
|
||||
Reference in New Issue
Block a user