Explorar el Código

Merge branch 'develop' into bin2107

bin2107 hace 5 años
padre
commit
9398542eec
Se han modificado 64 ficheros con 1783 adiciones y 2839 borrados
  1. 17 0
      src/main/java/com/style24/front/biz/dao/TsfCartDao.java
  2. 16 0
      src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java
  3. 20 0
      src/main/java/com/style24/front/biz/service/TsfCartService.java
  4. 0 1
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  5. 10 2
      src/main/java/com/style24/front/biz/service/TsfGiftcardService.java
  6. 3 0
      src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java
  7. 1 2
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  8. 1 1
      src/main/java/com/style24/front/biz/web/TsfCallcenterController.java
  9. 16 6
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  10. 1 1
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  11. 2 1
      src/main/java/com/style24/front/biz/web/TsfIndexController.java
  12. 47 31
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  13. 160 0
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  14. 1 0
      src/main/java/com/style24/persistence/domain/Goods.java
  15. 1 0
      src/main/java/com/style24/persistence/domain/Plan.java
  16. 1 1
      src/main/java/com/style24/persistence/domain/Review.java
  17. 37 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  18. 38 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGiftcard.xml
  19. 3 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  20. 12 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  21. 5 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  22. 1 1
      src/main/resources/config/application-locd.yml
  23. 3 3
      src/main/webapp/WEB-INF/views/mob/SnsCallBackFormMob.html
  24. 0 2
      src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html
  25. 1 4
      src/main/webapp/WEB-INF/views/mob/cart/CartListAjaxFormMob.html
  26. 21 3
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  27. 95 0
      src/main/webapp/WEB-INF/views/mob/customer/JoinCompleteFormMob.html
  28. 178 125
      src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html
  29. 3 3
      src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html
  30. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceCallbackFormMob.html
  31. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceCellPhoneFormMob.html
  32. 3 3
      src/main/webapp/WEB-INF/views/mob/goods/CardPrmtFormMob.html
  33. 1 2019
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  34. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html
  35. 16 14
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  36. 31 52
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html
  37. 274 33
      src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html
  38. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html
  39. 2 2
      src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html
  40. 17 5
      src/main/webapp/WEB-INF/views/mob/mypage/MypageGiftcardFormMob.html
  41. 220 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypagePointFormMob.html
  42. 1 1
      src/main/webapp/WEB-INF/views/web/SnsCallBackFormWeb.html
  43. 2 0
      src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html
  44. 3 3
      src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html
  45. 19 6
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html
  46. 3 3
      src/main/webapp/WEB-INF/views/web/goods/CardPrmtFormWeb.html
  47. 7 6
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  48. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailDeliveryFormWeb.html
  49. 47 30
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  50. 4 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html
  51. 3 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  52. 13 19
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  53. 1 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaDetailFormWeb.html
  54. 2 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreCancelDetailFormWeb.html
  55. 14 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageGiftcardFormWeb.html
  56. 1 0
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  57. 0 281
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html
  58. 169 127
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html
  59. 92 0
      src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentCompleteWeb.html
  60. 100 23
      src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentFormWeb.html
  61. 24 4
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  62. 1 0
      src/main/webapp/biz/goods.js
  63. 8 1
      src/main/webapp/biz/mypage.js
  64. 6 4
      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
 	 */
 	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();
 }

+ 16 - 0
src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java

@@ -68,5 +68,21 @@ public interface TsfGiftcardDao {
 	 */
 	 Collection<GiftCard> getRecentlyDate();
 	 
+	 /**
+	 * 상품권 CUST_GFCD_SQ
+	 *
+	 * @param 
+	 * @author sowon
+	 * @since 2021. 4. 19
+	 */
+	 int getCustGiftCardSq(String gfcdNo);
 	 
+	 /**
+	 * 상품권 hst insert
+	 *
+	 * @param 
+	 * @author sowon
+	 * @since 2021. 4. 19
+	 */
+	 void createCustGiftcardHistory(GiftCard giftcard);
 }

+ 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("goodsType", goodsType);
 		result.put("cartGb", cartGb);
