<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>智能客服系统</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f4f4f9;
}
.chat-container {
width: 800px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
padding: 20px;
}
.messages {
height: 500px;
overflow-y: auto;
border-bottom: 1px solid #ddd;
padding-bottom: 10px;
}
.message {
margin: 10px 0;
}
.user {
text-align: right;
}
.bot {
text-align: left;
}
.input-container {
display: flex;
margin-top: 10px;
}
.input-container input {
flex: 1;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
}
.input-container button {
padding: 10px 20px;
border: none;
background-color: #007bff;
color: #fff;
border-radius: 5px;
cursor: pointer;
}
.input-container button:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="chat-container">
<div class="messages" id="messages" style="white-space: pre-wrap;"></div>
<div class="input-container">
<input type="text" id="userInput" placeholder="输入消息...">
<button onclick="sendMessage()">发送</button>
</div>
</div>
<script>
function sendMessage() {
const userInput = document.getElementById('userInput').value;
if (userInput.trim() === '') return;
document.getElementById('userInput').value = '';
const messagesContainer = document.getElementById('messages');
const userMessage = document.createElement('div');
userMessage.className = 'message user';
userMessage.textContent = userInput;
messagesContainer.appendChild(userMessage);
fetch('stream.php')
.then(response => {
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');
const botMessage = document.createElement('div');
botMessage.className = 'message bot';
messagesContainer.appendChild(botMessage);
function readChunk() {
return reader.read().then(({ done, value }) => {
if (done) return;
// 将二进制数据解码为文本
const text = decoder.decode(value);
// 实时追加到页面
botMessage.innerHTML += text;
messagesContainer.scrollTop = messagesContainer.scrollHeight;
// 继续读取下一块
return readChunk();
});
}
return readChunk();
})
.catch(console.error);
}
</script>
</body>
</html>
|