diff --git a/pages/im/components/conversation/messagePreview.vue b/pages/im/components/conversation/messagePreview.vue index 37dd25e..f2ac028 100644 --- a/pages/im/components/conversation/messagePreview.vue +++ b/pages/im/components/conversation/messagePreview.vue @@ -7,33 +7,36 @@ {{ user.name }}:{{ msg.content || '' }} - + {{ user.name }}:[语音] - + {{ user.name }}:[图片] - + {{ user.name }}:[表情] - + {{ user.name }}:[文件] - + {{ user.name }}:[位置] - + {{ user.name }}:[语音通话] - + {{ user.name }}:[视频通话] - + [{{ msg.message }}] - + {{ user.name }}: 撤回了一条消息 + + {{ msg.objectName }} + diff --git a/pages/im/components/sent/sentPopups.vue b/pages/im/components/sent/sentPopups.vue index 28ea991..f42e345 100644 --- a/pages/im/components/sent/sentPopups.vue +++ b/pages/im/components/sent/sentPopups.vue @@ -132,11 +132,13 @@ break; case 'location': uni.chooseLocation({ - success: (location) => { - console.log(location); - im.sentLocation(this.conversationType, this.targetId, location).then(() => { - this.success() - }) + success: (location) => { + const thumbnail = '' + // 通过 location 的经纬度,合成一张图片,再把图片的base64发送出去 + im.sentLocation(this.conversationType, this.targetId, location, thumbnail) + .then(() => { + this.success() + }) } }) break; diff --git a/pages/im/components/sent/sentText.vue b/pages/im/components/sent/sentText.vue index 7ccab83..0e745c5 100644 --- a/pages/im/components/sent/sentText.vue +++ b/pages/im/components/sent/sentText.vue @@ -59,7 +59,7 @@ RongIMLib.clearTextMessageDraft(this.conversationType, this.targetId) this.$emit('success') this.inputTxt = '' - }) + }) } }, focus() { diff --git a/pages/im/components/show/showAudio.vue b/pages/im/components/show/showAudio.vue new file mode 100644 index 0000000..323b299 --- /dev/null +++ b/pages/im/components/show/showAudio.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/pages/im/components/show/showLocation.vue b/pages/im/components/show/showLocation.vue index 80efb4c..3c14247 100644 --- a/pages/im/components/show/showLocation.vue +++ b/pages/im/components/show/showLocation.vue @@ -7,9 +7,11 @@ {{ content.customFields.name }} - {{ content.customFields.address }} + + + {{ content.customFields.address }} - + @@ -81,9 +83,16 @@ background: #FFFFFF; padding: 10rpx; - .location--name { + .location--name { + font-size: 32rpx; overflow: hidden; word-break: break-all; + } + + .location--address { + padding-bottom: 10rpx; + font-size: 24rpx; + color: $text-gray-m; } .map { diff --git a/pages/im/components/show/showNormal.vue b/pages/im/components/show/showNormal.vue index 3b7ee73..6d08131 100644 --- a/pages/im/components/show/showNormal.vue +++ b/pages/im/components/show/showNormal.vue @@ -1,11 +1,15 @@ diff --git a/pages/im/components/show/showVideo.vue b/pages/im/components/show/showVideo.vue new file mode 100644 index 0000000..606991c --- /dev/null +++ b/pages/im/components/show/showVideo.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/pages/im/index.vue b/pages/im/index.vue index 55a7a07..7bf335e 100644 --- a/pages/im/index.vue +++ b/pages/im/index.vue @@ -55,6 +55,11 @@ connectionStatus }, onLoad() { + RongIMLib.getCurrentUserId(({ + userId + }) => { + console.log('getCurrentUserId', userId); + }) // 监听新的好友申请 uni.$on('onNewContactConversation', () => { console.log('更新好友申请数量'); diff --git a/pages/im/private/call.nvue b/pages/im/private/call.nvue index bfb7884..d071fee 100644 --- a/pages/im/private/call.nvue +++ b/pages/im/private/call.nvue @@ -75,7 +75,7 @@ // 关闭扬声器 volumeOff: false, // 通话时长 - duration: 0, + duration: 0, interval: null } }, @@ -83,7 +83,7 @@ this.avatarSize = utils.rpx2px(200) this.targetId = e.targetId this.mediaType = e.mediaType - this.isCall = Boolean(e.isCall) + this.isCall = Boolean(e.isCall) // 进入页面开启外呼 if (this.isCall) { CallLib.startSingleCall(this.targetId, this.mediaType, ''); @@ -131,25 +131,9 @@ } }, methods: { - afterHangup() { - clearInterval(this.interval) - const targetId = this.targetId - const sentStatus = 30 - const messageContent = { - objectName: 'RC:InfoNtf', - userInfo: this.$store.getters.sender, - message: JSON.stringify({ - mediaType: this.mediaType, - connected: this.connected, - duration: this.duration - }) - } - const sentTime = 0 - if (this.isCall) { - IMLib.insertOutgoingMessage(1, targetId, sentStatus, messageContent, sentTime) - } else { - IMLib.insertIncomingMessage(1, targetId, targetId, sentStatus, messageContent, sentTime) - } + afterHangup() { + clearInterval(this.interval) + // duration: this.duration uni.$emit('onReceiveMessage_' + this.targetId, { targetId: this.targetId }) @@ -179,9 +163,9 @@ CallLib.setVideoView(session.targetId, this.$refs.bigVideoView.ref, 0, false) CallLib.setVideoView(session.mine.userId, this.$refs.smallVideoView.ref, 0, true) }, 200) - } - this.interval = setInterval(() => { - this.duration++ + } + this.interval = setInterval(() => { + this.duration++ }, 1000) }, // 切换主屏显示人 diff --git a/static/imgs/map.jpeg b/static/imgs/map.jpeg new file mode 100644 index 0000000..46a4fac Binary files /dev/null and b/static/imgs/map.jpeg differ diff --git a/utils/im/message.js b/utils/im/message.js index d05e88a..7bdcb55 100644 --- a/utils/im/message.js +++ b/utils/im/message.js @@ -83,7 +83,7 @@ const getGroupPendinglist = (targetId, callback) => { */ const sentText = (conversationType, targetId, content) => { return new Promise((resolve, reject) => { - const msg = { + const message = { conversationType: conversationType, targetId: String(targetId), content: { @@ -93,24 +93,10 @@ const sentText = (conversationType, targetId, content) => { } } - RongIMLib.sendMessage(msg, ({ - code, - messageId - }) => { - if (code === 0) { - if (conversationType == 3) { - RongIMLib.sendReadReceiptRequest(messageId, (res) => { - console.log('发送回执请求', res); - }) - } - resolve(messageId) - } else { - uni.showToast({ - icon: 'none', - title: '发送失败' + code - }) - reject(code) - } + sendCommonMessage(message, (messageId) => { + resolve(messageId) + }, (errCode) => { + reject(errCode) }) }) } @@ -136,11 +122,9 @@ const sentVoice = (conversationType, targetId, voiceUrl, time) => { } } RongIMLib.sendMediaMessage(msg, { - success: (messageId) => { - if (conversationType == 3) { - RongIMLib.sendReadReceiptRequest(messageId, (res) => { - console.log('发送回执请求', res); - }) + success: (messageId) => { + if (conversationType == 3) { + RongIMLib.sendReadReceiptRequest(messageId) } resolve(messageId) }, @@ -169,11 +153,9 @@ const sentImage = (conversationType, targetId, imageUrl) => { } } RongIMLib.sendMediaMessage(msg, { - success: (messageId) => { - if (conversationType == 3) { - RongIMLib.sendReadReceiptRequest(messageId, (res) => { - console.log('发送回执请求', res); - }) + success: (messageId) => { + if (conversationType == 3) { + RongIMLib.sendReadReceiptRequest(messageId) } resolve(messageId) }, @@ -201,11 +183,9 @@ const sentFile = (conversationType, targetId, fileUrl) => { } RongIMLib.sendMediaMessage(msg, { - success: (messageId) => { - if (conversationType == 3) { - RongIMLib.sendReadReceiptRequest(messageId, (res) => { - console.log('发送回执请求', res); - }) + success: (messageId) => { + if (conversationType == 3) { + RongIMLib.sendReadReceiptRequest(messageId) } resolve(messageId) }, @@ -219,48 +199,111 @@ const sentFile = (conversationType, targetId, fileUrl) => { } // 发送地理位置 -const sentLocation = (conversationType, targetId, location) => { +const sentLocation = (conversationType, targetId, location, thumbnail) => { return new Promise((resolve, reject) => { - const msg = { + const message = { conversationType: conversationType, targetId: String(targetId), - objectName: 'RC:LBSMsg', content: { customType: 2, objectName: 'RC:LBSMsg', customFields: { - name: location.name, + name: location.name, address: location.address, latitude: Number(location.latitude), - longitude: Number(location.longitude), - thumbnail: '' + longitude: Number(location.longitude), + thumbnail: thumbnail }, userInfo: store.getters.sender, } } - RongIMLib.sendMessage(msg, ({ - code, - messageId - }) => { - if (code === 0) { - if (conversationType == 3) { - RongIMLib.sendReadReceiptRequest(messageId, (res) => { - console.log('发送回执请求', res); - }) - } - resolve(messageId) - } else { - uni.showToast({ - icon: 'none', - title: '发送失败' + code - }) - reject(code) - } + sendCommonMessage(message, (messageId) => { + resolve(messageId) + }, (errCode) => { + reject(errCode) }) }) } +/** + * 发送视频通话结果 + */ +const sentVideo = (conversationType, targetId, status, time) => { + return new Promise((resolve, reject) => { + const message = { + conversationType: conversationType, + targetId: String(targetId), + content: { + customType: 2, + objectName: 'RC:VideoMsg', + customFields: { + status: status, + duration: time + }, + userInfo: store.getters.sender, + } + } + + sendCommonMessage(message, (messageId) => { + resolve(messageId) + }, (errCode) => { + reject(errCode) + }) + }) +} + +/** + * 发送语音通话结果 + */ +const sentAudio = (conversationType, targetId, status, time) => { + return new Promise((resolve, reject) => { + const message = { + conversationType: conversationType, + targetId: String(targetId), + content: { + customType: 2, + objectName: 'RC:AudioMsg', + customFields: { + status: status, + duration: time + }, + userInfo: store.getters.sender, + } + } + + sendCommonMessage(message, (messageId) => { + resolve(messageId) + }, (errCode) => { + reject(errCode) + }) + }) +} + +/** + * 发送普通消息 + */ +const sendCommonMessage = (message, success, fail) => { + RongIMLib.sendMessage(message, ({ + code, + messageId + }) => { + if (code === 0) { + if (message.conversationType == 3) { + RongIMLib.sendReadReceiptRequest(messageId) + } + + success(messageId) + } else { + uni.showToast({ + icon: 'none', + title: '发送失败' + code + }) + fail(code) + } + }) +} + export default { getMessageList, getPendingList, @@ -269,5 +312,7 @@ export default { sentVoice, sentImage, sentFile, - sentLocation + sentLocation, + sentVideo, + sentAudio }