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.
		
		
		
		
		
			
		
			
				
					
					
						
							358 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							358 lines
						
					
					
						
							11 KiB
						
					
					
				<template> | 
						|
<view> | 
						|
  <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> | 
						|
    <view class="cu-bar search bg-white"> | 
						|
      <view class="search-form round"> | 
						|
        <text class="cuIcon-search"></text> | 
						|
        <input confirm-type="search" @input="onInput" @confirm="onSearch" v-model="siteName" :adjust-position="false" type="text" placeholder="加油站名称" /> | 
						|
 | 
						|
      </view> | 
						|
      <view class="action" @tap="loadMore"> | 
						|
        更多 | 
						|
      </view> | 
						|
    </view> | 
						|
    <view class="page-body"> | 
						|
      <view class="page-section page-section-gap"> | 
						|
        <map style="width: 100%; height:100vh;" :controls="controls" :polyline='polyline' :scale="scale" :latitude="latitude" @labeltap='makerTap' @markertap="makerTap" :longitude="longitude" :markers="covers"> | 
						|
        </map> | 
						|
      </view> | 
						|
    </view> | 
						|
 | 
						|
  </view> | 
						|
  <view class="cu-modal  bottom-modal" :class="showSite"> | 
						|
    <view class="cu-dialog" @tap.stop=""> | 
						|
      <view class="cu-bar bg-white justify-end"> | 
						|
        <view class="content"> {{siteInfo.siteName?siteInfo.siteName:'油站名称'}}</view> | 
						|
        <view class="action" @tap="showSite=''"> | 
						|
          <text class="cuIcon-close text-red"></text> | 
						|
        </view> | 
						|
      </view> | 
						|
      <view class="flex-sub"> | 
						|
        <view class="cu-list menu  padding-sm  radius my-shadow  bg-white yu-card-xuan"> | 
						|
          <view class="cu-item "> | 
						|
            <view class="content" @tap="toDetail(siteInfo)"> | 
						|
              <view class="strong padding-bottom-xs"> | 
						|
                {{siteInfo.siteName?siteInfo.siteName:'油站名称'}} | 
						|
              </view> | 
						|
              <view class="text-gray  flex"> | 
						|
                <view class="text-bold  yellow-oil; text-xl padding-right-xs"> | 
						|
                  {{siteInfo.oilProductCode}} | 
						|
                </view> | 
						|
                <view class="oil-main-color text-xl text-bold padding-right-xs"> | 
						|
 | 
						|
                  ¥{{siteInfo.sitePrice|moneyFormat}} | 
						|
 | 
						|
                </view> | 
						|
                <view class=""> | 
						|
                  <text class="cu-tag   oil-tag radius  text-xs" v-if="siteInfo.oilSitePrice - siteInfo.sitePrice>0">省¥{{(siteInfo.oilSitePrice - siteInfo.sitePrice)|moneyFormat}}</text> | 
						|
                </view> | 
						|
 | 
						|
                <view class="text-cut padding-left-sm text-lg"> | 
						|
 | 
						|
                  <text class="text-delete color-333 text-sm padding-right-xs"> | 
						|
 | 
						|
                    ¥{{siteInfo.oilSitePrice|moneyFormat}}/L | 
						|
 | 
						|
                  </text> | 
						|
 | 
						|
                  <!-- 	<my-icon iconName="¥.png" class="padding-right-xs icon-rectangle"></my-icon> | 
						|
 | 
						|
<my-icon iconName="f.png" class="padding-right-xs "></my-icon> --> | 
						|
 | 
						|
                </view> | 
						|
 | 
						|
              </view> | 
						|
              <view class="font-12 text-left color-999 site-label text-cut"> | 
						|
                {{siteInfo.address?siteInfo.siteName:'油站地址'}} | 
						|
              </view> | 
						|
            </view> | 
						|
            <view class="action " @tap="openMap"> | 
						|
              <view class="oil-main-color"> | 
						|
                <my-icon iconName="sy-der-icon.png" class="padding-right-xs text-sm"></my-icon> | 
						|
                {{siteInfo.juli|distanceFilter}} | 
						|
              </view> | 
						|
            </view> | 
						|
          </view> | 
						|
        </view> | 
						|
      </view> | 
						|
    </view> | 
						|
  </view> | 
						|
