瀏覽代碼

静态页面

xcx 4 年之前
父節點
當前提交
782c002bed

+ 1
- 0
src/app.js 查看文件

45
           request({ ...apis.login, params: { code: res.code, from, recommender, scene } }).then(x => {
45
           request({ ...apis.login, params: { code: res.code, from, recommender, scene } }).then(x => {
46
             setUser(x.person)
46
             setUser(x.person)
47
             Taro.setStorage({ key: 'token', data: x.token })
47
             Taro.setStorage({ key: 'token', data: x.token })
48
+            Taro.setStorage({ key: 'sessionKey', data: x.sessionKey })
48
 
49
 
49
             // 埋点
50
             // 埋点
50
             if (recommender || x.scene) {
51
             if (recommender || x.scene) {

+ 37
- 0
src/components/GetUserIcon/index.jsx 查看文件

1
+import React, { useState } from 'react'
2
+import { Button } from '@tarojs/components'
3
+import request, { apis } from '@/utils/request'
4
+import Taro from '@tarojs/taro'
5
+import { store, useModel } from '@/store'
6
+import '@/assets/css/reset.less'
7
+import '@/assets/css/iconfont.less'
8
+import './index.less'
9
+
10
+export default function GetUserIcon (props) {
11
+
12
+  const { setUser } = store.getModel('user').getState()
13
+  const { user } = useModel('user')
14
+  const { Show = false, Close = () => { } } = props
15
+
16
+  const ToGetUserIcon = (e) => { // 授权用户头像
17
+    if (e.detail.userInfo !== undefined) {
18
+      setUser({ ...user, avatarurl: e.detail.userInfo.avatarUrl, nickname: e.detail.userInfo.nickName })
19
+      Taro.showToast({ title: '头像授权成功', icon: 'none' })
20
+    } else {
21
+      Taro.showToast({ title: '头像授权失败', icon: 'none' })
22
+    }
23
+    Close()
24
+  }
25
+
26
+  return (
27
+    <view className='GetUserIcon' style={{ display: Show ? 'block' : 'none' }}>
28
+      <view className='centerLabel'>
29
+        <text>您暂未授权头像</text>
30
+        <view className='flex-h'>
31
+          <text className='flex-item' onClick={Close}>取消</text>
32
+          <Button className='flex-item' open-type='getUserInfo' lang='zh_CN' ongetuserinfo={ToGetUserIcon}>去授权</Button>
33
+        </view>
34
+      </view>
35
+    </view>
36
+  )
37
+}

+ 47
- 0
src/components/GetUserIcon/index.less 查看文件

1
+.GetUserIcon {
2
+  width: 100%;
3
+  position: fixed !important;
4
+  left: 0;
5
+  top: 0;
6
+  bottom: 0;
7
+  z-index: 1000;
8
+  background: rgba(0, 0, 0, 0.7);
9
+
10
+  >view {
11
+    width: 60%;
12
+    background: #fff;
13
+    border-radius: 10px;
14
+
15
+    >text {
16
+      display: block;
17
+      text-align: center;
18
+      font-size: 28px;
19
+      line-height: 40px;
20
+      padding: 40px 0;
21
+    }
22
+
23
+    >.flex-h {
24
+      position: relative;
25
+      overflow: hidden;
26
+      border-top: 2px solid rgba(0, 0, 0, 0.08);
27
+
28
+      >text {
29
+        font-size: 28px;
30
+        line-height: 80px;
31
+        text-align: center;
32
+        border-right: 2px solid rgba(0, 0, 0, 0.08);
33
+        color: #999;
34
+      }
35
+      >button {
36
+        font-size: 28px;
37
+        line-height: 80px;
38
+        background: none;
39
+        border: none;
40
+        padding: 0 !important;
41
+        &::after {
42
+          display: none;
43
+        }
44
+      }
45
+    }
46
+  }
47
+}

+ 43
- 0
src/components/GetUserPhone/index.css 查看文件

1
+.GetUserPhone {
2
+  width: 100%;
3
+  position: fixed !important;
4
+  left: 0;
5
+  top: 0;
6
+  bottom: 0;
7
+  z-index: 1000;
8
+  background: rgba(0, 0, 0, 0.7);
9
+}
10
+.GetUserPhone > view {
11
+  width: 60%;
12
+  background: #fff;
13
+  border-radius: 10px;
14
+}
15
+.GetUserPhone > view > text {
16
+  display: block;
17
+  text-align: center;
18
+  font-size: 28px;
19
+  line-height: 40px;
20
+  padding: 40px 0;
21
+}
22
+.GetUserPhone > view > .flex-h {
23
+  position: relative;
24
+  overflow: hidden;
25
+  border-top: 2px solid rgba(0, 0, 0, 0.08);
26
+}
27
+.GetUserPhone > view > .flex-h > text {
28
+  font-size: 28px;
29
+  line-height: 80px;
30
+  text-align: center;
31
+  border-right: 2px solid rgba(0, 0, 0, 0.08);
32
+  color: #999;
33
+}
34
+.GetUserPhone > view > .flex-h > button {
35
+  font-size: 28px;
36
+  line-height: 80px;
37
+  background: none;
38
+  border: none;
39
+  padding: 0 !important;
40
+}
41
+.GetUserPhone > view > .flex-h > button::after {
42
+  display: none;
43
+}

+ 16
- 6
src/components/GetUserPhone/index.jsx 查看文件

1
 import React, { useState } from 'react'
1
 import React, { useState } from 'react'
2
 import { Button } from '@tarojs/components'
2
 import { Button } from '@tarojs/components'
3
 import request, { apis } from '@/utils/request'
3
 import request, { apis } from '@/utils/request'
4
+import Taro from '@tarojs/taro'
5
+import { store, useModel } from '@/store'
4
 import '@/assets/css/reset.less'
6
 import '@/assets/css/reset.less'
5
 import '@/assets/css/iconfont.less'
7
 import '@/assets/css/iconfont.less'
6
 import './index.less'
8
 import './index.less'
7
 
9
 
8
 export default function GetUserPhone (props) {
10
 export default function GetUserPhone (props) {
9
 
11
 
12
+  const { setUser } = store.getModel('user').getState()
13
+  const { user } = useModel('user')
14
+  const { Show = false, Close = () => { } } = props
15
+
10
   const ToGetUserPhone = (e) => { // 授权手机号
16
   const ToGetUserPhone = (e) => { // 授权手机号
17
+    Close()
11
     request({
18
     request({
12
       ...apis.getUserPhone,
19
       ...apis.getUserPhone,
13
-      params: {
14
-        sessionKey: e.detail.cloudId,
20
+      data: {
21
+        sessionKey: Taro.getStorageSync('sessionKey'),
15
         encryptedData: e.detail.encryptedData,
22
         encryptedData: e.detail.encryptedData,
16
         iv: e.detail.iv
23
         iv: e.detail.iv
17
       }
24
       }
18
     }).then((res) => {
25
     }).then((res) => {
19
-      console.log(res)
26
+      setUser({ ...user, phone: res.phoneNumber })
27
+      Taro.showToast({ title: '手机授权成功', icon: 'none' })
28
+    }).catch(() => {
29
+      Taro.showToast({ title: '手机授权失败', icon: 'none' })
20
     })
30
     })
21
   }
31
   }
22
 
32
 
23
   return (
33
   return (
24
-    <view className='GetUserPhone'>
34
+    <view className='GetUserPhone' style={{display: Show ? 'block' : 'none'}}>
25
       <view className='centerLabel'>
35
       <view className='centerLabel'>
26
         <text>您暂未授权手机号</text>
36
         <text>您暂未授权手机号</text>
27
         <view className='flex-h'>
37
         <view className='flex-h'>
28
-          <text className='flex-item'>取消</text>
29
-          <Button className='flex-item' open-type='getPhoneNumber' lang='zh_CN' onGetphonenumber={ToGetUserPhone}>授权手机</Button>
38
+          <text className='flex-item' onClick={Close}>取消</text>
39
+          <Button className='flex-item' open-type='getPhoneNumber' lang='zh_CN' onGetphonenumber={ToGetUserPhone}>授权</Button>
30
         </view>
40
         </view>
31
       </view>
41
       </view>
32
     </view>
42
     </view>

+ 32
- 1
src/components/GetUserPhone/index.less 查看文件

9
 
9
 
10
   >view {
10
   >view {
11
     width: 60%;
11
     width: 60%;
12
-    padding: 20px;
13
     background: #fff;
12
     background: #fff;
14
     border-radius: 10px;
13
     border-radius: 10px;
14
+
15
+    >text {
16
+      display: block;
17
+      text-align: center;
18
+      font-size: 28px;
19
+      line-height: 40px;
20
+      padding: 40px 0;
21
+    }
22
+
23
+    >.flex-h {
24
+      position: relative;
25
+      overflow: hidden;
26
+      border-top: 2px solid rgba(0, 0, 0, 0.08);
27
+
28
+      >text {
29
+        font-size: 28px;
30
+        line-height: 80px;
31
+        text-align: center;
32
+        border-right: 2px solid rgba(0, 0, 0, 0.08);
33
+        color: #999;
34
+      }
35
+      >button {
36
+        font-size: 28px;
37
+        line-height: 80px;
38
+        background: none;
39
+        border: none;
40
+        padding: 0 !important;
41
+        &::after {
42
+          display: none;
43
+        }
44
+      }
45
+    }
15
   }
46
   }
16
 }
47
 }

+ 9
- 9
src/components/WuYeBaoXiu/index.css 查看文件

3
   position: relative;
3
   position: relative;
4
   overflow: hidden;
4
   overflow: hidden;
5
 }
5
 }
6
-.WuYeBaoXiu > .BigImg {
6
+.WuYeBaoXiu .BigImg {
7
   width: 100%;
7
   width: 100%;
8
   padding-bottom: 50%;
8
   padding-bottom: 50%;
9
   position: relative;
9
   position: relative;
10
   overflow: hidden;
10
   overflow: hidden;
11
   background: #ccc;
11
   background: #ccc;
12
 }
12
 }
13
-.WuYeBaoXiu > .BigImg > image {
13
+.WuYeBaoXiu .BigImg > image {
14
   width: 100%;
14
   width: 100%;
15
   height: 100%;
15
   height: 100%;
16
 }
16
 }
17
-.WuYeBaoXiu > .WoYaoBaoXiu {
17
+.WuYeBaoXiu .WoYaoBaoXiu {
18
   padding: 0 30px;
18
   padding: 0 30px;
19
   margin-top: 30px;
19
   margin-top: 30px;
20
   position: relative;
20
   position: relative;
21
   overflow: hidden;
21
   overflow: hidden;
22
 }
22
 }
23
-.WuYeBaoXiu > .WoYaoBaoXiu > view {
23
+.WuYeBaoXiu .WoYaoBaoXiu > view {
24
   font-size: 0;
24
   font-size: 0;
25
   white-space: nowrap;
25
   white-space: nowrap;
26
   background: #fff;
26
   background: #fff;
27
   border-radius: 98px;
27
   border-radius: 98px;
28
   text-align: center;
28
   text-align: center;
29
 }
29
 }
30
-.WuYeBaoXiu > .WoYaoBaoXiu > view > text {
30
+.WuYeBaoXiu .WoYaoBaoXiu > view > text {
31
   display: inline-block;
31
   display: inline-block;
32
   vertical-align: middle;
32
   vertical-align: middle;
33
   font-size: 32px;
33
   font-size: 32px;
34
   color: #971C21;
34
   color: #971C21;
35
   line-height: 98px;
35
   line-height: 98px;
36
 }
36
 }
37
-.WuYeBaoXiu > .WoYaoBaoXiu > view > text.iconfont {
37
+.WuYeBaoXiu .WoYaoBaoXiu > view > text.iconfont {
38
   margin-right: 10px;
38
   margin-right: 10px;
39
 }
39
 }
40
-.WuYeBaoXiu > .List {
40
+.WuYeBaoXiu .List {
41
   position: relative;
41
   position: relative;
42
   overflow: hidden;
42
   overflow: hidden;
43
 }
43
 }
44
-.WuYeBaoXiu > .List > view {
44
+.WuYeBaoXiu .List > view {
45
   width: 100%;
45
   width: 100%;
46
   position: relative;
46
   position: relative;
47
   overflow: hidden;
47
   overflow: hidden;
48
   margin-bottom: 30px;
48
   margin-bottom: 30px;
49
 }
49
 }
50
-.WuYeBaoXiu > .List > view:first-child {
50
+.WuYeBaoXiu .List > view:first-child {
51
   margin-top: 30px;
51
   margin-top: 30px;
52
 }
52
 }

+ 73
- 25
src/components/WuYeBaoXiu/index.jsx 查看文件

1
-import React, { useState } from 'react'
1
+import React, { useState, useEffect } from 'react'
2
+import request, { apis } from '@/utils/request'
3
+import { useModel } from '@/store'
2
 import Taro from '@tarojs/taro'
4
 import Taro from '@tarojs/taro'
3
-import WuYeBaoXiuItem from '../WuYeBaoXiuItem/index'
5
+import WuYeBaoXiuItem from '@/components/WuYeBaoXiuItem/index'
6
+import ScrollPage from '@/components/ScrollPage/index'
4
 import '@/assets/css/reset.less'
7
 import '@/assets/css/reset.less'
5
 import '@/assets/css/iconfont.less'
8
 import '@/assets/css/iconfont.less'
6
 import './index.less'
9
 import './index.less'
7
 
10
 
8
 export default function WuYeBaoXiu (props) {
11
 export default function WuYeBaoXiu (props) {
9
 
12
 
10
-  const [PageList, setPageList] = useState(['', '', '', '', '', '', ''])
13
+  const { user } = useModel('user')
14
+  const [IsPullUp, setIsPullUp] = useState(false)
15
+  const [IsPullDown, setIsPullDown] = useState(false)
16
+  const [HasNextPage, setHasNextPage] = useState(true)
17
+  const [PageNum, setPageNum] = useState(1)
18
+  const [PageList, setPageList] = useState([])
11
 
19
 
12
-  const [TestImg, setTestImg] = useState('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1606120989360&di=8610f1678b51e26de6d4c6af39d1cf63&imgtype=0&src=http%3A%2F%2Fattachments.gfan.com%2Fforum%2F201503%2F19%2F211608ztcq7higicydxhsy.jpg')
20
+  useEffect(() => {
21
+    GetPageList(() => {
22
+      setIsPullUp(false)
23
+    })
24
+  }, [PageNum])
25
+
26
+  const GetPageList = (done = () => { }) => { // 获取列表
27
+    request({ ...apis.getGongDanList, args: { orgId: user.orgId }, params: { pageNum: PageNum, pageSize: 10, type: 2 } }).then((res) => {
28
+      if (PageNum === 1) {
29
+        setPageList([...res.records])
30
+      } else {
31
+        setPageList(PageList.concat([...res.records]))
32
+      }
33
+      setHasNextPage(res.current - 0 < res.pages - 0)
34
+      done()
35
+    }).catch(() => {
36
+      done()
37
+    })
38
+  }
39
+
40
+  const OnRefresh = () => { // 页面下拉刷新
41
+    setIsPullDown(true)
42
+    setHasNextPage(true)
43
+    setPageNum(1)
44
+    if (PageNum === 1) {
45
+      GetPageList(() => {
46
+        setIsPullDown(false)
47
+      })
48
+    } else {
49
+      setPageNum(1)
50
+    }
51
+  }
52
+
53
+  const OnPullUp = () => {
54
+    if (HasNextPage) {
55
+      setIsPullUp(true)
56
+      setPageNum(PageNum + 1)
57
+    }
58
+  }
13
 
59
 
14
   return (
60
   return (
15
     <view className='WuYeBaoXiu'>
61
     <view className='WuYeBaoXiu'>
62
+      <ScrollPage IsPullDown={IsPullDown} IsPullUp={IsPullUp} HasMore={HasNextPage} OnRefresh={OnRefresh} OnPullUp={OnPullUp}>
16
 
63
 
17
-      {/* 大图 */}
18
-      <view className='BigImg'>
19
-        <image mode='aspectFill' src={TestImg} className='centerLabel'></image>
20
-      </view>
64
+        {/* 大图 */}
65
+        <view className='BigImg'>
66
+          <image mode='aspectFill' src={null} className='centerLabel'></image>
67
+        </view>
68
+
69
+        {/* 我要报修 */}
70
+        <view className='WoYaoBaoXiu'>
71
+          <view onClick={() => { Taro.navigateTo({ url: `/pages/WuYe/BaoXiuQuYu/index` }) }}>
72
+            <text className='iconfont iconjia'></text>
73
+            <text>我要报修</text>
74
+          </view>
75
+        </view>
21
 
76
 
22
-      {/* 我要报修 */}
23
-      <view className='WoYaoBaoXiu'>
24
-        <view onClick={() => { Taro.navigateTo({ url: `/pages/WuYe/BaoXiuQuYu/index` }) }}>
25
-          <text className='iconfont iconjia'></text>
26
-          <text>我要报修</text>
77
+        {/* 报修列表 */}
78
+        <view className='List'>
79
+          {
80
+            PageList.map((item, index) => (
81
+              <view key={`WuYeBaoXiuItem-${index}`}>
82
+                <WuYeBaoXiuItem Data={{ ...item, id: index }}></WuYeBaoXiuItem>
83
+              </view>
84
+            ))
85
+          }
27
         </view>
86
         </view>
28
-      </view>
29
-
30
-      {/* 报修列表 */}
31
-      <view className='List'>
32
-        {
33
-          PageList.map((item, index) => (
34
-            <view key={`WuYeBaoXiuItem-${index}`}>
35
-              <WuYeBaoXiuItem Data={{ ...item, id: index }}></WuYeBaoXiuItem>
36
-            </view>
37
-          ))
38
-        }
39
-      </view>
40
 
87
 
88
+      </ScrollPage>
41
     </view>
89
     </view>
42
   )
90
   )
43
 }
91
 }

+ 3
- 3
src/components/WuYeBaoXiu/index.less 查看文件

3
   position: relative;
3
   position: relative;
4
   overflow: hidden;
4
   overflow: hidden;
5
 
5
 
6
-  >.BigImg {
6
+  .BigImg {
7
     width: 100%;
7
     width: 100%;
8
     padding-bottom: 50%;
8
     padding-bottom: 50%;
9
     position: relative;
9
     position: relative;
16
     }
16
     }
17
   }
17
   }
18
 
18
 
19
-  >.WoYaoBaoXiu {
19
+  .WoYaoBaoXiu {
20
     padding: 0 30px;
20
     padding: 0 30px;
21
     margin-top: 30px;
21
     margin-top: 30px;
22
     position: relative;
22
     position: relative;
42
     }
42
     }
43
   }
43
   }
44
 
44
 
45
-  >.List {
45
+  .List {
46
     position: relative;
46
     position: relative;
47
     overflow: hidden;
47
     overflow: hidden;
48
 
48
 

+ 14
- 14
src/components/WuYeFuWu/index.css 查看文件

3
   position: relative;
3
   position: relative;
4
   overflow: hidden;
4
   overflow: hidden;
5
 }
5
 }
6
-.WuYeFuWu > .BigImg {
6
+.WuYeFuWu .BigImg {
7
   width: 100%;
7
   width: 100%;
8
   padding-bottom: 50%;
8
   padding-bottom: 50%;
9
   position: relative;
9
   position: relative;
10
   overflow: hidden;
10
   overflow: hidden;
11
   background: #ccc;
11
   background: #ccc;
12
 }
12
 }
13
-.WuYeFuWu > .BigImg > image {
13
+.WuYeFuWu .BigImg > image {
14
   width: 100%;
14
   width: 100%;
15
   height: 100%;
15
   height: 100%;
16
 }
16
 }
17
-.WuYeFuWu > .BanShiZhiNan {
17
+.WuYeFuWu .BanShiZhiNan {
18
   padding: 40px 30px;
18
   padding: 40px 30px;
19
   background: #fff;
19
   background: #fff;
20
   margin-top: 30px;
20
   margin-top: 30px;
21
   overflow: hidden;
21
   overflow: hidden;
22
 }
22
 }
23
-.WuYeFuWu > .BanShiZhiNan > text {
23
+.WuYeFuWu .BanShiZhiNan > text {
24
   font-size: 30px;
24
   font-size: 30px;
25
   color: #333;
25
   color: #333;
26
   font-weight: bold;
26
   font-weight: bold;
27
   line-height: 40px;
27
   line-height: 40px;
28
   display: block;
28
   display: block;
29
 }
29
 }
30
-.WuYeFuWu > .BanShiZhiNan > .flex-h {
30
+.WuYeFuWu .BanShiZhiNan > .flex-h {
31
   position: relative;
31
   position: relative;
32
   margin-top: 60px;
32
   margin-top: 60px;
33
 }
33
 }
34
-.WuYeFuWu > .BanShiZhiNan > .flex-h > .Line {
34
+.WuYeFuWu .BanShiZhiNan > .flex-h > .Line {
35
   width: 50px;
35
   width: 50px;
36
   position: relative;
36
   position: relative;
37
   overflow: visible;
37
   overflow: visible;
38
   border-left: 2px dashed #586FF8;
38
   border-left: 2px dashed #586FF8;
39
 }
39
 }
40
-.WuYeFuWu > .BanShiZhiNan > .flex-h > .Line > view {
40
+.WuYeFuWu .BanShiZhiNan > .flex-h > .Line > view {
41
   width: 14px;
41
   width: 14px;
42
   height: 14px;
42
   height: 14px;
43
   background: #586FF8;
43
   background: #586FF8;
46
   left: -8px;
46
   left: -8px;
47
   top: 30px;
47
   top: 30px;
48
 }
48
 }
49
-.WuYeFuWu > .BanShiZhiNan > .flex-h > .flex-item {
49
+.WuYeFuWu .BanShiZhiNan > .flex-h > .flex-item {
50
   position: relative;
50
   position: relative;
51
   overflow: visible;
51
   overflow: visible;
52
   background: rgba(88, 111, 248, 0.08);
52
   background: rgba(88, 111, 248, 0.08);
53
   padding: 20px;
53
   padding: 20px;
54
 }
54
 }
55
-.WuYeFuWu > .BanShiZhiNan > .flex-h > .flex-item::after {
55
+.WuYeFuWu .BanShiZhiNan > .flex-h > .flex-item::after {
56
   content: '';
56
   content: '';
57
   width: 0;
57
   width: 0;
58
   height: 0;
58
   height: 0;
64
   border-style: solid dashed solid solid;
64
   border-style: solid dashed solid solid;
65
   border-width: 20px;
65
   border-width: 20px;
66
 }
66
 }
67
-.WuYeFuWu > .BanShiZhiNan > .flex-h > .flex-item > text {
67
+.WuYeFuWu .BanShiZhiNan > .flex-h > .flex-item > text {
68
   display: block;
68
   display: block;
69
   font-size: 24px;
69
   font-size: 24px;
70
   color: #333;
70
   color: #333;
71
   line-height: 40px;
71
   line-height: 40px;
72
   margin-top: 10px;
72
   margin-top: 10px;
73
 }
73
 }
74
-.WuYeFuWu > .BanShiZhiNan > .flex-h > .flex-item > text:first-child {
74
+.WuYeFuWu .BanShiZhiNan > .flex-h > .flex-item > text:first-child {
75
   margin-top: 0;
75
   margin-top: 0;
76
 }
76
 }
77
-.WuYeFuWu > .List {
77
+.WuYeFuWu .List {
78
   position: relative;
78
   position: relative;
79
   overflow: hidden;
79
   overflow: hidden;
80
 }
80
 }
81
-.WuYeFuWu > .List > view {
81
+.WuYeFuWu .List > view {
82
   width: 100%;
82
   width: 100%;
83
   position: relative;
83
   position: relative;
84
   overflow: hidden;
84
   overflow: hidden;
85
   margin-bottom: 30px;
85
   margin-bottom: 30px;
86
 }
86
 }
87
-.WuYeFuWu > .List > view:first-child {
87
+.WuYeFuWu .List > view:first-child {
88
   margin-top: 30px;
88
   margin-top: 30px;
89
 }
89
 }

+ 57
- 25
src/components/WuYeFuWu/index.jsx 查看文件

1
-import React, { Component } from 'react'
2
-import WuYeFuWuItem from '../WuYeFuWuItem/index'
3
-import '../../assets/css/reset.less'
4
-import '../../assets/css/iconfont.less'
1
+import React, { useState, useEffect } from 'react'
2
+import request, { apis } from '@/utils/request'
3
+import { useModel } from '@/store'
4
+import WuYeFuWuItem from '@/components/WuYeFuWuItem/index'
5
+import ScrollPage from '@/components/ScrollPage/index'
6
+import '@/assets/css/reset.less'
7
+import '@/assets/css/iconfont.less'
5
 import './index.less'
8
 import './index.less'
6
 
9
 
7
-export default class WuYeFuWu extends Component {
10
+export default function WuYeFuWu () {
8
 
11
 
9
-  state = {
10
-    PageList: ['', '', '', '', '', '', ''],
11
-    TestImg: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1606120989360&di=8610f1678b51e26de6d4c6af39d1cf63&imgtype=0&src=http%3A%2F%2Fattachments.gfan.com%2Fforum%2F201503%2F19%2F211608ztcq7higicydxhsy.jpg'
12
-  }
13
-
14
-  componentWillMount () { }
12
+  const { user } = useModel('user')
13
+  const [IsPullUp, setIsPullUp] = useState(false)
14
+  const [IsPullDown, setIsPullDown] = useState(false)
15
+  const [HasNextPage, setHasNextPage] = useState(true)
16
+  const [PageNum, setPageNum] = useState(1)
17
+  const [PageList, setPageList] = useState([])
15
 
18
 
16
-  componentDidMount () { }
19
+  useEffect(() => {
20
+    GetPageList(() => {
21
+      setIsPullUp(false)
22
+    })
23
+  }, [PageNum])
17
 
24
 
18
-  componentWillUnmount () { }
19
-
20
-  componentDidShow () { }
25
+  const GetPageList = (done = () => { }) => { // 获取列表
26
+    request({ ...apis.getGongGaoList, args: { orgId: user.orgId }, params: { pageNum: PageNum, pageSize: 10 } }).then((res) => {
27
+      if (PageNum === 1) {
28
+        setPageList([...res.records])
29
+      } else {
30
+        setPageList(PageList.concat([...res.records]))
31
+      }
32
+      setHasNextPage(res.current - 0 < res.pages - 0)
33
+      done()
34
+    }).catch(() => {
35
+      done()
36
+    })
37
+  }
21
 
38
 
22
-  componentDidHide () { }
39
+  const OnRefresh = () => { // 页面下拉刷新
40
+    setIsPullDown(true)
41
+    setHasNextPage(true)
42
+    setPageNum(1)
43
+    if (PageNum === 1) {
44
+      GetPageList(() => {
45
+        setIsPullDown(false)
46
+      })
47
+    } else {
48
+      setPageNum(1)
49
+    }
50
+  }
23
 
51
 
24
-  render () {
25
-    const { TestImg, PageList } = this.state
26
-    return (
27
-      <view className='WuYeFuWu'>
52
+  const OnPullUp = () => {
53
+    if (HasNextPage) {
54
+      setIsPullUp(true)
55
+      setPageNum(PageNum + 1)
56
+    }
57
+  }
28
 
58
 
59
+  return (
60
+    <view className='WuYeFuWu'>
61
+      <ScrollPage IsPullDown={IsPullDown} IsPullUp={IsPullUp} HasMore={HasNextPage} OnRefresh={OnRefresh} OnPullUp={OnPullUp}>
29
         {/* 大图 */}
62
         {/* 大图 */}
30
         <view className='BigImg'>
63
         <view className='BigImg'>
31
-          <image mode='aspectFill' src={TestImg} className='centerLabel'></image>
64
+          <image mode='aspectFill' src={null} className='centerLabel'></image>
32
         </view>
65
         </view>
33
 
66
 
34
         {/* 物业办事指南 */}
67
         {/* 物业办事指南 */}
54
             ))
87
             ))
55
           }
88
           }
56
         </view>
89
         </view>
57
-
58
-      </view>
59
-    )
60
-  }
90
+      </ScrollPage>
91
+    </view>
92
+  )
61
 }