@@ -223,6 +228,21 @@ public class TsfCartService {
 		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")
 	public void saveSetTypeCartInfo(Collection<Cart> params, List<Integer> cartSqs) {
 		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;
 		for (Coupon tmpCoupon : goodsCouponList) {
-
 			for (int i = 0; i < downloadCnt; i++) {
 				CustCoupon custCoupon = new CustCoupon();
 				custCoupon.setCustNo(TsfSession.getInfo().getCustNo());

+ 10 - 2
src/main/java/com/style24/front/biz/service/TsfGiftcardService.java

@@ -132,8 +132,16 @@ public class TsfGiftcardService {
 			giftcard.setRmGfcdAmt(Integer.parseInt(param[1])); // 승인금액
 			giftcard.setUseStDate(param2[0]);
 			giftcard.setUseExpDate(param3[0]);
-			
 			giftcardDao.getGiftcardUseConfirm(giftcard);
+			
+			int custGfcdSq = giftcardDao.getCustGiftCardSq(pubNo);
+			giftcard.setCustGfcdSq(custGfcdSq);
+			giftcard.setOccurGb("G074_11");
+			giftcard.setOccurDtlDesc("상품권등록");
+			giftcard.setGfcdAmt(Integer.parseInt(param[1]));
+			
+			giftcardDao.createCustGiftcardHistory(giftcard);
+			
 		}
 
 	}
@@ -148,5 +156,5 @@ public class TsfGiftcardService {
 	 public Collection<GiftCard> getRecentlyDate(){
 		 return giftcardDao.getRecentlyDate();
 	 }
-
+	 
 }

+ 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("allLastCanYn", allLastCanYn);							// 전체 마지막 취소 여부
 		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);									// 취소신청목록
 
 		return result;

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

@@ -332,8 +332,7 @@ public class TsfOrderService {
 			// TB_PAYMENT 등록. 실패시 PG 환불.
 			if(coreOrderDao.insertPayment(result) < 1) {
 				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())) {
 					coreKakaoPayService.kakaoPayRollBack(param);
 				} else if (TscConstants.PgGb.NAVER.value().equals(param.getPgGb())) {

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

@@ -326,7 +326,7 @@ public class TsfCallcenterController extends TsfBaseController {
 	public GagaResponse createGoodsQna(@RequestBody Counsel counsel) {
 		log.info("createGoodsQna counsel = {}", counsel);
 		counselService.createGoodsQna(counsel);
-		return super.ok(message.getMessage("SUCC_0001"));
+		return super.ok("상품 문의가 등록되었습니다. 빠른 시일 내에 답변드리겠습니다.");
 	}
 
 	/**

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

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

@@ -259,7 +259,7 @@ public class TsfGoodsController extends TsfBaseController {
 			}
 			
 		}
-
+		
 		// 상품 문의건수
 		Counsel counsel = new Counsel();
 		counsel.setRelGoodsCd(goods.getGoodsCd());

+ 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
 	 */
 	@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();
 		boolean isSnsLoing = false;
 		GagaMap userInfo = new GagaMap();

+ 47 - 31
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -725,6 +725,7 @@ public class TsfMypageController extends TsfBaseController {
 		// @ 결품취소로직 추가
 		// @ 주문취소시 상태값 체크
 		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+		GagaMap result = new GagaMap();
 
 		// 1. 세션회원조회
 		int custNo = TsfSession.getInfo().getCustNo();
@@ -737,36 +738,50 @@ public class TsfMypageController extends TsfBaseController {
 		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
 		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("message", message.getMessage("CANCEL_0001"));
@@ -899,6 +914,7 @@ public class TsfMypageController extends TsfBaseController {
 		OrderChange oneData = (OrderChange) map.get("oneData");
 		mav.addObject("cancelDetailList", map);
 		mav.addObject("oneData", oneData);
+		mav.addObject("refundYn", map.getString("refundYn"));
 
 		// 주문 결제정보 조회
 		Order order = new Order();
@@ -1003,7 +1019,7 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("usePointList", pointService.getUsePointList(point));
 		// 최근 12개월
 		mav.addObject("date", pointService.getRecentlyDate());
-		mav.setViewName(super.getDeviceViewName("mypage/MypagePointForm2"));
+		mav.setViewName(super.getDeviceViewName("mypage/MypagePointForm"));
 		return mav;
 	}
 

+ 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");
 		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/Goods.java

@@ -150,6 +150,7 @@ public class Goods extends TscBaseDomain {
 	private String goodsStatNm;
 	private String regDtMonth;
 	
+	private int goodsQnaCnt;	// 상품문의건수
 
 	private String sizeGb;		// 사이즈구분(T:상의, B:하의, S:신발)
 	private String optionSoldoutSkip; 	//품절제외 Y, N

+ 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 reviewDispStdt;		//리뷰노출시작일시
 	private String reviewDispEddt;		//리뷰노툴종료일시
+	private String linkOpenGb;			//링크 본창 새창
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	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 String reviewTitle;		// 상품평제목
 	private String reviewContent;	// 상품평내용
-	private float score;			// 구매평점
+	private String score;			// 구매평점
 	private int height;				// 키
 	private int weight;				// 몸무게
 	private String scoreSize;		// 사이즈점수(공통코드G040)

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

@@ -1136,4 +1136,41 @@
 		WHERE CART_SQ = #{cartSq}
 		AND   CUST_NO = #{custNo}
 	</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>

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

@@ -14,7 +14,7 @@
 		      ,(SELECT SUM(CG3.RM_GFCD_AMT)
 				FROM TB_CUST_GIFTCARD CG3
 				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 CG3.RM_GFCD_AMT > 0 ) AS EXPIRE_COUNT  /*한달 이내 소멸*/
 		FROM TB_CUST_GIFTCARD CG 
@@ -135,6 +135,7 @@
 	</insert>
 	
 	<select id="getRecentlyDate" resultType="GiftCard">
+		/*TsfGiftcard.getRecentlyDate*/  
 		SELECT A.*
 		FROM
 		    (		
@@ -164,6 +165,42 @@
 		    )A	
 	</select>
 	
+	<select id="getCustGiftCardSq" parameterType="GiftCard" resultType="int">
+		/*TsfGiftcard.getCustGiftCardSq*/  
+		SELECT CUST_GFCD_SQ 
+		FROM TB_CUST_GIFTCARD 
+		WHERE GFCD_NO = #{gfcdNo}
+	</select>
+	
+	<insert id="createCustGiftcardHistory"  parameterType="GiftCard" >
+		/* TsfGiftcard.createCustGiftcardHistorys */
+		INSERT INTO TB_CUST_GIFTCARD_HST ( 
+		      CUST_NO
+		    , OCCUR_GB
+		    , OCCUR_DTL_DESC
+		    , GFCD_AMT
+		    , CUST_GFCD_SQ
+		    , ORD_NO
+		    , ORD_DTL_NO
+		    , REG_NO
+		    , REG_DT
+		    , UPD_NO
+		    , UPD_DT
+		) VALUES (
+		      #{custNo}
+		    , #{occurGb}
+		    , #{occurDtlDesc}
+		    , #{gfcdAmt}
+		    , #{custGfcdSq}
+		    , #{ordNo}
+		    , #{ordDtlNo}
+		    , #{custNo}
+		    , NOW()
+		    , #{custNo}
+		    , NOW()
+		)	
+	</insert>
+	
 	<!-- 페이징을 위한 select절 상단 -->
 	<sql id="selectForPagingHeader">
 		SELECT *

+ 3 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -454,8 +454,11 @@
 		        WHERE GOODS_CD = G.GOODS_CD
 		        GROUP BY GOODS_CD 
 		        ) AS STOCK_QTY
+		     , GS.REVIEW_REG_CNT
+		     , GS.GOODS_QNA_CNT
 		FROM TB_GOODS_COMPOSE C
 		INNER JOIN TB_GOODS G ON C.COMPS_GOODS_CD = G.GOODS_CD
+		INNER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		                      AND B.USE_YN = 'Y'
 		INNER JOIN TB_SITE_BRAND SB ON B.BRAND_CD = SB.BRAND_CD

+ 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.SUPPLY_COMP_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
 		     , CASE WHEN NULLIF(OD.INVOICE_NO, '') IS NULL THEN 'N'
 		            ELSE 'Y'
@@ -798,6 +800,7 @@
 		     , Z.RF_CNCL_AMT
 		     , Z.RF_DELIVERY_FEE
 		     , Z.RF_REAL_CNCL_AMT
+		     , Z.PG_TID
 		     , Z.PG_GB
 		     , Z.PAY_MEANS
 		     , Z.PAY_MEANS_NM
@@ -832,8 +835,8 @@
 		             , ODI.ORD_DTL_ITEM_SQ
 		             , ODI.OPT_CD1
 		             , 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
 		             , 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
@@ -850,6 +853,7 @@
 		             , R.RF_CNCL_AMT
 		             , R.RF_DELIVERY_FEE
 		             , R.RF_REAL_CNCL_AMT
+		             , P.PG_TID
 		             , P.PG_GB
 		             , P.PAY_MEANS
 		             , FN_GET_CODE_NM('G014', P.PAY_MEANS)                              AS PAY_MEANS_NM
@@ -869,6 +873,9 @@
 		            ON OD.ORD_NO = ODI.ORD_NO
 		           AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
 		           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
 		            ON OD.GOODS_CD = G1.GOODS_CD
 		         INNER JOIN TB_GOODS G2
@@ -883,6 +890,7 @@
 		         INNER JOIN TB_PAYMENT P
 		            ON P.ORD_NO = O.ORD_NO
 		           AND P.PAY_GB = 'O'
+		           AND P.PAY_STAT = 'G016_30'
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		<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.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_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
 	</select>
 
@@ -1062,6 +1070,7 @@
 		         INNER JOIN TB_PAYMENT P
 		            ON P.ORD_NO = O.ORD_NO
 		           AND P.PAY_GB = 'O'
+		           AND P.PAY_STAT = 'G016_30'
 		         WHERE OCD.DEL_YN = 'N'
 		           AND O.DISP_YN = 'Y'
 		<choose>

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

@@ -436,6 +436,7 @@
 		     , PLAN_CONT_SQ
 		     ,TITLE 
 		     ,LINK_URL
+		     ,LINK_OPEN_GB
 		     ,NOTE 
 		     ,DISP_YN 
 		FROM TB_PLAN_CONTENTS TPC 
@@ -667,11 +668,12 @@
 		      ,PC.PLAN_SQ
 		      ,PC.TMPL_TYPE
 		      ,PC.TITLE
-		      ,PC.LINK_URL
 		      ,PC.DISP_YN
 		      ,PC.DISP_ORD
 		      ,PCI.PLAN_CONT_ITEM_SQ
 		      ,PCI.ITEM_VAL
+		      ,PCI.LINK_URL
+		      ,PCI.LINK_OPEN_GB
 		      ,PCI.DISP_ORD
 		      ,PCI.REVIEW_DISP_STDT
 		      ,PCI.REVIEW_DISP_EDDT
@@ -692,6 +694,7 @@
 		WITH TAB_PLAN_GOODS AS (
 		    SELECT P.PLAN_SQ                                                /*기획전번호*/
 		         , PC.LINK_URL 
+		         , PC.LINK_OPEN_GB
 		         , PC.DISP_ORD 
 		         , PC.TITLE 
 		         , PC.TMPL_TYPE 
@@ -764,6 +767,7 @@
 		     , PG.TITLE
 		     , PG.TMPL_TYPE
 		     , PG.LINK_URL
+		     , PG.LINK_OPEN_GB
 		     , PG.ITEM_VAL
 		     , 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명*/

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

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

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

@@ -3,15 +3,15 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : SigninFormWeb.html
- * @desc    : 로그인 Page
+ * @source  : SnsCallBackFormMob.html
+ * @desc    : SNS 콜백 화면 Page
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * 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>

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

@@ -137,8 +137,6 @@
 					<div class="opt_select">
 						<div class="opt_header">
 							<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>
 						</div>
 						<form class="form_wrap">

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

@@ -18,6 +18,7 @@
 	<!-- 즉시구매 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')}">
 		<div class="inner shotDelvSelect">
 			<div class="od_method">
@@ -668,10 +669,6 @@
 		</div>
 		<!-- //쿠폰사용안내 팝업 -->
 
-		<!-- 옵션변경 팝업 -->
-		<div id="optModifyPop01" class="popup_box optModifyPop optModifyPop01"></div>
-		<!-- //옵션변경 팝업 -->
-
 		<script th:inline="javascript">
 			var sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 			var totDcAmt = [[${order.totDcAmt}]];

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

@@ -81,6 +81,10 @@
 			</div>
 		</div>
 		<!-- //배송비 SAVE_팝업 -->
+
+		<!-- 옵션변경 팝업 -->
+		<div id="optModifyPop01" class="popup_box optModifyPop optModifyPop01"></div>
+		<!-- //옵션변경 팝업 -->
 	</main>
 
 	<script src="/ux/mo/js/swiper.min.js"></script>
@@ -179,6 +183,7 @@
 			count = count > maxOrdQty ? maxOrdQty : count;
 			$input.val(count);
 			$input.change();
+
 			//주문 최대 수량 이상 증가버튼 비활성화
 			if ($input.val() == maxOrdQty) {
 				$('.optModifyPop01 .number_count .plus').addClass('min_val');
@@ -188,8 +193,21 @@
 
 			return false;
 		}).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");
 			return false;
 		});
-		$("#couponInfoPop_close").click(function() {
+		$("#couponInfoPop_close").on("click", function() {
 			$("#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>
 		</div>
 		<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 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 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>
+						<!-- //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">
-								<!-- 이메일 형식이 바르지않을경우 -->
-								<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>
+						<!-- //case (비밀번호확인 틀렸을경우,비밀번호 일치할경우) -->
 					</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">
-							<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);">
 									<span>로그인</span>
 								</button>
@@ -157,27 +127,55 @@
 									<span>아이디 찾기</span>
 								</button>
 							</div>
+							<!-- //이미 가입되어있는 이메일인경우 -->
 						</div>
+						<!-- //case (이메일 형식이 바르지않을경우,이미 가입되어있는 이메일인경우) -->
 					</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>
 						</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>
-				</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>
-
 	</section>
 	<!-- ★ 컨텐츠 종료 -->
 </main>
@@ -185,7 +183,11 @@
 <script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
 <script th:inline="javascript">
 	/*<![CDATA[*/
-let custIdCheck = false;
+	const sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
+	const authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
+	let custParams = [[${custParams}]];
+
+	let custIdCheck = false;
 	let passwdCheck = false;
 	let emailCheck = false;
 	let authCheck = false;
@@ -324,6 +326,12 @@ let custIdCheck = false;
 	//	이메일 확인
 	$('#email').on('blur', function () {
 		const $failEmail = $('#failEmail');
+		const $dupEmail = $('#dupEmail');
+		const $dupEmailDiv = $('#dupEmailDiv');
+		$failEmail.hide();
+		$dupEmail.hide();
+		$dupEmailDiv.hide();
+
 		let email = $(this).val();
 		let validation;
 
@@ -363,7 +371,9 @@ let custIdCheck = false;
 
 	//휴대폰 인증
 	$('#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);
 		}
 	};
+
+	// 본인인증 후 데이터 입력 값 셋팅
+	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>
 </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="t_c mt10">신규 가입 시 할인 쿠폰 등<br> 다양한 혜택을 받으실 수 있습니다.</p>
 					</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>
 				</form>
 				<div class="t_c sns_wrap">
-					<h3 class="sr-only">간편로그인</h3>
+					<h5>간편하게 시작하기</h5>
 					<ul class="login_utill">
 						<li class="lu_kakao">
 							<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}">
 		<input type="hidden" name="sEncData" th:value="${sEncData}"/>
 		<input type="hidden" name="authMethod" th:value="${authMethod}"/>
+		<input type="hidden" name="custParams" th:value="${custParams}"/>
 	</form>
 <script th:inline="javascript">
 	/*<![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="EncodeData" th:value="${sEncData}" />
 	<input type="hidden" name="param_r1" th:value="${redirectUrl}"/>
+	<input type="hidden" name="param_r2" th:value="${custParams}"/>
 </form>
 
 <script th:inline="javascript">

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

@@ -77,18 +77,18 @@
 				</th:block>
 				<th:block th:each="cardInfo, status : ${cardInfoList}" >
 				<div class="benefit_blk"  th:if="${cardInfo.prmtGb == 'B' and not #strings.isEmpty(cardInfo.note) and cardInfo.rownum ==  1}">
-					<th:block >
 					<h6>부분 무이자 할부</h6>
 					<th:block th:utext="${#strings.unescapeJava(#strings.escapeJava(cardInfo.note))}"></th:block>
+				</div>
+				</th:block>
+				<div class="benefit_blk" >
 					<div class="info_txt">
 						<ul>
 							<li>무이자할부는 행사기간 동안 실 결제금액 기준으로 가능</li>
 							<li>법인, 체크, 기프트 카드는 부분 무이자 할부 제외</li>
 						</ul>
 					</div>
-					</th:block>
 				</div>
-				</th:block>
 			</div>
 		</div>
 	</div>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 2019
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html


+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailDeliveryFormMob.html

@@ -27,7 +27,7 @@
 				<h3>배송비</h3>
 				<p class="dot">
 					<th:block th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
-					<th:block th:if="${goodsInfo.delvFee > 0}" th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>
+					<th:block th:if="${goodsInfo.delvFee > 0}" th:text="|${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}원|" ></th:block>
 					<th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
 				</p>
 			</div>

+ 16 - 14
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -724,7 +724,7 @@
 											</div>
 										</div>
 										<div class="form_field"> 
-											<div class="select_custom item_opt2 item_opt2_1" th:classappend="${goodsInfo.goodsCd}"  disabled>
+											<div class="select_custom item_opt2 item_opt2_1" th:classappend="${goodsInfo.goodsCd}"  disabled th:attr="qty=${goodsInfo.minOrdQty}">
 												<div class="combo">
 													<div class="select">선택</div>
 													<ul class="list" th:id="|goodsOpt2${goodsInfo.goodsCd}|" >
@@ -795,10 +795,13 @@
 						<button class="gift">
 							<span><span>선물해보세요!</span></span>
 						</button>
-						<th:block  th:if="${goodsInfo.stockQty > 0}">
+						<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 							<button type="button" class="cart" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 							<button type="button" class="buyNow" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 						</th:block>
+						<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
+						<button class="cantbuying" style="display:block;">SOLD OUT</button>
+						</th:block>
 					</div>
 				</div>
 			</div>
@@ -817,11 +820,11 @@
 					th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">위시리스트</button>
 		</div>
 		<div class="prd_buy">
-			<th:block  th:if="${goodsInfo.stockQty > 0}">
+			<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 			<button type="button" class="buying btPop_auto">구매하기</button>
 			</th:block>
-			<th:block  th:unless="${goodsInfo.stockQty > 0}">
-			<button type="button" class="cantbuying">SOLD OUT</button>
+			<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
+			<button type="button" class="cantbuying" style="display:block;">SOLD OUT</button>
 			</th:block>
 		</div>
 	</div>
@@ -1242,7 +1245,7 @@
 			if (result.dataList != null && result.dataList.length > 0) {
 				let tag = "";
 				let $obj = null;
-				
+				let qty = 0; // 구성수량
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_1');	
@@ -1255,13 +1258,12 @@
 					}else{
 						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_5');
 					}
-					
+					qty = $obj.parent().parent().find('.select_custom').attr('qty'); // 구성수량
 				}else{
 					$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_1');
+					qty = $obj.attr('qty'); // 구성수량
 				}	
 				
-				let qty = $obj.parent().parent().find('.select_custom').attr('qty'); // 구성수량
-				
 				$.each(result.dataList, function(idx, item) {
 					if (idx == 0){
 						//$obj = $('#goodsOpt2'+item.goodsCd);
@@ -1333,7 +1335,7 @@
 		let maxOrdQty = 0;
 		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 			minOrdQty = parseInt($("#cartForm  input[name=minOrdQty]").val());
@@ -1371,7 +1373,7 @@
 		let maxOrdQty = parseInt($("#cartForm  input[name=maxOrdQty]").val());
 		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 		}else{
@@ -1384,12 +1386,12 @@
 		let alertMsg = '';
 		
 		if (ea < minOrdQty) {
-			alertMsg ="최소 주문 가능 수량은 "+minOrdQty+"개 입니다.";
+			alertMsg = minOrdQty+"개 부터 구매 가능합니다.";;
 			ea = minOrdQty;
 		}
 
 		if (ea > maxOrdQty) {
-			alertMsg = "최대 주문 가능 수량은 "+maxOrdQty+"개 입니다.";
+			alertMsg = maxOrdQty+"개 까지만 구매 가능합니다.";
 			ea = maxOrdQty;
 		}
 		
@@ -1472,7 +1474,7 @@
 
 		if (goodsType == 'G056_N' && selfGoodsYn == 'Y' ){
 			if (gagajf.isNull($("#cartForm  input[name=optCd2]").val())) {
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return;
 			}
 		

+ 31 - 52
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailQnaFormMob.html

@@ -17,7 +17,7 @@
 <!-- 상품문의 리스트 내용 -->
 <form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 <input type="hidden" name="pageNo"  value ="1"/>
-<input type="hidden" name="pageSize" value ="20"/>
+<input type="hidden" name="pageSize" value ="3"/>
 <input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 <div class="pd_qnalist">
 	<div class="info_txt">
@@ -36,10 +36,10 @@
 				<input id="except_secret" type="checkbox"><label for="except_secret" onclick="fnGetList();"><span>비밀글제외</span></label>
 				<input  type="hidden" name="secretYn" >
 			</div>
-			<div class="ui_row" id="infiniteContainer">
-				<div class="foldGroup case2" id="listBoxOuter">
+			<div class="ui_row">
+				<div class="foldGroup case2" >
 					<!-- list2 -->
-					<ul  id="listBox">
+					<ul  id="ulGoodsQna">
 					</ul>
 					<!-- //list2 -->
 				</div>
@@ -55,55 +55,37 @@
 			</div>
 		</div>
 		<!-- //나열조건결과 없을 때 노출 내용 -->
+		<div class="btn_group_flex"  style="display:none;">
+			<div>
+				<button type="button" class="btn btn_default" id="btnMore">
+					<span>더보기</span>
+				</button>
+			</div>
+		</div>
 	</div>
 	<div class="btn_group_flex">
 		<div><button type="button" class="btn btn_dark" id="btn_pdQnaWrite_pop" th:onclick="cfGoodsQngCreate([[${goodsInfo.goodsCd}]] )"><span>상품 문의하기</span></button></div>
 	</div>
 </div>
 </form>
-<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
-<script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
-	$(function() { gagaInfiniteScroll.getHistory(); });
-	
-	// 상품 검색
-	var fnGetInfiniteScrollDataList = function(pageNum) {
-	
+	var fnGoodsQnaListSearch = function() {
+
 		$('#goodsQnaForm  input[name="secretYn"]').val('');
 		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){
 			$('#goodsQnaForm  input[name="secretYn"]').val('N');
 		}
 		
-		$("#goodsQnaForm input[name=pageNo]").val(pageNum+1);
-		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
-		gagajf.ajaxFormSubmit("/goods/qna/list", document.goodsQnaForm,  gagaInfiniteScroll.jsonToHtml);
-	}
-	
-	var fnDrawInfiniteScrollData = function(result, pageNum){
-
-		if (result.dataList != null && result.dataList.length > 0) {
-			var htm = fnCreateGoodsQnaList(result);
-			gagaInfiniteScroll.draw(htm);
-		}else {
-			if($("#goodsQnaForm input[name=pageNo]").val()==1){
-				$('#goodsQnaForm').find('.nodata').show();
-			}
-			gagaInfiniteScroll.draw('not');
-		}
+		gagajf.ajaxFormSubmit($('#goodsQnaForm').prop('action'), '#goodsQnaForm', fnGetListCallback);
 	}
 
-	var fnGoodsQnaListSearch = function() {
-		fnGoodsQnaInfiniteScrollInit();
-		gagaInfiniteScroll.getHistory();
-	}
+	var fnGetListCallback = function(result) {
 
-	var fnCreateGoodsQnaList = function(result) {
-
-		let tag = '';
 		$.each(result.dataList, function(idx, item) {
 			$('#goodsQnaForm').find('.nodata').hide();
+			let tag = '';
 			tag += '<li class="';  // <!-- 내가 쓴 글에 클래스 my_qna 추가 -->
 			if (item.selfGb == 1){
 				tag += ' my_qna';	
@@ -151,29 +133,26 @@
 			tag += '	</div>\n';
 			tag += '</li>\n';
 			
+			$('#ulGoodsQna').append(tag);
 		});
-		return tag;
-	}
-
-	// 인피니트 스크롤 초기화
-	var fnGoodsQnaInfiniteScrollInit = function(){
-		// sessionStorage.removeItem(document.location.href);
-		History.replaceState(null, null);
-		gagaInfiniteScroll.pageStatus = {
-				  pageNum : []      // [0,1,2...] 로드된 페이지 (Array)
-				, loadPage : 0      // 로드할 페이지
-				, loadAlign : 'not' // 로드 상태(prev, next, not)
-				, historyScroll : 0 //
-				, nowPage : null    // 현재 페이지
-				, pageUrl : {       // page url
-				}
+		
+		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
+			$('#btnMore').parent().parent().show();
+			$('#goodsQnaForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
+		} else {
+			$('.nodata').show();
+			$('#btnMore').parent().parent().hide();
 		}
-		//History 초기화
-		$("#listBox").html("");
 	}
 	
+	// 더보기
+	$('#btnMore').on('click', function() {
+		fnGoodsQnaListSearch();
+	});
+	
+	
 	$(document).ready( function() {
-		//fnGoodsQnaListSearch();
+		fnGoodsQnaListSearch();
 	});
 	
 	

+ 274 - 33
src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html

@@ -75,26 +75,19 @@
 					<div class="item_blk">
 						<div class="item_prod">
 							<div class="item_state">
-								<a href="#none" class="itemLink">
-									<div class="itemPic">
-										<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-									</div>
-									<p class="itemBrand">NBA 키즈</p>
-									<div class="itemName">
-										<span class="tit_option">[상품1]</span>
-										유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업
-									</div>
-									<p class="itemText">
-										<span class="tx1">(리뷰 9,999+)</span>
-									</p>
-								</a>
+								<a href="javascript:void(0)" class="itemLink">
+								<div class="itemPic">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+								</div>
+								<div class="itemName">선택</div>
+							</a>
 							</div>
 						</div>
 					</div>
 					<!-- //아이템 -->
 				</div>
 			</div>
-			<div class="cont_body"></div>
+			<div class="cont_body" id="goodsDealReview"></div>
 		</div>
 		<!-- //상품리뷰 리스트 -->
 		<!-- 상품문의 리스트 -->
@@ -106,18 +99,11 @@
 				<div class="item_blk">
 					<div class="item_prod">
 						<div class="item_state">
-							<a href="#none" class="itemLink">
+							<a href="javascript:void(0)" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
-								<p class="itemBrand">NBA 키즈</p>
-								<div class="itemName">
-									<span class="tit_option">[상품1]</span>
-									유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업
-								</div>
-								<p class="itemText">
-									<span class="tx1">(문의 9,999+)</span>
-								</p>
+								<div class="itemName">선택</div>
 							</a>
 						</div>
 					</div>
@@ -125,7 +111,7 @@
 				<!-- //아이템 -->
 			</div>
 			</div>
-		<div class="cont_body"></div>
+		<div class="cont_body"  id="goodsDealQna"></div>
 		</div>
 		<!-- //상품문의 리스트 -->
 		<!-- 배송/교환/반품 정보 -->
@@ -137,15 +123,11 @@
 				<div class="item_blk">
 					<div class="item_prod">
 						<div class="item_state">
-							<a href="#none" class="itemLink">
+							<a href="javascript:void(0)" class="itemLink">
 								<div class="itemPic">
-									<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdDetail1.jpg">
-								</div>
-								<p class="itemBrand">NBA 키즈</p>
-								<div class="itemName">
-									<span class="tit_option">[상품1]</span>
-									유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업
+									<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 								</div>
+								<div class="itemName">선택</div>
 							</a>
 						</div>
 					</div>
@@ -153,15 +135,274 @@
 				<!-- //아이템 -->
 			</div>
 			</div>
-		<div class="cont_body"></div>
+		<div class="cont_body" id="goodsDealDelivery" ></div>
 		</div>
 		<!-- //배송/교환/반품 정보 -->
 	</div>
 </div>
+
+<!-- 딜리뷰제품리스트팝업 -->
+<div class="pd_pop list_pop pd_pop pd_listReview_pop" id="listReviewPop">
+	<div class="modal_content">
+		<div class="close">닫기</div>
+		<div class="listpop_body">
+			<!-- 아이템선택 -->
+			<div class="deal_list_select">
+				<ul class="list">
+					<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+						th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+						th:onclick="fnSelGoodsDealReview([[${goodsInfo.compsGoodsCd}]])">
+						<div class="item_prod" th:attr="goodsCd=${goodsInfo.compsGoodsCd}">
+							<div class="item_state active">
+								<a href="javascript:void(0);" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=331'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									</div>
+									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+									<div class="itemText">
+										<span class="tx1">(리뷰 <th:block  th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</span>
+									</div>
+								</a>
+								<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+							</div>
+						</div>
+					</li> 
+				</ul>
+			</div>
+			<!-- //아이템선택 -->
+		</div>
+	</div>
+</div>
+<!-- //딜리뷰제품리스트팝업 -->
+
+<!-- 딜문의제품리스트팝업 -->
+<div class="pd_pop list_pop pd_pop pd_listQna_pop" id="listQnaPop">
+	<div class="modal_content">
+		<div class="close">닫기</div>
+		<div class="listpop_body">
+			<!-- 아이템선택 -->
+			<div class="deal_list_select">
+				<ul class="list">
+					<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+						th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+						th:onclick="fnSelGoodsDealQna([[${goodsInfo.compsGoodsCd}]])">
+						<div class="item_prod" th:attr="goodsCd=${goodsInfo.compsGoodsCd}">
+							<div class="item_state active">
+								<a href="javascript:void(0);" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=331'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									</div>
+									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+									<p class="itemText">
+										<span class="tx1">(문의 9,999+)</span>
+									</p>
+									<div class="itemText">
+										<span class="tx1">(문의 <th:block  th:text="${(goodsInfo.goodsQnaCnt <= 9999) ? #numbers.formatInteger(goodsInfo.goodsQnaCnt, 0,'COMMA')  : '9,999+'}"></th:block>)</span>
+									</div>
+								</a>
+								<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+							</div>
+						</div>
+					</li>  
+				</ul>
+			</div>
+			<!-- //아이템선택 -->
+		</div>
+	</div>
+</div>
+<!-- //딜문의제품리스트팝업 -->
+
+<!-- 딜배송제품리스트팝업 -->
+<div class="pd_pop list_pop pd_pop pd_listDelivery_pop" id="listDeliveryPop">
+	<div class="modal_content">
+		<div class="close">닫기</div>
+		<div class="listpop_body">
+			<!-- 아이템선택 -->
+			<div class="deal_list_select">
+				<ul class="list">
+					<li th:each="goodsInfo, status : ${goodsDealComposeList}" 
+						th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}"
+						th:onclick="fnSelGoodsDealDelivery([[${goodsInfo.compsGoodsCd}]])">
+						<div class="item_prod" th:attr="goodsCd=${goodsInfo.compsGoodsCd}">
+							<div class="item_state active">
+								<a href="javascript:void(0);" class="itemLink">
+									<div class="itemPic">
+										<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=331'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+									</div>
+									<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
+									<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
+								</a>
+								<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+							</div>
+						</div>
+					</li> 
+				</ul>
+			</div>
+			<!-- //아이템선택 -->
+		</div>
+	</div>
+</div>
+<!-- //딜배송제품리스트팝업 -->
+
+
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
+	
+	// 구성 상품 상세 상품평
+	var fnGoodsDetailReview = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/review/frame", "html", "goodsDealReview", params);
+	}
+	
+	// 상품평 상품선택시
+	var fnSelGoodsDealReview = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailReview(params);  // ajax html
+		
+		$('.pd_pop.pd_listReview_pop').find('.deal_list_select .list li').each(function() { 
+			
+			if (goodsCd == $(this).find('input[name=selectGoods]').val()){
+				let tag = $(this).parent().parent().find('.item_prod').parent().html();
+				$('.tab_detail_cont.pd_review .item_blk').html(tag);
+			}
+		});
 
+	}
+	
+	// 구성 상품 상세 문의
+	var fnGoodsDetailQna = function(params) {
+		gagajf.ajaxSubmit("/goods/detail/qna/frame", "html", "goodsDealQna", params);
+	}
+	
+	// 문의 상품선택시
+	var fnSelGoodsDealQna = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailQna(params);  // ajax html
+		
+		$('.pd_pop.pd_listQna_pop').find('.deal_list_select .list li').each(function() { 
+			if (goodsCd == $(this).find('input[name=selectGoods]').val()){
+				$('.pd_pop.pd_listQna_pop').find('.deal_list_select .list li').removeClass('selected');
+				$(this).addClass('selected');
+				let tag = $(this).html();
+				$('.tab_detail_cont.pd_qnalist .item_blk').html(tag);
+			}
+		});
+
+	}
+	
+	// 구성 상품 상세 배송정보
+	var fnGoodsDetailDelivery = function(params) {
+		
+		gagajf.ajaxSubmit("/goods/detail/delivery/frame", "html", "goodsDealDelivery", params);
+	}
+	
+	// 배송정보 상품선택시
+	var fnSelGoodsDealDelivery = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDetailDelivery(params);  // ajax html
+		
+		$('.pd_pop.pd_listDelivery_pop').find('.deal_list_select .list li').each(function() { 
+			
+			if (goodsCd == $(this).find('input[name=selectGoods]').val()){
+				$('.pd_pop.pd_listDelivery_pop').find('.deal_list_select .list li').removeClass('selected');
+				$(this).addClass('selected');
+				let tag = $(this).html();
+				$('.tab_detail_cont.pd_delivery .item_blk').html(tag);
+			}
+		});
+		
+	}
+	
+	
+	// 상품선택시 상품상세내용 변경
+	var fnOpenGoodsDealDetail = function(goodsCd, compsGoodsCd){
+		
+		/* // 콤보박스 선택 처리
+		let $selObj = $('#layer_goods_deal_detail').find('.select_custom.deal_opt_item');
+		
+		// 탭별 선택시 기본 상품 설정
+		let selIdx = 0;
+		let selfGoodsYn = '';
+		let currPrice = 0;
+		let soldoutYn = "N";
+		$selObj.find('.combo .list li').each(function() { 
+			if ($(this).find('input[name=selectGoods]').val() == compsGoodsCd){
+				selfGoodsYn = $(this).find('input[name=selectGoods]').attr('selfGoodsYn');
+				currPrice = $(this).find('input[name=selectGoods]').attr('currPrice');
+				if ($(this).find('.item_prod').hasClass('soldout')) soldoutYn = "Y";
+				return false;
+			}
+			selIdx ++;
+		});
+		
+		$selObj.find('.combo .list li').eq(selIdx).trigger("click"); */
+		
+		// 상세노출
+		fnGoodsDealDesc(compsGoodsCd);
+/* 		
+		if (!soldout){
+			// 옵션1 처리
+			fnOption1("layer", compsGoodsCd, currPrice, selfGoodsYn);	
+		}
+ */		
+		
+	/* 	let $obj = $('.pd_detail .opt_result'); 
+		let $taget = $('.full_pop_fix_r .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
+		
+		$('body').addClass('lock');
+		$("#layer_goods_deal_detail").show();  */
+		
+	}
+	
+	// 상세 레이어 창닫기
+	var fnCloseGoodsDealDetail = function(){
+		// 선택값 본창에 넘기기
+		/* let $obj = $('.full_pop_fix_r .opt_result');
+		let $taget = $('.pd_detail .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
+		
+		$('body').removeClass('lock');
+		$('#goodsDealDetail').html('');
+		$("#layer_goods_deal_detail").hide(); */
+	}
+	
+	// 구성 상품 상세 
+	var fnGoodsDealDetail2 = function(params) {
+		
+		var Param = new Object();
+		var str = '<div class="modal pop_full fade pd_pop pd_descrp_pop" id="layer_goods_deal_desc" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+
+		if ($('#layer_goods_deal_desc').length == 0) {
+			$('body').append(str);
+		}
+
+		cfOpenLayer(_'/goods/deal/detail/info/frame', 'layer_goods_deal_desc' ,params );
+	
+	}
+
+	
+	// 레이어에서 상품선택시
+	var fnGoodsDealDesc = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		params.adminYn = "Y";
+		fnGoodsDealDetail2(params);  // ajax html
+	}
+	
+	$(document).ready( function() {
+		
+	});
+	
 	
 /*]]>*/
 </script>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsQnaFormMob.html

@@ -33,7 +33,7 @@
 			</div>
 			<!-- //해당상품 -->
 		</div>
-		<div class="modal-body" id="goodsDealQna" data-id="layer_infinite_item" >
+		<div class="modal-body" id="goodsDealQna">
 		</div>
 		<div class="modal-footer">
 			

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewPhotoFormMob.html

@@ -83,11 +83,11 @@
 		}
 		
 		if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
-			$('#btnMore').parent().show();
+			$('#btnMore').parent().parent().show();
 			$('#goodsReviewPhotoForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
 		} else {
 			$('.review_last').show();
-			$('#btnMore').parent().hide();
+			$('#btnMore').parent().parent().hide();
 		}
 	}
 	

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

@@ -216,15 +216,27 @@ function useGiftcard(result) {
 		let useGiftcard = giftcardUseList[i];
 		tmtbHtml += '	<li>                                                               ';
 		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_time">'+useGiftcard.regDt+'</span>          ';
 		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 += '	</li>                                                              ';
 	}

+ 220 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypagePointFormMob.html

@@ -0,0 +1,220 @@
+<!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/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypagePointFormMob.html
+ * @desc    : 마이페이지 > 포인트 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.19   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main role="" id="" class="container my">
+			<section class="content point">
+
+				<div class="inner">
+					<div class="highlight_area">
+						<div class="have_amount">
+							<div class="total_amount">
+								보유 포인트&nbsp;<span><em th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</span>
+							</div>
+						</div>
+					</div>
+					<div class="have_amount">
+						<dl>
+							<div>
+								<dt>적립 예정 포인트</dt>
+								<dd><em th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+							</div>
+						</dl>
+						<dl>
+							<div>
+								<dt>한 달 이내 소멸 예정<span class="tag primary_line">D-<em>30</em></span></dt>
+								<dd><em th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+							</div>
+						</dl>
+					</div>
+				</div>
+				
+				<div class="inner wide">
+					<div class="select_box ">
+						<div class="form_field">
+							<div class="select_custom month sup">
+								<!-- 210408_ 수정 : 스크립트없는 기본 셀렉터 사용으로 변경 -->
+								<div class="select pure">
+									<select name="month" id="month" onchange='fnChangeDate(this.value)' >
+									</select>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="tabWrap">
+						<ul class="tabIndex">
+							<li id="allPointList"><a href="javascript:void(0);">전체 내역</a></li>
+							<li id="accumulatePointList"><a href="javascript:void(0);">적립 내역</a></li>
+							<li id="usePointList"><a href="javascript:void(0);">사용 내역</a></li>
+						</ul>
+						<div class="tabContents">
+							<div class="tab_cont active" id="pointAjaxList">
+	
+								<!-- // tab_cont End -->
+							</div>
+						</div>
+					</div>
+				</div>
+
+			</section>
+		</main>
+<script th:inline="javascript">
+let accumulatePointList = [[${accumulatePointList}]];
+let usePointList = [[${usePointList}]];
+let allPointList = [[${allPointList}]];
+let date = [[${date}]];
+var year = date[0].year;
+var month = date[0].month;
+
+//동적으로 날짜 년도 append
+function appendYear() {
+	for (var i = 0; i < date.length; i++) {
+		$("#month").append(	"<option value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" + date[i].month + "월 </option>")
+	}
+	//$(".month").append("<option class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년" + date[0].month + "월 </option>"); // 현재년도 선택 */ 
+}
+appendYear($("#month"));
+
+//날짜변경 이벤트
+var fnChangeDate = function(param) {
+	let url = '/mypage/allpoint/list';
+	
+	
+	//$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
+	//var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
+	
+	// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
+	let data = {
+		searchDt : year + "" + month,
+		month : month
+	};
+	var jsonData = JSON.stringify(data);
+	
+	gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
+
+			accumulatePointList = result.accumulatePointList;
+			usePointList = result.usePointList;
+			allPointList = result.allPointList;
+			// 클릭상태 확인
+			if($("#accumulatePointList").hasClass("active")){
+				$("#accumulatePointList").click();
+				// 첫화면 전체내역 조회
+				fnGetPointTableInfo(result.accumulatePointList);
+			}else if($("#usePointList").hasClass("active")){
+				$("#usePointList").click();
+				fnGetPointTableInfo(usePointList);
+			}else if($("#allPointList").hasClass("active")) {
+				$("#allPointList").click();
+				fnGetPointTableInfo(allPointList);
+			}
+	});
+}
+
+// HTML 그리기
+var fnGetPointTableInfo = function(param) {
+	let tag = "";
+	if(param != null && param.length > 0){
+		$.each(param, function(idx,item){
+			tag += '<ul>';
+			tag += ' <li>';
+			tag += ' 	<div>';
+			if(item.pntAmt > 0){
+				tag += '		<span class="tag primary">적립</span>';
+			}else{
+				tag += ' 		<span class="tag deepgray">차감</span>';
+			}
+			
+			tag += ' 		<span class="tag_name">'+item.occurGb+'</span>';
+			tag += ' 		<span class="txt_content">'+ item.occurDtlDesc + '</span>';
+			tag += ' 		<span class="txt_time">'+item.pntUploadDt+'</span>';
+			tag += ' 	</div>';
+			tag += ' 	<div>';
+			if(item.pntAmt > 0){
+				tag += '		<span class="amount_plus">';
+				tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
+				tag += '		</span>';
+			}else{
+				tag += '		<span class="c_primary">';
+				tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
+				tag += '		</span>';
+			}
+			tag += ' 	</div>';
+			tag += ' </li>';
+			tag += '</ul>';
+		});
+		$("#pointAjaxList").html(tag);
+	}
+}
+
+// 전체내역 조회
+$("#allPointList").click(function(){
+
+		$("#accumulatePointList").removeClass("active");
+		$("#usePointList").removeClass("active");
+		
+		$("#allPointList").addClass("active");
+		//$("#plusMinus").text("증감/차감");
+		
+		fnGetPointTableInfo(allPointList);
+});
+
+// 적립내역 조회
+$("#accumulatePointList").click(function(){
+
+		$("#allPointList").removeClass("active");
+		$("#usePointList").removeClass("active");
+		
+		$("#accumulatePointList").addClass("active");
+		//$("#plusMinus").text("증감");
+	
+		fnGetPointTableInfo(accumulatePointList);
+});
+
+// 사용내역 조회
+$("#usePointList").click(function(){
+	
+	$("#accumulatePointList").removeClass("active");
+	$("#allPointList").removeClass("active");
+	
+	$("#usePointList").addClass("active");
+	//$("#plusMinus").text("차감");
+	
+	fnGetPointTableInfo(usePointList);
+});
+
+$(document).ready(function() {
+	// 전체내역 표시
+	$("#allPointList").trigger("click");
+	
+
+	// 셀렉트박스 활성화
+	$('.select_custom').each(function(index) {
+		var selecter01 = new sCombo($(this));
+	});
+
+	// 셀렉트박스 데이터 설정
+	fnChangeDate();
+
+});
+
+</script>
+	</th:block>
+
+</body>
+</html>

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

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

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

@@ -187,6 +187,8 @@
 						</th:block>
 					</th:block>
 					<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">
 							<span class="title">수량</span>
 						</div>

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

@@ -572,19 +572,19 @@
 			temp.optCd 			= "13256848-2";
 			temp.goodsQty 		= 3;
 			temp.goodsType 		= "G056_N";
-			temp.cartGb 		= "G";
+			temp.cartGb 		= "C";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.ithrCd 		= "G027_ZZZ";
 			temp.contentsLoc 	= "G028_YYY";
 			temp.planDtlSq 		= "123";
 			compsList.push(temp);
 
-			temp 			= new Object;
+			temp 				= new Object;
 			temp.goodsCd 		= "AOW13QDM76";
 			temp.optCd 			= "13256848-6";
 			temp.goodsQty 		= 3;
 			temp.goodsType 		= "G056_N";
-			temp.cartGb 		= "G";
+			temp.cartGb 		= "C";
 			temp.afLinkCd 		= "afLinkCd";
 			temp.ithrCd 		= "G027_ZZZ";
 			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){
 		var $input = $(this).parent().find('input');
 		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.change();
 		//수량1개 이하 감소버튼 비활성화
-		if ($input.val() == 1) {
+		if ($input.val() == minOrdQty) {
 			$('.optModify_pop .number_count .minus').addClass('min_val');
 		}
+
+		$('.optModify_pop .number_count .plus').removeClass('min_val');
+
 		return false;
 	}).on('click','.optModify_pop .number_count .plus',function(e){
 		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();
-		//수량2개 이상부터 감소버튼 활성화
+
+		//주문 최대 수량 이상 증가버튼 비활성화
+		if ($input.val() == maxOrdQty) {
+			$('.optModify_pop .number_count .plus').addClass('min_val');
+		}
+
 		$('.optModify_pop .number_count .minus').removeClass('min_val');
 		return false;
 	}).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,""));
 	});
 
     //상품옵션변경 팝업 > 컬러선택 표기

