Procházet zdrojové kódy

小程序端服务增加

李志伟 před 3 roky
rodič
revize
5b55acf8b0

+ 1
- 0
config/dev.js Zobrazit soubor

@@ -3,6 +3,7 @@ module.exports = {
3 3
     NODE_ENV: '"development"'
4 4
   },
5 5
   defineConstants: {
6
+    HOST: '"http://81.69.196.8:8822"',
6 7
   },
7 8
   mini: {},
8 9
   h5: {}

+ 3
- 0
config/index.js Zobrazit soubor

@@ -24,6 +24,9 @@ const config = {
24 24
     '@/assets': path.resolve(__dirname, '..', 'src/assets'),
25 25
     '@/components': path.resolve(__dirname, '..', 'src/components'),
26 26
     '@/layouts': path.resolve(__dirname, '..', 'src/layouts'),
27
+    '@/utils': path.resolve(__dirname, '..', 'src/utils'),
28
+    '@/store': path.resolve(__dirname, '..', 'src/store'),
29
+    '@/services': path.resolve(__dirname, '..', 'src/services'),
27 30
   },
28 31
   framework: 'react',
29 32
   mini: {

+ 1
- 0
package.json Zobrazit soubor

@@ -41,6 +41,7 @@
41 41
     "@tarojs/react": "3.3.2",
42 42
     "@tarojs/runtime": "3.3.2",
43 43
     "@tarojs/taro": "3.3.2",
44
+    "@zjxpcyc/react-tiny-store": "^1.0.0",
44 45
     "react": "^17.0.0",
45 46
     "react-dom": "^17.0.0"
46 47
   },

+ 16
- 8
src/app.js Zobrazit soubor

@@ -1,19 +1,27 @@
1 1
 import { Component } from 'react'
2
+import Taro from '@tarojs/taro'
3
+import store, { StoreRoot } from './store'
2 4
 import './app.less'
3 5
 
4 6
 class App extends Component {
5 7
 
6
-  componentDidMount () {}
7
-
8
-  componentDidShow () {}
9
-
10
-  componentDidHide () {}
11
-
12
-  componentDidCatchError () {}
8
+  onLaunch(options) {
9
+    Taro.login({
10
+      success: (res) => {
11
+        const { code } = res;
12
+        const [_, login] = store.getModel('person').getState()
13
+        login({ code })
14
+      }
15
+    })
16
+  }
13 17
 
14 18
   // this.props.children 是将要会渲染的页面
15 19
   render () {
16
-    return this.props.children
20
+    return (
21
+      <StoreRoot>
22
+        {this.props.children}
23
+      </StoreRoot>
24
+    )
17 25
   }
18 26
 }
19 27
 

+ 4
- 0
src/pages/index/index.jsx Zobrazit soubor

@@ -1,6 +1,7 @@
1 1
 import React, { Suspense, useState, useEffect, lazy } from 'react'
2 2
 import { useRouter } from '@tarojs/taro'
3 3
 import CustomNav from '@/components/CustomNav'
4
+import { useModel } from '@/store'
4 5
 import logo from '@/assets/icons/comm/logo_small.png'
5 6
 import tabList from './tabbar'
6 7
 import './index.less'
