景徳镇旅游微信小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

360 lines
8.3 KiB

<template>
<view class="Locations">
<map
style="width: 100%;height: 60vh"
:layer-style='5'
:show-location='true'
:latitude="position.latitude"
:longitude="position.longitude"
:markers="spotGuideMarkers"
:scale="scale"
@markertap="markertap"
id="mapId"
@callouttap='callouttap'>
</map>
<uv-tabs :list="areaList"
:activeStyle="{color : '#B12026', fontWeight : 600}"
lineColor="#B12026"
lineHeight="8rpx"
lineWidth="50rpx"
keyName="areaName"
:current="currentArea"
@click="clickTabs"></uv-tabs>
<view class="tabs">
<view class=""
v-for="(item, index) in tabs"
:key="index"
@click="setSpotGuideIndex(index)"
:class="{act : spotGuideIndex == index}">
{{ item }}
</view>
</view>
<!-- '文化遗产', '找厕所', '找美食', '找民宿' -->
<!-- v-if="spotGuideIndex != 1" -->
<view class="Locations-list">
<view class="main" v-if="spotGuideIndex == 0 && area">
<image
class="main-image"
:src="area.areaImage"
mode="aspectFill"></image>
<view class="info">
<view class="title">
{{ area.areaName }}
</view>
<view class="tips">
{{ spotGuide.length }}个遗产点
</view>
<view class="btn">
<image src="/static/image/tourGuide/a.png"
mode=""></image>
<text class=""
@click="textToSpeech(area.areaBrief)">
语音讲解
</text>
</view>
</view>
<view class="controls">
<!-- <view class="f">
<image src="/static/image/tourGuide/f.png" mode=""></image>
</view> -->
<view class="btn"
@click="show = !show">
<text class="">
{{ show ? '收起' : '展开' }}
</text>
<uv-icon
:name="show ? 'arrow-up' : 'arrow-down'"
size="30rpx"></uv-icon>
</view>
</view>
</view>
<view class="list"
v-if="show && spotGuide.length > 0">
<view class="main"
v-for="(item, index) in spotGuide"
@click.stop="moveTolocation(item.spotLatitude ,item.spotLongitude)"
:key="index">
<image
class="main-image"
:src="item.spotImage"
@click.stop="toUrl(item)"
mode="aspectFill"></image>
<view class="info">
<view class="title">
{{ item.spotName }}
</view>
<view class="tips" v-if="item.distance > 1">
距离您{{ item.distance }}km
</view>
<view class="tips" v-else>
距离您{{ item.distance * 1000 }}m
</view>
</view>
<view class="controls">
<view class="f"
style="transform: scale(1.3);"
v-if="item.categoryId != 0">
<image
:src="`/static/image/tourGuide/${item.categoryId}.png`" mode=""></image>
</view>
<view class="f">
<image
@click.stop="openLocation(item)"
src="/static/image/tourGuide/f.png" mode=""></image>
</view>
<view
v-if="item.categoryId == 0"
class="f">
<image
@click.stop="textToSpeech"
src="/static/image/tourGuide/a.png" mode=""></image>
</view>
</view>
</view>
</view>
<uv-empty
v-else
text="该景区没有哦"
textSize="30rpx"
iconSize="200rpx"
icon="list"></uv-empty>
</view>
<!-- '路径定制', -->
</view>
</template>
<script>
// var plugin = requirePlugin("WechatSI")
// "plugins" : {
// "WechatSI" : {
// "version" : "0.3.1",
// "provider" : "wx069ba97219f66d99"
// }
// }
import { mapState, mapGetters } from 'vuex'
export default {
props : ['spotGuide', 'spotGuideMarkers', 'area'],
data() {
return {
latitude: 23.106574, //纬度
longitude: 113.324587, //经度
scale: 12, //缩放级别
show : true,
context : uni.createInnerAudioContext(),
tabs : ['文化遗产',
// '路径定制',
'找美食'
, '找民宿', '找厕所'],
areaList : [],
currentArea : 0,
}
},
computed : {
// ...mapGetters(['spotGuide', 'spotGuideMarkers']),
...mapState(['position', 'spotGuideIndex', 'areaId']),
},
created() {
this.queryAreaList()
},
methods: {
//点击tab栏
clickTabs({ index, name }) {
this.currentArea = index
this.$store.commit('setAreaId', this.areaList[index].id)
this.$emit('getData')
},
// 修改前选择的菜单,0-景点 1-美食店铺 2-民宿 3-厕所
setSpotGuideIndex(index){
this.$store.commit('setSpotGuideIndex', index)
},
textToSpeech(){
console.log('textToSpeech');
let self = this
// self.context.src = this.$config.baseUrl + '/info/textToAudio?text=' + "你好"
// self.context.play()
// return
plugin.textToSpeech({
lang: "zh_CN",
tts: true,
content: "景德镇市陶阳里御窑景区位于景德镇的城市中心地带,北起瓷都大桥、昌江大道,南至昌江大桥、西至沿江西路,东至莲社路、胜利路。 自宋以来,景德镇先民“沿河建窑,因窑成市”,渐呈“码头—民窑—老街—里弄—御窑”聚落的历史空间和瓷业肌理,形成了世界建筑史上绝无仅有的老城格局,成就了中国“东方瓷国”的盛誉,陶瓷成为了中国走向世界,世界认识中国的文化符号。这里是景德镇历史上制瓷业的中心、原点和高峰,是“一带一路”海上陶瓷之路的零公里起点,是研究皇家御窑制瓷历史文化和景德镇陶瓷技艺,讲好景德镇故事,传播中国声音的“窗口”和“名片”。",
success: function(res) {
self.context.src = res.filename;
self.context.play()
},
fail: function(res) {
console.log("fail tts", res)
}
})
},
//地图点击事件
markertap(e) {
console.log("===你点击了标记点===", e)
let spot = this.spotGuideMarkers[e.markerId]
uni.openLocation({
latitude: spot.latitude,
longitude: spot.longitude,
})
},
openLocation(n){
uni.openLocation({
latitude: n.spotLatitude,
longitude: n.spotLongitude,
})
},
//地图点击事件
callouttap(e) {
console.log('地图点击事件', e)
},
toUrl(item){
if(item.categoryId == 0){
this.$utils.navigateTo(`/pages_order/service/articleDetail?id=${item.id}&type=Inheritance`)
}
},
queryAreaList(){
this.$api('queryAreaList', res => {
if(res.code == 200){
this.areaList = res.result.records
this.areaList.forEach((n, i) => {
if(this.areaId == n.id){
this.currentArea = i
}
})
}
})
},
// 点击按钮将地图中心移动到指定定位点
moveTolocation(latitude, longitude){
let mapObjs = uni.createMapContext('mapId', this)
mapObjs.moveToLocation(
{
latitude,
longitude
},
{
complete: res=>{
console.log('移动完成:', res)
}
})
// this.onRegionChange('',true)
},
}
}
</script>
<style scoped lang="scss">
.Locations{
.tabs{
display: flex;
&>view{
flex: 1;
margin: 20rpx 10rpx;
padding: 20rpx 10rpx;
background-color: #F8E2E2;
color: #C83741;
border-radius: 40rpx;
font-size: 24rpx;
text-align: center;
}
.act{
background-color: #C83741;
color: #fff;
}
}
.Locations-list{
.main{
display: flex;
margin: 20rpx;
.main-image{
width: 150rpx;
height: 150rpx;
border-radius: 20rpx;
}
.info{
margin-left: 20rpx;
.title{
font-size: 30rpx;
font-weight: 900;
}
.tips{
font-size: 24rpx;
color: #999999;
margin-top: 10rpx;
}
}
.controls{
margin-left: auto;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.f{
image{
width: 50rpx;
height: 50rpx;
}
}
}
.btn{
padding: 10rpx;
font-size: 22rpx;
color: $uni-color;
border: 1rpx solid $uni-color;
background-color: #F4E4C4;
display: flex;
justify-content: center;
align-items: center;
margin-top: 10rpx;
border-radius: 15rpx;
image{
width: 25rpx;
height: 25rpx;
}
text{
margin: 0 10rpx;
}
}
}
.list{
padding-left: 40rpx;
.main{
align-items: center;
.main-image{
width: 140rpx;
height: 140rpx;
}
.controls{
flex-direction: row;
.f{
margin: 30rpx;
image{
width: 40rpx;
height: 40rpx;
}
}
}
}
}
}
}
</style>