+ 3 - 3
src/main/webapp/WEB-INF/views/web/goods/CardPrmtFormWeb.html

@@ -84,18 +84,18 @@
 				</th:block>
 				<th:block th:each="cardInfo, status : ${cardInfoList}" >
 				<div class="benefit_blk"  th:if="${cardInfo.prmtGb == 'B' and not #strings.isEmpty(cardInfo.note) and cardInfo.rownum ==  1}">
-					<th:block >
 					<h6>부분 무이자 할부</h6>
 					<th:block th:utext="${#strings.unescapeJava(#strings.escapeJava(cardInfo.note))}"></th:block>
+				</div>
+				</th:block>
+				<div class="benefit_blk" >
 					<div class="info_txt">
 						<ul>
 							<li>무이자할부는 행사기간 동안 실 결제금액 기준으로 가능</li>
 							<li>법인, 체크, 기프트 카드는 부분 무이자 할부 제외</li>
 						</ul>
 					</div>
-					</th:block>
 				</div>
-				</th:block>
 			</div>
 		</div>
 	</div>

+ 7 - 6
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -195,7 +195,7 @@
 									<div class="form_field">
 										<div class="select_custom deal_opt1" disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션1</div>
 												<ul class="list" id="goodsDealOptUp1">
 													<!--  옵션 1 -->
 												</ul>
