品牌方合作方案 · 效果图 v1

对应方案文档 brand-partner-spec-v1-20260915.md(阶段 1 需求稿,已长官逐条拍板)· Phase 48A(扫码进门) / 48B(互扫绑定) / 48C(4L 展示区) · 本图为阶段 2 出图,供长官挑选第二组 4L 排版方案。

橙虚线 = 新增界面/新增逻辑(右上角「新增」标签) 灰 = 未绑定 绿 = 已绑定且数据点亮 黄 = 已绑定但门店未接数据

一 · 扫码进门(Phase 48A)

现网缺口(已 grep 核实):家长自助开户端点目前不存在——开子席位仅有 POST /api/h5/store-subseat/provision(门店鉴权 · app/api/store_subseat.py:66)与 POST /api/admin/parent-seats/provision(平台后台鉴权 · app/api/admin_parent_seats.py)两条,均不面向陌生家长。微信认人链路已在生产跑: users.wechat_unionid(app/models/user.py:38-42)+ seat_bound_unionid(:94-104)+ POST /api/h5/oauth/exchange(app/api/h5_user_auth.py:49-90)。 本节三帧均为「扫码自动开席位」这条新口子的界面表现,尚无对应端点,实施阶段需先补该接口。
品牌方
LOGO
某某护眼品牌
赵阳智脑 · 品牌授权入口
该码来自「某某护眼品牌」
授权微信后免注册直接进入
点击后跳转微信授权页确认

帧 1 · 授权落地页(改编自现网 seat-wx-auth-landing.tsx 组件结构,按钮/图标样式原样沿用;品牌 Logo + 名称区块为新增)
显示条件:仅扫描「品牌机构码」时出现品牌名 / Logo;扫「门店机构码」沿用现有门店文案(此帧不适用)

某某护眼品牌
全国连锁 · 5000 个体验名额
报告秒读 · 本年度剩 6 次
也许想问
Q1 近视多少度算高度近视?
Q2 弥散红光每天照多久?

帧 2 · 授权成功后直接落地家长端首页(无需新增 UI:仍是现网 StoreBrandHero 组件 · GET /api/h5/home-branding 接口,区别只是这次绑定的机构记录属于品牌方而非门店)
显示条件:品牌方在设置页配置了 homepage_logo_url / hero_image_url 才显示对应图;未配置则退化成眼睛图标兜底(现网既有行为)

某某护眼品牌
全国连锁 · 5000 个体验名额
已为你找回「王小明」的档案
报告秒读 · 本年度剩 6 次

帧 3 · 老家长扫码:系统识别为存量用户,一次性提示找回原档案(提示条为新增)
显示条件:扫码得到的微信 unionid 命中已有 seat_bound_unionid(app/models/user.py:94-104)的家长子席位 → 合并到原账号并提示;未命中则视为全新家长,直接走帧 2,无提示条(规则 6 · 9-15 拍板)

二 · 4L 设备展示区 · 三种排版方案(长官待选)

位置:与现有「同款案例 / 报告秒读」靛蓝浮窗卡(page.tsx:2531-2660)同级,紧随其下。三态定义: 灰=未绑定该类目下任何设备 / 门店未接入;绿=已点亮(门店已录入且有近期上报数据);黄=已绑定但数据未接(设备已知但门店未上报,需联系门店)。 配色沿用现网既有 4L 配色系统(web/public/4l-hero-mock-b.html:弥散红光/laser 红 · 室内补光/light 琥珀 · 远像屏读写台/long 绿 · 离焦镜/lens 紫)。 数据缺口:app/models/device.py 已有 DeviceData / DeviceTypeConfig 表结构,但四类具体 device_type(红光仪/补光灯/远像屏/离焦镜)尚未在库中配置,本图按现有命名口径示意,实施阶段需先补设备类型配置。
某某护眼品牌
报告秒读 · 本年度剩 6 次
↓ 4L 设备展示区 ↓
(占位,见下方三种候选方案)
也许想问

位置示意:4L 展示区插入在「报告秒读」浮窗卡与「也许想问」之间(全部家长首页均展示本区,绑定与否只影响区内四格的灰/绿/黄状态,不影响本区是否出现)

方案一 · 横排 4 方形图标框
状态 A · 未绑定
弥散红光
未绑定
室内补光
未绑定
远像屏读写台
未绑定
离焦镜
未绑定
状态 B · 已绑定(点亮)
弥散红光
今日已照护
室内补光
今日 3h
远像屏读写台
已配置
离焦镜
佩戴中
状态 C · 已绑定但数据未接
弥散红光
室内补光
未绑定
远像屏读写台
已配置
离焦镜
未绑定

