|
|
|
@ -0,0 +1,168 @@ |
|
|
|
<template> |
|
|
|
<view class="map-card"> |
|
|
|
<!-- 地图区域 --> |
|
|
|
<view class="map-container"> |
|
|
|
<map |
|
|
|
:latitude="latitude" |
|
|
|
:longitude="longitude" |
|
|
|
:markers="markers" |
|
|
|
:show-location="false" |
|
|
|
:enable-zoom="false" |
|
|
|
:enable-scroll="false" |
|
|
|
:enable-rotate="false" |
|
|
|
:enable-overlooking="false" |
|
|
|
:enable-traffic="false" |
|
|
|
class="map" |
|
|
|
@tap="onMapTap" |
|
|
|
></map> |
|
|
|
</view> |
|
|
|
|
|
|
|
<!-- 地址信息区域 --> |
|
|
|
<view class="address-container"> |
|
|
|
<view class="address-name">{{ addressName }}</view> |
|
|
|
<view class="address-detail" v-if="addressDetail">{{ addressDetail }}</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
export default { |
|
|
|
name: 'MapCard', |
|
|
|
props: { |
|
|
|
// 纬度 |
|
|
|
latitude: { |
|
|
|
type: [Number, String], |
|
|
|
required: true, |
|
|
|
default: 39.908823 |
|
|
|
}, |
|
|
|
// 经度 |
|
|
|
longitude: { |
|
|
|
type: [Number, String], |
|
|
|
required: true, |
|
|
|
default: 116.397470 |
|
|
|
}, |
|
|
|
// 地址名称 |
|
|
|
addressName: { |
|
|
|
type: String, |
|
|
|
required: true, |
|
|
|
default: '位置信息' |
|
|
|
}, |
|
|
|
// 地址详情(可选) |
|
|
|
addressDetail: { |
|
|
|
type: String, |
|
|
|
default: '' |
|
|
|
}, |
|
|
|
// 地图高度 |
|
|
|
mapHeight: { |
|
|
|
type: [Number, String], |
|
|
|
default: 300 |
|
|
|
}, |
|
|
|
// 是否可点击 |
|
|
|
clickable: { |
|
|
|
type: Boolean, |
|
|
|
default: true |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
// 地图标记点 |
|
|
|
markers() { |
|
|
|
return [{ |
|
|
|
id: 1, |
|
|
|
latitude: Number(this.latitude), |
|
|
|
longitude: Number(this.longitude), |
|
|
|
iconPath: '/static/image/location-marker.svg', |
|
|
|
width: 30, |
|
|
|
height: 30, |
|
|
|
callout: { |
|
|
|
content: this.addressName, |
|
|
|
color: '#333333', |
|
|
|
fontSize: 12, |
|
|
|
borderRadius: 4, |
|
|
|
bgColor: '#ffffff', |
|
|
|
padding: 8, |
|
|
|
display: 'ALWAYS' |
|
|
|
} |
|
|
|
}] |
|
|
|
} |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
// 地图点击事件 |
|
|
|
onMapTap() { |
|
|
|
if (this.clickable) { |
|
|
|
this.$emit('mapClick', { |
|
|
|
latitude: this.latitude, |
|
|
|
longitude: this.longitude, |
|
|
|
addressName: this.addressName |
|
|
|
}); |
|
|
|
|
|
|
|
// 打开地图导航 |
|
|
|
this.openLocation(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
// 打开地图导航 |
|
|
|
openLocation() { |
|
|
|
uni.openLocation({ |
|
|
|
latitude: Number(this.latitude), |
|
|
|
longitude: Number(this.longitude), |
|
|
|
name: this.addressName, |
|
|
|
address: this.addressDetail || this.addressName, |
|
|
|
success: () => { |
|
|
|
console.log('打开地图成功'); |
|
|
|
}, |
|
|
|
fail: (err) => { |
|
|
|
console.error('打开地图失败:', err); |
|
|
|
uni.showToast({ |
|
|
|
title: '打开地图失败', |
|
|
|
icon: 'none' |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
.map-card { |
|
|
|
background: $uni-bg-color; |
|
|
|
border-radius: $uni-border-radius-lg; |
|
|
|
overflow: hidden; |
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); |
|
|
|
margin: $uni-spacing-row-base; |
|
|
|
} |
|
|
|
|
|
|
|
.map-container { |
|
|
|
position: relative; |
|
|
|
height: 300rpx; |
|
|
|
|
|
|
|
.map { |
|
|
|
width: 100%; |
|
|
|
height: 100%; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.address-container { |
|
|
|
padding: $uni-spacing-row-lg $uni-spacing-row-base; |
|
|
|
background: $uni-bg-color; |
|
|
|
|
|
|
|
.address-name { |
|
|
|
font-size: $uni-font-size-lg; |
|
|
|
color: $uni-text-color; |
|
|
|
font-weight: 500; |
|
|
|
margin-bottom: $uni-spacing-col-sm; |
|
|
|
line-height: 1.4; |
|
|
|
} |
|
|
|
|
|
|
|
.address-detail { |
|
|
|
font-size: $uni-font-size-sm; |
|
|
|
color: $uni-text-color-grey; |
|
|
|
line-height: 1.4; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 点击态效果 |
|
|
|
.map-card:active { |
|
|
|
background: $uni-bg-color-hover; |
|
|
|
} |
|
|
|
</style> |