|
@@ -26,17 +26,18 @@
|
|
|
finished-text=""
|
|
|
>
|
|
|
<template v-for="(message, index) in currConversationChatList" :key="index">
|
|
|
- <ChatMessage :message="message" ></ChatMessage>
|
|
|
+ <ChatMessage :message="message"></ChatMessage>
|
|
|
</template>
|
|
|
<div v-if="false" class="text-[#979797] text-sm text-center mt-auto mb-10">
|
|
|
{{ followStatus }}在对方关注或回复前,最多只能发送1条信息
|
|
|
</div>
|
|
|
</van-list>
|
|
|
-<!-- <van-pull-refresh v-model="refreshing" @refresh="loadMore" class="flex-1">
|
|
|
- </van-pull-refresh>-->
|
|
|
-<!-- <div class="fixed bottom-0 left-0 right-0 w-full">-->
|
|
|
+ <!-- <van-pull-refresh v-model="refreshing" @refresh="loadMore" class="flex-1">
|
|
|
+ </van-pull-refresh>-->
|
|
|
+ <div class="h-70 w-full bg-[#fff]"></div>
|
|
|
+ <div class="fixed bottom-0 left-0 right-0 w-full">
|
|
|
<ChatInput :operates="['image']" @focus="scrollToBottom" @send="handleSendMessage"></ChatInput>
|
|
|
-<!-- </div>-->
|
|
|
+ </div>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<div class="flex-1 grid place-items-center text-black-9">
|
|
@@ -44,7 +45,7 @@
|
|
|
<div v-else class="grid place-items-center">
|
|
|
<div v-if="groupId">创建成功</div>
|
|
|
<div v-else class="grid place-items-center">
|
|
|
- <div class="mb-10">创建会话失败</div>
|
|
|
+ <div class="mb-10">创建会话失败</div>
|
|
|
<van-button size="small" @click="initGroupId">点击重试</van-button>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -57,7 +58,6 @@ import ChatMessage from './chat-message'
|
|
|
import ChatInput from "./chat-input";
|
|
|
import {findHyperlinks} from "~/pages/chat/chat-message/link-message/handle";
|
|
|
import {XYWebSocket} from "~/utils/XYWebSocket";
|
|
|
-import {isValidJson} from "~/utils";
|
|
|
|
|
|
const route = useRoute()
|
|
|
const router = useRouter()
|
|
@@ -107,13 +107,12 @@ const getChatList = async (type = 'init') => {
|
|
|
const page = type === 'init' ? 1 : pageNum.value + 1;
|
|
|
const res = await chatsStore.getChatHistory({
|
|
|
pageNum: page,
|
|
|
- pageSize: 100,
|
|
|
+ pageSize: 10,
|
|
|
groupId: groupId.value,
|
|
|
})
|
|
|
pageNum.value = page;
|
|
|
await handleResponse(res);
|
|
|
- currConversationChatList.value = handleChatList(res.data?.data)
|
|
|
- console.log(currConversationChatList.value, 'currConversationChatList')
|
|
|
+ currConversationChatList.value = chatsStore.handleMessageList(res.data?.data)
|
|
|
if (type === 'init') await scrollToBottom()
|
|
|
await getFollowStatus()
|
|
|
} catch (e) {
|
|
@@ -122,14 +121,10 @@ const getChatList = async (type = 'init') => {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
-const handleChatList = (list = []) => {
|
|
|
- return (list ?? []).filter(o => isValidJson(o.messageContent)).map(o => JSON.parse(o.messageContent));
|
|
|
-}
|
|
|
|
|
|
// 发送文本消息
|
|
|
const sendTextMessage = async (text) => {
|
|
|
try {
|
|
|
- console.log(text, 'sendTextMessage')
|
|
|
if (!text) return
|
|
|
let msg = {
|
|
|
groupId: groupId.value,
|
|
@@ -140,15 +135,18 @@ const sendTextMessage = async (text) => {
|
|
|
messageType: 0,
|
|
|
noticeType: 1,
|
|
|
object: {
|
|
|
- id: getLocalId()
|
|
|
+ id: getLocalId(),
|
|
|
+ // TODO 聊天时候改了头像昵称 会出现找不到的情况
|
|
|
+ headImageUrl: userInfo?.value.headImageUrl,
|
|
|
+ showName: userInfo?.value.showName
|
|
|
}
|
|
|
}
|
|
|
const isLink = !!findHyperlinks(text)
|
|
|
if (isLink) msg.messageType = 4;
|
|
|
currConversationChatList.value.push(msg)
|
|
|
await scrollToBottom()
|
|
|
- const res = await chatsStore.sendSocketMessage(msg)
|
|
|
- console.log('luck:', res)
|
|
|
+ await chatsStore.sendSocketMessage(msg)
|
|
|
+ await getChatList('init')
|
|
|
} catch (e) {
|
|
|
console.log(e, '2')
|
|
|
} finally {
|
|
@@ -180,9 +178,9 @@ const sendImageMessage = async (file) => {
|
|
|
id: getLocalId()
|
|
|
}
|
|
|
}
|
|
|
- currConversationChatList.value.push(msg)
|
|
|
+ currConversationChatList.value.push(msg)
|
|
|
await scrollToBottom()
|
|
|
- await chatsStore.sendSocketMessage(msg)
|
|
|
+ await chatsStore.sendSocketMessage(msg)
|
|
|
} catch (e) {
|
|
|
console.error(e, '??')
|
|
|
} finally {
|
|
@@ -213,14 +211,16 @@ const handleSendMessage = async ({type, messageContent}) => {
|
|
|
}
|
|
|
|
|
|
const scrollToBottom = async () => {
|
|
|
- setTimeout(async () => {
|
|
|
- await nextTick(); // 确保DOM已经更新
|
|
|
- const listElement = chatListRef.value?.$el;
|
|
|
- if (listElement) {
|
|
|
- const scrollContainer = listElement;
|
|
|
- scrollContainer.scrollTop = scrollContainer.scrollHeight;
|
|
|
- }
|
|
|
- }, 200)
|
|
|
+ // 操作向上加载不滚动 TODO 判断用户是否有向上滑的操作更准确
|
|
|
+ if (refreshing.value) return
|
|
|
+ setTimeout(async () => {
|
|
|
+ await nextTick(); // 确保DOM已经更新
|
|
|
+ const listElement = chatListRef.value?.$el;
|
|
|
+ if (listElement) {
|
|
|
+ const scrollContainer = listElement;
|
|
|
+ scrollContainer.scrollTop = scrollContainer.scrollHeight;
|
|
|
+ }
|
|
|
+ }, 200)
|
|
|
};
|
|
|
|
|
|
// 获取我与对方的关注情况
|
|
@@ -239,7 +239,8 @@ const loadMore = async () => {
|
|
|
try {
|
|
|
refreshing.value = true
|
|
|
await getChatList('more')
|
|
|
- } catch (e) { } finally {
|
|
|
+ } catch (e) {
|
|
|
+ } finally {
|
|
|
refreshing.value = false
|
|
|
}
|
|
|
}
|
|
@@ -263,6 +264,7 @@ function getLocalId() {
|
|
|
onMounted(() => {
|
|
|
initGroupId()
|
|
|
XYWebSocket.SocketEventsBus.on(XYWebSocket.SocketEvents.chatEvent, async (chat) => {
|
|
|
+ console.log(chat, '单聊页面消息订阅')
|
|
|
const isCurrGroupId = chat.groupId && chat.groupId === groupId.value;
|
|
|
const isOtherUserMessage = chat.sendUserId && chatsStore.isRealMessage(chat.sendUserId)
|
|
|
if (isCurrGroupId && isOtherUserMessage) {
|
|
@@ -283,18 +285,19 @@ const delMessage = (messageId) => {
|
|
|
message: '是否删除这条消息?',
|
|
|
confirmButtonColor: '#FF9300'
|
|
|
})
|
|
|
- .then(async () => {
|
|
|
- const res = await request('/website/tourMessage/delMessage', {
|
|
|
- method: 'post',
|
|
|
- body: {
|
|
|
- messageId: [messageId]
|
|
|
+ .then(async () => {
|
|
|
+ const res = await request('/website/tourMessage/delMessage', {
|
|
|
+ method: 'post',
|
|
|
+ body: {
|
|
|
+ messageId: [messageId]
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ if (res && res?.success) {
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
- if (res && res?.success) {
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(() => {})
|
|
|
+ .catch(() => {
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
definePageMeta({
|