"use strict"; const common_vendor = require("../../../common/vendor.js"); const components_ChatId = require("../../../components/ChatId.js"); const components_TimeFormatting = require("../../../components/TimeFormatting.js"); const components_request = require("../../../components/request.js"); const components_goEasyTool_tool = require("../../../components/goEasyTool/tool.js"); const textmessage = () => "./messageComponent/textmessage.js"; const customPKMessage = () => "./messageComponent/customPKMessage.js"; const imageMessage = () => "./messageComponent/imageMessage.js"; const videoMessage = () => "./messageComponent/videoMessage.js"; const voiceMessage = () => "./messageComponent/voiceMessage.js"; const InvitationComponents = () => "./moreMessageComponents/InvitationComponents.js"; const _sfc_main = { data() { return { userId: "", // 对方用户id nickname: "", // 对方用户昵称 avatar: "", // 对方用户头像 chatList: [], // 聊天记录 userinfo: {}, // 自己用户信息 ButtonStatus: false, // 发送按钮状态 MoreStatus: false, // 更多消息类型弹窗状态 KeyboardHeight: 0, // 键盘高度 content: "", // 输入框内容 MoreItemStatus: null, // 更多消息类型弹窗点击属性 ioshide: 0, // 隐藏ios键盘 ElementPositioning: null, // 元素定位 scrollviewheight: 0, // 滚动视图高度 Elementheight: 0, // 元素高度 Scrolling: false, // 滚动状态 scrollTop: 0, // 滚动高度 judgescrollTop: false, // 判断滚动高度 onPage: false, // 是否在页面 timer: null, // 定时器 lastTimestamp: null, // 上一次刷新时间戳 LastTime: null, // 最后聊天记录的时间戳 MoreMessageList: [], Record: null, // 定位记录 myitem: null, //直接发送自定义消息的我的选中主播 youritem: null, //直接发送自定义消息的对方选中主播 type: null, //直接发送自定义消息的消息类型 voiceStatus: false, // 语音状态 inputfocus: false, // 输入框焦点状态 voicepopUpstart: false, // 语音长按状态/false关闭/true开启 voiceCancelOrSend: false, // 语音取消/发送/false发送/true取消 recorderManager: common_vendor.index.getRecorderManager(), playbackStatus: true, // 语音播放状态 popUpList: [ { name: "图片", icon: "https://vv-1317974657.cos.ap-shanghai.myqcloud.com/util/Album.png", type: "Album" }, { name: "视频", icon: "https://vv-1317974657.cos.ap-shanghai.myqcloud.com/util/Video.png", type: "Video" }, { name: "邀请", icon: "https://vv-1317974657.cos.ap-shanghai.myqcloud.com/util/chat_invite.png", type: "Invitation" } ] /// 更多消息类型弹窗列表 }; }, onShow() { this.onPage = true; common_vendor.index.onKeyboardHeightChange((res) => { this.KeyboardHeight = res.height * 2 - this.ioshide; }); }, onHide() { this.onPage = false; }, onUnload() { this.onPage = false; }, onLoad(options) { this.recorderManager.onStop((res) => { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:387", "录音结束", res); if (this.ioshide != 0) { if (res.fileSize < 20 * 1024) { common_vendor.index.showToast({ title: "您说话太短", icon: "none", duration: 2e3 }); } else { if (this.voiceCancelOrSend) { this.voiceCancelOrSend = false; } else { this.sendVoice(res); this.voiceCancelOrSend = false; } } } else { if (res.fileSize < 2 * 1024) { common_vendor.index.showToast({ title: "您说话太短", icon: "none", duration: 2e3 }); } else { if (this.voiceCancelOrSend) { this.voiceCancelOrSend = false; } else { this.sendVoice(res); this.voiceCancelOrSend = false; } } } }); common_vendor.index.getStorage({ key: "userinfo", success: (res) => { this.userinfo = res.data; } }); this.userId = options.userId; this.nickname = options.nickname; this.avatar = options.avatar; this.type = options.type; try { this.myitem = JSON.parse(options.myitem); this.youritem = JSON.parse(options.youritem); } catch (e) { } if (this.type == "pk") { setTimeout(() => { this.sendCustomMessage(); }, 500); } components_goEasyTool_tool.getConversationMessages(this.$goeasy, this.userId, null).then((res) => { this.chatList = res.map((item) => { item.id = components_ChatId.generateId(); item.timestampStatus = this.checkInterval(item.timestamp); return item; }); setTimeout(() => { if (this.chatList.length > 0) { this.ElementPositioning = this.chatList[this.chatList.length - 1].id; this.LastTime = this.chatList[0].timestamp; } else { common_vendor.index.showToast({ title: "您和对方暂无聊天记录,快去聊天吧", icon: "none", duration: 2e3 }); } }, 300); const query = common_vendor.index.createSelectorQuery().in(this); query.select(".inputComponent").boundingClientRect((res2) => { this.Elementheight = res2.height * 2; }).exec(); }); components_goEasyTool_tool.messageRead(this.$goeasy, this.userId).then((res) => { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:469", "已读对方的消息"); }); this.getIOSDeviceType(); var im = this.$goeasy.im; im.on(common_vendor.jo.IM_EVENT.PRIVATE_MESSAGE_RECEIVED, this.onPrivateMessageReceived); im.on(common_vendor.jo.IM_EVENT.MESSAGE_READ, this.onMessageRead); this.getscrollviewheight(); }, methods: { //暂停所有播放 notplayVoice(type) { this.playbackStatus = type; }, //发送录音 sendVoice(res) { const im = this.$goeasy.im; var message = im.createAudioMessage({ file: res, to: { type: common_vendor.jo.IM_SCENE.PRIVATE, id: this.userId, //对方用户id data: { avatar: this.avatar, nickname: this.nickname } }, onProgress: function(event) { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:494", "file uploading:", event); } //获取上传进度 }); components_goEasyTool_tool.sendGroupMessage(this.$goeasy, message).then((ress) => { this.ElementPositioning = ress.id = components_ChatId.generateId(); ress.timestampStatus = this.checkInterval(ress.timestamp); this.chatList.push(ress); this.judgescrollTop = false; }); }, //长按语音 voiceTouchstart() { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:506", "长按语音"); this.voicepopUpstart = true; this.recorderManager.start(); this.notplayVoice(false); }, //松开语音 voiceTouchend() { setTimeout(() => { this.recorderManager.stop(); }, 100); common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:516", "松开语音"); this.voicepopUpstart = false; }, //移动语音 voiceTouchmove(event) { const threshold = common_vendor.index.getSystemInfoSync().windowHeight * 0.86; try { if (event.touches[0].clientY > threshold) { this.voiceCancelOrSend = false; } else { this.voiceCancelOrSend = true; } } catch (e) { } }, //中断语音 voiceTouchcancel() { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:532", "中断语音"); this.voicepopUpstart = false; this.voiceCancelOrSend = false; }, //语音切换 onVoice(status) { this.checkRecordPermission(); if (status) { this.inputfocus = false; this.MoreStatus = false; } else { this.inputfocus = true; } this.voiceStatus = status; }, //录音权限 checkRecordPermission() { common_vendor.index.getSetting({ success: (res) => { const hasPermission = res.authSetting["scope.record"]; if (hasPermission === void 0) { this.requestPermission(); } else if (!hasPermission) { this.voiceStatus = false; common_vendor.index.showModal({ title: "权限提示", content: "需要录音权限才能正常使用功能,请在设置中开启", confirmText: "去开启", success: (modalRes) => { if (modalRes.confirm) { common_vendor.index.openSetting({ success: (settingRes) => { if (settingRes.authSetting["scope.record"] === true) { this.checkRecordPermission(); } } }); } } }); } } }); }, //请求录音权限 requestPermission() { common_vendor.index.authorize({ scope: "scope.record", fail: (err) => { this.voiceStatus = false; common_vendor.index.showToast({ title: "请授予麦克风权限,否则可能导致语音功能异常", icon: "none" }); } }); }, //直接发送自定义消息 sendCustomMessage() { components_request.request({ url: "pk/createPkRecord", method: "POST", data: { pkIdA: this.youritem.id, pkIdB: this.myitem.id, userIdA: this.userId, userIdB: this.userinfo.id, pkTime: this.youritem.pkTime, pkNumber: this.youritem.pkNumber, anchorIdA: this.youritem.anchorId, anchorIdB: this.myitem.anchorId, anchorIconA: this.youritem.anchorIcon, anchorIconB: this.myitem.anchorIcon, piIdA: this.youritem.id, piIdB: this.myitem.id }, userInfo: true }).then((res) => { if (res.code == 200) { const customData = { id: res.data.id, pkIdA: this.youritem.id, pkIdB: this.myitem.id }; let order = { customData, link: "https://vv-1317974657.cos.ap-shanghai.myqcloud.com/util/pk.png", text: "PK邀请消息" }; components_goEasyTool_tool.sendCustomMessage( this.$goeasy, this.type, this.userId, order, this.avatar, this.nickname ).then((res2) => { this.ElementPositioning = res2.id = components_ChatId.generateId(); res2.timestampStatus = this.checkInterval(res2.timestamp); this.chatList.push(res2); common_vendor.index.showToast({ title: "发送成功", icon: "none" }); }); } else { common_vendor.index.showToast({ title: res.msg, icon: "none" }); } }); }, //时间显示 checkInterval(timestamp) { if (!this.lastTimestamp) { this.lastTimestamp = timestamp; return true; } const timeDiff = timestamp - this.lastTimestamp; if (timeDiff >= 3e5) { this.lastTimestamp = timestamp; return true; } return false; }, //时间格式化 TimeFormatting: components_TimeFormatting.TimeFormatting, //获取容器高度 getscrollviewheight() { const queryheight = common_vendor.index.createSelectorQuery().in(this); queryheight.select(".scroll").boundingClientRect((res) => { this.scrollviewheight = res.height; }).exec(); }, //滚动事件 onScroll(event) { if (!this.judgescrollTop) { this.scrollTop = event.detail.scrollTop; this.judgescrollTop = true; } else if (this.scrollTop - event.detail.scrollTop > this.scrollviewheight) { this.Scrolling = true; } else if (this.scrollTop - event.detail.scrollTop < this.scrollviewheight) { this.Scrolling = false; } }, //获取更多聊天记录 onScrollToUpper() { this.lastTimestamp = null; components_goEasyTool_tool.getConversationMessages(this.$goeasy, this.userId, this.LastTime).then((res) => { this.Record = this.chatList[0].id; this.MoreMessageList = res.map((item) => { item.id = components_ChatId.generateId(); item.timestampStatus = this.checkInterval(item.timestamp); return item; }); }); setTimeout(() => { this.chatList = [...this.MoreMessageList, ...this.chatList]; common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:698", "获取更多聊天记录", this.chatList); this.LastTime = this.chatList[0].timestamp; this.ElementPositioning = this.Record; }, 300); }, //监听已读消息 onMessageRead(message) { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:705", "1已读消息", message); }, //监听接受消息 onPrivateMessageReceived(message) { if (!this.Scrolling) { this.ElementPositioning = message.id = components_ChatId.generateId(); message.timestampStatus = this.checkInterval(message.timestamp); this.judgescrollTop = false; } else { message.id = components_ChatId.generateId(); message.timestampStatus = this.checkInterval(message.timestamp); } this.chatList.push(message); if (this.onPage) { components_goEasyTool_tool.messageRead(this.$goeasy, this.userId).then((res) => { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:720", "已读对方的消息"); }); } }, //发送消息 onSend() { if (this.content != "") { components_goEasyTool_tool.sendMessage( this.$goeasy, this.userId, this.content, this.avatar, this.nickname ).then((res) => { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:734", "发送成功", res); this.ElementPositioning = res.id = components_ChatId.generateId(); res.timestampStatus = this.checkInterval(res.timestamp); this.chatList.push(res); this.judgescrollTop = false; }); this.content = ""; this.ButtonStatus = false; } }, //自定义消息发送返回处理 refreshMessage(message) { this.MoreItemStatus = null; this.ElementPositioning = message.message.id = components_ChatId.generateId(); message.timestampStatus = this.checkInterval(message.message.timestamp); this.chatList.push(message.message); this.judgescrollTop = false; this.MoreStatus = false; }, //ios兼容 getIOSDeviceType() { const systemInfo = common_vendor.index.getSystemInfoSync(); const model = systemInfo.model; if (/iPhone X|iPhone11|iPhone12|iPhone13|iPhone14/i.test(model)) { if (/iPhone X|iPhone XS|iPhone 11 Pro/i.test(model)) { this.ioshide = 88; } else if (/iPhone 12|iPhone 13|iPhone 14/i.test(model)) { this.ioshide = 94; } } }, //更多消息类型弹窗事件 onMore(Status) { if (!this.Scrolling) { this.ElementPositioning = null; setTimeout(() => { this.ElementPositioning = this.chatList[this.chatList.length - 1].id; }, 100); this.judgescrollTop = false; } this.getscrollviewheight(); if (Status) { this.MoreStatus = Status; this.voiceStatus = false; } else { this.MoreStatus = Status; } const query = common_vendor.index.createSelectorQuery().in(this); query.select(".inputComponent").boundingClientRect((res) => { this.Elementheight = res.height * 2; }).exec(); }, //更多消息类型弹窗点击事件 onMoreItem(type) { if (type == "Album") { this.onSendMedia(); } else if (type == "Video") { this.onSendVideo(); } else { this.MoreItemStatus = type; } }, //发送视频 onSendVideo() { var im = this.$goeasy.im; common_vendor.index.chooseVideo({ sourceType: ["album", "camera"], success: (res) => { var message = im.createVideoMessage({ file: res, //H5获得的视频file对象, Uniapp和小程序调用chooseVideo,success时得到的res对象 to: { type: common_vendor.jo.IM_SCENE.PRIVATE, id: this.userId, //对方用户id data: { avatar: this.avatar, nickname: this.nickname } }, onProgress: function(event) { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:814", "file uploading:", event); } //获取上传进度 }); components_goEasyTool_tool.sendGroupMessage(this.$goeasy, message).then((res2) => { this.ElementPositioning = res2.id = components_ChatId.generateId(); res2.timestampStatus = this.checkInterval(res2.timestamp); this.chatList.push(res2); this.judgescrollTop = false; }); } }); }, //发送图片 onSendMedia() { var im = this.$goeasy.im; common_vendor.index.chooseImage({ count: 9, //默认9 sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有 sourceType: ["album", "camera"], //从相册选择 success: (res) => { const tempFiles = res.tempFiles; tempFiles.forEach((item, index) => { var message = im.createImageMessage({ file: item, to: { type: common_vendor.jo.IM_SCENE.PRIVATE, id: this.userId, data: { avatar: this.avatar, nickname: this.nickname } }, onProgress: function(event) { common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:844", "上传进度", event); } //获取上传进度 }); components_goEasyTool_tool.sendGroupMessage(this.$goeasy, message).then((res2) => { this.ElementPositioning = res2.id = components_ChatId.generateId(); res2.timestampStatus = this.checkInterval(res2.timestamp); this.chatList.push(res2); this.judgescrollTop = false; }); }); } }); }, // 获取键盘高度 onFocus(event) { if (!this.Scrolling) { this.ElementPositioning = null; setTimeout(() => { this.ElementPositioning = this.chatList[this.chatList.length - 1].id; }, 100); this.judgescrollTop = false; } this.getscrollviewheight(); const query = common_vendor.index.createSelectorQuery().in(this); query.select(".inputComponent").boundingClientRect((res) => { this.Elementheight = res.height * 2; }).exec(); }, //键盘消失 onBlur(event) { const query = common_vendor.index.createSelectorQuery().in(this); query.select(".inputComponent").boundingClientRect((res) => { this.Elementheight = res.height * 2; }).exec(); this.getscrollviewheight(); }, //按钮切换 SendInput(event) { const query = common_vendor.index.createSelectorQuery().in(this); query.select(".inputComponent").boundingClientRect((res) => { this.Elementheight = res.height * 2; }).exec(); if (event.target.value != "") { this.ButtonStatus = true; } else { this.ButtonStatus = false; } }, // 返回上一页 onBack() { this.onPage = false; common_vendor.wx$1.navigateBack({ delta: 1 }); } }, components: { textmessage, InvitationComponents, customPKMessage, imageMessage, videoMessage, voiceMessage } }; if (!Array) { const _component_textmessage = common_vendor.resolveComponent("textmessage"); const _component_customPKMessage = common_vendor.resolveComponent("customPKMessage"); const _component_imageMessage = common_vendor.resolveComponent("imageMessage"); const _component_videoMessage = common_vendor.resolveComponent("videoMessage"); const _component_voiceMessage = common_vendor.resolveComponent("voiceMessage"); const _component_InvitationComponents = common_vendor.resolveComponent("InvitationComponents"); (_component_textmessage + _component_customPKMessage + _component_imageMessage + _component_videoMessage + _component_voiceMessage + _component_InvitationComponents)(); } function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return common_vendor.e({ a: common_vendor.o(($event) => $options.onMore(false)), b: common_vendor.o((...args) => $options.onBack && $options.onBack(...args)), c: common_vendor.t($data.nickname), d: common_vendor.o(($event) => $options.onMore(false)), e: common_vendor.f($data.chatList, (item, index, i0) => { return common_vendor.e({ a: item.timestampStatus }, item.timestampStatus ? { b: common_vendor.t($options.TimeFormatting(item.timestamp)) } : {}, { c: item.senderId == $data.userId }, item.senderId == $data.userId ? common_vendor.e({ d: $data.avatar, e: item.type == "text" || item.type == "audio" }, item.type == "text" || item.type == "audio" ? {} : {}, { f: item.type == "text" }, item.type == "text" ? { g: "f4b42ac4-0-" + i0, h: common_vendor.p({ messagetext: item.payload.text }) } : {}, { i: item.type == "pk" }, item.type == "pk" ? { j: "f4b42ac4-1-" + i0, k: common_vendor.p({ message: item.payload }) } : {}, { l: item.type == "image" }, item.type == "image" ? { m: "f4b42ac4-2-" + i0, n: common_vendor.p({ message: item.payload }) } : {}, { o: item.type == "video" }, item.type == "video" ? { p: "f4b42ac4-3-" + i0, q: common_vendor.p({ message: item.payload }) } : {}, { r: item.type == "audio" }, item.type == "audio" ? { s: "f4b42ac4-4-" + i0, t: common_vendor.p({ message: item.payload, senderId: item.senderId, userId: $data.userinfo.id }) } : {}, { v: item.type == "text" || item.type == "audio" ? "#7bbd0093" : "#ffffff" }) : {}, { w: item.senderId == $data.userinfo.id }, item.senderId == $data.userinfo.id ? common_vendor.e({ x: $data.userinfo.headerIcon, y: item.type == "text" || item.type == "audio" }, item.type == "text" || item.type == "audio" ? {} : {}, { z: item.type == "text" }, item.type == "text" ? { A: "f4b42ac4-5-" + i0, B: common_vendor.p({ messagetext: item.payload.text }) } : {}, { C: item.type == "pk" }, item.type == "pk" ? { D: "f4b42ac4-6-" + i0, E: common_vendor.p({ message: item.payload }) } : {}, { F: item.type == "image" }, item.type == "image" ? { G: "f4b42ac4-7-" + i0, H: common_vendor.p({ message: item.payload }) } : {}, { I: item.type == "video" }, item.type == "video" ? { J: "f4b42ac4-8-" + i0, K: common_vendor.p({ message: item.payload }) } : {}, { L: item.type == "audio" }, item.type == "audio" ? { M: common_vendor.o($options.notplayVoice, item.id), N: "f4b42ac4-9-" + i0, O: common_vendor.p({ message: item.payload, senderId: item.senderId, userId: $data.userinfo.id, playbackStatus: $data.playbackStatus }) } : {}, { P: item.type == "text" || item.type == "audio" ? "#7bbd0093" : "#ffffff" }) : {}, { Q: item.id, R: item.id }); }), f: common_vendor.o((...args) => $options.onScrollToUpper && $options.onScrollToUpper(...args)), g: $data.ElementPositioning, h: common_vendor.o((...args) => $options.onScroll && $options.onScroll(...args)), i: common_vendor.o(($event) => $options.onMore(false)), j: $data.MoreStatus || $data.KeyboardHeight != 0 ? $data.MoreStatus ? 650 + $data.Elementheight + "rpx" : $data.KeyboardHeight != 0 ? $data.KeyboardHeight + $data.Elementheight + "rpx" : "10vh" : "10vh", k: !$data.voiceStatus }, !$data.voiceStatus ? { l: common_vendor.o(($event) => $options.onVoice(!$data.voiceStatus)) } : {}, { m: $data.voiceStatus }, $data.voiceStatus ? { n: common_vendor.o(($event) => $options.onVoice(!$data.voiceStatus)) } : {}, { o: $data.voiceStatus }, $data.voiceStatus ? { p: common_vendor.o((...args) => $options.voiceTouchstart && $options.voiceTouchstart(...args)), q: common_vendor.o((...args) => $options.voiceTouchend && $options.voiceTouchend(...args)), r: common_vendor.o((...args) => $options.voiceTouchmove && $options.voiceTouchmove(...args)), s: common_vendor.o((...args) => $options.voiceTouchcancel && $options.voiceTouchcancel(...args)) } : {}, { t: !$data.voiceStatus }, !$data.voiceStatus ? { v: common_vendor.o([($event) => $data.content = $event.detail.value, (...args) => $options.SendInput && $options.SendInput(...args)]), w: common_vendor.o((...args) => $options.onFocus && $options.onFocus(...args)), x: $data.inputfocus, y: common_vendor.o((...args) => $options.onBlur && $options.onBlur(...args)), z: $data.content } : {}, { A: !$data.ButtonStatus }, !$data.ButtonStatus ? { B: common_vendor.o(($event) => $options.onMore(!$data.MoreStatus)) } : {}, { C: $data.ButtonStatus }, $data.ButtonStatus ? { D: common_vendor.o((...args) => $options.onSend && $options.onSend(...args)) } : {}, { E: $data.MoreStatus || $data.KeyboardHeight > 300 ? $data.MoreStatus ? "650rpx" : $data.KeyboardHeight > 300 ? $data.KeyboardHeight + "rpx" : "0" : "0", F: common_vendor.f($data.popUpList, (item, index, i0) => { return { a: item.icon, b: common_vendor.t(item.name), c: common_vendor.o(($event) => $options.onMoreItem(item.type), index), d: index }; }), G: $data.MoreStatus || $data.KeyboardHeight > 300 ? $data.MoreStatus ? "0" : $data.KeyboardHeight > 300 ? "0" : $data.KeyboardHeight + "rpx" : "-650rpx", H: $data.MoreItemStatus == "Invitation" }, $data.MoreItemStatus == "Invitation" ? { I: common_vendor.o($options.refreshMessage), J: common_vendor.p({ oppositeId: $data.userId, myId: $data.userinfo.id, avatar: $data.avatar, nickname: $data.nickname }) } : {}, { K: common_vendor.o(() => { }), L: $data.MoreItemStatus == null ? "-1000rpx" : "0", M: common_vendor.o(($event) => $options.onMoreItem(null)), N: $data.MoreItemStatus == null ? "100vh" : "0", O: $data.voiceCancelOrSend ? "#ebebeb" : "#000000a9", P: common_vendor.t($data.voiceCancelOrSend ? "取消" : "松手发送"), Q: !$data.voiceCancelOrSend ? "#ebebeb" : "#000000a9", R: $data.voicepopUpstart == false ? "-1000rpx" : "0", S: $data.voicepopUpstart == false ? "100vh" : "0" }); } const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-f4b42ac4"]]); wx.createPage(MiniProgramPage); //# sourceMappingURL=../../../../.sourcemap/mp-weixin/pages/index/chat/chat.js.map