浏览代码

静态页面

1002884655 3 年前
父节点
当前提交
7ffdcf79b2

+ 2
- 2
config/dev.js 查看文件

@@ -3,8 +3,8 @@ module.exports = {
3 3
     NODE_ENV: '"development"'
4 4
   },
5 5
   defineConstants: {
6
-    HOST: '"https://xlk.njyz.tech"',
7
-    // HOST: '"http://127.0.0.1:8081"',
6
+    // HOST: '"https://xlk.njyz.tech"',
7
+    HOST: '"http://127.0.0.1:8081"',
8 8
     WSS_HOST: '"wss://xlk.njyz.tech"',
9 9
     OSS_PATH: '"https://xlk-assets.oss-accelerate.aliyuncs.com/"',
10 10
     OSS_FAST_PATH: '"https://xlk-assets.oss-accelerate.aliyuncs.com/"',

+ 2
- 1
config/index.js 查看文件

@@ -24,11 +24,12 @@ const config = {
24 24
     '@/store': path.resolve(__dirname, '..', 'src/store'),
25 25
     '@/services': path.resolve(__dirname, '..', 'src/services'),
26 26
     '@/utils': path.resolve(__dirname, '..', 'src/utils'),
27
+    '@/native': path.resolve(__dirname, '..', 'src/native'),
27 28
     '@/pages': path.resolve(__dirname, '..', 'src/pages'),
28 29
   },
29 30
   copy: {
30 31
     patterns: [
31
-      { from: 'src/native/', to: 'dist/native/' },
32
+      // { from: 'src/native/', to: 'dist/native/' },
32 33
     ],
33 34
     options: {
34 35
     }

二进制
src/assets/poster-empty.png 查看文件


+ 48
- 20
src/components/Poster/Poster.jsx 查看文件

@@ -39,32 +39,60 @@ export default (props) => {
39 39
         }
40 40
       })
41 41
 
42
-      Promise.all([
43
-        sdk.getImage(poster),
44
-        sdk.getImage(miniCode),
45
-        sdk.getImage(avatar),
46
-      ]).then((res) => {
47
-        const [posterImg, miniCodeImg, avatarImg] = res
42
+      // 名称
43
+      sdk.darwText(name, conf.name)
44
+      // 小程序码
45
+      sdk.darwText(desc, conf.desc)
48 46
 
49
-        // 封面
47
+      let cnt = 0
48
+      // 封面
49
+      sdk.getImage(poster).then((posterImg) => {
50 50
         sdk.drawImage(posterImg, conf.poster)
51
-        // 头像
51
+        cnt += 1
52
+      }).catch(() => cnt += 1)
53
+      // 头像
54
+      sdk.getImage(avatar).then((avatarImg) => {
52 55
         sdk.drawImage(avatarImg, conf.avatar)
53
-        // 小程序码
56
+        cnt += 1
57
+      }).catch(() => cnt += 1)
58
+      // 小程序码
59
+      sdk.getImage(miniCode).then((miniCodeImg) => {
54 60
         sdk.drawImage(miniCodeImg, conf.miniCode)
55
-        // 名称
56
-        sdk.darwText(name, conf.name)
57
-        // 小程序码
58
-        sdk.darwText(desc, conf.desc)
61
+        cnt += 1
62
+      }).catch(() => cnt += 1)
59 63
 
60
-        //
61
-        const image = sdk.toDataURL()
62
-        onEnd(image, sdk)
63
-      }).catch(([e1, e2, e3]) => {
64
-        if (onError) {
65
-          onError([e1, e2, e3])
64
+      const ticker = setInterval(() => {
65
+        if (cnt >= 3) {
66
+          // 图片全部处理完
67
+          const image = sdk.toDataURL()
68
+          onEnd(image, sdk)
69
+          clearInterval(ticker)
66 70
         }
67
-      })
71
+      }, 200);
72
+
73
+
74
+      // Promise.all([
75
+      //   // sdk.getImage(poster),
76
+      //   sdk.getImage(miniCode),
77
+      //   // sdk.getImage(avatar),
78
+      // ]).then((res) => {
79
+      //   const [posterImg, miniCodeImg, avatarImg] = res
80
+
81
+      //   // 封面
82
+      //   sdk.drawImage(posterImg, conf.poster)
83
+      //   // 头像
84
+      //   sdk.drawImage(avatarImg, conf.avatar)
85
+      //   // 小程序码
86
+      //   sdk.drawImage(miniCodeImg, conf.miniCode)
87
+
88
+      //   //
89
+      //   const image = sdk.toDataURL()
90
+      //   onEnd(image, sdk)
91
+      // }).catch(([e1, e2, e3]) => {
92
+      //   if (onError) {
93
+      //     onError([e1, e2, e3])
94
+      //   }
95
+      // })
68 96
     }
