goeasy
This commit is contained in:
		
							parent
							
								
									2ec14481fd
								
							
						
					
					
						commit
						bd996de410
					
				| @ -74,14 +74,15 @@ export default { | ||||
|     methods:{ | ||||
|         zhibo(){ | ||||
|             this.$u.route({ | ||||
|                 url:"/pageB/zhibo/index", | ||||
|                 url:"/pages/zhibo/index", | ||||
|                params:{ | ||||
|                    url:this.url, | ||||
|                    id:this.zid | ||||
|                    id:this.zid, | ||||
|                    rid:this.rid | ||||
|                }  | ||||
|             }) | ||||
|         } | ||||
|     }, | ||||
|     props:['name','image','url','zid'] | ||||
|     props:['name','image','url','zid','rid'] | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										13
									
								
								pages.json
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								pages.json
									
									
									
									
									
								
							| @ -80,13 +80,7 @@ | ||||
| 		{ | ||||
| 			"root": "pageB", | ||||
| 			"pages": [ | ||||
| 				{ | ||||
| 					"path": "zhibo/index", | ||||
| 					"style": { | ||||
| 						"navigationStyle": "custom" | ||||
| 				 | ||||
| 					} | ||||
| 				}, | ||||
| 				{ | ||||
| 					"path": "follow/index", | ||||
| 					"style": { | ||||
| @ -871,6 +865,13 @@ | ||||
| 				"navigationStyle": "custom" | ||||
| 			} | ||||
| 		}, | ||||
| 		{ | ||||
| 			"path": "pages/zhibo/index", | ||||
| 			"style": { | ||||
| 				"navigationStyle": "custom" | ||||
| 				 | ||||
| 			} | ||||
| 		}, | ||||
| 		{ | ||||
| 			"path": "pages/index/index", | ||||
| 			"style": { | ||||
|  | ||||
| @ -39,10 +39,10 @@ | ||||
| 						<u-swiper mode="dot" :list="zhiboImageSwiper" name="adv_code" @click="clickSImage($event, 2)"></u-swiper> | ||||
| 						<view class="list"> | ||||
| 							<view> | ||||
| 								<zhiboItem v-for="item in tabLiveLists.filter((_, index) => !(index&1))" :zid="item.live_id" :key="item.live_id" :name="item.store_name" :image="item.cover_img" :url="item.url"></zhiboItem> | ||||
| 								<zhiboItem v-for="item in tabLiveLists.filter((_, index) => !(index&1))" :zid="item.live_id" :rid="item.chatroom_id" :key="item.live_id" :name="item.store_name" :image="item.cover_img" :url="item.url"></zhiboItem> | ||||
| 							</view> | ||||
| 							<view style="margin-left:20rpx"> | ||||
| 								<zhiboItem v-for="item in tabLiveLists.filter((_, index) => index&1)" :zid="item.live_id" :key="item.live_id" :name="item.store_name" :image="item.cover_img" :url="item.url"></zhiboItem> | ||||
| 								<zhiboItem v-for="item in tabLiveLists.filter((_, index) => index&1)" :zid="item.live_id" :rid="item.chatroom_id" :key="item.live_id" :name="item.store_name" :image="item.cover_img" :url="item.url"></zhiboItem> | ||||
| 							</view> | ||||
| 						</view> | ||||
| 					</view> | ||||
|  | ||||
| @ -21,7 +21,23 @@ | ||||
|     <image class="cart" src="../../static/cart.png" @click="show = true"> | ||||
| 
 | ||||
|     </image> | ||||
|     <view class="danmufasongbox" @click="danmu = true"> | ||||
|       <view class="danmufasongboxback"></view> | ||||
|       <image src="../../static/danmu.png" class="danmubianji"></image> | ||||
|       <text style="font-size:26rpx;color:#fff;margin-left:20rpx">想说点什么</text> | ||||
|     </view> | ||||
|     <image class="liketap" src="../../static/like.png" @click=""> | ||||
| 
 | ||||
|     <view class="danmuinputbox" v-if="danmu"> | ||||
|       <input type="text" focus="true" style="width:600rpx;margin-left:30rpx;font-size:26rpx" maxlength="20" @blur="danmu=false" v-model="danmutext"> | ||||
|       <view class="danmufasong" @click="sendMessage(room.MessageType.CHAT,danmutext)"> | ||||
|         <text style="font-size:24rpx;color:#fff">发送</text> | ||||
|       </view> | ||||
|     </view> | ||||
|     <div class="danmulist"> | ||||
|         <text class="danmuitem" v-for="(i,j) in danmulist" :key="j">{{i.senderNickname}}:{{i.content}}</text> | ||||
|          | ||||
|     </div> | ||||
|     <image class="closeimg" src="../../static/close.png" :style="{'top': top + 30 * rpx}" @click="back"></image> | ||||
|     </image> | ||||
|       <div class="bottom" :style="{'height':height + 'px'}" v-if="show" @click="show = false"> | ||||
| @ -242,8 +258,62 @@ | ||||
|   right: 31rpx; | ||||
|   background-color: #0f0; | ||||
| } | ||||
| .danmufasongbox{ | ||||
|   width: 308rpx; | ||||
|   height: 58rpx; | ||||
|   position: fixed; | ||||
|   left: 30rpx; | ||||
|   bottom: 30rpx; | ||||
|   flex-direction: row; | ||||
|   align-items: center; | ||||
| } | ||||
| .danmufasongboxback{ | ||||
|   position: absolute; | ||||
|   top: 0; | ||||
|   left: 0; | ||||
|   width: 308rpx; | ||||
|   height: 58rpx; | ||||
|   background-color: #0f0; | ||||
|   opacity: 0.4; | ||||
|   border-radius: 29rpx; | ||||
| } | ||||
| .danmubianji{ | ||||
|   width: 27rpx; | ||||
|   height: 32rpx; | ||||
|   margin-left: 20rpx; | ||||
| } | ||||
| .danmuinputbox{ | ||||
|   position: fixed; | ||||
|   bottom:0; | ||||
|   height: 100rpx; | ||||
|   width: 750rpx; | ||||
|   z-index: 9999; | ||||
|   background-color: #fff; | ||||
|   flex-direction: row; | ||||
|   align-items: center; | ||||
| 
 | ||||
| } | ||||
| .danmufasong{ | ||||
|   width: 85rpx; | ||||
|   height: 51rpx; | ||||
|   background-color: #FF780F; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|   border-radius: 5rpx; | ||||
| } | ||||
| .danmulist{ | ||||
|     position: fixed; | ||||
|     left: 30rpx; | ||||
|     bottom: 118rpx; | ||||
| } | ||||
| .danmuitem{ | ||||
|     font-size: 26rpx; | ||||
|     color: #fff; | ||||
|     flex-direction: column-reverse; | ||||
| } | ||||
| </style> | ||||
| <script> | ||||
| const ChatRoomService =require('../../static/chatservice'); | ||||
| export default { | ||||
|   name: "zhibo", | ||||
|   data() { | ||||
| @ -255,7 +325,12 @@ export default { | ||||
|       show:false, | ||||
|       list:[], | ||||
|       id:0, | ||||
|       info:{} | ||||
|       info:{}, | ||||
|       danmutext:"", | ||||
|       danmu:false, | ||||
|       room:{}, | ||||
|       chatRoomService:{}, | ||||
|       danmulist:[] | ||||
|     }; | ||||
|   }, | ||||
|   onLoad(a) { | ||||
| @ -323,8 +398,62 @@ export default { | ||||
|         // that.list= res.data.data | ||||
|       } | ||||
|     }) | ||||
|     //当前用户 | ||||
|      uni.request({ | ||||
|         url:"https://dmmall.sdbairui.com/api/Member/MemberInfo", | ||||
|         method:"POST", | ||||
|         header:{ | ||||
|             'Authorization' : 'Bearer' + " " + token | ||||
|         }, | ||||
|         success(res){ | ||||
|           console.log(res,111) | ||||
|           var currentUser = { | ||||
|             id : "12", | ||||
|             nickname :"123", | ||||
|             avatar: "1223" | ||||
|           }; | ||||
| 
 | ||||
|           var room = { | ||||
|               id : a.rid + "", | ||||
|               name : a.rid + "" | ||||
|           }; | ||||
|           console.log(room,currentUser) | ||||
|           //构造chatRoomService | ||||
| 			      that.chatRoomService = new ChatRoomService(room, currentUser); | ||||
|             that.chatRoomService.initialWhenNewMessage(that.whenNewMessage); | ||||
|             that.chatRoomService.connectGoEasyIM(); | ||||
| 
 | ||||
| 			//获取当前聊天室数据 | ||||
|             that.room = that.chatRoomService.room; | ||||
|         } | ||||
|       }) | ||||
|       | ||||
|   }, | ||||
|   methods:{ | ||||
|     sendMessage (messageType, content) {//发送消息 | ||||
|     console.log(123) | ||||
| 				if(content == "" && messageType == 0) return; | ||||
| 				var message = { | ||||
| 					senderNickname : this.room.currentUser.nickname , | ||||
| 					type : messageType, | ||||
| 					content : content | ||||
| 				} | ||||
| 				this.chatRoomService.sendMessages(this.room.id, message); | ||||
| 				this.danmutext = "" | ||||
| 			}, | ||||
|     whenNewMessage (message) {//新消息监听 | ||||
|       // if(message.type == this.room.MessageType.PROP){ | ||||
|       // 	this.propAnimation(parseInt(message.content)) | ||||
|       // } | ||||
|       // setTimeout(() => { | ||||
|       // 	this.contentPosition = 'message-box'+(this.room.messages.length-1); | ||||
|               // }, 300) | ||||
|       console.log(message) | ||||
|               this.danmulist.push(message) | ||||
|               if(this.danmulist.length > 7){ | ||||
|                   this.danmulist = this.danmulist.slice(this.danmulist.length - 7) | ||||
|               } | ||||
|     }, | ||||
|     back(){ | ||||
|       uni.navigateBack({ | ||||
|           delta: 1 | ||||
							
								
								
									
										276
									
								
								static/chatservice.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								static/chatservice.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,276 @@ | ||||
| /* | ||||
|  * @Author: jack.lu | ||||
|  * @Date: 2020-4-21 10:10:20 | ||||
|  * @Last Modified by: jack.lu | ||||
|  * @Last Modified time: 2020-4-21 15:01:41 | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| import GoEasyIM from './goeasy-im-1.0.9.js' | ||||
| 
 | ||||
| //用户
 | ||||
| function User(id, nickname, avatar) { | ||||
|     this.id = id; | ||||
|     this.nickname = nickname; | ||||
|     this.avatar = avatar; | ||||
| } | ||||
| 
 | ||||
| //消息
 | ||||
| function Message(senderUserId, senderNickname, content, type) { | ||||
|     this.senderNickname = senderNickname; | ||||
|     this.senderUserId = senderUserId; | ||||
|     this.content = content; | ||||
|     this.type = type | ||||
| } | ||||
| 
 | ||||
| //聊天室
 | ||||
| function Room(id, name, currentUser) { | ||||
| 
 | ||||
|     this.id = id; | ||||
|     this.name = name; | ||||
|     this.currentUser = currentUser; | ||||
| 
 | ||||
|     this.onlineUsers = { | ||||
|         count: 0, | ||||
|         users: [] | ||||
|     }; | ||||
| 
 | ||||
|     this.messages = []; | ||||
| 
 | ||||
|     this.MessageType = { | ||||
|         CHAT: 0,//文字聊天
 | ||||
|         PROP: 1//道具
 | ||||
|     }; | ||||
| 
 | ||||
|     this.Prop = { | ||||
|         HEART: 0,//桃心
 | ||||
|         ROCKET: 1//火箭
 | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| function ChatRoomService(room, user) { | ||||
|     this.room = new Room(room.id, room.name, user); | ||||
|     this.whenNewMessage = function () { | ||||
| 
 | ||||
|     }; | ||||
|     this.whenOnlineUserChange = function () { | ||||
| 
 | ||||
|     }; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //获取实例
 | ||||
| ChatRoomService.prototype.connectGoEasyIM = function () { | ||||
|     this.im = GoEasyIM.getInstance({ | ||||
|         appkey: 'BC-453aa755c4ea48148abefc55a86df283', | ||||
|         host: 'hangzhou.goeasy.io' | ||||
|     }); | ||||
| 
 | ||||
|     //监听网络连接成功
 | ||||
|     this.im.on(GoEasyIM.EVENT.CONNECTED, () => { | ||||
|         console.log('GoEasyIM网络连接成功'); | ||||
|         //连接成功后,更新在线用户数和用户头像
 | ||||
|         this.initialOnlineUsers(this.room.id); | ||||
|     }); | ||||
| 
 | ||||
|     //监听网络连接断开
 | ||||
|     this.im.on(GoEasyIM.EVENT.DISCONNECTED, () => { | ||||
|         console.log('GoEasyIM网络断开') | ||||
|     }); | ||||
| 
 | ||||
|     //监听上下线提醒
 | ||||
|     this.listenerGroupPresence(); | ||||
| 
 | ||||
|     //监听新消息
 | ||||
|     this.listenerNewMessage(); | ||||
| 
 | ||||
|     var currentUser = this.room.currentUser; | ||||
|     //连接GoEasyIM
 | ||||
|     this.im.connect({ | ||||
|         id: currentUser.id, | ||||
|         data: { | ||||
|             avatar: currentUser.avatar, | ||||
|             nickname: currentUser.nickname | ||||
|         } | ||||
|     }).then(() => { | ||||
|         console.log('连接成功'); | ||||
|         this.initialChatHistory(this.room.id); | ||||
| 
 | ||||
|         //订阅用户上下线事件
 | ||||
|         this.subscribePresence(this.room.id); | ||||
|         //订阅聊天室消息
 | ||||
|         this.subscribeRoomMessage(this.room.id); | ||||
| 
 | ||||
| 
 | ||||
|     }).catch(e => { | ||||
|         console.log(e); | ||||
|         console.log('连接失败'); | ||||
|     }); | ||||
| }; | ||||
| 
 | ||||
| ChatRoomService.prototype.initialWhenNewMessage = function (whenNewMessage) { | ||||
|     this.whenNewMessage = whenNewMessage; | ||||
| }; | ||||
| 
 | ||||
| ChatRoomService.prototype.initialWhenOnlineUserChange = function (whenOnlineUserChange) { | ||||
|     this.whenOnlineUserChange = whenOnlineUserChange; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| //监听新消息
 | ||||
| ChatRoomService.prototype.listenerNewMessage = function () { | ||||
| 
 | ||||
|     this.im.on(GoEasyIM.EVENT.GROUP_MESSAGE_RECEIVED, (message) => { | ||||
| 		var content = JSON.parse(message.payload.text); | ||||
|         this.addNewMessage(message); | ||||
|         this.whenNewMessage(content); | ||||
|     }) | ||||
| } | ||||
| 
 | ||||
| ChatRoomService.prototype.addNewMessage = function (message) { | ||||
|     var content = JSON.parse(message.payload.text); | ||||
|     let messageContent = ""; | ||||
|     //聊天消息
 | ||||
|     if (content.type == this.room.MessageType.CHAT) { | ||||
|         messageContent = content.content; | ||||
|     } | ||||
|     //道具消息
 | ||||
|     if (content.type == this.room.MessageType.PROP) { | ||||
|         if (content.content == this.room.Prop.ROCKET) { | ||||
|             messageContent = "送出了一枚大火箭"; | ||||
|         } | ||||
|         if (content.content == this.room.Prop.HEART) { | ||||
|             messageContent = "送出了一个大大的比心"; | ||||
|         } | ||||
|     } | ||||
|     //添加消息
 | ||||
|     let newMessage = new Message(message.senderId, content.senderNickname, messageContent); | ||||
|     this.room.messages.push(newMessage); | ||||
| }; | ||||
| 
 | ||||
| //监听用户上下线
 | ||||
| ChatRoomService.prototype.listenerGroupPresence = function () { | ||||
|     this.im.on(GoEasyIM.EVENT.GROUP_PRESENCE, (event) => { | ||||
|         //更新在线用户数
 | ||||
|         this.room.onlineUsers.count = event.groupOnlineCount; | ||||
| 
 | ||||
|         if (event.action == 'join' || event.action == 'online') { | ||||
|             let userData = JSON.parse(event.userData); | ||||
|             //添加新用户
 | ||||
|             let user = new User(event.userId, userData.nickname, userData.avatar); | ||||
| 
 | ||||
|             //添加在线用户,避免用户重复
 | ||||
|             if (!this.room.onlineUsers.users.find(item => item.id == event.userId)) { | ||||
|                 this.room.onlineUsers.users.push(user); | ||||
|             } | ||||
| 
 | ||||
|             //添加进入房间的消息
 | ||||
|             let message = new Message(event.userId, userData.nickname, " 进入房间", this.room.MessageType.CHAT); | ||||
|             this.room.messages.push(message); | ||||
|         } else { | ||||
|             let offlineUserIndex = this.room.onlineUsers.users.findIndex(item => item.id == event.userId); | ||||
|             if (offlineUserIndex > -1) { | ||||
|                 //将离开的用户从onlineUsers中删掉
 | ||||
|                 let offlineUser = Object.assign(this.room.onlineUsers.users[offlineUserIndex]); | ||||
|                 this.room.onlineUsers.users.splice(offlineUserIndex, 1); | ||||
|                 //添加离开消息
 | ||||
|                 let message = new Message(offlineUser.id, offlineUser.nickname, " 离开房间", this.room.MessageType.CHAT) | ||||
|                 this.room.messages.push(message); | ||||
|             } | ||||
|         } | ||||
|         this.whenOnlineUserChange(this.room.onlineUsers); | ||||
|     }) | ||||
| }; | ||||
| 
 | ||||
| //查询和初始化在线用户列表和在线用户数
 | ||||
| ChatRoomService.prototype.initialOnlineUsers = function (roomId) { | ||||
|     let self = this; | ||||
| 
 | ||||
|     //查询最新上线的用户列表
 | ||||
|     this.im.groupHereNow(roomId) | ||||
|         .then(result => { | ||||
|             if (result.code == 200) { | ||||
|                 let users = []; | ||||
|                 result.content && result.content.map(function (onlineUser) { | ||||
|                     let userData = JSON.parse(onlineUser.userData); | ||||
|                     let user = new User(onlineUser.userId, userData.nickname, userData.avatar); | ||||
|                     users.push(user); | ||||
|                 }); | ||||
|                 self.room.onlineUsers = { | ||||
|                     users: users | ||||
|                 }; | ||||
|             } | ||||
|         }).catch(e => { | ||||
|         if (e.code == 401) { | ||||
|             console.log("您还没有开通用户在线状态提醒,登录goeasy->我的应用->查看详情->高级功能,自助开通."); | ||||
|         } else { | ||||
|             console.log(e); | ||||
|         } | ||||
|     }); | ||||
|     //获取聊天室在线用户数
 | ||||
|     this.im.groupOnlineCount(roomId) | ||||
|         .then(result => { | ||||
|             this.room.onlineUsers.count = result.content.onlineCount; | ||||
|         }).catch(e => { | ||||
|         console.log(e) | ||||
|     }) | ||||
| }; | ||||
| 
 | ||||
| //订阅聊天室成员上下线
 | ||||
| ChatRoomService.prototype.subscribePresence = function (roomId) { | ||||
|     this.im.subscribeGroupPresence([roomId]) | ||||
|         .then(() => { | ||||
|             console.log('成员上下线订阅成功') | ||||
|         }).catch(e => { | ||||
|         console.log(e) | ||||
|     }) | ||||
| } | ||||
| 
 | ||||
| //订阅聊天室消息
 | ||||
| ChatRoomService.prototype.subscribeRoomMessage = function (roomId) { | ||||
|     this.im.subscribeGroup([roomId]) | ||||
|         .then(result => { | ||||
|             console.log('消息订阅成功') | ||||
|         }).catch(e => { | ||||
|         console.log(e) | ||||
|     }) | ||||
| } | ||||
| 
 | ||||
| //历史消息
 | ||||
| ChatRoomService.prototype.initialChatHistory = function (roomId) { | ||||
|     var self = this; | ||||
|     this.im.history({ | ||||
|         groupId: roomId | ||||
|     }).then(res => { | ||||
|         res.content.forEach(function (message) { | ||||
|             self.addNewMessage(message); | ||||
|         }) | ||||
|     }).catch(function (error) { | ||||
|         if (error.code == 401) { | ||||
|             console.log("您还没有开通历史消息的权限,登录goeasy->我的应用->查看详情->高级功能,自助开通."); | ||||
|         } else { | ||||
|             console.log(error); | ||||
|         } | ||||
|     }) | ||||
| }; | ||||
| 
 | ||||
| //发送消息
 | ||||
| ChatRoomService.prototype.sendMessages = function (roomId, content) { | ||||
| 	var contentMessage = { | ||||
| 		text: JSON.stringify(content) | ||||
| 	}; | ||||
| 	let message = this.im.createTextMessage(contentMessage); | ||||
|     this.im.sendGroupMessage(roomId, message) | ||||
|         .then(() => { | ||||
|             console.log('消息发送成功') | ||||
|         }).catch(e => { | ||||
|         console.log(e); | ||||
|     }) | ||||
| }; | ||||
| 
 | ||||
| //退出聊天室
 | ||||
| ChatRoomService.prototype.quitRoom = function (roomId) { | ||||
|     this.im.disconnect() | ||||
| }; | ||||
| 
 | ||||
| module.exports = ChatRoomService; | ||||
							
								
								
									
										
											BIN
										
									
								
								static/danmu.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/danmu.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										2
									
								
								static/goeasy-im-1.0.9.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								static/goeasy-im-1.0.9.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user