317 lines
11 KiB
JavaScript
317 lines
11 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");
|
|
const components_goEasyTool_tool = require("../../../components/goEasyTool/tool.js");
|
|
const textmessage = () => "./messageComponent/textmessage.js";
|
|
const InvitationComponents = () => "./moreMessageComponents/InvitationComponents.js";
|
|
const _sfc_main = {
|
|
data() {
|
|
return {
|
|
userId: "",
|
|
// 对方用户id
|
|
nickname: "",
|
|
// 对方用户昵称
|
|
triggered: false,
|
|
// 下拉刷新状态
|
|
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,
|
|
// 上一次刷新时间戳
|
|
popUpList: [
|
|
{
|
|
name: "邀请",
|
|
icon: "https://vv-1317974657.cos.ap-shanghai.myqcloud.com/util/chat_invite.png",
|
|
type: "Invitation"
|
|
}
|
|
]
|
|
/// 更多消息类型弹窗列表
|
|
};
|
|
},
|
|
onShow() {
|
|
this.onPage = true;
|
|
},
|
|
onHide() {
|
|
this.onPage = false;
|
|
},
|
|
onLoad(options) {
|
|
common_vendor.index.getStorage({
|
|
key: "userinfo",
|
|
success: (res) => {
|
|
this.userinfo = res;
|
|
}
|
|
});
|
|
this.userId = options.userId;
|
|
this.nickname = options.nickname;
|
|
this.avatar = options.avatar;
|
|
components_goEasyTool_tool.getConversationMessages(this.$goeasy, this.userId, null).then((res) => {
|
|
this.chatList = res.map((item) => {
|
|
item.id = components_ChatId.generateId();
|
|
return item;
|
|
});
|
|
common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:209", "获取和对方用户的聊天记录", this.chatList);
|
|
setTimeout(() => {
|
|
this.ElementPositioning = this.chatList[this.chatList.length - 1].id;
|
|
}, 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:223", "已读对方的消息");
|
|
});
|
|
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: {
|
|
//时间显示
|
|
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;
|
|
}
|
|
},
|
|
//监听已读消息
|
|
onMessageRead(message) {
|
|
common_vendor.index.__f__("log", "at pages/index/chat/chat.vue:275", "已读消息", message);
|
|
},
|
|
//监听接受消息
|
|
onPrivateMessageReceived(message) {
|
|
if (!this.Scrolling) {
|
|
this.ElementPositioning = message.id = components_ChatId.generateId();
|
|
this.judgescrollTop = false;
|
|
} else {
|
|
message.id = components_ChatId.generateId();
|
|
}
|
|
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:288", "已读对方的消息");
|
|
});
|
|
}
|
|
},
|
|
//发送消息
|
|
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:302", "发送成功", res);
|
|
this.ElementPositioning = res.id = components_ChatId.generateId();
|
|
this.chatList.push(res);
|
|
this.judgescrollTop = false;
|
|
});
|
|
this.content = "";
|
|
this.ButtonStatus = 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) {
|
|
this.MoreItemStatus = type;
|
|
},
|
|
// 获取键盘高度
|
|
onFocus(event) {
|
|
if (!this.Scrolling) {
|
|
this.ElementPositioning = null;
|
|
setTimeout(() => {
|
|
this.ElementPositioning = this.chatList[this.chatList.length - 1].id;
|
|
}, 100);
|
|
this.judgescrollTop = false;
|
|
}
|
|
this.getscrollviewheight();
|
|
this.KeyboardHeight = event.detail.height * 2 - this.ioshide;
|
|
const query = common_vendor.index.createSelectorQuery().in(this);
|
|
query.select(".inputComponent").boundingClientRect((res) => {
|
|
this.Elementheight = res.height * 2;
|
|
}).exec();
|
|
},
|
|
//键盘消失
|
|
onBlur(event) {
|
|
this.KeyboardHeight = 0;
|
|
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
|
|
}
|
|
};
|
|
if (!Array) {
|
|
const _component_InvitationComponents = common_vendor.resolveComponent("InvitationComponents");
|
|
_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: $options.checkInterval(item.timestamp)
|
|
}, $options.checkInterval(item.timestamp) ? {
|
|
b: common_vendor.t($options.TimeFormatting(item.timestamp))
|
|
} : {}, {
|
|
c: item.id,
|
|
d: item.id
|
|
});
|
|
}),
|
|
f: common_vendor.o((...args) => _ctx.onRefresherRefresh && _ctx.onRefresherRefresh(...args)),
|
|
g: common_vendor.o((...args) => _ctx.onScrollToLower && _ctx.onScrollToLower(...args)),
|
|
h: $data.triggered,
|
|
i: $data.ElementPositioning,
|
|
j: common_vendor.o((...args) => $options.onScroll && $options.onScroll(...args)),
|
|
k: common_vendor.o(($event) => $options.onMore(false)),
|
|
l: $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",
|
|
m: common_vendor.o([($event) => $data.content = $event.detail.value, (...args) => $options.SendInput && $options.SendInput(...args)]),
|
|
n: common_vendor.o((...args) => $options.onFocus && $options.onFocus(...args)),
|
|
o: common_vendor.o((...args) => $options.onBlur && $options.onBlur(...args)),
|
|
p: $data.content,
|
|
q: !$data.ButtonStatus
|
|
}, !$data.ButtonStatus ? {
|
|
r: common_vendor.o(($event) => $options.onMore(!$data.MoreStatus))
|
|
} : {}, {
|
|
s: $data.ButtonStatus
|
|
}, $data.ButtonStatus ? {
|
|
t: common_vendor.o((...args) => $options.onSend && $options.onSend(...args))
|
|
} : {}, {
|
|
v: $data.MoreStatus || $data.KeyboardHeight != 0 ? $data.MoreStatus ? "650rpx" : $data.KeyboardHeight != 0 ? $data.KeyboardHeight + "rpx" : "0" : "0",
|
|
w: 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
|
|
};
|
|
}),
|
|
x: $data.MoreStatus || $data.KeyboardHeight != 0 ? $data.MoreStatus ? "0" : $data.KeyboardHeight != 0 ? "0" : $data.KeyboardHeight + "rpx" : "-650rpx",
|
|
y: $data.MoreItemStatus == "Invitation"
|
|
}, $data.MoreItemStatus == "Invitation" ? {} : {}, {
|
|
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
|