Explorar o código

Merge branch 'develop' into eskim

eskim %!s(int64=5) %!d(string=hai) anos
pai
achega
b8a097133c
Modificáronse 38 ficheiros con 912 adicións e 236 borrados
  1. 17 0
      src/main/java/com/style24/front/biz/dao/TsfCartDao.java
  2. 20 0
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  3. 0 1
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  4. 3 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  5. 1 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  6. 16 6
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  7. 2 1
      src/main/java/com/style24/front/biz/web/TsfIndexController.java
  8. 46 30
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  9. 160 0
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  10. 1 0
      src/main/java/com/style24/persistence/domain/Plan.java
  11. 1 1
      src/main/java/com/style24/persistence/domain/Review.java
  12. 37 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  13. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  14. 12 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  15. 5 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  16. 1 1
      src/main/resources/config/application-locd.yml
  17. 3 3
      src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html
  18. 0 2
      src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html
  19. 1 4
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  20. 21 3
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  21. 95 0
      src/main/webapp/WEB-INF/views/mob/customer/JoinCompleteFormMob.html
  22. 178 125
      src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html
  23. 3 3
      src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html
  24. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceCallbackFormMob.html
  25. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceCellPhoneFormMob.html
  26. 17 5
      src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html
  27. 1 1
      src/main/webapp/WEB-INF/views/web/SnsCallBackFormWeb.html
  28. 2 0
      src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html
  29. 3 3
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  30. 19 6
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html
  31. 2 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html
  32. 14 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  33. 1 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  34. 92 0
      src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentCompleteWeb.html
  35. 100 23
      src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentFormWeb.html
  36. 24 4
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  37. 8 1
      src/main/webapp/biz/mypage.js
  38. 3 3
      src/main/webapp/ux/style24_link.js

+ 17 - 0
src/main/java/com/style24/front/biz/dao/TsfCartDao.java

@@ -291,4 +291,21 @@ public interface TsfCartDao {
 	 * @since 2021. 04. 04
 	 * @since 2021. 04. 04
 	 */
 	 */
 	int updateCartGoodsQty(Cart param);
 	int updateCartGoodsQty(Cart param);
+
+	/**
+	 * 최근 등록된 상품 100개를 제외한 장바구니 제거
+	 * @param Cart
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 04. 16
+	 */
+	void deleteOldCart(Cart param);
+
+	/**
+	 * 장바구니에 없는 장바구니 상세 데이터 삭제
+	 * @return void
+	 * @author xodud1202
+	 * @since 2021. 04. 16
+	 */
+	void deleteCartDetailFromEmptyCart();
 }
 }

+ 20 - 0
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -214,6 +214,11 @@ public class TsfCartService {
 			}
 			}
 		}
 		}
 
 
+		// 100개 이상 저장된 장바구니 삭제
+		if("C".equals(cartGb) || cartGb.equals(TscConstants.CartGb.CART.value())) {
+			deleteOldCart();
+		}
+
 		result.put("cartSqList", cartSqList);
 		result.put("cartSqList", cartSqList);
 		result.put("goodsType", goodsType);
 		result.put("goodsType", goodsType);
 		result.put("cartGb", cartGb);
 		result.put("cartGb", cartGb);
@@ -223,6 +228,21 @@ public class TsfCartService {
 		return result;
 		return result;
 	}
 	}
 
 
