index.tsx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import styles from "./index.module.scss";
  2. import { Input, Button } from "antd";
  3. import { UserOutlined, LockOutlined, NumberOutlined } from "@ant-design/icons";
  4. import { useCallback, useEffect, useState } from "react";
  5. import { Base64 } from "js-base64";
  6. import encodeStr from "@/utils/pass";
  7. import { setTokenInfo } from "@/utils/storage";
  8. import history from "@/utils/history";
  9. import { MessageFu } from "@/utils/message";
  10. import { API_LoginGetCode, userLoginAPI } from "@/store/action/layout";
  11. import LogoImg from "@/assets/img/logo.png";
  12. export default function Login() {
  13. // 获取验证码
  14. const LoginGetCodeFu = useCallback(async () => {
  15. const res: any = await API_LoginGetCode();
  16. const reader = new FileReader();
  17. reader.readAsDataURL(res);
  18. reader.onload = () => {
  19. setCodeImg(reader.result);
  20. };
  21. }, []);
  22. useEffect(() => {
  23. LoginGetCodeFu();
  24. }, [LoginGetCodeFu]);
  25. // 账号密码 - 验证码
  26. const [userName, setUserName] = useState("");
  27. const [passWord, setPassWord] = useState("");
  28. const [code, setCode] = useState<any>("");
  29. const [codeImg, setCodeImg] = useState<any>("");
  30. useEffect(() => {
  31. //进入登录页 重置 权限信息为空
  32. }, []);
  33. // 键盘按下回车事件
  34. const keyUpEntFu = (e: React.KeyboardEvent<HTMLInputElement>) => {
  35. if (e.key === "Enter") loginClickFu();
  36. };
  37. // 点击登录
  38. const loginClickFu = useCallback(async () => {
  39. // 非空判断
  40. if (userName === "") return MessageFu.warning("请输入账号!");
  41. else if (passWord === "") return MessageFu.warning("请输入密码!");
  42. const obj = {
  43. userName,
  44. passWord: encodeStr(Base64.encode(passWord)),
  45. randCode: code,
  46. };
  47. const res: any = await userLoginAPI(obj);
  48. if (res.code === 0) {
  49. MessageFu.success("登录成功");
  50. // 检查密码是不是默认密码,是的话给提示
  51. if (passWord === "123456") {
  52. window.setTimeout(() => {
  53. MessageFu.warning("您的密码还是默认密码,请尽快修改!");
  54. }, 1000);
  55. }
  56. // 用户信息存到本地
  57. setTokenInfo(res.data);
  58. history.push("/");
  59. } else if (res.code === 3014) {
  60. MessageFu.warning("账号不存在或密码错误,请联系管理员!");
  61. } else if (res.code === -1 && res.msg === "验证码有误") {
  62. LoginGetCodeFu();
  63. }
  64. }, [LoginGetCodeFu, code, passWord, userName]);
  65. return (
  66. <div className={styles.Login}>
  67. <div className="mainRight">
  68. {/* logg */}
  69. <div className="LogoImg">
  70. <img src={LogoImg} alt="" />
  71. </div>
  72. {/* 账号密码输入框 */}
  73. <div className="inputBox">
  74. <div className="inputBoxRow">
  75. <Input
  76. onKeyUp={(e) => keyUpEntFu(e)}
  77. value={userName}
  78. onChange={(e) => setUserName(e.target.value.trim())}
  79. prefix={<UserOutlined rev={undefined} />}
  80. placeholder="请输入账号"
  81. maxLength={15}
  82. />
  83. </div>
  84. <div className="inputBoxRow">
  85. <Input.Password
  86. onKeyUp={(e) => keyUpEntFu(e)}
  87. value={passWord}
  88. onChange={(e) => setPassWord(e.target.value.trim())}
  89. prefix={<LockOutlined rev={undefined} />}
  90. placeholder="请输入密码"
  91. maxLength={20}
  92. />
  93. </div>
  94. <div className="inputBoxRow inputBoxRow2">
  95. <Input
  96. onKeyUp={(e) => keyUpEntFu(e)}
  97. value={code}
  98. onChange={(e) => setCode(e.target.value.trim())}
  99. prefix={<NumberOutlined rev={undefined} />}
  100. placeholder="请输入验证码"
  101. maxLength={5}
  102. />
  103. {codeImg ? (
  104. <img
  105. onClick={LoginGetCodeFu}
  106. className="loginCode"
  107. src={codeImg}
  108. alt=""
  109. />
  110. ) : null}
  111. </div>
  112. </div>
  113. {/* 登录按钮 */}
  114. <div className="loginBtn">
  115. <Button type="primary" size="large" onClick={loginClickFu}>
  116. 登 录
  117. </Button>
  118. </div>
  119. </div>
  120. </div>
  121. );
  122. }