rtc_prd/help.html
seaislee1209 066eb8f820 feat: music-creation page + MiniMax API integration + Flutter dev setup
Music Creation Page:
- Vinyl 3D flip to view lyrics, tonearm animation, glow rotation effect
- Circular SVG progress ring, speech bubble feedback, confirm dialog
- Playlist modal, free creation input, lyrics formatting optimization
- MiniMax API real music generation with SSE streaming progress

Backend:
- FastAPI proxy server.py for MiniMax API calls
- Music + lyrics file persistence to Capybara music/ directory
- GET /api/playlist endpoint for auto-building playlist from files

UI/UX Refinements:
- frontend-design skill compliance across all pages
- Glassmorphism effects, modal interactions, scroll tap prevention
- iPhone 12 Pro responsive layout (390x844)

Flutter Development Preparation:
- Installed flutter-expert skill with 6 reference docs
- Added 5 Cursor Rules: official Flutter, clean architecture, UI performance, testing, Dart standards

Assets:
- 9 Capybara music MP3 files + lyrics TXT files
- MiniMax API documentation

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 18:23:19 +08:00

371 lines
12 KiB
HTML
Raw Permalink 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, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<title>Airhub - 帮助中心</title>
<link rel="stylesheet" href="styles.css">
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&family=DM+Sans:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
.page-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 20px;
padding-top: calc(env(safe-area-inset-top, 20px) + 48px);
width: 100%;
box-sizing: border-box;
position: absolute;
top: 0;
z-index: 10;
}
.back-btn {
background: rgba(255, 255, 255, 0.25);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.4);
width: 44px;
height: 44px;
border-radius: 22px;
display: flex;
align-items: center;
justify-content: center;
color: #1F2937;
cursor: pointer;
transition: all 0.2s;
}
.back-btn:active {
transform: scale(0.92);
}
.page-title {
font-size: 18px;
font-weight: 600;
color: #1F2937;
}
.help-content {
padding: calc(env(safe-area-inset-top, 20px) + 120px) 20px 40px;
overflow-y: auto;
flex: 1;
width: 100%;
height: 100%;
box-sizing: border-box;
position: relative;
z-index: 2;
scrollbar-width: none;
-webkit-mask-image: linear-gradient(to bottom, transparent 0px, transparent 100px, black 130px, black 100%);
mask-image: linear-gradient(to bottom, transparent 0px, transparent 100px, black 130px, black 100%);
}
.help-content::-webkit-scrollbar {
display: none;
}
/* 标题区 */
.help-header {
text-align: center;
margin-bottom: 24px;
}
.help-title {
font-size: 24px;
font-weight: 600;
color: #1F2937;
margin-bottom: 8px;
}
.help-date {
font-size: 13px;
color: #9CA3AF;
}
/* 指南卡片 */
.guide-card {
display: flex;
align-items: center;
gap: 16px;
background: linear-gradient(135deg, #FEF9E7 0%, #FDF2E9 100%);
border-radius: 16px;
padding: 16px 20px;
margin-bottom: 24px;
box-shadow: 0 4px 20px rgba(139, 94, 60, 0.1);
}
.guide-icon {
width: 48px;
height: 48px;
background: linear-gradient(135deg, #ECCFA8 0%, #C99672 100%);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
}
.guide-info {
flex: 1;
}
.guide-title {
font-size: 16px;
font-weight: 600;
color: #1F2937;
margin-bottom: 4px;
}
.guide-desc {
font-size: 13px;
color: #6B7280;
}
.guide-btn {
background: linear-gradient(135deg, #ECCFA8 0%, #C99672 100%);
border: none;
padding: 10px 20px;
border-radius: 20px;
color: white;
font-weight: 600;
font-size: 14px;
cursor: pointer;
display: flex;
align-items: center;
gap: 6px;
transition: all 0.2s;
}
.guide-btn:active {
transform: scale(0.95);
}
/* FAQ 分类 */
.faq-section {
margin-bottom: 20px;
}
.faq-category {
font-size: 14px;
font-weight: 500;
color: #9CA3AF;
padding: 0 4px 8px;
margin-bottom: 0;
text-transform: uppercase;
letter-spacing: 0.5px;
border-bottom: none;
}
.faq-card {
background: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(20px);
border-radius: 16px;
overflow: hidden;
box-shadow: 0 4px 20px rgba(139, 94, 60, 0.08);
}
.faq-item {
background: transparent;
backdrop-filter: none;
border-radius: 0;
margin-bottom: 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
box-shadow: none;
}
.faq-item:last-child {
border-bottom: none;
}
.faq-question {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 20px;
cursor: pointer;
transition: background 0.2s;
}
.faq-question:active {
background: rgba(255, 255, 255, 0.5);
}
.faq-q-text {
font-size: 15px;
color: #1F2937;
flex: 1;
}
.faq-arrow {
color: #D1D5DB;
font-size: 18px;
transition: transform 0.3s;
}
.faq-item.open .faq-arrow {
transform: rotate(90deg);
}
.faq-answer {
padding: 0 20px;
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease, padding 0.3s ease;
}
.faq-item.open .faq-answer {
max-height: 200px;
padding: 0 20px 16px;
}
.faq-a-text {
font-size: 14px;
color: #6B7280;
line-height: 1.6;
}
</style>
</head>
<body>
<div class="app-container">
<div class="gradient-bg">
<div class="gradient-layer layer-1"></div>
</div>
<header class="page-header">
<button class="back-btn" onclick="history.back()">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M15 18l-6-6 6-6"></path>
</svg>
</button>
<span class="page-title">帮助中心</span>
<div style="width: 44px;"></div>
</header>
<main class="help-content">
<div class="help-header">
<div class="help-title">帮助 Q&A</div>
<div class="help-date">更新日期2025年1月15日</div>
</div>
<!-- 喂养指南 -->
<div class="guide-card">
<div class="guide-icon">📖</div>
<div class="guide-info">
<div class="guide-title">喂养指南</div>
<div class="guide-desc">详细的角色养成方法和日常照顾指南</div>
</div>
<button class="guide-btn" onclick="openGuide()">
查看 →
</button>
</div>
<!-- FAQ: 设备连接 -->
<div class="faq-section">
<div class="faq-category">设备连接与管理</div>
<div class="faq-card">
<div class="faq-item" onclick="toggleFaq(this)">
<div class="faq-question">
<span class="faq-q-text">手机连接设备时"未扫描到设备"</span>
<span class="faq-arrow"></span>
</div>
<div class="faq-answer">
<p class="faq-a-text">请检查设备是否在配网模式下双击设备电源键按钮直至呈现Wi-Fi图标请确保设备和手机距离在10m内点击【重新扫描】。</p>
</div>
</div>
<div class="faq-item" onclick="toggleFaq(this)">
<div class="faq-question">
<span class="faq-q-text">手机连接设备时"连接设备失败"</span>
<span class="faq-arrow"></span>
</div>
<div class="faq-answer">
<p class="faq-a-text">可能为服务超时造成的异常,请保持设备处于配网模式下,点击【再试一次】。</p>
</div>
</div>
<div class="faq-item" onclick="toggleFaq(this)">
<div class="faq-question">
<span class="faq-q-text">如何添加多个 Wi-Fi 网络?</span>
<span class="faq-arrow"></span>
</div>
<div class="faq-answer">
<p class="faq-a-text">进入设备控制页 → 设置 → 配置网络,按提示添加备用网络。设备会自动切换到信号最强的网络。</p>
</div>
</div>
</div>
</div>
<!-- FAQ: 角色养成 -->
<div class="faq-section">
<div class="faq-category">角色养成</div>
<div class="faq-card">
<div class="faq-item" onclick="toggleFaq(this)">
<div class="faq-question">
<span class="faq-q-text">什么是角色记忆?</span>
<span class="faq-arrow"></span>
</div>
<div class="faq-answer">
<p class="faq-a-text">角色记忆是您与 AI 互动过程中产生的人格数据,包含对话风格、喜好偏好等信息。角色记忆可以在不同设备间迁移,让您的 AI 伙伴始终如一。
</p>
</div>
</div>
<div class="faq-item" onclick="toggleFaq(this)">
<div class="faq-question">
<span class="faq-q-text">如何将角色记忆迁移到新设备?</span>
<span class="faq-arrow"></span>
</div>
<div class="faq-answer">
<p class="faq-a-text">进入「我的」→「角色记忆」,找到需要迁移的记忆,点击「注入设备」,选择目标设备即可完成迁移。</p>
</div>
</div>
</div>
</div>
<!-- FAQ: 常见问题 -->
<div class="faq-section">
<div class="faq-category">常见问题</div>
<div class="faq-card">
<div class="faq-item" onclick="toggleFaq(this)">
<div class="faq-question">
<span class="faq-q-text">设备离线怎么办?</span>
<span class="faq-arrow"></span>
</div>
<div class="faq-answer">
<p class="faq-a-text">请检查设备电源和网络连接。如果问题持续,尝试重启设备或重新配网。</p>
</div>
</div>
<div class="faq-item" onclick="toggleFaq(this)">
<div class="faq-question">
<span class="faq-q-text">如何联系客服?</span>
<span class="faq-arrow"></span>
</div>
<div class="faq-answer">
<p class="faq-a-text">您可以通过「我的」→「意见反馈」联系我们,或发送邮件至 support@airhub.com。</p>
</div>
</div>
</div>
</div>
</main>
</div>
<script>
function openGuide() {
window.location.href = 'guide-feeding.html';
}
function toggleFaq(item) {
// 关闭其他打开的项
document.querySelectorAll('.faq-item.open').forEach(el => {
if (el !== item) el.classList.remove('open');
});
// 切换当前项
item.classList.toggle('open');
}
</script>
</body>
</html>