Merge remote-tracking branch 'origin/ah-simple' into ah-simple

This commit is contained in:
syruan 2025-06-02 16:12:31 +08:00
commit 14f9a8182e
1 changed files with 42 additions and 19 deletions

View File

@ -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;
} }