69 97
   }, [sdk, dataSource, onStart, onEnd, onError])
70 98
 

+ 10
- 6
src/components/Poster/index.jsx 查看文件

@@ -84,23 +84,27 @@ export default (props) => {
84 84
     })
85 85
   }
86 86
 
87
+  const handleImage = (e) => {
88
+    Taro.previewImage({ current: img, urls: [img] })
89
+  }
90
+
87 91
   return (
88 92
     // <Modal title={title} visible={show} onClose={onClose}>
89 93
     // eslint-disable-next-line react/jsx-no-undef
90
-    <page-container show={show} position='bottom' onClickOverlay={onClose}>
91
-      <View className='modal-poster' onClick={onClose}>
94
+    <page-modal show={show} position='bottom' onClickOverlay={onClose} height="60vh">
95
+      <View className='modal-poster'>
92 96
         <View className='modal-poster-img-box'>
93
-        {
97
+        {/* {
94 98
           !processing
95
-            ? <Image src={img} mode='scaleToFill' onClick={() => Taro.previewImage({ current: img, urls: [img] })} />
99
+            ? <Image src={img} mode='scaleToFill' onClick={handleImage} />
96 100
             : <Spin2 spinning={processing} size={32} />
97
-        }
101
+        } */}
98 102
         </View>
99 103
         <Button className='modal-poster-action' onClick={handleSave} disabled={!img} loading={loading}>
100 104
           {btnText}
101 105
         </Button>
102 106
       </View>
103 107
       <Poster dataSource={dataSource} onStart={() => setProcessing(true)} onEnd={handlePoster} />
104
-    </page-container>
108
+    </page-modal>
105 109
   )
106 110
 }

+ 8
- 4
src/components/Poster/style.scss 查看文件

