chengmw
9 days ago 529af79115af1e72bcd4d9a0dce63bb89cc4a5ab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import React from 'react';
import { RobotOutlined, UserOutlined } from '@ant-design/icons';
import './ConversationList.css';
 
/**
 * 单条对话组件
 * 展示单条对话消息
 */
const ConversationItem = ({ item, contactName }) => {
  const isRobot = item.speaker === 'Robot';
  
  // 格式化时间戳
  const formatTimestamp = (timestamp) => {
    if (!timestamp) return '';
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    return `${year}-${month}-${day} ${hours}:${minutes}`;
  };
 
  // 获取头像首字
  const getAvatarText = () => {
    if (isRobot) return <RobotOutlined />;
    return contactName ? contactName.charAt(0) : <UserOutlined />;
  };
 
  return (
    <div className={`conversation-item ${isRobot ? 'robot-item' : 'contact-item'}`}>
      {/* 头像 */}
      <div className={`avatar ${isRobot ? 'robot-avatar' : 'contact-avatar'}`}>
        {getAvatarText()}
      </div>
      
      {/* 消息内容 */}
      <div className="message-wrapper">
        <div className="message-header">
          <span className="speaker-name">
            {isRobot ? 'AI调解员' : contactName}
          </span>
        </div>
        
        <div className={`message-bubble ${isRobot ? 'robot-bubble' : 'contact-bubble'}`}>
          {item.script}
        </div>
        
        <div className="message-time">
          {formatTimestamp(item.timestamp)}
        </div>
      </div>
    </div>
  );
};
 
/**
 * 对话记录列表组件
 * 展示双方对话记录,类似微信聊天界面
 */
const ConversationList = ({ conversations, contactName }) => {
  // 过滤无效对话记录
  const validConversations = conversations.filter(
    item => item.script && item.script.trim() !== ''
  );
 
  if (!validConversations || validConversations.length === 0) {
    return (
      <div className="conversation-empty">
        暂无对话记录
      </div>
    );
  }
 
  return (
    <div className="conversation-list">
      {validConversations.map((item, index) => (
        <ConversationItem
          key={index}
          item={item}
          contactName={contactName}
        />
      ))}
    </div>
  );
};
 
export default ConversationList;