张延森 4 年 前
コミット
87e625adb6
共有6 個のファイルを変更した41 個の追加8 個の削除を含む
  1. 11
    1
      src/app.js
  2. 3
    1
      src/components/GetUserPhone/index.jsx
  3. 2
    2
      src/store/models/index.js
  4. 4
    4
      src/store/models/useAppParams.js
  5. 6
    0
      src/utils/api.js
  6. 15
    0
      src/utils/qrcode.js

+ 11
- 1
src/app.js ファイルの表示

@@ -30,13 +30,16 @@ class App extends Component {
30 30
   // 在此处是为了兼容热启动
31 31
   componentDidShow () {
32 32
     const { setUser } = store.getModel('user').getState()
33
+    const { setAppParams } = store.getModel('appParams').getState()
33 34
 
34 35
     // 保存刚进入系统时的router
35 36
     const router = getCurrentInstance().router
36 37
 
37 38
     // 如果是分享或者扫码
38 39
     // scene 与其它参数时互斥的. 有 scene 说明时扫码进来的
39
-    const { from = '', recommender = '', scene = '' } = router.params
40
+    const params = router.params || {}
41
+    const { from = '', recommender = '', scene = '' } = params
42
+    setAppParams({...params})
40 43
 
41 44
     // 登录
42 45
     Taro.login({
@@ -47,6 +50,13 @@ class App extends Component {
47 50
             Taro.setStorage({ key: 'token', data: x.token })
48 51
             Taro.setStorage({ key: 'sessionKey', data: x.sessionKey })
49 52
 
53
+            if (x.scene) {
54
+              setAppParams({
55
+                ...params,
56
+                ...x.scene
57
+              })
58
+            }
59
+
50 60
             // 埋点
51 61
             trackUserSource(router, x.scene).then(res => this.updateTracing = res)
52 62
           })

+ 3
- 1
src/components/GetUserPhone/index.jsx ファイルの表示

@@ -10,6 +10,7 @@ import './index.less'
10 10
 export default function GetUserPhone (props) {
11 11
   const [showPannel, setShowPannel] = useState(true)
12 12
   const { user, setUser } = useModel('user')
13
+  const { appParams } = useModel('appParams')
13 14
 
14 15
   const ToGetUserPhone = (e) => { // 授权手机号
15 16
     const { errMsg, ...data } = e.detail
@@ -19,7 +20,8 @@ export default function GetUserPhone (props) {
19 20
         data: {
20 21
           sessionKey: Taro.getStorageSync('sessionKey'),
21 22
           encryptedData: data.encryptedData,
22
-          iv: data.iv
23
+          iv: data.iv,
24
+          recommender: (appParams || {}).recommender || ''
23 25
         }
24 26
       }).then((res) => {
25 27
         setUser({ ...user, phone: res.phoneNumber })

+ 2
- 2
src/store/models/index.js ファイルの表示

@@ -1,10 +1,10 @@
1 1
 import useSystem from './useSystem'
2
-import useAppRouter from './useAppRouter'
2
+import useAppParams from './useAppParams'
3 3
 import useUser from './useUser'
4 4
 import useScreen from './useScreen'
5 5
 
6 6
 const models = {
7
-  'appRouter': useAppRouter,
7
+  'appParams': useAppParams,
8 8
   'sys': useSystem,
9 9
   'user': useUser,
10 10
   'screen': useScreen

src/store/models/useAppRouter.js → src/store/models/useAppParams.js ファイルの表示

@@ -2,11 +2,11 @@ import React, { useEffect, useState } from 'react'
2 2
 import Taro from '@tarojs/taro'
3 3
 
4 4
 // 保存系统进入时的参数
5
-export default function useAppRouter() {
6
-  const [router, setRouter] = useState()
5
+export default function useAppParams() {
6
+  const [appParams, setAppParams] = useState()
7 7
 
8 8
   return {
9
-    router,
10
-    setRouter
9
+    appParams,
10
+    setAppParams
11 11
   }
12 12
 }

+ 6
- 0
src/utils/api.js ファイルの表示

@@ -200,6 +200,12 @@ const $api = {
200 200
     url: `${prefix}/signup`
201 201
   },
202 202
 
203
+  // 二维码
204
+  qrcode: {
205
+    method: 'post',
206
+    url: `${prefix}/qrcode`
207
+  }
208
+
203 209
 }
204 210
 
205 211
 

+ 15
- 0
src/utils/qrcode.js ファイルの表示

@@ -0,0 +1,15 @@
1
+import { apis, request2 } from './request'
2
+
3
+export function getCardQrParam(user) {
4
+  const param = [
5
+    `id=${user.personId}`,
6
+    `from=card`,
7
+    `recommender=${user.personId}`
8
+  ]
9
+
10
+  return param.join('&')
11
+}
12
+
13
+export function getQrCodeImage(data) {
14
+  return request2({...apis.qrcode, data})
15
+}