DayLight.tsx 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. import { useEffect, useState } from 'react'
  2. import './DayLight.scss'
  3. import { View, Text, Switch, Image } from '@tarojs/components'
  4. import Taro from '@tarojs/taro'
  5. import { useDispatch, useSelector } from 'react-redux'
  6. import { updateMember } from '@/store/day_night'
  7. export default function DayLight() {
  8. const [showRing, setShowRing] = useState(false)
  9. const [isTomorrow, setIsTomorrow] = useState(false)
  10. const [isMember, setIsMember] = useState(false)
  11. const [isNight, setIsNight] = useState(false)
  12. const [authInfo, setAuthInfo] = useState(null)
  13. const [sunriseTime, setSunriseTime] = useState('06:00')
  14. const [sunsetTime, setSunsetTime] = useState('18:00')
  15. const dayNight = useSelector((state: any) => state.dayNight);
  16. const user = useSelector((state: any) => state.user);
  17. const dispatch = useDispatch();
  18. useEffect(() => { getContent() }, [])
  19. useEffect(() => {
  20. setIsMember(user.test_user)
  21. dispatch(updateMember({ isMember: user.test_user,authInfo }))
  22. if (user.test_user && authInfo) {
  23. setSunriseTime('07:00')
  24. setSunsetTime('19:00')
  25. }
  26. else {
  27. setSunriseTime('06:00')
  28. setSunsetTime('18:00')
  29. }
  30. }, [user.test_user,authInfo])
  31. async function getStorage(key: string) {
  32. try {
  33. const res = await Taro.getStorage({ key });
  34. return res.data;
  35. } catch {
  36. return '';
  37. }
  38. }
  39. async function getContent() {
  40. const isShow = await getStorage('showLightRing') || false
  41. setShowRing(isShow)
  42. global.showNightRing = isShow
  43. global.refreshIndex()
  44. const gpsInfo = await getStorage('gps') || null
  45. if (gpsInfo) {
  46. setAuthInfo(JSON.parse(gpsInfo))
  47. dispatch(updateMember({ isMember: user.test_user, gpsInfo: JSON.parse(gpsInfo) }))
  48. }
  49. else {
  50. setAuthInfo(null)
  51. }
  52. checkData()
  53. }
  54. function checkData() {
  55. var date = new Date()
  56. var minutes = date.getHours() * 60 + date.getMinutes()
  57. var riseMinutes = parseInt(sunriseTime.split(':')[0]) * 60 + parseInt(sunriseTime.split(':')[1])
  58. var setMinutes = parseInt(sunsetTime.split(':')[0]) * 60 + parseInt(sunsetTime.split(':')[1])
  59. if (minutes >= riseMinutes && minutes < setMinutes) {
  60. setIsNight(false)
  61. }
  62. else {
  63. setIsNight(true)
  64. }
  65. if (minutes >= setMinutes) {
  66. setIsTomorrow(true)
  67. }
  68. else {
  69. setIsTomorrow(false)
  70. }
  71. }
  72. function buy() {
  73. Taro.navigateTo({
  74. url: '/pages/account/Member'
  75. })
  76. }
  77. function auth() {
  78. Taro.chooseLocation({
  79. success: function (res) {
  80. console.log(res)
  81. setAuthInfo(res as any)
  82. Taro.setStorage({
  83. key: 'gps',
  84. data: JSON.stringify(res as any)
  85. })
  86. dispatch(updateMember({ isMember: user.test_user, gpsInfo: (res as any) }))
  87. },
  88. fail(res) {
  89. Taro.showToast({
  90. title: '位置修改失败!\n请重新选择就近位置',
  91. icon: 'none'
  92. })
  93. },
  94. })
  95. }
  96. var split = new Date().toString().split(' ');
  97. var timezone = split[split.length - 2];
  98. return <View>
  99. <View className='daylight_row'>
  100. <Text>Night ring</Text>
  101. <Switch checked={showRing}
  102. onChange={(e) => {
  103. setShowRing(e.detail.value)
  104. global.showNightRing = e.detail.value
  105. global.refreshIndex()
  106. Taro.setStorage({
  107. key: 'showLightRing',
  108. data: e.detail.value
  109. })
  110. }}
  111. />
  112. </View>
  113. {
  114. showRing && <View>
  115. <View className="daylight_row">
  116. <Text>Sunset today</Text>
  117. <Text>{sunsetTime}</Text>
  118. </View>
  119. <View className="daylight_row">
  120. <Text>{isTomorrow ? 'Sunrise tomororow' : 'Sunrise today'}</Text>
  121. <Text>{sunriseTime}</Text>
  122. </View>
  123. <Text className='daylight_note'>{isMember ? 'Calculated based on your location.' : 'Sunset and sunrise times are global average. For actual times at your location, join our Pro program.'}</Text>
  124. {
  125. isMember ? <View>
  126. <View className='daylight_item' onClick={auth}>
  127. <Text style={{ flex: 1 }}>Location</Text>
  128. {
  129. authInfo ? <Text className='address'>{(authInfo as any).address}</Text> :
  130. <Text>Enter</Text>
  131. }
  132. <Image className="daylight_arrow" src={require('@/assets/images/arrow3.png')} />
  133. </View>
  134. {
  135. authInfo && <View className='daylight_item' >
  136. <Text style={{ flex: 1 }}>Latitude</Text>
  137. <Text>{(authInfo as any).latitude}</Text>
  138. </View>
  139. }
  140. {
  141. authInfo && <View className='daylight_item'>
  142. <Text style={{ flex: 1 }}>Longitude</Text>
  143. <Text>{(authInfo as any).longitude}</Text>
  144. </View>
  145. }
  146. {
  147. authInfo && <View className='daylight_item'>
  148. <Text style={{ flex: 1 }}>Time zone</Text>
  149. <Text>{timezone}</Text>
  150. </View>
  151. }
  152. </View> :
  153. <View className='become_vip' onClick={buy}>
  154. <Text style={{ color: '#000' }}>Become Pro</Text>
  155. </View>
  156. }
  157. </View>
  158. }
  159. </View>
  160. }