feat(order): 添加配送员位置追踪功能

- 在 shopStoreRider 模型中新增 longitude 和 latitude 字段
- 在首页添加送水订单入口并引入 Agenda 图标
- 在送水订单页面实现配送员当前位置获取和更新逻辑
- 添加位置权限检查和经纬度数据同步到后台
- 实现按用户ID和门店ID精确匹配配送员记录
- 添加兜底机制按门店筛选后匹配配送员
- 送达操作时自动记录配送员当前位置信息
This commit is contained in:
2026-02-25 13:40:45 +08:00
parent 929f173b95
commit 5840bea66b
3 changed files with 49 additions and 3 deletions

View File

@@ -21,6 +21,8 @@ import dayjs from 'dayjs'
import { pageGltTicketOrder, updateGltTicketOrder } from '@/api/glt/gltTicketOrder'
import type { GltTicketOrder, GltTicketOrderParam } from '@/api/glt/gltTicketOrder/model'
import { uploadFile } from '@/api/system/file'
import { listShopStoreRider, updateShopStoreRider } from '@/api/shop/shopStoreRider'
import { getCurrentLngLat } from '@/utils/location'
const PAGE_SIZE = 10
@@ -236,6 +238,37 @@ export default function TicketOrdersPage() {
}
setDeliverSubmitting(true)
try {
// 送达时同步记录配送员当前位置(用于门店/后台跟踪骑手位置)
const loc = await getCurrentLngLat('确认送达需要记录您的当前位置,请在设置中开启定位权限后重试。')
if (!loc) return
try {
// 优先按 userId 精确查找;后端若未支持该字段,会自动忽略,我们再做兜底。
let riderRow =
(await listShopStoreRider({ userId: riderId, storeId: deliverOrder.storeId, status: 1 } as any))
?.find(r => String(r?.userId || '') === String(riderId || '')) ||
null
// 兜底:按门店筛选后再匹配 userId
if (!riderRow && deliverOrder.storeId) {
const list = await listShopStoreRider({ storeId: deliverOrder.storeId, status: 1 } as any)
riderRow = list?.find(r => String(r?.userId || '') === String(riderId || '')) || null
}
if (riderRow?.id) {
await updateShopStoreRider({
id: riderRow.id,
longitude: loc.lng,
latitude: loc.lat
} as any)
} else {
console.warn('未找到 ShopStoreRider 记录,无法更新骑手经纬度:', { riderId, storeId: deliverOrder.storeId })
}
} catch (e) {
// 不阻塞送达流程,但记录日志便于排查。
console.warn('更新 ShopStoreRider 经纬度失败:', e)
}
const now = dayjs().format('YYYY-MM-DD HH:mm:ss')
// 送达时间:首次“确认送达”写入;补传照片时不要覆盖原送达时间
const deliveredAt = deliverOrder.sendEndTime || now