import { Component, PropsWithChildren, useEffect, useRef, useState } from 'react' import { View, Text, Button, Input, Picker } from '@tarojs/components' import './index/index.scss' import './Clock.scss' import Taro, { useDidShow, useReady, useRouter } from '@tarojs/taro' // import ComponentA from './component' import Rings from '@components/Rings'; import { useDispatch, useSelector } from 'react-redux'; import { getInfoSuccess, logoutSuccess } from '@/store/user'; import { wxPubFollow } from '@/services/permission'; import { gobalConfigs, staticResources, uploadSessionKey } from '@/services/common'; import { use } from 'i18next'; import Clocks from '@/features/trackTimeDuration/components/Clock'; import Console from '@/features/trackTimeDuration/components/Console'; import More from '@/features/trackTimeDuration/components/More'; import Schedule from '@/features/trackTimeDuration/components/Schedule'; import TitleBar from '@/features/trackTimeDuration/components/TitleBar'; import { getChecks, getClocks } from '@/services/trackTimeDuration'; import { setScenario } from '@/store/scenario'; import { setSpecifiedStatus, setSpecifiedState, machine } from '@/store/trackTimeMachine'; import trackTimeService from '@/store/trackTimeMachine'; import { setWXPubFollow } from '@/store/permission'; import Tooltip from '@/components/Tooltip' // import TabBar from '../../components/Tabbar'; export default function IndexPage() { const dispatch = useDispatch(); const array: any[] = [] const [isFollowed, setIsFollowed] = useState(false) const [checkData, setCheckData] = useState(null) const user = useSelector((state: any) => state.user); const permission = useSelector((state: any) => state.permission); const common = useSelector((state: any) => state.common); const [counter, setCounter] = useState(0) const [timerId, setTimerId] = useState(null) const [needShowAddTip, setNeedShowAddTip] = useState(false) // const moreRef = useRef(null); // global.moreRef = Taro.createRef() array.push('ffff'); array.push(ffff) // array.push() global.dispatch = dispatch; useEffect(() => { dispatch(staticResources() as any); dispatch(gobalConfigs() as any); // dispatch(gobalConfigs() as any); trackTimeService.onTransition(state => { if ((state.value as any).FAST_SLEEP == 'COMPLETED' || (state.value as any).FAST == 'ONGOING' || (state.value as any).SLEEP == 'ONGOING' || (state.value as any).FAST_SLEEP == 'ONGOING1' || (state.value as any).FAST_SLEEP == 'ONGOING2' || (state.value as any).FAST_SLEEP == 'ONGOING3' || (state.value as any).FAST == 'COMPLETED' || (state.value as any).SLEEP == 'COMPLETED') { getCheckData() } }) }, []) useEffect(() => { if (user.isLogin) { //检查用户是否添加过小程序 checkAddToMini(); //检查session是否过期 checkSession() } }, [user.isLogin]) function checkSession() { if (process.env.TARO_ENV === 'weapp') { Taro.checkSession({ success: function () { //session_key 未过期,并且在本生命周期一直有效 console.log('session_key 未过期,并且在本生命周期一直有效') }, fail: function () { // session_key 已经失效,需要重新执行登录流程 console.log('session_key 已经失效,需要重新执行登录流程') //更新session key,发送给服务器 // dispatch(logoutSuccess()); // wx.login() //重新登录 Taro.login({ }) Taro.login().then(res => { // code = res.code; uploadSessionKey({ type: 'WX_MP', code: res.code }); }) } }) } } function checkAddToMini() { process.env.TARO_ENV == 'weapp' && wx.checkIsAddedToMyMiniProgram({ success: (res) => { console.log(res.added); if (!res.added) { setNeedShowAddTip(true) } }, fail: (e) => { console.log(e) } }); } useEffect(() => { startTimer(); return () => { // 在组件卸载时清除定时器 if (timerId) { clearInterval(timerId); } }; }, [timerId]); const startTimer = () => { // 避免重复启动定时器 if (timerId) { return; } const id = setInterval(() => { setCounter((prevCounter) => prevCounter + 1); }, 1000); setTimerId(id as any); }; useReady(async () => { const userData = await getStorage('userData'); if (userData) { dispatch(getInfoSuccess(JSON.parse(userData as string)) as any); // return JSON.parse(userData as string) as UserState; setTimeout(() => { checkWXPubFollow() getCheckData() }, 200) } }) function clearTempScenarioCache() { global.schedule_fast = null global.schedule_sleep = null Taro.removeStorage({ key: 'tempScenario', success: function (res) { } }) } useDidShow(() => { if (user.isLogin) { checkWXPubFollow() getCheckData(); } clearTempScenarioCache() }) function getCheckData() { getClocks().then(res => { dispatch(setScenario((res as any).scenario)); machine.context.checkData = res as any; global.scenario = (res as any).current_record.scenario; // trackTimeService.send({ type: 'RESET' }); // trackTimeService.send({ type: (res as any).current_record.scenario }); const currentState = trackTimeService.getSnapshot(); let json = {}; var key = (res as any).current_record.scenario var status = (res as any).current_record.status json[key] = status currentState.value = json; // debugger machine.context.currentStatus = `${key}.${status}`;//'mixed.ON_GOING2' setCheckData(res as any) }) return getChecks().then(res => { if ((res as any).scenario) { dispatch(setScenario((res as any).scenario)); global.scenario = (res as any).scenario; // global.checkData = res; // console.log((res as any).scenario.name + ' ' + (res as any).status); // trackTimeService.send({type:(res as any).scenario.name}); // setSpecifiedStatus('FAST_SLEEP', 'ON_GOING'); // 初始化状态机 // const initialState = machine.initialState; // 设置指定状态为 C->3 // const nextState = machine.transition(initialState, 'SET_SPECIFIED_STATE'); // const specifiedState = setSpecifiedState(nextState, 'FAST_SLEEP'); // setSpecifiedState(); // console.log('name:'+(res as any).scenario.name) // machine.reset(); trackTimeService.send({ type: 'RESET' }); trackTimeService.send({ type: (res as any).scenario.name }); const currentState = trackTimeService.getSnapshot(); let json = {}; var key = (res as any).scenario.name json[key] = (res as any).status currentState.value = json; // debugger machine.context.currentStatus = `${key}.${(res as any).status}`;//'mixed.ON_GOING2' machine.context.checkData = res as any; // debugger // trackTimeService.send('APPLE'); // machine.transition(`${key}.${(res as any).status}`,'' as any); // trackTimeService.send({type:'START_FAST'}); // trackTimeService.send({type:'START_SLEEP'}); // trackTimeService.send({type:'END_SLEEP'}); // trackTimeService.send({type:'END_SLEEP'}); // trackTimeService.send({type:'START_FAST'}); // trackTimeService.send({type:'END_FAST'}); // trackTimeService.send({type:'START_SLEEP'}); // console.log(currentState.value); // debugger // trackTimeService.send('setCurrentStatus', {status:(res as any).status}); // setCurrentStatus((res as any).status); // trackTimeService.send({type:'START_FAST'}); } }) } function checkWXPubFollow() { wxPubFollow().then(res => { setIsFollowed((res as any).wx_pub_followed) // if ((res as any).wx_pub_followed == true) { // // setTimeout(() => { // // dispatch(setWXPubFollow(true)); // // }, 1000) // // dispatch(setWXPubFollow(true)); // setIsFollowed((res as any).wx_pub_followed) // } }) } function followWxPub() { const resource = common.resources.filter((item: any) => { return item.code == 'follow_wx_pub' }) Taro.showModal({ title: '提示', content: '关注公众号后可接收提醒\n点击确定,前往关注', showCancel: true, success(result) { if (result.confirm) { Taro.navigateTo({ url: '/pages/H5?title=fast16cc 关注服务号&url=' + resource[0].url, }) } }, }) } async function getStorage(key: string) { try { const res = await Taro.getStorage({ key }); return res.data; } catch { return ''; } } function schedule() { if (!user.isLogin) { return } // if ((checkData as any).current_record.scenario == 'FAST_SLEEP') { return // } // return } return ( { needShowAddTip && { setNeedShowAddTip(false) }} /> } { !isFollowed && user.isLogin && followWxPub()}>去关注公众号 } { user.isLogin && { Taro.navigateTo({ url: '/pages/RecordsHistory?type=time' }) }}>查看全部记录 } { checkData && schedule() } { checkData && (checkData as any).latest_record && } {/* test picker */} {/* */} ) }