本图已停用:流程、状态和样式全部以真页面截图版 scan-binding-realpage-v1-20260924.html 为准(其中已去掉「选账号」一步)。

扫码绑定 · 方案效果图 v1

2026-09-24 · Phase 48B 续 · 对应方案文档 ~/reports/scan-binding-plan-v1-20260924.md「长官 9-24 已确认」小节。本图零代码改动,所有令牌均从现网代码 / 首页效果图 zhaoyang-home-6styles-20260921-flat1.html 扒取,未自造颜色。

橙虚线框 = 本期新增元素
橙底条 = 本期改动说明(带代码行号)
绿色 = 主操作 / 推荐操作
01

机构端 · 视光档案页顶部

本期改动「绑定家长」按钮名字不改(不叫「扫码绑定」,与详情页保持同名);改动是点开后弹出的选项层内容(见小节 2)。本节新增的是顶栏右上角「机构码」入口。列表行按真实结构重画:40px 性别默认头像(family/components/default-avatar.tsx) + 姓名/状态 + 「性别 · 年龄 · 生日」/「最近检查」两栏,右上角状态字段订正为真实文案「已绑定/未绑定」。
代码出处:按钮行 web/app/h5/store-refractive/page.tsx:237-270(9-18 长官令"顶部两按钮并排一行"注释处);顶栏行 web/app/h5/store-refractive/page.tsx:196-215(当前右上角是与返回图标功能重复的「返回」文字链接);列表行 page.tsx:360-407(PatientAvatar 见 :556-573)。
现在
9:41
张小明已绑定
男 · 8岁 · 2018-05-01最近检查 2026-08-17
改后
9:41
新增
张小明已绑定
男 · 8岁 · 2018-05-01最近检查 2026-08-17

显示条件:门店手机端已登录机构席位时常显;点击后打开小节 6「机构二维码」页。

02

机构端 · 点「绑定家长」弹出的选项层

本期改动现状:列表页顶部「绑定家长」→ 先弹「选择要绑定的档案」(page.tsx:433-489) → 再弹搜索家长名单(_components/bind-parent-sheet.tsx);详情页「绑定家长」→ 直接弹搜索家长名单(见小节 4)。本期在搜索家长名单弹层之前新增一级「选方式」,选项①放推荐位(第一个),选项②沿用上述现状流程。本轮改为居中弹框:容器/遮罩/圆角改为原样复用 web/app/h5/settings/components/SeatStoreCard.tsx:922-933(库内唯一显式注释"方案图是居中弹窗,不是底部抽屉"的居中弹层实现);选项行 token 仍照「选择要绑定的档案」picker 行 page.tsx:468-484;无底部按钮(同该 picker 一致,X close 已够用)。选项②后续的选择档案、选择家长两个现有弹层本期改为居中弹框;新建档案表单保持底部弹出(长官 9-24 定)。轮7:不在微信里打开时,「扫描家长二维码」选项自动隐藏,只剩②(本图不再单独出图)。
正常(微信内打开)
9:41
张小明已绑定
男 · 8岁 · 2018-05-01最近检查 2026-08-17
绑定家长

请选择绑定方式

新增

显示条件:点击画面 1 的「绑定家长」按钮即弹出;两个选项都在时始终可用。居中弹框遮罩下方为当前页面(此处复用小节 1 改后帧内容示意)。

03

机构端 · 扫到家长码以后,选孩子