93
 }

+ 3
- 3
src/components/WuYeFuWu/index.less 查看文件

3
   position: relative;
3
   position: relative;
4
   overflow: hidden;
4
   overflow: hidden;
5
 
5
 
6
-  >.BigImg {
6
+  .BigImg {
7
     width: 100%;
7
     width: 100%;
8
     padding-bottom: 50%;
8
     padding-bottom: 50%;
9
     position: relative;
9
     position: relative;
16
     }
16
     }
17
   }
17
   }
18
 
18
 
19
-  >.BanShiZhiNan {
19
+  .BanShiZhiNan {
20
     padding: 40px 30px;
20
     padding: 40px 30px;
21
     background: #fff;
21
     background: #fff;
22
     margin-top: 30px;
22
     margin-top: 30px;
85
 
85
 
86
   }
86
   }
87
 
87
 
88
-  >.List {
88
+  .List {
89
     position: relative;
89
     position: relative;
90
     overflow: hidden;
90
     overflow: hidden;
91
 
91
 

+ 30
- 0
src/components/WuYeGongGao/index.css 查看文件

1
+.WuYeGongGao {
2
+  width: 100%;
3
+  height: 100%;
4
+  position: relative;
5
+  overflow: hidden;
6
+}
7
+.WuYeGongGao .BigImg {
8
+  width: 100%;
9
+  padding-bottom: 50%;
10
+  position: relative;
11
+  overflow: hidden;
12
+  background: #ccc;
13
+}
14
+.WuYeGongGao .BigImg > image {
15
+  width: 100%;
16
+  height: 100%;
17
+}
18
+.WuYeGongGao .List {
19
+  position: relative;
20
+  overflow: hidden;
21
+}
22
+.WuYeGongGao .List > view {
23
+  width: 100%;
24
+  position: relative;
25
+  overflow: hidden;
26
+  margin-bottom: 30px;
27
+}
28
+.WuYeGongGao .List > view:first-child {
29
+  margin-top: 30px;
30
+}

+ 57
- 23
src/components/WuYeGongGao/index.jsx 查看文件

1
-import React, { Component } from 'react'
2
-import WuYeGongGaoItem from '../../components/WuYeGongGaoItem/index'
3
-import '../../assets/css/reset.less'
4
-import '../../assets/css/iconfont.less'
1
+import React, { useState, useEffect } from 'react'
2
+import request, { apis } from '@/utils/request'
3
+import { useModel } from '@/store'
4
+import WuYeGongGaoItem from '@/components/WuYeGongGaoItem/index'
5
+import ScrollPage from '@/components/ScrollPage/index'
6
+import '@/assets/css/reset.less'
7
+import '@/assets/css/iconfont.less'
5
 import './index.less'
8
 import './index.less'
6
 
9
 
7
-export default class WuYeGongGao extends Component {
10
+export default function WuYeGongGao () {
8
 
11
 
9
-  state = {
10
-    PageList: ['', '', '', '', '', '', ''],
11
-    TestImg: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1606120989360&di=8610f1678b51e26de6d4c6af39d1cf63&imgtype=0&src=http%3A%2F%2Fattachments.gfan.com%2Fforum%2F201503%2F19%2F211608ztcq7higicydxhsy.jpg'
12
-  }
13
-
14
-  componentWillMount () { }
12
+  const { user } = useModel('user')
13
+  const [IsPullUp, setIsPullUp] = useState(false)
14
+  const [IsPullDown, setIsPullDown] = useState(false)
15
+  const [HasNextPage, setHasNextPage] = useState(true)
16
+  const [PageNum, setPageNum] = useState(1)
17
+  const [PageList, setPageList] = useState([])
15
 
18
 
16
-  componentDidMount () { }
19
+  useEffect(() => {
20
+    GetPageList(() => {
21
+      setIsPullUp(false)
22
+    })
23
+  }, [PageNum])
17
 
24
 
18
-  componentWillUnmount () { }
25
+  const GetPageList = (done = () => { }) => { // 获取列表
26
+    request({ ...apis.getGongGaoList, args: { orgId: user.orgId }, params: { pageNum: PageNum, pageSize: 10 } }).then((res) => {
27
+      if (PageNum === 1) {
28
+        setPageList([...res.records])
29
+      } else {
30
+        setPageList(PageList.concat([...res.records]))
31
+      }
32
+      setHasNextPage(res.current - 0 < res.pages - 0)
33
+      done()
34
+    }).catch(() => {
35
+      done()
36
+    })
37
+  }
19
 
38
 
20
-  componentDidShow () { }
39
+  const OnRefresh = () => { // 页面下拉刷新
40
+    setIsPullDown(true)
41
+    setHasNextPage(true)
42
+    setPageNum(1)
43
+    if (PageNum === 1) {
44
+      GetPageList(() => {
45
+        setIsPullDown(false)
46
+      })
47
+    } else {
48
+      setPageNum(1)
49
+    }
50
+  }
21
 
51
 
22
-  componentDidHide () { }
52
+  const OnPullUp = () => {
53
+    if (HasNextPage) {
54
+      setIsPullUp(true)
55
+      setPageNum(PageNum + 1)
56
+    }
57
+  }
23
 
58
 
24
-  render () {
25
-    const { TestImg, PageList } = this.state
26
-    return (
27
-      <view className='WuYeGongGao'>
59
+  return (
60
+    <view className='WuYeGongGao'>
61
+      <ScrollPage IsPullDown={IsPullDown} IsPullUp={IsPullUp} HasMore={HasNextPage} OnRefresh={OnRefresh} OnPullUp={OnPullUp}>
28
 
62
 
29
         {/* 大图 */}
63
         {/* 大图 */}
30
         <view className='BigImg'>
64
         <view className='BigImg'>
31
-          <image mode='aspectFill' src={TestImg} className='centerLabel'></image>
65
+          <image mode='aspectFill' src={null} className='centerLabel'></image>
32
         </view>
66
         </view>
33
 
67
 
34
         {/* 列表 */}
68
         {/* 列表 */}
42
           }
76
           }
43
         </view>
77
         </view>
44
 
78
 
45
-      </view>
46
-    )
47
-  }
79
+      </ScrollPage>
80
+    </view>
81
+  )
48
 }
82
 }