优点:4 项一眼看全,横向紧凑;缺点:360px 内每格仅约 76px,图标+两行字略挤

方案二 · 2×2 网格卡片
状态 A · 未绑定
弥散红光未绑定
室内补光未绑定
远像屏读写台未绑定
离焦镜未绑定
状态 B · 已绑定(点亮)
弥散红光今日已照护
室内补光今日 3h
远像屏读写台已配置
离焦镜佩戴中
状态 C · 已绑定但数据未接
弥散红光具体详情联系门店
室内补光未绑定
远像屏读写台已配置
离焦镜未绑定

优点:每格能放状态短语,信息量最大;缺点:占竖向空间最高(约 4 行卡)

方案三 · 横向滑动胶囊条(同底部 chip 条风格)
状态 A · 未绑定
弥散红光 · 未绑定
室内补光 · 未绑定
读写台 · 未绑定
离焦镜 · 未绑定
状态 B · 已绑定(点亮)
弥散红光 · 今日已照护
室内补光 · 今日3h
读写台 · 已配置
离焦镜 · 佩戴中
状态 C · 已绑定但数据未接
弥散红光 · 联系门店
室内补光 · 未绑定
读写台 · 已配置
离焦镜 · 未绑定

优点:占地最矮(一行),与现有底部 chip 条同款风格,改动成本最低;缺点:4 项总宽度远超 360px 容器(实测仅前 2 项完整可见),第 3、4 项默认在视口外,需横滑才能看到

三 · 家长 ↔ 门店互扫绑定(Phase 48B)

依赖字段 patients.service_org_id 目前物理不存在(已 grep service_org_id 全仓返 0 命中,对照组 owner_seat_id 同目录返 >0 命中,查法有效)—— 转店确认弹窗依赖该字段落地后才可判定「已绑定别家」;本节三帧均为 48B 新界面。绑定方式按规则 9(9-15 拍板):家长扫门店码、门店扫家长码,两边都行,本组以「门店扫家长码」路径示意。
我的二维码
「王小明」的档案码
出示给门店扫描,即可绑定/转入该店

帧 1 · 家长端「我的二维码」(新增页面)
显示条件:家长端「我的」菜单常驻入口,任意家长可查看;码值 = 家长子席位标识,扫描方为门店端

扫码识别
王小明
识别自家长二维码

帧 2 · 门店端扫码确认页(新增页面)
显示条件:门店端「扫一扫」扫到有效家长码后出现;若该家长当前无绑定门店,直接展示本帧(跳过帧 3 弹窗)

帧 3 · 转店确认弹窗(新增交互)
显示条件:仅当该家长 patients.service_org_id(新增字段,目前不存在)已指向另一机构时弹出;未绑定或已绑定本店则不弹,直接进帧 2 确认页

四 · 显示条件与口径核对表(对应本规范 §4.1 逐块核对)

界面块什么条件下显示字段 / 接口现状
帧1 品牌 Logo/名称区扫描对象是「品牌机构码」时显示;扫「门店机构码」不显示(沿用现有门店文案)新增:机构码需区分「品牌/门店」两种归属,目前机构码表本身未建(spec §5.1)
帧2 品牌头图首页品牌方在设置页配置 homepage_logo_url/hero_image_url 才出图,否则退化眼睛图标兜底接口已有:GET /api/h5/home-branding(现网行为,无需改)
帧3「已找回」提示条微信 unionid 命中已存在 seat_bound_unionid 的家长子席位时一次性出现,未命中不出现字段已有:app/models/user.py:94-104;判定逻辑需新增(48A 核心工作量)
4L 展示区(三方案)所有家长首页均展示本区(不因是否绑定门店而整体隐藏);区内四格各自按「未绑定/已绑定/数据未接」三态渲染新增:四类具体 device_type 尚未在 device_type_config 配置(app/models/device.py)
帧1「我的二维码」家长端「我的」菜单常驻,任意登录家长可见新增页面 + 新增取码接口(复用家长子席位标识,非本次新建表)
帧2 扫码确认页门店端扫码扫到有效家长码后出现;该家长当前无绑定门店时直接显示本帧展示字段仅 patients.name(脱敏姓名,已有,app/models/flywheel.py:28),未画后端给不出的字段
帧3 转店确认弹窗仅当该家长 service_org_id 已指向另一机构时弹出;未绑定/已绑定本店时不弹新增字段 patients.service_org_id(spec §5.1),目前物理不存在(grep 0 命中)