@@ -205,7 +205,7 @@
 									<div class="form_field">
 										<div class="select_custom deal_opt2" disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션2</div>
 												<ul class="list" id="goodsDealOptUp2">
 													<!--  옵션 2 -->
 												</ul>
@@ -228,7 +228,7 @@
 							</div>
 							<div class="btn_box">
 								<div class="btn_group_block ui_row">
-								<th:block  th:if="${goodsInfo.stockQty > 0}">
+								<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_6">
 										<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 									</div>
@@ -236,7 +236,7 @@
 										<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 									</div>
 								</th:block>
-								<th:block  th:unless="${goodsInfo.stockQty > 0}">
+								<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_12">
 										<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 									</div>
@@ -657,12 +657,12 @@
 		let optCd =  $(obj).attr('optCd');
 		let alertMsg = '';
 		if (ea < minOrdQty) {
-			mcxDialog.alert("최소 주문 가능 수량은 "+minOrdQty+"개 입니다.");
+			alertMsg = minOrdQty+"개 부터 구매 가능합니다.";
 			ea = minOrdQty;
 		}
 
 		if (ea > maxOrdQty) {
-			mcxDialog.alert("최대 주문 가능 수량은 "+maxOrdQty+"개 입니다.");
+			alertMsg = maxOrdQty+"개 까지만 구매 가능합니다.";
 			ea = maxOrdQty;
 		}
 
