bill-lai 3 tahun lalu
induk
melakukan
7d70234b81

+ 1 - 0
app.js

@@ -136,6 +136,7 @@ App({
         loginProps.isLogin = props
         loginCbs.forEach(cb => cb())
     },
+    
 
     onGetSysInfo() {
         // 先缓存获取

+ 1 - 1
component/auth/api.js

@@ -1,4 +1,4 @@
-const tempId = 'klhtcMH_MixbhY2AqKjZ6sl7y51UkpWJ4Xj4P4Cn9U0'
+const tempId = 'klJpOQl9j5FSOB-enbs0KDXZ-8OGivhr8AnLDAeE2xk'
 
 export const getSubOpen = () => {
   let userInfo = wx.getStorageSync('userInfo');

+ 1 - 0
component/auth/auth.js

@@ -78,6 +78,7 @@ Component({
         if (res.errno === 0) {
           //存储用户信息
           res.data.userInfo.userId = res.data.userId
+          res.data.userInfo.sessionKey = res.data.sessionKey
           wx.setStorageSync('userInfo', res.data.userInfo);
           wx.setStorageSync('token', res.data.token);
           wx.setStorageSync('userId', res.data.userId);

+ 1 - 1
component/voice/voice.js

@@ -85,7 +85,7 @@ Component({
       this.setData({
         trtcConfig: {
           scene: 'rtc',
-          sdkAppID: '1400431163', // 开通实时音视频服务创建应用后分配的 SDKAppID
+          sdkAppID: '1400450635', // 开通实时音视频服务创建应用后分配的 SDKAppID
           userID: user.userId, // 用户 ID,可以由您的帐号系统指定
           userSig: user.sig, // 身份签名,相当于登录密码的作用
           template: 'custom', // 画面排版模式

+ 4 - 2
config.js

@@ -4,15 +4,17 @@ const dev = {
   // 容器地址
   // viewHost: 'http://192.168.0.112:8081',
   // 发现地址
+  env: 'dev',
   viewHost: 'https://test.4dkankan.com'
 }
 
 const mal = {
+  env: 'pro',
   socketHost: 'wss://shop.4dkankan.com',
   requestHost: 'https://vr.finehousing.co',
   viewHost: 'https://www.4dkankan.com',
 }
 
 
-export default dev
-// export default mal
+// export default dev
+export default mal

+ 1 - 0
config/api.js

@@ -9,6 +9,7 @@ const API_BASE_URL = remote.requestHost + '/platform-framework/api/';
 module.exports = {
     API_BASE_URL,
     RoomList: API_BASE_URL + 'liveShow/getRoomList', //获取直播间列表
+    decryptedPhoneNum: API_BASE_URL + 'auth/decryptedPhoneNum', //获取微信手机号
 
     IndexTypeList: API_BASE_URL + 'brand/brandTypeList', //店铺类型列表
     IndexList: API_BASE_URL + 'brand/list', //首页商铺列表

+ 1 - 0
pages/auth/btnAuth/btnAuth.js

@@ -47,6 +47,7 @@ Page({
           //存储用户信息
           res.data.userInfo.userId = res.data.userId
           res.data.userInfo.isAdmin = res.data.isAdmin
+          res.data.userInfo.sessionKey = res.data.sessionKey
           wx.setStorageSync('userInfo', res.data.userInfo);
           wx.setStorageSync('token', res.data.token);
           wx.setStorageSync('userId', res.data.userId);

+ 19 - 1
pages/user/user.js

@@ -12,7 +12,24 @@ Page({
     birthday: '',
     region: [],
     customItem: '全部',
-    gender: 0
+    gender: 0,
+    mobile: null
+  },
+
+  async getPhoneNumber(e) {
+    let {encryptedData,iv} =  e.detail
+    if (!encryptedData) return;
+    let res = await util.request(api.decryptedPhoneNum, { encryptedData,iv, sessionKey: this.sessionKey })
+
+    console.log(res)
+    this.setData({
+      mobile: res.phoneNum
+    })
+  },
+
+
+  updateMobile(ev) {
+    this.setData({mobile: ev.detail.value})
   },
 
   updateNickName(ev) {
@@ -25,6 +42,7 @@ Page({
     this.getUserInfo()
     let userInfo = wx.getStorageSync('userInfo')
     userInfo.avatar = userInfo.avatarUrl
+    this.sessionKey = userInfo.sessionKey
     delete userInfo.avatarUrl
 
     this.setData({ ...userInfo })

+ 9 - 0
pages/user/user.wxml

@@ -14,6 +14,15 @@
         <input value="{{nickname}}" class="ipname" bindinput="updateNickName"></input>
       </view>
     </view>
+    
+    <view class="item">
+      <text>手机号</text>
+      <view class="ir">
+        <input value="{{mobile}}" bindinput="updateMobile" type="number" class="ipname" ></input>
+        <!-- <button wx:if="{{!mobile}}" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" class="getPhone">点击获取手机号</button> -->
+      </view>
+    </view>
+    
     <view class="item">
       <text>性别</text>
       <view class="ir radio">

+ 10 - 0
pages/user/user.wxss

@@ -9,6 +9,16 @@ page {
   text-align: center;
 }
 
+
+.getPhone {
+  background: none;
+  width: 100%;
+  padding: 0;
+  font-size: 26rpx;
+  color: #131D34;
+  text-align: right;
+}
+
 .userinfo-avatar {
   width: 80px;
   height: 80px;

+ 21 - 7
pages/webview/index.js

@@ -3,10 +3,11 @@ const api = require('../../config/api.js');
 const util = require('../../utils/util.js');
 import socketApi from '../../socket'
 
-const handleScenes = ['t-9EtLj36', 'tSrGwEa0n']
+const handleScenes = ['t-9EtLj36', 'tSrGwEa0n', 'wrsPDAyy9']
 
-const URL = 'https://www.4dkankan.com/mallscene.html?m='
 
+const URL = 'https://www.4dkankan.com/mallscene.html?m='
+a
 Page({
 
   ...socketApi,
@@ -21,7 +22,9 @@ Page({
     canIUse: wx.canIUse('button.open-type.getUserInfo'),
     rnd:'',
     temp:'',
-    live_base_url: 'rtmp://120.24.85.77:1935/hls'
+    live_base_url: 'rtmp://120.24.85.77:1935/hls',
+    peopleCount: 5,
+    surplus: 5
     // url: 'https://www.4dkankan.com/showProPC.html?m=vroMUXdx&origin=4Dplaza&sid=1046051&room_id=1596785144930&user_id=44'
   },
 
@@ -44,11 +47,13 @@ Page({
         }, 100)
       }
     })
-    
+
     getApp().checkNetStatu();
 
+    
     // setTimeout(() => this.login(), 3000)
     this.setData({
+      join: false,
       imgServer: util.imgServer,
       showGuide: false,
       showCommodity: false,
@@ -74,12 +79,20 @@ Page({
     // console.log(options)
     // options.id = '1046098'
     this.options = options
-    if (options.join) {
+    if (this.options.roomId) {
+      this.data.join = true
+    }
+
+    if (this.data.join) {
       this.role = 'customer'
     } else {
       this.role = 'leader'
     }
 
+    if (options.many !== void 0) {
+      this.data.many = options.many
+    }
+
     socketApi.onShow.call(this)
     this.urlPj = '&brandId=' + this.options.id
   },
@@ -95,7 +108,7 @@ Page({
     this.mcode = m
     let socketOptions = await this.socketStart({sceneId: this.mcode, roomId: options.roomId})
     // options.join = true
-    let url = this.getUrl(base, socketOptions, options.join) + this.urlPj
+    let url = this.getUrl(base, socketOptions, this.data.join) + this.urlPj
 
     this.base = base
 
@@ -156,6 +169,7 @@ Page({
     getApp().updateCardCount()
 
     
+    
     // this.options.join = true
     // this.getCartList()
     
@@ -174,7 +188,7 @@ Page({
         this.init()
       }
     } else if (this.token !== wx.getStorageSync('token')) {
-      if (this.options.join) {
+      if (this.data.join) {
         let res = await util.request(api.UserInfo)
         if (res.errno === 401) {
           return getApp().setLoginProps(false)

+ 6 - 8
project.config.json

@@ -18,23 +18,21 @@
     "checkSiteMap": true,
     "uploadWithSourceMap": true,
     "compileHotReLoad": false,
-    "useMultiFrameRuntime": true,
-    "useApiHook": true,
-    "useApiHostProcess": true,
+    "useMultiFrameRuntime": false,
+    "useApiHook": false,
+    "useApiHostProcess": false,
     "babelSetting": {
       "ignore": [],
       "disablePlugins": [],
       "outputPath": ""
     },
     "enableEngineNative": false,
-    "bundle": false,
-    "useIsolateContext": true,
-    "useCompilerModule": false,
-    "userConfirmedUseCompilerModuleSwitch": false,
+    "useIsolateContext": false,
     "userConfirmedBundleSwitch": false,
     "packNpmManually": false,
     "packNpmRelationList": [],
-    "minifyWXSS": true
+    "minifyWXSS": true,
+    "showES6CompileOption": false
   },
   "compileType": "miniprogram",
   "libVersion": "2.6.6",

+ 1 - 0
services/user.js

@@ -23,6 +23,7 @@ function loginByWeixin(userInfo) {
           //存储用户信息
           res.data.userInfo.userId = res.data.userId
           res.data.userInfo.isAdmin = res.data.isAdmin
+          res.data.userInfo.sessionKey = res.data.sessionKey
           wx.setStorageSync('userInfo', res.data.userInfo);
           wx.setStorageSync('token', res.data.token);
 

+ 142 - 59
socket.js

@@ -5,6 +5,8 @@ const util = require('/utils/util.js');
 const UNLOGIN = 'NO_LOGIN'
 const btoa = require('./utils/btoa')
 
+const manyCount = 30
+
 import remote from './config.js'
 var app = getApp();
 var isIos = false
@@ -34,11 +36,11 @@ let urlToJson = (url = window.location.href) => { // 箭头函数默认传值为
 
 
 export default {
-  
   joinUrl() {
     let options = {
       API_BASE_URL: api.API_BASE_URL,
       "url": this.data.url,
+      // "url": 'http://192.168.0.109:8080',
       "reload": this.data.reload,
       "token": wx.getStorageSync('token'),
       "code": this.mcode,
@@ -48,7 +50,7 @@ export default {
       "bottom": this.data.bottom || 0,
       socket: {
         socketHost: remote.socketHost,
-        path: '/vr-node',
+        path: '/fsl-node',
         options: {
           ...this.data.socketOptions,
           nickname: encodeURI(encodeURI(this.data.socketOptions.nickname))
@@ -57,7 +59,15 @@ export default {
     }
     console.error('joinurl', options)
     // let base = 'http://127.0.0.1:5500/index.html'
-    let base = remote.viewHost + '/shop-container/index.html?m=' + Date.now()
+    // let base = remote.viewHost + '/shop-container/shop.html'
+    let sponsor = !!this.data.canShow
+    if (this.data.join && !this.options.join) {
+      sponsor = false
+    }
+
+    // remote.viewHost
+    let base = remote.viewHost + '/shop-container/fashilong.html?env='+remote.env+'&sponsor=' + sponsor + '&many=' + this.data.many
+    // let base = 'http://192.168.0.109:8081/shop-container/fashilong.html?env='+remote.env+'&sponsor=' + sponsor + '&many=' + this.data.many
     // let base = remote.viewHost + '/shop.html'
 
     this.data.reload = false
@@ -76,7 +86,6 @@ export default {
   },
 
   onShow() {
-
     this.setData({
       isIos,
       showComtypesAllTab: false
@@ -225,16 +234,25 @@ export default {
     //   userInfoa: userInfo.nickname.split('').join(' ')
     // })
 
+
+    
+    this.role !== 'leader'
+    let roomType
+    if ((!this.data.canShow && !this.data.join) || (this.data.join && !this.options.join)) {
+        roomType = '1v1'
+    }
     return {
       role: this.role || 'leader',
       userId: userInfo.userId,
+      roomType,
       avatar: userInfo.avatarUrl,
       nickname:  userInfo.nickname,
       voiceStatus: getApp().globalData.voiceProps.noMute ? 0 : 2,
+      enableTalk: this.role === 'leader' ? true : undefined,
       roomId: room,
-      sceneNumber: '',
+      sceneNumber: sceneId,
       onlineStatus: true,
-      userLimitNum: 5
+      userLimitNum: this.data.peopleCount
     }
   },
 
@@ -249,7 +267,7 @@ export default {
 
     console.log('小程序参数', options)
     let socket = io(remote.socketHost, {
-      path: '/vr-node',
+      path: '/fsl-node',
       query: {
         ...options,
         isClient: true
@@ -261,12 +279,9 @@ export default {
       socketStatus: 0
     })
 
-    socket.on('connect', () => {
-      console.log('socket connect...')
-      this.setData({
-        socketStatus: 1
-      })
-    })
+    socket.on('connect', () => this.setData({
+      socketStatus: 1
+    }))
     socket.on('connect_error', () => this.setData({
       socketStatus: -1
     }))
@@ -281,7 +296,6 @@ export default {
         socketStatus: 0
       })
 
-      
       let noMute = getApp().globalData.voiceProps.noMute
       this.socketSendMessage('changeVoiceStatus', {
         status: noMute ? 0 : 2
@@ -294,10 +308,26 @@ export default {
     socket.on('error', () => this.setData({
       socketStatus: -1
     }))
+    socket.on('roomIn', config => {
+      let enableTalk = config.roomsConfig.enableTalk !== false
+      let noMute = getApp().globalData.voiceProps.noMute
+      getApp().globalData.voiceProps.force = enableTalk
+      if (!enableTalk && !noMute) {
+        this.mic()
+      }
+    })
 
     this.socketSendMessage = (event, obj) => {
-      console.error('发送 socket Room', options.roomId, event, obj)
-      socket.emit(event, obj)
+      let socket = this.socket
+      console.error('发送 socket Room', options.roomId, event, obj, socket)
+      try {
+        socket.emit(event, obj)
+      } catch (e) {
+        console.error(e, '试图重新发送')
+        setTimeout(() => {
+          this.socketSendMessage(event, obj)
+        }, 500)
+      }
     }
 
     socket.on('clientSyncAction', (data) => {
@@ -310,10 +340,14 @@ export default {
     })
 
     socket.on('action', (data) => {
-      console.log('打开action', data)
       if (data.type === 'navigateToGoods') {
         this.navigateToGoodsAction(data.data)
-        
+      }
+    })
+
+    socket.on('changeRoomEnableTalk', config => {
+      if (this.role !== 'leader') {
+        this.changeRoomEnableTalk(config)
       }
     })
 
@@ -340,11 +374,21 @@ export default {
       socket = null
     }
 
-
+    this.socket = socket
 
     return options
   },
 
+  changeRoomEnableTalk(data) {
+    console.log(data)
+    let noMute = getApp().globalData.voiceProps.noMute
+    getApp().globalData.voiceProps.force = data.enableTalk
+    // noMute true 静音
+    // enableTalk false 静音
+    if (!!data.enableTalk === !!noMute) {
+      this.mic()
+    }
+  },
 
   navigateToGoods({
     data
@@ -362,13 +406,17 @@ export default {
   },
 
   getUrl(url, socketOptions, isJoin) {
-
-    url += '&room_id=' + socketOptions.roomId + '&user_id=' + socketOptions.userId + '&API_BASE_URL=' + api.API_BASE_URL + '&X-Nideshop-Token=' + wx.getStorageSync('token') + '&special=' + ~this.data.handleScenes.indexOf(this.data.sceneNumber)
+    url += '&room_id=' + socketOptions.roomId + '&user_id=' + socketOptions.userId + '&API_BASE_URL=' + api.API_BASE_URL + '&X-Nideshop-Token=' + wx.getStorageSync('token') + '&special=' + ~this.data.handleScenes.indexOf(this.data.sceneNumber) + '&canShow=' + this.data.canShow
+    
 
     if (isJoin) {
-      url += '&role=customer&shopping'
+      url += '&role=' + this.role + '&shopping'
+    } else {
+      url += '&role=' + this.role
     }
 
+    console.error(url)
+      console.log(isJoin)
     return url
   },
 
@@ -396,27 +444,30 @@ export default {
   },
 
   async startCall(data) {
-    console.error(data, 'startcall')
     if (!data) return;
 
+    this.setData({
+      surplus: this.data.peopleCount -  data.roomsPerson.length
+    })
     if (!this.isAuthorizeRecord) {
       const voiceStatus = Number(await this.authorizeRecord())
       this.isAuthorizeRecord = true
-      getApp().setVoiceProps({
-        noMute: !voiceStatus
-      })
 
-      console.log(getApp().globalData.voiceProps.noMute)
+      // getApp().setVoiceProps({
+      //   noMute: !voiceStatus
+      // })
+
+      // console.log(getApp().globalData.voiceProps.noMute)
       // this.socketSendMessage('changeVoiceStatus', {
       //   status: getApp().globalData.voiceProps.noMute ? 0 : 2
       // })
-      this.data.socketOptions.voiceStatus = 1
+      // this.data.socketOptions.voiceStatus = 1
+      // this.socketSendMessage('changeVoiceStatus', {status: noMute ? 0 : 2})
     }
 
     const socketOptions = this.data.socketOptions
     getApp().globalData.roomId = socketOptions.roomId
     const user = data.roomsPerson.find(user => user.userId == socketOptions.userId)
-    console.log(user, data.roomsPerson, 'staer')
     if (!user) {
       return
     }
@@ -428,9 +479,9 @@ export default {
       ...user,
       action: 'startCall'
     })
-    this.socketSendMessage('changeVoiceStatus', {
-      status: getApp().globalData.voiceProps.noMute ? 0 : 2
-    })
+    // this.socketSendMessage('changeVoiceStatus', {
+    //   status: getApp().globalData.voiceProps.noMute ? 0 : 2
+    // })
   },
 
   stopCall() {
@@ -455,10 +506,17 @@ export default {
     this.stopCall()
     getApp().globalData.rtcParams = []
     getApp().globalData.pusher = ''
-    this.role = 'leader'
+
+    if (this.data.join && !this.options.join) {
+      wx.switchTab({
+        url: '/pages/index/index',
+      })
+      return;
+    }
+    
+    this.role = this.data.canShow ? 'leader' : 'customer'
     let options = await this.getSocketOptions(this.mcode)
 
-    console.error('发送H5 newRoom', options)
     this.socketSendMessage('clientSyncAction', {
       type: 'newRoom',
       data: options
@@ -467,6 +525,11 @@ export default {
     setTimeout(async () => {
       this.wssSuccess = false
       this.socketStop && this.socketStop()
+      this.data.many = !!this.data.canShow
+      
+      this.setData({
+        peopleCount: this.data.many ? manyCount : 5
+      })
 
       let base = this.base
       let socketOptions = await this.socketStart({
@@ -517,8 +580,22 @@ export default {
     })
   },
 
+  clearDebuger() {
+    this.setData({
+      debugerInfo: ''
+    })
+  },
+
   async mic() {
     let noMute = getApp().globalData.voiceProps.noMute
+    
+    
+    // noMute true 静音
+    // enableTalk false 静音
+    // if (!!getApp().globalData.voiceProps.force === !!noMute) 
+    //   return
+    // if (!getApp().globalData.voiceProps.force && (!this.data.socketOptions.voiceStatus || noMute)) return;
+
     if (!this.data.socketOptions.voiceStatus) {
       let voiceStatus = await this.authorizeRecord()
       if (voiceStatus) {
@@ -568,10 +645,11 @@ export default {
       this.setData({
         sendShare: false
       })
+      
       return {
         title: '【好友邀请】一起来逛店吧!',
         imageUrl: newPicUrl,
-        path: `/pages/webview/index?id=${id}&join=true&roomId=${this.data.socketOptions.roomId}`,
+        path: `/pages/webview/index?id=${id}&join=true&roomId=${this.data.socketOptions.roomId}&many=${!!this.data.many}`,
       }
     } else {
       return {
@@ -599,18 +677,20 @@ export default {
   },
 
 
-  share(data) {
-
+  share() {
     const companyName = `良房一廳`
     const vrLink = `/pages/webview/index`
     const img_url = this.data.newPicUrl || 'http://video.cgaii.com/new4dage/images/images/home_2_a.jpg'
     const shareImg = img_url
 
-    let id = data.data || this.data.id
+    let id = this.data.id
     this.count = this.count || 0
-    wx.navigateTo({
-      url: `/pages/shared/shared?img_url=${btoa(img_url)}&shareImg=${btoa(shareImg)}&companyName=${companyName}&vrLink=${btoa(vrLink)}&id=${id}`,
-    })
+
+    console.log(`/pages/shared/shared?img_url=${btoa(img_url)}&shareImg=${btoa(shareImg)}&companyName=${companyName}&vrLink=${btoa(vrLink)}&id=${this.data.id}`);
+
+  wx.navigateTo({
+    url: `/pages/shared/shared?img_url=${btoa(img_url)}&shareImg=${btoa(shareImg)}&companyName=${companyName}&vrLink=${btoa(vrLink)}&id=${id}`,
+  })
   },
 
 
@@ -635,7 +715,6 @@ export default {
   },
 
   invite(data) {
-    console.log('---', data)
     if (data.sender !== 'h5') return;
 
     this.setData({
@@ -677,7 +756,6 @@ export default {
     this.joinUrl()
   },
 
-  
     // 加入购物车
     addCard(data) {
       wx.navigateTo({
@@ -685,6 +763,7 @@ export default {
         // url: '/pages/goods/goods?id=' + data.data + '&oper=addCard',
       })
     },
+
     // 立即购买
     buyGoods(data) {
       wx.navigateTo({
@@ -693,18 +772,6 @@ export default {
       })
     },
 
-  // addCard(event) {
-  //   wx.navigateTo({
-  //     url: '/pages/goods/goods?id=' + event.currentTarget.dataset.id + '&oper=addCard',
-  //   })
-  // },
-
-  // buyGoods(event) {
-  //   wx.navigateTo({
-  //     url: '/pages/goods/goods?id=' + event.currentTarget.dataset.id + '&oper=buyGoods',
-  //   })
-  // },
-
 
   showCommodityFn() {
     this.setData({
@@ -954,16 +1021,32 @@ export default {
       id: id
     }).then((res) => {
       let base = res.data.brand.sceneUrl
-      console.error(base)
-      // let base = 'http://192.168.0.109:8080/grave.html' + res.data.brand.sceneUrl.substr(res.data.brand.sceneUrl.indexOf('?'))
-      // let base = 'http://192.168.0.109:8080/grave.html?m=t-9EtLj36&origin=4Dplaza"'
+      // let base = 'http://192.168.0.109:8081' + res.data.brand.sceneUrl.substr(res.data.brand.sceneUrl.indexOf('/grave.html'))
+      // let base = 'http://192.168.0.109:8080/shop.html?m=t-7Uqj9Fq&origin=fashilong'
+      res.data.brand.canShow = !!res.data.brand.canShow
+      // res.data.brand.canShow = false
       if (res.errno === 0) {
         let url = base + "&sid=" + id
         this.setData({
           id: id,
           newPicUrl: res.data.brand.appListPicUrl,
-          sceneNum: res.data.brand.sceneNum
+          sceneNum: res.data.brand.sceneNum,
+          canShow: res.data.brand.canShow,
+          contractPhone: res.data.brand.contractPhone
+          
+        })
+        if (this.data.many === void 0) {
+          this.data.many = !!res.data.brand.canShow
+        }
+        this.setData({
+          peopleCount: this.data.many ? manyCount : 5,
         })
+      
+        if (!res.data.brand.canShow) {
+          this.role = 'customer'
+        } else if (!this.options.join){
+          this.role = 'leader'
+        }
         cb(url, urlToJson(url).m, )
       }
     });

+ 5 - 0
utils/util.js

@@ -46,6 +46,11 @@ function request(url, data = {}, method = "POST", header = "application/x-www-fo
 //     });
 //   }
     return new Promise(function (resolve, reject) {
+        console.log(
+            '请求参数',
+            'url:' + url,
+            'data:', data
+        )
         wx.request({
             url: url,
             data: data,