SetSchedule_backup.tsx 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import Buttons from "@/components/basic/Buttons";
  2. import { setPlan } from "@/services/trackTimeDuration";
  3. import { setScenario, setStep } from "@/store/scenario";
  4. import { View, Text } from "@tarojs/components";
  5. import "./SetSchedule.scss";
  6. import Taro, { useReady } from "@tarojs/taro";
  7. import TimePickers from "@/components/input/TimePickers";
  8. // import { AtList, AtListItem } from 'taro-ui'
  9. import { useState } from "react";
  10. import { useDispatch, useSelector } from "react-redux";
  11. import Footer from "@/components/layout/Footer";
  12. import PickerViews from "@/components/input/PickerViews";
  13. // import { AtFloatLayout } from "taro-ui";
  14. // import "taro-ui/dist/style/components/float-layout.scss";
  15. import { durationDatas, durationIndex, durationTime, pickerDurations } from "../hooks/Console";
  16. import { TimeFormatter } from "@/utils/time_format";
  17. export default function Component() {
  18. const isFastFirst = false;
  19. const dispatch = useDispatch();
  20. const scenario = useSelector((state: any) => state.scenario);
  21. const common = useSelector((state: any) => state.common);
  22. const [isOpen, setIsOpen] = useState(false)
  23. // const [count,setCount] = useState(0)
  24. const [beginChange, setBeginChange] = useState(true)
  25. var scheduleObj: { start_time: any; end_time: any; };
  26. if (scenario.name == 'FAST') {
  27. scheduleObj = scenario.schedule.fast
  28. }
  29. else if (scenario.name == 'SLEEP') {
  30. scheduleObj = scenario.schedule.sleep
  31. }
  32. else {
  33. if (scenario.step == 'fast') {
  34. scheduleObj = scenario.schedule.fast
  35. }
  36. else {
  37. scheduleObj = scenario.schedule.sleep
  38. }
  39. }
  40. const [startTime, setStartTime] = useState(scheduleObj.start_time)
  41. const [endTime, setEndTime] = useState(scheduleObj.end_time)
  42. const [pickerValue, setPickerValue] = useState(durationIndex(scheduleObj.start_time, scheduleObj.end_time, common))
  43. const [hours, setHours] = useState(durationTime(scheduleObj.start_time, scheduleObj.end_time)[0])
  44. const [minutes, setMinutes] = useState(durationTime(scheduleObj.start_time, scheduleObj.end_time)[1])
  45. function start() {
  46. if (scenario.name == 'FAST' || scenario.name == 'SLEEP') {
  47. setPlan({
  48. scenario: scenario.name,
  49. schedule: scenario.name == 'FAST' ? {
  50. fast: {
  51. start_time: startTime,
  52. end_time: endTime,
  53. }
  54. } : {
  55. sleep: {
  56. start_time: startTime,
  57. end_time: endTime,
  58. }
  59. }
  60. }).then(res => {
  61. Taro.navigateBack({ delta: 3 })
  62. // console.log('success')
  63. })
  64. }
  65. else {
  66. if ((scenario.step == 'fast' && isFastFirst) || (scenario.step == 'sleep' && !isFastFirst)) {
  67. var obj = JSON.parse(JSON.stringify(scenario))
  68. if (isFastFirst) {
  69. obj.schedule.fast = {
  70. start_time: startTime,
  71. end_time: endTime,
  72. }
  73. dispatch(setStep('sleep'))
  74. dispatch(setScenario(obj))
  75. }
  76. else {
  77. obj.schedule.sleep = {
  78. start_time: startTime,
  79. end_time: endTime,
  80. }
  81. dispatch(setStep('fast'))
  82. dispatch(setScenario(obj))
  83. }
  84. Taro.navigateTo({
  85. url: '/pages/clock/SetSchedule'
  86. })
  87. }
  88. else {
  89. commit()
  90. }
  91. }
  92. }
  93. function commit() {
  94. setPlan({
  95. scenario: scenario.name,
  96. schedule: {
  97. fast: {
  98. start_time: isFastFirst ? scenario.schedule.fast.start_time : startTime,
  99. end_time: isFastFirst ? scenario.schedule.fast.end_time : endTime,
  100. }, sleep: {
  101. start_time: !isFastFirst ? scenario.schedule.sleep.start_time : startTime,
  102. end_time: !isFastFirst ? scenario.schedule.sleep.end_time : endTime,
  103. // start_time: startTime,
  104. // end_time: endTime,
  105. }
  106. }
  107. }).then(res => {
  108. dispatch(setStep('fast'))
  109. Taro.navigateBack({ delta: 4 })
  110. })
  111. }
  112. function onStartTimeChange(e: string) {
  113. setBeginChange(true)
  114. setStartTime(e)
  115. setPickerValue(durationIndex(e, endTime, common))
  116. setHours(durationTime(e, endTime)[0])
  117. setMinutes(durationTime(e, endTime)[1])
  118. }
  119. function onEndTimeChange(e: string) {
  120. setBeginChange(false)
  121. setEndTime(e)
  122. setPickerValue(durationIndex(startTime, e, common))
  123. setHours(durationTime(startTime, e)[0])
  124. setMinutes(durationTime(startTime, e)[1])
  125. }
  126. useReady(() => {
  127. var title = scenario.step == 'fast' ? 'Fast schedule' : 'Sleep schedule'
  128. Taro.setNavigationBarTitle({
  129. title: title
  130. })
  131. })
  132. function showPicker() {
  133. setIsOpen(true)
  134. }
  135. function durationChange(e) {
  136. var list = durationDatas(common)
  137. setHours(list[0][e[0]])
  138. setMinutes(list[1][e[1]])
  139. setPickerValue(e)
  140. setIsOpen(false)
  141. if (beginChange) {
  142. setEndTime(TimeFormatter.calculateTimeByTimeRange(list[0][e[0]] * 60 + list[1][e[1]], startTime, true));
  143. }
  144. else {
  145. setStartTime(TimeFormatter.calculateTimeByTimeRange(list[0][e[0]] * 60 + list[1][e[1]], endTime, false));
  146. }
  147. }
  148. function layoutContent() {
  149. return <View style={{ color: '#000' }}>
  150. <PickerViews onChange={durationChange} items={durationDatas(common)} value={pickerValue} height={200} showBtns={true} onCancel={() => { setIsOpen(false) }} />
  151. </View>
  152. }
  153. return <View >
  154. {/* <Text>场景名称{scenario.name}</Text> */}
  155. <View className="box">
  156. <View className="header">
  157. <View className="item">
  158. <TimePickers time={startTime} content={scenario.step == 'fast' ? 'Fast starts\n' + startTime : 'Sleep starts\n' + startTime} change={onStartTimeChange} />
  159. </View>
  160. <View className="item">
  161. <TimePickers time={endTime} content={scenario.step == 'fast' ? 'Fast ends\n' + endTime : 'Sleep ends\n' + endTime} change={onEndTimeChange} />
  162. </View>
  163. </View>
  164. <View style={{ flex: 1 }} />
  165. <Text className="duration" onClick={() => { setIsOpen(true) }}>{hours > 0 ? hours + ' hours ' : ''}{minutes > 0 ? minutes + ' minutes' : ''}</Text>
  166. </View>
  167. <Footer child={
  168. <Buttons title={scenario.step == 'fast' ? 'Set fast schedule' : 'Set sleep schedule'} style={{ backgroundColor: scenario.step == 'fast' ? '#AAFF00' : '#00ffff', width: 320 }} onClick={() => start()}></Buttons>
  169. } />
  170. <AtFloatLayout
  171. isOpened={isOpen}
  172. onClose={() => {
  173. setIsOpen(false)
  174. }}>
  175. {
  176. layoutContent()
  177. }
  178. </AtFloatLayout>
  179. </View>;
  180. }