/** * 车辆列表V2 * @邠心vbe on 2024/01/30 */ import React, { Component } from 'react'; import { View, Text, Image, StyleSheet, Pressable, FlatList, RefreshControl } from 'react-native'; import apiUser from '../../api/apiUser'; import Button, { ElevationObject } from '../../components/Button'; import Dialog from '../../components/Dialog'; import TextView from '../../components/TextView'; import { PageList } from '../Router'; import { MyRefreshProps } from '../../components/ThemesConfig'; import utils from '../../utils/utils'; export default class VehicleListV2 extends Component { constructor(props) { super(props); this.state = { vehicleList: [], refreshing: false }; } componentDidMount() { //this.getVehicleList(); this.props.navigation.addListener('focus', () => { this.getVehicleList(); }) } onRefresh() { this.setState({ refreshing: true }) this.getVehicleList(); } getVehicleList() { apiUser.getVehicles().then(res => { if (res.data) { this.setState({ vehicleList: res.data, refreshing: false }); if (this.props.onResult) { this.props.onResult(res.data.length) } } }).catch(err => { this.setState({ vehicleList: [], refreshing: false }); if (this.props.onResult) { this.props.onResult(0) } }); } removeVehicle(id) { Dialog.showDialog({ title: $t('profile.removeVehicle'), message: $t('profile.tipRemoveVehicle'), callback: btn => { if (btn == 'ok') { Dialog.dismissLoading(); this.deleteVehicle(id); } } }) } deleteVehicle(id) { Dialog.showProgressDialog(); apiUser.deleteVehicle({ vehiclePk: id }).then(res => { Dialog.dismissLoading(); toastShort($t('common.deleteSuccess')); this.getVehicleList(); }).catch(err => { Dialog.dismissLoading(); toastShort(err); }); } showTypeCapacity(item) { let str = ""; if (item.connectorType) { str += item.connectorType; } if (item.batteryCapacity) { if (str) { str += ", "; } str += item.batteryCapacity + "KWH"; } return str; } listItem = ({item, index, separators}) => { return ( { startPage(PageList.editVehicleV2, {id: item.vehiclePk}); }} onLongPress={() => { this.removeVehicle(item.vehiclePk) }}> {item.brand} {item.model} {item.licensePlate} {this.showTypeCapacity(item)} {/* */} {/* this.removeVehicle(item.vehiclePk)}> */} { utils.isNotEmpty(item.vehiclePhoto) && } ) } listHeader = () => { return ( {$t('profile.titleVehicles')} ) } render() { return ( item?.vehiclePk} //onEndReached={() => this.getVehicleListPage()} refreshControl={ this.onRefresh()} /> } ListHeaderComponent={this.listHeader} ListEmptyComponent={{$t('profile.noVehicles')}} /> ); } } const styles = StyleSheet.create({ titleText: { fontSize: 14, color: textPrimary, fontWeight: 'bold' }, vehicleView: { borderWidth: 1, borderRadius: 4, borderStyle: 'solid', borderColor: '#EAEAEA', overflow: 'hidden', //...ElevationObject(5), ...$margin(8, 16), ...$padding(12, 16, 12), backgroundColor: colorLight }, vehicleViewBg: { top: 16, right: 16, width: 40, height: 40, position: 'absolute' }, vehicleRow: { alignItems: 'center', flexDirection: 'row', }, vehicleIcon: { width: 32, height: 32, }, vehicleName: { color: textDark, fontSize: 14, fontWeight: 'bold' }, vehicleModle: { color: textPrimary, fontSize: 14, paddingTop: 4, paddingBottom: 4 }, vehicleTypeRow: { height: 20, marginLeft: 44, borderRadius: 4, overflow: 'hidden', alignItems: 'center', flexDirection: 'row', backgroundColor: '#E5EFDE' }, vehicleTypeIcon: { width: 20, height: 20, alignItems: 'center', justifyContent: 'center', backgroundColor: colorAccent }, vehicleType: { color: colorAccent, fontSize: 14 }, closeIcon: { top: 0, right: 0, padding: 12, position: 'absolute' }, addButton: { marginTop: 16, borderWidth: 1, borderRadius: 4, borderStyle: 'solid', borderColor: colorPrimary, backgroundColor: 'transparent' }, addBtnText: { fontSize: 15, color: colorPrimary, fontWeight: 'bold', paddingLeft: 8 } });