导读(3行收益):商城收货地址最容易出问题:地址写在一个文本框里没法选、默认地址不生效、手机号格式错。本文给一套做法:省市区联动、默认地址、手机号校验与下单地址选择,附建表 SQL。看完地址簿不会再让人手动填省市区。
一、地址为什么不能只存文本
三个高发问题:
- 省市区手填:用户打错字,快递送不到;
- 默认地址不生效:每次下单都要重新选;
- 手机号格式错:快递员联系不上。
根源是地址只存了一个大文本框,没有结构化、没有默认标记、没有校验。
二、地址表怎么设计
CREATE TABLE `user_address` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`receiver` VARCHAR(32) NOT NULL,
`mobile` VARCHAR(16) NOT NULL,
`province` VARCHAR(32),
`city` VARCHAR(32),
`district` VARCHAR(32),
`detail` VARCHAR(255),
`is_default` TINYINT DEFAULT 0,
KEY `idx_user` (`user_id`, `is_default`)
) COMMENT='收货地址';
关键点:省市区拆三列,别塞在 detail 里;is_default 标记默认地址。避坑:省市区和详情混一起——没法按省筛选;不记默认地址——每次下单要选。
三、省市区联动怎么做
- 一级选省,二级市跟着变,三级区跟着变;
- 省市区用编码而非名称,避免重名;
- 已选地址回显时三列同时填。
避坑:用名称联动——朝阳区和朝阳区重名;切换省不重置市区——残留旧数据。
四、手机号校验
- 前端校验 11 位、1 开头;
- 后端再校验一次,别只靠前端;
- 允许座机但必填分机格式。
避坑:只前端校验——绕过前端直接提交坏数据;手机号允许字母——快递系统识别不了。
五、默认地址逻辑
| 操作 | 处理 |
|---|---|
| 设默认 | 旧默认取消,新默认置 1 |
| 删默认 | 自动把最新一条设为默认 |
| 下单 | 自动带出默认地址 |
关键点:全表只有一个默认,设新默认时事务里清旧的。避坑:同时两个默认——下单不知道用哪个;删默认不补——下单页空地址。
六、踩坑清单
- [ ] 省市区手填不联动;
- [ ] 省市区和详情混一列;
- [ ] 手机号只前端校验;
- [ ] 允许多个默认地址;
- [ ] 删默认不自动补;
- [ ] 下单不自动带默认;
- [ ] 切换省不重置市区。
七、工程落地建议
收货地址建议按「省市区结构化+联动选择+手机号校验+唯一默认+下单自动带」落地。若团队用成型商城平台(如乔拓云商城)起步,重点核对省市区联动、默认地址与地址选择是否可用。
八、复盘清单(可直接抄走)
- [ ] 省市区是否拆列存储;
- [ ] 是否有三级联动;
- [ ] 手机号是否前后端都校验;
- [ ] 是否只有一个默认地址;
- [ ] 删默认是否自动补;
- [ ] 下单是否自动带默认地址。
结语
收货地址不是一个文本框,而是省市区结构化、联动选择、手机号校验、默认唯一。这几步做对,下单填地址才不会出错。本文仅作技术分享,具体功能以各平台官方实时信息为准。