|
|
@@ -0,0 +1,1244 @@
|
|
|
+import { PageContainer, Switch, Text, View, Image } 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'
|
|
|
+import { getClocks } from '@/services/trackTimeDuration'
|
|
|
+import { request } from '@/services/http/request'
|
|
|
+import { API_USER_LOCATION } from '@/services/http/api'
|
|
|
+import { RealRing, CurrentDot } from "@/features/trackTimeDuration/components/Rings";
|
|
|
+import Rings from "./Rings";
|
|
|
+import { bigRingRadius, getBgRing, getCommon, getDot, ringWidth } from '../hooks/RingData'
|
|
|
+
|
|
|
+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 => {
|
|
|
+ console.log(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 {
|
|
|
+ getGPSCache()
|
|
|
+ }
|
|
|
+ }, [user.test_user])
|
|
|
+
|
|
|
+ useDidShow(() => {
|
|
|
+ if (!user.isLogin) {
|
|
|
+ dispatch(showNight(false))
|
|
|
+ dispatch(showDay(false))
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showNightRing',
|
|
|
+ data: false
|
|
|
+ })
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showDayRing',
|
|
|
+ data: false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ async function getGPSCache() {
|
|
|
+ var gps = await getStorage('gps')
|
|
|
+ if (gps && gps.length > 0) {
|
|
|
+ locationDetail = JSON.parse(gps)
|
|
|
+ global.locationDetail = JSON.parse(gps)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async function getStorage(key: string) {
|
|
|
+ try {
|
|
|
+ const res = await Taro.getStorage({ key });
|
|
|
+ return res.data;
|
|
|
+ } catch {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ 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
|
|
|
+ }))
|
|
|
+ }
|
|
|
+
|
|
|
+ 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()
|
|
|
+ }
|
|
|
+ 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: 77,
|
|
|
+ // lng: 20,
|
|
|
+ // date_start: strYesterday,
|
|
|
+ // date_end: strTomorrow,
|
|
|
+ // coordinate_system_standard: 'GCJ-02'
|
|
|
+ // }).then(data => {
|
|
|
+ // })
|
|
|
+ // return
|
|
|
+
|
|
|
+ if (process.env.TARO_ENV == 'rn') {
|
|
|
+ Taro.getLocation({
|
|
|
+ success(res) {
|
|
|
+ systemLocation({
|
|
|
+ lat: res.latitude,
|
|
|
+ lng: res.longitude,
|
|
|
+ // name: 'app test',
|
|
|
+ // address: 'app test',
|
|
|
+ date_start: strYesterday,
|
|
|
+ date_end: strTomorrow,
|
|
|
+ // coordinate_system_standard: 'GCJ-02'
|
|
|
+ }).then(data => {
|
|
|
+ console.log('get Location', 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) }))
|
|
|
+ showRing()
|
|
|
+ })
|
|
|
+ },
|
|
|
+ fail(res) {
|
|
|
+ if (res.errMsg == 'Permissions denied!') {
|
|
|
+ alert('aaa')
|
|
|
+ }
|
|
|
+ console.log(res)
|
|
|
+ showRing()
|
|
|
+ },
|
|
|
+ complete(res) {
|
|
|
+
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ joingMember = false;
|
|
|
+ Taro.chooseLocation({
|
|
|
+ latitude: authInfo && authInfo.lat ? authInfo.lat : undefined,
|
|
|
+ longitude: authInfo && authInfo.lat ? authInfo.lng : undefined,
|
|
|
+ success: function (res) {
|
|
|
+
|
|
|
+ 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)
|
|
|
+ })
|
|
|
+ showRing()
|
|
|
+ dispatch(updateMember({ isMember: isMember, gpsInfo: (data as any) }))
|
|
|
+ })
|
|
|
+
|
|
|
+ },
|
|
|
+ fail(res) {
|
|
|
+ Taro.showToast({
|
|
|
+ title: '位置修改失败!\n请重新选择就近位置',
|
|
|
+ icon: 'none'
|
|
|
+ })
|
|
|
+ showRing()
|
|
|
+ },
|
|
|
+ complete(res) {
|
|
|
+
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function showRing() {
|
|
|
+ dispatch(showNight(true))
|
|
|
+ dispatch(showDay(true))
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showNightRing',
|
|
|
+ data: true
|
|
|
+ })
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showDayRing',
|
|
|
+ data: true
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ function getLocation() {
|
|
|
+ var city = ''
|
|
|
+ if ((authInfo as any).address) {
|
|
|
+ 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')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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 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 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 getSunsetTime() {
|
|
|
+ if (props.isNight) {
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
+ if (new Date().getHours() >= 6) {
|
|
|
+ return `${sunsetTime}`
|
|
|
+ }
|
|
|
+ return `${sunsetTime}`
|
|
|
+ // return `Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
+ }
|
|
|
+ if (nightDate.getDate() == new Date().getDate()) {
|
|
|
+ return `${sunsetTime.substring(0, 5)}`
|
|
|
+ }
|
|
|
+ return `${sunsetTime.substring(0, 5)}`
|
|
|
+ }
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
+ if (new Date().getHours() >= 18) {
|
|
|
+ return `${sunriseTime}`
|
|
|
+
|
|
|
+ // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
+ }
|
|
|
+ return `${sunriseTime}`
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
+ }
|
|
|
+ if (dayDate.getDate() == new Date().getDate()) {
|
|
|
+ return `${sunriseTime.substring(0, 5)}`
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
+ }
|
|
|
+ return `${sunriseTime.substring(0, 5)}`
|
|
|
+ }
|
|
|
+
|
|
|
+ function getSunriseTime() {
|
|
|
+ if (props.isNight) {
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
+ if (new Date().getHours() >= 6) {
|
|
|
+ return `${sunriseTmrTime}`
|
|
|
+ }
|
|
|
+ return `${sunriseTmrTime}`
|
|
|
+ // return `Yesterday ${sunsetTime} - Today ${sunriseTmrTime}`
|
|
|
+ }
|
|
|
+ if (nightDate.getDate() == new Date().getDate()) {
|
|
|
+ return `${sunriseTmrTime.substring(0, 5)}`
|
|
|
+ }
|
|
|
+ return `${sunriseTmrTime.substring(0, 5)}`
|
|
|
+ }
|
|
|
+ if (!authInfo || !(authInfo as any).lat) {
|
|
|
+ if (new Date().getHours() >= 18) {
|
|
|
+ return `${sunsetTime}`
|
|
|
+
|
|
|
+ // return `Tomorrow ${sunriseTime} - ${sunsetTime}`
|
|
|
+ }
|
|
|
+ return `${sunsetTime}`
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
+ }
|
|
|
+ if (dayDate.getDate() == new Date().getDate()) {
|
|
|
+ return `${sunsetTime.substring(0, 5)}`
|
|
|
+ // return `Today ${sunriseTime} - ${sunsetTime}`
|
|
|
+ }
|
|
|
+ return `${sunsetTime.substring(0, 5)}`
|
|
|
+ }
|
|
|
+
|
|
|
+ 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')
|
|
|
+ }
|
|
|
+
|
|
|
+ function dayDurationDesc1() {
|
|
|
+ if (authInfo && authInfo.lat) {
|
|
|
+ return t('feature.day_night.sunrise_to_sunset')
|
|
|
+ }
|
|
|
+ return t('feature.day_night.day_tip')
|
|
|
+ }
|
|
|
+
|
|
|
+ function longClick() {
|
|
|
+ if (user.isLogin && user.test_user && 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: props.isNight ? t('feature.day_night.alert_required_night') : t('feature.day_night.alert_required_day'),
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ function tapShow() {
|
|
|
+ dispatch(showNight(true))
|
|
|
+ dispatch(showDay(true))
|
|
|
+ Taro.showModal({
|
|
|
+ title: 'Login Required',
|
|
|
+ content: props.isNight ? 'Log in to see your daily local nighttime from sunset to sunrise.' : 'Log in to see your daily local daytime from sunrise to sunset.',
|
|
|
+ cancelText: 'Later',
|
|
|
+ confirmText: 'Login',
|
|
|
+ success: function (res) {
|
|
|
+ if (res.confirm) {
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showNightRing',
|
|
|
+ data: true
|
|
|
+ })
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showDayRing',
|
|
|
+ data: true
|
|
|
+ })
|
|
|
+ if (!user.isLogin) {
|
|
|
+ jumpPage('/pages/account/ChooseAuth', 'ChooseAuth', navigation)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (res.cancel) {
|
|
|
+ dispatch(showNight(false))
|
|
|
+ dispatch(showDay(false))
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showNightRing',
|
|
|
+ data: false
|
|
|
+ })
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showDayRing',
|
|
|
+ data: false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ function operate(e) {
|
|
|
+ if (process.env.TARO_ENV == 'weapp') {
|
|
|
+ e.stopPropagation()
|
|
|
+ }
|
|
|
+ Taro.showActionSheet({
|
|
|
+ itemList: ['选择位置', '重置'],
|
|
|
+ success: function (res) {
|
|
|
+ switch (res.tapIndex) {
|
|
|
+ case 0:
|
|
|
+ auth()
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ reset()
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: function (res) {
|
|
|
+ console.log(res.errMsg)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ function reset() {
|
|
|
+ var content = ''
|
|
|
+ if (props.isNight) {
|
|
|
+ if (authInfo && authInfo.lat) {
|
|
|
+ content = 'Local times for sunset and sunrise, together with the nighttime ring will turn off, and your location data will be cleared. '
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ content = 'Sunset and sunrise times, together with the nighttime ring will turn off.'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (authInfo && authInfo.lat) {
|
|
|
+ content = 'Local times for sunrise and sunset, together with the daytime ring will turn off, and your location data will be cleared. '
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ content = 'Sunrise and sunset times, together with the daytime ring will turn off.'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Taro.showModal({
|
|
|
+ title: 'Reset Alert',
|
|
|
+ content: content,
|
|
|
+ success: function (res) {
|
|
|
+ if (res.confirm) {
|
|
|
+ if (user.isLogin) {
|
|
|
+ uploadPerm({ show_ring: false })
|
|
|
+ }
|
|
|
+ clearLocation().then(res => {
|
|
|
+ if (global.clearNightLocation) {
|
|
|
+ global.clearNightLocation()
|
|
|
+ }
|
|
|
+ if (global.clearDayLocation) {
|
|
|
+ global.clearDayLocation()
|
|
|
+ }
|
|
|
+ lastNightInfo = null
|
|
|
+ lastDayInfo = null
|
|
|
+
|
|
|
+ dispatch(showNight(false))
|
|
|
+ dispatch(showDay(false))
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showNightRing',
|
|
|
+ data: false
|
|
|
+ })
|
|
|
+ Taro.setStorage({
|
|
|
+ key: 'showDayRing',
|
|
|
+ data: false
|
|
|
+ })
|
|
|
+ })
|
|
|
+ } else if (res.cancel) {
|
|
|
+ console.log('用户点击取消')
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function bigRing() {
|
|
|
+ var common = getCommon(null, true)
|
|
|
+ common.radius = bigRingRadius;
|
|
|
+ common.lineWidth = ringWidth;
|
|
|
+ var bgRing = getBgRing()
|
|
|
+
|
|
|
+ let realRingBig: RealRing = {
|
|
|
+ color: ColorType.night + '66',
|
|
|
+ startArc: 0,
|
|
|
+ durationArc: 2
|
|
|
+ }
|
|
|
+ var sunRise = 24 * 60 + 6 * 60
|
|
|
+ var sunSet = 18 * 60
|
|
|
+
|
|
|
+ var sunRiseObj = nightStore.nightRingSunrise
|
|
|
+ var sunSetObj = nightStore.nightRingSunset
|
|
|
+ sunRise = 24 * 60 + parseInt(sunRiseObj.split(':')[0]) * 60 + parseInt(sunRiseObj.split(':')[1])
|
|
|
+ sunSet = parseInt(sunSetObj.split(':')[0]) * 60 + parseInt(sunSetObj.split(':')[1])
|
|
|
+ if (sunSetObj.indexOf('PM') != -1) {
|
|
|
+ sunSet += 12 * 60
|
|
|
+ }
|
|
|
+ // }
|
|
|
+ var duration = sunRise - sunSet
|
|
|
+ realRingBig.startArc = (sunSet * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0;
|
|
|
+ realRingBig.durationArc = (duration * 60) / (24 * 3600) * 2 * Math.PI;
|
|
|
+
|
|
|
+ var currentDot = getDot(null, false)
|
|
|
+ currentDot.color = ColorType.night
|
|
|
+
|
|
|
+ var now = new Date()
|
|
|
+ var t = now.getHours() * 60 + now.getMinutes()
|
|
|
+ var duration2 = t - sunSet
|
|
|
+ if (duration2 < 0) {
|
|
|
+ duration2 += 24 * 60
|
|
|
+ }
|
|
|
+ let realRing: RealRing = {
|
|
|
+ color: ColorType.night,
|
|
|
+ startArc: (sunSet * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0,
|
|
|
+ durationArc: (duration2 * 60) / (24 * 3600) * 2 * Math.PI
|
|
|
+ }
|
|
|
+
|
|
|
+ if (nightStore.nightRingDate) {
|
|
|
+ if (new Date(nightStore.nightRingDate).getDate() == new Date().getDate() && new Date().getHours() < 12) {
|
|
|
+
|
|
|
+ realRing = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!user.isLogin) {
|
|
|
+ currentDot = null;
|
|
|
+ realRing = null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return <Rings common={common} bgRing={bgRing} targetRing={realRingBig} realRing={duration2 > duration ? null : realRing} currentDot={currentDot} canvasId={'dddd' + 'index_day'} />
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return <Box><View style={{ position: 'relative' }}>
|
|
|
+ {
|
|
|
+ !user.isLogin && <View style={{ color: '#fff' }} onClick={tapShow}>{props.isNight ? '显示当地夜晚时间' : '显示当地白天时间'}</View>
|
|
|
+ }
|
|
|
+ {
|
|
|
+ user.isLogin && !dayStore.showDayRing && <View style={{ color: '#fff' }} onClick={auth}>{props.isNight ? '显示当地夜晚时间' : '显示当地白天时间'}</View>
|
|
|
+ }
|
|
|
+ {/* {
|
|
|
+ user.isLogin && dayStore.showDayRing && <Map className='myMap' latitude={80} longitude={80}/>
|
|
|
+ } */}
|
|
|
+ {
|
|
|
+ user.isLogin && dayStore.showDayRing && <View style={{ display: 'flex', flexDirection: 'column', zIndex: 1 }} onClick={showLocationAlert} onLongPress={longClick}>
|
|
|
+
|
|
|
+ <View style={{
|
|
|
+ display: 'flex', flexDirection: 'row',
|
|
|
+ alignItems: 'center', justifyContent: 'space-between',
|
|
|
+ // paddingRight: 14,
|
|
|
+ marginRight: rpxToPx(8)
|
|
|
+ }}>
|
|
|
+ <View style={{
|
|
|
+ position: 'relative', zIndex: 1,
|
|
|
+ marginLeft: 0,
|
|
|
+ }}>
|
|
|
+ {
|
|
|
+ props.isNight && bigRing()
|
|
|
+ }
|
|
|
+ </View>
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'column', flexShrink: 0 }}>
|
|
|
+ <Text className='duration_title2'>{props.isNight ? '日落' : '日出'}</Text>
|
|
|
+ <Text className='duration_value22' style={{ color: props.isNight ? ColorType.night : ColorType.day }}>{props.isNight ? getSunsetTime() : getSunriseTime()}</Text>
|
|
|
+ <Text className='duration_title2'>{!props.isNight ? '日落' : '日出'}</Text>
|
|
|
+ <Text className='duration_value22' style={{ color: !props.isNight ? ColorType.night : ColorType.day }}>{!props.isNight ? getSunsetTime() : getSunriseTime()}</Text>
|
|
|
+
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ <View style={{
|
|
|
+ display: 'flex', flexDirection: 'row',
|
|
|
+ alignItems: 'center', justifyContent: 'space-between',
|
|
|
+ // paddingRight: 14,
|
|
|
+ marginRight: rpxToPx(8)
|
|
|
+ }}>
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'column' }}>
|
|
|
+ <View style={{
|
|
|
+ marginLeft: rpxToPx(-40),
|
|
|
+ paddingLeft: rpxToPx(48),
|
|
|
+ }}>
|
|
|
+ <View className='sunrise_item' style={{
|
|
|
+ marginLeft: -6,
|
|
|
+ paddingLeft: 14,
|
|
|
+ }}>
|
|
|
+ <View className='sunicon_bg' style={{
|
|
|
+ display: 'flex', flexDirection: 'column',
|
|
|
+ marginLeft: 0,
|
|
|
+ marginRight: rpxToPx(68)
|
|
|
+ }}>
|
|
|
+ <View className='content_icon_bg' style={{ width: bigRingRadius * 2 + ringWidth }}>
|
|
|
+ <Image className='sunicon' src={props.isNight ? require('@assets/images/sunset.png') :
|
|
|
+ require('@assets/images/sunrise.png')} />
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'column', flexShrink: 0 }}>
|
|
|
+ <Text className='duration_title2'>{props.isNight ? '日落' : '日出'}</Text>
|
|
|
+ <Text className='duration_value22' style={{ color: props.isNight ? ColorType.night : ColorType.day }}>{props.isNight ? getSunsetTime() : getSunriseTime()}</Text>
|
|
|
+
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+
|
|
|
+ <View style={{
|
|
|
+ marginLeft: rpxToPx(-40),
|
|
|
+ paddingLeft: rpxToPx(48),
|
|
|
+ marginTop: rpxToPx(20)
|
|
|
+ }}>
|
|
|
+ <View className='sunrise_item' style={{
|
|
|
+ marginLeft: -6,
|
|
|
+ paddingLeft: 14,
|
|
|
+ }}>
|
|
|
+ <View className='sunicon_bg' style={{
|
|
|
+ display: 'flex', flexDirection: 'column',
|
|
|
+ marginLeft: 0,
|
|
|
+ marginRight: rpxToPx(68)
|
|
|
+ }}>
|
|
|
+ <View className='content_icon_bg' style={{ width: bigRingRadius * 2 + ringWidth }}>
|
|
|
+ <Image className='sunicon' src={!props.isNight ? require('@assets/images/sunset.png') :
|
|
|
+ require('@assets/images/sunrise.png')} />
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'column', flexShrink: 0 }}>
|
|
|
+ <Text className='duration_title2'>{!props.isNight ? '日落' : '日出'}</Text>
|
|
|
+ <Text className='duration_value22' style={{ color: !props.isNight ? ColorType.night : ColorType.day }}>{!props.isNight ? getSunsetTime() : getSunriseTime()}</Text>
|
|
|
+
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ <Image className="arrow2" src={require('@/assets/images/arrow3.png')} />
|
|
|
+ </View>
|
|
|
+ <View style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', marginTop: rpxToPx(36) }}>
|
|
|
+
|
|
|
+ {
|
|
|
+ authInfo && authInfo.lat ?
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'row' }} onClick={operate}>
|
|
|
+ <View className={props.isNight ? 'night_location_btn' : 'day_location_btn'}>{getLocation()}</View>
|
|
|
+ </View>
|
|
|
+ :
|
|
|
+ <View style={{ display: 'flex', flexDirection: 'row' }} onClick={operate}>
|
|
|
+ <View className={props.isNight ? 'night_location_btn' : 'day_location_btn'} >
|
|
|
+ {props.isNight ? t('feature.day_night.get_local_time') : t('feature.day_night.get_local_time_sunrise')}
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ }
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ }
|
|
|
+ {
|
|
|
+ showDetailPopup && modalContent()
|
|
|
+ }
|
|
|
+ {
|
|
|
+ showDetailModal && modalContent2()
|
|
|
+ }
|
|
|
+ </View>
|
|
|
+ </Box>
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ 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) => {
|
|
|
+ if (process.env.TARO_ENV == 'weapp') {
|
|
|
+ e.stopPropagation()
|
|
|
+ }
|
|
|
+
|
|
|
+ dispatch(showNight(e.detail.value))
|
|
|
+
|
|
|
+ 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 >*/
|
|
|
+}
|