@@ -779,6 +779,7 @@
 		
 		var params = new Object();
 		params.goodsCd = [[${params.goodsCd}]];
+		params.colorCd = [[${params.colorCd}]];
 		params.viewDt = [[${params.viewDt}]];
 		params.preview = [[${params.preview}]];
 		params.adminYn = [[${params.adminYn}]];

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

@@ -39,7 +39,7 @@
 						</th>
 						<td>
 							<th:block th:if="${goodsInfo.delvFee <= 0}">무료배송</th:block>
-							<th:block th:if="${goodsInfo.delvFee > 0}" th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>
+							<th:block th:if="${goodsInfo.delvFee > 0}" th:text="|${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}원|" ></th:block>
 							<th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
 						</td>
 					</tr>

+ 47 - 30
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -222,7 +222,7 @@
 										<div class="select_custom item_opt1"  th:classappend="${'item_opt1_'+status.count +' '+goodsCompose.compsGoodsCd}" 
 																			th:if="${goodsCompose.goodsOption1List != null and !goodsCompose.goodsOption1List.empty}" >
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션1</div>
 												<ul class="list">
 													<th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
 													<li class="selected" th:id="|selfGoodsOpt1${goodsCompose.compsGoodsCd}|" th:if=${optionStatus.first}>선택</li> 
@@ -241,7 +241,7 @@
 									<div class="form_field">
 										<div class="select_custom item_opt2" th:classappend="${'item_opt2_'+status.count +' '+goodsCompose.compsGoodsCd}"  disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션2</div>
 												<ul class="list" th:id="|goodsOpt2${goodsCompose.compsGoodsCd}|" >
 													<!-- 옵션2 -->
 												</ul>
@@ -262,7 +262,7 @@
 									<div class="form_field">
 										<div class="select_custom item_opt1 item_opt1_1" th:classappend="${goodsInfo.goodsCd}" >
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션1</div>
 												<ul class="list">
 													<li class="selected" th:id="|selfGoodsOpt1${goodsInfo.goodsCd}|" >선택</li> 
 													<th:block th:each="goodsOption, optionStatus : ${goodsOption1List}" >
@@ -279,7 +279,7 @@
 									<div class="form_field">
 										<div class="select_custom item_opt2 item_opt2_1" th:classappend="${goodsInfo.goodsCd}"  disabled>
 											<div class="combo">
-												<div class="select">선택</div>
+												<div class="select">옵션2</div>
 												<ul class="list" th:id="|goodsOpt2${goodsInfo.goodsCd}|" >
 													<!-- 옵션2 -->
 												</ul>
@@ -298,14 +298,14 @@
 										<span class="title">수량</span>
 									</div>
 									<div class="number_count">
-										<span class="minus" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>
-										<input type="text" name="cea" maxlength="3" style="ime-mode:disabled" th:value="${goodsInfo.minOrdQty}" onblur="fnChangeOrderEa(this)" data-valid-type="numeric">
+										<span class="minus min_val" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>
+										<input type="text" name="cea" maxlength="3" style="ime-mode:disabled" th:value="${goodsInfo.minOrdQty}" readonly >
 										<input type="hidden" name="coption" value=""   th:attr="price=${goodsInfo.currPrice}">
 										<span class="plus" onclick="fnAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>
 									</div>
 								</div>
 							</div>
-							<div class="price_box">
+							<div class="price_box" style="display:none;">
 								<p class="number">
 									총&nbsp;<span id="goodsTotalQty">0</span>개
 								</p>
@@ -317,7 +317,7 @@
 							</div>
 							<div class="btn_box">
 								<div class="btn_group_block ui_row">
-								<th:block  th:if="${goodsInfo.stockQty > 0}">
+								<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_6">
 										<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 									</div>
@@ -325,14 +325,14 @@
 										<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 									</div>
 								</th:block>
-								<th:block  th:unless="${goodsInfo.stockQty > 0}">
+								<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 									<div class="ui_col_12">
 										<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 									</div>
 								</th:block>
 								</div>
 							</div>
-							<div class="npay_box">
+							<div class="npay_box" style="display:none;">
 								<a href="">네이버id로 간편구매~</a>
 							</div>
 							<div class="exinfo_box">
@@ -423,8 +423,8 @@
 					</div>
 					<div class="desc_character" th:if="${goodsInfo.goodsSpecialDesc != null  and !goodsInfo.goodsSpecialDesc.empty}"> <!-- 상품특징 -->
 						<span class="tit_desc">상품특징</span>
-						<p class="ptxt01" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsSpecialDesc))}">
-							- 지퍼플러 장식을 더해 완성도를 높여줌
+						<p class="ptxt01">
+							<th:block th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsSpecialDesc))}"></th:block>
 						</p>
 					</div>
 				</div>
@@ -803,6 +803,7 @@
 				$("#cartForm  input[name=cea]").attr("readonly",false);
 				$("#cartForm  input[name=stock]").val(itemCnt);
 	
+				$('.price_box').show();
 				fnSetTotalPrice();
 			}); 
 		}
@@ -811,9 +812,9 @@
 	// 수량 변경 클릭
 	var fnAdjustOrderEa = function(obj) {
 
-		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
+		if("G056_N" == $("#cartForm  input[name=goodsType]").val() && "Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 		}else{
@@ -827,7 +828,7 @@
 			});
 			
 			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
+				mcxDialog.alert("옵션을 선택해 주세요.");
 				return false;
 			}
 		}
