web.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. import * as SocketHandle from '../../utils/socket-handle'
  2. import {
  3. getQueryString
  4. } from './../../utils/tools'
  5. import ImSend from './../../utils/imSend'
  6. import ImApi from './../../apis/im'
  7. import CompanyApi from './../../apis/company'
  8. // pages/web/web.js
  9. const app = getApp()
  10. function randomString(e) {
  11. for (var t = "", i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", n = 0; n < e; n++)
  12. t += i.charAt(Math.floor(Math.random() * i.length));
  13. return t
  14. }
  15. Page({
  16. /**
  17. * 页面的初始数据
  18. */
  19. data: {
  20. url: "",
  21. pullUrl: [],
  22. pushUrl: '',
  23. live_base_url: "rtmp://120.24.85.77:1935/hls",
  24. socketOpts: {},
  25. room_id: '',
  26. hasBeLogin: false,
  27. vr_link: '',
  28. showWebView: true
  29. },
  30. /**
  31. * 生命周期函数--监听页面加载
  32. */
  33. onLoad: async function (options) {
  34. let {
  35. vr_link
  36. } = options
  37. console.log(options)
  38. vr_link = decodeURIComponent(vr_link)
  39. this.vrLink = vr_link
  40. this.isGuide = false
  41. this.scene = getQueryString(vr_link, 'm')
  42. this.role = 'customer'
  43. if (this.scene) {
  44. await this.getHouseDetail(this.scene)
  45. this.role = this.companyDetail.guideId === (getApp().globalData.userinfo ? getApp().globalData.userinfo.viewerId : null) ? 'agent' : 'customer'
  46. }
  47. let opts = {
  48. roomId: options.room_id || getQueryString(vr_link, 'room_id') || randomString(18),
  49. userId: getApp().globalData.userinfo.viewerId,
  50. role: this.role,
  51. scene_num: getQueryString(vr_link, 'm')
  52. }
  53. this.roomId = opts.roomId
  54. this.originUrl = `${vr_link}&room_id=${opts.roomId}${options.is_auto? `&vr=1` : ''}`
  55. this.setData({
  56. socketOpts: opts,
  57. url: this.originUrl,
  58. room_id: opts.roomId,
  59. house_id: options.house_id || '',
  60. vr_link: vr_link
  61. })
  62. this.socket = SocketHandle.initSocket(this, opts)
  63. if (app.globalData.token && !getQueryString(this.data.url, 'user_id') && this.role) {
  64. this.setData({
  65. url: `${this.originUrl}&role=${this.role}&user_id=${app.globalData.userinfo.viewerId}${this.data.hasBeLogin ? `&vr=1` : ''}`
  66. })
  67. }
  68. },
  69. onShow() {
  70. if (app.globalData.token && !getQueryString(this.data.url, 'user_id') && this.role) {
  71. this.setData({
  72. url: `${this.originUrl}&role=${this.role}&user_id=${app.globalData.userinfo.viewerId}${this.data.hasBeLogin ? `&vr=1` : ''}`
  73. })
  74. }
  75. },
  76. onUnload() {
  77. this.socket.disconnect()
  78. },
  79. countLiveUrl(user_id) {
  80. return `${this.data.live_base_url}/${this.data.room_id}_${user_id}`
  81. },
  82. startPlay(data) {
  83. if (!app.globalData.token) {
  84. wx.showToast({
  85. title: '未登录',
  86. })
  87. this.setData({
  88. hasBeLogin: true,
  89. showLogin: true
  90. })
  91. return
  92. }
  93. if (!this.hasSend) {
  94. // this.scene = data.user.scene_num
  95. this.sendVrCard()
  96. this.hasSend = true
  97. }
  98. this.socket.emit('getUserSig', {
  99. userId: getApp().globalData.userinfo.viewerId
  100. })
  101. },
  102. createLivePull({
  103. persons,
  104. roomId
  105. }) {
  106. let arr = []
  107. persons.forEach(item => {
  108. if (item.userId !== getApp().globalData.userinfo.viewerId) {
  109. arr.push(this.countLiveUrl(item.userId))
  110. }
  111. })
  112. this.setData({
  113. pullUrl: arr
  114. })
  115. this.enterAudioRoom()
  116. },
  117. someoneLeave() {
  118. this.setData({
  119. pullUrl: [],
  120. pushUrl: ''
  121. })
  122. },
  123. sendVrCard() {
  124. if (this.companyDetail.guideId === getApp().globalData.userinfo.viewerId) {
  125. return
  126. }
  127. ImApi.addFriend(this.companyDetail.guideId).finally(() => {
  128. ImSend.sendVrMsg({
  129. title: `${this.companyDetail.companyName}`,
  130. detail_images: [this.companyDetail.vrImg],
  131. vrLink: encodeURIComponent(this.vrLink)
  132. }, this.data.room_id, this.companyDetail.guideId, true)
  133. })
  134. },
  135. getHouseDetail(scene) {
  136. return CompanyApi.getCompanyDetailByScene(scene).then(res => {
  137. console.log(JSON.parse(res.data.introduceImage), 'JSON.parse(res.data.introduceImage)[')
  138. res.data.vrImg = JSON.parse(res.data.introduceImage)[0].img
  139. this.companyDetail = res.data
  140. })
  141. },
  142. onShareAppMessage: function (res) {
  143. var path = `/pages/web/web?vr_link=${encodeURIComponent(this.data.vr_link)}`;
  144. var imageurl = this.companyDetail.vrImg;
  145. return {
  146. title: this.companyDetail.companyName,
  147. path: path,
  148. imageUrl: imageurl, // 分享的封面图
  149. success: () => {
  150. // 转发成功
  151. },
  152. fail: function (err) {
  153. console.log(err)
  154. app.ShowModel('网络错误', '转发失败~');
  155. // 转发失败
  156. }
  157. }
  158. },
  159. bindmessage(e) {
  160. const img_url = e.detail.data[0]
  161. getApp().globalData.shared_img = img_url
  162. },
  163. loginSuccess() {
  164. this.onShow()
  165. this.hideLogin()
  166. },
  167. hideLogin() {
  168. this.setData({
  169. showLogin: false
  170. })
  171. },
  172. enterAudioRoom(sig) {
  173. // index.js
  174. if (this.hasEnter) {
  175. return
  176. }
  177. this.setData({
  178. trtcConfig: {
  179. sdkAppID: '1400393268', // 开通实时音视频服务创建应用后分配的 SDKAppID
  180. userID: getApp().globalData.userinfo.viewerId, // 用户 ID,可以由您的帐号系统指定
  181. userSig: sig, // 身份签名,相当于登录密码的作用
  182. template: 'custom', // 画面排版模式
  183. }
  184. }, () => {
  185. let trtcRoomContext = this.selectComponent('#trtcroom')
  186. let EVENT = trtcRoomContext.EVENT
  187. if (trtcRoomContext) {
  188. trtcRoomContext.on(EVENT.LOCAL_JOIN, (event) => {
  189. // 进房成功后发布本地音频流和视频流
  190. trtcRoomContext.publishLocalAudio()
  191. })
  192. // 监听远端用户的视频流的变更事件
  193. trtcRoomContext.on(EVENT.REMOTE_VIDEO_ADD, (event) => {
  194. // 订阅(即播放)远端用户的视频流
  195. let userID = event.data.userID
  196. let streamType = event.data.streamType // 'main' or 'aux'
  197. trtcRoomContext.subscribeRemoteVideo({
  198. userID: userID,
  199. streamType: streamType
  200. })
  201. })
  202. // 监听远端用户的音频流的变更事件
  203. trtcRoomContext.on(EVENT.REMOTE_AUDIO_ADD, (event) => {
  204. // 订阅(即播放)远端用户的音频流
  205. let userID = event.data.userID
  206. trtcRoomContext.subscribeRemoteAudio({
  207. userID: userID
  208. })
  209. })
  210. trtcRoomContext.enterRoom({
  211. roomID: this.roomId
  212. }).then(() => {
  213. this.hasEnter = true
  214. }).catch((res) => {
  215. console.error('room joinRoom 进房失败:', res)
  216. })
  217. }
  218. })
  219. }
  220. })