diff --git a/src/pages/ChatPage.scss b/src/pages/ChatPage.scss index 0c30aa2..4ccdd2b 100644 --- a/src/pages/ChatPage.scss +++ b/src/pages/ChatPage.scss @@ -4137,55 +4137,51 @@ // 消息信息弹窗 .message-info-overlay { position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.6); + inset: 0; + background: rgba(0, 0, 0, 0.4); backdrop-filter: blur(4px); + z-index: 2000; display: flex; align-items: center; justify-content: center; - z-index: 2000; - padding: 20px; } .message-info-modal { - width: 520px; + width: 360px; max-width: 90vw; max-height: 80vh; background: var(--card-bg); + border: 1px solid var(--border-color); border-radius: 12px; - box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2); display: flex; flex-direction: column; + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2); overflow: hidden; - .modal-header { + .detail-header { display: flex; align-items: center; justify-content: space-between; - padding: 16px 20px; + padding: 16px; border-bottom: 1px solid var(--border-color); - h3 { - font-size: 16px; + h4 { + font-size: 15px; font-weight: 600; color: var(--text-primary); + margin: 0; } .close-btn { - width: 28px; - height: 28px; + background: none; border: none; - background: transparent; - border-radius: 6px; + padding: 4px; cursor: pointer; + color: var(--text-secondary); + border-radius: 6px; display: flex; align-items: center; justify-content: center; - color: var(--text-tertiary); - transition: all 0.2s; &:hover { background: var(--bg-hover); @@ -4194,56 +4190,98 @@ } } - .modal-body { + .detail-content { flex: 1; overflow-y: auto; - padding: 16px 20px; + padding: 16px; + + &::-webkit-scrollbar { width: 4px; } + &::-webkit-scrollbar-thumb { background: var(--text-tertiary); border-radius: 2px; } } - .info-section { - margin-bottom: 16px; + .detail-section { + margin-bottom: 20px; + &:last-child { margin-bottom: 0; } - h4 { - font-size: 13px; + .section-title { + display: flex; + align-items: center; + gap: 6px; + font-size: 12px; font-weight: 600; color: var(--text-secondary); - margin: 0 0 8px 0; - } - } + margin-bottom: 12px; + letter-spacing: 0.5px; - .info-grid { - display: flex; - flex-direction: column; - gap: 6px; - } + svg { opacity: 0.7; } - .info-item { - display: flex; - align-items: baseline; - gap: 8px; - font-size: 13px; - - .label { - color: var(--text-tertiary); - min-width: 80px; - flex-shrink: 0; - } - - .value { - color: var(--text-primary); - word-break: break-all; - - &.code { - font-family: monospace; - font-size: 12px; - background: var(--bg-tertiary); - padding: 2px 6px; + .copy-btn { + margin-left: auto; + display: flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + padding: 0; + border: none; border-radius: 4px; + background: transparent; + color: var(--text-tertiary); + cursor: pointer; + &:hover { background: var(--bg-secondary); color: var(--text-primary); } } } } - .raw-content-container { + .detail-item { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 0; + border-bottom: 1px solid var(--border-color); + font-size: 13px; + + &:last-child { border-bottom: none; } + + svg { color: var(--text-tertiary); flex-shrink: 0; } + + .label { color: var(--text-secondary); flex-shrink: 0; } + + .value { + flex: 1; + text-align: right; + color: var(--text-primary); + word-break: break-all; + user-select: text; + + &.highlight { color: var(--primary); font-weight: 600; } + &.mono { font-family: 'Consolas', 'Monaco', monospace; font-size: 12px; } + } + + .copy-btn { + display: flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + padding: 0; + border: none; + border-radius: 4px; + background: transparent; + color: var(--text-tertiary); + cursor: pointer; + flex-shrink: 0; + opacity: 0; + transition: opacity 0.15s, color 0.15s, background 0.15s; + + &:hover { background: var(--bg-secondary); color: var(--text-primary); } + svg { color: inherit; } + } + + &:hover .copy-btn { opacity: 1; } + } + + .raw-content-box { background: var(--bg-tertiary); border-radius: 8px; padding: 12px; @@ -4252,15 +4290,12 @@ pre { margin: 0; - font-size: 12px; - font-family: monospace; - color: var(--text-primary); white-space: pre-wrap; word-break: break-all; + font-family: 'Consolas', 'Monaco', monospace; + font-size: 12px; + color: var(--text-primary); + user-select: text; } } - - .select-text { - user-select: text; - } } \ No newline at end of file diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index 05fddde..b795fe4 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -2749,71 +2749,121 @@ function ChatPage(_props: ChatPageProps) { {showMessageInfo && createPortal(
setShowMessageInfo(null)}>
e.stopPropagation()}> -
-
- -

