|
@@ -1,420 +1,530 @@
|
|
|
<template>
|
|
|
- <view class="parking">
|
|
|
- <view class="loading" v-show="loading">
|
|
|
- <u-loadmore status="loading" icon-type="flower" :load-text="{ loading: '正在定位中...' }" />
|
|
|
- </view>
|
|
|
- <view class="parking-header">
|
|
|
- <u-search placeholder="搜索停车点" v-model="searchContent" :show-action="false" @change="searchInputChange"> </u-search>
|
|
|
- <u-icon
|
|
|
- v-if="!searchContent && isShowSearchParking == false"
|
|
|
- class="icon"
|
|
|
- name="list"
|
|
|
- size="44"
|
|
|
- color="#ffffff"
|
|
|
- placeholder-color="#B5B5B5"
|
|
|
- search-icon-color="#B3B3B3"
|
|
|
- @click="listIconClick"
|
|
|
- >
|
|
|
- </u-icon>
|
|
|
- <u-icon
|
|
|
- v-if="searchContent || isShowSearchParking == true"
|
|
|
- class="icon"
|
|
|
- name="close"
|
|
|
- size="36"
|
|
|
- color="#ffffff"
|
|
|
- placeholder-color="#B5B5B5"
|
|
|
- search-icon-color="#B3B3B3"
|
|
|
- @click="clearSearchInput"
|
|
|
- >
|
|
|
- </u-icon>
|
|
|
- </view>
|
|
|
- <view class="parking-map">
|
|
|
- <map
|
|
|
- id="pagemap"
|
|
|
- style="width: 100%; height: calc(100vh - 240rpx)"
|
|
|
- :show-location="true"
|
|
|
- :latitude="latitude"
|
|
|
- :longitude="longitude"
|
|
|
- @markertap="markertap"
|
|
|
- :enable-traffic="true"
|
|
|
- :enable-zoom="true"
|
|
|
- :scale="scale"
|
|
|
- :markers="covers"
|
|
|
- ></map>
|
|
|
- </view>
|
|
|
- <view class="address-box" :class="nearParkingObj.type == 'down' ? 'address-down' : 'address-up'" v-if="nearParkingFlag">
|
|
|
- <view class="address-box-down-icon" :class="{ 'up-icon': nearParkingObj.type === 'up' }" @click="pullDown"> </view>
|
|
|
- <scroll-view scroll-y class="address-box-scroll" :style="{ height: `calc(${nearParkingObj.height} - 76rpx)` }">
|
|
|
- <view class="address-box-list">
|
|
|
- <view class="address-box-list-item" v-for="(item, index) in nearParkingList" :key="index" @click="positionAddress(item)">
|
|
|
- <view class="abli-header">
|
|
|
- <view class="abli-header-title"
|
|
|
- >{{ item.roadName }} <text class="abli-header-subtitle">{{ item.areaName }}</text></view
|
|
|
- >
|
|
|
- <!-- <view class="abli-header-subtitle">{{ item.areaName }}</view> -->
|
|
|
- <view class="abli-header-surplus">
|
|
|
- <view class="abli-header-surplus-left"
|
|
|
- >余位<text>{{ item.spaceIdle }}</text></view
|
|
|
- >
|
|
|
- <view class="abli-header-surplus-right" :class="{ disabled: !item.monthAmount }" @click.stop="createMonth(item)">办理包月</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <view class="abli-bottom">
|
|
|
- <view class="abli-bottom-left">
|
|
|
- <view class="abli-bottom-left-navigation" @click.stop="navigation(item.latitude, item.longitude, item.areaName)">导航</view>
|
|
|
- <view class="abli-bottom-left-distance">{{ item.distance | kmUnit }}</view>
|
|
|
- </view>
|
|
|
- <view class="abli-bottom-right" @click.stop="lookParkingRule(item)">收费规则</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </scroll-view>
|
|
|
- </view>
|
|
|
- <view class="parking-address-list" v-if="isShowSearchParking">
|
|
|
- <view class="parking-address-list-item" v-for="(item, index) in searchParkingList" :key="index + 's'" @click="clickSearchParking(item)">
|
|
|
- <view class="pali-left">
|
|
|
- <view>{{ item.roadName }}</view>
|
|
|
- <view>{{ item.areaName }}</view>
|
|
|
- </view>
|
|
|
- <view class="pali-right">
|
|
|
- <image src="../../static/img/distance-icon.png" mode="" @click.stop="navigation(item.latitude, item.longitude, item.areaName)"></image>
|
|
|
- <view>路线</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <u-select v-model="mapSelect" :list="mapSelectList" @confirm="mapSelectConfirm"></u-select>
|
|
|
- <map id="map" hidden="true"></map>
|
|
|
- <u-toast ref="uToast" />
|
|
|
- </view>
|
|
|
+ <view class="parking">
|
|
|
+ <view class="loading" v-show="loading">
|
|
|
+ <u-loadmore status="loading" icon-type="flower" :load-text="{ loading: '正在定位中...' }" />
|
|
|
+ </view>
|
|
|
+ <view class="parking-header">
|
|
|
+ <u-search placeholder="搜索停车点" v-model="searchContent" :show-action="false" @change="searchInputChange">
|
|
|
+ </u-search>
|
|
|
+ <u-icon v-if="!searchContent && isShowSearchParking == false" class="icon" name="list" size="44"
|
|
|
+ color="#ffffff" placeholder-color="#B5B5B5" search-icon-color="#B3B3B3" @click="listIconClick">
|
|
|
+ </u-icon>
|
|
|
+ <u-icon v-if="searchContent || isShowSearchParking == true" class="icon" name="close" size="36"
|
|
|
+ color="#ffffff" placeholder-color="#B5B5B5" search-icon-color="#B3B3B3" @click="clearSearchInput">
|
|
|
+ </u-icon>
|
|
|
+ </view>
|
|
|
+ <view class="parking-map">
|
|
|
+ <map id="pagemap" style="width: 100%; height: calc(100vh - 240rpx)" :show-location="true"
|
|
|
+ :latitude="latitude" :longitude="longitude" @markertap="markertap" :enable-traffic="true"
|
|
|
+ :enable-zoom="true" :scale="scale" :markers="covers"></map>
|
|
|
+ </view>
|
|
|
+ <view class="address-box" :class="nearParkingObj.type == 'down' ? 'address-down' : 'address-up'"
|
|
|
+ v-if="nearParkingFlag">
|
|
|
+ <view class="address-box-down-icon" :class="{ 'up-icon': nearParkingObj.type === 'up' }" @click="pullDown">
|
|
|
+ </view>
|
|
|
+ <!-- tab -->
|
|
|
+ <u-tabs :list="tabObj.tabList" :is-scroll="false" :current="tabObj.current" bg-color="transparent"
|
|
|
+ @change="tabChange"></u-tabs>
|
|
|
+ <scroll-view scroll-y class="address-box-scroll"
|
|
|
+ :style="{ height: `calc(${nearParkingObj.height} - 164rpx)` }">
|
|
|
+ <view class="address-box-list">
|
|
|
+ <view class="address-box-list-item" v-for="(item, index) in nearParkingList" :key="index"
|
|
|
+ @click="positionAddress(item)">
|
|
|
+ <view class="abli-header">
|
|
|
+ <view class="abli-header-title">{{ item.roadName || item.parkName }} <text
|
|
|
+ class="abli-header-subtitle">{{ item.areaName }}</text></view>
|
|
|
+ <view class="abli-header-surplus">
|
|
|
+ <view class="abli-header-surplus-left">
|
|
|
+ 余位<text>{{ item.spaceIdle || item.surplusPlace }}</text></view>
|
|
|
+ <template v-if="tabObj.current === 1">
|
|
|
+ <view class="abli-header-surplus-right" @click.stop="createMonth(item)">办理包月</view>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <view class="abli-header-surplus-right" :class="{ disabled: !item.monthAmount }"
|
|
|
+ @click.stop="createMonth(item)">办理包月</view>
|
|
|
+ </template>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="abli-bottom">
|
|
|
+ <view class="abli-bottom-left">
|
|
|
+ <view class="abli-bottom-left-navigation"
|
|
|
+ @click.stop="navigation(item.latitude, item.longitude, item.areaName)">导航</view>
|
|
|
+ <view class="abli-bottom-left-distance">{{ item.distance | kmUnit }}</view>
|
|
|
+ </view>
|
|
|
+ <view class="abli-bottom-right" @click.stop="lookParkingRule(item)">收费规则</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+ <view class="parking-address-list" v-if="isShowSearchParking">
|
|
|
+ <view class="parking-address-list-item" v-for="(item, index) in searchParkingList" :key="index + 's'"
|
|
|
+ @click="clickSearchParking(item)">
|
|
|
+ <view class="pali-left">
|
|
|
+ <view>{{ item.roadName || item.parkName }}</view>
|
|
|
+ <view>{{ item.areaName }}</view>
|
|
|
+ </view>
|
|
|
+ <view class="pali-right">
|
|
|
+ <image src="../../static/img/distance-icon.png" mode=""
|
|
|
+ @click.stop="navigation(item.latitude, item.longitude, item.areaName)"></image>
|
|
|
+ <view>路线</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <u-select v-model="mapSelect" :list="mapSelectList" @confirm="mapSelectConfirm"></u-select>
|
|
|
+ <map id="map" hidden="true"></map>
|
|
|
+ <u-toast ref="uToast" />
|
|
|
+ </view>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { qqMapTransBMap } from '@/utils/mapTrans.js';
|
|
|
-export default {
|
|
|
- data() {
|
|
|
- return {
|
|
|
- searchContent: '',
|
|
|
- page_map: '',
|
|
|
- loading: false,
|
|
|
- latitude: 26.64969,
|
|
|
- longitude: 106.636453,
|
|
|
- scale: 16,
|
|
|
- currentPosition: {
|
|
|
- latitude: 26.64969,
|
|
|
- longitude: 106.636453
|
|
|
- },
|
|
|
- covers: [],
|
|
|
- // 附近列表是否显示
|
|
|
- nearParkingFlag: false,
|
|
|
- // 轮播选中
|
|
|
- swiperCurrent: 0,
|
|
|
- // 附近停车列表
|
|
|
- nearParkingList: [],
|
|
|
- // 是否显示停车场列表
|
|
|
- isShowSearchParking: false,
|
|
|
- // 搜索停车场列表
|
|
|
- searchParkingList: [],
|
|
|
- // 显示单个停车场数据
|
|
|
- isShowParkingDetail: false,
|
|
|
- // 单个停车场数据
|
|
|
- parkingDetailData: {},
|
|
|
- mapSelect: false,
|
|
|
- mapSelectList: [
|
|
|
- {
|
|
|
- value: '1',
|
|
|
- label: '腾讯地图'
|
|
|
- },
|
|
|
- {
|
|
|
- value: '2',
|
|
|
- label: '百度地图'
|
|
|
- },
|
|
|
- {
|
|
|
- value: '3',
|
|
|
- label: '高德地图'
|
|
|
- }
|
|
|
- ],
|
|
|
- // 选中位置经纬度
|
|
|
- currentPositionHover: {},
|
|
|
- nearParkingObj: {
|
|
|
- height: '60vh',
|
|
|
- type: 'down'
|
|
|
- }
|
|
|
- };
|
|
|
- },
|
|
|
- onLoad(page) {
|
|
|
- this.getLocation();
|
|
|
- if (page.keyword) {
|
|
|
- this.searchContent = page.keyword;
|
|
|
- this.searchInputChange(page.keyword);
|
|
|
- }
|
|
|
- },
|
|
|
- methods: {
|
|
|
- /**
|
|
|
- * 查询输入框发生变化
|
|
|
- * @date 2021-08-10
|
|
|
- * @param {String} value
|
|
|
- */
|
|
|
- searchInputChange(value) {
|
|
|
- // 为空时关闭搜索列表
|
|
|
- if (value === '') {
|
|
|
- this.isShowSearchParking = false;
|
|
|
- }
|
|
|
- this.isShowParkingDetail = false;
|
|
|
- this.getNearRoadsl();
|
|
|
- },
|
|
|
- /**
|
|
|
- * 获取定位
|
|
|
- * @date 2021-08-10
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- getLocation() {
|
|
|
- const that = this;
|
|
|
- console.log('请求定位');
|
|
|
- // that.getNearRoadsl();
|
|
|
- that.loading = true;
|
|
|
- if (navigator.geolocation) {
|
|
|
- // 判断是否有这个对象
|
|
|
- navigator.geolocation.getCurrentPosition(function (pos) {
|
|
|
- console.log('经度:' + pos.coords.longitude + '纬度:' + pos.coords.latitude);
|
|
|
- that.latitude = pos.coords.latitude;
|
|
|
- that.longitude = pos.coords.longitude;
|
|
|
- that.currentPosition.latitude = pos.coords.latitude;
|
|
|
- that.currentPosition.longitude = pos.coords.longitude;
|
|
|
- that.loading = false;
|
|
|
- that.getNearRoadsl();
|
|
|
- });
|
|
|
- } else {
|
|
|
- this.$refs.uToast.show({
|
|
|
- title: '当前系统不支持GPS API',
|
|
|
- type: 'error'
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- /**
|
|
|
- * 导航
|
|
|
- * @date 2021-08-10
|
|
|
- * @param {Number} latitude
|
|
|
- * @param {Number} longitude
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- navigation(latitude, longitude, areaName) {
|
|
|
- this.currentPositionHover = {
|
|
|
- latitude,
|
|
|
- longitude,
|
|
|
- areaName
|
|
|
- };
|
|
|
- this.mapSelect = true;
|
|
|
- },
|
|
|
- // 多地图选择
|
|
|
- mapSelectConfirm(item) {
|
|
|
- const name = item[0].label;
|
|
|
- switch (name) {
|
|
|
- case '腾讯地图':
|
|
|
- location.href = `https://apis.map.qq.com/uri/v1/routeplan?type=drive&from=我的位置&fromcoord=${this.currentPosition.latitude},${this.currentPosition.longitude}&to=${this.currentPositionHover.areaName}&tocoord=${this.currentPositionHover.latitude},${this.currentPositionHover.longitude}&policy=1&referer=BOGBZ-2BZ33-O4L32-Y3QJR-PGN66-RFFEL`;
|
|
|
- break;
|
|
|
- case '百度地图':
|
|
|
- const lnglatObj = qqMapTransBMap(this.currentPositionHover.longitude, this.currentPositionHover.latitude);
|
|
|
- location.href = `http://api.map.baidu.com/marker?location=
|
|
|
- ${lnglatObj.lat},${lnglatObj.lng}&title=目的地&content=${this.currentPositionHover.areaName}
|
|
|
+ import {
|
|
|
+ qqMapTransBMap
|
|
|
+ } from '@/utils/mapTrans.js';
|
|
|
+ export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ tabObj: {
|
|
|
+ current: 0,
|
|
|
+ tabList: [{
|
|
|
+ name: '路段'
|
|
|
+ }, {
|
|
|
+ name: '停车场'
|
|
|
+ }],
|
|
|
+ },
|
|
|
+ searchContent: '',
|
|
|
+ page_map: '',
|
|
|
+ loading: false,
|
|
|
+ latitude: 26.64969,
|
|
|
+ longitude: 106.636453,
|
|
|
+ scale: 16,
|
|
|
+ currentPosition: {
|
|
|
+ latitude: 26.64969,
|
|
|
+ longitude: 106.636453
|
|
|
+ },
|
|
|
+ covers: [],
|
|
|
+ // 附近列表是否显示
|
|
|
+ nearParkingFlag: false,
|
|
|
+ // 轮播选中
|
|
|
+ swiperCurrent: 0,
|
|
|
+ // 附近停车列表
|
|
|
+ nearParkingList: [],
|
|
|
+ // 是否显示停车场列表
|
|
|
+ isShowSearchParking: false,
|
|
|
+ // 搜索停车场列表
|
|
|
+ searchParkingList: [],
|
|
|
+ // 显示单个停车场数据
|
|
|
+ isShowParkingDetail: false,
|
|
|
+ // 单个停车场数据
|
|
|
+ parkingDetailData: {},
|
|
|
+ mapSelect: false,
|
|
|
+ mapSelectList: [{
|
|
|
+ value: '1',
|
|
|
+ label: '腾讯地图'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: '2',
|
|
|
+ label: '百度地图'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: '3',
|
|
|
+ label: '高德地图'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ // 选中位置经纬度
|
|
|
+ currentPositionHover: {},
|
|
|
+ nearParkingObj: {
|
|
|
+ height: '60vh',
|
|
|
+ type: 'down'
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ onLoad(page) {
|
|
|
+ this.getLocation();
|
|
|
+ if (page.keyword) {
|
|
|
+ this.searchContent = page.keyword;
|
|
|
+ this.searchInputChange(page.keyword);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ /**
|
|
|
+ * 查询输入框发生变化
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @param {String} value
|
|
|
+ */
|
|
|
+ searchInputChange(value) {
|
|
|
+ // 为空时关闭搜索列表
|
|
|
+ if (value === '') {
|
|
|
+ this.isShowSearchParking = false;
|
|
|
+ }
|
|
|
+ this.isShowParkingDetail = false;
|
|
|
+ const obj = {
|
|
|
+ 0: 'getNearRoadsl',
|
|
|
+ 1: 'getParkingLotList'
|
|
|
+ }
|
|
|
+ this[obj[this.tabObj.current]]()
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取定位
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ getLocation() {
|
|
|
+ const that = this;
|
|
|
+ console.log('请求定位');
|
|
|
+ // const obj = {
|
|
|
+ // 0: 'getNearRoadsl',
|
|
|
+ // 1: 'getParkingLotList'
|
|
|
+ // }
|
|
|
+ // this[obj[this.tabObj.current]]()
|
|
|
+ that.loading = true;
|
|
|
+ if (navigator.geolocation) {
|
|
|
+ // 判断是否有这个对象
|
|
|
+ navigator.geolocation.getCurrentPosition(function(pos) {
|
|
|
+ console.log('经度:' + pos.coords.longitude + '纬度:' + pos.coords.latitude);
|
|
|
+ that.latitude = pos.coords.latitude;
|
|
|
+ that.longitude = pos.coords.longitude;
|
|
|
+ that.currentPosition.latitude = pos.coords.latitude;
|
|
|
+ that.currentPosition.longitude = pos.coords.longitude;
|
|
|
+ that.loading = false;
|
|
|
+ const obj = {
|
|
|
+ 0: 'getNearRoadsl',
|
|
|
+ 1: 'getParkingLotList'
|
|
|
+ }
|
|
|
+ that[obj[that.tabObj.current]]()
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.$refs.uToast.show({
|
|
|
+ title: '当前系统不支持GPS API',
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 导航
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @param {Number} latitude
|
|
|
+ * @param {Number} longitude
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ navigation(latitude, longitude, areaName) {
|
|
|
+ this.currentPositionHover = {
|
|
|
+ latitude,
|
|
|
+ longitude,
|
|
|
+ areaName
|
|
|
+ };
|
|
|
+ this.mapSelect = true;
|
|
|
+ },
|
|
|
+ // 多地图选择
|
|
|
+ mapSelectConfirm(item) {
|
|
|
+ const name = item[0].label;
|
|
|
+ switch (name) {
|
|
|
+ case '腾讯地图':
|
|
|
+ location.href =
|
|
|
+ `https://apis.map.qq.com/uri/v1/routeplan?type=drive&from=我的位置&fromcoord=${this.currentPosition.latitude},${this.currentPosition.longitude}&to=${this.currentPositionHover.areaName || item.parkName}&tocoord=${this.currentPositionHover.latitude},${this.currentPositionHover.longitude}&policy=1&referer=BOGBZ-2BZ33-O4L32-Y3QJR-PGN66-RFFEL`;
|
|
|
+ break;
|
|
|
+ case '百度地图':
|
|
|
+ const lnglatObj = qqMapTransBMap(this.currentPositionHover.longitude, this.currentPositionHover
|
|
|
+ .latitude);
|
|
|
+ location.href = `http://api.map.baidu.com/marker?location=
|
|
|
+ ${lnglatObj.lat},${lnglatObj.lng}&title=目的地&content=${this.currentPositionHover.areaName || item.parkName}
|
|
|
&output=html&src=webapp.baidu.openAPIdemo`;
|
|
|
- break;
|
|
|
- case '高德地图':
|
|
|
- location.href = `https://uri.amap.com/navigation?from=${this.currentPosition.longitude},${this.currentPosition.latitude},我的位置&to=${this.currentPositionHover.longitude},${this.currentPositionHover.latitude},${this.currentPositionHover.areaName}&mode=car&policy=1&src=mypage&coordinate=gaode&callnative=0`;
|
|
|
- break;
|
|
|
- }
|
|
|
- },
|
|
|
- /**
|
|
|
- * 清空搜索框内容
|
|
|
- * @date 2021-08-10
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- clearSearchInput() {
|
|
|
- this.searchContent = '';
|
|
|
- this.isShowSearchParking = false;
|
|
|
- this.getNearRoadsl();
|
|
|
- },
|
|
|
- /**
|
|
|
- * 默认首个点放大 如果有传入经纬度则对应的点放大
|
|
|
- * @date 2021-08-10
|
|
|
- * @param {Number} lon
|
|
|
- * @param {Number} lat
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- getNearRoadsl(lon, lat) {
|
|
|
- this.$u.api
|
|
|
- .nearRoadsl({
|
|
|
- latitude: this.currentPosition.latitude,
|
|
|
- longitude: this.currentPosition.longitude,
|
|
|
- roadName: this.searchContent
|
|
|
- })
|
|
|
- .then((res) => {
|
|
|
- const nearParkingList = []; // 附近停车场列表
|
|
|
- this.covers = [];
|
|
|
- res.data.forEach((item, index, arr) => {
|
|
|
- if (item.latitude && item.longitude) {
|
|
|
- nearParkingList.push(item);
|
|
|
- const marker = {
|
|
|
- latitude: item.latitude,
|
|
|
- longitude: item.longitude,
|
|
|
- id: String(index),
|
|
|
- iconPath: require('./../../static/img/parking-icon.png'),
|
|
|
- width: 20,
|
|
|
- height: 25
|
|
|
- };
|
|
|
- // 选中经纬度图标变大
|
|
|
- if (lon && lat) {
|
|
|
- if (lon === item.longitude && lat === item.latitude) {
|
|
|
- marker.width = 40;
|
|
|
- marker.height = 50;
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (this.covers.length > 0) {
|
|
|
- this.covers[0].width = 40;
|
|
|
- this.covers[0].height = 50;
|
|
|
- }
|
|
|
- }
|
|
|
- this.covers.push(marker);
|
|
|
- }
|
|
|
- });
|
|
|
- this.nearParkingList = nearParkingList;
|
|
|
- if (nearParkingList.length > 0) {
|
|
|
- this.latitude = nearParkingList[0]?.latitude || this.currentPosition.latitude;
|
|
|
- this.longitude = nearParkingList[0]?.longitude || this.currentPosition.longitude;
|
|
|
- } else {
|
|
|
- this.$refs.uToast.show({
|
|
|
- title: '没有相关停车场信息',
|
|
|
- type: 'warning'
|
|
|
- });
|
|
|
- }
|
|
|
- this.nearParkingFlag = true;
|
|
|
- if (this.searchContent) {
|
|
|
- this.searchParkingList = nearParkingList;
|
|
|
- this.isShowSearchParking = true;
|
|
|
- this.nearParkingFlag = false;
|
|
|
- }
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- this.$refs.uToast.show({
|
|
|
- title: err.msg,
|
|
|
- type: 'error'
|
|
|
- });
|
|
|
- });
|
|
|
- },
|
|
|
- /**
|
|
|
- * 点击地图上的标记点触发
|
|
|
- **/
|
|
|
- markertap(e) {
|
|
|
- let lon, lat;
|
|
|
- this.covers.forEach((item, index) => {
|
|
|
- if (e.detail.markerId === item.id) {
|
|
|
- lon = item.longitude;
|
|
|
- lat = item.latitude;
|
|
|
- this.swiperCurrent = index;
|
|
|
- }
|
|
|
- });
|
|
|
- this.getNearRoadsl(lon, lat);
|
|
|
- },
|
|
|
- /**
|
|
|
- * 地址发生变化
|
|
|
- * @date 2021-08-10
|
|
|
- * @param {Object} item
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- swiperChange(item) {
|
|
|
- const map = uni.createMapContext('pagemap');
|
|
|
- map.moveToLocation({
|
|
|
- longitude: this.nearParkingList[item.detail.current].longitude,
|
|
|
- latitude: this.nearParkingList[item.detail.current].latitude
|
|
|
- });
|
|
|
- this.getNearRoadsl(this.nearParkingList[item.detail.current].longitude, this.nearParkingList[item.detail.current].latitude);
|
|
|
- },
|
|
|
- /**
|
|
|
- * 点击单个地址
|
|
|
- * @date 2022-08-31
|
|
|
- * @param {any} item
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- positionAddress(item) {
|
|
|
- const map = uni.createMapContext('pagemap');
|
|
|
- map.moveToLocation({
|
|
|
- longitude: item.longitude,
|
|
|
- latitude: item.latitude
|
|
|
- });
|
|
|
- this.getNearRoadsl(item.longitude, item.latitude);
|
|
|
- },
|
|
|
- /**
|
|
|
- * 点击单个停车场看详情
|
|
|
- * @date 2021-08-10
|
|
|
- * @param {Object} item 为选中项参数
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- clickSearchParking(item) {
|
|
|
- if (item.monthAmount) {
|
|
|
- this.$u.route({
|
|
|
- url: 'pages/parkingInformation/parkingInformation',
|
|
|
- params: {
|
|
|
- roadInfo: JSON.stringify(item),
|
|
|
- longitude: this.currentPosition.longitude,
|
|
|
- latitude: this.currentPosition.latitude
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- /**
|
|
|
- * 跳转停车标准页面
|
|
|
- * @date 2021-08-10
|
|
|
- * @param {Object} item
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- lookParkingRule(item) {
|
|
|
- this.$u.route({
|
|
|
- url: 'pages/chargeStandard/chargeStandard',
|
|
|
- params: {
|
|
|
- roadNo: item.roadNo
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- /**
|
|
|
- * 搜索右侧按钮点击
|
|
|
- **/
|
|
|
- listIconClick() {
|
|
|
- this.isShowSearchParking = true;
|
|
|
- this.nearParkingFlag = false;
|
|
|
- this.searchParkingList = this.nearParkingList;
|
|
|
- },
|
|
|
- /**
|
|
|
- * 跳转包月
|
|
|
- * @date 2021-08-10
|
|
|
- * @param {Object} item
|
|
|
- * @returns {any}
|
|
|
- */
|
|
|
- createMonth(item) {
|
|
|
- if (item.monthAmount) {
|
|
|
- this.$u.route({
|
|
|
- url: 'pages/handleMonthly/handleMonthly',
|
|
|
- params: {
|
|
|
- roadNo: item.roadNo
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- pullDown() {
|
|
|
- if (this.nearParkingObj.height === '20vh') {
|
|
|
- this.nearParkingObj.height = '60vh';
|
|
|
- this.nearParkingObj.type = 'down';
|
|
|
- } else {
|
|
|
- this.nearParkingObj.height = '20vh';
|
|
|
- this.nearParkingObj.type = 'up';
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-};
|
|
|
+ break;
|
|
|
+ case '高德地图':
|
|
|
+ location.href =
|
|
|
+ `https://uri.amap.com/navigation?from=${this.currentPosition.longitude},${this.currentPosition.latitude},我的位置&to=${this.currentPositionHover.longitude},${this.currentPositionHover.latitude},${this.currentPositionHover.areaName || item.parkName}&mode=car&policy=1&src=mypage&coordinate=gaode&callnative=0`;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 清空搜索框内容
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ clearSearchInput() {
|
|
|
+ this.searchContent = '';
|
|
|
+ this.isShowSearchParking = false;
|
|
|
+ const obj = {
|
|
|
+ 0: 'getNearRoadsl',
|
|
|
+ 1: 'getParkingLotList'
|
|
|
+ }
|
|
|
+ this[obj[this.tabObj.current]]()
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 默认首个点放大 如果有传入经纬度则对应的点放大
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @param {Number} lon
|
|
|
+ * @param {Number} lat
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ getNearRoadsl(lon, lat) {
|
|
|
+ this.$u.api
|
|
|
+ .nearRoadsl({
|
|
|
+ latitude: this.currentPosition.latitude,
|
|
|
+ longitude: this.currentPosition.longitude,
|
|
|
+ roadName: this.searchContent
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ const nearParkingList = []; // 附近停车场列表
|
|
|
+ this.covers = [];
|
|
|
+ res.data.forEach((item, index, arr) => {
|
|
|
+ if (item.latitude && item.longitude) {
|
|
|
+ nearParkingList.push(item);
|
|
|
+ const marker = {
|
|
|
+ latitude: item.latitude,
|
|
|
+ longitude: item.longitude,
|
|
|
+ id: String(index),
|
|
|
+ iconPath: require('./../../static/img/parking-icon.png'),
|
|
|
+ width: 20,
|
|
|
+ height: 25
|
|
|
+ };
|
|
|
+ // 选中经纬度图标变大
|
|
|
+ if (lon && lat) {
|
|
|
+ if (lon === item.longitude && lat === item.latitude) {
|
|
|
+ marker.width = 40;
|
|
|
+ marker.height = 50;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (this.covers.length > 0) {
|
|
|
+ this.covers[0].width = 40;
|
|
|
+ this.covers[0].height = 50;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.covers.push(marker);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.nearParkingList = nearParkingList;
|
|
|
+ if (nearParkingList.length > 0) {
|
|
|
+ this.latitude = nearParkingList[0]?.latitude || this.currentPosition.latitude;
|
|
|
+ this.longitude = nearParkingList[0]?.longitude || this.currentPosition.longitude;
|
|
|
+ } else {
|
|
|
+ this.$refs.uToast.show({
|
|
|
+ title: '没有相关停车场信息',
|
|
|
+ type: 'warning'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ this.nearParkingFlag = true;
|
|
|
+ if (this.searchContent) {
|
|
|
+ this.searchParkingList = nearParkingList;
|
|
|
+ this.isShowSearchParking = true;
|
|
|
+ this.nearParkingFlag = false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.$refs.uToast.show({
|
|
|
+ title: err.msg,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getParkingLotList(lon, lat) {
|
|
|
+ this.$u.api
|
|
|
+ .nearParkingLot({
|
|
|
+ status: 1,
|
|
|
+ latitude: this.currentPosition.latitude,
|
|
|
+ longitude: this.currentPosition.longitude,
|
|
|
+ parkName: this.searchContent
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ const nearParkingList = []; // 附近停车场列表
|
|
|
+ this.covers = [];
|
|
|
+ res?.data?.rows.forEach((item, index, arr) => {
|
|
|
+ if (item.latitude && item.longitude) {
|
|
|
+ nearParkingList.push(item);
|
|
|
+ const marker = {
|
|
|
+ latitude: item.latitude,
|
|
|
+ longitude: item.longitude,
|
|
|
+ id: String(index),
|
|
|
+ iconPath: require('./../../static/img/parking-icon.png'),
|
|
|
+ width: 20,
|
|
|
+ height: 25
|
|
|
+ };
|
|
|
+ // 选中经纬度图标变大
|
|
|
+ if (lon && lat) {
|
|
|
+ if (lon === item.longitude && lat === item.latitude) {
|
|
|
+ marker.width = 40;
|
|
|
+ marker.height = 50;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (this.covers.length > 0) {
|
|
|
+ this.covers[0].width = 40;
|
|
|
+ this.covers[0].height = 50;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.covers.push(marker);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.nearParkingList = nearParkingList;
|
|
|
+ if (nearParkingList.length > 0) {
|
|
|
+ this.latitude = nearParkingList[0]?.latitude || this.currentPosition.latitude;
|
|
|
+ this.longitude = nearParkingList[0]?.longitude || this.currentPosition.longitude;
|
|
|
+ } else {
|
|
|
+ this.$refs.uToast.show({
|
|
|
+ title: '没有相关停车场信息',
|
|
|
+ type: 'warning'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ this.nearParkingFlag = true;
|
|
|
+ if (this.searchContent) {
|
|
|
+ this.searchParkingList = nearParkingList;
|
|
|
+ this.isShowSearchParking = true;
|
|
|
+ this.nearParkingFlag = false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.$refs.uToast.show({
|
|
|
+ title: err.msg,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 点击地图上的标记点触发
|
|
|
+ **/
|
|
|
+ markertap(e) {
|
|
|
+ let lon, lat;
|
|
|
+ this.covers.forEach((item, index) => {
|
|
|
+ if (e.detail.markerId === item.id) {
|
|
|
+ lon = item.longitude;
|
|
|
+ lat = item.latitude;
|
|
|
+ this.swiperCurrent = index;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const obj = {
|
|
|
+ 0: 'getNearRoadsl',
|
|
|
+ 1: 'getParkingLotList'
|
|
|
+ }
|
|
|
+ this[obj[this.tabObj.current]](lon, lat)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 地址发生变化
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @param {Object} item
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ swiperChange(item) {
|
|
|
+ const map = uni.createMapContext('pagemap');
|
|
|
+ map.moveToLocation({
|
|
|
+ longitude: this.nearParkingList[item.detail.current].longitude,
|
|
|
+ latitude: this.nearParkingList[item.detail.current].latitude
|
|
|
+ });
|
|
|
+ const obj = {
|
|
|
+ 0: 'getNearRoadsl',
|
|
|
+ 1: 'getParkingLotList'
|
|
|
+ }
|
|
|
+ this[obj[this.tabObj.current]](this.nearParkingList[item.detail.current].longitude, this.nearParkingList[
|
|
|
+ item.detail
|
|
|
+ .current].latitude)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 点击单个地址
|
|
|
+ * @date 2022-08-31
|
|
|
+ * @param {any} item
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ positionAddress(item) {
|
|
|
+ const map = uni.createMapContext('pagemap');
|
|
|
+ map.moveToLocation({
|
|
|
+ longitude: item.longitude,
|
|
|
+ latitude: item.latitude
|
|
|
+ });
|
|
|
+ const obj = {
|
|
|
+ 0: 'getNearRoadsl',
|
|
|
+ 1: 'getParkingLotList'
|
|
|
+ }
|
|
|
+ this[obj[this.tabObj.current]](item.longitude, item.latitude)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 点击单个停车场看详情
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @param {Object} item 为选中项参数
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ clickSearchParking(item) {
|
|
|
+ if (item.monthAmount) {
|
|
|
+ this.$u.route({
|
|
|
+ url: 'pages/parkingInformation/parkingInformation',
|
|
|
+ params: {
|
|
|
+ roadInfo: JSON.stringify(item),
|
|
|
+ longitude: this.currentPosition.longitude,
|
|
|
+ latitude: this.currentPosition.latitude
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 跳转停车标准页面
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @param {Object} item
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ lookParkingRule(item) {
|
|
|
+ const obj = {
|
|
|
+ 0: 'roadNo',
|
|
|
+ 1: 'parkNo'
|
|
|
+ }
|
|
|
+ const params = {}
|
|
|
+ params[obj[this.tabObj.current]] = item[obj[this.tabObj.current]]
|
|
|
+ this.$u.route({
|
|
|
+ url: 'pages/chargeStandard/chargeStandard',
|
|
|
+ params
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 搜索右侧按钮点击
|
|
|
+ **/
|
|
|
+ listIconClick() {
|
|
|
+ this.isShowSearchParking = true;
|
|
|
+ this.nearParkingFlag = false;
|
|
|
+ this.searchParkingList = this.nearParkingList;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 跳转包月
|
|
|
+ * @date 2021-08-10
|
|
|
+ * @param {Object} item
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ createMonth(item) {
|
|
|
+ const obj = {
|
|
|
+ 0: 'roadNo',
|
|
|
+ 1: 'parkNo'
|
|
|
+ }
|
|
|
+ const params = {}
|
|
|
+ params[obj[this.tabObj.current]] = item[obj[this.tabObj.current]]
|
|
|
+ this.$u.route({
|
|
|
+ url: 'pages/handleMonthly/handleMonthly',
|
|
|
+ params
|
|
|
+ })
|
|
|
+ },
|
|
|
+ pullDown() {
|
|
|
+ if (this.nearParkingObj.height === '20vh') {
|
|
|
+ this.nearParkingObj.height = '60vh';
|
|
|
+ this.nearParkingObj.type = 'down';
|
|
|
+ } else {
|
|
|
+ this.nearParkingObj.height = '20vh';
|
|
|
+ this.nearParkingObj.type = 'up';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * tab切换触发
|
|
|
+ * @param {Object} val
|
|
|
+ */
|
|
|
+ tabChange(val) {
|
|
|
+ this.tabObj.current = val
|
|
|
+ const obj = {
|
|
|
+ 0: 'getNearRoadsl',
|
|
|
+ 1: 'getParkingLotList'
|
|
|
+ }
|
|
|
+ this[obj[val]]()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
-.wrap {
|
|
|
- margin-top: 20vh;
|
|
|
-}
|
|
|
+ .wrap {
|
|
|
+ margin-top: 20vh;
|
|
|
+ }
|
|
|
|
|
|
-@import './parkingLists.scss';
|
|
|
+ @import './parkingLists.scss';
|
|
|
</style>
|