You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

294 lines
8.9 KiB

12 months ago
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,
12 months ago
isThirdPartyStation,
12 months ago
} from '@/services/charging';
12 months ago
import { showModal, showModalOnlyWithConfirmBtn } from '@/utils/wechat-ui';
12 months ago
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<ChargingProps> = () => {
const router = useRouter();
const [defaultCar, setDefaultCar] = useState('');
const [userType, setUserType] = useState('1');
const [selectedCar, setSelectedCar] = useState('');
const [getTicketMsg, setGetTicketMsg] = useState('');
const [realTimeInfo, setRealTimeInfo] = useState<QueryEquipmentStatusRes>({
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({
12 months ago
url: `/pages/order-detail/order-detail?isFromCharging=${true}&orderNo=${router.params.orderNo
}`,
12 months ago
});
}
}
}, [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) {
12 months ago
//是否为合作道闸车场,如果是有免费停车时长,跳转到选车界面
const freeTimeRes = await isThirdPartyStation({
order_no: router.params.orderNo,
11 months ago
});
12 months ago
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}`,
});
}
12 months ago
}
}
};
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 (
<View className="charging">
{getTicketMsg && (
<View className="charging__tip">
<RzIcon value="warning" color="#FF6584" size="17"></RzIcon>
{userType === '1' ? (
<Text className="charging__tip-text">
{defaultCar + getTicketMsg}
</Text>
) : (
<Text className="charging__tip-text">
{selectedCar + getTicketMsg}
</Text>
)}
</View>
)}
<View className="charging__title1">
<Text className="charging__title-text">
{realTimeInfo.stationName}
</Text>
</View>
<View className="charging__title">
<Text className="charging__title-text">
{realTimeInfo.equipmentNo} {realTimeInfo.connectorNo}
</Text>
<Text className="charging__title-text">
{realTimeInfo.equipmentSn}
</Text>
</View>
<View className="charging__title2">
<Text className="charging__title-text">
{realTimeInfo.chargeOrderNo}
</Text>
</View>
{realTimeInfo.equipmentType === 1 ? (
<View className="charging__soc">
<Text className="charging__soc-text">
{realTimeInfo.chargeCurSoc}
</Text>
<Text className="charging__unit">%</Text>
</View>
) : (
<View className="charging__slow">
<Text className="charging__slow-text"></Text>
</View>
)}
<Image
className="charging__animation"
src={imgCharging}
mode="widthFix"></Image>
{realTimeInfo.isBarrierFlag === 1 &&
(userType === '1' ? (
<View>
<View className="charging__plate" onClick={handleNavToMyCar}>
<Text className="charging__plate-text">
{defaultCar ? defaultCar : '设置车牌'}
</Text>
</View>
{/* <View className="charging__plate">
<Text className="charging__plate-tip">
{defaultCar
? '充电结束将自动获得停车券'
: '设置车牌,充电结束将自动获得停车券'}
</Text>
</View> */}
</View>
) : (
<View>
<View
className="charging__plate"
onClick={handleNavToMyCarToSelectCar}>
<Text className="charging__plate-text">
{selectedCar ? selectedCar : '选择车辆领取停车券'}
</Text>
</View>
{/* <View className="charging__plate">
<Text className="charging__plate-tip">
{selectedCar
? '充电结束将自动获得停车券'
: '选择车牌,充电结束将自动获得停车券'}
</Text>
</View> */}
</View>
))}
<View className="realtime-info">
<View className="grid">
{[
{ 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 (
<View className="grid__item" key={item.name}>
<Text className="grid__item-value">{item.value}</Text>
<Text className="grid__item-unit">{item.name}</Text>
</View>
);
})}
</View>
<View className="feedback" onClick={() => contact()}>
</View>
<View className="btn-box">
{realTimeInfo.continueChargeFlag && (
<AtButton
className="btn"
type="primary"
circle
onClick={handleContinueCharge}>
</AtButton>
)}
<AtButton
className={classNames(
{ btn: realTimeInfo.continueChargeFlag },
'btn--wide'
)}
type={realTimeInfo.continueChargeFlag ? 'secondary' : 'primary'}
circle
onClick={handleStop}>
</AtButton>
</View>
</View>
</View>
);
};
Charging.config = {
navigationBarTitleText: '充电中',
};