import React, { useState, useEffect } from 'react'; import { Brain, Users, Calendar, TrendingUp, X, User, Lock, Library, Download, LogIn, Eye, EyeOff } from 'lucide-react'; import { Link } from 'react-router-dom'; import apiClient from '../utils/apiClient'; import { buildApiUrl, API_ENDPOINTS } from '../config/api'; import './HomePage.css'; const HomePage = ({ onLogin }) => { const [showLoginModal, setShowLoginModal] = useState(false); const [loginForm, setLoginForm] = useState({ username: '', password: '' }); const [loginError, setLoginError] = useState(''); const [isLoading, setIsLoading] = useState(false); const [rememberMe, setRememberMe] = useState(false); const [showPassword, setShowPassword] = useState(false); // 组件挂载时,从localStorage读取保存的用户名 useEffect(() => { const savedUsername = localStorage.getItem('rememberedUsername'); const isRemembered = localStorage.getItem('rememberMe') === 'true'; if (savedUsername && isRemembered) { setLoginForm(prev => ({ ...prev, username: savedUsername })); setRememberMe(true); } }, []); const handleLogin = async (e) => { e.preventDefault(); setIsLoading(true); setLoginError(''); try { const loginResponse = await apiClient.post(buildApiUrl(API_ENDPOINTS.AUTH.LOGIN), loginForm); // 处理记住用户名 if (rememberMe) { localStorage.setItem('rememberedUsername', loginForm.username); localStorage.setItem('rememberMe', 'true'); } else { localStorage.removeItem('rememberedUsername'); localStorage.removeItem('rememberMe'); } onLogin(loginResponse.data); setShowLoginModal(false); } catch (error) { setLoginError(error.response?.data?.message || '登录失败,请重试'); } finally { setIsLoading(false); } }; const handleInputChange = (e) => { setLoginForm({ ...loginForm, [e.target.name]: e.target.value }); }; const closeModal = () => { setShowLoginModal(false); setLoginForm({ username: '', password: '' }); setLoginError(''); }; return (
让每一次谈话都产生价值
自动将会议音频转为文字,并识别不同发言人。
AI自动生成会议摘要,提取关键信息和决策。
所有会议的摘要和内容汇聚成一个可供检索的知识库。
轻松管理会议参与者,追踪会议参与情况。
按时间顺序展示所有会议,快速回顾历史记录。
导出会议摘要、脑图和转录内容,方便归档和分享。