SessionGroup.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import _React from "react";
  2. import { Button } from "antd";
  3. import UserMessage from "./UserMessage";
  4. import type { SessionGroupProps } from "../../types/chat"
  5. import { _VersionSwitcher } from "./VersionSwitcher";
  6. import AssistantMessage from "./AssistantMessage";
  7. export function SessionGroup({
  8. session,
  9. onVersionSwitch,
  10. onRefresh,
  11. onEdit,
  12. onRetry,
  13. onLike,
  14. onDislike,
  15. onCopy,
  16. onShare,
  17. }: SessionGroupProps) {
  18. const hasFailed = session.messages.some((m) => m.save_status === "failed");
  19. const isPending = session.messages.some((m) => m.save_status === "pending");
  20. const _____hasMultipleVersions = session.versions.length > 1;
  21. return (
  22. <div
  23. className={`session-group ${isPending ? "pending" : ""} ${
  24. hasFailed ? "failed" : ""
  25. }`}
  26. >
  27. {/* 用户消息 */}
  28. {session.user_message && (
  29. <UserMessage
  30. session={session}
  31. onEdit={(content) => onEdit && onEdit(session.session_id, content)}
  32. onCopy={() => onCopy && onCopy(session.user_message!.uid)}
  33. onVersionSwitch={onVersionSwitch}
  34. />
  35. )}
  36. {/* AI回答区域 */}
  37. <div className="ai-response">
  38. {/* 失败重试提示 */}
  39. {hasFailed && onRetry && (
  40. <div className="retry-section">
  41. <span className="error-message">回答生成失败</span>
  42. <Button
  43. size="small"
  44. type="primary"
  45. onClick={() => onRetry(session.messages[0].temp_id!)}
  46. >
  47. 重试
  48. </Button>
  49. </div>
  50. )}
  51. {/* AI消息内容 */}
  52. {!hasFailed && session.ai_messages.length > 0 && (
  53. <AssistantMessage
  54. session={session}
  55. onRefresh={() => onRefresh && onRefresh(session.session_id)}
  56. onEdit={(content) => onEdit && onEdit(session.session_id, content)}
  57. isPending={isPending}
  58. onLike={onLike}
  59. onDislike={onDislike}
  60. onCopy={onCopy}
  61. onShare={onShare}
  62. onVersionSwitch={onVersionSwitch}
  63. />
  64. )}
  65. </div>
  66. </div>
  67. );
  68. }