mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-04-22 03:47:28 +08:00
Merge branch 'feature/daily_bugfix_0825_b' into codex/add-floating-window-support-for-message-box-a7msu4
This commit is contained in:
@@ -35,9 +35,21 @@
|
||||
{{ TimeManager.format(item.createdAt) }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="item.replyTo" class="reply-preview">
|
||||
<div class="reply-author">{{ item.replyTo.sender.username }}</div>
|
||||
<div class="reply-content" v-html="renderMarkdown(item.replyTo.content)"></div>
|
||||
</div>
|
||||
<div class="message-content">
|
||||
<div class="info-content-text" v-html="renderMarkdown(item.content)"></div>
|
||||
</div>
|
||||
<ReactionsGroup
|
||||
:model-value="item.reactions"
|
||||
content-type="message"
|
||||
:content-id="item.id"
|
||||
@update:modelValue="(v) => (item.reactions = v)"
|
||||
>
|
||||
<i class="fas fa-reply reply-btn" @click="setReply(item)"> 写个回复...</i>
|
||||
</ReactionsGroup>
|
||||
</template>
|
||||
</BaseTimeline>
|
||||
<div class="empty-container">
|
||||
@@ -51,6 +63,11 @@
|
||||
</div>
|
||||
|
||||
<div class="message-input-area">
|
||||
<div v-if="replyTo" class="active-reply">
|
||||
正在回复 {{ replyTo.sender.username }}:
|
||||
{{ stripMarkdownLength(replyTo.content, 50) }}
|
||||
<i class="fas fa-times close-reply" @click="replyTo = null"></i>
|
||||
</div>
|
||||
<MessageEditor :loading="sending" @submit="sendMessage" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -70,8 +87,9 @@ import {
|
||||
import { useRoute } from 'vue-router'
|
||||
import { getToken, fetchCurrentUser } from '~/utils/auth'
|
||||
import { toast } from '~/main'
|
||||
import { renderMarkdown } from '~/utils/markdown'
|
||||
import { renderMarkdown, stripMarkdownLength } from '~/utils/markdown'
|
||||
import MessageEditor from '~/components/MessageEditor.vue'
|
||||
import ReactionsGroup from '~/components/ReactionsGroup.vue'
|
||||
import { useWebSocket } from '~/composables/useWebSocket'
|
||||
import { useUnreadCount } from '~/composables/useUnreadCount'
|
||||
import { useChannelsUnreadCount } from '~/composables/useChannelsUnreadCount'
|
||||
@@ -104,6 +122,7 @@ const conversationName = ref('')
|
||||
const isChannel = ref(false)
|
||||
const isFloatMode = computed(() => route.query.float !== undefined)
|
||||
const floatRoute = useState('messageFloatRoute')
|
||||
const replyTo = ref(null)
|
||||
|
||||
const hasMoreMessages = computed(() => currentPage.value < totalPages.value - 1)
|
||||
|
||||
@@ -122,6 +141,10 @@ function handleAvatarError(event) {
|
||||
event.target.src = '/default-avatar.svg'
|
||||
}
|
||||
|
||||
function setReply(message) {
|
||||
replyTo.value = message
|
||||
}
|
||||
|
||||
// No changes needed here, as renderMarkdown is now imported.
|
||||
// The old function is removed.
|
||||
|
||||
@@ -215,7 +238,7 @@ async function sendMessage(content, clearInput) {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
body: JSON.stringify({ content }),
|
||||
body: JSON.stringify({ content, replyToId: replyTo.value?.id }),
|
||||
},
|
||||
)
|
||||
} else {
|
||||
@@ -233,6 +256,7 @@ async function sendMessage(content, clearInput) {
|
||||
body: JSON.stringify({
|
||||
recipientId: recipient.id,
|
||||
content: content,
|
||||
replyToId: replyTo.value?.id,
|
||||
}),
|
||||
})
|
||||
}
|
||||
@@ -247,6 +271,7 @@ async function sendMessage(content, clearInput) {
|
||||
},
|
||||
})
|
||||
clearInput()
|
||||
replyTo.value = null
|
||||
setTimeout(() => {
|
||||
scrollToBottom()
|
||||
}, 100)
|
||||
@@ -558,4 +583,40 @@ function openUser(id) {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.reply-preview {
|
||||
padding: 5px 10px;
|
||||
border-left: 5px solid var(--primary-color);
|
||||
margin-bottom: 5px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.reply-author {
|
||||
font-weight: bold;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.reply-btn {
|
||||
cursor: pointer;
|
||||
padding: 4px;
|
||||
opacity: 0.6;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.reply-btn:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.active-reply {
|
||||
background-color: var(--bg-color-soft);
|
||||
padding: 5px 10px;
|
||||
border-left: 5px solid var(--primary-color);
|
||||
margin-bottom: 5px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.close-reply {
|
||||
margin-left: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user