123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- 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 (
- <View className="scoped-options">
- {
- isPosMoreShow
- ? <Image src={iconDown} className="so-icon-updown" onClick={this.posMoreHandle.bind(this, 'down')}/>
- : <Image src={iconUp} className="so-icon-updown" onClick={this.posMoreHandle.bind(this, 'up')}/>
- }
- <View className="so-wrap">
- {
- 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 (
- <View className="so-item" key={oneIndex}>
- <View className={oneIndex === posIndex ? 'so-title cur' : 'so-title'} onClick={this.navChange.bind(this, oneIndex)}>
- <Image src={str} className="img"/>
- <View className="t">{one.keyword}</View>
- </View>
- </View>
- )
- })
- }
- </View>
- {
- isPosMoreShow
- &&
- <View className="so-content">
- {
- curMoreList.map((two, twoIndex) => {
- return (
- <View className="so-p" key={twoIndex} onClick={this.posLabelHandle.bind(this, twoIndex)}>
- <View className="p1">{two.title}</View>
- <View className="p2">{two.address} </View>
- {
- posIndex > 0
- &&
- <View className="r1"><Image src={lebelPos} className="i"/>{two._distance}米</View>
- }
- {
- posIndex > 2
- &&
- <View className="r2">开车约:{(two.duration / 60).toFixed(0)}分钟</View>
- }
- </View>
- )
- })
- }
- {
- curMoreList.length === 0
- &&
- <ListMore isOther={true} />
- }
- </View>
- }
- </View>
- )
- }
- 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 (
- <View className="scoped-list-map">
- <Map
- className={isPosMoreShow ? 'm t2' : 'm'}
- longitude={curObj.longitude}
- latitude={curObj.latitude}
- scale="14"
- markers={markers}
- show-compass={true}
- />
- </View>
- )
- }
- render () {
- const { aroundArr } = this.state
- return (
- <View className="l-box">
- {
- aroundArr.length > 0
- &&
- this.renderPos()
- }
- {this.renderOptionsInfo()}
- </View>
- )
- }
- }
- export default Index
|