+ 3
- 2
src/components/WuYeGongGao/index.less 查看文件

1
 .WuYeGongGao {
1
 .WuYeGongGao {
2
   width: 100%;
2
   width: 100%;
3
+  height: 100%;
3
   position: relative;
4
   position: relative;
4
   overflow: hidden;
5
   overflow: hidden;
5
 
6
 
6
-  >.BigImg {
7
+  .BigImg {
7
     width: 100%;
8
     width: 100%;
8
     padding-bottom: 50%;
9
     padding-bottom: 50%;
9
     position: relative;
10
     position: relative;
16
     }
17
     }
17
   }
18
   }
18
 
19
 
19
-  >.List {
20
+  .List {
20
     position: relative;
21
     position: relative;
21
     overflow: hidden;
22
     overflow: hidden;
22
 
23
 

+ 68
- 19
src/components/WuYeJiaoFei/index.jsx 查看文件

1
-import React, { useState } from 'react'
2
-import WuYeJiaoFeiItem from '../WuYeJiaoFeiItem/index'
1
+import React, { useState, useEffect } from 'react'
2
+import request, { apis } from '@/utils/request'
3
+import { useModel } from '@/store'
4
+import WuYeJiaoFeiItem from '@/components/WuYeJiaoFeiItem/index'
5
+import ScrollPage from '@/components/ScrollPage/index'
3
 import '@/assets/css/reset.less'
6
 import '@/assets/css/reset.less'
4
 import '@/assets/css/iconfont.less'
7
 import '@/assets/css/iconfont.less'
5
 import './index.less'
8
 import './index.less'
6
 
9
 
7
 export default function WuYeJiaoFei () {
10
 export default function WuYeJiaoFei () {
8
 
11
 
9
-  const [PageList, setPageList] = useState(['', '', '', '', '', '', ''])
10
-  const [TestImg, setTestImg] = useState('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1606120989360&di=8610f1678b51e26de6d4c6af39d1cf63&imgtype=0&src=http%3A%2F%2Fattachments.gfan.com%2Fforum%2F201503%2F19%2F211608ztcq7higicydxhsy.jpg')
12
+  const { user } = useModel('user')
13
+  const [IsPullUp, setIsPullUp] = useState(false)
14
+  const [IsPullDown, setIsPullDown] = useState(false)
15
+  const [HasNextPage, setHasNextPage] = useState(true)
16
+  const [PageNum, setPageNum] = useState(1)
17
+  const [PageList, setPageList] = useState([])
18
+
19
+  useEffect(() => {
20
+    GetPageList(() => {
21
+      setIsPullUp(false)
22
+    })
23
+  }, [PageNum])
24
+
25
+  const GetPageList = (done = () => { }) => { // 获取列表
26
+    request({ ...apis.getJiaoFeiList, args: { type: 0 }, params: { pageNum: PageNum, pageSize: 10 } }).then((res) => {
27
+      if (PageNum === 1) {
28
+        setPageList([...res.records])
29
+      } else {
30
+        setPageList(PageList.concat([...res.records]))
31
+      }
32
+      setHasNextPage(res.current - 0 < res.pages - 0)
33
+      done()
34
+    }).catch(() => {
35
+      done()
36
+    })
37
+  }
38
+
39
+  const OnRefresh = () => { // 页面下拉刷新
40
+    setIsPullDown(true)
41
+    setHasNextPage(true)
42
+    setPageNum(1)
43
+    if (PageNum === 1) {
44
+      GetPageList(() => {
45
+        setIsPullDown(false)
46
+      })
47
+    } else {
48
+      setPageNum(1)
49
+    }
50
+  }
51
+
52
+  const OnPullUp = () => {
53
+    if (HasNextPage) {
54
+      setIsPullUp(true)
55
+      setPageNum(PageNum + 1)
56
+    }
57
+  }
11
 
58
 
12
   return (
59
   return (
13
     <view className='WuYeJiaoFei'>
60
     <view className='WuYeJiaoFei'>
61
+      <ScrollPage IsPullDown={IsPullDown} IsPullUp={IsPullUp} HasMore={HasNextPage} OnRefresh={OnRefresh} OnPullUp={OnPullUp}>
62
+
63
+        {/* 大图 */}
64
+        <view className='BigImg'>
65
+          <image mode='aspectFill' src={null} className='centerLabel'></image>
66
+        </view>
14
 
67
 
15
-      {/* 大图 */}
16
-      <view className='BigImg'>
17
-        <image mode='aspectFill' src={TestImg} className='centerLabel'></image>
18
-      </view>
19
-
20
-      {/* 缴费列表 */}
21
-      <view className='List'>
22
-        {
23
-          PageList.map((item, index) => (
24
-            <view key={`WuYeJiaoFeiItem-${index}`}>
25
-              <WuYeJiaoFeiItem Data={item}></WuYeJiaoFeiItem>
26
-            </view>
27
-          ))
28
-        }
29
-      </view>
68
+        {/* 缴费列表 */}
69
+        <view className='List'>
70
+          {
71
+            PageList.map((item, index) => (
72
+              <view key={`WuYeJiaoFeiItem-${index}`}>
73
+                <WuYeJiaoFeiItem Data={item}></WuYeJiaoFeiItem>
74
+              </view>
75
+            ))
76
+          }
77
+        </view>
30
 
78
 
79
+      </ScrollPage>
31
     </view>
80
     </view>
32
   )
81
   )
33
 }
82
 }

+ 4
- 1
src/pages/HuoDong/HuoDongDetail/index.css 查看文件

102
   color: #fff;
102
   color: #fff;
103
   line-height: 98px;
103
   line-height: 98px;
104
   border-radius: 98px;
104
   border-radius: 98px;
105
-  background: #F35844;
105
+  background: #ccc;
106
   margin-top: 60px;
106
   margin-top: 60px;
107
 }
107
 }
