|
@@ -1,5 +1,6 @@
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
import { StaticUrl } from '@/config/index'
|
|
import { StaticUrl } from '@/config/index'
|
|
|
|
|
+import router from '@/router'
|
|
|
|
|
|
|
|
definePage({
|
|
definePage({
|
|
|
name: 'common-selectAddress',
|
|
name: 'common-selectAddress',
|
|
@@ -8,8 +9,61 @@ definePage({
|
|
|
navigationBarTitleText: '选择收获地址',
|
|
navigationBarTitleText: '选择收获地址',
|
|
|
},
|
|
},
|
|
|
})
|
|
})
|
|
|
-const { name } = storeToRefs(useAddressStore())
|
|
|
|
|
|
|
+const { SelectShopInfo } = storeToRefs(useSysXsbStore())
|
|
|
|
|
+const { name, Location } = storeToRefs(useAddressStore())
|
|
|
|
|
+const nearbyAddress = ref<Api.xsbShopList>()
|
|
|
|
|
+
|
|
|
|
|
+const { data: shopList } = useRequest(() => Apis.xsb.shopList({})).onSuccess(() => {
|
|
|
|
|
+ if (!Location.value.longitude || !Location.value.latitude || !shopList.value) {
|
|
|
|
|
+ return null
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const getDistance = (lat1: number, lng1: number, lat2: number, lng2: number): number => {
|
|
|
|
|
+ const R = 6371 // 地球半径(公里)
|
|
|
|
|
+ const dLat = (lat2 - lat1) * Math.PI / 180
|
|
|
|
|
+ const dLng = (lng2 - lng1) * Math.PI / 180
|
|
|
|
|
+ const a
|
|
|
|
|
+ = Math.sin(dLat / 2) * Math.sin(dLat / 2)
|
|
|
|
|
+ + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180)
|
|
|
|
|
+ * Math.sin(dLng / 2) * Math.sin(dLng / 2)
|
|
|
|
|
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
|
|
|
|
|
+ return R * c // 距离(公里)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ let minDistance = Infinity
|
|
|
|
|
+
|
|
|
|
|
+ for (const shop of shopList.value) {
|
|
|
|
|
+ if (shop.shopLat && shop.shopLng) {
|
|
|
|
|
+ const distance = getDistance(
|
|
|
|
|
+ Location.value.latitude,
|
|
|
|
|
+ Location.value.longitude,
|
|
|
|
|
+ Number(shop.shopLat),
|
|
|
|
|
+ Number(shop.shopLng),
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ if (distance < minDistance) {
|
|
|
|
|
+ minDistance = distance
|
|
|
|
|
+ nearbyAddress.value = { ...shop, distance: Number(distance.toFixed(2)) }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+})
|
|
|
const selectAddressId = ref()
|
|
const selectAddressId = ref()
|
|
|
|
|
+
|
|
|
|
|
+const allShopList = computed(() => {
|
|
|
|
|
+ return shopList.value?.filter(it => it.shopId !== nearbyAddress.value?.shopId)
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+function handleClick(item: Api.xsbShopList) {
|
|
|
|
|
+ SelectShopInfo.value = item
|
|
|
|
|
+ router.back()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+onUnload(() => {
|
|
|
|
|
+ if (!SelectShopInfo.value?.shopId) {
|
|
|
|
|
+ SelectShopInfo.value = nearbyAddress.value
|
|
|
|
|
+ }
|
|
|
|
|
+})
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
<template>
|
|
@@ -57,21 +111,21 @@ const selectAddressId = ref()
|
|
|
</wd-radio-group>
|
|
</wd-radio-group>
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
- <view class="mt20rpx rounded-16rpx bg-white px24rpx py28rpx">
|
|
|
|
|
|
|
+ <view v-if="nearbyAddress" class="mt20rpx rounded-16rpx bg-white px24rpx py28rpx" @click="handleClick(nearbyAddress)">
|
|
|
<view class="text-24rpx text-#AAAAAA">
|
|
<view class="text-24rpx text-#AAAAAA">
|
|
|
附近的门店
|
|
附近的门店
|
|
|
</view>
|
|
</view>
|
|
|
<view class="mt24rpx text-28rpx font-semibold">
|
|
<view class="mt24rpx text-28rpx font-semibold">
|
|
|
- 海马购超市(红街店)
|
|
|
|
|
|
|
+ {{ nearbyAddress?.shopName }}
|
|
|
</view>
|
|
</view>
|
|
|
<view class="mt16rpx text-24rpx text-#AAAAAA">
|
|
<view class="mt16rpx text-24rpx text-#AAAAAA">
|
|
|
以为您选择距离最近的可配送店
|
|
以为您选择距离最近的可配送店
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
- <view class="mt20rpx rounded-16rpx bg-white px24rpx py28rpx">
|
|
|
|
|
- <view v-for="item, idx in 5" :key="item" class="mb24rpx text-28rpx font-semibold">
|
|
|
|
|
- 海马购超市(红街店)
|
|
|
|
|
- <view v-if="idx < 4" class="mt20rpx h2rpx w-full bg-#F0F0F0" />
|
|
|
|
|
|
|
+ <view v-if="allShopList" class="mt20rpx rounded-16rpx bg-white px24rpx py28rpx">
|
|
|
|
|
+ <view v-for="item, idx in allShopList" :key="item.shopId" class="text-28rpx font-semibold" @click="handleClick(item)">
|
|
|
|
|
+ {{ item.shopName }}
|
|
|
|
|
+ <view v-if="idx < allShopList.length - 1" class="mb24rpx mt20rpx h2rpx w-full bg-#F0F0F0" />
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|