This commit is contained in:
bb_pan 2025-06-02 15:50:32 +08:00
parent f1ed58f691
commit 02c90ad60a
1 changed files with 42 additions and 19 deletions

View File

@ -36,7 +36,11 @@
{{ item.messageContent }}
</span>
<div>
<el-badge is-dot class="item" v-if="item.isRead != 1" />
<span
v-if="item.isRead == '0' && item.fromCompany == myCompanyId"
>
<el-badge is-dot class="item" />
</span>
</div>
</div>
</div>
@ -47,7 +51,7 @@
<div class="message-box">
<h2>{{ rightCompanyName }}</h2>
<div class="message-info-list">
<div class="message-info-list" ref="messageListRef">
<div class="message-content" v-for="item in messageDetails" :key="item.uuid">
<div
class="message-info-right"
@ -79,7 +83,7 @@
<div class="message-send">
<el-input
v-model="sendParams.messageContent"
style="width: 88%; margin-right: 16px;border-color: #00a288"
style="width: 88%; margin-right: 16px; border-color: #00a288"
:autosize="{ minRows: 2, maxRows: 30 }"
type="textarea"
/>
@ -132,17 +136,40 @@ const sendParams = ref<any>({
toCompanyName: '',
fromCompanyName: '',
})
const messageListRef = ref<HTMLElement | null>(null)
const lastMessageId = ref('')
watch(messageDetails, async (newVal, oldVal) => {
await nextTick()
// id
const lastMsg = newVal?.[newVal.length - 1]
if (lastMsg && lastMsg.uuid !== lastMessageId.value) {
lastMessageId.value = lastMsg.uuid
if (messageListRef.value) {
messageListRef.value.scrollTop = messageListRef.value.scrollHeight
}
}
})
//
const getMessageListData = async () => {
const res: any = await getMessageListApi()
const data = res.data || []
const uniqueMessages = [
...new Map([...data, ...messageListAll.value].map((item) => [item.uuid, item])).values(),
]
// uuid data messageListAll
const existingUUIDs = new Set(messageListAll.value.map((msg: any) => msg.uuid))
messageList.value = uniqueMessages
const newData = data.filter((item: any) => !existingUUIDs.has(item.uuid))
//
const combined = [...newData, ...messageListAll.value]
//
const map = new Map()
combined.forEach((item) => {
map.set(item.uuid, item)
})
messageList.value = Array.from(map.values())
}
const getMessageListAllData = async () => {
@ -188,16 +215,13 @@ const onClickMessage = async (item: any) => {
fromCompany: queryDetailsCompanyId.value,
})
// console.log(res, '--')
getMessageInfoData(queryDetailsCompanyId.value)
// console.log(res, '')
if (!messageInterval.value) {
messageInterval.value = setInterval(() => {
getMessageInfoData(queryDetailsCompanyId.value)
// getMessageHistoryData(queryDetailsCompanyId.value)
}, 5000)
messageInterval.value = setInterval(async () => {
await getMessageInfoData(queryDetailsCompanyId.value)
}, 2000)
}
{
await getMessageInfoData(queryDetailsCompanyId.value)
}
}
//
@ -206,7 +230,6 @@ const onSendMessage = debounce(async () => {
const res: any = await sendMessageApi(sendParams.value)
if (res.code == 200) {
sendParams.value.messageContent = ''
const result: any = await messageIsReadApi({
toCompany: myCompanyId.value,
fromCompany: queryDetailsCompanyId.value,
@ -234,7 +257,7 @@ onMounted(() => {
}
messageInterval.value = setInterval(() => {
getMessageInfoData(queryDetailsCompanyId.value)
}, 5000)
}, 2000)
}
myCompanyId.value = store.userInfo.companyId
@ -320,7 +343,7 @@ onUnmounted(() => {
.message-info-list {
flex: 1;
// max-height: 500px;
max-height: 700px;
overflow-y: auto !important;
}