fix bug#3892
This commit is contained in:
parent
f6ce053787
commit
be047f30c1
@ -21,13 +21,19 @@ defineProps({
|
|||||||
datetime: {
|
datetime: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: ''
|
||||||
|
},
|
||||||
|
msg_id: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="im-message-revoke">
|
<div class="im-message-revoke">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<span v-if="login_uid == user_id"> 你撤回了一条消息 | {{ formatTime(datetime) }} </span>
|
<span v-if="login_uid == user_id"> 你撤回了一条消息 | {{ formatTime(datetime) }}
|
||||||
|
<slot></slot> <!-- 添加插槽用于放置重新编辑按钮 -->
|
||||||
|
</span>
|
||||||
<span v-else-if="talk_type == 1"> 对方撤回了一条消息 | {{ formatTime(datetime) }} </span>
|
<span v-else-if="talk_type == 1"> 对方撤回了一条消息 | {{ formatTime(datetime) }} </span>
|
||||||
<span v-else>
|
<span v-else>
|
||||||
"{{ nickname }}" 撤回了一条消息 |
|
"{{ nickname }}" 撤回了一条消息 |
|
||||||
|
@ -67,7 +67,12 @@
|
|||||||
:nickname="item.nickname"
|
:nickname="item.nickname"
|
||||||
:talk_type="item.talk_type"
|
:talk_type="item.talk_type"
|
||||||
:datetime="item.created_at"
|
:datetime="item.created_at"
|
||||||
/>
|
:msg_id="item.msg_id"
|
||||||
|
>
|
||||||
|
<template v-if="canEditRevokedMessage(item.msg_id) && item.user_id === userStore.uid">
|
||||||
|
<span class="edit-revoked-message" @click="restoreRevokedMessage(item.msg_id)">重新编辑</span>
|
||||||
|
</template>
|
||||||
|
</revoke-message>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@ -531,6 +536,7 @@ const state = ref({
|
|||||||
mentionSelectHeight: 0, //选择要提醒人的区域高度
|
mentionSelectHeight: 0, //选择要提醒人的区域高度
|
||||||
selectAreaHeight: 0, //选择要提醒人的可选人员列表区域高度
|
selectAreaHeight: 0, //选择要提醒人的可选人员列表区域高度
|
||||||
isShowMentionSelect: false, //是否显示要提醒人的选择区域
|
isShowMentionSelect: false, //是否显示要提醒人的选择区域
|
||||||
|
revokedMessages: {}, // 存储撤回的消息,格式为 {msg_id: {content, revokeTime, ...}}
|
||||||
})
|
})
|
||||||
|
|
||||||
uniOnload((options) => {
|
uniOnload((options) => {
|
||||||
@ -752,6 +758,13 @@ const onEditorChange = () => {
|
|||||||
}
|
}
|
||||||
onEditorEvent(emitCall('input_event', text))
|
onEditorEvent(emitCall('input_event', text))
|
||||||
// emit('editor-event', emitCall('input_event', text))
|
// emit('editor-event', emitCall('input_event', text))
|
||||||
|
// 清理过期的撤回消息(超过5分钟)
|
||||||
|
const now = new Date().getTime()
|
||||||
|
Object.keys(state.value.revokedMessages).forEach(msgId => {
|
||||||
|
if ((now - state.value.revokedMessages[msgId].revokeTime) > 5 * 60 * 1000) {
|
||||||
|
delete state.value.revokedMessages[msgId]
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const onClipboardMatcher = (node, Delta) => {
|
const onClipboardMatcher = (node, Delta) => {
|
||||||
@ -904,11 +917,47 @@ const actionWithdraw = (item) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const withdrawerConfirm = () => {
|
const withdrawerConfirm = () => {
|
||||||
|
// 保存撤回的消息内容和时间
|
||||||
|
if (state.value.onfocusItem && state.value.onfocusItem.msg_type === 1) {
|
||||||
|
state.value.revokedMessages[state.value.onfocusItem.msg_id] = {
|
||||||
|
content: state.value.onfocusItem.extra.content,
|
||||||
|
revokeTime: new Date().getTime(),
|
||||||
|
msgType: state.value.onfocusItem.msg_type,
|
||||||
|
extra: state.value.onfocusItem.extra
|
||||||
|
}
|
||||||
|
}
|
||||||
dialogueStore.ApiRevokeRecord(state.value.onfocusItem.msg_id)
|
dialogueStore.ApiRevokeRecord(state.value.onfocusItem.msg_id)
|
||||||
state.value.onfocusItem = null
|
state.value.onfocusItem = null
|
||||||
state.value.showWin = false
|
state.value.showWin = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加检查是否可以重新编辑撤回消息的函数
|
||||||
|
const canEditRevokedMessage = (msgId) => {
|
||||||
|
if (!state.value.revokedMessages[msgId]) return false
|
||||||
|
|
||||||
|
const now = new Date().getTime()
|
||||||
|
const revokeTime = state.value.revokedMessages[msgId].revokeTime
|
||||||
|
|
||||||
|
// 检查是否在5分钟内
|
||||||
|
return (now - revokeTime) <= 5 * 60 * 1000
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加恢复撤回消息到输入框的函数
|
||||||
|
const restoreRevokedMessage = (msgId) => {
|
||||||
|
if (!state.value.revokedMessages[msgId]) return
|
||||||
|
|
||||||
|
const revokedMsg = state.value.revokedMessages[msgId]
|
||||||
|
|
||||||
|
// 根据消息类型处理
|
||||||
|
if (revokedMsg.msgType === 1) { // 文本消息
|
||||||
|
const quill = getQuill()
|
||||||
|
quill.setText(revokedMsg.content)
|
||||||
|
quill.focus()
|
||||||
|
}
|
||||||
|
// 可以根据需要添加其他类型消息的处理
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const actionDelete = (item) => {
|
const actionDelete = (item) => {
|
||||||
console.log('删除')
|
console.log('删除')
|
||||||
item.isCheck = true
|
item.isCheck = true
|
||||||
@ -1154,6 +1203,17 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.edit-revoked-message {
|
||||||
|
margin-left: 10rpx;
|
||||||
|
color: #46299D;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 24rpx;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.searchRoot {
|
.searchRoot {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
padding: 22rpx 18rpx;
|
padding: 22rpx 18rpx;
|
||||||
|
Loading…
Reference in New Issue
Block a user