Skip to content

Commit 6b99200

Browse files
committed
feat: migrate the message and chat page
1 parent 3cffa71 commit 6b99200

19 files changed

Lines changed: 207 additions & 188 deletions

File tree

components/kun/avatar/Avatar.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const props = withDefaults(defineProps<KunAvatarProps>(), {
1010
const handleClickAvatar = async (event: MouseEvent) => {
1111
event.preventDefault()
1212
if (props.isNavigation) {
13-
await navigateTo(`/user/${props.user.uid}/info`)
13+
await navigateTo(`/user/${props.user.id}/info`)
1414
}
1515
}
1616

components/message/aside/Item.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ defineProps<{
1515
>
1616
<KunAvatar
1717
:user="{
18-
uid: parseInt(room.route),
18+
id: parseInt(room.route),
1919
name: room.title,
2020
avatar: room.avatar
2121
}"
@@ -24,8 +24,8 @@ defineProps<{
2424
<div class="justify-space flex w-full flex-col">
2525
<div class="flex items-center justify-between">
2626
<span class="font-bold">{{ room.title }}</span>
27-
<span class="text-default-500 text-sm" v-if="room.time">
28-
{{ formatTimeDifference(room.time) }}
27+
<span class="text-default-500 text-sm" v-if="room.lastMessageTime">
28+
{{ formatTimeDifference(room.lastMessageTime) }}
2929
</span>
3030
</div>
3131

components/message/aside/Notice.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ const handleDeleteMessage = async (mid: number) => {
4949
</div>
5050

5151
<div>
52-
<KunLink :to="`/user/${message.sender.uid}/info`">
52+
<KunLink :to="`/user/${message.sender.id}/info`">
5353
{{ message.sender.name }}
5454
</KunLink>
5555
<span>{{ getMessageI18n(message) }}</span>
@@ -63,7 +63,7 @@ const handleDeleteMessage = async (mid: number) => {
6363
color="default"
6464
underline="none"
6565
class="hover:text-primary cursor-pointer transition-colors"
66-
:to="message.tid ? `/topic/${message.tid}` : `/galgame/${message.gid}`"
66+
:to="message.link"
6767
>
6868
<pre
6969
class="break-word text-sm leading-8 whitespace-pre-line text-inherit"
@@ -76,7 +76,7 @@ const handleDeleteMessage = async (mid: number) => {
7676
<div class="flex justify-between">
7777
<span class="text-default-500 text-sm">
7878
{{
79-
formatDate(message.time, {
79+
formatDate(message.created, {
8080
isShowYear: true,
8181
isPrecise: true
8282
})
@@ -88,7 +88,7 @@ const handleDeleteMessage = async (mid: number) => {
8888
variant="light"
8989
color="danger"
9090
size="sm"
91-
@click="handleDeleteMessage(message.mid)"
91+
@click="handleDeleteMessage(message.id)"
9292
>
9393
<KunIcon name="lucide:trash-2" />
9494
</KunButton>

components/message/aside/System.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<script setup lang="ts">
2-
import type { MessageAdmin } from '~/types/api/message-admin'
2+
import type { SystemMessage } from '~/types/api/message'
33
44
defineProps<{
5-
message: MessageAdmin
5+
message: SystemMessage
66
}>()
77
</script>
88

@@ -26,7 +26,7 @@ defineProps<{
2626
</div>
2727
<KunAvatar :user="message.admin" />
2828
<span class="text-default-500 text-sm">
29-
{{ formatTimeDifference(message.time) }}
29+
{{ formatTimeDifference(message.created) }}
3030
</span>
3131
</div>
3232

components/message/aside/SystemItem.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ defineProps<{
1818
<div class="justify-space flex w-full flex-col">
1919
<div class="flex items-center justify-between">
2020
<span class="font-bold">{{ title }}</span>
21-
<span class="text-default-500 text-sm" v-if="data.time">
22-
{{ formatTimeDifference(data.time) }}
21+
<span class="text-default-500 text-sm" v-if="data.lastMessageTime">
22+
{{ formatTimeDifference(data.lastMessageTime) }}
2323
</span>
2424
</div>
2525

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1-
import type { AsideItem, Message } from '~/types/api/chat-message'
1+
import type { AsideItem, ChatMessage } from '~/types/api/chat-message'
22

33
export const asideItems = ref<AsideItem[]>([])
44

5-
export const replaceAsideItem = (message: Message) => {
5+
export const replaceAsideItem = (message: ChatMessage) => {
66
const targetIndex = asideItems.value.findIndex(
77
(item) => item.chatroomName === message.chatroomName
88
)
99

1010
if (targetIndex !== -1) {
1111
asideItems.value[targetIndex].content = message.content
12-
asideItems.value[targetIndex].time = message.time
12+
asideItems.value[targetIndex].lastMessageTime = message.created
1313
asideItems.value[targetIndex].count++
1414
}
1515

16-
asideItems.value.sort((a, b) => b.time - a.time)
16+
asideItems.value.sort((a, b) => {
17+
const timeA = new Date(a.lastMessageTime).getTime()
18+
const timeB = new Date(b.lastMessageTime).getTime()
19+
return timeB - timeA
20+
})
1721
}

components/message/pm/Container.vue

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<script setup lang="ts">
22
import { replaceAsideItem } from '../aside/asideItemStore'
3-
import type { Message } from '~/types/api/chat-message'
3+
import type { ChatMessage } from '~/types/api/chat-message'
44
55
const props = defineProps<{
6-
uid: number
6+
userId: number
77
}>()
88
99
const socket = useSocketIO()
1010
useSocketIOErrorHandler()
1111
1212
const historyContainer = ref<HTMLDivElement | null>(null)
1313
const messageInput = ref('')
14-
const messages = ref<Message[]>([])
14+
const messages = ref<ChatMessage[]>([])
1515
const isLoadHistoryMessageComplete = ref(false)
1616
const isShowLoader = computed(() => {
1717
if (isLoadHistoryMessageComplete.value) {
@@ -22,8 +22,8 @@ const isShowLoader = computed(() => {
2222
}
2323
return true
2424
})
25-
const currentUserUid = usePersistUserStore().uid
26-
const uid = props.uid
25+
const currentUserUid = usePersistUserStore().id
26+
const uid = props.userId
2727
const pageData = reactive({
2828
page: 1,
2929
limit: 30
@@ -69,15 +69,15 @@ watch(
6969
onMounted(async () => {
7070
socket.emit('private:join', uid)
7171
72-
socket.on('message:sent', (newMessage: Message) => {
72+
socket.on('message:sent', (newMessage: ChatMessage) => {
7373
messages.value.push(newMessage)
7474
replaceAsideItem(newMessage)
7575
messageInput.value = ''
7676
nextTick(() => scrollToBottom())
7777
})
7878
79-
socket.on('message:received', (msg: Message) => {
80-
if (msg.receiverUid === currentUserUid && msg.sender.uid === uid) {
79+
socket.on('message:received', (msg: ChatMessage) => {
80+
if (msg.receiverUid === currentUserUid && msg.sender.id === uid) {
8181
messages.value.push(msg)
8282
replaceAsideItem(msg)
8383
nextTick(() => {
@@ -97,7 +97,7 @@ onMounted(async () => {
9797
const onKeydown = async (event: KeyboardEvent) => {
9898
if (event.key === 'Enter') {
9999
event.preventDefault()
100-
await sendMessage()
100+
sendMessage()
101101
}
102102
}
103103
@@ -156,7 +156,7 @@ const handleLoadHistoryMessages = async () => {
156156
v-for="(message, index) in messages"
157157
:key="index"
158158
:message="message"
159-
:is-sent="uid !== message.sender.uid"
159+
:is-sent="uid !== message.sender.id"
160160
/>
161161
</div>
162162

components/message/pm/Header.vue

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
<script setup lang="ts">
22
const props = defineProps<{
3-
uid: number
3+
id: number
44
}>()
55
6-
const socket = useSocketIO()
6+
// const socket = useSocketIO()
77
8-
const res = await $fetch(`/api/user/${props.uid}`, {
8+
const res = await $fetch(`/api/user/${props.id}`, {
99
method: 'GET',
10+
query: { userId: props.id },
1011
...kungalgameResponseHandler
1112
})
1213
1314
const user = {
14-
uid: props.uid,
15+
id: props.id,
1516
name: typeof res !== 'string' ? res.name : '',
1617
avatar: typeof res !== 'string' ? res.avatar : ''
1718
}
1819
19-
const handleReload = () => location.reload()
20+
// const handleReload = () => location.reload()
2021
</script>
2122

2223
<template>
@@ -29,7 +30,7 @@ const handleReload = () => location.reload()
2930

3031
<h2 class="relative flex items-center gap-2">
3132
<span>{{ user.name }}</span>
32-
<span
33+
<!-- <span
3334
class="absolute -right-6 h-4 w-4 rounded-full"
3435
:class="socket.connected ? 'bg-success' : 'bg-default'"
3536
/>
@@ -40,7 +41,7 @@ const handleReload = () => location.reload()
4041
>
4142
<span>您已离线</span>
4243
<KunIcon name="lucide:refresh-ccw" />
43-
</span>
44+
</span> -->
4445
</h2>
4546
</header>
4647
</template>

components/message/pm/Item.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<script setup lang="ts">
2-
import type { Message } from '~/types/api/chat-message'
2+
import type { ChatMessage } from '~/types/api/chat-message'
33
44
defineProps<{
5-
message: Message
5+
message: ChatMessage
66
isSent: boolean
77
}>()
88
</script>
@@ -34,7 +34,7 @@ defineProps<{
3434
<div class="mt-1 text-sm leading-relaxed">
3535
<span>{{ message.content }}</span>
3636
<span class="text-default-500 ml-2 text-xs">
37-
{{ formatTimeDifference(message.time) }}
37+
{{ formatTimeDifference(message.created) }}
3838
</span>
3939
</div>
4040
</div>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "kun-galgame-nuxt3",
3-
"version": "4.0.9",
3+
"version": "4.0.10",
44
"packageManager": "pnpm@10.4.1",
55
"private": true,
66
"scripts": {

0 commit comments

Comments
 (0)