Browse Source

Merge remote-tracking branch 'origin/develop' into xodud1202

xodud1202 5 years ago
parent
commit
f516796f3f
57 changed files with 1544 additions and 771 deletions
  1. 0 7
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  2. 9 1
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  3. 1 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  4. 67 20
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  5. 16 1
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  6. 21 49
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  7. 23 1
      src/main/java/com/style24/front/biz/web/TsfSocialController.java
  8. 3 2
      src/main/java/com/style24/front/support/security/handler/TsfLoginSuccessHandler.java
  9. 7 0
      src/main/java/com/style24/persistence/domain/Goods.java
  10. 1 0
      src/main/java/com/style24/persistence/domain/GoodsCompose.java
  11. 2 0
      src/main/java/com/style24/persistence/domain/Plan.java
  12. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  13. 6 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  14. 21 18
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  15. 24 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  16. 21 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  17. 31 17
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  18. 142 103
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  19. 125 139
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  20. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  21. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  22. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  23. 29 15
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html
  24. 79 75
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustPwdModifyFormMob.html
  25. 7 7
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSnsJoinInitPwdFormMob.html
  26. 6 8
      src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaRegisterFormWeb.html
  27. 35 25
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  28. 28 1
      src/main/webapp/WEB-INF/views/web/customer/JoinCompleteFormWeb.html
  29. 8 7
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  30. 233 44
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  31. 54 19
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  32. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsCouponFormWeb.html
  33. 27 15
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  34. 31 4
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  35. 0 4
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html
  36. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsIncludeFormWeb.html
  37. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsReviewDetailFormWeb.html
  38. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustConfirmFormWeb.html
  39. 31 14
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html
  40. 8 8
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  41. 8 8
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html
  42. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  43. 116 59
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  44. 106 7
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  45. 89 41
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  46. 4 3
      src/main/webapp/biz/goods.js
  47. BIN
      src/main/webapp/images/pc/ico_newbenefit1.png
  48. BIN
      src/main/webapp/images/pc/ico_newbenefit2.png
  49. BIN
      src/main/webapp/images/pc/ico_newbenefit3.png
  50. 2 2
      src/main/webapp/ux/mo/css/common_m.css
  51. 49 2
      src/main/webapp/ux/mo/css/layout_m.css
  52. 5 0
      src/main/webapp/ux/mo/css/style24_m.css
  53. 11 5
      src/main/webapp/ux/mo/js/common_m.js
  54. 10 6
      src/main/webapp/ux/pc/css/layout.css
  55. 5 4
      src/main/webapp/ux/pc/css/main.css
  56. 31 6
      src/main/webapp/ux/pc/js/common-ui.js
  57. 1 4
      src/main/webapp/ux/style24_link.js

+ 0 - 7
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -837,13 +837,6 @@ public class TsfCustomerService {
 
 		// 2. 계좌정보 수정여부 체크
 		if ("Y".equals(customer.getAccountModifyYn())) {
-			// 계좌 유효성 체크
-			String resultCode = "000";
-			if (!"000".equals(resultCode)) {
-				result.setBoolean("isSuccess", false);
-				result.setString("resultType", "INVALID_ACCOUNT");
-				return result;
-			}
 			CustAccount custAccount = new CustAccount();
 			custAccount.setCustNo(custNo);
 			custAccount.setRegNo(custNo);

+ 9 - 1
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -79,7 +79,7 @@ public class TsfGoodsService {
 			} else {
 				goodsViewHst.setReferer(referer);
 			}
-		}
+		} 
 
 		if (TsfSession.getInfo() != null) {
 			goodsViewHst.setCustNo(TsfSession.getInfo().getCustNo());
@@ -702,6 +702,8 @@ public class TsfGoodsService {
 			goodsExtend.setGoodsNotiList(goodsDao.getGoodsNotiList(tmpGoods));
 			// 이미지 정보
 			goodsExtend.setGoodsImgList(goodsDao.getGoodsImgList(tmpGoods));
+			// 상품 안전인증 정보
+			goodsExtend.setGoodsSafeNo(goodsDao.getGoodsSafeNo(tmpGoods));
 
 		}
 		return getGoodsSetComposeList;
@@ -795,6 +797,12 @@ public class TsfGoodsService {
 			goodsSearch.setMaxRow(cate.getMaxRow());
 			goodsSearch.setContentsLoc(cate.getContentsLoc());
 			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
+			
+			for(Goods temp : goodsList){
+				temp.setSizeArr(temp.getSizes().split(","));
+				temp.setColorArr(temp.getColorChips().split(","));
+				temp.setBenefitArr(temp.getIcon().split(","));
+			}
 		} else {
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 		}

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

@@ -333,6 +333,7 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("viewDt", paramMap.get("viewDt"));
 		mav.addObject("viewPage", "G037_31");
 		mav.addObject("popupCateNo", paramMap.get("brandGroupNo"));
+		mav.addObject("brandGroupNo", paramMap.get("brandGroupNo"));
 
 		//log.info("brandMainLayoutList::{}", brandMainLayoutList);
 		mav.addObject("brandMainLayoutList", brandMainLayoutList);

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

@@ -180,8 +180,6 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 공지
 		mav.addObject("goodsNoticeList", goodsService.getGoodsNoticeList(paramsGoods));
 		
-		
-				
 		int goodsReviewCnt = 0;
 		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) {	// 딜상품
 
@@ -190,23 +188,29 @@ public class TsfGoodsController extends TsfBaseController {
 			mav.addObject("goodsDealComposeList", goodsDealComposeList);
 
 			Collection<Coupon> goodsCouponList = new ArrayList<Coupon>();
+			ArrayList<String> arrGoodsList = new ArrayList<>();
 			// 상품쿠폰
 			if (goodsDealComposeList != null && !goodsDealComposeList.isEmpty()) {
-
-				ArrayList<String> arrGoodsList = new ArrayList<>();
 				for (Goods goodsCompose : goodsDealComposeList) {
-
 					arrGoodsList.add(goodsCompose.getCompsGoodsCd());
 				}
 
 				String[] arrGoodsCd = arrGoodsList.stream().toArray(String[]::new);
 
 				paramsGoods.setArrGoodsCd(arrGoodsCd);
-				paramsGoods.setMaxRownum(1);
-				goodsCouponList = couponService.getGoodsCouponList(paramsGoods);
 			}
+			paramsGoods.setMaxRownum(1);
+			goodsCouponList = couponService.getGoodsCouponList(paramsGoods);
 			mav.addObject("goodsCouponList", goodsCouponList);
+			
+			// 다다익선
+			paramsGoods.setMaxRownum(1);
+			mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
 
+			// 사은품
+			paramsGoods.setMaxRownum(1);
+			mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods));
+			
 			// 딜용 상품평건수
 			Review review = new Review();
 			review.setGoodsCd(goods.getGoodsCd());
@@ -234,15 +238,18 @@ public class TsfGoodsController extends TsfBaseController {
 				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 				// 상품 안전인증 정보
 				mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
-				// 룩북
-				Lookbook lookbook = new Lookbook();
-				lookbook.setGoodsCd(paramsGoods.getGoodsCd());
-				lookbook.setCustNo(paramsGoods.getCustNo());
-				mav.addObject("lookbookList", coreLookbookService.getLookbookListForGoods(lookbook));
+				
 
 			} else if (TscConstants.GoodsType.SET.value().equals(goods.getGoodsType())) {		// 셋트상품
 				mav.addObject("goodsComposeList", goodsService.getGoodsSetComposeList(paramsGoods));
 			}
+			
+			// 룩북
+			Lookbook lookbook = new Lookbook();
+			lookbook.setGoodsCd(paramsGoods.getGoodsCd());
+			lookbook.setCustNo(paramsGoods.getCustNo());
+			mav.addObject("lookbookList", coreLookbookService.getLookbookListForGoods(lookbook));
+			
 			// 상품쿠폰
 			paramsGoods.setMaxRownum(1);
 			mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
@@ -590,14 +597,29 @@ public class TsfGoodsController extends TsfBaseController {
 		setGoods(paramsGoods);
 		Goods goods = goodsService.getGoodsInfo(paramsGoods);
 
+		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) {	// 딜상품
+			Collection<Goods> goodsDealComposeList = goodsService.getGoodsDealComposeList(paramsGoods);
+			Collection<Coupon> goodsCouponList = new ArrayList<Coupon>();
+			ArrayList<String> arrGoodsList = new ArrayList<>();
+			// 상품쿠폰
+			if (goodsDealComposeList != null && !goodsDealComposeList.isEmpty()) {
+				for (Goods goodsCompose : goodsDealComposeList) {
+					arrGoodsList.add(goodsCompose.getCompsGoodsCd());
+				}
+
+				String[] arrGoodsCd = arrGoodsList.stream().toArray(String[]::new);
+
+				paramsGoods.setArrGoodsCd(arrGoodsCd);
+			}
+			}
 		// 쿠폰정보
 		paramsGoods.setMaxRownum(1);
 		mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
 		// 다다익선
-		paramsGoods.setMaxRownum(1);
+		paramsGoods.setMaxRownum(0);
 		mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
 		// 사은품
-		paramsGoods.setMaxRownum(1);
+		paramsGoods.setMaxRownum(0);
 		mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods));
 
 		// 상품 기본정보 --즉시할인정보
@@ -1104,19 +1126,44 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@PostMapping(value = "/coupon/download")
 	@ResponseBody
