From 9402483d87cd2c096e962b0812643fd8e1565051 Mon Sep 17 00:00:00 2001 From: xuncha <1658671838@qq.com> Date: Sat, 17 Jan 2026 12:02:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E9=80=89=E6=8B=A9=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/ChatPage.tsx | 14 ++++++++- src/pages/ExportPage.tsx | 63 ++++++++++++++++++++++++++++++++------ src/pages/SettingsPage.tsx | 24 +++++++++++++-- src/services/config.ts | 15 ++++++++- 4 files changed, 102 insertions(+), 14 deletions(-) diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index ff1e36f..aace839 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -5,6 +5,7 @@ import { useChatStore } from '../stores/chatStore' import type { ChatSession, Message } from '../types/models' import { getEmojiPath } from 'wechat-emojis' import { ImagePreview } from '../components/ImagePreview' +import * as configService from '../services/config' import './ChatPage.scss' interface ChatPageProps { @@ -1317,6 +1318,16 @@ function MessageBubble({ message, session, showTime, myAvatarUrl, isGroupChat }: const [voiceTranscriptError, setVoiceTranscriptError] = useState(false) const voiceTranscriptRequestedRef = useRef(false) const [showImagePreview, setShowImagePreview] = useState(false) + const [autoTranscribeVoice, setAutoTranscribeVoice] = useState(true) + + // 加载自动转文字配置 + useEffect(() => { + const loadConfig = async () => { + const enabled = await configService.getAutoTranscribeVoice() + setAutoTranscribeVoice(enabled) + } + loadConfig() + }, []) // 从缓存获取表情包 data URL const cacheKey = message.emojiMd5 || message.emojiCdnUrl || '' @@ -1638,10 +1649,11 @@ function MessageBubble({ message, session, showTime, myAvatarUrl, isGroupChat }: useEffect(() => { if (!isVoice) return if (!voiceDataUrl) return + if (!autoTranscribeVoice) return // 如果自动转文字已关闭,不自动转文字 if (voiceTranscriptError) return if (voiceTranscriptLoading || voiceTranscript !== undefined || voiceTranscriptRequestedRef.current) return void requestVoiceTranscript() - }, [isVoice, voiceDataUrl, voiceTranscript, voiceTranscriptError, voiceTranscriptLoading, requestVoiceTranscript]) + }, [isVoice, voiceDataUrl, autoTranscribeVoice, voiceTranscript, voiceTranscriptError, voiceTranscriptLoading, requestVoiceTranscript]) if (isSystem) { return ( diff --git a/src/pages/ExportPage.tsx b/src/pages/ExportPage.tsx index 7573905..a5c79c2 100644 --- a/src/pages/ExportPage.tsx +++ b/src/pages/ExportPage.tsx @@ -215,18 +215,54 @@ function ExportPage() { const year = calendarDate.getFullYear() const month = calendarDate.getMonth() const selectedDate = new Date(year, month, day) + // 设置时间为当天的开始或结束 + selectedDate.setHours(selectingStart ? 0 : 23, selectingStart ? 0 : 59, selectingStart ? 0 : 59, selectingStart ? 0 : 999) + + const now = new Date() + // 如果选择的日期晚于当前时间,限制为当前时间 + if (selectedDate > now) { + selectedDate.setTime(now.getTime()) + } if (selectingStart) { - setOptions({ - ...options, - dateRange: options.dateRange ? { ...options.dateRange, start: selectedDate } : { start: selectedDate, end: new Date() } - }) + // 选择开始日期 + const currentEnd = options.dateRange?.end || new Date() + // 如果选择的开始日期晚于结束日期,则同时更新结束日期 + if (selectedDate > currentEnd) { + const newEnd = new Date(selectedDate) + newEnd.setHours(23, 59, 59, 999) + // 确保结束日期也不晚于当前时间 + if (newEnd > now) { + newEnd.setTime(now.getTime()) + } + setOptions({ + ...options, + dateRange: { start: selectedDate, end: newEnd } + }) + } else { + setOptions({ + ...options, + dateRange: options.dateRange ? { ...options.dateRange, start: selectedDate } : { start: selectedDate, end: new Date() } + }) + } setSelectingStart(false) } else { - setOptions({ - ...options, - dateRange: options.dateRange ? { ...options.dateRange, end: selectedDate } : { start: new Date(), end: selectedDate } - }) + // 选择结束日期 + const currentStart = options.dateRange?.start || new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) + // 如果选择的结束日期早于开始日期,则同时更新开始日期 + if (selectedDate < currentStart) { + const newStart = new Date(selectedDate) + newStart.setHours(0, 0, 0, 0) + setOptions({ + ...options, + dateRange: { start: newStart, end: selectedDate } + }) + } else { + setOptions({ + ...options, + dateRange: options.dateRange ? { ...options.dateRange, end: selectedDate } : { start: new Date(), end: selectedDate } + }) + } setSelectingStart(true) } } @@ -547,6 +583,9 @@ function ExportPage() {
setShowDatePicker(false)}>
e.stopPropagation()}>

选择时间范围

+

+ 点击选择开始和结束日期,系统会自动调整确保时间顺序正确 +

建议选择包含 xwechat_files 的目录
+
⚠️ 目录路径不可包含中文,如有中文请去微信-设置-存储位置点击更改,迁移至全英文目录
)}