diff --git a/src/renderer/src/pages/home/Messages/MessageAttachments.tsx b/src/renderer/src/pages/home/Messages/MessageAttachments.tsx index ea8787e114..f5aec111bc 100644 --- a/src/renderer/src/pages/home/Messages/MessageAttachments.tsx +++ b/src/renderer/src/pages/home/Messages/MessageAttachments.tsx @@ -36,7 +36,7 @@ const MessageAttachments: FC = ({ block }) => { fileList={[ { uid: block.file.id, - url: 'file://' + FileManager.getSafePath(block.file), + url: 'file://' + FileManager.getFilePath(block.file), status: 'done' as const, name: FileManager.formatFileName(block.file), type: block.file.type, diff --git a/src/renderer/src/windows/mini/MiniWindowApp.tsx b/src/renderer/src/windows/mini/MiniWindowApp.tsx index 0c62f564e4..df79b47196 100644 --- a/src/renderer/src/windows/mini/MiniWindowApp.tsx +++ b/src/renderer/src/windows/mini/MiniWindowApp.tsx @@ -3,7 +3,8 @@ import '@renderer/databases' import { ErrorBoundary } from '@renderer/components/ErrorBoundary' import { getToastUtilities } from '@renderer/components/TopView/toast' import { useSettings } from '@renderer/hooks/useSettings' -import store, { persistor } from '@renderer/store' +import store, { persistor, useAppDispatch } from '@renderer/store' +import { setFilesPath } from '@renderer/store/runtime' import { useEffect } from 'react' import { Provider } from 'react-redux' import { PersistGate } from 'redux-persist/integration/react' @@ -16,6 +17,14 @@ import HomeWindow from './home/HomeWindow' // Inner component that uses the hook after Redux is initialized function MiniWindowContent(): React.ReactElement { const { customCss } = useSettings() + const dispatch = useAppDispatch() + + // Initialize filesPath for mini window (same as useAppInit in main window) + useEffect(() => { + window.api.getAppInfo().then((info) => { + dispatch(setFilesPath(info.filesPath)) + }) + }, [dispatch]) useEffect(() => { let customCssElement = document.getElementById('user-defined-custom-css') as HTMLStyleElement diff --git a/src/renderer/src/windows/mini/home/HomeWindow.tsx b/src/renderer/src/windows/mini/home/HomeWindow.tsx index d694783050..6612eba656 100644 --- a/src/renderer/src/windows/mini/home/HomeWindow.tsx +++ b/src/renderer/src/windows/mini/home/HomeWindow.tsx @@ -1,5 +1,6 @@ import { loggerService } from '@logger' import { isMac } from '@renderer/config/constant' +import { isGenerateImageModel, isVisionModel } from '@renderer/config/models' import { useTheme } from '@renderer/context/ThemeProvider' import { useAssistant } from '@renderer/hooks/useAssistant' import { useSettings } from '@renderer/hooks/useSettings' @@ -77,7 +78,18 @@ const HomeWindow: FC<{ draggable?: boolean }> = ({ draggable = true }) => { const inputBarRef = useRef(null) const featureMenusRef = useRef(null) - const supportedImageExts = useMemo(() => ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp'], []) + // 检查当前助手的模型是否支持图片(复用主窗口逻辑) + const isVisionSupported = useMemo(() => isVisionModel(currentAssistant.model), [currentAssistant.model]) + const isGenerateImageSupported = useMemo(() => isGenerateImageModel(currentAssistant.model), [currentAssistant.model]) + const canAddImageFile = useMemo( + () => isVisionSupported || isGenerateImageSupported, + [isVisionSupported, isGenerateImageSupported] + ) + + const supportedImageExts = useMemo( + () => (canAddImageFile ? ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp'] : []), + [canAddImageFile] + ) const referenceText = useMemo(() => clipboardText || userInputText, [clipboardText, userInputText]) @@ -223,6 +235,8 @@ const HomeWindow: FC<{ draggable?: boolean }> = ({ draggable = true }) => { const handlePaste = useCallback( async (event: React.ClipboardEvent) => { + // 复用 PasteService,根据 supportedImageExts 自动过滤不支持的文件类型 + // 当模型不支持图片时,supportedImageExts 为空数组,PasteService 会显示提示 await PasteService.handlePaste( event.nativeEvent, supportedImageExts,