mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-04-21 03:17:28 +08:00
fix: 支持显示最后一条消息
This commit is contained in:
@@ -18,14 +18,14 @@ public class ChannelInitializer implements CommandLineRunner {
|
|||||||
chat.setChannel(true);
|
chat.setChannel(true);
|
||||||
chat.setName("吹水群");
|
chat.setName("吹水群");
|
||||||
chat.setDescription("吹水聊天");
|
chat.setDescription("吹水聊天");
|
||||||
chat.setAvatar("/default-avatar.svg");
|
chat.setAvatar("https://openisle-1307107697.cos.accelerate.myqcloud.com/dynamic_assert/32647273e2334d14adfd4a6ce9db0643.jpeg");
|
||||||
conversationRepository.save(chat);
|
conversationRepository.save(chat);
|
||||||
|
|
||||||
MessageConversation tech = new MessageConversation();
|
MessageConversation tech = new MessageConversation();
|
||||||
tech.setChannel(true);
|
tech.setChannel(true);
|
||||||
tech.setName("技术讨论群");
|
tech.setName("技术讨论群");
|
||||||
tech.setDescription("讨论技术相关话题");
|
tech.setDescription("讨论技术相关话题");
|
||||||
tech.setAvatar("/default-avatar.svg");
|
tech.setAvatar("https://openisle-1307107697.cos.accelerate.myqcloud.com/dynamic_assert/5edde9a5864e471caa32491dbcdaa8b2.png");
|
||||||
conversationRepository.save(tech);
|
conversationRepository.save(tech);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ public class SecurityConfig {
|
|||||||
.requestMatchers(HttpMethod.GET, "/api/reaction-types").permitAll()
|
.requestMatchers(HttpMethod.GET, "/api/reaction-types").permitAll()
|
||||||
.requestMatchers(HttpMethod.GET, "/api/activities/**").permitAll()
|
.requestMatchers(HttpMethod.GET, "/api/activities/**").permitAll()
|
||||||
.requestMatchers(HttpMethod.GET, "/api/sitemap.xml").permitAll()
|
.requestMatchers(HttpMethod.GET, "/api/sitemap.xml").permitAll()
|
||||||
|
.requestMatchers(HttpMethod.GET, "/api/channels").permitAll()
|
||||||
.requestMatchers(HttpMethod.GET, "/api/rss").permitAll()
|
.requestMatchers(HttpMethod.GET, "/api/rss").permitAll()
|
||||||
.requestMatchers(HttpMethod.GET, "/api/point-goods").permitAll()
|
.requestMatchers(HttpMethod.GET, "/api/point-goods").permitAll()
|
||||||
.requestMatchers(HttpMethod.POST, "/api/point-goods").permitAll()
|
.requestMatchers(HttpMethod.POST, "/api/point-goods").permitAll()
|
||||||
@@ -156,7 +157,7 @@ public class SecurityConfig {
|
|||||||
uri.startsWith("/api/search") || uri.startsWith("/api/users") ||
|
uri.startsWith("/api/search") || uri.startsWith("/api/users") ||
|
||||||
uri.startsWith("/api/reaction-types") || uri.startsWith("/api/config") ||
|
uri.startsWith("/api/reaction-types") || uri.startsWith("/api/config") ||
|
||||||
uri.startsWith("/api/activities") || uri.startsWith("/api/push/public-key") ||
|
uri.startsWith("/api/activities") || uri.startsWith("/api/push/public-key") ||
|
||||||
uri.startsWith("/api/point-goods") ||
|
uri.startsWith("/api/point-goods") || uri.startsWith("/api/channels") ||
|
||||||
uri.startsWith("/api/sitemap.xml") || uri.startsWith("/api/medals") ||
|
uri.startsWith("/api/sitemap.xml") || uri.startsWith("/api/medals") ||
|
||||||
uri.startsWith("/api/rss"));
|
uri.startsWith("/api/rss"));
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ public class ChannelDto {
|
|||||||
private String name;
|
private String name;
|
||||||
private String description;
|
private String description;
|
||||||
private String avatar;
|
private String avatar;
|
||||||
|
private MessageDto lastMessage;
|
||||||
private long memberCount;
|
private long memberCount;
|
||||||
private boolean joined;
|
private boolean joined;
|
||||||
private long unreadCount;
|
private long unreadCount;
|
||||||
|
|||||||
@@ -22,8 +22,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<BaseTimeline :items="messages">
|
<BaseTimeline :items="messages">
|
||||||
<template #item="{ item }">
|
<template #item="{ item }">
|
||||||
<div class="message-timestamp">
|
<div class="message-header">
|
||||||
{{ TimeManager.format(item.createdAt) }}
|
<div class="user-name">
|
||||||
|
{{ item.sender.username }}
|
||||||
|
</div>
|
||||||
|
<div class="message-timestamp">
|
||||||
|
{{ TimeManager.format(item.createdAt) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">
|
<div class="message-content">
|
||||||
<div class="info-content-text" v-html="renderMarkdown(item.content)"></div>
|
<div class="info-content-text" v-html="renderMarkdown(item.content)"></div>
|
||||||
@@ -448,10 +453,22 @@ onUnmounted(() => {
|
|||||||
.message-timestamp {
|
.message-timestamp {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: var(--text-color-secondary);
|
color: var(--text-color-secondary);
|
||||||
margin-top: 5px;
|
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.message-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-name {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
.message-item.sent {
|
.message-item.sent {
|
||||||
align-self: flex-end;
|
align-self: flex-end;
|
||||||
flex-direction: row-reverse;
|
flex-direction: row-reverse;
|
||||||
|
|||||||
@@ -97,7 +97,11 @@
|
|||||||
<div class="message-time">成员 {{ ch.memberCount }}</div>
|
<div class="message-time">成员 {{ ch.memberCount }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="last-message-row">
|
<div class="last-message-row">
|
||||||
<div class="last-message">{{ ch.description }}</div>
|
<div class="last-message">
|
||||||
|
{{
|
||||||
|
ch.lastMessage ? stripMarkdownLength(ch.lastMessage.content, 100) : ch.description
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -262,8 +266,6 @@ function goToConversation(id) {
|
|||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.messages-container {
|
.messages-container {
|
||||||
margin: 0 auto;
|
|
||||||
padding: 20px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabs {
|
.tabs {
|
||||||
@@ -291,6 +293,8 @@ function goToConversation(id) {
|
|||||||
|
|
||||||
.search-container {
|
.search-container {
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
|
margin-left: 20px;
|
||||||
|
margin-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.messages-header {
|
.messages-header {
|
||||||
@@ -330,6 +334,8 @@ function goToConversation(id) {
|
|||||||
.conversation-item {
|
.conversation-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
margin-left: 20px;
|
||||||
|
margin-right: 20px;
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background-color 0.2s ease;
|
transition: background-color 0.2s ease;
|
||||||
@@ -415,8 +421,9 @@ function goToConversation(id) {
|
|||||||
|
|
||||||
/* 响应式设计 */
|
/* 响应式设计 */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.messages-container {
|
.conversation-item {
|
||||||
padding: 10px 10px;
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.messages-title {
|
.messages-title {
|
||||||
|
|||||||
Reference in New Issue
Block a user