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.

235 lines
6.6 KiB

import Taro, {
useState,
useShareAppMessage,
useDidHide,
useCallback,
useReachBottom,
useDidShow,
useEffect,
useRouter,
} from '@tarojs/taro';
import { ScrollView, View, Text, Button } from '@tarojs/components';
import './index.scss';
import { AtTabBar } from 'taro-ui';
import chargeUnselect from '@/assets/images/icon/charge_unselect.png';
import chargeSelected from '@/assets/images/icon/charge_selected.png';
import mineUnselect from '@/assets/images/icon/mine_unselect.png';
import mineSelected from '@/assets/images/icon/mine_selected.png';
import { RzScanBtn } from '@/components/RzScanBtn/RzScanBtn';
import { Charge } from './components/Charge/Charge';
import { Mine } from './components/Mine/Mine';
import { queryUserOrder, OrderItemType } from '@/services/order-list';
import { huangHaiTest } from '@/services/common';
import {
queryEquipmentStatus,
QueryEquipmentStatusRes,
} from '@/services/charging';
import { checkIsLogin, scanCodeAndNavToConfirmFee } from '@/utils/utils';
import { addFeedback } from '@/services/feedback';
import { showSuccessToast } from '@/utils/wechat-ui';
// import { events } from '@/utils/event-bus';
// import { showToast } from '@/utils/wechat-ui';
let timer: NodeJS.Timeout;
export default function Index() {
const [currentOrder, setCurrentOrder] = useState<OrderItemType | null>(null);
const [
realTimeInfo,
setRealTimeInfo,
] = useState<QueryEquipmentStatusRes | null>(null);
const [orderNum, setOrderNum] = useState(0);
const [tapState, setTtapState] = useState<string>('');
const [SwitchState, setSwitchState] = useState<boolean>(false);
const getRealtimeInfo = async (currentOrder: OrderItemType) => {
console.log('getRealtimeInfo -> currentOrder', currentOrder);
const res = await queryEquipmentStatus({
orderNo: currentOrder.orderNo,
connectorSn: currentOrder.connectorSn,
});
if (res) {
setRealTimeInfo(res);
if (res.orderState !== 2) {
clearInterval(timer);
setRealTimeInfo(null);
}
}
};
const handleTest = async () => {
// const res = await huangHaiTest();
// console.log(res.data[0].columns.dictValue);
Taro.redirectTo({ url: `/pages/select-free-plate/select-free-plate?order_no=123456` });
// Taro.navigateTo({
// url: `/pages/labor-union/labor-union`,
// });
};
const router = useRouter();
useEffect(() => {
let tabs = router.params.tab_active;
setTtapState(tabs);
if (tabs == '1') {
console.log('setCurrent', tabs);
handleTabBarChange(1);
setSwitchState(true);
setTtapState('3');
}
}, []);
const [tab_active, settab_active] = useState(false);
const handleCloseSwitchState = () => {
setSwitchState(false);
};
useDidShow(async () => {
if (checkIsLogin()) {
const userOrderRes = await queryUserOrder({
pageNum: 1,
pageSize: 100,
type: 2,
});
if (userOrderRes) {
if (userOrderRes.list.length > 0) {
setCurrentOrder(userOrderRes.list[0]);
getRealtimeInfo(userOrderRes.list[0]);
setOrderNum(userOrderRes.list.length);
timer = setInterval(async () => {
getRealtimeInfo(userOrderRes.list[0]);
}, 5000);
} else {
setCurrentOrder(null);
setRealTimeInfo(null);
setOrderNum(0);
}
}
}
});
const handleNavToCharging = () => {
if (currentOrder) {
Taro.navigateTo({
url: `/pages/charging/charging?orderNo=${currentOrder.orderNo}&connectorSn=${currentOrder.connectorSn}`,
});
}
};
// const [scrollIntoView, setScrollIntoView] = useState(0);
// events.on('navFromMap', () => {
// setScrollIntoView(217);
// });
useShareAppMessage(() => {
return {
title: '驿来特PLUS',
path: '/pages/index/index',
imageUrl: 'https://i100c.oss-cn-beijing.aliyuncs.com/ylt/ylt_share.png',
};
});
useDidHide(() => {
// setScrollIntoView(0);
clearInterval(timer);
});
const [current, setCurrent] = useState(0); //当前tab
const [isReachBottom, setIsReachBottom] = useState(false);
// const [isPulling, setIsPulling] = useState(false);
const handleScanBtnClick = () => {
scanCodeAndNavToConfirmFee();
};
const handleScrollToLower = () => {
console.log('handleScrollToLower');
setIsReachBottom(true);
};
useReachBottom(() => {
console.log('object');
handleScrollToLower();
});
// const handlePulling = () => {
// setIsPulling(true);
// };
const handleTabBarChange = (value: number) => {
setCurrent(value);
if (value === 1) {
Taro.setNavigationBarTitle({ title: '我的' });
} else {
Taro.setNavigationBarTitle({ title: '首页' });
}
};
const handleComplete = useCallback(() => setIsReachBottom(false), []);
// const handlePullingComplete = useCallback(() => {
// setTimeout(() => {
// setIsPulling(false);
// }, 1500);
// }, []);
const currentTabElement = current ? (
// <Mine isPulling={isPulling} onPullingComplete={handlePullingComplete} />
<Mine
orderNum={orderNum}
getSwitchState={SwitchState}
checkState={handleCloseSwitchState}
/>
) : (
<Charge isReachBottom={isReachBottom} onComplete={handleComplete} />
);
return (
<View>
{/* <ScrollView
scrollY
className="index"
scrollTop={scrollIntoView}
onRefresherPulling={handlePulling}
refresherTriggered={isPulling}
refresherEnabled
refresherThreshold={90}
onScrollToLower={handleScrollToLower}>
{currentTabElement}
</ScrollView> */}
<Button size='mini' onClick={handleTest}></Button>
<View className="index">{currentTabElement}</View>
<AtTabBar
fixed
tabList={[
{
title: '首页',
image: chargeUnselect,
selectedImage: chargeSelected,
},
{ title: '我的', image: mineUnselect, selectedImage: mineSelected },
]}
iconSize={22}
color="#333"
selectedColor="#333"
onClick={(value) => handleTabBarChange(value)}
current={current}
/>
{realTimeInfo ? (
<View className="current-order" onClick={handleNavToCharging}>
<Text className="current-order__txt">
{realTimeInfo.equipmentType === 1
? realTimeInfo.chargeCurSoc + '%'
: '充电中'}
</Text>
</View>
) : (
<RzScanBtn className="scan-btn" onClick={handleScanBtnClick} />
)}
</View>
);
}
Index.config = {
navigationBarTitleText: '首页',
};