web.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import * as SocketHandle from '../../utils/socket-handle'
  2. import { getQueryString } from './../../utils/tools'
  3. import ImSend from './../../utils/imSend'
  4. import ImApi from './../../apis/im'
  5. import CompanyApi from './../../apis/company'
  6. // pages/web/web.js
  7. const app = getApp()
  8. function randomString(e) {
  9. for (var t = "", i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", n = 0; n < e; n++)
  10. t += i.charAt(Math.floor(Math.random() * i.length));
  11. return t
  12. }
  13. Page({
  14. /**
  15. * 页面的初始数据
  16. */
  17. data: {
  18. url: "",
  19. pullUrl: [],
  20. pushUrl: '',
  21. live_base_url: "rtmp://120.24.85.77:1935/hls",
  22. socketOpts: {},
  23. room_id: '',
  24. hasBeLogin: false,
  25. vr_link: '',
  26. showWebView: true
  27. },
  28. /**
  29. * 生命周期函数--监听页面加载
  30. */
  31. onLoad: async function (options) {
  32. let { vr_link } = options
  33. vr_link = decodeURIComponent(vr_link)
  34. this.vrLink = vr_link
  35. this.isGuide = false
  36. this.scene = getQueryString(vr_link, 'm')
  37. await this.getHouseDetail(this.scene)
  38. this.role = this.companyDetail.guideId === (getApp().globalData.userinfo ? getApp().globalData.userinfo.viewerId : null) ? 'agent' : 'customer'
  39. let opts = {
  40. roomId: options.room_id || getQueryString(vr_link, 'room_id') || randomString(18),
  41. userId: getApp().globalData.userinfo.viewerId,
  42. role: this.role,
  43. scene_num: getQueryString(vr_link, 'm')
  44. }
  45. this.originUrl = `${vr_link}&room_id=${opts.roomId}${options.is_auto? `&vr=1` : ''}`
  46. this.setData({
  47. socketOpts: opts,
  48. url: this.originUrl,
  49. room_id: opts.roomId,
  50. house_id: options.house_id || '',
  51. vr_link: vr_link
  52. })
  53. this.socket = SocketHandle.initSocket(this, opts)
  54. if (app.globalData.token && !getQueryString(this.data.url, 'user_id') && this.role) {
  55. this.setData({
  56. url: `${this.originUrl}&role=${this.role}&user_id=${app.globalData.userinfo.viewerId}${this.data.hasBeLogin ? `&vr=1` : ''}`
  57. })
  58. }
  59. },
  60. onShow() {
  61. if (app.globalData.token && !getQueryString(this.data.url, 'user_id') && this.role) {
  62. this.setData({
  63. url: `${this.originUrl}&role=${this.role}&user_id=${app.globalData.userinfo.viewerId}${this.data.hasBeLogin ? `&vr=1` : ''}`
  64. })
  65. }
  66. },
  67. onUnload () {
  68. this.socket.disconnect()
  69. },
  70. countLiveUrl(user_id) {
  71. return `${this.data.live_base_url}/${this.data.room_id}_${user_id}`
  72. },
  73. startPlay(data) {
  74. if (!app.globalData.token) {
  75. wx.showToast({
  76. title: '未登录',
  77. })
  78. this.setData({
  79. hasBeLogin: true,
  80. showLogin: true
  81. })
  82. return
  83. }
  84. if (!this.hasSend) {
  85. // this.scene = data.user.scene_num
  86. this.sendVrCard()
  87. this.hasSend = true
  88. }
  89. this.setData({
  90. pushUrl: this.countLiveUrl(getApp().globalData.userinfo.viewerId)
  91. })
  92. },
  93. createLivePull({persons, roomId}) {
  94. let arr = []
  95. persons.forEach(item => {
  96. if (item.userId !== getApp().globalData.userinfo.viewerId) {
  97. arr.push(this.countLiveUrl(item.userId))
  98. }
  99. })
  100. this.setData({
  101. pullUrl: arr
  102. })
  103. },
  104. someoneLeave() {
  105. this.setData({
  106. pullUrl: [],
  107. pushUrl: ''
  108. })
  109. },
  110. sendVrCard () {
  111. if (this.companyDetail.guideId === getApp().globalData.userinfo.viewerId) {
  112. return
  113. }
  114. ImApi.addFriend(this.companyDetail.guideId).finally(() => {
  115. ImSend.sendVrMsg({title: `${this.companyDetail.companyName}`, detail_images: [this.companyDetail.vrImg], vrLink: encodeURIComponent(this.vrLink)}, this.data.room_id, this.companyDetail.guideId, true)
  116. })
  117. },
  118. getHouseDetail (scene) {
  119. return CompanyApi.getCompanyDetailByScene(scene).then(res => {
  120. console.log(JSON.parse(res.data.introduceImage), 'JSON.parse(res.data.introduceImage)[')
  121. res.data.vrImg = JSON.parse(res.data.introduceImage)[0].img
  122. this.companyDetail = res.data
  123. console.log(this.companyDetail)
  124. // house.detail_images = JSON.parse(house.detail_images)
  125. // this.setData({
  126. // house
  127. // })
  128. // return res
  129. })
  130. },
  131. onShareAppMessage: function (res) {
  132. var path =`/pages/web/web?vr_link=${encodeURIComponent(this.data.vr_link)}`;
  133. var imageurl = this.companyDetail.vrImg;
  134. return {
  135. title: this.companyDetail.companyName,
  136. path: path,
  137. imageUrl: imageurl, // 分享的封面图
  138. success: () => {
  139. // 转发成功
  140. },
  141. fail: function(err) {
  142. console.log(err)
  143. app.ShowModel('网络错误', '转发失败~');
  144. // 转发失败
  145. }
  146. }
  147. },
  148. bindmessage (e) {
  149. const img_url = e.detail.data[0]
  150. getApp().globalData.shared_img = img_url
  151. },
  152. loginSuccess () {
  153. this.onShow()
  154. this.hideLogin()
  155. },
  156. hideLogin () {
  157. this.setData({
  158. showLogin: false
  159. })
  160. },
  161. })