import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { Building2 } from 'lucide-react' import api from '../../lib/api' import { Input, Label } from '../../components/ui/Input' import Button from '../../components/ui/Button' type LoginMode = 'password' | 'code' export default function PortalLogin() { const navigate = useNavigate() const [mode, setMode] = useState('password') const [phone, setPhone] = useState('') const [password, setPassword] = useState('') const [code, setCode] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) const [codeSent, setCodeSent] = useState(false) const [displayedCode, setDisplayedCode] = useState('') const handlePasswordLogin = async () => { setError('') setLoading(true) try { const res = await api.post('/portal/login', { phone, password }) as any localStorage.setItem('portalToken', res.data.token) localStorage.setItem('portalEmployee', JSON.stringify(res.data.employee)) navigate('/portal/payslip') } catch (err: any) { setError(err.response?.data?.error?.message || '登录失败') } finally { setLoading(false) } } const handleSendCode = async () => { setError('') try { const res = await api.post('/portal/send-code', { phone }) as any setCodeSent(true) setDisplayedCode(res.data.code) } catch (err: any) { setError(err.response?.data?.error?.message || '发送失败') } } const handleCodeLogin = async () => { setError('') setLoading(true) try { const res = await api.post('/portal/verify-code', { phone, code }) as any localStorage.setItem('portalToken', res.data.token) localStorage.setItem('portalEmployee', JSON.stringify(res.data.employee)) navigate('/portal/payslip') } catch (err: any) { setError(err.response?.data?.error?.message || '登录失败') } finally { setLoading(false) } } return (
用工合规助手 — 员工端
{error &&
{error}
} {mode === 'password' ? (
setPhone(e.target.value)} maxLength={11} />
setPassword(e.target.value)} />
) : (
setPhone(e.target.value)} maxLength={11} />
setCode(e.target.value)} maxLength={6} />
{codeSent && displayedCode && (
验证码:{displayedCode}(开发阶段直接显示,生产环境将发送短信)
)}
)}
) }