import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { App as AntApp, Button } from "antd"; import { UserOutlined, LockOutlined, DownOutlined } from "@ant-design/icons"; import { login } from "@/api/auth"; import { useAppDispatch } from "@/store"; import { loginSucceeded } from "@/store/authSlice"; import { COMPANIES } from "@/utils/data"; export default function Login() { const navigate = useNavigate(); const dispatch = useAppDispatch(); const { message } = AntApp.useApp(); const [user, setUser] = useState("admin"); const [pass, setPass] = useState("666666"); const [companyId, setCompanyId] = useState("std"); const [companyOpen, setCompanyOpen] = useState(false); const [submitting, setSubmitting] = useState(false); const company = COMPANIES.find((c) => c.id === companyId); const submit = async (e?: React.FormEvent) => { e?.preventDefault(); if (!user || !pass) return; setSubmitting(true); try { const data = await login(user, pass, companyId); dispatch( loginSucceeded({ token: data.accessToken, user: data.user, companyId, companyName: company?.name ?? companyId, }) ); message.success("登录成功"); navigate("/home", { replace: true }); } catch { // message.error already shown by interceptor } finally { setSubmitting(false); } }; return (
XLY-ERP
印刷制造管理平台
setUser(e.target.value)} placeholder="请输入用户名" style={inputStyle} />
setPass(e.target.value)} placeholder="请输入密码" style={inputStyle} />
{companyOpen && (
{COMPANIES.map((c, i) => { const sel = c.id === companyId; return (
{ setCompanyId(c.id); setCompanyOpen(false); }} style={{ padding: "9px 12px", color: "#fff", fontSize: 13, cursor: "pointer", background: sel ? "var(--accent)" : "transparent", borderTop: i === 0 ? "none" : "1px solid rgba(255,255,255,0.04)", }} > {c.name}
); })}
)}
XLY 软件 · 印刷制造管理平台 · 版权所有 © 2017–2026
); } const fieldWrap: React.CSSProperties = { display: "flex", alignItems: "center", height: 38, background: "rgba(255,255,255,0.95)", border: "1px solid rgba(255,255,255,0.15)", marginBottom: 10, }; const fieldIcon: React.CSSProperties = { width: 36, display: "inline-flex", alignItems: "center", justifyContent: "center", }; const fieldDivider: React.CSSProperties = { width: 1, height: 18, background: "rgba(0,0,0,0.12)", }; const inputStyle: React.CSSProperties = { flex: 1, height: "100%", border: "none", background: "transparent", paddingLeft: 10, paddingRight: 10, fontSize: 13, color: "#1a2332", outline: "none", fontFamily: "inherit", };