</view> | 
						|
</template> | 
						|
 | 
						|
<script> | 
						|
import oilSiteApi from '@/api/oil-site.js' | 
						|
 | 
						|
export default { | 
						|
  data() { | 
						|
    return { | 
						|
      siteInfo: {}, | 
						|
      showSite: '', | 
						|
      imgUrl: this.global.imgURL, | 
						|
      siteList: [], | 
						|
      InputBottom: 0, | 
						|
      show: false, | 
						|
      siteCount: 1, | 
						|
      currentPage: 1, | 
						|
      isLoadMore: false, //是否加载中 | 
						|
      baseDriver: uni.getStorageSync('baseDriver'), | 
						|
      selLocation: {}, | 
						|
      title: 'map', | 
						|
      location: uni.getStorageSync('location'), | 
						|
      latitude: 39.909, | 
						|
      longitude: 116.39742, | 
						|
      covers: [], | 
						|
      fillColor: '#ffd75e', | 
						|
      borderColor: '#12A1DD', | 
						|
      scale: 12, //地图层级 | 
						|
      controls: [{ //在地图上显示控件,控件不随着地图移动 | 
						|
        id: 1, //控件id | 
						|
        position: { //控件在地图的位置 | 
						|
          left: 0, | 
						|
          top: 15, | 
						|
          width: 50, | 
						|
          height: 50 | 
						|
        }, | 
						|
      }], | 
						|
      polyline: [{ //指定一系列坐标点,从数组第一项连线至最后一项 | 
						|
        points: [], | 
						|
        color: "#0000AA", //线的颜色 | 
						|
        width: 2, //线的宽度 | 
						|
        dottedLine: true, //是否虚线 | 
						|
        arrowLine: true, //带箭头的线 开发者工具暂不支持该属性 | 
						|
      }], | 
						|
 | 
						|
    }; | 
						|
  }, | 
						|
  onLoad() { | 
						|
    let that = this | 
						|
    this.getSiteList() | 
						|
  }, | 
						|
  filters: { | 
						|
    distanceFilter(value) { | 
						|
      if (value) { | 
						|
        return value > 1000 ? ((value / 1000).toFixed(2) + 'km') : (value + 'm') | 
						|
      } | 
						|
    }, | 
						|
    moneyFormat(value) { | 
						|
      if (value) { | 
						|
        return value.toFixed(2) | 
						|
      } else { | 
						|
        return '0.00' | 
						|
      } | 
						|
    } | 
						|
  }, | 
						|
  methods: { | 
						|
    getSiteInfo(id) { | 
						|
      let data2 = { | 
						|
        ...uni.getStorageSync('location'), | 
						|
        siteId: id | 
						|
      } | 
						|
      oilSiteApi.getSiteDetails(data2).then(res => { | 
						|
        if (res.code == 20000) { | 
						|
          this.siteInfo = res.data | 
						|
        } | 
						|
      }) | 
						|
    }, | 
						|
    openMap() { | 
						|
      let that = this | 
						|
      uni.openLocation({ | 
						|
        latitude: this.siteInfo.latitude, | 
						|
        longitude: this.siteInfo.longitude, | 
						|
        name: this.siteInfo.siteName, | 
						|
        address: this.siteInfo.address, | 
						|
        scale: 12, | 
						|
        success: function () { | 
						|
          // // console.log('success') | 
						|
        }, | 
						|
        fail: (error) => { | 
						|
          // // console.log('error') | 
						|
          // // console.log(error) | 
						|
        }, | 
						|
        complete: () => { | 
						|
          // // console.log('made') | 
						|
        }, | 
						|
 | 
						|
      }) | 
						|
 | 
						|
      var map = uni.createMapContext('map') | 
						|
      map.moveToLocation() | 
						|
    }, | 
						|
    makerTap(e) { | 
						|
      // // console.log(e) | 
						|
      // // console.log(e.detail) | 
						|
      this.showSite = '' | 
						|
      if (e.detail.markerId !== 0) { | 
						|
        const index = this.siteList.findIndex(s => s.markerId === e.detail.markerId) | 
						|
        // // console.log(index) | 
						|
        this.showSite = 'show' | 
						|
        this.siteInfo = this.siteList[index] | 
						|
      } | 
						|
    }, | 
						|
    refreshLocation() { | 
						|
      // uni.getLocation({ | 
						|
      //   type: 'wgs84', | 
						|
      //   success: (res) => { | 
						|
      //     uni.setStorageSync('location', res) | 
						|
      //     this.location = res | 
						|
      //     this.addLocationCurrent() | 
						|
 | 
						|
      //   } | 
						|
      // }); | 
						|
    }, | 
						|
    addLocationCurrent() { | 
						|
      this.covers.push({ | 
						|
        id: 0, | 
						|
        latitude: this.location.latitude, //纬度 | 
						|
        longitude: this.location.longitude, //经度 | 
						|
        label: { //为标记点旁边增加标签 | 
						|
          content: "我的位置", //文本 | 
						|
          color: '#12A1DD', //文本颜色 | 
						|
          anchorX: 5, //label的坐标,原点是 marker 对应的经纬度 | 
						|
          anchorY: -10, //label的坐标,原点是 marker 对应的经纬度  | 
						|
          bgColor: '#fff', //背景色 | 
						|
          padding: 5, //文本边缘留白 | 
						|
          borderWidth: 1, //边框宽度 | 
						|
          borderRadius: 10, | 
						|
          borderColor: '#12A1DD', //边框颜色		          textAlign: 'right' //文本对齐方式。 | 
						|
        } | 
						|
      }) | 
						|
    }, | 
						|
    loadMore() { | 
						|
      this.getSiteList() | 
						|
    }, | 
						|
    getSiteList() { | 
						|
      this.refreshLocation() | 
						|
 | 
						|
      let data1 = { | 
						|
        currentPage: this.currentPage, | 
						|
        pageSize: 20, | 
						|
        params: { //类型:Object  必有字段  备注:// 筛选对象 | 
						|
          sort: "juli", //类型:String  必有字段  备注:// 智能排序 ( price:价格最低 juli:距离最近 ) 默认距离排序 | 
						|
          siteName: this.siteName, | 
						|
          ...uni.getStorageSync('location'), | 
						|
          ...this.filterData | 
						|
          // siteBrand: "", //   备注:// 石油品牌 ( 1-中国石油 2-中国石化 3-壳牌 4-民营 5-中海油 6-京博 7-中化石油 8-其他 ) | 
						|
          // channelCode: "", //   备注:// 渠道编码 ( OIL:星油 WJY:万金油 LV:老吕(找油网) TY:团油 YDJY:一点加油(壳牌)) | 
						|
          // oilProductCode: "" //   备注:// 油号选择 ( 0# 92# 92#) | 
						|
        } | 
						|
 | 
						|
      } | 
						|
      oilSiteApi.getSiteList(data1).then(res => { | 
						|
        if (res.code == 20000) { | 
						|
          const tmp = res.data.list | 
						|
          tmp.forEach(e => { | 
						|
            e.markerId = this.siteCount++ | 
						|
          }) | 
						|
          this.siteList = this.siteList.concat(tmp) | 
						|
          if (this.siteList.length != 0) { | 
						|
            this.latitude = this.siteList[0].latitude | 
						|
            this.longitude = this.siteList[0].longitude | 
						|
          } else { | 
						|
            uni.showToast({ | 
						|
              title: '没有查到相关油站', | 
						|
              icon: 'none' | 
						|
            }) | 
						|
            this.latitude = this.location.latitude | 
						|
            this.longitude = this.location.longitude | 
						|
          } | 
						|
 | 
						|
          tmp.forEach(item => { | 
						|
            this.addCover(item) | 
						|
          }) | 
						|
          if (tmp.length == 0) { //判断接口返回数据量小于请求数据量,则表示此为最后一页 | 
						|
            // this.$emit('changeLoad', 'nomore', true) | 
						|
            uni.showToast({ | 
						|
              title: '没有更多油站了', | 
						|
              icon: 'none' | 
						|
            }) | 
						|
          } else { | 
						|
            this.currentPage++ | 
						|
            // this.$emit('changeLoad', 'load', false) | 
						|
 | 
						|
          } | 
						|
        } | 
						|
      }) | 
						|
    }, | 
						|
    onInput() { | 
						|
      setTimeout(() => { | 
						|
        this.currentPage = 1 | 
						|
        this.siteList = [] | 
						|
        this.covers = [] | 
						|
        this.getSiteList() | 
						|
      }, 100) | 
						|
    }, | 
						|
    onSearch() { | 
						|
      this.currentPage = 1 | 
						|
      this.siteList = [] | 
						|
      this.covers = [] | 
						|
      this.getSiteList() | 
						|
    }, | 
						|
	toDetail(item) { | 
						|
			let itemS = JSON.stringify(item) | 
						|
			console.log('++++++') | 
						|
			console.log(itemS) | 
						|
			if (uni.getStorageSync('user')) { | 
						|
				uni.navigateTo({ | 
						|
					url: `/BagStation/pages/stationDetail/stationDetail?item=${itemS}`, | 
						|
					fail: (err) => { | 
						|
						// console.log(err) | 
						|
					}, | 
						|
					success: () => { | 
						|
						// console.log('err') | 
						|
					} | 
						|
				}) | 
						|
		  } | 
						|
    }, | 
						|
    addCover(site) { | 
						|
      // 渠道编码 ( XOIL:星油 WJY:万金油 LV:老吕(找油网) TY:团油 YDJY:一点加油(壳牌)) | 
						|
      this.covers.push({ | 
						|
        id: site.markerId, | 
						|
        latitude: site.latitude, //纬度 | 
						|
        longitude: site.longitude, //经度 | 
						|
        // iconPath: this.imgUrl + 'map-' + site.channelCode + '.png', | 
						|
        iconPath: this.imgUrl + 'map-' +'XOIL' + '.png', | 
						|
        width: 100, | 
						|
        height: 50, | 
						|
        title: site.siteName, //标注点名 | 
						|
        label: { //为标记点旁边增加标签 | 
						|
          content: '¥' + site.sitePrice, //文本 | 
						|
          // color: '#F76350', //文本颜色 | 
						|
          color: '#fff', //文本颜色 | 
						|
          fontSize: '16', | 
						|
		  textAlign:'center', | 
						|
          anchorX: -5, //label的坐标,原点是 marker 对应的经纬度 | 
						|
          anchorY: -45, //label的坐标,原点是 marker 对应的经纬度  | 
						|
          // 		    x:39.909,//这个组件微信在1.2.0以后就废弃了 | 
						|
          // 		    y:116.39742, | 
						|
          bgColor: '#FF0000', //背景色 | 
						|
          borderRadius: 10, | 
						|
          // borderWidth: 1, //边框宽度 | 
						|
          // borderColor: '#D84C29', //边框颜色		          textAlign: 'center' //文本对齐方式。 | 
						|
        }, | 
						|
        callout: { //自定义标记点上方的气泡窗口 点击有效 | 
						|
          content: site.siteName, | 
						|
          color: '#F76350', | 
						|
          fontSize: 12, | 
						|
          borderRadius: 5, | 
						|
        }, | 
						|
        // 		 anchor:{//经纬度在标注图标的锚点,默认底边中点 | 
						|
        // 		 x:5, | 
						|
        // 		 y:1, | 
						|
        // 		  } | 
						|
      }) | 
						|
    } | 
						|
  } | 
						|
} | 
						|
</script> | 
						|
 | 
						|
<style scoped> | 
						|
.cu-modal { | 
						|
  background-color: transparent; | 
						|
  top: initial; | 
						|
} | 
						|
</style>
 | 
						|
 |