Merge remote-tracking branch 'origin/ah-simple' into ah-simple
This commit is contained in:
commit
14f9a8182e
|
|
@ -36,7 +36,11 @@
|
||||||
{{ item.messageContent }}
|
{{ item.messageContent }}
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -47,7 +51,7 @@
|
||||||
<div class="message-box">
|
<div class="message-box">
|
||||||
<h2>{{ rightCompanyName }}</h2>
|
<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-content" v-for="item in messageDetails" :key="item.uuid">
|
||||||
<div
|
<div
|
||||||
class="message-info-right"
|
class="message-info-right"
|
||||||
|
|
@ -79,7 +83,7 @@
|
||||||
<div class="message-send">
|
<div class="message-send">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="sendParams.messageContent"
|
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 }"
|
:autosize="{ minRows: 2, maxRows: 30 }"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
/>
|
/>
|
||||||
|
|
@ -132,17 +136,40 @@ const sendParams = ref<any>({
|
||||||
toCompanyName: '',
|
toCompanyName: '',
|
||||||
fromCompanyName: '',
|
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 getMessageListData = async () => {
|
||||||
const res: any = await getMessageListApi()
|
const res: any = await getMessageListApi()
|
||||||
const data = res.data || []
|
const data = res.data || []
|
||||||
|
|
||||||
const uniqueMessages = [
|
// 用 uuid 去重:先过滤掉 data 中已存在于 messageListAll 的项
|
||||||
...new Map([...data, ...messageListAll.value].map((item) => [item.uuid, item])).values(),
|
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 () => {
|
const getMessageListAllData = async () => {
|
||||||
|
|
@ -188,16 +215,13 @@ const onClickMessage = async (item: any) => {
|
||||||
fromCompany: queryDetailsCompanyId.value,
|
fromCompany: queryDetailsCompanyId.value,
|
||||||
})
|
})
|
||||||
|
|
||||||
// console.log(res, '已读结果--')
|
|
||||||
|
|
||||||
getMessageInfoData(queryDetailsCompanyId.value)
|
|
||||||
|
|
||||||
// console.log(res, '消息已读')
|
|
||||||
if (!messageInterval.value) {
|
if (!messageInterval.value) {
|
||||||
messageInterval.value = setInterval(() => {
|
messageInterval.value = setInterval(async () => {
|
||||||
getMessageInfoData(queryDetailsCompanyId.value)
|
await getMessageInfoData(queryDetailsCompanyId.value)
|
||||||
// getMessageHistoryData(queryDetailsCompanyId.value)
|
}, 2000)
|
||||||
}, 5000)
|
}
|
||||||
|
{
|
||||||
|
await getMessageInfoData(queryDetailsCompanyId.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 点击发送
|
// 点击发送
|
||||||
|
|
@ -206,7 +230,6 @@ const onSendMessage = debounce(async () => {
|
||||||
const res: any = await sendMessageApi(sendParams.value)
|
const res: any = await sendMessageApi(sendParams.value)
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
sendParams.value.messageContent = ''
|
sendParams.value.messageContent = ''
|
||||||
|
|
||||||
const result: any = await messageIsReadApi({
|
const result: any = await messageIsReadApi({
|
||||||
toCompany: myCompanyId.value,
|
toCompany: myCompanyId.value,
|
||||||
fromCompany: queryDetailsCompanyId.value,
|
fromCompany: queryDetailsCompanyId.value,
|
||||||
|
|
@ -234,7 +257,7 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
messageInterval.value = setInterval(() => {
|
messageInterval.value = setInterval(() => {
|
||||||
getMessageInfoData(queryDetailsCompanyId.value)
|
getMessageInfoData(queryDetailsCompanyId.value)
|
||||||
}, 5000)
|
}, 2000)
|
||||||
}
|
}
|
||||||
myCompanyId.value = store.userInfo.companyId
|
myCompanyId.value = store.userInfo.companyId
|
||||||
|
|
||||||
|
|
@ -320,7 +343,7 @@ onUnmounted(() => {
|
||||||
|
|
||||||
.message-info-list {
|
.message-info-list {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
// max-height: 500px;
|
max-height: 700px;
|
||||||
overflow-y: auto !important;
|
overflow-y: auto !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue