<template> <view class="bg-gray h-full"> <cu-custom class="main-totextbar bg-main-oil" :isBack="true" bgColor="bg-main-oil"> <block slot="backText"></block> <block slot="content">线路规划</block> </cu-custom> <view class="padding"> <view class="cu-bar padding-tb-sm padding-bottom-sm padding-left-lg flex flex-direction align-between round-small margin-bottom-sm position-re bg-white"> <view class=" flex margin-bottom-sm"> <view class="dot-orange"> <text>始</text> </view> <view class="padding-top-sm padding-left-lg"> <taogewan-combox-remote style="width:100%;" ref='inputs1' :placeholder="origin.name ? origin.name : '请输入起点'" :candidates="origin.tips" @input="orignInput" @select="orignSelect" @clear="clear(1)" /> </view> </view> <view class=" flex"> <view class="dot-red"> <text>终</text> </view> <view class="padding-top-sm padding-left-lg"> <taogewan-combox-remote style="width: 100%;" ref='inputs2' :placeholder="destination.name ? destination.name : '请输入终点'" :candidates="destination.tips" @input="destinationInput" @select="destinationSelect" @clear="clear(2)" /> </view> </view> <!-- <view class="position-ab img_icons" @tap='changeInputs'> <image src="../../static/img/zh_icon.png" style="width:56rpx;height:56rpx;" mode=""></image> </view> --> </view> <button class=" cu-btn margin-bottom-sm block bg-main-oil lg" @tap="gotoRoutePlain()">开始规划路线</button> <!-- 顶部tab --> <view class="ju-container bg-white round-small padding-bottom-lg margin-top-sm bg-container" > <!-- <view class="text-center m-auto line-5 text-black text-bold">附近的油站</view> --> <div style="margin-bottom: 9px;"> <scroll-view scroll-x class="my-bg nav"> <view class="flex bg-white text-center m-auto line-5 text-black text-bold"> <view class="cu-item flex-sub" :class="index==TabCur?'text-orange cur':''" v-for="(item,index) in tabList" :key="index" @tap="tabSelect(index)" :data-id="index"> <view class="text-center m-auto line-5 text-black text-bold padding-top-xs">{{item.title}}</view> </view> </view> </scroll-view> </div> <!-- 显示附件油站 --> <view v-if="TabCur == 0"> <view class="flex w-full margin-left-xs lines" v-for="(item,index) in nearSite" :key="index" style="margin-bottom: 14px;"> <view class="margin-left-sm margin-right-sm " @tap="gotoNearSite(item)"> <image style="width: 70rpx;height: 70rpx;" :src="item.iconPath" mode=""></image> </view> <view style="flex: 1;" class="flex flex-direction " @tap="gotoNearSite(item)"> <text style="font-size: 28rpx;" class="siteName text-black padding-bottom-xs">{{item.siteName}}</text> <text style="font-size: 25rpx;" class="font-sm address">{{item.address}}</text> </view> <view class="margin-top-sm margin-right-lg text-red-deep juli" @tap="gotoSite(item)"> <text class='cuIcon-location'></text> <text >{{item.distance}}KM</text> </view> </view> </view> <!-- 收藏处 --> <view v-if="TabCur == 1"> <view v-for="(item,index) in collectionList" :key="index" class="collection-item solid-bottom flex margin-right-lg"> <uniIcons type="star-filled" size="18" color="#FF8800" @tap="gotoStarNaviate(index)" /> <view class="overflow-line flex align-center text-df margin-left-sm" style="flex: 1" @tap='gotoCollectionMap(item)'> {{item.origin.name}} > {{item.destination.name}} </view> </view> </view> <!-- 历史记录处 --> <view v-if="TabCur == 2"> <view v-for="(item,index) in historyList" :key="index" class="collection-item solid-bottom flex margin-right-lg"> <view @tap="addCollection(index)"> <uniIcons type="star" size="18" :color="isLight(index) ? '#FF8800':''" /> </view> <view class="overflow-line flex align-center text-df margin-left-sm" style="flex: 1" @tap="gotoNaviate(item)"> {{item.origin.name}} > {{item.destination.name}} </view> <view @tap="gotoTrash(index)"> <uniIcons type="trash" size="16" /> </view> </view> </view> </view> </view> </view> </view> </view> </template> <script> import amapFile from '../../../utils/amap-wx.130.js' import taogewanComboxRemote from '@/components/taogewan-combox-remote/taogewan-combox-remote.vue' import oilSiteApi from '@/api/oil-site.js' import uniIcons from '../../../components/uni-icons/uni-icons' export default { components: { taogewanComboxRemote, uniIcons }, data() { return { locationList: [], nearSite: [], origin: { //起点 longitude: '', latitude: '', tips: [], address: '', name:'' }, destination: { //终点 longitude: '', latitude: '', tips: [], address: '' }, scrollLeft: 0, lightStar: [], TabCur: 0, myAmapFun: '', collectionList: [], isNotFirst: false, historyList: [], historys :[], tabList: [{ title: '附近的油站' }, { title: '收藏' }, { title: '搜索记录' }], } }, computed: { }, onShow() { // this.clear(1) // this.clear(2) // let tempOrigin = uni.getStorageSync("origins") // let tempDestination = uni.getStorageSync("destination") // if(tempOrigin){ // this.origin = tempDestination // } // if(tempDestination){ // this.destination = tempDestination // } }, onLoad() { this.myAmapFun = new amapFile.AMapWX({key: '88f3d3a38da95c4dea388978a76d0b81'}); //console.log(this.myAmapFun) var that = this; this.collectionList = uni.getStorageSync("collectionList"); //console.log(this.collectionList) if(this.collectionList == null ){ this.collectionList = [] } this.myAmapFun.getRegeo({ success: function(data){ //console.log('map返回的data',data) //成功回调 that.origin.address = data[0].name that.origin.longitude = data[0].longitude that.origin.latitude = data[0].latitude let data1 ={ currentPage: 1, pageSize: 10, params: { longitude :that.origin.longitude, latitude :that.origin.latitude } } oilSiteApi.getSiteList(data1).then(res => { //console.log(res) if (res.code == 20000) { that.nearSite = res.data.list let userLocation = uni.getStorageSync('userLocation') let list = userLocation.split(','), longitude = list[0], latitude = list[1] //console.log('这里是进入map',that.nearSite) that.nearSite = that.nearSite.map(item=>{ let iconPath; if(item.siteChannel == "XOIL"){ iconPath ='../../static/img/XOIL.png'; }else if(item.siteChannel == "WJY"){ iconPath ='../../static/img/WJY.png'; }else if(item.siteChannel == "LV"){ iconPath ='../../static/img/LV.png'; }else if(item.siteChannel == "TY"){ iconPath ='../../static/img/TY.png'; }else if(item.siteChannel == "YDJY"){ iconPath ='../../static/img/YDJY.png'; }else{ iconPath ='../../static/img/XOIL.png'; } item.distance = item.juli/1000 item.iconPath = iconPath; return item; }) } // oilSiteApi.getByNearPoints(that.origin.longitude,that.origin.latitude).then(res=>{ // //console.log('that.nearSite++++',res) // that.nearSite = res.data // let userLocation = uni.getStorageSync('userLocation') // let list = userLocation.split(','), // longitude = list[0], // latitude = list[1] // //console.log('这里是进入map',that.nearSite) // that.nearSite = that.nearSite.map(item=>{ // let iconPath; // if(item.siteChannel == "XOIL"){ // iconPath ='../../static/img/XOIL.png'; // }else if(item.siteChannel == "WJY"){ // iconPath ='../../static/img/WJY.png'; // }else if(item.siteChannel == "LV"){ // iconPath ='../../static/img/LV.png'; // }else if(item.siteChannel == "TY"){ // iconPath ='../../static/img/TY.png'; // }else if(item.siteChannel == "YDJY"){ // iconPath ='../../static/img/YDJY.png'; // }else{ // iconPath ='../../static/img/XOIL.png'; // } // item.distance = that.distanceCheck(longitude,latitude,item.longitude,item.latitude) // item.iconPath = iconPath; // return item; // }) }) }, fail: function(info){ //失败回调 //console.log(info) } }) }, methods: { gotoSite(item){ //console.log(item) uni.openLocation({ latitude: item.latitude, longitude: item.longitude, success: function () { //console.log('success'); } }); }, //计算坐标点与当前位置的距离 distanceCheck(la1, lo1, la2, lo2) { var La1 = la1 * Math.PI / 180.0; var La2 = la2 * Math.PI / 180.0; var La3 = La1 - La2; var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0; var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2))); s = s * 6378.137;//地球半径 s = Math.round(s * 10000) / 10000/1000; s=s.toFixed(2) //console.log("计算结果",s,'KM'); return s }, changeInputs(){ //console.log() }, // 点击收藏前往收藏路径轨迹 gotoCollectionMap(item){ // //console.log('点击收藏前往路径',item) this.origin = item.origin this.destination = item.destination this.histGoto() }, histGoto(){ let key = '88f3d3a38da95c4dea388978a76d0b81' if(!this.origin.name){ uni.showToast({ title:'请选择起点', icon:'none' }) return } if(!this.destination.name){ uni.showToast({ title:'请选择终点', icon:'none' }) return } // uni.setStorageSync("origins",this.origin) // uni.setStorageSync("destination",this.destination) let originTem = JSON.stringify(this.origin) let destinationTem = JSON.stringify(this.destination) delete originTem.tips delete destinationTem.tips // originTem='' // destinationTem='' uni.removeStorage({ key:'searchInfo', success() { //console.log('删除成功') } }) uni.removeStorage({ key:'ishighSpeedMark', success() { //console.log('删除成功') } }) uni.navigateTo({ url:`/BagStation/pages/routePlainMap/routePlainMap?origin=${originTem}&destination=${destinationTem}` }) this.$refs.inputs1.clearSelector() this.$refs.inputs2.clearSelector() this.clear(1) this.clear(2) this.historyList = [] this.historyList = uni.getStorageSync("historyList") this.collectionList = uni.getStorageSync("collectionList"); }, gotoNearSite(item){ //console.log(item) let itemS = JSON.stringify(item) //console.log(itemS) if (uni.getStorageSync('user')) { uni.navigateTo({ url: `/BagStation/pages/stationDetail/stationDetail?item=${itemS}&&type=map`, fail: (err) => { // //console.log(err) }, success: () => { // //console.log('err') } }) } else { uni.showModal({ title:'请您登录', content:"登录小星加油才可以加油 |˛˙꒳˙)♡", confirmText:'去登陆', success: (res) => { if(res.confirm){ uni.reLaunch({ url:'../../../BagAuth/pages/login/login' }) } } }) } }, isLight(index){ return this.lightStar.filter(item=>item == index) != null }, // 历史记录 点击前往历史记录路径规划 gotoNaviate(item){ //console.log(item) this.origin = item.origin this.destination = item.destination this.histGoto() // setTimeout(()=>{ // let record = this.historyList[index]; // this.origin = record.origin // this.destination = record.destination // //console.log(record) // },250) }, //取消收藏 gotoStarNaviate(index){ this.collectionList.splice(index,1) uni.setStorageSync("collectionList",this.collectionList) uni.showToast({ title: '取消收藏', duration: 1000, icon:'none' }); // setTimeout(()=>{ // let record = this.collectionList[index]; // //console.log('这里是收藏处列表',record) // this.origin = record.origin // this.destination = record.destination // },250) }, // 删除当前历史记录 gotoTrash(index){ this.historyList.splice(index,1) //console.log(this.historyList) uni.setStorageSync("historyList",this.historyList) uni.showToast({ title: '删除成功', duration: 1000, icon:'none' }); }, addCollection(index){ this.collectionList = uni.getStorageSync("collectionList"); //console.log(this.collectionList) if(this.collectionList == null || this.collectionList == '' ){ this.collectionList = [] } // //console.log(this.collectionList) // //console.log('这类似点击收藏',this.collectionList) // //console.log('这里是历史记录点击收藏处',this.historyList[index].destination.name,this.historyList[index].origin.name) let historyList = this.historyList[index] for(let i=0;i<this.collectionList.length;i++){ if(historyList.destination.name == this.collectionList[i].destination.name && historyList.origin.name == this.collectionList[i].origin.name ){ //console.log('这里是打印收藏Listmap', this.collectionList[i]) uni.showToast({ title:'已收藏', icon:'none' }) return false } } // this.collectionList.map((item)=>{ // if(historyList.destination.name == item.destination.name && historyList.origin.name == item.origin.name ){ // //console.log('这里是打印收藏Listmap', item) // uni.showToast({ // title:'已收藏', // icon:'none' // }) // } // return false // }) this.collectionList.push(this.historyList[index]) //console.log( '这里是map循环外的',this.historyList[index]) uni.setStorageSync("collectionList",this.collectionList) uni.showToast({ title: '收藏成功', duration: 1000, icon:'none' }); this.lightStar.push(index); }, // 起点根据起点input值 回显list orignInput(val){ //console.log(val) let _that = this this.myAmapFun.getInputtips({ keywords: val, location: '', success: (data) => { //console.log('检索data',data) if(data && data.tips){ // let itmeList = [] data.tips.forEach((item)=>{ if(item.location.length !=0 ){ if(item.address.length ==0){ let obj = { 'key':item.district, 'value':item.name, 'location': item.location, 'detail': item.district + " "+item.address } itmeList.push(obj) }else{ let obj = { 'key':item.address, 'value':item.name, 'location': item.location, 'detail': item.district + " "+item.address } itmeList.push(obj) } } }) _that.origin.tips = itmeList //console.log('这里是回显内',_that.origin) } }}) //console.log('这里是回显处',_that.origin) }, // 结束点根据结束点input值 回显list destinationInput(val){ this.myAmapFun.getInputtips({ keywords: val, location: '', success: (data) => { if(data && data.tips){ let itemList = [] data.tips.forEach((item)=>{ if(item.location.length !=0){ let obj ={ 'key':item.address, 'value':item.name, 'location': item.location, 'detail': item.district + " "+item.address } itemList.push(obj) } }) this.destination.tips = itemList } }}) }, orignSelect(val){ //console.log('这里是开始点击选中的val',val) this.origin.address = val if(this.destination.address){ let result = this.origin.tips.filter(item=>item.key == val) let result2 = this.destination.tips.filter(item=>item.key == this.destination.address) //console.log('这里是result处',result[0].value) //console.log('这里是result处this.origin',this.origin) this.origin.name = result[0].value let record = { origin: this.origin, destination: this.destination } //console.log('这里是开始地址', result) if(result[0]&&result[0].location) { this.origin.longitude = result[0].location.split(",")[0] this.origin.latitude = result[0].location.split(",")[1] //console.log('这里是开始的地址longitude',this.origin.longitude) //console.log('这里是开始的地址latitude',this.origin.latitude) }else{ uni.showToast({ title:"提示请输入具体地址", icon:'none' }) return } this.historys=record // this.historyList = uni.getStorageSync("historyList") // if(this.historyList == null || this.historyList == ''){ // this.historyList = [] // } // this.historyList.push(record) // uni.setStorageSync("historyList",this.historyList) //console.log('这里是historyList',this.historyList) } }, destinationSelect(val){ //console.log('这里是',val) this.destination.address = val //console.log(this.destination ) //console.log('this.destination结束点回显处 ',this.destination ) if(this.origin.address){ //console.log('这里是进入address') let tempOriginAddress=null; let result = null; // if(!this.isNotFirst){ //console.log('this.isNotFirst 为flase') this.isNotFirst = true; tempOriginAddress = this.origin.address //console.log("监控1") //console.log(tempOriginAddress) // }else{ // //console.log('这里是结束result处',result) // //console.log('这里是结束result处this.origin',this.origin) // //console.log('这里是结束地址', result) // if(result[0]&&result[0].location) { // // this.origin.longitude = result[0].location.split(",")[0] // // this.origin.latitude = result[0].location.split(",")[1] // result = this.origin.tips.filter(item=>item.key == this.origin.address) // tempOriginAddress = result[0].value // this.origin.longitude = result[0].location.split(",")[0] // this.origin.latitude = result[0].location.split(",")[1] // //console.log('这里是结束地址longitude',this.origin.longitude) // //console.log('这里是结束地址latitude',this.origin.latitude) // //console.log("监控2") // //console.log(result) // }else{ // uni.showToast({ // title:"提示请输入具体地址", // icon:'none' // }) // return // } // } let result2 = this.destination.tips.filter(item=>item.key == val) if(result2[0] != null){ this.destination.longitude = result2[0].location.split(",")[0] this.destination.latitude = result2[0].location.split(",")[1] this.destination.name = result2[0].value } if(tempOriginAddress == null){ //console.log('+++++',result) this.origin.name = result[0].value }else{ /* 第一次走这里 */ let rrr = this.origin.tips.filter(item=>item.key == tempOriginAddress) //console.log("走这里") if(rrr && rrr[0]){ //console.log('这里是rrr',rrr) this.origin.name=rrr[0].value this.origin.longitude = rrr[0].location.split(",")[0] this.origin.latitude = rrr[0].location.split(",")[1] //console.log(this.origin) //console.log(rrr) } } let record = { origin: this.origin, destination: this.destination } //console.log('++++++record',record) this.historys=record //console.log(this.historys) // this.historyList = uni.getStorageSync("historyList") if(this.historyList == null || this.historyList == ''){ this.historyList = [] } // this.historyList.push(record) // uni.setStorageSync("historyList",this.historyList) } }, gotoRoutePlain(){ //console.log('+++----++++****++++',destinationTem) // 获取起点 终点定位 let key = '88f3d3a38da95c4dea388978a76d0b81' //console.log('这里起点',this.origin.name,typeof(this.origin.name)) //console.log('这里是终点',this.destination.name,typeof(this.destination.name)) if(!this.origin.name){ uni.showToast({ title:'请选择起点', icon:'none' }) this.$refs.inputs1.clearSelector() this.clear(1) return } if(!this.destination.name){ uni.showToast({ title:'请选择终点', icon:'none' }) this.$refs.inputs2.clearSelector() this.clear(2) return } uni.removeStorage({ key:'searchInfo', success() { //console.log('删除成功') } }) uni.removeStorage({ key:'ishighSpeedMark', success() { //console.log('删除成功') } }) this.historyList = uni.getStorageSync('historyList') let record = { origin: this.historys.origin, destination: this.historys.destination } if(this.historyList == null || this.historyList == ''){ this.historyList = [] } this.historyList.push(record) uni.setStorageSync("historyList",this.historyList) // uni.setStorageSync("origins",this.origin) // uni.setStorageSync("destination",this.destination) let originTem = JSON.stringify(this.origin) let destinationTem = JSON.stringify(this.destination) delete originTem.tips delete destinationTem.tips uni.navigateTo({ url:`/BagStation/pages/routePlainMap/routePlainMap?origin=${originTem}&destination=${destinationTem}` }) // originTem='' // destinationTem='' this.$refs.inputs1.clearSelector() this.$refs.inputs2.clearSelector() this.clear(1) this.clear(2) this.historyList = [] this.historyList = uni.getStorageSync("historyList") this.collectionList = uni.getStorageSync("collectionList"); //console.log('跳转后---',) }, tabSelect(index) { this.TabCur = index this.historyList = uni.getStorageSync("historyList") }, clear(index){ if(index == 1){ this.origin.name='' this.origin.tips = [] this.origin.latitude = '' this.origin.longitude = '' this.origin.address = '' this.collectionList = [] this.historyList = [] this.historyList = uni.getStorageSync("historyList") this.collectionList = uni.getStorageSync("collectionList"); }else{ this.destination.name='' this.destination.tips = [] this.destination.latitude = '' this.destination.longitude = '' this.destination.address = '' this.collectionList = [] this.historyList = [] this.historyList = uni.getStorageSync("historyList") this.collectionList = uni.getStorageSync("collectionList"); } } } } </script> <style > .h-full{ height: 100%; } .round-small{ border-radius: 8rpx; } .dot-orange{ width: 65rpx; height: 65rpx; background-color: #FF8800; color: white; border-radius: 50%; text-align: center; line-height: 1.9; font-size: 35rpx; } .dot-red{ width: 65rpx; height: 65rpx; background-color: #FF4D4D; color: white; border-radius: 50%; text-align: center; line-height: 1.9; font-size: 35rpx; } .align-between{ align-items: flex-start; } .uni-combox{ width: 139%!important; } .m-auto{ margin: auto; } .w-full{ } .line-5{ line-height: 2.7; margin-bottom: 9rpx; } .font-sm{ font-size: 20rpx; color: #666666; font-weight: 370; } .text-red-deep{ color: #FE0505; } .address{ width: 50vw; white-space: nowrap; text-overflow:ellipsis; overflow:hidden; } .siteName{ width: 50vw; white-space: nowrap; text-overflow:ellipsis; overflow:hidden; } .juli-container{ position: relative; } .juli{ position: absolute; right: 15px; } .text-orange, .line-orange, .lines-orange { color: #f37b1d; } .cur { background-color: white; } .collection-item{ padding: 12rpx 7rpx; margin-left: 12px; line-height: 2; } .overflow-line{ white-space: nowrap; text-overflow:ellipsis; overflow:hidden; } .bg-container{ height: 73vh; background-color: white; /* overflow: scroll; */ } .lines{ padding-bottom: 5px; border-bottom: 1px solid #EEEEEE; } .img_icons{ right: 4%; bottom: 30%; } </style>