Your Name пре 3 година
родитељ
комит
19f2ac0087
2 измењених фајлова са 52 додато и 30 уклоњено
  1. 10
    30
      src/pages/index/activityDetail/index.jsx
  2. 42
    0
      src/pages/index/activityDetail/useStatus.js

+ 10
- 30
src/pages/index/activityDetail/index.jsx Прегледај датотеку

1
 import { useState, useEffect } from "react";
1
 import { useState, useEffect } from "react";
2
 import Taro from "@tarojs/taro";
2
 import Taro from "@tarojs/taro";
3
 import withLayout from "@/layout";
3
 import withLayout from "@/layout";
4
-import { ScrollView, Image, RichText } from "@tarojs/components";
4
+import { ScrollView, Image, RichText, Button } from "@tarojs/components";
5
 import Disclaimer from "@/components/Disclaimer";
5
 import Disclaimer from "@/components/Disclaimer";
6
 
6
 
7
 import {
7
 import {
14
 import useParams from "@/utils/hooks/useParams";
14
 import useParams from "@/utils/hooks/useParams";
15
 import useShare from "@/utils/hooks/useShare";
15
 import useShare from "@/utils/hooks/useShare";
16
 import useFavor from "@/utils/hooks/useFavor";
16
 import useFavor from "@/utils/hooks/useFavor";
17
+import useStatus from './useStatus'
17
 
18
 
18
 import "./index.scss";
19
 import "./index.scss";
19
 
20
 
20
-const activityStatusDict = {
21
-  0: {
22
-    text: "立即参与",
23
-    text1: "立即参团",
24
-    className: "yellow",
25
-  },
26
-  1: {
27
-    text: "未开始",
28
-    text1: "未开始",
29
-    className: "blue",
30
-  },
31
-  2: {
32
-    text: "已结束",
33
-    text1: "已结束",
34
-    className: "grey",
35
-  },
36
-  3: {
37
-    text: "已参与",
38
-    text1: "已结束",
39
-    className: "yellow",
40
-  },
41
-};
42
-
43
 export default withLayout((props) => {
21
 export default withLayout((props) => {
44
   const { router, shareContent, trackData, person, page } = props;
22
   const { router, shareContent, trackData, person, page } = props;
45
   const { id } = router.params;
23
   const { id } = router.params;
46
   const [detail, setDetail] = useState();
24
   const [detail, setDetail] = useState();
47
   const buildingId = detail?.buildingId;
25
   const buildingId = detail?.buildingId;
48
 
26
 
27
+  const [btnText, btnDisabled] = useStatus(detail)
28
+
49
   const getDetail = (params) => {
29
   const getDetail = (params) => {
50
     Taro.showLoading();
30
     Taro.showLoading();
51
 
31
 
237
             <text>{detail.enlisted || 0}人已报名</text>
217
             <text>{detail.enlisted || 0}人已报名</text>
238
           </view>
218
           </view>
239
         </view>
219
         </view>
240
-        <view className="btn" onClick={handleSignup}>
241
-          <text>{activityStatusDict[detail.activityStatus]?.text1}</text>
242
-        </view>
220
+        <button className="btn" disabled={btnDisabled} onClick={handleSignup}>
221
+          <text>{btnText}</text>
222
+        </button>
243
       </view>
223
       </view>
244
       {/* </view> */}
224
       {/* </view> */}
245
     </view>
225
     </view>
290
               </view>
270
               </view>
291
               <view className="flex-item"></view>
271
               <view className="flex-item"></view>
292
 
272
 
293
-              <text className="Post" onClick={handleSignup}>
294
-                {activityStatusDict[detail.activityStatus]?.text}
295
-              </text>
273
+              <button disabled={btnDisabled} className="Post" onClick={handleSignup}>
274
+                {btnText}
275
+              </button>
296
             </view>
276
             </view>
297
           )}
277
           )}
298
         </view>
278
         </view>

+ 42
- 0
src/pages/index/activityDetail/useStatus.js Прегледај датотеку

1
+import { useEffect, useState } from 'react'
2
+
3
+const ACT_GAMEOVER = 2
4
+const ACT_ENLIST_FULL = 2
5
+const ACT_SIGNED = 1
6
+
7
+export default function useStatus(info) {
8
+  const { dynamicId, isSign, activityStatus, isEnlist } = info || {}
9
+
10
+  const [disabled, setDisabled] = useState(false)
11
+  const [btnText, setBtnText] = useState('立即报名')
12
+
13
+  useEffect(() => {
14
+    if (!dynamicId) return;
15
+
16
+    // 活动结束
17
+    if (activityStatus === ACT_GAMEOVER) {
18
+      setBtnText('已结束')
19
+      setDisabled(true)
20
+      return;
21
+    }
22
+
23
+    // 报名人数已满
24
+    if (isEnlist === ACT_ENLIST_FULL) {
25
+      setBtnText('人数已满')
26
+      setDisabled(true)
27
+      return;
28
+    }
29
+
30
+    // 已报名
31
+    if (isSign === ACT_SIGNED) {
32
+      setBtnText('已报名')
33
+      setDisabled(true)
34
+      return;
35
+    }
36
+
37
+    setBtnText('立即报名')
38
+    setDisabled(false)
39
+  },[dynamicId])
40
+
41
+  return [btnText, disabled]
42
+}