import Taro, { Component } from '@tarojs/taro'
import { View, Map } from '@tarojs/components'
import { arrToObj } from '@utils'
var QQMapWX = require('@js/qqmap-wx-jssdk.js')
import ListMore from '@/c/pageDataList/listMore'
var qqmapsdk
import './indexDtlAround.scss'
class Index extends Component {
onShareAppMessage() {
const { id, name } = this.$router.params
return {
title: `${name}-楼盘详情-洪楼Plus`,
path: `/pagesHouse/indexDtl?id=${id}`,
}
}
onShareTimeline () {
return {
title: '让买房,更省心!',
}
}
constructor (props) {
super(props)
const {id: curId} = this.$router.params
this.state = {
curId,
curObj: {},
aroundArr: [],
posIndex: 0,
isPosMoreShow: true,
markers: [],
markerLabelIndex: -1,
markersNameArr: ['地铁', '公交', '公园', '医院', '购物']
}
}
config = {
navigationBarTitleText: '周边配套',
}
componentWillMount () {
const { name } = this.$router.params
Taro.setNavigationBarTitle({
title: name + '-周边配套' || '周边配套'
})
this.getDtl()
qqmapsdk = new QQMapWX({
key: '5WFBZ-LCZ3J-D5AFM-KNUUL-BTT46-45BWB'
})
}
getDtl = () => {
const { curId, markersNameArr } = this.state
Taro.api.house.admestatedetail({id: curId}).then(obj => {
const curObj = obj || {}
this.setState({
curObj,
aroundArr: []
}, () => {
Taro.api.house.apiestateperipherydata({estate_id: curId}).then(eObj => {
if (eObj.periphery) {
this.setState({
aroundArr: JSON.parse(eObj.periphery)
})
} else {
let aroundTags = markersNameArr
this.getAroundInfo(aroundTags)
}
})
// let aroundTags = ['餐饮', '购物', '公园', '银行']
})
})
}
getMarker () {
let markers = []
const { posIndex, aroundArr, curObj, markerLabelIndex } = this.state
let newAround = aroundArr.length > 0 ? aroundArr[posIndex].list : []
markers.push({
longitude: curObj.longitude,
latitude: curObj.latitude,
iconPath: 'http://icon.honglounews.com/g_map_pos.png',
width: '30px',
height: '30px',
zIndex: 9999,
label: {
content: curObj.estate_name,
color: '#333',
fontSize: 12,
// // anchorX: -(0.5 * (5 * 24))/2,
anchorY: -56,
textAlign: 'center',
bgColor: '#fff',
padding: 5,
borderRadius: 5,
borderColor: '#f2f2f2',
borderWidth: 1,
}
})
newAround.forEach((item, curIndex) => {
let iconPath = 'http://icon.honglounews.com/icon_ex2.png'
if (posIndex === 0) iconPath = 'http://icon.honglounews.com/g_map_0.png'
if (posIndex === 1) iconPath = 'http://icon.honglounews.com/g_map_1.png'
if (posIndex === 2) iconPath = 'http://icon.honglounews.com/g_map_2.png'
if (posIndex === 3) iconPath = 'http://icon.honglounews.com/g_map_3.png'
if (posIndex === 4) iconPath = 'http://icon.honglounews.com/g_map_4.png'
if (posIndex === 5) iconPath = 'http://icon.honglounews.com/g_map_5.png'
let obj = {
longitude: String(item.location.lng),
latitude: String(item.location.lat),
iconPath,
width: '28px',
height: '28px',
zIndex: 999,
}
if (curIndex === markerLabelIndex)
obj.label = {
content: item.title,
color: '#333',
fontSize: 12,
anchorX: -(0.5 * (5 * 28))/2,
anchorY: -56,
textAlign: 'center',
bgColor: '#fff',
padding: 5,
borderRadius: 5,
borderColor: '#f2f2f2',
borderWidth: 1,
}
markers.push(obj)
})
this.setState({
markers
})
}
getAroundInfo (aroundTags) {
const { curObj, curId, markersNameArr } = this.state
let aroundInfoTemp = []
aroundTags.forEach((keyword, keywordIndex) => {
aroundInfoTemp.push(
new Promise((resolve, reject) => {
let keywordParams = {
keyword,
address_format: 'short',
page_size: '30',
location: {
latitude: curObj.latitude,
longitude: curObj.longitude
},
success: function (res) {
let cData = res.data || []
qqmapsdk.calculateDistance({
mode: 'driving',
from: {
latitude: curObj.latitude,
longitude: curObj.longitude
},
to: cData,
success: (distance) => {
if (distance.status === 0) {
const elements = distance.result.elements || []
let list = []
elements.map((eItem, eI) => {
let num = 3000
// if (keywordIndex === 0) num = 1000
// if (keywordIndex === 1) num = 1000
if (eItem.distance < num) {
list.push({
...cData[eI],
distance: eItem.distance,
duration: eItem.duration,
})
}
})
return resolve({keyword, list})
}
},
fail: function (res) {
return reject(res)
}
})
},
fail: function (res) {
return reject(res)
}
}
// if (keywordIndex === 2) keywordParams.filter = 'category=小学,中学'
qqmapsdk.search(keywordParams)
})
)
})
Promise.all(aroundInfoTemp).then(res => {
const curRes = res || []
let aroundArr = []
curRes.map((item, index) =>{
if (item.list.length > 0) {
aroundArr.push({...item})
} else {
aroundArr.push({
keyword: markersNameArr[index],
list: []
})
}
})
let csl = curObj.school_list || {}
const schoolList = [...csl.duikou, ...csl.guihua]
const schoolArr = schoolList.map(slItem => {
return {
title: slItem.school_name,
address: slItem.address,
location: {
lat: Number(slItem.latitude),
lng: Number(slItem.longitude),
}
}
})
aroundArr.unshift({
keyword: '学校',
list: schoolArr
})
this.setState({
aroundArr
}, () => {
this.getMarker()
})
Taro.api.house.apiestateperipheryadd({
estate_id: curId,
periphery: JSON.stringify(aroundArr)
}).then(eObj => {
// console.log(eObj)
})
})
}
componentDidShow () { }
componentDidHide () { }
posMoreHandle (str) {
this.setState({
isPosMoreShow: str === 'down' ? false : true
})
}
renderOptionsInfo () {
const { aroundArr, posIndex, isPosMoreShow } = this.state
const icon0 = require('./img/map/school0.png')
const icon0c = require('./img/map/school1.png')
const icon1 = require('./img/map/subway0.png')
const icon1c = require('./img/map/subway1.png')
const icon2 = require('./img/map/bus0.png')
const icon2c = require('./img/map/bus1.png')
const icon3 = require('./img/map/park0.png')
const icon3c = require('./img/map/park1.png')
const icon4 = require('./img/map/hospital0.png')
const icon4c = require('./img/map/hospital1.png')
const icon5 = require('./img/map/shop0.png')
const icon5c = require('./img/map/shop1.png')
const iconDown = require('./img/map/down.png')
const iconUp = require('./img/map/up.png')
const lebelPos = require('./img/map/label_pos.png')
const curMoreList = aroundArr[posIndex] && aroundArr[posIndex].list.length > 0 ? aroundArr[posIndex].list : []
return (
{
isPosMoreShow
?
:
}
{
aroundArr.map((one, oneIndex) => {
let str = icon0
if (oneIndex === 0) str = oneIndex === posIndex ? icon0c : icon0
if (oneIndex === 1) str = oneIndex === posIndex ? icon1c : icon1
if (oneIndex === 2) str = oneIndex === posIndex ? icon2c : icon2
if (oneIndex === 3) str = oneIndex === posIndex ? icon3c : icon3
if (oneIndex === 4) str = oneIndex === posIndex ? icon4c : icon4
if (oneIndex === 5) str = oneIndex === posIndex ? icon5c : icon5
return (
{one.keyword}
)
})
}
{
isPosMoreShow
&&
{
curMoreList.map((two, twoIndex) => {
return (
{two.title}
{two.address}
{
posIndex > 0
&&
{two._distance}米
}
{
posIndex > 2
&&
开车约:{(two.duration / 60).toFixed(0)}分钟
}
)
})
}
{
curMoreList.length === 0
&&
}
}
)
}
posLabelHandle (index) {
this.setState({
markerLabelIndex: index
}, () => {
this.getMarker()
})
}
previewImageHandle (cur, arr) {
const current = `${cur}_plus`
const urls = arr.map(item => {
return `${item.img_url}_plus`
})
Taro.previewImage({
current,
urls
})
}
navChange (posIndex) {
this.setState({
posIndex,
markerLabelIndex: -1,
}, () => {
this.getMarker()
})
}
renderPos () {
const { curObj, isPosMoreShow, markers } = this.state
return (
)
}
render () {
const { aroundArr } = this.state
return (
{
aroundArr.length > 0
&&
this.renderPos()
}
{this.renderOptionsInfo()}
)
}
}
export default Index