forked from gxwebsoft/mp-10550
Compare commits
2 Commits
049b2396c3
...
5840bea66b
| Author | SHA1 | Date | |
|---|---|---|---|
| 5840bea66b | |||
| 929f173b95 |
@@ -38,6 +38,10 @@ export interface ShopStoreRider {
|
|||||||
otherGoodsCommissionValue?: string;
|
otherGoodsCommissionValue?: string;
|
||||||
// 用户ID
|
// 用户ID
|
||||||
userId?: number;
|
userId?: number;
|
||||||
|
// 经度(配送员当前位置)
|
||||||
|
longitude?: string;
|
||||||
|
// 纬度(配送员当前位置)
|
||||||
|
latitude?: string;
|
||||||
// 备注
|
// 备注
|
||||||
comments?: string;
|
comments?: string;
|
||||||
// 排序号
|
// 排序号
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import Header from './Header'
|
// import Header from './Header'
|
||||||
import Banner from './Banner'
|
import Banner from './Banner'
|
||||||
import Taro, { useDidShow, useShareAppMessage } from '@tarojs/taro'
|
import Taro, { useDidShow, useShareAppMessage } from '@tarojs/taro'
|
||||||
import { View, Text, Image, ScrollView } from '@tarojs/components'
|
import { View, Text, Image, ScrollView } from '@tarojs/components'
|
||||||
import { useEffect, useMemo, useState, type ReactNode } from 'react'
|
import { useEffect, useMemo, useState, type ReactNode } from 'react'
|
||||||
import { Cart, Gift, Ticket } from '@nutui/icons-react-taro'
|
import { Cart, Gift, Ticket, Agenda } from '@nutui/icons-react-taro'
|
||||||
import { getShopInfo } from '@/api/layout'
|
import { getShopInfo } from '@/api/layout'
|
||||||
import { checkAndHandleInviteRelation, hasPendingInvite } from '@/utils/invite'
|
import { checkAndHandleInviteRelation, hasPendingInvite } from '@/utils/invite'
|
||||||
import { pageShopGoods } from '@/api/shop/shopGoods'
|
import { pageShopGoods } from '@/api/shop/shopGoods'
|
||||||
@@ -20,9 +20,12 @@ function Home() {
|
|||||||
useShareAppMessage(() => {
|
useShareAppMessage(() => {
|
||||||
// 获取当前用户ID,用于生成邀请链接
|
// 获取当前用户ID,用于生成邀请链接
|
||||||
const userId = Taro.getStorageSync('UserId');
|
const userId = Taro.getStorageSync('UserId');
|
||||||
|
const user = Taro.getStorageSync('User') || {};
|
||||||
|
const nickname =
|
||||||
|
(user && (user.nickname || user.realName || user.username)) || '';
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title: userId + '超值推荐',
|
title: (nickname || '') + '超值推荐',
|
||||||
path: userId ? `/pages/index/index?inviter=${userId}&source=share&t=${Date.now()}` : `/pages/index/index`,
|
path: userId ? `/pages/index/index?inviter=${userId}&source=share&t=${Date.now()}` : `/pages/index/index`,
|
||||||
success: function () {
|
success: function () {
|
||||||
console.log('首页分享成功');
|
console.log('首页分享成功');
|
||||||
@@ -164,6 +167,7 @@ function Home() {
|
|||||||
Taro.getUserInfo({
|
Taro.getUserInfo({
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
const avatar = res.userInfo.avatarUrl;
|
const avatar = res.userInfo.avatarUrl;
|
||||||
|
// Keep WeChat display name in storage so share title can use it.
|
||||||
console.log(avatar, 'avatarUrl')
|
console.log(avatar, 'avatarUrl')
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -216,6 +220,15 @@ function Home() {
|
|||||||
Taro.navigateTo({ url: '/user/ticket/use?goodsId=10074' })
|
Taro.navigateTo({ url: '/user/ticket/use?goodsId=10074' })
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'order',
|
||||||
|
title: '送水订单',
|
||||||
|
icon: <Agenda size={30} />,
|
||||||
|
onClick: () => {
|
||||||
|
if (!ensureLoggedIn('/user/ticket/index')) return
|
||||||
|
Taro.navigateTo({ url: '/user/ticket/index' })
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: 'invite',
|
key: 'invite',
|
||||||
title: '邀请有礼',
|
title: '邀请有礼',
|
||||||
@@ -245,7 +258,7 @@ function Home() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* Header区域 */}
|
{/* Header区域 */}
|
||||||
<Header />
|
{/*<Header />*/}
|
||||||
|
|
||||||
<View className="home-page">
|
<View className="home-page">
|
||||||
{/* 顶部活动主视觉:使用 Banner 组件 */}
|
{/* 顶部活动主视觉:使用 Banner 组件 */}
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import dayjs from 'dayjs'
|
|||||||
import { pageGltTicketOrder, updateGltTicketOrder } from '@/api/glt/gltTicketOrder'
|
import { pageGltTicketOrder, updateGltTicketOrder } from '@/api/glt/gltTicketOrder'
|
||||||
import type { GltTicketOrder, GltTicketOrderParam } from '@/api/glt/gltTicketOrder/model'
|
import type { GltTicketOrder, GltTicketOrderParam } from '@/api/glt/gltTicketOrder/model'
|
||||||
import { uploadFile } from '@/api/system/file'
|
import { uploadFile } from '@/api/system/file'
|
||||||
|
import { listShopStoreRider, updateShopStoreRider } from '@/api/shop/shopStoreRider'
|
||||||
|
import { getCurrentLngLat } from '@/utils/location'
|
||||||
|
|
||||||
const PAGE_SIZE = 10
|
const PAGE_SIZE = 10
|
||||||
|
|
||||||
@@ -236,6 +238,37 @@ export default function TicketOrdersPage() {
|
|||||||
}
|
}
|
||||||
setDeliverSubmitting(true)
|
setDeliverSubmitting(true)
|
||||||
try {
|
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 now = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||||
// 送达时间:首次“确认送达”写入;补传照片时不要覆盖原送达时间
|
// 送达时间:首次“确认送达”写入;补传照片时不要覆盖原送达时间
|
||||||
const deliveredAt = deliverOrder.sendEndTime || now
|
const deliveredAt = deliverOrder.sendEndTime || now
|
||||||
|
|||||||
@@ -16,5 +16,7 @@ export function saveStorageByLoginUser(token: string, user: User) {
|
|||||||
Taro.setStorageSync('access_token', token)
|
Taro.setStorageSync('access_token', token)
|
||||||
Taro.setStorageSync('UserId', user.userId)
|
Taro.setStorageSync('UserId', user.userId)
|
||||||
Taro.setStorageSync('Phone', user.phone)
|
Taro.setStorageSync('Phone', user.phone)
|
||||||
|
Taro.setStorageSync('WxNickName', user.nickname);
|
||||||
Taro.setStorageSync('User', user)
|
Taro.setStorageSync('User', user)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user