|
|
- <template>
- <view class="map-card" @click="onMapTap">
- <!-- 地图区域 -->
- <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"
- ></map>
- <!-- @tap.stop="onMapTap" -->
- </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>
|