108
+.HuoDongDetail > .Info > .BottomBtn.active {
109
+  background: #F35844;
110
+}

+ 43
- 7
src/pages/HuoDong/HuoDongDetail/index.jsx 查看文件

11
 export default function HuoDongDetail (props) {
11
 export default function HuoDongDetail (props) {
12
 
12
 
13
   const { user } = useModel('user')
13
   const { user } = useModel('user')
14
+  const [DataLock, setDataLock] = useState(false)
14
   const [ShowGetUserPhoneLayer, setShowGetUserPhoneLayer] = useState(false)
15
   const [ShowGetUserPhoneLayer, setShowGetUserPhoneLayer] = useState(false)
16
+  const [HasJoin, setHasJoin] = useState(null)
15
   const [CurrnetHuoDongId] = useState(Current.router.params.id) // 当前活动id
17
   const [CurrnetHuoDongId] = useState(Current.router.params.id) // 当前活动id
16
   const [ActivityDetail, setActivityDetail] = useState(null) // 活动详情
18
   const [ActivityDetail, setActivityDetail] = useState(null) // 活动详情
17
 
19
 
22
   const GetActivityDetail = () => { // 获取活动详情
24
   const GetActivityDetail = () => { // 获取活动详情
23
     request({ ...apis.getActivityDetail, args: { id: CurrnetHuoDongId } }).then((res) => {
25
     request({ ...apis.getActivityDetail, args: { id: CurrnetHuoDongId } }).then((res) => {
24
       setActivityDetail(res)
26
       setActivityDetail(res)
27
+      CheckActivityJoin()
28
+    })
29
+  }
30
+
31
+  const CheckActivityJoin = () => { // 查询活动参加详情
32
+    request({ ...apis.checkActivityJoin, args: { id: CurrnetHuoDongId } }).then((res) => {
33
+      setHasJoin(!!res.dynamic.isSign)
25
     })
34
     })
26
   }
35
   }
27
 
36
 
28
   const ToJoin = () => { // 去报名
37
   const ToJoin = () => { // 去报名
29
-    const { personId, phone } = user
38
+    if (DataLock || ActivityDetail === null || HasJoin) return
39
+    setDataLock(true)
40
+    const { personId, phone, nickname, orgId } = user
30
     const { dynamicId } = ActivityDetail
41
     const { dynamicId } = ActivityDetail
31
-    console.log(personId, phone, dynamicId)
42
+    if (!phone) { // 未授权手机号,唤起授权手机号弹窗
43
+      setShowGetUserPhoneLayer(true)
44
+      setDataLock(false)
45
+      return false
46
+    }
47
+    let Data = {
48
+      phone,
49
+      personId,
50
+      dynamicId,
51
+      name: nickname,
52
+      orgId,
53
+      attendNum: 1,
54
+      sharePerson: null,
55
+      sharePersonName: null,
56
+      sharePersonType: null
57
+    }
58
+    request({ ...apis.JoinActivity, data: { ...Data } }).then(() => {
59
+      setHasJoin(true)
60
+      setDataLock(false)
61
+    }).catch((res) => {
62
+      Taro.showToast({ title: res, icon: 'none' })
63
+      setDataLock(false)
64
+    })
32
   }
65
   }
33
 
66
 
34
   return (
67
   return (
35
     <view className='HuoDongDetail'>
68
     <view className='HuoDongDetail'>
36
-      {
37
-        ShowGetUserPhoneLayer &&
38
-        <GetUserPhone></GetUserPhone>
39
-      }
69
+
70
+      {/* 获取用户手机号授权 */}
71
+      <GetUserPhone Show={ShowGetUserPhoneLayer} Close={() => { setShowGetUserPhoneLayer(false) }}></GetUserPhone>
72
+
40
       <view className='BannerLayer'></view>
73
       <view className='BannerLayer'></view>
41
       {
74
       {
42
         ActivityDetail !== null &&
75
         ActivityDetail !== null &&
69
             <RichText nodes={ActivityDetail.desc}></RichText>
102
             <RichText nodes={ActivityDetail.desc}></RichText>
70
           </view>
103
           </view>
71
 
104
 
72
-          <text className='BottomBtn' onClick={ToJoin}>立即参加</text>
105
+          {
106
+            HasJoin !== null &&
107
+            <text className={HasJoin ? 'BottomBtn' : 'active BottomBtn'} onClick={ToJoin}>{HasJoin ? '已报名' : '立即参加'}</text>
108
+          }
73
 
109
 
74
         </view>
110
         </view>
75
       }
111
       }

+ 5
- 1
src/pages/HuoDong/HuoDongDetail/index.less 查看文件

114
       color: #fff;
114
       color: #fff;
115
       line-height: 98px;
115
       line-height: 98px;
116
       border-radius: 98px;
116
       border-radius: 98px;
117
-      background: #F35844;
117
+      background: #ccc;
118
       margin-top: 60px;
118
       margin-top: 60px;
119
+
120
+      &.active {
121
+        background: #F35844;
122
+      }
119
     }
123
     }
120
   }
124
   }