-	public GagaMap createGoodsCoupon(@RequestBody Goods goods) throws Exception {
+	public GagaMap createGoodsCoupon(@RequestBody Goods paramsGoods) throws Exception {
 
 		GagaMap result = new GagaMap();
 
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
-		setGoods(goods);
+		setGoods(paramsGoods);
+		log.info("createGoodsCoupon  paramsGoods {}", paramsGoods);
+
+		// 일반상품과 딜상품 구분
+		Goods goods = goodsService.getGoodsInfo(paramsGoods);
+		if (goods == null || StringUtils.isBlank(goods.getGoodsCd())) {
+			result.set("message", "발급가능 쿠폰이 없습니다.");
+			result.set("status", "200");
+			result.set("params", paramsGoods);
+			return result;
+		}
+		
 		log.info("createGoodsCoupon  goods {}", goods);
+		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) { 
+			Collection<Goods> goodsDealComposeList = goodsService.getGoodsDealComposeList(paramsGoods);
+			// 상품쿠폰
+			if (goodsDealComposeList != null && !goodsDealComposeList.isEmpty()) {
 
+				ArrayList<String> arrGoodsList = new ArrayList<>();
+				for (Goods goodsCompose : goodsDealComposeList) {
+					arrGoodsList.add(goodsCompose.getCompsGoodsCd());
+				}
+
+				String[] arrGoodsCd = arrGoodsList.stream().toArray(String[]::new);
+				paramsGoods.setArrGoodsCd(arrGoodsCd);
+			}
+		}
+		
 		// 쿠폰발급
 		// ERROR_10: 발급가능 쿠폰없음, 20: 발급완료 쿠폰, 30: 발급받은 쿠폰
 		//죄송합니다. 쿠폰이 모두 소진되었습니다
 		//죄송합니다. 해당 쿠폰은 다운로드가 불가합니다.
-		String couponResult = goodsService.createGoodsCoupon(goods);
+		String couponResult = goodsService.createGoodsCoupon(paramsGoods);
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
@@ -1127,7 +1174,7 @@ public class TsfGoodsController extends TsfBaseController {
 		} else if ("ERROR_30".equals(couponResult)) {
 			result.set("message", "죄송합니다. 쿠폰이 모두 소진되었습니다.");
 		} else {
-			if (goods.getArrCpnId() != null && goods.getArrCpnId().length > 0) {
+			if (paramsGoods.getArrCpnId() != null && paramsGoods.getArrCpnId().length > 0) {
 				result.set("message", couponResult + "개 쿠폰이 발급되었습니다.");
 			} else {
 				result.set("message", "쿠폰이 발급되었습니다.");
@@ -1135,8 +1182,8 @@ public class TsfGoodsController extends TsfBaseController {
 
 		}
 		result.set("status", "200");
-		result.set("params", goods);
-		result.set("goodsCouponList", couponService.getGoodsCouponList(goods));
+		result.set("params", paramsGoods);
+		result.set("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
 		return result;
 	}
 

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

@@ -1904,6 +1904,21 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/customer/info/save")
 	@ResponseBody
 	public GagaMap updateCustomerInfo(@RequestBody Customer customer) {
+		CustAccount custAccount = new CustAccount();
+		custAccount.setIpAddress(TsfSession.getIpAddress());
+		custAccount.setAccountNm(customer.getAccountNm());
+		custAccount.setAccountNo(customer.getAccountNo());
+		custAccount.setBankCd(customer.getBankCd());
+
+		if ("Y".equals(customer.getAccountModifyYn())) {
+			GagaMap result = coreKcpService.checkAccount(custAccount);
+			if (!"0000".equals(result.get("resCd"))) {
+				result.setBoolean("isSuccess", false);
+				result.setString("resultType", "INVALID_ACCOUNT");
+				return result;
+			}
+		}
+
 		return customerService.saveCustomerInfo(customer);
 	}
 
@@ -1916,7 +1931,7 @@ public class TsfMypageController extends TsfBaseController {
 	 */
 	@RequestMapping("/account/check")
 	@ResponseBody
-	public GagaMap getAccountCheck(@RequestBody CustAccount custAccount) throws Exception {
+	public GagaMap getAccountCheck(@RequestBody CustAccount custAccount) {
 		custAccount.setIpAddress(TsfSession.getIpAddress());
 		boolean isValid = false;
 		GagaMap result = coreKcpService.checkAccount(custAccount);

+ 21 - 49
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -203,11 +203,9 @@ public class TsfPlanningController extends TsfBaseController {
 		
 		// 코너 목록
 		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
-		mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
-		
 		// 코너 상품
 		mav.addObject("planCornerGoodsList", planningService.getPlanningCornerGoodsList(plan));
-
+		//mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
 
 		// Popup Parameter
 		mav.addObject("preview", plan.getPreview());
@@ -424,6 +422,13 @@ public class TsfPlanningController extends TsfBaseController {
 	@GetMapping("/event/poll/form")
 	public ModelAndView planningEventPollSave(Plan plan) {
 		ModelAndView mav = new ModelAndView();
+		// 로그인 안 한 경우
+		if (!TsfSession.isLogin()) {
+			mav.addObject("inaccessibleMsg", "로그인 후 참여 가능합니다.");
+			mav.setViewName(super.getDeviceViewName("error/Inaccess"));
+			return mav;
+		}
+		
 		Poll poll = new Poll();
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setCustNo(TsfSession.getInfo().getCustNo());
@@ -431,7 +436,8 @@ public class TsfPlanningController extends TsfBaseController {
 		poll = planningService.getPollQuestionInfo(plan);                 
 		String partYn = poll.getDupPartiYn();                             
 		String comYn = poll.getFstComYn();                                
-		int partiCnt = poll.getPartiCnt();   
+		int partiCnt = poll.getPartiCnt();  
+		
 		// 중복참여가 아닌경우                                                     
 		if(partYn.equals("N")) {                                          
 			int count = planningService.getCustAnswerCount(plan);
@@ -455,47 +461,7 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("planning/PlanningEventPollForm"));
 		return mav;
 	}
-	
-//	/**
-//	 * 이벤트 설문조사 접근확인
-//	 * @param 
-//	 * @return
-//	 * @author sowon
-//	 * @since 2021. 4. 3
-//	 */
-//	@PostMapping("/event/poll/access")
-//	@ResponseBody
-//	public GagaMap planningEventPollAccess(@RequestBody Plan plan) {
-//		
-//		GagaMap result = new GagaMap();
-//		Poll poll = new Poll();
-//		plan.setSiteCd(TscConstants.Site.STYLE24.value());
-//		plan.setFrontGb(TsfSession.getFrontGb());
-//		plan.setCustNo(TsfSession.getInfo().getCustNo());
-//		
-//		poll = planningService.getPollQuestionInfo(plan);
-//		String partYn = poll.getDupPartiYn(); 
-//		String comYn = poll.getFstComYn();
-//		int partiCnt = poll.getPartiCnt();
-//		// 중복참여가 아닌경우
-//		if(partYn.equals("N")) {
-//			int count = planningService.getCustAnswerCount(plan);
-//			if (count>0) {
-//				result.set("msg","이미 응모하셨습니다.");
-//				result.set("status","1");
-//			}
-//		}
-//		else if (comYn.equals("Y")) {
-//			int count = planningService.getCustAnswerPartiCount(poll);
-//			if (count>=partiCnt) {
-//				result.set("msg","선착순 응모가 마감되었습니다.");
-//				result.set("status","2");
-//			}
-//			
-//		}
-//		return result;
-//	}
-	
+
 
 	
 	/**
@@ -522,7 +488,7 @@ public class TsfPlanningController extends TsfBaseController {
 	 * @since 2021. 3. 30
 	 */
 	@GetMapping("/shot/delivery/guide/form")
-	public ModelAndView planningShotDeliveryForm(Plan plan) throws Exception {
+	public ModelAndView planningShotDeliveryForm(@RequestParam(value="planSq")Integer planSq ,Plan plan) throws Exception {
 		ModelAndView mav = new ModelAndView();
 		CustDeliveryAddr addr = new CustDeliveryAddr();
 		Integer custNo = null;
@@ -536,11 +502,17 @@ public class TsfPlanningController extends TsfBaseController {
 			customer = coreCustomerService.getCustomerInfo(customer);
 			mav.addObject("customerInfo", customer);
 		}
-		
+		plan.setFrontGb(TsfSession.getFrontGb());
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setCustGb(TsfSession.getCustGb());
+		// 코너 목록
+		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
+		// 코너 상품
+		mav.addObject("planCornerGoodsList", planningService.getPlanningCornerGoodsList(plan));
 
 		addr.setCustNo(custNo);
-		plan.setSiteCd(TscConstants.Site.STYLE24.value());
-		plan.setFrontGb(TsfSession.getFrontGb());
+		
+		
 		mav.addObject("custAddr", planningService.getCustAddrInfo(addr));
 		mav.addObject("shotHtml", planningService.getShotDeliveryHtml(plan));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningShotGuideForm"));

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

@@ -1,16 +1,20 @@
 package com.style24.front.biz.web;
 
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.service.TsfSocialService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.Plan;
 import com.style24.persistence.domain.Social;
 
 import lombok.extern.slf4j.Slf4j;
@@ -48,11 +52,29 @@ public class TsfSocialController extends TsfBaseController {
 		mav.addObject("socialInfo", socialService.getSocialInfo(social));
 		
 		// 소셜(핫딜)-상품목록
-		mav.addObject("socialGoods", socialService.getSocialGoodsList(social));
+		//mav.addObject("socialGoods", socialService.getSocialGoodsList(social));
 	
 		mav.setViewName(super.getDeviceViewName("social/SocialMainForm"));
 		return mav;
 	}
 	
+	/**
+	 * 소셜 상품 리스트
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 4. 29
+	 */
+	@GetMapping("/list")
+	@ResponseBody
+	public Collection<Social> getSocialList(Social social) {
+		social.setFrontGb(TsfSession.getFrontGb());
+		social.setCustGb(TsfSession.getCustGb());
+		social.setSiteCd(TscConstants.Site.STYLE24.value());
+		
+
+		return socialService.getSocialGoodsList(social);
+	}
+	
 
 }

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

@@ -47,9 +47,10 @@ public class TsfLoginSuccessHandler implements AuthenticationSuccessHandler {
 		"/customer/password/change/form",			// 비밀번호 변경 화면
 		"/customer/join/complete/form",				// 회원가입완료
 		"/customer/join/type/form",					// 회원가입유형
-		"/customer/dormant/certify/complete/form",	// 휴면해제
+		"/customer/dormant/certify/form",			// 휴면해제화면
+		"/customer/dormant/certify/complete/form",	// 휴면해제완료
 		"/customer/certification/form",				// 본인인증화면
-		"customer/noncust/order/confirm/form"		// 비회원주문화면
+		"/customer/noncust/order/confirm/form"		// 비회원주문화면
 	};
 
 	private static final int CHANG_PWD_CAMPAIGN_DAY = 90;	// 비밀번호 변경 캠페인일자

+ 7 - 0
src/main/java/com/style24/persistence/domain/Goods.java

@@ -209,4 +209,11 @@ public class Goods extends TscBaseDomain {
 	private String sizes;
 	private String icon;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] sizeArr;		// 상품사이즈
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] colorArr;		// 상품컬러
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] benefitArr;		// 상품혜택
+
 }

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

@@ -50,6 +50,7 @@ public class GoodsCompose extends TscBaseDomain {
 	private Collection<GoodsNotiInfo> goodsNotiList;
 	private Collection<GoodsStock> goodsSizeList;
 	private Collection<GoodsImg> goodsImgList;
+	private GoodsSafeNo goodsSafeNo;
 
 	//상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:상위컨텐츠-모바일,70:하위컨텐츠-모바일,80:상품상세(as-is,입점))
 	private String goodsTitle; 			// 10:상품타이틀

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

@@ -109,6 +109,8 @@ public class Plan extends TscBaseDomain {
 	private String cateNm;			// 카테고리명
 	private Integer cateNo;			// 카테고리번호
 	private String brandGroupNm;	// 브랜드 그룹 이름
+	private String colorChips;
+	private String icon;
 
 	// 고객등급
 	private String custGradeName;	// 접근가능고객 등급 네임

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

@@ -654,7 +654,7 @@
 		                        GROUP  BY  A.CART_SQ
 		               ) STOCK
 		        ON     C.CART_SQ = STOCK.CART_SQ
-		        LEFT   OUTER JOIN TB_GOODS_QUICK_DELEVERY_SKIP GQDS
+		        LEFT   OUTER JOIN TB_GOODS_SHOT_DELV_SKIP GQDS
 		        ON     G.GOODS_CD = GQDS.GOODS_CD
 		        WHERE  1=1
 		        <if test="custNo == 0">

+ 6 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -201,13 +201,13 @@
 		     , A.FIRST_ORD_YN
 		     , A.BUY_STDT
 		     , A.BUY_EDDT
-		     , A.CURR_PRICE
+		    -- , A.CURR_PRICE
 		     , DATE_FORMAT(A.AVAIL_EDDT, '%Y-%m-%d') AS AVAIL_EDDT
 		     , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = A.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
 		     , (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = A.CPN_ID) AS TOT_COUPON_CNT
 		     , RNUM
 		FROM (
-		SELECT   CPN_ID
+		SELECT  DISTINCT CPN_ID
 		       , CPN_NM
 		       , DC_AMT
 		       , DC_VAL
@@ -226,7 +226,7 @@
 		       , FIRST_ORD_YN
 		       , BUY_STDT
 		       , BUY_EDDT
-		       , CURR_PRICE
+		      -- , CURR_PRICE
 		       , RANK() OVER(ORDER BY DC_AMT DESC)  AS RNUM   -- 할인금액순
 		FROM   (
 		        SELECT CP.CPN_ID                                              -- 쿠폰ID
@@ -749,11 +749,13 @@
 		        WHERE 1=1
 		        AND CUST_NO = #{custNo}
 		        AND NOW() BETWEEN AVAIL_STDT AND AVAIL_EDDT 
-		        AND NOW() BETWEEN DATE_ADD(AVAIL_EDDT , INTERVAL -7 DAY) AND AVAIL_EDDT ) AS EXPIRE_COUPON_CNT
+		        AND NOW() BETWEEN DATE_ADD(AVAIL_EDDT , INTERVAL -7 DAY) AND AVAIL_EDDT 
+		        AND USED_DT IS NULL) AS EXPIRE_COUPON_CNT
 		FROM TB_CUST_COUPON 
 		WHERE 1=1
 		  AND CUST_NO = #{custNo}
 		  AND NOW() BETWEEN AVAIL_STDT AND AVAIL_EDDT
+		  AND USED_DT IS NULL
 	</select>
 	
 	<select id="getCouponDetailInfo" resultType="Coupon" parameterType="Coupon">

+ 21 - 18
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -648,7 +648,9 @@
 		      , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
 		             WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
 		             WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		             WHEN GB.BENEFIT_GB = '40' THEN '신상' ELSE '' END AS FILTER_NM
+		             WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		             WHEN GB.BENEFIT_GB = '50' THEN '총알배송'
+		             ELSE '' END AS FILTER_NM
 		FROM	TB_GOODS_BENEFIT GB
 		INNER JOIN TB_CATE_GOODS CG ON GB.GOODS_CD = CG.GOODS_CD
 		WHERE	1=1
@@ -715,14 +717,14 @@
 		                  , G.GOODS_TNM                                                                          /*상품타이틀명*/
 		                  , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
 		                  , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                  , CASE WHEN 'P' = 'P' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                  WHEN 'P' = 'M' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                  WHEN 'P' = 'A' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                  WHEN 'P' = 'P' AND GBP.CUST_GB != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                  WHEN 'P' = 'M' AND GBP.CUST_GB != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                  WHEN 'P' = 'A' AND GBP.CUST_GB != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                  ELSE G.CURR_PRICE
-		                  END                                                   AS CURR_PRICE       /*현재판매가*/
+		                  , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		                         WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		                         WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		                         WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		                         WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		                         WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		                         ELSE G.CURR_PRICE
+		                    END                                                   AS CURR_PRICE       /*현재판매가*/
 		                  , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
 		                  , G.FORMAL_GB /*정상이월구분*/
 		                  , G.REG_DT                                                                             /*등록일시*/
@@ -890,14 +892,14 @@
 		                         , G.GOODS_TNM                                                                          /*상품타이틀명*/
 		                         , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
 		                         , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                         , CASE WHEN 'P' = 'P' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                         WHEN 'P' = 'M' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                         WHEN 'P' = 'A' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                         WHEN 'P' = 'P' AND GBP.CUST_GB != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                         WHEN 'P' = 'M' AND GBP.CUST_GB != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                         WHEN 'P' = 'A' AND GBP.CUST_GB != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                         ELSE G.CURR_PRICE
-		                         END                                                   AS CURR_PRICE       /*현재판매가*/
+		                         , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		                                WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		                                WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		                                WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		                                WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		                                WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		                                ELSE G.CURR_PRICE
+		                           END                                                   AS CURR_PRICE       /*현재판매가*/
 		                         , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
 		                         , G.FORMAL_GB /*정상이월구분*/
 		                         , G.REG_DT                                                                             /*등록일시*/
@@ -1096,7 +1098,8 @@
 		                , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
 		                       WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
 		                       WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		                       ELSE '신상' END AS BENEFIT_NM
+		                       WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		                       ELSE '총알배송' END AS BENEFIT_NM
 		                , RANK() OVER(ORDER BY GB.BENEFIT_GB, GB.GOODS_CD) AS NUMB
 		                FROM   TB_GOODS_BENEFIT GB
 		                WHERE  GB.GOODS_CD = G.GOODS_CD

+ 24 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -187,7 +187,7 @@
 		                                     AND G.DELV_FEE_CD =  E.DELV_FEE_CD
 		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
-		LEFT OUTER JOIN TB_GOODS_QUICK_DELEVERY_SKIP DS ON G.GOODS_CD =DS.GOODS_CD
+		LEFT OUTER JOIN TB_GOODS_SHOT_DELV_SKIP DS ON G.GOODS_CD =DS.GOODS_CD
 		WHERE G.GOODS_CD = #{goodsCd}
 		AND NOW() BETWEEN SELL_STDT AND SELL_EDDT	/*판매기간 확인*/
 		<if test='adminYn == null or adminYn != "Y"'>
@@ -1031,13 +1031,33 @@
 		                               AND C.TMTB_SECTION_SQ  = D.TMTB_SECTION_SQ  
 		                               AND D.DEL_YN  = 'N'
 		      INNER JOIN TB_TMTB_APPLY_GOODS B ON A.TMTB_SQ = B.TMTB_SQ
+		                                       <choose>
+		                                           <when test="arrGoodsCd != null and arrGoodsCd != ''">
+		                                       AND B.GOODS_CD IN
+		                                           <foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
+		                                           UPPER(#{item})
+		                                           </foreach>
+		                                           </when>
+		                                           <otherwise>
 		                                       AND B.GOODS_CD =  #{goodsCd}
+		                                           </otherwise>
+		                                       </choose>
 		                                       AND B.DEL_YN = 'N'
 		                                       AND B.GOODS_GB IN ( 'G800_10', 'G800_20')  -- 기본과 적용상품
 		      LEFT OUTER JOIN TB_TMTB_APPLY_GOODS E ON A.TMTB_SQ = E.TMTB_SQ
-		                                       AND E.GOODS_CD = #{goodsCd}
-		                                       AND E.DEL_YN = 'N'
-		                                       AND E.GOODS_GB = 'G800_30'  -- 제외상품 
+		                                            <choose>
+		                                                <when test="arrGoodsCd != null and arrGoodsCd != ''">
+		                                            AND E.GOODS_CD IN
+		                                                <foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
+		                                                UPPER(#{item})
+		                                                </foreach>
+		                                                </when>
+		                                                <otherwise>
+		                                            AND E.GOODS_CD =  #{goodsCd}
+		                                                </otherwise>
+		                                            </choose>
+		                                            AND E.DEL_YN = 'N'
+		                                            AND E.GOODS_GB = 'G800_30'  -- 제외상품 
 		      WHERE NOW() BETWEEN A.TMTB_ST_DT AND A.TMTB_ED_DT
 		      AND A.TMTB_STAT ='G232_11'  -- 진행중
 		      AND A.DEL_YN = 'N'

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

@@ -112,7 +112,9 @@
 					 , OD.CHANGEABLE_YN
 					 , OD.RETURNABLE_YN
 					 , G.SELF_GOODS_YN
-					 , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)							AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                             AS BRAND_NM
 					 , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)							AS ORD_DTL_STAT_NM
 					 , R.REVIEW_SQ
 					 , IF(NOW() <![CDATA[<]]> O.ORD_DT + INTERVAL 90 DAY, 'Y', 'N')		AS REVIEWABLE_YN
@@ -137,6 +139,10 @@
 				    ON OD.GOODS_CD = G.GOODS_CD
 				 INNER JOIN TB_BRAND B
 				    ON B.BRAND_CD = G.BRAND_CD
+				   AND B.USE_YN = 'Y'
+				 INNER JOIN TB_BRAND_GROUP BG
+				    ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+				   AND BG.USE_YN = 'Y'
 				 INNER JOIN TB_PAYMENT P
 				    ON O.ORD_NO = P.ORD_NO
 				   AND P.PAY_GB = 'O'
@@ -196,7 +202,14 @@
 				</foreach>
 			</if>
 			<if test="ordDtlStat != null and ordDtlStat != ''">
+				<choose>
+					<when test="ordDtlStat == 'G013_00'">
+		   AND OD.ORD_DTL_STAT = 'G013_10'
+					</when>
+					<otherwise>
 		   AND OD.ORD_DTL_STAT = #{ordDtlStat}
+					</otherwise>
+				</choose>
 			</if>
 		   AND O.DISP_YN = 'Y'
 		   AND OD.ORD_DTL_STAT <![CDATA[<>]]> 'G013_25'
@@ -265,7 +278,14 @@
 		   AND O.ORD_DT BETWEEN CONCAT(#{stDate}, ' 00:00:00') AND CONCAT(#{edDate}, ' 23:59:59')
 		</if>
 		<if test="ordDtlStat != null and ordDtlStat != ''">
+			<choose>
+				<when test="ordDtlStat == 'G013_00'">
+		   AND OD.ORD_DTL_STAT = 'G013_10'
+				</when>
+				<otherwise>
 		   AND OD.ORD_DTL_STAT = #{ordDtlStat}
+				</otherwise>
+			</choose>
 		</if>
 		<choose>
 			<when test="custNo > 0">

+ 31 - 17
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -452,11 +452,13 @@
 		             , OD.ORD_NO
 		             , OCD.ORD_DTL_NO
 		             , G1.GOODS_CD
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                             AS BRAND_NM
 		             , OD.SHOT_DELV_YN
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
-		             , IFNULL(C.COLOR_KNM, ODI.OPT_CD1)                                 AS COLOR_NM
+		             , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 		             , G2.GOODS_NM                                                      AS ITEM_NM
 		             , G1.GOODS_TYPE
 		             , ODI.ORD_DTL_ITEM_SQ
@@ -504,9 +506,10 @@
 		            ON ODI.ITEM_CD = G2.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON G1.BRAND_CD = B.BRAND_CD
-		          LEFT OUTER JOIN TB_COLOR C
-		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD)
-		           AND C.USE_YN = 'Y'
+		           AND B.USE_YN = 'Y'
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN TB_REFUND R
 		            ON R.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		         WHERE OCD.DEL_YN = 'N'
@@ -603,6 +606,7 @@
 		            ON ODI.ITEM_CD = G2.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON G1.BRAND_CD = B.BRAND_CD
+		           AND B.USE_YN = 'Y'
 		         WHERE O.CUST_NO = #{custNo}
 		           AND O.DISP_YN = 'Y'
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
@@ -675,6 +679,7 @@
 		    ON ODI.ITEM_CD = G2.GOODS_CD
 		 INNER JOIN TB_BRAND B
 		    ON G1.BRAND_CD = B.BRAND_CD
+		   AND B.USE_YN = 'Y'
 		 WHERE O.CUST_NO = #{custNo}
 		   AND O.DISP_YN = 'Y'
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
@@ -836,7 +841,9 @@
 		             , OD.GFCD_USE_AMT
 		             , OCD.ORD_DTL_NO
 		             , G1.GOODS_CD
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                             AS BRAND_NM
 		             , OD.SHOT_DELV_YN
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
@@ -893,9 +900,10 @@
 		            ON ODI.ITEM_CD = G2.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON G1.BRAND_CD = B.BRAND_CD
-		          LEFT OUTER JOIN TB_COLOR C
-		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD)
-		           AND C.USE_YN = 'Y'
+		           AND B.USE_YN = 'Y'
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN TB_REFUND R
 		            ON R.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		         INNER JOIN TB_PAYMENT P
@@ -1009,7 +1017,9 @@
 		             , OD.GFCD_USE_AMT
 		             , OCD.ORD_DTL_NO
 		             , G1.GOODS_CD
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                             AS BRAND_NM
 		             , OD.SHOT_DELV_YN
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
@@ -1073,9 +1083,10 @@
 		            ON ODI.ITEM_CD = G2.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON G1.BRAND_CD = B.BRAND_CD
-		          LEFT OUTER JOIN TB_COLOR C
-		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD)
-		           AND C.USE_YN = 'Y'
+		           AND B.USE_YN = 'Y'
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN TB_REFUND R
 		            ON R.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		         INNER JOIN TB_PAYMENT P
@@ -1183,7 +1194,9 @@
 		             , OD.GFCD_USE_AMT
 		             , OCD.ORD_DTL_NO
 		             , G1.GOODS_CD
-		             , CONCAT(B.BRAND_ENM, ' ', B.BRAND_KNM)                            AS BRAND_NM
+		             , CASE BG.DISP_NM_LANG WHEN 'EN' THEN BG.BRAND_GROUP_ENM
+		                                    ELSE BG.BRAND_GROUP_KNM
+		                END                                                             AS BRAND_NM
 		             , OD.SHOT_DELV_YN
 		             , G1.SELF_GOODS_YN
 		             , G1.GOODS_NM
@@ -1245,9 +1258,10 @@
 		            ON ODI.ITEM_CD = G2.GOODS_CD
 		         INNER JOIN TB_BRAND B
 		            ON G1.BRAND_CD = B.BRAND_CD
-		          LEFT OUTER JOIN TB_COLOR C
-		            ON C.COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD)
-		           AND C.USE_YN = 'Y'
+		           AND B.USE_YN = 'Y'
+		         INNER JOIN TB_BRAND_GROUP BG
+		            ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		           AND BG.USE_YN = 'Y'
 		          LEFT OUTER JOIN TB_PAYMENT P
 		            ON P.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		           AND P.PAY_GB = 'D'

+ 142 - 103
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -818,7 +818,7 @@
 	<select id="getPlanGoodsDisplayList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanGoodsDisplayList */
 		SELECT Z.*
-		      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
+		      ,(CASE WHEN Z.LIST_PRICE > 0 THEN 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
 		FROM
 		(
 		WITH TAB_PLAN_GOODS AS (
@@ -929,111 +929,150 @@
 		ORDER BY PD.DISP_ORD 
 	</select>
 	
-	<!-- 기획전 상세 상품 목록 -->
+	<!-- 기획전코너상품 목록 -->
 	<select id="getPlanningCornerGoodsList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanningCornerGoodsList */
 		SELECT Z.*
-		      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
-		FROM
-		(
-		WITH TAB_PLAN_GOODS AS (
-		    SELECT P.PLAN_SQ                                                /*기획전번호*/
-		         , PD.CORNER_NM                                             /*코너명*/
-		         , PG.DISP_ORD                                              /*상품노출순서*/
-		         , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
-		                    BG.BRAND_GROUP_ENM
-		                ELSE
-		                    BG.BRAND_GROUP_KNM
-		           END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
-		         , G.GOODS_CD                                               /*상품코드*/
-		         , G.GOODS_NM                                               /*상품명*/
-		         , G.GOODS_GB                                               /*상품구분*/
-		         , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
-		         , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
-		         , G.ORDER_MADE_YN                                          /*주문제작여부*/
-		         , G.GOODS_TNM                                              /*상품타이틀명*/
-		         , G.MAIN_COLOR_CD                                          /*대표색상코드*/
-		         , G.LIST_PRICE                                             /*정상가(최초판매가)*/
-		         , G.CURR_PRICE                                             /*현재판매가*/
-		         , RANK() OVER(PARTITION BY P.PLAN_SQ
-		                       ORDER BY PG.DISP_ORD
-		                              , PG.GOODS_CD)      AS NUMB
-		    FROM   TB_PLAN P
-		         , TB_PLAN_DETAIL PD
-		         , TB_PLAN_GOODS PG
-		         , TB_GOODS G
-		         , TB_GOODS_STOCK GS
-		         , TB_BRAND B
-		         , TB_BRAND_GROUP BG
-		    WHERE  P.PLAN_SQ = PD.PLAN_SQ
-		    AND    PD.PLAN_DTL_SQ = PG.PLAN_DTL_SQ
-		    AND    PG.GOODS_CD = G.GOODS_CD
-		    AND    G.GOODS_CD = GS.GOODS_CD
-		    AND    G.BRAND_CD = B.BRAND_CD
-		    AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
-		    AND    P.PLAN_SQ = #{planSq}
-		    -- AND    P.PLAN_GB = 'P' /*기획전*/
-		    AND    P.SITE_CD = #{siteCd}
-		    <if test="frontGb != null and frontGb != ''">
-		    AND    P.FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
-		    </if>
-		    AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
-		    AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
-		    AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
-		    AND    NOW() BETWEEN PD.DISP_STDT AND PD.DISP_EDDT
-		    AND    PD.DISP_YN = 'Y' /*전시하는코너*/
-		    AND    PG.DEL_YN = 'N' /*삭제안된상품*/
-		    AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
-		    AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
-		    AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
-		    AND    B.USE_YN = 'Y'
-		    AND    BG.USE_YN = 'Y'
-		    AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT
-		)
-		, TAB_GOODS_IMG AS (
-		    /* 상품의 이미지 */
-		    SELECT PG.GOODS_CD
-		         , MAX(CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END)   AS SYS_IMG_NM
-		         , MAX(CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END) AS SYS_IMG_NM2
-		    FROM   TAB_PLAN_GOODS PG
-		         , TB_GOODS_IMG GI
-		    WHERE  PG.GOODS_CD = GI.GOODS_CD
-		    AND    PG.MAIN_COLOR_CD = GI.COLOR_CD
-		    AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
-		    GROUP  BY PG.GOODS_CD
-		)
-		SELECT PG.PLAN_SQ
-		     , PG.CORNER_NM
-		     , PG.DISP_ORD
-		     , PG.BRAND_GROUP_NM
-		     , PG.GOODS_CD
-		     , 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명*/
-		     , PG.GOODS_NM
-		     , PG.GOODS_TNM
-		     , PG.MAIN_COLOR_CD
-		     , PG.LIST_PRICE
-		     , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                              AS CURR_PRICE    /*현재판매가*/
-		     , GI.SYS_IMG_NM
-		     , GI.SYS_IMG_NM2
-		     <choose>
-		         <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
-		     , IF(W.GOODS_CD IS NULL,'','likeit')                                                                AS LIKE_IT       /*위시리스트담긴상품*/
-		         </when>
-		         <otherwise>
-		     , ''                                                                                                AS LIKE_IT       /*위시리스트담긴상품*/
-		         </otherwise>
-		     </choose>
-		     
-		FROM   TAB_PLAN_GOODS PG
-		INNER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
-		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
-		LEFT OUTER JOIN TB_WISHLIST W ON PG.GOODS_CD = W.GOODS_CD
-		                             AND W.CUST_NO = #{custNo}
-		</if>
-		<if test="maxRow != null and maxRow > 0">
-		WHERE  PG.NUMB <![CDATA[<=]]> #{maxRow}
-		</if>
-		)Z
+		     ,(CASE WHEN Z.LIST_PRICE > 0 THEN 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
+		FROM   (
+		        WITH TAB_PLAN_GOODS AS (
+		            SELECT P.PLAN_SQ                                                /*기획전번호*/
+		                 , PD.CORNER_NM                                             /*코너명*/
+		                 , PG.DISP_ORD                                              /*상품노출순서*/
+		                 , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                            BG.BRAND_GROUP_ENM
+		                        ELSE
+		                            BG.BRAND_GROUP_KNM
+		                   END                                    AS BRAND_GROUP_NM /*브랜드그룹명*/
+		                 , G.GOODS_CD                                               /*상품코드*/
+		                 , G.GOODS_NM                                               /*상품명*/
+		                 , G.GOODS_GB                                               /*상품구분*/
+		                 , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                 , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                 , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                 , G.GOODS_TNM                                              /*상품타이틀명*/
+		                 , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                 , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                 , G.CURR_PRICE                                             /*현재판매가*/
+		                 , RANK() OVER(PARTITION BY P.PLAN_SQ
+		                               ORDER BY PG.DISP_ORD
+		                                      , PG.GOODS_CD)      AS NUMB
+		            FROM   TB_PLAN P
+		                 , TB_PLAN_DETAIL PD
+		                 , TB_PLAN_GOODS PG
+		                 , TB_GOODS G
+		                 , TB_GOODS_STOCK GS
+		                 , TB_BRAND B
+		                 , TB_BRAND_GROUP BG
+		            WHERE  P.PLAN_SQ = PD.PLAN_SQ
+		            AND    PD.PLAN_DTL_SQ = PG.PLAN_DTL_SQ
+		            AND    PG.GOODS_CD = G.GOODS_CD
+		            AND    PG.GOODS_CD = GS.GOODS_CD
+		            AND    G.BRAND_CD = B.BRAND_CD
+		            AND    B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		            AND    P.PLAN_SQ = #{planSq}
+		            -- AND    P.PLAN_GB = 'P' /*기획전*/
+		            AND    P.SITE_CD = #{siteCd}
+		            <if test="frontGb != null and frontGb != ''">
+		            AND    P.FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
+		            </if>
+		            AND    NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT /*현재 전시되는 기획전*/
+		            AND    P.DEL_YN = 'N' /*삭제안된 기획전*/
+		            AND    P.OPEN_YN = 'Y' /*오픈된 기획전*/
+		            AND    NOW() BETWEEN PD.DISP_STDT AND PD.DISP_EDDT /*현재 전시되는 코너*/
+		            AND    PD.DISP_YN = 'Y' /*전시하는코너*/
+		            AND    PG.DEL_YN = 'N' /*삭제안된상품*/
+		            AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		            AND    G.SELF_MALL_YN = 'Y'   /*몰노출상품*/
+		            AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*현재 판매되는 상품*/
+		            AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		            AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		            AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		        )
+		        , TAB_GOODS_IMG AS (
+		            /* 상품의 이미지 */
+		            SELECT PG.GOODS_CD
+		                 , MAX(CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END)   AS SYS_IMG_NM
+		                 , MAX(CASE WHEN GI.MOUSEOVER_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END) AS SYS_IMG_NM2
+		            FROM   TAB_PLAN_GOODS PG
+		                 , TB_GOODS_IMG GI
+		            WHERE  PG.GOODS_CD = GI.GOODS_CD
+		            AND    PG.MAIN_COLOR_CD = GI.COLOR_CD
+		            AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
+		            GROUP  BY PG.GOODS_CD
+		        )
+		        , TAB_COLORCHIP AS (
+		            /* 상품 컬러칩 */
+		            SELECT PG.GOODS_CD
+		                 , GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
+		            FROM   TAB_PLAN_GOODS PG
+		                 , TB_OPTION O
+		                 , TB_COLOR C
+		                 , TB_COMMON_CODE CC
+		            WHERE  PG.GOODS_CD = O.GOODS_CD
+		            AND    O.OPT_CD1 = C.COLOR_CD
+		            AND    C.COLOR_GRP_CD = CC.CD
+		            AND    O.DISP_YN = 'Y'
+		            AND    C.USE_YN = 'Y'
+		            AND    CC.USE_YN = 'Y'
+		            GROUP  BY PG.GOODS_CD
+		        )
+		        , TAB_GOODS_BENEFIT AS (
+		            /* 상품혜택 */
+		            SELECT GOODS_CD
+		                 , GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',') AS ICON
+		            FROM   (
+		                    SELECT PG.GOODS_CD
+		                         , GB.BENEFIT_GB
+		                         , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		                                WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		                                WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		                                ELSE '신상'
+		                           END                               AS BENEFIT_NM
+		                         , RANK() OVER(PARTITION BY PG.GOODS_CD
+		                                       ORDER BY GB.BENEFIT_GB
+		                                              , GB.GOODS_CD) AS NUMB
+		                    FROM   TAB_PLAN_GOODS PG
+		                         , TB_GOODS_BENEFIT GB
+		                    WHERE  PG.GOODS_CD = GB.GOODS_CD
+		                   ) Z
+		            GROUP  BY GOODS_CD
+		        )
+		        SELECT PG.PLAN_SQ
+		             , PG.CORNER_NM
+		             , PG.DISP_ORD
+		             , PG.BRAND_GROUP_NM
+		             , PG.GOODS_CD
+		             , 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명*/
+		             , PG.GOODS_NM
+		             , PG.GOODS_TNM
+		             , PG.MAIN_COLOR_CD
+		             , PG.LIST_PRICE
+		             , FN_GET_BENEFIT_PRICE(#{frontGb},PG.GOODS_CD,PG.CURR_PRICE,#{custGb})                              AS CURR_PRICE    /*현재판매가*/
+		             , GI.SYS_IMG_NM
+		             , GI.SYS_IMG_NM2
+		             , C.COLOR_CHIPS                                                                                                      /*컬러칩*/
+		             , GB.ICON                                                                                                            /*혜택아이콘*/
+		             <choose>
+		                 <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		             , IF(W.GOODS_CD IS NULL,'','likeit')                                                                AS LIKE_IT       /*위시리스트담긴상품*/
+		                 </when>
+		                 <otherwise>
+		             , ''                                                                                                AS LIKE_IT       /*위시리스트담긴상품*/
+		                 </otherwise>
+		             </choose>
+		        FROM   TAB_PLAN_GOODS PG
+		        LEFT OUTER JOIN TAB_GOODS_IMG GI ON PG.GOODS_CD = GI.GOODS_CD
+		        LEFT OUTER JOIN TAB_COLORCHIP C ON PG.GOODS_CD = C.GOODS_CD
+		        LEFT OUTER JOIN TAB_GOODS_BENEFIT GB ON PG.GOODS_CD = GB.GOODS_CD
+		        <if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		        LEFT OUTER JOIN TB_WISHLIST W ON PG.GOODS_CD = W.GOODS_CD
+		                                     AND W.CUST_NO = #{custNo}
+		        </if>
+		        <if test="maxRow != null and maxRow > 0">
+		        WHERE  PG.NUMB <![CDATA[<=]]> #{maxRow}
+		        </if>
+		       ) Z
 	</select>
 	
 	<!-- 총알배송 html 소스  -->

+ 125 - 139
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -41,167 +41,153 @@
 		FROM   TB_CUST_POINT
 		WHERE  CUST_NO = #{custNo}
 		AND    EXP_BE_DT > NOW()
-		AND    EXP_BE_DT <![CDATA[<]]> DATE_ADD(NOW(),INTERVAL 30 DAY)
+		AND    EXP_BE_DT <![CDATA[<]]> DATE_ADD(NOW(),INTERVAL 31 DAY)
 	</select>
 	
 	<!-- 적립내역 조회-->
 	<select id="getAccumulatePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAccumulatePointList */
-		SELECT CASE TCHP.OCCUR_GB
+		SELECT  CASE CPH.OCCUR_GB
+					WHEN 'G069_11' THEN '구매 취소'
 		            WHEN 'G069_12' THEN '상품 구매'
-		            WHEN 'G069_20' THEN '상품평'
+		            WHEN 'G069_20' THEN '리뷰'
 		            WHEN 'G069_30' THEN '이벤트'
 		            WHEN 'G069_31' THEN '회원가입'
-		            WHEN 'G069_32' THEN '생일축하'
-		            WHEN 'G069_35' THEN 'APP다운'
-		            WHEN 'G069_36' THEN '사은품구매'
+		            WHEN 'G069_32' THEN '생일'
+		            WHEN 'G069_35' THEN 'APP'
 		            WHEN 'G069_37' THEN '이벤트'
+		            WHEN 'G069_41' THEN '구매 취소'
+		            WHEN 'G069_43' THEN '구매 취소'
+		            WHEN 'G069_44' THEN '관리자'
 		            WHEN 'G069_90' THEN '관리자'
 		       END                                          AS OCCUR_GB
-		     , CASE TCHP.OCCUR_GB
-		            WHEN 'G069_12' THEN TG.GOODS_NM
-		            WHEN 'G069_20' THEN TG.GOODS_NM
-		            WHEN 'G069_30' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_31' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_32' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_35' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_36' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_37' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_90' THEN TCHP.OCCUR_DTL_DESC
+		    , CASE CPH.OCCUR_GB
+					WHEN 'G069_11' THEN G.GOODS_NM
+		            WHEN 'G069_12' THEN G.GOODS_NM
+		            WHEN 'G069_20' THEN G.GOODS_NM
+		            WHEN 'G069_30' THEN '이벤트'
+		            WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_37' THEN '출석체크'
+		            WHEN 'G069_41' THEN G.GOODS_NM
+		            WHEN 'G069_43' THEN G.GOODS_NM
+		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
 		       END                                          AS  OCCUR_DTL_DESC
-		      , TCHP.PNT_AMT                                AS PNT_AMT
-		      , TCHP.UPD_DT                                 AS PNT_UPLOAD_DT
-		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN
-		    (
-		     SELECT REVIEW_SQ
-		          , ORD_NO
-		          , ORD_DTL_NO
-		          , GOODS_CD
-		     FROM   TB_REVIEW TR
-		     WHERE  TR.PNT_GIVE_STAT = 'G043_30'            /* 리뷰조건 : 포인트지급반영*/
-		    ) TR
-		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
-		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
-		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TCHP.ORD_NO = TOD.ORD_NO
-		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
-		LEFT JOIN TB_GOODS TG
-		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
-		WHERE TCHP.CUST_NO = #{custNo}
-		<!-- AND CASE WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NULL THEN 1
-		         WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NOT NULL AND NULLIF(TR.REVIEW_SQ, 0) IS NOT NULL THEN 1 /* 상품평조건 */
-		    END > 0 -->
-		AND TCHP.OCCUR_GB IN ('G069_12','G069_20','G069_30','G069_31','G069_32','G069_35','G069_36','G069_37','G069_90')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
-		AND TCHP.PNT_AMT <![CDATA[>]]> 0
-		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.REVIEW_SQ,TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
-		ORDER BY TCHP.UPD_DT DESC;
+		     , CPH.PNT_AMT
+		     , CPH.REG_DT AS PNT_UPLOAD_DT
+		FROM TB_CUST_POINT_HST CPH
+		LEFT JOIN TB_ORDER_DETAIL OD
+		ON  CPH.ORD_NO = OD.ORD_NO
+		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS G
+		ON  OD.GOODS_CD = G.GOODS_CD
+		WHERE CPH.CUST_NO = #{custNo}
+		AND CPH.PNT_AMT > 0
+		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY CPH.REG_DT
 	</select>
 	
 	<!-- 사용내역 조회-->
 	<select id="getUsePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getUsePointList */
-	SELECT
-		CASE   TCHP.OCCUR_GB
-			WHEN   'G069_13' THEN '구매 취소'
-			WHEN   'G069_40' THEN '구매 사용'
-			WHEN   'G069_42' THEN '사은품'
-			WHEN   'G069_90' THEN '관리자'
-			WHEN   'G069_99' THEN '소멸'
-		END AS OCCUR_GB ,	
-		CASE   TCHP.OCCUR_GB	
-			WHEN   'G069_13' THEN TG.GOODS_NM
-			WHEN   'G069_40' THEN TG.GOODS_NM 
-			WHEN   'G069_42' THEN TG.GOODS_NM
-			WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-			WHEN   'G069_99' THEN '유효기간 경과 소멸'
-		END AS OCCUR_DTL_DESC
-			 , TCHP.PNT_AMT AS pntAmt
-			 , TCHP.UPD_DT  AS pntUploadDt
-		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN TB_ORDER_DETAIL TOD																/* 주문상세 */
-		ON TOD.ORD_NO = TCHP.ORD_NO
-		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
-		LEFT JOIN TB_ORD_FREEGIFT TOF																/* 사은품 */
-		ON TOD.ORD_NO = TOF.ORD_NO
-		LEFT JOIN TB_GOODS TG																		/* 상품품 */
-		ON TG.GOODS_CD = TOD.GOODS_CD 
-		WHERE TCHP.CUST_NO = #{custNo}
-		AND TCHP.OCCUR_GB IN ('G069_13','G069_40','G069_42','G069_90','G069_99')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
-		AND 0 <![CDATA[>]]> TCHP.PNT_AMT
-		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY  TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
-	ORDER BY TCHP.UPD_DT DESC;
+		SELECT  CASE CPH.OCCUR_GB
+		            WHEN 'G069_10' THEN '상품 구매'
+		            WHEN 'G069_13' THEN '구매 취소'
+		            WHEN 'G069_21' THEN '리뷰'
+		            WHEN 'G069_36' THEN '상품 구매'
+		            WHEN 'G069_40' THEN '상품 구매'
+		            WHEN 'G069_42' THEN '상품 구매'
+		            WHEN 'G069_46' THEN '적립취소'
+		            WHEN 'G069_90' THEN '관리자'
+		            WHEN 'G069_99' THEN '소멸'
+		       END                                          AS OCCUR_GB
+		     , CASE CPH.OCCUR_GB
+		            WHEN 'G069_10' THEN G.GOODS_NM
+		            WHEN 'G069_13' THEN G.GOODS_NM
+		            WHEN 'G069_21' THEN G.GOODS_NM
+		            WHEN 'G069_36' THEN G.GOODS_NM
+		            WHEN 'G069_40' THEN G.GOODS_NM
+		            WHEN 'G069_42' THEN G.GOODS_NM
+		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_99' THEN '유효기간 경과 소멸'
+		       END                                          AS  OCCUR_DTL_DESC
+		     , CPH.PNT_AMT
+		     , CPH.REG_DT
+		FROM TB_CUST_POINT_HST CPH
+		LEFT JOIN TB_ORDER_DETAIL OD
+		ON  CPH.ORD_NO = OD.ORD_NO
+		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS G
+		ON  OD.GOODS_CD = G.GOODS_CD
+		WHERE CPH.CUST_NO = #{custNo}
+		AND CPH.PNT_AMT <![CDATA[<]]> 0
+		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY CPH.ORD_NO, CPH.REG_DT
 	</select>
 	
 	<!-- 전체내역 조회-->
 	<select id="getAllPointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAllPointList */
-	SELECT
-		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_12' THEN '상품 구매'
-		WHEN   'G069_13' THEN '구매 취소'
-		WHEN   'G069_20' THEN '상품평'	
-		WHEN   'G069_30' THEN '이벤트'
-		WHEN   'G069_31' THEN '회원가입'
-		WHEN   'G069_32' THEN '생일축하'
-		WHEN   'G069_35' THEN 'APP다운'
-		WHEN   'G069_36' THEN '사은품구매'
-		WHEN   'G069_37' THEN '이벤트'
-		WHEN   'G069_40' THEN '구매 사용'
-		WHEN   'G069_42' THEN '사은품'
-		WHEN   'G069_90' THEN '관리자'
-		WHEN   'G069_99' THEN '소멸'
-		END AS OCCUR_GB ,	
-		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_12' THEN TG.GOODS_NM 
-		WHEN   'G069_13' THEN TG.GOODS_NM 
-		WHEN   'G069_20' THEN TG.GOODS_NM
-		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_31' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_32' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_35' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_36' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_37' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_40' THEN TG.GOODS_NM 
-		WHEN   'G069_42' THEN TG.GOODS_NM
-		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_99' THEN '유효기간 경과 소멸'
-		END AS OCCUR_DTL_DESC
-			 , TCHP.PNT_AMT AS pntAmt
-			 , TCHP.UPD_DT  AS pntUploadDt
-		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN 
-		(
-			SELECT REVIEW_SQ
-				 , ORD_NO 
-				 , ORD_DTL_NO 
-		         , GOODS_CD
-			FROM TB_REVIEW TR
-			WHERE TR.PNT_GIVE_STAT = 'G043_30'
-		) TR
-		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
-		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
-		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TCHP.ORD_NO = TOD.ORD_NO
-		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
-		LEFT JOIN TB_ORD_FREEGIFT TOF
-		ON TOD.ORD_NO = TOF.ORD_NO
-		LEFT JOIN TB_GOODS TG 
-		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
-		WHERE TCHP.CUST_NO = #{custNo}
-		<!-- AND CASE
-			WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NULL THEN 1
-			WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NOT NULL AND NULLIF(TR.REVIEW_SQ, 0) IS NOT NULL THEN 1
-		END <![CDATA[>]]> 0		 -->
-		AND TCHP.OCCUR_GB IN  ('G069_12','G069_13','G069_20','G069_30','G069_31','G069_32','G069_35','G069_36','G069_37','G069_40','G069_42','G069_90','G069_99')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
-		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.REVIEW_SQ, TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
-	ORDER BY TCHP.UPD_DT DESC;
+		SELECT  CASE CPH.OCCUR_GB
+		            WHEN 'G069_10' THEN '상품 구매'
+		            WHEN 'G069_11' THEN '구매 취소'
+		            WHEN 'G069_12' THEN '상품 구매'
+		            WHEN 'G069_13' THEN '구매 취소'
+		            WHEN 'G069_20' THEN '리뷰'
+		            WHEN 'G069_21' THEN '리뷰'
+		            WHEN 'G069_30' THEN '이벤트'
+		            WHEN 'G069_31' THEN '회원가입'
+		            WHEN 'G069_32' THEN '생일'
+		            WHEN 'G069_35' THEN 'APP'
+		            WHEN 'G069_36' THEN '상품 구매'
+		            WHEN 'G069_37' THEN '이벤트'
+		            WHEN 'G069_40' THEN '상품 구매'
+		            WHEN 'G069_41' THEN '구매 취소'
+		            WHEN 'G069_42' THEN '상품 구매'
+		            WHEN 'G069_43' THEN '구매 취소'
+		            WHEN 'G069_44' THEN '관리자'
+		            WHEN 'G069_45' THEN '관리자'
+		            WHEN 'G069_46' THEN '적립취소'
+		            WHEN 'G069_90' THEN '관리자'
+		            WHEN 'G069_99' THEN '소멸'
+		       END                                          AS OCCUR_GB
+     , CASE CPH.OCCUR_GB
+                    WHEN 'G069_10' THEN G.GOODS_NM
+		            WHEN 'G069_11' THEN G.GOODS_NM
+		            WHEN 'G069_12' THEN G.GOODS_NM
+		            WHEN 'G069_13' THEN G.GOODS_NM
+		            WHEN 'G069_20' THEN G.GOODS_NM
+		            WHEN 'G069_21' THEN G.GOODS_NM
+		            WHEN 'G069_30' THEN '이벤트'
+		            WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_36' THEN G.GOODS_NM
+		            WHEN 'G069_37' THEN '출석체크'
+		            WHEN 'G069_40' THEN G.GOODS_NM
+		            WHEN 'G069_41' THEN G.GOODS_NM
+		            WHEN 'G069_42' THEN G.GOODS_NM
+		            WHEN 'G069_43' THEN G.GOODS_NM
+		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_45' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_99' THEN '유효기간 경과 소멸'
+		       END                                          AS  OCCUR_DTL_DESC
+		     , CPH.PNT_AMT
+		     , CPH.REG_DT AS PNT_UPLOAD_DT
+		FROM TB_CUST_POINT_HST CPH
+		LEFT JOIN TB_ORDER_DETAIL OD
+		ON  CPH.ORD_NO = OD.ORD_NO
+		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS G
+		ON  OD.GOODS_CD = G.GOODS_CD
+		WHERE CPH.CUST_NO = #{custNo}
+		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY CPH.REG_DT
 	</select>
 
 	<!-- 고객 포인트 내역 -->

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

@@ -29,7 +29,7 @@
 	<select id="getWishListGoodsList" parameterType="WishList" resultType="Goods">
 		/* TsfWishlist.getWishListGoodsList*/
 		SELECT Z.*
-			      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
+			      ,(CASE WHEN Z.LIST_PRICE > 0 THEN 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
 			      ,DATE_FORMAT(Z.REG_DT,'%Y.%m') AS REG_DT_MONTH 
 			FROM
 			(

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

@@ -101,7 +101,7 @@
 							</th:block>
 							<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 							<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
+							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
 							<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 						</dd>
 					</dl>

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

@@ -154,7 +154,7 @@
 							</th:block>
 							<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 							<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
+							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
 							<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 						</dd>
 					</dl>

+ 29 - 15
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html

@@ -216,8 +216,9 @@
 	let authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
 
 	let orgCustInfo;
-	let orgAccountInfo;
 	let accountCheck = false;
+	let orgBankCd;
+	let orgAccountNo;
 
 	// 고객정보
 	var fnGetCustInfo = function () {
@@ -247,8 +248,6 @@
 		fnDisplayEmailAgree(custInfo.emailAgreeYn);
 		fnDisplaySmsAgree(custInfo.smsAgreeYn);
 
-		// 회원(고객) 계좌 조회
-		fnGetCustAccountInfo();
 	}
 
 	// 이메일 수신동의
@@ -283,8 +282,8 @@
 		orgAccountInfo = {};
 		var $accountNm = $('#custModiFyForm input[name=accountNm]');
 		if (!gagajf.isNull(result)) {
-			orgAccountInfo.accountNo = result.accountNo;
-			orgAccountInfo.bankCd = result.bankCd;
+			orgAccountNo = result.accountNo;
+			orgBankCd = result.bankCd;
 			//1. 고객명과 환불계좌 예금주가 다른 경우 현재 고객명을 적어주고 계좌번호, 은행코드 초기화 처리
 			let $bankCd = '';
 			if ($accountNm.val() === result.accountNm) {
@@ -298,8 +297,8 @@
 			}
 			$($bankCd).trigger('click'); // 셀렉트 박스 트리거
 		} else {
-			orgAccountInfo.accountNo = '';
-			orgAccountInfo.bankCd ='';
+			orgAccountNo = '';
+			orgBankCd ='';
 		}
 	}
 
@@ -371,6 +370,17 @@
 					$('#custModiFyForm input[name=email]').focus();
 				}
 			});
+			return;
+		}
+
+		if (!fnCheckValidationEmail(custModiFy.email)) {
+			mcxDialog.alertC('이메일 형식에 맞게 입력해주세요.',{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#custModiFyForm input[name=email]').focus();
+				}
+			});
+			return;
 		}
 
 		if (orgCustInfo.email !== custModiFy.email) {
@@ -383,11 +393,11 @@
 
 
 		// 은행코드가 바꼈는지
-		if (orgAccountInfo.bankCd !== $bankCd.val()) {
+		if (orgBankCd !== $bankCd.val()) {
 			accountModifyYn = 'Y';
 		}
 
-		if (orgAccountInfo.accountNo !== $accountNo.val()) {
+		if (orgAccountNo !== $accountNo.val()) {
 			accountModifyYn = 'Y';
 		}
 
@@ -434,12 +444,18 @@
 
 	// 수정 콜백
 	var fnSaveCustomerInfoCallback = function (result) {
+		accountCheck = false;
 		if (result.isSuccess) {
 			mcxDialog.alert("회원정보가 수정되었습니다.");
 			fnGetCustInfo();
+			fnGetCustAccountInfo();
 			return;
 		} else {
-			mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
+			let msg = '실패하였습니다.<br/>고객센터에 문의하시 바랍니다.'
+			if (result.resultType === 'INVALID_ACCOUNT') {
+				msg = '환불 계좌정보를 다시 확인하시고 계좌인증을 해주세요.'
+			}
+			mcxDialog.alert(msg);
 			return;
 		}
 	}
@@ -500,11 +516,6 @@
 		cfnOpenCellphoneCertify(_PAGE_MYPAGE_CUSTOMER_MODIFY+'?confirmYn=Y');
 	});
 
-	$(".btn_back").on("click", function () {
-		console.log("here");
-		cfnGoToPage(_PAGE_MYPAGE_CUSTOMER);
-	});
-
 	$(document).ready(function(){
 		if (!gagajf.isNull(sEncData)) {
 			fnNiceCallBack(sEncData, authMethod);
@@ -515,6 +526,9 @@
 		// 회원(고객) 조회
 		fnGetCustInfo();
 
+		// 회원(고객) 계좌 조회
+		fnGetCustAccountInfo();
+
 		//버튼 색
 		$(document).on('click','.popup_box .button_list button',function(){
 			$('.popup_box .button_list button').removeClass('on');

+ 79 - 75
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustPwdModifyFormMob.html

@@ -17,90 +17,90 @@
 <style>
 	.hide{display: none;}
 </style>
-	<div class="modal-dialog" role="document">
-		<div class="modal-content">
-			<div class="modal-header htop">
-				<h5 class="modal-title" id="passwordChangeLabel">비밀번호 변경</h5>
-			</div>
-			<div class="modal-body">
-				<div class="pop_cont">
-					<div class="pass_confirm">
-						<form id="pwdModifyForm" class="form_wrap">
-							<input type="hidden" name="custId" th:value="${custId}"/>
-							<div class="form_field">
-								<label class="input_label sr-only">기존 비밀번호를 입력해주세요.</label>
-								<div class="ui_col_12">
-									<input type="password" nid="orgPasswd" name="orgPasswd" placeholder="기존 비밀번호를 입력해주세요." class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="기존 비밀번호"/>
-								</div>
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header htop">
+			<h5 class="modal-title" id="passwordChangeLabel">비밀번호 변경</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+				<div class="pass_confirm">
+					<form id="pwdModifyForm" class="form_wrap">
+						<input type="hidden" name="custId" th:value="${custId}"/>
+						<div class="form_field">
+							<label class="input_label sr-only">기존 비밀번호를 입력해주세요.</label>
+							<div class="ui_col_12">
+								<input type="password" id="orgPasswd" name="orgPasswd" placeholder="기존 비밀번호를 입력해주세요." class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="기존 비밀번호"/>
 							</div>
-							<div class="form_field">
-								<label class="input_label sr-only">신규 비밀번호를 입력해주세요.</label>
-								<div class="ui_col_12">
-									<input type="password" id="passwd" name="passwd" placeholder="신규 비밀번호를 입력해주세요.(8~20자 영문, 숫자, 특수문자 중 2가지 이상 조합)" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="신규 비밀번호"/>
-									<!-- 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="ui_col_12">
+								<input type="password" id="passwd" name="passwd" placeholder="신규 비밀번호를 입력해주세요.(8~20자 영문, 숫자, 특수문자 중 2가지 이상 조합)" class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="신규 비밀번호"/>
+								<!-- 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="ui_col_12">
-									<input type="password" id="confirmPassword" name="confirmPassword" placeholder="신규 비밀번호를 다시 입력해주세요." class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="신규 비밀번호 확인"/>
-									<div class="help_block">
-										<!-- 비밀번호확인 틀렸을경우 -->
-										<p id="misPwd" class="hide">
-											<span class="t_err">
-												새 비밀번호가 일치하지 않습니다.
-											</span>
-										</p>
-										<!-- //비밀번호확인 틀렸을경우 -->
-										<!-- 비밀번호 일치할경우 -->
-										<p id="avlConPwd" class=" hide">
-											<span class="c_black2">
-												<i class="ico ico_check black mr5"></i>새 비밀번호가 일치합니다.
-											</span>
-										</p>
-										<!-- //비밀번호 일치할경우 -->
-									</div>
+						</div>
+						<div class="form_field">
+							<label class="input_label sr-only">신규 비밀번호를 다시 입력해주세요.</label>
+							<div class="ui_col_12">
+								<input type="password" id="confirmPassword" name="confirmPassword" placeholder="신규 비밀번호를 다시 입력해주세요." class="form_control" minlength="8" maxlength="20" required="required" data-valid-name="신규 비밀번호 확인"/>
+								<div class="help_block">
+									<!-- 비밀번호확인 틀렸을경우 -->
+									<p id="misPwd" class="hide">
+										<span class="t_err">
+											새 비밀번호가 일치하지 않습니다.
+										</span>
+									</p>
+									<!-- //비밀번호확인 틀렸을경우 -->
+									<!-- 비밀번호 일치할경우 -->
+									<p id="avlConPwd" class=" hide">
+										<span class="c_black2">
+											<i class="ico ico_check black mr5"></i>새 비밀번호가 일치합니다.
+										</span>
+									</p>
+									<!-- //비밀번호 일치할경우 -->
 								</div>
 							</div>
-							<div class="btn_group_flex">
-								<div>
-									<button type="button" id="btnClose" class="btn btn_default"><span>취소</span></button>
-								</div>
-								<div>
-									<button type="button" id="btnSavePassword" class="btn btn_dark"><span>변경</span></button> <!-- 210409_추가 : btn_password_confirm id 추가 -->
-								</div>
+						</div>
+						<div class="btn_group_flex">
+							<div>
+								<button type="button" id="btnClose" class="btn btn_default"><span>취소</span></button>
 							</div>
-						</form>
-					</div>
+							<div>
+								<button type="button" id="btnSavePassword" class="btn btn_dark"><span>변경</span></button> <!-- 210409_추가 : btn_password_confirm id 추가 -->
+							</div>
+						</div>
+					</form>
 				</div>
 			</div>
-			<div class="modal-footer" style="display:none;"></div>
 		</div>
+		<div class="modal-footer" style="display:none;"></div>
 	</div>
-	<a href="#close-modal" rel="modal:close" id="passwordPop_close" class="close-modal">Close</a>
+</div>
+<a href="#close-modal" rel="modal:close" id="passwordPop_close" class="close-modal">Close</a>
 
 <script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
 <script th:inline="javascript">
@@ -264,7 +264,11 @@
 		}
 	};
 
+	$(document).ready(function() {
+
+	});
+
 
 	/*]]>*/
 </script>
-</html>
+</html>

+ 7 - 7
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSnsJoinInitPwdFormMob.html

@@ -18,11 +18,11 @@
  * 1.0  2021.04.26   jsshin      최초 작성
  *******************************************************************************
  -->
+<body>
+<th:block layout:fragment="content">
 <style>
 .hide{display:none}
 </style>
-<body>
-<th:block layout:fragment="content">
 <main class="container my">
 	<section class="content my_page">
 		<div class="inner">
@@ -39,10 +39,10 @@
 								<!-- 사용불가 비밀번호일경우 -->
 								<p class="mt10">
 									<span id="firstFailed" class="c_gray">
-										<i class="ico ico_check black mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br/>
+										<i class="ico ico_check gray mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br/>
 									</span>
 									<span id="secondFailed" class="c_gray">
-										<i class="ico ico_check red mr5"></i>4개이상 연속되거나 동일한 문자/숫자 제외<br/>
+										<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>아이디 제외
@@ -89,7 +89,7 @@
 							</button>
 						</div>
 						<div>
-							<button type="button" id="btnSavePassword" class="btn btn_dark btn_block" disabled="disabled">
+							<button type="button" id="btnSavePassword" class="btn btn_dark btn_block">
 								<span>확인</span>
 							</button>
 						</div>
@@ -184,11 +184,11 @@
 		if (sameConfirmPwd) {
 			$misPwd.hide();
 			$avlConPwd.show();
-			$btnSavePassword.attr('disabled', false);
+			//$btnSavePassword.attr('disabled', false);
 		} else {
 			$avlConPwd.hide();
 			$misPwd.show();
-			$btnSavePassword.attr('disabled', true);
+			//$btnSavePassword.attr('disabled', true);
 		}
 	};
 

+ 6 - 8
src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaRegisterFormWeb.html

@@ -108,14 +108,12 @@
 									<div class="form_field">
 										<label class="ui_col_2 input_label">알림톡 수신 여부</label>
 										<div class="ui_col_10 push_agree">
-											<div class="input_wrap">
-												<div>
-													<input type="radio" name="smsReqYn" id="smsReqYn1" value="Y" checked="checked"><label for="smsReqYn1"><span>수신</span></label>
-												</div>
-												<div>
-													<input type="radio" name="smsReqYn" id="smsReqYn2" value="N"><label for="smsReqYn2"><span>미수신</span></label>
-												</div>
-											</div> 
+											<div>
+												<input type="radio" name="smsReqYn" id="smsReqYn1" value="Y" checked="checked"><label for="smsReqYn1"><span>수신</span></label>
+											</div>
+											<div>
+												<input type="radio" name="smsReqYn" id="smsReqYn2" value="N"><label for="smsReqYn2"><span>미수신</span></label>
+											</div>
 										</div>
 									</div>
 								</form>

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

@@ -856,30 +856,30 @@
 									tag +=' 	<button class="btn_toggle_bnr"><span>열기</span></button>';
 								}
 								tag +='</div>';
-								if(item.strVar8=='Y'){
-									tag+='<div class="close_bnr_area">';
-									tag+=' 	<form class="form_wrap">';
-									tag+=' 		<div class="form_field">';
-									tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
-									tag+=' 		</div>';
-									tag+=' 	</form>';
-									tag+=' 	<button id="btn_close_bnr" class="btn_close" onclick="fnGnbTobBannerClose(1);"><span>닫기</span></button>';
-									tag+='</div>';
-								}
+								//if(item.strVar8=='Y'){
+								//	tag+='<div class="close_bnr_area">';
+								//	tag+=' 	<form class="form_wrap">';
+								//	tag+=' 		<div class="form_field">';
+								//	tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
+								//	tag+=' 		</div>';
+								//	tag+=' 	</form>';
+								//	tag+=' 	<button id="btn_close_bnr" class="btn_close" onclick="fnGnbTobBannerClose(1);"><span>닫기</span></button>';
+								//	tag+='</div>';
+								//}
 							}else if(item.contentsType == 'IMG'){
 								tag+='<div class="bnrtype_img" style="background-color:#'+item.strVar5+';">';
 								tag+=' 	<a href="'+item.strVar1+'" target="">';
 								tag+=' 		<img src="'+bannerImgUrl+''+item.imgPath1+'" alt=""/>';
 								tag+=' 	</a>';
 								tag+='</div>';
-								tag+='<div class="close_bnr_area">';
-								tag+=' 	<form class="form_wrap">';
-								tag+=' 		<div class="form_field">';
-								tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
-								tag+=' 		</div>';
-								tag+=' 	</form>';
-								tag+=' 	<button id="btn_close_bnr" class="btn_close" onclick="fnGnbTobBannerClose(1);"><span>닫기</span></button>';
-								tag+='</div>';
+								//tag+='<div class="close_bnr_area">';
+								//tag+=' 	<form class="form_wrap">';
+								//tag+=' 		<div class="form_field">';
+								//tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
+								//tag+=' 		</div>';
+								//tag+=' 	</form>';
+								//tag+=' 	<button id="btn_close_bnr" class="btn_close" onclick="fnGnbTobBannerClose(1);"><span>닫기</span></button>';
+								//tag+='</div>';
 							}else{
 								tag+='<div class="bnrtype_text" style="background-color:#fd4801;">';
 								tag+=' 	<a href="'+item.strVar1+'" target="">';
@@ -888,15 +888,25 @@
 								tag+=' 		</div>';
 								tag+=' 	</a>';
 								tag+='</div>';
-								tag+='<div class="close_bnr_area">';
-								tag+=' 	<form class="form_wrap">';
-								tag+=' 		<div class="form_field">';
-								tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
-								tag+=' 		</div>';
-								tag+=' 	</form>';
+								//tag+='<div class="close_bnr_area">';
+								//tag+=' 	<form class="form_wrap">';
+								//tag+=' 		<div class="form_field">';
+								//tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
+								//tag+=' 		</div>';
+								//tag+=' 	</form>';
+								//tag+=' 	<button id="btn_close_bnr" class="btn_close" onclick="fnGnbTobBannerClose(1);"><span>닫기</span></button>';
+								//tag+='</div>';
+							}
+							tag+='<div class="close_bnr_area">';
+							tag+=' 	<form class="form_wrap">';
+							tag+=' 		<div class="form_field">';
+							tag+=' 			<input id="chk-cookie" type="checkbox"><label for="chk-cookie"><span>오늘 하루 보지 않기</span></label>';
+							tag+=' 		</div>';
+							tag+=' 	</form>';
+							if(item.contentsType != 'OPEN' || (item.contentsType == 'OPEN' && item.strVar8=='Y')){
 								tag+=' 	<button id="btn_close_bnr" class="btn_close" onclick="fnGnbTobBannerClose(1);"><span>닫기</span></button>';
-								tag+='</div>';
 							}
+							tag+='</div>';
 
 							if(bannerYn=="Y"){
 								$('#divTopbanner').html(tag);

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

@@ -58,7 +58,34 @@
 				<h4>신규회원 혜택안내</h4>
 			</div>
 			<div class="cont_body">
-				<img src="/images/pc/img_mb_join_done.jpg" alt="신규회원 혜택안내 내용">
+			<div class="new_benefits">
+					<h5>STYLE24 신규회원에게 드리는<br>다양한 혜택 안내</h5>
+					<div class="benefits_list">
+						<ul class="clear">
+							<li>
+								<img src="/images/pc/ico_newbenefit1.png" alt="STYLE24 등급혜택 받기!">
+								<p>
+									STYLE24<br>
+									등급혜택 받기!
+								</p>
+							</li>
+							<li>
+								<img src="/images/pc/ico_newbenefit2.png" alt="STYLE24 포인트 사용/적립 혜택!">
+								<p>
+									STYLE24 포인트<br>
+									사용/적립 혜택!
+								</p>
+							</li>
+							<li>
+								<img src="/images/pc/ico_newbenefit3.png" alt="간편 결제로 쉽고 빠르게 주문!">
+								<p>
+									간편 결제로<br>
+									쉽고 빠르게 주문!
+								</p>
+							</li>
+						</ul>
+					</div>
+				</div>
 				<div class="btn_group_block btn_group_md ui_row">
 					<div class="ui_col_12">
 						<button type="button" class="btn btn_primary btn_block" onclick="cfnGoToPage(_PAGE_MAIN);">

+ 8 - 7
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -354,14 +354,15 @@
 													<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 												</p>
 												<div class="itemcolorchip">
-													<span class="chip_color35" value="ABM">BEIGE</span>
-													<span class="chip_color54" value="BDS">BLACK</span>
-													<span class="chip_color40" value="YBR">WHITE</span>
+													<th:block th:each="option, idx : ${goodsData.colorArr}" th:with="colorArray=${#strings.arraySplit(idx.current,':')}">
+														<span th:if="${colorArray[1]=='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';border:1px solid #aaa;'}" class="chip_color" th:value="${colorArray[0]}"></span>
+														<span th:if="${colorArray[1]!='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';'}" class="chip_color" th:value="${colorArray[0]}"></span>
+													</th:block>
 												</div>
 												<p class="itemBadge">
-													<span class="badge13">쿠폰할인</span>
-													<span class="badge13">단독특가</span>
-													<span class="badge13">무료배송</span>
+													<th:block th:each="option, idx : ${goodsData.benefitArr}" th:with="iconArray=${#strings.arraySplit(idx.current,':')}" >
+														<span class="badge13" th:if="${idx.index<3}" th:value="${iconArray[0]}" th:text="${iconArray[1]}"></span>
+													</th:block>
 												</p>
 												<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을느낌 물씬!</div>
 											</a>
@@ -370,7 +371,7 @@
 								</th:block>
 							</div>
 							<div class="btn_wrap">
-								<button type="button" class="btn btn_md"><span>더 많은 상품보기</span></button>
+								<button type="button" class="btn btn_md" th:onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],[[${brandGroupInfo.cateGb}]]);"><span>더 많은 상품보기</span></button>
 							</div>
 						</div>
 					</div>

+ 233 - 44
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -267,6 +267,13 @@
 								</div>
 
 							</div>
+							<div class="list_content">
+								<div class="list_defult" id="endPage">
+									<div>
+										<p>마지막 페이지 입니다.</p>
+									</div>
+								</div>
+							</div>
 						</div>
 					</form>
 				</div>
@@ -296,7 +303,6 @@
 		var custom_values = [];
 		var custom_values02  = [];
 		var currUrl = document.location.href;
-		console.log('currUrl>>'+currUrl);
 
 		// 컨텐츠 호출
 		$(document).ready( function() {
@@ -413,8 +419,6 @@
 			$("#searchGoodsForm input:hidden[name=dcrateHigh]").remove();
 			let min = data.from;
 			let max = data.to;
-			console.log('DcRate from>>'+custom_values02[min].replace('%',''));
-			console.log('DcRate to>>'+custom_values02[max].replace('%',''));
 			$("#price_input_from").val(0);
 			$("#price_input_to").val(100);
 
@@ -461,11 +465,14 @@
 				gagaInfiniteScroll.draw(htm);
 				fnImgOnoff();
 			}else {
-				if($("#searchForm input[name=pageNo]").val()==1){
-					$('#listBox').html('<li class="none">상품정보가 존재하지 않습니다.</li>');
-				}else{
+				if($("#searchGoodsForm input[name=pageNo]").val()==1){
+					// 필터 값으로 조회 데이터 없을때
 					$('.list_content .list_defult').show();
 					$('.list_content .count_wrap').hide();
+				}else{
+					// 마지막 페이지 일때
+					$('#endPage').show();
+					$('.list_content .count_wrap').hide();
 				}
 				gagaInfiniteScroll.draw('not');
 			}
@@ -474,7 +481,6 @@
 		var fnCreateCategoryList = function (){
 			let actionUrl = '';
 			let brandGroupNo = [[${cateInfo.brandGroupNo}]];
-			console.log('brand::'+[[${cateInfo.brandGroupNo}]]);
 			if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
 				actionUrl = '/display/gnb/tab/list';
 			}else{
@@ -483,22 +489,24 @@
 			
 			$.getJSON(actionUrl
 				, function(result, status) {
-					console.log('result.length>>'+result.length);
 					//if (status == 'success') {
 					if (result.length > 0) {
-						console.log('fnGetCategoryList formalGbc:::'+[[${cateInfo.formalGb}]]);
-						console.log('fnGetCategoryList cateGb:::'+[[${cateInfo.cateGb}]]);
 						let formalGb = [[${cateInfo.formalGb}]];
 						let cateGb = 'G032_101';
+						let navNm = '';
 						$('#ulAllCate').html('');
 						if(formalGb=='G009_20'){
+							$("#navNm").hide();
 							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\',\'\',\'\',\'\',\'\',\'\',\''+formalGb+'\');">전체</a></li>\n');
+							navNm += '<li class="bread_2depth" id="navNm">아울렛</li><li class="bread_2depth" id="navNm1">전체</li>';
 						}else{
+							$("#navNm").hide();
 							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\');">전체</a></li>\n');
+							navNm += '<li class="bread_2depth" id="navNm1">전체</li>';
 						}
 						
 						if(gagajf.isNull($("#searchGoodsForm").find("[name=cate1No]").val())){
-							$("#navArea").append('전체');
+							$("#navArea").append(navNm);
 							$("#formTitle").text('전체');
 						}
 
@@ -515,9 +523,9 @@
 							});
 						}else{
 							$.each(result, function(idx, item) {
-								$.each(allCate, function(allCateIdx, allCateItem) {
-									if (item.cate1No == allCateItem.cate1No) {
-										$('#ulAllCate').append(fnGetCategoryList(allCateItem));
+								$.each(allCate, function(brandCateIdx, brandCateItem) {
+									if (item.cate1No == brandCateItem.cate1No) {
+										$('#ulAllCate').append(fnGetBrandCategoryList(item));
 									}
 								});
 							});
@@ -526,6 +534,136 @@
 					//}
 				});
 		}
+		
+		let fnGetBrandCategoryList = function (cate1){
+			var brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			var cateGb =  [[${cateInfo.cateGb}]];
+			var formalGb = [[${cateInfo.formalGb}]];
+			var cate1No = [[${cateInfo.cate1No}]];
+			var cate2No = [[${cateInfo.cate2No}]];
+			var cate3No = [[${cateInfo.cate3No}]];
+			var cate4No = [[${cateInfo.cate4No}]];
+			
+			var navNm = "";
+			var formTitle = "";
+			let tag = '';
+			
+			console.log('cate1No>>>'+cate1No);
+		
+			if(cate1 != null){
+				tag += '<li';
+				if (cate1.cate1No == cate1No) {
+					tag += ' class="on"';
+				}
+				tag += '>\n';
+				tag += '	<a href="javascript:javascript:void(0);"';
+				if (cate1.cate1No == cate1No && cate2No == null) {
+					tag += ' class="on"';
+					formTitle = cate1.cate1Nm;
+					$("#formTitle").text(formTitle);
+					$("#navNm").hide();
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navHome").attr('onclick', 'cfnGoToBrandMain(' + brandGroupNo + ');');
+					$("#navArea").append(navNm);
+				}else if(cate1.cate1No == cate1No && cate3No == null){
+					$("#navNm").hide();
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navArea").append(navNm);
+				}else if(cate3No != null){
+					$("#navNm").hide();
+				}
+				tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ');" >' + cate1.cate1Nm + '</a>\n';
+				
+				
+				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+					tag += '<div class="sub_cate" style="display: block;">\n';
+					tag += '	<ul>\n';
+					$.each(cate1.cate2List, function (idx2, cate2) {
+						tag += '		<li';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+						}
+						tag += '		>\n';
+						tag += '		<a href="javascript:javascript:void(0);" ';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+							navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li>';
+							$("#navArea").append(navNm);
+							$("#formTitle").text(cate2.cate2Nm);
+						}else if(cate2.cate2No == cate2No){
+							navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+							$("#navArea").append(navNm);
+						}
+						tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						
+						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+							tag += '<div class="sub_cate"';
+							if (cate2.cate2No == cate2No) {
+								tag += ' style="display: block;"';
+							}
+							tag += '>\n';
+							tag += '	<ul>\n';
+							$.each(cate2.cate3List, function (idx3, cate3) {
+								tag += '<li';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+								}
+								tag += '>';
+								tag += '		<a href="javascript:javascript:void(0);" ';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+									$("#navArea").append(navNm);
+									$("#formTitle").text(cate3.cate3Nm);
+								}else if(cate3.cate3No == cate3No){
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+								}
+								tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>';
+								
+								if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+									tag += '<div class="sub_cate"';
+									if (cate3.cate3No == cate3No) {
+										tag += ' style="display: block;"';
+									}
+									tag += '>\n';
+									tag += '	<ul>\n';
+									$.each(cate3.cate4List, function (idx4, cate4) {
+										tag += '<li';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+										}
+										tag += '>';
+										tag += '		<a href="javascript:javascript:void(0);" ';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+											navNm = '<li class="bread_2depth" id="navNm3">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li><li class="bread_2depth" id="navNm3">' + cate4.cate4Nm + '</li>';
+											$("#navArea").append(navNm);
+											$("#formTitle").text(cate4.cate4Nm);
+										}
+										if (formalGb == 'G009_20') {
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',\'\',\'' + formalGb + '\');">' + cate4.cate4Nm + '</a>';
+										} else {
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a>';
+										}
+									});
+									tag += '</ul>\n';
+									tag += '</div>\n';
+								}
+								tag += '</li>';
+							});
+							tag += '</ul>\n';
+							tag += '</div>\n';
+						}
+						
+						tag += '</li>';
+					});
+					tag += '</ul>';
+					tag += '</div>';
+				}
+			}
+			
+			return tag;
+		}
 
 		let fnGetCategoryList = function (cate1){
 			var brandGroupNo = [[${cateInfo.brandGroupNo}]];
@@ -551,20 +689,26 @@
 					tag += ' class="on"';
 					formTitle = cate1.cate1Nm;
 					$("#formTitle").text(formTitle);
+					$("#navNm").hide();
+					if(formalGb=='G009_20'){
+						navNm += '<li class="bread_2depth" id="navNm1">아울렛</li>';
+					}
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
 					if (brandGroupNo == 0) {
 						$("#navHome").attr('href', '/');
-						$("#navNm").text(cate1.cate1Nm);
+						$("#navArea").append(navNm);
 					} else {
 						$("#navHome").attr('onclick', 'cfnGoToBrandMain(' + brandGroupNo + ');');
-						$("#navNm").text(cate1.cate1Nm);
+						$("#navArea").append(navNm);
 					}
 				}else if(cate1.cate1No == cate1No && cate3No == null){
-					//if(formalGb=='G009_20'){
-					//	$("#navNm").text('아울렛');
-					//}else{
-					//	$("#navNm").text(cate1.cate1Nm);
-					//}
-					$("#navNm").text(cate1.cate1Nm);
+					$("#navNm").hide();
+					if(formalGb=='G009_20'){
+						navNm += '<li class="bread_2depth" id="navNm1">아울렛</li>';
+					}
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navArea").append(navNm);
+					//$("#navNm").text(cate1.cate1Nm);
 				}else if(cate3No != null){
 					$("#navNm").hide();
 				}
