diff --git a/app/(tabs)/ask.tsx b/app/(tabs)/ask.tsx index 3ac0086..d9326db 100644 --- a/app/(tabs)/ask.tsx +++ b/app/(tabs)/ask.tsx @@ -55,6 +55,8 @@ export default function AskScreen() { const threshold = 100; // 滑动阈值 if (translationX > threshold) { + // 关闭键盘 + Keyboard.dismiss(); // 从左向右滑动,跳转页面 runOnJS(router.replace)("/memo-list"); } @@ -329,6 +331,7 @@ export default function AskScreen() { setUserMessages={setUserMessages} selectedImages={selectedImages} setSelectedImages={setSelectedImages} + isHello={isHello} /> diff --git a/components/ask/send.tsx b/components/ask/send.tsx index 1f4e291..679d4fa 100644 --- a/components/ask/send.tsx +++ b/components/ask/send.tsx @@ -25,11 +25,12 @@ interface Props { setConversationId: (conversationId: string) => void, selectedImages: string[]; setSelectedImages: Dispatch>; + isHello: boolean; } const RENDER_INTERVAL = 50; // 渲染间隔,单位毫秒 export default function SendMessage(props: Props) { - const { setIsHello, conversationId, setUserMessages, setConversationId, selectedImages, setSelectedImages } = props; + const { setIsHello, conversationId, setUserMessages, setConversationId, selectedImages, setSelectedImages, isHello } = props; const { t } = useTranslation() @@ -191,15 +192,20 @@ export default function SendMessage(props: Props) { let currentSessionId = conversationId; // 如果没有对话ID,先创建一个新对话 if (!currentSessionId) { - currentSessionId = await createNewConversation(text); - setConversationId(currentSessionId); - webSocketManager.send({ - type: 'Chat', - session_id: currentSessionId, - message: text, - image_material_ids: selectedImages.length > 0 ? selectedImages : undefined, - }); - setSelectedImages([]); + const newCurrentSessionId = await createNewConversation(text); + if (newCurrentSessionId) { + setConversationId(newCurrentSessionId); + webSocketManager.send({ + type: 'Chat', + session_id: newCurrentSessionId, + message: text, + image_material_ids: selectedImages.length > 0 ? selectedImages : undefined, + }); + setSelectedImages([]); + } else { + console.error("无法获取 session_id,消息发送失败。"); + setUserMessages(prev => prev.filter(item => item.content !== 'keepSearchIng')); + } } // 通过 WebSocket 发送消息 @@ -243,7 +249,7 @@ export default function SendMessage(props: Props) { return ( - + handleQuitly('search')}> {t("ask:ask.search")} @@ -286,7 +292,7 @@ const styles = StyleSheet.create({ margin: 5, borderRadius: 25, alignItems: 'center', - borderWidth: 2, + borderWidth: 1, display: 'flex', flexDirection: 'row', gap: 5, @@ -307,7 +313,17 @@ const styles = StyleSheet.create({ lineHeight: 20, fontSize: 16, width: '100%', // 确保输入框宽度撑满 - paddingRight: 50 + paddingRight: 50, + backgroundColor: '#fff', // Required for shadow to show on iOS + shadowColor: '#000', + shadowOffset: { + width: 0, + height: 2, + }, + shadowOpacity: 0.15, + shadowRadius: 3.84, + // Shadow for Android + elevation: 5, }, voiceButton: { padding: 8, diff --git a/components/chat/message-item/message-item.tsx b/components/chat/message-item/message-item.tsx index b720ceb..0ad0ee1 100644 --- a/components/chat/message-item/message-item.tsx +++ b/components/chat/message-item/message-item.tsx @@ -3,9 +3,12 @@ import { ContentPart, Message, User } from "@/types/ask"; import { TFunction } from "i18next"; import React from 'react'; import { + StyleSheet, + TouchableOpacity, View } from 'react-native'; +import { ThemedText } from "@/components/ThemedText"; import MessageRow from './MessageRow'; interface RenderMessageProps { @@ -21,9 +24,10 @@ interface RenderMessageProps { t: TFunction; setCancel: React.Dispatch>; cancel: boolean; + setUserMessages: React.Dispatch>; } -const MessageItem = ({ setCancel, cancel = true, t, insets, item, sessionId, setModalVisible, modalVisible, setModalDetailsVisible, modalDetailsVisible, setSelectedImages, selectedImages }: RenderMessageProps) => { +const MessageItem = ({ setCancel, cancel = true, t, insets, item, sessionId, setModalVisible, modalVisible, setModalDetailsVisible, modalDetailsVisible, setSelectedImages, selectedImages, setUserMessages }: RenderMessageProps) => { const isUser = item.role === User; return ( @@ -40,23 +44,39 @@ const MessageItem = ({ setCancel, cancel = true, t, insets, item, sessionId, set setSelectedImages={setSelectedImages} setModalDetailsVisible={setModalDetailsVisible} /> - {/* {item.askAgain && item.askAgain.length > 0 && ( - - {item.askAgain.map((suggestion, index, array) => ( - - {suggestion.text} - - ))} - - )} */} + {item.content instanceof Array && item.content.filter((media: ContentPart) => media.type !== 'text').length > 0 && ( + + { + }}> + Help me create a warm, cozy video. + + + Help me find materials for subsequent operations. + + + )} ); }; +const styles = StyleSheet.create({ + tips: { + flexDirection: 'column', + gap: 5, + marginRight: 10, + }, + tip: { + backgroundColor: '#FFF8DE', + paddingHorizontal: 16, + paddingVertical: 8, + }, + tipText: { + color: '#4C320C', + fontSize: 14 + } +}); + export default React.memo(MessageItem);