收货地址模块
一、模块定位
收货地址模块负责收集实物奖品中奖用户的配送信息。用户在中奖后可立即填写地址,也可稍后通过"我的奖品"补填或修改。
关于活动整体背景和全局规则,请见 足球季活动全局。
二、功能需求清单
2.1 中奖弹窗入口
- 抽奖结果为实物奖品(公仔挂件、叫叫金片)时,展示统一样式的中奖弹窗
- 弹窗内展示奖品信息,底部提供"立即领取"按钮
- 点击"立即领取"后跳转至地址填写页
- 若用户关闭弹窗未填写,不影响中奖记录,可后续从"我的奖品"补填
2.2 地址填写页
- 页面顶部展示中奖奖品名称,提示用户填写收货信息
- 表单字段如下:
| 字段 | 类型 | 校验规则 |
|---|---|---|
| 收件人姓名 | 文本输入框 | 必填,2-20 个字符 |
| 收件人电话 | 文本输入框 | 必填,11 位中国大陆手机号 |
| 省 | 级联选择器 | 必选 |
| 市 | 级联选择器(联动) | 必选 |
| 区 | 级联选择器(联动) | 必选 |
| 详细地址 | 多行文本框 | 必填,5-100 个字符 |
- 省市区使用三级联动选择器,数据来源为静态 JSON 文件
- 详细地址为纯文本输入
- 底部"提交地址"按钮,提交前执行全部字段校验
- 校验失败时,在对应字段下方展示红色错误提示,不提交
2.3 "我的奖品"入口
- "我的奖品"列表中,实物奖品展示地址填写状态:
- 未填写:显示"填写地址"按钮
- 已填写:显示已填地址摘要,提供"修改地址"按钮
- 点击"填写地址"或"修改地址"进入同一地址填写页
- 修改场景下,表单回填已有数据,底部按钮文案变为"更新地址"
2.4 地址修改策略
- 用户在活动结束前可随时修改已提交的地址
- 活动正式结束后,地址表单变为只读展示,不再提供编辑入口
- 每次修改会覆盖上一次提交的地址数据
2.5 提交反馈
- 提交成功后展示 toast 提示"地址保存成功"
- 提示 1.5 秒后自动返回上一页
三、业务规则与约束
3.1 地址填写前置条件
| 条件 | 说明 |
|---|---|
| 中奖实物奖品 | 仅公仔挂件、叫叫金片等实物奖品需要填写地址 |
| 虚拟权益奖品 | 体验课、叫叫口算VIP月卡、冠军皮肤不需要填写地址 |
| 活动未结束 | 活动结束(7 月 20 日后)地址表单只读,不可编辑 |
3.2 数据导出字段
- 实物奖品导出数据(供运营发货使用):
| 字段 | 说明 |
|---|---|
| 用户ID | 用户唯一标识 |
| 实物奖品名称 | 公仔挂件 / 叫叫金片 |
| 收件人姓名 | 用户填写 |
| 收件人电话 | 用户填写 |
| 省名称 | 用户选择 |
| 市名称 | 用户选择 |
| 区名称 | 用户选择 |
| 详细地址 | 用户填写 |
3.3 前置条件
- 用户必须已中奖(实物奖品),才有地址填写入口
- 后端需提供保存/更新地址的接口(待设计)
3.4 边界场景
| 场景 | 处理方式 |
|---|---|
| 用户中奖后直接关闭弹窗,未填地址 | 中奖记录保留,用户可从"我的奖品"补填 |
| 用户提交地址时网络异常 | 提示"提交失败,请重试",保留已填数据不清空 |
| 活动已结束,用户尝试修改地址 | 表单只读展示,不提供编辑入口 |
| 同一用户中多个实物奖 | 每个实物奖品对应一份独立地址记录 |
| 用户填写地址后反复修改 | 活动结束前均允许修改,以最后一次提交为准 |
| 用户填写非法手机号 | 前端校验拦截,提示"请输入正确的 11 位手机号" |
3.5 预留 API 接口(待后端设计)
POST /api/prize/address
Body: { prizeId, name, phone, province, city, district, detail }
GET /api/prize/address?prizeId=xxx