Explorar o código

회원가입 퍼블 수정 및 가입유형 화면 추가 유효성 체크 추가

jsshin %!s(int64=5) %!d(string=hai) anos
pai
achega
d39fe7ffbd

+ 9 - 0
src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java

@@ -66,4 +66,13 @@ public interface TsfCustomerDao {
 	 * @since 2021. 02. 24
 	 */
 	Customer getCusomterSnsFind(CustSnsInfo custSnsInfo);
+
+	/**
+	 * 가입된 이력 확인
+	 * @param customer - 고객 정보
+	 * @return 고객 아이디(여러개이면 MAX)
+	 * @author jsshin
+	 * @since 2021. 03. 02
+	 */
+	String getCustomerMaxCustId(Customer customer);
 }

+ 90 - 10
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -7,6 +7,7 @@ import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.core.support.util.CryptoUtils;
+import com.style24.core.support.util.MaskingUtils;
 import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
@@ -489,36 +490,45 @@ public class TsfCustomerService {
 	 */
 	public GagaMap generalCustomerValidation (Customer customer) {
 		GagaMap resultMap = new GagaMap();
+		String maskingCustId;
 
 		// 1. 아이디 확인
 		boolean boolCustId = getCustomerFindByCustIdCount(customer.getCustId());
-		if (!boolCustId) {
-			resultMap.setString("custStat", "DUP_ID_CUST");
+		if (boolCustId) {
+			maskingCustId = getMaxCustIdById(customer.getCustId());
+			resultMap.setBoolean("isPossibe", false);
+			resultMap.setString("maskingCustId", maskingCustId);
 			return resultMap;
 		}
 
 		// 2. 이메일 확인
 		boolean boolEmail = getCustomerFindByEmailCount(customer.getEmail());
-		if (!boolEmail) {
-			resultMap.setString("custStat", "DUP_EMAIL_CUST");
+		if (boolEmail) {
+			maskingCustId = getMaxCustIdByEmail(customer.getEmail());
+			resultMap.setBoolean("isPossibe", false);
+			resultMap.setString("maskingCustId", maskingCustId);
 			return resultMap;
 		}
 
 		// 3. 휴대전화
 		boolean boolPhone = getCustomerFindByCellPhnnoCount(customer.getCellPhnno());
-		if (!boolPhone) {
-			resultMap.setString("custStat", "DUP_PHONE_CUST");
+		if (boolPhone) {
+			maskingCustId = getMaxCustIdByCellPhnno(customer.getCellPhnno());
+			resultMap.setBoolean("isPossibe", false);
+			resultMap.setString("maskingCustId", maskingCustId);
 			return resultMap;
 		}
 
-		// 4. CI
+		// 4. CI(연계정보)
 		boolean boolCi = getCustomerFindByCiCount(customer.getCi());
-		if (!boolCi) {
-			resultMap.setString("custStat", "DUP_CI_CUST");
+		if (boolCi) {
+			maskingCustId = getMaxCustIdByCi(customer.getCi());
+			resultMap.setBoolean("isPossibe", false);
+			resultMap.setString("maskingCustId", maskingCustId);
 			return resultMap;
 		}
 
-		resultMap.setString("custStat", "PASS_CUST");
+		resultMap.setBoolean("isPossibe", true);
 
 		return resultMap;
 	}
@@ -535,4 +545,74 @@ public class TsfCustomerService {
 	}
 
 
+	/**
+	 * 가입된 아이디 가져오기
+	 * @param custId - 고객아이디
+	 * @return String - 가입된 고객 아이디
+	 * @author jsshin
+	 * @since 2021. 03. 02
+	 */
+	String getMaxCustIdById(String custId) {
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCustId(custId);
+		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+		maskingCustId = MaskingUtils.id(maskingCustId);
+		return maskingCustId;
+	}
+
+	/**
+	 * 가입된 아이디 가져오기
+	 * @param email - 이메일
+	 * @return String - 가입된 고객 아이디
+	 * @author jsshin
+	 * @since 2021. 03. 02
+	 */
+	String getMaxCustIdByEmail(String email) {
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setEmail(email);
+		customer.encryptData();
+		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+		maskingCustId = MaskingUtils.id(maskingCustId);
+		return maskingCustId;
+	}
+
+	/**
+	 * 가입된 아이디 가져오기
+	 * @param cellPhnno - 전화번호
+	 * @return String - 가입된 고객 아이디
+	 * @author jsshin
+	 * @since 2021. 03. 02
+	 */
+	String getMaxCustIdByCellPhnno(String cellPhnno) {
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCellPhnno(cellPhnno);
+		customer.encryptData();
+		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+		maskingCustId = MaskingUtils.id(maskingCustId);
+		return maskingCustId;
+	}
+
+	/**
+	 * 가입된 아이디 가져오기
+	 * @param ci - 연계정보
+	 * @return String - 가입된 고객 아이디
+	 * @author jsshin
+	 * @since 2021. 03. 02
+	 */
+	String getMaxCustIdByCi(String ci) {
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCi(ci);
+		customer.encryptData();
+		String maskingCustId = customerDao.getCustomerMaxCustId(customer);
+		maskingCustId = MaskingUtils.id(maskingCustId);
+		return maskingCustId;
+	}
+
+
+
+
 }

+ 31 - 3
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -9,6 +9,7 @@ import com.style24.front.biz.thirdparty.NiceCertify;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Customer;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.mapping.ResultMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -334,6 +335,23 @@ public class TsfCustomerController extends TsfBaseController {
 		return mav;
 	}
 
+
+	/**
+	 * 회원가입 유형 화면
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 03. 02
+	 */
+	@GetMapping("/join/type/form")
+	public ModelAndView getJoinWayForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName(super.getDeviceViewName("customer/JoinTypeForm"));
+
+		return mav;
+	}
+
 	/**
 	 * 회원정보 입력 화면
 	 *
@@ -572,7 +590,19 @@ public class TsfCustomerController extends TsfBaseController {
 		customer.setFrontGb(TsfSession.getFrontGb());
 		customer.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
 
-		// 3.고객정보 생성 및 혜택 처리
+
+		// 3. 가입 가능여부
+		GagaMap resultMap = customerService.generalCustomerValidation(customer);
+		boolean isPossible = resultMap.getBoolean("isPossibe");
+
+		// 가능하지 않으면 바로 리턴
+		if (!isPossible) {
+			TsfSession.setAttribute("maskingCustId", resultMap.getString("maskingCustId"));
+			result.setBoolean("isJoin", false);
+			return resultMap;
+		}
+
+		// 4.고객정보 생성 및 혜택 처리
 		boolean isJoin = customerService.saveJoinCustomer(customer);
 
 		if (isJoin) {
@@ -594,8 +624,6 @@ public class TsfCustomerController extends TsfBaseController {
 				log.error("error", e);
 			}
 			customerService.getLogin(customer.getCustNo(), request);
-		} else {
-			TsfSession.setAttribute("maskingCustId",customer.getMaskingCustId());
 		}
 
 		result.setBoolean("isJoin", isJoin);

+ 2 - 3
src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java

@@ -42,10 +42,9 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 		"/customer/join/form",				// 회원가입
 		"/customer/sns/join/form",			// SNS 회원가입
 		"/customer/id/find/form",			// 아이디찾기
-		"/customer/id/find/result/form",	// 아이디찾기완료
 		"/customer/pwd/find/form",			// 비밀번호찾기
-		"/customer/pwd/find/result/form",	// 비밀번호찾기완료
-		"/customer/join/complete/form"		// 회원가입완료
+		"/customer/join/complete/form",		// 회원가입완료
+		"/customer/join/type/form"			// 회원가입유형
 	};
 
 	@Autowired

+ 64 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml

@@ -364,6 +364,7 @@
 		</if>
 	</select>
 
+	<!--SNS 연동 계정 확인-->
 	<select id="getCusomterSnsFind" parameterType="CustSnsInfo" resultType="Customer">
 		SELECT C.CUST_NO
 		     , C.CUST_ID
@@ -380,4 +381,67 @@
 		AND    CS.SNS_ID = #{snsId}
 	</select>
 
+	<!-- 가입된 고객이 있는지 확인 -->
+	<select id="getCustomerMaxCustId" parameterType="Customer" resultType="String">
+		/* TsfCustomer.getCustomerMaxCustId */
+		SELECT CUST_ID
+		FROM (
+		      SELECT MAX(CUST_ID)   AS CUST_ID
+		      FROM (
+		            SELECT CUST_ID
+		            FROM   TB_CUSTOMER
+		            WHERE  CUST_STAT = 'G104_10'   /* 활동회원*/
+		            AND    SITE_CD = #{siteCd}
+		            <if test="encodedEmail != null and encodedEmail != ''">
+		            AND    EMAIL = #{encodedEmail}
+		            </if>
+		            <if test="custId != null and custId !=''">
+		            AND    CUST_ID = #{custId}
+		            </if>
+		            <if test="ci != null and ci != ''">
+		            AND    CI = #{ci}
+		            </if>
+		            <if test="encodedCellPhnno != null and encodedCellPhnno != ''" >
+		            AND    CELL_PHNNO = #{encodedCellPhnno}
+		            </if>
+
+		            UNION ALL
+
+		            SELECT CUST_ID
+		            FROM   TB_SECEDE_CUST
+		            WHERE  SITE_CD = #{siteCd}
+		            <if test="encodedEmail != null and encodedEmail != ''">
+		            AND    EMAIL = #{encodedEmail}
+		            </if>
+		            <if test="custId != null and custId !=''">
+		            AND    CUST_ID = #{custId}
+		            </if>
+		            <if test="ci != null and ci != ''">
+		            AND    CI = #{ci}
+		            </if>
+		            <if test="encodedCellPhnno != null and encodedCellPhnno != ''" >
+		            AND    CELL_PHNNO = #{encodedCellPhnno}
+		            </if>
+
+		            UNION ALL
+
+		            SELECT CUST_ID
+		            FROM   TB_DORMANT_CUST
+		            WHERE  SITE_CD = #{siteCd}
+		            <if test="encodedEmail != null and encodedEmail != ''">
+		            AND    EMAIL = #{encodedEmail}
+		            </if>
+		            <if test="custId != null and custId !=''">
+		            AND    CUST_ID = #{custId}
+		            </if>
+		            <if test="ci != null and ci != ''">
+		            AND    CI = #{ci}
+		            </if>
+		            <if test="encodedCellPhnno != null and encodedCellPhnno != ''" >
+		            AND    CELL_PHNNO = #{encodedCellPhnno}
+		            </if>
+		           ) A
+		      ) B
+	</select>
+
 </mapper>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/SigninFormWeb.html

@@ -85,7 +85,7 @@
 					</div>
 					<div class="btn_mb_wrap">
 						<ul>
-							<li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">회원가입</a></li>
+							<li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">회원가입</a></li>
 							<li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a></li>
 							<li><a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a></li>
 						</ul>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html

@@ -53,7 +53,7 @@
 			<div class="util_group">
 				<span th:if="${sessionInfo == null}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_LOGIN);" title="로그인 바로가기">로그인</a></span>
 				<span th:if="${sessionInfo != null}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_LOGOUT);" title="로그아웃">로그아웃</a></span>
-				<span th:if="${sessionInfo == null}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);" title="회원가입 바로가기">회원가입</a></span>
+				<span th:if="${sessionInfo == null}"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);" title="회원가입 바로가기">회원가입</a></span>
 				<span><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE);" title="마이페이지 바로가기">마이페이지</a></span>
 			</div>
 		</div>

+ 19 - 23
src/main/webapp/WEB-INF/views/web/customer/JoinCompleteFormWeb.html

@@ -22,15 +22,13 @@
 <!--  container -->
 <div id="container" class="container mb">
 	<div class="wrap">
-		<div class="content join3">
+		<!--가입된 내역이 있는경우-->
+		<div th:if="${maskingCustId != ''}" class="content join3"> <!-- 페이지특정 클래스 = join3 -->
 			<div class="cont_head">
-				<h3>style24</h3>
+				<h4>회원가입</h4>
 			</div>
 			<div class="cont_body">
-				<div th:if="${maskingCustId != ''}" class="form_wrap form_col_c" role="form" >
-					<div class="form_head">
-						<h4>회원가입</h4>
-					</div>
+				<form class="form_wrap form_col_c" role="form">
 					<div class="form_info">
 						<span class="ico_content_find"></span>
 						<p>이미 가입된 아이디가 있습니다.</p>
@@ -40,32 +38,30 @@
 						</p>
 					</div>
 					<div class="print_bar mt30">
-						<p class="c_primary bold" data-font="lato">ID***24</p>
+						<p class="c_primary bold" data-font="lato" th:text="${maskingCustId}"></p>
 					</div>
 					<div class="btn_group_block btn_group_md ui_row">
 						<div class="ui_col_6">
-							<button type="button" class="btn btn_dark btn_block"><span>로그인</span></button>
+							<button type="button" class="btn btn_dark btn_block" onclick="cfnGoToPage(_PAGE_LOGIN);"><span>로그인</span></button>
 						</div>
 						<div class="ui_col_6">
-							<button type="button" class="btn btn_default btn_block"><span>아이디 찾기</span></button>
+							<button type="button" class="btn btn_default btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);"><span>아이디 찾기</span></button>
 						</div>
 					</div>
-				</div>
-				<div th:unless="${maskingCustId != ''}"  class="form_wrap form_col_c" role="form">
-					<div class="form_head">
-						<h3>신규회원 혜택 안내</h3>
-					</div>
-					<div class="form_info">
-						오픈 콘텐츠 확정시 다시안내
-					</div>
-					<div class="mt40">
-						<button type="button"  class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_MAIN);">
-							<span>쇼핑하러 가기</span>
-						</button>
-					</div>
-				</div>
+				</form>
+			</div>
+		</div>
+		<!--//가입된 내역이 있는경우-->
+		<!--신규가입인 경우-->
+		<div th:unless="${maskingCustId != ''}" class="content join4">
+			<div class="cont_head">
+				<h4>신규회원 혜택안내</h4>
+			</div>
+			<div class="cont_body">
+				신규회원 혜택안내 내용
 			</div>
 		</div>