@@ -854,9 +855,9 @@
 	//옵션 갯수 변경
 	var fnChangeOrderEa = function() {
 
-		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
+		if("G056_N" == $("#cartForm  input[name=goodsType]").val() && "Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
 			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-				mcxDialog.alert("사이즈를 선택세요.");
+				mcxDialog.alert("사이즈를 선택해 주세요.");
 				return false;
 			}
 		}else{
@@ -871,7 +872,7 @@
 			});
 			
 			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
+				mcxDialog.alert("옵션을 선택해 주세요.");
 				return false;
 			}
 		}
@@ -882,12 +883,12 @@
 		let buymax = parseInt($("#cartForm  input[name=maxOrdQty]").val());
 		let alertMsg = '';
 		if (ea < buymin) {
-			alertMsg ="최소 주문 가능 수량은 "+buymin+"개 입니다.";
+			alertMsg = buymin+"개 부터 구매 가능합니다.";
 			ea = buymin;
 		}
 
 		if (ea > buymax) {
-			alertMsg = "최대 주문 가능 수량은 "+buymax+"개 입니다.";
+			alertMsg = buymax+"개 까지만 구매 가능합니다.";
 			ea = buymax;
 		}
 
@@ -918,13 +919,23 @@
 		$('input[name="cea"]').each(function() {
 			let ea = parseInt($(this).val());
 			let addPrice = 0;
-			let target=$('.select_custom.item_opt2');
-			target.each(function() {
-				if (typeof ($(this).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('input[name=opt2]').val())){
-					addPrice += Number($(this).find('input[name=opt2]').attr('addPrice'));	
-				}
-			});	
 			
+			if("G056_N" == $("#cartForm  input[name=goodsType]").val() && "Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
+				let target=$('.opt_size').find('input[name=opt]');
+				target.each(function() {
+					if ($(this).is(":checked")){
+						addPrice += Number($(this).attr('addPrice'));	
+					}
+				});	
+			}else{
+			
+				let target=$('.select_custom.item_opt2');
+				target.each(function() {
+					if (typeof ($(this).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('input[name=opt2]').val())){
+						addPrice += Number($(this).find('input[name=opt2]').attr('addPrice'));	
+					}
+				});	
+			}
 			let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
 
 			totalEa += ea;
@@ -945,8 +956,14 @@
 
 		if (goodsType == 'G056_N'){
 			if (gagajf.isNull($("#cartForm  input[name=optCd2]").val())) {
-				mcxDialog.alert("사이즈를 선택하세요.");
-				return;
+				if("Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
+					mcxDialog.alert("사이즈를 선택해 주세요.");
+					return false;	
+				}else{
+					mcxDialog.alert("옵션을 선택해 주세요.");
+					return false;
+				}
+				
 			}
 		
 			let compsList = [];
@@ -977,7 +994,7 @@
 			});
 			
 			if (targetSize != itemSize){
-				mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
+				mcxDialog.alert("옵션을 선택해 주세요.");
 				return false;
 			}
 			
@@ -1149,7 +1166,7 @@
 					}
 					
 				}else{
-					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
+					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1'); 
 				}	
 			}
 			

+ 4 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailQnaFormWeb.html

@@ -66,7 +66,10 @@
 /*<![CDATA[*/
 	
 	var fnGetList = function() {
-
+		
+		// 상품문의창 닫기
+		cfCloseLayer('layer_goods_qna_reg')
+	
 		$('#goodsQnaForm  input[name="secretYn"]').val('');
 		if ($("#goodsQnaForm input:checkbox[name=except_secret]").is(':checked')){
 			$('#goodsQnaForm  input[name="secretYn"]').val('N');

+ 3 - 1
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html

@@ -582,7 +582,9 @@
 				$('#ulGoodsReview').append(tag);
 			});
 		} else {
-			$('#goodsReviewForm').find('.nodata').show();
+			if ([[${reviewCount}]] > 0){
+				$('#goodsReviewForm').find('.nodata').show();	
+			}
 			$('#goodsReviewForm').find('.ui_row').hide();
 		}
 

+ 13 - 19
src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html

@@ -3,12 +3,12 @@
 <!--
  *******************************************************************************
  * @source  : GoodsIncludeFormWeb.html
- * @desc    : 상품상세 Include Page - 공용
+ * @desc	: 상품상세 Include Page - 공용
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
+ * VER  DATE		 AUTHOR	  DESCRIPTION
  * ===  ===========  ==========  =============================================
  * 1.0  2021.03.02   eskim	   최초 작성
  *******************************************************************************
@@ -144,16 +144,15 @@
 											th:onclick="fnSelGoodsDealReview([[${goodsInfo.compsGoodsCd}]])" >
 											<div class="item_prod">
 												<div class="item_state">
-													<a href="#none" class="itemLink">
+													<a href="javascript:void(0);" class="itemLink">
 														<div class="itemPic">
 															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
-														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
-															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
-															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-														</p>
+														 <div class="itemPostCount">
+															 (리뷰 <span><th:block  th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA')  : '9,999+'}"></th:block></span>)
+														 </div>
 													</a>
 													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}"  th:attr="currPrice=${goodsInfo.currPrice}, selfGoodsYn=${goodsInfo.selfGoodsYn}"/>
 												</div>
@@ -195,16 +194,15 @@
 											th:onclick="fnSelGoodsDealQna([[${goodsInfo.compsGoodsCd}]])" >
 											<div class="item_prod">
 												<div class="item_state">
-													<a href="#none" class="itemLink">
+													<a href="javascript:void(0);" class="itemLink">
 														<div class="itemPic">
 															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
-														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
-															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
-															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-														</p>
+														<div class="itemPostCount">
+															(문의 <span><th:block  th:text="${(goodsInfo.goodsQnaCnt <= 9999) ? #numbers.formatInteger(goodsInfo.goodsQnaCnt, 0,'COMMA')  : '9,999+'}"></th:block></span>)
+														</div>
 													</a>
 													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
 												</div>
@@ -246,16 +244,12 @@
 											th:onclick="fnSelGoodsDealDelivery([[${goodsInfo.compsGoodsCd}]])" >
 											<div class="item_prod">
 												<div class="item_state">
-													<a href="#none" class="itemLink">
+													<a href="javascript:void(0);" class="itemLink">
 														<div class="itemPic">
 															<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm+'?RS=80'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
 														</div>
 														<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">BRAND NAME1</p>
 														<div class="itemName" th:text="${goodsInfo.goodsFullNm}">남성 </div>
-														<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
-															<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
-															<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
-														</p>
 													</a>
 													<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
 												</div>
@@ -353,7 +347,7 @@
 					</div>
 					<div class="btn_box">
 						<div class="btn_group_block ui_row">
-						<th:block  th:if="${goodsInfo.stockQty > 0}">
+						<th:block  th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 							<div class="ui_col_6">
 								<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
 							</div>
@@ -361,7 +355,7 @@
 								<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
 							</div>
 						</th:block>
-						<th:block  th:unless="${goodsInfo.stockQty > 0}">
+						<th:block  th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
 							<div class="ui_col_12">
 								<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
 							</div>

+ 1 - 3
src/main/webapp/WEB-INF/views/web/goods/GoodsQnaDetailFormWeb.html

@@ -106,9 +106,7 @@
 			sureBtnClick: function() {
 				gagajf.ajaxFormSubmit($('#goodsQnaDetailForm').prop('action')
 						, $('#goodsQnaDetailForm')
-						, function() {
-							mcxDialog.alert("상품 문의가 등록되었습니다. 빠른 시일 내에 답변드리겠습니다.");
-						}
+						, fnGetList()
 				);
 			}
 		});

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

