MainConsole.tsx 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import { WindowType } from "@/utils/types";
  2. import { View, Text } from "@tarojs/components";
  3. import dayjs from "dayjs";
  4. import { useEffect, useRef, useState } from "react";
  5. import { useSelector } from "react-redux";
  6. import './MainConsole.scss'
  7. import { jumpPage } from "../trackTimeDuration/hooks/Common";
  8. import Modal from "@/components/layout/Modal.weapp";
  9. import { MainColorType } from "@/context/themes/color";
  10. import ConsolePicker from "../trackTimeDuration/components/ConsolePicker";
  11. import { clockTimes } from "@/services/health";
  12. let useNavigation;
  13. let min = 0
  14. let max = 0
  15. let defaultTimestamp = 0
  16. if (process.env.TARO_ENV == 'rn') {
  17. useNavigation = require("@react-navigation/native").useNavigation
  18. }
  19. export default function MainConsole(props: { type: WindowType }) {
  20. const health = useSelector((state: any) => state.health);
  21. const user = useSelector((state: any) => state.user);
  22. const [showTimePicker, setShowTimePicker] = useState(false)
  23. const [operateType, setOperateType] = useState('')
  24. const [btnDisable, setBtnDisable] = useState(false)
  25. const [selItem, setSelItem] = useState<any>(null)
  26. const limitPickerRef = useRef(null)
  27. let navigation, showActionSheetWithOptions;
  28. if (useNavigation) {
  29. navigation = useNavigation()
  30. }
  31. useEffect(() => {
  32. }, [props.type])
  33. function record(item) {
  34. if (!user.isLogin) {
  35. jumpPage('/pages/account/ChooseAuth', 'ChooseAuth', navigation)
  36. return
  37. }
  38. setSelItem(item)
  39. switch (item.action) {
  40. case 'START':
  41. {
  42. defaultTimestamp = new Date().getTime()
  43. min = defaultTimestamp - 1 * 24 * 3600 * 1000
  44. max = defaultTimestamp
  45. setOperateType('startFast')
  46. setShowTimePicker(true)
  47. }
  48. return;
  49. case 'END':
  50. {
  51. defaultTimestamp = new Date().getTime()
  52. // defaultTimestamp = e ? new Date().getTime() : logEventTimestamp
  53. min = defaultTimestamp - 1 * 24 * 3600 * 1000
  54. max = defaultTimestamp
  55. setOperateType('endFast')
  56. setShowTimePicker(true)
  57. }
  58. return;
  59. }
  60. jumpPage('/pages/clock/AddMoment?moment=' + JSON.stringify(item))
  61. }
  62. function timelineItem(item: any, index: number) {
  63. return <View key={index} className="timeline_item" >
  64. <View className="timeline_left">
  65. <Text className="timeline_title">{item.title}</Text>
  66. <Text className="timeline_time">{dayjs(item.target.timestamp).format('HH:mm')}</Text>
  67. </View>
  68. {
  69. item.action && item.action != 'NA' && <View className="timeline_operate" onClick={() => record(item)}>记录</View>
  70. }
  71. </View>
  72. }
  73. function modalContent() {
  74. global.set_time = new Date().getTime()
  75. return <Modal
  76. testInfo={null}
  77. dismiss={() => {
  78. setShowTimePicker(false)
  79. }}
  80. confirm={() => { }}>
  81. {
  82. timePickerContent()
  83. }
  84. </Modal>
  85. }
  86. function timePickerContent() {
  87. var title = operateType == 'endFast' ? '结束断食' : '开始断食'
  88. var color = MainColorType.fast
  89. var endTimestamp = 0
  90. if (operateType == 'endFast') {
  91. endTimestamp = new Date().getTime()//fastData.target.end_time
  92. }
  93. var duration = 24*3600*1000//fastData.target.duration
  94. return <View className="modal_content">
  95. <ConsolePicker ref={limitPickerRef}
  96. themeColor={color}
  97. title={title}
  98. onCancel={() => {
  99. setShowTimePicker(false)
  100. }}
  101. min={min}
  102. max={max}
  103. current={defaultTimestamp}
  104. duration={duration}
  105. endTimestamp={endTimestamp}
  106. isFast={true}
  107. isEnd={operateType == 'endFast'}
  108. isTimeout={false}
  109. isLoading={btnDisable}
  110. onChange={(e) => {
  111. pickerConfirm(e, null)
  112. global.pauseIndexTimer = false
  113. }}
  114. />
  115. </View>
  116. }
  117. function pickerConfirm(t1: number, event: any) {
  118. if (btnDisable) {
  119. return
  120. }
  121. global.scenario = 'FAST'
  122. setBtnDisable(true)
  123. clockTimes({
  124. check_items: [{
  125. schedule_id: selItem.schedule_id,
  126. date: dayjs(t1).format('YYYYMMDD'),
  127. timestamp: t1
  128. }]
  129. }).then(res => {
  130. setBtnDisable(false)
  131. setShowTimePicker(false)
  132. global.refreshWindow()
  133. }).catch(e => {
  134. setBtnDisable(false)
  135. })
  136. }
  137. function detail() {
  138. const { day, night } = health.windows.night_day
  139. const { fast, eat } = health.windows.fast_eat
  140. const { sleep, active } = health.windows.sleep_active
  141. switch (health.mode) {
  142. case 'DAY':
  143. return <View>
  144. {
  145. day.timeline.map((item, index) => {
  146. return timelineItem(item, index)
  147. })
  148. }
  149. </View>
  150. case 'NIGHT':
  151. return <View>
  152. {
  153. night.timeline.map((item, index) => {
  154. return timelineItem(item, index)
  155. })
  156. }
  157. </View>
  158. case 'FAST':
  159. return <View>
  160. {
  161. fast.timeline.map((item, index) => {
  162. return timelineItem(item, index)
  163. })
  164. }
  165. </View>
  166. case 'EAT':
  167. return <View>
  168. {
  169. eat.timeline.map((item, index) => {
  170. return timelineItem(item, index)
  171. })
  172. }
  173. </View>
  174. case 'SLEEP':
  175. return <View>
  176. {
  177. sleep.timeline.map((item, index) => {
  178. return timelineItem(item, index)
  179. })
  180. }
  181. </View>
  182. case 'ACTIVE':
  183. return <View>
  184. {
  185. active.timeline && active.timeline.map((item, index) => {
  186. return timelineItem(item, index)
  187. })
  188. }
  189. </View>
  190. }
  191. return <View />
  192. }
  193. return <View>
  194. {
  195. detail()
  196. }
  197. {
  198. showTimePicker && modalContent()
  199. }
  200. </View>
  201. }