Parcourir la source

Merge branch 'main' of http://git.ycjcjy.com/marketing/miniapp into main

张延森 il y a 3 ans
Parent
révision
ba7b2ca882

+ 2
- 2
config/dev.js Voir le fichier

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

+ 2
- 2
config/prod.js Voir le fichier

@@ -10,12 +10,12 @@ module.exports = {
10 10
     OSS_PATH: '"https://xlk-assets.oss-cn-shanghai.aliyuncs.com/"',
11 11
     OSS_FAST_PATH: '"https://xlk-assets.oss-cn-shanghai.aliyuncs.com/"',
12 12
     ICON_FONT: '"https://yz-websit.oss-cn-hangzhou.aliyuncs.com/xlk/css/iconfont.ttf"',
13
-    Version: '"V0.0.58-20210819"'
13
+    Version: '"V0.0.61-20210824"'
14 14
   },
15 15
   mini: {},
16 16
   h5: {
17 17
     /**
18
-     * 如果h5端编译后体积过大,可以使用webpack-bundle-analyzer插件对打包体积进行分析。
18
+     * 如果h5端编译后体积过大,可以使用webpack-bundle-analyzer插件对打包体积进行分析。d
19 19
      * 参考代码如下:
20 20
      * webpackChain (chain) {
21 21
      *   chain.plugin('analyzer')

+ 42
- 2
project.config.json Voir le fichier

@@ -2,7 +2,7 @@
2 2
 	"miniprogramRoot": "dist/",
3 3
 	"projectname": "miniapp",
4 4
 	"description": "",
5
-	"appid": "wxe44244d1a5ea3364",
5
+	"appid": "wxc96058d57e77f373",
6 6
 	"setting": {
7 7
 		"urlCheck": false,
8 8
 		"es6": false,
@@ -33,5 +33,45 @@
33 33
 	"compileType": "miniprogram",
34 34
 	"simulatorType": "wechat",
35 35
 	"simulatorPluginLibVersion": {},
36
-	"condition": {}
36
+	"condition": {
37
+		"search": {
38
+			"current": -1,
39
+			"list": []
40
+		},
41
+		"conversation": {
42
+			"current": -1,
43
+			"list": []
44
+		},
45
+		"plugin": {
46
+			"current": -1,
47
+			"list": []
48
+		},
49
+		"game": {
50
+			"current": -1,
51
+			"list": []
52
+		},
53
+		"gamePlugin": {
54
+			"current": -1,
55
+			"list": []
56
+		},
57
+		"miniprogram": {
58
+			"current": -1,
59
+			"list": [
60
+				{
61
+					"id": -1,
62
+					"name": "pages/index/index",
63
+					"pathName": "pages/index/index",
64
+					"query": "id= 1a679f513937508670594ea2ec616195&from=card _share&recommender= 1a679f513937508670594ea2ec616195",
65
+					"scene": null
66
+				},
67
+				{
68
+					"id": -1,
69
+					"name": "subpackages/pages/consultant/myHomepage/index",
70
+					"pathName": "subpackages/pages/consultant/myHomepage/index",
71
+					"query": "id=1a679f513937508670594ea2ec616195&from=card _share&recommender= 1a679f513937508670594ea2ec616195",
72
+					"scene": null
73
+				}
74
+			]
75
+		}
76
+	}
37 77
 }

+ 29
- 48
src/app.jsx Voir le fichier

@@ -1,11 +1,11 @@
1 1
 import { Component } from 'react'
2 2
 import { Provider } from 'react-redux'
3 3
 import Taro from '@tarojs/taro'
4
-import { getLocation, getRouterParams } from '@/utils/tools'
4
+import { getLocation } from '@/utils/tools'
5 5
 import login from '@/utils/login'
6 6
 import im from '@/utils/im'
7
-import store from './store'
8 7
 import trackUserSource from '@/utils/tracking/userSource'
8
+import store from './store'
9 9
 
10 10
 import './app.scss'
11 11
 
@@ -49,7 +49,7 @@ class App extends Component {
49 49
   onLaunch (options) {
50 50
 
51 51
     console.log('【onLaunch】:', JSON.stringify(options))
52
-    const { mode } = options
52
+    const { mode, query } = options
53 53
     Taro.setStorageSync('mode', mode)
54 54
 
55 55
     // 加载远程字体
@@ -62,52 +62,33 @@ class App extends Component {
62 62
       }
63 63
     })
64 64
 
65
+    // 获取地址
65 66
     getLocation().then((loc) => {
66
-      getRouterParams(options).then(router => {
67
-        Taro.setStorageSync('router', router)
68
-
69
-        const { query: payload } = router
70
-
71
-        payload.path = router.path
72
-        payload.scene = router.scene
73
-
74
-        if (loc) {
75
-          payload.lon = loc.lon
76
-          payload.lat = loc.lat
77
-        }
78
-
79
-        const { path, scene, ...params } = payload
80
-
81
-        if (mode === 'singlePage') {
82
-          // 分享朋友圈的单页模式
83
-          params.singleMode = true
84
-
85
-          // login
86
-          login(params).then(() => {
87
-            this.logged = true
88
-          })
89
-        } else {
90
-          // 非单页模式
91
-          Taro.login({
92
-            success: ({ code }) => {
93
-              params.code = code
94
-
95
-              // login
96
-              login(params).then((res) => {
97
-                const { person: { personId } } = res
98
-                
99
-                // 初始化 im
100
-                im.init(personId)
101
-
102
-                this.logged = true
103
-
104
-                // 埋点
105
-                trackUserSource(options).then((x) => (this.updateTracking = x))
106
-              })
107
-            }
108
-          })
109
-        }
110
-      })
67
+      const params = {
68
+        ...query||{},
69
+        ...loc||{},
70
+      }
71
+
72
+      if (mode === 'singlePage') {
73
+        // 分享朋友圈的单页模式
74
+        params.singleMode = true
75
+  
76
+        // login
77
+        login(params).then(() => {
78
+          this.logged = true
79
+        })
80
+      } else {
81
+        login(params).then((person) => {
82
+          
83
+          // 初始化 im
84
+          im.init(person.personId)
85
+
86
+          this.logged = true
87
+
88
+          // 埋点
89
+          trackUserSource(options).then((x) => (this.updateTracking = x))
90
+        })
91
+      }
111 92
     })
112 93
   }
113 94
 

+ 1
- 1
src/components/Auth/AuthPage/index.jsx Voir le fichier

@@ -18,7 +18,7 @@ export default (props) => {
18 18
   
19 19
   const handlePhoneNumber = (e) => {
20 20
     const { errMsg, ...data } = e?.detail || {}
21
-    debugger
21
+    // debugger
22 22
     if (errMsg === 'getPhoneNumber:ok') {
23 23
       setLoading(true)
24 24
       updatePhoneNumber(data).then(() => {

+ 1
- 1
src/layout/index.js Voir le fichier

@@ -26,7 +26,7 @@ export default (ChildComponent) => (props) => {
26 26
   const city = useSelector(s => s.city.curCity)
27 27
   const { spinning, userInfo } = useSelector(s => s.user)
28 28
   const { person, ...extInfo } = userInfo || {}
29
-  const router = useFixedRouter()
29
+  const router = useFixedRouter(person)
30 30
   const page = routes.filter((r) => (router.path.indexOf(r.page) > -1))[0]
31 31
   const [loading, setLoading] = useState(false)
32 32
   const [authPhone, authAvatar, authPage] = useAuth(person, page)

+ 12
- 5
src/layout/useFixedRouter.js Voir le fichier

@@ -1,10 +1,10 @@
1 1
 
2 2
 import { useEffect, useRef, useState } from 'react'
3 3
 import { useRouter } from '@tarojs/taro'
4
-import { parseQueryString } from '@/utils/tools'
4
+import { parseQueryString, setRecommender } from '@/utils/tools'
5 5
 import { getCodeScene } from '@/services/common'
6 6
 
7
-export default () => {
7
+export default (person) => {
8 8
   const router = useRouter()
9 9
   const routerRef = useRef()
10 10
   routerRef.current = router
@@ -18,17 +18,24 @@ export default () => {
18 18
     if (scene) {
19 19
       getCodeScene(scene).then((res) => {
20 20
         const queryStr = JSON.parse(res).scene
21
-        const params = parseQueryString(queryStr) || {}
21
+        const { recommender, ...otherParams } = parseQueryString(queryStr) || {}
22
+
23
+        const isSelf = recommender && recommender === person?.personId
22 24
         
23 25
         routerRef.current.params = {
24 26
           ...routerRef.current.params || {},
25
-          ...params
27
+          ...otherParams,
28
+          ...(isSelf || !recommender ? {} : { recommender }),
29
+        }
30
+
31
+        if (!isSelf) {
32
+          setRecommender(recommender)
26 33
         }
27 34
 
28 35
         setInited(true)
29 36
       })
30 37
     }
31
-  }, [scene])
38
+  }, [scene, person])
32 39
 
33 40
   const params = {
34 41
     ...routerRef.current.params,

+ 1
- 1
src/pages/index/buildingDetail/components/SpecialPriceHouse/index.jsx Voir le fichier

@@ -34,7 +34,7 @@ export default function SpecialPriceHouse (props) {
34 34
           {
35 35
             List.map((item, index) => (
36 36
               <view className='ListItem' key={`List-${index}`}>
37
-                <text className='Tips'>省{`${toW(item.thriftPrice)}`}</text>
37
+                <text className='Tips'>省{`${toW(item.thriftPrice)}`}</text>
38 38
                 <view className='Price'>
39 39
                   <text>{toW(item.currentPrice)}</text>
40 40
                   <text>万</text>

+ 6
- 6
src/pages/index/buildingPropertyConsultant/index.jsx Voir le fichier

@@ -9,7 +9,7 @@ import './index.scss'
9 9
 
10 10
 export default withLayout((props) => {
11 11
   const { router } = props
12
-  const { buildingId } = router.params
12
+  const { buldingId } = router.params
13 13
 
14 14
   const [List, setList] = useState([])
15 15
 
@@ -35,7 +35,7 @@ export default withLayout((props) => {
35 35
   }
36 36
 
37 37
   useEffect(() => {
38
-    if (!buildingId) {
38
+    if (!buldingId) {
39 39
       Taro.showToast({
40 40
         title: '没有楼盘信息',
41 41
         icon: 'none',
@@ -43,11 +43,11 @@ export default withLayout((props) => {
43 43
       return
44 44
     }
45 45
 
46
-    getCardList({ pageSize: 500, buildingId }).then((res) => {
46
+    getCardList({ pageSize: 500, buildingId: buldingId }).then((res) => {
47 47
       const { records } = res || []
48 48
       setList(records)
49 49
     })
50
-  }, [buildingId])
50
+  }, [buldingId])
51 51
 
52 52
   return (
53 53
     <view className='Page buildingPropertyConsultant'>
@@ -82,9 +82,9 @@ export default withLayout((props) => {
82 82
                   ></text>
83 83
                   
84 84
                 </view>
85
-
85
+                
86 86
                 <view className='Desc'>
87
-                  <text>{item.description}</text>
87
+                  <text>{item.description || '暂无简介'}</text>
88 88
                 </view>
89 89
 
90 90
               </view>

+ 9
- 7
src/pages/index/components/HotRecommend/index.jsx Voir le fichier

@@ -47,9 +47,11 @@ export default function HotRecommend (props) {
47 47
     Taro.navigateTo({ url: `/pages/index/activityList/index?type=${CurrentId}` })
48 48
   }
49 49
 
50
-  const toDetail = () => {
51
-    if (CurrentContentInfo.dynamicId) {
52
-      Taro.navigateTo({ url: `/pages/index/activityDetail/index?id=${CurrentContentInfo.dynamicId}` })
50
+  const toDetail = (item) => {
51
+    return () => {
52
+      if (item.dynamicId) {
53
+        Taro.navigateTo({ url: `/pages/index/activityDetail/index?id=${item.dynamicId}` })
54
+      }
53 55
     }
54 56
   }
55 57
 
@@ -73,10 +75,10 @@ export default function HotRecommend (props) {
73 75
                     <SwiperItem key={`Banner-${index}`}>
74 76
                       <view className='swiper-item'>
75 77
                         <view className='flex-h'>
76
-                          <text className='flex-item' onClick={toDetail}>{item.title || '暂无活动'}</text>
78
+                          <text className='flex-item' onClick={toDetail(item)}>{item.title || '暂无活动'}</text>
77 79
                           <text onClick={() => { ToMore() }}>更多活动</text>
78 80
                         </view>
79
-                        <text onClick={toDetail}>{item.halfTitle}</text>
81
+                        <text onClick={toDetail(item)}>{item.halfTitle}</text>
80 82
                       </view>
81 83
                     </SwiperItem>
82 84
                   ))
@@ -91,10 +93,10 @@ export default function HotRecommend (props) {
91 93
                     <SwiperItem key={`Banner-${index}`}>
92 94
                       <view className='swiper-item'>
93 95
                         <view className='flex-h'>
94
-                          <text className='flex-item' onClick={toDetail}>{item.title || '暂无活动'}</text>
96
+                          <text className='flex-item' onClick={toDetail(item)}>{item.title || '暂无活动'}</text>
95 97
                           <text onClick={() => { ToMore() }}>更多团房</text>
96 98
                         </view>
97
-                        <text onClick={toDetail}>{item.halfTitle}</text>
99
+                        <text onClick={toDetail(item)}>{item.halfTitle}</text>
98 100
                       </view>
99 101
                     </SwiperItem>
100 102
                   ))

+ 4
- 1
src/pages/index/helpToFindHouse/components/SubmitBuyHouseResult/index.jsx Voir le fichier

@@ -64,7 +64,10 @@ export default function SubmitBuyHouseResult (props) {
64 64
                           <view className='RecommendBuildingItem' key={`item-${index}`} onClick={() => { Taro.navigateTo({ url: `/pages/index/buildingDetail/index?id=${item.buildingId}` }) }}>
65 65
                             <view>
66 66
                               <view className='Img'>
67
-                                <Image mode='aspectFill' src={getImgURL(item.poster || item.preSalePermit)} className='centerLabel'></Image>
67
+                                {
68
+                                  (item.buildingListImg || []).length > 0 &&
69
+                                  <Image mode='aspectFill' src={getImgURL(item.buildingListImg[0].url)} className='centerLabel'></Image>
70
+                                }
68 71
                               </view>
69 72
                               <view className='Title flex-h'>
70 73
                                 <view className='flex-item'>

+ 1
- 1
src/pages/mine/index.jsx Voir le fichier

@@ -85,7 +85,7 @@ export default withLayout(() => {
85 85
                         <text onClick={() => { Taro.navigateTo({ url: `/pages/mine/userInfo/index` }) }}>个人信息资料修改</text>
86 86
                       </view>
87 87
                     </view>
88
-                    <text className='Role'>{UserRole === 1 ? '客户' : UserRole === 2 ? '经纪人' : UserRole === 3 ? '置业顾问' : '驻场管理'}</text>
88
+                    <text className='Role'>{UserRole === 1 ? '客户' : UserRole === 2 ? '合伙人' : UserRole === 3 ? '置业顾问' : '驻场管理'}</text>
89 89
                     <text className='New'>NEW</text>
90 90
                     <text className='iconfont icon-diqiu'></text>
91 91
                   </view>

+ 1
- 1
src/pages/mine/myCustomerDetail/index.jsx Voir le fichier

@@ -204,7 +204,7 @@ export default withLayout((props) => {
204 204
                 followList.map((item, index) => (
205 205
                   <view key={`Item-${index}`}>
206 206
                     <view className='flex-h'>
207
-                      <text>范丞丞</text>
207
+                      <text>{item.name}</text>
208 208
                       <view className='flex-item'></view>
209 209
                       <text>{formatDate(item.createDate, 'yyyy-MM-dd hh:mm')}</text>
210 210
                     </view>

+ 2
- 2
src/services/login.js Voir le fichier

@@ -9,6 +9,6 @@ import {
9 9
  * 获取用户openid等信息
10 10
  * @param {*} payload 
11 11
  */
12
-export const wxLogin = (payload, showToast) => {
13
-  return fetch({ url: `${API_USER_LOGIN}?${Qs.stringify(payload)}`, method: 'POST', showToast })
12
+export const wxLogin = (payload) => {
13
+  return fetch({ url: `${API_USER_LOGIN}?${Qs.stringify(payload, { skipNulls: true })}`, method: 'POST', showToast: false })
14 14
 }

+ 1
- 1
src/subpackages/pages/consultant/myHomepage/index.jsx Voir le fichier

@@ -113,7 +113,7 @@ export default withLayout((props) => {
113 113
                     <text>{UserInfo.name} {UserInfo.phone}</text>
114 114
                   </view>
115 115
                   <text onClick={handleFavor} className='iconfont icon-dianzan' style={isSave ? { color: 'red' } : undefined}></text>
116
-                  <text onClick={handleFavor}>{LikeNum}{isSave ? `已点赞` : '赞'}</text>
116
+                  <text onClick={handleFavor}>{isSave ? `已点赞` : '赞'}</text>
117 117
                 </view>
118 118
                 <view className='Tag'>
119 119
                   <view>

+ 51
- 19
src/utils/login.js Voir le fichier

@@ -1,20 +1,16 @@
1 1
 import Taro from '@tarojs/taro';
2 2
 import store from "@/store";
3 3
 import { dispatchCitySelected } from '@/actions/city'
4
-import { USER_INFO, ASSIGN_UNREADNUM, ROLE_CODE } from '@/constants/user'
5
-import { ifNull } from '@/utils/tools'
4
+import { USER_INFO } from '@/constants/user'
5
+import { parseQueryString, setRecommender } from '@/utils/tools'
6 6
 import { wxLogin } from '@/services/login'
7 7
 import { queryUserInfo } from '@/services/user'
8
-import { API_QUERY_USERINFO_BYID } from '@/constants/api'
9
-import { fetch } from '@/utils/request'
10
-
11
-export default (params) => {
12
-  return new Promise((resolve, reject) => {  
13
-    // 转换 undefined 为 ''
14
-    const loginParams = Object.keys(params).reduce((acc, k) => ({ ...acc, [`${k}`]: ifNull(params[k], '') }), {})
8
+import { getCodeScene } from '@/services/common'
15 9
 
10
+function loginRemote (params) {
11
+  return new Promise((resolve, reject) => {
16 12
     // 远程登录获取人员
17
-    wxLogin(loginParams, false).then(data => {
13
+    wxLogin({...params }).then(data => {
18 14
 
19 15
       const { extraInfo, miniApp, person, city } = data
20 16
       const { token, sessionKey } = miniApp
@@ -32,22 +28,58 @@ export default (params) => {
32 28
         }
33 29
       }
34 30
 
31
+      // 如果有推荐人信息
32
+      if (params.recommender && params.recommender !== person.personId) {
33
+        setRecommender(params.recommender)
34
+      }
35
+
35 36
       // 获取人员详细信息
36 37
       // eslint-disable-next-line no-unused-vars
37 38
       queryUserInfo().then(info => {
38 39
         resolve(data)
39 40
       }).catch(reject)
41
+    }).catch(reject)
42
+  
43
+  })
44
+}
40 45
 
41
-      // 如果有推荐人信息
42
-      if (loginParams.recommender && loginParams.recommender !== person.personId) {
43
-        fetch({ url: `${API_QUERY_USERINFO_BYID}/${loginParams.recommender}` }).then((res) => {
44
-          dispatch({ type: 'SYNC_RECOMMENDER', payload: res });
45
-          if (res.personType === ROLE_CODE.CONSULTANT) {
46
-            dispatch({ type: 'SYNC_CONSULTANT', payload: res });
47
-          }
46
+function getCodeAndLogin (params) {
47
+  return new Promise((resolve, reject) => {
48
+    Taro.login({
49
+      success: ({ code }) => {
50
+        params.code = code
51
+  
52
+        // login
53
+        loginRemote(params).then((res) => {
54
+          const { person } = res
55
+          resolve(person)
48 56
         })
57
+      },
58
+      fail: (err) => {
59
+        console.error(err)
60
+        reject(err)
49 61
       }
50
-    }).catch(reject)
51
-  
62
+    })
63
+  })
64
+}
65
+
66
+export default (params) => {
67
+  return new Promise((resolve, reject) => {
68
+    // 二维码ID
69
+    const qrCodeId = params.scene
70
+    if (qrCodeId) {
71
+      // 读二维码内容
72
+      getCodeScene(qrCodeId).then((res) => {
73
+        const queryStr = JSON.parse(res).scene
74
+        const qrCodeParams = parseQueryString(queryStr) || {}
75
+        
76
+        getCodeAndLogin({
77
+          ...params,
78
+          ...qrCodeParams,
79
+        }).then(resolve).catch(reject)
80
+      })
81
+    } else {
82
+      getCodeAndLogin(params).then(resolve).catch(reject)
83
+    }
52 84
   })
53 85
 }

+ 12
- 50
src/utils/tools.js Voir le fichier

@@ -1,5 +1,7 @@
1
-import Taro, { getCurrentInstance } from "@tarojs/taro";
2
-import { getCodeScene } from '@/services/common';
1
+import Taro from "@tarojs/taro";
2
+import { API_QUERY_USERINFO_BYID } from '@/constants/api';
3
+import { ROLE_CODE } from '@/constants/user'
4
+import { fetch } from '@/utils/request';
3 5
 import store from "@/store";
4 6
 
5 7
 /**
@@ -329,51 +331,11 @@ export const getLocation = () => {
329 331
   })
330 332
 }
331 333
 
332
-export const getRouterParams = (options) => {
333
-  return Promise.resolve(options)
334
-  // return new Promise(resolve => {
335
-  //   const router = options || getCurrentInstance().router
336
-  //   const originQuery = { ...router.query };
337
-  //   let { query: { scene: paramsId }, scene } = router
338
-
339
-  //   // query 里面如果跟同级场景一样, 说明是小程序原生场景值
340
-  //   if (paramsId === scene) {
341
-  //     paramsId = undefined
342
-  //   }
343
-
344
-  //   if (paramsId) {
345
-  //     // 扫码进入
346
-  //     getCodeScene(paramsId).then(res => {
347
-  //       let params = JSON.parse(res).scene
348
-
349
-  //       let { from: _from, recommender: _recommender, consultant, id, ...left } = parseQueryString(params) || {}
350
-
351
-  //       router.query = Object.assign(router.query, {
352
-  //         originQuery,
353
-  //         id,
354
-  //         paramsId,
355
-  //         from: _from,
356
-  //         recommender: _recommender,
357
-  //         consultant,
358
-  //         params,
359
-  //         targetId: id,
360
-  //         ...left,
361
-  //       })
362
-  //       Taro.setStorageSync('recommender', router.query.recommender)
363
-  //       Taro.setStorageSync('consultantId', router.query.consultant)
364
-  //       resolve(router)
365
-  //     })
366
-  //   } else {
367
-  //     router.query = Object.assign(router.query, {
368
-  //       originQuery,
369
-  //       paramsId: router.query.id || '',
370
-  //       from: router.query.from || 'search',
371
-  //       recommender: router.query.recommender || '',
372
-  //       targetId: router.query.id || '',
373
-  //       consultant: router.query.consultant || '',
374
-  //     })
375
-
376
-  //     resolve(router)
377
-  //   }
378
-  // })
379
-}
334
+export function setRecommender(recommender) {
335
+  fetch({ url: `${API_QUERY_USERINFO_BYID}/${recommender}` }).then((res) => {
336
+    store.dispatch({ type: 'SYNC_RECOMMENDER', payload: res });
337
+    if (res.personType === ROLE_CODE.CONSULTANT) {
338
+      store.dispatch({ type: 'SYNC_CONSULTANT', payload: res });
339
+    }
340
+  })
341
+}