@@ -594,8 +738,10 @@
 							$("#navArea").append(navNm);
 							$("#formTitle").text(cate2.cate2Nm);
 						}else if(cate2.cate2No == cate2No){
-							console.log('0111');
-							navNm = '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+							if(formalGb=='G009_20'){
+								navNm += '<li class="bread_2depth" id="navNm1">아울렛</li>';
+							}
+							navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
 							$("#navArea").append(navNm);
 						}
 						if(formalGb=='G009_20'){
@@ -618,13 +764,11 @@
 								tag += '>';
 								tag += '		<a href="javascript:javascript:void(0);" ';
 								if (cate3.cate3No == cate3No && cate4No == null) {
-									console.log('1111');
 									tag += ' class="on"';
 									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
 									$("#navArea").append(navNm);
 									$("#formTitle").text(cate3.cate3Nm);
 								}else if(cate3.cate3No == cate3No){
-									console.log('222');
 									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
 								}
 								if(formalGb=='G009_20'){
@@ -632,6 +776,33 @@
 								}else{
 									tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>';
 								}
+								if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+									tag += '<div class="sub_cate"';
+									if (cate2.cate2No == cate2No) {
+										tag += ' style="display: block;"';
+									}
+									tag += '>\n';
+									tag += '	<ul>\n';
+									$.each(cate3.cate4List, function (idx4, cate4) {
+										tag += '<li';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+										}
+										tag += '>';
+										tag += '		<a href="javascript:javascript:void(0);" ';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+											navNm = '<li class="bread_2depth" id="navNm3">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li><li class="bread_2depth" id="navNm3">' + cate4.cate4Nm + '</li>';
+											$("#navArea").append(navNm);
+											$("#formTitle").text(cate4.cate4Nm);
+										}
+										if(formalGb=='G009_20'){
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',\'\',\'' + formalGb + '\');">' + cate4.cate4Nm + '</a>';
+										}else{
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a>';
+										}
+									});
+								}
 								tag += '</li>\n';
 							});
 							tag += '	</ul>\n';