+	@Transactional("shopTxnManager")
+	public void deleteOldCart() {
+		Cart deleteCart = new Cart();
+		if(TsfSession.isLogin()) {
+			deleteCart.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			deleteCart.setCustNo(0);
+		}
+
+		deleteCart.setJsessionId(TsfSession.getSessionId());
+
+		cartDao.deleteOldCart(deleteCart);
+		cartDao.deleteCartDetailFromEmptyCart();
+	}
+
 	@Transactional("shopTxnManager")
 	@Transactional("shopTxnManager")
 	public void saveSetTypeCartInfo(Collection<Cart> params, List<Integer> cartSqs) {
 	public void saveSetTypeCartInfo(Collection<Cart> params, List<Integer> cartSqs) {
 		Cart cart = new Cart();
 		Cart cart = new Cart();

+ 0 - 1
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -682,7 +682,6 @@ public class TsfCouponService {
 
 
 		int count = 0;
 		int count = 0;
 		for (Coupon tmpCoupon : goodsCouponList) {
 		for (Coupon tmpCoupon : goodsCouponList) {
-
 			for (int i = 0; i < downloadCnt; i++) {
 			for (int i = 0; i < downloadCnt; i++) {
 				CustCoupon custCoupon = new CustCoupon();
 				CustCoupon custCoupon = new CustCoupon();
 				custCoupon.setCustNo(TsfSession.getInfo().getCustNo());
 				custCoupon.setCustNo(TsfSession.getInfo().getCustNo());

+ 3 - 0
src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java

@@ -216,6 +216,9 @@ public class TsfOrderChangeService {
 		result.setString("allCanYn", allCanYn);									// 전체 취소 여부
 		result.setString("allCanYn", allCanYn);									// 전체 취소 여부
 		result.setString("allLastCanYn", allLastCanYn);							// 전체 마지막 취소 여부
 		result.setString("allLastCanYn", allLastCanYn);							// 전체 마지막 취소 여부
 		result.setString("allCanYnBeforePayment", allCanYnBeforePayment);		// 무통장입금전 전체 취소 여부
 		result.setString("allCanYnBeforePayment", allCanYnBeforePayment);		// 무통장입금전 전체 취소 여부
+		result.setString("pgTid", cnclRtn.getPgTid());							// PG거래ID
+		result.setString("payMeans", cnclRtn.getPayMeans());					// 결제수단
+		result.setString("pgGb", cnclRtn.getPgGb());							// PG구분
 		result.set("cnclReqList", cnclReqList);									// 취소신청목록
 		result.set("cnclReqList", cnclReqList);									// 취소신청목록
 
 
 		return result;
 		return result;

+ 1 - 2
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -332,8 +332,7 @@ public class TsfOrderService {
 			// TB_PAYMENT 등록. 실패시 PG 환불.
 			// TB_PAYMENT 등록. 실패시 PG 환불.
 			if(coreOrderDao.insertPayment(result) < 1) {
 			if(coreOrderDao.insertPayment(result) < 1) {
 				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
 				if(TscConstants.PgGb.KCP.value().equals(param.getPgGb()) || TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
-					result.setIpAddress(request.getRemoteAddr());
-					coreKcpService.kcpPayRollBack(result);
+					coreKcpService.kcpCancel(result);
 				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 				} else if (TscConstants.PgGb.KAKAO.value().equals(param.getPgGb())) {
 					coreKakaoPayService.kakaoPayRollBack(param);
 					coreKakaoPayService.kakaoPayRollBack(param);
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {

+ 16 - 6
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -324,7 +324,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 03. 02
 	 * @since 2021. 03. 02
 	 */
 	 */
 	@GetMapping("/join/type/form")
 	@GetMapping("/join/type/form")
-	public ModelAndView getJoinWayForm() {
+	public ModelAndView getJoinTypeForm() {
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 
 
 		mav.setViewName(super.getDeviceViewName("customer/JoinTypeForm"));
 		mav.setViewName(super.getDeviceViewName("customer/JoinTypeForm"));
@@ -339,10 +339,17 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @author jsshin
 	 * @author jsshin
 	 * @since 2021. 02. 05
 	 * @since 2021. 02. 05
 	 */
 	 */
-	@GetMapping("/join/form")
-	public ModelAndView getJoinForm() {
+	@RequestMapping("/join/form")
+	public ModelAndView getJoinForm(@RequestParam(value = "sEncData", required = false) String sEncData
+			, @RequestParam(value = "authMethod", required = false) String authMethod
+			, @RequestParam(value = "custParams", required = false) String custParams) {
+
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 
 
+		mav.addObject("sEncData", sEncData);
+		mav.addObject("authMethod", authMethod);
+		mav.addObject("custParams", custParams);
+
 		mav.setViewName(super.getDeviceViewName("customer/JoinForm"));
 		mav.setViewName(super.getDeviceViewName("customer/JoinForm"));
 
 
 		return mav;
 		return mav;
@@ -351,19 +358,20 @@ public class TsfCustomerController extends TsfBaseController {
 	/**
 	/**
 	 * 휴대폰 인증 화면
 	 * 휴대폰 인증 화면
 	 * @param redirectUrl - 모바일사용
 	 * @param redirectUrl - 모바일사용
-	 * @param custparams - 회원정보 수정시 사용
+	 * @param custParams - 회원정보 수정시 사용
 	 * @return ModelAndView
 	 * @return ModelAndView
 	 * @author jsshin
 	 * @author jsshin
 	 * @since 2021. 02. 09
 	 * @since 2021. 02. 09
 	 */
 	 */
 	@GetMapping("/nice/cellphone/form")
 	@GetMapping("/nice/cellphone/form")
 	public ModelAndView niceCellphoneForm(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
 	public ModelAndView niceCellphoneForm(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
-			, @RequestParam(value = "custparams", required = false) String custparams) {
+			, @RequestParam(value = "custParams", required = false) String custParams) {
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 		GagaMap result = niceCertify.certifyCellPhone();
 		GagaMap result = niceCertify.certifyCellPhone();
 
 
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 			mav.addObject("redirectUrl", redirectUrl); // 모바일만 사용
 			mav.addObject("redirectUrl", redirectUrl); // 모바일만 사용
+			mav.addObject("custParams", custParams); // 모바일만 사용
 		}
 		}
 
 
 		mav.addObject("sEncData", result.getString("sEncData"));
 		mav.addObject("sEncData", result.getString("sEncData"));
@@ -405,7 +413,8 @@ public class TsfCustomerController extends TsfBaseController {
 	@RequestMapping("/nice/certify/callback")
 	@RequestMapping("/nice/certify/callback")
 	public ModelAndView niceCertifyCallback(@RequestParam(value = "EncodeData", required = false) String encodeData
 	public ModelAndView niceCertifyCallback(@RequestParam(value = "EncodeData", required = false) String encodeData
 			, @RequestParam(value = "enc_data", required = false) String encData
 			, @RequestParam(value = "enc_data", required = false) String encData
-			, @RequestParam(value = "param_r1", required = false) String redirectUrl) {
+			, @RequestParam(value = "param_r1", required = false) String redirectUrl
+			, @RequestParam(value = "param_r2", required = false) String custParams) {
 
 
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 		String sEncData = "";
 		String sEncData = "";
@@ -421,6 +430,7 @@ public class TsfCustomerController extends TsfBaseController {
 
 
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 			mav.addObject("redirectUrl", redirectUrl);
 			mav.addObject("redirectUrl", redirectUrl);
+			mav.addObject("custParams", custParams);
 		}
 		}
 
 
 		mav.addObject("sEncData", sEncData);
 		mav.addObject("sEncData", sEncData);

+ 2 - 1
src/main/java/com/style24/front/biz/web/TsfIndexController.java

@@ -353,7 +353,8 @@ public class TsfIndexController extends TsfBaseController {
 	 * @since 2021. 02. 23
 	 * @since 2021. 02. 23
 	 */
 	 */
 	@RequestMapping( "/signin/yes24LoginCallback")
 	@RequestMapping( "/signin/yes24LoginCallback")
-	public ModelAndView yes24LoginCallback(@RequestParam(value = "ipin", required = false) String ipin, @RequestParam(value = "ipn", required = false) String ipn, HttpSession session) {
+	public ModelAndView yes24LoginCallback(@RequestParam(value = "ipin", required = false) String ipin
+			, @RequestParam(value = "ipn", required = false) String ipn, HttpSession session) {
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 		boolean isSnsLoing = false;
 		boolean isSnsLoing = false;
 		GagaMap userInfo = new GagaMap();
 		GagaMap userInfo = new GagaMap();

+ 46 - 30
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -725,6 +725,7 @@ public class TsfMypageController extends TsfBaseController {
 		// @ 결품취소로직 추가
 		// @ 결품취소로직 추가
 		// @ 주문취소시 상태값 체크
 		// @ 주문취소시 상태값 체크
 		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
 		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+		GagaMap result = new GagaMap();
 
 
 		// 1. 세션회원조회
 		// 1. 세션회원조회
 		int custNo = TsfSession.getInfo().getCustNo();
 		int custNo = TsfSession.getInfo().getCustNo();
@@ -737,36 +738,50 @@ public class TsfMypageController extends TsfBaseController {
 		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
 		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
 		String allCanYnBeforePayment = refundPreInfo.getString("allCanYnBeforePayment");
 		String allCanYnBeforePayment = refundPreInfo.getString("allCanYnBeforePayment");
 
 
-		// 3. 환불금액계산
-		// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
-		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
-
-		// 4. 주문변경 기본정보 설정
-		result.set("ordNo", orderChange.getOrdNo());				// 주문번호
-		result.set("ordChgSq", orderChange.getOrdChgSq());			// 주문변경번호
-		result.set("chgReason", orderChange.getChgReason());		// 변경사유
-		result.set("chgMemo", orderChange.getChgMemo());			// 변경메모
-
-		result.set("accountNo", orderChange.getAccountNo());		// 환불계좌번호
-		result.set("accountNm", orderChange.getAccountNm());		// 환불계좌예금주명
-		result.set("bankCd", orderChange.getBankCd());				// 환불계좌은행코드
-
-		result.set("allCanYnBeforePayment", allCanYnBeforePayment);	// 무통장입금전 전체취소 여부
-		result.set("allCanYn", allCanYn);							// 전체취소 여부
-		result.set("allLastCanYn", allLastCanYn);					// 전체 마지막 취소 여부
-		result.set("isCustomer", orderChange.getIsCustomer());		// 변경사유 (고객, 회사)
-
-		// 5. 주문변경 회수지정보 추가
-		// result.set("chgerNm", orderChange.getChgerNm());				// 변경자명
-		// result.set("chgerEmail", orderChange.getChgerEmail());		// 변경자이메일주소
-		// result.set("chgerPhnno", orderChange.getChgerPhnno());		// 변경자핸드폰번호
-		// result.set("chgerTelno", orderChange.getChgerTelno());		// 변경자전화번호
-
-		result.set("reqGbn", orderChange.getReqGbn());				// 신청구분
-		result.set("ipAddress", TsfSession.getIpAddress());			// IP주소
-
-		// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
-		coreOrderChangeService.cnclComplete(result, custNo);
+		// 전체취소, 부분취소 구분 처리 진행 
+		if ("Y".equals(allCanYn)) {
+			orderChange.setChgGb(TscConstants.OrderChangeGb.CANCEL.value());
+			orderChange.setIpAddress(TsfSession.getIpAddress());
+			orderChange.setRegNo(custNo);
+			orderChange.setUpdNo(custNo);
+			
+			coreOrderChangeService.allCnclComplete(orderChange);
+		} else {
+			// 3. 환불금액계산
+			// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
+			result = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
+
+			// 4. 주문변경 기본정보 설정
+			result.setInt("ordNo", orderChange.getOrdNo());						// 주문번호
+			result.setInt("ordChgSq", orderChange.getOrdChgSq());				// 주문변경번호
+			result.setString("chgReason", orderChange.getChgReason());			// 변경사유
+			result.setString("chgMemo", orderChange.getChgMemo());				// 변경메모
+
+			result.setString("accountNo", orderChange.getAccountNo());			// 환불계좌번호
+			result.setString("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
+			result.setString("bankCd", orderChange.getBankCd());				// 환불계좌은행코드
+
+			result.setString("allCanYnBeforePayment", allCanYnBeforePayment);	// 무통장입금전 전체취소 여부
+			result.setString("allCanYn", allCanYn);								// 전체취소 여부
+			result.setString("allLastCanYn", allLastCanYn);						// 전체 마지막 취소 여부
+			result.setString("isCustomer", orderChange.getIsCustomer());		// 변경사유 (고객, 회사)
+
+			// 5. 주문변경 회수지정보 추가
+			// result.setString("chgerNm", orderChange.getChgerNm());				// 변경자명
+			// result.setString("chgerEmail", orderChange.getChgerEmail());			// 변경자이메일주소
+			// result.setString("chgerPhnno", orderChange.getChgerPhnno());			// 변경자핸드폰번호
+			// result.setString("chgerTelno", orderChange.getChgerTelno());			// 변경자전화번호
+
+			result.setString("reqGbn", orderChange.getReqGbn());				// 신청구분
+			result.setString("ipAddress", TsfSession.getIpAddress());			// IP주소
+			result.setInt("custNo", custNo);									// 고객번호
+			result.setString("pgTid", refundPreInfo.getString("pgTid"));		// PG거래ID
+			result.setString("payMeans", refundPreInfo.getString("payMeans"));	// 결제수단
+			result.setString("pgGb", refundPreInfo.getString("pgGb"));			// PG구분
+
+			// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
+			coreOrderChangeService.cnclComplete(result, custNo);
+		}
 
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 		result.set("message", message.getMessage("CANCEL_0001"));
 		result.set("message", message.getMessage("CANCEL_0001"));
@@ -899,6 +914,7 @@ public class TsfMypageController extends TsfBaseController {
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("cancelDetailList", map);
 		mav.addObject("cancelDetailList", map);
 		mav.addObject("oneData", oneData);
 		mav.addObject("oneData", oneData);
+		mav.addObject("refundYn", map.getString("refundYn"));
 
 
 		// 주문 결제정보 조회
 		// 주문 결제정보 조회
 		Order order = new Order();
 		Order order = new Order();

+ 160 - 0
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -1138,4 +1138,164 @@ public class TsfOrderController extends TsfBaseController {
 		mav.setViewName("web/order/test");
 		mav.setViewName("web/order/test");
 		return mav;
 		return mav;
 	}
 	}
+	
+	/**
+	 * 취소,반품,교환 추가결제화면
+	 *
+	 * @param : ordChgSq
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 04. 16
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/addPaymentForm")
+	public ModelAndView orderAddPaymentForm(Order order) {
+		
+		ModelAndView mav = new ModelAndView();
+		
+		// 1. 주문번호 체크
+		if (order.getOrdChgSq() == null) {
+			mav.setViewName("redirect:/");
+			return mav;
+		}
+				
+		// 2. 추가결제 상품목록
+		GagaMap resultMap = coreOrderService.getAddPayOrderListInfo(order);
+		
+		// 추가결제 목록이 없으면 메인으로 이동
+		@SuppressWarnings("unchecked")
+		Collection<Order> orderAddPayGoodsList = (Collection<Order>) resultMap.get("orderAddPayGoodsList");
+		
+		if (orderAddPayGoodsList.size() < 1) {
+			mav.setViewName("redirect:/");
+			return mav;
+		}
+		
+		// TODO 주문정보 알림톡전송
+		
+		// 3. 화면전송변수설정
+		mav.addObject("orderAddPayGoodsList"	, orderAddPayGoodsList);					// 주문목록정보
+		mav.addObject("refundAmt"				, resultMap.get("refundAmt"));				// 상품환불금액
+		mav.addObject("addPayCost"				, resultMap.get("addPayCost"));				// 추가결제금액
+		mav.addObject("ordChgSq"				, resultMap.get("ordChgSq"));				// 주문취소신청번호
+		
+		mav.addObject("chgGb"					, resultMap.get("chgGb"));					// 변경구분
+		mav.addObject("chgerNm"					, resultMap.get("chgerNm"));				// 변경신청인
+		mav.addObject("chgerPhnno"				, resultMap.get("chgerPhnno"));				// 변경신청핸드폰번호
+		mav.addObject("goodsNm"					, resultMap.get("goodsNm"));				// 상품명
+		mav.setViewName(super.getDeviceViewName("order/OrderAddPaymentForm"));
+		
+		return mav;
+	}
+	
+	/**
+	 * 추가결제실행
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 04
+	 */
+	@PostMapping("/addPayment")
+	@ResponseBody
+	public ModelAndView orderAddPayment(@RequestBody Order order) {
+		ModelAndView mav = new ModelAndView();
+		
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+		} else {
+			order.setJsessionId(TsfSession.getSessionId());
+			order.setCustNo(0);
+		}
+		
+		log.info("order.getPgGb()              ::: {}", order.getPgGb());
+		log.info("order.getPayMeans()          ::: {}", order.getPayMeans());
+		log.info("order.getOrdChgSq()          ::: {}", order.getOrdChgSq());
+		log.info("order.getGoodsNm()           ::: {}", order.getGoodsNm());
+		log.info("order.getAddPayCost()        ::: {}", order.getAddPayCost());
+		log.info("order.getChgerNm()           ::: {}", order.getChgerNm());
+		log.info("order.getChgerPhnno()        ::: {}", order.getChgerPhnno());
+		
+		order.setOrdNo(order.getOrdChgSq());
+		order.setPayAmt(order.getAddPayCost());
+		order.setOrdNm(order.getChgerNm());
+		order.setOrdPhnno(order.getChgerPhnno());
+
+		// 필수 데이터
+		// pgGb = 결제타입, payMeans = 결제수단, ordNo = 주문번호, goodsNm = 상품명, payAmt = 실결제금액, ordNm = 주문자명, ordPhnno = 휴대폰번호, custNo = 고객번호
+		// 선택 데이터
+		// ordEmail = 주문자메일, ordTelno = 전화번호
+		
+		/* 
+		=== 카카오페이 & 네이버페이 파라메터 ===
+		ordNo = 주문번호
+		custNo = 고객번호
+		goodsNm = 상품명
+		ordGoodsQty = 주문상품수량
+		payAmt = 결제금액
+		======================
+		*/
+
+		Payment payment = orderService.setPgDataInfo(order);
+		mav.addObject("payment"	, payment);
+		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+
+		return mav;
+	}
+	
+	/**
+	 * 결제 PG 요청 완료
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 05
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/addPay/result/response")
+	public ModelAndView addPayResultResponse(Payment param, HttpServletRequest request, HttpServletResponse response) {
+		
+		ModelAndView mav = new ModelAndView();
+		
+		Order order = new Order();
+		
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			param.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+			order.setRegNo(TsfSession.getInfo().getCustNo());
+			order.setUpdNo(TsfSession.getInfo().getCustNo());
+		} else {
+			param.setCustNo(0);
+			order.setCustNo(0);
+			order.setRegNo(0);
+			order.setUpdNo(0);
+		}
+		
+		param.setUpdNo(param.getCustNo());
+		
+		// 2. 결재정보등록(TB_PAYMENT)
+		param = orderService.orderPgPayResult(param, request, response);
+		
+		order.setOrdChgSq(param.getOrdNo());
+		
+		// 3. 추가결제 상품목록
+		GagaMap resultMap = coreOrderService.getAddPayOrderListInfo(order);
+		
+		// 4. 화면전송변수설정
+		mav.addObject("refundAmt"				, resultMap.get("refundAmt"));				// 상품환불금액
+		mav.addObject("addPayCost"				, resultMap.get("addPayCost"));				// 추가결제금액
+		mav.addObject("ordChgSq"				, resultMap.get("ordChgSq"));				// 주문취소신청번호
+		mav.addObject("chgerNm"					, resultMap.get("chgerNm"));				// 변경신청인
+		mav.addObject("chgerPhnno"				, resultMap.get("chgerPhnno"));				// 변경신청핸드폰번호
+
+		// TODO 3. 주문정보 업데이트
+		coreOrderService.updateOrderChangeDetail(order);
+		
+		// 2021.03.16 주문완료화면이동처리
+		mav.setViewName(super.getDeviceViewName("order/OrderAddPaymentComplete"));
+		
+		return mav;
+	}
 }
 }

+ 1 - 0
src/main/java/com/style24/persistence/domain/Plan.java

@@ -181,6 +181,7 @@ public class Plan extends TscBaseDomain {
 	private String itemVal;				//아이템값(상품코드, 이미지파일명 등)
 	private String itemVal;				//아이템값(상품코드, 이미지파일명 등)
 	private String reviewDispStdt;		//리뷰노출시작일시
 	private String reviewDispStdt;		//리뷰노출시작일시
 	private String reviewDispEddt;		//리뷰노툴종료일시
 	private String reviewDispEddt;		//리뷰노툴종료일시
+	private String linkOpenGb;			//링크 본창 새창
 
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiPlanReview;		//리뷰상품목록
 	private String[] multiPlanReview;		//리뷰상품목록

+ 1 - 1
src/main/java/com/style24/persistence/domain/Review.java

@@ -28,7 +28,7 @@ public class Review extends TscBaseDomain {
 	private Integer ordDtlNo;		// 주문상세번호
 	private Integer ordDtlNo;		// 주문상세번호
 	private String reviewTitle;		// 상품평제목
 	private String reviewTitle;		// 상품평제목
 	private String reviewContent;	// 상품평내용
 	private String reviewContent;	// 상품평내용
-	private float score;			// 구매평점
+	private String score;			// 구매평점
 	private int height;				// 키
 	private int height;				// 키
 	private int weight;				// 몸무게
 	private int weight;				// 몸무게
 	private String scoreSize;		// 사이즈점수(공통코드G040)
 	private String scoreSize;		// 사이즈점수(공통코드G040)

+ 37 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -1136,4 +1136,41 @@
 		WHERE CART_SQ = #{cartSq}
 		WHERE CART_SQ = #{cartSq}
 		AND   CUST_NO = #{custNo}
 		AND   CUST_NO = #{custNo}
 	</update>
 	</update>
+
+	<!-- 최근 등록된 상품 100개를 제외한 장바구니 제거 -->
+	<delete id="deleteOldCart" parameterType="Cart">
+		/* TsfCart.deleteOldCart : 최근 등록된 상품 100개를 제외한 장바구니 제거 */
+		DELETE FROM TB_CART C
+		WHERE  C.CART_GB = 'G026_BC'
+		<if test="custNo != null and custNo > 0">
+		AND    C.CUST_NO = #{custNo}
+		</if>
+		<if test="custNo == null or custNo == 0">
+		AND    C.CUST_NO = 0
+		AND    C.JSESSION_ID = #{jsessionId}
+		</if>
+		AND    C.CART_SQ NOT IN (SELECT A.CART_SQ
+		                         FROM   (SELECT CART_SQ
+		                                      , ROW_NUMBER() OVER() AS RNUM
+										 FROM   TB_CART
+										 WHERE  CART_GB = 'G026_BC'
+										 <if test="custNo != null and custNo > 0">
+										 AND    CUST_NO = #{custNo}
+										 </if>
+										 <if test="custNo == null or custNo == 0">
+										 AND    CUST_NO = 0
+										 AND    JSESSION_ID = #{jsessionId}
+										 </if>
+										 ORDER  BY REG_DT DESC
+										 LIMIT  100 ) A
+		                         WHERE   A.RNUM BETWEEN 1 AND 100 )
+	</delete>
+
+	<!-- 장바구니에 없는 장바구니 상세 데이터 삭제 -->
+	<delete id="deleteCartDetailFromEmptyCart">
+		/* TsfCart.deleteCartDetailFromEmptyCart : 장바구니에 없는 장바구니 상세 데이터 삭제 */
+		DELETE FROM TB_CART_DETAIL CD
+		WHERE  CD.CART_SQ NOT IN (SELECT CART_SQ
+								  FROM   TB_CART CA)
+	</delete>
 </mapper>
 </mapper>

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml

@@ -14,7 +14,7 @@
 		      ,(SELECT SUM(CG3.RM_GFCD_AMT)
 		      ,(SELECT SUM(CG3.RM_GFCD_AMT)
 				FROM TB_CUST_GIFTCARD CG3
 				FROM TB_CUST_GIFTCARD CG3
 				WHERE DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN CG3.USE_ST_DATE AND CG3.USE_EXP_DATE
 				WHERE DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN CG3.USE_ST_DATE AND CG3.USE_EXP_DATE
-				  AND  DATE_FORMAT(NOW(), '%Y%m%d') BETWEEN DATE_ADD(CG3.USE_EXP_DATE, INTERVAL -1 MONTH) AND USE_EXP_DATE
+				  AND  NOW() BETWEEN DATE_ADD(DATE_FORMAT(CG3.USE_EXP_DATE,'%Y-%m-%d'), INTERVAL -30 DAY) AND USE_EXP_DATE
 				  AND CUST_NO = #{custNo}
 				  AND CUST_NO = #{custNo}
 				  AND CG3.RM_GFCD_AMT > 0 ) AS EXPIRE_COUNT  /*한달 이내 소멸*/
 				  AND CG3.RM_GFCD_AMT > 0 ) AS EXPIRE_COUNT  /*한달 이내 소멸*/
 		FROM TB_CUST_GIFTCARD CG 
 		FROM TB_CUST_GIFTCARD CG 

+ 12 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -330,6 +330,8 @@
 		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE                    AS EXC_DELV_FEE
 		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE                    AS EXC_DELV_FEE
 		     , DFP.SUPPLY_COMP_CD
 		     , DFP.SUPPLY_COMP_CD
 		     , IF(G1.SELF_GOODS_YN = 'Y', 'WMS', DFP.DELV_FEE_CD) AS DELV_FEE_CD
 		     , IF(G1.SELF_GOODS_YN = 'Y', 'WMS', DFP.DELV_FEE_CD) AS DELV_FEE_CD
+		     , P.PG_TID
+		     , P.PAY_MEANS
 		     , P.PAY_STAT
 		     , P.PAY_STAT
 		     , CASE WHEN NULLIF(OD.INVOICE_NO, '') IS NULL THEN 'N'
 		     , CASE WHEN NULLIF(OD.INVOICE_NO, '') IS NULL THEN 'N'
 		            ELSE 'Y'
 		            ELSE 'Y'
@@ -798,6 +800,7 @@
 		     , Z.RF_CNCL_AMT
 		     , Z.RF_CNCL_AMT
 		     , Z.RF_DELIVERY_FEE
 		     , Z.RF_DELIVERY_FEE
 		     , Z.RF_REAL_CNCL_AMT
 		     , Z.RF_REAL_CNCL_AMT
+		     , Z.PG_TID
 		     , Z.PG_GB
 		     , Z.PG_GB
 		     , Z.PAY_MEANS
 		     , Z.PAY_MEANS
 		     , Z.PAY_MEANS_NM
 		     , Z.PAY_MEANS_NM
@@ -832,8 +835,8 @@
 		             , ODI.ORD_DTL_ITEM_SQ
 		             , ODI.ORD_DTL_ITEM_SQ
 		             , ODI.OPT_CD1
 		             , ODI.OPT_CD1
 		             , ODI.OPT_CD2
 		             , ODI.OPT_CD2
-		             , ((OD.ORD_AMT - OD.CNCL_RTN_AMT - OD.CPN1_DC_AMT) * (OCD.CHG_QTY / (OD.ORD_QTY - OD.CNCL_RTN_QTY))) AS PRICE_ORG
-		             , ((OD.REAL_ORD_AMT + OD.PNT_DC_AMT + OD.GFCD_USE_AMT) * (OCD.CHG_QTY / (OD.ORD_QTY - OD.CNCL_RTN_QTY))) AS PRICE_SALE
+		             , ((ODH.ORD_AMT - ODH.CPN1_DC_AMT) * (OCD.CHG_QTY / ODH.ORD_QTY)) AS PRICE_ORG
+		             , ((ODH.REAL_ORD_AMT + ODH.PNT_DC_AMT + ODH.GFCD_USE_AMT) * (OCD.CHG_QTY / OD.ORD_QTY)) AS PRICE_SALE
 		             , OC.ADD_PAY_COST
 		             , OC.ADD_PAY_COST
 		             , CASE WHEN G1.GOODS_TYPE != 'G056_S' AND G1.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
 		             , CASE WHEN G1.GOODS_TYPE != 'G056_S' AND G1.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
 		                    ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = IFNULL(G1.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM
 		                    ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = IFNULL(G1.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') END AS SYS_IMG_NM
@@ -850,6 +853,7 @@
 		             , R.RF_CNCL_AMT
 		             , R.RF_CNCL_AMT
 		             , R.RF_DELIVERY_FEE
 		             , R.RF_DELIVERY_FEE
 		             , R.RF_REAL_CNCL_AMT
 		             , R.RF_REAL_CNCL_AMT
+		             , P.PG_TID
 		             , P.PG_GB
 		             , P.PG_GB
 		             , P.PAY_MEANS
 		             , P.PAY_MEANS
 		             , FN_GET_CODE_NM('G014', P.PAY_MEANS)                              AS PAY_MEANS_NM
 		             , FN_GET_CODE_NM('G014', P.PAY_MEANS)                              AS PAY_MEANS_NM
@@ -869,6 +873,9 @@
 		            ON OD.ORD_NO = ODI.ORD_NO
 		            ON OD.ORD_NO = ODI.ORD_NO
 		           AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
 		           AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
 		           AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25')
 		           AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_11', 'G013_25')
+		         INNER JOIN TB_ORDER_DETAIL_HST ODH
+		            ON OD.ORD_DTL_NO = ODH.ORD_DTL_NO
+		           AND ODH.ORD_DTL_STAT = 'G013_00'
 		         INNER JOIN TB_GOODS G1
 		         INNER JOIN TB_GOODS G1
 		            ON OD.GOODS_CD = G1.GOODS_CD
 		            ON OD.GOODS_CD = G1.GOODS_CD
 		         INNER JOIN TB_GOODS G2
 		         INNER JOIN TB_GOODS G2
@@ -883,6 +890,7 @@
 		         INNER JOIN TB_PAYMENT P
 		         INNER JOIN TB_PAYMENT P
 		            ON P.ORD_NO = O.ORD_NO
 		            ON P.ORD_NO = O.ORD_NO
 		           AND P.PAY_GB = 'O'
 		           AND P.PAY_GB = 'O'
+		           AND P.PAY_STAT = 'G016_30'
 		         WHERE OCD.DEL_YN = 'N'
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		           AND O.DISP_YN = 'Y'
 		<choose>
 		<choose>
@@ -903,7 +911,7 @@
 				, Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 				, Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 				, Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.REFUND_AMT, Z.RF_CPN1_AMT, Z.RF_TMTB1_AMT
 				, Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.REFUND_AMT, Z.RF_CPN1_AMT, Z.RF_TMTB1_AMT
 				, Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT, Z.RF_CNCL_AMT
 				, Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT, Z.RF_CNCL_AMT
-				, Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM
+				, Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_TID, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM
 		 ORDER BY Z.ORD_CHG_SQ DESC
 		 ORDER BY Z.ORD_CHG_SQ DESC
 	</select>
 	</select>
 
 
@@ -1062,6 +1070,7 @@
 		         INNER JOIN TB_PAYMENT P
 		         INNER JOIN TB_PAYMENT P
 		            ON P.ORD_NO = O.ORD_NO
 		            ON P.ORD_NO = O.ORD_NO
 		           AND P.PAY_GB = 'O'
 		           AND P.PAY_GB = 'O'
+		           AND P.PAY_STAT = 'G016_30'
 		         WHERE OCD.DEL_YN = 'N'
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		           AND O.DISP_YN = 'Y'
 		<choose>
 		<choose>

+ 5 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -436,6 +436,7 @@
 		     , PLAN_CONT_SQ
 		     , PLAN_CONT_SQ
 		     ,TITLE 
 		     ,TITLE 
 		     ,LINK_URL
 		     ,LINK_URL
+		     ,LINK_OPEN_GB
 		     ,NOTE 
 		     ,NOTE 
 		     ,DISP_YN 
 		     ,DISP_YN 
 		FROM TB_PLAN_CONTENTS TPC 
 		FROM TB_PLAN_CONTENTS TPC 
@@ -667,11 +668,12 @@
 		      ,PC.PLAN_SQ
 		      ,PC.PLAN_SQ
 		      ,PC.TMPL_TYPE
 		      ,PC.TMPL_TYPE
 		      ,PC.TITLE
 		      ,PC.TITLE
-		      ,PC.LINK_URL
 		      ,PC.DISP_YN
 		      ,PC.DISP_YN
 		      ,PC.DISP_ORD
 		      ,PC.DISP_ORD
 		      ,PCI.PLAN_CONT_ITEM_SQ
 		      ,PCI.PLAN_CONT_ITEM_SQ
 		      ,PCI.ITEM_VAL
 		      ,PCI.ITEM_VAL
+		      ,PCI.LINK_URL
+		      ,PCI.LINK_OPEN_GB
 		      ,PCI.DISP_ORD
 		      ,PCI.DISP_ORD
 		      ,PCI.REVIEW_DISP_STDT
 		      ,PCI.REVIEW_DISP_STDT
 		      ,PCI.REVIEW_DISP_EDDT
 		      ,PCI.REVIEW_DISP_EDDT
@@ -692,6 +694,7 @@
 		WITH TAB_PLAN_GOODS AS (
 		WITH TAB_PLAN_GOODS AS (
 		    SELECT P.PLAN_SQ                                                /*기획전번호*/
 		    SELECT P.PLAN_SQ                                                /*기획전번호*/
 		         , PC.LINK_URL 
 		         , PC.LINK_URL 
+		         , PC.LINK_OPEN_GB
 		         , PC.DISP_ORD 
 		         , PC.DISP_ORD 
 		         , PC.TITLE 
 		         , PC.TITLE 
 		         , PC.TMPL_TYPE 
 		         , PC.TMPL_TYPE 
@@ -764,6 +767,7 @@
 		     , PG.TITLE
 		     , PG.TITLE
 		     , PG.TMPL_TYPE
 		     , PG.TMPL_TYPE
 		     , PG.LINK_URL
 		     , PG.LINK_URL
+		     , PG.LINK_OPEN_GB
 		     , PG.ITEM_VAL
 		     , PG.ITEM_VAL
 		     , PG.PLAN_CONT_SQ
 		     , PG.PLAN_CONT_SQ
 		     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
 		     , FN_GET_GOODS_NM(PG.GOODS_NM,PG.GOODS_GB,PG.FOREIGN_BUY_YN,PG.PARALLEL_IMPORT_YN,PG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/

+ 1 - 1
src/main/resources/config/application-locd.yml

@@ -66,7 +66,7 @@ pg:
         site:
         site:
             cd: T0000
             cd: T0000
             key: 3grptw1.zW0GSo4PQdaGvsF__
             key: 3grptw1.zW0GSo4PQdaGvsF__
-            name: KCP TEST SHOP
+            name: ISTYLE TEST
         log.level: 3
         log.level: 3
         module.type: 01
         module.type: 01
         tx.mode: 0
         tx.mode: 0

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html

@@ -3,15 +3,15 @@
 	xmlns:th="http://www.thymeleaf.org">
 	xmlns:th="http://www.thymeleaf.org">
 <!--
 <!--
  *******************************************************************************
  *******************************************************************************
- * @source  : SigninFormWeb.html
- * @desc    : 로그인 Page
+ * @source  : SnsCallBackFormMob.html
+ * @desc    : SNS 콜백 화면 Page
  *============================================================================
  *============================================================================
  * STYLE24
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
  * ===  ===========  ==========  =============================================
- * 1.0  2021.02.15   gagamel     최초 작성
+ * 1.0  2021.02.15   jsshin     최초 작성
  *******************************************************************************
  *******************************************************************************
  -->
  -->
 <head th:replace="~{mob/common/fragments/HeadMob :: head}"></head>
 <head th:replace="~{mob/common/fragments/HeadMob :: head}"></head>

+ 0 - 2
src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html

@@ -137,8 +137,6 @@
 					<div class="opt_select">
 					<div class="opt_select">
 						<div class="opt_header">
 						<div class="opt_header">
 							<span class="title">옵션2</span>
 							<span class="title">옵션2</span>
-							<!--<span th:text="${size.optCd2}"></span>
-							<span th:if="${size.addPrice > 0}">(+<em th:text="${#numbers.formatInteger(size.addPrice, 1, 'COMMA')}"></em>)원</span>-->
 							<span class="info color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
 							<span class="info color" th:classappend="|chooseSizeNm_${comp.goodsCd}|" th:text="${comp.optCd2}"></span>
 						</div>
 						</div>
 						<form class="form_wrap">
 						<form class="form_wrap">

+ 1 - 4
src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html

@@ -18,6 +18,7 @@
 	<!-- 즉시구매 form -->
 	<!-- 즉시구매 form -->
 	<form id="cartInfoForm" method="post" action="/order/noMember"></form>
 	<form id="cartInfoForm" method="post" action="/order/noMember"></form>
 
 
+	<!-- 장바구니 화면 -->
 	<form id="cartListForm" method="post" action="/order/noMember" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<form id="cartListForm" method="post" action="/order/noMember" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 		<div class="inner shotDelvSelect">
 		<div class="inner shotDelvSelect">
 			<div class="od_method">
 			<div class="od_method">
@@ -668,10 +669,6 @@
 		</div>
 		</div>
 		<!-- //쿠폰사용안내 팝업 -->
 		<!-- //쿠폰사용안내 팝업 -->
 
 
-		<!-- 옵션변경 팝업 -->
-		<div id="optModifyPop01" class="popup_box optModifyPop optModifyPop01"></div>
-		<!-- //옵션변경 팝업 -->
-
 		<script th:inline="javascript">
 		<script th:inline="javascript">
 			var sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 			var sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 			var totDcAmt = [[${order.totDcAmt}]];
 			var totDcAmt = [[${order.totDcAmt}]];

+ 21 - 3
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -81,6 +81,10 @@
 			</div>
 			</div>
 		</div>
 		</div>
 		<!-- //배송비 SAVE_팝업 -->
 		<!-- //배송비 SAVE_팝업 -->
+
+		<!-- 옵션변경 팝업 -->
+		<div id="optModifyPop01" class="popup_box optModifyPop optModifyPop01"></div>
+		<!-- //옵션변경 팝업 -->
 	</main>
 	</main>
 
 
 	<script src="/ux/mo/js/swiper.min.js"></script>
 	<script src="/ux/mo/js/swiper.min.js"></script>
@@ -179,6 +183,7 @@
 			count = count > maxOrdQty ? maxOrdQty : count;
 			count = count > maxOrdQty ? maxOrdQty : count;
 			$input.val(count);
 			$input.val(count);
 			$input.change();
 			$input.change();
+
 			//주문 최대 수량 이상 증가버튼 비활성화
 			//주문 최대 수량 이상 증가버튼 비활성화
 			if ($input.val() == maxOrdQty) {
 			if ($input.val() == maxOrdQty) {
 				$('.optModifyPop01 .number_count .plus').addClass('min_val');
 				$('.optModifyPop01 .number_count .plus').addClass('min_val');
@@ -188,8 +193,21 @@
 
 
 			return false;
 			return false;
 		}).on('keyup','.optModifyPop01 .number_count input[type=text]',function(e){
 		}).on('keyup','.optModifyPop01 .number_count input[type=text]',function(e){
-			//텍스트, 0 입력금지
-			$(this).val($(this).val().replace(/[^1-9]/g,""));
+			var minOrdQty = $(this).parent().parent().find(".minOrdQty").val();
+			var maxOrdQty = $(this).parent().parent().find(".maxOrdQty").val();
+
+			$(this).val($(this).val().replace(/[^0-9]/g,""));
+
+			if(Number($(this).val()) < Number(minOrdQty)) {
+				$(this).val(minOrdQty);
+				$('.optModifyPop01 .number_count .minus').addClass('min_val');
+				$('.optModifyPop01 .number_count .plus').removeClass('min_val');
+			}
+			if(Number($(this).val()) > Number(maxOrdQty)) {
+				$(this).val(maxOrdQty);
+				$('.optModifyPop01 .number_count .plus').addClass('min_val');
+				$('.optModifyPop01 .number_count .minus').removeClass('min_val');
+			}
 		});
 		});
 
 
 		//팝업 - 쿠폰사용안내
 		//팝업 - 쿠폰사용안내
@@ -198,7 +216,7 @@
 			$("#couponInfoPop").modal("show");
 			$("#couponInfoPop").modal("show");
 			return false;
 			return false;
 		});
 		});
-		$("#couponInfoPop_close").click(function() {
+		$("#couponInfoPop_close").on("click", function() {
 			$("#couponInfoPop").modal("hide");
 			$("#couponInfoPop").modal("hide");
 		});
 		});
 
 

+ 95 - 0
src/main/webapp/WEB-INF/views/mob/customer/JoinCompleteFormMob.html

@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/LoginLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : JoinCompleteFormMob.html
+ * @desc    : 회원 가입완료 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.19   jsshin     최초 작성
+ *******************************************************************************
+ -->
+
+<body>
+<th:block layout:fragment="content">
+	<main class="container mb">
+		<section th:if="${maskingCustId != ''}" class="content mb_join_3">
+			<div class="inner">
+				<div class="close">
+					<a href="javascript:void(0)" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+				</div>
+			</div>
+			<div class="inner">
+				<h2 class="title">회원가입</h2>
+			</div>
+			<div class="inner">
+				<form class="form_wrap form_full" role="form">
+					<div class="form_head">
+						<h3 class="title sr-only">회원가입</h3>
+					</div>
+					<div class="form_info">
+						<span class="ico_content_find"></span>
+						<p>이미 가입된 아이디가 있습니다.</p>
+						<p class="t_info mt15">
+							아래의 아이디로 로그인 하시거나<br>
+							잊으신 경우 ID 찾기를 통해 이용 가능합니다.
+						</p>
+					</div>
+					<div class="print_bar mt30">
+						<p class="c_primary bold" data-font="lato" th:text="${maskingCustId}"></p>
+					</div>
+					<!-- 210415_수정 : 버튼 형식 변경. -->
+					<div class="btn_group_flex btn_group_md">
+						<div>
+							<button id="btn_login" class="btn btn_dark" onclick="cfnGoToPage(_PAGE_LOGIN);">
+								<span>로그인</span>
+							</button>
+						</div>
+						<div>
+							<button id="btn_id_find" class="btn btn_default" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
+								<span>아이디 찾기</span>
+							</button>
+						</div>
+					</div>
+					<!-- //210415_수정 : 버튼 형식 변경. -->
+				</form>
+			</div>
+		</section>
+		<!-- ★ 컨텐츠 시작 -->
+		<section th:unless="${maskingCustId != ''}" class="content mb_join_1">
+			<div class="inner">
+				<div class="close">
+					<a href="javascript:void(0)" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+				</div>
+			</div>
+			<div class="inner">
+				<h2 class="title">신규회원 혜택 안내</h2>
+			</div>
+			<div class="inner">
+				<form class="form_wrap form_full" role="form">
+					<div class="form_head">
+						<h3 class="title sr-only">신규회원 혜택 안내</h3>
+					</div>
+					<img src="/images/mo/img_mb_join_done.jpg" width="100%" alt="신규회원 혜택안내 내용">
+					<div class="btn_group_flex">
+						<div>
+							<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_MAIN);">
+								<span>쇼핑하러 가기</span>
+							</button>
+						</div>
+					</div>
+				</form>
+			</div>
+		</section>
+		<!-- ★ 컨텐츠 종료 -->
+	</main>
+</th:block>
+</body>
+</html>

+ 178 - 125
src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html

@@ -34,122 +34,92 @@
 			<h2 class="title">회원정보 입력</h2>
 			<h2 class="title">회원정보 입력</h2>
 		</div>
 		</div>
 		<div class="inner">
 		<div class="inner">
-
-			   <form class="form_wrap form_full" role="form">
-					<div class="form_head">
-						<h2 class="title sr-only">회원정보 입력</h2>
+			<form id="joinForm" name="joinForm" class="form_wrap form_full" role="form">
+				<div class="form_head">
+					<h2 class="title sr-only">회원정보 입력</h2>
+				</div>
+				<!-- 아이디 사용가능시 -->
+				<div class="form_field">
+					<label class="input_label sr-only">아이디</label>
+					<div class="input_wrap form_full">
+						<input type="text" id="custId" name="custId" placeholder="아이디" class="form_control" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디" minlength="4" maxlength="12"/>
+						<span class="usable" style="display:block;"></span>
 					</div>
 					</div>
-					<!-- 아이디 사용가능시 -->
-					<div class="form_field">
-						<label class="input_label sr-only">아이디</label>
-						<div class="input_wrap form_full">
-							<input type="text" id="custId" name="custId" placeholder="아이디" class="form_control" required="required" data-valid-type="alphaNumeric" data-valid-name="아이디" minlength="4" maxlength="12"/>
-							<span class="usable" style="display:block;"></span>
-						</div>
-						<div id="dupCustIdDiv" class="help_block hide">
-							<p class="t_err">이미 가입된 아이디입니다.다른 아이디를 입력하여 주세요.</p>
-						</div>
+					<div id="dupCustIdDiv" class="help_block hide">
+						<p class="t_err">이미 가입된 아이디입니다.다른 아이디를 입력하여 주세요.</p>
 					</div>
 					</div>
-					<!-- //아이디 사용가능시 -->
-					<!-- 오류시 부모 div에서 제어 -->
-					<div class="form_field">
-						<label class="input_label sr-only">비밀번호</label>
-						<div class="input_wrap form_full">
-							<input type="password" id="passwd" name="passwd" placeholder="비밀번호 (8~20자 영문, 숫자, 특수문자 중 2가지 이상 조합)" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
-							<!-- case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
-							<div class="help_block">
-								<!-- 사용불가 비밀번호일경우 -->
-								<p class="mt10">
-									<span id="firstFailed" class="c_gray">
-										<i class="ico ico_check gray mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br>
-									</span>
-									<span id="secondFailed" class="c_gray">
-										<i class="ico ico_check gray mr5"></i>4개이상 연속되거나 동일한 문자/숫자 제외<br>
-									</span>
-									<span id="thirdFailed" class="c_gray">
-										<i class="ico ico_check gray mr5"></i>아이디 제외
-									</span>
-								</p>
-								<!-- //사용불가 비밀번호일경우 -->
-								<!-- 사용가능한 비밀번호일경우 -->
-								<p id="avlPwd" class="mt10 hide">
-									<span class="c_black2">
-										<i class="ico ico_check black mr5"></i>사용 가능한 비밀번호입니다
-									</span>
-								</p>
-								<!-- //사용가능한 비밀번호일경우 -->
-							</div>
-							<!-- //case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
-						</div>
-					</div>
-					<!-- //오류시 부모 div에서 제어 -->
-					<div class="form_field">
-						<label class="input_label sr-only">비밀번호 확인</label>
-						<div class="input_wrap form_full">
-							<input type="password" id="confirmPassword" name="confirmPassword" placeholder="비밀번호 확인" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
-							<!-- case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
-							<div class="help_block">
-								<!-- 비밀번호확인 틀렸을경우 -->
-								<p id="misPwd" class="t_err hide">
-									비밀번호가 일치하지 않습니다.
-								</p>
-								<!-- //비밀번호확인 틀렸을경우 -->
-								<!-- 비밀번호 일치할경우 -->
-								<p id="avlConPwd"  class="mt10 hide">
-									<span class="c_black2">
-										<i class="ico ico_check black mr5"></i>비밀번호가 일치합니다.
-									</span>
-								</p>
-								<!-- //비밀번호 일치할경우 -->
-							</div>
-							<!-- //case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
+				</div>
+				<!-- //아이디 사용가능시 -->
+				<!-- 오류시 부모 div에서 제어 -->
+				<div class="form_field">
+					<label class="input_label sr-only">비밀번호</label>
+					<div class="input_wrap form_full">
+						<input type="password" id="passwd" name="passwd" placeholder="비밀번호 (8~20자 영문, 숫자, 특수문자 중 2가지 이상 조합)" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
+						<!-- case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
+						<div class="help_block">
+							<!-- 사용불가 비밀번호일경우 -->
+							<p class="mt10">
+								<span id="firstFailed" class="c_gray">
+									<i class="ico ico_check gray mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br>
+								</span>
+								<span id="secondFailed" class="c_gray">
+									<i class="ico ico_check gray mr5"></i>4개이상 연속되거나 동일한 문자/숫자 제외<br>
+								</span>
+								<span id="thirdFailed" class="c_gray">
+									<i class="ico ico_check gray mr5"></i>아이디 제외
+								</span>
+							</p>
+							<!-- //사용불가 비밀번호일경우 -->
+							<!-- 사용가능한 비밀번호일경우 -->
+							<p id="avlPwd" class="mt10 hide">
+								<span class="c_black2">
+									<i class="ico ico_check black mr5"></i>사용 가능한 비밀번호입니다
+								</span>
+							</p>
+							<!-- //사용가능한 비밀번호일경우 -->
 						</div>
 						</div>
+						<!-- //case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
 					</div>
 					</div>
-					<div class="form_field">
-						<label class="input_label sr-only">이메일</label>
-						<div class="input_wrap form_full">
-							<input type="text" id="email" name="email" placeholder="이메일" class="form_control" required="required" data-valid-name="이메일" maxlength="30"/><!-- 잘못기입된 경우 class "err" 추가 -->
-							<!-- case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
-							<div class="help_block">
-								<!-- 이메일 형식이 바르지않을경우 -->
-								<p id="failEmail" class="t_err hide">
-									이메일 형식이 올바르지 않습니다.
-								</p>
-								<!-- //이메일 형식이 바르지않을경우 -->
-								<!-- 이미 가입되어있는 이메일인경우 -->
-								<p id="dupEmail" class="t_err hide">
-									이미 가입된 이메일 주소입니다. 다른 이메일 주소를 입력하여 주세요.
-								</p>
-								<div id="dupEmailDiv" class="mt20 hide">
-									<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_LOGIN);">
-										<span>로그인</span>
-									</button>
-									<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
-										<span>아이디 찾기</span>
-									</button>
-								</div>
-								<!-- //이미 가입되어있는 이메일인경우 -->
-							</div>
-							<!-- //case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
+				</div>
+				<!-- //오류시 부모 div에서 제어 -->
+				<div class="form_field">
+					<label class="input_label sr-only">비밀번호 확인</label>
+					<div class="input_wrap form_full">
+						<input type="password" id="confirmPassword" name="confirmPassword" placeholder="비밀번호 확인" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="비밀번호"/><!-- 잘못기입된 경우 class "err" 추가 -->
+						<!-- case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
+						<div class="help_block">
+							<!-- 비밀번호확인 틀렸을경우 -->
+							<p id="misPwd" class="t_err hide">
+								비밀번호가 일치하지 않습니다.
+							</p>
+							<!-- //비밀번호확인 틀렸을경우 -->
+							<!-- 비밀번호 일치할경우 -->
+							<p id="avlConPwd"  class="mt10 hide">
+								<span class="c_black2">
+									<i class="ico ico_check black mr5"></i>비밀번호가 일치합니다.
+								</span>
+							</p>
+							<!-- //비밀번호 일치할경우 -->
 						</div>
 						</div>
+						<!-- //case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
 					</div>
 					</div>
-					<!-- 210415_수정 : 휴대폰 인증 수정 -->
-					<div class="form_field">
-						<label class="input_label sr-only">휴대폰번호</label>
-						<!-- 휴대폰 인증 입력 전 -->
-						<div class="input_wrap form_full">
-							<input type="text" id="cellPhnno" name="cellPhnno" placeholder="휴대폰 인증 해주세요." class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰" readonly="readonly"/>
-							<button type="button" id="btnCellPhoneCertify" class="btn btn_dark btn_hp_certi">
-								<span>본인인증</span>
-							</button>
-						</div>
-						<!-- //휴대폰 인증 입력 전 -->
-
-						<!-- case (휴대폰번호 형식이 맞지 않을경우,이미 가입되어있는 핸드폰번호일경우) -->
+				</div>
+				<div class="form_field">
+					<label class="input_label sr-only">이메일</label>
+					<div class="input_wrap form_full">
+						<input type="text" id="email" name="email" placeholder="이메일" class="form_control" required="required" data-valid-name="이메일" maxlength="30"/><!-- 잘못기입된 경우 class "err" 추가 -->
+						<!-- case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
 						<div class="help_block">
 						<div class="help_block">
-							<p id="failPhnno" class="t_err hide">휴대폰번호를 형식에 맞게 정확히 입력해주세요</p>
-							<p id="dupPhnno" class="t_err hide">I***D로 가입된 핸드폰 번호 입니다.</p>
-							<div id="dupPhnnoDiv" class="mt20 hide">
+							<!-- 이메일 형식이 바르지않을경우 -->
+							<p id="failEmail" class="t_err hide">
+								이메일 형식이 올바르지 않습니다.
+							</p>
+							<!-- //이메일 형식이 바르지않을경우 -->
+							<!-- 이미 가입되어있는 이메일인경우 -->
+							<p id="dupEmail" class="t_err hide">
+								이미 가입된 이메일 주소입니다. 다른 이메일 주소를 입력하여 주세요.
+							</p>
+							<div id="dupEmailDiv" class="mt20 hide">
 								<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_LOGIN);">
 								<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_LOGIN);">
 									<span>로그인</span>
 									<span>로그인</span>
 								</button>
 								</button>
@@ -157,27 +127,55 @@
 									<span>아이디 찾기</span>
 									<span>아이디 찾기</span>
 								</button>
 								</button>
 							</div>
 							</div>
+							<!-- //이미 가입되어있는 이메일인경우 -->
 						</div>
 						</div>
+						<!-- //case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
 					</div>
 					</div>
-					<div class="btn_group_flex">
-						<div>
-							<button type="button" id="btnJoin" class="btn btn_primary btn_block" disabled="disabled">
-								<span>동의하고 가입하기</span>
+				</div>
+				<!-- 210415_수정 : 휴대폰 인증 수정 -->
+				<div class="form_field">
+					<label class="input_label sr-only">휴대폰번호</label>
+					<!-- 휴대폰 인증 입력 전 -->
+					<div class="input_wrap form_full">
+						<input type="text" id="cellPhnno" name="cellPhnno" placeholder="휴대폰 인증 해주세요." class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰" readonly="readonly"/>
+						<button type="button" id="btnCellPhoneCertify" class="btn btn_dark btn_hp_certi">
+							<span>본인인증</span>
+						</button>
+					</div>
+					<!-- //휴대폰 인증 입력 전 -->
+
+					<!-- case (휴대폰번호 형식이 맞지 않을경우,이미 가입되어있는 핸드폰번호일경우) -->
+					<div class="help_block">
+						<p id="failPhnno" class="t_err hide">휴대폰번호를 형식에 맞게 정확히 입력해주세요</p>
+						<p id="dupPhnno" class="t_err hide">I***D로 가입된 핸드폰 번호 입니다.</p>
+						<div id="dupPhnnoDiv" class="mt20 hide">
+							<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_LOGIN);">
+								<span>로그인</span>
+							</button>
+							<button type="button" class="btn btn_default btn_sm mini" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">
+								<span>아이디 찾기</span>
 							</button>
 							</button>
 						</div>
 						</div>
 					</div>
 					</div>
-					<!-- //210415_수정 : 버튼 형식 변경. -->
-					<div class="desc_wrap t_c mt20">
-						<p>
-							본인은&nbsp;만 14세 이상이며&nbsp;<a href="javascript:void(0)" onclick="cfnUseTermsLayer();">STYLE24이용약관<i class="ico ico_blank ml5"></i></a>,<br>
-							<a href="javascript:void(0)" onclick="cfnPrivacyPolicyLayer();">개인정보 수집 및 이용<i class="ico ico_blank ml5"></i></a>,
-							<a href="javascript:void(0)" onclick="cfnPrivacyTrustLayer();">개인정보 취급 위탁<i class="ico ico_blank ml5"></i></a><br>
-							내용을 확인 하였으며,동의합니다.
-						</p>
+				</div>
+				<div class="btn_group_flex">
+					<div>
+						<button type="button" id="btnJoin" class="btn btn_primary btn_block" disabled="disabled">
+							<span>동의하고 가입하기</span>
+						</button>
 					</div>
 					</div>
-				</form>
+				</div>
+				<!-- //210415_수정 : 버튼 형식 변경. -->
+				<div class="desc_wrap t_c mt20">
+					<p>
+						본인은&nbsp;만 14세 이상이며&nbsp;<a href="javascript:void(0)" onclick="cfnUseTermsLayer();">STYLE24이용약관<i class="ico ico_blank ml5"></i></a>,<br>
+						<a href="javascript:void(0)" onclick="cfnPrivacyPolicyLayer();">개인정보 수집 및 이용<i class="ico ico_blank ml5"></i></a>,
+						<a href="javascript:void(0)" onclick="cfnPrivacyTrustLayer();">개인정보 취급 위탁<i class="ico ico_blank ml5"></i></a><br>
+						내용을 확인 하였으며,동의합니다.
+					</p>
+				</div>
+			</form>
 		</div>
 		</div>
-
 	</section>
 	</section>
 	<!-- ★ 컨텐츠 종료 -->
 	<!-- ★ 컨텐츠 종료 -->
 </main>
 </main>
@@ -185,7 +183,11 @@
 <script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
 <script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
 <script th:inline="javascript">
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	/*<![CDATA[*/
-let custIdCheck = false;
+	const sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
+	const authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
+	let custParams = [[${custParams}]];
+
+	let custIdCheck = false;
 	let passwdCheck = false;
 	let passwdCheck = false;
 	let emailCheck = false;
 	let emailCheck = false;
 	let authCheck = false;
 	let authCheck = false;
@@ -324,6 +326,12 @@ let custIdCheck = false;
 	//	이메일 확인
 	//	이메일 확인
 	$('#email').on('blur', function () {
 	$('#email').on('blur', function () {
 		const $failEmail = $('#failEmail');
 		const $failEmail = $('#failEmail');
+		const $dupEmail = $('#dupEmail');
+		const $dupEmailDiv = $('#dupEmailDiv');
+		$failEmail.hide();
+		$dupEmail.hide();
+		$dupEmailDiv.hide();
+
 		let email = $(this).val();
 		let email = $(this).val();
 		let validation;
 		let validation;
 
 
@@ -363,7 +371,9 @@ let custIdCheck = false;
 
 
 	//휴대폰 인증
 	//휴대폰 인증
 	$('#btnCellPhoneCertify').on('click', function () {
 	$('#btnCellPhoneCertify').on('click', function () {
-		cfnOpenCellphoneCertify();
+		let joinForm = $('#joinForm').serializeObject();
+		let custParams = joinForm.custId +','+ joinForm.passwd +','+ joinForm.confirmPassword +','+ joinForm.email;
+		cfnOpenCellphoneCertify(_PAGE_CUSTOMER_JOIN, custParams);
 	});
 	});
 
 
 	// 나이스 본인인증 후 콜백
 	// 나이스 본인인증 후 콜백
@@ -432,6 +442,49 @@ let custIdCheck = false;
 			$btnJoin.attr('disabled', true);
 			$btnJoin.attr('disabled', true);
 		}
 		}
 	};
 	};
+
+	// 본인인증 후 데이터 입력 값 셋팅
+	var fnDataSet = function (custParams) {
+		const $custId = $('#joinForm input[name=custId]');
+		const $passwd = $('#joinForm input[name=passwd]');
+		const $confirmPassword = $('#joinForm input[name=confirmPassword]');
+		const $email = $('#joinForm input[name=email]');
+
+		let arrayParams = custParams.split(',');
+		//[0]아이디/[1]비밀번호/[2]비밀번호확인/[3]이메일
+		let custId = arrayParams[0];
+		let passwd = arrayParams[1];
+		let confirmPassword = arrayParams[2];
+		let email = arrayParams[3];
+
+		// console.log(arrayParams);
+		if (!gagajf.isNull(custId)) {
+			$custId.val(custId);
+			$custId.trigger('blur');
+		}
+		if (!gagajf.isNull(passwd)) {
+			$passwd.val(passwd);
+			$passwd.trigger('blur');
+		}
+		if (!gagajf.isNull(confirmPassword)) {
+			$confirmPassword.val(confirmPassword);
+			$confirmPassword.trigger('blur');
+		}
+		if (!gagajf.isNull(email)) {
+			$email.val(email);
+			$email.trigger('blur');
+		}
+	};
+
+	$(document).ready(function () {
+		if (!gagajf.isNull(custParams)) {
+			fnDataSet(custParams);
+		}
+		if (!gagajf.isNull(sEncData)) {
+			fnNiceCallBack(sEncData, authMethod);
+		}
+	});
+
 	/*]]>*/
 	/*]]>*/
 </script>
 </script>
 </th:block>
 </th:block>

+ 3 - 3
src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html

@@ -39,12 +39,12 @@
 						<p class="c_primary t_c">STYLE24 회원으로 가입</p>
 						<p class="c_primary t_c">STYLE24 회원으로 가입</p>
 						<p class="t_c mt10">신규 가입 시 할인 쿠폰 등<br> 다양한 혜택을 받으실 수 있습니다.</p>
 						<p class="t_c mt10">신규 가입 시 할인 쿠폰 등<br> 다양한 혜택을 받으실 수 있습니다.</p>
 					</div>
 					</div>
-				   <div class="ui_row mt20">
-					   <button type="button" class="btn btn_primary" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">회원가입</button>
+				   <div class="btn_group_flex">
+					   <button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN);">동의하고 가입하기</button>
 				   </div>
 				   </div>
 				</form>
 				</form>
 				<div class="t_c sns_wrap">
 				<div class="t_c sns_wrap">
-					<h3 class="sr-only">간편로그인</h3>
+					<h5>간편하게 시작하기</h5>
 					<ul class="login_utill">
 					<ul class="login_utill">
 						<li class="lu_kakao">
 						<li class="lu_kakao">
 							<a href="javascript:void(0);" onclick="cfnLoginKakao();">
 							<a href="javascript:void(0);" onclick="cfnLoginKakao();">

+ 1 - 0
src/main/webapp/WEB-INF/views/mob/customer/NiceCallbackFormMob.html

@@ -18,6 +18,7 @@
 	<form name="niceCallbackForm" id="niceCallbackForm" method="post" th:action="${redirectUrl}">
 	<form name="niceCallbackForm" id="niceCallbackForm" method="post" th:action="${redirectUrl}">
 		<input type="hidden" name="sEncData" th:value="${sEncData}"/>
 		<input type="hidden" name="sEncData" th:value="${sEncData}"/>
 		<input type="hidden" name="authMethod" th:value="${authMethod}"/>
 		<input type="hidden" name="authMethod" th:value="${authMethod}"/>
+		<input type="hidden" name="custParams" th:value="${custParams}"/>
 	</form>
 	</form>
 <script th:inline="javascript">
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	/*<![CDATA[*/

+ 1 - 0
src/main/webapp/WEB-INF/views/mob/customer/NiceCellPhoneFormMob.html

@@ -20,6 +20,7 @@
 	<input type="hidden" name="m" value="checkplusSerivce" />
 	<input type="hidden" name="m" value="checkplusSerivce" />
 	<input type="hidden" name="EncodeData" th:value="${sEncData}" />
 	<input type="hidden" name="EncodeData" th:value="${sEncData}" />
 	<input type="hidden" name="param_r1" th:value="${redirectUrl}"/>
 	<input type="hidden" name="param_r1" th:value="${redirectUrl}"/>
+	<input type="hidden" name="param_r2" th:value="${custParams}"/>
 </form>
 </form>
 
 
 <script th:inline="javascript">
 <script th:inline="javascript">

+ 17 - 5
src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html

@@ -216,15 +216,27 @@ function useGiftcard(result) {
 		let useGiftcard = giftcardUseList[i];
 		let useGiftcard = giftcardUseList[i];
 		tmtbHtml += '	<li>                                                               ';
 		tmtbHtml += '	<li>                                                               ';
 		tmtbHtml += '		<div>                                                          ';
 		tmtbHtml += '		<div>                                                          ';
-		tmtbHtml += '			<span class="tag deepgray">차감</span>                       ';
-		tmtbHtml += '			<span class="tag_name">상품구매</span>                         ';
+		if (useGiftcard.gfcdAmt<0) {
+			tmtbHtml += '			<span class="tag deepgray">차감</span>                       ';
+		}else{
+			tmtbHtml += '		    <span class="tag primary">적립</span>';
+		}
+		
+		tmtbHtml += '			<span class="tag_name">'+useGiftcard.occurDtlDesc+'</span>                         ';
 		tmtbHtml += '			<span class="txt_content">'	+ useGiftcard.goodsNm + '</span>   ';
 		tmtbHtml += '			<span class="txt_content">'	+ useGiftcard.goodsNm + '</span>   ';
 		tmtbHtml += '			<span class="txt_time">'+useGiftcard.regDt+'</span>          ';
 		tmtbHtml += '			<span class="txt_time">'+useGiftcard.regDt+'</span>          ';
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '		<div>                                                          ';
 		tmtbHtml += '		<div>                                                          ';
-		tmtbHtml += '			<span class="amount_minus">                                ';
-		tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
-		tmtbHtml += '			</span>                                                    ';
+		if (useGiftcard.gfcdAmt<0) {
+			tmtbHtml += '			<span class="amount_minus">                                ';
+			tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
+			tmtbHtml += '			</span>                                                    ';
+		}else{
+			tmtbHtml += '			<span class="amount_plus">                                ';
+			tmtbHtml += '				<em>'+useGiftcard.gfcdAmt.addComma()+'</em>원                                      ';
+			tmtbHtml += '			</span>                                                    ';
+		}
+		
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '		</div>                                                         ';
 		tmtbHtml += '	</li>                                                              ';
 		tmtbHtml += '	</li>                                                              ';
 	}
 	}

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

@@ -3,7 +3,7 @@
 	xmlns:th="http://www.thymeleaf.org">
 	xmlns:th="http://www.thymeleaf.org">
 <!--
 <!--
  *******************************************************************************
  *******************************************************************************
- * @source  : SigninFormWeb.html
+ * @source  : SnsCallBackFormWeb.html
  * @desc    : 로그인 Page
  * @desc    : 로그인 Page
  *============================================================================
  *============================================================================
  * STYLE24
  * STYLE24

+ 2 - 0
src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html

@@ -187,6 +187,8 @@
 						</th:block>
 						</th:block>
 					</th:block>
 					</th:block>
 					<div class="opt_count">
 					<div class="opt_count">
+						<input type="hidden" class="minOrdQty" th:value="${cart.minOrdQty}" />
+						<input type="hidden" class="maxOrdQty" th:value="${cart.maxOrdQty}" />
 						<div class="opt_header">
 						<div class="opt_header">
 							<span class="title">수량</span>
 							<span class="title">수량</span>
 						</div>
 						</div>

+ 3 - 3
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -572,19 +572,19 @@
 			temp.optCd 			= "13256848-2";
 			temp.optCd 			= "13256848-2";
 			temp.goodsQty 		= 3;
 			temp.goodsQty 		= 3;
 			temp.goodsType 		= "G056_N";
 			temp.goodsType 		= "G056_N";
-			temp.cartGb 		= "G";
+			temp.cartGb 		= "C";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.contentsLoc 	= "G028_YYY";
 			temp.contentsLoc 	= "G028_YYY";
 			temp.planDtlSq 		= "123";
 			temp.planDtlSq 		= "123";
 			compsList.push(temp);
 			compsList.push(temp);
 
 
-			temp 			= new Object;
+			temp 				= new Object;
 			temp.goodsCd 		= "AOW13QDM76";
 			temp.goodsCd 		= "AOW13QDM76";
 			temp.optCd 			= "13256848-6";
 			temp.optCd 			= "13256848-6";
 			temp.goodsQty 		= 3;
 			temp.goodsQty 		= 3;
 			temp.goodsType 		= "G056_N";
 			temp.goodsType 		= "G056_N";
-			temp.cartGb 		= "G";
+			temp.cartGb 		= "C";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.contentsLoc 	= "G028_YYY";
 			temp.contentsLoc 	= "G028_YYY";

+ 19 - 6
src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html

@@ -301,24 +301,37 @@
 	$(document).on('click','.optModify_pop .number_count .minus',function(e){
 	$(document).on('click','.optModify_pop .number_count .minus',function(e){
 		var $input = $(this).parent().find('input');
 		var $input = $(this).parent().find('input');
 		var count = parseInt($input.val()) - 1;
 		var count = parseInt($input.val()) - 1;
-		count = count < 1 ? 1 : count;
+		var minOrdQty = $(this).parent().parent().find(".minOrdQty").val();
+
+		count = count < minOrdQty ? minOrdQty : count;
 		$input.val(count);
 		$input.val(count);
 		$input.change();
 		$input.change();
 		//수량1개 이하 감소버튼 비활성화
 		//수량1개 이하 감소버튼 비활성화
-		if ($input.val() == 1) {
+		if ($input.val() == minOrdQty) {
 			$('.optModify_pop .number_count .minus').addClass('min_val');
 			$('.optModify_pop .number_count .minus').addClass('min_val');
 		}
 		}
+
+		$('.optModify_pop .number_count .plus').removeClass('min_val');
+
 		return false;
 		return false;
 	}).on('click','.optModify_pop .number_count .plus',function(e){
 	}).on('click','.optModify_pop .number_count .plus',function(e){
 		var $input = $(this).parent().find('input');
 		var $input = $(this).parent().find('input');
-		$input.val(parseInt($input.val()) + 1);
+		var count = parseInt($input.val()) + 1;
+		var maxOrdQty = $(this).parent().parent().find(".maxOrdQty").val();
+
+		count = count > maxOrdQty ? maxOrdQty : count;
+		$input.val(count);
 		$input.change();
 		$input.change();
-		//수량2개 이상부터 감소버튼 활성화
+
+		//주문 최대 수량 이상 증가버튼 비활성화
+		if ($input.val() == maxOrdQty) {
+			$('.optModify_pop .number_count .plus').addClass('min_val');
+		}
+
 		$('.optModify_pop .number_count .minus').removeClass('min_val');
 		$('.optModify_pop .number_count .minus').removeClass('min_val');
 		return false;
 		return false;
 	}).on('keyup','.optModify_pop .number_count input[type=text]',function(e){
 	}).on('keyup','.optModify_pop .number_count input[type=text]',function(e){
-		//텍스트, 0 입력금지
-		$(this).val($(this).val().replace(/[^1-9]/g,""));
+		$(this).val($(this).val().replace(/[^0-9]/g,""));
 	});
 	});
 
 
     //상품옵션변경 팝업 > 컬러선택 표기
     //상품옵션변경 팝업 > 컬러선택 표기

+ 2 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html

@@ -206,6 +206,8 @@
 <script th:inline="javascript">
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	/*<![CDATA[*/
 	let oneData = [[${oneData}]];
 	let oneData = [[${oneData}]];
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+	let refundYn = [[${refundYn}]];
 
 
 	$(document).ready(function() {
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
 		// 마이페이지 LNB 설정

+ 14 - 3
src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html

@@ -202,15 +202,26 @@
 			for (let i = 0; i < giftcardUseList.length; i++) {
 			for (let i = 0; i < giftcardUseList.length; i++) {
 				let useGiftcard = giftcardUseList[i];
 				let useGiftcard = giftcardUseList[i];
 				tmtbHtml += '<tr>';
 				tmtbHtml += '<tr>';
-				tmtbHtml += '<td><span class="tag deepgray">차감</span></td>';
+				if(useGiftcard.gfcdAmt > 0){
+					tmtbHtml += '		<td><span class="tag primary">적립</span></td>';
+				}else{
+					tmtbHtml += '		<td><span class="tag deepgray">차감</span></td>';
+				}
 				tmtbHtml += '<td>';
 				tmtbHtml += '<td>';
 				tmtbHtml += '<div class="txt_content">'	+ useGiftcard.goodsNm + '</div>';
 				tmtbHtml += '<div class="txt_content">'	+ useGiftcard.goodsNm + '</div>';
 				tmtbHtml += '</td>';
 				tmtbHtml += '</td>';
-				tmtbHtml += '<td><span class="amount_minus"> <em>'
-						/* + '-' */
+				if(useGiftcard.gfcdAmt<0){
+					tmtbHtml += '<td><span class="amount_minus"> <em>'
 						+ ' '
 						+ ' '
 						+ useGiftcard.gfcdAmt.addComma()
 						+ useGiftcard.gfcdAmt.addComma()
 						+ '</em>원';
 						+ '</em>원';
+				}else{
+					tmtbHtml += '<td><span class="amount_plus"> <em>'
+						+ ' '
+						+ useGiftcard.gfcdAmt.addComma()
+						+ '</em>원';
+				}
+				
 				tmtbHtml += '</span></td>';
 				tmtbHtml += '</span></td>';
 				tmtbHtml += '<td>' + useGiftcard.regDt
 				tmtbHtml += '<td>' + useGiftcard.regDt
 						+ '</td>';
 						+ '</td>';

+ 1 - 0
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html

@@ -569,6 +569,7 @@
 				let data = {};
 				let data = {};
 				data.ordNo = ordNo;
 				data.ordNo = ordNo;
 				data.chgReason = 'G686_10';
 				data.chgReason = 'G686_10';
+				data.chgReasonNm = '고객변심';
 				data.accountNo = accountNo;
 				data.accountNo = accountNo;
 				data.accountNm = accountNm;
 				data.accountNm = accountNm;
 				data.bankCd = bankCd;
 				data.bankCd = bankCd;

+ 92 - 0
src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentCompleteWeb.html

@@ -0,0 +1,92 @@
+<!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  : OrderAddPaymentWeb.html
+ * @desc    : 추가결제화면 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.13   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+
+<div id="container" class="container od">
+	<div class="wrap">
+		<div class="content completed">
+			<div class="cont_head">
+				<h2>결제완료</h2>
+			</div>
+			<div class="cont_body">
+				<!-- CONT-BODY -->
+				<div class="od_cont">
+					<div class="sec_head">
+						<div class="info_complete">
+							<p class="txt_box">감사합니다. <span th:text="${chgerNm}"></span> 고객님의 결제가 완료되었습니다.</p>
+						</div>
+					</div>
+					<div class="sec_body">
+						<div class="area_payinfo">
+							<h3>결제정보</h3>
+							<div class="tbl type6">
+								<table>
+									<colgroup>
+										<col width="50%">
+										<col width="50%">
+									</colgroup>   
+									<tr>
+										<td>
+											<dl>
+												<div>
+													<dt>반품/교환 배송비</dt>
+													<dd><em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></em>원</dd>	
+												</div>
+											</dl>
+										</td>
+										<td>
+											<dl>
+												<div>
+													<dt>결제 금액</dt>
+													<dd>
+														<div class="price">
+															<span class="pay_total_price">
+																<em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|">3,546,200</em>원
+															</span>
+														</div>
+													</dd>
+												</div>
+												<!-- 신용카드 일때 -->
+												<div>
+													<dt class="sr-only">결제방법</dt>
+													<dd>신용카드</dd>
+												</div>
+												<!-- //신용카드 일때 -->
+											</dl>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+					</div>
+					<div class="sec_foot">
+						<div class="btn_group_md">
+							<button type="button" class="btn btn_dark btn_md"><span>쇼핑 계속하기</span></button>
+						</div>
+					</div>
+				</div>
+				<!-- //CONT-BODY -->
+			</div>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+</script>
+</th:block>
+</body>
+</html>

+ 100 - 23
src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentWeb.html → src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentFormWeb.html

@@ -15,10 +15,27 @@
  -->
  -->
 <body>
 <body>
 <th:block layout:fragment="content">
 <th:block layout:fragment="content">
-<form class="form_wrap">
 
 
-<!--  container -->
-<div id="container" class="container od">
+<!-- payment.js -->
+<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}" src=""></script>
+<script type="text/javascript" src="/biz/payment.js"></script>
+
+<!-- 주문정보form -->
+<form id="order_info" name="order_info" method="post" action="/order/addPay/result/response" style="display:none"></form>
+<!-- //주문정보form -->
+
+<form class="form_wrap" name="addPayForm" id="addPayForm">
+	<input type="hidden" name="refundAmt" th:value="${refundAmt}">
+	<input type="hidden" name="addPayCost" th:value="${addPayCost}">
+	<input type="hidden" name="ordChgSq" th:value="${ordChgSq}">
+	
+	<input type="hidden" name="chgGb" th:value="${chgGb}">
+	<input type="hidden" name="chgerPhnno" th:value="${chgerPhnno}">
+	<input type="hidden" name="chgerNm" th:value="${chgerNm}">
+	<input type="hidden" name="goodsNm" th:value="${goodsNm}"> 
+	
+	<!--  container -->
+	<div id="container" class="container od">
 		<div class="wrap">
 		<div class="wrap">
 			<div class="content odPayment"> <!-- 페이지특정 클래스 = odPayment 클래스 추가 -->
 			<div class="content odPayment"> <!-- 페이지특정 클래스 = odPayment 클래스 추가 -->
 				<div class="cont_head">
 				<div class="cont_head">
@@ -37,11 +54,11 @@
 											<div class="paymethod_box">
 											<div class="paymethod_box">
 												<ul class="sel_method">
 												<ul class="sel_method">
 													<li>
 													<li>
-														<input type="radio" name="rdi-paynormal" id="payCreditCard" value="" checked="checked">
+														<input type="radio" name="rdi-paynormal" id="payCreditCard" class="KCP" value="KCP|G014_30" checked="checked">
 														<label for="payCreditCard"><span>신용카드</span></label>
 														<label for="payCreditCard"><span>신용카드</span></label>
 													</li>
 													</li>
 													<li>
 													<li>
-														<input type="radio" name="rdi-paynormal" id="payCellphone" value="">
+														<input type="radio" name="rdi-paynormal" id="payCellphone" class="KCP" value="KCP|G014_60">
 														<label for="payCellphone"><span>휴대폰 결제</span></label>
 														<label for="payCellphone"><span>휴대폰 결제</span></label>
 													</li>
 													</li>
 												</ul>
 												</ul>
@@ -52,13 +69,13 @@
 								<div class="area_paymentinfo">
 								<div class="area_paymentinfo">
 									<div class="paymentinfo">
 									<div class="paymentinfo">
 										<div class="payinfo_blk">
 										<div class="payinfo_blk">
-											<a href="">개인정보 제공에 대한 동의<span>보기</span></a>
+											<a href="javascript:void(0);">개인정보 제공에 대한 동의<span>보기</span></a>
 											<div class="infotxt">
 											<div class="infotxt">
 												개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.
 												개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.
 											</div>
 											</div>
 										</div>
 										</div>
 										<div class="payinfo_blk">
 										<div class="payinfo_blk">
-											<a href="">결제대행 서비스 약관 동의<span>보기</span></a>
+											<a href="javascript:void(0);">결제대행 서비스 약관 동의<span>보기</span></a>
 											<div class="infotxt">
 											<div class="infotxt">
 												결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
 												결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
 										</div>
 										</div>
@@ -70,7 +87,9 @@
 							</div>
 							</div>
 							<div class="area_paybtn">
 							<div class="area_paybtn">
 								<div class="form_field">
 								<div class="form_field">
-									<button type="button" class="btn btn_primary btn_block"><span>동의 후 <em>123,456,789원</em> 결제하기</span></button>
+									<button type="button" class="btn btn_primary btn_block" id="btn_payment">
+										<span>동의 후 <em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}원|"></em> 결제하기</span>
+									</button>
 								</div>
 								</div>
 							</div>
 							</div>
 						</div>
 						</div>
@@ -81,46 +100,58 @@
 							<div class="od_item_box">
 							<div class="od_item_box">
 								<!-- 반품상품 내역 -->
 								<!-- 반품상품 내역 -->
 								<div class="part_dlvr">
 								<div class="part_dlvr">
-									<h4 class="sr-only">반품상품</h4>
+									<th:block th:if="${chGb} == 'G680_20'">
+										<h4 class="sr-only">반품상품</h4>
+									</th:block>
+									<th:block th:if="${chGb} == 'G680_30'">
+										<h4 class="sr-only">반품상품</h4>
+									</th:block>
+									<th:block th:if="${chGb} == 'G680_40'">
+										<h4 class="sr-only">교환상품</h4>
+									</th:block>
 									<div class="gd_list">
 									<div class="gd_list">
+										<th:block th:each="goods, i : ${orderAddPayGoodsList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 										<div class="item_gd">
 										<div class="item_gd">
 											<figure>
 											<figure>
-												<span class="thumb"><img src="/images/pc/thumb/tmp_odSide1.jpg" alt=""></span>
+												<span class="thumb">
+													<img th:src="${imageUrl + '/' + goods.sysImgNm}" src="/" width="100%" alt="">
+												</span>
 												<figcaption>
 												<figcaption>
-													<div class="brand">CURLYSUE 컬리수</div>
-													<div class="name">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
+													<div class="brand" th:text="${goods.brandEnm} + ' ' + ${goods.brandKnm}"></div>
+													<div class="name goodsNm" th:text="${goods.goodsNm}"></div>
+													<div class="option" th:each="colorNm, index : ${goods.colorNmArr}">
+														<span th:text="${colorNm}+'/'+${goods.optCd2Arr[index.index]}"></span> 
+													</div>
 													<div class="option">
 													<div class="option">
-														<span>01_루돌프융기모상하복_D오렌지/110</span>
-														<span>울핸드메이드 벨티드재킷 SWHJKJ42010 / BROWN</span>
-														<span>BLACK / XXL</span>
-														<span>수량&nbsp;<em>99</em>개</span>
+														<span>수량:<em th:text="${goods.chgQty}"></em>개</span>
 													</div>
 													</div>
 													<div class="price">
 													<div class="price">
-														<span class="selling_price">1,000,000</span>
+														<span class="selling_price" th:text="${#numbers.formatInteger((goods.currPrice + goods.optAddPrice) * goods.chgQty, 1, 'COMMA')}"></span>
 													</div>
 													</div>
 												</figcaption>
 												</figcaption>
 											</figure>
 											</figure>
 										</div>
 										</div>
-									</div>              
+										</th:block>
+									</div>
 								</div>
 								</div>
-								<!-- //반품상품 내역 -->                   
+								<!-- //반품상품 내역 -->
 							</div>
 							</div>
 							<div class="od_amount_box">
 							<div class="od_amount_box">
 								<dl>
 								<dl>
 									<div>
 									<div>
 										<dt>환불 상품금액</dt>
 										<dt>환불 상품금액</dt>
-										<dd><em>1,590,000</em>원</dd>
+										<dd><em th:text="|${#numbers.formatInteger(refundAmt, 1, 'COMMA')}|"></em>원</dd>
 									</div>
 									</div>
 									<div>
 									<div>
 										<dt>반품/교환 배송비</dt>
 										<dt>반품/교환 배송비</dt>
-										<dd><em>0원</em></dd>
+										<dd><em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></em></dd>
 									</div>
 									</div>
 								</dl>
 								</dl>
 							</div>
 							</div>
 							<div class="totalprice_box">
 							<div class="totalprice_box">
 								<dl>
 								<dl>
 									<dt>총 결제 예정 금액</dt>
 									<dt>총 결제 예정 금액</dt>
-									<dd><span>3,546,200</span>원</dd>
+									<dd><span th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></span>원</dd>
 								</dl>
 								</dl>
 								<p class="info_extra">
 								<p class="info_extra">
 									환불할 상품금액이 반품/교환 배송비보다 적을<br>
 									환불할 상품금액이 반품/교환 배송비보다 적을<br>
@@ -130,7 +161,7 @@
 							</div>
 							</div>
 						</div>
 						</div>
 					</div>
 					</div>
-					<!-- // CONT-BODY -->					
+					<!-- // CONT-BODY -->
 				</div>
 				</div>
 			</div>
 			</div>
 		</div>
 		</div>
@@ -139,6 +170,52 @@
 </form>
 </form>
 
 
 <script th:inline="javascript">
 <script th:inline="javascript">
+//결재하기
+$("#btn_payment").on("click", function(){
+	var paynormal			= $("input[name='rdi-paynormal']:checked").val();
+	var paynormalArr		= paynormal.split("|");
+	var pgGb				= paynormalArr[0];
+	var payMeans			= paynormalArr[1];
+	
+	// 주문데이타 생성
+	var orderData = {
+		"pgGb"					: pgGb
+		,"payMeans"				: payMeans // 네이버페이, 카카오페이
+		,"addPayCost"			: $("#addPayForm input[name=addPayCost]").val()
+		,"ordChgSq"				: $("#addPayForm input[name=ordChgSq]").val()
+		,"chgGb"				: $("#addPayForm input[name=chgGb]").val()
+		,"chgerPhnno"			: $("#addPayForm input[name=chgerPhnno]").val()
+		,"chgerNm"				: $("#addPayForm input[name=chgerNm]").val()
+		,"goodsNm"				: $("#addPayForm input[name=goodsNm]").val()
+	};
+	
+	$.ajax( {
+		type		: "POST",
+		url 		: '/order/addPayment',
+		data		: JSON.stringify(orderData),
+		dataType 	: 'html',
+		beforeSend : function(xhr, settings) {
+			xhr.setRequestHeader("AJAX"			, "true");
+			xhr.setRequestHeader('Accept'		, 'application/json');
+			xhr.setRequestHeader('Content-Type'	, 'application/json');
+			gagajf.showProgressbar(true);
+		},
+		success 	: function(result) {
+			// 결재정보로드
+			$("#order_info").html(result);
+			
+			var pgGb = $("#order_info input[name=pgGb]").val();
+			
+			if (pgGb == "NAVER") {
+				fnNaverPaymentReady();
+			} else if (pgGb == "KAKAO") {
+				fnKakaoPaymentReady();
+			} else if (pgGb == "KCP" || pgGb == "PAYCO") {
+				jsf__pay(document.order_info);
+			}
+		}
+	});
+});
 
 
 </script>
 </script>
 </th:block>
 </th:block>

+ 24 - 4
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -372,7 +372,12 @@ if(image.length>0){
 	html += '            <div class="swiper-wrapper">';
 	html += '            <div class="swiper-wrapper">';
 	for (var i = 0; i < image.length; i++) {
 	for (var i = 0; i < image.length; i++) {
 		html += '                	<div class="swiper-slide">';
 		html += '                	<div class="swiper-slide">';
-		html += '                    	<img alt="" src="'+ imgUrl + image[i].itemVal +'">';
+		if (image[i].linkOpenGb == 'M') {
+			html += '                    	<a href="http://'+image[i].linkUrl+'" target="_self">><img alt="" src="'+ imgUrl + image[i].itemVal +'"></a>';
+		}else{
+			html += '                    	<a href="http://'+image[i].linkUrl+'" target="_blank">><img alt="" src="'+ imgUrl + image[i].itemVal +'"></a>';
+		}
+		
 		html += '                	</div>';
 		html += '                	</div>';
 	}
 	}
 	html += '            </div>';
 	html += '            </div>';
@@ -404,7 +409,13 @@ if(goods1.length>0){
 			html += '	<div>';
 			html += '	<div>';
 			html += '        <h4>';
 			html += '        <h4>';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-				html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				console.log("template[i].linkOpenGb"+ template[i].linkOpenGb);
+				if (template[i].linkOpenGb == 'M') { //본창
+					html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				}else{
+					html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				}
+				
 			}else{
 			}else{
 				html += '        <a href="javascript:void(0)">'+template[i].title+'</a>';
 				html += '        <a href="javascript:void(0)">'+template[i].title+'</a>';
 			}
 			}
@@ -469,7 +480,11 @@ if(goods2.length>0){
 			html += '	<div>';
 			html += '	<div>';
 			html += '        <h4>';
 			html += '        <h4>';
 				if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-					html+='            <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+'<i class="ico_arrow"></i></a>';
+					if (template[i].linkOpenGb == 'M') { //본창
+						html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					}else{
+						html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					}
 				}else{
 				}else{
 					html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
 					html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
 				}
 				}
@@ -536,8 +551,13 @@ if(goods4.length>0){
 			html += '<div class="cont_head">';
 			html += '<div class="cont_head">';
 			html += '<div>';
 			html += '<div>';
 			html += '        <h4>';
 			html += '        <h4>';
+			console.log(template[i].linkOpenGb );
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-				html+='            <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				if (template[i].linkOpenGb == "M") { //본창
+					html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				}else{
+					html += '        <a href="http://'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+				}
 			}else{
 			}else{
 				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
 				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
 			}
 			}

+ 8 - 1
src/main/webapp/biz/mypage.js

@@ -290,13 +290,20 @@ var fnReceipt = function(param) {
 		// 팝업 크기 설정
 		// 팝업 크기 설정
 		option = 'width=370, height=625';
 		option = 'width=370, height=625';
 	} else if (param == 'cancel') {
 	} else if (param == 'cancel') {
-		if (param.refunYn == 'Y') {
+		if (refundYn == 'Y') {
 			// TODO
 			// TODO
 			// 취소전표 확인 처리
 			// 취소전표 확인 처리
+			//receiptWin += '?cmd=card_bill';
+			//receiptWin += '&tno=' + oneData.pgTid;
+			//receiptWin += '&order_no=' + oneData.ordNo;
+			//receiptWin += '&trade_mony=' + oneData.refundAmt;
 		} else {
 		} else {
 			mcxDialog.alert('아직 전표생성이 되지 않았습니다.');
 			mcxDialog.alert('아직 전표생성이 되지 않았습니다.');
 			return false;
 			return false;
 		}
 		}
+		
+		// 팝업 크기 설정
+		option = 'width=455, height=815';
 	} else if (param == 'delivery') {
 	} else if (param == 'delivery') {
 		// URL 설정
 		// URL 설정
 		receiptWin += '?cmd=card_bill';
 		receiptWin += '?cmd=card_bill';

+ 3 - 3
src/main/webapp/ux/style24_link.js

@@ -138,7 +138,7 @@ var cfnGoToPage = function(page, ithrCd) {
  * @since  : 2021/02/09
  * @since  : 2021/02/09
  * @author : jsshin
  * @author : jsshin
  */
  */
-var cfnOpenCellphoneCertify = function (redirectUrl, custparams) {
+var cfnOpenCellphoneCertify = function (redirectUrl, custParams) {
 	var actionUrl = _frontUrl + "/customer/nice/cellphone/form";
 	var actionUrl = _frontUrl + "/customer/nice/cellphone/form";
 	var popupWidth = 420;
 	var popupWidth = 420;
 	var popupHeight = 720;
 	var popupHeight = 720;
@@ -150,8 +150,8 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custparams) {
 		console.log('redirectUrl', redirectUrl);
 		console.log('redirectUrl', redirectUrl);
 		if (!gagajf.isNull(redirectUrl)) {
 		if (!gagajf.isNull(redirectUrl)) {
 			actionUrl = actionUrl + "?redirectUrl=" + redirectUrl;
 			actionUrl = actionUrl + "?redirectUrl=" + redirectUrl;
-			if (!gagajf.isNull(custparams)) {
-				actionUrl = actionUrl + "&custparams=" + custparams;
+			if (!gagajf.isNull(custParams)) {
+				actionUrl = actionUrl + "&custParams=" + custParams;
 			}
 			}
 			document.location.href = actionUrl;
 			document.location.href = actionUrl;
 		}
 		}