fix:发送按钮问题

This commit is contained in:
2025-12-29 17:35:24 +08:00
parent 8ccb546125
commit 08efdf4cd3

View File

@@ -1,6 +1,5 @@
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { import {
Avatar,
Button, Button,
Card, Card,
CardBody, CardBody,
@@ -8,7 +7,6 @@ import {
Divider, Divider,
ScrollShadow, ScrollShadow,
Spinner, Spinner,
Textarea,
} from "@heroui/react"; } from "@heroui/react";
import { requestBotReply } from "./dsAPI"; import { requestBotReply } from "./dsAPI";
@@ -81,8 +79,7 @@ export default function App() {
<div className="mx-auto max-w-3xl"> <div className="mx-auto max-w-3xl">
<Card className="shadow-xl"> <Card className="shadow-xl">
{/* 顶部 */} {/* 顶部 */}
<CardHeader className="flex items-center gap-3"> <CardHeader className="flex items-center">
<Avatar name="Bot" />
<div className="flex flex-col"> <div className="flex flex-col">
<span className="font-semibold">Chatbot Demo</span> <span className="font-semibold">Chatbot Demo</span>
<span className="text-xs text-default-500"> <span className="text-xs text-default-500">
@@ -99,16 +96,8 @@ export default function App() {
{messages.map((m) => { {messages.map((m) => {
const isUser = m.role === "user"; const isUser = m.role === "user";
return ( return (
<div <div className={`flex ${isUser ? "justify-end" : "justify-start"}`} >
className={`flex ${isUser ? "justify-end" : "justify-start"}`} <div className={`flex max-w-[80%] ${isUser ? "flex-row-reverse" : ""}`} >
>
<div
className={`flex max-w-[80%] items-end gap-2 ${isUser ? "flex-row-reverse" : ""}`}
>
<Avatar
size="sm"
name={isUser ? "You" : "Bot"}
/>
<div <div
className={`rounded-2xl px-4 py-3 text-sm leading-relaxed ${isUser className={`rounded-2xl px-4 py-3 text-sm leading-relaxed ${isUser
? "bg-primary text-primary-foreground" ? "bg-primary text-primary-foreground"
@@ -124,8 +113,7 @@ export default function App() {
{isBotTyping && ( {isBotTyping && (
<div className="flex justify-start"> <div className="flex justify-start">
<div className="flex items-center gap-2"> <div className="flex items-center">
<Avatar size="sm" name="Bot" />
<div className="flex items-center gap-2 rounded-2xl bg-content2 px-4 py-2 text-sm text-default-600"> <div className="flex items-center gap-2 rounded-2xl bg-content2 px-4 py-2 text-sm text-default-600">
<Spinner size="sm" /> <Spinner size="sm" />
正在回复 正在回复
@@ -142,20 +130,33 @@ export default function App() {
{/* 输入区 */} {/* 输入区 */}
<div className="p-4"> <div className="p-4">
<div className="flex items-end gap-3"> {/* 这个容器视觉上就是“一个输入框” */}
<Textarea <div className="rounded-xl border border-default-200 bg-background shadow-sm">
{/* 上半部分:真正可滚动/可拖拉的 textarea */}
<div className="px-3 pt-3">
<textarea
value={inputText} value={inputText}
onValueChange={setInputText} onChange={(e) => setInputText(e.target.value)}
onKeyDown={handleKeyDown} onKeyDown={handleKeyDown}
placeholder="输入消息Enter 发送Shift+Enter 换行" placeholder="输入消息Enter 发送Shift+Enter 换行"
minRows={2} disabled={isSending}
maxRows={6} rows={2}
isDisabled={isSending} className="
variant="bordered" w-full bg-transparent outline-none
className="flex-1" text-sm leading-relaxed text-foreground
placeholder:text-default-400
resize-y
min-h-[72px] max-h-[220px]
overflow-auto
"
/> />
</div>
{/* 下半部分:输入框“内部”的工具栏,按钮在右下角 */}
<div className="flex items-center justify-end gap-2 px-3 py-2">
<Button <Button
color="primary" color="primary"
size="sm"
onPress={handleSend} onPress={handleSend}
isDisabled={isSending || !inputText.trim()} isDisabled={isSending || !inputText.trim()}
> >
@@ -163,6 +164,7 @@ export default function App() {
</Button> </Button>
</div> </div>
</div> </div>
</div>
</CardBody> </CardBody>
</Card> </Card>
</div> </div>