小程序开发日记⑥:地址簿与收货信息复用

1071 字
5 分钟
小程序开发日记⑥:地址簿与收货信息复用

无人机配送的地址不只是“某某路多少号”,还包括船名、MMSI、收货人、手机号、区域和经纬度。地址簿的任务,就是把这一整组信息保存成可复用的业务对象。

1. 管理模式与选择模式#

pages/profile/address-book.vue 通过路由参数支持两种模式:

onLoad(options => {
pageMode.value = options.mode === 'select' ? 'select' : 'manage'
})
  • 管理模式:新增、编辑、删除、设为默认;
  • 选择模式:从下单页进入,点击地址后写入 recipientStore 并返回。

一套列表复用两种场景,但按钮与交互目标清晰分开。

2. 地址数据结构#

recipientStore 管理以下字段:

const addressId = ref(null)
const shipName = ref('')
const shipMmsi = ref('')
const recipientName = ref('')
const recipientPhone = ref('')
const fullAreaName = ref('')
const detailedAddress = ref('')
const regionId = ref(null)
const longitude = ref(null)
const latitude = ref(null)

Store 的价值在于地址选择页与下单页之间不需要把十个字段都拼进 URL,也避免页面返回后数据丢失。

3. 服务端字段归一化#

不同接口可能使用 vesselName、receiverName,页面表单则使用更贴近交互的 shipName、recipientName。fillFromAddress 负责回显,buildAddressPayload 负责提交:

function fillFromAddress(address = {}) {
addressId.value = address.addressId || address.id || null
shipName.value = address.vesselName || ''
shipMmsi.value = address.mmsi || ''
recipientName.value = address.receiverName || ''
recipientPhone.value = address.receiverPhone || ''
longitude.value = address.longitude ?? null
latitude.value = address.latitude ?? null
}

这层转换让模板不必同时理解两套命名。

4. 搜索与列表加载#

地址列表进入页面时加载,搜索支持收货人、手机号、船名和 MMSI。频繁输入时应避免每个字符都触发无意义请求,可以在页面端防抖,或在点击搜索时统一提交关键词。

空搜索恢复完整列表,删除后重新加载服务端数据,避免只删本地数组造成分页总数和默认状态不一致。

5. 默认地址#

设为默认成功后,页面把当前记录标为默认,同时清除其他记录的默认标记:

const applyDefaultFlag = item => ({
...item,
isDefault: String(item.addressId) === String(targetId) ? '1' : '0'
})
addressList.value = addressList.value.map(applyDefaultFlag)

新建订单时优先加载默认地址,让高频用户无需重复选择。默认地址不存在时再保留空表单,不随便取列表第一条。

6. 删除确认#

地址删除是不可逆业务操作,页面先弹确认框,再调用删除接口。若被订单引用,后端应按业务规则拒绝或只做逻辑删除;前端展示明确错误,不擅自从列表隐藏。

7. 地址表单校验#

收货人手机号、MMSI、船名、详细地址和经纬度分别校验。尤其经纬度不能只判断“非空”,还要转为有限数字:

const validCoordinate = value => Number.isFinite(Number(value))

地图选点返回坐标后,表单仍允许用户补充更具体的地址描述。地理坐标负责计算,文字地址负责阅读,两者缺一不可。

8. 本篇小结#

选择地址后的返回策略#

选择模式中点击整张卡片写入 Store,再调用 navigateBack。编辑按钮必须阻止事件冒泡,否则用户只是想改地址,却会先把它选中并返回。管理模式则不响应整卡选择,只开放明确的编辑、默认和删除入口。

地址变更与历史订单#

修改地址簿记录不应修改已经创建的历史订单。下单时把地址快照写进订单,地址簿只负责为新订单提供默认值。否则用户改了手机号,三个月前的订单详情也跟着变化,历史凭证就失去真实性。

地址列表接口返回空值或坐标缺失时,卡片仍可展示基础信息,但选中下单前必须再次校验完整性。管理页允许修复不完整旧数据,业务提交页则坚持严格校验。

地址簿减少的不是几次打字,而是下单时一整组高风险信息的重复录入。船名少一个字可能只是难看,MMSI 或坐标错一位可就完全是另一艘船。能复用的数据,还是让系统多记一点,人脑少背一点。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
小程序开发日记⑥:地址簿与收货信息复用
https://firefly.cuteleaf.cn/posts/mmp-dev-diary-6/
作者
Yore
发布于
2026-08-13
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Yore
Hello, I'm Yore.
公告
欢迎来到Yore的博客!本站基于原创作者夏叶的博客网站模版创作。
分类
标签
最新动态
站点统计
文章
51
分类
2
标签
124
总字数
94,115
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.15.0
文章许可
CC BY-NC-SA 4.0