@@ -19,8 +20,11 @@ export default (props) => {
19 20
   const { params } = useRouter()
20 21
   const { tab } = params || {}
21 22
 
23
+  const [person] = useModel('person')
22 24
   const [currentTab, setCurrentTab] = useState(0)
23 25
 
26
+  console.log('------person------->', person)
27
+
24 28
   const handleTabChange = (e) => {
25 29
     const { index } = e.detail
26 30
     setCurrentTab(index)

+ 50
- 25
src/pages/index/tabs/Recommend.jsx Zobrazit soubor

@@ -1,24 +1,40 @@
1 1
 import { React, useState, useEffect, } from 'react'
2 2
 // .就是当前路径
3
-import './less/Recommend.less'
4
-import iconsearch from '../../../assets/icons/housemantj/search.png'
5
-import icontip from '../../../assets/icons/housemantj/tip.png'
6
-import location from '../../../assets/icons/housemantj/location.png'
7
-import msImage from '../../../assets/icons/housemantj/ms.jpg'
8
-import mjImage from '../../../assets/icons/housemantj/mj.jpg'
9
-import glImage from '../../../assets/icons/housemantj/gl.jpg'
10
-import msTip from '../../../assets/icons/housemantj/foodtip.png'
11
-import mjTip from '../../../assets/icons/housemantj/mjtip.png'
12
-import glTip from '../../../assets/icons/housemantj/gltip.png'
13
-import onlove from '../../../assets/icons/housemantj/onlove.png'
3
+import iconsearch from '@/assets/icons/housemantj/search.png'
4
+import icontip from '@/assets/icons/housemantj/tip.png'
5
+import location from '@/assets/icons/housemantj/location.png'
6
+import msImage from '@/assets/icons/housemantj/ms.jpg'
7
+import mjImage from '@/assets/icons/housemantj/mj.jpg'
8
+import glImage from '@/assets/icons/housemantj/gl.jpg'
9
+import msTip from '@/assets/icons/housemantj/foodtip.png'
10
+import mjTip from '@/assets/icons/housemantj/mjtip.png'
11
+import glTip from '@/assets/icons/housemantj/gltip.png'
12
+import onlove from '@/assets/icons/housemantj/onlove.png'
14 13
 import Taro,{useRouter } from '@tarojs/taro'
14
+import { getIndexType, getIndexRecommender } from '@/services/home'
15 15
 
16
+import './less/Recommend.less'
16 17
 
17 18
 
18 19
 export default (props) => {
19 20
   const [activeTab, setActiveTab] = useState(0)
20 21
   const { params } = useRouter()
21 22
   const { tabJump } = params || {}
23
+  const [typeList, setTypeList] = useState([])
24
+  const [list, setList] = useState([])
25
+
26
+  const tabs = [{ title: '附近' }].concat(typeList.map(x => ({...x, title: x.typeName })))
27
+
28
+  useEffect(() => {
29
+    getIndexType({ pageSize: 20 }).then((res) => {
30
+      setTypeList(res.records || [])
31
+    })
32
+
33
+    getIndexRecommender().then((res) => {
34
+      setList(res.records || [])
35
+    })
36
+  }, [])
37
+
22 38
   useEffect(() => {
23 39
     if (tabJump) {
24 40
       setActiveTab(tabJump - 0)
@@ -27,26 +43,29 @@ export default (props) => {
27 43
 
28 44
   }, [tabJump])
29 45
 
30
-  const tabs = [
31
-    {
32
-      title: '附近',
33
-    },
34
-    {
35
-      title: '全城',
46
+  // const tabs = [
47
+  //   {
48
+  //     title: '附近',
49
+  //   },
50
+  //   {
51
+  //     title: '全城',
36 52
 
37
-    },
38
-    {
39
-      title: '夫子庙',
53
+  //   },
54
+  //   {
55
+  //     title: '夫子庙',
40 56
 
41
-    },
42
-    {
43
-      title: '新街口',
57
+  //   },
58
+  //   {
59
+  //     title: '新街口',
44 60
 
45
-    },    
46
-  ]
61
+  //   },    
62
+  // ]
47 63
   const handleTabChange = (e) => {
48 64
     const { index } = e.detail
49 65
     setActiveTab(index)
66
+
67
+    const tab = tabs[index].typeId
68
+    // getIndexRecommender().then()
50 69
   }
51 70
 
52 71
 
@@ -107,6 +126,12 @@ export default (props) => {
107 126
       </view>
108 127
       <scroll-view scroll-y="true" scroll-view='true' bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll">
109 128
         <view className="waterfall">
129
+          {/* {
130
+            list.map()
131
+
132
+          } */}
133
+
134
+
110 135
           {activeTab === 0 &&
111 136
             <>
112 137
               <view className='contentCard' onClick={toDetails2}>

+ 1
- 2
src/pages/searchResult/searchResult.less Zobrazit soubor

@@ -134,5 +134,4 @@
134 134
     text-align: center;
135 135
     border-bottom: 6px solid #4C4C4C;
136 136
   }
137
-}
138
-
137
+}

+ 15
- 0
src/services/home.js Zobrazit soubor

@@ -0,0 +1,15 @@
1
+import request from '@/utils/request'
2
+
3
+/**
4
+ * 获取推荐列表
5
+ * @param {*} params 
6
+ * @returns 
7
+ */
8
+export const getIndexRecommender = (params) => request('/index/recommender', { params })
9
+
10
+/**
11
+ * 获取分类
12
+ * @returns 
13
+ */
14
+export const getIndexType = (params) => request('/tdType', { params })
15
+

+ 3
- 0
src/services/person.js Zobrazit soubor

@@ -0,0 +1,3 @@
1
+import request from '@/utils/request'
2
+
3
+export const login = (params) => request('/login', { params })

+ 16
- 0
src/store/index.js Zobrazit soubor

@@ -0,0 +1,16 @@
1
+import { createStore, createStoreRoot, createModelHook } from '@zjxpcyc/react-tiny-store'
2
+import person from './models/person'
3
+
4
+const store = createStore()
5
+const models = {
6
+  person,
7
+}
8
+
9
+const useModel = createModelHook(store)
10
+const StoreRoot = createStoreRoot(store, models)
11
+
12
+export default store
13
+export {
14
+  useModel,
15
+  StoreRoot,
16
+}

+ 15
- 0
src/store/models/person.js Zobrazit soubor

@@ -0,0 +1,15 @@
1
+import { useState } from "react"
2
+import { login } from '@/services/person'
3
+
4
+export default () => {
5
+  const [person, setPerson] = useState({ personId: 123 })
6
+
7
+  const personLogin = (params) => {
8
+    console.log('-------personLogin---->', params)
9
+    login(params).then((res) => {
10
+      setPerson(res)
11
+    })
12
+  }
13
+
14
+  return [person, personLogin]
15
+}

+ 87
- 0
src/utils/request.js Zobrazit soubor

@@ -0,0 +1,87 @@
1
+
2
+import Taro from '@tarojs/taro'
3
+
4
+const logger = Taro.getRealtimeLogManager()
5
+
6
+const object2QueryString = (params) => {
7
+  if (!params) return ;
8
+
9
+  const keys = Object.keys(params)
10
+  const arr = keys.map((key) => {
11
+    const val = params[key]
12
+    return `${key}=${encodeURIComponent(val)}`
13
+  })
14
+
15
+  return arr.join('&')
16
+}
17
+
18
+export default (url, options) => {
19
+  const { params, skipError, header, ...leftOptions } = options || {}
20
+  const queryStr = object2QueryString(params)
21
+
22
+  const urlWithParams = queryStr ? `${url}?${queryStr}` : url;
23
+  const nwUrl = `${HOST}/api/wx${urlWithParams}`
24
+
25
+  const token = Taro.getStorageSync('token')
26
+  const tokenHeader = token ? { 'X-Authorization-JWT': token } : {}
27
+  const nwHeader = {
28
+    ...(header || {}),
29
+    ...tokenHeader,
30
+  }
31
+
32
+  return new Promise((resolve, reject) => {
33
+    Taro.request({
34
+      ...leftOptions,
35
+      url: nwUrl,
36
+      header: nwHeader,
37
+      success: (res) => {
38
+        const { code, message, data, token } = res.data
39
+
40
+        if (token || data.token) {
41
+          Taro.setStorage({ key: 'token', data: token || data.token })
42
+        }
43
+
44
+        if (code === 1000) {
45
+          resolve(data)
46
+        } else {
47
+          console.error(res)
48
+
49
+          logger.error(nwUrl)
50
+          logger.error(options)
51
+          logger.error(res)
52
+
53
+          if (!skipError) {
54
+            Taro.showToast({
55
+              title: message,
56
+              icon: 'none',
57
+            })
58
+          }
59
+
60
+          reject(message.indexOf('java') > -1 ? '系统内部错误' : message)
61
+        }
62
+      },
63
+    
64
+      fail: (err) => {
65
+        console.error(err)
66
+
67
+        logger.error('网络错误')
68
+        logger.error(nwUrl)
69
+        logger.error(options)
70
+        logger.error(err)
71
+
72
+        const message = err.message || err.errMsg || err
73
+
74
+        if (!skipError) {
75
+          Taro.showToast({
76
+            title: message,
77
+            icon: 'none',
78
+          })
79
+        }
80
+
81
+        reject(message)
82
+      }
83
+    })
84
+  })
85
+
86
+
87
+}