@@ -97,6 +102,8 @@ const loadingMore = ref(false)
let scrollInterval = null
const conversationName = ref('')
const isChannel = ref(false)
+const isFloatMode = computed(() => route.query.float !== undefined)
+const floatRoute = useState('messageFloatRoute')
const hasMoreMessages = computed(() => currentPage.value < totalPages.value - 1)
@@ -156,7 +163,7 @@ async function fetchMessages(page = 0) {
...item,
src: item.sender.avatar,
iconClick: () => {
- navigateTo(`/users/${item.sender.id}`, { replace: true })
+ openUser(item.sender.id)
},
}))
@@ -236,7 +243,7 @@ async function sendMessage(content, clearInput) {
...newMessage,
src: newMessage.sender.avatar,
iconClick: () => {
- navigateTo(`/users/${newMessage.sender.id}`, { replace: true })
+ openUser(newMessage.sender.id)
},
})
clearInput()
@@ -322,7 +329,7 @@ watch(isConnected, (newValue) => {
...message,
src: message.sender.avatar,
iconClick: () => {
- navigateTo(`/users/${message.sender.id}`, { replace: true })
+ openUser(message.sender.id)
},
})
// 实时收到消息时自动标记为已读
@@ -376,6 +383,19 @@ onUnmounted(() => {
}
disconnect()
})
+
+function minimize() {
+ floatRoute.value = route.fullPath
+ navigateTo('/')
+}
+
+function openUser(id) {
+ if (isFloatMode.value && typeof window !== 'undefined') {
+ window.top.location.href = `/users/${id}`
+ } else {
+ navigateTo(`/users/${id}`, { replace: true })
+ }
+}
diff --git a/frontend_nuxt/pages/index.vue b/frontend_nuxt/pages/index.vue
index 6dc86891d..9162a78b9 100644
--- a/frontend_nuxt/pages/index.vue
+++ b/frontend_nuxt/pages/index.vue
@@ -125,6 +125,7 @@
diff --git a/frontend_nuxt/pages/message-box/index.vue b/frontend_nuxt/pages/message-box/index.vue
index 2b016e81c..bb4d5eaf6 100644
--- a/frontend_nuxt/pages/message-box/index.vue
+++ b/frontend_nuxt/pages/message-box/index.vue
@@ -1,7 +1,8 @@
+
选择聊天
-
+
@@ -21,7 +22,7 @@
{{ error }}
-
+
@@ -146,8 +147,7 @@ let subscription = null
const activeTab = ref('messages')
const channels = ref([])
const loadingChannels = ref(false)
-const route = useRoute()
-const isFloatMode = computed(() => route.query.float !== undefined)
+const isFloatMode = computed(() => route.query.float === '1')
const floatRoute = useState('messageFloatRoute')
async function fetchConversations() {
@@ -230,7 +230,11 @@ async function goToChannel(id) {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
})
- navigateTo(`/message-box/${id}`)
+ if (isFloatMode.value) {
+ navigateTo(`/message-box/${id}?float=1`)
+ } else {
+ navigateTo(`/message-box/${id}`)
+ }
} catch (e) {
toast.error(e.message)
}
@@ -279,7 +283,11 @@ onUnmounted(() => {
})
function goToConversation(id) {
- navigateTo(`/message-box/${id}`)
+ if (isFloatMode.value) {
+ navigateTo(`/message-box/${id}?float=1`)
+ } else {
+ navigateTo(`/message-box/${id}`)
+ }
}
function minimize() {
@@ -290,11 +298,15 @@ function minimize() {
diff --git a/frontend_nuxt/pages/message-box/[id].vue b/frontend_nuxt/pages/message-box/[id].vue
index 370f48045..8f183b127 100644
--- a/frontend_nuxt/pages/message-box/[id].vue
+++ b/frontend_nuxt/pages/message-box/[id].vue
@@ -633,6 +633,10 @@ function goBack() {
}
@media (max-height: 200px) {
+ .messages-list,
+ .message-input-area {
+ display: none;
+ }
}
@media (max-width: 768px) {
diff --git a/frontend_nuxt/pages/message-box/index.vue b/frontend_nuxt/pages/message-box/index.vue
index bb4d5eaf6..f5c62630f 100644
--- a/frontend_nuxt/pages/message-box/index.vue
+++ b/frontend_nuxt/pages/message-box/index.vue
@@ -1,6 +1,9 @@
-
选择聊天
+
+
+ 选择聊天
+
@@ -347,7 +350,18 @@ function minimize() {
}
.page-title {
+ padding: 12px;
display: none;
+ flex-direction: row;
+ gap: 10px;
+}
+
+.page-title-text {
+ margin-left: 10px;
+}
+
+.page-title-text:hover {
+ text-decoration: underline;
}
.messages-title {