|
@@ -0,0 +1,1118 @@
|
|
|
|
|
+import { PageContainer, Switch, Text, View } from '@tarojs/components'
|
|
|
|
|
+import './DayNightCard.scss'
|
|
|
|
|
+import { ColorType } from '@/context/themes/color'
|
|
|
|
|
+import { useEffect, useState } from 'react'
|
|
|
|
|
+import Box from '@/components/layout/Box'
|
|
|
|
|
+import Taro, { useDidShow } from '@tarojs/taro'
|
|
|
|
|
+import { clearLocation, getPerm, latestLocation, uploadPerm } from '@/services/user'
|
|
|
|
|
+import { useDispatch, useSelector } from 'react-redux'
|
|
|
|
|
+import { useTranslation } from 'react-i18next'
|
|
|
|
|
+import { TimeFormatter } from '@/utils/time_format'
|
|
|
|
|
+import { systemLocation } from '@/services/common'
|
|
|
|
|
+import { setDayRingData, showDay } from '@/store/day'
|
|
|
|
|
+import { setNightRingData, showNight, updateMember } from '@/store/night'
|
|
|
|
|
+import Modal from '@/components/layout/Modal.weapp'
|
|
|
|
|
+import { rpxToPx } from '@/utils/tools'
|
|
|
|
|
+import { jumpPage } from '@/features/trackTimeDuration/hooks/Common'
|
|
|
|
|
+import DayNightDetailPopup from './DayNightDetailPopup'
|
|
|
|
|
+import { IconDay, IconInfo, IconNight } from '@/components/basic/Icons'
|
|
|
|
|
+
|
|
|
|
|
+let useNavigation;
|
|
|
|
|
+if (process.env.TARO_ENV == 'rn') {
|
|
|
|
|
+ useNavigation = require("@react-navigation/native").useNavigation
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+let locationDetail;
|
|
|
|
|
+
|
|
|
|
|
+let sunriseA = new Date()
|
|
|
|
|
+sunriseA.setHours(6)
|
|
|
|
|
+sunriseA.setMinutes(0)
|
|
|
|
|
+sunriseA.setSeconds(0)
|
|
|
|
|
+sunriseA.setMilliseconds(0)
|
|
|
|
|
+const sunsetA = new Date()
|
|
|
|
|
+sunsetA.setHours(18)
|
|
|
|
|
+sunsetA.setMinutes(0)
|
|
|
|
|
+sunsetA.setSeconds(0)
|
|
|
|
|
+sunsetA.setMilliseconds(0)
|
|
|
|
|
+
|
|
|
|
|
+const sunriseB = new Date()
|
|
|
|
|
+sunriseB.setHours(6)
|
|
|
|
|
+sunriseB.setMinutes(0)
|
|
|
|
|
+sunriseB.setSeconds(0)
|
|
|
|
|
+sunriseB.setMilliseconds(0)
|
|
|
|
|
+
|
|
|
|
|
+let lastDayInfo: any = null;
|
|
|
|
|
+let lastNightInfo: any = null;
|
|
|
|
|
+let joingMember = false
|
|
|
|
|
+export default function DayNightCard(props: { isNight: boolean, count: number }) {
|
|
|
|
|
+ const user = useSelector((state: any) => state.user);
|
|
|
|
|
+ const dayStore = useSelector((state: any) => state.day);
|
|
|
|
|
+ const nightStore = useSelector((state: any) => state.night);
|
|
|
|
|
+ const [authInfo, setAuthInfo] = useState(global.locationDetail ? global.locationDetail : null)
|
|
|
|
|
+ const [sunriseTime, setSunriseTime] = useState('06:00')
|
|
|
|
|
+ const [sunriseTmrTime, setSunriseTmrTime] = useState('06:00')
|
|
|
|
|
+ const [sunsetTime, setSunsetTime] = useState('18:00')
|
|
|
|
|
+
|
|
|
|
|
+ const [sunriseDate, setSunriseDate] = useState<any>(sunriseA)
|
|
|
|
|
+ const [sunriseTmrDate, setSunriseTmrDate] = useState<any>(new Date(sunriseB.getTime() + 24 * 3600 * 1000))
|
|
|
|
|
+ const [sunsetDate, setSunsetDate] = useState<any>(sunsetA)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ const [showDetailModal, setShowDetailModal] = useState(false)
|
|
|
|
|
+ const [showDetailPopup, setShowDetailPopup] = useState(false)
|
|
|
|
|
+ // const [locationDetail, setLocationDetail] = useState(null)
|
|
|
|
|
+
|
|
|
|
|
+ const [nightDate, setNightDate] = useState(new Date())
|
|
|
|
|
+ const [dayDate, setDayDate] = useState(new Date())
|
|
|
|
|
+ const dispatch = useDispatch();
|
|
|
|
|
+ const { t } = useTranslation()
|
|
|
|
|
+ const isMember = true;
|
|
|
|
|
+ let navigation;
|
|
|
|
|
+ if (useNavigation) {
|
|
|
|
|
+ navigation = useNavigation()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ if (user.isLogin) {
|
|
|
|
|
+ if (global.locationDetail) {
|
|
|
|
|
+ locationDetail = global.locationDetail
|
|
|
|
|
+ setAuthInfo(locationDetail)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var today = new Date()
|
|
|
|
|
+ var yesterday = new Date(today.getTime() - 24 * 3600 * 1000)
|
|
|
|
|
+ var tomorrow = new Date(today.getTime() + 24 * 3600 * 1000 * 3)
|
|
|
|
|
+ var strYesterday = `${yesterday.getFullYear()}-${TimeFormatter.padZero(yesterday.getMonth() + 1)}-${TimeFormatter.padZero(yesterday.getDate())}`
|
|
|
|
|
+ var strTomorrow = `${tomorrow.getFullYear()}-${TimeFormatter.padZero(tomorrow.getMonth() + 1)}-${TimeFormatter.padZero(tomorrow.getDate())}`
|
|
|
|
|
+ latestLocation({
|
|
|
|
|
+ date_start: strYesterday, date_end: strTomorrow
|
|
|
|
|
+ }).then(data => {
|
|
|
|
|
+ setAuthInfo(data as any)
|
|
|
|
|
+ updateDate(data)
|
|
|
|
|
+ locationDetail = data
|
|
|
|
|
+ global.locationDetail = locationDetail
|
|
|
|
|
+ Taro.setStorage({
|
|
|
|
|
+ key: 'gps',
|
|
|
|
|
+ data: JSON.stringify(data as any)
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ } else {
|
|
|
|
|
+ setSunriseTime('06:00');
|
|
|
|
|
+ setSunriseTmrTime('06:00')
|
|
|
|
|
+ setSunsetTime('18:00')
|
|
|
|
|
+ setSunriseDate(sunriseA)
|
|
|
|
|
+ setSunriseTmrDate(new Date(sunriseB.getTime() + 24 * 3600 * 1000))
|
|
|
|
|
+ setSunsetDate(sunsetA)
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [user.isLogin])
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ locationDetail = global.locationDetail
|
|
|
|
|
+ setAuthInfo(locationDetail)
|
|
|
|
|
+ }, [global.locationDetail])
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if (locationDetail)
|
|
|
|
|
+ updateDate(locationDetail)
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ global.clearNightLocation = () => {
|
|
|
|
|
+ clearCacheData()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ global.clearDayLocation = () => {
|
|
|
|
|
+ clearCacheData()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [])
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if (locationDetail) {
|
|
|
|
|
+ var detail: any = locationDetail
|
|
|
|
|
+ var now = new Date()
|
|
|
|
|
+ if (now.getHours() == 0 && now.getMinutes() == 0 && now.getSeconds() == 0) {
|
|
|
|
|
+ detail.daylights.splice(0, 1)
|
|
|
|
|
+ }
|
|
|
|
|
+ locationDetail = detail
|
|
|
|
|
+
|
|
|
|
|
+ // setLocationDetail(detail)
|
|
|
|
|
+ updateDate(detail)
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [props.count])
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ // if (user.test_user && joingMember) {
|
|
|
|
|
+ // auth()
|
|
|
|
|
+ // }
|
|
|
|
|
+ if (!isMember) {
|
|
|
|
|
+ lastNightInfo = null
|
|
|
|
|
+ lastDayInfo = null
|
|
|
|
|
+ locationDetail = null
|
|
|
|
|
+ setAuthInfo(null)
|
|
|
|
|
+ setSunriseTime('06:00')
|
|
|
|
|
+ setSunriseTmrTime('06:00')
|
|
|
|
|
+ setSunsetTime('18:00')
|
|
|
|
|
+ dispatch(updateMember({ isMember: isMember, gpsInfo: null }))
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ dispatch(setDayRingData({
|
|
|
|
|
+ date: new Date().getTime(),
|
|
|
|
|
+ sunrise: '06:00',
|
|
|
|
|
+ sunset: '18:00'
|
|
|
|
|
+ }))
|
|
|
|
|
+ dispatch(setNightRingData({
|
|
|
|
|
+ date: new Date().getTime(),
|
|
|
|
|
+ sunrise: '06:00',
|
|
|
|
|
+ sunset: '18:00'
|
|
|
|
|
+ }))
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ var gps = Taro.getStorageSync('gps')
|
|
|
|
|
+ if (gps) {
|
|
|
|
|
+ locationDetail = JSON.parse(gps)
|
|
|
|
|
+ global.locationDetail = JSON.parse(gps)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [user.test_user])
|
|
|
|
|
+
|
|
|
|
|
+ function updateDate(data) {
|
|
|
|
|
+
|
|
|
|
|
+ var today = new Date()
|
|
|
|
|
+ // var yesterday = new Date(today.getTime() - 24 * 3600 * 1000)
|
|
|
|
|
+ var tomorrow = new Date(today.getTime() + 24 * 3600 * 1000)
|
|
|
|
|
+ // var strYesterday = `${yesterday.getFullYear()}-${TimeFormatter.padZero(yesterday.getMonth() + 1)}-${TimeFormatter.padZero(yesterday.getDate())}`
|
|
|
|
|
+ // var strTomorrow = `${tomorrow.getFullYear()}-${TimeFormatter.padZero(tomorrow.getMonth() + 1)}-${TimeFormatter.padZero(tomorrow.getDate())}`
|
|
|
|
|
+ if (isMember && data && data.daylights && data.daylights.length > 0) {
|
|
|
|
|
+ var yesterdayDate = new Date(data.daylights[0].date + 'T' + data.daylights[0].sunset)
|
|
|
|
|
+ var todaySunriseDate = new Date(data.daylights[1].date + 'T' + data.daylights[1].sunrise)
|
|
|
|
|
+ var todaySunsetDate = new Date(data.daylights[1].date + 'T' + data.daylights[1].sunset)
|
|
|
|
|
+ var tomorrowSunriseDate = new Date(data.daylights[2].date + 'T' + data.daylights[2].sunrise)
|
|
|
|
|
+ var tomorrowSunsetDate = new Date(data.daylights[2].date + 'T' + data.daylights[2].sunset)
|
|
|
|
|
+
|
|
|
|
|
+ // var tomorrowSunsetDate = new Date(data.daylights[2].date + 'T' + data.daylights[2].sunset)
|
|
|
|
|
+ //今天凌晨日出前
|
|
|
|
|
+ if (yesterdayDate.getTime() < today.getTime() && today.getTime() < todaySunriseDate.getTime()) {
|
|
|
|
|
+ setNightDate(yesterdayDate)
|
|
|
|
|
+ setDayDate(today)
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ setSunsetTime(data.daylights[0].sunset)
|
|
|
|
|
+ setSunriseTmrTime(data.daylights[1].sunrise)
|
|
|
|
|
+ setSunsetDate(yesterdayDate)
|
|
|
|
|
+ setSunriseTmrDate(todaySunriseDate)
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ setSunriseTime(data.daylights[1].sunrise)
|
|
|
|
|
+ setSunsetTime(data.daylights[1].sunset)
|
|
|
|
|
+ setSunriseDate(todaySunriseDate)
|
|
|
|
|
+ setSunsetDate(todaySunsetDate)
|
|
|
|
|
+ }
|
|
|
|
|
+ updateNightStore(yesterdayDate, data.daylights[1].sunrise, data.daylights[0].sunset)
|
|
|
|
|
+ updateDayStore(today, data.daylights[1].sunrise, data.daylights[1].sunset)
|
|
|
|
|
+ }
|
|
|
|
|
+ //今天白天(今天出日后-日落前)
|
|
|
|
|
+ else if (todaySunriseDate.getTime() < today.getTime() && today.getTime() < todaySunsetDate.getTime()) {
|
|
|
|
|
+ setNightDate(todaySunsetDate)
|
|
|
|
|
+ setDayDate(todaySunriseDate)
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ setSunsetTime(data.daylights[1].sunset)
|
|
|
|
|
+ setSunriseTmrTime(data.daylights[2].sunrise)
|
|
|
|
|
+ setSunsetDate(todaySunsetDate)
|
|
|
|
|
+ setSunriseTmrDate(tomorrowSunriseDate)
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ setSunriseTime(data.daylights[1].sunrise)
|
|
|
|
|
+ setSunsetTime(data.daylights[1].sunset)
|
|
|
|
|
+ setSunsetDate(todaySunsetDate)
|
|
|
|
|
+ setSunriseDate(todaySunriseDate)
|
|
|
|
|
+ }
|
|
|
|
|
+ updateNightStore(today, data.daylights[2].sunrise, data.daylights[1].sunset)
|
|
|
|
|
+ updateDayStore(today, data.daylights[1].sunrise, data.daylights[1].sunset)
|
|
|
|
|
+ }
|
|
|
|
|
+ //今天夜晚
|
|
|
|
|
+ else if (today.getTime() > todaySunsetDate.getTime() && today.getTime() < tomorrowSunriseDate.getTime()) {
|
|
|
|
|
+ setNightDate(todaySunsetDate)
|
|
|
|
|
+ setDayDate(tomorrowSunriseDate)
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ setSunsetTime(data.daylights[1].sunset)
|
|
|
|
|
+ setSunriseTmrTime(data.daylights[2].sunrise)
|
|
|
|
|
+ setSunsetDate(todaySunsetDate)
|
|
|
|
|
+ setSunriseTmrDate(tomorrowSunriseDate)
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ setSunriseTime(data.daylights[2].sunrise)
|
|
|
|
|
+ setSunsetTime(data.daylights[2].sunset)
|
|
|
|
|
+ setSunriseDate(tomorrowSunriseDate)
|
|
|
|
|
+ setSunsetDate(tomorrowSunsetDate)
|
|
|
|
|
+ }
|
|
|
|
|
+ updateNightStore(today, data.daylights[2].sunrise, data.daylights[1].sunset)
|
|
|
|
|
+ updateDayStore(tomorrowSunriseDate, data.daylights[2].sunrise, data.daylights[2].sunset)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ locationDetail = null
|
|
|
|
|
+ setAuthInfo(null)
|
|
|
|
|
+ setSunriseTime('06:00')
|
|
|
|
|
+ setSunriseTmrTime('06:00')
|
|
|
|
|
+ setSunsetTime('18:00')
|
|
|
|
|
+ dispatch(updateMember({ isMember: isMember, gpsInfo: null }))
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ dispatch(setDayRingData({
|
|
|
|
|
+ date: new Date().getTime(),
|
|
|
|
|
+ sunrise: '06:00',
|
|
|
|
|
+ sunset: '18:00'
|
|
|
|
|
+ }))
|
|
|
|
|
+ dispatch(setNightRingData({
|
|
|
|
|
+ date: new Date().getTime(),
|
|
|
|
|
+ sunrise: '06:00',
|
|
|
|
|
+ sunset: '18:00'
|
|
|
|
|
+ }))
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function updateNightStore(date, sunrise, sunset) {
|
|
|
|
|
+ if (lastNightInfo && lastNightInfo.date.getDate() == new Date(date).getDate() &&
|
|
|
|
|
+ lastNightInfo.sunrise == sunrise &&
|
|
|
|
|
+ lastNightInfo.sunset == sunset
|
|
|
|
|
+ ) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ debugger
|
|
|
|
|
+ lastNightInfo = {
|
|
|
|
|
+ date,
|
|
|
|
|
+ sunrise,
|
|
|
|
|
+ sunset
|
|
|
|
|
+ }
|
|
|
|
|
+ dispatch(setNightRingData({
|
|
|
|
|
+ date: date.getTime(),
|
|
|
|
|
+ sunrise: sunrise,
|
|
|
|
|
+ sunset: sunset
|
|
|
|
|
+ }))
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function updateDayStore(date, sunrise, sunset) {
|
|
|
|
|
+ if (lastDayInfo && lastDayInfo.date.getDate() == new Date(date).getDate() &&
|
|
|
|
|
+ lastDayInfo.sunrise == sunrise &&
|
|
|
|
|
+ lastDayInfo.sunset == sunset
|
|
|
|
|
+ ) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ lastDayInfo = {
|
|
|
|
|
+ date,
|
|
|
|
|
+ sunrise,
|
|
|
|
|
+ sunset
|
|
|
|
|
+ }
|
|
|
|
|
+ dispatch(setDayRingData({
|
|
|
|
|
+ date: date.getTime(),
|
|
|
|
|
+ sunrise: sunrise,
|
|
|
|
|
+ sunset: sunset
|
|
|
|
|
+ }))
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ async function getStorage(key: string) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await Taro.getStorage({ key });
|
|
|
|
|
+ return res.data;
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ return '';
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function footer(e) {
|
|
|
|
|
+ return <View className='day_night_card_footer' onClick={tapFooter}>
|
|
|
|
|
+ <Text style={{ color: '#9E9E9E', fontSize: rpxToPx(20) }}>{
|
|
|
|
|
+ // !isMember ? t('feature.track_time_duration.third_ring.member_desc') :
|
|
|
|
|
+ authInfo && (authInfo as any).lat ? t('feature.track_time_duration.third_ring.base_location_desc') :
|
|
|
|
|
+ t('feature.track_time_duration.third_ring.enter_location_desc')
|
|
|
|
|
+ }</Text>
|
|
|
|
|
+ {
|
|
|
|
|
+ authInfo && (authInfo as any).lat && <Text style={{ color: '#9E9E9E', fontSize: rpxToPx(20) }} onClick={(e) => {
|
|
|
|
|
+ e.stopPropagation()
|
|
|
|
|
+ auth(e)
|
|
|
|
|
+ }}>Edit Location</Text>
|
|
|
|
|
+ }
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function tapFooter(e) {
|
|
|
|
|
+ if (process.env.TARO_ENV == 'weapp') {
|
|
|
|
|
+ e.stopPropagation()
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!user.isLogin) {
|
|
|
|
|
+ jumpPage('/pages/account/ChooseAuth', 'ChooseAuth', navigation)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ if (props.isNight && !nightStore.showNightRing || !props.isNight && !dayStore.showDayRing) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ var list = ['Current location Info',
|
|
|
|
|
+ 'Choose a new location']
|
|
|
|
|
+ if (isMember) {
|
|
|
|
|
+ list.push('clear location data')
|
|
|
|
|
+ }
|
|
|
|
|
+ Taro.showActionSheet({
|
|
|
|
|
+ itemList: list
|
|
|
|
|
+ }).then(res => {
|
|
|
|
|
+ switch (res.tapIndex) {
|
|
|
|
|
+ case 0:
|
|
|
|
|
+ setShowDetailModal(true)
|
|
|
|
|
+ break
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ auth()
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ clearData()
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function tapCard(e) {
|
|
|
|
|
+ // if (process.env.TARO_ENV == 'weapp') {
|
|
|
|
|
+ // e.stopPropagation()
|
|
|
|
|
+ // }
|
|
|
|
|
+ if (!user.isLogin) {
|
|
|
|
|
+ jumpPage('/pages/account/ChooseAuth', 'ChooseAuth', navigation)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!dayStore.showDayRing) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ setShowDetailPopup(true)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function auth(e?: any) {
|
|
|
|
|
+ if (e && process.env.TARO_ENV == 'weapp') {
|
|
|
|
|
+ e.stopPropagation()
|
|
|
|
|
+ }
|
|
|
|
|
+ joingMember = false;
|
|
|
|
|
+ Taro.chooseLocation({
|
|
|
|
|
+ latitude: authInfo && authInfo.lat ? authInfo.lat : undefined,
|
|
|
|
|
+ longitude: authInfo && authInfo.lat ? authInfo.lng : undefined,
|
|
|
|
|
+ success: function (res) {
|
|
|
|
|
+ var today = new Date()
|
|
|
|
|
+ var yesterday = new Date(today.getTime() - 24 * 3600 * 1000)
|
|
|
|
|
+ var tomorrow = new Date(today.getTime() + 24 * 3600 * 1000 * 3)
|
|
|
|
|
+ var strYesterday = `${yesterday.getFullYear()}-${TimeFormatter.padZero(yesterday.getMonth() + 1)}-${TimeFormatter.padZero(yesterday.getDate())}`
|
|
|
|
|
+ var strTomorrow = `${tomorrow.getFullYear()}-${TimeFormatter.padZero(tomorrow.getMonth() + 1)}-${TimeFormatter.padZero(tomorrow.getDate())}`
|
|
|
|
|
+ systemLocation({
|
|
|
|
|
+ lat: res.latitude,
|
|
|
|
|
+ lng: res.longitude,
|
|
|
|
|
+ name: res.name,
|
|
|
|
|
+ address: res.address,
|
|
|
|
|
+ date_start: strYesterday,
|
|
|
|
|
+ date_end: strTomorrow,
|
|
|
|
|
+ coordinate_system_standard: 'GCJ-02'
|
|
|
|
|
+ }).then(data => {
|
|
|
|
|
+ updateDate(data);
|
|
|
|
|
+ locationDetail = data;
|
|
|
|
|
+ global.locationDetail = locationDetail
|
|
|
|
|
+ setAuthInfo(data as any)
|
|
|
|
|
+ setSunriseTime((data as any).daylights[0].sunrise)
|
|
|
|
|
+ setSunriseTmrTime((data as any).daylights[1].sunrise)
|
|
|
|
|
+ setSunsetTime((data as any).daylights[0].sunset)
|
|
|
|
|
+ Taro.setStorage({
|
|
|
|
|
+ key: 'gps',
|
|
|
|
|
+ data: JSON.stringify(data as any)
|
|
|
|
|
+ })
|
|
|
|
|
+ dispatch(updateMember({ isMember: isMember, gpsInfo: (data as any) }))
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ },
|
|
|
|
|
+ fail(res) {
|
|
|
|
|
+ Taro.showToast({
|
|
|
|
|
+ title: '位置修改失败!\n请重新选择就近位置',
|
|
|
|
|
+ icon: 'none'
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function getLocation() {
|
|
|
|
|
+ var city = ''
|
|
|
|
|
+ if ((authInfo as any).address.city.length > 0) {
|
|
|
|
|
+ city = (authInfo as any).address.city
|
|
|
|
|
+ }
|
|
|
|
|
+ else if ((authInfo as any).address.province.length > 0) {
|
|
|
|
|
+ city = (authInfo as any).address.province
|
|
|
|
|
+ }
|
|
|
|
|
+ else if ((authInfo as any).address.country.length > 0) {
|
|
|
|
|
+ city = (authInfo as any).address.country
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ city = t('feature.track_time_duration.third_ring.unknown')
|
|
|
|
|
+ }
|
|
|
|
|
+ // return city +' | '+parseInt(authInfo.lat)+'°'+ ' '+parseInt(authInfo.lng)
|
|
|
|
|
+ return `${city} | ${Math.abs(parseInt(authInfo.lat))}°${parseInt(authInfo.lat) < 0 ? 'S' : 'N'} ${Math.abs(parseInt(authInfo.lng))}°${parseInt(authInfo.lng) < 0 ? 'W' : 'E'}`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function lowTimeColor() {
|
|
|
|
|
+ var now = new Date()
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ if (now.getTime() < sunsetDate.getTime() && now.getTime() > sunriseDate.getTime()) {
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+ return false
|
|
|
|
|
+ } else {
|
|
|
|
|
+
|
|
|
|
|
+ if (now.getTime() > sunriseDate.getTime() && now.getTime() < sunsetDate.getTime()) {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ return true
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function timeCount() {
|
|
|
|
|
+ var now = new Date()
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ if (now.getTime() < sunriseTmrDate.getTime()) {
|
|
|
|
|
+ return TimeFormatter.countdown(sunsetDate.getTime())
|
|
|
|
|
+ }
|
|
|
|
|
+ return TimeFormatter.countdown(sunsetDate.getTime())
|
|
|
|
|
+ } else {
|
|
|
|
|
+
|
|
|
|
|
+ if (now.getTime() < sunsetDate.getTime()) {
|
|
|
|
|
+ return TimeFormatter.countdown(sunriseDate.getTime())
|
|
|
|
|
+ }
|
|
|
|
|
+ return TimeFormatter.countdown(sunriseTmrDate.getTime())
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function timeCount2() {
|
|
|
|
|
+ var now = new Date()
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+
|
|
|
|
|
+ if (now.getTime() < sunsetDate.getTime()) {
|
|
|
|
|
+ return TimeFormatter.countdown(sunriseTmrDate.getTime())
|
|
|
|
|
+ }
|
|
|
|
|
+ return TimeFormatter.countdown(sunriseTmrDate.getTime())
|
|
|
|
|
+
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return TimeFormatter.countdown(sunsetDate.getTime())
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function showExtraData() {
|
|
|
|
|
+ var now = new Date()
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ if (sunsetDate.getTime() > now.getTime()) {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+ if (sunriseDate.getTime() < now.getTime() && now.getTime() < sunsetDate.getTime()) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function timeDesc() {
|
|
|
|
|
+ var now = new Date()
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ var list = sunsetTime.split(':')
|
|
|
|
|
+ var hour = parseInt(list[0])
|
|
|
|
|
+ var min = parseInt(list[1])
|
|
|
|
|
+ var second = list.length == 3 ? parseInt(list[2]) : 0
|
|
|
|
|
+ now.setHours(hour)
|
|
|
|
|
+ now.setMinutes(min)
|
|
|
|
|
+ now.setSeconds(second)
|
|
|
|
|
+
|
|
|
|
|
+ var sunriseDate = new Date()
|
|
|
|
|
+ var list2 = sunriseTmrTime.split(':')
|
|
|
|
|
+ var hour2 = parseInt(list2[0])
|
|
|
|
|
+ var min2 = parseInt(list2[1])
|
|
|
|
|
+ var second2 = list2.length == 3 ? parseInt(list2[2]) : 0
|
|
|
|
|
+ sunriseDate.setHours(hour2)
|
|
|
|
|
+ sunriseDate.setMinutes(min2)
|
|
|
|
|
+ sunriseDate.setSeconds(second2)
|
|
|
|
|
+ if (sunriseDate.getTime() > new Date().getTime()) {
|
|
|
|
|
+ return t('feature.day_night.time_past_sunset')//'Time past Sunset'
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (now.getTime() < new Date().getTime()) {
|
|
|
|
|
+ return t('feature.day_night.time_past_sunset')//'Time past Sunset'
|
|
|
|
|
+ }
|
|
|
|
|
+ return t('feature.day_night.time_to_sunset')//'Time to Sunset'
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ var list = sunriseTime.split(':')
|
|
|
|
|
+ var hour = parseInt(list[0])
|
|
|
|
|
+ var min = parseInt(list[1])
|
|
|
|
|
+ var second = list.length == 3 ? parseInt(list[2]) : 0
|
|
|
|
|
+ now.setHours(hour)
|
|
|
|
|
+ now.setMinutes(min)
|
|
|
|
|
+ now.setSeconds(second)
|
|
|
|
|
+
|
|
|
|
|
+ var sunsetDate = new Date()
|
|
|
|
|
+ var list2 = sunsetTime.split(':')
|
|
|
|
|
+ var hour2 = parseInt(list2[0])
|
|
|
|
|
+ var min2 = parseInt(list2[1])
|
|
|
|
|
+ var second2 = list2.length == 3 ? parseInt(list2[2]) : 0
|
|
|
|
|
+ sunsetDate.setHours(hour2)
|
|
|
|
|
+ sunsetDate.setMinutes(min2)
|
|
|
|
|
+ sunsetDate.setSeconds(second2)
|
|
|
|
|
+
|
|
|
|
|
+ if (new Date().getTime() > sunsetDate.getTime()) {
|
|
|
|
|
+ return t('feature.day_night.time_to_sunrise')//'Time to Sunrise'
|
|
|
|
|
+ }
|
|
|
|
|
+ if (now.getTime() < new Date().getTime()) {
|
|
|
|
|
+ return t('feature.day_night.time_past_sunrise')//'Time past Sunrise'
|
|
|
|
|
+ }
|
|
|
|
|
+ return t('feature.day_night.time_to_sunrise')//'Time to Sunrise'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function timeDesc2() {
|
|
|
|
|
+ if (props.isNight) {
|
|
|
|
|
+ return t('feature.day_night.time_to_sunrise')//'Time to Sunrise'
|
|
|
|
|
+ }
|
|
|
|
|
+ return t('feature.day_night.time_to_sunset')//'Time to Sunset'
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function clearData() {
|
|
|
|
|
+ Taro.showModal({
|
|
|
|
|
+ title: '提示',
|
|
|
|
|
+ content: '确认清除位置数据?',
|
|
|
|
|
+ success: function (res) {
|
|
|
|
|
+ if (res.confirm) {
|
|
|
|
|
+ clearLocation().then(res => {
|
|
|
|
|
+ if (global.clearNightLocation) {
|
|
|
|
|
+ global.clearNightLocation()
|
|
|
|
|
+ }
|
|
|
|
|
+ if (global.clearDayLocation) {
|
|
|
|
|
+ global.clearDayLocation()
|
|
|
|
|
+ }
|
|
|
|
|
+ lastNightInfo = null
|
|
|
|
|
+ lastDayInfo = null
|
|
|
|
|
+ })
|
|
|
|
|
+ } else if (res.cancel) {
|
|
|
|
|
+ console.log('用户点击取消')
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ function clearCacheData() {
|
|
|
|
|
+ locationDetail = null
|
|
|
|
|
+ Taro.removeStorage({ key: 'gps' })
|
|
|
|
|
+ setAuthInfo(null)
|
|
|
|
|
+ setSunriseTime('06:00')
|
|
|
|
|
+ setSunriseTmrTime('06:00')
|
|
|
|
|
+ setSunsetTime('18:00')
|
|
|
|
|
+ dispatch(updateMember({ isMember: isMember, gpsInfo: null }))
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ dispatch(setDayRingData({
|
|
|
|
|
+ date: new Date().getTime(),
|
|
|
|
|
+ sunrise: '06:00',
|
|
|
|
|
+ sunset: '18:00'
|
|
|
|
|
+ }))
|
|
|
|
|
+ dispatch(setNightRingData({
|
|
|
|
|
+ date: new Date().getTime(),
|
|
|
|
|
+ sunrise: '06:00',
|
|
|
|
|
+ sunset: '18:00'
|
|
|
|
|
+ }))
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function detailModalContent() {
|
|
|
|
|
+ var split = new Date().toString().split(' ');
|
|
|
|
|
+ var timezone = split[split.length - 2];
|
|
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
|
|
+ return <View style={{ height: 100, display: 'flex', alignItems: 'center', justifyContent: 'center', width: rpxToPx(750) }}>
|
|
|
|
|
+ <Text>暂无位置信息</Text>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+ return <View style={{ display: 'flex', flexDirection: 'column' }}>
|
|
|
|
|
+ {
|
|
|
|
|
+ <View className="cell_bg">
|
|
|
|
|
+ {
|
|
|
|
|
+ <View className="cell_full">
|
|
|
|
|
+ <Text className="cell_title">{t('feature.track_time_duration.third_ring.location')}</Text>
|
|
|
|
|
+ <Text className="cell_value">{authInfo ? getLocation() : t('feature.track_time_duration.third_ring.enter')}</Text>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+ <View className="cell_line" style={{ height: 1 }} />
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ <View className="cell_full" >
|
|
|
|
|
+ <Text className="cell_title">{t('feature.track_time_duration.third_ring.latitude')}</Text>
|
|
|
|
|
+
|
|
|
|
|
+ <Text className="cell_value">{(authInfo as any).lat}</Text>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+ <View className="cell_line" style={{ height: 1 }} />
|
|
|
|
|
+
|
|
|
|
|
+ <View className="cell_full">
|
|
|
|
|
+ <Text className="cell_title" >{t('feature.track_time_duration.third_ring.longitude')}</Text>
|
|
|
|
|
+
|
|
|
|
|
+ <Text className="cell_value">{(authInfo as any).lng}</Text>
|
|
|
|
|
+
|
|
|
|
|
+ </View>
|
|
|
|
|
+ <View className="cell_line" style={{ height: 1 }} />
|
|
|
|
|
+ <View className="cell_full">
|
|
|
|
|
+ <Text className="cell_title">{t('feature.track_time_duration.third_ring.timezone')}</Text>
|
|
|
|
|
+
|
|
|
|
|
+ <Text className="cell_value">{timezone}</Text>
|
|
|
|
|
+
|
|
|
|
|
+ </View>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ </View>
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ <Text onClick={() => {
|
|
|
|
|
+ clearData()
|
|
|
|
|
+ setShowDetailModal(false)
|
|
|
|
|
+ }} style={{ width: '100%', textAlign: 'center', marginBottom: 50, color: '#fff', marginTop: 20 }}>清除位置</Text>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function modalContent2() {
|
|
|
|
|
+ if (process.env.TARO_ENV == 'weapp') {
|
|
|
|
|
+ return <Modal
|
|
|
|
|
+ testInfo={null}
|
|
|
|
|
+ dismiss={() => {
|
|
|
|
|
+ setShowDetailModal(false)
|
|
|
|
|
+ }}
|
|
|
|
|
+ confirm={() => { }}>
|
|
|
|
|
+ {
|
|
|
|
|
+ detailModalContent()
|
|
|
|
|
+ }
|
|
|
|
|
+ </Modal>
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (process.env.TARO_ENV == 'rn') {
|
|
|
|
|
+ return <PageContainer style={{ backgroundColor: '#1c1c1c' }}
|
|
|
|
|
+ // overlayStyle='background-color:rgba(0,0,0,0.9)'
|
|
|
|
|
+ // custom-style='background-color:#1c1c1c'
|
|
|
|
|
+ overlayStyle={{ backgroundColor: 'rgba(0,0,0,0.9)' }}
|
|
|
|
|
+ customStyle={{ backgroundColor: '#1c1c1c' }}
|
|
|
|
|
+ closeOnSlideDown={false}
|
|
|
|
|
+ onBeforeEnter={() => {
|
|
|
|
|
+
|
|
|
|
|
+ }}
|
|
|
|
|
+ onBeforeLeave={() => {
|
|
|
|
|
+ }}
|
|
|
|
|
+ onClick={() => { alert('b') }}
|
|
|
|
|
+ onClickOverlay={() => { alert('a') }}
|
|
|
|
|
+ onAfterLeave={() => { setShowDetailModal(false) }}
|
|
|
|
|
+ show={showDetailModal} round={true} overlay={true} position='bottom'
|
|
|
|
|
+ >
|
|
|
|
|
+ {
|
|
|
|
|
+ detailModalContent()
|
|
|
|
|
+ }
|
|
|
|
|
+ </PageContainer>
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function modalContent() {
|
|
|
|
|
+ if (process.env.TARO_ENV == 'weapp') {
|
|
|
|
|
+ return <Modal
|
|
|
|
|
+ testInfo={null}
|
|
|
|
|
+ dismiss={() => {
|
|
|
|
|
+ setShowDetailPopup(false)
|
|
|
|
|
+ }}
|
|
|
|
|
+ confirm={() => { }}>
|
|
|
|
|
+ <DayNightDetailPopup
|
|
|
|
|
+ sunsetDate={sunsetDate}
|
|
|
|
|
+ sunriseDate={sunriseDate}
|
|
|
|
|
+ sunriseTmrDate={sunriseTmrDate}
|
|
|
|
|
+ sunsetTime={sunsetTime}
|
|
|
|
|
+ sunriseTime={sunriseTime}
|
|
|
|
|
+ sunriseTmrTime={sunriseTmrTime}
|
|
|
|
|
+ isNight={props.isNight}
|
|
|
|
|
+ authInfo={authInfo}
|
|
|
|
|
+ nightDate={nightDate}
|
|
|
|
|
+ dayDate={dayDate}
|
|
|
|
|
+ onClose={() => { setShowDetailPopup(false) }}
|
|
|
|
|
+ />
|
|
|
|
|
+ </Modal>
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (process.env.TARO_ENV == 'rn') {
|
|
|
|
|
+ return <PageContainer style={{ backgroundColor: '#1c1c1c' }}
|
|
|
|
|
+ // overlayStyle='background-color:rgba(0,0,0,0.9)'
|
|
|
|
|
+ // custom-style='background-color:#1c1c1c'
|
|
|
|
|
+ overlayStyle={{ backgroundColor: 'rgba(0,0,0,0.9)' }}
|
|
|
|
|
+ customStyle={{ backgroundColor: '#1c1c1c' }}
|
|
|
|
|
+ closeOnSlideDown={false}
|
|
|
|
|
+ onBeforeEnter={() => {
|
|
|
|
|
+
|
|
|
|
|
+ }}
|
|
|
|
|
+ onBeforeLeave={() => {
|
|
|
|
|
+ }}
|
|
|
|
|
+ onClick={() => { alert('b') }}
|
|
|
|
|
+ onClickOverlay={() => { alert('a') }}
|
|
|
|
|
+ onAfterLeave={() => { setShowDetailPopup(false) }}
|
|
|
|
|
+ show={showDetailModal} round={true} overlay={true} position='bottom'
|
|
|
|
|
+ >
|
|
|
|
|
+ <DayNightDetailPopup
|
|
|
|
|
+ sunsetDate={sunsetDate}
|
|
|
|
|
+ sunriseDate={sunriseDate}
|
|
|
|
|
+ sunriseTmrDate={sunriseTmrDate}
|
|
|
|
|
+ sunsetTime={sunsetTime}
|
|
|
|
|
+ sunriseTime={sunriseTime}
|
|
|
|
|
+ sunriseTmrTime={sunriseTmrTime}
|
|
|
|
|
+ isNight={props.isNight}
|
|
|
|
|
+ authInfo={authInfo}
|
|
|
|
|
+ nightDate={nightDate}
|
|
|
|
|
+ dayDate={dayDate}
|
|
|
|
|
+ onClose={() => { setShowDetailPopup(false) }}
|
|
|
|
|
+ />
|
|
|
|
|
+ </PageContainer>
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ function nightDurationDesc() {
|
|
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
|
|
+ if (new Date().getHours() >= 6) {
|
|
|
|
|
+ return `${t('feature.day_night.tonight', { time: sunsetTime })} - ${t('feature.day_night.tomorrow_morning', { time: sunriseTmrTime })}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.last_night', { time: sunsetTime })} - ${t('feature.day_night.this_morning', { time: sunriseTmrTime })}`
|
|
|
|
|
+ // return `Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ if (nightDate.getDate() == new Date().getDate()) {
|
|
|
|
|
+ return `${t('feature.day_night.tonight', { time: sunsetTime })} - ${t('feature.day_night.tomorrow_morning', { time: sunriseTmrTime })}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.last_night', { time: sunsetTime })} - ${t('feature.day_night.this_morning', { time: sunriseTmrTime })}`
|
|
|
|
|
+ //`Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function dayDurationDesc() {
|
|
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
|
|
+ if (new Date().getHours() >= 18) {
|
|
|
|
|
+ return `${t('feature.day_night.tomorrow', { time: sunriseTime })} - ${sunsetTime}`
|
|
|
|
|
+
|
|
|
|
|
+ // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.today', { time: sunriseTime })} - ${sunsetTime}`
|
|
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ if (dayDate.getDate() == new Date().getDate()) {
|
|
|
|
|
+ return `${t('feature.day_night.today', { time: sunriseTime })} - ${sunsetTime}`
|
|
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.tomorrow', { time: sunriseTime })} - ${sunsetTime}`
|
|
|
|
|
+ // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function nightDuration() {
|
|
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
|
|
+ if (new Date().getHours() >= 6) {
|
|
|
|
|
+ return `${t('feature.day_night.tonight')} ${sunsetTime} - ${t('feature.day_night.tomorrow_morning')} ${sunriseTmrTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.last_night')} ${sunsetTime} - ${t('feature.day_night.this_morning')} ${sunriseTmrTime}`
|
|
|
|
|
+ // return `Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ if (nightDate.getDate() == new Date().getDate()) {
|
|
|
|
|
+ return `${t('feature.day_night.tonight')} ${sunsetTime.substring(0, 5)} - ${t('feature.day_night.tomorrow_morning')} ${sunriseTmrTime.substring(0, 5)}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.last_night')} ${sunsetTime.substring(0, 5)} - ${t('feature.day_night.this_morning')} ${sunriseTmrTime.substring(0, 5)}`
|
|
|
|
|
+ //`Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function dayDuration() {
|
|
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
|
|
+ if (new Date().getHours() >= 18) {
|
|
|
|
|
+ return `${t('feature.day_night.tomorrow')} ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+
|
|
|
|
|
+ // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.today')} ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ if (dayDate.getDate() == new Date().getDate()) {
|
|
|
|
|
+ return `${t('feature.day_night.today')} ${sunriseTime.substring(0, 5)} - ${sunsetTime.substring(0, 5)}`
|
|
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+ return `${t('feature.day_night.tomorrow')} ${sunriseTime.substring(0, 5)} - ${sunsetTime.substring(0, 5)}`
|
|
|
|
|
+ // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function nightDurationDesc1() {
|
|
|
|
|
+ if (authInfo && authInfo.lat) {
|
|
|
|
|
+ return t('feature.day_night.sunset_to_sunrise')
|
|
|
|
|
+ }
|
|
|
|
|
+ return t('feature.day_night.night_tip')
|
|
|
|
|
+
|
|
|
|
|
+ // if (!authInfo || !(authInfo as any).lat) {
|
|
|
|
|
+ // if (new Date().getHours() >= 6) {
|
|
|
|
|
+ // return `${t('feature.day_night.tonight')}${t('feature.day_night.to')}${t('feature.day_night.tomorrow_morning')}`
|
|
|
|
|
+ // }
|
|
|
|
|
+ // return `${t('feature.day_night.last_night')}${t('feature.day_night.to')}${t('feature.day_night.this_morning')}`
|
|
|
|
|
+ // // return `Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
|
|
+ // }
|
|
|
|
|
+ // if (nightDate.getDate() == new Date().getDate()) {
|
|
|
|
|
+ // return `${t('feature.day_night.tonight')}${t('feature.day_night.to')}${t('feature.day_night.tomorrow_morning')}`
|
|
|
|
|
+ // }
|
|
|
|
|
+ // return `${t('feature.day_night.last_night')}${t('feature.day_night.to')}${t('feature.day_night.this_morning')}`
|
|
|
|
|
+ // //`Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function dayDurationDesc1() {
|
|
|
|
|
+ if (authInfo && authInfo.lat) {
|
|
|
|
|
+ return t('feature.day_night.sunrise_to_sunset')
|
|
|
|
|
+ }
|
|
|
|
|
+ return t('feature.day_night.day_tip')
|
|
|
|
|
+ // if (!authInfo || !(authInfo as any).lat) {
|
|
|
|
|
+ // if (new Date().getHours() >= 18) {
|
|
|
|
|
+ // return `${t('feature.day_night.tomorrow')}`
|
|
|
|
|
+
|
|
|
|
|
+ // // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ // }
|
|
|
|
|
+ // return `${t('feature.day_night.today')}`
|
|
|
|
|
+ // // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ // }
|
|
|
|
|
+ // if (dayDate.getDate() == new Date().getDate()) {
|
|
|
|
|
+ // return `${t('feature.day_night.today')}`
|
|
|
|
|
+ // // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ // }
|
|
|
|
|
+ // return `${t('feature.day_night.tomorrow')}`
|
|
|
|
|
+ // // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function buy(e) {
|
|
|
|
|
+ if (process.env.TARO_ENV == 'weapp') {
|
|
|
|
|
+ e.stopPropagation()
|
|
|
|
|
+ }
|
|
|
|
|
+ joingMember = true
|
|
|
|
|
+ Taro.navigateTo({
|
|
|
|
|
+ url: '/pages/account/Member'
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function longClick() {
|
|
|
|
|
+ if (user.isLogin && authInfo)
|
|
|
|
|
+ setShowDetailModal(true)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function showLocationAlert(e) {
|
|
|
|
|
+ if (process.env.TARO_ENV == 'weapp') {
|
|
|
|
|
+ e.stopPropagation()
|
|
|
|
|
+ }
|
|
|
|
|
+ if (isMember && authInfo && authInfo.lat) {
|
|
|
|
|
+ tapCard(e)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ Taro.showModal({
|
|
|
|
|
+ title: t('feature.day_night.note'),
|
|
|
|
|
+ content: props.isNight ? t('feature.day_night.alert_night_content') : t('feature.day_night.alert_day_content'),
|
|
|
|
|
+ confirmText: t('feature.day_night.choose_location'),
|
|
|
|
|
+ cancelText: t('feature.day_night.view_more'),
|
|
|
|
|
+ success: function (res) {
|
|
|
|
|
+ if (res.confirm) {
|
|
|
|
|
+ auth()
|
|
|
|
|
+ // console.log('用户点击确定')
|
|
|
|
|
+ } else if (res.cancel) {
|
|
|
|
|
+ setShowDetailPopup(true)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return <View style={{ color: '#fff' }} onLongPress={longClick}>
|
|
|
|
|
+ <Box onClick={tapCard}>
|
|
|
|
|
+ <View style={{ marginTop: -rpxToPx(14), marginBottom: -rpxToPx(14) }}>
|
|
|
|
|
+ <View className='day_night_top'>
|
|
|
|
|
+ {
|
|
|
|
|
+ user.isLogin ? <Text className='day_night_title'>{props.isNight ? t('feature.day_night.night_ring_login') : t('feature.day_night.day_ring_login')}</Text> :
|
|
|
|
|
+ <Text className='day_night_title'>{props.isNight ? t('feature.day_night.night_ring') : t('feature.day_night.day_ring')}</Text>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ user.isLogin && <View className='free' style={{ backgroundColor: props.isNight ? ColorType.night : ColorType.day, color: props.isNight ? '#fff' : '#1C1C1C' }}>{t('feature.day_night.limited_free')}</View>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ <View style={{ flex: 1 }} />
|
|
|
|
|
+ <View style={{ height: rpxToPx(50),display:'flex',alignItems:'center',flexDirection:'row' }}>
|
|
|
|
|
+ <Switch checked={props.isNight ? dayStore.showDayRing : dayStore.showDayRing}
|
|
|
|
|
+ className='switch'
|
|
|
|
|
+ color={props.isNight ? ColorType.night : ColorType.day}
|
|
|
|
|
+ onClick={(e) => { e.stopPropagation() }}
|
|
|
|
|
+ onChange={(e) => {
|
|
|
|
|
+ e.stopPropagation()
|
|
|
|
|
+ // setExpand(e.detail.value)
|
|
|
|
|
+ // if (props.isNight) {
|
|
|
|
|
+ dispatch(showNight(e.detail.value))
|
|
|
|
|
+ // }
|
|
|
|
|
+ // else {
|
|
|
|
|
+ dispatch(showDay(e.detail.value))
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ Taro.setStorage({
|
|
|
|
|
+ key: 'showNightRing',
|
|
|
|
|
+ data: e.detail.value
|
|
|
|
|
+ })
|
|
|
|
|
+ Taro.setStorage({
|
|
|
|
|
+ key: 'showDayRing',
|
|
|
|
|
+ data: e.detail.value
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ if (user.isLogin) {
|
|
|
|
|
+ uploadPerm({ show_ring: e.detail.value })
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+
|
|
|
|
|
+ if (e.detail.value) {
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ Taro.showModal({
|
|
|
|
|
+ title: props.isNight ?
|
|
|
|
|
+ t('feature.day_night.night_alert_title') :
|
|
|
|
|
+ t('feature.day_night.day_alert_title'),
|
|
|
|
|
+ content: props.isNight ?
|
|
|
|
|
+ t('feature.day_night.night_alert_content') :
|
|
|
|
|
+ t('feature.day_night.day_alert_content'),
|
|
|
|
|
+ showCancel: false,
|
|
|
|
|
+ confirmText: t('feature.day_night.got_it')
|
|
|
|
|
+ })
|
|
|
|
|
+ }, 500)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
|
|
+ </View>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ {
|
|
|
|
|
+ user.isLogin && dayStore.showDayRing && <View className='day_night_detail' onClick={showLocationAlert}>
|
|
|
|
|
+ <View className='day_night_detail_icon'>
|
|
|
|
|
+ {
|
|
|
|
|
+ props.isNight ? <IconNight width={rpxToPx(48)} color={ColorType.night} /> : <IconDay width={rpxToPx(48)} color={ColorType.day} />
|
|
|
|
|
+ }
|
|
|
|
|
+ </View>
|
|
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'column', paddingTop: rpxToPx(8) }}>
|
|
|
|
|
+ <Text className='day_night_value' style={{ color: props.isNight ? ColorType.night : ColorType.day }}>{props.isNight ? nightDuration() : dayDuration()}</Text>
|
|
|
|
|
+ <Text className='day_night_desc'>{props.isNight ? nightDurationDesc1() : dayDurationDesc1()}</Text>
|
|
|
|
|
+ {
|
|
|
|
|
+ authInfo && authInfo.lat ?
|
|
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'row', marginTop: rpxToPx(18) }} onClick={auth}>
|
|
|
|
|
+ <View className={props.isNight ? 'night_location_btn' : 'day_location_btn'} onClick={auth}>{getLocation()}</View>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ :
|
|
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'row', marginTop: rpxToPx(18)}} onClick={auth}>
|
|
|
|
|
+ <View className={props.isNight ? 'night_location_btn' : 'day_location_btn'} onClick={auth}>
|
|
|
|
|
+ {props.isNight ? t('feature.day_night.get_local_time') : t('feature.day_night.get_local_time_sunrise')}
|
|
|
|
|
+ </View>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+ </View>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ </View>
|
|
|
|
|
+ </Box >
|
|
|
|
|
+ {
|
|
|
|
|
+ showDetailPopup && modalContent()
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ showDetailModal && modalContent2()
|
|
|
|
|
+ }
|
|
|
|
|
+ </View >
|
|
|
|
|
+
|
|
|
|
|
+ /*
|
|
|
|
|
+ return <View style={{ color: '#fff' }}>
|
|
|
|
|
+ <Box onClick={tapCard}>
|
|
|
|
|
+ <View>
|
|
|
|
|
+ <View className='day_night_top'>
|
|
|
|
|
+ {
|
|
|
|
|
+ user.isLogin?<Text className='day_night_title'>{props.isNight ? t('feature.day_night.night_ring_login') : t('feature.day_night.day_ring_login')}</Text>:
|
|
|
|
|
+ <Text className='day_night_title'>{props.isNight ? t('feature.day_night.night_ring') : t('feature.day_night.day_ring')}</Text>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ user.isLogin && <View className='free' style={{ backgroundColor: props.isNight ? ColorType.night : ColorType.day, color: props.isNight ? '#fff' : '#1C1C1C' }}>{t('feature.day_night.limited_free')}</View>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ <View style={{ flex: 1 }} />
|
|
|
|
|
+ <Switch checked={props.isNight ? nightStore.showNightRing : dayStore.showDayRing}
|
|
|
|
|
+ color={props.isNight ? ColorType.night : ColorType.day}
|
|
|
|
|
+ onClick={(e) => { e.stopPropagation() }}
|
|
|
|
|
+ onChange={(e) => {
|
|
|
|
|
+ e.stopPropagation()
|
|
|
|
|
+ // setExpand(e.detail.value)
|
|
|
|
|
+ // if (props.isNight) {
|
|
|
|
|
+ dispatch(showNight(e.detail.value))
|
|
|
|
|
+ // }
|
|
|
|
|
+ // else {
|
|
|
|
|
+ dispatch(showDay(e.detail.value))
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ Taro.setStorage({
|
|
|
|
|
+ key: 'showNightRing',
|
|
|
|
|
+ data: e.detail.value
|
|
|
|
|
+ })
|
|
|
|
|
+ Taro.setStorage({
|
|
|
|
|
+ key: 'showDayRing',
|
|
|
|
|
+ data: e.detail.value
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ if (user.isLogin) {
|
|
|
|
|
+ uploadPerm({ show_ring: e.detail.value })
|
|
|
|
|
+ // if (props.isNight) {
|
|
|
|
|
+ // uploadPerm({ show_night_ring: e.detail.value })
|
|
|
|
|
+ // }
|
|
|
|
|
+ // else {
|
|
|
|
|
+ // uploadPerm({ show_day_ring: e.detail.value })
|
|
|
|
|
+ // }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
|
|
+ </View>
|
|
|
|
|
+ {
|
|
|
|
|
+ user.isLogin && ((props.isNight && nightStore.showNightRing) || (!props.isNight && dayStore.showDayRing)) && <View>
|
|
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'column' }}>
|
|
|
|
|
+ <Text className='day_night_value' style={{ color: props.isNight ? ColorType.night : ColorType.day }}>{props.isNight ? nightDurationDesc() : dayDurationDesc()}</Text>
|
|
|
|
|
+ <Text className='day_night_desc'>{props.isNight ? t('feature.day_night.sunset_to_sunrise') : t('feature.day_night.sunrise_to_sunset')}</Text>
|
|
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'row', marginTop: rpxToPx(32) }}>
|
|
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'column', width: rpxToPx(300) }}>
|
|
|
|
|
+ <Text className='day_night_value' style={{ color: lowTimeColor() ? ColorType.ring : props.isNight ? ColorType.night : ColorType.day, }}>{timeCount()}</Text>
|
|
|
|
|
+ <Text className='day_night_desc'>{timeDesc()}</Text>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ {
|
|
|
|
|
+ showExtraData() && <View style={{ display: 'flex', flexDirection: 'column', width: rpxToPx(300) }}>
|
|
|
|
|
+ <Text className='day_night_value' style={{ color: props.isNight ? ColorType.night : ColorType.day, opacity: 0.6 }}>{timeCount2()}</Text>
|
|
|
|
|
+ <Text className='day_night_desc'>{timeDesc2()}</Text>
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+ </View>
|
|
|
|
|
+
|
|
|
|
|
+ </View>
|
|
|
|
|
+ {
|
|
|
|
|
+ footer()
|
|
|
|
|
+ }
|
|
|
|
|
+ </View>
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ </View>
|
|
|
|
|
+ </Box>
|
|
|
|
|
+ {
|
|
|
|
|
+ showDetailModal && modalContent()
|
|
|
|
|
+ }
|
|
|
|
|
+ </View>*/
|
|
|
|
|
+}
|