354 lines
11 KiB
JavaScript
354 lines
11 KiB
JavaScript
|
"use strict";
|
|||
|
const common_vendor = require("../../../common/vendor.js");
|
|||
|
const common_assets = require("../../../common/assets.js");
|
|||
|
const components_public_eventBus = require("../../../components/public/event-bus.js");
|
|||
|
const utils_msgtype = require("../../../utils/msgtype.js");
|
|||
|
const pages_news_questionAnswer_fn = require("./fn.js");
|
|||
|
if (!Array) {
|
|||
|
const _easycom_uni_easyinput2 = common_vendor.resolveComponent("uni-easyinput");
|
|||
|
_easycom_uni_easyinput2();
|
|||
|
}
|
|||
|
const _easycom_uni_easyinput = () => "../../../uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.js";
|
|||
|
if (!Math) {
|
|||
|
(common_vendor.unref(newsTempSystem) + common_vendor.unref(newsTemplate) + JyVoice + _easycom_uni_easyinput + JyPlus + emoji)();
|
|||
|
}
|
|||
|
const newsTempSystem = () => "./components/news-temp-system/index.js";
|
|||
|
const newsTemplate = () => "./components/news-temp/index.js";
|
|||
|
const emoji = () => "./emoji.js";
|
|||
|
const JyVoice = () => "./jy-voice.js";
|
|||
|
const JyPlus = () => "./jy-plus.js";
|
|||
|
const _sfc_main = {
|
|||
|
__name: "index",
|
|||
|
setup(__props) {
|
|||
|
const {
|
|||
|
userinfo
|
|||
|
} = common_vendor.useStore().state;
|
|||
|
const {
|
|||
|
showToastAndRedirect,
|
|||
|
format_url
|
|||
|
} = common_vendor.inject("util");
|
|||
|
const chatParams = common_vendor.reactive({
|
|||
|
from: null,
|
|||
|
to: null,
|
|||
|
chatType: null,
|
|||
|
ext: {
|
|||
|
from: {
|
|||
|
userNickname: null,
|
|||
|
userPortrait: null
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
common_vendor.provide("chatParams", chatParams);
|
|||
|
common_vendor.onMounted(() => {
|
|||
|
try {
|
|||
|
const msg = common_vendor.index.getStorageSync("toUser") || void 0;
|
|||
|
if (msg) {
|
|||
|
console.log(msg, "msg");
|
|||
|
switch (msg.msgType) {
|
|||
|
case utils_msgtype.msgType.chatType.SINGLE_CHAT:
|
|||
|
chatParams.to = msg.userId;
|
|||
|
break;
|
|||
|
case utils_msgtype.msgType.chatType.GROUP_CHAT:
|
|||
|
chatParams.to = msg.groupid;
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
chatParams.chatType = msg.msgType;
|
|||
|
chatParams.from = userinfo.userId;
|
|||
|
chatParams.ext.from = {
|
|||
|
userNickname: userinfo.userNickname,
|
|||
|
userPortrait: userinfo.userPortrait
|
|||
|
};
|
|||
|
}
|
|||
|
} catch (error) {
|
|||
|
console.log("uni.getStorageSync('toUser')报错", error);
|
|||
|
}
|
|||
|
if (!common_vendor.index.WebIM.config.isMultiLoginSessions) {
|
|||
|
getApp().globalData.conn.reopen();
|
|||
|
}
|
|||
|
getHistory(scrollToBottom);
|
|||
|
components_public_eventBus.eventBus.on("onMessage", (msg) => {
|
|||
|
console.log(123222222, msg, chatParams.to);
|
|||
|
switch (msg.chatType) {
|
|||
|
case utils_msgtype.msgType.chatType.SINGLE_CHAT:
|
|||
|
if (msg.from == chatParams.to) {
|
|||
|
list.value.push(msg);
|
|||
|
scrollToBottom();
|
|||
|
}
|
|||
|
break;
|
|||
|
case utils_msgtype.msgType.chatType.GROUP_CHAT:
|
|||
|
if (msg.to == chatParams.to) {
|
|||
|
list.value.push(msg);
|
|||
|
scrollToBottom();
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
common_vendor.onUnmounted(() => {
|
|||
|
components_public_eventBus.eventBus.off("onMessage");
|
|||
|
});
|
|||
|
const content = common_vendor.ref("");
|
|||
|
const list = common_vendor.ref([]);
|
|||
|
const top = common_vendor.ref(0);
|
|||
|
const toolStatus = common_vendor.reactive({
|
|||
|
// 录音状态
|
|||
|
showVoice: false,
|
|||
|
// emoji
|
|||
|
showEmoji: false,
|
|||
|
// 加号
|
|||
|
showPlus: false
|
|||
|
});
|
|||
|
const emojiTap = (val) => {
|
|||
|
content.value = content.value + val;
|
|||
|
};
|
|||
|
const focus = () => {
|
|||
|
Object.keys(toolStatus).forEach((item) => {
|
|||
|
toolStatus[item] = false;
|
|||
|
});
|
|||
|
};
|
|||
|
const toolClick = (val) => {
|
|||
|
if (toolStatus[val]) {
|
|||
|
toolStatus[val] = false;
|
|||
|
return;
|
|||
|
}
|
|||
|
Object.keys(toolStatus).forEach((item) => {
|
|||
|
toolStatus[item] = false;
|
|||
|
});
|
|||
|
toolStatus[val] = true;
|
|||
|
};
|
|||
|
const send = () => {
|
|||
|
let type = utils_msgtype.msgType.TEXT;
|
|||
|
let option = {
|
|||
|
// 消息类型。
|
|||
|
type,
|
|||
|
// 消息内容。
|
|||
|
msg: content.value,
|
|||
|
// 消息接收方:单聊为对方用户 ID,群聊和聊天室分别为群组 ID 和聊天室 ID。
|
|||
|
...chatParams
|
|||
|
};
|
|||
|
let msg = common_vendor.index.WebIM.message.create(option);
|
|||
|
WebIMSend(msg, {
|
|||
|
type,
|
|||
|
msg: content.value
|
|||
|
});
|
|||
|
};
|
|||
|
const plusClick = (res) => {
|
|||
|
let type = res.type;
|
|||
|
switch (type) {
|
|||
|
case utils_msgtype.msgType.IMAGE:
|
|||
|
let option = {
|
|||
|
...chatParams,
|
|||
|
// 消息类型。
|
|||
|
type,
|
|||
|
// 图片文件的 URL 地址。
|
|||
|
url: res.content
|
|||
|
};
|
|||
|
let msg = common_vendor.index.WebIM.message.create(option);
|
|||
|
WebIMSend(msg, {
|
|||
|
type,
|
|||
|
url: res.content
|
|||
|
});
|
|||
|
break;
|
|||
|
}
|
|||
|
};
|
|||
|
const setVoice = (res) => {
|
|||
|
let type = res.type;
|
|||
|
let filename = `${(/* @__PURE__ */ new Date()).getTime()}.mp3`;
|
|||
|
let option = {
|
|||
|
...chatParams,
|
|||
|
type,
|
|||
|
// 图片文件的 URL 地址。
|
|||
|
body: {
|
|||
|
type,
|
|||
|
filename,
|
|||
|
url: res.content,
|
|||
|
length: Math.ceil(res.length)
|
|||
|
}
|
|||
|
};
|
|||
|
let msg = common_vendor.index.WebIM.message.create(option);
|
|||
|
WebIMSend(msg, {
|
|||
|
type,
|
|||
|
url: res.content,
|
|||
|
filename,
|
|||
|
length: Math.ceil(res.length)
|
|||
|
});
|
|||
|
};
|
|||
|
const WebIMSend = (msg, obj) => {
|
|||
|
common_vendor.index.WebIM.conn.send(msg).then((val) => {
|
|||
|
list.value.push({
|
|||
|
...chatParams,
|
|||
|
time: (/* @__PURE__ */ new Date()).getTime(),
|
|||
|
onlineState: 3,
|
|||
|
id: val.localMsgId,
|
|||
|
...obj
|
|||
|
});
|
|||
|
console.log(list.value);
|
|||
|
scrollToBottom();
|
|||
|
}).catch((e) => {
|
|||
|
console.log("方法发送该图片消", e);
|
|||
|
});
|
|||
|
};
|
|||
|
const setRed = (res, params) => {
|
|||
|
console.log("====================================");
|
|||
|
console.log(res, params);
|
|||
|
console.log("====================================");
|
|||
|
if (res.code == 200) {
|
|||
|
const {
|
|||
|
data
|
|||
|
} = JSON.parse(res.data.message);
|
|||
|
const id = data[Object.keys(data)[0]];
|
|||
|
let option = {
|
|||
|
...chatParams,
|
|||
|
id,
|
|||
|
customEvent: "custom_event",
|
|||
|
time: data.createTime,
|
|||
|
onlineState: 3,
|
|||
|
// 自定义消息扩展。
|
|||
|
ext: {
|
|||
|
...params,
|
|||
|
id: res.data.id,
|
|||
|
time: data.createTime
|
|||
|
}
|
|||
|
};
|
|||
|
option.type = utils_msgtype.msgType.CUSTOM;
|
|||
|
list.value.push(option);
|
|||
|
}
|
|||
|
};
|
|||
|
common_vendor.provide("setRed", setRed);
|
|||
|
const cursor = common_vendor.ref(-1);
|
|||
|
const isLast = common_vendor.ref(false);
|
|||
|
const loading = common_vendor.ref(false);
|
|||
|
const getHistory = (callback = () => {
|
|||
|
}) => {
|
|||
|
if (loading.value) {
|
|||
|
showToastAndRedirect("加载中");
|
|||
|
return;
|
|||
|
}
|
|||
|
if (!isLast.value) {
|
|||
|
loading.value = true;
|
|||
|
console.log(111111, chatParams);
|
|||
|
pages_news_questionAnswer_fn.getHistoryMsg(chatParams.chatType, chatParams.to, cursor.value).then((res) => {
|
|||
|
cursor.value = res.messages[res.messages.length - 1].id;
|
|||
|
isLast.value = res.isLast;
|
|||
|
list.value = res.messages.reverse().concat(list.value);
|
|||
|
callback();
|
|||
|
}).catch((e) => {
|
|||
|
}).finally(() => {
|
|||
|
loading.value = false;
|
|||
|
});
|
|||
|
}
|
|||
|
};
|
|||
|
const handleScroll = (e) => {
|
|||
|
if (e.detail.scrollTop === 0) {
|
|||
|
getHistory();
|
|||
|
}
|
|||
|
};
|
|||
|
common_vendor.onLoad((options) => {
|
|||
|
common_vendor.index.setNavigationBarTitle({
|
|||
|
title: options.userNickname
|
|||
|
});
|
|||
|
});
|
|||
|
const scrollToBottom = () => {
|
|||
|
common_vendor.nextTick$1().then(() => {
|
|||
|
common_vendor.index.createSelectorQuery().select("#scroll-content").boundingClientRect((rect) => {
|
|||
|
top.value = rect.height + 60;
|
|||
|
}).exec();
|
|||
|
});
|
|||
|
};
|
|||
|
const is = common_vendor.ref(false);
|
|||
|
const isH = common_vendor.ref({
|
|||
|
height: "0px",
|
|||
|
duration: "0.25s"
|
|||
|
});
|
|||
|
const keyboardheightchange = (res) => {
|
|||
|
isH.value = res.detail;
|
|||
|
common_vendor.nextTick$1(() => {
|
|||
|
is.value = res.detail.height > 0 ? true : false;
|
|||
|
});
|
|||
|
};
|
|||
|
return (_ctx, _cache) => {
|
|||
|
return common_vendor.e({
|
|||
|
a: common_vendor.f(list.value, (item, index, i0) => {
|
|||
|
var _a, _b;
|
|||
|
return common_vendor.e({
|
|||
|
a: ((_a = item == null ? void 0 : item.ext) == null ? void 0 : _a.type) === "system"
|
|||
|
}, ((_b = item == null ? void 0 : item.ext) == null ? void 0 : _b.type) === "system" ? {
|
|||
|
b: "9bd9708b-0-" + i0,
|
|||
|
c: common_vendor.p({
|
|||
|
item
|
|||
|
})
|
|||
|
} : common_vendor.e({
|
|||
|
d: item.from === chatParams.from
|
|||
|
}, item.from === chatParams.from ? {
|
|||
|
e: "9bd9708b-1-" + i0,
|
|||
|
f: common_vendor.p({
|
|||
|
item
|
|||
|
}),
|
|||
|
g: common_vendor.unref(format_url)(common_vendor.unref(userinfo).userPortrait, "img")
|
|||
|
} : common_vendor.e({
|
|||
|
h: item.chatType === common_vendor.unref(utils_msgtype.msgType).chatType.GROUP_CHAT
|
|||
|
}, item.chatType === common_vendor.unref(utils_msgtype.msgType).chatType.GROUP_CHAT ? {
|
|||
|
i: common_vendor.t(item.ext.from.userNickname)
|
|||
|
} : {}, {
|
|||
|
j: "9bd9708b-2-" + i0,
|
|||
|
k: common_vendor.p({
|
|||
|
item
|
|||
|
})
|
|||
|
})), {
|
|||
|
l: index
|
|||
|
});
|
|||
|
}),
|
|||
|
b: top.value,
|
|||
|
c: common_vendor.o$1(handleScroll)
|
|||
|
}, {}, {
|
|||
|
e: common_vendor.unref(common_assets.NewsVoice),
|
|||
|
f: common_vendor.o$1(($event) => toolClick("showVoice")),
|
|||
|
g: toolStatus.showVoice
|
|||
|
}, toolStatus.showVoice ? {
|
|||
|
h: common_vendor.o$1(setVoice)
|
|||
|
} : {}, {
|
|||
|
i: !toolStatus.showVoice
|
|||
|
}, !toolStatus.showVoice ? {
|
|||
|
j: common_vendor.o$1(focus),
|
|||
|
k: common_vendor.o$1(send),
|
|||
|
l: common_vendor.o$1(keyboardheightchange),
|
|||
|
m: common_vendor.o$1(($event) => content.value = $event),
|
|||
|
n: common_vendor.p({
|
|||
|
type: "text",
|
|||
|
clearable: false,
|
|||
|
["adjust-position"]: false,
|
|||
|
placeholder: "请输入你的问题",
|
|||
|
confirmType: "发送",
|
|||
|
modelValue: content.value
|
|||
|
})
|
|||
|
} : {}, {
|
|||
|
o: common_vendor.unref(common_assets.NewsEmoji),
|
|||
|
p: common_vendor.o$1(($event) => toolClick("showEmoji")),
|
|||
|
q: !content.value
|
|||
|
}, !content.value ? {
|
|||
|
r: common_vendor.unref(common_assets.NewsPlus),
|
|||
|
s: common_vendor.o$1(($event) => toolClick("showPlus"))
|
|||
|
} : {
|
|||
|
t: common_vendor.o$1(send)
|
|||
|
}, {
|
|||
|
v: is.value
|
|||
|
}, is.value ? {
|
|||
|
w: `${isH.value.height}px`,
|
|||
|
x: `${isH.value.duration}s`
|
|||
|
} : {}, {
|
|||
|
y: toolStatus.showPlus
|
|||
|
}, toolStatus.showPlus ? {
|
|||
|
z: common_vendor.o$1(plusClick)
|
|||
|
} : {}, {
|
|||
|
A: toolStatus.showEmoji
|
|||
|
}, toolStatus.showEmoji ? {
|
|||
|
B: common_vendor.o$1(emojiTap)
|
|||
|
} : {});
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-9bd9708b"]]);
|
|||
|
wx.createPage(MiniProgramPage);
|