| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300 |
- <template>
- <div class="login-wrap">
- <!-- header -->
- <div class="login--header">
- <div class="login--header--l">
- <div class="logo">
- <!-- prettier-ignore -->
- 룰렛
- </div>
- </div>
- <div class="login--header--r"></div>
- </div>
- <!-- login -->
- <div class="login-box">
- <div class="login-l">
- <div class="login-l-center">
- <span class="logo">
- <!-- prettier-ignore -->
- 룰렛
- </span>
- <p>We Make Scalable Mobility Life</p>
- </div>
- </div>
- <div class="login-r">
- <div class="tit-login">
- <strong>로그인</strong>
- </div>
- <div class="login-input-wrap">
- <div
- class="txt-field-box"
- :class="!loginForm.validCheck.input.userId ? 'error' : ''"
- >
- <v-text-field
- v-model="loginForm.userId"
- placeholder="아이디를 입력해주세요"
- class="custom-input"
- @keyup.enter="loginAction(loginForm.userId, loginForm.passwd)"
- @input="setInputField('main_userId')"
- ></v-text-field>
- <i class="ico"></i>
- </div>
- <div
- class="txt-field-box"
- :class="!loginForm.validCheck.input.passwd ? 'error' : ''"
- >
- <v-text-field
- v-model="loginForm.passwd"
- :type="visible ? 'text' : 'password'"
- placeholder="비밀번호를 입력해주세요"
- class="custom-input"
- id="password"
- @keyup.enter="loginAction(loginForm.userId, loginForm.passwd)"
- @input="setInputField('main_passwd')"
- ></v-text-field>
- <i
- class="ico-eye"
- @click.stop="toggleVisibility"
- :class="visible ? 'eye-on' : 'eye-off'"
- ></i>
- <i class="ico"></i>
- </div>
- <!-- <p class="error-txt" v-if="!loginForm.validCheck.inputErrorCheck">
- {{ loginForm.validCheck.passwd }}
- </p> -->
- </div>
- <div class="login-btn-wrap">
- <v-btn
- class="custom-btn btn-blue"
- @keyup.enter="loginAction(loginForm.userId, loginForm.passwd)"
- @click="loginAction(loginForm.userId, loginForm.passwd)"
- >로그인</v-btn
- >
- </div>
- </div>
- </div>
- <!-- footer -->
- <div class="login-footer">
- <div class="login--footer--l">
- <p>COPYRIGHT@2018 룰렛 INC. ALL RIGHTS RESERVED.</p>
- <p>마포구 합정동 | TEL 02-1234-5678</p>
- </div>
- </div>
- </div>
- </template>
- <script setup>
- /************************
- * import
- ************************/
- import PrivacyPop from "@/components/login/privacyPop.vue";
- import AgrNPop from "@/components/terms/agreeNListPop.vue";
- import apiUrl from "@/composables/useApi";
- import QRCode from "qrcode";
- import { useI18n } from "vue-i18n";
- /************************
- * layout setting
- ************************/
- definePageMeta({
- layout: "loginlayout",
- });
- /************************
- * plugins inject
- ************************/
- const { $dayjs, $log, $eventBus, $toast, $userAgent } = useNuxtApp();
- const useStore = useDetailStore();
- /************************
- * data & created
- ************************/
- // 현재 입력 중인 필드를 설정하는 함수
- const setInputField = (name) => {
- fnValidCheck(name);
- };
- const pageId = "login";
- const i18n = useI18n();
- // 다국어
- let listObj = ref({
- langTypeList: {},
- });
- // 로그인 정보
- const loginForm = ref({
- userId: "",
- passwd: "",
- otpNum: "",
- username: "",
- authType: "GOOGLE",
- userAgent: "",
- validCheck: {
- input: {
- userId: true,
- passwd: true,
- },
- otp: {
- otpNum: true,
- },
- inputErrorCheck: true,
- inputValidTxt: "",
- otpValidTxt: "",
- loginValidCheck: false,
- btnTxt: "",
- btnTxtType: "",
- },
- });
- // 구글 OTP 1차 팝업
- const authPop1 = ref({
- popYn: false,
- certifyYN: false,
- userId: "",
- passwd: "",
- otpNum: "",
- validOtpKey: true,
- validOtpTxt: "",
- btnTxt: "",
- btnTxtType: "",
- applyBtn: false,
- succOtpYn: false,
- businessName: "",
- agreeChk1: false,
- agreeChk2: false,
- validCheck: {
- userId: true,
- passwd: true,
- },
- validTxt: "",
- errorCheck: false,
- });
- // 구글 OTP 2차 팝업
- const authPop2 = ref({
- popYn: false,
- otpNum: "",
- validOtpKey: true,
- validOtpTxt: "",
- errorCheck: false,
- });
- // 아이디 찾기
- const findId = ref({
- popYn: false,
- //tenantName: '',
- email: "",
- otpNum: "",
- validCheck: {
- input: {
- //tenantName: true,
- email: true,
- },
- otp: {
- otpNum: true,
- },
- inputErrorCheck: true,
- inputValidTxt: "",
- otpValidTxt: "",
- findIdValidCheck: false,
- },
- btnTxt: "",
- });
- // 비밀번호 초기화
- const resetPw = ref({
- popYn: false,
- userId: "",
- email: "",
- otpNum: "",
- validCheck: {
- input: {
- userId: true,
- email: true,
- },
- otp: {
- otpNum: true,
- },
- inputErrorCheck: true,
- inputValidTxt: "",
- otpValidTxt: "",
- resetPwValidCheck: false,
- },
- btnTxt: "",
- });
- // 초기 패스워드 변경
- const initPw = ref({
- popYn: false,
- passwd: "",
- passwd2: "",
- validCheck: {
- passwd: true,
- passwd2: true,
- },
- passwdCheck: false,
- errorTxt: "",
- });
- const selectPlaceholder = ref("");
- const initAuthPop1 = ref({});
- const initAuthPop2 = ref({});
- const initFindId = ref({});
- const initResetPw = ref({});
- const initInitPw = ref({});
- const googleOtpQrCode = ref("");
- const googleOtpSecretKey = ref("");
- const loginInfo = ref({});
- const checkbox = ref(false);
- const langType = ref("");
- const toggleVisibility = () => {
- visible.value = !visible.value;
- };
- const visible = ref(false);
- const isAgrNPop = ref(false);
- const isShowAgrNPop = ref(false);
- let saveId = localStorage.getItem("saveId");
- if (saveId) {
- checkbox.value = true;
- loginForm.value.userId = saveId;
- }
- // 개인정보처리방침 이용약관 팝업
- const privacyPop = ref(false);
- const privacyDetail = ref({
- kr: {
- title: "",
- contents: "",
- },
- en: {
- title: "",
- contents: "",
- },
- });
- const systemInfo = ref({
- mode: "",
- });
- const loginAction = (__ID, __PASS) => {
- let _req = {
- id: __ID,
- password: __PASS,
- };
- useAxios()
- .post("/roulette/login", _req)
- .then((res) => {
- if (res.data) {
- useAuthStore().setAccessToken(res.data.accessToken);
- useAuthStore().setRefreshToken(res.data.refreshToken);
- localStorage.setItem("tempAccess", __ID);
- useUtil.setPageMove("/view/event/evtList");
- useStore.menuInfo.menuIndex = "0";
- useStore.menuInfo.menuId = "menu02";
- useStore.menuInfo.pageRtName = "이벤트 관리";
- useStore.menuInfo.pageStatus = null;
- }
- })
- .catch((error) => {
- console.log(error.status);
- if (error.status) {
- fnLoginSet("아이디 또는 패스워드가 잘못됐습니다. 관리자에게 문의바랍니다.");
- }
- $log.debug("[login][fnIdPwCheck][error]");
- })
- .finally(() => {
- $log.debug("[login][fnIdPwCheck][finished]");
- });
- };
- // onMounted
- onMounted(() => {
- loginForm.value.userAgent = $userAgent;
- if (loginForm.value.authType === "GOOGLE") {
- selectPlaceholder.value = i18n.t("login.googleOTPNum");
- } else if (loginForm.value.authType === "EMAIL") {
- selectPlaceholder.value = i18n.t("login.emailAuthNum");
- } else {
- selectPlaceholder.value = i18n.t("login.smsAuthNum");
- }
- let saveId = localStorage.getItem("saveId");
- if (saveId) {
- checkbox.value = true;
- loginForm.value.username = saveId;
- }
- });
- watchEffect(() => {
- // 감시하고자 하는 데이터를 해당 블럭내에서 사용하면 호출된다.
- // getLang.value를 감시하는 상태
- fnGetEnumCode(useLangStore().getLang);
- });
- $eventBus.off("SET_SUCCESS_POPUP");
- $eventBus.on("SET_SUCCESS_POPUP", () => {
- // 안내 팝업 확인 클릭 팝업 초기화처리
- fnOtpPopClose("findId");
- fnOtpPopClose("resetPw");
- });
- $eventBus.off("PASSWD_CHANGE");
- $eventBus.on("PASSWD_CHANGE", () => {
- fnPasswdChange();
- });
- $eventBus.off("INIT_PASSWORD");
- $eventBus.on("INIT_PASSWORD", () => {
- initPw.value.popYn = true;
- });
- $eventBus.off("SET_LOGIN");
- $eventBus.on("SET_LOGIN", () => {
- fnLogin();
- });
- /************************
- * Methods
- ************************/
- // created
- loginForm.value.btnTxtType = "S";
- authPop1.value.btnTxtType = "S";
- loginForm.value.btnTxt = i18n.t("login.authNumSend");
- authPop1.value.btnTxt = i18n.t("common.sendAuthNumber");
- findId.value.btnTxt = i18n.t("common.sendAuthNumber");
- resetPw.value.btnTxt = i18n.t("common.sendAuthNumber");
- initAuthPop1.value = _cloneDeep(authPop1.value);
- initAuthPop2.value = _cloneDeep(authPop2.value);
- initFindId.value = _cloneDeep(findId.value);
- initResetPw.value = _cloneDeep(resetPw.value);
- initInitPw.value = _cloneDeep(initPw.value);
- /**
- * @SCRIPT
- * 다국어 기능 | 한글 영문 변경 이벤트
- */
- function fnLangChange() {
- useLangStore().setLang(langType.value);
- }
- function fnGetEnumCode(lang) {
- lang = useUtil.nvl(lang, "kr");
- langType.value = lang;
- let objEnum = useEnumCode.getEnumCode(lang);
- listObj.value.langTypeList = objEnum.langType;
- i18n.locale.value = lang;
- }
- /**
- * @SCRIPT
- * 라디오버튼 변경 이벤트 (버튼별 문구)
- */
- function fnChangeAuth() {
- if (loginForm.value.authType === "GOOGLE") {
- selectPlaceholder.value = i18n.t("login.googleOTPNum");
- } else if (loginForm.value.authType === "EMAIL") {
- selectPlaceholder.value = i18n.t("login.emailAuthNum");
- } else {
- selectPlaceholder.value = i18n.t("login.smsAuthNum");
- }
- loginForm.value.btnTxt = i18n.t("login.authNumSend");
- loginForm.value.btnTxtType = "S";
- if (!loginForm.value.validCheck.otp.otpNum) {
- fnValidCheck("main_otpNum");
- }
- }
- /**
- * @SCRIPT
- * 구글OTP 인증 버튼 클릭 이벤트
- * @param {*} type
- */
- function fnAuthCheck(type) {
- let issuer = ""; // 회사명
- let account = ""; // 아이디
- let otpUrl = ""; // 큐알코드 생성 URL
- let _req = {
- username: authPop1.value.userId,
- password: btoa(authPop1.value.passwd),
- mfaType: "SMS",
- otpNum: authPop1.value.otpNum,
- };
- if (type === "optApply1") {
- fnValidCheck("createOtp_userId");
- fnValidCheck("createOtp_passwd");
- if (authPop1.value.errorCheck) {
- fnAuth("POPUP");
- }
- } else if (type === "optApply2") {
- //OTP 인증 팝업2
- useAxios()
- .post(apiUrl.googleSecretKey, _req)
- .then((res) => {
- googleOtpSecretKey.value = res.data.data.secretKey;
- // 시크릿 키를 이용한 큐알코드 생성
- issuer = "[P5G]" + authPop1.value.businessName;
- account = authPop1.value.userId;
- otpUrl =
- "otpauth://totp/" +
- encodeURIComponent(issuer + ":" + account).replace(/\+/g, "%20") +
- "?secret=" +
- encodeURIComponent(googleOtpSecretKey.value).replace(/\+/g, "%20") +
- "&issuer=" +
- encodeURIComponent(issuer).replace(/\+/g, "%20");
- fnCreateQrCode(otpUrl);
- $toast.success("인증처리가 완료되었습니다.");
- authPop1.value.applyBtn = false;
- authPop1.value.agreeChk1 = true;
- authPop1.value.succOtpYn = true;
- $log.debug("[login][fnAuthCheck][success]");
- })
- .catch((error) => {
- $log.debug("[login][fnAuthCheck][error]");
- let errorData = error.response.data;
- errorData.type = "fnAuthCheck";
- fnLoginFail(errorData);
- })
- .finally(() => {
- $log.debug("[login][fnAuthCheck][finished]");
- });
- } else if (type === "optApply2Yn") {
- authPop1.value.popYn = false;
- authPop2.value.popYn = true;
- } else if (type === "findId") {
- //fnValidCheck('findId_tenantName')
- fnValidCheck("findId_email");
- if (findId.value.validCheck.inputErrorCheck) {
- fnIdPwCheck(type);
- }
- } else if (type === "resetPw") {
- fnValidCheck("resetPw_userId");
- fnValidCheck("resetPw_email");
- if (resetPw.value.validCheck.inputErrorCheck) {
- fnIdPwCheck(type);
- }
- } else if (type === "createOtp_otpNum") {
- // 구글OTP등록화면에서 인증번호 받기
- fnAuthSend(authPop1.value.btnTxtType, "createOtp_otpNum");
- } else {
- fnValidCheck("main_userId");
- fnValidCheck("main_passwd");
- if (loginForm.value.validCheck.inputErrorCheck) {
- fnAuth(type);
- }
- }
- }
- /**
- * @SCRIPT
- * 큐알코드 생성
- * @param {*} otpUrl
- */
- async function fnCreateQrCode(otpUrl) {
- googleOtpQrCode.value = await QRCode.toDataURL(otpUrl);
- }
- /**
- * @SCRIPT
- * 로그인 실패관련 토스트 & confirm 처리
- */
- function fnLoginFail(dataObj) {
- let errorMessage = "";
- let type = dataObj.type;
- if (dataObj.code === "2001" || dataObj.code === "2002") {
- let valieTxt = "";
- if (!useUtil.isNull(dataObj.reason)) {
- if (dataObj.reason < "4") {
- valieTxt += i18n.t("login.valid.isNullPw");
- } else {
- // 4회 이상 비밀번호 실패
- fnLoginFailConfirm(dataObj);
- }
- } else {
- valieTxt += i18n.t("login.valid.isNullId");
- }
- console.log("비밀번호 초기화 팝업:::" + resetPw.value.popYn);
- console.log("아이디찾기 팝업:::" + findId.value.popYn);
- console.log("OTP생성 팝업:::" + authPop1.value.popYn);
- if (resetPw.value.popYn) {
- resetPw.value.validCheck.inputErrorCheck = false;
- resetPw.value.validCheck.inputValidTxt = valieTxt;
- } else if (findId.value.popYn) {
- findId.value.validCheck.inputErrorCheck = false;
- findId.value.validCheck.inputValidTxt = valieTxt;
- } else if (authPop1.value.popYn) {
- authPop1.value.errorCheck = false;
- authPop1.value.validTxt = valieTxt;
- } else {
- loginForm.value.validCheck.inputErrorCheck = false;
- loginForm.value.validCheck.inputValidTxt = valieTxt;
- }
- } else if (dataObj.code === "2003") {
- let otpTxt = "";
- if (loginForm.value.authType === "GOOGLE") {
- otpTxt += i18n.t("login.valid.isNullOtp");
- } else if (loginForm.value.authType === "EMAIL") {
- otpTxt += i18n.t("login.valid.isNullEmail");
- } else {
- otpTxt += i18n.t("login.valid.isNullSms");
- }
- if (resetPw.value.popYn) {
- resetPw.value.validCheck.otp.otpNum = false;
- resetPw.value.validCheck.otpValidTxt = i18n.t("login.valid.isNullEmail");
- } else if (findId.value.popYn) {
- findId.value.validCheck.otp.otpNum = false;
- findId.value.validCheck.otpValidTxt = i18n.t("login.valid.isNullEmail");
- } else if (authPop1.value.popYn) {
- authPop1.value.validOtpKey = false;
- authPop1.value.validOtpTxt = i18n.t("login.valid.isNullSms");
- } else {
- loginForm.value.validCheck.otp.otpNum = false;
- loginForm.value.validCheck.otpValidTxt = otpTxt;
- }
- } else if (
- dataObj.code === "2004" ||
- dataObj.code === "2005" ||
- dataObj.code === "2006" ||
- dataObj.code === "2007" ||
- dataObj.code === "2010"
- ) {
- // 2004: 접속허용IP아님 , 2005: 사업자 접속불가 상태, 2006: 사업자 계약 만료, 2007: 접속 계정 수 초과, 2010: 계정 잠김 (비밀번호 틀림 N 회) 5회 이상 비밀번호 실패
- fnLoginFailConfirm(dataObj);
- }
- if (!useUtil.isNull(errorMessage)) {
- // 토스트 함수 (success, info, error, warn, dark)
- if (type === "findId" || type === "resetPw")
- errorMessage += i18n.t("login.failMessage.2001");
- else errorMessage += i18n.t("login.valid.isNull");
- nextTick().then(() => {
- $toast.error(errorMessage);
- });
- }
- }
- /**
- * @SCRIPT
- * 로그인 실패관련 토스트 & confirm 처리
- */
- function fnLoginFailConfirm(dataObj) {
- let confirmMessage = "";
- if (dataObj.code === "2002") confirmMessage = i18n.t("login.failMessage.2002");
- else if (dataObj.code === "2004") confirmMessage = i18n.t("login.failMessage.2004");
- else if (dataObj.code === "2005") confirmMessage = i18n.t("login.failMessage.2005");
- else if (dataObj.code === "2006") confirmMessage = i18n.t("login.failMessage.2006");
- else if (dataObj.code === "2007") confirmMessage = i18n.t("login.failMessage.2007");
- else if (dataObj.code === "2010") confirmMessage = i18n.t("login.failMessage.2010");
- let param = {
- id: pageId,
- title: i18n.t("common.popTitle"),
- content: confirmMessage,
- yes: {
- text: i18n.t("common.confirm"),
- isProc: true,
- event: "",
- param: {},
- },
- };
- $eventBus.emit("OPEN_CONFIRM_POP_UP", param);
- }
- /**
- * @SCRIPT
- * 아이디 저장 체크 이벤트
- */
- function fnSaveId() {
- if (checkbox.value) {
- // 체크 시 저장
- localStorage.setItem("saveId", loginForm.value.userId);
- } else {
- // 미체크 시 삭제
- localStorage.removeItem("saveId");
- }
- }
- /**
- * @API
- * 아이디 찾기에서 사업자명 & 이메일 주소 체크 API
- * 비밀번호 초기화에서 사용자계정 & 이메일 주소 체크 API
- */
- function fnIdPwCheck(type) {
- let _req = {};
- if (type === "findId") {
- //_req.tenantName = findId.value.tenantName,
- _req.email = findId.value.email;
- } else {
- (_req.accountId = resetPw.value.userId), (_req.email = resetPw.value.email);
- }
- useAxios()
- .post(apiUrl.findCheck, _req)
- .then((res) => {
- if (type === "findId") {
- findId.value.btnTxt = i18n.t("common.sendReAuthNumber");
- } else {
- resetPw.value.btnTxt = i18n.t("common.sendReAuthNumber");
- }
- $toast.success(i18n.t("login.sendEmail"));
- $log.debug("[login][fnIdPwCheck][success]");
- })
- .catch((error) => {
- let errorData = error.response.data;
- errorData.type = type;
- fnLoginFail(errorData);
- $log.debug("[login][fnIdPwCheck][error]");
- })
- .finally(() => {
- $log.debug("[login][fnIdPwCheck][finished]");
- });
- }
- /**
- * @API
- * 가입된 아이디 비밀번호 체크 API
- */
- function fnAuth(type) {
- let _req = {};
- if (type === "POPUP") {
- _req.username = authPop1.value.userId;
- _req.password = btoa(authPop1.value.passwd);
- } else {
- _req.username = loginForm.value.userId;
- _req.password = btoa(loginForm.value.passwd);
- }
- // 아이디&비밀번호 validation체크 정상일 경우 아이디 비밀번호를 체크 하는 API를 진행한다.
- useAxios()
- .post(apiUrl.idPwCheck, _req)
- .then((res) => {
- if (type === "GOOGLE") {
- fnLogin();
- } else if (type === "POPUP") {
- // if(useUtil.isNull(res.data.data.tenantName)) {
- // authPop1.value.businessName = ''
- // } else {
- // authPop1.value.businessName = res.data.data.tenantName
- // }
- // 아이디 비밀번호 입력 영역 비활성화
- authPop1.value.certifyYN = true;
- //authPop1.value.agreeChk1 = true
- } else {
- // 아이디&비밀번호가 존재하여 이메일 발송을 진행합니다.
- fnAuthSend(loginForm.value.btnTxtType, "loginForm");
- }
- $log.debug("[login][fnAuth][success]");
- })
- .catch((error) => {
- let errorData = error.response.data;
- errorData.type = type;
- fnLoginFail(errorData);
- $log.debug("[login][fnAuth][error]");
- })
- .finally(() => {
- $log.debug("[login][fnAuth][finished]");
- });
- }
- /**
- * @API
- * 가입된 아이디 비밀번호 체크가 정상 일 경우 인증번호 발송
- * 이메일(EMAIL) & 문자(SMS)
- */
- function fnAuthSend(type, form) {
- let _req = {};
- if (form === "loginForm") {
- (_req.username = loginForm.value.userId),
- (_req.password = btoa(loginForm.value.passwd)),
- (_req.mfaType = loginForm.value.authType);
- } else {
- (_req.username = authPop1.value.userId),
- (_req.password = btoa(authPop1.value.passwd)),
- (_req.mfaType = "SMS");
- }
- useAxios()
- .post(apiUrl.otpSend, _req)
- .then((res) => {
- if (form === "loginForm") {
- loginForm.value.btnTxt = i18n.t("login.authNumReSend");
- loginForm.value.btnTxtType = "R";
- } else {
- authPop1.value.btnTxt = i18n.t("login.authNumReSend");
- authPop1.value.btnTxtType = "R";
- }
- if (type === "S") {
- if (form === "loginForm") {
- if (loginForm.value.authType === "EMAIL") {
- $toast.success(i18n.t("login.sendEmail"));
- } else {
- $toast.success(i18n.t("login.sendSms"));
- }
- } else {
- $toast.success(i18n.t("login.sendSms"));
- }
- } else {
- if (form === "loginForm") {
- if (loginForm.value.authType === "EMAIL") {
- $toast.success(i18n.t("login.sendReEmail"));
- } else {
- $toast.success(i18n.t("login.sendReSms"));
- }
- } else {
- $toast.success(i18n.t("login.sendReSms"));
- }
- }
- $log.debug("[login][fnAuthSend][success]");
- })
- .catch((error) => {
- $log.debug("[login][fnAuthSend][error]");
- // 에러 메시지 체크 팝업으로 변경
- let param = {
- id: pageId,
- title: i18n.t("common.popTitle"),
- content: i18n.t("login.sendFail"),
- yes: {
- text: i18n.t("common.confirm"),
- isProc: true,
- event: "",
- param: {},
- },
- };
- $eventBus.emit("OPEN_CONFIRM_POP_UP", param);
- // let errorMessage = i18n.t('login.sendFail')
- // errorMessage += error.response.data.message
- // $toast.error(errorMessage)
- })
- .finally(() => {
- $log.debug("[login][fnAuthSend][finished]");
- });
- }
- const fnLoginSet = (__MSG) => {
- let param = {
- id: pageId,
- title: "로그인",
- content: __MSG,
- yes: {
- text: "확인",
- isProc: true,
- event: "FN_LOGIN",
- param: "",
- },
- no: {
- text: "취소",
- isProc: false,
- },
- };
- $eventBus.emit("OPEN_CONFIRM_POP_UP", param);
- };
- /**
- * @API
- * 최종 로그인 버튼 클릭 시 API
- */
- function fnLogin(__USERID, __USERPASS) {
- // 파라미터 전달 값 [아이디, 비밀번호, otpNum, 브라우저정보]
- //userId: loginForm.value.userId,
- // let _req = {
- // username: loginForm.value.userId,
- // password: btoa(loginForm.value.passwd),
- // };
- localStorage.setItem("tempAccess", __USERID);
- if (__USERID == "admin" && __USERPASS == "1234") {
- useUtil.setPageMove("/view/media/newsList");
- } else {
- fnLoginSet("비밀번호가 맞지 않습니다. 확인해주세요.");
- }
- // useAxios()
- // .post(apiUrl.otpCheck, _req)
- // .then((res) => {
- // loginInfo.value = res.data.data;
- // useAuthStore().setAccessToken(loginInfo.value.accessToken);
- // useAuthStore().setRefreshToken(loginInfo.value.refreshToken);
- // // OTP key체크 성공 후 개인정보에 대한 API를 호출 한다.
- // fnServiceModeCheck();
- // $log.debug("[login][fnLogin][success]");
- // })
- // .catch((error) => {
- // $log.debug("[login][fnLogin][error]");
- // let errorData = error.response.data;
- // errorData.type = "fnLogin";
- // fnLoginFail(errorData);
- // })
- // .finally(() => {
- // $log.debug("[login][fnLogin][finished]");
- // });
- }
- /**
- * @API
- * 최종 로그인 전 점검공지에 대한 정보를 가져온다.
- */
- function fnServiceModeCheck() {
- useAxios()
- .get(useApi.getServiceMode)
- .then((res) => {
- $log.debug("[login][fnServiceModeCheck][success]");
- let data = res.data.data;
- systemInfo.value.mode = data.mode;
- fnMyInfo();
- })
- .catch((error) => {
- $log.debug("[login][fnServiceModeCheck][error]");
- useErrorHandler().fnSetCommErrorHandle(error);
- })
- .finally(() => {
- $log.debug("[login][fnServiceModeCheck][finished]");
- });
- }
- /**
- * @API
- * 최종 로그인 버튼 클릭 후 성공 시 토큰값을 통해 개인정보 API 호출
- */
- function fnMyInfo() {
- useAxios()
- .get(apiUrl.myInfo)
- .then((res) => {
- let dataObj = {};
- dataObj = res.data.data;
- dataObj.accessToken = useAuthStore().getAccessToken;
- dataObj.refreshToken = useAuthStore().getRefreshToken;
- useAuthStore().setServiceMode(systemInfo.value.mode);
- useAuthStore().setAuth(dataObj);
- // 아이디 저장 여부 체크
- fnSaveId();
- let accountValue = useAuthStore().getAccountRole.charAt(0).toUpperCase();
- // 첫화면 redirect_page URL로 설정
- // 초기 비밀번호 사용
- if (useAuthStore().getFirstLoginYn === "Y") {
- // 최초로그인
- initPw.value.popYn = true;
- } else if (useAuthStore().getPwExpiredYN === "Y") {
- // 비밀번호 3개월 만료
- let param = {
- id: pageId,
- title: i18n.t("common.popTitle"),
- content: i18n.t("login.failMessage.2009"),
- yes: {
- text: i18n.t("common.confirm"),
- isProc: true,
- event: "INIT_PASSWORD", // 확인 클릭 시 비밀번호 변경 팝업 활성화
- param: {},
- },
- no: {
- text: i18n.t("common.skip"),
- isProc: true,
- event: "SET_LOGIN", // 건너뛰기 클릭 시 로그인 처리
- param: {},
- },
- };
- $eventBus.emit("OPEN_CONFIRM_POP_UP", param);
- } else if (useAuthStore().getTermsArgYN === "N") {
- // 필수약관동의여부
- isShowAgrNPop.value = true;
- nextTick().then(() => {
- isAgrNPop.value = true;
- });
- } else {
- if (systemInfo.value.mode === "INACTIVE") {
- // 점검모드일 경우 점검모드 페이지로 이동
- if (accountValue === "S") {
- useUtil.setPageMove("/view/home/dashboard");
- } else {
- useUtil.setPageMove("/view/home/serviceMode");
- }
- } else {
- if (accountValue === "A" || accountValue === "S") {
- useUtil.setPageMove("/view/home/dashboard");
- } else {
- useUtil.setPageMove("/view/home/tenantDashboard");
- }
- }
- }
- $log.debug("[login][fnMyInfo][success]");
- })
- .catch((error) => {
- $log.debug("[login][fnMyInfo][error]");
- useErrorHandler().fnSetCommErrorHandle(error);
- })
- .finally(() => {
- $log.debug("[login][fnMyInfo][finished]");
- });
- }
- /**
- * @API
- * 최초 비밀번호 변경 API 호출
- */
- function fnPasswdChange() {
- let _req = {
- newPassword: btoa(initPw.value.passwd2),
- };
- useAxios()
- .post(apiUrl.myInfoUpdate, _req)
- .then((res) => {
- localStorage.removeItem("authStore");
- // 세션 초기화 및 로그인 화면 이동
- useUtil.setPageMove("/");
- $log.debug("[login][fnPasswdChange][success]");
- })
- .catch((error) => {
- $log.debug("[login][fnPasswdChange][error]");
- let errorData = error.response.data;
- errorData.type = "fnPasswdChange";
- fnLoginFail(errorData);
- })
- .finally(() => {
- $log.debug("[login][fnPasswdChange][finished]");
- });
- }
- /**
- * @API
- * 로그인 FOOTER 약관 조회 API
- */
- function fnPrivacy(type) {
- let _req = {
- termsType: useUtil.nvl(type, null),
- };
- useAxios()
- .get(apiUrl.loginTerms, { params: _req })
- .then((res) => {
- let dataObj = res.data.data;
- privacyDetail.value.kr.title = dataObj.termsTitle;
- privacyDetail.value.kr.contents = dataObj.termsCont;
- privacyDetail.value.en.title = dataObj.termsTitleEn;
- privacyDetail.value.en.contents = dataObj.termsContEn;
- privacyPop.value = true;
- })
- .catch((error) => {
- $log.debug("[login][fnPrivacy][error]");
- useErrorHandler().fnSetCommErrorHandle(error, fnPrivacy);
- })
- .finally(() => {
- $log.debug("[login][fnPrivacy][finished]");
- });
- }
- /**
- * @SCRIPT
- * 아이디 & 비밀번호 & otp 값의 유효성 검사 체크 및 로그인 버튼 활성화 이벤트
- */
- function fnValidCheck(input) {
- if (_includes(input, "main_")) {
- let commonValidCheck = {
- inputCheck: false,
- otpCheck: false,
- };
- if (input === "main_userId") {
- if (
- useUtil.isNull(loginForm.value.userId) ||
- !/^[a-zA-Z0-9._-]{1,20}$/.test(loginForm.value.userId)
- ) {
- loginForm.value.validCheck.input.userId = false;
- loginForm.value.validCheck.inputValidTxt = i18n.t("login.valid.isNull");
- } else {
- loginForm.value.validCheck.input.userId = true;
- if (!useUtil.isNull(loginForm.value.passwd)) {
- fnValidCheck("main_passwd");
- }
- }
- } else if (input === "main_passwd") {
- if (
- useUtil.isNull(loginForm.value.passwd) ||
- !/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,30}$/i.test(
- loginForm.value.passwd
- )
- ) {
- //if(useUtil.isNull(loginForm.value.passwd)) {
- loginForm.value.validCheck.input.passwd = false;
- loginForm.value.validCheck.inputValidTxt = i18n.t("login.valid.isNull");
- } else {
- loginForm.value.validCheck.input.passwd = true;
- }
- } else if (input === "main_otpNum") {
- loginForm.value.otpNum = useValid.p5gNumCheck(loginForm.value.otpNum, "otp");
- if (
- useUtil.isNull(loginForm.value.otpNum) ||
- loginForm.value.otpNum.length <= 5
- ) {
- loginForm.value.validCheck.otp.otpNum = false;
- if (loginForm.value.authType === "GOOGLE") {
- loginForm.value.validCheck.otpValidTxt = i18n.t("login.valid.isNullOtp");
- } else if (loginForm.value.authType === "EMAIL") {
- loginForm.value.validCheck.otpValidTxt = i18n.t("login.valid.isNullEmail");
- } else {
- loginForm.value.validCheck.otpValidTxt = i18n.t("login.valid.isNullSms");
- }
- } else {
- loginForm.value.validCheck.otp.otpNum = true;
- }
- }
- loginForm.value.validCheck.inputErrorCheck = _every(
- loginForm.value.validCheck.input,
- (value) => value === true
- );
- // 전체 항목에 대한 validation이 정상일 경우 login버튼 활성화
- if (
- !useUtil.isNull(loginForm.value.userId) &&
- !useUtil.isNull(loginForm.value.passwd) &&
- !useUtil.isNull(loginForm.value.otpNum)
- ) {
- commonValidCheck.inputCheck = _every(
- loginForm.value.validCheck.input,
- (value) => value === true
- );
- commonValidCheck.otpCheck = _every(
- loginForm.value.validCheck.otp,
- (value) => value === true
- );
- }
- loginForm.value.validCheck.loginValidCheck = _every(
- commonValidCheck,
- (value) => value === true
- );
- } else if (_includes(input, "createOtp_")) {
- if (input === "createOtp_userId") {
- if (
- useUtil.isNull(authPop1.value.userId) ||
- !/^[a-zA-Z0-9._-]{1,20}$/.test(authPop1.value.userId)
- ) {
- authPop1.value.validCheck.userId = false;
- authPop1.value.validTxt = i18n.t("login.valid.isNull");
- } else {
- authPop1.value.validCheck.userId = true;
- if (!useUtil.isNull(authPop1.value.passwd)) {
- fnValidCheck("createOtp_passwd");
- }
- }
- } else if (input === "createOtp_passwd") {
- if (
- useUtil.isNull(authPop1.value.passwd) ||
- !/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,30}$/i.test(
- authPop1.value.passwd
- )
- ) {
- //if(useUtil.isNull(authPop1.value.passwd)) {
- authPop1.value.validCheck.passwd = false;
- authPop1.value.validTxt = i18n.t("login.valid.isNull");
- } else {
- authPop1.value.validCheck.passwd = true;
- }
- } else if (input === "createOtp_otpNum1") {
- authPop1.value.otpNum = useValid.p5gNumCheck(authPop1.value.otpNum, "otp");
- if (useUtil.isNull(authPop1.value.otpNum) || authPop1.value.otpNum.length <= 5) {
- authPop1.value.validOtpKey = false;
- authPop1.value.errorCheck = false;
- authPop1.value.validOtpTxt = i18n.t("login.valid.isNullSms");
- } else {
- authPop1.value.validOtpKey = true;
- authPop1.value.errorCheck = true;
- authPop1.value.applyBtn = true;
- }
- } else if (input === "createOtp_otpNum") {
- authPop2.value.otpNum = useValid.p5gNumCheck(authPop2.value.otpNum, "otp");
- if (useUtil.isNull(authPop2.value.otpNum) || authPop2.value.otpNum.length <= 5) {
- authPop2.value.validOtpKey = false;
- authPop2.value.errorCheck = false;
- if (loginForm.value.authType === "GOOGLE") {
- authPop2.value.validOtpTxt = i18n.t("login.valid.isNullOtp");
- } else if (loginForm.value.authType === "EMAIL") {
- authPop2.value.validOtpTxt = i18n.t("login.valid.isNullEmail");
- } else {
- authPop2.value.validOtpTxt = i18n.t("login.valid.isNullSms");
- }
- } else {
- authPop2.value.validOtpKey = true;
- authPop2.value.errorCheck = true;
- }
- }
- authPop1.value.errorCheck = _every(
- authPop1.value.validCheck,
- (value) => value === true
- );
- } else if (_includes(input, "findId_")) {
- let validAllCheck = {
- inputCheck: false,
- otpCheck: false,
- };
- // if(input === 'findId_tenantName') {
- // if(useUtil.isNull(findId.value.tenantName)) {
- // findId.value.validCheck.input.tenantName = false
- // findId.value.validCheck.inputValidTxt = i18n.t('login.findId.valid.isNullTenantName')
- // } else {
- // findId.value.validCheck.input.tenantName = true
- // if(!useUtil.isNull(findId.value.email)) {
- // fnValidCheck('findId_email')
- // }
- // }
- // } else
- if (input === "findId_email") {
- if (useUtil.isNull(findId.value.email)) {
- findId.value.validCheck.input.email = false;
- findId.value.validCheck.inputValidTxt = i18n.t(
- "login.findId.valid.isNullEmail"
- );
- } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(findId.value.email)) {
- findId.value.validCheck.input.email = false;
- findId.value.validCheck.inputValidTxt = i18n.t(
- "login.findId.valid.isTypeEmail"
- );
- } else {
- findId.value.validCheck.input.email = true;
- }
- } else if (input === "findId_otpNum") {
- findId.value.otpNum = useValid.p5gNumCheck(findId.value.otpNum, "otp");
- if (useUtil.isNull(findId.value.otpNum) || findId.value.otpNum.length <= 5) {
- findId.value.validCheck.otp.otpNum = false;
- findId.value.validCheck.otpValidTxt = i18n.t("login.findId.valid.isNullOtp");
- } else {
- findId.value.validCheck.otp.otpNum = true;
- }
- }
- // tenantName & email validation check
- findId.value.validCheck.inputErrorCheck = _every(
- findId.value.validCheck.input,
- (value) => value === true
- );
- //!useUtil.isNull(findId.value.tenantName) &&
- if (!useUtil.isNull(findId.value.email) && !useUtil.isNull(findId.value.otpNum)) {
- validAllCheck.inputCheck = findId.value.validCheck.inputErrorCheck;
- validAllCheck.otpCheck = findId.value.validCheck.otp.otpNum;
- }
- findId.value.validCheck.findIdValidCheck = _every(
- validAllCheck,
- (value) => value === true
- );
- } else if (_includes(input, "resetPw_")) {
- let validAllCheck = {
- inputCheck: false,
- otpCheck: false,
- };
- if (input === "resetPw_userId") {
- if (useUtil.isNull(resetPw.value.userId)) {
- resetPw.value.validCheck.input.userId = false;
- resetPw.value.validCheck.inputValidTxt = i18n.t(
- "login.resetPasswd.valid.isNullUserId"
- );
- } else {
- resetPw.value.validCheck.input.userId = true;
- if (!useUtil.isNull(resetPw.value.email)) {
- fnValidCheck("resetPw_email");
- }
- }
- } else if (input === "resetPw_email") {
- if (useUtil.isNull(resetPw.value.email)) {
- resetPw.value.validCheck.input.email = false;
- resetPw.value.validCheck.inputValidTxt = i18n.t(
- "login.resetPasswd.valid.isNullEmail"
- );
- } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(resetPw.value.email)) {
- resetPw.value.validCheck.input.email = false;
- resetPw.value.validCheck.inputValidTxt = i18n.t(
- "login.resetPasswd.valid.isTypeEmail"
- );
- } else {
- resetPw.value.validCheck.input.email = true;
- }
- } else if (input === "resetPw_otpNum") {
- resetPw.value.otpNum = useValid.p5gNumCheck(resetPw.value.otpNum, "otp");
- if (useUtil.isNull(resetPw.value.otpNum) || resetPw.value.otpNum.length <= 5) {
- resetPw.value.validCheck.otp.otpNum = false;
- resetPw.value.validCheck.otpValidTxt = i18n.t(
- "login.resetPasswd.valid.isNullOtp"
- );
- } else {
- resetPw.value.validCheck.otp.otpNum = true;
- }
- }
- // tenantName & email validation check
- resetPw.value.validCheck.inputErrorCheck = _every(
- resetPw.value.validCheck.input,
- (value) => value === true
- );
- if (
- !useUtil.isNull(resetPw.value.userId) &&
- !useUtil.isNull(resetPw.value.email) &&
- !useUtil.isNull(resetPw.value.otpNum)
- ) {
- validAllCheck.inputCheck = resetPw.value.validCheck.inputErrorCheck;
- validAllCheck.otpCheck = resetPw.value.validCheck.otp.otpNum;
- }
- resetPw.value.validCheck.resetPwValidCheck = _every(
- validAllCheck,
- (value) => value === true
- );
- } else {
- if (input === "initPw_passwd") {
- let digits1 = useAuthStore().getAuth.phoneNumber.replace(/\D/g, "");
- let digits2 = initPw.value.passwd.replace(/\D/g, "");
- let lastEightDigits1 = digits1.slice(-8);
- let lastEightDigits2 = digits2.slice(-8);
- if (useUtil.isNull(initPw.value.passwd)) {
- initPw.value.validCheck.passwd = false;
- initPw.value.errorTxt = i18n.t("login.valid.isNullNewPassword");
- } else if (_includes(initPw.value.passwd, useAuthStore().getAuth.accountId)) {
- // 아이디는 비밀번호로 사용할 수 없습니다.
- initPw.value.validCheck.passwd = false;
- initPw.value.errorTxt = i18n.t(
- "common.header.myInfoUpdateModal.valid.includeId"
- );
- } else if (lastEightDigits1 === lastEightDigits2) {
- // 연락처와 유사한 비밀번호는 사용할 수 없습니다.
- initPw.value.validCheck.passwd = false;
- initPw.value.errorTxt = i18n.t(
- "common.header.myInfoUpdateModal.valid.includePhone"
- );
- } else if (/(.)\1{2,}/.test(initPw.value.passwd)) {
- // 3자리 이상 연속 숫자, 문자는 사용 불가합니다.
- initPw.value.validCheck.passwd = false;
- initPw.value.errorTxt = i18n.t(
- "common.header.myInfoUpdateModal.valid.continuousUse"
- );
- } else if (
- !/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,30}$/i.test(
- initPw.value.passwd
- )
- ) {
- // 비밀번호는 문자,숫자,특수문자 조합 8~30자리로입력
- initPw.value.validCheck.passwd = false;
- initPw.value.errorTxt = i18n.t(
- "common.header.myInfoUpdateModal.valid.validPassword"
- );
- } else {
- initPw.value.validCheck.passwd = true;
- if (!useUtil.isNull(initPw.value.passwd2)) {
- fnValidCheck("initPw_passwd2");
- }
- }
- } else {
- if (initPw.value.passwd != initPw.value.passwd2) {
- // 신규비밀번호가 일치 하지 않습니다.
- initPw.value.validCheck.passwd2 = false;
- initPw.value.errorTxt = i18n.t(
- "common.header.myInfoUpdateModal.valid.missmatchPassword"
- );
- } else {
- initPw.value.validCheck.passwd2 = true;
- }
- }
- if (!useUtil.isNull(initPw.value.passwd) && !useUtil.isNull(initPw.value.passwd2)) {
- initPw.value.passwdCheck = _every(
- initPw.value.validCheck,
- (value) => value === true
- );
- }
- }
- }
- </script>
|