数据:
[ { "description": "gethouseData", "request": { "method": "GET", "uri": "/api/house/surround", "queries": { "type": "交通" } }, "response": { "status": 200, "json": { "code": 1, "message": "ok", "data": [ { "id": "10000001", "lat": "32.091755", "lng": "112.135381", "address": "湖北省襄阳市樊城区团山大道与邓城大道交叉口北150米", "title": "吾悦公交站", "telephone": "", "distance": 215.21 }, { "id": "10000002", "lat": "32.090074", "lng": "112.135059", "address": "湖北省襄阳市樊城区207国道(旧)", "title": "公交站", "telephone": "", "distance": 215.21 }, { "id": "10000003", "lat": "32.093982", "lng": "112.137161", "address": "湖北省襄阳市樊城区团山大道与邓城大道交叉口北150米", "title": "襄阳吾悦广场送车点", "telephone": "", "distance": 215.21 } ] } } } ]
tsx:
import React, { useEffect, useState } from 'react' import Taro, { useReady, getCurrentInstance } from '@tarojs/taro' import { View, Text, Map } from "@tarojs/components" import classnames from 'classnames' import api from '@services/api' import app from '@services/request' import NavBar from '@components/navbar/index' import useNavData from '@hooks/useNavData' import './index.scss' interface IMapTab { name: string type: string icon: string } const INIT_TAB = { name: '交通', type: 'traffic', icon: 'icontraffic' } /** * /pages/newhouse/surround/index?id=196&lat=32.093051&lng=112.133937 */ const houseSurround = () => { let currentRouter: any = getCurrentInstance().router let params: any = currentRouter.params let surroundMap: any = null const houseMarker = { latitude: params.lat, longitude: params.lng, 30, height: 30, iconPath: 'http://192.168.2.248/assets/mini/location.png', callout: { content: params.name, color: '#fff', fontSize: 14, borderWidth: 2, borderRadius: 5, borderColor: '#11a43c', bgColor: '#11a43c', padding: 5, display: 'ALWAYS', textAlign: 'center' } } const { contentHeight } = useNavData() const [tab, setTab] = useState<IMapTab>(INIT_TAB) const [markers, setMarkers] = useState<any[]>([houseMarker]); const surroundTabs: IMapTab[] = [ { name: '交通', type: 'traffic', icon: 'icontraffic' }, { name: '学校', type: 'education', icon: 'iconeducation' }, { name: '银行', type: 'bank', icon: 'iconbank' }, { name: '医院', type: 'hospital', icon: 'iconyiyuan' }, { name: '购物', type: 'shopping', icon: 'iconShopping' } ] useReady(() => { surroundMap = Taro.createMapContext('surroundMap') console.log(surroundMap) }) useEffect(() => { app.request({ url: api.getHouseSurround, data: { type: tab.name } }, { isMock: true }) .then((result: any) => { const surroundMarkers: any[] = [] for (const item of result) { surroundMarkers.push({ latitude: item.lat, longitude: item.lng, 24, height: 36, iconPath: `http://192.168.2.248/assets/mini/${tab.type}.png`, callout: { content: `${item.title} ${item.address}`, color: '#333', fontSize: 12, borderWidth: 2, borderRadius: 5, borderColor: '#fff', padding: 5, display: 'BYCLICK' } }) } setMarkers([houseMarker, ...surroundMarkers]) }) }, [tab]) return ( <View className="surround"> <NavBar title="楼盘周边" back={true} /> <View className="surround-wrapper" style={{ height: contentHeight }}> <Map id="surroundMap" className="surround-map" latitude={params.lat} longitude={params.lng} markers={markers} enableZoom={false} > </Map> <View className="surround-tabs"> { surroundTabs.map((item: any, index: number) => ( <View key={index} onClick={() => setTab(item)} className={classnames('tabs-item', tab.type === item.type && 'actived')} > <Text className={classnames('iconfont', item.icon)}></Text> <Text className="text">{item.name}</Text> </View> )) } </View> </View> </View> ) } export default houseSurround
scss:
.surround { &-wrapper { position: relative; .surround-map { position: absolute; top: 0; bottom: 0; width: 100%; height: auto; } .surround-tabs { display: flex; position: absolute; bottom: 0; width: 100%; height: 90px; line-height: 90px; background-color: $white; text-align: center; font-size: $font-basic; .tabs-item { flex: 1; color: $text-color; .iconfont { font-size: $font-32; margin-right: 10px; } &.actived { color: $primary-color; } } } } }