+		<!--//신규가입인 경우-->
 	</div>
 </div>
 

+ 4 - 13
src/main/webapp/WEB-INF/views/web/customer/JoinFormWeb.html

@@ -26,14 +26,11 @@
 	<div class="wrap">
 		<div class="content join2"> <!-- 페이지특정 클래스 = join1 -->
 			<div class="cont_head">
-				<h3>style24</h3>
+				<h4>회원정보 입력</h4>
 			</div>
 			<div class="cont_body">
 				<!-- form start -->
 				<form id="joinForm" name="joinForm" class="form_wrap form_col_c form_full" role="form">
-					<div class="form_head">
-						<h4>회원정보 입력</h4>
-					</div>
 					<!-- 아이디 사용가능시 -->
 					<div class="form_field">
 						<label class="input_label sr-only">아이디</label>
@@ -351,7 +348,7 @@
 		let validation;
 
 		if (!gagajf.isNull(cellPhnno)) {
-			if ( 9 < cellPhnno < 12) {
+			if (cellPhnno.length > 9) {
 				$failPhnno.hide();
 				validation = true;
 			} else {
@@ -405,7 +402,7 @@
 		// const $cellPhnno = $('#cellPhnno');
 		const $dupPhnno = $('#dupPhnno');
 		if (result.isFind) { // 가입된 고객 정보가 있으면
-			$dupPhnno.text(result.maskingCustId+'로 가입된 핸드폰 번호 입니다.');
+			$dupPhnno.text(result.maskingCustId+'로 가입된 이력이 있습니다.');
 			$dupPhnno.show();
 			// $cellPhnno.text(result.cellPhnno);
 			// $cellPhnno.show();
@@ -431,13 +428,7 @@
 	});
 
 	var fnJoinSaveCallback = function (result) {
-		if (result.isJoin) {
-			//신규회원 혜택 안내 페이지 없음
-			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
-		} else {
-			$('#btnJoin').attr('disabled', false);
-		}
-
+		cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
 	};
 
 

+ 138 - 0
src/main/webapp/WEB-INF/views/web/customer/JoinTypeFormWeb.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org"
+	  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	  layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : JoinTypeFormWeb.html
+ * @desc    : 회원가입 유형 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.22   jsshin     최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+<!--  container -->
+<div id="container" class="container mb">
+	<div class="wrap">
+		<div class="content join1"> <!-- 페이지특정 클래스 = join1 -->
+			<div class="cont_head">
+				<h4>회원가입</h4>
+			</div>
+			<div class="cont_body">
+				<form class="form_wrap form_col_c form_full" role="form">
+					<div class="form_sign_up">
+						<p class="c_primary t_c">STYLE24에 오신걸 환영합니다!</p>
+						<p class="t_c mt15">신규 가입 시 할인 쿠폰 등<br>다양한 혜택을 받으실 수 있습니다.</p>
+					</div>
+					<div class="mt40">
+						<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);"><span>회원가입</span></button>
+					</div>
+					<div class="sns_wrap">
+						<h5>간편하게 시작하기</h5>
+						<ul>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnLoginKakao();">
+									<i class="ico ico_snslogin kakao"></i>
+									<span>카카오</span>
+								</a>
+							</li>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnLoginNaver();">
+									<i class="ico ico_snslogin naver"></i>
+									<span>네이버</span>
+								</a>
+							</li>
+							<li>
+								<a href="javascript:void(0)">
+									<i class="ico ico_snslogin yes24"></i>
+									<span>YES24</span>
+								</a>
+							</li>
+						</ul>
+					</div>
+				</form>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	// SNS 로그인 콜백함수
+
+	var fnSnsSigninCallback = function(userInfo) {
+		// Ci이 조회 시 없음
+		if (userInfo.custStat === 'DUP_PHONE_CUST') {
+			mcxDialog.alert("이미 사용 중인 휴대전화번호 입니다.");
+			return;
+		}
+		if (userInfo.custStat === 'DUP_EMAIL_CUST') {
+			mcxDialog.alert("이미 사용 중인 이메일 입니다.");
+			return;
+		}
+		if (userInfo.custStat === 'EMPTY_PHONE_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_SNS_JOIN);
+		}
+		// Ci이 조회 시 있음
+		if (userInfo.custStat === 'SECEDE_CUST') {
+			mcxDialog.alert("탈퇴 회원 입니다.");
+			return;
+		}
+		if (userInfo.custStat === 'DORMANT_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+		}
+		if (userInfo.custStat === 'FAIL_CUST') {
+			mcxDialog.alert("회원가입에 실패 했습니다.<br> 고객센터에 문의 하시기 바랍니다.");
+			return;
+		}
+		if (userInfo.custStat === 'NEW_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_JOIN_COMPLETE);
+		}
+
+		if (userInfo.custStat === 'SUCC_CUST') {
+			let params = {};
+			params.snsType = userInfo.snsType;
+			params.snsId = [[${snsLoginPrefix}]] + userInfo.snsId;
+			$.post(_frontUrl + '/login'
+				, $.param(params)
+				, function(result) {
+					fnReloadAfterLogin(result);
+				}
+				, "json");
+		}
+
+	};
+
+
+	var fnReloadAfterLogin = function(result) {
+		if (result.status === 'OK') {
+			document.location.href = result.returnUrl;
+		} else if (result.status === 'EMAIL_DUP') {
+
+		} else if(result.status === 'DORMANT_CUST') {
+			cfnGoToPage(_PAGE_CUSTOMER_DORMANT);
+		} else if(result.status === 'SECEDE_CUST') {
+
+		} else {
+			//cfnGoToPage(_PAGE_CUSTOMER_JOIN_CERTIFY_SNS);
+		}
+	};
+
+	$(document).ready(function() {
+
+	});
+	/*]]>*/
+</script>
+</th:block>
+</body>
+</html>
+
+

+ 1 - 1
src/main/webapp/WEB-INF/views/web/customer/PasswordFindFormWeb.html

@@ -149,7 +149,7 @@
 									</div>
 									<div class="btn_group_block btn_group_md ui_row">
 										<div class="ui_col_12">
-											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">
+											<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">
 												<span>회원가입</span>
 											</button>
 										</div>

+ 1 - 0
src/main/webapp/ux/style24_link.js

@@ -8,6 +8,7 @@ const _PAGE_LOGOUT = _frontUrl + "/logout";	// GNB > 로그아웃
 const _PAGE_MAIN = _frontUrl + "/display/mall/main/form";	// 몰메인
 
 //== 고객 ==/
+const _PAGE_CUSTOMER_JOIN_TYPE = _frontUrl + "/customer/join/type/form";									// 고객 > 회원가입 유형
 const _PAGE_CUSTOMER_JOIN = _frontUrl + "/customer/join/form";										// 고객 > 회원가입
 const _PAGE_CUSTOMER_SNS_JOIN = _frontUrl + "/customer/sns/join/form";								// 고객 > SNS가입
 const _PAGE_CUSTOMER_JOIN_COMPLETE = _frontUrl + "/customer/join/complete/form";					// 고객 > 고객가입 > 완료페이지