import { StandardProps } from '@tarojs/components/types/common'; import { View, Image, Text } from '@tarojs/components'; import './charging.scss'; // import chargingImage from '@/assets/images/charging/charging.gif' import { AtButton } from 'taro-ui'; import { RzIcon } from '@/components/RzIcon/RzIcon'; import { useEffect, useRouter, useState, useCallback, useDidShow, } from '@tarojs/taro'; import { queryEquipmentStatus, QueryEquipmentStatusRes, stopCharge, getDefaultCar, isThirdPartyStation, } from '@/services/charging'; import { showModal, showModalOnlyWithConfirmBtn } from '@/utils/wechat-ui'; import classNames from 'classnames'; import { contact, getUserInfoFromStorage, scanCodeAndNavToConfirmFee, } from '@/utils/utils'; import { events } from '@/utils/event-bus'; import imgCharging from '@/assets/images/charging/img_charging.gif'; type ChargingProps = {} & StandardProps; export const Charging: Taro.FC = () => { const router = useRouter(); const [defaultCar, setDefaultCar] = useState(''); const [userType, setUserType] = useState('1'); const [selectedCar, setSelectedCar] = useState(''); const [getTicketMsg, setGetTicketMsg] = useState(''); const [realTimeInfo, setRealTimeInfo] = useState({ chargeCurSoc: 0, chargeDuration: 0, chargeDegree: 0, chargeBalance: 0, chargePower: 0, chargeCurr: 0, chargeVolt: 0, equipmentSn: '--', connectorSn: '--', connectorNo: 1, equipmentName: '--', equipmentNo: 1, equipmentType: 1, chargeOrderNo: '--', orderState: 2, continueChargeFlag: false, equipmentId: 1, isBarrierFlag: 0, stationName: '', }); const getRealtimeInfo = useCallback(async () => { const res = await queryEquipmentStatus({ orderNo: router.params.orderNo, connectorSn: router.params.connectorSn, }); if (res) { setRealTimeInfo(res); if (res.orderState !== 2) { Taro.redirectTo({ url: `/pages/order-detail/order-detail?isFromCharging=${true}&orderNo=${router.params.orderNo }`, }); } } }, [router]); events.on('onSelectedCar', (plateNo) => { setSelectedCar(plateNo); }); //TODO: 需要判断这笔订单是否领取领取停车券的接口 //TODO: selectedCar 变化就去调用领券方法 useEffect(() => { console.log('selectedCar', selectedCar); }, [selectedCar]); useEffect(() => { getRealtimeInfo(); const id = setInterval(async () => { getRealtimeInfo(); }, 5000); return () => clearInterval(id); }, [getRealtimeInfo]); useDidShow(() => { getUserInfoFromStorage().then((res) => { setUserType(res.userType); if (res.userType === '1' && realTimeInfo.isBarrierFlag === 1) { getDefaultCar().then((res) => { if (res) { setDefaultCar(res.plateNo); } }); } }); }); const handleStop = async () => { const res = await showModal( '提示', '确定要停止充电吗?请停止充电后将充电枪放回原位。' ); if (res.confirm) { const { equipmentSn, connectorNo, equipmentId } = realTimeInfo; const stopRes = await stopCharge({ equipmentSn, connectorNo, equipmentId, orderNo: router.params.orderNo, }); if (stopRes) { //是否为合作道闸车场,如果是有免费停车时长,跳转到选车界面 const freeTimeRes = await isThirdPartyStation({ order_no: router.params.orderNo, }); if (freeTimeRes.success) { const freeRes = await showModalOnlyWithConfirmBtn( '提示', '请输入车辆信息领取免费停车时长!' ); if (freeRes.confirm) { Taro.redirectTo({ url: `/pages/select-free-plate/select-free-plate?order_no=${router.params.orderNo}`, }); } } else { Taro.redirectTo({ url: `/pages/order-detail/order-detail?isFromCharging=${true}&orderNo=${router.params.orderNo}`, }); } } } }; const handleContinueCharge = () => { scanCodeAndNavToConfirmFee(); }; const handleNavToMyCar = () => { Taro.navigateTo({ url: `/pages/my-car/my-car` }); }; const handleNavToMyCarToSelectCar = () => { Taro.navigateTo({ url: `/pages/my-car/my-car?isSelectCar=${true}` }); }; return ( {getTicketMsg && ( {userType === '1' ? ( {defaultCar + getTicketMsg} ) : ( {selectedCar + getTicketMsg} )} )} 站点名称:{realTimeInfo.stationName} 枪号:{realTimeInfo.equipmentNo}号桩 {realTimeInfo.connectorNo}号枪 桩号:{realTimeInfo.equipmentSn} 订单号:{realTimeInfo.chargeOrderNo} {realTimeInfo.equipmentType === 1 ? ( {realTimeInfo.chargeCurSoc} % ) : ( 充电中 )} {realTimeInfo.isBarrierFlag === 1 && (userType === '1' ? ( {defaultCar ? defaultCar : '设置车牌'} {/* {defaultCar ? '充电结束将自动获得停车券' : '设置车牌,充电结束将自动获得停车券'} */} ) : ( {selectedCar ? selectedCar : '选择车辆领取停车券'} {/* {selectedCar ? '充电结束将自动获得停车券' : '选择车牌,充电结束将自动获得停车券'} */} ))} {[ { name: '时长/分', value: realTimeInfo.chargeDuration }, { name: '度数/度', value: realTimeInfo.chargeDegree }, { name: '费用/元', value: realTimeInfo.chargeBalance }, { name: '功率/千瓦', value: realTimeInfo.chargePower }, { name: '电流/安', value: realTimeInfo.chargeCurr }, { name: '电压/伏', value: realTimeInfo.chargeVolt }, ].map((item) => { return ( {item.value} {item.name} ); })} contact()}> 联系客服 {realTimeInfo.continueChargeFlag && ( 继续充电 )} 结束充电 ); }; Charging.config = { navigationBarTitleText: '充电中', };