消息详细信息

-
+
+

消息详情

-
-
-

基础字段

-
-
Local ID{showMessageInfo.localId}
-
Server ID{showMessageInfo.serverId}
-
Local Type{showMessageInfo.localType}
-
发送者{showMessageInfo.senderUsername || '-'}
-
创建时间{new Date(showMessageInfo.createTime * 1000).toLocaleString()} ({showMessageInfo.createTime})
-
发送状态{showMessageInfo.isSend === 1 ? '发送' : '接收'}
+
+
+
+ + Local ID + {showMessageInfo.localId} + +
+
+ + Server ID + {showMessageInfo.serverId} +
+
+ 消息类型 + {showMessageInfo.localType} +
+
+ 发送者 + {showMessageInfo.senderUsername || '-'} + {showMessageInfo.senderUsername && ( + + )} +
+
+ + 创建时间 + {new Date(showMessageInfo.createTime * 1000).toLocaleString()} +
+
+ 发送状态 + {showMessageInfo.isSend === 1 ? '发送' : '接收'}
- {showMessageInfo.imageMd5 && ( -
-

图片信息

-
-
Image MD5{showMessageInfo.imageMd5}
- {showMessageInfo.imageDatName &&
DAT 文件名{showMessageInfo.imageDatName}
} -
-
- )} - - {showMessageInfo.videoMd5 && ( -
-

视频信息

-
-
Video MD5{showMessageInfo.videoMd5}
-
-
- )} - - {showMessageInfo.voiceDurationSeconds != null && ( -
-

语音信息

-
-
时长{showMessageInfo.voiceDurationSeconds}秒
+ {(showMessageInfo.imageMd5 || showMessageInfo.videoMd5 || showMessageInfo.voiceDurationSeconds != null) && ( +
+
+ + 媒体信息
+ {showMessageInfo.imageMd5 && ( +
+ Image MD5 + {showMessageInfo.imageMd5} + +
+ )} + {showMessageInfo.imageDatName && ( +
+ DAT 文件 + {showMessageInfo.imageDatName} +
+ )} + {showMessageInfo.videoMd5 && ( +
+ Video MD5 + {showMessageInfo.videoMd5} + +
+ )} + {showMessageInfo.voiceDurationSeconds != null && ( +
+ + 语音时长 + {showMessageInfo.voiceDurationSeconds}秒 +
+ )}
)} {(showMessageInfo.emojiMd5 || showMessageInfo.emojiCdnUrl) && ( -
-

表情包信息

-
- {showMessageInfo.emojiMd5 &&
MD5{showMessageInfo.emojiMd5}
} - {showMessageInfo.emojiCdnUrl &&
CDN URL{showMessageInfo.emojiCdnUrl}
} +
+
+ 表情包信息
+ {showMessageInfo.emojiMd5 && ( +
+ MD5 + {showMessageInfo.emojiMd5} +
+ )} + {showMessageInfo.emojiCdnUrl && ( +
+ CDN URL + {showMessageInfo.emojiCdnUrl} +
+ )}
)} - {(showMessageInfo.rawContent || showMessageInfo.content) && ( -
-

原始消息内容

-
-
{showMessageInfo.rawContent || showMessageInfo.content}
+ {showMessageInfo.localType !== 1 && (showMessageInfo.rawContent || showMessageInfo.content) && ( +
+
+ 原始消息内容 + +
+
+
{showMessageInfo.rawContent || showMessageInfo.content}
)}