121
 }
125
 }

+ 40
- 17
src/pages/ShouYe/HuoDong/index.jsx 查看文件

1
-import React, { useState } from 'react'
1
+import React, { useState, useEffect } from 'react'
2
+import request, { apis } from '@/utils/request'
2
 import ActivityListItem from '@/components/ActivityListItem/index'
3
 import ActivityListItem from '@/components/ActivityListItem/index'
3
 import ScrollPage from '@/components/ScrollPage/index'
4
 import ScrollPage from '@/components/ScrollPage/index'
4
 import '@/assets/css/reset.less'
5
 import '@/assets/css/reset.less'
7
 
8
 
8
 export default function ShouYeHuoDong (props) {
9
 export default function ShouYeHuoDong (props) {
9
 
10
 
10
-  const [ActivityList, setActivityList] = useState(['', '', '', '', '', '', ''])
11
-  const [IsPullDown, setIsPullDown] = useState(false)
12
   const [IsPullUp, setIsPullUp] = useState(false)
11
   const [IsPullUp, setIsPullUp] = useState(false)
13
-  const [HasMore, setHasMore] = useState(true)
12
+  const [IsPullDown, setIsPullDown] = useState(false)
13
+  const [HasNextPage, setHasNextPage] = useState(true)
14
+  const [PageNum, setPageNum] = useState(1)
15
+  const [PageList, setPageList] = useState([])
16
+
17
+  useEffect(() => {
18
+    GetPageList(() => {
19
+      setIsPullUp(false)
20
+    })
21
+  }, [PageNum])
22
+
23
+  const GetPageList = (done = () => { }) => { // 获取列表
24
+    request({ ...apis.getActivityList, params: { pageNum: PageNum, pageSize: 6 } }).then((res) => {
25
+      if (PageNum === 1) {
26
+        setPageList([...res.list])
27
+      } else {
28
+        setPageList(PageList.concat([...res.list]))
29
+      }
30
+      setHasNextPage(res.current - 0 < res.pages - 0)
31
+      done()
32
+    }).catch(() => {
33
+      done()
34
+    })
35
+  }
14
 
36
 
15
   const OnRefresh = () => { // 页面下拉刷新
37
   const OnRefresh = () => { // 页面下拉刷新
16
     setIsPullDown(true)
38
     setIsPullDown(true)
17
-    window.setTimeout(() => {
18
-      setIsPullUp(false)
19
-      setHasMore(true)
20
-      setIsPullDown(false)
21
-    }, 1000)
39
+    setHasNextPage(true)
40
+    setPageNum(1)
41
+    if (PageNum === 1) {
42
+      GetPageList(() => {
43
+        setIsPullDown(false)
44
+      })
45
+    } else {
46
+      setPageNum(1)
47
+    }
22
   }
48
   }
23
 
49
 
24
-  const OnPullUp = () => { // 页面上拉加载
25
-    if (HasMore && !IsPullUp) {
50
+  const OnPullUp = () => {
51
+    if (HasNextPage) {
26
       setIsPullUp(true)
52
       setIsPullUp(true)
27
-      window.setTimeout(() => {
28
-        setIsPullUp(false)
29
-        setHasMore(false)
30
-      }, 1000)
53
+      setPageNum(PageNum + 1)
31
     }
54
     }
32
   }
55
   }
33
 
56
 
34
   return (
57
   return (
35
     <view className='ShouYeHuoDong'>
58
     <view className='ShouYeHuoDong'>
36
-      <ScrollPage IsPullDown={IsPullDown} IsPullUp={IsPullUp} HasMore={HasMore} OnRefresh={OnRefresh} OnPullUp={OnPullUp}>
59
+      <ScrollPage IsPullDown={IsPullDown} IsPullUp={IsPullUp} HasMore={HasNextPage} OnRefresh={OnRefresh} OnPullUp={OnPullUp}>
37
         <view className='ShouYeHuoDongContent'>
60
         <view className='ShouYeHuoDongContent'>
38
           {
61
           {
39
-            ActivityList.map((item, index) => (
62
+            PageList.map((item, index) => (
40
               <view className='ListItem' key={`ActivityItem-${index}`}>
63
               <view className='ListItem' key={`ActivityItem-${index}`}>
41
                 <ActivityListItem Data={item}></ActivityListItem>
64
                 <ActivityListItem Data={item}></ActivityListItem>
42
               </view>
65
               </view>

+ 9
- 5
src/pages/ShouYe/index.jsx 查看文件

1
 import React, { useState, useEffect } from 'react'
1
 import React, { useState, useEffect } from 'react'
2
 import NavHeader from '@/components/NavHeader/index'
2
 import NavHeader from '@/components/NavHeader/index'
3
 import GetUserPhone from '@/components/GetUserPhone/index'
3
 import GetUserPhone from '@/components/GetUserPhone/index'
4
+import GetUserIcon from '@/components/GetUserIcon/index'
4
 import { Swiper, SwiperItem, Text } from '@tarojs/components'
5
 import { Swiper, SwiperItem, Text } from '@tarojs/components'
5
 import request, { apis } from '@/utils/request'
6
 import request, { apis } from '@/utils/request'
6
 import { useModel } from '@/store'
7
 import { useModel } from '@/store'
14
 export default function Index (props) {
15
 export default function Index (props) {
15
 
16
 
16
   const { user } = useModel('user')
17
   const { user } = useModel('user')
17
-  const [ShowGetUserPhoneLayer, setShowGetUserPhoneLayer] = useState(true)
18
+  const [ShowGetUserPhoneLayer, setShowGetUserPhoneLayer] = useState(false)
19
+  const [ShowGetUserIconLayer, setShowGetUserIconLayer] = useState(false)
18
   const [ShowAdvLayer, setShowAdvLayer] = useState(false)
20
   const [ShowAdvLayer, setShowAdvLayer] = useState(false)
19
   const [IsPull, setIsPull] = useState(false)
21
   const [IsPull, setIsPull] = useState(false)
20
   const [OwnerList] = useState([
22
   const [OwnerList] = useState([
125
   return (
127
   return (
126
     <Page>
128
     <Page>
127
       <view className='ShouYe flex-v'>
129
       <view className='ShouYe flex-v'>
128
-        {
129
-          ShowGetUserPhoneLayer &&
130
-          <GetUserPhone></GetUserPhone>
131
-        }
132
         <NavHeader BgColor='#f35844' Title='首页'></NavHeader>
130
         <NavHeader BgColor='#f35844' Title='首页'></NavHeader>
133
         <view className='flex-item'>
131
         <view className='flex-item'>
134
 
132
 
258
           </view>
256
           </view>
259
 
257
 
260
         </view>
258
         </view>
259
+
260
+        {/* 获取用户手机号授权 */}
261
+        <GetUserPhone Show={ShowGetUserPhoneLayer} Close={() => { setShowGetUserPhoneLayer(false) }}></GetUserPhone>
262
+
263
+        {/* 获取用户头像 */}
264
+        <GetUserIcon Show={ShowGetUserIconLayer} Close={() => { setShowGetUserIconLayer(false) }}></GetUserIcon>
261
       </view >
265
       </view >
262
     </Page>
266
     </Page>
263
   )
267
   )

+ 49
- 13
src/pages/WoDe/WoDeHuoDong/index.jsx 查看文件

1
-import React, { useState } from 'react'
1
+import React, { useState, useEffect } from 'react'
2
+import request, { apis } from '@/utils/request'
2
 import ActivityListItem from '@/components/ActivityListItem/index'
3
 import ActivityListItem from '@/components/ActivityListItem/index'
4
+import ScrollPage from '@/components/ScrollPage/index'
3
 import '@/assets/css/reset.less'
5
 import '@/assets/css/reset.less'
4
 import '@/assets/css/iconfont.less'
6
 import '@/assets/css/iconfont.less'
5
 import './index.less'
7
 import './index.less'
6
 
8
 
7
 export default function WoDeHuoDong (props) {
9
 export default function WoDeHuoDong (props) {
10
+  
11
+  const [IsPullUp, setIsPullUp] = useState(false)
12
+  const [IsPullDown, setIsPullDown] = useState(false)
13
+  const [HasNextPage, setHasNextPage] = useState(true)
14
+  const [PageNum, setPageNum] = useState(1)
15
+  const [PageList, setPageList] = useState([])
8
 
16
 
9
-  const [IsPull, setIsPull] = useState(false)
10
-  const [ActivityList, setActivityList] = useState(['', '', '', '', '', '', ''])
17
+  useEffect(() => {
18
+    GetPageList(() => {
19
+      setIsPullUp(false)
20
+    })
21
+  }, [PageNum])
11
 
22
 
12
-  const OnRefresh = () => {
13
-    setIsPull(true)
14
-    window.setTimeout(() => {
15
-      setIsPull(false)
16
-    }, 1000)
23
+  const GetPageList = (done = () => { }) => { // 获取列表
24
+    request({ ...apis.getActivityList, params: { pageNum: PageNum, pageSize: 6, mine: '1' } }).then((res) => {
25
+      if (PageNum === 1) {
26
+        setPageList([...res.records])
27
+      } else {
28
+        setPageList(PageList.concat([...res.records]))
29
+      }
30
+      setHasNextPage(res.current - 0 < res.pages - 0)
31
+      done()
32
+    }).catch(() => {
33
+      done()
34
+    })
35
+  }
36
+
37
+  const OnRefresh = () => { // 页面下拉刷新
38
+    setIsPullDown(true)
39
+    setHasNextPage(true)
40
+    setPageNum(1)
41
+    if (PageNum === 1) {
42
+      GetPageList(() => {
43
+        setIsPullDown(false)
44
+      })
45
+    } else {
46
+      setPageNum(1)
47
+    }
48
+  }
49
+
50
+  const OnPullUp = () => {
51
+    if (HasNextPage) {
52
+      setIsPullUp(true)
53
+      setPageNum(PageNum + 1)
54
+    }
17
   }
55
   }
18
 
56
 
19
   return (
57
   return (
20
     <view className='WoDeHuoDong'>
58
     <view className='WoDeHuoDong'>
21
-      <scroll-view scroll-y='true' style='height: 100%;' refresher-enabled={true} onrefresherrefresh={OnRefresh} refresher-triggered={IsPull} refresher-background='none'>
22
-
59
+      <ScrollPage OnRefresh={OnRefresh} IsPullUp={IsPullUp} IsPullDown={IsPullDown} OnPullUp={OnPullUp} HasMore={HasNextPage}>
23
         <view className='Content Activity'>
60
         <view className='Content Activity'>
24
           {
61
           {
25
-            ActivityList.map((item, index) => (
62
+            PageList.map((item, index) => (
26
               <view className='ListItem' key={`ActivityItem-${index}`}>
63
               <view className='ListItem' key={`ActivityItem-${index}`}>
27
                 <ActivityListItem Data={item}></ActivityListItem>
64
                 <ActivityListItem Data={item}></ActivityListItem>
28
               </view>
65
               </view>
29
             ))
66
             ))
30
           }
67
           }
31
         </view>
68
         </view>
32
-
33
-      </scroll-view>
69
+      </ScrollPage>
34
     </view>
70
     </view>
35
   )
71
   )
36
 }
72
 }

+ 28
- 32
src/pages/WuYe/index.jsx 查看文件

34
       <TabPageCutNav List={NavList} CurrentNavId={CurrentNavId} NavChange={NavChange}></TabPageCutNav>
34
       <TabPageCutNav List={NavList} CurrentNavId={CurrentNavId} NavChange={NavChange}></TabPageCutNav>
35
       <view className='flex-item'>
35
       <view className='flex-item'>
36
         <view>
36
         <view>
37
-          <scroll-view scroll-y='true' style='height: 100%;' refresher-enabled={true} onrefresherrefresh={OnRefresh} refresher-triggered={IsPull} refresher-background='none'>
37
+          {/* 公告 */}
38
+          {
39
+            CurrentNavId - 0 === 1 &&
40
+            <view className='Content GongGao'>
41
+              <WuYeGongGao></WuYeGongGao>
42
+            </view>
43
+          }
38
 
44
 
39
-            {/* 公告 */}
40
-            {
41
-              CurrentNavId - 0 === 1 &&
42
-              <view className='Content GongGao'>
43
-                <WuYeGongGao></WuYeGongGao>
44
-              </view>
45
-            }
45
+          {/* 服务 */}
46
+          {
47
+            CurrentNavId - 0 === 2 &&
48
+            <view className='Content FuWu'>
49
+              <WuYeFuWu></WuYeFuWu>
50
+            </view>
51
+          }
46
 
52
 
47
-            {/* 服务 */}
48
-            {
49
-              CurrentNavId - 0 === 2 &&
50
-              <view className='Content FuWu'>
51
-                <WuYeFuWu></WuYeFuWu>
52
-              </view>
53
-            }
53
+          {/* 报修 */}
54
+          {
55
+            CurrentNavId - 0 === 3 &&
56
+            <view className='Content BaoXiu'>
57
+              <WuYeBaoXiu></WuYeBaoXiu>
58
+            </view>
59
+          }
54
 
60
 
55
-            {/* 报修 */}
56
-            {
57
-              CurrentNavId - 0 === 3 &&
58
-              <view className='Content BaoXiu'>
59
-                <WuYeBaoXiu></WuYeBaoXiu>
60
-              </view>
61
-            }
62
-
63
-            {/* 缴费 */}
64
-            {
65
-              CurrentNavId - 0 === 4 &&
66
-              <view className='Content JiaoFei'>
67
-                <WuYeJiaoFei></WuYeJiaoFei>
68
-              </view>
69
-            }
70
-
71
-          </scroll-view>
61
+          {/* 缴费 */}
62
+          {
63
+            CurrentNavId - 0 === 4 &&
64
+            <view className='Content JiaoFei'>
65
+              <WuYeJiaoFei></WuYeJiaoFei>
66
+            </view>
67
+          }
72
         </view>
68
         </view>
73
       </view>
69
       </view>
74
     </view>
70
     </view>

+ 20
- 0
src/utils/api.js 查看文件

1
 const prefix = `${HOST}/api/wx`
1
 const prefix = `${HOST}/api/wx`
2
 
2
 
3
 const $api = {
3
 const $api = {
4
+  getJiaoFeiList: { // 获取缴费列表
5
+    method: 'get',
6
+    url: `${prefix}/bills/current_user/:type`
7
+  },
8
+  getGongDanList: { // 获取小区工单列表
9
+    method: 'get',
10
+    url: `${prefix}/tickets/list/:orgId`
11
+  },
12
+  getGongGaoList: { // 获取小区公告列表
13
+    method: 'get',
14
+    url: `${prefix}/announcements/:orgId`
15
+  },
4
   getUserPhone: { // 获取用户手机号
16
   getUserPhone: { // 获取用户手机号
5
     method: 'post',
17
     method: 'post',
6
     url: `${prefix}/userPhone`
18
     url: `${prefix}/userPhone`
9
     method: 'get',
21
     method: 'get',
10
     url: `${prefix}/buildingDynamiceList`
22
     url: `${prefix}/buildingDynamiceList`
11
   },
23
   },
24
+  checkActivityJoin: { // 查询活动参加详情
25
+    method: 'get',
26
+    url: `${prefix}/buildingDynamiceEnlistInfo/:id`
27
+  },
12
   getActivityDetail: { // 获取活动详情
28
   getActivityDetail: { // 获取活动详情
13
     method: 'get',
29
     method: 'get',
14
     url: `${prefix}/buildingDynamiceInfo/:id`
30
     url: `${prefix}/buildingDynamiceInfo/:id`
15
   },
31
   },
32
+  JoinActivity: { // 参加活动
33
+    method: 'post',
34
+    url: `${prefix}/activityDynamicEnlistAdd`
35
+  },
16
   getNewsList: { // 获取资讯列表
36
   getNewsList: { // 获取资讯列表
17
     method: 'get',
37
     method: 'get',
18
     url: `${prefix}/taNews`
38
     url: `${prefix}/taNews`

+ 1
- 1
src/utils/request.js 查看文件

37
   }
37
   }
38
 
38
 
39
   const token = Taro.getStorageSync('token')
39
   const token = Taro.getStorageSync('token')
40
-  const authHeader = token ? { authorization: `Bearer ${token}` } : {}
40
+  const authHeader = token ? { authorization: `Bearer ${token}`, 'X-Auth-Token': token } : {}
41
   const appHeader = { appId, 'x-action': 'miniapp' }
41
   const appHeader = { appId, 'x-action': 'miniapp' }
42
 
42
 
43
   const config = {
43
   const config = {