# Lyrria AI 英语语音助手 - 前端 ## 🎯 项目简介 基于 React + TypeScript + Vite + Tailwind CSS 构建的现代化语音交互界面,完美支持各种屏幕尺寸和移动端浏览器。 --- ## ✨ 技术栈 | 技术 | 版本 | 用途 | |------|------|------| | **React** | 18.2 | UI 框架 | | **TypeScript** | 5.3 | 类型系统 | | **Vite** | 5.0 | 构建工具 | | **Tailwind CSS** | 4.0 | 样式方案 ⭐ | | **React Router** | 7.9 | 路由管理 | | **Zustand** | 4.4 | 状态管理 | | **Video.js** | 8.23 | 视频播放 | | **Recorder Core** | 1.2 | 音频录制 | --- ## 🚀 快速开始 ### 安装依赖 ```bash cd frontend npm install ``` ### 开发环境 ```bash npm run dev # 访问 http://localhost:3000 ``` ### 生产构建 ```bash npm run build npm run preview # 预览构建结果 ``` --- ## 📱 浏览器兼容性 ### ✅ 完全支持 - Chrome 90+ (Android/Windows/macOS) - Safari 14+ (iOS 14+, macOS) - Firefox 88+ (Android/Windows/macOS) - Edge 90+ (Windows/Android) - 夸克浏览器 (最新版) ### ⚠️ 降级支持 - Safari 13.1-14 (iOS 13): 部分 CSS 特性降级为固定值 ### 🧪 测试设备 - ✅ iPhone SE / 11 / 14 Pro Max - ✅ iPad / iPad Pro - ✅ Samsung Galaxy S21 - ✅ Xiaomi 12 - ✅ 横屏/竖屏模式 --- ## 🎨 响应式设计 ### 移动端优先策略 项目采用 **Tailwind CSS** 实现完全响应式布局: - **流式字体**: `clamp(24px, 6vw, 32px)` 自动缩放 - **视口单位**: `18vh`、`5vw` 等相对单位 - **断点系统**: `sm:`、`md:`、`lg:` 等前缀 - **混合布局**: `max(164px, 18vh)` 确保最小值 **示例**: ```tsx

{/* 移动端 24-32px,平板 30px,桌面 36px */}

``` --- ## 📁 项目结构 ``` frontend/ ├── src/ │ ├── assets/ # 静态资源(图片、字体) │ ├── pages/ # 页面组件 │ │ ├── WelcomePage.tsx ✅ Tailwind │ │ ├── LoadingPage.tsx ✅ Tailwind │ │ ├── GreetingPage.tsx ✅ Tailwind │ │ ├── VideoIntroPage.tsx ⚠️ 待迁移 │ │ └── ChatBotPage.tsx ⚠️ 待迁移 │ ├── components/ # 可复用组件(未来) │ ├── store/ # Zustand 状态 │ ├── utils/ # 工具函数 │ ├── router/ # 路由配置 │ ├── index.css # Tailwind 入口 │ └── main.tsx # 应用入口 ├── docs/ # 技术文档 │ ├── Tailwind_CSS迁移文档.md │ └── Tailwind_快速参考.md ├── tailwind.config.js # Tailwind 配置 ├── postcss.config.js # PostCSS 配置 ├── vite.config.ts # Vite 配置 └── package.json ``` --- ## 🎯 页面流程 ``` WelcomePage (欢迎页) ↓ LoadingPage (加载页) ↓ VideoIntroPage (视频介绍) ↓ GreetingPage (输入姓名) ↓ ChatBotPage (语音对话) ``` --- ## 🛠️ 核心功能 ### 1. 语音录制 ```tsx import Recorder from 'recorder-core'; const recorder = new Recorder({ type: 'pcm', sampleRate: 16000, bitRate: 16, }); ``` ### 2. WebSocket 通信 ```tsx import ReconnectingWebSocket from 'reconnecting-websocket'; const ws = new ReconnectingWebSocket('wss://backend/ws'); ws.send(JSON.stringify({ type: 'audio_chunk', data })); ``` ### 3. 视频播放 ```tsx import videojs from 'video.js'; const player = videojs(videoRef.current, { autoplay: true, controls: false, playsinline: true, }); ``` --- ## 📖 样式开发指南 ### 使用 Tailwind CSS **推荐写法**: ```tsx

标题

``` ### 自定义值 ```tsx
{/* 方括号支持任意 CSS 值 */}
``` ### 响应式 ```tsx
{/* 移动端 16px,小屏 18px,中屏 20px */}
``` **详细参考**: [Tailwind_快速参考.md](./docs/Tailwind_快速参考.md) --- ## 🔧 配置说明 ### 环境变量 (`.env`) ```bash # HTTPS 开关(开发环境) VITE_ENABLE_HTTPS=false # SSL 证书路径(可选) VITE_SSL_KEYFILE=../ssl/key.pem VITE_SSL_CERTFILE=../ssl/cert.pem ``` ### Tailwind 自定义 ```javascript // tailwind.config.js export default { theme: { extend: { colors: { 'bg-main': '#E8E8E8', 'accent': '#007AFF', }, fontSize: { 'fluid-2xl': 'clamp(24px, 6vw, 32px)', }, }, }, } ``` --- ## 📊 性能指标 ### 构建结果 - **CSS 大小**: 85KB → 20KB (gzip) - **JS 大小**: 1.29MB → 405KB (gzip) - **首屏加载**: < 1s (4G 网络) ### 优化措施 - ✅ Vite 代码分割 - ✅ Tailwind JIT 编译 - ✅ 图片懒加载 - ✅ Tree-shaking 优化 --- ## 🐛 常见问题 ### Q: 样式不生效? 检查 Tailwind 配置: ```bash npm run build # 查看是否有编译错误 ``` ### Q: 移动端视口问题? 确保 `index.html` 包含: ```html ``` ### Q: iOS 安全区域? 使用自定义类: ```tsx
{/* 自动避开刘海屏 */}
``` --- ## 📚 文档 - [Tailwind CSS 迁移文档](./docs/Tailwind_CSS迁移文档.md) - [Tailwind 快速参考](./docs/Tailwind_快速参考.md) - [技术方案](../项目文档/Tailwind_CSS技术方案.md) - [更新日志](./CHANGELOG.md) --- ## 🤝 开发规范 ### 组件规范 ```tsx // ✅ 推荐 export const MyComponent: React.FC = ({ prop }) => { return (
{/* 使用语义化类名 */}
); }; // ❌ 避免 export const MyComponent = (props) => { return
{/* 避免内联样式 */}
; }; ``` ### 样式规范 - ✅ 优先使用 Tailwind 类名 - ✅ 复杂样式提取为组件 - ✅ 避免过长的 className(> 10 个类) - ❌ 避免内联 `style` 属性 ### TypeScript 规范 - ✅ 所有函数添加类型注解 - ✅ 使用接口定义 Props - ❌ 禁止使用 `any` 类型 --- ## 🚀 后续计划 ### v2.1.0 - [ ] 迁移 VideoIntroPage 到 Tailwind - [ ] 迁移 ChatBotPage 到 Tailwind - [ ] 添加暗黑模式 ### v2.2.0 - [ ] 提取公共组件库 - [ ] 添加单元测试 - [ ] 国际化支持 (i18n) --- ## 📄 许可证 MIT License - 详见 [LICENSE](../LICENSE) --- ## 👥 联系方式 如有问题,请联系开发团队或查看 [项目文档](../项目文档/) --- **Built with ❤️ using React + Tailwind CSS**