家长端手机号登录 · 效果图(5 帧)
分支 feature/subseat-login-v2 · 依据现网组件
web/app/h5/chat/components/seat-login-sheet.tsx /
seat-change-password-sheet.tsx 扒取真实色值/圆角/间距/文案 ·
2026-09-23
橙虚线框 + 右上「新增」标签 = 本次新增/改动;帧1为现状对照基准,不加标注
帧 1 · 现状对照基准
现状 · 家长端/门店端共用同一登录框(seat-login-sheet.tsx:238-306)。
用户名输入框仅接受「席位账号」;若输入手机号形状(11位·1开头)会被前端
isPhoneLikeUsername() 提交前拦截(seat-login-hints.ts:21),
提示「席位账号不是手机号,请输入提供给您的10位数字账号」。
「忘记密码」入口仅微信已绑定席位时显示,此处从简未画出。
帧 2 · 新增·家长端登录框新增
新增 · 仅家长端:用户名输入框支持「账号」或「手机号」两种登录方式
(相对 seat-login-sheet.tsx:291-305 的输入框)。
门店端保持现状不变,仍只认管理员分配的席位账号,手机号形状继续被拦截。
长官拍板:家长账号新格式为大写字母 T + 6 位序号 + 4 位年月(YYMM),
共 11 位,示例 T0000012609(输入框占位符维持「账号 或 手机号」不变,
新格式仅体现在此说明条;帧 1 现状 10 位纯数字账号说明维持原样)。
帧 3 · 新增·选择门店新增 · 核心
新增 · 场景:家长在两家门店都开通了账号,且两个账号密码相同。
手机号+密码提交后密码校验已通过,此时需先确定「登进哪一家」再放行。
相对现状:提交成功后原本直接 setSeatToken() 进入对话
(seat-login-sheet.tsx:191-213),现需先插入本选择步骤。
列表字段(门店名称/地址)取自 Organization.name /
store_address(app/models/organization.py:20,27),
对家长只显示「门店名称」,不出现「机构/org」等内部用词。
新增视觉痕迹:门店列表上方补一块「手机号+密码已验证」只读回显,
避免实施误做成「先弹候选门店、再输入密码」(会泄露该手机号在哪几家门店有账号)。
回显框样式取自 seat-change-password-sheet.tsx:160-164
(emerald-100 边框 / emerald-50 底 / emerald-700 文字)。
手机号
138****1234
密码
••••••
该手机号在以下门店均绑定了账号,请选择本次登录的门店
‹ 返回重新输入
帧 4 · 新增·手机号未绑定新增
新增 · 场景:手机号登录时,该手机号未在任何门店绑定席位账号 →
后端返回错误态,复用现有错误展示位(seat-login-sheet.tsx:357-366)。
本帧新增的是错误文案内容,展示位置/样式沿用现网既有的 401/403 错误块。
帧 5 · 新增·品牌码设密码新增
新增 · 场景:家长扫品牌码进入,全程微信免密登录,从未设置过密码。
一旦点击任意功能入口,弹出阻塞式弹窗强制设置账号密码作为兜底,
以便日后微信授权异常时仍可用账号密码登录。
弹窗结构/样式完整复用现网首登强制改密弹窗
seat-change-password-sheet.tsx:131-298;
「无关闭按钮」对齐该组件既有逻辑 —— onClose 仅当传入才渲染右上角 X
(:28-31 设计注释、:138-147 渲染条件),本场景不传 onClose。
密码位数校验沿用 app/api/seat_auth.py:728 的
re.fullmatch(r"\d{6}") 规则(与改密接口同一套 · 未自造)。
新增点:①只读展示后端预先分配的账号 ②手机号/密码两个输入框。
已为您分配账号(只读)
请记好
T0000012609
请设置 6 位数字作为登录密码
设置完成后请牢记账号与密码。日后微信登录失败时,可直接用它们进入。
确认并进入