本期改动全新弹层(待实现)。三档孩子状态复用 brand_code_claim.py 已有三分支逻辑(未绑直接绑 / 同店幂等 / 别家转移);ChildBrief(app/api/brand_code_claim.py:72-78)当前字段只有 patient_id/name/gender/service_org_id/service_org_name/service_org_bound_at,没有出生日期——年龄照画,标 * 提示需扩展接口。选中行样式照 bind-parent-sheet.tsx:159/172(白行 + 选中态右侧「已选中」12px/700/#2fa37c,去掉圆点单选与琥珀 chip);门店状态改成 subline 纯文字,「已在本机构」同列表「已绑定」用 #2fa37c/700,其余态 #6E6E73。本轮改为居中弹框:容器改用 web/app/h5/settings/components/SeatStoreCard.tsx:922-933 的居中遮罩/面板(header 固定 + body 可滚 + footer 固定);底部按钮行仍照 bind-parent-sheet.tsx:180-208「取消」/「确认绑定」双按钮 token;标题统一改「选择要绑定的孩子」,原标题里的家长姓名移到副标题;家长显示名沿用 bind-parent-sheet.tsx:163-164 同款兜底:备注名 > 微信昵称 > 账号。本轮修正:已在本机构的孩子禁止重复绑定(绑定后无实际效果),该行改为整体置灰不可选、不再显示「已选中」;默认选中改落在跨机构/未绑定的孩子行,选中跨机构孩子时列表下方新增一行灰字转店提示。
正常状态
9:41
张小明已绑定
男 · 8岁 · 2018-05-01最近检查 2026-08-17
选择要绑定的孩子

家长:王女士 · 0012xxxx09

王小雨 将从 明亮视光中心 转入本机构

新增

* 需扩展:ChildBrief 需补出生日期字段,前端才能算真实年龄

显示条件:选项①扫码成功、家长码解码出家庭信息后弹出;选中"目前在 XX 机构"的孩子后点「确认绑定」= 直接转店,不二次确认(方案文档"规矩"第 1 条)。

状态变体(6 种)
加载中
正在读取家长信息…
码已过期
二维码已过期,请家长刷新后重新出示
家长名下暂无档案
该家长名下暂无孩子档案
扫到的不是家长码
未识别为家长二维码,请重新扫描
成功提示
王小雨 已绑定到本机构
档案列表已更新
防重复提示
该家长名下已有同名、同生日的孩子档案,请直接选择,无需重复新建
为该家长新建孩子档案
9:41
为该家长新建孩子档案

家长:王女士

姓名*
请输入姓名
性别*
女男
出生月日*
点击选择
年龄
—
家族近视史
无父亲近视母亲近视父母均近视其他
戴镜史
无框架镜OK镜其他
家长身份
妈妈爸爸爷爷奶奶姥姥姥爷本人其他
家长手机号
请输入手机号(选填)
身份证号
请输入身份证号(选填)
既往防控手段
光疗类远疗类眼镜类训练类营养类其他
新增

来源:create-patient-sheet.tsx 全字段原样复刻(姓名*/性别*/出生月日*+年龄/家族近视史/戴镜史/家长身份/家长手机号选填/身份证号选填/既往防控手段,选项值取自 :31-35 GENDERS/GUARDIANS/FAMILY_HISTORY/GLASSES/PREVENTION_ITEMS);容器改按 create-patient-sheet.tsx:262-286 真实底部弹层原样复刻(遮罩 rgba(0,0,0,.35) / fixed inset-0 flex-col justify-end / 面板 maxHeight 92vh+圆角 16px 16px 0 0+背景 #F2F2F7 / 把手 36×4 #e2e8f0 / 标题 22px 700 黑)。新建档案表单保持现有底部弹出(长官 9-24 定),不跟随小节 3 其余弹层改居中。保存后该档案自动绑定该家长与本机构。需扩展:现有绑定仅支持本机构家长账号(bind_patient_seat),跨机构家长需后端放开。

关联本机构已有档案
9:41
关联本机构已有档案

家长:王女士

新增

来源:page.tsx:433-489「选择要绑定的档案」picker(过滤 !bound_seat,字段仅 name/gender/age,无生日、无最近检查);行选中态照 bind-parent-sheet.tsx:159/172。需扩展:现有绑定仅支持本机构家长账号(bind_patient_seat),跨机构家长需后端放开。

04

机构端 · 档案详情页的「绑定家长」

本期改动按钮本身不变(web/app/h5/store-refractive/[patientId]/page.tsx:514-529,未绑定时文案「绑定家长」、已绑定时文案「解绑」),只改点击后弹出的内容 —— 从直接打开小节 2「②从本机构家长中选择」单个弹层,改成先弹小节 2 的居中两选项弹框,选①后再进小节 3 选孩子弹框,与小节 1 顶部按钮打开的是同一个居中弹框。绑定行本身贴在灰底页面上、不在白卡里(同 [patientId]/page.tsx:510-530,白卡在它上方,此处不重复画)。
现在
9:41
未绑定家长

点击直接打开小节 2 中的「②从本机构家长中选择」单一弹层(现网行为)。

改后
9:41
未绑定家长

按钮外观不变;点击后改为打开小节 2 的居中两选项弹框,与画面 1 顶部按钮共用同一套弹层组件,此处不重复画。

05

家长端 · 我的二维码(新页面)

本期改动全新页面(待实现),顶栏结构复用 web/app/h5/family/page.tsx:120-133(白底 sticky、返回圆钮 #f3faf6 底 #1f3a30 图标、标题 17px 700 #0f172a,font-bold=700 非 800);页面主体新建,不画姓氏头像圆(选孩子/选账号等弹层同理,见小节 2/3)。加载态/失败态去掉转圈动画和感叹号图标,改纯文字:加载 #94a3b8、失败 rose-600 #e11d48(均取自 family/page.tsx 现网 loading/error 文案色),重试按钮照 [recordId]/page.tsx:1285-1296 的 GREEN_OUTLINE_BTN 药丸。二维码内容为家长子席位签发的短期令牌(技术方案:令牌不直接拼进图片网址,防出现在 nginx 访问日志)。轮6 修正:「正常」态文字原为两行说明+独立红色警示行+灰色有效期行三段拼贴,改为三级层次:说明句(.qr-desc 本节已用过的深色 #4a6a5b)→有效期与截图转发提醒合并成一行灰字(.qr-meta #94a3b8,与本节「加载中」文案同色,不再单独用红色)→刷新按钮独立成一枚胶囊,改用与「失败」态同一 GREEN_OUTLINE_BTN(.retry-btn) token,不再另起 .qr-refresh。
正常
9:41
我的二维码
王女士
0012xxxx09
到机构时出示,工作人员扫码即可绑定
有效期 24 小时 · 请勿截图转发
变体 · 加载中
9:41
我的二维码
正在生成二维码…
变体 · 失败
9:41
我的二维码
二维码加载失败
06

机构端 · 机构二维码(新页面)

本期改动全新页面(待实现),由小节 1 顶栏「机构码」入口打开。二维码内容为服务端签发的机构令牌拼成的网址,不新建数据表(技术要点 5)。不画独立的下载按钮——微信 H5 无法用代码触发相册写入,系统全站(share/[token]/store-card.tsx:57 sc-qr-cap「长按了解更多」、settings/components/SeatStoreCard.tsx 长按保存文案)统一用「长按」文案,本页照抄 sc-qr-cap 令牌(share.css:217-221:9.5px / letter-spacing .04em / #a8bcb0)。本页是机构端页面,不复用家长端 fam-header:顶栏改用本文档已有的机构端页头 token .sr-back(即 store-refractive/page.tsx:196-205 的纯 ChevronLeft(16px/#000/strokeWidth2.3) + 标题,字号字重同「视光档案」标题,无圆形返回钮、无右侧「返回」链接);正文卡片复用 .sr-row(page.tsx:360-368 列表卡片 token:#fff / radius16 / padding14),页面底色 #F2F2F7 同该页。
正常
9:41
阳光视光中心

长按二维码可保存图片

打印后张贴在前台,家长使用微信扫码即可将孩子档案绑定到本机构
仅用于绑定档案,不开通账号

显示条件:机构席位登录后常显;任何机构都可生成机构码(方案文档"规矩"第 6 条,9-15 规则 16 一致)。

07

家长端 · 扫机构码后的落地页

本期改动全新路由(待实现)。5a 原样复刻 web/app/h5/chat/components/seat-wx-auth-landing.tsx 整个视觉结构(bg-slate-900 外层 + emerald-50/40→白 渐变卡片 + emerald-50 圆底盾牌图标 + emerald-600 按钮「确认」+ 底部提示,仅标题/副标题文案改店铺专属,标 *);点击态发起 snsapi_userinfo 授权,微信 2022-07-12 起禁止无交互自动跳转,与 brand-scan/page.tsx 现有落地页同一限制。5b 多账号选择复用 app/services/seat_service.py 的 lookup_seat_username_by_wx(return_all=True) 数据(需补机构名字段)(该 UI 目前全仓 0 现成页面,本节新建);5c 选孩子的年龄取自家长自己的 birth_date 字段(web/app/h5/family/page.tsx:34,56-65 已有 ageText(),格式「9岁3个月」),与小节 3 不同,此处不需要补接口。5b/5c/5d/5e/5f 背景改用 brand-scan/page.tsx 现网各态根背景 bg-white(:119,126,136);不在微信里打开时整条落地页不可用,原样复刻该页 isInWeChat()===false 分支的纯文字态(:118-122:bg-white + text-sm text-slate-500「请在微信内打开本链接」,本图不再单独出图)。选孩子/选账号行样式统一照小节 3 说明(bind-parent-sheet 行 token)。
5a · 确认身份
9:41
阳光视光中心*
邀请您绑定孩子档案
需获取您的微信身份,用于核验家长账号
点击后将跳转微信授权页确认

* 需扩展:授权组件加标题/副标题参数(现为固定文案)

5b · 选账号
9:41
请选择要使用的账号

* 需扩展:候选账号需补所属机构名

显示条件:本机微信关联多个席位账号时才出现;已登录过智脑的家长跳过 5a/5b,直接到 5c。

5c · 选孩子
9:41
请选择要绑定到
阳光视光中心 的孩子

绑定后,新的检查记录由 阳光视光中心 管理;原机构仅可查看其此前录入的记录

5d · 成功
9:41
王小宇 已绑定到
阳光视光中心
5e · 没账号
9:41
您还没有智脑账号
请联系 阳光视光中心 工作人员为您开通
5f · 有账号没孩子
9:41
您的账号下暂无孩子档案
请联系 阳光视光中心 工作人员为您创建
08

家长端 · 个人档案页入口

本期改动新增两个入口「扫一扫」+「我的二维码」。轮6 修正:两个胶囊挤在顶栏(family/page.tsx:120-133 右侧)偏窄——顶栏改回与现网完全一致(仅返回圆钮+标题,右侧留空,不放任何胶囊);入口挪到页面正文,紧贴真实渐变「新建档案」按钮(family/page.tsx:139-150:h40/radius999/linear-gradient(100deg,#1f3a32,#2fa37c)/13px 700 白字/Plus 图标)下方,新增一行两个等宽次级按钮,token 沿用小节 3 引入的 .pick-btn(高度改 40 配合「新建档案」按钮同高,字重改 700):「扫一扫」(ic-scan 取景框线条,非相机图标,与小节 2 选项①同一图标保持一致)+「我的二维码」。「扫一扫」需微信 JSSDK scanQRCode(web/app/h5/family 目录现无引入,见小节 9 说明),仅微信内显示,判断函数同小节 2 已引用的 isInWeChat()。该按钮行在家长尚无真实档案时也显示——机构可让家长当场出示「我的二维码」建档,此时按钮行位于空态卡片上方;family/page.tsx:139「新建档案」按钮本身仍只在 realChildren.length>0 时显示,两者互不影响。轮7:不在微信里打开时,「扫一扫」入口自动隐藏,只保留「我的二维码」单独占满一行(本图不再单独出图)。
现在
9:41
个人档案
孩子档案卡片(现有)
改后
9:41
个人档案
新增
孩子档案卡片(现有)

显示条件:家长子席位登录后常显;点击「我的二维码」打开小节 5 页面,点击「扫一扫」调起小节 9 微信内扫码。

09

家长端 · 扫一扫(在智脑内)

本期改动全新能力(待实现)。需在 web/app/h5/family 页面引入微信 JSSDK scanQRCode:该目录当前 jweixin/jssdk/scanQRCode 0 处命中(grep 实测);对照组 web/app/h5/share 已有 1 处命中([token]/page.tsx:193 拉取 jssdk-config + :232 注入 jweixin-1.6.0.js),证明查法有效、非漏查。入口仅微信内显示,判断函数复用小节 2/8 已引用的 isInWeChat()(chat/lib/wx-oauth.ts)。
9a · 微信扫一扫界面
9:41
微信扫码界面
(系统提供)

显示条件:点小节 8「扫一扫」按钮调起,系统原生相机取景框,不由本方案绘制。

9b · 已登录·扫到机构码
9:41
请选择要绑定到
阳光视光中心 的孩子

绑定后,新的检查记录由 阳光视光中心 管理;原机构仅可查看其此前录入的记录

显示条件:已登录家长扫本机构码,直接跳过 5a 身份确认/5b 选账号(无需再走一次微信授权确认);内容同小节 7「5c · 选孩子」,此处原样引用不重复设计。

9c · 扫到非机构码
9:41
个人档案
未识别为机构二维码

请扫描机构前台张贴的二维码

新增

显示条件:扫码结果不是本系统机构码(如普通网址/其他小程序码)时弹出。

数据/样式来源:store-refractive/page.tsx · store-refractive/[patientId]/page.tsx · store-refractive/[patientId]/record/[recordId]/page.tsx · store-refractive/_components/bind-parent-sheet.tsx · family/page.tsx · family/components/default-avatar.tsx · chat/components/seat-wx-auth-landing.tsx · brand-scan/page.tsx · share/[token]/store-card.tsx · settings/components/SeatStoreCard.tsx · app/api/brand_code_claim.py · app/services/seat_service.py · store-refractive/_components/create-patient-sheet.tsx · chat/lib/wx-oauth.ts · share/[token]/page.tsx · app/services/refractive_record_service.py · 首页效果图 zhaoyang-home-6styles-20260921-flat1.html。 零外网 CDN,二维码为内联 SVG 示意方块,不代表真实编码内容。