dm_new: 로그인 처리 중

This commit is contained in:
dongsilove
2026-02-19 23:47:56 +09:00
parent d55b7e384e
commit 17a5c20266
+43 -6
View File
@@ -2,6 +2,10 @@
import { useEffect, useId, useState } from "react";
import { useRouter } from "next/navigation";
import { useDmStore } from "@/app/store";
import { sha512 } from 'js-sha512';
import toast from "react-hot-toast";
import { Button, Input } from "@common/components";
type LoginModalProps = {
open: boolean;
@@ -28,8 +32,8 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps
const titleId = useId();
const router = useRouter();
const [bizNo, setBizNo] = useState("");
const [workerNo, setWorkerNo] = useState("");
const [bizNo, setBizNo] = useState(""); // 사업자번호
const [workerNo, setWorkerNo] = useState(""); // 종사업자번호
const [noWorker, setNoWorker] = useState(true); // 종사업자번호 해당없음 checked
const [pw, setPw] = useState("");
@@ -41,13 +45,13 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps
useEffect(() => {
if (!open) return;
const onKeyDown = (e: KeyboardEvent) => {
if (e.key === "Escape") onClose();
if (e.key === "Escape") onClose(); // ESC 키로 모달 닫기
};
window.addEventListener("keydown", onKeyDown);
// 스크롤 잠금
const prev = document.body.style.overflow;
document.body.style.overflow = "hidden";
document.body.style.overflow = "hidden"; // 모달 오픈 시 배경 스크롤 방지
// 모달 오픈 시 에러/터치 초기화
setErrors({});
@@ -90,6 +94,23 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps
return next;
};
const formatBusinessNumber = (value: string) => {
// 숫자만 추출
const digitsOnly = value.replace(/\D/g, "");
// 10자리까지만 처리
const limitedDigits = digitsOnly.slice(0, 10);
// 3-2-5 형식으로 포맷팅
if (limitedDigits.length <= 3) {
return limitedDigits;
} else if (limitedDigits.length <= 5) {
return `${limitedDigits.slice(0, 3)}-${limitedDigits.slice(3)}`;
} else {
return `${limitedDigits.slice(0, 3)}-${limitedDigits.slice(3, 5)}-${limitedDigits.slice(5)}`;
}
};
const markTouched = (key: FieldKey) =>
setTouched((p) => ({ ...p, [key]: true }));
@@ -132,6 +153,21 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps
}
};
// const handleLogin = () => {
// const data = form.getValues();
// const passwordStr = sha512.hex(data.password)
// data.dmdAplyPswd = passwordStr;
// const param = {
// dmdInfoId: data.dmdInfoId + (isBznmTotNoDisabled ? '0000' : data.bznmTotNo),
// dmdAplyPswd: data.dmdAplyPswd,
// }
// actionLogin(param as unknown as DemandCompType);
// };
const initPassword = () => {
alert("관리자(031-0000-0000)에게 비밀번호 초기화 요청을 유선으로 하시기 바랍니다.");
}
return (
<div className="fixed inset-0 z-[100]">
{/* Backdrop */}
@@ -181,7 +217,7 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps
사업자 등록번호
</label>
<input
value={bizNo}
value={formatBusinessNumber(bizNo)}
onChange={(e) => {
setBizNo(e.target.value);
setErrors((p) => ({ ...p, bizNo: undefined }));
@@ -279,6 +315,7 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps
? "bg-sky-300 cursor-not-allowed"
: "bg-sky-500 hover:bg-sky-600 active:bg-sky-700",
].join(" ")}
onClick={handleLogin}
>
{submitting ? "로그인 중..." : "로그인"}
</button>
@@ -286,7 +323,7 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps
{/* 비밀번호 초기화 요청 */}
<button
type="button"
onClick={() => alert("TODO: 비밀번호 초기화 요청 화면/기능 연결")}
onClick={initPassword}
className="mx-auto block text-[14px] text-[#767676] hover:text-gray-900"
>
비밀번호 초기화 요청