walkInto界面设计1.1

This commit is contained in:
minimaxagent1 2025-08-02 17:52:46 +08:00
parent 2ef461a21d
commit 1538ad4c85

View File

@ -1,4 +1,4 @@
<template> <template>
<view class="page"> <view class="page">
<!-- 使用自定义导航栏组件 --> <!-- 使用自定义导航栏组件 -->
<custom-navbar title="走进平山" /> <custom-navbar title="走进平山" />
@ -12,27 +12,28 @@
<view class="contact-info" v-if="templeInfo.phone || templeInfo.address"> <view class="contact-info" v-if="templeInfo.phone || templeInfo.address">
<view class="contact-item" v-if="templeInfo.phone"> <view class="contact-item" v-if="templeInfo.phone">
<text class="contact-label">电话</text> <text class="contact-label">电话</text>
<text class="contact-value">{{ templeInfo.phone }}</text> <text class="contact-value" @click="callPhone">{{ templeInfo.phone }}</text>
</view> </view>
<view class="contact-item" v-if="templeInfo.address"> <view class="contact-item" v-if="templeInfo.address" @click="openMap">
<text class="contact-label">地址</text> <text class="contact-label">地址</text>
<text class="contact-value">{{ templeInfo.address }}</text> <text class="contact-value">{{ templeInfo.address }}</text>
<image class="nav-arrow" :src="CommonEnum.NAV_ARROW" mode="aspectFit"></image>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { import {
CommonEnum CommonEnum
} from '@/enum/common.js' } from '@/enum/common.js'
import { import {
getTempleInfo getTempleInfo
} from '@/api/walkInto/walkInto.js' } from '@/api/walkInto/walkInto.js'
import CustomNavbar from "../../components/custom-navbar/custom-navbar.vue"; import CustomNavbar from "../../components/custom-navbar/custom-navbar.vue";
export default { export default {
components: { components: {
CustomNavbar CustomNavbar
}, },
@ -48,7 +49,9 @@ export default {
address: '', address: '',
phone: '', phone: '',
startTime: '', startTime: '',
endTime: '' endTime: '',
lon: null,
lat: null
}, },
loading: false loading: false
} }
@ -113,30 +116,164 @@ export default {
return text.trim(); return text.trim();
}, },
}
}
</script>
<style lang="scss"> //
.page { callPhone() {
if (this.templeInfo.phone) {
uni.makePhoneCall({
phoneNumber: this.templeInfo.phone,
success: () => {
console.log('拨打电话成功')
},
fail: (err) => {
console.error('拨打电话失败:', err)
uni.showToast({
title: '拨打电话失败',
icon: 'none'
})
}
})
}
},
//
openMap() {
if (this.templeInfo.address && this.templeInfo.lon && this.templeInfo.lat) {
// #ifdef H5
// H5使
this.openMapByAddress()
// #endif
// #ifndef H5
// H5使
uni.openLocation({
latitude: parseFloat(this.templeInfo.lat),
longitude: parseFloat(this.templeInfo.lon),
name: this.templeInfo.name || '寺庙',
address: this.templeInfo.address,
success: () => {
console.log('打开地图成功')
},
fail: (err) => {
console.error('打开地图失败:', err)
// 使
this.openMapByAddress()
}
})
// #endif
} else if (this.templeInfo.address) {
// 使
this.openMapByAddress()
}
},
// 使
openMapByAddress() {
// #ifdef H5
// H5
uni.showActionSheet({
itemList: ['复制地址', '百度地图', '高德地图', '腾讯地图'],
success: (res) => {
switch (res.tapIndex) {
case 0:
//
this.copyAddress()
break
case 1:
//
this.openBaiduMap()
break
case 2:
//
this.openGaodeMap()
break
case 3:
//
this.openTencentMap()
break
}
}
})
// #endif
// #ifndef H5
// H5
uni.showModal({
title: '提示',
content: '是否复制地址到剪贴板?',
success: (res) => {
if (res.confirm) {
this.copyAddress()
}
}
})
// #endif
},
//
copyAddress() {
uni.setClipboardData({
data: this.templeInfo.address,
success: () => {
uni.showToast({
title: '地址已复制',
icon: 'success',
duration: 2000
})
},
fail: () => {
uni.showToast({
title: '复制失败',
icon: 'none'
})
}
})
},
//
openBaiduMap() {
const address = encodeURIComponent(this.templeInfo.address)
const url = `https://api.map.baidu.com/geocoder?address=${address}&output=html&src=webapp.baidu.openAPIdemo`
window.open(url, '_blank')
},
//
openGaodeMap() {
const address = encodeURIComponent(this.templeInfo.address)
const url = `https://uri.amap.com/search?query=${address}`
window.open(url, '_blank')
},
//
openTencentMap() {
const address = encodeURIComponent(this.templeInfo.address)
const url = `https://apis.map.qq.com/uri/v1/search?keyword=${address}&referer=myapp`
window.open(url, '_blank')
}
}
}
</script>
<style lang="scss">
.page {
background: #F5F0E7; background: #F5F0E7;
width: 100%; width: 100%;
min-height: 100vh; min-height: 100vh;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.header { .header {
margin: 26rpx 28rpx; margin: 26rpx 28rpx;
min-height: 100vh; min-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 0 15rpx; padding: 0 15rpx;
padding-bottom: rpx; padding-bottom: 40rpx;
border-radius: 16rpx 16rpx 16rpx 16rpx; border-radius: 16rpx 16rpx 16rpx 16rpx;
} }
.temple-image { .temple-image {
width: 610rpx; width: 610rpx;
height: 324rpx; height: 324rpx;
background: #D8D8D8; /* 灰色占位背景 */ background: #D8D8D8; /* 灰色占位背景 */
@ -144,15 +281,15 @@ export default {
display: block; display: block;
margin: 34rpx auto; margin: 34rpx auto;
object-fit: cover; object-fit: cover;
} }
.temple-info { .temple-info {
width: 100%; width: 100%;
padding: 24rpx 42rpx; padding: 24rpx 42rpx;
border-radius: 20rpx 20rpx 20rpx 20rpx; border-radius: 20rpx 20rpx 20rpx 20rpx;
} }
.temple-desc { .temple-desc {
display: block; display: block;
font-weight: 400; font-weight: 400;
font-size: 28rpx; font-size: 28rpx;
@ -163,38 +300,43 @@ export default {
text-transform: none; text-transform: none;
white-space: pre-line; /* 保留换行符 */ white-space: pre-line; /* 保留换行符 */
word-wrap: break-word; /* 长单词换行 */ word-wrap: break-word; /* 长单词换行 */
} }
/* 联系信息样式 */ /* 联系信息样式 */
.contact-info { .contact-info {
margin-top: 40rpx; margin-top: 40rpx;
padding: 30rpx; padding: 30rpx;
border-radius: 16rpx; border-radius: 16rpx;
} }
.contact-item { .contact-item {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
margin-bottom: 20rpx; margin-bottom: 20rpx;
line-height: 40rpx; line-height: 40rpx;
} }
.contact-item:last-child { .contact-item:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.contact-label { .contact-label {
font-size: 28rpx; font-size: 28rpx;
min-width: 100rpx; min-width: 100rpx;
color: #522510; color: #522510;
flex-shrink: 0; flex-shrink: 0;
} }
.contact-value { .contact-value {
font-size: 28rpx; font-size: 28rpx;
color: #522510; color: #522510;
flex: 1; flex: 1;
word-wrap: break-word; word-wrap: break-word;
} }
</style>
.nav-arrow {
width: 32rpx;
height: 32rpx;
}
</style>