@@ -206,6 +206,8 @@
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	let oneData = [[${oneData}]];
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+	let refundYn = [[${refundYn}]];
 
 	$(document).ready(function() {
 		// 마이페이지 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++) {
 				let useGiftcard = giftcardUseList[i];
 				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 += '<div class="txt_content">'	+ useGiftcard.goodsNm + '</div>';
 				tmtbHtml += '</td>';
-				tmtbHtml += '<td><span class="amount_minus"> <em>'
-						/* + '-' */
+				if(useGiftcard.gfcdAmt<0){
+					tmtbHtml += '<td><span class="amount_minus"> <em>'
 						+ ' '
 						+ useGiftcard.gfcdAmt.addComma()
 						+ '</em>원';
+				}else{
+					tmtbHtml += '<td><span class="amount_plus"> <em>'
+						+ ' '
+						+ useGiftcard.gfcdAmt.addComma()
+						+ '</em>원';
+				}
+				
 				tmtbHtml += '</span></td>';
 				tmtbHtml += '<td>' + useGiftcard.regDt
 						+ '</td>';

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

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

+ 0 - 281
src/main/webapp/WEB-INF/views/web/mypage/MypagePointForm2Web.html

@@ -1,281 +0,0 @@
-<!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/MypageLayoutWeb">
-<!--
- *******************************************************************************
- * @source  : MypagePointForm.html
- * @desc    : 마이페이지 > STYLE24포인트 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2021 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.02.26   csh9191     최초 작성
- *******************************************************************************
- -->
-<body>
-
-<th:block layout:fragment="content">
-<div class="content myPoint"> <!-- 페이지특정 클래스 = myPoint -->
-		<div class="cont_body">
-			<!-- CONT-BODY -->
-			<div class="lnb">
-				<div class="lnb_tit">
-				<h2>마이페이지</h2>
-				</div>
-				<div class="lnb_list">
-					<ul id="mypageLnbList"></ul>
-				</div>
-			</div>
-			<div class="cont">
-				<div class="sec_head">
-					<h3 class="subH1">STYLE 포인트</h3>
-				</div>
-				<div class="sec_body">
-					<div class="highlight_area">
-						<div class="have_amount">
-							<div class="total_amount">
-								나의 보유 포인트&nbsp;<span><em th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</span>
-							</div>
-							<dl>
-								<div>
-									<dt>적립 예정 포인트</dt>
-									<dd><em th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
-								</div>
-								<div>
-									<dt><span class="tag primary_line">D-<em >30</em></span>한 달 이내 소멸 예정</dt>
-									<dd><em th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
-								</div>
-							</dl>
-						</div>
-					</div>
-					<div class="content_area">
-						<div class="taps">
-							<div>
-								<ul>
-									<li id="allPointList"><a href="javascript:void(0);">전체내역</a></li>
-									<li id="accumulatePointList"><a href="javascript:void(0);">적립내역</a></li>
-									<li id="usePointList"><a href="javascript:void(0);">사용내역</a></li>
-								</ul>
-							</div>
-						</div>
-						<div class="select_box">
-							<div class="form_field">
-								<div class="select_custom month">
-									<div class="combo">
-										<input type="hidden" name="pointDate" value="0" id="pointDate"/>
-										<div class="select"></div>
-										<ul id="searchDt" class="list">
-											
-										</ul>
-									</div>
-								</div>
-							</div>
-						</div>
-						<!-- 데이터 있을 시 -->
-						<div class="list_box">
-							<div class="tbl type5">
-								<table>
-									<colgroup>
-										<col width="10%">
-										<col width="12%">
-										<col width="42%">
-										<col width="18%">
-										<col width="18%">
-									</colgroup>
-									<thead>
-										<tr>
-											<th scope="col"><span class="sr-only">증감여부</span></th>
-											<th scope="col">사유</th>
-											<th scope="col">내용</th>
-											<th scope="col">포인트</th>
-											<th scope="col">일자</th>
-										</tr>
-									</thead>
-									<tbody id="pointAjaxList">
-															
-									</tbody>
-								</table>
-							</div>
-						</div>
-						<!-- //데이터 있을 시 -->
-						<!-- 데이터 없을 시 -->
-						 <div class="nodata">
-							<div class="txt_box">
-								<p>
-									STYLE 포인트 적립/사용내역이 없습니다.<br>
-	
-								</p>
-							</div>
-						</div> 
-						<!-- //데이터 없을 시 -->	
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-<script th:inline="javascript">
-	let accumulatePointList = [[${accumulatePointList}]];
-	let usePointList = [[${usePointList}]];
-	let allPointList = [[${allPointList}]];
-	let date = [[${date}]];
-	var year = date[0].year;
-	var month = date[0].month;
-	// TODO - 퍼블확정시
-	
-	// 이번년도
-	//동적으로 날짜 년도 append
-	function appendYear() {
-		for (var i = 0; i < date.length; i++) {
-			$("#searchDt").append(	"<li onclick='fnChangeDate(this.value)' value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" + date[i].month + "월 </li>")
-		}
-		$(".select").append("<li class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년" + date[0].month + "월 </li>"); // 현재년도 선택 */ 
-	}
-	appendYear($("#searchDt"));
-
-	// 날짜변경 이벤트
-	var fnChangeDate = function(param) {
-		let url = '/mypage/allpoint/list';
-		
-		
- 		//$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
- 		//var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
- 		
- 		// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
- 		var data = {};
- 		if(typeof param == 'undefined'){
- 			data.searchDt = year.toString() + "" + month.toString();
- 		}else{
- 			data.searchDt = param;
- 		}
-		var jsonData = JSON.stringify(data);
-		
-		gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
-
-						accumulatePointList = result.accumulatePointList;
-						usePointList = result.usePointList;
-						allPointList = result.allPointList;
-						// 클릭상태 확인
-						if($("#accumulatePointList").hasClass("active")){
-							$("#accumulatePointList").click();
-							// 첫화면 전체내역 조회
-							fnGetPointTableInfo(result.accumulatePointList);
-						}else if($("#usePointList").hasClass("active")){
-							$("#usePointList").click();
-							fnGetPointTableInfo(usePointList);
-						}else if($("#allPointList").hasClass("active")) {
-							$("#allPointList").click();
-							fnGetPointTableInfo(allPointList);
-						}
-						
-		});
-	}
-	
-	// HTML 그리기
-	var fnGetPointTableInfo = function(param) {
-		$('.nodata').hide();
-		let tag = "";
-		if(param != null && param.length > 0){
-			$.each(param, function(idx,item){
-				tag += '<tr>';
-				tag += '	<td>';
-				if(item.pntAmt > 0){
-					tag += '		<span class="tag primary">적립</span>';
-				}else{
-					tag += '		<span class="tag deepgray">차감</span>';
-				}
-				
-				tag += '	</td>';
-				tag += '	<td>'+item.occurGb+'</td>';
-				tag += '	<td>';
-				tag += '		<div class="txt_content">'+ item.occurDtlDesc + '</div>';
-				tag += '	</td>';
-				tag += '	<td>';
-				if(item.pntAmt > 0){
-					tag += '		<span class="amount_plus">';
-					tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
-					tag += '		</span>';
-				}else{
-					tag += '		<span class="c_primary">';
-					tag += '			<em>'+item.pntAmt+'</em>P';
-					tag += '		</span>';
-				}
-				
-				tag += '	</td>';
-				tag += '	<td>'+item.pntUploadDt;
-				tag += '	</td>';
-				tag += '</tr>		';
-			});
-		}else{
-			$('.nodata').show();
-			
-		}
-		
-		$("#pointAjaxList").html(tag);
-	}
-	
-	// 전체내역 조회
-	$("#allPointList").click(function(){
-
- 		$("#accumulatePointList").removeClass("active");
- 		$("#usePointList").removeClass("active");
- 		
- 		$("#allPointList").addClass("active");
- 		//$("#plusMinus").text("증감/차감");
- 		
- 		fnGetPointTableInfo(allPointList);
-	});
-	
-	// 적립내역 조회
-	$("#accumulatePointList").click(function(){
-
- 		$("#allPointList").removeClass("active");
- 		$("#usePointList").removeClass("active");
- 		
- 		$("#accumulatePointList").addClass("active");
- 		//$("#plusMinus").text("증감");
-		
- 		fnGetPointTableInfo(accumulatePointList);
-	});
-	
-	// 사용내역 조회
-	$("#usePointList").click(function(){
-		
-		$("#accumulatePointList").removeClass("active");
-		$("#allPointList").removeClass("active");
-		
-		$("#usePointList").addClass("active");
-		//$("#plusMinus").text("차감");
-		
-		fnGetPointTableInfo(usePointList);
-	});
-	
-	$(document).ready(function() {
-		// 전체내역 표시
- 		$("#allPointList").trigger("click");
-		// 마이페이지 LNB 설정
-		fnSetMypageLnbList(5);
-		
-		// 마이페이지 location 설정
-		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
-		
-		
-
-		// 셀렉트박스 활성화
-		$('.select_custom').each(function(index) {
-			var selecter01 = new sCombo($(this));
-		});
-
-		// 셀렉트박스 데이터 설정
-		fnChangeDate();
-
-	});
-
-</script>
-</th:block>
-
-</body>
-</html>

+ 169 - 127
src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html

@@ -19,171 +19,212 @@
 <body>
 
 <th:block layout:fragment="content">
-	<div class="my_cont">
-		<div class="sec_head">
-			<h3>STYLE24 포인트</h3>
-		</div>
-		<div class="sec_body">
-			<div class="save_area mypage_coupon">
-				<p>사용 가능한 보유 포인트<strong th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></strong>P</p>
-				<ul>
-					<li>적립 예정 포인트 <span>
-						<th:block th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></th:block>P
-					</span></li>
-					<li>한달 이내 소멸 예정 <span>
-						<th:block th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></th:block>P
-					</span></li>
-				</ul>
+<div class="content myPoint"> <!-- 페이지특정 클래스 = myPoint -->
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+				<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
 			</div>
-			<div class="my_tab coupon_tab">
-				<ul>
-					<li><a href="javascript:void(0);" id="allPointList">전체내역</a></li>
-					<li><a href="javascript:void(0);" id="accumulatePointList">적립내역</a></li>
-					<li><a href="javascript:void(0);" id="usePointList">사용내역</a></li>
-				</ul>
-	<!-- 								<div class="form_field"> -->
-	<!-- 									<select id="searchDt" name="searchDt" onchange="fnSearchDate(this);"> -->
-	<!-- 									</select>  -->
-	<!-- 								</div> -->
-				<div class="form_field">
-					<div class="select_custom type1">
-						<div class="combo">
-							<input type="hidden" name="pointDate" value="0"/>
-							<div class="select"></div> <!-- 셀렉박스 -->
-								<ul id="searchDt" class="list" style="width:200px; margin:0 auto">
+			<div class="cont">
+				<div class="sec_head">
+					<h3 class="subH1">STYLE 포인트</h3>
+				</div>
+				<div class="sec_body">
+					<div class="highlight_area">
+						<div class="have_amount">
+							<div class="total_amount">
+								나의 보유 포인트&nbsp;<span><em th:text="${#numbers.formatDecimal(rmPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</span>
+							</div>
+							<dl>
+								<div>
+									<dt>적립 예정 포인트</dt>
+									<dd><em th:text="${#numbers.formatDecimal(expectedPntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+								</div>
+								<div>
+									<dt><span class="tag primary_line">D-<em >30</em></span>한 달 이내 소멸 예정</dt>
+									<dd><em th:text="${#numbers.formatDecimal(expectedExpirePntAmt, 0, 'COMMA', 0, 'POINT')}"></em>P</dd>
+								</div>
+							</dl>
+						</div>
+					</div>
+					<div class="content_area">
+						<div class="taps">
+							<div>
+								<ul>
+									<li id="allPointList"><a href="javascript:void(0);">전체내역</a></li>
+									<li id="accumulatePointList"><a href="javascript:void(0);">적립내역</a></li>
+									<li id="usePointList"><a href="javascript:void(0);">사용내역</a></li>
 								</ul>
+							</div>
+						</div>
+						<div class="select_box">
+							<div class="form_field">
+								<div class="select_custom month">
+									<div class="combo">
+										<input type="hidden" name="pointDate" value="0" id="pointDate"/>
+										<div class="select"></div>
+										<ul id="searchDt" class="list">
+											
+										</ul>
+									</div>
+								</div>
+							</div>
+						</div>
+						<!-- 데이터 있을 시 -->
+						<div class="list_box">
+							<div class="tbl type5">
+								<table>
+									<colgroup>
+										<col width="10%">
+										<col width="12%">
+										<col width="42%">
+										<col width="18%">
+										<col width="18%">
+									</colgroup>
+									<thead>
+										<tr>
+											<th scope="col"><span class="sr-only">증감여부</span></th>
+											<th scope="col">사유</th>
+											<th scope="col">내용</th>
+											<th scope="col">포인트</th>
+											<th scope="col">일자</th>
+										</tr>
+									</thead>
+									<tbody id="pointAjaxList">
+															
+									</tbody>
+								</table>
+							</div>
 						</div>
+						<!-- //데이터 있을 시 -->
+						<!-- 데이터 없을 시 -->
+						 <div class="nodata">
+							<div class="txt_box">
+								<p>
+									STYLE 포인트 적립/사용내역이 없습니다.<br>
+	
+								</p>
+							</div>
+						</div> 
+						<!-- //데이터 없을 시 -->	
 					</div>
 				</div>
 			</div>
-			<div class="order_list">
-				<section class="order_row">
-					<div class="tbl point_tbl track_tbl type2">
-						<table>
-							<colgroup>
-								<col width="150px">
-								<col width="660px">
-								<col width="*">
-								<col width="200px">
-							</colgroup>
-							<thead>
-								<tr>
-									<th>사유</th>
-									<th>내용</th>
-									<th id="plusMinus"></th>
-									<th>일자</th>
-								</tr>
-							</thead>
-							<tbody id="pointAjaxList">
-							</tbody>
-						</table>
-					</div>
-				</section>
-			</div>
 		</div>
 	</div>
 <script th:inline="javascript">
 	let accumulatePointList = [[${accumulatePointList}]];
 	let usePointList = [[${usePointList}]];
 	let allPointList = [[${allPointList}]];
-
-	// select 날짜 생성
-	var date = new Date();
-	var year = date.getFullYear();
-	var month = date.getMonth() +1;
-
+	let date = [[${date}]];
+	var year = date[0].year;
+	var month = date[0].month;
 	// TODO - 퍼블확정시
-	var oneYearAgo = year -1;
-	var twoYearAgo = year -2;
 	
 	// 이번년도
