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);
|