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.
646 lines
17 KiB
646 lines
17 KiB
<template> |
|
<view class="create-investigation"> |
|
<top-title title="排查选择" class="custom_bg" :rightWidth='60'> |
|
|
|
</top-title> |
|
<view class="query-form" v-show="!pageFlag"> |
|
<view class="tab"> |
|
<view v-for="tabItem in tabList" :key="tabItem.active" :class="{ |
|
'tab-item': true, |
|
'active': tabItem.active == approve |
|
}" @click="handleTabChange(tabItem.active)"> |
|
<text>{{tabItem.name}}</text> |
|
</view> |
|
</view> |
|
</view> |
|
<view class="Content MarginAuto BorderBox" v-show="!pageFlag"> |
|
<view class="List Width100 BorderBox" style="background: #fff;height: 80vh;margin-top: 20%;"> |
|
<view class="formBox" v-show="approve == 1"> |
|
<uni-forms border> |
|
<uni-forms-item label="路口名称" required class="label_item"> |
|
<input type="text" :placeholder="'请输入路口名称'" class="label_input" v-model="roadName" /> |
|
</uni-forms-item> |
|
<uni-forms-item label="路口位置" required class="label_item" style="border-bottom: 1px solid #eee;"> |
|
<input type="text" :placeholder="'请在地图中选择'" class="label_input" style="padding-right: 30px;" |
|
:disabled="true" v-model="point1" /> |
|
<cover-image src="../../static/map/d2.png" alt="" srcset="" class="label_img" |
|
@click="()=>handlePoint('point1')" /> |
|
</uni-forms-item> |
|
</uni-forms> |
|
</view> |
|
<view class="formBox" v-show="approve == 2"> |
|
<uni-forms border> |
|
<uni-forms-item label="路段名称" required class="label_item"> |
|
<input type="text" :placeholder="'请输入路段名称'" class="label_input" v-model="roadName" /> |
|
</uni-forms-item> |
|
<uni-forms-item label="起始位置" required class="label_item"> |
|
<input type="text" :placeholder="'请在地图中选择'" class="label_input" :disabled="true" |
|
style="padding-right: 30px;" v-model="point1" /> |
|
<cover-image src="../../static/map/d2.png" alt="" srcset="" class="label_img" |
|
@click="()=>handlePoint('point1')" /> |
|
</uni-forms-item> |
|
<uni-forms-item label="终止位置" required class="label_item"> |
|
<input type="text" :placeholder="'请在地图中选择'" class="label_input" :disabled="true" |
|
style="padding-right: 30px;" v-model="point2" /> |
|
<cover-image src="../../static/map/d2.png" alt="" srcset="" class="label_img" |
|
@click="()=>handlePoint('point2')" /> |
|
</uni-forms-item> |
|
</uni-forms> |
|
</view> |
|
</view> |
|
</view> |
|
<view class="page-body" v-show='pageFlag'> |
|
<!-- <map :latitude="latitude" :longitude="longitude" :markers="markers" /> --> |
|
<map id="myMap" ref="myMaps" class="map" style="width: 100%; height: 100%" :scale="scale" |
|
:latitude="latitude" :longitude="longitude" :markers="markers" @regionchange="regionchange" /> |
|
<cover-image class="curCenter" src="../../static/map/d3.png" alt="" srcset="" /> |
|
<cover-view class="location"> |
|
<cover-image src="../../static/map/3746.png" alt="" srcset="" @click="getCurCenter" /> |
|
</cover-view> |
|
</view> |
|
<!-- <mapNavigation ref="mapNavigation" /> --> |
|
<view class="page-footer" v-if="pageFlag"> |
|
<view> |
|
<view style="padding:10rpx 0 0 15rpx;">当前坐标:{{longitude.toFixed(6)}},{{latitude.toFixed(6)}}</view> |
|
<u-button type="primary" @click="handleAdd" |
|
style="width: 140rpx;background: #2663bf;height: 44rpx;position: absolute;right: 24rpx;top: 10rpx;">确定</u-button> |
|
</view> |
|
<change :sectionsList="sectionsList" @onSearch="onSearch" @changeCode="changeCode" /> |
|
</view> |
|
<three class="footer-buttons" :type="'view'" first-text="取消" next-text="确认" :second-primary="true" |
|
@first="handleCancel" @last="handleCheck" v-else /> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
import TopTitle from "../../components/top-title.vue"; |
|
import Three from "../../components/bottom-button/three.vue"; |
|
import Change from "./Change.vue"; |
|
import { |
|
locationRequest |
|
} from '@/libs/util/permission-request.js' |
|
import { |
|
wgs84LL2gcjLL2 |
|
} from "@/pages/map/c.js"; |
|
// import mapNavigation from "./map-navigation.vue"; |
|
|
|
export default { |
|
components: { |
|
Change, |
|
TopTitle, |
|
Three, |
|
// mapNavigation |
|
}, |
|
|
|
data() { |
|
return { |
|
latitude: 36.066006272609904, // 默认定在首都 |
|
longitude: 120.38279699971847, |
|
scale: 17, // 默认16 |
|
// markers: [], |
|
markerHeight: 60, |
|
isChanging: false, |
|
res: null, |
|
sectionsList: [], |
|
search: '', |
|
sectionCode: null, |
|
mapContext: null, |
|
timer: null, |
|
approve: 1, |
|
tabList: [{ |
|
name: '新增路口', |
|
active: '1', |
|
}, |
|
{ |
|
name: '新增路段', |
|
active: '2', |
|
}, |
|
], |
|
pageFlag: '', |
|
point1: '', |
|
point2: '', |
|
roadName: '', |
|
}; |
|
}, |
|
computed: { |
|
curSections() { |
|
return this.sectionsList.find(item => item.sectionCode == this.sectionCode) || {} |
|
}, |
|
|
|
markers() { |
|
if (!this.sectionsList) { |
|
return |
|
} |
|
const sectionsMarker = this.sectionsList.map(item => { |
|
return { |
|
id: item.id, |
|
latitude: item.location.split(',')[1], |
|
longitude: item.location.split(',')[0], |
|
iconPath: "/static/icon/fill_position.svg", |
|
} |
|
}) |
|
console.log('sectionsMarkersectionsMarkersectionsMarker', sectionsMarker) |
|
return sectionsMarker |
|
} |
|
}, |
|
|
|
mounted() { |
|
this.mapContext = uni.createMapContext('myMap', this).$getAppMap() |
|
}, |
|
methods: { |
|
handleCheck() { |
|
const { |
|
roadName, |
|
point1, |
|
point2, |
|
approve |
|
} = this |
|
if (!roadName) { |
|
return this.$.toast(`请输入${approve == 1?'路口':'路段'}名称`) |
|
} |
|
if (this.approve == 1) { |
|
if (!roadName) { |
|
return this.$.toast(`请输入路口名称`) |
|
} |
|
if (!point1) { |
|
return this.$.toast(`请选择路口位置`) |
|
} |
|
} |
|
if (this.approve == 2) { |
|
if (!roadName) { |
|
return this.$.toast(`请输入路段名称`) |
|
} |
|
if (!point1) { |
|
return this.$.toast(`请选择起始位置`) |
|
} |
|
if (!point2) { |
|
return this.$.toast(`请选择终止位置`) |
|
} |
|
} |
|
|
|
let position = point1 |
|
if (point2) { |
|
position += ',' + point2 |
|
} |
|
|
|
// let pages = getCurrentPages() |
|
// // 2. 上一页面实例 |
|
// // 注意是length长度,所以要想得到上一页面的实例需要 -2 |
|
// // 若要返回上上页面的实例就 -3,以此类推 |
|
// let prevPage = pages[pages.length - 1] |
|
// console.log('prevPageprevPageprevPageprevPage',prevPage) |
|
// return |
|
// // 3. 给上一页面实例绑定getValue()方法和参数(注意是$vm) |
|
// prevPage.$vm.setValue({ |
|
// formData:{ |
|
// name:'kang' |
|
// } |
|
// }) |
|
uni.$emit('isRefresh', { |
|
roadName, |
|
position, |
|
approve, |
|
}) |
|
uni.navigateBack() |
|
return |
|
// } |
|
}, |
|
handlePoint(flag) { |
|
this.pageFlag = flag |
|
}, |
|
handleTabChange(tabKey) { |
|
if (this.approve != tabKey) { |
|
this.approve = tabKey |
|
this.roadName = '' |
|
this.point1 = '' |
|
this.point2 = '' |
|
} |
|
}, |
|
handleOpenMapNav() { |
|
if (!this.sectionCode) return this.$.toast('请选择路段或路口') |
|
this.$refs.mapNavigation.open({ |
|
name: this.curSections.name, |
|
latitude: this.curSections.position[ |
|
0].latitude, |
|
longitude: this.curSections.position[ |
|
0].longitude |
|
}) |
|
}, |
|
handleCancel() { |
|
uni.navigateBack() |
|
}, |
|
onSearch(value) { |
|
return |
|
this.search = value |
|
this.getList() |
|
}, |
|
getCurCenter() { |
|
console.log('回到定位点') |
|
this.initPage(this.curSections) |
|
}, |
|
handleAdd() { |
|
if (this.pageFlag == 'point1') { |
|
this.point1 = this.longitude.toFixed(6) + ',' + this.latitude.toFixed(6) |
|
} else if (this.pageFlag == 'point2') { |
|
this.point2 = this.longitude.toFixed(6) + ',' + this.latitude.toFixed(6) |
|
} |
|
this.pageFlag = '' |
|
}, |
|
changeCode(code) { |
|
this.latitude = code.location.split(',')[1] |
|
this.longitude = code.location.split(',')[0] |
|
return |
|
if (this.pageFlag == 'point1') { |
|
this.point1 = this.longitude + ',' + this.latitude |
|
} else if (this.pageFlag == 'point2') { |
|
this.point2 = this.longitude + ',' + this.latitude |
|
} |
|
this.pageFlag = '' |
|
}, |
|
// onConfirm() { |
|
// if (this.pageFlag == 'point1') { |
|
// this.point1 = this.latitude + ',' + this.longitude |
|
// } else if (this.pageFlag == 'point2') { |
|
// this.point2 = this.latitude + ',' + this.longitude |
|
// } |
|
// this.pageFlag = '' |
|
// }, |
|
moveUserToMapViewCenter() { |
|
// #ifdef APP-PLUS |
|
this.mapContext.getCurrentCenter((state, point) => { |
|
if (state == 0) { |
|
const { |
|
longitude, |
|
latitude |
|
} = point |
|
let location = longitude.toFixed(6) + ',' + latitude.toFixed(6) |
|
// return |
|
this.$.showLoading() |
|
this.$request |
|
.globalRequest( |
|
`https://restapi.amap.com/v3/place/around?location=${location}&key=fbd17cb563bde2363b98aefc9dcfc5b9`, {}, |
|
'GET').then(res => { |
|
// if (!res.pois) { |
|
// this.$.toast(res.info) |
|
// } |
|
this.$.hideLoading() |
|
// res = { |
|
// "suggestion": { |
|
// "keywords": [], |
|
// "cities": [] |
|
// }, |
|
// "count": "450", |
|
// "infocode": "10000", |
|
// "pois": [{ |
|
// "parent": [], |
|
// "address": "中韩街道银川东路55号(崂山党校对面)", |
|
// "distance": "313", |
|
// "pname": "山东省", |
|
// "importance": [], |
|
// "biz_ext": { |
|
// "cost": [], |
|
// "rating": [] |
|
// }, |
|
// "biz_type": [], |
|
// "cityname": "青岛市", |
|
// "type": "商务住宅;楼宇;商务写字楼", |
|
// "photos": [{ |
|
// "title": [], |
|
// "url": "http://store.is.autonavi.com/showpic/bb019677d47600e77d889492362db6c7" |
|
// }], |
|
// "typecode": "120201", |
|
// "shopinfo": "0", |
|
// "poiweight": [], |
|
// "childtype": [], |
|
// "adname": "崂山区", |
|
// "name": "昌盛·财富中心", |
|
// "location": "120.473844,36.110959", |
|
// "tel": [], |
|
// "shopid": [], |
|
// "id": "B0FFGAH04Q" |
|
// }, { |
|
// "parent": [], |
|
// "address": "银川东路与松岭路交叉口西北140米", |
|
// "distance": "768", |
|
// "pname": "山东省", |
|
// "importance": [], |
|
// "biz_ext": { |
|
// "cost": [], |
|
// "rating": [] |
|
// }, |
|
// "biz_type": [], |
|
// "cityname": "青岛市", |
|
// "type": "商务住宅;住宅区;住宅小区", |
|
// "photos": [{ |
|
// "title": [], |
|
// "url": "http://store.is.autonavi.com/showpic/f674f519097b0177a8776737a282ad2a" |
|
// }], |
|
// "typecode": "120302", |
|
// "shopinfo": "0", |
|
// "poiweight": [], |
|
// "childtype": [], |
|
// "adname": "崂山区", |
|
// "name": "朱家洼小区", |
|
// "location": "120.479327,36.110854", |
|
// "tel": [], |
|
// "shopid": [], |
|
// "id": "B0FFG7XPX6" |
|
// }], |
|
// "status": "1", |
|
// "info": "OK" |
|
// }, |
|
this.sectionsList = res.pois; |
|
}).catch(err => { |
|
console.log(err, 'errerrerrerrerrerrerrerr') |
|
}) |
|
// https://restapi.amap.com/v3/place/text?keywords=北京大学&city=beijing&offset=20&page=1&key=<用户的key>&extensions=all |
|
|
|
this.latitude = point.latitude |
|
this.longitude = point.longitude |
|
clearTimeout(this.timer) |
|
this.timer = setTimeout(() => { |
|
this.getList(); |
|
}, 500) |
|
} |
|
}) |
|
// #endif |
|
}, |
|
regionchange(e) { |
|
// if(!this.pageFlag){ |
|
// return |
|
// } |
|
console.log('地图视野变化') |
|
this.moveUserToMapViewCenter() |
|
}, |
|
getList() { |
|
return |
|
if (!this.longitude || !this.latitude) { |
|
return |
|
} |
|
this.sectionCode = null |
|
this.sectionsList = [] |
|
let location = this.longitude.toFixed(6) + ',' + this.latitude.toFixed(6) |
|
const data = { |
|
location, |
|
key: 'fbd17cb563bde2363b98aefc9dcfc5b9' |
|
}; |
|
if (this.pageFlag) { |
|
this.$.showLoading() |
|
} |
|
this.$request |
|
.globalRequest( |
|
`https://restapi.amap.com/v3/place/around`, data, |
|
'GET').then(res => { |
|
if (res.code === 200) { |
|
console.log('返回数据2222222222222', res) |
|
this.sectionsList = res.pois; |
|
} else { |
|
this.$.toast(res.message) |
|
} |
|
}).catch(err => { |
|
console.log(err, 'errerrerrerrerrerrerrerr') |
|
}) |
|
// this.$request |
|
// .globalRequest('/hiddenDanger/highDanger/getNearRoadInfo?pageNum=1&pageSize=10', data, 'POST') |
|
// .then(res => { |
|
// if (res.code === 200) { |
|
// console.log('返回数据', res) |
|
// this.sectionsList = res.result; |
|
// if (this.sectionsList.length) { |
|
// this.sectionCode = this.sectionsList[0].sectionCode |
|
// } |
|
// } else { |
|
// this.$.toast(res.message) |
|
// } |
|
// }).finally(() => { |
|
// this.search = '' |
|
// this.$.hideLoading() |
|
// }) |
|
}, |
|
async initPage() { |
|
// #ifdef H5 |
|
|
|
// #endif |
|
// #ifdef APP-PLUS |
|
try { |
|
console.log('trytrytrytrytrytrytry') |
|
const locationInfo = await locationRequest() |
|
const [longitude, latitude] = wgs84LL2gcjLL2(locationInfo.longitude, locationInfo.latitude); |
|
this.longitude = longitude |
|
this.latitude = latitude |
|
} catch (e) { |
|
console.log('errerrerrerrerrerr', err) |
|
//TODO handle the exception |
|
} |
|
// #endif |
|
// #ifdef H5 |
|
this.getList() |
|
// #endif |
|
// 当前中心点变化,自动调取接口 见moveUserToMapViewCenter |
|
// this.getList() |
|
} |
|
}, |
|
onLoad(e) { |
|
console.log('2222222222222222222222222') |
|
console.log('eeeeeeeeeeeeeeeeeeeeeeeee', e) |
|
|
|
// const pages = getCurrentPages(); |
|
// const prevPage = pages[pages.length - 2]; // 上一个页面实例对象 |
|
// prevPage.setData({ // 假设上一页面有个data属性需要更新 |
|
// someData: 'new value' |
|
// }); |
|
// uni.navigateBack() |
|
this.initPage() |
|
} |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.label_item { |
|
white-space: nowrap; |
|
height: 36px; |
|
padding: 36rpx 28rpx; |
|
position: relative; |
|
} |
|
|
|
.label_input { |
|
font-size: 14px; |
|
height: 36px; |
|
text-align: right |
|
} |
|
|
|
.label_img { |
|
width: 26px; |
|
height: 26px; |
|
position: absolute; |
|
right: 0px; |
|
top: 0; |
|
} |
|
|
|
.create-investigation { |
|
height: 100vh; |
|
width: 100vw; |
|
display: flex; |
|
flex-direction: column; |
|
background: #F0F2F7; |
|
|
|
.right-dh { |
|
display: inline-block; |
|
width: 30px; |
|
height: 30px; |
|
} |
|
|
|
.page-body { |
|
width: 100%; |
|
padding-top: calc(var(--status-bar-height) + 88rpx); |
|
//height : calc(100vh - var(--status-bar-height) - 88rpx); |
|
position: relative; |
|
z-index: 1; |
|
flex: 1; |
|
|
|
.map { |
|
width: 100vw; |
|
height: 100%; |
|
} |
|
|
|
.curCenter { |
|
position: absolute; |
|
width: 30px; |
|
height: 30px; |
|
z-index: 9999; |
|
left: 50%; |
|
top: 50%; |
|
transform: translate(-15px, -15px); |
|
background: transparent; |
|
} |
|
|
|
.location { |
|
position: absolute; |
|
width: 48px; |
|
height: 48px; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
right: 24rpx; |
|
bottom: 24rpx; |
|
background: #fff; |
|
border-radius: 16px; |
|
z-index: 99999; |
|
|
|
cover-image { |
|
width: 32px; |
|
height: 32px; |
|
} |
|
} |
|
|
|
} |
|
|
|
.page-footer { |
|
width: 100vw; |
|
//z-index: 9999999999999; |
|
overflow: visible; |
|
position: relative; |
|
|
|
|
|
.init-content { |
|
background: #ffffff; |
|
width: calc(100vw - 32rpx); |
|
margin: 0 auto; |
|
|
|
.footer-content { |
|
padding: 32rpx 0; |
|
text-align: center; |
|
display: block; |
|
|
|
.title { |
|
text-align: center; |
|
font-size: 28rpx; |
|
color: #777777; |
|
} |
|
|
|
.position-name { |
|
font-size: 36rpx; |
|
color: #333333; |
|
padding: 24rpx 0; |
|
display: block; |
|
overflow: hidden; |
|
white-space: nowrap; |
|
text-overflow: ellipsis; |
|
} |
|
} |
|
|
|
.footer-buttons { |
|
width: calc(100% - 72rpx); |
|
margin-top: 0; |
|
} |
|
} |
|
} |
|
} |
|
|
|
.Content { |
|
width: calc(100% - 48rpx); |
|
padding-bottom: 88rpx; |
|
} |
|
|
|
.label-box { |
|
display: flex; |
|
align-items: center; |
|
height: 110rpx; |
|
font-size: 30rpx; |
|
font-weight: 600; |
|
|
|
.border { |
|
background-color: #2663BF; |
|
height: 35rpx; |
|
width: 6rpx; |
|
margin-right: 14rpx; |
|
} |
|
} |
|
|
|
.query-form { |
|
width: 100%; |
|
font-size: 16px; |
|
background: #ffffff; |
|
box-shadow: 3px 0px 10px #ccc; |
|
color: #666666; |
|
position: sticky; |
|
// top: var(--status-bar-height + 88rpx); |
|
top: calc(var(--status-bar-height) + 88rpx); |
|
z-index: 10; |
|
|
|
.tab { |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-around; |
|
|
|
.tab-item { |
|
position: relative; |
|
height: 41px; |
|
line-height: 41px; |
|
padding: 0 30rpx 0 30rpx; |
|
border-bottom: 3px solid #fff; |
|
display: flex; |
|
align-items: center; |
|
|
|
&.active { |
|
color: rgb(60, 109, 195); |
|
border-color: rgb(60, 109, 195); |
|
} |
|
|
|
.number { |
|
font-weight: bold; |
|
font-size: 18px; |
|
margin-left: 10rpx; |
|
} |
|
} |
|
} |
|
|
|
|
|
} |
|
</style> |
|
<style lang="scss"> |
|
.amap-logo, |
|
.amap-copyright { |
|
display: none !important; |
|
} |
|
</style> |