RecordsHistory.tsx 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. import { clearTimeRecords, getClockRecords } from "@/services/trackTimeDuration";
  2. import { View, Text, ScrollView } from "@tarojs/components";
  3. import { usePullDownRefresh, useReachBottom, useReady, useRouter } from "@tarojs/taro";
  4. import { useEffect, useState } from "react";
  5. import Schedule from '@/features/trackTimeDuration/components/Schedule'
  6. import MetricHistory from "@/features/trackSomething/components/MetricHistory";
  7. import ActivityHistory from "@/features/trackSomething/components/ActivityHistory";
  8. import { activityRecords, clearMetricRecords, cleartActivityRecords, metricRecords } from "@/services/trackSomething";
  9. import Taro from "@tarojs/taro";
  10. import Layout from "@/components/layout/layout";
  11. import NoData from "@/components/view/NoData";
  12. import { NaviBarTitleShowType, TemplateType } from "@/utils/types";
  13. import { useSelector } from "react-redux";
  14. import RecordFastSleep from "@/features/trackTimeDuration/components/RecordFastSleep";
  15. import './RecordsHistory.scss'
  16. export default function Page() {
  17. const router = useRouter();
  18. const pageSize = 10
  19. const [pageIndex, setPageIndex] = useState(1)
  20. const [records, setRecords] = useState<any[]>([])
  21. const [counter, setCounter] = useState(0)
  22. const [timerId, setTimerId] = useState(null)
  23. const [showErrorPage, setShowErrorPage] = useState(false)
  24. const { refreshList } = router.params
  25. const [triggered, setTriggered] = useState(false)
  26. const [showModal, setShowModal] = useState(false)
  27. const [modalDetail, setModalDetail] = useState<any>({})
  28. const [total, setTotal] = useState(0)
  29. const [isLoading, setIsLoading] = useState(false)
  30. const [loaded,setLoaded] = useState(false)
  31. const user = useSelector((state: any) => state.user);
  32. global.showModal = (isShow: boolean, detail: any) => {
  33. setShowModal(isShow)
  34. setModalDetail(detail)
  35. }
  36. useEffect(() => {
  37. startTimer();
  38. return () => {
  39. // 在组件卸载时清除定时器
  40. if (timerId) {
  41. clearInterval(timerId);
  42. }
  43. };
  44. }, [timerId]);
  45. const startTimer = () => {
  46. // 避免重复启动定时器
  47. if (timerId) {
  48. return;
  49. }
  50. const id = setInterval(() => {
  51. setCounter((prevCounter) => prevCounter + 1);
  52. }, 1000);
  53. setTimerId(id as any);
  54. };
  55. useReady(() => {
  56. refresh()
  57. })
  58. usePullDownRefresh(() => {
  59. console.log('aaa')
  60. refresh()
  61. })
  62. useReachBottom(() => {
  63. more()
  64. // setPageIndex(pageIndex+1)
  65. // getHistory()
  66. })
  67. function refresh() {
  68. setIsLoading(true)
  69. setPageIndex(1)
  70. getHistory(1)
  71. }
  72. function more() {
  73. if (total <= records.length || isLoading) {
  74. return;
  75. }
  76. setIsLoading(true)
  77. var page = pageIndex + 1
  78. setPageIndex(page)
  79. getHistory(page)
  80. }
  81. function getHistory(page = pageIndex) {
  82. if (page == 1)
  83. setTriggered(true)
  84. if (router.params.type == 'time') {
  85. getClockRecords({
  86. page: page,
  87. limit: pageSize,
  88. only_finished: true
  89. }).then(res => {
  90. Taro.stopPullDownRefresh()
  91. setTriggered(false)
  92. setLoaded(true)
  93. setTotal((res as any).total)
  94. if (page == 1) {
  95. setRecords((res as any).data)
  96. } else {
  97. setRecords(records.concat((res as any).data))
  98. }
  99. setIsLoading(false)
  100. })
  101. }
  102. else if (router.params.type == 'activity') {
  103. activityRecords(
  104. {
  105. page: page,
  106. limit: pageSize,
  107. code: '_walk'
  108. }
  109. ).then(res => {
  110. Taro.stopPullDownRefresh()
  111. setTriggered(false)
  112. setLoaded(true)
  113. setTotal((res as any).total)
  114. if (page == 1) {
  115. setRecords((res as any).data)
  116. } else {
  117. setRecords(records.concat((res as any).data))
  118. }
  119. setIsLoading(false)
  120. })
  121. }
  122. else if (router.params.type == 'metric') {
  123. metricRecords(
  124. {
  125. page: page,
  126. limit: pageSize,
  127. code: router.params.code
  128. }
  129. ).then(res => {
  130. Taro.stopPullDownRefresh()
  131. setTriggered(false)
  132. setLoaded(true)
  133. setTotal((res as any).total)
  134. if (page == 1) {
  135. setRecords((res as any).data)
  136. } else {
  137. setRecords(records.concat((res as any).data))
  138. }
  139. setIsLoading(false)
  140. })
  141. }
  142. }
  143. function removeItem(item) {
  144. setRecords(records.filter(i => i.id != item.id))
  145. }
  146. global.clearHistory = () => {
  147. // var page = Taro.getCurrentPages()[0]
  148. // debugger
  149. // page.refresh()
  150. Taro.showModal({
  151. title: '提示',
  152. content: '确认删除全部记录?',
  153. success: (res) => {
  154. if (res.confirm) {
  155. doClear()
  156. }
  157. }
  158. })
  159. }
  160. function doClear() {
  161. if (router.params.type == 'activity') {
  162. cleartActivityRecords({
  163. code: '_walk'
  164. }).then(res => {
  165. refresh()
  166. global.refreshActivity()
  167. // router.params.refreshList()
  168. // Taro.getCurrentPages()[0].refresh()
  169. })
  170. }
  171. else if (router.params.type == 'metric') {
  172. clearMetricRecords({
  173. code: router.params.code
  174. }).then(res => {
  175. refresh()
  176. global.refreshMetric()
  177. // Taro.getCurrentPages()[0].refresh()
  178. })
  179. }
  180. else if (router.params.type == 'time') {
  181. clearTimeRecords().then(res => {
  182. refresh()
  183. // global.refreshMetric()
  184. // Taro.getCurrentPages()[0].refresh()
  185. })
  186. }
  187. }
  188. function detail() {
  189. if (router.params.type == 'time') {
  190. return <View>
  191. {
  192. user.test_user && <Text style={{ color: '#fff', position: 'absolute', right: 50, top: 0 }} onClick={() => global.clearHistory()}>删除全部</Text>
  193. }
  194. {
  195. records.map((item, index) => {
  196. return <RecordFastSleep key={index} data={item} type='record' delSuccess={(item) => removeItem(item)} />
  197. // return <Schedule key={index} data={item} type="record" delSuccess={(item) => removeItem(item)} />
  198. })
  199. }
  200. </View>
  201. }
  202. if (router.params.type == 'metric') {
  203. return <MetricHistory records={records} />
  204. }
  205. if (router.params.type == 'activity') {
  206. return <ActivityHistory records={records} />
  207. }
  208. }
  209. return <View style={{ position: 'relative' }}>
  210. <Layout children={showErrorPage ? <NoData refresh={() => { refresh() }} /> : detail()}
  211. title={router.params.title}
  212. type={TemplateType.flex}
  213. refresh={() => { refresh() }}
  214. triggered={triggered}
  215. more={() => { more() }}
  216. titleShowStyle={NaviBarTitleShowType.scrollToShow}
  217. />
  218. {
  219. loaded && records.length == 0 && <View className="no_records_bg">
  220. <Text className="no_records">无记录</Text>
  221. </View>
  222. }
  223. {
  224. showModal && modalDetail
  225. }
  226. </View>
  227. // return <View className="container">
  228. // {
  229. // (router.params.type == 'metric' || router.params.type == 'activity') && <View style={{ height: 50, fontSize: 30, color: '#fff' }} onClick={clear}>删除全部</View>
  230. // }
  231. // <ScrollView scrollY style={{ height: '100%', display: 'flex', flexDirection: 'column' }}
  232. // onScrollToLower={more} enableFlex
  233. // // onRefresh={refresh}
  234. // >
  235. // {
  236. // router.params.type == 'time' && records.map((item, index) => {
  237. // return <Schedule key={index} data={item} type="record" delSuccess={(item) => removeItem(item)} />
  238. // })
  239. // }
  240. // {
  241. // router.params.type == 'metric' && <MetricHistory records={records} />
  242. // }
  243. // {
  244. // router.params.type == 'activity' && <ActivityHistory records={records} />
  245. // }
  246. // </ScrollView>
  247. // </View>;
  248. }