web.js 6.3 KB

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