Files
tk-mini-program/unpackage/dist/dev/mp-weixin/pages/index/chat/chat.js
pengxiaolong 7116e57fc3 优化
2025-07-21 22:10:59 +08:00

509 lines
18 KiB
JavaScript

"use strict";
const common_vendor = require("../../../common/vendor.js");
const components_ChatId = require("../../../components/ChatId.js");
const components_TimeFormatting = require("../../../components/TimeFormatting.js");
require("../../../components/picturesVideosMessages.js");
require("../../../components/audioMessages.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 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,
//直接发送自定义消息的消息类型
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/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;
},
onLoad(options) {
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:300", "已读对方的消息");
});
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: {
//直接发送自定义消息
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:418", "获取更多聊天记录", 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:425", "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:440", "已读对方的消息");
});
}
},
//发送消息
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:454", "发送成功", 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();
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 {
this.MoreItemStatus = type;
}
},
//发送图片,视频消息
onSendMedia() {
common_vendor.index.chooseMedia({
count: 9,
mediaType: ["image", "video"],
sourceType: ["album", "camera"],
maxDuration: 60,
camera: "front",
success(res) {
common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:523", res.tempFiles);
if (res.tempFiles.fileType == "image")
;
else if (res.tempFiles.fileType == "video")
;
}
});
},
//发送音频消息
onSendAudio() {
},
// 获取键盘高度
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
}
};
if (!Array) {
const _component_textmessage = common_vendor.resolveComponent("textmessage");
const _component_customPKMessage = common_vendor.resolveComponent("customPKMessage");
const _component_InvitationComponents = common_vendor.resolveComponent("InvitationComponents");
(_component_textmessage + _component_customPKMessage + _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 == "text" ? {
f: "f4b42ac4-0-" + i0,
g: common_vendor.p({
messagetext: item.payload.text
})
} : {}, {
h: item.type == "pk"
}, item.type == "pk" ? {
i: "f4b42ac4-1-" + i0,
j: common_vendor.p({
message: item.payload
})
} : {}) : {}, {
k: item.senderId == $data.userinfo.id
}, item.senderId == $data.userinfo.id ? common_vendor.e({
l: $data.userinfo.headerIcon,
m: item.type == "text"
}, item.type == "text" ? {
n: "f4b42ac4-2-" + i0,
o: common_vendor.p({
messagetext: item.payload.text
})
} : {}, {
p: item.type == "pk"
}, item.type == "pk" ? {
q: "f4b42ac4-3-" + i0,
r: common_vendor.p({
message: item.payload
})
} : {}) : {}, {
s: item.id,
t: 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.Elementheight != 0 ? $data.MoreStatus ? 650 + $data.Elementheight + "rpx" : $data.KeyboardHeight != 0 ? $data.KeyboardHeight + $data.Elementheight + "rpx" : $data.Elementheight + "rpx" : $data.Elementheight + "rpx",
k: common_vendor.o([($event) => $data.content = $event.detail.value, (...args) => $options.SendInput && $options.SendInput(...args)]),
l: common_vendor.o((...args) => $options.onFocus && $options.onFocus(...args)),
m: common_vendor.o((...args) => $options.onBlur && $options.onBlur(...args)),
n: $data.content,
o: !$data.ButtonStatus
}, !$data.ButtonStatus ? {
p: common_vendor.o(($event) => $options.onMore(!$data.MoreStatus))
} : {}, {
q: $data.ButtonStatus
}, $data.ButtonStatus ? {
r: common_vendor.o((...args) => $options.onSend && $options.onSend(...args))
} : {}, {
s: $data.MoreStatus || $data.KeyboardHeight > 300 ? $data.MoreStatus ? "650rpx" : $data.KeyboardHeight > 300 ? $data.KeyboardHeight + "rpx" : "0" : "0",
t: 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
};
}),
v: $data.MoreStatus || $data.KeyboardHeight > 300 ? $data.MoreStatus ? "0" : $data.KeyboardHeight > 300 ? "0" : $data.KeyboardHeight + "rpx" : "-650rpx",
w: $data.MoreItemStatus == "Invitation"
}, $data.MoreItemStatus == "Invitation" ? {
x: common_vendor.o($options.refreshMessage),
y: common_vendor.p({
oppositeId: $data.userId,
myId: $data.userinfo.id,
avatar: $data.avatar,
nickname: $data.nickname
})
} : {}, {
z: common_vendor.o(() => {
}),
A: $data.MoreItemStatus == null ? "-1000rpx" : "0",
B: common_vendor.o(($event) => $options.onMoreItem(null)),
C: $data.MoreItemStatus == null ? "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