|
|
10 miesięcy temu | |
|---|---|---|
| .. | ||
| docs | 11 miesięcy temu | |
| public | 10 miesięcy temu | |
| src | 10 miesięcy temu | |
| .env.example | 11 miesięcy temu | |
| .env.production | 10 miesięcy temu | |
| .env.production-cy | 10 miesięcy temu | |
| .gitignore | 1 rok temu | |
| CHANGELOG.md | 11 miesięcy temu | |
| ENV_CONFIG.md | 10 miesięcy temu | |
| README.md | 11 miesięcy temu | |
| SSL_CONFIG.md | 11 miesięcy temu | |
| SSL证书配置.md | 11 miesięcy temu | |
| index.html | 10 miesięcy temu | |
| package-lock.json | 11 miesięcy temu | |
| package.json | 11 miesięcy temu | |
| pnpm-lock.yaml | 11 miesięcy temu | |
| postcss.config.js | 11 miesięcy temu | |
| tailwind.config.js | 11 miesięcy temu | |
| tsconfig.json | 1 rok temu | |
| tsconfig.node.json | 1 rok temu | |
| vite.config.ts | 11 miesięcy temu | |
基于 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 | 音频录制 |
cd frontend
npm install
npm run dev
# 访问 http://localhost:3000
npm run build
npm run preview # 预览构建结果
项目采用 Tailwind CSS 实现完全响应式布局:
clamp(24px, 6vw, 32px) 自动缩放18vh、5vw 等相对单位sm:、md:、lg: 等前缀max(164px, 18vh) 确保最小值示例:
<h1 className="text-fluid-2xl sm:text-3xl md:text-4xl">
{/* 移动端 24-32px,平板 30px,桌面 36px */}
</h1>
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 (语音对话)
import Recorder from 'recorder-core';
const recorder = new Recorder({
type: 'pcm',
sampleRate: 16000,
bitRate: 16,
});
import ReconnectingWebSocket from 'reconnecting-websocket';
const ws = new ReconnectingWebSocket('wss://backend/ws');
ws.send(JSON.stringify({ type: 'audio_chunk', data }));
import videojs from 'video.js';
const player = videojs(videoRef.current, {
autoplay: true,
controls: false,
playsinline: true,
});
推荐写法:
<div className="w-full h-screen flex items-center justify-center bg-[#F5F5F5]">
<div className="max-w-mobile p-4 rounded-xl shadow-lg">
<h1 className="text-fluid-2xl font-semibold text-black">
标题
</h1>
</div>
</div>
<div className="top-[max(164px,18vh)]">
{/* 方括号支持任意 CSS 值 */}
</div>
<div className="text-base sm:text-lg md:text-xl">
{/* 移动端 16px,小屏 18px,中屏 20px */}
</div>
详细参考: Tailwind_快速参考.md
.env)# HTTPS 开关(开发环境)
VITE_ENABLE_HTTPS=false
# SSL 证书路径(可选)
VITE_SSL_KEYFILE=../ssl/key.pem
VITE_SSL_CERTFILE=../ssl/cert.pem
// tailwind.config.js
export default {
theme: {
extend: {
colors: {
'bg-main': '#E8E8E8',
'accent': '#007AFF',
},
fontSize: {
'fluid-2xl': 'clamp(24px, 6vw, 32px)',
},
},
},
}
检查 Tailwind 配置:
npm run build # 查看是否有编译错误
确保 index.html 包含:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
使用自定义类:
<div className="safe-top safe-bottom">
{/* 自动避开刘海屏 */}
</div>
// ✅ 推荐
export const MyComponent: React.FC<Props> = ({ prop }) => {
return (
<div className="mobile-container">
{/* 使用语义化类名 */}
</div>
);
};
// ❌ 避免
export const MyComponent = (props) => {
return <div style={{ width: '100vw' }}>{/* 避免内联样式 */}</div>;
};
style 属性any 类型MIT License - 详见 LICENSE
如有问题,请联系开发团队或查看 项目文档
Built with ❤️ using React + Tailwind CSS