@@ -1,19 +1,23 @@
1 1
 .modal-poster {
2
-  width: 100vw;
3
-  height: 100vh;
2
+  // width: 100vw;
3
+  // height: 100vh;
4 4
   // height: calc(100vh - 62rpx);
5
+  height: 100%;
5 6
   box-sizing: border-box;
6 7
   padding: 40rpx;
7 8
 
8 9
   &-img-box {
9
-    flex: auto;
10
-    width: 70%;
11 10
     height: calc(100% - 92rpx - 40rpx);
12 11
     margin: 0 auto;
13 12
     background: #fff;
14 13
     box-shadow: 0 14rpx 24rpx 0 rgba(0, 0, 0, 0.2);
15 14
     position: relative;
16 15
 
16
+    .empty-poster {
17
+      width: auto;
18
+      height: 100%;
19
+    }
20
+
17 21
     image {
18 22
       width: 100%;
19 23
       height: 100%;

+ 34
- 25
src/pages/index/activityDetail/index.jsx 查看文件

@@ -16,6 +16,7 @@ import { useSelector } from 'react-redux';
16 16
 import {
17 17
   signupActivity,
18 18
   queryActivityDetail,
19
+<<<<<<< HEAD
19 20
 } from '@/services/activity';
20 21
 import { getImgURL } from '@/utils/image';
21 22
 import getDateFormat from '@/utils/chatDate';
@@ -48,6 +49,19 @@ const activityStatusDict = {
48 49
   },
49 50
 };
50 51
 
52
+=======
53
+} from "@/services/activity";
54
+import { getImgURL } from "@/utils/image";
55
+import getDateFormat from "@/utils/chatDate";
56
+import useParams from "@/utils/hooks/useParams";
57
+import useShare from "@/utils/hooks/useShare";
58
+import useFavor from "@/utils/hooks/useFavor";
59
+import useStatus from './useStatus'
60
+
61
+import { getDownloadURL, times, transferImage } from "@/utils/tools";
62
+import "./index.scss";
63
+
64
+>>>>>>> 9b71da79c5db94acce0d9ed188d5664b36c36c8c
51 65
 export default withLayout((props) => {
52 66
   const { router, shareContent, trackData, person, page } = props;
53 67
   const { id } = router.params;
@@ -62,14 +76,18 @@ export default withLayout((props) => {
62 76
 
63 77
   const buildingId = detail?.buildingId;
64 78
 
79
+  const [btnText, btnDisabled] = useStatus(detail)
80
+
65 81
   const getDetail = (params) => {
66 82
     Taro.showLoading();
67 83
 
68 84
     queryActivityDetail(params).then((res) => {
69
-      const maxperson =
70
-        res.maxEnlistByPerson < 100 ? res.maxEnlistByPerson : 100;
85
+      // const maxperson =
86
+      //   res.maxEnlistByPerson < 100 ? res.maxEnlistByPerson : 100;
71 87
 
72
-      setSelector(times(maxperson || 1).map((_, i) => `${i + 1}`));
88
+      const maxperson = 10
89
+
90
+      setSelector(times(maxperson).map((_, i) => `${i + 1}`));
73 91
 
74 92
       setDetail(res);
75 93
       Taro.hideLoading();
@@ -155,16 +173,7 @@ export default withLayout((props) => {
155 173
   }
156 174
 
157 175
   const handleSignup = () => {
158
-    const { isSign } = detail;
159
-
160
-    if (isSign) {
161
-      Taro.showToast({
162
-        icon: 'none',
163
-        title: '你已报名成功',
164
-      });
165
-      return;
166
-    }
167
-    setCanChoose('block');
176
+    setCanChoose("block");
168 177
   };
169 178
 
170 179
   const comfire = () => {
@@ -188,9 +197,9 @@ export default withLayout((props) => {
188 197
 
189 198
     signupActivity(payload).then(() => {
190 199
       Taro.showToast({
191
-        title: '报名成功',
192
-      })
193
-      setSelector('none')
200
+        title: "报名成功",
201
+      });
202
+      setCanChoose('none')
194 203
       setTimeout(() => {
195 204
         getDetail(id)
196 205
       }, 500)
@@ -405,8 +414,8 @@ export default withLayout((props) => {
405 414
                     ></Image>
406 415
                   </view>
407 416
 
408
-                  {detail.type == 'dymic' && dymic()}
409
-                  {detail.type == 'house' && house()}
417
+                  {detail.type == "dymic" && dymic()}
418
+                  {detail.type == "house" && house()}
410 419
                   <view className='ActivityIntro'>
411 420
                     <view className='Title'>
412 421
                       <text>活动介绍</text>
@@ -419,24 +428,24 @@ export default withLayout((props) => {
419 428
               </ScrollView>
420 429
             </view>
421 430
           </view>
422
-          {detail.type == 'dymic' && (
431
+          {detail.type == "dymic" && (
423 432
             <view className='PageBottom flex-h'>
424
-              <Button className='Share' open-type='share'>
433
+              <button className='Share' open-type='share'>
425 434
                 <text className='iconfont icon-fenxiang'></text>
426 435
                 <text>分享</text>
427
-              </Button>
436
+              </button>
428 437
               <view className='Collect' onClick={handleFavor}>
429 438
                 <text
430 439
                   className='iconfont icon-shoucang'
431
-                  style={isSaved ? { color: 'red' } : undefined}
440
+                  style={isSaved ? { color: "red" } : undefined}
432 441
                 ></text>
433 442
                 <text>{isSaved ? '已收藏' : '收藏'}</text>
434 443
               </view>
435 444
               <view className='flex-item'></view>
436 445
 
437
-              <text className='Post' onClick={handleSignup}>
438
-                {activityStatusDict[detail.activityStatus]?.text}
439
-              </text>
446
+              <button disabled={btnDisabled} className='Post' onClick={handleSignup}>
447
+                {btnText}
448
+              </button>
440 449
             </view>
441 450
           )}
442 451
         </view>

+ 58
- 0
src/pages/index/activityDetail/useStatus.js 查看文件

@@ -0,0 +1,58 @@
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, enlistStart, enlistEnd } = 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
+    // 报名时间
38
+    const now = new Date()
39
+    const start = new Date(enlistStart)
40
+    const end = new Date(enlistEnd)
41
+    if (now < start) {
42
+      setBtnText('报名未开始')
43
+      setDisabled(true)
44
+      return;
45
+    }
46
+
47
+    if (now > end) {
48
+      setBtnText('报名已结束')
49
+      setDisabled(true)
50
+      return;
51
+    }
52
+
53
+    setBtnText('立即报名')
54
+    setDisabled(false)
55
+  },[dynamicId])
56
+
57
+  return [btnText, disabled]
58
+}

+ 1
- 1
src/pages/index/buildingDetail/index.config.js 查看文件

@@ -2,6 +2,6 @@ export default {
2 2
   navigationBarTitleText: '楼盘详情',
3 3
   enableShareAppMessage: true,
4 4
   usingComponents: {
5
-    'page-container': '/native/PageContainer/index'
5
+    'page-modal': '@/native/PageContainer/index'
6 6
   }
7 7
 }

+ 7
- 0
src/utils/hooks/usePoster.js 查看文件

@@ -16,6 +16,13 @@ export default function usePoster(person, poster, router, paramsRef) {
16 16
           name: person.name || person.nickname,
17 17
           avatar: person.avatarurl,
18 18
         })
19
+      }).catch(() => {
20
+        setPosterData({
21
+          poster,
22
+          miniCode: undefined,
23
+          name: person.name || person.nickname,
24
+          avatar: person.avatarurl,
25
+        })
19 26
       })
20 27
     }
21 28
   // eslint-disable-next-line react-hooks/exhaustive-deps