fix bug#3892

This commit is contained in:
wwt 2025-03-13 13:08:58 +08:00
parent f6ce053787
commit be047f30c1
2 changed files with 68 additions and 2 deletions

View File

@ -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 }}" 撤回了一条消息 |

View File

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