@@ -648,49 +819,60 @@
 		}
 
 		var fnImgOnoff = function (){
+			var nowFocus = $('.dp .itemPic');
 			var nowMov = $('.itemPic').children('.pd_mov');
 			var nowImg = $('.itemPic').children('.pd_img');
 			var ogrSrc;
 			var overSrc;
 			var srcName = nowImg.attr('src');
 			overSrc = srcName.substring(0, srcName.lastIndexOf('.'));
+			
+			var srcImg;
+			var srcdat;
 
-			var img1;
-			var img2;
-
-			$(nowMov).on('mouseover', function() {
+			$(nowFocus).on('mouseover', function() {
 				// [on] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
 				// [on] mov none
-				$(this).css("opacity","0");
+				//$(this).css("opacity","0");
 				// return false;
+				$(this).children('.pd_mov').siblings(".itemOpt").addClass('on');
+				$(this).children('.pd_mov').css("opacity","0");
 			});
-			$(nowMov).on('mouseleave', function() {
+			$(nowFocus).on('mouseleave', function() {
 				// [off] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
 				// [off] mov block
-				$(this).css("opacity","1");
+				//$(this).css("opacity","1");
 				// return false;
+				$(this).children('.pd_mov').siblings(".itemOpt").removeClass('on');
+				$(this).children('.pd_mov').css("opacity","1");
 			});
-			$(nowImg).on('mouseover', function() {
-				img1 = $(this).attr('src');
-				img2 = $(this).attr('data-img');
+			$(nowFocus).on('mouseover', function() {
+				//img1 = $(this).attr('src');
+				//img2 = $(this).attr('data-img');
 				// [on] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
 				// [on] re-Name
 				// ogrSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
 				// overSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
 				// $(this).attr('src', overSrc+ '_onhover.' + /[^.]+$/.exec(srcName));
-				$(this).attr('src',img2);
+				//$(this).attr('src',img2);
 				// return false;
+				$(this).children('.pd_img').siblings(".itemOpt").addClass('on');
+				srcImg = $(this).children('.pd_img').attr('src');
+				srcdat = $(this).children('.pd_img').attr('data-img');
+				$(this).children('.pd_img').attr('src',srcdat);
 			});
-			$(nowImg).on('mouseleave', function() {
+			$(nowFocus).on('mouseleave', function() {
 				// [off] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
 				// [off] re-Name
 				// $(this).attr('src', overSrc + '.' + /[^.]+$/.exec(srcName));
-				$(this).attr('src', img1);
+				//$(this).attr('src', img1);
 				// return false;
+				$(this).children('.pd_img').siblings(".itemOpt").removeClass('on');
+				$(this).children('.pd_img').attr('src', srcImg);
 			});
 		}
 
@@ -764,8 +946,15 @@
 	<script>
 		//(진행 중)
 		$(document).ready( function() {
-
+			
 		});
+		
+		/* 210427_수정 : err 이미지 스크립트 */
+		function noneImg(noneSrc){
+			$(noneSrc).parents('.itemPic').css({'background':'url(/images/pc/thumb/bg_item_none.png)'});
+			$(noneSrc).css({'opacity':'0'});
+			//$(noneSrc).attr("src", no_src);
+		}
 	</script>
 
 </th:block>

+ 54 - 19
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -836,11 +836,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 100,
-
-		// initialSlide: 0,
+		
+		// initialSlide: 0, 
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250,
+		// slidesOffsetBefore: 250, 
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -865,11 +865,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 70,
-
-		// initialSlide: 0,
+		
+		// initialSlide: 0, 
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250,
+		// slidesOffsetBefore: 250, 
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -929,22 +929,22 @@ var main_trendy_slide = new Swiper('.main_trendy .post-trendy', {
 main_trendy_slide.on('slideChange', function () {
 	var newitemIndex = main_trendy_slide.activeIndex;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-
+	
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(0).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(3).addClass('scaleBig');
-
+	
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 });
 
 main_trendy_slide.on('reachEnd', function () {
 	var newitemIndex = main_trendy_slide.activeIndex + 1;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-
+	
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(1).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(4).addClass('scaleBig');
-
+	
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 	function l(n) {
 		if (n.direction !== "none")
@@ -1095,9 +1095,9 @@ $(".main_recomm .tag_list .btn").click(function(){
 	$('#'+recommActive).addClass('active');
 });
 function init(){
-
+	
 	if(main_recomm_slide != null) main_recomm_slide.destroy();
-
+	
 	var main_recomm_slide = new Swiper ('.main_recomm .post-recomm', {
 		slidesPerView: 5,
 		slidesPerGroup: 5,
@@ -1120,9 +1120,10 @@ function init(){
 init();
 
 /* SLIDE - MAIN_FORYOU */
+var cntNum = 0;
 var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container', {
 	allowTouchMove: false,
-	loop: true,
+	loop: false,
 	effect: 'fade',
 	autoHeight: false,
 	autoplay: {
@@ -1133,7 +1134,28 @@ var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container',
 		el: '.post-sug .swiper-pagination',
 		clickable: true,
 	},
+	on : {
+		slideChange: function(){
+			$(".fy_nav .swiper-slide li").children('.btn_shape').removeClass('active');
+			$(".fy_nav .swiper-slide-next li").eq(0).children('.btn_shape').addClass('active');
+			$(".fy_nav .swiper-slide-prev li").eq(0).children('.btn_shape').addClass('active');
+			foryouIndex = -1;
+			if(cntNum === 0){
+				$('.fy_item').removeClass('active');
+				$('#fy6').addClass('active');
+				cntNum = 1;
+			} else {
+				$('.fy_item').removeClass('active');
+				$('#fy1').addClass('active');
+				cntNum = 0;
+			}
+			
+			clearInterval(ti);
+			ti = startTimeInterval();
+		}
+	},
 });
+
 function foryouInterval(_foryouIndex) {
 	var foryouCateItems = $(".main_foryou .fy_nav .swiper-slide-active ul li .btn_shape");
 	$(foryouCateItems[(_foryouIndex + 1) % 5]).addClass("active");
@@ -1147,13 +1169,19 @@ function foryouFy_item(_Fy_itemIndex) {
 	// $(".fy_item").addClass('active');
 	$('#'+fyActive).addClass('active');
 }
+
 var foryouIndex = 0;
-setInterval(function () {
-	foryouInterval(foryouIndex);
-	foryouFy_item();
-	if (foryouIndex >= 5) foryouIndex = 0;
-	foryouIndex++;
-}, 5000);
+var ti;
+function startTimeInterval() {
+	return setInterval(function () {
+		$(".fy_nav .btn_shape").removeClass('active');
+		$(".fy_item").removeClass('active');
+		foryouInterval(foryouIndex);
+		foryouFy_item();
+		if (foryouIndex >= 5) foryouIndex = 0;
+		foryouIndex++;
+	}, 5000);
+}
 $(".fy_nav .btn_shape").click(function(){
 	var fyActive = $(this).attr('data-tab');
 	$(".fy_nav .btn_shape").removeClass('active');
@@ -1162,6 +1190,13 @@ $(".fy_nav .btn_shape").click(function(){
 	$('#'+fyActive).addClass('active');
 });
 
+$(".fy_nav ul li").click(function(){
+	foryouIndex = $(this).index();
+	clearInterval(ti);
+	ti = startTimeInterval();
+});
+
+ti = startTimeInterval();
 
 /* SLIDE - MAIN_TV */
 var main_tv_slide = new Swiper ('.main_tv .post-tv', {

+ 2 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsCouponFormWeb.html

@@ -112,7 +112,7 @@
 		//00개 쿠폰이 발급되었습니다.
 		let couponDownAbleYn = "N";
 		let arrCpnId = [];
-		$('.btn_coupon_down').each(function(){
+		$('#goodsCouponForm').find('.btn_coupon_down').each(function(){
 			if (!$(this).attr('disabled')){
 				couponDownAbleYn = "Y";
 				arrCpnId.push($(this).attr('cpnId'));
@@ -135,7 +135,7 @@
 			let list = result.goodsCouponList;
 
 			list.forEach(function(coupon){
-				$('.btn_coupon_down').each(function(){
+				$('#goodsCouponForm').find('.btn_coupon_down').each(function(){
 					if (!$(this).attr('disabled')){
 						let cpnId = $(this).attr('cpnId');
 						if (coupon.cpnId == cpnId){

+ 27 - 15
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -119,22 +119,30 @@
 																(goodsCouponList != null and !goodsCouponList.empty)
 															}" >
 								<dl>
-									<div class="bnf_shopping" th:if="${goodsCouponList != null and !goodsCouponList.empty}">
+									<div class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or
+																		(tmtbList != null and !tmtbList.empty) or
+																		(freeGoodsList != null and !freeGoodsList.empty)}" >
 										<dt>쇼핑혜택</dt>
-										<!------------ 색상 강조 텍스트 영역 <em class="c_primary"></em> 사용요청 ------------>
-										<dd>
-											<span th:if="${goodsCouponList != null and !goodsCouponList.empty}">
-											<th:block th:each="goodsCoupon, status : ${goodsCouponList}" th:if="${status.first}">
-											최대 <em class="c_primary" >
-												<th:block th:if="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${#numbers.formatInteger(goodsCoupon.dcVal, 0,'COMMA')}원|"></th:block>
-												<th:block th:unless="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${goodsCoupon.dcVal}%|"></th:block>
-											</em> 쿠폰 할인
-											</th:block>
-											</span> 
-											<span><em class="c_primary">99개</em> 이상 구매 시 <em class="c_primary">9,999,999원</em> 할인</span>
-											<span>미니언즈 우산 증정</span>
-											<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
-										</dd>
+											<dd>
+												<span th:if="${goodsCouponList != null and !goodsCouponList.empty}">
+												<th:block th:each="goodsCoupon, status : ${goodsCouponList}" th:if="${status.first}">
+												최대 <em class="c_primary" >
+													<th:block th:if="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${#numbers.formatInteger(goodsCoupon.dcVal, 0,'COMMA')}원|"></th:block>
+													<th:block th:unless="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${goodsCoupon.dcVal}%|"></th:block>
+												</em> 쿠폰 할인
+												</th:block>
+												</span> 
+												<span th:if="${tmtbList != null and !tmtbList.empty}">
+												<th:block th:each="tmtb, status : ${tmtbList}" th:if="${status.first}">
+												<em class="c_primary"><th:block th:text="${#numbers.formatInteger(tmtb.sectionVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.sectionGb == 'G810_10')? '개':'금액'}"></th:block></em> 이상 구매 시 
+												<em class="c_primary"><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block></em></em> 할인
+												</th:block>
+												</span>
+												<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
+												<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
+												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></th:block></span>
+												<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
+											</dd>
 									</div>
 									<div class="bnf_card" th:if="${cardInfoList != null and !cardInfoList.empty}">
 										<dt>카드혜택</dt>
@@ -748,6 +756,10 @@
 		$('.price_box .number  span').html(totalEa.addComma());
 		$('.price_box .price > span').html(totalPrice.addComma());
 		
+		if ($('input[name="cea"]', document.cartForm).length <= 0 ) {
+			$('.price_box').hide();
+		}
+		
 	}
 	
 	//장바구니담기

+ 31 - 4
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -46,6 +46,7 @@
 												</th:block>
 												<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
 												<iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?player_version=html5'}" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
+												
 												</th:block>
 												</span>
 											</a>
@@ -75,10 +76,10 @@
 								<li th:id="${'navLocate'+ status.count}"  th:classappend="${status.first}? 'on' : ''">
 									<div class="movbox">
 										<th:block th:if="${goodsVideo.videoGb == 'Y'}">
-										<iframe width="100%" height="100%" th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0&autoplay=1&mute=1'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+										<iframe id="prodctThumbVideo" class="pd_mov" width="100%" height="100%" th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0&autoplay=1&mute=1'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
 										</th:block>
 										<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
-										<iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?player_version=html5'}" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
+										<iframe id="prodctThumbVideo" class="pd_mov" width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?enable_initialize_focus=false&autoplay&mute&controls_activation=none'}" frameborder="0" allowfullscreen></iframe>
 										</th:block>
 									</div>
 								</li>
@@ -196,7 +197,7 @@
 												</span>
 												<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 												<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
+												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
 												<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 											</dd>
 									</div>
@@ -611,7 +612,7 @@
 						</div>
 						</th:block>
 					</div>
-					<div class="area_kcl" th:if="${goodsSafeNo != null}">
+					<div class="area_kcl" th:if="${goodsInfo.goodsType == 'G056_N' and goodsSafeNo != null}">
 						<i class="ico ico_kcl"></i>
 						<th:block th:if="${not #strings.contains(goodsSafeNo.certNum, '해당')}" >
 						<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">
@@ -631,6 +632,32 @@
 							해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
 						</p>
 					</div>
+					<th:block th:if="${goodsInfo.goodsType == 'G056_S'}">
+					<th:block th:each="goodsCompose, status : ${goodsComposeList}">
+					<th:block th:if="${goodsCompose.goodsSafeNo != null}">
+						<div class="area_kcl" >
+						<i class="ico ico_kcl"></i>
+						<th:block th:if="${not #strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
+						<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certDiv + ' / ' + goodsCompose.goodsSafeNo.certOrganName}">
+							어린이제품 안전인증 / 한국건설생활시험연구원(KCL)
+						</p>
+						</th:block>
+						<p class="normal" >
+							<th:block th:if="${#strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
+							해당 없음 
+							</th:block>
+							<th:block th:unless="${#strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
+							인증번호: <th:block th:text="${goodsCompose.goodsSafeNo.certNum}"></th:block>
+							<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsCompose.goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
+							</th:block>
+						</p>
+						<p class="t_info dot_info">
+							해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
+						</p>
+					</div>
+					</th:block>
+					</th:block>
+					</th:block>
 					<div class="area_infotbl">
 						<span class="title">상품기본정보</span>
 						<th:block th:if="${goodsInfo.goodsType == 'G056_N'} ">

+ 0 - 4
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailReviewFormWeb.html

@@ -303,10 +303,6 @@
 								<span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
 								</th:block>
 							</div>
-							<div class="pic" th:unless="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
-								<span class="thumb" th:style="${'background-image:url('+imgGoodsUrl+ '/'+goodsInfo.sysImgNm+'?RS=162);'}">
-								</span>
-							</div>
 							<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.iscore*100/5), 0,0)}">
 								<span class="star">
 									<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->

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

@@ -401,7 +401,7 @@
 													<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}">NBA 키즈</p>
-												<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+												<div class="itemName" ><span class="tit_option" th:text="${'[상품'+status.count+']'}">[상품1]</span><th:block th:text="${goodsInfo.goodsFullNm}"></th:block></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>

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

@@ -66,7 +66,7 @@
 				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
 					reviewClass = '';
 				}
-				tag +='<div class="review" class="'+reviewClass+'" >\n';  <!-- 첨부이미지 없을 시 empty_photo 클래스 추가 --> 
+				tag +='<div class="review '+reviewClass+'" >\n';  <!-- 첨부이미지 없을 시 empty_photo 클래스 추가 --> 
 				tag +='	<div class="pic">\n';
 				if (review.reviewAttachList != null && review.reviewAttachList.length > 0){
 					$.each(review.reviewAttachList, function(aIdx, reviewAttach){

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

@@ -82,10 +82,10 @@
 						</div>
 					</div>
 					<div class="btn_footer_area">
-						<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MAIN);">
+						<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MAIN);">
 							<span>취소</span>
 						</button>
-						<button type="button" id="btnConfirm" class="btn btn_dark submit_btn">
+						<button type="button" id="btnConfirm" class="btn btn_dark btn_md">
 							<span>확인</span>
 						</button>
 					</div>

+ 31 - 14
src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html

@@ -98,7 +98,7 @@
 											<td>
 												<div class="form_field">
 													<div class="input_wrap">
-														<input type="text" id="email" name="email" class="form_control"/>
+														<input type="text" id="email" name="email" data-valid-type="email" class="form_control"/>
 													</div>
 												</div>
 											</td>
@@ -235,11 +235,14 @@
 			</div>
 		</div>
 	</div>
+<script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	let orgCustInfo;
-	let orgAccountInfo;
 	let accountCheck = false;
+	let orgAccountNo;
+	let orgBankCd;
+
 
 	// 고객정보
 	var fnGetCustInfo = function () {
@@ -269,8 +272,6 @@
 		fnDisplayEmailAgree(custInfo.emailAgreeYn);
 		fnDisplaySmsAgree(custInfo.smsAgreeYn);
 
-		// 회원(고객) 계좌 조회
-		fnGetCustAccountInfo();
 	}
 
 	// 이메일 수신동의
@@ -302,11 +303,10 @@
 
 	// 고객계좌 정보 데이터
 	var fnGetCustAccountInfoCallback = function (result) {
-		orgAccountInfo = {};
 		var $accountNm = $('#custModiFyForm input[name=accountNm]');
 		if (!gagajf.isNull(result)) {
-			orgAccountInfo.accountNo = result.accountNo;
-			orgAccountInfo.bankCd = result.bankCd;
+			orgAccountNo = result.accountNo;
+			orgBankCd = result.bankCd;
 			//1. 고객명과 환불계좌 예금주가 다른 경우 현재 고객명을 적어주고 계좌번호, 은행코드 초기화 처리
 			let $bankCd = '';
 			if ($accountNm.val() === result.accountNm) {
@@ -320,8 +320,8 @@
 			}
 			$($bankCd).trigger('click'); // 셀렉트 박스 트리거
 		} else {
-			orgAccountInfo.accountNo = '';
-			orgAccountInfo.bankCd ='';
+			orgAccountNo = '';
+			orgBankCd ='';
 		}
 	}
 
@@ -393,6 +393,17 @@
 					$('#custModiFyForm input[name=email]').focus();
 				}
 			});
+			return;
+		}
+
+		if (!fnCheckValidationEmail(custModiFy.email)) {
+			mcxDialog.alertC('이메일 형식에 맞게 입력해주세요.',{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#custModiFyForm input[name=email]').focus();
+				}
+			});
+			return;
 		}
 
 		if (orgCustInfo.email !== custModiFy.email) {
@@ -404,11 +415,11 @@
 		}
 
 		// 은행코드가 바꼈는지
-		if (orgAccountInfo.bankCd !== $bankCd.val()) {
+		if (orgBankCd !== $bankCd.val()) {
 			accountModifyYn = 'Y';
 		}
 
-		if (orgAccountInfo.accountNo !== $accountNo.val()) {
+		if (orgAccountNo !== $accountNo.val()) {
 			accountModifyYn = 'Y';
 		}
 
@@ -455,12 +466,18 @@
 
 	// 수정 콜백
 	var fnSaveCustomerInfoCallback = function (result) {
+		accountCheck = false;
 		if (result.isSuccess) {
 			mcxDialog.alert("회원정보가 수정되었습니다.");
 			fnGetCustInfo();
+			fnGetCustAccountInfo();
 			return;
 		} else {
-			mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
+			let msg = '실패하였습니다.<br/>고객센터에 문의하시 바랍니다.'
+			if (result.resultType === 'INVALID_ACCOUNT') {
+				msg = '환불 계좌정보를 다시 확인하시고 계좌인증을 해주세요.'
+			}
+			mcxDialog.alert(msg);
 			return;
 		}
 	}
@@ -519,13 +536,13 @@
 		// 회원(고객) 조회
 		fnGetCustInfo();
 
+		// 회원(고객) 계좌 조회
+		fnGetCustAccountInfo();
 
 
 	});
 
 
-
-
 	/*]]>*/
 </script>
 </th:block>

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

@@ -114,8 +114,8 @@
 															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>
 														</th:block>
 
-														<!-- 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
-														<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35' or ordDtl.ordDtlStat == 'G013_40'}">
+														<!-- 주문취소 버튼(결제완료, 상품준비중, 출고처지정) -->
+														<th:block th:if="${ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35'}">
 															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
 														</th:block>
 														
@@ -131,8 +131,8 @@
 													</th:block>
 													<!-- 주문 -->
 													<th:block th:unless="${order.giftPackYn == 'Y'}">
-														<!-- 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
-														<th:block th:if="${ordDtl.payStat != 'G016_00' && (ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35' or ordDtl.ordDtlStat == 'G013_40')}">
+														<!-- 주문취소 버튼(결제완료, 상품준비중, 출고처지정) -->
+														<th:block th:if="${ordDtl.ordDtlStat == 'G013_20' or ordDtl.ordDtlStat == 'G013_30' or ordDtl.ordDtlStat == 'G013_35'}">
 															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');"><span>주문 취소</span></button></p>
 														</th:block>
 														
@@ -177,13 +177,13 @@
 															<p><button type="button" class="btn btn_primary_line btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, goodsCd=${ordDtl.goodsCd}" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>
 														</th:block>
 	
-														<!-- 쇼핑백담기 버튼(구매확정) -->
-														<th:block th:if="${ordDtl.ordDtlStat == 'G013_70'}">
+														<!-- 쇼핑백담기 버튼(입금대기, 배송준비중, 구매확정) -->
+														<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_40' or ordDtl.ordDtlStat == 'G013_70'}">
 															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>
 														</th:block>
 	
-														<!-- 1:1문의 버튼(구매확정) -->
-														<th:block th:if="${ordDtl.ordDtlStat == 'G013_70' and (ordDtl.reviewableYn == 'N' or ordDtl.reviewSq > 0)}">
+														<!-- 1:1문의 버튼(입금대기, 배송준비중, 구매확정) -->
+														<th:block th:if="${ordDtl.ordDtlStat == 'G013_10' or ordDtl.ordDtlStat == 'G013_40' or (ordDtl.ordDtlStat == 'G013_70' and (ordDtl.reviewableYn == 'N' or ordDtl.reviewSq > 0))}">
 															<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
 														</th:block>
 													</th:block>

+ 8 - 8
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -387,7 +387,7 @@
 		let jsonData = JSON.stringify(data);
 		
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-			$('#orderReceiptCount').text(result.orderCount.orderReceiptCount);
+			$('#orderReceiptCount').text(result.orderCount.depositWaitingCount);
 			$('#paymentCompleteCount').text(result.orderCount.paymentCompleteCount);
 			$('#goodsPrepareCount').text(result.orderCount.goodsPrepareCount);
 			$('#shipPrepareCount').text(result.orderCount.shipPrepareCount);
@@ -497,8 +497,8 @@
 							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" onclick="fnReSendSms(this);"><span>SMS 재발송</span></button></p>\n';
 						}
 
-						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
-						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35' || ordDtl.ordDtlStat == 'G013_40') {
+						// 주문취소 버튼(결제완료, 상품준비중, 출고처지정)
+						if (ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35') {
 							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" delvFeeCd="' + ordDtl.delvFeeCd + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
 						}
 
@@ -512,8 +512,8 @@
 							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>\n';
 						}
 					} else {
-						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
-						if (ordDtl.payStat != 'G016_00' && (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35' || ordDtl.ordDtlStat == 'G013_40')) {
+						// 주문취소 버튼(결제완료, 상품준비중, 출고처지정)
+						if (ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35') {
 							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" delvFeeCd="' + ordDtl.delvFeeCd + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
 						}
 
@@ -555,13 +555,13 @@
 							tag += '											<p><button type="button" class="btn btn_primary_line btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" goodsCd="' + ordDtl.goodsCd + '" onclick="fnCreateReview(this);"><span>리뷰 쓰기</span></button></p>\n';
 						}
 
-						// 쇼핑백담기 버튼(구매확정)
-						if (ordDtl.ordDtlStat == 'G013_70') {
+						// 쇼핑백담기 버튼(입금대기, 배송준비중, 구매확정)
+						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_40' || ordDtl.ordDtlStat == 'G013_70') {
 							tag += '											<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateCart(this);"><span>쇼핑백 담기</span></button></p>\n';
 						}
 
 						// 1:1문의 버튼(구매확정)
-						if (ordDtl.ordDtlStat == 'G013_70' && (ordDtl.reviewableYn == 'N' || ordDtl.reviewSq > 0)) {
+						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_40' || (ordDtl.ordDtlStat == 'G013_70' && (ordDtl.reviewableYn == 'N' || ordDtl.reviewSq > 0))) {
 							tag += '											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
 						}
 					}

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

@@ -437,7 +437,7 @@
 
 		// 추가배송비 PG 처리
 		let addPayCost = $('#returnForm input[name=addPayCost]').val();
-		alert(addPayCost);
+
 		let data = {};
 		data.ordNo = oneData.ordNo;
 		data.ordChgSq = 0;

+ 116 - 59
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -146,58 +146,8 @@
 			</th:block>            
             
             <!-- 관련상품 리스트 -->
-			<div class="content sticky_nav_list" th:if="${planCornerListLength>0}">
-				<div class="cont_head">
-                    <div class="sticky_nav">
-                        <ul>    
-                        	<th:block th:each="cornerData, CornerStat : ${planCornerList}">
-                            <li><a th:href="${'#brand' +CornerStat.index}" th:text="${cornerData.cornerNm}"></a></li> <!-- 섹션이동 -->
-                            </th:block>
-                        </ul>
-                    </div>
-				</div>
-				<div class="cont_body">
-                    <div class="list_content">
-                    	<th:block th:each="cornerData, CornerStat : ${planCornerList}">
-                        <div th:id="${'brand' +CornerStat.index}">
-                            <div class="item_header"> <!-- 섹션이동 -->
-                                <h4 th:text="${cornerData.cornerNm}"></h4>
-                            </div>
-                            <div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
-                            	<th:block th:each="cornerGoodsData, CornerGoodsStat : ${planCornerGoodsList}" th:if="${cornerGoodsData.cornerNm == cornerData.cornerNm}">
-                       
-                                <div class="item_prod">
-                                    <div class="item_state">
-                                        <button type="button" th:class="${cornerGoodsData.likeIt == 'likeit'}? 'itemLike likeit' : 'itemLike'" onclick="cfnPutWishList(this);" th:attr="goodsCd=${cornerGoodsData.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-                                        <a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${cornerGoodsData.goodsCd}]])" class="itemLink">
-                                            <!-- <div class="rank ranker"><span>1</span></div> -->
-                                            <div class="itemPic">
-                                                <img alt="BLUE-a" class=" vLHTC pd_img" th:src="${goodsView + '/' +cornerGoodsData.sysImgNm}">
-                                            </div>
-                                            <p class="itemBrand" th:text="${cornerGoodsData.brandGroupNm}"></p>
-                                            <div class="itemName" th:text="${cornerGoodsData.goodsNm}"></div>
-                                            <p class="itemPrice">[[${#numbers.formatInteger(cornerGoodsData.currPrice,0,'COMMA')}]]
-                                                <span class="itemPrice_original" th:if="${cornerGoodsData.currPrice != cornerGoodsData.listPrice}" th:text="${#numbers.formatInteger(cornerGoodsData.listPrice,0,'COMMA')}"></span>
-                                                <span class=" itemPercent" th:if="${cornerGoodsData.dcRate != '0'}" th:text="|${#numbers.formatDecimal(cornerGoodsData.dcRate,0,0)}%|"></span>
-                                            </p>
-                                            <div class="itemcolorchip">
-                                                <span class="chip_color35" value="ABM">BEIGE</span>
-                                                <span class="chip_color54" value="BDS">BLACK</span>
-                                                <span class="chip_color40" value="YBR">WHITE</span>
-                                            </div>
-                                            <p class="itemBadge">
-                                                <span class="badge13">베스트 </span>
-                                            </p>
-                                            <div class="itemComment" th:if="${cornerGoodsData.goodsTnm != null}" th:text="${cornerGoodsData.goodsTnm}"></div>
-                                        </a>
-                                    </div>
-                                </div>  
-                                </th:block>          
-                          	</div>
-                          </div>
-                      </th:block>
-                  </div>         
-              </div>
+			<div class="content sticky_nav_list" id="cornerList">
+
           </div>
 		  
             <!-- //관련상품 리스트 -->  
@@ -289,9 +239,109 @@ let template =[[${templateOrd}]];
 let replyList = [[${replyList}]];
 let replyCount = [[${replyCount}]];
 let replyAttachList = [[${replyAttachList}]];
+let planCornerGoodsList = [[${planCornerGoodsList}]];
+let planCornerList = [[${planCornerList}]];
 let _mall = [[${@environment.getProperty('domain.front')}]];
 let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
 let imgUrl=[[${@environment.getProperty('upload.image.view')}]];
+console.log(planCornerList);
+console.log(planCornerGoodsList);
+if(planCornerList.length>0){
+	var html = '';
+	
+	html += '<div class="cont_head">';
+	html += '     <div class="sticky_nav">';
+	html += '         <ul>    ';
+	$.each(planCornerList, function(idx, item)  {
+		html += '             <li><a href="#brand'+idx+'">'+item.cornerNm+'</a></li>';
+	})
+	
+	html += '         </ul>';
+	html += '     </div>';
+	html += '</div>';
+	html += '<div class="cont_body">';
+	html += '     <div class="list_content">';
+	$.each(planCornerList, function(idx, item)  {
+		html += '         <div id="brand'+idx+'">';
+		html += '             <div class="item_header">';
+		html += '                 <h4>'+item.cornerNm+'</h4>';
+		html += '             </div>';
+		html += '             <div class="itemsGrp">';
+		$.each(planCornerGoodsList, function(idx2, item2)  {
+			html += '                 <div class="item_prod">';
+			html += '                     <div class="item_state">';
+			html += '		<button type="button" class="itemLike';
+			if(item.likeIt == 'likeit'){
+				html += ' likeit';
+			}
+			html += ' "';
+			html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			
+			html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
+			html += '                             <div class="itemPic">';
+			html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
+			html += '                             </div>';
+			html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
+			html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
+			html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
+			if (item2.currPrice != item2.listPrice) {
+				html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+			}
+			if (item2.dcRate != 0) {
+				html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+			}
+			
+			
+			html += '                             </p>';
+			html += '                             <div class="itemcolorchip">';
+			if(!gagajf.isNull(item2.colorChips)){
+				var colorArr = item2.colorChips.split(",");
+				var colorCd = '';
+				var rgbColor = '';
+				for(let i=0; i<colorArr.length; i++){
+					var colorInfo = colorArr[i].split(":");
+					colorCd = colorInfo[0];
+					rgbColor = colorInfo[1];
+					if(rgbColor=='#FFFFFF'){
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+					}else{
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+					}
+				}
+			}
+			html += '                             </div>';
+			if(!gagajf.isNull(item2.icon)){
+				var iconArr = item2.icon.split(",");
+				var iconGb = '';
+				var iconNm = '';
+				html += '	<p class="itemBadge">';
+				for(let i=0; i<iconArr.length; i++){
+					var iconInfo = iconArr[i].split(":");
+					iconGb = iconInfo[0];
+					iconNm = iconInfo[1];
+					html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+				}
+				html += '	</p>';
+			}
+			if(item2.goodsTnm != null){
+				html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+			}
+			html += '                         </a>';
+			html += '                     </div>';
+			html += '                 </div>';
+		})
+
+		html += '             </div>';
+		html += '         </div>';
+	})
+	
+	html += '     </div>';
+	html += ' </div>';
+	
+	
+	$("#cornerList").append(html);
+	
+}
 
 if(review.length>0){
 	
@@ -409,7 +459,6 @@ if(goods1.length>0){
 			html += '	<div>';
 			html += '        <h4>';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-				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{
@@ -731,11 +780,7 @@ var fnPlanCouponCallBack = function(result){
 // 설문조사 참여 버튼 클릭
 var fnJoinConfirm = function () {
 	let planSq = plan.planSq;
-	// 로그인 확인
-	if (!cfCheckLogin()) {
-		mcxDialog.alert("로그인 후 참여 가능합니다.");
-		return false;
-	}
+	
 	cfnGoToPollDetail(planSq);
 
 }
@@ -781,7 +826,7 @@ var fnSearchCallback = function (result) {
 				 }
 				
 				 html += '			</div>';
-				 html += '			<p>'+item.entryVal1+'</p>';
+				 html += '			<p>'+escapeHtml(item.entryVal1)+'</p>';
 				 if (item.entryCustNo == result.custNo) {
 					 html += '			<button class="btn btn_default btn_del" value="'+item.planEntrySq+'" onclick="fnDelReply(this.value)"><span>삭제</span></button>';
 				 }
@@ -806,6 +851,18 @@ var fnSearchCallback = function (result) {
 	gagaPaging.createPagination(result.paging.pageable);
 }
 
+function escapeHtml(str) {
+	var map = {
+		'&': '&amp;',
+		'<': '&lt;',
+		'>': '&gt;',
+		'"': '&quot;',
+		"'": '&#039;'
+	};
+	return str.replace(/[&<>"']/g, function(m) { return map[m]; });
+}
+
+
 // 댓글 삭제
 var fnDelReply = function(obj) {
 	

+ 106 - 7
src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

@@ -57,21 +57,21 @@
                 </div>
 		    </div>
             <!-- 총알배송 가능 상품 리스트 -->
-			<div class="content sticky_nav_list">
-				<div class="cont_head">
+			<div class="content sticky_nav_list" id="cornerList">
+<!-- 				<div class="cont_head">
                     <div class="sticky_nav">
                         <ul>    
-                            <li><a href="#brand01">모이몰른</a></li> <!-- 섹션이동 -->
+                            <li><a href="#brand01">모이몰른</a></li> 섹션이동
                         </ul>
                     </div>
 				</div>
 				<div class="cont_body">
                     <div class="list_content">
                         <div id="brand01">
-                            <div class="item_header"> <!-- 섹션이동 -->
+                            <div class="item_header"> 섹션이동
                                 <h4>모이몰른</h4>
                             </div>
-                            <div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
+                            <div class="itemsGrp"> itemsGrp rank hot deal
                                 <div class="item_prod">
                                     <div class="item_state">
                                         <button type="button" class="itemLike">관심상품 추가</button>
@@ -101,7 +101,7 @@
                             </div>
                         </div>
                      </div>
-                </div>
+                </div> -->
 		    </div>
             <!-- //총알배송 가능 상품 리스트 -->  
         </div>
@@ -141,8 +141,107 @@
 /*<![CDATA[*/
 let custAddr = [[${custAddr}]];
 let customerInfo = [[${customerInfo}]];
-
+let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
+let planCornerList = [[${planCornerList}]];
+let planCornerGoodsList = [[${planCornerGoodsList}]];
 // 로그인 확인
+if(planCornerList.length>0){
+	var html = '';
+	
+	html += '<div class="cont_head">';
+	html += '     <div class="sticky_nav">';
+	html += '         <ul>    ';
+	$.each(planCornerList, function(idx, item)  {
+		html += '             <li><a href="#brand'+idx+'">'+item.cornerNm+'</a></li>';
+	})
+	
+	html += '         </ul>';
+	html += '     </div>';
+	html += '</div>';
+	html += '<div class="cont_body">';
+	html += '     <div class="list_content">';
+	$.each(planCornerList, function(idx, item)  {
+		html += '         <div id="brand'+idx+'">';
+		html += '             <div class="item_header">';
+		html += '                 <h4>'+item.cornerNm+'</h4>';
+		html += '             </div>';
+		html += '             <div class="itemsGrp">';
+		$.each(planCornerGoodsList, function(idx2, item2)  {
+			html += '                 <div class="item_prod">';
+			html += '                     <div class="item_state">';
+			html += '		<button type="button" class="itemLike';
+			if(item.likeIt == 'likeit'){
+				html += ' likeit';
+			}
+			html += ' "';
+			html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			
+			html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
+			html += '                             <div class="itemPic">';
+			html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
+			html += '                             </div>';
+			html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
+			html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
+			html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
+			if (item2.currPrice != item2.listPrice) {
+				html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+			}
+			if (item2.dcRate != 0) {
+				html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+			}
+			
+			
+			html += '                             </p>';
+			html += '                             <div class="itemcolorchip">';
+			if(!gagajf.isNull(item2.colorChips)){
+				var colorArr = item2.colorChips.split(",");
+				var colorCd = '';
+				var rgbColor = '';
+				for(let i=0; i<colorArr.length; i++){
+					var colorInfo = colorArr[i].split(":");
+					colorCd = colorInfo[0];
+					rgbColor = colorInfo[1];
+					if(rgbColor=='#FFFFFF'){
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+					}else{
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+					}
+				}
+			}
+			html += '                             </div>';
+			if(!gagajf.isNull(item2.icon)){
+				var iconArr = item2.icon.split(",");
+				var iconGb = '';
+				var iconNm = '';
+				html += '	<p class="itemBadge">';
+				for(let i=0; i<iconArr.length; i++){
+					var iconInfo = iconArr[i].split(":");
+					iconGb = iconInfo[0];
+					iconNm = iconInfo[1];
+					html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+				}
+				html += '	</p>';
+			}
+			if(item2.goodsTnm != null){
+				html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+			}
+			html += '                         </a>';
+			html += '                     </div>';
+			html += '                 </div>';
+		})
+
+		html += '             </div>';
+		html += '         </div>';
+	})
+	
+	html += '     </div>';
+	html += ' </div>';
+	
+	
+	$("#cornerList").append(html);
+	
+}
+
 var shotBody = function () {
 	if (!cfCheckLogin() || (custAddr == null && custAddr == '')) {
 		html = '';

+ 89 - 41
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -39,56 +39,24 @@
                         </div>
                     </div>  
                     <div class="list_content">
-                        <div class="itemsGrp rowtype"> <!-- itemsGrp rank hot deal --> <!-- rowtype 추가시 가로형태로 출력 -->
-                        <th:block th:each="SocialData, SocialStat : ${socialGoods}">
-                            <div class="item_prod" th:class="${SocialData.stockQtySum == 0 ? 'item_prod sold_out' : 'item_prod'}">
-                                <div class="item_state"> <!-- item_state AD soldout -->
-                                    <button type="button" th:class="${SocialData.likeIt == 'likeit'}? 'itemLike active' : 'itemLike'" onclick="cfnPutWishList(this);" th:attr="goodsCd=${SocialData.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-                                    <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${SocialData.goodsCd}]])" >
-                                        <div class="itemPic">
-                                            <img alt="BLUE-a" class=" vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + SocialData.sysImgNm}">
-                                        </div>
-                                        <div class="itemSpecialPrice"><span>특가</span></div>
-                                        <p class="itemBrand" th:text="${SocialData.brandGroupNm}"></p>
-                                        <div class="itemName" th:text="${SocialData.goodsNm}"></div>
-                                       <div class="itemComment" th:if="${SocialData.goodsTnm!=null}" th:text="${SocialData.goodsTnm}"></div>
-                                        <p class="itemPrice">
-                                             [[${#numbers.formatInteger(SocialData.currPrice,0,'COMMA')} + 원]]
-                                            <span class="itemPrice_original" th:text="${#numbers.formatInteger(SocialData.listPrice,0,'COMMA')} + '원'"></span>
-											<span class=" itemPercent" th:text="${#numbers.formatDecimal(SocialData.dcRate,1,0)} + '%'"></span>
-                                        </p>
-                                    </a>
-                                    	 <div class="shopBagBtn">
-                                            <button type="button" class="btn btn_defalt" onclick="socialAddCart(this)" th:attr="goodsCd=${SocialData.goodsCd}, minOrdQty=${SocialData.minOrdQty}, goodsType=${SocialData.goodsType}, optCd=${SocialData.optCd}">
-                                                <span>쇼핑백 담기</span>
-                                            </button>
-                                        </div>
-                                </div>
-                            </div>
-                            </th:block>
+                        <div class="itemsGrp rowtype" id="socialList"> <!-- itemsGrp rank hot deal --> <!-- rowtype 추가시 가로형태로 출력 -->
+                  
                         </div>
                     </div>
                 </div>
 		    </div>
 		</th:block>
-		<th:block th:unless="${socialInfo != null}">
-				<div class="nodata" >
-					<div class="txt_box">
-						<p>
-							진행하는 핫딜이 없습니다.
-						</p>
-					</div>
-					<div class="btn_box">
-						<button class="btn btn_default" th:onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>
-					</div>
-				</div>	
-		</th:block>
+
+
         </div>
     </div>   
+<script src="/ux/plugins/jquery/jquery.history.min.js"></script>
+<script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
-var socialInfo = [[${socialInfo}]];
-console.log(socialInfo);
+let socialInfo = [[${socialInfo}]];
+let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
 var socialAddCart = function (obj) {
+
 	let btnType = "C";
 	let params = [];
 
@@ -109,7 +77,87 @@ var socialAddCart = function (obj) {
 		cfnAddCart(params);	
 	} 
 }
+
+let fnGetSocialList = function() {
+	let actionUrl = '/social/list';
+	
+	$.getJSON(actionUrl
+		, function(result, status) {
+		html = '';
+			if (status == 'success') {
+				if (result.length > 0) {
+					$.each(result, function(idx, item) {
+						if (item.stockQtySum == 0) {
+							html += ' <div class="item_prod"class="item_prod sold_out">';
+						}else{
+							html += ' <div class="item_prod"class="item_prod">';
+						}
+						
+						html += '    <div class="item_state"> ';
+						if (item.likeIt == 'likeit') {
+							html += '        <button type="button" class="itemLike active" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+						}else{
+							html += '        <button type="button" class="itemLike" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+						}
+						
+						html += '        <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\')" >';
+						html += '            <div class="itemPic">';
+						html += '                <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item.sysImgNm +'">';
+						html += '            </div>';
+						html += '            <div class="itemSpecialPrice"><span>특가</span></div>';
+						html += '            <p class="itemBrand">'+item.brandGroupNm+'</p>';
+						html += '            <div class="itemName">'+item.goodsNm+'</div>';
+						if(item.goodsTnm != null){
+							html += '           <div class="itemComment">'+item.goodsTnm+'</div>';
+						}
+
+						html += '            <p class="itemPrice">';
+						html += item.currPrice.addComma() +'원';
+						if (item.currPrice != item.listPrice) {
+							html += '                <span class="itemPrice_original">'+item.listPrice.addComma()+'원</span>';
+						}
+						if (item.dcRate != 0) {
+							html += '                                 <span class=" itemPercent">'+item.dcRate.addComma()+'%</span>';
+						}
+						html += '            </p>';
+						html += '        </a>';
+						html += '        	 <div class="shopBagBtn">';
+						html += '                <button type="button" class="btn btn_defalt" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'">';
+						html += '                    <span>쇼핑백 담기</span>';
+						html += '                </button>';
+						html += '            </div>';
+						html += '    </div>';
+						html += '</div>';
+					});
+					$("#socialList").html(html);
+					
+				} else {
+					html += '<div class="nodata" >';
+					html += '	<div class="txt_box">';
+					html += '		<p>';
+					html += '			진행하는 핫딜이 없습니다.';
+					html += '		</p>';
+					html += '	</div>';
+					html += '	<div class="btn_box">';
+					html += '		<button class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>홈으로 가기</span></button>';
+					html += '	</div>';
+					html += '</div>';	
+					
+					$("#socialList").html(html);
+					$('#eventTotCnt').html('<span>0</span>개의 이벤트');
+				}
+			}
+		});
+}
+
+//인피니트 스크롤 이벤트 발생 시 데이터 가져오기
+var fnGetInfiniteScrollDataList = function(pageNum) {
+	// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
+	gagajf.ajaxSubmitForm(document.searchForm, "/goods/list", "json", gagaInfiniteScroll.jsonToHtml);
+}
+
 $(function(){
+	fnGetSocialList();
        /* 핫딜 countDown */
        function hotdealTimer() {
            var endTime = new Date(socialInfo.socialEddt); // 남은시간 지정

+ 4 - 3
src/main/webapp/biz/goods.js

@@ -191,12 +191,13 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 			}
 			if(videoGb=='Y'){
 				tag += '<iframe id="child" class="pd_mov" src="https://www.youtube.com/embed/'+videoUrl+'"></iframe>';
+				//tag += '<iframe id="pdThumbVideo" class="pd_mov" src="http://v.kr.kollus.com/164MyIiv?enable_initialize_focus=false&autoplay&mute&controls_activation=none" allow="fullscreen" allowFullScreen></iframe>';
 			}else{
-				tag += '<iframe id="child" class="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'?enable_initialize_focus=false&autoplay=true" frameborder="0" allowfullscreen></iframe>';
+				tag += '<iframe id="child" class="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'?enable_initialize_focus=false&autoplay&mute&controls_activation=none" allow="fullscreen" allowFullScreen></iframe>';
 			}
 		}
-		tag += '		<img class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'" data-img="'+goodsUrl+'/'+item.sysImgNm2+'">';
-		if(!gagajf.isNull(item.sizes) && gagajf.isNull(item.videoVal)){
+		tag += '		<img class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'" data-img="'+goodsUrl+'/'+item.sysImgNm2+'" onerror="noneImg(this)">';
+		if(!gagajf.isNull(item.sizes)){
 			var sizeArr = item.sizes.split(",");
 			var minSize;
 			var maxSize;

BIN
src/main/webapp/images/pc/ico_newbenefit1.png


BIN
src/main/webapp/images/pc/ico_newbenefit2.png


BIN
src/main/webapp/images/pc/ico_newbenefit3.png


+ 2 - 2
src/main/webapp/ux/mo/css/common_m.css

@@ -910,8 +910,8 @@ main.container .inner:last-child{padding-bottom: 6.0rem; margin-bottom: 0;}
 
 /* footer */
 footer{background-color: #f1f1f1;}
-footer .btn_top{position: fixed; bottom: 30px; right: 25px; opacity: 0; background-color: rgba(0, 0, 0, 0.4); width: 45px; height: 45px; border-radius: 50%; font-size: 0; z-index: 50;}
-footer .btn_top span{display: block; width: 24px; height: 24px; margin: 0 auto; position: relative;}
+footer .btn_top{position: fixed; bottom: 30px; right: 25px; opacity: 0; background-color: rgba(0, 0, 0, 0.4); width: 41px; height: 40px; font-size: 0; z-index: 50; background:url(/images/mo/mo_btn_top.png) no-repeat;}
+footer .btn_top span{display: block; width: 24px; height: 24px; margin: 0 auto; position: relative; opacity:0;}
 footer .btn_top span i{display: block; position: absolute; background: #fff;}
 footer .btn_top span i.gl1{left: 4px; top: 2px; width: 10px; height: 2px; -webkit-transform: rotate(-45deg); transform: rotate(-45deg);}
 footer .btn_top span i.gl2{left: 50%; top: 0; -webkit-transform: translateX(-50%); transform: translateX(-50%); width: 2px; height: 20px;}

+ 49 - 2
src/main/webapp/ux/mo/css/layout_m.css

@@ -868,6 +868,53 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .br .brand_si .swiper-wrapper .swiper-slide:nth-child(odd){border-bottom:0rem none;}
 .Purchase_pop .select_custom .opt_price{font-size:1.2rem; color:#888888}
 .select_custom .combo .list>li[aria-disabled="true"] .opt_price{color:#bbb !important}
+/* 210428 */
+.cs_contactUs_my .form_field:first-of-type{margin:0;}
+.cs_contactUs_my .form_field .pics{position:absolute; top:0; left:0; z-index:2}
+.pop_detail .review_list {border-top:1px solid #ddd;}
+.pop_detail .review_list > ul > li {padding:3rem 0; border-bottom:1px solid #ddd; }
+.pop_detail .review_list > ul > li .review {}
+.pop_detail .review_list .review .info_box {}
+.pop_detail .review_list .review .info_box .star_score {float:left}
+.pop_detail .review_list .review .info_box .star_score .star {display:inline-block; position:relative; width:83px; height:1.3rem; background:#ddd;}
+.pop_detail .review_list .review .info_box .star_score .star::after {content:''; position:absolute; left:0; top:0; z-index:3; width:100%; height:100%; background:url('/images/mo/star_empty_big.png') no-repeat 0 0; background-size:contain; image-rendering:pixelated;}
+.pop_detail .review_list .review .info_box .star_score .star .progbar {display:inline-block; height:100%; background:#fd4802; vertical-align:top;}
+.pop_detail .review_list .review .info_box .writer {float:right;}
+.pop_detail .review_list .review .info_box .writer span {position:relative; margin-left:1.1rem; padding-left:1.1rem; color:#888; font-size:1.1rem;}
+.pop_detail .review_list .review .info_box .writer span::after {content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); height:8px; width:1px; background:#ddd;}
+.pop_detail .review_list .review .info_box .writer span:first-child {margin-left:0; padding-left:0}
+.pop_detail .review_list .review .info_box .writer span:first-child::after {display:none;}
+.pop_detail .review_list .review .response_box {margin-top:1.4rem;}
+.pop_detail .review_list .review .response_box > div:first-child {margin-top:0}
+.pop_detail .review_list .review .response_box > div dl div {display:flex; font-size:1.1rem;}
+.pop_detail .review_list .review .response_box > div dl div dt {width:4.5rem; color:#888}
+.pop_detail .review_list .review .response_box > div dl div dd {margin-left:1.2rem; color:#fd4802}
+.pop_detail .review_list .review .response_box2 {margin-top:1.4rem;}
+.pop_detail .review_list .review .response_box2 > div:first-child {margin-top:0; overflow:hidden;}
+.pop_detail .review_list .review .response_box2 > div dl div {float:left; width:50%; max-width:400px; display:flex; font-size:1.1rem;}
+.pop_detail .review_list .review .response_box2 > div dl div dt {position:relative; padding-left:0.8rem; color:#888}
+.pop_detail .review_list .review .response_box2 > div dl div dt:before{content:''; position:absolute; left:0; top:0.6rem; display:block; width:2px; height:2px; background-color:#888;}
+.pop_detail .review_list .review .response_box2 > div dl div dd {margin-left:1.2rem; color:#222}
+.pop_detail .review_list .review .info_box{line-height:1;}
+.pop_detail .review_list .review .photo_box {margin: 1rem -1.33rem 0;}
+.pop_detail .review_list .review .photo_box .photo_list {font-size:0; white-space:nowrap; overflow-x:auto;}
+.pop_detail .review_list .review .photo_box .photo_list > ul li {display:inline-block; margin-left:0.8rem; width:7.5rem; height:7.5rem;}
+.pop_detail .review_list .review .photo_box .photo_list > ul li:first-child{margin-left:1.33rem;}
+.pop_detail .review_list .review .photo_box .photo_list > ul li:last-child{margin-right:1.33rem;}
+.pop_detail .review_list .review .txt_review_box {margin-top:1.6rem; font-size:1.4rem; overflow:hidden; color:#000}
+.pop_detail .review_list .review .reply_box {margin-top:1.5rem; padding-top:1.5rem;}
+.pop_detail .review_list .review .reply_box .reply {position:relative; padding:2rem; background:#f5f5f5;}
+.pop_detail .review_list .review .reply_box .reply::after {content:''; position:absolute; left:0px; top:-1.5rem; width:0px; height:0px; border:1.5rem solid #f5f5f5; border-top-color:transparent; border-right-color:transparent;}
+.pop_detail .review_list .review .reply_box .reply .reply_writer {}
+.pop_detail .review_list .review .reply_box .reply .reply_writer span {display:inline-block; position:relative;}
+.pop_detail .review_list .review .reply_box .reply .reply_writer .wr_name {padding-left:2.2rem; font-size:1.3rem; font-weight:300;}
+.pop_detail .review_list .review .reply_box .reply .reply_writer .wr_name::after {content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); width:1.5rem; height:1.5rem; background:url('/images/mo/ico_admin.png') no-repeat 0 0; background-size:contain;}
+.pop_detail .review_list .review .reply_box .reply .reply_writer .wr_date {padding-left:1rem; margin-left:1rem; font-size:1.1rem; color:#888; font-size:200;}
+.pop_detail .review_list .review .reply_box .reply .reply_writer .wr_date::after {content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); height:1.2rem; width:1px; background:#ddd;}
+.pop_detail .review_list .review .reply_box .reply .reply_txt {margin-top:1.2rem; color:#666; font-size:1.3rem;}
+.modal.photo_comment_popup.pd_bestreviewdetail_pop .modal-body .pop_cont{padding-top:0 !important;}
+.modal.photo_comment_popup.pd_bestreviewdetail_pop .pop_detail .review_list{border:0px none;}
+.modal.photo_comment_popup.pd_bestreviewdetail_pop .pop_detail .review_list ul li{padding:0;}
 
 
 
@@ -1151,12 +1198,12 @@ header .subs .dp_list_btn_gnbs.on span i {transform: rotate(-180deg);-webkit-tra
 .modal.pd_pop.pd_qnalist_pop .modal-body{position:relative; margin:auto; padding:9.3rem 0 3rem;}
 .modal.pd_pop.pd_qnalist_pop .ui_row{margin:0 -1.33rem!important; width:auto;}
 .modal.pd_pop.pd_qnalist_pop .pd_qnalist > .btn_group_flex{position:fixed; width: 100%; bottom: 0; margin-top: 0;}
-.pd_qnalist .qna_list .foldGroup {margin-bottom:0;}
+.pd_qnalist .qna_list .foldGroup {margin-bottom:2rem;}
 .pd_qnalist .qna_list {margin-top:3rem;}
 .pd_qnalist .qna_list .form_field input[type="checkbox"] + label {line-height:1;}
 .pd_qnalist .qna_list .form_field input[type="checkbox"] + label:before,
 .pd_qnalist .qna_list .form_field input[type="checkbox"] + label:after {top:50%; transform:translateY(-50%); margin-top:0;}
-.pd_qnalist .qna_list .foldGroup .fold_head a{padding: 1.4rem 1.33rem; border-bottom:0.1rem solid #E5E5E5;}
+.pd_qnalist .qna_list .foldGroup .fold_head a{padding: 1.4rem 3rem; border-bottom:0.1rem solid #E5E5E5;}
 .pd_qnalist .qna_list .foldGroup .fold_head .fold_tit .ico {display:inline-block; width:auto; height:auto; vertical-align:middle;}
 .pd_qnalist .qna_list .foldGroup .fold_head .fold_tit .ico_myqna::after {content:'내문의'; display:inline-block; margin-right:1rem; color:#fd4802; font-size:1.1rem; text-align:center; box-sizing:border-box; line-height:20px;}
 .pd_qnalist .qna_list .foldGroup .fold_head .fold_tit .ico_secret::after {content:''; display:inline-block; margin-right:1rem; width:1.2rem; height:1.2rem; background:url('/images/mo/ico_secret.png') no-repeat 50% 50%; background-size:contain;}

+ 5 - 0
src/main/webapp/ux/mo/css/style24_m.css

@@ -1888,6 +1888,9 @@ background-size:100%;}
 
 .adrsChange_Pop .modal-footer .btn {height: 4.5rem; font-size: 1.4rem;}
 .adrsChange_Pop .modal-body .pop_cont {font-size: 1.4rem; line-height: 1.4;}
+.adrsChange_Pop .modal-body .pop_cont .empty_txt {display: none;}
+.adrsChange_Pop .modal-body .pop_cont.nodata .delivery_list {display: none;}
+.adrsChange_Pop .modal-body .pop_cont.nodata .empty_txt {display: block; padding:14rem 0 11rem; font-size: 1.3rem; color: #222; text-align: center; font-weight: 300;}
 .adrsChange_Pop .badge_wrap {display: inline-block;}
 .adrsChange_Pop .order_badge {font-size: 1rem; color: #666; font-weight: 300; border:1px solid #888; padding:0.4rem 0.4rem 0.25rem; margin-left: 1px; vertical-align: middle;}
 .adrsChange_Pop .order_bullet_badge {color: #fd4802; border:1px solid #fd4802;}
@@ -2203,6 +2206,8 @@ background-size:100%;}
 .od .ship_info .select_dress {padding:1.1rem 1.5rem;}
 .od .ship_info .select_options li {padding: 1rem 0;}
 
+.od .ship_info.none p {padding-top: 0.5rem; color: #222; font-weight: 300;}
+
 /* od_nonMb_order.html */
 .od .nonMBorder {}
 .od .nonMBorder .inner:first-child, .od .nonMBorder .inner:last-child {margin-top: -1.2rem;}

+ 11 - 5
src/main/webapp/ux/mo/js/common_m.js

@@ -156,7 +156,7 @@ $(document).ready(function() {
                         $("<span class=\"pics\">" +
                             "<img class=\"picsThumbs\" src=\"" + e.target.result + "\" title=\"" + file.name + "\"/>" +
                             "<span class=\"removes\">Removes image</span>" +
-                            "</span>").insertBefore(".fileAdd");
+                            "</span>").insertBefore("#fileAdd");
                         $(".removes").click(function(){
                             $(this).parent(".pics").remove();
                         });
@@ -881,20 +881,26 @@ $( document ).ready( function() {
         $('.htop h1').css({"display": "none"});
         $('.htop .search').css({"display": "none"});
     };  
-    
-        /* 고객센터_accordion */
+        /* 210428_수정 : 아코디언 */
         $(document).on('click','.cs .foldGroup .fold_head, .my .foldGroup .fold_head',function(e){
-            $(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
             $(this).toggleClass('on');
-            return false;
+            $(this).siblings('.fold_cont').slideToggle(100);
+            $(this).parents('li').siblings('li').find('.fold_head').removeClass('on');
+            $(this).parents('li').siblings('li').find('.fold_cont').slideUp(100);
         });
+        /* //210428_수정 : 아코디언 */
 
         /* 주문결제_accordion */
+        /* 210428_수정 : 아코디언 */
         $(document).on('click','.od .foldGroup .fold_head .fold_tit',function(e){	
             $(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
             $(this).parents('.fold_head').toggleClass('on');
+
+            $(this).parents('.inner').siblings('.inner').find('.fold_head').removeClass('on');
+            $(this).parents('.inner').siblings('.inner').find('.fold_cont').slideUp(100);
             return false;
         });
+        /* 210428_수정 : 아코디언 */
 
         /* 상품문의_accordion */
         $(document).on('click','.pd_qnalist .fold_head .fold_tit',function(e){	

+ 10 - 6
src/main/webapp/ux/pc/css/layout.css

@@ -1672,9 +1672,11 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.dp .list_content.nodata .itemsGrp {display:none;}
 	.dp .list_content.nodata .list_defult {display:block;}
 	.dp .list_defult {display:none; text-align:center; padding: 120px 0 160px;}
-	.dp .list_defult > div:first-child {margin-bottom:46px;}
-	.dp .list_defult > div:first-child p {line-height: 2;}
+	.dp .list_defult > div:first-child {margin-bottom:40px;}
+	.dp .list_defult > div:first-child p {line-height: 2; font-size: 16px; color:#666; font-weight: 300;}
+	.dp .list_defult > div:first-child p::before {content:''; display:block; width:36px; height:46px; margin:0 auto 24px; background:url('/images/pc/ico_content_none.png') no-repeat;}
 	.dp .list_defult .ui_row {justify-content: center; margin-bottom: 0;}
+	.dp .list_defult .ui_row .btn {color:#222; font-size:14px; font-weight:300;padding: 9px 23px;}
 	
 	/* dp_sticky_nav_리스트 */
 	.dp .sticky_nav_list {margin-top:60px}
@@ -1792,7 +1794,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail {position: absolute; left: 0; bottom: 100px; z-index: 9; padding: 23px; padding-bottom: 0;}
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail * {display: -webkit-box; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; color: #fff; font-weight: 300; letter-spacing: 0;}
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .brand {font-size: 14px;}
-	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .tit {margin:20px 0 15px; max-height:66px; font-size:24px; line-height:1.4; word-break:keep-all; text-align:left;}
+	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .tit {margin:20px 0 15px; padding-bottom: 0; max-height:66px; font-size:24px; line-height:1.4; word-break:keep-all; text-align:left;}
 	.dp_Exhibition .exhi_list .exhi_item .exhi_item_img .exhi_detail .sale {font-size: 14px;}
 	.dp_Exhibition .exhi_list .exhi_item_pr {background: #fff; padding: 20px; position: relative; z-index: 9; width: 88.4%; margin:-70px auto 0;}
 	.dp_Exhibition .exhi_list .exhi_item_pr li {height: 150px; margin-bottom: 16px;}
@@ -2789,7 +2791,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.option_box [class^="opt_"] .select_custom .select:after {right:20px;}
 	.option_box [class^="opt_"] div[class*="item_set_"] .select .opt_price {display:none;}
 	.option_box .opt_select div[class*="item_set_"] .select .opt_price {display:none;}
-	.option_box [class^="opt_"] .select_custom .select .opt_price {padding-top: 10px;}
+	.option_box [class^="opt_"] .select_custom .select .opt_price {padding-top: 10px;display: none;}
 	.option_box [class^="opt_"] .select_custom[aria-disabled="true"] .select {color:#bbb; background:#f5f5f5;}
 	.option_box [class^="opt_"] .select_custom .combo .list {top:52px; padding:0}
 	.option_box [class^="opt_"] .select_custom .combo .list > li {padding:18px 18px; line-height:1; color:#666; font-size:16px; font-weight:200;}
@@ -3067,7 +3069,9 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd_desc_wrap .item_descrp .area_list::after {content:''; position:absolute; right:-62px; top:0; bottom:0; width:1px; height:100%; background:#ddd; z-index:2;}
 	.pd_desc_wrap .item_descrp .area_option {float:right;}
 	.pd_desc_wrap .item_descrp .area_option .opt_wrap {width:500px; padding-left:60px; padding-top:30px;}
-	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px}
+	/* .pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px;} */
+	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop {position:fixed; right:70px; top:80px; width:500px;height: calc(100% - 11%);}
+	.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop .option_box {overflow-y: auto; height: calc(100% - 30%);}
 	.pd_desc_wrap .item_descrp .area_option .opt_wrap.absbottom {position:absolute; top:auto; bottom:0px; right:70px;}
 	@media screen and (max-width:1459px) {
 		.pd.deal .tab_detail_nav.fix ul {position:absolute; left:0; top:0; width:100%; height:60px; z-index:25;}
@@ -3587,7 +3591,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd_review .area_rv_best .btn_arrow {position:absolute; right:0; top:0px; width:50px; height:24px; z-index:2;}
 	.pd_review .area_rv_best .btn_arrow::after {clear:both; display:block;}
 	.pd_review .area_rv_best .btn_arrow .swiper-button-prev,
-	.pd_review .area_rv_best .btn_arrow .swiper-button-next {display:inline-block; position:absolute; left:auto; right:auto; top:3px; bottom:auto; width:auto; height:auto; margin:0}
+	.pd_review .area_rv_best .btn_arrow .swiper-button-next {display:inline-block; position:absolute; left:auto; right:auto; top:3px; bottom:auto; width:auto; height:auto; margin:0;background:#ffffff;}
 	.pd_review .area_rv_best .btn_arrow .swiper-button-prev {content:''; display:block; position:absolute; top:3px; left:4px; width:14px; height:14px; border:2px solid #a7a7a7; border-width:2px 2px 0 0; transform:rotate(-135deg); -webkit-transform:rotate(-135deg);}
 	.pd_review .area_rv_best .btn_arrow .swiper-button-next {content:''; display:block; position:absolute; top:3px; right:4px; width:14px; height:14px; border:2px solid #a7a7a7; border-width:2px 2px 0 0; transform:rotate(45deg); -webkit-transform:rotate(45deg);}
 	.pd_review .area_rv_best .best_review {width:100%;}

+ 5 - 4
src/main/webapp/ux/pc/css/main.css

@@ -366,6 +366,7 @@
 .main_2stage .cont_body {}
 .bnnbox_crop {width:100%;}
 .bnnbox_crop::after {content:''; clear:both; display:block;}
+.bnnbox_crop > div {width: 100%;height: 230px;float: none;overflow: hidden;}
 .bnnbox_crop > .bnn_half {float:left; width:50%;}
 .bnnbox_crop > .bnn_half > a {display:block; position:relative; width:100%; height:0%; padding-top:26.0918%; overflow:hidden;}
 .bnnbox_crop > .bnn_half > a img {position:absolute; left:50%; right:0; top:50%; bottom:auto; transform:translate(-50%, -50%); width:auto; height:100%;}
@@ -575,13 +576,13 @@ header.minify .common_header.br_header::after {bottom:-565px;}
 .brand_main .brand_visual .cont_body {}
 .brand_main .brand_visual .swiper-button-prev {left:70px; opacity:0.5;}
 .brand_main .brand_visual .swiper-button-next {right:70px; opacity:0.5;}
-.brand_main .post-visual.swiper-container {margin-left:0;}
+.brand_main .post-visual .swiper-container {margin-left:0;}
 .brand_main .post-visual .swiper-wrapper {padding-bottom:0;}
-.brand_main .post-visual .swiper-slide {position:relative; max-width:1520px; padding-left:28.9473%; mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; -webkit-mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; transition:all 200ms ease;}
+.brand_main .post-visual .swiper-slide {position:relative; max-width:1520px; padding-left:28.9473%; mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; -webkit-mask-size:86.6072% 0%, 9.3928% 21.4285%, 90.6072% 100%, 100% 78.5715%; /*transition:all 200ms ease;*/}
 .brand_main .post-visual .swiper-slide img {width:1080px; margin:0;}
 .brand_main .post-visual .swiper-slide .txtWrap {opacity:0; position:absolute; padding-left:0px; top:110px; bottom:auto; left:0px; right:auto; z-index:1;}
 .brand_main .post-visual .txtWrap dt {font-size:0; padding-bottom:0;}
-.brand_main .post-visual .swiper-slide-active {opacity:1;}
+.brand_main .post-visual .swiper-slide-active {opacity:1 !important;}
 .brand_main .post-visual .swiper-slide-active .txtWrap {animation-name: fade-in;animation-duration: 1.5s;animation-delay: 1s;animation-fill-mode: both;}
 
 @keyframes fade-in {
@@ -598,7 +599,7 @@ header.minify .common_header.br_header::after {bottom:-565px;}
 }
 
 .brand_main .post-visual .swiper-slide-prev {opacity:0;}
-.brand_main .post-visual .swiper-slide-next {padding-left:0px; padding-right:440px;}
+.brand_main .post-visual .swiper-slide-next {opacity:1 !important; padding-left:0px; padding-right:440px;}
 .brand_main .post-visual .swiper-controls {position:absolute; width:auto; bottom:100px; left:190px; padding-right:15px; z-index:10;}
 .brand_main .post-visual .swiper-controls .swiper-pagination {margin-top:0}
 

+ 31 - 6
src/main/webapp/ux/pc/js/common-ui.js

@@ -79,6 +79,9 @@ $(document).ready(function() {
 		$("#fileAdd").on("change", function(e) {
 			var files = e.target.files,
 				filesLength = files.length;
+				console.log(filesLength);
+			var cmtLa = $('.cmt .cmt_thumb .form_field .imgUpload label');
+			var cmtIn = $('.cmt .cmt_thumb .form_field .imgUpload input');
 			for (var i = 0; i < filesLength; i++) {
 				var f = files[i]
 				var fileReader = new FileReader();
@@ -90,9 +93,24 @@ $(document).ready(function() {
 						"</span>").insertAfter("#fileAdd");
 					$(".removes").click(function(){
 						$(this).parent(".pics").remove();
+						cmtLa.css('display', 'block');
+						cmtIn.css('display', 'block');
+						$('#fileAdd').removeAttr("disabled");
 					});
 				});
 			fileReader.readAsDataURL(f);
+				var maxFileLength = 10; /* 최대 파일 갯수를 입력해 주세요 */
+				var imgFiles=$('.imgUpload .pics');
+				var cmtLa = $('.cmt .cmt_thumb .form_field .imgUpload label');
+				var cmtIn = $('.cmt .cmt_thumb .form_field .imgUpload input');
+				if (imgFiles.length >= maxFileLength-1) {
+					mcxDialog.alert('이미지는 최대' + maxFileLength +'장 까지 첨부 가능합니다.'); //210420_수정 : 시스템 alert -> dialog 변경.
+					$('#fileAdd').attr("disabled",true);
+					cmtLa.css('display', 'none');
+					cmtIn.css('display', 'none');
+				} else if(imgFiles.length < maxFileLength){
+					$('#fileAdd').removeAttr("disabled");
+				}
 			}
 		});
 	} else {
@@ -323,23 +341,30 @@ $(document).ready( function() {
 	});
 
 	/* 고객센터_accordion */
-	$(document).off('click').on('click','.cs .foldGroup .fold_head',function(e){
-		$('.cs .foldGroup .fold_head').removeClass('on');
-        $('.cs .foldGroup .fold_cont').slideUp(100);
-		$(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
+	/* 210428_수정 : 아코디언 */
+	$(document).on('click','.cs .foldGroup .fold_head',function(){
 		$(this).toggleClass('on');
-		return false;
+		$(this).siblings('.fold_cont').slideToggle(100);
+		$(this).parents('li').siblings('li').find('.fold_head').removeClass('on');
+		$(this).parents('li').siblings('li').find('.fold_cont').slideUp(100);
 	});
+	/* //210428_수정 : 아코디언 */
 
 	/* 주문결제_accordion */
+	/* 210428_수정 : 아코디언 */
 	$(document).on('click','.od .foldGroup .fold_head .fold_tit',function(e){	
-		$(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
+		//$(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
+		//$(this).parents('.fold_head').toggleClass('on');
 		$(this).parents('.fold_head').toggleClass('on');
+		$(this).parents('.foldGroup li').find('.fold_cont').slideToggle(100);
+		$(this).parents('li').siblings('li').find('.fold_head').removeClass('on');
+		$(this).parents('li').siblings('li').find('.fold_cont').slideUp(100);
 		return false;
 	}).on('click','.od .foldGroup .fold_paymethod .fold_head .fold_tit',function(e){
 		$("#rdi-paymethod-quick").trigger("click");
 		return false;
 	});
+	/* //210428_수정 : 아코디언 */
 	
 	/* 아이디/비밀번호 찾기_accordion:open */
 	$(document).on('click','.mb .foldGroup.checkcase .fold_head',function(e){	

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

@@ -855,12 +855,9 @@ function cfnPasswordModify() {
 
 	if ($('#pswordModifyPop').length == 0) {
 		$('body').append(str);
-		cfOpenLayer(_PAGE_PASSWORD_MODIFY, 'pswordModifyPop');
-	} else {
-		$('#pswordModifyPop').modal("show");
 	}
 
-
+	cfOpenLayer(_PAGE_PASSWORD_MODIFY, 'pswordModifyPop');
 }
 
 /**