front/docs/微信注册简化与联系方式补全方案.md
zzh 8cf883c90c feat: simplify WeChat register UX and gate orders on contact info
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 13:07:29 +08:00

6.6 KiB
Raw Blame History

微信注册简化与联系方式补全方案

状态:已定稿,按本文实施
范围:微信注册放宽手机/邮箱;「我要下单 / 揽收订单」入口强制补全;RBAC 账号改为客户编号
相关代码:前端 oms0414,后端 oms0414-back


1. 目标

  1. 提高转化:微信注册不再强制填手机、邮箱,缩短注册路径。
  2. 保证可联系:进入「我要下单」「揽收订单」时,若缺手机或邮箱,必须补全后才能继续。
  3. 交互明确:说清「为什么要填」,补全后自动回到原流程,不丢草稿。
  4. 防绕过:前端入口拦截 + 后端下单/揽收接口兜底。

2. 已拍板决策

项 决策
补全字段 手机 + 邮箱都要
拦截时机 一进入「我要下单 / 揽收」流程就弹;提交时后端再拦
登录账号 微信注册创建的 RBAC Account = CustomerCode
注册范围 仅微信注册放宽;PC 注册 / 后台建客 / 子客户仍必填手机+邮箱
空值存储 未填一律存 NULL,禁止 ''(避免唯一索引冲突)

3. 现状与痛点(摘要)

  • 微信注册:CustomerName / Phone / Email / Password 全必填;RBAC Account = Phone;注册后用手机号自动登录。
  • t_customer.Phone:NOT NULL + uk_cus_phone;Email 可空 + 唯一。
  • 「我要下单 / 揽收」校验的是收件人/寄件地址电话,不看客户资料手机邮箱。
  • 因此:放开注册后,不会自动出现「缺联系方式」拦截,必须新增门禁。

4. 方案设计

4.1 微信注册(简化)

表单保留

  • 客户名称(必填)
  • 密码(必填,≥6,建议保持字母+数字规则)
  • 微信 OAuth 资料(openid 等)
  • 邀请码(可选,来自 ?ref=)

表单去掉必填(可不展示)

  • 手机、邮箱:注册请求可不传或传空 → 后端存 NULL

后端

  • WeChatCustomerRegisterInput:Phone、Email 改为可选;有值时仍做格式与唯一性校验。
  • RBAC:Account = customerCode,Email 有则写入,无则按 RBAC 允许的空策略处理。
  • Customer.Phone / Email:可空。
  • 返回或保证前端能拿到 customerCode,用于自动登录。

注册成功自动登录

  • 使用 customerCode + password 调客户登录(不再用手机号)。
  • 成功页文案提示:可用「客户编号」或微信扫码登录;建议尽快在下单前完善手机与邮箱。

4.2 资料完整度

新增只读接口(命名可微调):

GET /customer/profile-completeness
→ {
    phoneFilled: boolean,
    emailFilled: boolean,
    needContact: boolean,   // !phoneFilled || !emailFilled
    customerCode: string
  }

判定:Phone / Email trim 后非空即算已填。

4.3 补全接口

优先复用 /customer/update;若更新契约过重,可增加:

POST /customer/complete-contact
Body: { phone: string, email: string }

规则:

  • 手机、邮箱均必填(补全场景)
  • 格式校验 + 排除自身的唯一性校验
  • 同步更新 RBAC 用户 Email(若框架支持);不改 RBAC Account(仍为客户编号)
  • 成功后 needContact = false

4.4 入口拦截(前端)

触发点(一进流程)

端 触发
H5 打开「我要下单」总流程(含物流下单 / 揽收创建);发货指引里进入「创建揽收」
PC 进入「我要下单」「揽收订单」页或点创建同类入口

不拦截

  • 仅浏览订单列表、揽收列表(只读)
  • 查价、客服、充值(本期不做强制;后续可扩展)

交互

  1. 半屏/弹窗标题:补充联系方式
  2. 说明:下单与揽收前请留下手机号和邮箱。清关补料、派送异常或费用确认时,我们会优先通过这些方式与您确认,避免延误。
  3. 表单:缺啥填啥(两项都缺则两项都填);实时格式校验。
  4. 主按钮:保存并继续;次按钮:取消(关闭流程,不提交订单)。
  5. 保存成功:关弹层,自动继续原动作(保留下单/揽收草稿)。
  6. 唯一性冲突:明确提示「手机号/邮箱已被占用」。

4.5 后端兜底

在以下接口进入业务逻辑前校验主客户联系方式:

  • 小包/物流下单创建(如 parcel/create)
  • 揽收单创建(如 pickup create)

缺手机或邮箱时抛业务异常,建议稳定文案或错误码:

  • 文案:请先完善手机号和邮箱后再下单
  • 码(可选):CUSTOMER_CONTACT_REQUIRED

前端捕获后同样打开补全弹层。

4.6 数据库

-- Phone 改为可空(存量数据不变)
ALTER TABLE t_customer
  MODIFY COLUMN `Phone` VARCHAR(16) NULL COMMENT '手机号,用于联系/登录辅助';

唯一索引 uk_cus_phone / uk_cus_email 保留;空值必须为 NULL。

实体 Customer.Phone 改为 string?。


5. 非目标(本期不做)

  • 不改 PC 注册 / 后台建客的必填规则
  • 不改收件人手机、寄件地址电话的面单字段规则(与客户资料联系方式分离)
  • 不强制充值、提现、售后入口(可二期)
  • 不实现短信通道(有手机即可为后续预留)

6. 风险与注意

  1. 老数据:已有客户均有手机,不受影响。
  2. 密码登录:无手机邮箱时只能用客户编号或微信扫码;注册成功需展示客户编号。
  3. RBAC Email:无邮箱时 CreateUser 需确认 Fake RBAC 是否允许空 Email;不允许则写占位策略需单独评估(优先真实可空)。
  4. H5 编辑资料:补全与编辑共用校验,避免「清空手机」绕过。
  5. 并发抢号:补全时唯一冲突要友好提示。

7. 验收清单

  • 微信注册可不填手机/邮箱,注册成功并自动登录进入 H5
  • 新用户 RBAC Account = 客户编号;可用客户编号+密码登录
  • 缺联系方式时,点「我要下单」立刻弹出补全,取消则不进入下单
  • 缺联系方式时,进入「创建揽收」同样拦截
  • 补全成功后自动继续原流程
  • 绕过前端直接调创建接口,后端返回联系方式必填错误
  • 手机/邮箱重复时有明确错误提示
  • 已完善资料的老用户路径无额外弹窗

8. 实施顺序

  1. 本文档定稿
  2. 后端:库表/实体 → 微信注册 → 完整度/补全 API → 下单/揽收门禁
  3. 前端:微信注册页 → 补全弹层组件 → H5/PC 入口接入
  4. 联调与验收清单勾选