diff --git a/packages/web/common/system/utils.ts b/packages/web/common/system/utils.ts index 63fceb55e..ade6b690a 100644 --- a/packages/web/common/system/utils.ts +++ b/packages/web/common/system/utils.ts @@ -16,3 +16,32 @@ export const getWebReqUrl = (url: string = '') => { if (!url.startsWith('/') || url.startsWith(baseUrl)) return url; return `${baseUrl}${url}`; }; + +export const isMobile = () => { + // 服务端渲染时返回 false + if (typeof window === 'undefined') return false; + + // 1. 检查 User-Agent + const userAgent = navigator.userAgent.toLowerCase(); + const mobileKeywords = [ + 'android', + 'iphone', + 'ipod', + 'ipad', + 'windows phone', + 'blackberry', + 'webos', + 'iemobile', + 'opera mini' + ]; + const isMobileUA = mobileKeywords.some((keyword) => userAgent.includes(keyword)); + + // 2. 检查屏幕宽度 + const isMobileWidth = window.innerWidth <= 900; + + // 3. 检查是否支持触摸事件(排除触控屏PC) + const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0; + + // 综合判断:满足以下任一条件即视为移动端 + return isMobileUA || (isMobileWidth && isTouchDevice); +}; diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/Input/VoiceInput.tsx b/projects/app/src/components/core/chat/ChatContainer/ChatBox/Input/VoiceInput.tsx index 1d851b21f..04fe2e5c5 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/Input/VoiceInput.tsx +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/Input/VoiceInput.tsx @@ -16,6 +16,7 @@ import { useSystem } from '@fastgpt/web/hooks/useSystem'; import { useContextSelector } from 'use-context-selector'; import { ChatBoxContext } from '../Provider'; import MyIconButton from '@/pageComponents/account/team/OrgManage/IconButton'; +import { isMobile } from '@fastgpt/web/common/system/utils'; export interface VoiceInputComponentRef { onSpeak: () => void; @@ -213,7 +214,7 @@ const MobileVoiceInput = ({ const VoiceInput = forwardRef( ({ onSendMessage, resetInputVal }, ref) => { const { t } = useTranslation(); - const { isPc } = useSystem(); + const isPc = !isMobile(); const outLinkAuthData = useContextSelector(ChatBoxContext, (v) => v.outLinkAuthData); const appId = useContextSelector(ChatBoxContext, (v) => v.appId);