diff --git a/components/GoEasyAudioPlayer/GoEasyAudioPlayer.vue b/components/GoEasyAudioPlayer/GoEasyAudioPlayer.vue new file mode 100644 index 0000000..4b72cf0 --- /dev/null +++ b/components/GoEasyAudioPlayer/GoEasyAudioPlayer.vue @@ -0,0 +1,62 @@ + + + + + {{Math.ceil(duration) || 0}} + + + + + + + \ No newline at end of file diff --git a/components/GoEasyAudioPlayer/images/play.gif b/components/GoEasyAudioPlayer/images/play.gif new file mode 100644 index 0000000..e367c87 Binary files /dev/null and b/components/GoEasyAudioPlayer/images/play.gif differ diff --git a/components/GoEasyAudioPlayer/images/voice.png b/components/GoEasyAudioPlayer/images/voice.png new file mode 100644 index 0000000..93d6090 Binary files /dev/null and b/components/GoEasyAudioPlayer/images/voice.png differ diff --git a/components/GoEasyVideoPlayer/GoEasyVideoPlayer.vue b/components/GoEasyVideoPlayer/GoEasyVideoPlayer.vue new file mode 100644 index 0000000..450d6f1 --- /dev/null +++ b/components/GoEasyVideoPlayer/GoEasyVideoPlayer.vue @@ -0,0 +1,55 @@ + + + + + + + + \ No newline at end of file diff --git a/components/GoEasyVideoPlayer/images/play.png b/components/GoEasyVideoPlayer/images/play.png new file mode 100644 index 0000000..0e6338e Binary files /dev/null and b/components/GoEasyVideoPlayer/images/play.png differ diff --git a/main.js b/main.js index ff7a4ee..93a14ed 100644 --- a/main.js +++ b/main.js @@ -1,11 +1,12 @@ import Vue from 'vue' import App from './App' - +import IMService from './static/imservice.js' import uView from "uview-ui"; Vue.use(uView); Vue.config.productionTip = false - +Vue.prototype.imService = new IMService(); +Vue.prototype.a = 1; App.mpType = 'app' const app = new Vue({ diff --git a/pages.json b/pages.json index d60307e..9643366 100644 --- a/pages.json +++ b/pages.json @@ -37,6 +37,15 @@ } } }, + { + "path": "pages/messages/privateChat", + "style": { + "navigationBarTitleText": "uni-app", + "app-plus": { + "titleNView": true + } + } + }, { "path": "pages/index/index", "style": { @@ -59,17 +68,17 @@ } } } - }, - { - "path": "pages/index/otherdetails", - "style": { - "navigationBarTitleText": "试穿订单详情", - "app-plus": { - "titleNView": { - "titleColor": "#333333" - } - } - } + }, + { + "path": "pages/index/otherdetails", + "style": { + "navigationBarTitleText": "试穿订单详情", + "app-plus": { + "titleNView": { + "titleColor": "#333333" + } + } + } }, { "path": "pages/release/video", @@ -146,7 +155,7 @@ "titleColor": "#333333", "buttons": [ //原生标题栏按钮配置, { - "text": "保存", + "text": "保存", "fontSize":"14px" } ] @@ -285,4 +294,4 @@ }] } -} +} diff --git a/pages/index/index.vue b/pages/index/index.vue index 9c844dc..ee6fa34 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -150,6 +150,10 @@ export default { this.getswiper(); // 获取可投诉列表 this.getcarlist(); + const user = uni.getStorageSync('userinfo'); + console.log(user) + this.imService.login(user.userId,user.member_avatar,"") + this.imService.connectIM() // 订单状态: 0:全部 1已付款未发货 2已发货 3已完成 4申请退款/退货 5已退款/退货 6拒绝退款/退货 }, onShow() { diff --git a/pages/login/login.vue b/pages/login/login.vue index 6d79c8c..cbf53bf 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -99,7 +99,7 @@ export default { return } // 清除本地存储才可以正常登陆(具体原因没有仔细检查) - uni.clearStorage(); + // uni.clearStorage(); // 账号登录1达人0商家 if(this.state==1){ this.$u.api.login({ member_name: this.zhanghaoA, member_password: this.mimaA }).then(res => { diff --git a/pages/messages/messagesList.vue b/pages/messages/messagesList.vue index 62c09ad..d03676f 100644 --- a/pages/messages/messagesList.vue +++ b/pages/messages/messagesList.vue @@ -1,19 +1,20 @@ - + - + - + {{item.name}} - {{item.content}} + {{item.text}} {{item.time}} + @@ -23,37 +24,52 @@ data() { return { keyword: '搜索', - list: [{ - name: '瘦瘦', - content: "木糖少女小紫薯西装领连衣裙夏季新款女装装领连衣裙夏季装领连衣裙夏季装领连衣裙夏季夏收腰格子格纹裙子", - url: '../../static/image/tosign/tosigin(5).png', - id : '1', - time : '10:15' - }, - { - name: '瘦瘦', - content: "木糖少女小紫薯西装领连衣裙夏季新款女装装领连衣裙夏季装领连衣裙夏季装领连衣裙夏季夏收腰格子格纹裙子", - url: '../../static/image/tosign/tosigin(5).png', - id : '1', - time : '10:15' - }, - { - name: '瘦瘦', - content: "木糖少女小紫薯西装领连衣裙夏季新款女装装领连衣裙夏季装领连衣裙夏季装领连衣裙夏季夏收腰格子格纹裙子", - url: '../../static/image/tosign/tosigin(5).png', - id : '1', - time : '10:15' - }, + list: [ + ], }; }, methods: { + gochat(id){ + console.log(id) + this.$u.route({ + url:"/pages/messages/privateChat", + params:{ + id:JSON.stringify(id) + } + + }) + }, + onFriendListChange(onlineFriends) { + //todo:比较垃圾的处理方式,因为Uniapp的基于MAP的双向绑定在H5端不稳定,H5端偶尔会抽风 + // 下边这一行删掉,有时候页面可以更新,有时候不行,大家有优雅的方式,也欢迎跟我们沟通 + console.log(onlineFriends,121212) + this.information_dl = onlineFriends; + + this.$forceUpdate(); + }, + }, + onShow(){ + this.list = this.imService.friends; + this.imService.onFriendListChange=this.onFriendListChange; + }, + onLoad(){ + this.list = this.imService.friends; } }; diff --git a/static/images/Arrow-Left.png b/static/images/Arrow-Left.png new file mode 100644 index 0000000..66a11c5 Binary files /dev/null and b/static/images/Arrow-Left.png differ diff --git a/static/images/Avatar-1.png b/static/images/Avatar-1.png new file mode 100644 index 0000000..fa57b53 Binary files /dev/null and b/static/images/Avatar-1.png differ diff --git a/static/images/Avatar-2.png b/static/images/Avatar-2.png new file mode 100644 index 0000000..7ab92a8 Binary files /dev/null and b/static/images/Avatar-2.png differ diff --git a/static/images/Avatar-3.png b/static/images/Avatar-3.png new file mode 100644 index 0000000..eeaed52 Binary files /dev/null and b/static/images/Avatar-3.png differ diff --git a/static/images/Avatar-4.png b/static/images/Avatar-4.png new file mode 100644 index 0000000..df26452 Binary files /dev/null and b/static/images/Avatar-4.png differ diff --git a/static/images/GoEasyDemo-Vue-IM-Chat-gif.gif b/static/images/GoEasyDemo-Vue-IM-Chat-gif.gif new file mode 100644 index 0000000..cf2c56d Binary files /dev/null and b/static/images/GoEasyDemo-Vue-IM-Chat-gif.gif differ diff --git a/static/images/Vector.png b/static/images/Vector.png new file mode 100644 index 0000000..5b6c3d7 Binary files /dev/null and b/static/images/Vector.png differ diff --git a/static/images/file-content.png b/static/images/file-content.png new file mode 100644 index 0000000..306f4fd Binary files /dev/null and b/static/images/file-content.png differ diff --git a/static/images/file-icon.png b/static/images/file-icon.png new file mode 100644 index 0000000..c0d6651 Binary files /dev/null and b/static/images/file-icon.png differ diff --git a/static/images/file.png b/static/images/file.png new file mode 100644 index 0000000..0afabe5 Binary files /dev/null and b/static/images/file.png differ diff --git a/static/images/green-dot.png b/static/images/green-dot.png new file mode 100644 index 0000000..3b84707 Binary files /dev/null and b/static/images/green-dot.png differ diff --git a/static/images/group-icon.png b/static/images/group-icon.png new file mode 100644 index 0000000..5d1bb15 Binary files /dev/null and b/static/images/group-icon.png differ diff --git a/static/images/group.png b/static/images/group.png new file mode 100644 index 0000000..90181ab Binary files /dev/null and b/static/images/group.png differ diff --git a/static/images/im.gif b/static/images/im.gif new file mode 100644 index 0000000..99fe9d1 Binary files /dev/null and b/static/images/im.gif differ diff --git a/static/images/jianpan.png b/static/images/jianpan.png new file mode 100644 index 0000000..260e6f3 Binary files /dev/null and b/static/images/jianpan.png differ diff --git a/static/images/loading.gif b/static/images/loading.gif new file mode 100644 index 0000000..53edda2 Binary files /dev/null and b/static/images/loading.gif differ diff --git a/static/images/logo.png b/static/images/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/static/images/logo.png differ diff --git a/static/images/pending.gif b/static/images/pending.gif new file mode 100644 index 0000000..e846e1d Binary files /dev/null and b/static/images/pending.gif differ diff --git a/static/images/play.png b/static/images/play.png new file mode 100644 index 0000000..0e6338e Binary files /dev/null and b/static/images/play.png differ diff --git a/static/images/record-appearance-icon.png b/static/images/record-appearance-icon.png new file mode 100644 index 0000000..e77eed5 Binary files /dev/null and b/static/images/record-appearance-icon.png differ diff --git a/static/images/recording-loading.gif b/static/images/recording-loading.gif new file mode 100644 index 0000000..3c8c141 Binary files /dev/null and b/static/images/recording-loading.gif differ diff --git a/static/images/vedio.png b/static/images/vedio.png new file mode 100644 index 0000000..e7c3234 Binary files /dev/null and b/static/images/vedio.png differ diff --git a/static/imservice.js b/static/imservice.js new file mode 100644 index 0000000..288397f --- /dev/null +++ b/static/imservice.js @@ -0,0 +1,610 @@ +/* + * @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'; +import restApi from './restapi'; + +function Friend(uuid, name, avatar,time = "", text = "",date = "",unReadMessage = 0) { + this.uuid = uuid; + this.name = name; + this.avatar = avatar; + this.online = false; + this.unReadMessage = parseInt(unReadMessage); + this.text = text; + this.time = time; + this.date = date +} + +function Group(uuid, name, avatar) { + this.uuid = uuid; + this.name = name; + this.avatar = avatar; + this.unReadMessage = 0; +} + +function CurrentUser(uuid, name, avatar) { + this.uuid = uuid; + this.name = name; + this.avatar = avatar; +} + +function IMService() { + this.im = GoEasyIM.getInstance({ + host:'hangzhou.goeasy.io',//qos=1 + appkey:'BC-453aa755c4ea48148abefc55a86df283' + }); + //当前“我” + this.currentUser = null; + //我的好友 + this.friends = {}; + this.friendsarr = []; + //我的群 + this.groups = {}; + //私聊消息记录,map格式,每个好友对应一个数组 + this.privateMessages = {}; + + //群聊消息记录,map格式,每个群对应一个数组 + this.groupMessages = {}; + + /* + * 监听器们 + * + * 可以在页面里,根据需求,重写以下监听器, + * 便于当各种事件触发时,页面能够执行对应的响应 + * + */ + //收到一条私聊消息 + this.onNewPrivateMessageReceive = function (friendId, message) {}; + //完成一次私聊历史加载 + this.onPrivateHistoryLoad = function (friendId, messages) {}; + //收到一条群聊消息 + this.onNewGroupMessageReceive = function (groupId, message) {}; + //完成一次群聊历史加载 + this.onGroupHistoryLoad = function (groupId, messages) {}; + //好友列表发生改变 + this.onFriendListChange = function (friends) {}; + //群列表发生改变 + this.onGroupListChange = function (groups) {}; +} + +//登录 +IMService.prototype.login = function (uuid, name, avatar) { + //初始化当前用户 + this.currentUser = new CurrentUser(uuid, name, avatar); + //初始化联系人信息,包括群 + this.initialContacts(); + return true; + +}; + +//初始化联系人信息 +IMService.prototype.initialContacts = function (friendList) { + //查询并初始化好友信息 + // let friendList = restApi.findFriends(this.currentUser); + let value = uni.getStorageSync('imlist'); + console.log(value) + if(value != undefined && !value){ + return ; + } + value = JSON.parse(value) + let that = this + console.log(value) + for(let i of value){ + const token = uni.getStorageSync('token'); + console.log(token) + uni.request({ + url:"https://dmmall.sdbairui.com/api/Specialci/getAtwillUserInfo", + data:{ + userId:i[0] + }, + method:"POST", + header:{ + "Authorization" : 'Bearer' + " " + token + }, + success(res){ + console.log(res) + that.friends[i[0]] = new Friend(res.data.data.member_id, res.data.data.member_nickname, res.data.data.member_avatar,i[1],i[2],i[3]); + console.log(that.friends) + let sorts = function (friends){ + let paixu = function (a,b){ + if(a.date > b.date){ + return 0; + }else{ + return 1; + } + + } + friends.sort(paixu) + + } + that.friendsarr = [] + for(let i in that.friends){ + console.log(i) + that.friendsarr.push(that.friends[i]) + } + sorts(that.friendsarr) + console.log("历史记录") + that.onFriendListChange(that.friends); + + } + }) + } + //将用户列表初始化为一个map,便于后续根据friendId得到friend + // friendList.map(friend => { + // this.friends[friend.uuid] = new Friend(friend.uuid, friend.name, friend.avatar); + // }); + + //查询并初始化与自己相关的群信息 + // let groupList = restApi.findGroups(this.currentUser); + + // //将群列表初始化为一个map,方便后续根据groupId索引 + // groupList.map(group => { + // this.groups[group.uuid] = new Group(group.uuid, group.name, group.avatar); + // }); +}; + +//获取群成员 +IMService.prototype.getGroupMembers = function (groupId) { + let members = restApi.findGroupMembers(groupId); + let membersMap = {}; + members.map(item => { + membersMap[item.uuid] = item + }); + return membersMap; +}; + +IMService.prototype.getGroupMessages = function (groupId) { + if (!this.groupMessages[groupId]) { + this.groupMessages[groupId] = { + sentMessages:[], + pendingMessages:[] + }; + } + return this.groupMessages[groupId] +}; + + +IMService.prototype.getPrivateMessages = function (friendId) { + if (!this.privateMessages[friendId]) { + this.privateMessages[friendId] = { + sentMessages:[], + pendingMessages:[] + }; + } + return this.privateMessages[friendId] +}; + +//重置群聊未读消息 +IMService.prototype.resetGroupUnReadMessage = function (group) { + this.groups[group.uuid].unReadMessage = 0; + this.onGroupListChange(this.groups); +}; + +//将好友的未读消息数字清零 +IMService.prototype.resetFriendUnReadMessage = function (friend) { + if(friend && friend.uuid){ + this.friends[friend.uuid].unReadMessage = 0; + } + this.onFriendListChange(this.friends); +}; + +//连接GoEasy +IMService.prototype.connectIM = function () { + //初始化IM相关的监听器 + try { + this.initialIMListeners(); + + } catch (error) { + console.log(123) + } + try { + this.im.connect({ + id: this.currentUser.uuid, + data: { + avatar: this.currentUser.avatar, + name: this.currentUser.name + } + }).then(() => { + console.log('连接成功') + //订阅与自己相关的群信息 + this.subscribeGroupMessage(); + //初始化好友们的在线状态 + this.initialFriendOnlineStatus(); + //订阅我的好友们的上下线信息 + this.subscribeFriendsPresence(); + }).catch(error => { + console.log('连接失败,请确保网络正常,appkey和host正确,code:' + error.code + " content:" + error.content); + this.connectIM() + }); + } catch (error) { + console.log(12323) + } + +}; + +//IM监听 +IMService.prototype.initialIMListeners = function () { + this.im.on(GoEasyIM.EVENT.CONNECTED, () => { + console.log('连接成功.') + }); + + this.im.on(GoEasyIM.EVENT.DISCONNECTED, () => { + console.log('连接断开.') + }); + + //监听好友上下线 + this.im.on(GoEasyIM.EVENT.USER_PRESENCE, (user) => { + console.log(user) + //更新好友在线状态 + let onlineStatus = user.action == 'online' ? true : false; + let friend = this.friends[user.userId]; + friend.online = onlineStatus; + + //如果页面传入了相应的listener,执行listener + this.onFriendListChange(this.friends); + }); + + //监听私聊消息 + this.im.on(GoEasyIM.EVENT.PRIVATE_MESSAGE_RECEIVED, (message) => { + console.log(message) + //如果不是自己发的,朋友未读消息数 +1 + if (message.senderId != this.currentUser.uuid) { + let friend = this.friends[message.senderId]; + console.log(friend) + // return ; + let sorts = function (friends){ + let paixu = function (a,b){ + if(a.date > b.date){ + return 0; + }else{ + return 1; + } + + } + friends.sort(paixu) + + } + + let that = this + if(!friend && friend == undefined){ + const token = uni.getStorageSync('token'); + console.log(token) + uni.request({ + url:"https://dmmall.sdbairui.com/api/Specialci/getAtwillUserInfo", + data:{ + userId:message.senderId + }, + method:"POST", + header:{ + "Authorization" : 'Bearer' + " " + token + }, + success(res){ + console.log(res) + that.friends[message.senderId] = new Friend(res.data.data.member_id, res.data.data.member_nickname, res.data.data.member_avatar); + friend = that.friends[message.senderId]; + console.log(friend) + friend.unReadMessage++; + friend.text = message.type != "text" ? "其他消息" : message.payload.text + let time = new Date(message.timestamp) + friend.date = message.timestamp + friend.time = time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds() + console.log(that.friends) + that.friendsarr = [] + for(let i in that.friends){ + console.log(i) + that.friendsarr.push(that.friends[i]) + } + sorts(that.friendsarr) + let arr = [] + for(let i in that.friends){ + arr.push([that.friends[i].uuid,that.friends[i].time,that.friends[i].text,that.friends[i].date,that.friends[i].unReadMessage]) + } + console.log(arr) + uni.setStorageSync('imlist',JSON.stringify(arr)) + let value = uni.getStorageSync('imlist'); + console.log(value) + that.onFriendListChange(that.friends); + + } + }) + }else{ + console.log(friend) + friend.unReadMessage++; + friend.text = message.type != "text" ? "其他消息" : message.payload.text + let time = new Date(message.timestamp) + friend.date = message.timestamp + friend.time = time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds() + console.log(this.friends) + that.friendsarr = [] + for(let i in this.friends){ + that.friendsarr.push(this.friends[i]) + } + sorts(that.friendsarr) + let arr = [] + for(let i in that.friends){ + arr.push([that.friends[i].uuid,that.friends[i].time,that.friends[i].text,that.friends[i].date,that.friends[i].unReadMessage]) + } + console.log(arr) + uni.setStorageSync('imlist',JSON.stringify(arr)) + let value = uni.getStorageSync('imlist'); + console.log(value) + this.onFriendListChange(this.friends); + + } + // let value = uni.getStorageSync('imlist'); + // value = JSON.parse(value) + // if(value.indexOf(message.senderId) == -1){ + // value.unshift(message.senderId) + // } + // uni.setStorageSync('imlist',JSON.stringify(value)) + + } + //更新私聊消息记录 + let friendId; + if (this.currentUser.uuid == message.senderId) { + friendId = message.receiverId; + } else { + friendId = message.senderId; + } + removePrivatePendingMessage(this, friendId, message); + + let friendMessages = this.getPrivateMessages(friendId); + friendMessages.sentMessages.push(message); + + //如果页面传入了相应的listener,执行listener + this.onNewPrivateMessageReceive(friendId, message); + }); + + //监听群聊消息 + this.im.on(GoEasyIM.EVENT.GROUP_MESSAGE_RECEIVED, (message) => { + let groupId = message.groupId; + //群未读消息+1 + let group = this.groups[groupId]; + group.unReadMessage++; + removeGroupPendingMessage(this, groupId, message); + //如果页面传入了相应的listener,执行listener + this.onGroupListChange(this.groups); + + //更新群聊消息记录 + let groupMessages = this.getGroupMessages(groupId); + let sentMessages = groupMessages.sentMessages; + sentMessages.push(message); + //如果页面传入了相应的listener,执行listener + this.onNewGroupMessageReceive(groupId, message); + }) +}; + + +//订阅群消息 +IMService.prototype.subscribeGroupMessage = function () { + let groupIds = Object.keys(this.groups); + this.im.subscribeGroup(groupIds) + .then(() => { + console.log('订阅群消息成功') + }) + .catch(error => { + console.log('订阅群消息失败') + console.log(error) + }) +}; + +//初始化好友在线状态 +IMService.prototype.initialFriendOnlineStatus = function () { + let friendIds = Object.keys(this.friends); + this.im.hereNow({ + userIds: friendIds + }).then(result => { + let onlineFriends = result.content; + onlineFriends.map(user => { + let friend = this.friends[user.userId]; + friend.online = true; + }); + this.onFriendListChange(this.friends); + }).catch(error => { + console.log(error) + if (error.code == 401) { + console.log("获取在线用户失败,您尚未开通用户在线状态,请登录GoEasy,查看应用详情里自助启用."); + } + }) +}; + +//监听所有好友上下线 +IMService.prototype.subscribeFriendsPresence = function () { + let friendIds = Object.keys(this.friends); + this.im.subscribeUserPresence(friendIds) + .then(() => { + console.log('监听好友上下线成功') + }) + .catch(error => { + console.log(error); + if (error.code == 401) { + console.log("监听好友上下线失败,您尚未开通用户状态提醒,请登录GoEasy,查看应用详情里自助启用."); + } + }); +}; + +//加载单聊历史消息 +IMService.prototype.loadPrivateHistoryMessage = function (friendId, timeStamp) { + this.im.history({ + friendId: friendId, + lastTimestamp: timeStamp + }).then(result => { + let history = result.content; + let privateMessages = this.getPrivateMessages(friendId); + let friendMessages = privateMessages.sentMessages; + for (let i = history.length - 1; i >=0; i--) { + friendMessages.unshift(history[i]) + } + //如果页面传入了相应的listener,执行listener + this.onPrivateHistoryLoad(friendId, history); + }).catch(error => { + console.log(error); + if (error.code == 401) { + console.log("您尚未开通历史消息,请登录GoEasy,查看应用详情里自助启用."); + } + }) +}; + +//发送私聊消息 +IMService.prototype.sendPrivateTextMessage = function (friendId, text) { + let textMessage = this.im.createTextMessage({ + text: text + }); + this.sendPrivateMessage(friendId, textMessage); +}; + +//私聊图片消息 +IMService.prototype.sendPrivateImageMessage = function (friendId, imageFile) { + let imageMessage = this.im.createImageMessage({ + file: imageFile, + onProgress :function (progress) { + console.log(progress) + } + }); + this.sendPrivateMessage(friendId, imageMessage); +}; + +//私聊视频消息 +IMService.prototype.sendPrivateVideoMessage = function (friendId, videoFile) { + let videoMessage = this.im.createVideoMessage({ + file: videoFile, + onProgress :function (progress) { + console.log(progress) + } + }); + this.sendPrivateMessage(friendId, videoMessage); +}; + +IMService.prototype.sendPrivateAudioMessage = function (friendId, audiofile) { + let audioMessage = this.im.createAudioMessage({ + file: audiofile, + onProgress :function (progress) { + console.log(progress) + } + }); + + this.sendPrivateMessage(friendId, audioMessage); +}; + +//发送私聊消息 +IMService.prototype.sendPrivateMessage = function (friendId, message) { + + //加入pendingMessage列表,成功后将会被挪除 + let privateMessages = this.getPrivateMessages(friendId); + privateMessages.pendingMessages.push(message); + + //发送 + this.im.sendPrivateMessage(friendId, message) + .then((res) => { + console.log(res) + }) + .catch(e => { + console.log(e) + }) +}; + +//发送群聊消息 +IMService.prototype.sendGroupTextMessage = function (groupId, message) { + let textMessage = this.im.createTextMessage({ + text:message + }); + this.sendGroupMessage(groupId, textMessage); +}; +//私聊图片消息 +IMService.prototype.sendGroupImageMessage = function (groupId, imageFile) { + let imageMessage = this.im.createImageMessage({ + file: imageFile, + onProgress :function (progress) { + console.log(progress) + } + }); + this.sendGroupMessage(groupId, imageMessage); +}; + + +//私聊视频消息 +IMService.prototype.sendGroupVideoMessage = function (groupId, videoFile) { + let videoMessage = this.im.createVideoMessage({ + file: videoFile, + onProgress :function (progress) { + console.log(progress) + } + }); + this.sendGroupMessage(groupId, videoMessage); +}; + +IMService.prototype.sendGroupAudioMessage = function (groupId, audioFile) { + let audioMessage = this.im.createAudioMessage({ + file: audioFile, + onProgress :function (progress) { + console.log(progress) + } + }); + this.sendGroupMessage(groupId, audioMessage); +}; + +IMService.prototype.sendGroupMessage =function(groupId, groupMessage) { + //先放入Pending列表,待成功后挪除 + let groupMessages = this.getGroupMessages(groupId); + let pendingMessages = groupMessages.pendingMessages; + pendingMessages.push(groupMessage) + + this.im.sendGroupMessage(groupId, groupMessage) + .then((res) => { + console.log(res) + }) + .catch(e => { + console.log(e) + }) +} + +//群聊历史消息 +IMService.prototype.loadGroupHistoryMessage = function (groupId, timeStamp) { + this.im.history({ + groupId: groupId, + lastTimestamp: timeStamp + }).then(result => { + let history = result.content; + let groupMessages = this.getGroupMessages(groupId); + let sentGroupMessages = groupMessages.sentMessages; + for (let i = history.length - 1; i >= 0; i--) { + sentGroupMessages.unshift(history[i]); + } + this.onGroupHistoryLoad(groupId, history); + }).catch(error => { + console.log(error) + if (error.code == 401) { + console.log("您尚未开通历史消息,请登录GoEasy,查看应用详情里自助启用."); + } + }) +}; + +IMService.prototype.disconnect = function () { + this.im.disconnect() +}; + + +function removePrivatePendingMessage(imService,friendId, message){ + let privateMessages = imService.getPrivateMessages(friendId); + let pendingMessages = privateMessages.pendingMessages; + let pendingMessageIndex = pendingMessages.findIndex(item => item.messageId == message.messageId); + if(pendingMessageIndex > -1) { + pendingMessages.splice(pendingMessageIndex,1); + } +} + + +function removeGroupPendingMessage(imService,groupId, message){ + let groupMessages = imService.getGroupMessages(groupId); + let pendingMessages = groupMessages.pendingMessages; + let pendingMessageIndex = pendingMessages.findIndex(item => item.messageId == message.messageId); + if(pendingMessageIndex > -1) { + pendingMessages.splice(pendingMessageIndex,1); + } +} + +export default IMService; \ No newline at end of file diff --git a/static/restapi.js b/static/restapi.js new file mode 100644 index 0000000..52df538 --- /dev/null +++ b/static/restapi.js @@ -0,0 +1,79 @@ +//用户数据示例 +let users = [ + { + "uuid": "08c0a6ec-a42b-47b2-bb1e-15e0f5f9a19a", + "name": "Mattie", + "password": "123", + "avatar": '../../static/images/Avatar-1.png' + }, + { + "uuid": "3bb179af-bcc5-4fe0-9dac-c05688484649", + "name": "Wallace", + "password": "123", + "avatar": '../../static/images/Avatar-2.png' + }, + { + "uuid": "fdee46b0-4b01-4590-bdba-6586d7617f95", + "name": "Tracy", + "password": "123", + "avatar": '../../static/images/Avatar-3.png' + }, + { + "uuid": "33c3693b-dbb0-4bc9-99c6-fa77b9eb763f", + "name": "Juanita", + "password": "123", + "avatar": '../../static/images/Avatar-4.png' + } +]; + +//群数据示例 +let groups = [ + { + "uuid": "group-a42b-47b2-bb1e-15e0f5f9a19a", + "name": "群1", + "userList": ['08c0a6ec-a42b-47b2-bb1e-15e0f5f9a19a', '3bb179af-bcc5-4fe0-9dac-c05688484649', 'fdee46b0-4b01-4590-bdba-6586d7617f95', '33c3693b-dbb0-4bc9-99c6-fa77b9eb763f'] + }, + { + "uuid": "group-4b01-4590-bdba-6586d7617f95", + "name": "群2", + "userList": ['08c0a6ec-a42b-47b2-bb1e-15e0f5f9a19a', 'fdee46b0-4b01-4590-bdba-6586d7617f95', '33c3693b-dbb0-4bc9-99c6-fa77b9eb763f'] + }, + { + "uuid": "group-dbb0-4bc9-99c6-fa77b9eb763f", + "name": "群3", + "userList": ['08c0a6ec-a42b-47b2-bb1e-15e0f5f9a19a', '3bb179af-bcc5-4fe0-9dac-c05688484649'] + } +]; + + +function RestApi() { + +} + +RestApi.prototype.findFriends = function (user) { + var friendList = users.filter(v => v.uuid != user.uuid); + return friendList; +} + +RestApi.prototype.findGroups = function (user) { + var groupList = groups.filter(v => v.userList.find(id => id == user.uuid)); + return groupList; +} + +RestApi.prototype.findUser = function (username, password) { + var user = users.find(user => (user.name == username && user.password == password)) + return user; +} + +RestApi.prototype.findGroupMembers = function (groupId) { + let members = []; + let group = groups.find(v => v.uuid == groupId); + users.map(user => { + if (group.userList.find(v => v == user.uuid)) { + members.push(user) + } + }); + return members; +} + +export default new RestApi(); \ No newline at end of file