Your Name 3 lat temu
rodzic
commit
a593d11e74

+ 2
- 2
config/dev.js Wyświetl plik

@@ -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 Wyświetl plik

@@ -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.60-20210823"'
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')

+ 1
- 1
project.config.json Wyświetl plik

@@ -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,

+ 29
- 48
src/app.jsx Wyświetl plik

@@ -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/layout/index.js Wyświetl plik

@@ -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)

+ 14
- 5
src/layout/useFixedRouter.js Wyświetl plik

@@ -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,23 +18,32 @@ 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,
35 42
     qrInited: inited
36 43
   }
37 44
 
45
+  console.log('-------router.params--------->', params)
46
+
38 47
   router.params = params
39 48
   return router
40 49
 }

+ 2
- 2
src/services/login.js Wyświetl plik

@@ -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
 }

+ 51
- 19
src/utils/login.js Wyświetl plik

@@ -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 Wyświetl plik

@@ -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
+}