修改:发送和接收优化
This commit is contained in:
parent
294fb80b05
commit
b8466fc7e7
@ -3,10 +3,11 @@ import { Dialog } from '@/components/Dialog'
|
|||||||
import { shallowRef, defineAsyncComponent, DefineComponent } from 'vue'
|
import { shallowRef, defineAsyncComponent, DefineComponent } from 'vue'
|
||||||
import { getAccessToken } from '@/utils/auth'
|
import { getAccessToken } from '@/utils/auth'
|
||||||
import { useWebSocket } from '@vueuse/core'
|
import { useWebSocket } from '@vueuse/core'
|
||||||
import { imMessageStore, ImMessageWebSocket } from '@/store/modules/imMessageStore'
|
import { chatStore, ImMessageWebSocket } from '@/store/modules/chatStore'
|
||||||
|
import * as MessageApi from '@/api/im/message'
|
||||||
|
|
||||||
// 从 imMessageStore 中导入 addMessage 方法
|
// 从 imMessageStore 中导入 addMessage 方法
|
||||||
const { addMessage } = imMessageStore()
|
const { addMessage, setLocalMaxSeq, loadMessages } = chatStore()
|
||||||
|
|
||||||
// 异步加载可能的对话框内容组件
|
// 异步加载可能的对话框内容组件
|
||||||
const IMComponent = defineAsyncComponent(() => import('@/views/im/index.vue'))
|
const IMComponent = defineAsyncComponent(() => import('@/views/im/index.vue'))
|
||||||
@ -64,6 +65,7 @@ function initWebSocket() {
|
|||||||
|
|
||||||
// 保存到 pina imMessageStore
|
// 保存到 pina imMessageStore
|
||||||
addMessage(message)
|
addMessage(message)
|
||||||
|
setLocalMaxSeq(content.sequence)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -75,10 +77,23 @@ function initWebSocket() {
|
|||||||
console.log('websocket 初始化成功')
|
console.log('websocket 初始化成功')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始化消息列表
|
||||||
|
const pullParams = reactive({
|
||||||
|
sequence: 0, // 消息序列号
|
||||||
|
size: 10
|
||||||
|
})
|
||||||
|
async function loadImMessages() {
|
||||||
|
// 获取消息列表
|
||||||
|
const list: ImMessageWebSocket[] = await MessageApi.pullMessageList(pullParams)
|
||||||
|
loadMessages(list)
|
||||||
|
}
|
||||||
|
|
||||||
// ========== 初始化 =========
|
// ========== 初始化 =========
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 首次加载 websocket
|
// 首次加载 websocket
|
||||||
initWebSocket()
|
initWebSocket()
|
||||||
|
// 加载loadMessages
|
||||||
|
loadImMessages()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { store } from '../index'
|
||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
export interface ImMessageWebSocket {
|
export interface ImMessageWebSocket {
|
||||||
@ -13,23 +14,33 @@ export interface ImMessageWebSocket {
|
|||||||
sequence: number // 序号
|
sequence: number // 序号
|
||||||
}
|
}
|
||||||
|
|
||||||
export const imMessageStore = defineStore({
|
export const chatStore = defineStore({
|
||||||
id: 'imMessage',
|
id: 'imMessage',
|
||||||
state: () => ({
|
state: () => ({
|
||||||
messages: [] as ImMessageWebSocket[]
|
messages: [] as ImMessageWebSocket[],
|
||||||
|
localMaxSeq: 0
|
||||||
}),
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
getMessages(): ImMessageWebSocket[] {
|
getMessages(): ImMessageWebSocket[] {
|
||||||
return this.messages
|
return this.messages
|
||||||
|
},
|
||||||
|
getLocalMaxSeq(): number {
|
||||||
|
return this.localMaxSeq
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
loadMessages(messages: ImMessageWebSocket[]) {
|
||||||
|
this.messages = messages
|
||||||
|
},
|
||||||
addMessage(message: ImMessageWebSocket) {
|
addMessage(message: ImMessageWebSocket) {
|
||||||
this.messages.push(message)
|
this.messages.push(message)
|
||||||
|
},
|
||||||
|
setLocalMaxSeq(seq: number) {
|
||||||
|
this.localMaxSeq = seq
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export function useImMessageStore() {
|
export const useImMessageStore = () => {
|
||||||
return imMessageStore()
|
return chatStore(store)
|
||||||
}
|
}
|
@ -38,7 +38,7 @@ const handleMsgTimeShow = (sendTime, index) => {
|
|||||||
}
|
}
|
||||||
/* computed-- 消息来源是否为自己 */
|
/* computed-- 消息来源是否为自己 */
|
||||||
const isMyself = (msgBody) => {
|
const isMyself = (msgBody) => {
|
||||||
return msgBody.senderId === userStore.user.id || msgBody.receiverId === userStore.user.id
|
return msgBody.senderId === userStore.user.id
|
||||||
}
|
}
|
||||||
/* 文本中是否包含link */
|
/* 文本中是否包含link */
|
||||||
const isLink = computed(() => {
|
const isLink = computed(() => {
|
||||||
@ -52,9 +52,7 @@ const loginUserInfo = {
|
|||||||
}
|
}
|
||||||
//处理聊天对方昵称展示
|
//处理聊天对方昵称展示
|
||||||
const handleNickName = (msgBody) => {
|
const handleNickName = (msgBody) => {
|
||||||
return msgBody.senderId === userStore.user.id || msgBody.receiverId === userStore.user.id
|
return msgBody.senderId === userStore.user.id ? '我' : '对方'
|
||||||
? '我'
|
|
||||||
: '对方'
|
|
||||||
}
|
}
|
||||||
//引用消息
|
//引用消息
|
||||||
let clickQuoteMsgId = ref('')
|
let clickQuoteMsgId = ref('')
|
||||||
|
@ -5,7 +5,10 @@ import { messageType } from '@/constant/im'
|
|||||||
import MessageList from './components/messageList/index.vue'
|
import MessageList from './components/messageList/index.vue'
|
||||||
import InputBox from './components/inputBox/index.vue'
|
import InputBox from './components/inputBox/index.vue'
|
||||||
import * as MessageApi from '@/api/im/message'
|
import * as MessageApi from '@/api/im/message'
|
||||||
import { imMessageStore } from '@/store/modules/imMessageStore'
|
import { chatStore, useImMessageStore } from '@/store/modules/chatStore'
|
||||||
|
|
||||||
|
const { addMessage, setLocalMaxSeq } = chatStore()
|
||||||
|
const { messages } = useImMessageStore()
|
||||||
|
|
||||||
const { query } = useRoute() // 查询参数
|
const { query } = useRoute() // 查询参数
|
||||||
|
|
||||||
@ -15,15 +18,6 @@ const drawer = ref(false) //抽屉显隐
|
|||||||
const handleDrawer = () => {
|
const handleDrawer = () => {
|
||||||
drawer.value = !drawer.value
|
drawer.value = !drawer.value
|
||||||
}
|
}
|
||||||
//删除好友
|
|
||||||
const delTheFriend = () => {
|
|
||||||
console.log(nowPickInfo.value)
|
|
||||||
if (nowPickInfo.value?.id) {
|
|
||||||
const targetId = nowPickInfo.value.id
|
|
||||||
// EaseChatClient.deleteContact(targetId)
|
|
||||||
// ElMessage({ type: 'success', center: true, message: '好友已删除~' })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 当前聊天对象信息
|
// 当前聊天对象信息
|
||||||
const nowPickInfo = ref({
|
const nowPickInfo = ref({
|
||||||
id: 100,
|
id: 100,
|
||||||
@ -39,24 +33,15 @@ const nowPickInfo = ref({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
//获取群组详情
|
|
||||||
const groupDetail = computed(() => {
|
|
||||||
return nowPickInfo.value.groupDetail
|
|
||||||
})
|
|
||||||
//获取对应的消息内容
|
//获取对应的消息内容
|
||||||
const pullParams = reactive({
|
const pullParams = reactive({
|
||||||
sequence: null, // 消息序列号 默认为null
|
sequence: 0, // 消息序列号
|
||||||
size: 10
|
size: 10
|
||||||
})
|
})
|
||||||
|
// 获取消息列表
|
||||||
const messageData = ref([])
|
const messageData = ref([])
|
||||||
const getMessageData = async () => {
|
const getMessageData = async () => {
|
||||||
// 获取消息列表
|
messageData.value = messages
|
||||||
const imMessages = imMessageStore().getMessages
|
|
||||||
if (imMessages) {
|
|
||||||
console.log('imMessages:' + imMessages)
|
|
||||||
console.log('imMessages:' + imMessages.length)
|
|
||||||
}
|
|
||||||
messageData.value = await MessageApi.pullMessageList(pullParams)
|
|
||||||
}
|
}
|
||||||
console.log(messageData)
|
console.log(messageData)
|
||||||
|
|
||||||
@ -69,10 +54,6 @@ const fechHistoryMessage = (loadType) => {
|
|||||||
console.log(loadType)
|
console.log(loadType)
|
||||||
console.log('加载更多')
|
console.log('加载更多')
|
||||||
loadingHistoryMsg.value = true
|
loadingHistoryMsg.value = true
|
||||||
// 如果 messageData 不为空 ,获取第一条数据的 sequence
|
|
||||||
if (messageData.value.length) {
|
|
||||||
pullParams.sequence = messageData.value[0].sequence
|
|
||||||
}
|
|
||||||
getMessageData()
|
getMessageData()
|
||||||
loadingHistoryMsg.value = false
|
loadingHistoryMsg.value = false
|
||||||
}
|
}
|
||||||
@ -80,11 +61,6 @@ const fechHistoryMessage = (loadType) => {
|
|||||||
const scrollMessageList = (direction) => {
|
const scrollMessageList = (direction) => {
|
||||||
console.log(direction)
|
console.log(direction)
|
||||||
}
|
}
|
||||||
//消息重新编辑
|
|
||||||
const inputBox = ref(null)
|
|
||||||
const reEditMessage = (msg) => (inputBox.value.textContent = msg)
|
|
||||||
//消息引用
|
|
||||||
const messageQuote = (msg) => inputBox.value.handleQuoteMessage(msg)
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getMessageData()
|
getMessageData()
|
||||||
|
Loading…
Reference in New Issue
Block a user