/** * 搜索页 * @邠心vbe on 2021/04/12 */ import React, { Component } from 'react'; import { View, Text, StyleSheet, TextInput, FlatList, Image } from 'react-native'; import apiStation from '../../api/apiStation'; import utils from '../../utils/utils'; import { PageList } from '../Router'; import ListView from './ListView'; export default class Search extends Component { constructor(props) { super(props); this.state = { isSearch: false, searchResult: [{id:0}] }; } componentDidMount() { this.getGeoLocation(); } getGeoLocation() { navigator.geolocation.getCurrentPosition(location => { let latlng = { lat: location.coords.latitude, lng: location.coords.longitude } this.searchStation(latlng); }, error => { console.info("[Search] getGeoLocation", error); }); } searchStation(latlng) { this.setState({ isSearch: true }); latlng.siteName = this.searchWorld apiStation.searchStation(latlng).then(res => { if (res.data.sites) { const list = []; res.data.sites.forEach(item => { list.push({ id: item.sitePk, name: item.siteName, address: item.siteAddress, latitude: item.locationLatitude, longitude: item.locationLongitude, acConnector: item.acConnector, allConnector: item.allConnector, dcConnector: item.dcConnector, siteType: item.siteType, distance: utils.getDistance(item.distance), serviceProvider: item.serviceProvider }); }); this.setState({ isSearch: false, searchResult: list }); } }).catch(err => { console.log('searchStation-err', err); this.setState({ isSearch: false, searchResult: [] }); }); } intoStation(info) { startPage(PageList.chargeDetail, {stationInfo: info, action: 'search'}); } listItem = (props) => { return this.intoStation(props.item)}/> } render() { return ( { this.searchWorld = text; }} onSubmitEditing={() => { this.getGeoLocation(); }}/> { this.state.isSearch ? : item.id} ListEmptyComponent={{$t('home.noSearch')}} /> } ); } } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colorLight }, searchView: { marginTop: 16, marginLeft: 16, marginRight: 16, marginBottom: 8, paddingLeft: 16, paddingRight: 16, borderRadius: 60, borderWidth: 1, borderColor: '#E5E5E5', alignItems: 'center', flexDirection: 'row', backgroundColor: '#F5F5F5' }, searchInput: { flex: 1, color: textPrimary, ...$padding(6, 8), fontSize: 15, marginLeft: 4, lineHeight: 20 }, searchingView: { padding: 16, alignItems: 'center' }, seachingIcon: { width: 60, height: 60 }, noResult: { color: '#999', fontSize: 14, padding: 20, textAlign: 'center', }, listView: { flex: 1 }, itemView: { alignItems: 'center', flexDirection: 'row', borderBottomWidth: 1, borderBottomColor: '#eee' }, stationInfo: { flex: 1, padding: 16 }, nameView: { paddingTop: 3, alignItems: 'center', flexDirection: 'row' }, stationName: { color: textPrimary, fontSize: 18, fontWeight: 'bold' }, stationAddress: { color: '#666', fontSize: 14, paddingBottom: 8 }, infoStatus: { fontSize: 10, paddingTop: 3, paddingLeft: 8, paddingRight: 8, paddingBottom: 3, borderRadius: 5, marginLeft: 12, }, selected: { color: textPrimary, backgroundColor: colorAccent }, available: { color: textLight, backgroundColor: '#90DB0A' }, unavailable: { color: '#999', fontSize: 10.5, paddingTop: 7, paddingLeft: 9, paddingRight: 9, paddingBottom: 7, backgroundColor: '#CCC' }, connectView: { paddingTop: 4, paddingBottom: 4, alignItems: 'center', flexDirection: 'row' }, directView: { zIndex: 1, paddingTop: 4, paddingRight: 16, alignItems: 'center' }, distanceText: { color: textPrimary, fontSize: 12, paddingTop: 2 }, });