-	for(var i = 1;i <= 12; i++){
-		if(i < 10 && i != month){
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
-		}
-		else if(i < 10 && i == month){
-			//셀렉트박스 이번 달 표시설정
-			$('.select').append("<li style='pointer-events: none' onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
-		}
-		else if(i > 9 && i != month){
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
-		}
-		else if(i > 9 && i == month){
-			$('.select').append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + ""  + i +"'>" + year + "년" + " " + i + "월" +"</li>");
-			$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
+	//동적으로 날짜 년도 append
+	function appendYear() {
+		for (var i = 0; i < date.length; i++) {
+			$("#searchDt").append(	"<li onclick='fnChangeDate(this.value)' value='"+ date[i].year + "" + date[i].month + "'>" + date[i].year	+ "년" + date[i].month + "월 </li>")
 		}
+		$(".select").append("<li class='selected' value='"+date[0].year+""+date[0].month+"'>"+ date[0].year + "년" + date[0].month + "월 </li>"); // 현재년도 선택 */ 
 	}
+	appendYear($("#searchDt"));
 
 	// 날짜변경 이벤트
 	var fnChangeDate = function(param) {
 		let url = '/mypage/allpoint/list';
 		
- 		$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
- 		var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
- 		
- 		if(10 > month){
- 			month = "0" + month;
- 		}
+		
+ 		//$(param).parent().parent().find('input[name=pointDate]').val($(param).val());
+ 		//var pointData = $(param).parent().parent().find('input[name=pointDate]').val();
  		
  		// 포인트화면 로딩시 이번달 설정 리스트 표시하기 위함
- 		if(pointData == null){
- 			pointData = year + "" + month;
+ 		var data = {};
+ 		if(typeof param == 'undefined'){
+ 			data.searchDt = year.toString() + "" + month.toString();
+ 		}else{
+ 			data.searchDt = param;
  		}
- 		
-		let data = {};
-		
-		data.searchDt = pointData;
-		
- 		console.log(data);
-		
 		var jsonData = JSON.stringify(data);
 		
 		gagajf.ajaxJsonSubmit('/mypage/allpoint/list', jsonData, function(result){
+
 						accumulatePointList = result.accumulatePointList;
 						usePointList = result.usePointList;
 						allPointList = result.allPointList;
-						
 						// 클릭상태 확인
-						if($("#accumulatePointList").hasClass("on")){
+						if($("#accumulatePointList").hasClass("active")){
 							$("#accumulatePointList").click();
-						}else if($("#usePointList").hasClass("on")){
+							// 첫화면 전체내역 조회
+							fnGetPointTableInfo(result.accumulatePointList);
+						}else if($("#usePointList").hasClass("active")){
 							$("#usePointList").click();
-						}else if($("#allPointList").hasClass("on")) {
+							fnGetPointTableInfo(usePointList);
+						}else if($("#allPointList").hasClass("active")) {
 							$("#allPointList").click();
+							fnGetPointTableInfo(allPointList);
 						}
-						// 첫화면 전체내역 조회
-						fnGetPointTableInfo();
+						
 		});
 	}
 	
 	// HTML 그리기
 	var fnGetPointTableInfo = function(param) {
+		$('.nodata').hide();
 		let tag = "";
-		$.each(param, function(idx,item){
-			tag +='<tr>';
-			tag +='<td>'+ item.occurGb + '</td>';
-			tag += '<td class="t_l pl40">'+ item.occurDtlDesc + '</td>';
-			// 증감 : 파랑, 차감 : 빨강으로 표시
-			if(item.pntAmt > 0){
-				tag += '<td class="c_blue">'+ item.pntAmt + '</td>';
-			}else{
-				tag += '<td class="c_primary">'+ item.pntAmt + '</td>';
-			}
-			tag += '<td>'+ item.pntUploadDt + '</td>';
-			tag += '</tr>';
-		});
+		if(param != null && param.length > 0){
+			$.each(param, function(idx,item){
+				tag += '<tr>';
+				tag += '	<td>';
+				if(item.pntAmt > 0){
+					tag += '		<span class="tag primary">적립</span>';
+				}else{
+					tag += '		<span class="tag deepgray">차감</span>';
+				}
+				
+				tag += '	</td>';
+				tag += '	<td>'+item.occurGb+'</td>';
+				tag += '	<td>';
+				tag += '		<div class="txt_content">'+ item.occurDtlDesc + '</div>';
+				tag += '	</td>';
+				tag += '	<td>';
+				if(item.pntAmt > 0){
+					tag += '		<span class="amount_plus">';
+					tag += '			<em>'+item.pntAmt.addComma()+'</em>P';
+					tag += '		</span>';
+				}else{
+					tag += '		<span class="c_primary">';
+					tag += '			<em>'+item.pntAmt+'</em>P';
+					tag += '		</span>';
+				}
+				
+				tag += '	</td>';
+				tag += '	<td>'+item.pntUploadDt;
+				tag += '	</td>';
+				tag += '</tr>		';
+			});
+		}else{
+			$('.nodata').show();
+			
+		}
+		
 		$("#pointAjaxList").html(tag);
 	}
 	
 	// 전체내역 조회
 	$("#allPointList").click(function(){
 
- 		$("#accumulatePointList").removeClass("on");
- 		$("#usePointList").removeClass("on");
+ 		$("#accumulatePointList").removeClass("active");
+ 		$("#usePointList").removeClass("active");
  		
- 		$("#allPointList").addClass("on");
- 		$("#plusMinus").text("증감/차감");
+ 		$("#allPointList").addClass("active");
+ 		//$("#plusMinus").text("증감/차감");
  		
  		fnGetPointTableInfo(allPointList);
 	});
@@ -191,11 +232,11 @@
 	// 적립내역 조회
 	$("#accumulatePointList").click(function(){
 
- 		$("#allPointList").removeClass("on");
- 		$("#usePointList").removeClass("on");
+ 		$("#allPointList").removeClass("active");
+ 		$("#usePointList").removeClass("active");
  		
- 		$("#accumulatePointList").addClass("on");
- 		$("#plusMinus").text("증감");
+ 		$("#accumulatePointList").addClass("active");
+ 		//$("#plusMinus").text("증감");
 		
  		fnGetPointTableInfo(accumulatePointList);
 	});
@@ -203,27 +244,28 @@
 	// 사용내역 조회
 	$("#usePointList").click(function(){
 		
-		$("#accumulatePointList").removeClass("on");
-		$("#allPointList").removeClass("on");
+		$("#accumulatePointList").removeClass("active");
+		$("#allPointList").removeClass("active");
 		
-		$("#usePointList").addClass("on");
-		$("#plusMinus").text("차감");
+		$("#usePointList").addClass("active");
+		//$("#plusMinus").text("차감");
 		
 		fnGetPointTableInfo(usePointList);
 	});
 	
 	$(document).ready(function() {
+		// 전체내역 표시
+ 		$("#allPointList").trigger("click");
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(5);
 		
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
 		
-		// 전체내역 표시
- 		$("#allPointList").trigger('click');
+		
 
 		// 셀렉트박스 활성화
-		$('.select_custom.type1').each(function(index) {
+		$('.select_custom').each(function(index) {
 			var selecter01 = new sCombo($(this));
 		});
 

+ 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>
 <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="content odPayment"> <!-- 페이지특정 클래스 = odPayment 클래스 추가 -->
 				<div class="cont_head">
@@ -37,11 +54,11 @@
 											<div class="paymethod_box">
 												<ul class="sel_method">
 													<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>
 													</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>
 													</li>
 												</ul>
@@ -52,13 +69,13 @@
 								<div class="area_paymentinfo">
 									<div class="paymentinfo">
 										<div class="payinfo_blk">
-											<a href="">개인정보 제공에 대한 동의<span>보기</span></a>
+											<a href="javascript:void(0);">개인정보 제공에 대한 동의<span>보기</span></a>
 											<div class="infotxt">
 												개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.개인정보제공에 대한 동의 내용입니다.
 											</div>
 										</div>
 										<div class="payinfo_blk">
-											<a href="">결제대행 서비스 약관 동의<span>보기</span></a>
+											<a href="javascript:void(0);">결제대행 서비스 약관 동의<span>보기</span></a>
 											<div class="infotxt">
 												결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.결제대행서비스 약관 동의 내용입니다.
 										</div>
@@ -70,7 +87,9 @@
 							</div>
 							<div class="area_paybtn">
 								<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>
@@ -81,46 +100,58 @@
 							<div class="od_item_box">
 								<!-- 반품상품 내역 -->
 								<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">
+										<th:block th:each="goods, i : ${orderAddPayGoodsList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 										<div class="item_gd">
 											<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>
-													<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">
-														<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 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>
 												</figcaption>
 											</figure>
 										</div>
-									</div>              
+										</th:block>
+									</div>
 								</div>
-								<!-- //반품상품 내역 -->                   
+								<!-- //반품상품 내역 -->
 							</div>
 							<div class="od_amount_box">
 								<dl>
 									<div>
 										<dt>환불 상품금액</dt>
-										<dd><em>1,590,000</em>원</dd>
+										<dd><em th:text="|${#numbers.formatInteger(refundAmt, 1, 'COMMA')}|"></em>원</dd>
 									</div>
 									<div>
 										<dt>반품/교환 배송비</dt>
-										<dd><em>0원</em></dd>
+										<dd><em th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></em></dd>
 									</div>
 								</dl>
 							</div>
 							<div class="totalprice_box">
 								<dl>
 									<dt>총 결제 예정 금액</dt>
-									<dd><span>3,546,200</span>원</dd>
+									<dd><span th:text="|${#numbers.formatInteger(addPayCost, 1, 'COMMA')}|"></span>원</dd>
 								</dl>
 								<p class="info_extra">
 									환불할 상품금액이 반품/교환 배송비보다 적을<br>
@@ -130,7 +161,7 @@
 							</div>
 						</div>
 					</div>
-					<!-- // CONT-BODY -->					
+					<!-- // CONT-BODY -->
 				</div>
 			</div>
 		</div>
@@ -139,6 +170,52 @@
 </form>
 
 <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>
 </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">';
 	for (var i = 0; i < image.length; i++) {
 		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>';
@@ -404,7 +409,13 @@ if(goods1.length>0){
 			html += '	<div>';
 			html += '        <h4>';
 			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{
 				html += '        <a href="javascript:void(0)">'+template[i].title+'</a>';
 			}
@@ -469,7 +480,11 @@ if(goods2.length>0){
 			html += '	<div>';
 			html += '        <h4>';
 				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{
 					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>';
 			html += '        <h4>';
+			console.log(template[i].linkOpenGb );
 			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{
 				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
 			}

+ 1 - 0
src/main/webapp/biz/goods.js

@@ -61,6 +61,7 @@ var fnViewStock = function(obj, goodsCd, optCd, optCd1, optCd2,  minOrdQty, maxO
 			$("#cartForm  input[name=cea]").attr("readonly",false);
 			$("#cartForm  input[name=stock]").val(itemCnt);
 
+			$('.price_box').show();
 			fnSetTotalPrice();
 			
 			// 모바일에서 작업해야함

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

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

+ 6 - 4
src/main/webapp/ux/style24_link.js

@@ -138,7 +138,7 @@ var cfnGoToPage = function(page, ithrCd) {
  * @since  : 2021/02/09
  * @author : jsshin
  */
-var cfnOpenCellphoneCertify = function (redirectUrl, custparams) {
+var cfnOpenCellphoneCertify = function (redirectUrl, custParams) {
 	var actionUrl = _frontUrl + "/customer/nice/cellphone/form";
 	var popupWidth = 420;
 	var popupHeight = 720;
@@ -150,8 +150,8 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custparams) {
 		console.log('redirectUrl', redirectUrl);
 		if (!gagajf.isNull(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;
 		}
@@ -695,7 +695,7 @@ function cfGoodsQng(goodsCd) {
 	var Param = new Object();
 	var str = '<div class="pd_pop full_pop pd_qnalist_pop" id="layer_goods_qna"></div>';
 	if ("P" != _frontGb){
-		str = '<div class="modal pop_full fade pd_pop pd_qnalist_pop"  data-id="layer_infinite" id="layer_goods_qna" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+		str = '<div class="modal pop_full fade pd_pop pd_qnalist_pop" id="layer_goods_qna" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
 	}
 
 	if ($('#layer_goods_qna').length == 0) {
@@ -963,6 +963,7 @@ function cfnPutWishList(a) {
 				//		}
 				//	});
 				}
+				fnGetWishList();
 			} else if (result.status == "중복") {
 				Msg = '이미 등록 되어있습니다.';
 			} else {
@@ -984,6 +985,7 @@ function cfnPutWishList(a) {
 			if (result.status == "200") {
 				Msg = '삭제 되었습니다.';
 				$(a).removeClass('active');
+				fnGetWishList();
 			} else {
 				Msg = '오류로 인해 처리되지 않았습니다.';
 			}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio