Przeglądaj źródła

Merge branch 'v3.5.1' of http://git.ycjcjy.com/zhiyuxing/miniapp-v3 into v3.5.1

许静 5 lat temu
rodzic
commit
de1aa8a749
1 zmienionych plików z 70 dodań i 4 usunięć
  1. 70
    4
      src/components/TimeTicker/index.jsx

+ 70
- 4
src/components/TimeTicker/index.jsx Wyświetl plik

@@ -14,20 +14,86 @@ export default class TimeTicker extends Taro.Component {
14 14
 
15 15
   state = {
16 16
     status: STATUS_READY,
17
+    tmStart: undefined,
18
+    tmEnd: undefined,
19
+    preText: undefined,
20
+    tkText: undefined,
17 21
   }
18 22
 
23
+  timer = null
24
+
19 25
   componentWillMount() {
20 26
 
21 27
 
22 28
   }
23 29
 
24 30
   computeProps(props) {
25
-    const { ready, process, over, timeRange = [] } = props
31
+    const { timeRange } = props || {}
26 32
     const now = dayjs().valueOf()
27
-    const [t1, t2] = timeRange
28
-
29
-    // 确定当前状态
33
+    const [t1, t2] = timeRange || []
34
+    
35
+    // 当前状态 -  默认未开始
30 36
     let status = this.state.status
37
+    let tmStart = undefined
38
+    let tmEnd = undefined
39
+
40
+    // 没有设置起止时间
41
+    if (!t1 && !t2) {
42
+      throw new Error('TimeTicker has no timeRange setting')
43
+    }
44
+
45
+    if (!t1 || !t2) {
46
+      // 只设置了一个时间
47
+      targetTime = t1 ? dayjs(t1).valueOf() : dayjs(t2).valueOf()
48
+
49
+      if (now > targetTime) {
50
+        status = STATUS_OVER
51
+      } else if (now === targetTime) {
52
+        status = STATUS_PROCESSING
53
+      } else {
54
+        status = STATUS_READY
55
+      }
56
+    } else {
57
+      // 设置了时间区间
58
+      const dtStart = dayjs(t1).valueOf()
59
+      const dtEnd = dayjs(t2).valueOf()
60
+
61
+      if (dtStart > now) {
62
+        status = STATUS_READY
63
+        targetTime = dtStart
64
+      } else if (dtStart <= now && now < dtEnd) {
65
+        status = STATUS_PROCESSING
66
+        targetTime = dtEnd
67
+      } else {
68
+        status = STATUS_OVER
69
+        targetTime = dtEnd
70
+      }
71
+    }
72
+
73
+    this.setState({ status, targetTime }, this.startTimer.bind(this))
74
+  }
75
+
76
+  startTimer = (props) => {
77
+    const {
78
+      status,
79
+      targetTime,
80
+      interval = 1000,
81
+      onStart,
82
+      onProcess,
83
+      onEnd,
84
+    } = props || {}
85
+
86
+    if (this.timer) {
87
+      clearInterval(this.timer)
88
+    }
89
+
90
+    this.timer = setInterval(() => {
91
+      const now = dayjs().valueOf()
92
+      const diff = targetTime - now
93
+
94
+
95
+
96
+    }, interval)
31 97
 
32 98
   }
33 99