Ai-Teacher/index.html
2025-03-07 22:17:52 +08:00

267 lines
8.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ai-Teacher - AI教学助手</title>
<!-- 引入Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- 引入PDF.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.min.js"></script>
<!-- 引入Live2D相关库 -->
<script src="src/live2d.min.js"></script>
<script src="src/live2dcubismcore.min.js"></script>
<style>
body {
font-family: 'Arial', sans-serif;
background-color: #f5f5f5;
}
.container {
max-width: 1200px;
padding: 20px;
}
.header {
text-align: center;
margin-bottom: 30px;
}
.main-content {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.pdf-container {
flex: 2;
min-width: 300px;
background-color: white;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
padding: 15px;
}
.controls {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.page-controls {
display: flex;
align-items: center;
gap: 10px;
}
.zoom-controls {
display: flex;
align-items: center;
gap: 10px;
}
#pdf-canvas {
width: 100%;
border: 1px solid #ddd;
margin-bottom: 15px;
}
.sidebar {
flex: 1;
min-width: 250px;
display: flex;
flex-direction: column;
gap: 20px;
}
.live2d-area {
background-color: white;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
padding: 15px;
height: 300px;
position: relative;
display: flex;
flex-direction: column;
}
.live2d-area > div {
flex: 1;
}
#live2d-container {
width: 100%;
height: 100%;
}
.explanation-container {
background-color: white;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
padding: 15px;
}
.explanation-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
#explanation-text {
min-height: 200px;
max-height: 400px;
overflow-y: auto;
padding: 10px;
background-color: #f9f9f9;
border-radius: 5px;
border: 1px solid #eee;
}
.btn-primary {
background-color: #4a6bdf;
border-color: #4a6bdf;
}
.btn-primary:hover {
background-color: #3a5bcf;
border-color: #3a5bcf;
}
#status-message {
position: fixed;
top: 20px;
right: 20px;
padding: 10px 15px;
border-radius: 5px;
display: none;
z-index: 1000;
}
.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.audio-controls {
margin-top: 15px;
display: flex;
align-items: center;
gap: 10px;
}
.voice-selector {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
}
#audio-player {
width: 100%;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<!-- <h1>Ai-Teacher</h1> -->
<p>AI教学助手 - 交互式PDF学习体验</p>
</div>
<div class="main-content">
<div class="pdf-container">
<div class="controls">
<div class="page-controls">
<button id="prev-page" class="btn btn-sm btn-outline-primary">上一页</button>
<input type="number" id="page-num" class="form-control form-control-sm" style="width: 60px;" value="1" min="1">
<span> / </span>
<span id="page-count">0</span>
<button id="next-page" class="btn btn-sm btn-outline-primary">下一页</button>
</div>
<div class="zoom-controls">
<button id="zoom-out" class="btn btn-sm btn-outline-secondary">-</button>
<button id="zoom-reset" class="btn btn-sm btn-outline-secondary">100%</button>
<button id="zoom-in" class="btn btn-sm btn-outline-secondary">+</button>
</div>
<div>
<label for="pdf-upload" class="btn btn-sm btn-outline-primary">选择PDF</label>
<input type="file" id="pdf-upload" accept="application/pdf" style="display: none;">
</div>
</div>
<canvas id="pdf-canvas"></canvas>
</div>
<div class="sidebar">
<div class="live2d-area">
<div class="mb-2">
<select id="model-select" class="form-select form-select-sm">
<option value="Mao">Mao</option>
<option value="Haru">Haru</option>
<option value="Hiyori">Hiyori</option>
<option value="Mark">Mark</option>
<option value="Natori">Natori</option>
<option value="Rice">Rice</option>
<option value="Wanko">Wanko</option>
</select>
</div>
<div id="live2d-container"></div>
</div>
<div class="explanation-container">
<div class="explanation-header">
<h5>AI讲解</h5>
<div class="d-flex gap-2">
<button id="explain-btn" class="btn btn-sm btn-primary">生成讲解</button>
<button id="play-btn" class="btn btn-sm btn-success" disabled>
<i class="bi bi-play-fill"></i> 播放
</button>
</div>
</div>
<div class="voice-selector">
<label for="voice-select" class="form-label mb-0">语音:</label>
<select id="voice-select" class="form-select form-select-sm">
<option value="zf_xiaoxiao">小小 (女)</option>
<option value="zf_xiaoni">小妮 (女)</option>
<option value="zf_xiaoyi">小怡 (女)</option>
<option value="zf_xiaobei">小贝 (女)</option>
<option value="zm_yunxi">云熙 (男)</option>
<option value="zm_yunyang">云扬 (男)</option>
</select>
<label for="speed-range" class="form-label mb-0 ms-2">语速:</label>
<input type="range" class="form-range" id="speed-range" min="0.5" max="2.0" step="0.1" value="1.0" style="width: 80px;">
<span id="speed-value">1.0</span>
</div>
<div id="explanation-text" class="p-3">
点击"生成讲解"按钮AI将为您讲解当前页面的内容。
</div>
<audio id="audio-player" controls style="display: none;"></audio>
</div>
</div>
</div>
</div>
<div id="status-message"></div>
<!-- 引入Bootstrap JS 和 Icons -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<script type="module" src="js/main.js"></script>
</body>
</html>