Преглед изворни кода

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

xodud1202 пре 5 година
родитељ
комит
8ee5630d41
90 измењених фајлова са 4147 додато и 1699 уклоњено
  1. 9 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  2. 40 0
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  3. 11 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  4. 162 3
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  5. 30 5
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  6. 3 2
      src/main/java/com/style24/front/biz/web/TsfDeliveryController.java
  7. 4 3
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  8. 36 4
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  9. 829 55
      src/main/java/com/style24/front/biz/web/TsfNoMemberController.java
  10. 65 41
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  11. 1 0
      src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java
  12. 2 0
      src/main/java/com/style24/persistence/domain/BrandGroup.java
  13. 1 0
      src/main/java/com/style24/persistence/domain/Goods.java
  14. 11 0
      src/main/java/com/style24/persistence/domain/Review.java
  15. 66 9
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  16. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  17. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml
  18. 16 6
      src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml
  19. 7 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  20. 8 8
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  21. 189 90
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  22. 1 1
      src/main/resources/config/application-tsit.yml
  23. 13 13
      src/main/webapp/WEB-INF/views/mob/SigninFormMob.html
  24. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/DormantCertifyCompleteFormMob.html
  25. 13 3
      src/main/webapp/WEB-INF/views/mob/customer/DormantCertifyFormMob.html
  26. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/IdFindFormMob.html
  27. 1 2
      src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html
  28. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/JoinTypeFormMob.html
  29. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceIpinFormMob.html
  30. 16 8
      src/main/webapp/WEB-INF/views/mob/customer/NonCustOrderConfirmFormMob.html
  31. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/PasswordFindFormMob.html
  32. 33 0
      src/main/webapp/WEB-INF/views/mob/customer/PrivacyPolicyLayerFormMob.html
  33. 33 0
      src/main/webapp/WEB-INF/views/mob/customer/PrivacyTrustLayerFormMob.html
  34. 32 0
      src/main/webapp/WEB-INF/views/mob/customer/UseTermsLayerFormMob.html
  35. 129 76
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html
  36. 81 74
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  37. 191 178
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html
  38. 189 197
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html
  39. 0 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreListFormMob.html
  40. 12 4
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html
  41. 234 403
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustPwdModifyFormMob.html
  42. 1 7
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderDetailFormMob.html
  43. 0 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListFormMob.html
  44. 58 13
      src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html
  45. 0 3
      src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html
  46. 0 14
      src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html
  47. 0 1
      src/main/webapp/WEB-INF/views/mob/order/OrderGiftCompleteMob.html
  48. 0 1
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrAddPopMob.html
  49. 1 4
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html
  50. 1 2
      src/main/webapp/WEB-INF/views/mob/popup/DelvAddrModifyPopMob.html
  51. 19 16
      src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html
  52. 2 1
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  53. 5 5
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  54. 90 0
      src/main/webapp/WEB-INF/views/web/common/layout/NoMemberLayoutWeb.html
  55. 2 1
      src/main/webapp/WEB-INF/views/web/customer/DormantCertifyFormWeb.html
  56. 12 15
      src/main/webapp/WEB-INF/views/web/customer/NonCustOrderConfirmFormWeb.html
  57. 49 49
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  58. 100 38
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  59. 32 19
      src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html
  60. 63 74
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html
  61. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  62. 67 73
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  63. 0 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html
  64. 3 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageCreExchangeDetailFormWeb.html
  65. 0 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustDeliveryAddrFormWeb.html
  66. 1 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustPwdModifyFormWeb.html
  67. 10 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html
  68. 5 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html
  69. 1 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html
  70. 68 24
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  71. 2 3
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  72. 404 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberCancelFormWeb.html
  73. 505 0
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderDetailFormWeb.html
  74. 14 24
      src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderListFormWeb.html
  75. 0 1
      src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentFormWeb.html
  76. 0 3
      src/main/webapp/WEB-INF/views/web/order/OrderCompleteWeb.html
  77. 4 6
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  78. 4 29
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  79. 2 2
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html
  80. 4 5
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  81. 7 7
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  82. 0 1
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrAddPopWeb.html
  83. 0 3
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html
  84. 0 2
      src/main/webapp/WEB-INF/views/web/popup/DelvAddrModifyPopWeb.html
  85. 31 9
      src/main/webapp/biz/mypage.js
  86. BIN
      src/main/webapp/images/pc/logo_STYLE24.png
  87. 3 3
      src/main/webapp/ux/pc/css/common.css
  88. 45 15
      src/main/webapp/ux/pc/css/layout.css
  89. 0 1
      src/main/webapp/ux/plugins/gaga/gaga.paging.js
  90. 56 11
      src/main/webapp/ux/style24_link.js

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

@@ -190,6 +190,15 @@ public interface TsfDisplayDao {
 	 */
 	Collection<Contents> getBestItemCategoryList(Contents contents);
 
+	/**
+	 * 전체 브랜드 이미지 리스트
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 28
+	 */
+	Collection<BrandGroup> getBrandImgList(BrandGroup brandGroup);
+	
 	/**
 	 * 전체 브랜드
 	 * @param

+ 40 - 0
src/main/java/com/style24/front/biz/dao/TsfReviewDao.java

@@ -4,6 +4,7 @@ import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.ReviewAttach;
 
@@ -106,6 +107,15 @@ public interface TsfReviewDao {
 	 */
 	void saveMypageReview(Review review);
 	
+	/**
+	 * 마이페이지 리뷰 업데이트
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	void updateMypageReview(Review review);
+	
 	/**
 	 * 마이페이지 작성한 리뷰 건수
 	 * @param review
@@ -187,6 +197,36 @@ public interface TsfReviewDao {
 	 */
 	void saveReviewAttach(ReviewAttach reviewAttach);
 	
+	/**
+	 * 리뷰 포인트 지급 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	int getReviewPointGiveCount(Review review);
+	
+	
+	/**
+	 * 리뷰 포인트 생성
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	void createReviewPoint(Point point);
+	
+	/**
+	 * 리뷰 포인트 이력 생성
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	void createReviewPointHst(Point point);
+	
+
+
 	
 	
 	

+ 11 - 0
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -466,6 +466,17 @@ public class TsfDisplayService {
 		return goodsList;
 	}
 
+	/**
+	 * 전체 브랜드 이미지 리스트
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 28
+	 */
+	public Collection<BrandGroup> getBrandImgList(BrandGroup brandGroup) {
+		return displayDao.getBrandImgList(brandGroup);
+	}
+	
 	/**
 	 * 전체 브랜드
 	 * @param

+ 162 - 3
src/main/java/com/style24/front/biz/service/TsfReviewService.java

@@ -12,10 +12,14 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.gagaframework.web.util.GagaDateUtil;
 import com.gagaframework.web.util.GagaFileUtil;
+import com.style24.core.biz.dao.TscPointDao;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfReviewDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
+import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.ReviewAttach;
 
@@ -34,8 +38,15 @@ public class TsfReviewService {
 	@Autowired
 	private TsfReviewDao reviewDao;
 	
+	@Autowired
+	private TscPointDao pointDao;
+	
+	
 	@Autowired
 	private Environment env;
+	
+	@Autowired
+	private TscEnvsetService envsetService;
 
 	/**
 	 * 상품 리뷰 목록 건수
@@ -162,12 +173,19 @@ public class TsfReviewService {
 		review.setDispYn("Y");
 		review.setDelYn("N");
 		review.setRegNo(TsfSession.getInfo().getCustNo());
-		review.setUpdNo(TsfSession.getInfo().getCustNo());		
+		review.setUpdNo(TsfSession.getInfo().getCustNo());
+		if (review.getKufKeyArr() == null && review.getOrgFileNmArr() == null) {
+			review.setPntGiveStat("G043_30");
+		}else if(review.getKufKeyArr() == null && review.getOrgFileNmArr() != null) {
+			review.setPntGiveStat("G043_30");
+		}else {
+			review.setPntGiveStat("G043_10");
+		}
 		reviewDao.saveMypageReview(review);
 		
 		//이미지등록
-		ReviewAttach fileReview = new ReviewAttach();
-		if(!StringUtils.isAllEmpty(review.getOrgFileNmArr())) {
+		if(review.getOrgFileNmArr() != null) {
+			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
 			fileReview.setReviewSq(review.getReviewSq());
@@ -200,6 +218,125 @@ public class TsfReviewService {
 				ind++;
 			}
 		}
+		
+		if(review.getKufKeyArr() != null) {
+			ReviewAttach fileReview = new ReviewAttach();
+			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
+			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
+			fileReview.setReviewSq(review.getReviewSq());
+			fileReview.setFileGb("M");
+			fileReview.setDelYn("N");
+			String[] fileItemVal1 = review.getKufKeyArr();
+			for (int j = 0; j < fileItemVal1.length; j++) {
+				fileReview.setKufKey(fileItemVal1[j]);
+				reviewDao.saveReviewAttach(fileReview);
+			}
+		}
+		
+		int count = reviewDao.getReviewPointGiveCount(review);
+		// 포인트 지급해 준 적 없을때 만 지급
+		if (count ==  0) {
+			int textReviewPnt = envsetService.getTextReviewPoint(TscConstants.Site.STYLE24.value());
+			int photoReviewPnt = envsetService.getPhotoReviewPoint(TscConstants.Site.STYLE24.value());
+			
+			Point point = new Point();
+			point.setCustNo(TsfSession.getInfo().getCustNo());
+			point.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
+			point.setOccurDtlDesc("상품평포인트 지급");
+			point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+			point.setOrdNo(review.getOrdNo());
+			point.setOrdDtlNo(review.getOrdDtlNo());
+			if (review.getKufKeyArr() == null && review.getOrgFileNmArr() == null) {
+				// 상품평만 적었을 경우
+				point.setGvPntAmt(textReviewPnt);
+				point.setRmPntAmt(textReviewPnt);
+				reviewDao.createReviewPoint(point);
+				point.setPntAmt(textReviewPnt);
+				point.setReviewSq(review.getReviewSq());
+				reviewDao.createReviewPointHst(point);
+			}else if(review.getKufKeyArr() == null && review.getOrgFileNmArr() != null) {
+				// 상품평 + 사진
+				point.setCustNo(TsfSession.getInfo().getCustNo());
+				point.setGvPntAmt(photoReviewPnt);
+				point.setRmPntAmt(photoReviewPnt);
+				reviewDao.createReviewPoint(point);
+				point.setPntAmt(photoReviewPnt);
+				point.setReviewSq(review.getReviewSq());
+				reviewDao.createReviewPointHst(point);
+			}
+			
+		}
+	}
+	
+	/**
+	 * 마이페이지 리뷰 업데이트
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public void updateMypageReview(Review review) {
+		review.setRegNo(TsfSession.getInfo().getCustNo());
+		review.setUpdNo(TsfSession.getInfo().getCustNo());		
+		reviewDao.updateMypageReview(review);
+		reviewDao.reviewAttachDelete(review);
+		
+		//이미지등록
+		if(!StringUtils.isAllEmpty(review.getOrgFileNmArr())) {
+			ReviewAttach fileReview = new ReviewAttach();
+			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
+			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
+			fileReview.setReviewSq(review.getReviewSq());
+			fileReview.setFileGb("I");
+			fileReview.setDelYn("N");
+			//파일아이템 등록
+			String[] fileItemVal1 = review.getOrgFileNmArr();
+			int ind = 1;
+			for (int j = 0; j < fileItemVal1.length; j++) {
+				String imgInd = String.valueOf(ind);
+				if (ind < 10) {
+					imgInd = "0" + imgInd;
+				}
+				if (!fileItemVal1[j].contains("REVIEW_")) {
+					String planUploadPath = env.getProperty("upload.default.target.path");
+					String yearMonth = GagaDateUtil.getToday().substring(0, 6);
+					planUploadPath = GagaFileUtil.getConcatenationPath(planUploadPath, "/review");
+					File newFile = new File(GagaFileUtil.getConcatenationPath(planUploadPath, fileItemVal1[j]));
+					planUploadPath = GagaFileUtil.getConcatenationPath(planUploadPath, yearMonth);
+					String newFilename = "REVIEW_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + org.springframework.util.StringUtils.getFilenameExtension(fileItemVal1[j]);
+					File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(planUploadPath, newFilename)));
+					// Rename a file
+					File path = new File(planUploadPath);
+					if (!path.exists()) {
+						path.mkdir();
+					}
+					newFile.renameTo(uniqueFile);
+					fileReview.setOrgFileNm("/review/" + yearMonth + "/" + newFilename);
+					fileReview.setSysFileNm("/review/" + yearMonth + "/" + newFilename);
+					reviewDao.saveReviewAttach(fileReview);
+				}else {
+					fileReview.setOrgFileNm(fileItemVal1[j]);
+					fileReview.setSysFileNm(fileItemVal1[j]);
+					reviewDao.saveReviewAttach(fileReview);
+				}
+				
+				ind++;
+			}
+		}
+		
+		if(!StringUtils.isAllEmpty(review.getKufKeyArr())) {
+			ReviewAttach fileReview = new ReviewAttach();
+			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
+			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
+			fileReview.setReviewSq(review.getReviewSq());
+			fileReview.setFileGb("M");
+			fileReview.setDelYn("N");
+			String[] fileItemVal1 = review.getKufKeyArr();
+			for (int j = 0; j < fileItemVal1.length; j++) {
+				fileReview.setKufKey(fileItemVal1[j]);
+				reviewDao.saveReviewAttach(fileReview);
+			}
+		}
 	}
 	
 	/**
@@ -296,6 +433,28 @@ public class TsfReviewService {
 		reviewDao.reviewCustomerConfirm(review);
 	}
 	
+	/**
+	 * 리뷰 포인트 지급 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	
+	public int getReviewPointGiveCount(Review review) {
+		return reviewDao.getReviewPointGiveCount(review);
+	}
+	
+	/**
+	 * 상품평 첨부파일 목록
+	 * @param review
+	 * @return 
+	 * @author eskim
+	 * @since 2021. 3. 15
+	 */
+	public Collection<ReviewAttach> getReviewAttachList(Review review){
+		return reviewDao.getReviewAttachList(review);
+	}
 	
 	
 }

+ 30 - 5
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -4,6 +4,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
 import com.style24.front.biz.thirdparty.Yes24Login;
+import com.style24.front.support.env.TsfConstants;
 import com.style24.persistence.domain.CustSnsInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -365,7 +366,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 */
 	@GetMapping("/nice/cellphone/form")
 	public ModelAndView niceCellphoneForm(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
-			, @RequestParam(value = "custParams", required = false) String custParams) {
+										, @RequestParam(value = "custParams", required = false) String custParams) {
 		ModelAndView mav = new ModelAndView();
 		GagaMap result = niceCertify.certifyCellPhone();
 
@@ -388,12 +389,14 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 09
 	 */
 	@GetMapping("/nice/ipin/form")
-	public ModelAndView getCertifyNiceIpin(@RequestParam(value = "redirectUrl", required = false) String redirectUrl) {
+	public ModelAndView getCertifyNiceIpin(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
+										 , @RequestParam(value = "custParams", required = false) String custParams) {
 		ModelAndView mav = new ModelAndView();
 		GagaMap result = niceCertify.certifyIpin();
 
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 			mav.addObject("redirectUrl", redirectUrl); // 모바일만 사용
+			mav.addObject("custParams", custParams); // 모바일만 사용
 		}
 
 		mav.addObject("sEncData", result.getString("sEncData"));
@@ -659,15 +662,29 @@ public class TsfCustomerController extends TsfBaseController {
 	/**
 	 * 휴면해제 인증화면
 	 *
+	 * @param sEncData  - 본인인증 후 받는 암호화데이터
+	 * @param authMethod - 인증방법(휴대폰, 아이핀)
+	 * @param custParams  - 아이핀 인증 후 필요한 값 받는 변수
 	 * @return ModelAndView - 가입완료 화면
 	 * @author jsshin
 	 * @since 2021. 03. 08
 	 */
 	@RequestMapping("/dormant/certify/form")
 	public ModelAndView getDormantCeirtyForm(@RequestParam(value = "sEncData", required = false) String sEncData
-			, @RequestParam(value = "authMethod", required = false) String authMethod) {
+										 	, @RequestParam(value = "authMethod", required = false) String authMethod
+											, @RequestParam(value = "custParams", required = false) String custParams) {
+
 		ModelAndView mav = new ModelAndView();
 
+		// http 에서는 Same-Site None 설정이 안되므로 아래와 같이 처리
+		if (StringUtils.isNotBlank(custParams)) {
+			TsfSession.setAttribute("custNo", custParams);
+		}
+
+		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
+			mav.addObject("custNo", TsfSession.getAttribute("custNo"));
+		}
+
 		mav.addObject("sEncData", sEncData);
 		mav.addObject("authMethod", authMethod);
 
@@ -690,9 +707,16 @@ public class TsfCustomerController extends TsfBaseController {
 		if (StringUtils.isBlank(custNo) || StringUtils.isBlank(customer.getEncData())) {
 			throw new IllegalStateException("로그인 다시 시도해주세요.");
 		}
-		GagaMap resultInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
 
-		customer.setCi(resultInfo.getString("sCi"));
+		GagaMap resultInfo;
+		if (TscConstants.AuthMethod.MOBILE.value().equals(customer.getAuthMethod())){
+			resultInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
+			customer.setCi(resultInfo.getString("sCi"));
+		} else {
+			resultInfo = niceCertify.getCertifyIpinResultInfo(customer);
+			customer.setCi(resultInfo.getString("sConnInfo"));
+		}
+
 		customer.setCustNo(Integer.parseInt(custNo));
 		session.removeAttribute("custNo"); // 고객번호 세션 삭제
 		return customerService.releaseDormantCustomer(customer);
@@ -728,6 +752,7 @@ public class TsfCustomerController extends TsfBaseController {
 
 		ModelAndView mav = new ModelAndView();
 
+		// http 에서는 Same-Site None 설정이 안되므로 아래와 같이 처리
 		if (StringUtils.isNotBlank(custParams)) {
 			TsfSession.setAttribute("custNo", custParams);
 		}

+ 3 - 2
src/main/java/com/style24/front/biz/web/TsfDeliveryController.java

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.util.StreamUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import com.gagaframework.web.parameter.GagaMap;
@@ -46,9 +47,9 @@ public class TsfDeliveryController extends TsfBaseController {
 	 * @author moon
 	 * @since 2021. 04. 13
 	 */
-	@PostMapping(value = "/sweettracker/response" )
+	@RequestMapping(value = "/sweettracker/response" , method=RequestMethod.POST, consumes="application/json")
 	@ResponseBody
-	public String sweetTrackerResponse(SweetTracker  sweetTracker) throws Exception {
+	public String sweetTrackerResponse(@RequestBody SweetTracker  sweetTracker) throws Exception {
 		
 		deliveryService.saveTemp("들어옴");
 		

+ 4 - 3
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -532,7 +532,9 @@ public class TsfDisplayController extends TsfBaseController {
 			cate4Srch.setCustNo(TsfSession.getInfo().getCustNo());
 		}
 		cate4Srch.setSiteCd(TscConstants.Site.STYLE24.value());
-		cate4Srch.setFormalGb("G009_10");
+		if(cate4Srch.getFormalGb() == null || cate4Srch.getFormalGb().equals("")){
+			cate4Srch.setFormalGb("G009_10");
+		}
 		cate4Srch.setFrontGb(TsfSession.getFrontGb());
 		cate4Srch.setCustGb(TsfSession.getCustGb());
 		if (cate4Srch.getBrandGroupNo() == null) {
@@ -587,7 +589,6 @@ public class TsfDisplayController extends TsfBaseController {
 		}
 
 		goodsSearch.setSiteCd(TscConstants.Site.STYLE24.value());
-		goodsSearch.setFormalGb("G009_10");
 		goodsSearch.setFrontGb(TsfSession.getFrontGb());
 		goodsSearch.setCustGb(TsfSession.getCustGb());
 
@@ -629,7 +630,7 @@ public class TsfDisplayController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView(super.getDeviceViewName("display/AllBrandForm"));
 
 		brandGroup.setSelfYn("Y");
-		mav.addObject("mainBrandList", displayService.getAllBrandList(brandGroup));
+		mav.addObject("mainBrandList", displayService.getBrandImgList(brandGroup));
 
 		return mav;
 	}

+ 36 - 4
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -5,7 +5,6 @@ import java.util.Collection;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -289,6 +288,7 @@ public class TsfMypageController extends TsfBaseController {
 
 		// 페이징 처리 설정
 		order.setCustNo(custNo);
+		log.info("order >>> {}", order);
 		TscPageRequest pageable = new TscPageRequest((order.getPageNo() > 0 ? order.getPageNo() - 1 : 0), order.getPageSize(), order.getPageUnit());
 		pageable.setTotalCount(orderService.getPagingOrdNoListCount(order));
 		order.setPageable(pageable);
@@ -1617,6 +1617,10 @@ public class TsfMypageController extends TsfBaseController {
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
 		
 		mav.addObject("reviewStat", review.getReviewStat());
+		if (review.getReviewStat().equals("u")) {
+			// 리뷰 이미지/동영상
+			mav.addObject("alreadyReviewAttach", reviewService.getReviewAttach(review));
+		}
 		review.setReviewExpireDay(eventService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value()));
 		mav.addObject("reviewInfo", reviewService.getReviewGoodsInfo(review));
 		
@@ -1638,15 +1642,37 @@ public class TsfMypageController extends TsfBaseController {
 
 		GagaMap result = new GagaMap();
 		review.setCustNo(TsfSession.getInfo().getCustNo());
-		if (reviewService.reviewDeleteConfirm(review).getCount() > 0) {
-			review.setReviewSq(reviewService.reviewDeleteConfirm(review).getReviewSq());
-		}
 
 		reviewService.saveMypageReview(review);
 		result.set("status", "200");
 
 		return result;
 	}
+	
+	/**
+	 * 마이페이지 리뷰 업데이트
+	 * @param review
+	 * @return
+	 * @author sowon
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/review/update")
+	@ResponseBody
+	public GagaMap mypageReviewUpdate(@RequestBody Review review) {
+
+		GagaMap result = new GagaMap();
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+		/*
+		 * if (reviewService.reviewDeleteConfirm(review).getCount() > 0) {
+		 * review.setReviewSq(reviewService.reviewDeleteConfirm(review).getReviewSq());
+		 * }
+		 */
+
+		reviewService.updateMypageReview(review);
+		result.set("status", "200");
+
+		return result;
+	}
 
 	/**
 	 * 마이페이지 리뷰 삭제처리
@@ -1787,6 +1813,8 @@ public class TsfMypageController extends TsfBaseController {
 		String referer = StringUtils.defaultIfBlank(TsfSession.getHttpServletRequest().getHeader("referer"), "");
 		boolean redirect = false;
 
+		log.info("referer ==>  {}", referer);
+
 		if (StringUtils.isBlank(referer)) {
 			redirect = true;
 		}
@@ -1799,6 +1827,10 @@ public class TsfMypageController extends TsfBaseController {
 			redirect = true;
 		}
 
+		if (referer.contains("/customer/nice/certify/callback")) {
+			redirect = false;
+		}
+
 		if (redirect) {
 			mav.setViewName("redirect:/mypage/customer/confirm/form");
 			return mav;

+ 829 - 55
src/main/java/com/style24/front/biz/web/TsfNoMemberController.java

@@ -5,10 +5,8 @@ import java.util.Collection;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,26 +14,28 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.service.TscCustomerService;
-import com.style24.core.biz.service.TscFreegiftService;
 import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.biz.service.TscOrderService;
+import com.style24.core.biz.service.TscWmsService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCartService;
-import com.style24.front.biz.service.TsfCustomerService;
+import com.style24.front.biz.service.TsfCommonService;
 import com.style24.front.biz.service.TsfGiftcardService;
 import com.style24.front.biz.service.TsfOrderChangeService;
 import com.style24.front.biz.service.TsfOrderService;
 import com.style24.front.biz.service.TsfRendererService;
-import com.style24.front.biz.thirdparty.NiceCertify;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -59,21 +59,9 @@ public class TsfNoMemberController extends TsfBaseController {
 	@Autowired
 	private TsfOrderService orderService;
 
-	@Autowired
-	private TscFreegiftService coreFreegiftService;
-
 	@Autowired
 	private TsfCartService cartService;
 
-	@Autowired
-	private Environment env;
-	
-	@Autowired
-	private NiceCertify niceCertify;
-
-	@Autowired
-	private TsfCustomerService customerService;
-
 	@Autowired
 	private TscCustomerService coreCustomerService;
 
@@ -92,8 +80,14 @@ public class TsfNoMemberController extends TsfBaseController {
 	@Autowired
 	private TsfGiftcardService giftcardService;
 
+	@Autowired
+	private TsfCommonService commonService;
+
+	@Autowired
+	private TscWmsService coreWmsService;
+
 	/**
-	 * 마이페이지 메인 화면
+	 * 비회원 주문 내역
 	 *
 	 * @param Order(ordNm, ordPhnno, ordNo)
 	 * @return ModelAndView
@@ -103,6 +97,11 @@ public class TsfNoMemberController extends TsfBaseController {
 	@PostMapping("/order/list/form")
 	public ModelAndView noMemberOrderListForm(Order order) {
 		ModelAndView mav = new ModelAndView();
+		
+		// 핸드폰번호 하이픈 처리
+		if (!order.getOrdPhnno().contains("-")) {
+			order.setOrdPhnno(order.getOrdPhnno().replaceAll("(\\d{3})(\\d{3,4})(\\d{4})", "$1-$2-$3"));
+		}
 
 		// 비회원 정보 설정
 		mav.addObject("ordNo", order.getOrdNo());
@@ -125,44 +124,30 @@ public class TsfNoMemberController extends TsfBaseController {
 	}
 
 	/**
-	 * 마이페이지 주문상세 화면
-	 *
-	 * @return
+	 * 비회원 주문상세 화면
+	 * 
+	 * @param Order
+	 * @return ModelAndView
 	 * @author card007
-	 * @since 2021. 02. 15
+	 * @since 2021. 04. 28
 	 */
-	@GetMapping({"/order/detail/form/{ordNo}"})
-	public ModelAndView mypageOrderDetailForm(@PathVariable(value = "ordNo") int ordNo) {
+	@PostMapping("/order/detail/form")
+	public ModelAndView noMemberOrderDetailForm(Order order) {
 		ModelAndView mav = new ModelAndView();
 
-		// 고객번호 설정
-		int custNo = TsfSession.getInfo().getCustNo();
-		mav.addObject("custNo", custNo);
-
-		// 고객정보 조회
-		Customer customer = new Customer();
-		customer.setSiteCd(TscConstants.Site.STYLE24.value());
-		customer.setCustNo(custNo);
-		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
-		customer = coreCustomerService.getCustomerInfo(customer);
-
-		mav.addObject("customerInfo", customer);
-
 		// 로그인여부 설정
-		mav.addObject("isLogin", TsfSession.isLogin());
+		mav.addObject("isLogin", false);
 
 		// 주문번호 설정
-		mav.addObject("ordNo", ordNo);
-
-		Order order = new Order();
-		order.setCustNo(custNo);
-		order.setOrdNo(ordNo);
+		mav.addObject("ordNo", order.getOrdNo());
+		mav.addObject("ordNm", order.getOrdNm());
+		mav.addObject("ordPhnno", order.getOrdPhnno());
 
 		// 주문목록 조회
 		Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
 
 		if (orderList.size() == 0) {
-			mav.setViewName("redirect:/mypage/order/list/form");
+			mav.setViewName("redirect:/noMember/order/list/form");
 			return mav;
 		}
 
@@ -185,18 +170,18 @@ public class TsfNoMemberController extends TsfBaseController {
 		// 상품권 현금영수증 신청 정보 조회
 		mav.addObject("cashReceiptsInfo", giftcardService.getCashReceiptsRequestInfo(order));
 
-		mav.setViewName(super.getDeviceViewName("mypage/MypageOrderDetailForm"));
+		mav.setViewName(super.getDeviceViewName("mypage/NoMemberOrderDetailForm"));
 
 		return mav;
 	}
 
 	/**
-	 * 마이페이지 주문목록 조회
-	 *
+	 * 비회원 주문목록 조회
+	 * 
 	 * @param Order
-	 * @return ModelAndView
+	 * @return GagaMap
 	 * @author card007
-	 * @since 2021. 02. 18
+	 * @since 2021. 04. 28
 	 */
 	@PostMapping("/order/list")
 	@ResponseBody
@@ -226,19 +211,18 @@ public class TsfNoMemberController extends TsfBaseController {
 	}
 
 	/**
-	 * 마이페이지 주문상세 주문내역 삭제
-	 *
-	 * @return
+	 * 비회원 주문상세 주문내역 삭제
+	 * 
+	 * @param Order
+	 * @return GagaMap
 	 * @author card007
-	 * @since 2021. 02. 15
+	 * @since 2021. 04. 28
 	 */
 	@PostMapping("/order/delete")
 	@ResponseBody
 	public GagaMap deleteOrder(@RequestBody Order order) {
 		GagaMap result = new GagaMap();
 
-		// 고객번호 설정
-
 		// 주문내역 삭제 처리
 		order.setUpdNo(0);
 		int chk = orderService.updateOrderDisplayYn(order);
@@ -253,4 +237,794 @@ public class TsfNoMemberController extends TsfBaseController {
 
 		return result;
 	}
+
+	/**
+	 * 비회원 주문정보 확인
+	 *
+	 * @param order - 주문번호, 주문자명, 휴대폰번호
+	 * @return GagaMap
+	 * @author jsshin
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/order/info/validation")
+	@ResponseBody
+	public GagaMap getOrderInfoValidation(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+		if (!order.getOrdPhnno().contains("-")) {
+			order.setOrdPhnno(order.getOrdPhnno().replaceAll("(\\d{3})(\\d{3,4})(\\d{4})", "$1-$2-$3"));
+		}
+		boolean isFind = orderService.getPagingOrdNoListCount(order) > 0;
+		result.setBoolean("isFind", isFind);
+		return result;
+	}
+
+	/**
+	 * 비회원 반품신청 환불금액 계산
+	 * 
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 28
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/cancel/refund/amt/calculate")
+	@ResponseBody
+	public GagaMap calculateRefundAmt(@RequestBody OrderChange orderChange) {
+		if (orderChange == null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// 2. 환불 사전 정보 조회
+		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(orderChange);
+		List<Order> cnclReqList = (List<Order>)refundPreInfo.get("cnclReqList");
+
+		return coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
+	}
+
+	/**
+	 * 비회원 배송지 정보 수정
+	 * 
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/change/delvery/addr")
+	@ResponseBody
+	public GagaMap changeDelveryAddr(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", message.getMessage("DELV_0001"));
+
+		try {
+			order.setCustNo(0);
+			commonService.updateDeliverAddr(order);
+			commonService.updateDeliverAddrDelvMemo(order);
+
+			// TODO
+			// WMS IF TABLE 내 정보 업데이트 처리 필요
+		} catch (Exception e) {
+			result.set("status", GagaResponseStatus.FAIL.getCode());
+			result.set("message", message.getMessage("FAIL_0002"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * 비회원 배송 메모 수정
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/change/delvery/memo")
+	@ResponseBody
+	public GagaMap changeDelveryAddrDelvMemo(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", message.getMessage("DELV_0002"));
+
+		order.setCustNo(0);
+
+		try {
+			commonService.updateDeliverAddrDelvMemo(order);
+		} catch (Exception e) {
+			result.set("status", GagaResponseStatus.FAIL.getCode());
+			result.set("message", message.getMessage("FAIL_0002"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * 비회원 회수지 정보 수정
+	 * 
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/change/chger/addr")
+	@ResponseBody
+	public GagaMap changeChgerAddr(@RequestBody OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", message.getMessage("DELV_0003"));
+
+		try {
+			orderChange.setUpdNo(0);
+			orderChangeService.updateChgerAddr(orderChange);
+
+			// TODO
+			// WMS IF TABLE 내 정보 업데이트 처리 필요
+		} catch (Exception e) {
+			result.set("status", GagaResponseStatus.FAIL.getCode());
+			result.set("message", message.getMessage("FAIL_0002"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * 비회원 반품메모 수정
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 13
+	 */
+	@PostMapping("/change/chger/rtn/memo")
+	@ResponseBody
+	public GagaMap changeChgerRtnMemo(@RequestBody OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", message.getMessage("DELV_0004"));
+
+		try {
+			orderChange.setUpdNo(0);
+			orderChangeService.updateChgerRtnMemo(orderChange);
+
+			// TODO
+			// WMS IF TABLE 내 정보 업데이트 처리 필요
+		} catch (Exception e) {
+			throw new IllegalStateException(message.getMessage("FAIL_0002"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * 비회원 취소신청 화면
+	 *
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/cancel/form")
+	@ResponseBody
+	public ModelAndView noMemberCancelForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		// 취소 가능 리스트 조회
+		GagaMap map = orderChangeService.getCancelListForMypage(order);
+		Order oneData = (Order)map.get("oneData");
+		mav.addObject("cancelList", map);
+		mav.addObject("oneData", oneData);
+
+		// 주문 결제정보 조회
+		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
+
+		mav.setViewName(super.getDeviceViewName("/mypage/NoMemberCancelForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 취소신청
+	 *
+	 * @param Collection<Order>
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 22
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/cancel")
+	@ResponseBody
+	public GagaMap cancel(@RequestBody OrderChange orderChange) {
+		if (orderChange == null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// 1. 취소완료 처리
+		orderChange.setCustNo(0);
+		GagaMap result = coreOrderChangeService.orderCancelPreInfo(orderChange, 0);
+
+		// TODO
+		// 취소 완료 알림톡 발송 에정
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", message.getMessage("CANCEL_0001"));
+
+		return result;
+	}
+
+	/**
+	 * 마이페이지 장바구니 관련 정보 조회
+	 *
+	 * @param Cart
+	 * @return Collecion<Cart>
+	 * @author card007
+	 * @since 2021. 03. 26
+	 */
+	@PostMapping("/cart/add/info")
+	@ResponseBody
+	public Collection<Cart> getAddCartInfo(@RequestBody Cart cart) {
+		return cartService.getAddCartInfoForMypage(cart);
+	}
+
+	// ==================================    아직 처리 안함    =====================================
+	/**
+	 * 마이페이지 교환신청 화면
+	 *
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 02. 22
+	 */
+	@PostMapping("/exchange/form")
+	@ResponseBody
+	public ModelAndView exchangeForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		// 주문번호 설정
+		mav.addObject("ordNo", order.getOrdNo());
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		order.setCustNo(custNo);
+		mav.addObject("custNo", custNo);
+
+		// 고객정보 조회
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCustNo(custNo);
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		customer = coreCustomerService.getCustomerInfo(customer);
+
+		mav.addObject("customerInfo", customer);
+
+		// 로그인여부 설정
+		mav.addObject("isLogin", TsfSession.isLogin());
+
+		// 교환 가능 리스트 조회
+		GagaMap map = orderChangeService.getReturnListForMypage(order);
+		Order oneData = (Order)map.get("oneData");
+		mav.addObject("exchangeList", map);
+		mav.addObject("oneData", oneData);
+
+		// 주문 배송지 정보 조회
+		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
+
+		// 교환 사유 목록 조회
+		mav.addObject("exchangeReason", rendererService.getCommonCodeList("G689", "Y"));
+
+		mav.setViewName(super.getDeviceViewName("/mypage/MypageExchangeForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 교환 옵션 변경 팝업
+	 *
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 03. 30
+	 */
+	@PostMapping("/change/option/popup/form")
+	@ResponseBody
+	public ModelAndView changeOptionPopupForm(OrderChange orderChange) {
+		ModelAndView mav = new ModelAndView();
+
+		// custNo 설정
+		if (TsfSession.isLogin()) {
+			orderChange.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			orderChange.setCustNo(0);
+		}
+
+		// 교환 옵션 정보 조회
+		Collection<OrderChange> exchangeOptionInfo = orderChangeService.getExchangeOptionInfo(orderChange);
+		mav.addObject("exchangeOptionInfo", exchangeOptionInfo);
+		mav.addObject("oneData", exchangeOptionInfo.iterator().next());
+		mav.addObject("ordDtlNo", orderChange.getOrdDtlNo());
+		mav.addObject("chgQty", orderChange.getChgQty());
+
+		mav.setViewName(super.getDeviceViewName("mypage/ChangeOptionPopupForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 교환신청
+	 *
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 06
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/exchange")
+	@ResponseBody
+	public GagaMap excReq(@RequestBody OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+
+		// 교환요청 데이터 확인
+		if (orderChange == null) {
+			result.set("status", GagaResponseStatus.FAIL.getCode());
+			result.set("message", message.getMessage("FAIL_1001"));
+			return result;
+		}
+
+		// 세션 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		orderChange.setUpdNo(custNo);
+		orderChange.setRegNo(custNo);
+
+		// 교환처리
+		result = coreOrderChangeService.exchReq(orderChange);
+
+		// 처리 결과 코드에 따른 메세지 설정
+		if (result.get("status").equals(GagaResponseStatus.SUCCESS.getCode())) {
+			if (orderChange.getAddPayCost() == 0) {
+				result.set("message", message.getMessage("EXCHANGE_0001"));
+			}
+		} else {
+			result.set("message", message.getMessage("FAIL_0004"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * 교환요청철회
+	 *
+	 * @param OrderChange
+	 * @return GagaResponse
+	 * @author card007
+	 * @since 2021. 04. 20
+	 */
+	@PostMapping("/exchange/cancel")
+	@ResponseBody
+	public GagaResponse exchangeRequestCancel(@RequestBody OrderChange orderChange) {
+
+		if (orderChange== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// 1. 교환요청철회 정보 설정
+		int custNo = TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0;
+		orderChange.setCustNo(custNo);
+		orderChange.setRegNo(custNo);
+		orderChange.setUpdNo(custNo);
+
+		String ipAddress = TsfSession.getIpAddress();
+		orderChange.setIpAddress(ipAddress);
+
+		// 2.교환요청철회 
+		coreOrderChangeService.exchangeCancel(orderChange);
+
+		return super.ok(message.getMessage("EXCHANGE_0002"));
+		// return super.ok();
+	}
+
+	/**
+	 * 마이페이지 상태별 수량 조회
+	 *
+	 * @return
+	 * @author card007
+	 * @since 2021. 02. 25
+	 */
+	@PostMapping("/status/count")
+	@ResponseBody
+	public GagaMap fnReloadStatusCount() {
+		GagaMap result = new GagaMap();
+
+		// 쿠폰정보 조회
+		Order order = new Order();
+		order.setCustNo(TsfSession.getInfo().getCustNo());
+		result.set("orderCount", coreOrderService.getOrderStatCount(order));
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+		return result;
+	}
+
+	/**
+	 * 마이페이지 반품신청 화면
+	 *
+	 * @param Order
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 02. 25
+	 */
+	@PostMapping("/return/form")
+	@ResponseBody
+	public ModelAndView returnForm(Order order) {
+		ModelAndView mav = new ModelAndView();
+
+		// 주문번호 설정
+		mav.addObject("ordNo", order.getOrdNo());
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		order.setCustNo(custNo);
+		mav.addObject("custNo", custNo);
+
+		// 고객정보 조회
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCustNo(custNo);
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		customer = coreCustomerService.getCustomerInfo(customer);
+
+		mav.addObject("customerInfo", customer);
+
+		// 로그인여부 설정
+		mav.addObject("isLogin", TsfSession.isLogin());
+
+		// 반품 가능 리스트 조회
+		GagaMap map = orderChangeService.getReturnListForMypage(order);
+		Order oneData = (Order)map.get("oneData");
+		mav.addObject("returnList", map);
+		mav.addObject("oneData", oneData);
+
+		// 주문 결제정보 조회
+		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
+
+		// 주문 배송지 정보 조회
+		mav.addObject("deliveryAddrInfo", orderService.getOrderDeliveryAddrInfo(order));
+
+		// 반품 사유 목록 조회
+		mav.addObject("returnReason", rendererService.getCommonCodeList("G688", "Y"));
+
+		mav.setViewName(super.getDeviceViewName("/mypage/MypageReturnForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 반품신청
+	 *
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 30
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/return")
+	@ResponseBody
+	public GagaMap rtnReq(@RequestBody OrderChange orderChange) {
+		if (orderChange == null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// TODO
+		// @ 주문취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+
+		// 1. 세션회원조회
+		int custNo = TsfSession.getInfo().getCustNo();
+		orderChange.setCustNo(custNo);
+
+		// 2. 환불 사전 정보 조회
+		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(orderChange);
+		List<Order> returnReqList = (List<Order>)refundPreInfo.get("cnclReqList");
+		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
+		String supplyCompCd = refundPreInfo.getString("supplyCompCd");
+
+		// 3. 환불금액계산
+		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(returnReqList);
+
+		// 4. 주문변경 기본정보 설정
+		result.set("ordNo", orderChange.getOrdNo());					// 주문번호
+		result.setInt("custNo", custNo);								// 고객번호
+		// result.set("ordChgSq", orderChange.getOrdChgSq());			// 주문변경번호
+		result.set("chgReason", orderChange.getChgReason());			// 변경사유
+		result.set("chgMemo", orderChange.getChgMemo());				// 변경메모
+
+		result.set("accountNo", orderChange.getAccountNo());			// 환불계좌번호
+		result.set("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
+		result.set("bankCd", orderChange.getBankCd());					// 환불계좌은행코드
+
+		result.setString("allLastCanYn", allLastCanYn);					// 전체 마지막 취소 여부
+		result.set("isCustomer", orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
+		result.set("wdGb", orderChange.getWdGb());						// 회수방법
+		result.set("wdInvoiceNo", orderChange.getWdInvoiceNo());		// 회수송장번호
+
+		// 5. 주문변경 회수지정보 추가
+		result.set("chgerNm", orderChange.getChgerNm());				// 변경자명
+		result.set("chgerEmail", orderChange.getChgerEmail());			// 변경자이메일주소
+		result.set("chgerZipcode", orderChange.getChgerZipcode());		// 회수지우편번호
+		result.set("chgerBaseAddr", orderChange.getChgerBaseAddr());	// 회수지기본주소
+		result.set("chgerDtlAddr", orderChange.getChgerDtlAddr());		// 회수지상세주소
+		result.set("chgerPhnno", orderChange.getChgerPhnno());			// 변경자핸드폰번호
+		result.set("chgerTelno", orderChange.getChgerTelno());			// 변경자전화번호
+		result.set("chgerRtnMemo", orderChange.getChgerRtnMemo());		// 반품메모
+
+		// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
+		coreOrderChangeService.returnRequest(result);
+		// coreOrderChangeService.rtnReq(result, custNo);
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		if (orderChange.getAddPayCost() == 0) {
+			result.set("message", message.getMessage("RETURN_0001"));
+		}
+
+		return result;
+	}
+
+	/**
+	 * 반품요청철회
+	 *
+	 * @param OrderChange
+	 * @return GagaResponse
+	 * @author card007
+	 * @since 2021. 04. 20
+	 */
+	@PostMapping("/return/cancel")
+	@ResponseBody
+	public GagaResponse rtnReqCancel(@RequestBody OrderChange orderChange) {
+
+		if (orderChange== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// 1. 반품요청철회 정보 설정
+		int custNo = TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0;
+		GagaMap map = new GagaMap();
+		map.set("ordNo"			, orderChange.getOrdNo());
+		map.set("ordChgSq"		, orderChange.getOrdChgSq());
+		map.set("custNo"		, custNo);
+		map.set("ipAddress"		, TsfSession.getIpAddress());
+
+		// 2.반품요청철회 
+		coreOrderChangeService.rtnReqCancel(map, custNo);
+
+		return super.ok(message.getMessage("RETURN_0002"));
+		// return super.ok();
+	}
+
+	/**
+	 * 환불계좌 등록 팝업
+	 *
+	 * @param OrderChange
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 04. 05
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/refund/account/register/popup/form")
+	public ModelAndView registerRefundAccountPopupForm(@RequestBody OrderChange orderChange) {
+		ModelAndView mav = new ModelAndView();
+
+		// 계좌인증용 은행코드 조회
+		mav.addObject("bankList", rendererService.getAvailCommonCodeList("G942"));
+
+		// 계좌주명 설정
+		mav.addObject("accountNm", orderChange.getAccountNm());
+
+		// 주문번호 설정
+		mav.addObject("ordNo", orderChange.getOrdNo());
+
+		mav.setViewName(super.getDeviceViewName("popup/RefundAccountAddPopupForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 취반교 목록 화면
+	 *
+	 * @return
+	 * @author card007
+	 * @since 2021. 02. 04
+	 */
+	@GetMapping({"/cre/list/form"})
+	public ModelAndView mypageCreListForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		mav.addObject("custNo", custNo);
+
+		// 주문 상태 별 수량 조회
+		Order order = new Order();
+		order.setCustNo(custNo);
+		mav.addObject("orderCount", coreOrderService.getOrderStatCount(order));
+
+		// 2021.04.21 모바일에서 사용하려고 추가
+		OrderChange orderChange = new OrderChange();
+		orderChange.setCustNo(custNo);
+		int totalCnt = orderChangeService.getPagingCreListCount(orderChange);
+		mav.addObject("totalCnt", totalCnt);
+
+		// 주문상세상태코드 설정
+		mav.addObject("chgStatList", rendererService.getCommonCodeList("G685", "Y", new String[] {"G685_10", "G685_11", "G685_19"}));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCreListForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 취반교 목록 조회
+	 *
+	 * @param OrderChange
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 02. 18
+	 */
+	@PostMapping("/cre/list")
+	@ResponseBody
+	public GagaMap getCreList(@RequestBody OrderChange orderChange) {
+		GagaMap map = new GagaMap();
+
+		// 고객번호 설정
+		int custNo = 0;
+		if(TsfSession.isLogin()) {
+			custNo = TsfSession.getInfo().getCustNo();
+		}
+
+		// 페이징 처리 설정
+		orderChange.setCustNo(custNo);
+		TscPageRequest pageable = new TscPageRequest((orderChange.getPageNo() > 0 ? orderChange.getPageNo() - 1 : 0), orderChange.getPageSize(), orderChange.getPageUnit());
+		pageable.setTotalCount(orderChangeService.getPagingCreListCount(orderChange));
+		orderChange.setPageable(pageable);
+
+		// 페이징 처리 및 주문정보 조회
+		List<Integer> ordChgSqList = new ArrayList<>();
+
+		for (OrderChange tmpOrderChange : orderChangeService.getPagingCreList(orderChange)) {
+			ordChgSqList.add(tmpOrderChange.getOrdChgSq());
+		}
+
+		if (ordChgSqList.size() > 0) {
+			orderChange.setOrdChgSqArr(ordChgSqList.stream().mapToInt(Integer::intValue).toArray());
+			map.set("creList", orderChangeService.getCreList(orderChange));
+		}
+
+		map.set("creInfo", orderChange);
+
+		return map;
+	}
+
+	/**
+	 * 마이페이지 취반교 취소 상세 화면
+	 *
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 04. 12
+	 */
+	@PostMapping({"/cre/cancel/detail/form"})
+	public ModelAndView mypageCreCancelDetailForm(OrderChange orderChange) {
+		ModelAndView mav = new ModelAndView();
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		mav.addObject("custNo", custNo);
+
+		// 취소상세 데이터 조회
+		orderChange.setCustNo(custNo);
+		GagaMap map = orderChangeService.getCreCancelDetailInfo(orderChange);
+		OrderChange oneData = (OrderChange) map.get("oneData");
+		mav.addObject("cancelDetailList", map);
+		mav.addObject("oneData", oneData);
+		mav.addObject("refundYn", map.getString("refundYn"));
+
+		// 주문 결제정보 조회
+		Order order = new Order();
+		order.setOrdNo(orderChange.getOrdNo());
+		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCreCancelDetailForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 취반교 반품 상세 화면
+	 *
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 04. 13
+	 */
+	@PostMapping({"/cre/return/detail/form"})
+	public ModelAndView mypageCreReturnDetailForm(OrderChange orderChange) {
+		ModelAndView mav = new ModelAndView();
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		mav.addObject("custNo", custNo);
+
+		// 로그인여부 설정
+		mav.addObject("isLogin", TsfSession.isLogin());
+
+		// 취소상세 데이터 조회
+		orderChange.setCustNo(custNo);
+		GagaMap map = orderChangeService.getCreReturnDetailInfo(orderChange);
+		OrderChange oneData = (OrderChange) map.get("oneData");
+		mav.addObject("returnDetailList", map);
+		mav.addObject("oneData", oneData);
+
+		// 주문 결제정보 조회
+		Order order = new Order();
+		order.setOrdNo(orderChange.getOrdNo());
+		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCreReturnDetailForm"));
+
+		return mav;
+	}
+
+	/**
+	 * 마이페이지 취반교 교환 상세 화면
+	 *
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 04. 13
+	 */
+	@PostMapping({"/cre/exchange/detail/form"})
+	public ModelAndView mypageCreExchangeDetailForm(OrderChange orderChange) {
+		ModelAndView mav = new ModelAndView();
+
+		// 고객번호 설정
+		int custNo = TsfSession.getInfo().getCustNo();
+		mav.addObject("custNo", custNo);
+
+		// 로그인여부 설정
+		mav.addObject("isLogin", TsfSession.isLogin());
+
+		// 취소상세 데이터 조회
+		orderChange.setCustNo(custNo);
+		GagaMap map = orderChangeService.getCreExchangeDetailInfo(orderChange);
+		OrderChange oneData = (OrderChange) map.get("oneData");
+		mav.addObject("exchangeDetailList", map);
+		mav.addObject("oneData", oneData);
+
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCreExchangeDetailForm"));
+
+		return mav;
+	}
+
+	/**
+	 * WMS 주문 취소 가능 여부 조회
+	 *
+	 * @param
+	 * @return
+	 * @author card007
+	 * @since 2021. 04. 22
+	 */
+	@PostMapping("/wms/cancel/available")
+	@ResponseBody
+	public GagaMap getWmsCancelYn(@RequestBody OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+		String cancelYn = "Y";
+
+		Integer ordNo = orderChange.getOrdNo();
+
+		for (Integer ordDtlNo : orderChange.getOrdDtlNoArr()) {
+			String rst = coreWmsService.getCancelYn(ordNo, ordDtlNo);
+
+			if ("Y".equals(cancelYn) && "N".equals(rst)) {
+				cancelYn = "N";
+			}
+		}
+
+		result.setString("cancelYn", cancelYn);
+
+		return result;
+	}
 }

+ 65 - 41
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -421,58 +421,82 @@ public class TsfPlanningController extends TsfBaseController {
 	 * @author sowon
 	 * @since 2021. 4. 2
 	 */
-	@PostMapping("/event/poll/form")
+	@GetMapping("/event/poll/form")
 	public ModelAndView planningEventPollSave(Plan plan) {
 		ModelAndView mav = new ModelAndView();
 		Poll poll = new Poll();
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setCustNo(TsfSession.getInfo().getCustNo());
 		plan.setFrontGb(TsfSession.getFrontGb());
-		poll.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) {                                                
+				mav.addObject("inaccessibleMsg", "이미 응모하셨습니다.");
+				mav.setViewName(super.getDeviceViewName("error/Inaccess"));
+				return mav;
+			}                                                             
+		}                                                                 
+		if (comYn.equals("Y")) {                                     
+			int count = planningService.getCustAnswerPartiCount(poll);   
+			if (count>=partiCnt) {                                        
+				mav.addObject("inaccessibleMsg", "선착순 응모가 마감되었습니다.");
+				mav.setViewName(super.getDeviceViewName("error/Inaccess"));
+				return mav;                                 
+			}                                                             
+		}                                                                 
+		
 		mav.addObject("pollInfo", planningService.getPollQuestionInfo(plan));
 		mav.addObject("pollList", planningService.getPollQuestionList(plan));
 		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;
-	}
+//	/**
+//	 * 이벤트 설문조사 접근확인
+//	 * @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;
+//	}
+	
+
 	
 	/**
 	 * 이벤트 설문조사 저장

+ 1 - 0
src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java

@@ -86,6 +86,7 @@ public class TsfRedisSessionConfig extends AbstractHttpSessionApplicationInitial
 		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
 		serializer.setCookiePath("/");
 		serializer.setUseBase64Encoding(false);
+//		serializer.setSameSite("NONE");
 		// TODO : SSL 적용 후 주석 풀고 테스트 해야함 2021-04-13
 		// SSL인증서 적용 시 주석 제거
 //		serializer.setUseSecureCookie(true);

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

@@ -29,4 +29,6 @@ public class BrandGroup extends TscBaseDomain {
 	private String brandInitial;
 	private String selfYn;
 	private String dispNmLang;
+	
+	private String cateGb;
 }

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

@@ -72,6 +72,7 @@ public class Goods extends TscBaseDomain {
 	private String newCustOrdYn;		//신규고객 구매가능여부(Y:신규고객만 구매가능)
 	private int costPrice;		//원가
 	private String adultYn;		//성인용품여부
+	private String tobeFormYn;	//상품상세신규폼사용여부
 	private String sellStdt;		//판매시작일
 	private String sellEddt;		//판매종료일
 	private String colorCd;		//색상코드

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

@@ -105,12 +105,23 @@ public class Review extends TscBaseDomain {
 	private int nextReviewSq;
 	private int reviewExpireDay;
 	private String kmcKey;
+	
+	private Integer custPntSq;		// 고객포인트일련번호
+	private int gvPntAmt;			// 지급포인트금액
+	private String occurGb;			// 포인트발생구분
+	private String occurDtlDesc;	// 포인트발생상세설명
+	private int pntAmt;				// 포인트금액
+	private String pntUploadStat;	// 포인트반영상태
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] orgFileNmArr;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] sysFileNmArr;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] kmcKeyArr;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] kufKeyArr;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] itemNmArr;		// 옵션코드
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] optCdArr;		// 옵션코드

+ 66 - 9
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -59,6 +59,9 @@
 		       END              AS BRAND_GROUP_NM
 		     , LOGO_FILE_NM
 		     , RGB_CD
+		     , DEFAULT_CATE_YN
+		     , CASE WHEN DEFAULT_CATE_YN = 'Y' THEN (SELECT CD FROM TB_COMMON_CODE WHERE 1=1 AND CD_NM = 'BY ITEM')
+		            ELSE (SELECT CD FROM TB_COMMON_CODE WHERE 1=1 AND CD_NM = 'BY BRAND') END AS CATE_GB
 		FROM   TB_BRAND_GROUP
 		WHERE  BRAND_GROUP_NO = #{brandGroupNo}
 		AND    USE_YN = 'Y'
@@ -630,8 +633,11 @@
 		AND CATE_GB = #{cateGb}
 		AND FORMAL_GB = #{formalGb}
 		AND BRAND_GROUP_NO = #{brandGroupNo}
+		<if test="cateNo != null and cateNo != ''">
 		AND CATE_NO = #{cateNo}
+		</if>
 		AND FILTER_GB = #{filterGb}
+		GROUP BY FILTER_CD, FILTER_NM
 		ORDER BY DISP_ORD
 	</select>
 
@@ -651,7 +657,9 @@
 		                  FROM	 TB_CATE_4SRCH
 		                  WHERE	 1=1
 		                    AND	 LEAF_CATE_NO = CG.CATE_NO
-		                    AND	 CATE1_NO = #{cate1No}
+		                  <if test="cate1No != null and cate1No != ''">
+		                    AND CATE1_NO = #{cate1No}
+		                  </if>
 		                  <if test="cate2No != null and cate2No != ''">
 		                    AND CATE2_NO = #{cate2No}
 		                  </if>
@@ -665,6 +673,9 @@
 		                    AND CATE5_NO = #{cate5No}
 		                  </if>
 		                )
+		<if test="brandGroupNo != null and brandGroupNo !=''">
+		  AND CG.BRAND_GROUP_NO = #{brandGroupNo}
+		</if>
 		GROUP BY GB.BENEFIT_GB
 	</select>
 
@@ -728,7 +739,9 @@
 		           WHERE  C4.SITE_CD = 'G000_10'
 		           AND    C4.CATE_GB = 'G032_101'
 		           AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		           <if test="cate1No != null and cate1No != ''">
 		           AND    C4.CATE1_NO = #{cate1No}
+		           </if>
 		           <if test="cate2No != null and cate2No != ''">
 		           AND    C4.CATE2_NO = #{cate2No}
 		           </if>
@@ -743,7 +756,7 @@
 		           </if>
 		           <choose>
 		               <when test="brandGroupNo != null and brandGroupNo != ''">
-		           AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		           AND    B.BRAND_GROUP_NO = #{brandGroupNo}
 		               </when>
 		               <otherwise>
 		           AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
@@ -901,11 +914,14 @@
 		                    WHERE  C4.SITE_CD = 'G000_10'
 		                    AND    C4.CATE_GB = 'G032_101'
 		                    AND    C4.CATE_TYPE = 'G031_10' /*상품카테고리*/
+		                <if test="cate1No != null and cate1No != ''">
 		                    AND    C4.CATE1_NO = #{cate1No}
+		                </if>
 		                <if test="cate2No != null and cate2No != ''">
 		                    AND    C4.CATE2_NO = #{cate2No}
 		                </if>
-		                <if test="cate3No != null and cate3No != ''">AND    C4.CATE3_NO = #{cate3No}
+		                <if test="cate3No != null and cate3No != ''">
+		                    AND    C4.CATE3_NO = #{cate3No}
 		                </if>
 		                <if test="cate4No != null and cate4No != ''">
 		                    AND    C4.CATE4_NO = #{cate4No}
@@ -915,7 +931,7 @@
 		                </if>
 		                <choose>
 		                    <when test="brandGroupNo != null and brandGroupNo != ''">
-		                    AND    CG.BRAND_GROUP_NO = #{brandGroupNo}
+		                    AND    B.BRAND_GROUP_NO = #{brandGroupNo}
 		                    </when>
 		                    <otherwise>
 		                    AND    CG.BRAND_GROUP_NO = 0 /*브랜드메인에서 접근한 것이 아니면*/
@@ -1130,7 +1146,9 @@
 		                 AND SITE_CD = #{siteCd}
 		                 AND CATE_GB = 'G032_101' /*BY ITEM*/
 		                 AND CATE_TYPE = 'G031_10'
+		                 <if test="cate1No != null and cate1No != ''">
 		                 AND CATE1_NO = #{cate1No}
+		                 </if>
 		                 <if test="cate2No != null and cate2No != ''">
 		                 AND CATE2_NO = #{cate2No}
 		                 </if>
@@ -1389,6 +1407,46 @@
 		AND	CONTENTS_LOC = #{contentsLoc}
 	</select>
 
+	<!-- 브랜드 전체 이미지 리스트 조회 -->
+	<select id="getBrandImgList" parameterType="BrandGroup" resultType="BrandGroup">
+		/* TsfDisplay.getBrandImgList */
+		SELECT	Z.BRAND_GROUP_NO
+		, FN_GET_BRAND_INITIAL(Z.BRAND_GROUP_NM) AS BRAND_INITIAL
+		, Z.BRAND_GROUP_NM
+		, Z.DISP_NM_LANG
+		, Z.BRAND_GROUP_ENM
+		, Z.BRAND_GROUP_KNM
+		, Z.LOGO_FILE_NM
+		FROM (
+		SELECT  BG.BRAND_GROUP_NO
+		, (CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM ELSE BG.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
+		, BG.DISP_NM_LANG
+		, BG.BRAND_GROUP_ENM
+		, BG.BRAND_GROUP_KNM
+		, BG.LOGO_FILE_NM
+		FROM  TB_CONTENTS C
+		LEFT JOIN TB_BRAND B ON C.STR_VAR1 = B.BRAND_GROUP_NO
+		INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		WHERE	1=1
+		AND	B.USE_YN = 'Y'
+		AND	BG.USE_YN = 'Y'
+		<if test='selfYn != null and selfYn == "Y"'>
+			AND	B.SELF_YN = 'Y'
+			AND	(BG.LOGO_FILE_NM <![CDATA[<>]]> '' AND BG.LOGO_FILE_NM IS NOT NULL)
+		</if>
+		<if test="brandGroupNo != null and brandGroupNo != ''">
+			AND	B.BRAND_GROUP_NO = #{brandGroupNo}
+		</if>
+		<if test="brandGroupNm != null and brandGroupNm != ''">
+			AND	(BG.BRAND_GROUP_ENM LIKE CONCAT('%',#{brandGroupNm},'%') OR BG.BRAND_GROUP_KNM LIKE CONCAT('%',#{brandGroupNm},'%'))
+		</if>
+		GROUP BY C.STR_TITLE2, C.DISP_ORD , BG.BRAND_GROUP_NO
+		) Z
+		WHERE	1=1
+		ORDER BY (CASE  WHEN ASCII(SUBSTRING(Z.BRAND_GROUP_NM,1)) BETWEEN 48 AND 57 THEN 3
+		WHEN ASCII(SUBSTRING(Z.BRAND_GROUP_NM,1)) <![CDATA[<]]> 128 THEN 2 ELSE 1 END), Z.BRAND_GROUP_NM
+	</select>
+
 	<!-- 브랜드 전체 조회 -->
 	<select id="getAllBrandList" parameterType="BrandGroup" resultType="BrandGroup">
 		/* TsfDisplay.getAllBrandList */
@@ -1403,11 +1461,10 @@
 		      SELECT  BG.BRAND_GROUP_NO
 		            , (CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM ELSE BG.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
 		            , BG.DISP_NM_LANG
-		            , BG.BRAND_GROUP_ENM
-		            , BG.BRAND_GROUP_KNM
+		            , B.BRAND_ENM AS BRAND_GROUP_ENM
+		            , B.BRAND_KNM AS BRAND_GROUP_KNM
 		            , BG.LOGO_FILE_NM
-		      FROM  TB_CONTENTS C
-		      LEFT JOIN TB_BRAND B ON C.STR_VAR1 = B.BRAND_GROUP_NO
+		      FROM  TB_BRAND B
 		      INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
 		      WHERE	1=1
 		      AND	B.USE_YN = 'Y'
@@ -1422,7 +1479,7 @@
 		      <if test="brandGroupNm != null and brandGroupNm != ''">
 		      AND	(BG.BRAND_GROUP_ENM LIKE CONCAT('%',#{brandGroupNm},'%') OR BG.BRAND_GROUP_KNM LIKE CONCAT('%',#{brandGroupNm},'%'))
 		      </if>
-		      GROUP BY C.STR_TITLE2, C.DISP_ORD , BG.BRAND_GROUP_NO
+		      GROUP BY BG.BRAND_GROUP_NO
 		) Z
 		WHERE	1=1
 		ORDER BY (CASE  WHEN ASCII(SUBSTRING(Z.BRAND_GROUP_NM,1)) BETWEEN 48 AND 57 THEN 3

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

@@ -127,6 +127,7 @@
 		     , G.CHANGEABLE_YN
 		     , G.RETURNABLE_YN
 		     , G.ORIGIN_CD
+		     , G.TOBE_FORM_YN
 		     , FN_GET_CODE_NM('G076',G.ORIGIN_CD) AS ORIGIN_NM
 		     , FN_GET_CODE_NM('G008',G.GOODS_STAT) AS GOODS_STAT_NM
 		     , DATE_FORMAT(G.REG_DT ,'%Y%m%d%H%i%S') AS REG_DT

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

@@ -177,7 +177,7 @@
 				<otherwise>
 		   AND O.ORD_NO = #{ordNo}
 		   AND O.ORD_PHNNO = #{ordPhnno}
-		   AND O.ORD_NM = #{orderNm}
+		   AND O.ORD_NM = #{ordNm}
 				</otherwise>
 			</choose>
 			<if test="ordNo != null and ordNo != ''">

+ 16 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -24,6 +24,8 @@
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , Z.ORD_NO
 		     , Z.ORD_DT
+		     , Z.ORD_NM
+		     , Z.ORD_PHNNO
 		     , Z.GIFT_ADDR_INP_YN
 		     , Z.ORD_DTL_NO
 		     , Z.ORD_EXCH_GB
@@ -59,6 +61,8 @@
 		     , Z.ACCOUNT_NM
 		  FROM (SELECT O.ORD_NO
 		             , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d')                                AS ORD_DT
+		             , O.ORD_NM
+		             , O.ORD_PHNNO
 		             , OD.ORD_DTL_NO
 		             , OD.ORD_EXCH_GB
 		             , OD.GOODS_CD
@@ -128,12 +132,13 @@
 		         WHERE O.ORD_NO = #{ordNo}
 		           AND OD.ORD_DTL_STAT IN ('G013_10', 'G013_11', 'G013_20', 'G013_30', 'G013_35', 'G013_40')
 		<choose>
-			<when test='custNo != null and custNo != ""'>
+			<when test='custNo > 0'>
 		           AND O.CUST_NO = #{custNo}
 			</when>
 			<otherwise>
 		           AND O.ORD_NO = #{ordNo}
-		           AND O.ORD_NM = #{orderNm}
+		           AND O.ORD_NM = #{ordNm}
+		           AND O.ORD_PHNNO = #{ordPhnno}
 			</otherwise>
 		</choose>
 		<if test="delvFeeCd != null and delvFeeCd != ''">
@@ -142,7 +147,7 @@
 		           AND O.DISP_YN = 'Y'
 		           AND OD.ORD_QTY - OD.CNCL_RTN_QTY > 0
 		       ) Z
-		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.GIFT_ADDR_INP_YN, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.ORD_NM, Z.ORD_PHNNO, Z.GIFT_ADDR_INP_YN, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
 		        , Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
 		        , Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.SHIP_COMP_CD, Z.GIFT_PACK_YN, Z.SHIP_COMP_NM, Z.INVOICE_NO
 		        , Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM
@@ -159,6 +164,8 @@
 		     , GROUP_CONCAT(Z.OPT_CD2 ORDER BY Z.ORD_DTL_ITEM_SQ) AS OPT_CD2
 		     , Z.ORD_NO
 		     , Z.ORD_DT
+		     , Z.ORD_NM
+		     , Z.ORD_PHNNO
 		     , Z.GIFT_ADDR_INP_YN
 		     , Z.ORD_DTL_NO
 		     , Z.ORD_EXCH_GB
@@ -197,6 +204,8 @@
 		     , Z.EXC_DELV_FEE
 		  FROM (SELECT O.ORD_NO
 		             , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d')                                      AS ORD_DT
+		             , O.ORD_NM
+		             , O.ORD_PHNNO
 		             , OD.ORD_DTL_NO
 		             , OD.ORD_EXCH_GB
 		             , OD.GOODS_CD
@@ -273,12 +282,13 @@
 		         WHERE O.DISP_YN = 'Y'
 		           AND OD.ORD_DTL_STAT IN ('G013_50', 'G013_55', 'G013_60')
 		<choose>
-			<when test='custNo != null and custNo != ""'>
+			<when test='custNo > 0'>
 		           AND O.CUST_NO = #{custNo}
 			</when>
 			<otherwise>
 		           AND O.ORD_NO = #{ordNo}
-		           AND O.ORD_NM = #{orderNm}
+		           AND O.ORD_NM = #{ordNm}
+		           AND O.ORD_PHNNO = #{ordPhnno}
 			</otherwise>
 		</choose>
 		<if test="ordNo != null and ordNo != ''">
@@ -288,7 +298,7 @@
 		           AND OD.DELV_FEE_CD = #{delvFeeCd}
 		</if>
 		       ) Z
-		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.GIFT_ADDR_INP_YN, Z.ORD_DTL_NO, Z.ORD_EXCH_GB, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM
+		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.ORD_NM, Z.ORD_PHNNO, Z.GIFT_ADDR_INP_YN, Z.ORD_DTL_NO, Z.ORD_EXCH_GB, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM
 		        , Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT
 		        , Z.GFCD_USE_AMT, Z.SHIP_COMP_CD, Z.GIFT_PACK_YN, Z.SHIP_COMP_NM, Z.INVOICE_NO, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD
 		        , Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY, Z.BANK_CD

+ 7 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1179,10 +1179,14 @@
 	<!-- 설문자 선착순 카운트 -->
 	<select id="getCustAnswerPartiCount" parameterType="Poll" resultType="int">
 		/* TsfPlanning.getCustAnswerPartiCount */
-		SELECT DISTINCT count(*) AS COUNT
+		SELECT DISTINCT (COUNT(*)) AS COUNT
 		FROM TB_POLL_ANSWER A INNER JOIN TB_POLL_QUESTION B ON A.POLL_QSQ = B.POLL_QSQ 
-		WHERE B.POLL_SQ = #{pollSq}
-		GROUP BY b.POLL_QSQ, B.POLL_SQ			
+		WHERE B.POLL_SQ =  #{pollSq}
+		GROUP BY b.POLL_QSQ, B.POLL_SQ
+		UNION 
+		SELECT 0 AS COUNT
+		FROM DUAL
+		ORDER BY COUNT DESC LIMIT 1		
 	</select>
 	
 	<!-- 총알배송 배송지 목록  -->

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

@@ -40,8 +40,8 @@
 		SELECT IFNULL(SUM(RM_PNT_AMT),0) AS EXPECTED_EXPIRE_PNT_AMT
 		FROM   TB_CUST_POINT
 		WHERE  CUST_NO = #{custNo}
-		AND    EXP_CMP_DT > NOW()
-		AND    EXP_BE_DT <![CDATA[<]]> DATE_ADD(NOW(),INTERVAL 31 DAY)
+		AND    EXP_BE_DT > NOW()
+		AND    EXP_BE_DT <![CDATA[<]]> DATE_ADD(NOW(),INTERVAL 30 DAY)
 	</select>
 	
 	<!-- 적립내역 조회-->
@@ -49,7 +49,7 @@
 	/* TsfPoint.getAccumulatePointList */
 		SELECT CASE TCHP.OCCUR_GB
 		            WHEN 'G069_12' THEN '상품 구매'
-		            WHEN 'G069_20' THEN '리뷰'
+		            WHEN 'G069_20' THEN '상품평'
 		            WHEN 'G069_30' THEN '이벤트'
 		            WHEN 'G069_31' THEN '회원가입'
 		            WHEN 'G069_32' THEN '생일축하'
@@ -89,9 +89,9 @@
 		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
+		<!-- 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
+		    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
@@ -144,7 +144,7 @@
 		CASE   TCHP.OCCUR_GB
 		WHEN   'G069_12' THEN '상품 구매'
 		WHEN   'G069_13' THEN '구매 취소'
-		WHEN   'G069_20' THEN '리뷰'	
+		WHEN   'G069_20' THEN '상품평'	
 		WHEN   'G069_30' THEN '이벤트'
 		WHEN   'G069_31' THEN '회원가입'
 		WHEN   'G069_32' THEN '생일축하'
@@ -193,10 +193,10 @@
 		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
+		<!-- 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		
+		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}

+ 189 - 90
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -444,9 +444,6 @@
 				    ON OD.GOODS_CD = G.GOODS_CD
 				 INNER JOIN TB_BRAND B
 				    ON B.BRAND_CD = G.BRAND_CD
-				 LEFT OUTER JOIN TB_REVIEW R
-				    ON R.ORD_NO = OD.ORD_NO
-				   AND R.ORD_DTL_NO = OD.ORD_DTL_NO
 				 LEFT JOIN TB_ITEMKIND I 
 				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
 				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
@@ -462,7 +459,7 @@
 		                                   AND C.USE_YN = 'Y'
 				  WHERE 1=1
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
-				AND R.REVIEW_SQ IS NULL
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = #{siteCd}
@@ -596,7 +593,7 @@
 		   	         , I.ITEMKIND_CD 
 			         , I.SIZE_GB 
 			         ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL #{reviewExpireDay} DAY),NOW()) AS REMAIN_DT -- 남은시간
-			          <!-- <if test="reviewStat == 'u'.toString()"> -->
+			          <if test="reviewStat == 'u'.toString()">
 			         , R.REVIEW_SQ        
 			         , R.REVIEW_GB        
 				     , R.REVIEW_TITLE     
@@ -627,7 +624,7 @@
 				     , R.ADM_RPL          
 				     , R.ADM_RPL_REG_NO   
 				     , R.ADM_RPL_DT   
-				    <!--  </if> -->
+				     </if>
 				  FROM TB_ORDER O
 				 INNER JOIN TB_ORDER_DETAIL OD
 				    ON O.ORD_NO = OD.ORD_NO
@@ -642,11 +639,12 @@
 				    ON B.BRAND_CD = G.BRAND_CD
 				 LEFT JOIN TB_ITEMKIND I 
 				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
-				 <!-- <if test="reviewStat == 'u'.toString()"> -->
-				 LEFT JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
+				 <if test="reviewStat == 'u'.toString()">
+				 INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
 			                                      AND R.ORD_NO = O.ORD_NO
 			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
-			      <!-- </if>  -->                         
+			                                      AND R.DEL_YN = 'N'
+			      </if>
 				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 									 FROM TB_ORDER_CHANGE_DETAIL OCD
@@ -660,14 +658,14 @@
 		                                   AND C.USE_YN = 'Y'
 				  WHERE 1=1
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -#{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
-				<choose>
+			<!-- 	<choose>
 					<when test="reviewStat == 'u'.toString()">
-					AND R.REVIEW_SQ IS NOT NULL
+					AND O.ORD_NO IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 					</when>
 					<otherwise>
-					AND R.REVIEW_SQ IS NULL
+					AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 					</otherwise>
-				</choose> 
+				</choose> -->
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = 'G000_10'
@@ -701,67 +699,65 @@
 		SELECT  COUNT(*) AS CNT 
 		FROM
 		(
-		     SELECT O.ORD_NO 
-		           ,O.ORD_NM 
-		           ,O.PAY_DT 
-		           ,O.CUST_NO 
-		           ,OD.ORD_DTL_NO
-		           ,OD.ORD_EXCH_GB 
-		           ,OD.GOODS_CD 
-		           ,OD.REAL_ORD_AMT 
-		           ,OD.SAVE_PNT_AMT 
-		           ,OD.GFCD_USE_AMT 
-		           ,ODI.ORD_DTL_ITEM_SQ 
-		           ,ODI.ITEM_CD 
-		           ,ODI.OPT_CD 
-		           ,ODI.OPT_CD1
-		           ,ODI.OPT_CD2
-		           ,ODI.ITEM_QTY 
-		           ,ODI.ITEM_PRICE
-		           ,G.GOODS_NM 
-		           ,G.MAIN_COLOR_CD
-		           ,B.BRAND_ENM 
-		           ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL #{reviewExpireDay} DAY),NOW()) AS DT -- 남은시간
-		     FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
-		                                          AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') --  구매 확정인것만
-		                     INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
-		                       					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-		                       	                 AND ODI.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60')
-		                     INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
-		                     INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
-		                     LEFT OUTER JOIN TB_REVIEW R  ON R.ORD_NO = OD.ORD_NO
-		                                          AND R.ORD_DTL_NO = OD.ORD_DTL_NO
-		     WHERE 1=1
-		     	AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  -#{reviewExpireDay} DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
-		     	AND O.CUST_NO = #{custNo}
-		     	AND O.DISP_YN = 'Y'
-		     	AND R.REVIEW_SQ IS NULL
-		     	AND O.SITE_CD = #{siteCd}
-		     GROUP BY O.ORD_NO 
-		           ,O.ORD_NM 
-		           ,O.PAY_DT 
-		           ,O.CUST_NO 
-		           ,OD.ORD_DTL_NO
-		           ,OD.ORD_EXCH_GB 
-		           ,OD.GOODS_CD 
-		           ,OD.REAL_ORD_AMT 
-		           ,OD.SAVE_PNT_AMT 
-		           ,OD.GFCD_USE_AMT 
-		           ,ODI.ORD_DTL_ITEM_SQ 
-		           ,ODI.ITEM_CD 
-		           ,ODI.OPT_CD 
-		           ,ODI.OPT_CD1
-		           ,ODI.OPT_CD2
-		           ,ODI.ITEM_QTY 
-		           ,ODI.ITEM_PRICE
-		           ,G.GOODS_NM 
-		           ,G.MAIN_COLOR_CD
-		           ,B.BRAND_ENM 
+			SELECT O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL #{reviewExpireDay} DAY),NOW()) AS DT -- 남은시간
+			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
+								 				 AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') --  구매 확정인것만
+			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			                  	                 AND ODI.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60')
+			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
+			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
+			WHERE 1=1
+				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  -#{reviewExpireDay} DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+				AND O.CUST_NO = #{custNo}
+				AND O.DISP_YN = 'Y'
+				AND O.SITE_CD = #{siteCd}
+			GROUP BY O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
 		)F
 		ORDER BY F.PAY_DT DESC
 	</select>
 	
-	<select id="saveMypageReview" parameterType="Review" resultType="Review">
+	<insert id="saveMypageReview" parameterType="Review" useGeneratedKeys="true" keyProperty="reviewSq">
 		/* TsfReivew.saveMypageReview */
 		INSERT INTO TB_REVIEW (
 		                         REVIEW_SQ
@@ -780,6 +776,7 @@
 		                       , SCORE_THICK
 		                       , SCORE_WEIGHT
 		                       , SCORE_BALL
+		                       , PNT_GIVE_STAT
 		                       , DISP_YN
 		                       , DEL_YN
 		                       , REG_NO
@@ -804,6 +801,7 @@
 		                        , #{scoreThick}
 		                        , #{scoreWeight}
 		                        , #{scoreBall}
+		                        , #{pntGiveStat}
 		                        , #{dispYn}
 		                        , #{delYn}
 		                        , #{regNo}
@@ -811,21 +809,32 @@
 		                        , #{updNo}
 		                        , now()
 		                      )
-		                      ON DUPLICATE KEY UPDATE
-		                         DEL_YN = 'N'
-		                                     ,REVIEW_CONTENT =  #{reviewContent} 
-		                                     ,SCORE          =  #{score}           
-		                                     ,HEIGHT         =  #{height}          
-		                                     ,WEIGHT         =  #{weight}          
-		                                     ,SCORE_SIZE     =  #{scoreSize}       
-		                                     ,SCORE_COLOR    =  #{scoreColor}      
-		                                     ,SCORE_FIT      =  #{scoreFit}        
-		                                     ,SCORE_THICK    =  #{scoreThick}      
-		                                     ,SCORE_WEIGHT   =  #{scoreWeight}     
-		                                     ,SCORE_BALL     =  #{scoreBall}       
-		                                     ,UPD_DT         =  now()     
-		                                                 
-	</select>
+	</insert>
+	
+	<update id="updateMypageReview" parameterType="Review">
+		/* TsfReivew.updateMypageReview */
+		UPDATE TB_REVIEW
+		SET REVIEW_CONTENT =  #{reviewContent} 
+		   ,SCORE          =  #{score}           
+		   ,HEIGHT         =  #{height}          
+		   ,WEIGHT         =  #{weight}          
+		   ,SCORE_SIZE     =  #{scoreSize}       
+		   ,SCORE_COLOR    =  #{scoreColor}      
+		   ,SCORE_FIT      =  #{scoreFit}        
+		   ,SCORE_THICK    =  #{scoreThick}      
+		   ,SCORE_WEIGHT   =  #{scoreWeight}     
+		   ,SCORE_BALL     =  #{scoreBall}  
+		   , DEL_YN        = 'N'     
+		   ,UPD_DT         =  now()     
+		WHERE REVIEW_SQ  = #{reviewSq}
+		AND   ORD_NO     = #{ordNo}
+		AND   ORD_DTL_NO = #{ordDtlNo}
+		AND   CUST_NO    = #{custNo}
+		AND   GOODS_CD   = #{goodsCd}
+	</update>
+	
+	
+	
 	
 	<select id="getAlreadyReviewCount" parameterType="Review" resultType="int">
 		/* TsfReivew.getAlreadyReviewCount */
@@ -852,7 +861,7 @@
 			      ,G.GOODS_NM 
 			      ,G.MAIN_COLOR_CD
 			      ,B.BRAND_ENM 
-			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 60 DAY),NOW()) AS DT -- 남은시간
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS DT -- 남은시간
 			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
 								 				 AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') --  구매 확정인것만
 			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
@@ -863,11 +872,12 @@
 			                INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
 			                                      AND R.ORD_NO = O.ORD_NO
 			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
+			           		                      AND R.DEL_YN = 'N'
 			WHERE 1=1
+				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S')
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
-				AND R.DEL_YN = 'N'
-				AND R.DISP_YN = 'Y'
+ 				AND O.SITE_CD = #{siteCd}
 			GROUP BY O.ORD_NO 
 			      ,O.ORD_NM 
 			      ,O.PAY_DT 
@@ -1179,7 +1189,6 @@
 		SET R.DEL_YN = 'Y'
 		WHERE 1=1
  		AND R.REVIEW_SQ = #{reviewSq}
- 		-- AND R.ADM_RPL IS NULL
  		AND R.CUST_NO = #{custNo}
 	</update>
 	
@@ -1197,7 +1206,7 @@
 		FROM TB_REVIEW R
 		WHERE 1=1
 		  AND R.ORD_NO = #{ordNo}
-		  AND R.ORD_DTL_NO =#{ordDtlNo}
+		  AND R.ORD_DTL_NO = #{ordDtlNo}
 		  AND R.DEL_YN ='Y'
 		  AND R.GOODS_CD = #{goodsCd}
 		  AND R.CUST_NO = #{custNo}
@@ -1241,4 +1250,94 @@
 		, CURRENT_TIMESTAMP
 		)
 	</insert>
+	
+	<!-- 포인트 지급 전 확인 -->
+	<select id="getReviewPointGiveCount" parameterType="Review" resultType="int">
+		/* TsfReivew.getReviewPointGiveCount */	
+		SELECT COUNT(*) AS COUNT
+		FROM TB_REVIEW 
+		WHERE CUST_NO = #{custNo}
+		AND DEL_YN = 'Y'
+		AND PNT_GIVE_STAT = 'G043_30'
+		AND ORD_NO        = #{ordNo}
+		AND ORD_DTL_NO    = #{ordDtlNo}
+		AND GOODS_CD      = #{goodsCd}
+	</select>
+	
+	<insert id="createReviewPoint" parameterType="Point" useGeneratedKeys="true" keyProperty="custPntSq">
+		/* TsfReivew.createReviewPoint */
+		INSERT INTO TB_CUST_POINT (
+		       CUST_PNT_SQ
+		     , CUST_NO
+		     , GV_PNT_AMT
+		     , US_PNT_AMT
+		     , RM_PNT_AMT
+		     , EXP_BE_DT
+		     , EXP_CMP_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		) VALUES (
+		       #{custPntSq}
+		     , #{custNo}
+		     , #{gvPntAmt}
+		     , 0
+		     , #{rmPntAmt}
+		     , DATE_FORMAT(CONCAT(DATE_ADD(CURRENT_DATE, INTERVAL 1 YEAR), ' 23:59:59'), '%Y-%m-%d %H:%i:%S')
+		     , #{expCmpDt}
+		     , #{custNo}
+		     , NOW()
+		     , #{custNo}
+		     , NOW()	
+		     )
+	</insert>
+	
+	<insert id="createReviewPointHst" parameterType="Point">
+		/* TsfReivew.createReviewPoint */
+		INSERT INTO TB_CUST_POINT_HST (
+		       CUST_NO
+		     , OCCUR_GB
+		     , OCCUR_DTL_DESC
+		     , PNT_AMT
+		     , CUST_PNT_SQ
+		     , ORD_NO
+		     , ORD_DTL_NO
+		     , REVIEW_SQ
+		     , SWITCH_DUE_DT
+		     , PNT_UPLOAD_STAT
+		     , PNT_UPLOAD_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		) VALUES (
+		       #{custNo}
+		     , #{occurGb}
+		     , #{occurDtlDesc}
+		     , #{pntAmt}
+		     , #{custPntSq}
+		     , #{ordNo}
+		     , #{ordDtlNo}
+		     , #{reviewSq}
+		     <if test='pntUploadStat == "G070_30"'>
+		     , NOW()                                -- SWITCH_DUE_DT
+		     </if>
+		     <if test='pntUploadStat != "G070_30"'>
+		     , DATE_FORMAT(#{switchDueDt}, '%Y%m%d%H%i%S') -- SWITCH_DUE_DT
+		     </if>
+		     , #{pntUploadStat}
+		     <if test='pntUploadStat == "G070_30"'>
+		     , NOW()                                -- PNT_UPLOAD_DT
+		     </if>
+		     <if test='pntUploadStat != "G070_30"'>
+		     , NULL                                 -- PNT_UPLOAD_DT
+		     </if>
+		     , #{custNo}
+		     , NOW()                                -- REG_DT
+		     , #{custNo}
+		     , NOW()                                -- UPD_DT
+		)
+	</insert>
+	
 </mapper>

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

@@ -35,7 +35,7 @@ upload:
         target.path: /TSIT/servers/files/data/style24/Upload/ProductImage
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //tdimage.style24.com/Upload/ProductImage
+        view: //image.istyle24.com/Upload/ProductImage
     image:
         target.path: /TSIT/servers/files/data/style24
         max.size: 10

+ 13 - 13
src/main/webapp/WEB-INF/views/mob/SigninFormMob.html

@@ -45,19 +45,6 @@
 								<input id="chkSaveId" type="checkbox"><label for="chkSaveId"><span>아이디 저장</span></label>
 							</div>
 						</div>
-						<div class="right">
-							<ul>
-								<li>
-									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">회원가입</a>
-								</li>
-								<li>
-									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a>
-								</li>
-								<li>
-									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a>
-								</li>
-							</ul>
-						</div>
 					</div>
 					<div class="help_block">
 						<!-- 보안문자 입력시 -->
@@ -72,6 +59,19 @@
 					<div class="ui_row mt20">
 						<button type="button" class="btn btnL btn_dark" id="btnLogin">로그인</button>
 					</div>
+					<div class="btn_mb_wrap">
+						<ul>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">회원가입</a>
+							</li>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a>
+							</li>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a>
+							</li>
+						</ul>
+					</div>
 				</form>
 				<div class="t_c sns_wrap">
 					<h3 class="sr-only">간편로그인</h3>

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

@@ -23,7 +23,7 @@
 	<section class="content mb_idInquiry_7">
 		<div class="inner">
 			<div class="close">
-				<a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
+				<a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_LOGIN);"><span></span><span></span></a>
 			</div>
 		</div>
 		<div class="inner">

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

@@ -42,12 +42,12 @@
 				</div>
 				<div class="btn_group_block ui_row">
 					<div class="ui_col_6">
-						<button type="button" class="btn btn_default" onclick="cfnOpenCellphoneCertify(_PAGE_CUSTOMER_DORMANT);">
+						<button type="button" id="btnCellPhoneCertify" class="btn btn_default">
 							<span><i class="ico ico_phone"></i>휴대폰인증</span>
 						</button>
 					</div>
 					<div class="ui_col_6">
-						<button class="btn btn_default" onclick="cfnOpenIpinCertify(_PAGE_CUSTOMER_DORMANT)">
+						<button type="button" id="btnIpinCertify" class="btn btn_default">
 							<span><i class="ico ico_ipin"></i>아이핀인증</span>
 						</button>
 					</div>
@@ -69,10 +69,11 @@
 	const authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
 
 	// 나이스 본인인증 후 콜백
-	var fnNiceCallBack = function(encData) {
+	var fnNiceCallBack = function(encData, authMethod) {
 		if (!gagajf.isNull(encData)) {
 			let custInfo = {};
 			custInfo.encData = encData;
+			custInfo.authMethod = authMethod;
 			let jsonData = JSON.stringify(custInfo);
 			gagajf.ajaxJsonSubmit('/customer/dormant/release', jsonData, fnRelaseCallback);
 		}
@@ -91,6 +92,15 @@
 		}
 	}
 
+	$('#btnCellPhoneCertify').on('click', function () {
+		cfnOpenCellphoneCertify(_PAGE_CUSTOMER_DORMANT, [[${custNo}]])
+	});
+
+	$('#btnIpinCertify').on('click', function () {
+		cfnOpenIpinCertify(_PAGE_CUSTOMER_DORMANT, [[${custNo}]])
+	});
+
+
 	$(document).ready(function () {
 		if (!gagajf.isNull(sEncData)) {
 			fnNiceCallBack(sEncData, authMethod);

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

@@ -23,7 +23,7 @@
 		<section class="content mb_idInquiry_1">
 			<div class="inner">
 				<div class="close">
-					<a href="javascript:history.back();" class="btn_close"><span></span><span></span></a>
+					<a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_LOGIN);"><span></span><span></span></a>
 				</div>
 			</div>
 			<div class="inner">

+ 1 - 2
src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html

@@ -19,7 +19,6 @@
 <body>
 <th:block layout:fragment="content">
 <style>
-	.show{display:block}
 	.hide{display:none}
 </style>
 <main class="container mb">
@@ -27,7 +26,7 @@
 	<section class="content mb_join_2">
 		<div class="inner">
 			<div class="close">
-				<a href="javascript:history.back();" class="btn_close"><span></span><span></span></a>
+				<a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);"><span></span><span></span></a>
 			</div>
 		</div>
 		<div class="inner">

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

@@ -24,7 +24,7 @@
 	<section class="content mb_join_1">
 		<div class="inner">
 			<div class="close">
-				<a href="javascript:history.back();" class="btn_close" ><span></span><span></span></a>
+				<a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_MAIN);"><span></span><span></span></a>
 			</div>
 		</div>
 		<div class="inner">

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

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

+ 16 - 8
src/main/webapp/WEB-INF/views/mob/customer/NonCustOrderConfirmFormMob.html

@@ -47,7 +47,7 @@
 					</div>
 					<div class="form_field">
 						<label class="input_label sr-only">휴대폰 번호</label>
-						<input type="text" name="ordTelno" placeholder="휴대폰 번호" id="ordTelno" class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
+						<input type="text" name="ordPhnno" placeholder="휴대폰 번호" id="ordPhnno" class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
 					</div>
 					<div class="form_field">
 						<label class="input_label sr-only">주문번호</label>
@@ -87,13 +87,21 @@
 </main>
 
 <script th:inline="javascript">
-$('#btnNonOrder').on('click', function () {
-	if (!gagajf.validation($('#nonCustOrderForm'))) {
-		return;
-	}
-	mcxDialog.alert("개발중입니다.");
-	// mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.", { //입력정보가 틀릴경우(일치하지 않을경우)
-});
+	$('#btnNonOrder').on('click', function () {
+		if (!gagajf.validation($('#nonCustOrderForm'))) {
+			return;
+		}
+		gagajf.ajaxFormSubmit("/noMember/order/info/validation",'#nonCustOrderForm', fnOrderInfoCallback)
+	});
+
+	var fnOrderInfoCallback = function (result) {
+		if (result.isFind) {
+			$('#nonCustOrderForm').submit();
+		} else {
+			mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.");
+			return;
+		}
+	};
 </script>
 </th:block>
 </body>

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

@@ -23,7 +23,7 @@
         <section class="content mb_idInquiry_1">
             <div class="inner">
                 <div class="close">
-                    <a href="javascript:history.back();" class="btn_close"><span></span><span></span></a>
+                    <a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_LOGIN);"><span></span><span></span></a>
                 </div>
             </div>
             <div class="inner">

+ 33 - 0
src/main/webapp/WEB-INF/views/mob/customer/PrivacyPolicyLayerFormMob.html

@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PrivacyPolicyLayerFormMob.html
+ * @desc    : 개인정보 수집 및 이용
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.28   jsshin       최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="exampleFullLabel">개인정보 수집 및 이용</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+
+				<!-- 컨텐츠 시작 -->
+				<div class="ps" th:utext="${#strings.replace(#strings.replace(clause,'&amplt;','<'),'&ampgt;','>')}"></div>
+				<!-- 컨텐츠 종료 -->
+
+			</div>
+		</div>
+	</div>
+</div>
+</html>

+ 33 - 0
src/main/webapp/WEB-INF/views/mob/customer/PrivacyTrustLayerFormMob.html

@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PrivacyTrustLayerFormMob.html
+ * @desc    : 개인정보 취급 위탁
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.28   jsshin       최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="exampleFullLabel">개인정보 취급 위탁</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+
+				<!-- 컨텐츠 시작 -->
+				<div class="ps" th:utext="${#strings.replace(#strings.replace(clause,'&amplt;','<'),'&ampgt;','>')}"></div>
+				<!-- 컨텐츠 종료 -->
+
+			</div>
+		</div>
+	</div>
+</div>
+</html>

+ 32 - 0
src/main/webapp/WEB-INF/views/mob/customer/UseTermsLayerFormMob.html

@@ -0,0 +1,32 @@
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : UseTermsLayerFormMob.html
+ * @desc    : STYLE24이용약관
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.28   jsshin       최초 작성
+ *******************************************************************************
+ -->
+<div class="modal-dialog" role="document">
+	<div class="modal-content">
+		<div class="modal-header">
+			<h5 class="modal-title" id="exampleFullLabel">이용약관</h5>
+		</div>
+		<div class="modal-body">
+			<div class="pop_cont">
+
+				<!-- 컨텐츠 시작 -->
+				<div class="ps" th:utext="${#strings.replace(#strings.replace(clause,'&amplt;','<'),'&ampgt;','>')}"></div>
+				<!-- 컨텐츠 종료 -->
+
+			</div>
+		</div>
+	</div>
+</div>
+</html>

+ 129 - 76
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDescFormMob.html

@@ -20,7 +20,7 @@
 	</div>
 	<div class="cont_body on">
 		<!-- 상품설명 노출 -->
-		<div class="descrp_box">
+		<div class="descrp_box" th:if="${goodsInfo.tobeFormYn == 'Y'}">
 			<div class="desc_simple"> <!-- 상품 간략설명-->
 				<span class="tit_desc" th:if="${goodsInfo.goodsTitle  != null  and !goodsInfo.goodsTitle.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
 				<p class="ptxt01"th:if="${goodsInfo.goodsTitleDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitleDesc))}">
@@ -35,119 +35,126 @@
 			</div>
 		</div>
 		<!-- //상품설명 노출 -->
-		<th:block th:each="goodsVideo, status : ${goodsVideoList}">
-		<div class="movblock">
-			<th:block th:if="${goodsVideo.videoGb == 'Y'}">
-			<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+		<!-- 관리자 에디터입력 내용 노출 -->
+		<div class="mdhtml_box">
+				<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
+			<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
+				</th:block>
+			<!-- 관리자 에디터입력 내용   공지 html -->
+			<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+			<div class="movblock">
+				<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+				<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+				</th:block>
+				<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+				</th:block>
+			</div>
+			</th:block>
+			<!-- 공통상품베너 -->
+			<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
+			<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
+			<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+				<a th:href="${goodsBanner.strVar1}" target="_blank">
+				<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
+				</a>
+			</th:block>
+			<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+				<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
 			</th:block>
-			<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
 			</th:block>
-		</div>
-		</th:block>
-		
-		<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
-		<div class="mdhtml_box">
-		<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
-		<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-			<a th:href="${goodsBanner.strVar1}" target="_blank">
-			<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-			</a>
-		</th:block>
-		<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-			<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-		</th:block>
-		</th:block>
-		
-		</div>
-		</th:block>
-		<!-- 관리자 에디터입력 내용 노출 -->
-			<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
-		<div class="mdhtml_box" th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></div>
 			</th:block>
 			
-		<!-- //관리자 에디터입력 내용 노출 -->
-		<!-- 관리자 에디터입력 내용 노출  상단 html -->
-		<div class="mdhtml_box" th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></div>
+			<!-- 관리자 에디터입력 내용 노출  상단 html -->
+			<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+			
+			<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
+		</div>	
+			
+		<th:block th:if="${goodsInfo.tobeFormYn == 'Y'}">	
 		<!-- 착용컷 노출 -->
-		<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1.') 
-											or #strings.contains(goodsImgList,'_M2.')
-											or #strings.contains(goodsImgList,'_M3.')
-											or #strings.contains(goodsImgList,'_M4.')
-											or #strings.contains(goodsImgList,'_M5.')}">
+		<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1') 
+											or #strings.contains(goodsImgList,'_M2')
+											or #strings.contains(goodsImgList,'_M3')
+											or #strings.contains(goodsImgList,'_M4')
+											or #strings.contains(goodsImgList,'_M5')}">
 			<span class="tit_view">OUTFIT VIEW</span>
-			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${status.first}">
-			<span class="model_info" th:text="${goodsImg.modelInfo}">(모델정보 : 185cm / 78kg / XL 착용)</span>
-			</th:block>
+			<span class="model_info">(모델정보 : 185cm / 78kg / XL 착용)</span>
 			<div class="view">
-				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1.') 
-																			or #strings.contains(goodsImg.sysImgNm,'_M2.')
-																			or #strings.contains(goodsImg.sysImgNm,'_M3.')
-																			or #strings.contains(goodsImg.sysImgNm,'_M4.')
-																			or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1') 
+																			or #strings.contains(goodsImg.sysImgNm,'_M2')
+																			or #strings.contains(goodsImg.sysImgNm,'_M3')
+																			or #strings.contains(goodsImg.sysImgNm,'_M4')
+																			or #strings.contains(goodsImg.sysImgNm,'_M5')}">
 				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 				</th:block>
 			</div>
 		</div>
 		<!-- //착용컷 노출 -->
 		<!-- 상품컷 노출 -->
-		<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01.') 
-											or #strings.contains(goodsImgList,'_02.')
-											or #strings.contains(goodsImgList,'_D1.')
-											or #strings.contains(goodsImgList,'_D2.')
-											or #strings.contains(goodsImgList,'_D3.')
-											or #strings.contains(goodsImgList,'_D4.')
-											or #strings.contains(goodsImgList,'_D5.')}">
+		<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01') 
+											or #strings.contains(goodsImgList,'_02')
+											or #strings.contains(goodsImgList,'_D1')
+											or #strings.contains(goodsImgList,'_D2')
+											or #strings.contains(goodsImgList,'_D3')
+											or #strings.contains(goodsImgList,'_D4')
+											or #strings.contains(goodsImgList,'_D5')}">
 			<span class="tit_view">PRODUCT VIEW</span>
 			<div class="view">
-				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01.') 
-																			or #strings.contains(goodsImg.sysImgNm,'_02.')
-																			or #strings.contains(goodsImg.sysImgNm,'_D1.')
-																			or #strings.contains(goodsImg.sysImgNm,'_D2.')
-																			or #strings.contains(goodsImg.sysImgNm,'_D3.')
-																			or #strings.contains(goodsImg.sysImgNm,'_D4.')
-																			or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01') 
+																			or #strings.contains(goodsImg.sysImgNm,'_02')
+																			or #strings.contains(goodsImg.sysImgNm,'_D1')
+																			or #strings.contains(goodsImg.sysImgNm,'_D2')
+																			or #strings.contains(goodsImg.sysImgNm,'_D3')
+																			or #strings.contains(goodsImg.sysImgNm,'_D4')
+																			or #strings.contains(goodsImg.sysImgNm,'_D5')}">
 				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 				</th:block>
 			</div>
 		</div>
 		<!-- //상품컷 노출 -->
 		<!-- 원단 노출 -->
-		<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1.')}">
+		<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1')}">
 			<span class="tit_view">FABRIC</span>
 			<div class="view">
-				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1')}">
 				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
 				</th:block>
 			</div>
 		</div>
 		<!-- //원단 노출 -->
 		<!-- 라벨 노출 -->
-		<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1.') 
-											or #strings.contains(goodsImgList,'_L2.')}">
+		<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1') 
+											or #strings.contains(goodsImgList,'_L2')}">
 			<span class="tit_view">LABEL INFO</span>
 			<div class="view">
 				<span>
-					<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1.') 
-																			or #strings.contains(goodsImg.sysImgNm,'_L2.')}">
+					<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1') 
+																			or #strings.contains(goodsImg.sysImgNm,'_L2')}">
 					<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
 					</th:block>
 				</span>
 			</div>
 		</div>
 		<!-- //라벨 노출 -->
-		<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
+		<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01')}">
 			<div class="view">
 				<th:block th:each="goodsImg, status : ${goodsImgList}" >
 					<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 					</th:block>
 			</div>
 		</div>
-			<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" >
-		<!-- 상세 html 이 존재하면  -->
-		<div class="mdhtml_box" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></div>
-			</th:block>
+		</th:block>
+
 		<!-- 관리자 에디터입력 내용 노출  하다단 html -->
-		<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>	
+		<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>
+		
+		<!-- 브랜드 노출 -->
+		<div class="brand_box">
+			<p class="name" th:text="${goodsInfo.brandGroupNm}">TBJ 티비제이</p>
+			<a href="javascript:void(0);" class="btn btn_default" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" ><span>브랜드 홈 바로가기</span></a>
+		</div>
+		<!-- //브랜드 노출 -->	
+		
 		<!-- 상품필수정보 노출 -->
 		<div class="required_box">
 			<div class="area_infotbl"  th:if="${goodsInfo.goodsType == 'G056_N' and goodsNotiList != null and !goodsNotiList.empty}">
@@ -183,24 +190,25 @@
 					<i class="ico ico_kcl"></i>
 				</div>
 				<div>
-					<th:block th:if="${not #strings.contains(goodsSafeNo.certNum, '해당')}" >
-					<p class="tit normal"  th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}"></p>
-					</th:block>
+					<p class="tit normal" th:utext="${goodsSafeNo.certDiv + '<br/>' + goodsSafeNo.certOrganName}"></p>
 					<p class="normal">
 						<th:block th:if="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-						해당 없음 
+						<span>해당 없음</span>
 						</th:block>
 						<th:block th:unless="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-						<span>인증번호:</span> <a class="num" th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank"  th:text="${goodsSafeNo.certNum}">CB123A123-1234</a>
+						<span>인증번호:</span> <a class="num" th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" th:text="${goodsSafeNo.certNum}">CB123A123-1234</a>
 						</th:block>
+						
 					</p>
 				</div>
 			</div>
+			
 			<p class="t_info dot_info mt10"  th:if="${goodsSafeNo != null}">
 				해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
 			</p>
 			<div class="area_infotbl">
 				<span class="title">상품기본정보</span>
+				<th:block th:if="${goodsInfo.goodsType == 'G056_N'} ">
 				<div class="tbl type1">
 					<table>
 						<tbody>
@@ -220,10 +228,14 @@
 								<th>상품명</th>
 								<td th:text="${goodsInfo.goodsNm}">남성 테이퍼드 핏 겨울 기모면 스판 올 밴딩 팬츠</td>
 							</tr>
+							<th:block th:if="${goodsNotiList != null and !goodsNotiList.empty}">
+							<th:block th:each="goodsNoti, status : ${goodsNotiList}"  th:if="${goodsNoti.niItemCd == 'G005_005'}">
 							<tr>
-								<th>제조자</th>
-								<td>한세엠케이(주)==============>노출필요성 확인</td>
+								<th th:text="${goodsNoti.niItemNm}">제조사</th>
+								<td th:text="${goodsNoti.niContent}"></td>
 							</tr>
+							</th:block>
+							</th:block>
 							<tr>
 								<th>제조국</th>
 								<td th:text="${goodsInfo.originNm}">베트남</td>
@@ -231,6 +243,47 @@
 						</tbody>
 					</table>
 				</div>
+				</th:block>
+				<th:block th:unless="${goodsInfo.goodsType == 'G056_N'} ">
+				<th:block th:if="${goodsComposeList != null and !goodsComposeList.empty}">
+				<th:block th:each="goodsCompose, status : ${goodsComposeList}">
+				<div class="tbl type1">
+					<table>
+						<tbody>
+							<tr>
+								<th>상품코드</th>
+								<td th:text="${goodsCompose.compsGoodsCd}">14443216</td>
+							</tr>
+							<tr>
+								<th>상품구분</th>
+								<td th:text="${goodsCompose.goodsGbNm}">병행수입</td>
+							</tr>
+							<tr>
+								<th>브랜드</th>
+								<td th:text="${goodsCompose.brandGroupNm}">TBJ</td>
+							</tr>
+							<tr>
+								<th>상품명</th>
+								<td th:text="${goodsCompose.compsGoodsNm}">남성 테이퍼드 핏 겨울 기모면 스판 올 밴딩 팬츠</td>
+							</tr>
+							<th:block th:if="${goodsCompose.goodsNotiList != null and !goodsCompose.goodsNotiList.empty}">
+							<th:block th:each="goodsNoti, status : ${goodsCompose.goodsNotiList}"  th:if="${goodsNoti.niItemCd == 'G005_005'}">
+							<tr>
+								<th th:text="${goodsNoti.niItemNm}">제조사</th>
+								<td th:text="${goodsNoti.niContent}"></td>
+							</tr>
+							</th:block>
+							</th:block>
+							<tr>
+								<th>제조국</th>
+								<td th:text="${goodsCompose.originNm}">베트남</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+				</th:block>
+				</th:block>
+				</th:block>
 				<p class="t_info dot_info mt10">
 					주문제작 상품의 경우 주문 후 제작되어 판매되는 상품으로 제작 시점부터 반품/교환이 어려울 수 있습니다.
 				</p>

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

@@ -48,9 +48,9 @@
 							<div class="swiper-container thumb_list">
 								<div class="swiper-wrapper">
 									<th:block th:each="goodsImg, status : ${goodsImgList}">
-									<div class="swiper-slide" th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
-																or #strings.contains(goodsImg.sysImgNm,'_L1.')
-																or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
+									<div class="swiper-slide" th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1') 
+																or #strings.contains(goodsImg.sysImgNm,'_L1')
+																or #strings.contains(goodsImg.sysImgNm,'_L2'))}">
 										<div class="thumb" ><img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'"></div></div>  <!--  mov -->
 									</th:block>	
 								</div>
@@ -217,7 +217,7 @@
 				</div>
 			<div class="cont_body">
 				<!-- 상품설명 노출 -->
-				<div class="descrp_box">
+				<div class="descrp_box" th:if="${goodsInfo.tobeFormYn == 'Y'}">
 					<div class="desc_simple"> <!-- 상품 간략설명-->
 						<span class="tit_desc" th:if="${goodsInfo.goodsTitle  != null  and !goodsInfo.goodsTitle.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
 						<p class="ptxt01"th:if="${goodsInfo.goodsTitleDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitleDesc))}">
@@ -234,114 +234,124 @@
 				<!-- //상품설명 노출 -->
 				<!-- 관리자 에디터입력 내용 노출 -->
 				<div class="mdhtml_box">
-					<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
-				<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
+						<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
+					<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
+						</th:block>
+					<!-- 관리자 에디터입력 내용   공지 html -->
+					<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+					<div class="movblock">
+						<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+						<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+						</th:block>
+						<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+						</th:block>
+					</div>
 					</th:block>
-				<!-- 관리자 에디터입력 내용   공지 html -->
-				<th:block th:each="goodsVideo, status : ${goodsVideoList}">
-				<div class="movblock">
-					<th:block th:if="${goodsVideo.videoGb == 'Y'}">
-					<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+					<!-- 공통상품베너 -->
+					<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
+					<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
+					<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+						<a th:href="${goodsBanner.strVar1}" target="_blank">
+						<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
+						</a>
 					</th:block>
-					<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+					<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+						<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
 					</th:block>
-				</div>
-				</th:block>
-				<!-- 공통상품베너 -->
-				<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
-				<div class="mdhtml_box">
-				<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
-				<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-					<a th:href="${goodsBanner.strVar1}" target="_blank">
-					<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-					</a>
-				</th:block>
-				<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-					<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-				</th:block>
-				</th:block>
-				
-				<!-- 관리자 에디터입력 내용 노출  상단 html -->
-				<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+					</th:block>
+					</th:block>
+					
+					<!-- 관리자 에디터입력 내용 노출  상단 html -->
+					<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+					
+					<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
 				</div>	
+					
+				<th:block th:if="${goodsInfo.tobeFormYn == 'Y'}">	
 				<!-- 착용컷 노출 -->
-				<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1.') 
-													or #strings.contains(goodsImgList,'_M2.')
-													or #strings.contains(goodsImgList,'_M3.')
-													or #strings.contains(goodsImgList,'_M4.')
-													or #strings.contains(goodsImgList,'_M5.')}">
+				<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1') 
+													or #strings.contains(goodsImgList,'_M2')
+													or #strings.contains(goodsImgList,'_M3')
+													or #strings.contains(goodsImgList,'_M4')
+													or #strings.contains(goodsImgList,'_M5')}">
 					<span class="tit_view">OUTFIT VIEW</span>
 					<span class="model_info">(모델정보 : 185cm / 78kg / XL 착용)</span>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1.') 
-																					or #strings.contains(goodsImg.sysImgNm,'_M2.')
-																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
-																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
-																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1') 
+																					or #strings.contains(goodsImg.sysImgNm,'_M2')
+																					or #strings.contains(goodsImg.sysImgNm,'_M3')
+																					or #strings.contains(goodsImg.sysImgNm,'_M4')
+																					or #strings.contains(goodsImg.sysImgNm,'_M5')}">
 						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
 				<!-- //착용컷 노출 -->
 				<!-- 상품컷 노출 -->
-				<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01.') 
-													or #strings.contains(goodsImgList,'_02.')
-													or #strings.contains(goodsImgList,'_D1.')
-													or #strings.contains(goodsImgList,'_D2.')
-													or #strings.contains(goodsImgList,'_D3.')
-													or #strings.contains(goodsImgList,'_D4.')
-													or #strings.contains(goodsImgList,'_D5.')}">
+				<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01') 
+													or #strings.contains(goodsImgList,'_02')
+													or #strings.contains(goodsImgList,'_D1')
+													or #strings.contains(goodsImgList,'_D2')
+													or #strings.contains(goodsImgList,'_D3')
+													or #strings.contains(goodsImgList,'_D4')
+													or #strings.contains(goodsImgList,'_D5')}">
 					<span class="tit_view">PRODUCT VIEW</span>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01.') 
-																					or #strings.contains(goodsImg.sysImgNm,'_02.')
-																					or #strings.contains(goodsImg.sysImgNm,'_D1.')
-																					or #strings.contains(goodsImg.sysImgNm,'_D2.')
-																					or #strings.contains(goodsImg.sysImgNm,'_D3.')
-																					or #strings.contains(goodsImg.sysImgNm,'_D4.')
-																					or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01') 
+																					or #strings.contains(goodsImg.sysImgNm,'_02')
+																					or #strings.contains(goodsImg.sysImgNm,'_D1')
+																					or #strings.contains(goodsImg.sysImgNm,'_D2')
+																					or #strings.contains(goodsImg.sysImgNm,'_D3')
+																					or #strings.contains(goodsImg.sysImgNm,'_D4')
+																					or #strings.contains(goodsImg.sysImgNm,'_D5')}">
 						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 						</th:block>
 					</div>
 				</div>
 				<!-- //상품컷 노출 -->
 				<!-- 원단 노출 -->
-				<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1.')}">
+				<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1')}">
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1')}">
 						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
 						</th:block>
 					</div>
 				</div>
 				<!-- //원단 노출 -->
 				<!-- 라벨 노출 -->
-				<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1.') 
-													or #strings.contains(goodsImgList,'_L2.')}">
+				<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1') 
+													or #strings.contains(goodsImgList,'_L2')}">
 					<span class="tit_view">LABEL INFO</span>
 					<div class="view">
 						<span>
-							<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1.') 
-																					or #strings.contains(goodsImg.sysImgNm,'_L2.')}">
+							<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1') 
+																					or #strings.contains(goodsImg.sysImgNm,'_L2')}">
 							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" alt="">
 							</th:block>
 						</span>
 					</div>
 				</div>
 				<!-- //라벨 노출 -->
-				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
+				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01')}">
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" >
 							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=360'}" alt="">
 							</th:block>
 					</div>
 				</div>
-					<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" >
-				<!-- 상세 html 이 존재하면  -->
-				<div class="mdhtml_box" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></div>
-					</th:block>
+				</th:block>
+
 				<!-- 관리자 에디터입력 내용 노출  하다단 html -->
-				<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>	
+				<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>
+				
+				<!-- 브랜드 노출 -->
+				<div class="brand_box">
+					<p class="name" th:text="${goodsInfo.brandGroupNm}">TBJ 티비제이</p>
+					<a href="javascript:void(0);" class="btn btn_default" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" ><span>브랜드 홈 바로가기</span></a>
+				</div>
+				<!-- //브랜드 노출 -->	
+				
 				<!-- 상품필수정보 노출 -->
 				<div class="required_box">
 					<div class="area_infotbl"  th:if="${goodsInfo.goodsType == 'G056_N' and goodsNotiList != null and !goodsNotiList.empty}">
@@ -377,18 +387,15 @@
 							<i class="ico ico_kcl"></i>
 						</div>
 						<div>
-							<th:block th:if="${not #strings.contains(goodsSafeNo.certNum, '해당')}" >
-							<p class="tit normal"  th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">
-							</
-							</p>
-								<p class="normal" >
+							<p class="tit normal" th:utext="${goodsSafeNo.certDiv + '<br/>' + goodsSafeNo.certOrganName}"></p>
+							<p class="normal">
 								<th:block th:if="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-								해당 없음 
+								<span>해당 없음</span>
 								</th:block>
 								<th:block th:unless="${#strings.contains(goodsSafeNo.certNum, '해당')}" >
-								인증번호: <th:block th:text="${goodsSafeNo.certNum}"></th:block>
-								<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
+								<span>인증번호:</span> <a class="num" th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" th:text="${goodsSafeNo.certNum}">CB123A123-1234</a>
 								</th:block>
+								
 							</p>
 						</div>
 					</div>

+ 191 - 178
src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html

@@ -2,7 +2,7 @@
 <html lang="ko" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="mob/common/layout/MypageLayoutMob">
 <!--
  *******************************************************************************
- * @source  : MypageCancelFormWeb.html
+ * @source  : MypageCancelFormMob.html
  * @desc    : 마이페이지 > 취소신청 Page
  *============================================================================
  * STYLE24
@@ -10,202 +10,216 @@
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021.04.27   jsh77b     최초 작성
+ * 1.0  2021.04.28   jsh77b     최초 작성
  *******************************************************************************
  -->
 <body>
 
 <th:block layout:fragment="content">
-	<div class="content myOrderView">
-		<div class="cont_body">
-			<!-- CONT-BODY -->
-			<div class="lnb">
-				<div class="lnb_tit">
-					<h2>마이페이지</h2>
-				</div>
-				<div class="lnb_list">
-					<ul id="mypageLnbList"></ul>
+
+<main role="" id="" class="container my">
+	<section class="content my_return">
+		<form id="cancelForm" class="form_wrap">
+			<input type="hidden" name="accountNo" th:value="${oneData.accountNo}"/>
+			<input type="hidden" name="accountNm" th:value="${oneData.accountNm}"/>
+			<input type="hidden" name="bankCd" th:value="${oneData.bankCd}"/>
+					
+			<div class="inner wide bg_beige">
+				<div class="order_number">
+					<dl class="clear">
+						<dt>주문번호</dt>
+						<dd th:text="${oneData.ordNo}"></dd>
+					</dl>
 				</div>
 			</div>
-			<div class="cont">
-				<form id="cancelForm">
-					<input type="hidden" name="accountNo" th:value="${oneData.accountNo}"/>
-					<input type="hidden" name="accountNm" th:value="${oneData.accountNm}"/>
-					<input type="hidden" name="bankCd" th:value="${oneData.bankCd}"/>
-					<div class="sec_head">
-						<h3 class="subH1">주문취소</h3>
-						<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${oneData.ordNo}"></em></span>
+			<div class="inner">
+				<div class="part_goods">
+					<div class="goods_top">
+						<div th:unless="${oneData.giftPackYn == 'Y'}" class="goods_date">주문일<span class="date" th:text="${oneData.ordDt}"></span></div>
+						<div th:if="${oneData.giftPackYn == 'Y'}" class="goods_date">선물일<span class="date" th:text="${oneData.ordDt}"></span></div>
 					</div>
-					<div class="sec_body">
-						<div class="part_goods">
-							<div class="goods_head">
-								<p th:unless="${oneData.giftPackYn == 'Y'}">주문일 <span th:text="${oneData.ordDt}"></span></p>
-								<p th:if="${oneData.giftPackYn == 'Y'}">선물일 <span th:text="${oneData.ordDt}"></span></p>
-							</div>
-							<div class="goods_cont">
-								<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-								<!-- 주문상품 -->
-								<div class="goods_info">
-									<div class="order_desc">
-										<div class="goods_box">
-											<div class="gd_item">
-												<a href="javascript:void(0)" th:attr="goodsCd=${cancel.goodsCd}" onclick="fnGoToGoodsDetail(this)">
-													<span class="thumb">
-														<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
-													</span>
-													<p>
-														<span class="brand" th:text="${cancel.brandNm}"></span>
-														<span class="tag primary" th:if="${cancel.shotDelvYn == 'Y'}">총알배송</span>
-														<span class="tag" th:if="${cancel.shotDelvYn == 'N' and cancel.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
-														<span class="tag" th:if="${cancel.selfGoodsYn == 'N'}">업체직배송</span>
-													</p>
-													<p>
-														<span class="name" th:text="${cancel.goodsNm}"></span>
-													</p>
-												</a>
-											</div>
-											<div class="gd_opt">
-												<div class="option_wrap">
-													<span class="title sr-only">주문 옵션</span>
-													<span class="option" th:if="${cancel.goodsType == 'G056_S'}" th:each="option, status : ${cancel.colorNmArr}" th:text="|${cancel.itemNmArr[status.index]} / ${option} / ${cancel.optCd2Arr[status.index]}|"></span>
-													<span class="option" th:unless="${cancel.goodsType == 'G056_S'}" th:text="|${cancel.colorNm} / ${cancel.optCd2}|"></span>
-												</div>
-											</div>
-											<div class="gd_calc">
-												<p>
-													<span class="count"><em th:text="${cancel.ordQty - cancel.cnclRtnQty}"></em>개</span>
-												</p>
-												<p>
-													<span class="price_org" th:if="${(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
-													<span class="price_sale"><em th:text="${#numbers.formatInteger(cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
-												</p>
+					<div class="goods_section">
+						<div class="goods_detail">
+							<a href="">
+								<div class="thumb_box">
+									<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
+								</div>
+								<div class="info_box">
+									<div class="od_name">
+										<div class="brand">
+											<span>Mollimelli 몰리멜리</span>
+											<div class="badge_wrap">
+												<em class="order_badge">업체직배송</em>
 											</div>
 										</div>
-										<div class="button_box">
-											<div class="count_modify">
-												<span class="txt">수량</span>
-												<form class="form_wrap">
-													<div class="form_field">
-														<div class="select_custom select_count">
-															<div class="combo">
-																<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${cancel.ordDtlNo}, ordCanChgQty=${cancel.ordCanChgQty}"/>
-																<div class="select">선택</div>
-																<ul class="list">
-																	<li class="selected" qty="0" onclick="fnChangeCancelQty(this);">선택</li>
-																	<li th:if="${cancel.ordCanChgQty > 0}" th:each="num : ${#numbers.sequence(1,cancel.ordCanChgQty)}" th:attr="qty=${num}" th:text="${num}" onclick="fnChangeCancelQty(this);"></li>
-																</ul>
-															</div>
-														</div>
-													</div>
-												</form>
-											</div>
+										<div class="name">몰리겨울상하복 균일가 택1 유아동/상하복/기모상하복/상하의세트 몰리겨울상하복 균일가 택1</div>
+									</div>
+									<div class="od_opt">
+										<div class="option">
+											<em>Black</em>
+											<em>XXL</em>
 										</div>
 									</div>
-									<div class="order_text">
-										<p>취소하실 수량을 선택하신 후 주문 취소를 하실 수 있습니다.</p>
+									<div class="od_calc">
+										<p class="sale_price"><del><em>95,000</em>원</del></p>
+										<p class="price">
+											<span class="selling_price"><em>61,200</em>원</span>
+										</p>
 									</div>
 								</div>
-								<!-- //주문상품 -->
-								</th:block>
-							</div>
+							</a>
 						</div>
-						<h4 class="subH3">환불정보</h4>
-						<div class="tbl type6">
-							<table>
-								<colgroup>
-									<col width="50%">
-									<col width="50%">
-								</colgroup>
-								<tr>
-									<td>
-										<dl>
-											<div>
-												<dt>환불 예정 금액</dt>
-												<dd>
-													<div class="price">
-														<span class="return_total_price"><em id="returnAmt">0</em>원</span>
-													</div>
-												</dd>
-											</div>
-											<div class="include_item"> <!-- 할인항목 표기 class명 include_item -->
-												<dt>상품 취소 금액</dt>
-												<dd><em id="goodsCancelAmt">0</em>원</dd>
-											</div>
-											<div class="include_item">
-												<dt>배송비</dt>
-												<dd><em id="deliveryFee">0</em>원</dd>
-											</div>
-											<div class="include_item">
-												<dt>할인 금액 차감</dt>
-												<dd><em id="deductDcAmt">0</em>원</dd>
-											</div>
-										</dl>
-									</td>
-									<td>
-										<dl>
-											<div>
-												<dt>환불 수단</dt>
-												<dd th:if="${paymentInfo.pgGb == 'KCP'}" th:text="${paymentInfo.payMeansNm}"></dd>
-												<dd th:if="${paymentInfo.pgGb == 'NAVER'}" th:text="|네이버페이|"></dd>
-												<dd th:if="${paymentInfo.pgGb == 'KAKAO'}" th:text="|카카오페이|"></dd>
-												<dd th:if="${paymentInfo.pgGb == 'PAYCO'}" th:text="|PAYCO|"></dd>
-											</div>
-											<div>
-												<dt>결제 금액 환불</dt>
-												<dd>
-													<em id="refundPayAmt">0</em>원
-												</dd>
-											</div>
-											<div>
-												<dt>포인트 환불</dt>
-												<dd>
-													<em id="refundPoint">0</em>P
-												</dd>
-											</div>
-											<div>
-												<dt>상품권 환불</dt>
-												<dd>
-													<em id="refundGiftCard">0</em>원
-												</dd>
-											</div>
-										</dl>
-									</td>
-								</tr>
-							</table>
-						</div>
-						<div class="txt_info">
-							<ul>
-								<li>
-									카드사로 결제 취소 요청이 전달된 후 환불까지는 평일 기준 3 ~7일이 소요될 수 있습니다.
-								</li>
-							</ul>
-						</div>
-						<div class="info_footer_area" id="addDeliveryFee" style="display:none">
-							<p>
-								<span id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.
-								<input type="hidden" name="addPayCost"/>
-							</p>
+						<div class="goods_select">
+							<div class="select_custom select_count">
+								<div class="combo">
+									<div class="select">수량 0개</div>
+								</div>
+							</div>
 						</div>
-						<div class="btn_footer_area">
-							<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"><span>취소</span></button>
-							<button type="button" id="btn_refund_pop" class="btn btn_dark btn_md" onclick="fnCancel();"><span>주문 취소</span></button>
+						<div class="goods_txt">
+							<p class="cf_txt cf_desc">취소하실 상품의 수량을 선택하신 후<br>취소 신청을 하실 수 있습니다.</p>
 						</div>
 					</div>
-				</form>
+				</div>
 			</div>
-			<!-- // CONT-BODY -->
-		</div>
-
-		<!-- 환불계좌 등록 팝업 -->
-		<div class="modal fade refund_pop" id="refundPop" tabindex="-1" role="dialog" aria-labelledby="refundLabel" aria-hidden="true">
-			<div class="modal-dialog" role="document">
-				<div class="modal-content"></div>
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>취소 사유</h3>
+					</div>
+					<div class="tbl tbl_tarea">
+						<table>
+							<colgroup>
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<th class="sr-only">취소 접수 일자</th>
+								<td>
+									<div class="select_custom select_return">
+										<div class="combo">
+											<div class="select">취소 사유를 선택하세요.</div>
+											<ul class="list">
+												<li>단순 변심</li>
+												<li>색상/사이즈가 상이</li>
+												<li>타사이트가 더 저렴함</li>
+												<li>상품옵션 선택 잘못 함</li>
+												<li>상품 결함이 있음</li>
+												<li>실제 상품이 상품 설명과 다름</li>
+												<li>포장과 상품이 훼손 됨</li>
+												<li>상품이 훼손 됨(포장은 양호)</li>
+												<li>주문상품 일부가 배송되지 않음</li>
+												<li>구성품, 부속품이 없음</li>
+												<li>다른 상품이 배송됨(주문상품 아님)</li>
+												<li>상품이 늦게 배송 됨</li>
+											</ul>
+										</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th class="sr-only">취소 완료 일자</th>
+								<td>
+									<div class="textarea_wrap">
+										<textarea class="doc_return" name="" id="" placeholder="자세한 사유를 입력해주세요."></textarea>
+										<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
+									</div>
+								</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</div>
+			<div class="inner">
+				<div class="tbl_wrap pay_wrap">
+					<div class="tbl_tit"> 
+						<h3>환불 정보</h3>
+						<strong class="pay"><span>123,456,789</span>원</strong>
+					</div>
+					<div class="tbl type1">
+						<table>
+							<colgroup>
+								<col width="227">
+								<col width="*">
+							</colgroup>   
+							<tr>
+								<td>
+									<dl class="refund_deduct">
+										<div>
+											<dt>상품 취소 금액</dt>
+											<dd>
+												<div>
+													<span>123,456,789</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>배송비</dt>
+											<dd>
+												<div>
+													<span>-123,456,789</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>할인 금액 차감</dt>
+											<dd>
+												<div>
+													<span>-123,456,789</span>원
+												</div>
+											</dd>
+										</div>
+									</dl>
+									<dl class="refund_detail">
+										<div>
+											<dt>환불 수단</dt>
+											<dd>
+												<div>
+													<span>-123,456,789</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>결제금액 환불</dt>
+											<dd>
+												<div>
+													<span>-123,456,789</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>포인트 환불</dt>
+											<dd>
+												<div>
+													<span>-123,456,789</span>원
+												</div>
+											</dd>
+										</div>
+										<div>
+											<dt>상품권 환불</dt>
+											<dd>
+												<div>
+													<span>3000</span>P
+												</div>
+											</dd>
+										</div>
+									</dl>
+								</td>
+							</tr>
+						</table>
+						<button type="button" class="btn btn_default"><span>취소 전표 보기</span></button>
+					</div>
+				</div>
+				<div class="required_group">
+					<p>배송비 <span class="c_primary">5,000원</span> 추가 결제가 필요합니다.</p>
+				</div>
+				<div class="btn_group btn_group_flex">
+					<div><button type="button" class="btn btn_default"><span>취소</span></button></div>
+					<div><button type="button" id="btn_order_return" class="btn btn_dark"><span>취소 신청</span></button></div> <!-- 210409_추가 : btn_order_return id 추가 -->
+				</div>
 			</div>
-			<a href="#close-modal" rel="modal:close" id="refundPop_close" class="close-modal">Close</a>
-			<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
-		</div>
-		<!-- //환불계좌 등록 팝업 -->
-	</div>
+		</form>
+	</section>
+</main>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	let cancelList = [[${cancelList}]];
@@ -271,7 +285,6 @@
 					xhr.setRequestHeader("AJAX"			, "true");
 					xhr.setRequestHeader('Accept'		, 'application/json');
 					xhr.setRequestHeader('Content-Type'	, 'application/json');
-					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
 					$("#refundPop .modal-dialog .modal-content").html(result);

+ 189 - 197
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html

@@ -2,7 +2,7 @@
 <html lang="ko" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="mob/common/layout/MypageLayoutMob">
 <!--
  *******************************************************************************
- * @source  : MypageCreExchangeDetailFormWeb.html
+ * @source  : MypageCreExchangeDetailFormMob.html
  * @desc    : 마이페이지 > 취소/반품/교환내역 > 교환상세 Page
  *============================================================================
  * STYLE24
@@ -10,221 +10,217 @@
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021.04.13   card007     최초 작성
+ * 1.0  2021.04.28   jsh77b     최초 작성
  *******************************************************************************
  -->
 <body>
 
 <th:block layout:fragment="content">
-	<div class="content myOrderView"> <!-- 페이지특정 클래스 = myOrderView -->
-		<div class="cont_body">
-			<!-- CONT-BODY -->
-			<div class="lnb">
-				<div class="lnb_tit">
-					<h2>마이페이지</h2>
-				</div>
-				<div class="lnb_list">
-					<ul id="mypageLnbList"></ul>
-				</div>
+<main role="" id="" class="container my">
+	<section class="content my_exchange">
+		<div class="inner wide bg_beige">
+			<div class="order_number">
+				<dl class="clear">
+					<dt>주문번호</dt>
+					<dd th:text="${oneData.ordNo}"></dd>
+				</dl>
 			</div>
-			<div class="cont">
-				<div class="sec_head">
-					<h3 class="subH1">교환상세</h3>
-					<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${oneData.ordNo}"></em></span>
+		</div>
+		<div class="inner">
+			<div class="part_goods">
+				<div class="goods_top">
+					<th:block th:if="${oneData.giftPackYn == 'Y'}">
+						<div class="goods_date">선물일<span class="date" th:text="${oneData.ordDt}"></span></div>
+					</th:block>
+					<th:block th:unless="${oneData.giftPackYn == 'Y'}">
+						<div class="goods_date">주문일<span class="date" th:text="${oneData.ordDt}"></span></div>
+					</th:block>
 				</div>
-				<div class="sec_body">
-					<div class="part_goods">
-						<div class="goods_head">
-							<p th:unless="${oneData.giftPackYn == 'Y'}">주문일 <span th:text="${oneData.ordDt}"></span></p>
-							<p th:if="${oneData.giftPackYn == 'Y'}">선물일 <span th:text="${oneData.ordDt}"></span></p>
-							<a href="javascript:void(0)" th:attr="ordNo=${oneData.ordNo}" onclick="fnGoToOrderDetail(this);">상세보기</a>
+				
+				<th:block th:if="${exchangeDetailList.exchangeDetailList}" th:each="returnDtl, status : ${exchangeDetailList.exchangeDetailList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+					<div class="goods_section">
+						<div class="goods_status">
+							<p class="dlvr_staus" th:text="${returnDtl.chgStatNm}"></p>
+							<p class="dlvr_desc" th:text="|${returnDtl.chgDate} ${returnDtl.chgTime}|"></p>
 						</div>
-						<div class="goods_cont">
-							<!-- 주문상품 -->
-							<th:block th:if="${exchangeDetailList.exchangeDetailList}" th:each="exchangeDtl, status : ${exchangeDetailList.exchangeDetailList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-								<div class="goods_info">
-									<div class="order_desc">
-										<div class="goods_box">
-											<div class="gd_item">
-												<a href="javascript:void(0)" th:attr="goodsCd=${exchangeDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
-													<span class="thumb">
-														<img th:src="${imageUrl + '/' + exchangeDtl.sysImgNm}" width="100%" alt="">
-													</span>
-													<p>
-														<span class="brand" th:text="${exchangeDtl.brandNm}"></span>
-														<span class="tag primary" th:if="${exchangeDtl.shotDelvYn == 'Y'}">총알배송</span>
-														<span class="tag" th:if="${exchangeDtl.shotDelvYn == 'N' and exchangeDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
-														<span class="tag" th:if="${exchangeDtl.selfGoodsYn == 'N'}">업체직배송</span>
-													</p>
-													<p>
-														<span class="name" th:text="${exchangeDtl.goodsNm}"></span>
-													</p>
-												</a>
-											</div>
-											<div class="gd_opt">
-												<div class="option_wrap">
-													<span class="title sr-only">주문 옵션</span>
-													<span class="option" th:if="${exchangeDtl.goodsType == 'G056_S'}" th:each="option, status : ${exchangeDtl.colorNmArr}" th:text="|${exchangeDtl.itemNmArr[status.index]} / ${option} / ${exchangeDtl.optCd2Arr[status.index]}|"></span>
-													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.colorNm} / ${exchangeDtl.optCd2}|"></span>
-												</div>
-											</div>
-											<div class="gd_calc">
-												<p>
-													<span class="count"><em th:text="${exchangeDtl.chgQty}"></em>개</span>
-												</p>
-												<p>
-													<span class="price_org" th:if="${exchangeDtl.priceOrg > exchangeDtl.priceSale}"><em th:text="${#numbers.formatInteger(exchangeDtl.priceOrg, 1, 'COMMA')}"></em>원</span>
-													<span class="price_sale"><em th:text="${#numbers.formatInteger(exchangeDtl.priceSale, 1, 'COMMA')}"></em>원</span>
-												</p>
-											</div>
-											<div class="gd_opt">
-												<div class="option_wrap">
-													<span class="title">교환 옵션</span>
-													<span class="option" th:if="${exchangeDtl.goodsType == 'G056_S'}" th:each="option, status : ${exchangeDtl.chgColorNmArr}" th:text="|${exchangeDtl.chgItemNmArr[status.index]} / ${option} / ${exchangeDtl.chgOptCd2Arr[status.index]}|"></span>
-													<span class="option" th:unless="${exchangeDtl.goodsType == 'G056_S'}" th:text="|${exchangeDtl.chgColorNm} / ${exchangeDtl.chgOptCd2}|"></span>
-												</div>
+						<div class="goods_detail">
+							<a href="">
+								<div class="thumb_box">
+									<img th:src="${imageUrl + '/' + returnDtl.sysImgNm}" width="100%" alt="">
+								</div>
+								<div class="info_box">
+									<div class="od_name">
+										<div class="brand">
+											<span th:text="${returnDtl.brandNm}"></span>
+											<div class="badge_wrap">
+												<em class="tag primary" th:if="${returnDtl.shotDelvYn == 'Y'}">총알배송</em>
+												<em class="tag" th:if="${returnDtl.shotDelvYn == 'N' and returnDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
+												<em class="tag" th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</span>
 											</div>
 										</div>
-										<div class="status_box">
-											<p>
-												<th:block th:text="${exchangeDtl.chgStatNm}"></th:block>
-												<span class="date" th:text="${exchangeDtl.chgDate}"></span>
-												<span class="time" th:text="${exchangeDtl.chgTime}"></span>
-											</p>
+										<div class="name" th:text="${returnDtl.goodsNm}"></div>
+									</div>
+									<div class="od_opt">
+										<div class="option">
+											<th:block th:if="${returnDtl.goodsType == 'G056_S'}">
+												<th:block th:each="option, status : ${returnDtl.colorNmArr}">
+													<em th:text="${option}"></em>
+													<em th:text="${returnDtl.optCd2Arr[status.index]}"></em>
+												</th:block>
+											</th:block>
+											<th:block th:unless="${returnDtl.goodsType == 'G056_S'}">
+												<em th:text="${returnDtl.colorNm}"></em>
+												<em th:text="${returnDtl.optCd2}"></em>
+											</th:block>
 										</div>
-										<div class="button_box">
-											<p th:if="${exchangeDtl.chgStat == 'G685_20' or exchangeDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordChgSq=${exchangeDtl.ordChgSq}" onclick="fnCreCancel(this);"><span>신청취소</span></button></p>
-											<p th:if="${exchangeDtl.chgStat == 'G685_32' or exchangeDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${exchangeDtl.ordNo}, ordChgSq=${exchangeDtl.ordChgSq}" onclick="fnCrePayAddCost(this);"><span>결제하기</span></button></p>
-											<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>
+									</div>
+									<div class="od_exchange_opt">
+										<span>교환옵션</span>
+										<div class="option">
+											<th:block th:if="${returnDtl.goodsType == 'G056_S'}">
+												<th:block th:each="option, status : ${returnDtl.chgColorNmArr}">
+													<em th:text="${returnDtl.chgItemNmArr[status.index]}"></em>
+													<em th:text="${option}"></em>
+													<em th:text="${returnDtl.chgOptCd2Arr[status.index]}"></em>
+												</th:block>
+											</th:block>
+											<th:block th:unless="${returnDtl.goodsType == 'G056_S'}">
+												<em th:text="${returnDtl.chgColorNm}"></em>
+												<em th:text="${returnDtl.chgOptCd2}"></em>
+											</th:block>
 										</div>
 									</div>
-									<!-- 교환결제대기 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_21' or (exchangeDtl.chgGb == 'G680_40' and exchangeDtl.chgStat == 'G685_32')}"><p th:text="|${exchangeDtl.addPayCost}|원 결제 후 교환 가능합니다."></p></div>
-									<!-- 교환접수 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_20'}"><p>교환 신청이 접수 되었습니다. 신속하게 처리하여 드리겠습니다.</p></div>
-									<!-- 회수요청 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_30'}"><p>고객님이 요청하신 회수지로 상품을 회수 중에 있습니다.</p></div>
-									<!-- 교환상품검수중 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_31' and exchangeDtl.chgGb == 'G680_40'}"><p>고객님이 교환하신 상품을 검수 중에 있습니다.</p></div>
-									<!-- 교환완료 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_40' and (exchangeDtl.chgOrdDtlStat == 'G013_60' or exchangeDtl.chgOrdDtlStat == 'G013_70')}"><p>반품이 완료되었습니다.</p></div>
-									<!-- 교환철회 -->
-									<div class="order_text" th:if="${exchangeDtl.chgStat == 'G685_49'}"><p>요청하신 교환을 취소하였습니다.</p></div>
+									<div class="od_calc">
+										<p class="price">
+											<span class="count"><em th:text="${returnDtl.chgQty}"></em>개</span>
+										</p>
+									</div>
 								</div>
-							</th:block>
-							<!-- //주문상품 -->
+							</a>
+						</div>
+						<div class="goods_btn_wrap btn_group_flex">
+							<div th:if="${returnDtl.chgStat == 'G685_20' or returnDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default" th:attr="ordNo=${returnDtl.ordNo}, ordChgSq=${returnDtl.ordChgSq}, cancelGb=${returnDtl.chgGb}" onclick="fnCreCancel(this);"><span>신청 취소</span></button></div>
+							<div th:if="${returnDtl.chgStat == 'G685_32' or returnDtl.chgStat == 'G685_21'}"><button type="button" class="btn btn_default" th:attr="ordNo=${returnDtl.ordNo}, ordChgSq=${returnDtl.ordChgSq}" onclick="fnCrePayAddCost(this);"><span>결재하기</span></button></div>
+							<div><button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></div>
+						</div>
+						<div class="goods_txt">
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_21' or (returnDtl.chgGb == 'G680_40' and returnDtl.chgStat == 'G685_32')}" th:text="|${returnDtl.addPayCost}원 결제 후 반품 가능합니다.|"></p>
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_20'}">교환 신청이 접수 되었습니다.<br> 신속하게 처리하여 드리겠습니다.</p>
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_30'}">고객님이 요청하신 회수지로 상품을 회수 중에 있습니다.</p>
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_31' and returnDtl.chgGb == 'G680_40'}">고객님이 교환하신 상품을 검수 중에 있습니다.</p>
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_40'} and (returnDtl.chgOrdDtlStat == 'G013_60' or returnDtl.chgOrdDtlStat == 'G013_70')}">교환이 완료되었습니다.</p>
+							<p class="cf_txt cf_desc" th:if="${returnDtl.chgStat == 'G685_49'}">요청하신 교환을 취소하였습니다.</p>
 						</div>
 					</div>
-					<h4 class="subH3">상세 정보</h4>
-					<div class="tbl type1">
-						<table>
-							<colgroup>
-								<col width="210">
-								<col width="*">
-							</colgroup>
-							<tbody>
-								<tr>
-									<th>교환접수 일자</th>
-									<td th:text="${oneData.chgDt}"></td>
-								</tr>
-								<tr>
-									<th>교환완료 일자</th>
-									<td th:text="${oneData.completeDt}"></td>
-								</tr>
-							</tbody>
-						</table>
+				</th:block>
+			</div>
+		</div>
+		<div class="inner">
+			<div class="tbl_wrap">
+				<div class="tbl_tit"> 
+					<h3>상세 정보</h3>
+				</div>
+				<div class="tbl type1">
+					<table>
+						<colgroup>
+							<col width="107">
+							<col width="*">
+						</colgroup>   
+						<tr>
+							<th>교환 접수 일자</th>
+							<td><div><span th:text="${oneData.chgDt}"></span></div></td>
+						</tr>
+						<tr>
+							<th>교환 완료 일자</th>
+							<td><div><span th:text="${oneData.completeDt}"></span></div></td>
+						</tr>
+					</table>
+				</div>
+			</div>
+		</div>
+		<div class="inner">
+			<div class="tbl_wrap">
+				<div class="tbl_tit"> 
+					<h3>교환 상품 배송지</h3>
+					<button type="button" id="btn_adrsChange_pop" class="btn_popup" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35' or oneData.chgOrdDtlStat == 'G013_40'}" onclick="fnChangeAddr('recip');">
+						<span>배송지 변경</span>
+					</button>
+				</div>
+				<div class="tbl">
+					<div class="ship_info">
+						<dl>
+							<div class="name">
+								<dt><span class="sr-only">배송지명</span></dt>
+								<dd id="recipNm" th:text="${oneData.recipNm}"></dd>
+							</div>
+							<div class="addr">
+								<dt><span class="sr-only">배송주소</span></dt>
+								<dd id="recipAddr" th:text="|${oneData.chgerBaseAddr} ${oneData.chgerDtlAddr}|"></dd>
+							</div>
+							<div class="phone">
+								<dt><span class="sr-only">휴대폰 번호</span></dt>
+								<dd id="recipPhnno" th:text="${oneData.recipPhnno}"></dd>
+							</div>
+							<div class="ship_request">
+								<dt>배송요청 사항</dt>
+								<dd id="delvMemo" th:text="${oneData.delvMemo}"></dd>
+							</div>
+						</dl>
 					</div>
-					<h4 class="subH3">교환 상품 배송지</h4>
-					<div class="tbl type1">
-						<table>
-							<colgroup>
-								<col width="210">
-								<col width="*">
-							</colgroup>
-							<tbody>
-								<tr>
-									<th>
-										배송지 정보
-									</th>
-									<td>
-										<div class="block_line">
-											<ul>
-												<li>
-													<span id="recipNm" th:text="${oneData.recipNm}"></span>
-												</li>
-												<li>
-													<span id="recipPhnno" th:text="${oneData.recipPhnno}"></span>
-												</li>
-												<li>
-													<span>서울시 영등포구 은행로 11, 8층 (여의도동, 일신빌딩)</span>
-													<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35' or oneData.chgOrdDtlStat == 'G013_40'}" onclick="fnChangeAddr('recip');"><span>배송지 변경</span></button>
-												</li>
-												<li>
-													배송요청 사항&nbsp;:&nbsp;<span>직접 받고 부재 시 문 앞</span>
-													<button type="button" class="btn_underline" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35' or oneData.chgOrdDtlStat == 'G013_40'}" onclick="fnChangeMemo('recip')"><span>변경하기</span></button>
-												</li>
-											</ul>
-										</div>
-									</td>
-								</tr>
-							</tbody>
-						</table>
+				</div>
+			</div>
+		</div>
+		<th:block th:if="${oneData.wdGb == 'W'}">
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>교환 회수지 주소</h3>
+						<button type="button" id="btn_adrsChange_pop" class="btn_popup" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" onclick="fnChangeAddr('chger');">
+							<span>회수지 변경</span>
+						</button>
 					</div>
-					<th:block th:if="${oneData.wdGb == 'W'}">
-						<h4 class="subH3">상품 회수지</h4>
-						<div class="tbl type1">
-							<table>
-								<colgroup>
-									<col width="210">
-									<col width="*">
-								</colgroup>
-								<tbody>
-									<tr>
-										<th>회수 진행 여부</th>
-										<td>회수요청</td>
-									</tr>
-									<tr>
-										<th>회수지 정보</th>
-										<td>
-											<div class="block_line">
-												<ul>
-													<li>
-														<span id="chgerNm" th:text="${oneData.chgerNm}"></span>
-													</li>
-													<li>
-														<span id="chgerPhnno" th:text="${oneData.chgerPhnno}"></span>
-													</li>
-													<li>
-														<span id="chgerAddr" th:text="|${oneData.chgerBaseAddr} ${oneData.chgerDtlAddr}|"></span>
-														<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" onclick="fnChangeAddr('chger');"><span>회수지 변경</span></button>
-													</li>
-													<li>
-														배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${oneData.delvMemo}"></span>
-														<button type="button" class="btn_underline" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" onclick="fnChangeMemo('chger');"><span>변경하기</span></button>
-													</li>
-												</ul>
-											</div>
-										</td>
-									</tr>
-									<tr th:if="${not #strings.isEmpty(oneData.wdInvoiceNo) and not #strings.isEmpty(oneData.shipCompNm)}">
-										<th>회수 정보</th>
-										<td>
-											<th:block th:text="|${oneData.shipCompNm} / ${oneData.wdInvoiceNo}|"></th:block>
-											<button type="button" class="btn btn_default btn_sm" onclick="fnGoToWithdrawDelivery()"><span>회수조회</span></button>
-										</td>
-									</tr>
-								</tbody>
-							</table>
+					<div class="tbl">
+						<div class="ship_info">
+							<dl>
+								<div class="name">
+									<dt><span class="sr-only">배송지명</span></dt>
+									<dd id="chgerNm" th:text="${oneData.chgerNm}"></dd>
+								</div>
+								<div class="addr">
+									<dt><span class="sr-only">배송주소</span></dt>
+									<dd id="chgerAddr" th:text="|${oneData.chgerBaseAddr} ${oneData.chgerDtlAddr}|"></dd>
+								</div>
+								<div class="phone">
+									<dt><span class="sr-only">휴대폰 번호</span></dt>
+									<dd id="chgerPhnno" th:text="${oneData.chgerPhnno}"></dd>
+								</div>
+							</dl>
 						</div>
-					</th:block>
-					<div class="btn_footer_area">
-						<button type="button" class="btn btn_dark btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);"><span>확인</span></button>
 					</div>
 				</div>
 			</div>
-			<!-- // CONT-BODY -->
+		</th:block>
+		<th:block th:if="${not #strings.isEmpty(oneData.wdInvoiceNo) and not #strings.isEmpty(oneData.shipCompNm)}">
+			<div class="inner">
+				<div class="tbl_wrap">
+					<div class="tbl_tit"> 
+						<h3>회수 정보</h3>
+						<button type="button" class="btn_popup" onclick="fnGoToWithdrawDelivery()"><span>회수 조회</span></button>
+					</div>
+					<div class="tbl tbl_row">
+						<dl>
+							<dt class="sr-only">택배회사/송장번호</dt>
+							<dd><span th:text="|${oneData.shipCompNm} / ${oneData.wdInvoiceNo}|"></span> / <span th:text="${oneData.wdInvoiceNo}"></span></dd>
+						</dl>
+					</div>
+				</div>
+			</div>
+		</th:block>
+		<div class="inner">
+			<div class="btn_group"><button class="btn btn_dark" onclick="cfnGoToPage(_PAGE_MYPAGE_CRE_LIST);"><span>확인</span></button></div>
 		</div>
-	</div>
+	</section>
+</main>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	/*<![CDATA[*/
@@ -232,11 +228,7 @@
 	let memoGb = '';
 
 	$(document).ready(function() {
-		// 마이페이지 LNB 설정
-		fnSetMypageLnbList(2);
 		
-		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 상세');
 	});
 	
 	// 배송메모 및 반품메모 변경 처리

+ 0 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreListFormMob.html

@@ -199,7 +199,6 @@ var fnGetInfiniteScrollDataList = function(pageNo) {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {

+ 12 - 4
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html

@@ -212,8 +212,8 @@
 </main>
 <script th:inline="javascript">
 	/*<![CDATA[*/
-	const sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
-	const authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
+	let sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
+	let authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
 
 	let orgCustInfo;
 	let orgAccountInfo;
@@ -314,7 +314,7 @@
 	};
 
 	var fnUpdateAuthInfoCallback = function (result) {
-		if (result.iSsuccess) {
+		if (result.isSuccess) {
 			fnGetCustInfo();
 			mcxDialog.alert("본인인증을 통해 정보가 변경 되었습니다.");
 			return;
@@ -356,7 +356,7 @@
 
 	// 수정 버튼
 	$('#btnConfirm').on('click', function () {
-		let custModiFy =  $('#custModiFyForm').serializeObject();
+		let custModiFy = $('#custModiFyForm').serializeObject();
 		let $bankCd = $('#custModiFyForm input[name=bankCd]');
 		let $accountNo = $('#custModiFyForm input[name=accountNo]');
 
@@ -496,6 +496,14 @@
 		cfnOpenCellphoneCertify(_PAGE_MYPAGE_CUSTOMER_MODIFY+'?confirmYn=Y');
 	});
 
+	$('#btnCellCertify').on('click', function () {
+		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)) {

+ 234 - 403
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustPwdModifyFormMob.html

@@ -14,426 +14,257 @@
  * 1.0  2021.04.01   jsshin       최초 작성
  *******************************************************************************
  -->
-<body>
-<th:block layout:fragment="content">
-	<div class="app">
-		<a href="#mainCon" class="skipNav">본문바로가기</a>
-		<header class=""> <!-- 서브페이지에서는 <header>의 클래스.main 제거 -->
-			<section class="htop" id="htopSub">
-				<button class="btn_back" title="이전페이지로">
-					<span><i class="gl1"></i><i class="gl2"></i><i class="gl3"></i></span>
-				</button>
-				<h1 id="htopTitle">내 정보 관리</h1>
-				<div class="button_wrap">
-					<button class="home">
-						<img src="/images/mo/ico_btn_home.png" alt="홈">
-					</button>
-					<button class="search">
-						<img src="/images/mo/ico_btn_search.png" alt="검색">
-					</button>
-					<button class="store">
-						<img src="/images/mo/ico_btn_store.png" alt="쇼핑백">
-						<span>99+</span>
-					</button>
-				</div>
-			</section>
-		</header>
-		<main role="" id="" class="container my">
-			<section class="content my_page_edit">
-				<form action="" class="form_wrap">
-					<div class="inner">
-						<div class="tbl_wrap">
-							<div class="tbl_tit"> 
-								<h3>회원 정보</h3>
-								<button type="button" class="btn_popup"><span>개명 본인인증</span></button>
-							</div>
-							<div class="tbl">
-								<div class="tbl_row">
-									<table>
-										<colgroup>
-											<col width="*">
-										</colgroup>   
-										<tr>
-											<th>이름</th>
-											<td>
-												<div class="form_field">
-													<input type="text" class="form_control" value="홍길동" placeholder="" readonly="readonly">
-												</div>
-											</td>
-										</tr>
-										<tr>
-											<th>생년월일</th>
-											<td>
-												<div class="form_field">
-													<input type="text" class="form_control" value="19921005" placeholder="" readonly="readonly">
-												</div>
-											</td>
-										</tr>
-									</table>
-									<p class="desc_txt">본인인증을 통해 자동으로 수집되는 정보입니다.</p>
-								</div>
-								<div class="tbl_row">
-									<table>
-										<colgroup>
-											<col width="*">
-										</colgroup>   
-										<tr>
-											<th>아이디</th>
-											<td>
-												<div class="form_field">
-													<input type="text" class="form_control" value="gunuid" placeholder="" readonly="readonly">
-												</div>
-											</td>
-										</tr>
-										<tr>
-											<th>비밀번호</th>
-											<td>
-												<div class="form_field password">
-													<button id="btn_password_pop" class="btn btn_primary"><span>비밀번호 변경하기</span></button> <!-- 210407_ID 추가 -->
-												</div>
-											</td>
-										</tr>
-										<tr>
-											<th>이메일</th>
-											<td>
-												<div class="form_field">
-													<input type="text" class="form_control" value="abced@naver.com" >
-												</div>
-											</td>
-										</tr>
-										<tr>
-											<th>휴대폰 인증</th>
-											<td>
-												<div class="input_wrap certi_wrap">
-													<input type="text" class="form_control" value="01047159121" placeholder="" readonly="readonly">
-													<button type="button" class="btn btn_dark"><span>본인인증</span></button>
-												</div>
-											</td>
-										</tr>
-									</table>
+<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>
-						</div>
-					</div>
-					<div class="inner">
-						<div class="tbl_wrap">
-							<div class="tbl_tit"> 
-								<h3>마케팅 정보 수신설정</h3>
-							</div>
-							<div class="tbl tbl_radio">
-								<table>
-									<colgroup>
-										<col width="*">
-									</colgroup>   
-									<tr>
-										<th class="sr-only">이름</th>
-										<td>
-											<div class="form_field">
-												<input id="chk-1" type="checkbox" name="test1"><label for="chk-1"><span>이메일</span></label> <!-- 210406_input type radio -> checkbox 변경 -->
-											</div>
-										</td>
-									</tr>
-									<tr>
-										<th class="sr-only">생년월일</th>
-										<td>
-											<div class="form_field">
-												<input id="chk-2" type="checkbox" name="test1"><label for="chk-2"><span>SMS</span></label> <!-- 210406_input type radio -> checkbox 변경 -->
-											</div>
-										</td>
-									</tr>
-								</table>
-								<p class="desc_txt">회원정보, 구매 정보 및 서비스 주요 정책 관련 내용은 수신동의 여부와<br>관계없이 발송됩니다.</p>
-							</div>
-						</div>
-					</div>
-					<div class="inner">
-						<div class="tbl_wrap">
-							<div class="tbl_tit"> 
-								<h3>환불 계좌정보</h3>
-							</div>
-							<div class="tbl type1">
-								<table>
-									<colgroup>
-										<col width="*">
-									</colgroup>   
-									<tr>
-										<th>예금주</th>
-										<td>
-											<div class="form_field">
-												<input type="text" class="form_control" value="gunuid" placeholder="비밀번호를 입력해 주세요" readonly="readonly"> <!-- 210406_input readonly 추가 -->
-											</div>
-										</td>
-									</tr>
-									<tr>
-										<th>은행명</th>
-										<td>
-											<div class="form_field">
-												<!-- <div class="select_custom type1" disabled > 셀렉트 자체 비활성 -->
-												<div class="select_custom select_bank"> <!-- 210408_ 수정 : select_bank 클래스 변경  -->
-													<div class="combo">
-														<div class="select">선택</div>
-														<!-- 
-														210408_ 삭제
-														<ul class="list">
-															<li class="selected">선택</li>
-															<li>상품옵션01</li>
-															<li> <input type="radio" > 상품옵션02</li>
-															<li>
-																<div>03. 상품옵션 : 두줄처리</div>
-																<div>120,000원</div>
-															</li>
-															<li aria-disabled="true" data-soldout="true">
-																<div>04. 상품옵션 : 두줄처리</div>
-																<div>120,000원</div>
-															</li>
-															<li>상품옵션04</li>
-															<li>상품옵션05</li>
-															<li aria-disabled="true" data-soldout="true">상품옵션06</li>
-															<li>상품옵션07</li>
-														</ul> -->
-													</div>
-												</div>
-											</div>
-										</td>
-									</tr>
-									<tr>
-										<th>계좌번호</th>
-										<td>
-											<div class="input_wrap certi_wrap">
-												<input type="tel" class="form_control" value="1234567894123456789" placeholder=""> <!-- 210409_input type tel 변경 -->
-												<button type="button" id="btn_bank_certi" class="btn btn_dark"><span>계좌인증</span></button> <!-- 210409_추가 : btn_bank_certi id 추가 -->
-											</div>
-										</td>
-									</tr>
-								</table>
-							</div>
-						</div>
-						<div class="btn_group_flex">
-							<div class="">
-								<button type="button" id="btn_myedit_confirm" class="btn btn_dark btn_block"><span>확인</span></button> <!-- 210409_추가 : btn_myedit_confirm id 추가 -->
-							</div>
-						</div>
-					</div>
-				</form>
-			</section>
-		</main>
-
-		<nav id="tabbar" class="tabbar fixed">
-		<!-- <nav id="tabbar" class="tabbar"> -->
-			<div class="tabbar-inner">
-				<a href="javascript:menu;" class="btn-menu" data-popup-trigger="" data-target="#menu">Menu</a>
-				<a href="javascript:myPage" class="btn-my">Mypage</a>
-				<a href="javascript:home" class="btn-home">Home</a>
-				<a href="javascript:wish" class="btn-wish">Wish</a>
-				<a href="javascript:history" class="btn-history">History</a>
-			</div>
-				<!-- 
-					<span class="txt-balloon" id="tutorial_mycloset" style=""> 툴팁예제</span>
-				-->
-		</nav>
-
-		<!-- 210407_비밀번호 변경 팝업 추가 -->
-		<div class="modal pop_full password_change_pop" id="passwordChangePop" tabindex="-1" role="dialog" aria-labelledby="passwordChangeLabel" aria-hidden="true">
-			<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 action="" class="form_wrap">
-									<div class="form_field">
-										<label class="input_label sr-only">기존 비밀번호를 입력해주세요.</label>
-										<div class="ui_col_12">
-											<input type="password" name="userConfirm" placeholder="기존 비밀번호를 입력해주세요." id="Password" class="form_control">
-										</div>
-									</div>
-									<div class="form_field">
-										<label class="input_label sr-only">신규 비밀번호를 입력해주세요.</label>
-										<div class="ui_col_12">
-											<input type="password" name="userPassword" placeholder="신규 비밀번호를 입력해주세요." id="txtPassword" class="form_control">
-											<!-- case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
-											<div class="help_block">
-												<!-- 사용불가 비밀번호일경우 -->
-												<p class="mt10">
-													<span class="c_red2"><i class="ico ico_check red mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)</span><br>
-													<span class="c_red2"><i class="ico ico_check red mr5"></i>4개이상연속되거나 동일한 문자, 숫자 제외</span><br>
-													<span class="c_red2"><i class="ico ico_check red mr5"></i>아이디제외</span>
-												</p>
-												<!-- //사용불가 비밀번호일경우 -->
-												<!-- 사용가능한 비밀번호일경우 -->
-												<p class="mt10">
-													<span class="c_black2"><i class="ico ico_check black mr5"></i>사용 가능한 비밀번호입니다</span>
-												</p>
-												<!-- //사용가능한 비밀번호일경우 -->
-											</div>
-											<!-- //case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
-										</div>
-									</div>
-									<div class="form_field">
-										<label class="input_label sr-only">신규 비밀번호를 다시 입력해주세요.</label>
-										<div class="ui_col_12">
-											<input type="password" name="userConfirm" placeholder="신규 비밀번호를 다시 입력해주세요." id="txtConfirm" class="form_control">
-										</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>
-									<div class="btn_group_flex">
-										<div class="">
-											<button type="button" class="btn btn_default"><span>취소</span></button>
-										</div>
-										<div class="">
-											<button type="button" id="btn_password_confirm" class="btn btn_dark"><span>변경</span></button> <!-- 210409_추가 : btn_password_confirm id 추가 -->
-										</div>
+									<!-- //case (사용불가 비밀번호일경우,사용가능한 비밀번호일경우) -->
+								</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>
-								</form>
+								</div>
 							</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>
+						</form>
 					</div>
-					<div class="modal-footer" style="display:none;"></div>
 				</div>
 			</div>
-			<a href="#close-modal" rel="modal:close" id="passwordPop_close" class="close-modal">Close</a>
+			<div class="modal-footer" style="display:none;"></div>
 		</div>
-		<!-- //210407_비밀번호 변경 팝업 추가 -->
+	</div>
+	<a href="#close-modal" rel="modal:close" id="passwordPop_close" class="close-modal">Close</a>
 
-		<!-- 210408_ 추가 : 은행 선택 팝업 -->
-		<div id="refundBankPop" class="popup_box refundBankPop">
-			<div class="lap">
-				<div class="popup_close">카테고리닫기</div>
-				<div class="popup_head sr-only">
-					<h2 class="">은행 선택 팝업</h2>
-				</div>
-				<div class="popup_con">
-					<div class="button_list clear">
-						<button type="button"><span>국민은행</span></button>
-						<button type="button"><span>기업은행</span></button>
-						<button type="button"><span>하나은행</span></button>
-						<button type="button"><span>우리은행</span></button>
-						<button type="button"><span>산업은행</span></button>
-						<button type="button"><span>대구은행</span></button>
-					</div>
-				</div>
-			</div>
-		</div>
-		<!-- //210408_ 추가 : 은행 선택 팝업 -->
-		<footer>
-			<button class="btn_top" title="페이지 맨위로 이동">
-				<span>
-					<i class="gl1"></i>
-					<i class="gl2"></i>
-					<i class="gl3"></i>
-				</span>
-			</button>
-			<section class="f1">
-				<div class="inner">
-					<ul class="link wider">
-						<li><a href="#none">고객센터</a></li>
-						<li><a href="#none">이용약관</a></li>
-						<li><a href="#none">개인정보취급방침</a></li>
-					</ul>
+<script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let checkPwd;
+	let checkConfirmPwd;
 
-					<div class="collapse">
-						<div class="btnWrap">
-							<button class="btn_infos">아이스타일이십사 주식회사</button>
-						</div>
-						<ul class="infos info">
-							<li class="fn">대표이사 : 윤종선</li>
-							<li class="fn">주소 : 서울시 영등포구 은행로 11, 8층(여의도동, 일신빌딩)</li>
-							<li class="fn">사업자등록번호 : 116-81-32499 </li>
-							<li class="fn">개인정보관리책임자 : 이정득 </li>
-							<li class="fn">통신판매업신고번호 : 제 2020-서울영등포1432</li>
-							<li class="fn">개인정보보호책임자 : 김명인</li>
-							<li class="fn">호스팅 서비스 : 아이스타일이십사㈜</li>
-						</ul>
-					</div>
-					
-					<ul class="link">
-						<li><a href="#none">사업자정보확인</a></li>
-						<li><a href="#none">PC버전</a></li>
-						<li><a href="#none">APP 다운로드</a></li>
-						<li><a href="#none">SN&#64;PP</a></li>
-					</ul>
-					<ul class="copy">
-						<li>COPYRIGHTⓒ2020 STYLE24 ALL RIGHTS RESERVED.</li>
-					</ul>
-					<ul class="sns">
-						<li><a href="#none" class="insta">Instagram</a></li>
-						<li><a href="#none" class="facebook">facebook</a></li>
-					</ul>
-				</div>
-			</section>
-		</footer>
-	</div>
-	<!-- 210407_비밀번호 변경 팝업 스크립트 -->
-	<script>
-		$(document).ready(function(){
-            $(document).on('click','#btn_password_pop',function(e){
-                $("#passwordChangePop").modal("show");
-                return false;
-            });
-            $("#passwordPop_close").click(function() {
-                $("#passwordChangePop").modal("hide");
-            });
+	$("#btnClose").on('click', function() {
+		$.modal.close();
+	});
 
-			//버튼 색
-			$(document).on('click','.popup_box .button_list button',function(){
-				$('.popup_box .button_list button').removeClass('on');
-				$(this).addClass('on');
-			});
+	// 신규 비밀번호 입력
+	$('#pwdModifyForm input[name=passwd]').on('focusout keyup keydown', function () {
+		fnCheckPassword();
+	});
 
-			//210408_ 추가 : 환불계좌등록 팝업 스크립트
-			$(document).on("click","#btn_refund_pop",function(e){
-				$('#refundAccountPop').show().addClass("active");
-				$("body").css({"overflow":"hidden"});
-			});
-			
-			//210408_ 추가 : 은행선택 팝업 스크립트
-			$(document).on("click",".select_bank",function(e){
-				$('#refundBankPop').show().addClass("active");
-				$('#refundBankPop').css({"z-index":"1000"});
-				$("body").css({"overflow":"hidden"});
-			});
+	// 신규 비밀번호 확인 입력
+	$('#pwdModifyForm input[name=confirmPassword]').on('focusout keyup keydown', function () {
+		fnCheckConfirmPassword();
+	});
 
-			//210408_ 추가 : 은행선택 팝업 스크립트 닫기
-			$('.refundBankPop .popup_close').on("click",function(){
-				$('.refundBankPop').hide().removeClass('active');
-				$("body").css({"overflow":"visible"});
-			});
+	// 비밀번호 확인
+	var fnCheckPassword = function () {
+		const $firstFailed = $('#firstFailed');
+		const $secondFailed = $('#secondFailed');
+		const $thirdFailed = $('#thirdFailed');
+		const $avlPwd = $('#avlPwd');
+		const red = 'c_red2';
+		const gray = 'c_gray';
+		let custId = $('#pwdModifyForm input[name=custId]').val();
+		let password = $('#pwdModifyForm input[name=passwd]').val();
+		let confirmPassword = $('#pwdModifyForm input[name=confirmPassword]').val();
+		let pwdCheck = true;
 
-			/* 210409_추가 : alert 모음 */
-			$(document).on("click", "#btn_bank_certi", function(){
-				mcxDialog.alert("계좌인증에 성공했습니다.", {
-						//alert("계좌정보를 다시 확인해주세요.") : 계좌인증 실패/유효하지 않은 경우
-						//alert("은행을 선택해주세요.") : 은행을 선택하지 않은 경우
-						//alert("계좌번호를 입력해주세요.") : 계좌번호를 입력하지 않은 경우
-					sureBtnText: "확인",  // Confirmation button text
-				});
-			});
+		// 영문, 숫자, 특수문자 2종 이상 혼용 || 길이
+		if (fnValidtaionPwdMixedWord(password) || fnValidationPwdLength(password)) {
+			pwdCheck = false;
+			$firstFailed.removeClass(gray);
+			$firstFailed.addClass(red);
+		} else {
+			$firstFailed.removeClass(red);
+			$firstFailed.addClass(gray);
+		}
 
-			$(document).on("click", "#btn_myedit_confirm", function(){
-				mcxDialog.alert("회원정보가 수정되었습니다.", {
-						//alert("이메일 주소를 입력해주세요.") : 이메일을 입력하지 않은 경우
-						//alert("이메일 주소를 정확하게 입력해주세요.") : 이메일이 유효하지 않은 경우
-						//alert("이미 사용중인 이메일 주소 입니다.") : 이메일이 중복/사용중인 경우
-						//alert("계좌인증이 필요합니다.") : 계좌정보에 대해 계좌인증이 안된 경우
-						//alert("환불 계좌정보를 다시 확인하시고 계좌인증을 해주세요.") : 인증 받은 계좌정보와 입력된 계좌정보가 다른 경우
-					sureBtnText: "확인",  // Confirmation button text
-				});
-			});
+		// 동일한 문자/숫자 4자이상 || 연속된 문자가 4자이상
+		if (fnValidationPwdSameWord(password) || fnValidtaionPwdCntnsWord(password)) {
+			pwdCheck = false;
+			$secondFailed.removeClass(gray);
+			$secondFailed.addClass(red);
+		} else {
+			$secondFailed.removeClass(red);
+			$secondFailed.addClass(gray);
+		}
+
+		// 아이디 포함
+		if (fnValidationPwdSameId(password, custId)) {
+			pwdCheck = false;
+			$thirdFailed.removeClass(gray);
+			$thirdFailed.addClass(red);
+		} else {
+			$thirdFailed.removeClass(red);
+			$thirdFailed.addClass(gray);
+		}
+
+		if (pwdCheck) {
+			$firstFailed.hide();
+			$secondFailed.hide();
+			$thirdFailed.hide();
+			$avlPwd.show();
+			checkPwd = true;
+		} else {
+			$firstFailed.show();
+			$secondFailed.show();
+			$thirdFailed.show();
+			$avlPwd.hide();
+			checkPwd = false;
+		}
+
+		if (!gagajf.isNull(confirmPassword)) {
+			fnCheckConfirmPassword();
+		}
 
-			$(document).on("click", "#btn_password_confirm", function(){
-				mcxDialog.alert("비밀번호가 변경되었습니다.", {
-						//alert("기존 비밀번호를 입력해주세요.") : 기존 비밀번호를 입력하지 않은 경우
-						//alert("신규 비밀번호를 입력해주세요.") : 신규 비밀번호를 입력하지 않은 경우
-						//alert("비밀번호가 일치하지 않습니다. 다시 확인해주세요.") : 입력한 비밀번호가 일치하지 않는 경우
-					sureBtnText: "확인",  // Confirmation button text
-				});
+	};
+
+	// 비밀번호체크
+	var fnCheckConfirmPassword = function () {
+		const $misPwd = $('#misPwd');
+		const $avlConPwd = $('#avlConPwd');
+		const $btnSavePassword = $('#btnSavePassword');
+		let password = $('#pwdModifyForm input[name=passwd]').val();
+		let confirmPassword = $('#pwdModifyForm input[name=confirmPassword]').val();
+
+		let sameConfirmPwd = fnValidationPwdSameConfirmPwd(password, confirmPassword);
+
+		if (sameConfirmPwd) {
+			$avlConPwd.show();
+			$misPwd.hide();
+			checkConfirmPwd = true;
+			//$btnSavePassword.attr('disabled', false);
+		} else {
+			$misPwd.show();
+			$avlConPwd.hide();
+			checkConfirmPwd = false;
+			//$btnSavePassword.attr('disabled', true);
+		}
+
+	};
+
+	// 패스워드 저장
+	$('#btnSavePassword').on('click', function () {
+		let pwdModifyForm = $('#pwdModifyForm').serializeObject();
+
+		if (gagajf.isNull(pwdModifyForm.orgPasswd)) {
+			mcxDialog.alert('기존 비밀번호 입력해주세요.');
+			return;
+		}
+
+		if (gagajf.isNull(pwdModifyForm.passwd)) {
+			mcxDialog.alert('신규 비밀번호를 입력해주세요.');
+			return;
+		}
+
+		if (gagajf.isNull(pwdModifyForm.confirmPassword)) {
+			mcxDialog.alert('신규 비밀번호 확인을 입력해주세요.');
+			return;
+		}
+
+		if (!checkPwd) {
+			mcxDialog.alert('유효하지 않은 신규 비밀번호 입니다.');
+			return;
+		}
+
+		if (!checkConfirmPwd) {
+			mcxDialog.alert('유효하지 않은 신규 비밀번호 입니다.');
+			return;
+		}
+
+		if (pwdModifyForm.passwd !== pwdModifyForm.confirmPassword) {
+			mcxDialog.alert('신규 비밀번호가 일치하지 않습니다. 다시 확인해주세요.');
+			return;
+		}
+
+		fnCheckPassword();
+		fnCheckConfirmPassword();
+		let jsonData = JSON.stringify(pwdModifyForm);
+		gagajf.ajaxJsonSubmit('/mypage/password/change', jsonData, fnChangePasswordCallback);
+	});
+
+	var fnChangePasswordCallback = function (result) {
+		if (result.isSuccess) {
+			mcxDialog.alertC("비밀번호가 변경되었습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$.modal.close();
+				}
 			});
+		} else {
+			if (result.resultType === 'WRONG_PWD') {
+				mcxDialog.alert('기존 비밀번호가 일치하지 않습니다. 다시 확인해주세요.');
+			}
+		}
+	};
+
 
-			/* 210409_추가 : alert 모음 */
-		})
-	</script>
-	<!-- //210407_비밀번호 변경 팝업 스크립트 -->
-</th:block>
-</body>
+	/*]]>*/
+</script>
 </html>

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

@@ -769,10 +769,8 @@
 					xhr.setRequestHeader("AJAX"			, "true");
 					xhr.setRequestHeader('Accept'		, 'application/json');
 					xhr.setRequestHeader('Content-Type'	, 'application/json');
-					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
-					gagajf.showProgressbar(false);
 					$("#adrsChangePop .modal-dialog .modal-content").html(result);
 					$("#adrsChangePop").modal("show");
 				}
@@ -789,10 +787,8 @@
 					xhr.setRequestHeader("AJAX"			, "true");
 					xhr.setRequestHeader('Accept'		, 'application/json');
 					xhr.setRequestHeader('Content-Type'	, 'application/json');
-					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
-					gagajf.showProgressbar(false);
 					$("#adrsAddPop .modal-dialog .modal-content").html(result);
 					$("#adrsAddPop").modal("show");
 				}
@@ -823,10 +819,8 @@
 					xhr.setRequestHeader("AJAX"			, "true");
 					xhr.setRequestHeader('Accept'		, 'application/json');
 					xhr.setRequestHeader('Content-Type'	, 'application/json');
-					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
-					gagajf.showProgressbar(false);
 					$("#refundPop .modal-dialog .modal-content").html(result);
 					$("#refundPop").modal("show");
 				}
@@ -915,7 +909,7 @@
 		$('#orderDetailForm input[name=bankCd]').val(result.bankCd);
 		
 		// 반품처리
-		fnReturn();
+		fnAllCancel();
 	}
 </script>
 

+ 0 - 2
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListFormMob.html

@@ -308,10 +308,8 @@ var fnGetInfiniteScrollDataList = function(pageNo) {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
-			gagajf.showProgressbar(false);
 			if (result != null) {
 				$("#listBox").css("display", "block");
 				$("#listBox").append(result);

+ 58 - 13
src/main/webapp/WEB-INF/views/mob/mypage/MypageOrderListInfoMob.html

@@ -106,7 +106,11 @@
 							<!-- 입금대기, 결제완료, 상품준비중, 출고처지정 (주문취소) -->
 							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_10' or ${ordDtl.ordDtlStat} == 'G013_20' or ${ordDtl.ordDtlStat} == 'G013_30' or ${ordDtl.ordDtlStat} == 'G013_35'">
 								<div class="goods_btn_wrap btn_group_flex">
-									<div><button type="button" class="btn btn_default btn_cncl_complete"><span>주문 취소</span></button></div>
+									<div>
+										<button type="button" class="btn btn_default btn_cncl_complete" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:ordCanChgQty="${ordDtl.ordCanChgQty}" th:delvFeeCd="${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'cancel');">
+											<span>주문 취소</span>
+										</button>
+									</div>
 								</div>
 							</th:block>
 							<!-- //입금대기, 결제완료, 상품준비중, 출고처지정 (주문취소) -->
@@ -122,10 +126,18 @@
 								<th:block th:if="${ordDtl.changeableYn} == 'Y' or ${ordDtl.returnableYn} == 'Y'">
 									<div class="goods_btn_wrap btn_group_flex">
 										<th:block th:if="${ordDtl.changeableYn} == 'Y'">
-											<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+											<div>
+												<button type="button" class="btn btn_default btn_exch_req" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:ordCanChgQty="${ordDtl.ordCanChgQty}" th:delvFeeCd="${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');">
+													<span>교환 신청</span>
+												</button>
+											</div>
 										</th:block>
 										<th:block th:if="${ordDtl.returnableYn} == 'Y'">
-											<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+											<div>
+												<button type="button" class="btn btn_default btn_rtn_req" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:ordCanChgQty="${ordDtl.ordCanChgQty}" th:delvFeeCd="${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');">
+													<span>반품 신청</span>
+												</button>
+											</div>
 										</th:block>
 									</div>
 								</th:block>
@@ -149,25 +161,42 @@
 								<div class="goods_btn_wrap btn_group_flex">
 									<!-- 교환가능, 반품가능 -->
 									<th:block th:if="${ordDtl.changeableYn} == 'Y'">
-										<div><button type="button" class="btn btn_default btn_exch_req"><span>교환 신청</span></button></div>
+										<button type="button" class="btn btn_default btn_exch_req" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:ordCanChgQty="${ordDtl.ordCanChgQty}" th:delvFeeCd="${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');">
+											<span>교환 신청</span>
+										</button>
 									</th:block>
 									<th:block th:if="${ordDtl.returnableYn} == 'Y'">
-										<div><button type="button" class="btn btn_default btn_rtn_req"><span>반품 신청</span></button></div>
+										<div>
+											<button type="button" class="btn btn_default btn_rtn_req" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:ordCanChgQty="${ordDtl.ordCanChgQty}" th:delvFeeCd="${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');">
+												<span>반품 신청</span>
+											</button>
+										</div>
 									</th:block>
 									<!-- //교환가능, 반품가능 -->
-									
-									<div><button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary"><span>구매 확정</span></button></div>
+									<div>
+										<button type="button" id="btn_purchase_confirm btn_ord_confirm" class="btn btn_primary" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnDecideOrder(this);">
+											<span>구매 확정</span>
+										</button>
+									</div>
 								</div>
 								<div class="goods_btn_wrap btn_group_flex">
 									<!-- 교환불가, 반품불가 -->
 									<th:block th:if="${ordDtl.changeableYn} == 'N' or ${ordDtl.returnableYn} == 'N'">
-										<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+										<div>
+											<button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"">
+												<span>1:1 문의</span>
+											</button>
+										</div>
 									</th:block>
 									<!-- //교환불가, 반품불가 -->
 									
 									<!-- 리뷰사용가능, 리뷰등록전일때 -->
 									<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-										<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+										<div>
+											<button type="button" class="btn btn_primary btn_review_write" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:goodsCd="${ordDtl.GoodsCd}" onclick="fnCreateReview(this);">
+												<span>리뷰 쓰기</span>
+											</button>
+										</div>
 									</th:block>
 									<!-- //리뷰사용가능, 리뷰등록전일때 -->
 								</div>
@@ -177,12 +206,24 @@
 							<!-- 구매확정 -->
 							<th:block th:if="${ordDtl.ordDtlStat} == 'G013_70'">
 								<div class="goods_btn_wrap btn_group_flex">
-									<div><button type="button" class="btn btn_primary btn_cart_save"><span>쇼핑백 담기</span></button></div>
-									<div><button type="button" class="btn btn_default btn_qna_write"><span>1:1 문의</span></button></div>
+									<div>
+										<button type="button" class="btn btn_primary btn_cart_save" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" onclick="fnCreateCart(this);"">
+											<span>쇼핑백 담기</span>
+										</button>
+									</div>
+									<div>
+										<button type="button" class="btn btn_default btn_qna_write" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"">
+											<span>1:1 문의</span>
+										</button>
+									</div>
 									
 									<!-- 리뷰사용가능, 리뷰등록전일때 -->
 									<th:block th:if="${ordDtl.reviewableYn} == 'Y' and ${ordDtl.reviewSq} == null">
-										<div><button type="button" class="btn btn_primary btn_review_write"><span>리뷰 쓰기</span></button></div>
+										<div>
+											<button type="button" class="btn btn_primary btn_review_write" th:ordNo="${ordDtl.ordNo}" th:ordDtlNo="${ordDtl.ordDtlNo}" th:goodsCd="${ordDtl.GoodsCd}" onclick="fnCreateReview(this);">
+												<span>리뷰 쓰기</span>
+											</button>
+										</div>
 									</th:block>
 									<!-- //리뷰사용가능, 리뷰등록전일때 -->
 								</div>
@@ -196,7 +237,11 @@
 							<div class="goods_btn_wrap btn_group_flex">
 								<!-- 배송지등록전 -->
 								<th:block th:if="${ordDtl.recipBaseAddr == ''} and ${ordDtl.giftLimitDay} >= 0">
-									<div><button type="button" class="btn btn_primary btn_sms_send"><span>SMS 재발송</span></button></div>
+									<div>
+										<button type="button" class="btn btn_primary btn_sms_send">
+											<span>SMS 재발송</span>
+										</button>
+									</div>
 								</th:block>
 								<!-- //배송지등록전 -->
 								

+ 0 - 3
src/main/webapp/WEB-INF/views/mob/order/OrderCompleteMob.html

@@ -360,7 +360,6 @@ $('#btn_adrsChange_pop').on("click", function(){
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsChangePop .modal-dialog .modal-content").html(result);
@@ -378,7 +377,6 @@ $('#btn_adrsChange_pop').on("click", function(){
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -402,7 +400,6 @@ $("#btn_rqstModify_pop").on("click", function(e){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {

+ 0 - 14
src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html

@@ -524,7 +524,6 @@ var custemerInfoSet = function() {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {
@@ -573,7 +572,6 @@ var entryInfoSet = function() {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#entryInfo").css("display", "block");
@@ -593,7 +591,6 @@ var madeInfoSet = function() {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#madeInfo").css("display", "block");
@@ -613,7 +610,6 @@ var orderGiftInfoSet = function() {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#orderGiftInfo").css("display", "block");
@@ -654,7 +650,6 @@ var deliveryAddrInfoSet = function(delvObj, temp) {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#deliveryAddrInfo").css("display", "block");
@@ -682,7 +677,6 @@ var deliveryAddrInfoSet = function(delvObj, temp) {
 							xhr.setRequestHeader("AJAX"			, "true");
 							xhr.setRequestHeader('Accept'		, 'application/json');
 							xhr.setRequestHeader('Content-Type'	, 'application/json');
-							gagajf.showProgressbar(true);
 						},
 						success 	: function(result) {
 							$("#adrsChangePop .modal-dialog .modal-content").html(result);
@@ -701,7 +695,6 @@ var deliveryAddrInfoSet = function(delvObj, temp) {
 							xhr.setRequestHeader("AJAX"			, "true");
 							xhr.setRequestHeader('Accept'		, 'application/json');
 							xhr.setRequestHeader('Content-Type'	, 'application/json');
-							gagajf.showProgressbar(true);
 						},
 						success 	: function(result) {
 							$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -781,7 +774,6 @@ var orderListInfoSet = function(orderListJsonData, temp) {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {
@@ -818,7 +810,6 @@ var freegiftInfoSet = function() {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {
@@ -896,7 +887,6 @@ var paymentInfoSet = function() {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {
@@ -1157,7 +1147,6 @@ var paymentInfoSet = function() {
 							xhr.setRequestHeader("AJAX"			, "true");
 							xhr.setRequestHeader('Accept'		, 'application/json');
 							xhr.setRequestHeader('Content-Type'	, 'application/json');
-							gagajf.showProgressbar(true);
 						},
 						success 	: function(result) {
 							
@@ -1237,7 +1226,6 @@ var dcAmtInfoSet = function() {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {
@@ -1254,7 +1242,6 @@ var dcAmtInfoSet = function() {
 						xhr.setRequestHeader("AJAX"			, "true");
 						xhr.setRequestHeader('Accept'		, 'application/json');
 						xhr.setRequestHeader('Content-Type'	, 'application/json');
-						gagajf.showProgressbar(true);
 					},
 					success 	: function(result) {
 						$("#couponModifyPop").html(result);
@@ -1378,7 +1365,6 @@ var dcAmtInfoSet = function() {
 						xhr.setRequestHeader("AJAX"			, "true");
 						xhr.setRequestHeader('Accept'		, 'application/json');
 						xhr.setRequestHeader('Content-Type'	, 'application/json');
-						gagajf.showProgressbar(true);
 					},
 					success 	: function(result) {
 						$("#couponSelectPop02").html(result);

+ 0 - 1
src/main/webapp/WEB-INF/views/mob/order/OrderGiftCompleteMob.html

@@ -399,7 +399,6 @@ $('#btn_adrsChange_pop').on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#adrsAddPop .modal-dialog .modal-content").html(result);

+ 0 - 1
src/main/webapp/WEB-INF/views/mob/popup/DelvAddrAddPopMob.html

@@ -197,7 +197,6 @@ $("#btn_delivery_addr_save").on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {

+ 1 - 4
src/main/webapp/WEB-INF/views/mob/popup/DelvAddrChangePopMob.html

@@ -84,7 +84,6 @@ $(document).ready( function() {
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -133,7 +132,6 @@ $("#delvAddrChangeForm .btn_addrModify_pop").on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#adrsModifyPop .modal-dialog .modal-content").html(result);
@@ -154,7 +152,6 @@ $('#btn_adrsAdd_pop').on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -164,4 +161,4 @@ $('#btn_adrsAdd_pop').on("click", function(){
 });
 
 </script>
-
+

+ 1 - 2
src/main/webapp/WEB-INF/views/mob/popup/DelvAddrModifyPopMob.html

@@ -218,7 +218,6 @@ $("#btn_delivery_modi_save").on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			// custDelvAddrSq 부모창으로 전달
@@ -297,4 +296,4 @@ var fnOpenDaumAddr = function() {
 $(document).on("keyup", "#deliveryModifyForm input[name=recipPhnno]", function() { 
 	$(this).val( $(this).val().replace(/[^0-9]/g, "").replace(/(^02|^0505|^1[0-9]{3}|^0[0-9]{2})([0-9]+)?([0-9]{4})$/,"$1-$2-$3").replace("--", "-") ); 
 });
-</script>
+</script>

+ 19 - 16
src/main/webapp/WEB-INF/views/web/common/fragments/BrandGnbWeb.html

@@ -40,7 +40,7 @@
 				<ul class="bundle" id="ulGnbTab">
 					<li class="home"><a href="javascript:void(0);" th:onclick="cfnGoToBrandMain([[${brandGroupInfo.brandGroupNo}]]);">브랜드 홈</a></li>
 					<li class="has_depth"><!-- depth_menu 있을 시 has_depth 클래스 추가 -->
-						<a href="#">상품</a>
+						<a href="javascript:void(0);" th:onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],[[${brandGroupInfo.cateGb}]]);">상품</a>
 						<!-- 상품 depth -->
 						<div class="depth_menu category">
 							<div class="head_category">
@@ -138,6 +138,7 @@
 	
 	// 브랜드 카테고리 생성
 	let fnCreateBrandCategory = function() {
+		console.log('fnCreateBrandCategory brandNo::'+[[${brandGroupInfo.brandGroupNo}]]);
 		$.getJSON('/display/brand/cate/list?brandGroupNo=' + [[${brandGroupInfo.brandGroupNo}]]
 			, function(result, status) {
 				if (status == 'success') {
@@ -181,21 +182,23 @@
 						tag+='	<ul className="clear event_con">';
 
 						$.each(result, function (idx, item){
-							tag+='		<li>';
-							tag+='			<div class="item_prod">';
-							tag+='				<div class="item_state">';
-							tag+='					<a href="javascript:void(0);" class=" itemLink" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\', \'\', \'\', \'' + contentsLocVal + '\');">';
-							tag+='						<div class="itemPic">';
-							tag+='						<img alt="BLACK-a" class=" vLHTC pd_img" src="'+imgUrl+'/'+item.sysImgNm+'">';
-							tag+='						</div>';
-							tag+='						<div class="itemName">'+item.goodsFullNm+'</div>';
-							tag+='						<p class="itemPrice">'+item.currPrice.addComma();
-							tag+='							<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
-							tag+='						</p>';
-							tag+='					</a>';
-							tag+='				</div>';
-							tag+='			</div>';
-							tag+='		</li>';
+							if(idx<3){
+								tag+='		<li>';
+								tag+='			<div class="item_prod">';
+								tag+='				<div class="item_state">';
+								tag+='					<a href="javascript:void(0);" class=" itemLink" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\', \'\', \'\', \'' + contentsLocVal + '\');">';
+								tag+='						<div class="itemPic">';
+								tag+='						<img alt="BLACK-a" class=" vLHTC pd_img" src="'+imgUrl+'/'+item.sysImgNm+'">';
+								tag+='						</div>';
+								tag+='						<div class="itemName">'+item.goodsFullNm+'</div>';
+								tag+='						<p class="itemPrice">'+item.currPrice.addComma();
+								tag+='							<span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
+								tag+='						</p>';
+								tag+='					</a>';
+								tag+='				</div>';
+								tag+='			</div>';
+								tag+='		</li>';
+							}
 						});
 
 						tag+='	</ul>';

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

@@ -699,6 +699,7 @@
 
 	// OUTLET 탭 생성
 	var fnGetOutletCategory = function (outletNm){
+		let formalGb = 'G009_20';
 		var tag = '';
 		tag += '<li class="has_depth">\n'; //depth_menu 있을 시 has_depth 클래스 추가
 		tag += '	<a href="javascript:void(0);" onclick="cfnGoToOutletMain(\'G032_103\',\'1713\')">' + outletNm + '</a>\n';
@@ -713,7 +714,7 @@
 		tag += '				<ul class="maintabs" >\n';
 		$.each(allCate, function(allCateIdx, allCateItem) {
 			tag += '					<li id="cate'+allCateItem.cate1No+'">\n';
-			tag += '						<a href="javascript:void(0);" onclick="cfnGoToCategoryMain(\'' + allCateItem.cateGb + '\',' + allCateItem.cate1No + ');">' + allCateItem.cate1Nm + '</a>\n';
+			tag += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + allCateItem.cateGb + '\',' + allCateItem.cate1No + ',\'\',\'\',\'\',\'\',\'' + formalGb + '\');">' + allCateItem.cate1Nm + '</a>\n';
 			tag += '					</li>\n';
 		});
 		tag += '				</ul>\n';

+ 5 - 5
src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html

@@ -49,7 +49,7 @@
 	<link rel="icon" href="/images/favicon-32x32.png" sizes="32x32" type="image/png"/>
 	<link rel="icon" href="/images/favicon-16x16.png" sizes="16x16" type="image/png"/>
 
-	<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css">
+	<link rel="stylesheet" type="text/css" href="/ux/pc/css/ion.rangeSlider.min.css"/>
 	<link rel="stylesheet" type="text/css" href="/ux/pc/css/slick.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/swiper.min.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/swiper.min.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/jquery-ui.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/jquery-ui.css"/>
@@ -60,10 +60,10 @@
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/main.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/main.css"/>
 	
 <!-- 	<script src="http://code.jquery.com/jquery-1.9.1.js"></script> -->
-	<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
-	<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
+	<script src="/ux/pc/js/jquery-1.11.0.min.js"></script>
+	<script src="/ux/pc/js/jquery-migrate-1.2.1.min.js"></script>
+	<script src="/ux/pc/js/swiper.min.js"></script>
+	<script src="/ux/pc/js/ion.rangeSlider.min.js"></script>
 	<script src="/ux/pc/js/jquery.modal.min.js"></script>
 	<script src="/ux/pc/js/slick.min.js"></script>
 	<script src="/ux/pc/js/jquery-ui.js"></script>

+ 90 - 0
src/main/webapp/WEB-INF/views/web/common/layout/NoMemberLayoutWeb.html

@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+
+<head th:replace="~{web/common/fragments/HeadWeb :: head}"></head>
+
+<body>
+
+<div class="skipComment">
+	<a href="#content">본문 바로가기</a>
+	<a href="#gnb">주메뉴 바로가기</a>
+	<a href="#footer">하단메뉴 바로가기</a>
+</div>
+	
+<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
+
+<!-- GNB -->
+<header id="header" th:replace="~{web/common/fragments/GnbWeb :: gnb}"></header>
+<!--// GNB -->
+
+<div id="container" class="container my">
+	<div class="breadcrumb">
+		<ul id="location">
+			<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+			<li class="bread_2depth"><a href="javascript:void(0);" onclick="fnGoToNoMemberOrderList()">마이페이지</a></li>
+		</ul>
+	</div>
+	<div class="wrap">
+		<!-- CONTENT AREA -->
+		<th:block layout:fragment="content"></th:block>
+		<!-- // CONTENT AREA -->
+		<form id="noMemberOrderListForm" name="noMemberOrderListForm" th:action="@{'/noMember/order/list/form'}" th:method="post">
+			<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+			<input type="hidden" name="ordNm" th:value="${ordNm}"/>
+			<input type="hidden" name="ordPhnno" th:value="${ordPhnno}"/>
+		</form>
+		<form id="noMemberCreListForm" name="noMemberCreListForm" th:action="@{'/noMember/cre/list/form'}" th:method="post">
+			<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+			<input type="hidden" name="ordNm" th:value="${ordNm}"/>
+			<input type="hidden" name="ordPhnno" th:value="${ordPhnno}"/>
+		</form>
+		<form id="exchangeForm" name="exchangeForm" th:action="@{'/noMember/exchange/form'}" th:method="post">
+			<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+			<input type="hidden" name="ordNm" th:value="${ordNm}"/>
+			<input type="hidden" name="ordPhnno" th:value="${ordPhnno}"/>
+			<input type="hidden" name="ordDtlNo"/>
+			<input type="hidden" name="delvFeeCd"/>
+		</form>
+		<form id="returnForm" name="returnForm" th:action="@{'/noMember/return/form'}" th:method="post">
+			<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+			<input type="hidden" name="ordNm" th:value="${ordNm}"/>
+			<input type="hidden" name="ordPhnno" th:value="${ordPhnno}"/>
+			<input type="hidden" name="ordDtlNo"/>
+			<input type="hidden" name="delvFeeCd"/>
+		</form>
+		<form id="cancelForm" name="cancelForm" th:action="@{'/noMember/cancel/form'}" th:method="post">
+			<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+			<input type="hidden" name="ordNm" th:value="${ordNm}"/>
+			<input type="hidden" name="ordPhnno" th:value="${ordPhnno}"/>
+			<input type="hidden" name="ordDtlNo"/>
+			<input type="hidden" name="delvFeeCd"/>
+		</form>
+	</div>
+</div>
+
+<!-- Footer -->
+<footer id="footer" th:replace="~{web/common/fragments/FooterWeb :: footer}"></footer>
+
+<!--교환상품 옵션변경 팝업 -->
+<div class="modal fade exchange_pop" id="exchangePop" tabindex="-1" role="dialog" aria-labelledby="exchangeLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<!--교환상품 옵션변경 팝업 내용 -->
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="exchangePop_close" class="close-modal">Close</a>
+</div>
+<!-- //교환상품 옵션변경 팝업 -->
+
+<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
+<script th:src="@{'/biz/mypage.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/mypage.js"></script>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+/*]]>*/
+</script>
+
+</body>
+</html>

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

@@ -61,10 +61,11 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	// 나이스 본인인증 후 콜백
-	var fnNiceCallBack = function(encData) {
+	var fnNiceCallBack = function(encData, authMethod) {
 		if (!gagajf.isNull(encData)) {
 			let custInfo = {};
 			custInfo.encData = encData;
+			custInfo.authMethod = authMethod;
 			let jsonData = JSON.stringify(custInfo);
 			gagajf.ajaxJsonSubmit('/customer/dormant/release', jsonData, fnRelaseCallback);
 		}

+ 12 - 15
src/main/webapp/WEB-INF/views/web/customer/NonCustOrderConfirmFormWeb.html

@@ -26,7 +26,7 @@
 				<h4>비회원 주문 조회</h4>
 			</div>
 			<div class="cont_body">
-				<form id="nonCustOrderForm" class="form_wrap form_col_c form_full" role="form">
+				<form id="nonCustOrderForm" class="form_wrap form_col_c form_full" role="form" action="/noMember/order/list/form" method="post">
 					<div class="form_info">
 						<span class="ico_content_order"></span>
 						<p>
@@ -45,7 +45,7 @@
 						<label class="input_label sr-only">휴대폰 번호</label>
 						<div class="ui_col_12">
 							<div class="input_wrap">
-								<input type="text" name="ordTelno" placeholder="휴대폰 번호" id="ordTelno" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
+								<input type="text" name="ordPhnno" placeholder="휴대폰 번호" id="ordPhnno" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
 							</div>
 						</div>
 					</div>
@@ -87,27 +87,24 @@
 		</div>
 	</div>
 </div>
-<form name="noMemberOrderForm" id="noMemberOrderForm" action="/noMember/order/list/form" method="post">
-	<input type="hidden" name="ordNo" />
-	<input type="hidden" name="ordNm" />
-	<input type="hidden" name="ordPhnno" />
-</form>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	$('#btnNonOrder').on('click', function () {
 		if (!gagajf.validation($('#nonCustOrderForm'))) {
 			return;
 		}
-
-		$('#noMemberOrderForm input[name=ordNo]').val($('#ordNo').val());
-		$('#noMemberOrderForm input[name=ordNm]').val($('#ordNm').val());
-		$('#noMemberOrderForm input[name=ordPhnno]').val($('#ordTelno').val());
-		
-		document.noMemberOrderForm.submit();
-		//mcxDialog.alert("개발중입니다.");
-		// mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.", { //입력정보가 틀릴경우(일치하지 않을경우)
+		gagajf.ajaxFormSubmit("/noMember/order/info/validation",'#nonCustOrderForm', fnOrderInfoCallback)
 	});
 
+	var fnOrderInfoCallback = function (result) {
+		if (result.isFind) {
+			$('#nonCustOrderForm').submit();
+		} else {
+			mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.");
+			return;
+		}
+	};
+
 /*]]>*/
 </script>
 

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

@@ -87,7 +87,7 @@
 
 				<!-- new_item -->
 				<th:block th:if="${contentsLoc=='007'}">
-					<div class="content wide new_item">
+					<div class="content wide new_item" th:if="${brandMainLayoutData.goodsList != null}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>
@@ -155,7 +155,7 @@
 
 				<!-- best_item -->
 				<th:block th:if="${contentsLoc=='008'}">
-					<div class="content best_item">
+					<div class="content best_item" th:if="${brandMainLayoutData.goodsList != null}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>
@@ -231,7 +231,7 @@
 
 				<!-- MD’s PICK -->
 				<th:block th:if="${contentsLoc=='009'}">
-					<div class="content md_item">
+					<div class="content md_item" th:if="${brandMainLayoutData.goodsList != null}">
 						<div class="cont_head">
 							<p class="displayH t_c" th:text="${contentsTitle}"></p>
 						</div>
@@ -378,52 +378,52 @@
 			</th:block>
 		</th:block>
 		<!-- main_tv -->
-		<div class="content wide main_tv">
-			<div class="cont_head">
-				<p class="displayH t_c">TBJ`S TV</p>
-			</div>
-			<div class="cont_body">
-				<div class="slide_wrap">
-					<div class="swiper-container post-tv">
-						<div class="swiper-wrapper">
-							<div class="swiper-slide">
-								<div class="movbox">
-									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="movbox">
-									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="movbox">
-									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="movbox">
-									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="movbox">
-									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="movbox">
-									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-								</div>
-							</div>
-						</div>
-						<div class="swiper-button-prev white"></div><!-- 클래스명 white 추가 -->
-						<div class="swiper-button-next white"></div>
-					</div>
-					<div class="swiper-pagination"></div>
-				</div>
-			</div>
-		</div>
+<!--		<div class="content wide main_tv">-->
+<!--			<div class="cont_head">-->
+<!--				<p class="displayH t_c">TBJ`S TV</p>-->
+<!--			</div>-->
+<!--			<div class="cont_body">-->
+<!--				<div class="slide_wrap">-->
+<!--					<div class="swiper-container post-tv">-->
+<!--						<div class="swiper-wrapper">-->
+<!--							<div class="swiper-slide">-->
+<!--								<div class="movbox">-->
+<!--									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--							<div class="swiper-slide">-->
+<!--								<div class="movbox">-->
+<!--									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--							<div class="swiper-slide">-->
+<!--								<div class="movbox">-->
+<!--									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--							<div class="swiper-slide">-->
+<!--								<div class="movbox">-->
+<!--									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/hqryeW6scd0?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--							<div class="swiper-slide">-->
+<!--								<div class="movbox">-->
+<!--									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/J7nowE2iTIM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--							<div class="swiper-slide">-->
+<!--								<div class="movbox">-->
+<!--									<iframe width="100%" height="100%" src="https://www.youtube.com/embed/cRiKrFk7FTM?rel=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>-->
+<!--								</div>-->
+<!--							</div>-->
+<!--						</div>-->
+<!--						<div class="swiper-button-prev white"></div>&lt;!&ndash; 클래스명 white 추가 &ndash;&gt;-->
+<!--						<div class="swiper-button-next white"></div>-->
+<!--					</div>-->
+<!--					<div class="swiper-pagination"></div>-->
+<!--				</div>-->
+<!--			</div>-->
+<!--		</div>-->
 		<!-- //main_tv -->
 	</div>
 </div>

+ 100 - 38
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -22,8 +22,8 @@
 	<div id="container" class="container dp">
 		<div class="breadcrumb">
 			<ul id="navArea">
-				<li class="bread_home"><a href="javascript:void(0);" id="navHome">홈</a></li>
-				<li class="bread_2depth" id="navNm">여성</li>
+				<li class="bread_home" id="idHome"><a href="javascript:void(0);" id="navHome">홈</a></li>
+				<li class="bread_2depth" id="navNm"></li>
 			</ul>
 		</div>
 		<div class="wrap">
@@ -472,26 +472,59 @@
 		}
 
 		var fnCreateCategoryList = function (){
-			$.getJSON('/display/gnb/tab/list'
-					, function(result, status) {
-						if (status == 'success') {
-							if (result.length > 0) {
-								$('#ulAllCate').html('');
-								$('#ulAllCate').append('<li><a href="javascript:void(0);">전체</a></li>\n');
-
-								let allCate = [[${allCateList}]];
-								$.each(result, function(idx, item) {
-									if (item.contentsType == 'C') { // 컨텐츠유형:카테고리
-										$.each(allCate, function(allCateIdx, allCateItem) {
-											if (item.cate1No == allCateItem.cate1No) {
-												$('#ulAllCate').append(fnGetCategoryList(allCateItem));
-											}
-										});
+			let actionUrl = '';
+			let brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			console.log('brand::'+[[${cateInfo.brandGroupNo}]]);
+			if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
+				actionUrl = '/display/gnb/tab/list';
+			}else{
+				actionUrl = '/display/brand/cate/list?brandGroupNo=' + [[${cateInfo.brandGroupNo}]];
+			}
+			
+			$.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';
+						$('#ulAllCate').html('');
+						if(formalGb=='G009_20'){
+							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\',\'\',\'\',\'\',\'\',\'\',\''+formalGb+'\');">전체</a></li>\n');
+						}else{
+							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\');">전체</a></li>\n');
+						}
+						
+						if(gagajf.isNull($("#searchGoodsForm").find("[name=cate1No]").val())){
+							$("#navArea").append('전체');
+							$("#formTitle").text('전체');
+						}
+
+						let allCate = [[${allCateList}]];
+						if(gagajf.isNull(brandGroupNo) || brandGroupNo == 0){
+							$.each(result, function(idx, item) {
+								if (item.contentsType == 'C') { // 컨텐츠유형:카테고리
+									$.each(allCate, function(allCateIdx, allCateItem) {
+										if (item.cate1No == allCateItem.cate1No) {
+											$('#ulAllCate').append(fnGetCategoryList(allCateItem));
+										}
+									});
+								}
+							});
+						}else{
+							$.each(result, function(idx, item) {
+								$.each(allCate, function(allCateIdx, allCateItem) {
+									if (item.cate1No == allCateItem.cate1No) {
+										$('#ulAllCate').append(fnGetCategoryList(allCateItem));
 									}
 								});
-							}
+							});
 						}
-					});
+					}
+					//}
+				});
 		}
 
 		let fnGetCategoryList = function (cate1){
@@ -505,71 +538,100 @@
 
 			var navNm = "";
 			var formTitle = "";
-
 			let tag = '';
 
 			if (cate1 != null) {
 				tag += '<li';
-				if(cate1.cate1No == cate1No){
+				if (cate1.cate1No == cate1No) {
 					tag += ' class="on"';
 				}
 				tag += '>\n';
 				tag += '	<a href="javascript:javascript:void(0);"';
-				if(cate1.cate1No == cate1No && cate2No == null){
+				if (cate1.cate1No == cate1No && cate2No == null) {
 					tag += ' class="on"';
 					formTitle = cate1.cate1Nm;
 					$("#formTitle").text(formTitle);
-					if(brandGroupNo==0){
+					if (brandGroupNo == 0) {
 						$("#navHome").attr('href', '/');
 						$("#navNm").text(cate1.cate1Nm);
-					}else{
-						$("#navHome").attr('onclick', 'cfnGoToBrandMain('+brandGroupNo+');');
+					} else {
+						$("#navHome").attr('onclick', 'cfnGoToBrandMain(' + brandGroupNo + ');');
 						$("#navNm").text(cate1.cate1Nm);
 					}
+				}else if(cate1.cate1No == cate1No && cate3No == null){
+					//if(formalGb=='G009_20'){
+					//	$("#navNm").text('아울렛');
+					//}else{
+					//	$("#navNm").text(cate1.cate1Nm);
+					//}
+					$("#navNm").text(cate1.cate1Nm);
+				}else if(cate3No != null){
+					$("#navNm").hide();
 				}
-				tag += '	onclick="cfnGoToGoodsList('+brandGroupNo+',\''+cateGb+'\','+cate1.cate1No+');" >' + cate1.cate1Nm + '</a>\n';
+				if(formalGb=='G009_20'){
+					tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',\'\',\'\',\'\',\'\',\'' + formalGb + '\');" >' + cate1.cate1Nm + '</a>\n';
+				}else{
+					tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ');" >' + cate1.cate1Nm + '</a>\n';
+				}
+				
 				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
 					tag += '<div class="sub_cate"';
-					if(cate1.cate1No == cate1No){
+					if (cate1.cate1No == cate1No) {
 						tag += ' style="display: block;"';
 					}
 					tag += '>\n';
 					tag += '	<ul>\n';
-					$.each(cate1.cate2List, function(idx2, cate2) {
+					$.each(cate1.cate2List, function (idx2, cate2) {
 						tag += '		<li';
-						if(cate2.cate2No == cate2No && cate3No == null){
+						if (cate2.cate2No == cate2No && cate3No == null) {
 							tag += ' class="on"';
 						}
 						tag += '		>\n';
 						tag += '		<a href="javascript:javascript:void(0);" ';
-						if(cate2.cate2No == cate2No && cate3No == null){
+						if (cate2.cate2No == cate2No && cate3No == null) {
 							tag += ' class="on"';
-							navNm = '<li class="bread_2depth" id="navNm2">'+cate2.cate2Nm+'</li>';
+							navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li>';
 							$("#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>';
+							$("#navArea").append(navNm);
+						}
+						if(formalGb=='G009_20'){
+							tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',\'\',\'\',\'\',\'' + formalGb + '\');">' + cate2.cate2Nm + '</a>\n';
+						}else{
+							tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
 						}
-						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){
+							if (cate2.cate2No == cate2No) {
 								tag += ' style="display: block;"';
 							}
 							tag += '>\n';
 							tag += '	<ul>\n';
-							$.each(cate2.cate3List, function (idx3, cate3){
+							$.each(cate2.cate3List, function (idx3, cate3) {
 								tag += '<li';
-								if(cate3.cate3No == cate3No && cate4No == null){
+								if (cate3.cate3No == cate3No && cate4No == null) {
 									tag += ' class="on"';
 								}
 								tag += '>';
 								tag += '		<a href="javascript:javascript:void(0);" ';
-								if(cate3.cate3No == cate3No && cate4No == null){
+								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>';
+									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'){
+									tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',\'\',\'\',\'' + formalGb + '\');">' + cate3.cate3Nm + '</a>';
+								}else{
+									tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>';
 								}
-								tag += ' onclick="cfnGoToGoodsList('+brandGroupNo+',\''+cateGb+'\','+cate1.cate1No+','+cate2.cate2No+','+cate3.cate3No+');">' + cate3.cate3Nm + '</a>';
 								tag += '</li>\n';
 							});
 							tag += '	</ul>\n';

+ 32 - 19
src/main/webapp/WEB-INF/views/web/display/OutletMainFormWeb.html

@@ -23,7 +23,7 @@
 	<div id="container" class="container dp">
 		<div class="breadcrumb">
 			<ul>
-				<li class="bread_home"><a href="index.html">홈</a></li>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
 				<li class="bread_2depth">아울렛</li>
 			</ul>
 		</div>
@@ -70,12 +70,12 @@
 					</div>
 					<div class="cont_body">
 						<div class="dp_cate_list">
-							<a href="">전체</a>
-							<a href="">여성</a>
-							<a href="">남성</a>
-							<a href="">유아동</a>
-							<a href="">골프</a>
-							<a href="">라이프</a>
+<!--							<a href="">전체</a>-->
+<!--							<a href="">여성</a>-->
+<!--							<a href="">남성</a>-->
+<!--							<a href="">유아동</a>-->
+<!--							<a href="">골프</a>-->
+<!--							<a href="">라이프</a>-->
 						</div>
 					</div>
 				</div>
@@ -168,7 +168,7 @@
 	<script th:inline="javascript">
 /*<![CDATA[*/
 	$(document).ready(function() {
-		//fnSetCategory1Depts();
+		fnSetCategory1Depts();
 	});
 
 	/* SLIDE - 상단 스크롤 슬라이드 배너 */
@@ -206,18 +206,31 @@
 // 카테고리1Depts 설정
 	var fnSetCategory1Depts = function() {
 		let allCate = [[${allCateList}]];
-		$.each(allCate, function(idx1, cate1) {
-			if ([[${params.cate1No}]] == cate1.cate1No) {
-				let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\', ' + cate1.cate1No + ');">전체</a>\n';
-				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
-					$.each(cate1.cate2List, function(idx2, cate2) {
-						tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
-					});
-				}
-				$('.dp_cate_list').html(tag);
-				$('.cate1Nm').html(cate1.cate1Nm);
-			}
+		let cateGb = 'G032_101';
+		let formalGb = 'G009_20';
+		let tag = '';
+		tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cateGb + '\',\'\',\'\',\'\',\'\',\'\',\'' + formalGb + '\');">전체</a>\n';
+		$.each(allCate, function(allCateIdx, allCateItem) {
+			console.log('param::'+[[${params.cate1No}]]);
+			//console.log('cate1.cate1No::'+cate1.cate1No);
+			//if ([[${params.cate1No}]] == cate1.cate1No) {
+			//	let tag = '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate1.cateGb + '\', ' + cate1.cate1No + ',\'\',\'\',\'\',\'\','+formalGb+');">전체</a>\n';
+			//	if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+			//		$.each(cate1.cate2List, function(idx2, cate2) {
+			//			tag += '<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + cate2.cateGb + '\',' + cate2.cate1No + ',' + cate2.cate2No + ',\'\',\'\',\'\','+formalGb+');">' + cate2.cate2Nm + '</a>\n';
+			//		});
+			//	}
+			//	$('.dp_cate_list').html(tag);
+			//	$('.cate1Nm').html(cate1.cate1Nm);
+			//}
+			tag += '					<li id="cate'+allCateItem.cate1No+'">\n';
+			tag += '						<a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'' + allCateItem.cateGb + '\',' + allCateItem.cate1No + ',\'\',\'\',\'\',\'\',\'' + formalGb + '\');">' + allCateItem.cate1Nm + '</a>\n';
+			tag += '					</li>\n';
+			
 		});
+		$('.dp_cate_list').html(tag);
+		$('.cate1Nm').html(cate1.cate1Nm);
+		
 	}
 /*]]>*/
 </script>

+ 63 - 74
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDescFormWeb.html

@@ -19,7 +19,7 @@
 </div>
 <div class="cont_body" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<!-- 상품설명 노출 -->
-	<div class="descrp_box">
+	<div class="descrp_box" th:if="${goodsInfo.tobeFormYn == 'Y'}">
 		<div class="desc_simple"> <!-- 상품 간략설명-->
 			<span class="tit_desc" th:if="${goodsInfo.goodsTitle  != null  and !goodsInfo.goodsTitle.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
 			<p class="ptxt01"th:if="${goodsInfo.goodsTitleDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitleDesc))}">
@@ -34,56 +34,57 @@
 		</div>
 	</div>
 	<!-- //상품설명 노출 -->
-	<!-- 관리자 에디터입력 내용   공지 html -->
+	
 	<!-- 관리자 에디터입력 내용   공지 html -->
 	<div class="mdhtml_box">
-		<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
-	<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
+			<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
+		<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
+			</th:block>
+		<!-- 관리자 에디터입력 내용   공지 html -->
+		<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+		<div class="movblock">
+			<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+			<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+			</th:block>
+			<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+			</th:block>
+		</div>
 		</th:block>
-	<!-- 관리자 에디터입력 내용   공지 html -->
-	<th:block th:each="goodsVideo, status : ${goodsVideoList}">
-	<div class="movblock">
-		<th:block th:if="${goodsVideo.videoGb == 'Y'}">
-		<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+		<!-- 공통상품베너 -->
+		<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
+		<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
+		<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+			<a th:href="${goodsBanner.strVar1}" target="_blank">
+			<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
+			</a>
 		</th:block>
-		<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+		<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+			<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
 		</th:block>
-	</div>
-	</th:block>
-	
-	<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
-	<div class="mdhtml_box">
-	<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
-	<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-		<a th:href="${goodsBanner.strVar1}" target="_blank">
-		<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-		</a>
-	</th:block>
-	<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-		<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-	</th:block>
-	</th:block>
-	
-	</div>
-	</th:block>
-	
-	<!-- 관리자 에디터입력 내용 노출  상단 html -->
-	<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+		</th:block>
+		</th:block>
+		
+		<!-- 관리자 에디터입력 내용 노출  상단 html -->
+		<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+		
+		<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
 	</div>	
+			
+	<th:block th:if="${goodsInfo.tobeFormYn == 'Y'}">
 	<!-- 착용컷 노출 -->
-	<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1.') 
-										or #strings.contains(goodsImgList,'_M2.')
-										or #strings.contains(goodsImgList,'_M3.')
-										or #strings.contains(goodsImgList,'_M4.')
-										or #strings.contains(goodsImgList,'_M5.')}">
+	<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1') 
+										or #strings.contains(goodsImgList,'_M2')
+										or #strings.contains(goodsImgList,'_M3')
+										or #strings.contains(goodsImgList,'_M4')
+										or #strings.contains(goodsImgList,'_M5')}">
 		<span class="tit_view">OUTFIT VIEW</span>
 		<span class="model_info">(모델정보 : 185cm / 78kg / XL 착용)</span>
 		<div class="view">
-			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1.') 
-																		or #strings.contains(goodsImg.sysImgNm,'_M2.')
-																		or #strings.contains(goodsImg.sysImgNm,'_M3.')
-																		or #strings.contains(goodsImg.sysImgNm,'_M4.')
-																		or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
+			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1') 
+																		or #strings.contains(goodsImg.sysImgNm,'_M2')
+																		or #strings.contains(goodsImg.sysImgNm,'_M3')
+																		or #strings.contains(goodsImg.sysImgNm,'_M4')
+																		or #strings.contains(goodsImg.sysImgNm,'_M5')}">
 			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
@@ -91,64 +92,52 @@
 	
 	<!-- //착용컷 노출 -->
 	<!-- 상품컷 노출 -->
-	<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01.') 
-										or #strings.contains(goodsImgList,'_02.')
-										or #strings.contains(goodsImgList,'_D1.')
-										or #strings.contains(goodsImgList,'_D2.')
-										or #strings.contains(goodsImgList,'_D3.')
-										or #strings.contains(goodsImgList,'_D4.')
-										or #strings.contains(goodsImgList,'_D5.')}">
+	<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01') 
+										or #strings.contains(goodsImgList,'_02')
+										or #strings.contains(goodsImgList,'_D1')
+										or #strings.contains(goodsImgList,'_D2')
+										or #strings.contains(goodsImgList,'_D3')
+										or #strings.contains(goodsImgList,'_D4')
+										or #strings.contains(goodsImgList,'_D5')}">
 		<span class="tit_view">PRODUCT VIEW</span>
 		<div class="view">
-			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01.') 
-																		or #strings.contains(goodsImg.sysImgNm,'_02.')
-																		or #strings.contains(goodsImg.sysImgNm,'_D1.')
-																		or #strings.contains(goodsImg.sysImgNm,'_D2.')
-																		or #strings.contains(goodsImg.sysImgNm,'_D3.')
-																		or #strings.contains(goodsImg.sysImgNm,'_D4.')
-																		or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
+			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01') 
+																		or #strings.contains(goodsImg.sysImgNm,'_02')
+																		or #strings.contains(goodsImg.sysImgNm,'_D1')
+																		or #strings.contains(goodsImg.sysImgNm,'_D2')
+																		or #strings.contains(goodsImg.sysImgNm,'_D3')
+																		or #strings.contains(goodsImg.sysImgNm,'_D4')
+																		or #strings.contains(goodsImg.sysImgNm,'_D5')}">
 			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 			</th:block>
 		</div>
 	</div>
 	<!-- //상품컷 노출 -->
 	<!-- 원단 노출 -->
-	<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1.')}">
+	<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1')}">
 		<span class="tit_view">FABRIC</span>
 		<div class="view">
-			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
+			<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1')}">
 			<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720}" alt="">
 			</th:block>
 		</div>
 	</div>
 	<!-- //원단 노출 -->
 	<!-- 라벨 노출 -->
-	<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1.') 
-										or #strings.contains(goodsImgList,'_L2.')}">
+	<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1') 
+										or #strings.contains(goodsImgList,'_L2')}">
 		<span class="tit_view">LABEL INFO</span>
 		<div class="view">
 			<span>
-				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1.') 
-																		or #strings.contains(goodsImg.sysImgNm,'_L2.')}">
+				<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1') 
+																		or #strings.contains(goodsImg.sysImgNm,'_L2')}">
 				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=250}" alt="">
 				</th:block>
 			</span>
 		</div>
 	</div>
 	<!-- //라벨 노출 -->
-	
-	<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
-		<div class="view">
-			<th:block th:each="goodsImg, status : ${goodsImgList}" >
-				<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
-				</th:block>
-		</div>
-	</div>
-	
-		<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" >
-	<!-- 상세 html 이 존재하면  -->
-	<div class="mdhtml_box" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></div>
-		</th:block>
+	</th:block>
 		
 	<!-- 관리자 에디터입력 내용 노출  하다단 html -->
 	<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>

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

@@ -18,7 +18,7 @@
  -->
 <body>
 <th:block layout:fragment="content">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
+<script src="/ux/pc/js/ion.rangeSlider.min.js"></script>
 <script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 <div id="container" class="container pd deal" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="wrap">

+ 67 - 73
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -53,9 +53,9 @@
 									</th:block>
 									<th:block th:each="goodsImg, status : ${goodsImgList}">
 										<div class="swiper-slide" th:classappend="${status.first and videoYn == 'N'}? 'on' : ''"  th:with="count=${(videoYn == 'Y')?  (status.count +1): status.count }"
-																th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
-																		or #strings.contains(goodsImg.sysImgNm,'_L1.')
-																		or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
+																	th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1') 
+																			or #strings.contains(goodsImg.sysImgNm,'_L1')
+																			or #strings.contains(goodsImg.sysImgNm,'_L2'))}">
 											<a th:href="${'#navLocate'+ count}">
 												<span class="thumb">
 												<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
@@ -86,9 +86,9 @@
 								<th:block th:each="goodsImg, status : ${goodsImgList}" >
 								<th:block th:with="count=${(videoYn == 'Y')?  (status.count +1): status.count }">
 								<li th:id="${'navLocate'+ count}"  th:classappend="${status.first and videoYn == 'N'}? 'on' : ''" 
-									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1.') 
-												or #strings.contains(goodsImg.sysImgNm,'_L1.')
-												or #strings.contains(goodsImg.sysImgNm,'_L2.'))}">
+									th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1') 
+												or #strings.contains(goodsImg.sysImgNm,'_L1')
+												or #strings.contains(goodsImg.sysImgNm,'_L2'))}">
 									<a href="javascript:void(0);">
 										<span class="thumb">
 											<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
@@ -450,7 +450,7 @@
 			</div>
 			<div class="cont_body">
 				<!-- 상품설명 노출 -->
-				<div class="descrp_box">
+				<div class="descrp_box" th:if="${goodsInfo.tobeFormYn == 'Y'}">
 					<div class="desc_simple"> <!-- 상품 간략설명-->
 						<span class="tit_desc" th:if="${goodsInfo.goodsTitle  != null  and !goodsInfo.goodsTitle.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
 						<p class="ptxt01"th:if="${goodsInfo.goodsTitleDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitleDesc))}">
@@ -467,55 +467,57 @@
 				<!-- //상품설명 노출 -->
 				<!-- 관리자 에디터입력 내용   공지 html -->
 				<div class="mdhtml_box">
-					<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
-				<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
+						<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
+					<th:block  th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
+						</th:block>
+					<!-- 관리자 에디터입력 내용   공지 html -->
+					<th:block th:each="goodsVideo, status : ${goodsVideoList}">
+					<div class="movblock">
+						<th:block th:if="${goodsVideo.videoGb == 'Y'}">
+						<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+						</th:block>
+						<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+						</th:block>
+					</div>
 					</th:block>
-				<!-- 관리자 에디터입력 내용   공지 html -->
-				<th:block th:each="goodsVideo, status : ${goodsVideoList}">
-				<div class="movblock">
-					<th:block th:if="${goodsVideo.videoGb == 'Y'}">
-					<iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+					<!-- 공통상품베너 -->
+					<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
+					<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
+					<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+						<a th:href="${goodsBanner.strVar1}" target="_blank">
+						<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
+						</a>
 					</th:block>
-					<th:block th:unless="${goodsVideo.videoGb == 'Y'}">
+					<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
+						<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
 					</th:block>
-				</div>
-				</th:block>
-				<!-- 공통상품베너 -->
-				<th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
-				<div class="mdhtml_box">
-				<th:block th:each="goodsBanner, status : ${goodsBannerList}" >
-				<th:block th:if="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-					<a th:href="${goodsBanner.strVar1}" target="_blank">
-					<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-					</a>
-				</th:block>
-				<th:block th:unless="${goodsBanner.strVar1 != null and  not #strings.equals(goodsBanner.strVar1, '#')}">
-					<img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
-				</th:block>
-				</th:block>
-				
-				</div>
-				</th:block>
-				
-				<!-- 관리자 에디터입력 내용 노출  상단 html -->
-				<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+					</th:block>
+					</th:block>
+					
+					<!-- 관리자 에디터입력 내용 노출  상단 html -->
+					<th:block  th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
+					
+					<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
 				</div>	
+					
+				<th:block th:if="${goodsInfo.tobeFormYn == 'Y'}">
+				
 				<!-- 착용컷 노출 -->
-				<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1.') 
-													or #strings.contains(goodsImgList,'_M2.')
-													or #strings.contains(goodsImgList,'_M3.')
-													or #strings.contains(goodsImgList,'_M4.')
-													or #strings.contains(goodsImgList,'_M5.')}">
+				<div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1') 
+													or #strings.contains(goodsImgList,'_M2')
+													or #strings.contains(goodsImgList,'_M3')
+													or #strings.contains(goodsImgList,'_M4')
+													or #strings.contains(goodsImgList,'_M5')}">
 					<span class="tit_view">OUTFIT VIEW</span>
 					<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${status.first}">
 					<span class="model_info" th:text="${goodsImg.modelInfo}">(모델정보 : 185cm / 78kg / XL 착용)</span>
 					</th:block>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1.') 
-																					or #strings.contains(goodsImg.sysImgNm,'_M2.')
-																					or #strings.contains(goodsImg.sysImgNm,'_M3.')
-																					or #strings.contains(goodsImg.sysImgNm,'_M4.')
-																					or #strings.contains(goodsImg.sysImgNm,'_M5.')}">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1') 
+																					or #strings.contains(goodsImg.sysImgNm,'_M2')
+																					or #strings.contains(goodsImg.sysImgNm,'_M3')
+																					or #strings.contains(goodsImg.sysImgNm,'_M4')
+																					or #strings.contains(goodsImg.sysImgNm,'_M5')}">
 						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
@@ -523,13 +525,13 @@
 				
 				<!-- //착용컷 노출 -->
 				<!-- 상품컷 노출 -->
-				<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01.') 
-													or #strings.contains(goodsImgList,'_02.')
-													or #strings.contains(goodsImgList,'_D1.')
-													or #strings.contains(goodsImgList,'_D2.')
-													or #strings.contains(goodsImgList,'_D3.')
-													or #strings.contains(goodsImgList,'_D4.')
-													or #strings.contains(goodsImgList,'_D5.')}">
+				<div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01') 
+													or #strings.contains(goodsImgList,'_02')
+													or #strings.contains(goodsImgList,'_D1')
+													or #strings.contains(goodsImgList,'_D2')
+													or #strings.contains(goodsImgList,'_D3')
+													or #strings.contains(goodsImgList,'_D4')
+													or #strings.contains(goodsImgList,'_D5')}">
 					<span class="tit_view">PRODUCT VIEW</span>
 					<div class="view">
 						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01.') 
@@ -545,45 +547,33 @@
 				</div>
 				<!-- //상품컷 노출 -->
 				<!-- 원단 노출 -->
-				<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1.')}">
+				<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1')}">
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1.')}">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1')}">
 						<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
 						</th:block>
 					</div>
 				</div>
 				<!-- //원단 노출 -->
 				<!-- 라벨 노출 -->
-				<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1.') 
-													or #strings.contains(goodsImgList,'_L2.')}">
+				<div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1') 
+													or #strings.contains(goodsImgList,'_L2')}">
 					<span class="tit_view">LABEL INFO</span>
 					<div class="view">
 						<span>
-							<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1.') 
-																					or #strings.contains(goodsImg.sysImgNm,'_L2.')}">
+							<th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1') 
+																					or #strings.contains(goodsImg.sysImgNm,'_L2')}">
 							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=250'}" alt="">
 							</th:block>
 						</span>
 					</div>
 				</div>
 				<!-- //라벨 노출 -->
-				
-				<div class="view_detail_box" th:if="${not #strings.contains(goodsImgList,'_01.')}">
-					<div class="view">
-						<th:block th:each="goodsImg, status : ${goodsImgList}" >
-							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="">
-							</th:block>
-					</div>
-				</div>
-				
-					<th:block th:if="${goodsInfo.goodsDesc != null  and !goodsInfo.goodsDesc.empty}" >
-				<!-- 상세 html 이 존재하면  -->
-				<div class="mdhtml_box" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></div>
-					</th:block>
+				</th:block>
 					
 				<!-- 관리자 에디터입력 내용 노출  하다단 html -->
-				<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>
+				<div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null  and !goodsInfo.goodsDownDesc.empty  and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>
 					
 				<!-- 브랜드 노출 -->
 				<div class="brand_box">
@@ -1529,6 +1519,10 @@
 					if (minutes < '10') { minutes = '0' + minutes; }
 					if (seconds < '10') { seconds = '0' + seconds; }
 					
+					if (Number(days) > 0 ){
+						hours = Number(hours) + (Number(days) * 24);
+					}
+					
 					$('#d-hours').html(hours);
 					$('#d-minutes').html(minutes);
 					$('#d-seconds').html(seconds);		

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

@@ -274,7 +274,6 @@
 					xhr.setRequestHeader("AJAX"			, "true");
 					xhr.setRequestHeader('Accept'		, 'application/json');
 					xhr.setRequestHeader('Content-Type'	, 'application/json');
-					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
 					$("#refundPop .modal-dialog .modal-content").html(result);

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

@@ -159,11 +159,11 @@
 													<span id="recipPhnno" th:text="${oneData.recipPhnno}"></span>
 												</li>
 												<li>
-													<span>서울시 영등포구 은행로 11, 8층 (여의도동, 일신빌딩)</span>
+													<span id="recipAddr" th:text="|${oneData.recipBaseAddr} ${oneData.recipDtlAddr}|"></span>
 													<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35' or oneData.chgOrdDtlStat == 'G013_40'}" onclick="fnChangeAddr('recip');"><span>배송지 변경</span></button>
 												</li>
 												<li>
-													배송요청 사항&nbsp;:&nbsp;<span>직접 받고 부재 시 문 앞</span>
+													배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${oneData.delvMemo}">직접 받고 부재 시 문 앞</span>
 													<button type="button" class="btn_underline" th:if="${oneData.chgOrdDtlStat == 'G013_20' or oneData.chgOrdDtlStat == 'G013_25' or oneData.chgOrdDtlStat == 'G013_30' or oneData.chgOrdDtlStat == 'G013_35' or oneData.chgOrdDtlStat == 'G013_40'}" onclick="fnChangeMemo('recip')"><span>변경하기</span></button>
 												</li>
 											</ul>
@@ -202,7 +202,7 @@
 														<button type="button" class="btn btn_default btn_sm" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" onclick="fnChangeAddr('chger');"><span>회수지 변경</span></button>
 													</li>
 													<li>
-														배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${oneData.delvMemo}"></span>
+														배송요청 사항&nbsp;:&nbsp;<span id="chgerRtnMemo" th:text="${oneData.chgerRtnMemo}"></span>
 														<button type="button" class="btn_underline" th:if="${oneData.chgStat == 'G685_20' or oneData.chgStat == 'G685_21'}" onclick="fnChangeMemo('chger');"><span>변경하기</span></button>
 													</li>
 												</ul>

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

@@ -141,7 +141,6 @@
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -169,7 +168,6 @@
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsModifyPop .modal-dialog .modal-content").html(result);

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

@@ -51,7 +51,7 @@
 							<!-- 사용가능한 비밀번호일경우 -->
 							<p id="avlPwd" class="hide">
 								<span class="c_black2">
-									<i class="ico ico_check black"></i>사용 가능한 비밀번호입니다
+									<i class="ico ico_check black"></i>사용 가능한 비밀번호입니다.
 								</span>
 							</p>
 							<!-- //사용가능한 비밀번호일경우 -->

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

@@ -166,6 +166,8 @@
 		let $leaveIncomplete = $('#leaveIncomplete');
 		let $btnSaveSecede = $('#btnSaveSecede');
 		let $btnConfirm = $('#btnConfirm');
+		let $secedeCustForm = $('#secedeCustForm');
+		let $subH3 = $('.subH3');
 
 		let isPossible = true;
 
@@ -198,33 +200,40 @@
 		$('#secedeCustForm input[name=custId]').val(custIdText);
 
 		if (orderTotal > 0) {
+			$('#ordCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (orderStatInfo.cancelCount > 0) {
+			$('#cnclCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (orderStatInfo.returnCount > 0) {
+			$('#rtnCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (orderStatInfo.exchangeCount > 0) {
+			$('#exCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (isPossible) {
+			$subH3.show();
+			$secedeCustForm.show();
 			$btnConfirm.hide();
 			$leaveIncomplete.hide();
 			$btnSaveSecede.show();
 		} else {
+			$subH3.hide();
+			$secedeCustForm.hide();
 			$btnSaveSecede.hide();
 			$leaveIncomplete.show();
 			$btnConfirm.show();
 		}
 
 
-
 	}
 
 	$('#btnSaveSecede').on('click', function () {

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

@@ -254,8 +254,9 @@
 									<div class="order_gift">
 										<span class="title">사은품</span>
 										<ul>
-											<li th:each="freeGift, status : ${order.freeGiftList}" th:text="${freeGift.goodsNm}">
-												<span th:text="|(-${#numbers.formatInteger(freeGift.usePoint, 1, 'COMMA')}P)|"></span>
+											<li th:each="freeGift, status : ${order.freeGiftList}">
+												<th:block th:text="${freeGift.goodsNm}"></th:block>
+												<span th:if="${freeGift.usePoint > 0}" th:text="|(-${#numbers.formatInteger(freeGift.usePoint, 1, 'COMMA')}P)|"></span>
 											</li> 
 										</ul>
 									</div>
@@ -536,7 +537,6 @@
 					xhr.setRequestHeader("AJAX"			, "true");
 					xhr.setRequestHeader('Accept'		, 'application/json');
 					xhr.setRequestHeader('Content-Type'	, 'application/json');
-					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
 					$("#refundPop .modal-dialog .modal-content").html(result);
@@ -589,7 +589,7 @@
 						// 전체취소 처리
 						gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
 							cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
-						});
+						}, true);
 					} else {
 						mcxDialog.alert('이미 배송처리 되어 전체취소 처리에 실패 하였습니다.');
 					}
@@ -656,13 +656,11 @@
 		$('#orderDetailForm input[name=bankCd]').val(result.bankCd);
 		
 		// 반품처리
-		fnReturn();
+		fnAllCancel();
 	}
 
 	// 상품권 현금영수증 신청 처리
 	var fnRequestCashReceipt = function(param) {
-		// TODO
-		// 현금영수증 신청 처리
 		let url = '/mypage/cash/receipts/request';
 		let ordNo = $(param).attr('ordNo');
 		

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

@@ -352,7 +352,7 @@
 		fnSetMypageLnbList(2);
 
 		// 마이페이지 location 설정
-		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRE_LIST', '반품 신청');
+		fnSetMypageLocation('취소/반품/교환 내역', '_PAGE_MYPAGE_CRE_LIST', '반품 신청');
 
 		// 반품상품 수량 셀렉트박스 활성화
 		//var goods_count_selecter = new sCombo('.myOrderView .part_goods .select_custom.select_count');
@@ -425,7 +425,6 @@
 					xhr.setRequestHeader("AJAX"			, "true");
 					xhr.setRequestHeader('Accept'		, 'application/json');
 					xhr.setRequestHeader('Content-Type'	, 'application/json');
-					gagajf.showProgressbar(true);
 				},
 				success 	: function(result) {
 					$("#refundPop .modal-dialog .modal-content").html(result);

+ 68 - 24
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -381,6 +381,9 @@
 <script th:inline="javascript">
 let reviewList = [[${reviewInfo}]];
 let reviewStat = [[${reviewStat}]];
+let reviewAttach = [[${alreadyReviewAttach}]];
+console.log(reviewAttach);
+let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
 // 별점 class="on"
 var $starEls = $('#star button#starBtn');
 var rate = 0;
@@ -514,28 +517,40 @@ var reviewUpdate = function() {
         cancelBtnText: "취소",
         sureBtnText: "확인",
         sureBtnClick: function(){
-        	gagajf.ajaxFormSubmit($('#reviewForm').prop('action'), '#reviewForm', fnUpdateCallback);
+        	gagajf.ajaxFormSubmit("/mypage/review/update", '#reviewForm', fnUpdateCallback);
         }
     });
 	
 }
 var fnSaveCallback = function (result) {
 	if(result.status == "200"){
-		mcxDialog.confirm("상품리뷰를 등록 하였습니다. 150P 적립 예정입니다.", {
-			sureBtnText: "확인",
-			sureBtnClick: function() { 
-				//cfnGoToPage(_PAGE_MYPAGE_REVIEW);
-			}
-		});
+		if (document.getElementsByName("kufKeyArr").length>0 || document.getElementsByName("orgFileNmArr").length>0) {
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 350P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}else{
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 150P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}
 	}
 }
 
 var fnUpdateCallback = function (result) {
 	if(result.status == "200"){
-		//포인트 예정금액 고지해야함
-		//cfnGoToPage(_PAGE_MYPAGE_REVIEW);
-		//$("#alreadyReview").trigger('click');
-		//mcxDialog.alert("상품 리뷰를 수정하였습니다.");
+		mcxDialog.confirm("상품 리뷰를 수정하였습니다.", {
+			sureBtnText: "확인",
+			sureBtnClick: function() { 
+				cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+			}
+		}); 
+		
 	}
 }
 
@@ -560,6 +575,16 @@ var fnChooseFile = function(obj) {
 	
 	// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
 	var file = obj.files[0];
+	
+/* 	if (!gagajf.isNull(file.size) && Number(file.size) > (10 * 1000000)) {        
+		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {                          
+			sureBtnText: "확인",                                                    
+			sureBtnClick: function() {                                            
+				$(obj).parent('.imgUpload').find('.removes').trigger('click');    
+			}                                                                     
+		});                                                                       
+		return false;                                                             
+	}                 */                                                             
 
 	if (!gagajf.isNull(file.name)) {
 		var extension = "\.(jpg|jpeg|png)$";
@@ -573,9 +598,10 @@ var fnChooseFile = function(obj) {
 						}
 				); 
 		}else if((new RegExp("mp4", "i")).test(file.name)){
-			$(".pics").children().eq(0).append("<input type='hidden' name='kufKey' id='kufKey"+(picLength+1)+"'>");
-			$(".pics").children().eq(0).append("<input type='hidden' name='kmcKey' id='kmcKey"+(picLength+1)+"'>");
-			//gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
+			setTimeout(function(){
+				$(".pics").children().eq(0).append("<input type='hidden' name='kufKeyArr' id='kufKey"+(picLength+1)+"'>");
+				gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
+			}, 2000);
 		}else{
 			mcxDialog.alertC('첨부할 수 없는 파일 형식입니다.', {
 				sureBtnText: "확인",
@@ -587,15 +613,7 @@ var fnChooseFile = function(obj) {
 		}
 	}
 	// 이거 왜 안먹히지 
-//	if (!gagajf.isNull(file.size) && Number(file.size) > (10 * 1000000)) {
-//		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {
-//			sureBtnText: "확인",
-//			sureBtnClick: function() {
-//				$(obj).parent('.imgUpload').find('.removes').trigger('click');
-//			}
-//		});
-//		return false;
-//	} 
+
 	
 	// 파일 업로드
 /* 	 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
@@ -619,7 +637,7 @@ $(document).ready(function() {
 	}
 	
 	 if(reviewStat=='u'){
-		 var reviewScore = reviewList.score -1;
+		 var reviewScore = reviewList.score-1;
 		 $("#score").val(reviewScore);
 		 rating(reviewScore);
 		$("#reviewForm input[name=height]").val(reviewList.height);
@@ -672,6 +690,32 @@ $(document).ready(function() {
 		}else if(reviewList.scoreBall == "3"){
 			$('#reviewForm input:radio[name=scoreBall]:radio[value="3"]').prop('checked', true);
 		}
+		
+		if(reviewAttach.length>0){
+			for (var i = 0; i < reviewAttach.length; i++) {
+				if(reviewAttach[i].reviewSq == reviewList.reviewSq){
+					if(reviewAttach[i].fileGb == "I"){
+						$("<span class=\"pics\">" +
+								"<img class=\"picsThumbs\" src=\"" + reviewUrl + '/' + reviewAttach[i].sysFileNm + "\" />" +
+								"<input type='hidden' name='orgFileNmArr' value='"+reviewAttach[i].orgFileNm+"'>" +
+								"<input type='hidden' name='sysFileNmArr' value='"+reviewAttach[i].sysFileNm+"'>" +
+								"<br/><span class=\"removes\">Removes image</span>" +
+								"</span>").insertAfter("#fileAdd");
+					}else{
+						$("<span class=\"pics\">" +
+								"<img class=\"picsThumbs\" src=\"" + _kollusMediaUrl + '/' + attachList[i].kmcKey + "\" />" +
+								"<input type='hidden' name='kufKeyArr' value='" + attachList[i].kmcKey + "'>" + 
+								"<br/><span class=\"removes\">Removes image</span>" +
+								"</span>").insertAfter("#fileAdd");
+					}
+				}
+				
+			}
+			$(".removes").click(function(){
+				$(this).parent(".pics").remove();
+			});
+			
+		}
 	} 
 	// 마이페이지 LNB 설정
 	fnSetMypageLnbList(7);

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

@@ -163,7 +163,7 @@
 				html += '			<div class="order_desc">                                                                                      ';
 				html += '				<div class="goods_box">                                                                                   ';
 				html += '					<div class="gd_item">	                                                                              ';
-				html += '						<a href="">                                                                                       ';
+				html += '						<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">                                                                                       ';
 				html += '							<span class="thumb">                                                                          ';
 				html += '								<img src="' + imageUrl + '/' + item.sysImgNm + '"  width="100%" alt="">  ';
 				html += '							</span>                                                                                       ';
@@ -227,7 +227,7 @@
 				html+='				<div class="order_desc">';
 				html+='					<div class="goods_box">';
 				html+='						<div class="gd_item">	';
-				html+='							<a href="">';
+				html+='							<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" >';
 				html+='								<span class="thumb">';
 				html+='									<img src="' + imageUrl + '/' + item.sysImgNm + '" width="100%" alt="">';
 				html+='								</span>';
@@ -322,7 +322,6 @@
 					html+='								<ul>';
 					for (var i = 0; i < attachList.length; i++) {
 						if (attachList[i].reviewSq == item.reviewSq) {
-
 						html+='									<li>';
 						html+='										<a onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">';
 						html+='											<div class="pic">';

+ 404 - 0
src/main/webapp/WEB-INF/views/web/mypage/NoMemberCancelFormWeb.html

@@ -0,0 +1,404 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/MypageLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NoMemberCancelFormWeb.html
+ * @desc    : 비회원 > 취소신청 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.28   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content myOrderView">
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+					<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
+			</div>
+			<div class="cont">
+				<form id="cancelForm">
+					<input type="hidden" name="accountNo" th:value="${oneData.accountNo}"/>
+					<input type="hidden" name="accountNm" th:value="${oneData.accountNm}"/>
+					<input type="hidden" name="bankCd" th:value="${oneData.bankCd}"/>
+					<div class="sec_head">
+						<h3 class="subH1">주문취소</h3>
+						<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${oneData.ordNo}"></em></span>
+					</div>
+					<div class="sec_body">
+						<div class="part_goods">
+							<div class="goods_head">
+								<p>주문일 <span th:text="${oneData.ordDt}"></span></p>
+							</div>
+							<div class="goods_cont">
+								<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+								<!-- 주문상품 -->
+								<div class="goods_info">
+									<div class="order_desc">
+										<div class="goods_box">
+											<div class="gd_item">
+												<a href="javascript:void(0)" th:attr="goodsCd=${cancel.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+													<span class="thumb">
+														<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
+													</span>
+													<p>
+														<span class="brand" th:text="${cancel.brandNm}"></span>
+														<span class="tag primary" th:if="${cancel.shotDelvYn == 'Y'}">총알배송</span>
+														<span class="tag" th:if="${cancel.shotDelvYn == 'N' and cancel.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+														<span class="tag" th:if="${cancel.selfGoodsYn == 'N'}">업체직배송</span>
+													</p>
+													<p>
+														<span class="name" th:text="${cancel.goodsNm}"></span>
+													</p>
+												</a>
+											</div>
+											<div class="gd_opt">
+												<div class="option_wrap">
+													<span class="title sr-only">주문 옵션</span>
+													<span class="option" th:if="${cancel.goodsType == 'G056_S'}" th:each="option, status : ${cancel.colorNmArr}" th:text="|${cancel.itemNmArr[status.index]} / ${option} / ${cancel.optCd2Arr[status.index]}|"></span>
+													<span class="option" th:unless="${cancel.goodsType == 'G056_S'}" th:text="|${cancel.colorNm} / ${cancel.optCd2}|"></span>
+												</div>
+											</div>
+											<div class="gd_calc">
+												<p>
+													<span class="count"><em th:text="${cancel.ordQty - cancel.cnclRtnQty}"></em>개</span>
+												</p>
+												<p>
+													<span class="price_org" th:if="${(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt) > (cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(cancel.ordAmt - cancel.cnclRtnAmt - cancel.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+													<span class="price_sale"><em th:text="${#numbers.formatInteger(cancel.realOrdAmt + cancel.pntDcAmt + cancel.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
+												</p>
+											</div>
+										</div>
+										<div class="button_box">
+											<div class="count_modify">
+												<span class="txt">수량</span>
+												<form class="form_wrap">
+													<div class="form_field">
+														<div class="select_custom select_count">
+															<div class="combo">
+																<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${cancel.ordDtlNo}, ordCanChgQty=${cancel.ordCanChgQty}"/>
+																<div class="select">선택</div>
+																<ul class="list">
+																	<li class="selected" qty="0" onclick="fnChangeCancelQty(this);">선택</li>
+																	<li th:if="${cancel.ordCanChgQty > 0}" th:each="num : ${#numbers.sequence(1,cancel.ordCanChgQty)}" th:attr="qty=${num}" th:text="${num}" onclick="fnChangeCancelQty(this);"></li>
+																</ul>
+															</div>
+														</div>
+													</div>
+												</form>
+											</div>
+										</div>
+									</div>
+									<div class="order_text">
+										<p>취소하실 수량을 선택하신 후 주문 취소를 하실 수 있습니다.</p>
+									</div>
+								</div>
+								<!-- //주문상품 -->
+								</th:block>
+							</div>
+						</div>
+						<h4 class="subH3">환불정보</h4>
+						<div class="tbl type6">
+							<table>
+								<colgroup>
+									<col width="50%">
+									<col width="50%">
+								</colgroup>
+								<tr>
+									<td>
+										<dl>
+											<div>
+												<dt>환불 예정 금액</dt>
+												<dd>
+													<div class="price">
+														<span class="return_total_price"><em id="returnAmt">0</em>원</span>
+													</div>
+												</dd>
+											</div>
+											<div class="include_item"> <!-- 할인항목 표기 class명 include_item -->
+												<dt>상품 취소 금액</dt>
+												<dd><em id="goodsCancelAmt">0</em>원</dd>
+											</div>
+											<div class="include_item">
+												<dt>배송비</dt>
+												<dd><em id="deliveryFee">0</em>원</dd>
+											</div>
+											<div class="include_item">
+												<dt>할인 금액 차감</dt>
+												<dd><em id="deductDcAmt">0</em>원</dd>
+											</div>
+										</dl>
+									</td>
+									<td>
+										<dl>
+											<div>
+												<dt>환불 수단</dt>
+												<dd th:if="${paymentInfo.pgGb == 'KCP'}" th:text="${paymentInfo.payMeansNm}"></dd>
+												<dd th:if="${paymentInfo.pgGb == 'NAVER'}" th:text="|네이버페이|"></dd>
+												<dd th:if="${paymentInfo.pgGb == 'KAKAO'}" th:text="|카카오페이|"></dd>
+												<dd th:if="${paymentInfo.pgGb == 'PAYCO'}" th:text="|PAYCO|"></dd>
+											</div>
+											<div>
+												<dt>결제 금액 환불</dt>
+												<dd>
+													<em id="refundPayAmt">0</em>원
+												</dd>
+											</div>
+											<div>
+												<dt>포인트 환불</dt>
+												<dd>
+													<em id="refundPoint">0</em>P
+												</dd>
+											</div>
+											<div>
+												<dt>상품권 환불</dt>
+												<dd>
+													<em id="refundGiftCard">0</em>원
+												</dd>
+											</div>
+										</dl>
+									</td>
+								</tr>
+							</table>
+						</div>
+						<div class="txt_info">
+							<ul>
+								<li>
+									카드사로 결제 취소 요청이 전달된 후 환불까지는 평일 기준 3 ~7일이 소요될 수 있습니다.
+								</li>
+							</ul>
+						</div>
+						<div class="info_footer_area" id="addDeliveryFee" style="display:none">
+							<p>
+								<span id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.
+								<input type="hidden" name="addPayCost"/>
+							</p>
+						</div>
+						<div class="btn_footer_area">
+							<button type="button" class="btn btn_default btn_md" onclick="fnGoToNoMemberOrderList();"><span>취소</span></button>
+							<button type="button" id="btn_refund_pop" class="btn btn_dark btn_md" onclick="fnCancel();"><span>주문 취소</span></button>
+						</div>
+					</div>
+				</form>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+
+		<!-- 환불계좌 등록 팝업 -->
+		<div class="modal fade refund_pop" id="refundPop" tabindex="-1" role="dialog" aria-labelledby="refundLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content"></div>
+			</div>
+			<a href="#close-modal" rel="modal:close" id="refundPop_close" class="close-modal">Close</a>
+			<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
+		</div>
+		<!-- //환불계좌 등록 팝업 -->
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	let cancelList = [[${cancelList}]];
+	let oneData = [[${oneData}]];
+	let paymentInfo = [[${paymentInfo}]];
+	let addPayCost = 0;
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetNoMemberLnbList(2);
+
+		// 마이페이지 location 설정
+		fnSetNoMemberLocation('취소/반품/교환 내역', '취소 신청');
+
+		// 셀렉트박스 활성화
+		$(".myOrderView .part_goods .select_custom.select_count").each(function() {
+			new sCombo(this);
+		});
+	});
+
+	// 취소 처리
+	var fnCancel = function() {
+		// 주문상세번호 및 취소 수량 설정
+		let ordDtlNoArr = [];
+		let cnclRtnReqQtyArr = [];
+		let chkQty = 0;
+		$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
+			let chgQty = $(item).val();
+			let ordDtlNo = $(item).attr('ordDtlNo');
+			
+			ordDtlNoArr.push(Number(ordDtlNo));
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			chkQty += chgQty;
+		});
+
+		// 취소 수량 체크
+		if (chkQty == 0) {
+			mcxDialog.alert('취소하실 상품의 수량을 선택해주세요.');
+			return false;
+		}
+
+		// 환불계좌 체크
+		let accountNo = $('#cancelForm input[name=accountNo]').val();
+		let accountNm = $('#cancelForm input[name=accountNm]').val();
+		let bankCd = $('#cancelForm input[name=bankCd]').val();
+
+		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+			let data = {};
+			data.ordNo = oneData.ordNo;
+			data.accountNm = oneData.accountNm;
+
+			let jsonData = JSON.stringify(data);
+
+			$.ajax( {
+				type		: "POST",
+				url 		: '/noMember/refund/account/register/popup/form',
+				data		: jsonData,
+				dataType 	: 'html',
+				beforeSend : function(xhr, settings) {
+					xhr.setRequestHeader("AJAX"			, "true");
+					xhr.setRequestHeader('Accept'		, 'application/json');
+					xhr.setRequestHeader('Content-Type'	, 'application/json');
+				},
+				success 	: function(result) {
+					$("#refundPop .modal-dialog .modal-content").html(result);
+					$("#refundPop").modal("show");
+				}
+			});
+			
+			return false;
+		}
+
+		// 취소요청 데이터 설정
+		let url = '/noMember/cancel';
+
+		// 취소 처리
+		let data = {};
+		data.ordNo = oneData.ordNo;
+		data.ordNm = oneData.ordNm;
+		data.ordPhnno = oneData.ordPhnno;
+		data.chgReason = 'G686_10';
+		data.chgReasonNm = '고객변심';
+		data.accountNo = accountNo;
+		data.accountNm = accountNm;
+		data.bankCd = bankCd;
+		data.isCustomer = 'Y';
+		data.reqGbn = 'cnclComplete';
+		data.pgTid = paymentInfo.pgTid;
+		data.payAmt = paymentInfo.payAmt;
+		data.ordDtlNoArr = ordDtlNoArr;
+		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
+
+		let jsonData = JSON.stringify(data);
+
+		// 취소 처리 가능 여부 조회
+		gagajf.ajaxJsonSubmit('/noMember/wms/cancel/available', jsonData, function(result) {
+			if (result.cancelYn == 'Y') {
+				// 취소 처리
+				gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+					fnGoToNoMemberOrderList();
+				}, true);
+			} else {
+				mcxDialog.alert('이미 배송처리 되어 취소 처리에 실패 하였습니다.');
+			}
+		}, true);
+	}
+	
+	// 취소 수량 변경 이벤트 처리
+	var fnChangeCancelQty = function(param) {
+		let url = '/noMember/cancel/refund/amt/calculate';
+
+		if (param != null) {
+			$(param).parent().parent().find('input[name=chgQty]').val($(param).attr('qty'));
+		}
+
+		// 취소 수량 설정
+		let cnclRtnReqQtyArr = [];
+		let ordDtlNoArr = [];
+		let ordCanChgQtyArr = [];
+		$.each($('#cancelForm input[name=chgQty]'), function(idx, item) {
+			let chgQty = $(item).val();
+			let ordDtlNo = $(item).attr('ordDtlNo');
+			let ordCanChgQty = $(item).attr('ordCanChgQty');
+			
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			ordDtlNoArr.push(Number(ordDtlNo));
+			ordCanChgQtyArr.push(Number(ordCanChgQty));
+		});
+
+		let data = {};
+		data.ordNo = oneData.ordNo;
+		data.ordNm = oneData.ordNm;
+		data.ordPhnno = oneData.ordPhnno;
+		data.ordDtlNoArr = ordDtlNoArr;
+		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
+			// 환불포인트, 환불상품권 금액 계산
+			let refundPoint = Number(result.spanPntDcAmt);
+			let refundGiftCard = Number(result.spanGfcdUseAmt);
+
+			let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);
+			let sumDeliveryFee = Number(result.sumDeliveryFee);
+			let spanTotDeliveryFee = Number(result.spanTotDeliveryFee);
+			let spanCpnDcAmt = Number(result.spanCpnDcAmt);
+			let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);
+			let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);
+			let spanRefundAmt = Number(result.spanRefundAmt);
+
+			let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
+			let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
+			let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
+			let refundPayAmt = spanRefundAmt;											// 결제금액 환불
+			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
+
+			// 추가배송비 영역 설정
+			if (refundPayAmt < 0) {
+				refundPayAmt = spanRefundAmt;
+				$('#addDeliveryFee').css('display', '');
+				$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
+				addPayCost = spanTotDeliveryFee;
+			} else {
+				addPayCost = 0;
+			}
+
+			// 금액 설정
+			$('#returnAmt').text(returnAmt.addComma());
+			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
+			$('#deliveryFee').text(deliveryFee.addComma());
+			$('#deductDcAmt').text(deductDcAmt.addComma());
+			$('#refundPayAmt').text(refundPayAmt.addComma());
+			$('#refundPoint').text(refundPoint.addComma());
+			$('#refundGiftCard').text(refundGiftCard.addComma());
+		});
+	}
+
+	// 환불계좌 등록 콜백 처리
+	var fnRegisterAccountCallback = function(result) {
+		// 환불계좌 정보 설정
+		$('#cancelForm input[name=accountNo]').val(result.accountNo);
+		$('#cancelForm input[name=accountNm]').val(result.accountNm);
+		$('#cancelForm input[name=bankCd]').val(result.bankCd);
+
+		// 취소처리
+		fnCancel();
+	}
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 505 - 0
src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderDetailFormWeb.html

@@ -0,0 +1,505 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/NoMemberLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : NoMemberOrderDetailFormWeb.html
+ * @desc    : 비회원주문 > 주문상세 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.04.28   card007     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<div class="content myOrderView">
+		<div class="cont_body">
+			<!-- CONT-BODY -->
+			<div class="lnb">
+				<div class="lnb_tit">
+					<h2>마이페이지</h2>
+				</div>
+				<div class="lnb_list">
+					<ul id="mypageLnbList"></ul>
+				</div>
+			</div>
+			<div class="cont">
+				<form id="orderDetailForm">
+					<div class="sec_head">
+						<h3 class="subH1">주문상세</h3>
+						<span class="order_number">주문번호&nbsp;:&nbsp;<em th:text="${ordNo}"></em></span>
+						<button type="button" id="btn_order_cancel" class="btn_underline" onclick="fnDeleteOrder()"><span>삭제하기</span></button>
+					</div>
+					<div class="sec_body">
+						<th:block th:if="${orderList}" th:each="order, status : ${orderList}">
+							<input type="hidden" name="accountNo" th:value="${order.oneData.accountNo}"/>
+							<input type="hidden" name="accountNm" th:value="${order.oneData.accountNm}"/>
+							<input type="hidden" name="bankCd" th:value="${order.oneData.bankCd}"/>
+							<input type="hidden" name="delvMemo" th:value="${deliveryAddrInfo.delvMemo}"/>
+							<div class="part_goods">
+								<div class="goods_head">
+									<p th:unless="${order.giftPackYn == 'Y'}">주문일 <span th:text="${order.ordDt}"></span></p>
+									<p th:if="${order.giftPackYn == 'Y'}">선물일 <span th:text="${order.ordDt}"></span></p>
+									<li><a href="javascript:void(0)" th:if="${order.allCanYn == 'Y' and order.ordReqChgQty == 0}" onclick="fnAllCancel();">주문전체취소</a></li>
+								</div>
+								<div class="goods_cont">
+									<!-- 주문상품 -->
+									<th:block th:if="${order.ordDtlList}" th:each="ordDtl, status : ${order.ordDtlList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+										<div class="goods_info">
+											<div class="order_desc">
+												<div class="goods_box">
+													<input type="hidden" name="ordDtlNoArr" th:value="${ordDtl.ordDtlNo}"/>
+													<input type="hidden" name="cnclRtnReqQtyArr" th:value="${ordDtl.ordQty - ordDtl.cnclRtnQty}"/>
+													<div class="gd_item">
+														<a href="javascript:void(0)" th:attr="goodsCd=${ordDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
+															<span class="thumb">
+																<img th:src="${imageUrl + '/' + ordDtl.sysImgNm}" width="100%" alt="">
+															</span>
+															<p>
+																<span class="brand" th:text="${ordDtl.brandNm}"></span>
+																<span class="tag primary" th:if="${ordDtl.shotDelvYn == 'Y'}">총알배송</span>
+																<span class="tag" th:if="${ordDtl.shotDelvYn == 'N' and ordDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</span>
+																<span class="tag" th:if="${ordDtl.selfGoodsYn == 'N'}">업체직배송</span>
+															</p>
+															<p>
+																<span class="name" th:text="${ordDtl.goodsNm}"></span>
+															</p>
+														</a>
+													</div>
+													<div class="gd_opt">
+														<div class="option_wrap">
+															<span class="title sr-only">주문 옵션</span>
+															<span class="option" th:if="${ordDtl.goodsType == 'G056_S'}" th:each="option, status : ${ordDtl.colorNmArr}" th:text="|${ordDtl.itemNmArr[status.index]} / ${option} / ${ordDtl.optCd2Arr[status.index]}|"></span>
+															<span class="option" th:unless="${ordDtl.goodsType == 'G056_S'}" th:text="|${ordDtl.colorNm} / ${ordDtl.optCd2}|"></span>
+														</div>
+													</div>
+													<div class="gd_calc">
+														<p>
+															<span class="count"><em th:text="${ordDtl.ordQty - ordDtl.cnclRtnQty}"></em>개</span>
+														</p>
+														<p>
+															<span class="price_org" th:if="${(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt) > (ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt)}"><em th:text="${#numbers.formatInteger(ordDtl.ordAmt - ordDtl.cnclRtnAmt - ordDtl.cpn1DcAmt, 1, 'COMMA')}"></em>원</span>
+															<span class="price_sale"><em th:text="${#numbers.formatInteger(ordDtl.realOrdAmt + ordDtl.pntDcAmt + ordDtl.gfcdUseAmt, 1, 'COMMA')}"></em>원</span>
+														</p>
+													</div>
+												</div>
+												<div class="status_box">
+													<p th:text="${ordDtl.ordDtlStatNm}"></p>
+												</div>
+												<div class="button_box">
+													<!-- 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중) -->
+													<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')}">
+														<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>
+													
+													<!-- 교환/반품 신청 버튼(배송중, 출고완료, 배송완료) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60'}">
+														<!-- 교환/반품 가능한 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'Y'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></p>
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></p>
+														</th:block>
+														
+														<!-- 교환 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'Y'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'return');"><span>반품 신청</span></button></p>
+														</th:block>
+
+														<!-- 반품 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'N'}">
+															<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}, delvFeeCd=${ordDtl.delvFeeCd}" onclick="fnCreateChange(this, 'exchange');"><span>교환 신청</span></button></p>
+														</th:block>
+
+														<!-- 교환/반품 신청 불가 상품 -->
+														<th:block th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'N'}">
+														</th:block>
+													</th:block>
+													
+													<!-- 배송조회 버튼(배송중) -->
+													<th:block th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55'}">
+														<p><button type="button" class="btn btn_default btn_sm" th:attr="ordNo=${ordDtl.ordNo}, ordDtlNo=${ordDtl.ordDtlNo}" onclick="fnGoToDelivery(this);"><span>배송 조회</span></button></p>
+													</th:block>
+
+													<!-- 쇼핑백담기 버튼(구매확정) -->
+													<th:block th:if="${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>
+												</div>
+											</div>
+											<!-- 주문 접수 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_10'}">
+												<p>주문이 완료되어 결제를 기다리고 있습니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+											
+											<!-- 상품준비중 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_30'}">
+												<p>배송할 상품을 준비 중입니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+											
+											<!-- 배송준비중 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_40'}">
+												<p>상품 준비가 완료되어 곧 배송될 예정입니다.</p>
+
+												<!-- 예약 상품 -->
+												<p th:if="${!#strings.isEmpty(ordDtl.delvResDt)}" th:text="|예약판매 상품으로${ordDtl.delvResDt} 출고 예정입니다.|"></p>
+											</div>
+											
+											<!-- 배송중, 배송완료 -->
+											<div class="order_text" th:if="${ordDtl.ordDtlStat == 'G013_50' or ordDtl.ordDtlStat == 'G013_55' or ordDtl.ordDtlStat == 'G013_60'}">
+												<p th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'Y'}">해당 상품은 교환이 불가능한 상품입니다.</p>
+												<p th:if="${ordDtl.changeableYn == 'Y' and ordDtl.returnableYn == 'N'}">해당 상품은 반품이 불가능한 상품입니다.</p>
+												<p th:if="${ordDtl.changeableYn == 'N' and ordDtl.returnableYn == 'N'}">해당 상품은 교환/반품이 불가능한 상품입니다.</p>
+												<p th:if="${ordDtl.ordDtlStat == 'G013_60'}">15일 후 자동으로 구매확정됩니다.</p>
+											</div>
+										</div>
+									</th:block>
+									<!-- //주문상품 -->
+								</div>
+							</div>
+						</th:block>
+						<th:block th:if="${paymentInfo.payMeans == 'G014_20'}">
+							<h4 class="subH3">무통장 입금 정보</h4>
+							<div class="tbl type1">
+								<table>
+									<colgroup>
+										<col width="210">
+										<col width="*">
+									</colgroup>
+									<tbody>
+										<tr>
+											<th>
+												계좌정보/입금기한
+											</th>
+											<td>
+												<div class="single_line">
+													<ul>
+														<li><span th:text="${paymentInfo.vaBank}"></span>&nbsp;<span th:text="|(${paymentInfo.vaNm})|"></span></li>
+														<li><span th:text="${paymentInfo.vaNo}"></span></li>
+														<li><span th:text="${paymentInfo.vaDeadlineYmd}"></span>&nbsp;<span th:text="${paymentInfo.vaDeadlineHms}"></span>&nbsp;까지</li>
+													</ul>
+												</div>
+											</td>
+										</tr>
+									</tbody>
+								</table>
+							</div>
+						</th:block>
+						<!-- 주문 -->
+						<h4 class="subH3">주문자/배송지 정보</h4>
+						<div class="tbl type1">
+							<table>
+								<colgroup>
+									<col width="210">
+									<col width="*">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th>
+											주문 고객
+										</th>
+										<td>
+											<div class="single_line">
+												<ul>
+													<li><span th:text="${orderInfo.ordNm}"></span></li>
+													<li><span th:text="${orderInfo.ordEmail}"></span></li>
+													<li><span th:text="${orderInfo.ordPhnno}"></span></li>
+												</ul>
+											</div>
+										</td>
+									</tr>
+									<tr>
+										<th>
+											배송지 정보
+										</th>
+										<td>
+											<div class="block_line">
+												<ul>
+													<li>
+														<span th:text="${deliveryAddrInfo.recipNm}" id="recipNm"></span>
+													</li>
+													<li>
+														<span th:text="${deliveryAddrInfo.recipPhnno}" id="recipPhnno"></span>
+													</li>
+													<li>
+														<span th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|" id="recipAddr"></span>
+														<button type="button" class="btn btn_default btn_sm" th:if="${allCanYn == 'Y'}" onclick="fnChangeDeliveryAddr()"><span>배송지 변경</span></button>
+													</li>
+													<li>
+														배송요청 사항&nbsp;:&nbsp;<span id="delvMemo" th:text="${deliveryAddrInfo.delvMemo}"></span>
+														<button type="button" class="btn_underline" th:if="${allCanYn == 'Y'}" onclick="fnChangeDeliveryMemo(this)"><span>변경하기</span></button>
+													</li>
+												</ul>
+											</div>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+						<h4 class="subH3">결제정보</h4>
+						<div class="tbl type6">
+							<table>
+								<colgroup>
+									<col width="50%">
+									<col width="50%">
+								</colgroup>
+								<tbody>
+									<tr>
+										<td>
+											<dl>
+												<div>
+													<dt>총 주문금액 (상품금액+배송비+추가비용)</dt>
+													<dd>
+														<div class="price">
+															<span class="order_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.ordAmt - orderAmtInfo.cnclRtnAmt + orderAmtInfo.realDelvAmt, 1, 'COMMA')}"></em>원</span>
+														</div>
+													</dd>
+												</div>
+												<div class="include_item" th:if="${orderAmtInfo.cpn1DcAmt > 0}"> <!-- 할인항목 표기 class명 include_item -->
+													<dt>상품할인(즉시할인)</dt>
+													<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.cpn1DcAmt, 1, 'COMMA')}|"></em>원</dd>
+												</div>
+												<div class="include_item" th:if="${paymentInfo.npayPntAmt > 0}">
+													<dt>마일리지 사용</dt>
+													<dd><em th:text="|- ${#numbers.formatInteger(orderAmtInfo.npayPntAmt, 1, 'COMMA')}|"></em>원</dd>
+												</div>
+												<div class="include_item" th:if="${paymentInfo.pgCpnAmt > 0}">
+													<dt>제휴할인</dt>
+													<dd><em th:text="|- ${#numbers.formatInteger(paymentInfo.pgCpnAmt, 1, 'COMMA')}|"></em>원</dd>
+												</div>
+											</dl>
+										</td>
+										<td>
+											<dl>
+												<div>
+													<dt>결제 금액</dt>
+													<dd>
+														<div class="price">
+															<span class="pay_total_price"><em th:text="${#numbers.formatInteger(orderAmtInfo.payAmt - orderAmtInfo.npayPntAmt, 1, 'COMMA')}"></em>원</span>
+														</div>
+													</dd>
+												</div>
+												<div>
+													<dt class="sr-only">결제방법</dt>
+													<!-- TODO -->
+													<!-- Style24 간편결제 처리 (STYLE24 간편결제 : STYLE24 간편결제명 / 카드사명 / 할부개월(일시불)) -->
+													<dd th:if="${paymentInfo.pgGb == 'NAVER'}">네이버 페이</dd>
+													<dd th:if="${paymentInfo.pgGb == 'KAKAO'}">카카오 페이</dd>
+													<dd th:if="${paymentInfo.pgGb == 'PAYCO'}">PAYCO</dd>
+													<dd th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_10'}">실시간계좌이체</dd>
+													<dd th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_20'}">무통장입금</dd>
+													<dd th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_30'}" th:text="|${paymentInfo.cardNm}/${paymentInfo.cardMips}|"></dd>
+													<dd th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_60'}">휴대폰결제</dd>
+												</div>
+												<div>
+													<dt class="sr-only">영수증 확인</dt>
+													<dd>
+														<button type="button" class="btn btn_default btn_sm" th:if="${paymentInfo.pgGb == 'KCP' and paymentInfo.payMeans == 'G014_30'}" onclick="fnReceipt('card')"><span>신용카드 전표</span></button>
+														<button type="button" class="btn btn_default btn_sm" th:if="${paymentInfo.pgGb == 'KCP' and not #strings.isEmpty(paymentInfo.cashAuthNo) and (paymentInfo.payMeans == 'G014_10' or paymentInfo.payMeans == 'G014_20')}" onclick="fnReceipt('cash')"><span>현금 영수증</span></button>
+													</dd>
+												</div>
+											</dl>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+						<div class="btn_footer_area">
+							<button type="button" class="btn btn_dark btn_md" onclick="fnGoToNoMemberOrderList()"><span>확인</span></button>
+						</div>
+					</div>
+				</form>
+			</div>
+			<!-- // CONT-BODY -->
+		</div>
+
+		<!-- 환불계좌 등록 팝업 -->
+		<div class="modal fade refund_pop" id="refundPop" tabindex="-1" role="dialog" aria-labelledby="refundLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content"></div>
+			</div>
+			<a href="#close-modal" rel="modal:close" id="refundPop_close" class="close-modal">Close</a>
+			<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
+		</div>
+		<!-- //환불계좌 등록 팝업 -->
+	</div>
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	let ordNo = [[${ordNo}]];
+	var isLogin = [[${isLogin}]];
+	let orderList = [[${orderList}]];
+	let oneData = [[${oneData}]];
+	let paymentInfo = [[${paymentInfo}]];
+	let orderAmtInfo = [[${orderAmtInfo}]];
+	let deliveryAddrInfo = [[${deliveryAddrInfo}]];
+	let kcpReceiptUrl = [[${@environment.getProperty('pg.kcp.receipt.url')}]];
+	let jsonObj = {};
+
+	$(document).ready(function() {
+		// 마이페이지 LNB 설정
+		fnSetNoMemberLnbList(1);
+		
+		// 마이페이지 location 설정
+		fnSetNoMemberLocation('주문확인/배송조회', '주문상세');
+	});
+	
+	// 전체취소 버튼 클릭 이벤트
+	var fnAllCancel = function() {
+		// 환불계좌 체크
+		let accountNo = $('#orderDetailForm input[name=accountNo]').val();
+		let accountNm = $('#orderDetailForm input[name=accountNm]').val();
+		let bankCd = $('#orderDetailForm input[name=bankCd]').val();
+
+		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_30' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+			let data = {};
+			data.ordNo = oneData.ordNo;
+			data.accountNm = oneData.accountNm;
+			
+			let jsonData = JSON.stringify(data);
+			
+			$.ajax( {
+				type		: "POST",
+				url 		: '/mypage/refund/account/register/popup/form',
+				data		: jsonData,
+				dataType 	: 'html',
+				beforeSend : function(xhr, settings) {
+					xhr.setRequestHeader("AJAX"			, "true");
+					xhr.setRequestHeader('Accept'		, 'application/json');
+					xhr.setRequestHeader('Content-Type'	, 'application/json');
+				},
+				success 	: function(result) {
+					$("#refundPop .modal-dialog .modal-content").html(result);
+					$("#refundPop").modal("show");
+				}
+			});
+			
+			return false;
+		}
+
+		mcxDialog.confirm('전체취소 처리하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				// 취소요청 데이터 설정
+				let url = '/noMember/cancel';
+				
+				// 주문상세번호 설정
+				let ordDtlNoArr = [];
+				$.each($('#orderDetailForm input[name=ordDtlNoArr]'), function(idx, item) {
+					ordDtlNoArr.push($(item).val());
+				});
+				
+				// 취소 수량 설정
+				let cnclRtnReqQtyArr = [];
+				$.each($('#orderDetailForm input[name=cnclRtnReqQtyArr]'), function(idx, item) {
+					cnclRtnReqQtyArr.push($(item).val());
+				});
+				
+				// 전체 취소 처리
+				let data = {};
+				data.ordNo = ordNo;
+				data.chgReason = 'G686_10';
+				data.chgReasonNm = '고객변심';
+				data.accountNo = accountNo;
+				data.accountNm = accountNm;
+				data.bankCd = bankCd;
+				data.isCustomer = 'Y';
+				data.reqGbn = 'cnclComplete';
+				data.ordDtlNoArr = ordDtlNoArr;
+				data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
+				
+				let jsonData = JSON.stringify(data);
+
+				// 취소 처리 가능 여부 조회
+				gagajf.ajaxJsonSubmit('/noMember/wms/cancel/available', jsonData, function(result) {
+					let cancelYn = result.cancelYn;
+
+					if (cancelYn == 'Y') {
+						// 전체취소 처리
+						gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+							cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);
+						}, true);
+					} else {
+						mcxDialog.alert('이미 배송처리 되어 전체취소 처리에 실패 하였습니다.');
+					}
+				});
+			}
+		});
+	}
+
+	// 배송지 정보 설정
+	var delvAddrSet = function(delvObj) {
+		let delvAddrSq = deliveryAddrInfo.delvAddrSq;
+		let recipNm = delvObj.recipNm;
+		let recipPhnno = delvObj.recipPhnno;
+		let recipZipcode = delvObj.recipZipcode;
+		let recipBaseAddr = delvObj.recipBaseAddr;
+		let recipDtlAddr = delvObj.recipDtlAddr;
+		let delvMemo = delvObj.delvMemo;
+		
+		$('#recipNm').text(recipNm);
+		$('#recipPhnno').text(recipPhnno);
+		$('#recipAddr').text(recipBaseAddr + ' ' + recipDtlAddr);
+		$('#delvMemo').text(delvMemo);
+		
+		let url = '/noMember/change/delvery/addr';
+		let data = {};
+		data.delvAddrSq = delvAddrSq;
+		data.recipNm = recipNm;
+		data.recipPhnno = recipPhnno;
+		data.recipZipcode = recipZipcode;
+		data.recipBaseAddr = recipBaseAddr;
+		data.recipDtlAddr = recipDtlAddr;
+		data.delvMemo = delvMemo;
+		
+		let jsonData = JSON.stringify(data);
+		
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+		})
+	}
+	
+	// 배송메모 설정
+	var delvMemoSet = function(delvMemoObj) {
+		let url = '/noMember/change/delvery/memo';
+		let delvMemo = delvMemoObj.delvMemo;
+
+		let data = {};
+		data.delvMemo = delvMemo;
+		data.delvAddrSq = oneData.delvAddrSq;
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+		})
+
+		$("#delvMemo").text(delvMemo);
+	}
+
+	// 환불계좌 등록 콜백 처리
+	var fnRegisterAccountCallback = function(result) {
+		// 환불계좌 정보 설정
+		$('#orderDetailForm input[name=accountNo]').val(result.accountNo);
+		$('#orderDetailForm input[name=accountNm]').val(result.accountNm);
+		$('#orderDetailForm input[name=bankCd]').val(result.bankCd);
+		
+		// 반품처리
+		fnAllCancel();
+	}
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 14 - 24
src/main/webapp/WEB-INF/views/web/mypage/NoMemberOrderListFormWeb.html

@@ -2,7 +2,7 @@
 <html lang="ko"
 	xmlns:th="http://www.thymeleaf.org"
 	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
-	layout:decorator="web/common/layout/MypageLayoutWeb">
+	layout:decorator="web/common/layout/NoMemberLayoutWeb">
 <!--
  *******************************************************************************
  * @source  : NoMemberOrderListFormWeb.html
@@ -141,7 +141,7 @@
 						</div>
 					</div>
 				</div>
-				<form id="searchForm" name="searchForm" th:action="@{'/mypage/order/list'}" th:method="post">
+				<form id="searchForm" name="searchForm" th:action="@{'/noMember/order/list'}" th:method="post">
 					<input type="hidden" name="ordNo" th:value="${ordNo}" />
 					<input type="hidden" name="ordNm" th:value="${ordNm}" />
 					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
@@ -152,29 +152,10 @@
 					<input type="hidden" name="stDate" value="" />
 					<input type="hidden" name="edDate" value="" />
 				</form>
-				<form id="exchangeForm" name="exchangeForm" action="#" th:action="@{'/mypage/exchange/form'}" th:method="post">
+				<form id="detailForm" name="detailForm" th:action="@{'/noMember/order/detail/form'}" th:method="post">
 					<input type="hidden" name="ordNo" th:value="${ordNo}" />
 					<input type="hidden" name="ordNm" th:value="${ordNm}" />
 					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
-					<input type="hidden" name="ordNo"/>
-					<input type="hidden" name="ordDtlNo"/>
-					<input type="hidden" name="delvFeeCd"/>
-				</form>
-				<form id="returnForm" name="returnForm" action="#" th:action="@{'/mypage/return/form'}" th:method="post">
-					<input type="hidden" name="ordNo" th:value="${ordNo}" />
-					<input type="hidden" name="ordNm" th:value="${ordNm}" />
-					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
-					<input type="hidden" name="ordNo"/>
-					<input type="hidden" name="ordDtlNo"/>
-					<input type="hidden" name="delvFeeCd"/>
-				</form>
-				<form id="cancelForm" name="cancelForm" th:action="@{'/mypage/cancel/form'}" th:method="post">
-					<input type="hidden" name="ordNo" th:value="${ordNo}" />
-					<input type="hidden" name="ordNm" th:value="${ordNm}" />
-					<input type="hidden" name="ordPhnno" th:value="${ordPhnno}" />
-					<input type="hidden" name="ordNo"/>
-					<input type="hidden" name="ordDtlNo"/>
-					<input type="hidden" name="delvFeeCd"/>
 				</form>
 			</div>
 			<!-- // CONT-BODY -->
@@ -191,7 +172,7 @@
 		fnSetNoMemberLnbList(1);
 		
 		// 비회원 location 설정
-		fnSetMypageLocation('주문확인/배송조회');
+		fnSetNoMemberLocation('주문확인/배송조회');
 		
 		// datepicker 설정
 		$('.period_datepicker').datepicker();
@@ -344,6 +325,15 @@
 		// TODO
 		// 배송조회 페이지 이동
 	}
+	
+	// 비회원 주문상세보기 버튼 클릭 이벤트
+	var fnGoToNoMemberOrderDetail = function(param) {
+		let ordNo = $(param).attr('ordNo');
+		let ordNm = $(param).attr('ordNm');
+		let ordPhnno = $(param).attr('ordPhnno');
+
+		document.detailForm.submit();
+	}
 
 	// 주문내역 리스트 처리
 	var fnCreateOrderList = function(param) {
@@ -355,7 +345,7 @@
 				tag += '						<div class="part_goods">\n';
 				tag += '							<div class="goods_head">\n';
 				tag += '								<p>주문일 <span>' + order.ordDt + '</span></p>\n';
-				tag += '								<a href="javascript:void(0)" class="btn_detail_view" ordNo="' + order.ordNo + '" onclick="fnGoToOrderDetail(this)">주문상세보기</a>\n';
+				tag += '								<a href="javascript:void(0)" class="btn_detail_view" ordNo="' + order.ordNo + '" ordNm="' + order.ordNm + '" ordPhnno="' + order.ordPhnno + '" onclick="fnGoToNoMemberOrderDetail(this)">주문상세보기</a>\n';
 				tag += '							</div>\n';
 				tag += '							<div class="goods_cont">\n';
 				$.each(order.ordDtlList, function (index, ordDtl) {

+ 0 - 1
src/main/webapp/WEB-INF/views/web/order/OrderAddPaymentFormWeb.html

@@ -200,7 +200,6 @@ $("#btn_payment").on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			// 결재정보로드

+ 0 - 3
src/main/webapp/WEB-INF/views/web/order/OrderCompleteWeb.html

@@ -287,7 +287,6 @@ $('#btn_adrsChange_pop').on("click", function(){
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsChangePop .modal-dialog .modal-content").html(result);
@@ -305,7 +304,6 @@ $('#btn_adrsChange_pop').on("click", function(){
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -329,7 +327,6 @@ $("#btn_rqstModify_pop").on("click", function(e){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {

+ 4 - 6
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -18,7 +18,6 @@
 
 <body>
 <th:block layout:fragment="content">
-	<!--  container -->
 	<div id="container" class="container ev">
 		<div class="breadcrumb">
 			<ul>
@@ -28,7 +27,7 @@
 			</ul>
 		</div>
 		<div class="wrap">
-			<div class="content ev_rank">
+			<div class="content wide ev_rank">
 				<div class="cont_head">
 					<div>
 						<h3>회원등급 혜택</h3>
@@ -125,7 +124,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="content inner ev_benefit_tbl">
+			<div class="content ev_benefit_tbl">
 				<div class="cont_head">
 					<h3>등급 혜택</h3>
 				</div>
@@ -208,8 +207,7 @@
 										<p>10만원 이상 구매 시</p>
 									</td>
 									<td>
-										<div class="cou_img"><img src="/images/pc/ico_coupon_3000.png" alt="15,000원 할인 쿠폰"></div>
-										<p>2만원 이상 구매 시</p>
+
 									</td>
 								</tr>
 								<tr>
@@ -238,7 +236,7 @@
 							</table>
 						</div>
 					</div>
-					<div class="announce_txt inner">
+					<div class="announce_txt">
 						<div class="note_txt">
 							<img src="/images/pc/ico_content_find.png" alt="유의사항">
 							<p>유의사항</p>

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

@@ -243,9 +243,9 @@
 			</div>
 		</div>
 </div>
-<form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
+<!-- <form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
 	<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
-</form>
+</form> -->
 <form id="searchForm" name="searchForm" th:action="@{/planning/reply/list}" th:method="post">
 	<input type="hidden" name="pageNo" value="1" />
 	<input type="hidden" name="planSq" th:value="${planInfo.planSq}" />
@@ -736,34 +736,8 @@ var fnJoinConfirm = function () {
 		mcxDialog.alert("로그인 후 참여 가능합니다.");
 		return false;
 	}
-	
-	var data = {planSq : planSq};
-
-
-	var jsonData = JSON.stringify(data);
+	cfnGoToPollDetail(planSq);
 
-	/* gagajf.ajaxJsonSubmit('/planning/event/poll/access', jsonData , function () {
-		document.pollListForm.submit();
-	});
-	 */
-	$.ajax({
-		type : "POST",
-		data : jsonData,
-		url : '/planning/event/poll/access',
-		contentType : 'application/json',
-		dataType : 'json',
-		success : function(result) {
-			if (result.status == "1") {
-				mcxDialog.alert(result.msg);
-				return;
-			}
-			if (result.status == "2") {
-				mcxDialog.alert(result.msg);
-				return;
-			}
-			document.pollListForm.submit();
-		}
-	})
 }
 
 // 댓글 입력 확인
@@ -907,6 +881,7 @@ var fnReplySave = function() {
 	if(yokList.indexOf(content)>=0){
 		mcxDialog.alert("입력 불가한 내용을 포함하고 있습니다.");
 		$('#replyText').val('');
+		$('#cmt_cnt').text(0);
 		return;
 	}
 	

+ 2 - 2
src/main/webapp/WEB-INF/views/web/planning/PlanningEventAttendFormWeb.html

@@ -77,7 +77,7 @@
 								<div class="my_attend_day">
 									<p>나의 출석 일수는?</p>
 									<span class="day">
-										<span id="day"></span>일
+										<span id="day">0</span>일
 									</span>
 								</div>
 								<div class="tbl">
@@ -172,7 +172,7 @@
                  	</div>
 				</div>
 			</div>
-			<div class="content dp_announce">
+			<div class="content dp_announce" th:if="${fsrcInfoTop != null}">
 				<div class="cont_head">
 					<div>
 						<h4>유의사항</h4>

+ 4 - 5
src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html

@@ -48,14 +48,13 @@
                             <p id="planningTotCnt"><span>0</span>개의 기획전</p>
                         </div>
                     </div>
-					 <div class="list_content nodata" style="display: none;" id="divPlanningNoData"> 
-						<div class="list_defult">
+					 <div class="nodata" style="display: none;" id="divPlanningNoData"> 
+						<div class="txt_box">
 							<div>
-								<img src="/images/pc/ico_content_find.png" alt=""/>
 								<p>등록된 기획전이 없습니다.</p>
 							</div>
-							<div class="ui_row">
-								<button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>메인으로 가기</span></button>
+							<div class="btn_box">
+								<button class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>메인으로 가기</span></button>
 							</div>
 						</div>
 					</div> 

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

@@ -33,24 +33,24 @@
                         <h3>총알배송</h3>
                     </div>
 				</div>
-				<div class="cont_body" th:utext="${#strings.replace(#strings.replace(shotHtml.fsrcPc,'<','<'),'>','>')}">
-                     <div class="bulletship">
-                        <div class="bulletship_head">
+				<div class="cont_body">
+				    <div class="bulletship">
+						<div class="bulletship_head">
                             <img src="/images/pc/thumb/bullet_bg1.png" alt="10시까지 주문하면 당일도착">
                         </div>
                         <div class="bulletship_body" id="shotHtml">
                          			<!--   비로그인 상태 or 로그인을 했지만 주소정보를 못 가져오는 경우 -->
-                            <div class="txt_result">
+                       <!--     <div class="txt_result">
                                 <p>오전10시 이전 주문 당일도착</p>
                                 <p><span>총알배송이 가능한 지역</span>인지<br>확인해보세요!</p>
                                 <div class="bulletshop_btn">
                                     <button type="button" class="btn btn_default btn_block"><span>내 배송지 확인하기</span></button>
                                 </div>
-                                <p>서울&middot;경기&middot;인천 중 일부지역은 총알배송이 불가합니다.</p>
-                            </div>
+                                <p>서울·경기·인천 중 일부지역은 총알배송이 불가합니다.</p>
+                            </div> -->
                             		<!-- 비로그인 상태 or 로그인을 했지만 주소정보를 못 가져오는 경우 -->                      
                         </div>
-                        <div class="bulletship_foot">
+                        <div class="bulletship_foot"><div class="bulletship_foot"><br></div></div><div class="bulletship_foot"><br></div><div class="bulletship_foot">
                             <img src="/images/pc/thumb/bullet_bg2.png" alt="주문/도착, 배송일, 대상상품">
                         </div>
                     </div> 

+ 0 - 1
src/main/webapp/WEB-INF/views/web/popup/DelvAddrAddPopWeb.html

@@ -160,7 +160,6 @@ $("#btn_delivery_addr_save").on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {

+ 0 - 3
src/main/webapp/WEB-INF/views/web/popup/DelvAddrChangePopWeb.html

@@ -77,7 +77,6 @@ $(document).ready( function() {
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -126,7 +125,6 @@ $("#delvAddrChangeForm .btn_addrModify_pop").on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#adrsModifyPop .modal-dialog .modal-content").html(result);
@@ -147,7 +145,6 @@ $('#btn_adrsAdd_pop').on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			$("#adrsAddPop .modal-dialog .modal-content").html(result);

+ 0 - 2
src/main/webapp/WEB-INF/views/web/popup/DelvAddrModifyPopWeb.html

@@ -181,10 +181,8 @@ $("#btn_delivery_modi_save").on("click", function(){
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
-			gagajf.showProgressbar(false);
 			// custDelvAddrSq 부모창으로 전달
 			var delvObj = {
 				"custDelvAddrSq"	: parseInt($("#deliveryModifyForm input[name=custDelvAddrSq]").val())

+ 31 - 9
src/main/webapp/biz/mypage.js

@@ -15,27 +15,52 @@ var fnSetMypageLnbList = function(lnbLvl) {
 	$('#mypageLnbList').html(tag);
 }
 
+// 마이페이지 로케이션 처리
+var fnSetMypageLocation = function(depth3, depth3Link, depth4) {
+	let tag = '';
+	if (gagajf.isNull(depth4)) {
+		tag += '<li class="bread_3depth">' + depth3 + '</li>'
+	} else {
+		tag += '<li className="bread_3depth"><a href="javascript:void(0);" onClick="cfnGoToPage(' + depth3Link + ');">' + depth3 + '</a></li>';
+		tag += '<li class="bread_3depth">' + depth4 + '</li>'
+	}
+	$('#location').append(tag);
+}
+
 // 비회원 LNB 처리
 var fnSetNoMemberLnbList = function(lnbLvl) {
 	let tag = '';
-	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOMEMBER_ORDER_LIST);"' + (lnbLvl == 1 ? ' class="on"' : '') + '>주문확인/배송조회</a></li>\n';
-	tag += '<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOMEMBER_CRE_LIST);"' + (lnbLvl == 2 ? ' class="on"' : '') + '>취소/반품/교환 내역</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="fnGoToNoMemberOrderList()"' + (lnbLvl == 1 ? ' class="on"' : '') + '>주문확인/배송조회</a></li>\n';
+	tag += '<li><a href="javascript:void(0);" onclick="fnGoToNoMemberCreList()"' + (lnbLvl == 2 ? ' class="on"' : '') + '>취소/반품/교환 내역</a></li>\n';
 	$('#mypageLnbList').html(tag);
 }
 
-
-// 마이페이지 로케이션 처리
-var fnSetMypageLocation = function(depth3, depth3Link, depth4) {
+// 비회원 로케이션 처리
+var fnSetNoMemberLocation = function(depth3, depth4) {
 	let tag = '';
 	if (gagajf.isNull(depth4)) {
 		tag += '<li class="bread_3depth">' + depth3 + '</li>'
 	} else {
-		tag += '<li className="bread_3depth"><a href="javascript:void(0);" onClick="cfnGoToPage(' + depth3Link + ');">' + depth3 + '</a></li>';
+		if (depth3 == '주문확인/배송조회') {
+			tag += '<li className="bread_3depth"><a href="javascript:void(0);" onClick="fnGoToNoMemberOrderList();">' + depth3 + '</a></li>';
+		} else if (depth3 == '취소/반품/교환 내역') {
+			tag += '<li className="bread_3depth"><a href="javascript:void(0);" onClick="fnGoToNoMemberCreList();">' + depth3 + '</a></li>';
+		}
 		tag += '<li class="bread_3depth">' + depth4 + '</li>'
 	}
 	$('#location').append(tag);
 }
 
+// 비회원 주문확인/배송조회 페이지 이동
+var fnGoToNoMemberOrderList = function() {
+	document.noMemberOrderListForm.submit();
+}
+
+// 비회원 취소/반품/교환 내역 페이지 이동
+var fnGoToNoMemberCreList = function() {
+	document.noMemberCreListForm.submit();
+}
+
 // 주문상세보기 버튼 클릭 이벤트 처리
 var fnGoToOrderDetail = function(param) {
 	let ordNo = $(param).attr('ordNo');
@@ -221,7 +246,6 @@ var fnChangeDeliveryAddr = function(param) {
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsChangePop .modal-dialog .modal-content").html(result);
@@ -240,7 +264,6 @@ var fnChangeDeliveryAddr = function(param) {
 				xhr.setRequestHeader("AJAX"			, "true");
 				xhr.setRequestHeader('Accept'		, 'application/json');
 				xhr.setRequestHeader('Content-Type'	, 'application/json');
-				gagajf.showProgressbar(true);
 			},
 			success 	: function(result) {
 				$("#adrsAddPop .modal-dialog .modal-content").html(result);
@@ -265,7 +288,6 @@ var fnChangeDeliveryMemo = function(param) {
 			xhr.setRequestHeader("AJAX"			, "true");
 			xhr.setRequestHeader('Accept'		, 'application/json');
 			xhr.setRequestHeader('Content-Type'	, 'application/json');
-			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
 			if (result != null) {

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


+ 3 - 3
src/main/webapp/ux/pc/css/common.css

@@ -1164,7 +1164,7 @@ input[type="file"] {
     background-color: #fff;
 }
 .select_custom .combo .list::-webkit-scrollbar {
-    width: 10px;
+    width: 4px;
     height: 0;
 }
 .select_custom .combo .list::-webkit-scrollbar-button:start:decrement,
@@ -1181,8 +1181,8 @@ input[type="file"] {
     height: 50px;
     width: 50px;
     background: rgba(0, 0, 0, .2);
-    -webkit-border-radius: 5px;
-    border-radius: 5px;
+    -webkit-border-radius: 10px;
+    border-radius: 10px;
 }
 .select_custom[disabled] {
   pointer-events: none;

+ 45 - 15
src/main/webapp/ux/pc/css/layout.css

@@ -1,6 +1,6 @@
 @charset "utf-8";
 
-body {min-width:1460px; overflow-x:auto;}
+body {min-width:1360px; overflow-x:auto;}
 .blind {overflow:hidden; position:absolute;width: 1px;height: 1px;margin: -1px;padding: 0; border: 0;line-height: 0;white-space: normal;word-wrap: break-word;word-break: break-all;clip: rect(0, 0, 0, 0);}
 .blind:before {display: block;width: 0;height: 0;font-size: 0;content: '\00a0';}
 
@@ -8,7 +8,7 @@ body {min-width:1460px; overflow-x:auto;}
 header {-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;} 
 header.minify .gnb {position:fixed; top:0; left:0; right:0; z-index:100; background:inherit;}
 header .common_header {}
-.common_header{position:relative; background:#222222;color:#ffffff;min-width:1460px; box-sizing:border-box;}
+.common_header{position:relative; background:#222222;color:#ffffff;min-width:1360px; box-sizing:border-box;}
 .common_header > * {color:#ffffff;}
 /*.common_header::before {content:''; position:absolute; left:0; right:0; bottom:-100px; width:100%; height:100px; background:inherit; z-index:1;}*/
 .common_header .hd_top_banner {text-align:center;}
@@ -49,7 +49,7 @@ header .common_header {}
 .common_header .util_group span:last-child::after{content:''; display:none;}
 .common_header .util_group span a{display:block; padding:0px 6px; font-weight:200; font-size:14px; color:#7f7f7f; letter-spacing:-.025em; line-height:1; /*-webkit-transition:all .3s ease-in-out; transition:all .3s ease-in-out;*/}
 .common_header .gnb {}
-.gnb {height: 80px;margin:0 auto;padding: 30px 70px 30px;position: relative;min-width: 1460px;box-sizing:border-box;}
+.gnb {height: 80px;margin:0 auto;padding: 30px 70px 30px;position: relative;min-width: 1360px;box-sizing:border-box;}
 .gnb::after {content: ''; display: block; clear: both;}
 .gnb .nav {float:left; margin-left:-24px;}
 .gnb .nav .bundle {float:left; display:inline-block; padding:0 10px;}
@@ -266,7 +266,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 
 /* footer */
 #footer {position:relative;}
-.common_footer {position:relative; width:100%; min-width:1380px; box-sizing:border-box; padding:60px 70px 50px; background-color:#f1f1f1;}
+.common_footer {position:relative; width:100%; min-width:1360px; box-sizing:border-box; padding:60px 70px 50px; background-color:#f1f1f1;}
 .common_footer > div {padding-right:170px; box-sizing:border-box;} 
 .common_footer .service_support {position: relative;margin: 0 auto; border-top: 0 none !important; zoom: 1;}
 .common_footer .service_support h2 {margin:0;}
@@ -707,7 +707,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 /* layout */
 .container {width:100%; padding:0; margin:0 auto; position:relative; overflow:hidden; *zoom:1;}
 .container:after {clear:both; content:"";display:block;}    
-.container .wrap {position:relative; width:100%; min-width:1460px; max-width:1920px; /*min-width: 1380px;*/ margin:0px auto; box-sizing:border-box;}
+.container .wrap {position:relative; width:100%; min-width:1360px; max-width:1920px; /*min-width: 1380px;*/ margin:0px auto; box-sizing:border-box;}
 .container .wrap .content {position:relative; margin-left:auto; margin-right:auto; padding-left:70px; padding-right:70px;}
 .container .wrap .content:after {content:''; clear:both; display:block;}
 .container .wrap .content.wide {width:100%; padding-left:0px; padding-right:0px; margin-left:auto; margin-right:auto;}
@@ -854,6 +854,12 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 .lnb .lnb_category .category > li > .sub_cate > ul > li > .sub_cate > ul > li > .sub_cate > ul > li > a::after {content:''; position:absolute; left:-15px; top:50%; transform:translateY(-50%); width:6px; height:6px; background:url('/images/pc/ico_bracket.png') no-repeat 50% 50%; background-size:100% 100%;}
 .lnb .lnb_category .category > li > .sub_cate > ul > li > .sub_cate > ul > li > .sub_cate > ul > li > a.on::after {background-image:url('/images/pc/ico_bracket_primary.png');}
 
+@media screen and (max-width:1459px) {
+	.lnb, .my_lnb {width: 17.80822%;padding-left: 70px;}
+	.lnb + .cont {width: 79.19178%;margin-right: 15px;}
+}
+
+
 .lnb_foot {padding-top:30px; line-height:1;}
 .lnb_foot ul li {margin-bottom:20px;}
 .lnb_foot ul li p {color:#222; font-weight:300; font-size:14px; line-height:1;}
@@ -1401,6 +1407,12 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.mb .sns_wrap ul li a .ico_snslogin.naver::before {background-position:0 0;}
 	.mb .sns_wrap ul li a .ico_snslogin.yes24::before {background-position:-140px 0;}
 
+	.mb .new_benefits {padding:50px 0 70px; background: #f5f5f5; text-align: center;}
+	.mb .new_benefits h5 {margin-top: 0; margin-bottom: 40px; font-size: 18px; font-weight: 300; line-height: 1.5;}
+	.mb .new_benefits .benefits_list {display: inline-block;}
+	.mb .new_benefits .benefits_list li {float:left; margin:0 25px;}
+	.mb .new_benefits .benefits_list li p {margin-top: 14px; font-size: 14px; font-weight: 300; line-height: 1.4;}
+
 	.mb .btn_nonMb {display:inline-block; color:#888; font-size:14px; font-weight:200; border-bottom:1px solid #888;}
 	.mb .t_err {position:relative; padding-left:24px; font-weight:200; font-size:14px; line-height:1;}
 	.mb .t_err::before {position:absolute; left:0; top:50%; transform:translateY(-50%); margin-top:-1px;}
@@ -1540,12 +1552,11 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.cs .ui_row.nodata .foldGroup {display:none;}
 	.cs .ui_row.nodata + .ui_foot {display:none;}
 	.cs .ui_row.nodata::before {content: ''; display: block; width: 36px; height: 46px; margin:0 auto; background: url('/images/pc/ico_null.png')no-repeat;}
-	.cs .ui_row.nodata::after {content: '등록된 문의가 없습니다.'; display: block; padding: 33px 0 160px; font-size: 22px; font-weight: 200; color: #888;}
-
+	.cs .ui_row.nodata::after {content: '등록된 문의가 없습니다.'; display: block; padding: 25px 0 160px; font-size: 16px; font-weight: 300; color: #666;}
 	/* cs_faq */
 	.cs .faq {}
 	.faq .ui_row.nodata {border:none;}
-	.faq .ui_row.nodata::after {content:'총 0개의 목록이 있습니다.';}
+	.faq .ui_row.nodata::after, .contactUs .ui_row.nodata::after {content:'총 0개의 목록이 있습니다.';}
 	.faq .quick_list {margin-bottom:50px;}
 	.faq .quick_list ul,.faq .quick_list ul li {box-sizing: border-box;}
 	.faq .quick_list ul {width:100%; height: 260px; display: flex; display: -ms-flexbox; flex-wrap: wrap; border:2px solid #000; align-items: center;}
@@ -1634,6 +1645,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.notice .fold_cont > div:first-of-type {padding-top:35px; border-top:1px solid #ddd}
 	.notice .sec_body.nodata {border-top: 1px solid #222;}
 
+	.notice .ui_row.nodata::after {content:'등록된 게시글이 없습니다.';}
 
 
 	/* dp_공통 */
@@ -2311,6 +2323,8 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.odPayment .fold_cont .area_mbinfo > dl > div dd {width:auto;}
 	.odPayment .fold_cont .area_mbinfo > dl > div dd .btn {margin-top:-9px; margin-left:10px; vertical-align:top;}
 	.odPayment .fold_cont .area_receiveinfo {}
+	.odPayment .fold_cont .area_receiveinfo + .area_receiveinfo.none {padding-top: 25px;}
+	.odPayment .fold_cont .area_receiveinfo.none {padding:0 0 30px;}
 	.odPayment .fold_cont .area_receiveinfo > dl > div {margin-top:15px; height:16px}
 	.odPayment .fold_cont .area_receiveinfo > dl > div:first-child {margin-top:0}
 	.odPayment .fold_cont .area_receiveinfo > dl > div dt {position:relative; padding-right:10px; margin-right:10px; font-weight:200;}
@@ -3014,7 +3028,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd.deal ul::after {content:''; clear:both; display:block;}
 	.pd.deal .tab_detail_nav {position:relative; width:100%; height:60px; padding-bottom:60px; box-sizing:initial;}
 	.pd.deal .tab_detail_nav ul {position:absolute; left:0; top:0; width:100%; height:60px; z-index:2;}
-	.pd.deal .tab_detail_nav.fix ul {position:fixed; left:70px; top:80px; min-width:760px; width:calc(100% - 700px); max-width:1200px; z-index:5;}
+	.pd.deal .tab_detail_nav.fix ul {position:fixed; left:70px; top:80px; min-width:760px; width:calc(100% - 700px); max-width:1200px; z-index:25;}
 	.pd.deal .tab_detail_nav ul li {float:left; width:25%}
 	.pd.deal .tab_detail_nav ul li a {display:block; padding:22px 0px 18px; color:#888; font-size:18px; text-align:center; background:#f5f5f5; border:1px solid #f5f5f5; border-bottom-color:#222; box-sizing:border-box;}
 	.pd.deal .tab_detail_nav ul li.active a {border:1px solid #222; border-bottom-color:#fff; color:#222; font-weight:300; background:#fff;}
@@ -3056,7 +3070,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.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.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:2;}
+		.pd.deal .tab_detail_nav.fix ul {position:absolute; left:0; top:0; width:100%; height:60px; z-index:25;}
 		.pd_desc_wrap .item_descrp .area_option .opt_wrap.fixtop,
 		.pd_desc_wrap .item_descrp .area_option .opt_wrap.absbottom {position:relative; top:auto; bottom:auto; right:auto;}
 	}
@@ -3446,8 +3460,8 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.full_pop.pd_descrp_pop .full_pop_container .btn_more_box {display:none;}
 	.full_pop.pd_descrp_pop .full_pop_container .cont_body {max-width:1345px; background:#fff; max-height:none; overflow:visible;}
 	.full_pop.pd_descrp_pop .full_pop_container .cont_body > div {width:auto; max-width:1200px;}
-	.full_pop.pd_descrp_pop .full_pop_fix_r {position:fixed; z-index:2; right:0; top:0; bottom:0; /*width:570px;*/ width:30.21%; padding:160px 70px 0; border-left:1px solid #ddd; box-sizing:border-box; background:#fff; overflow-y:auto;}
-	.full_pop.pd_descrp_pop .full_pop_fix_r .option_box {margin-top:30px}
+	.full_pop.pd_descrp_pop .full_pop_fix_r {position:fixed; z-index:2; right:0; top:0; bottom:0; /*width:570px;*/ width:30.21%; padding:160px 70px 0; border-left:1px solid #ddd; box-sizing:border-box; background:#fff;}
+	.full_pop.pd_descrp_pop .full_pop_fix_r .option_box {margin-top:30px;overflow-y: auto;height: calc(100% - 43%);}
 	.full_pop.pd_descrp_pop .full_pop_fix_r .btn_box {margin-bottom:30px}
 	@media screen and (max-width:1459px) {
 		.full_pop.pd_descrp_pop .full_pop_fix_r {padding-left:20px; padding-right:20px;}
@@ -3490,13 +3504,15 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.pd_qnalist .qna_list .fold_head .fold_tit .ico_myqna::after {content:'내문의'; display:inline-block; width:47px; height:22px;  border:1px solid #fd4802; color:#fd4802; font-size:12px; text-align:center; box-sizing:border-box; line-height:20px; margin-top:-3px}
 	.pd_qnalist .qna_list .fold_head .fold_tit .ico_secret::after {content:''; display:inline-block; width:15px; height:16px; background:url('/images/pc/ico_secret.png') no-repeat 50% 50%;}
 	@media screen and (max-width:1459px) {
+		.pd_qnalist .info_txt ul li {width: 350px;line-height: 1.4;}
 		.pd_qnalist .qna_list .fold_head .data {right:40px}
 		.pd_qnalist .qna_list .fold_head::after {right:20px; width:12px; height:6px; background-size:100% auto;}
 		.pd_qnalist .qna_list .fold_head .fold_state {width:100px;}
-		.pd_qnalist .qna_list .case1 .fold_head .fold_tit span {max-width:350px;}
+		.pd_qnalist .qna_list .case1 .fold_head .fold_tit span {max-width:230px;}/* 350px */
 		.pd_qnalist .qna_list .case1 .fold_detail, 
 		.pd_qnalist .qna_list .case1 .fold_answer {padding-left:100px;}
 		.pd_qnalist .qna_list .case1 .fold_head .data [class^="wr_"] {width:88px;}
+		.pd_qnalist .ui_foot .pageNav > li > a {margin-left: 38px;}
 	}
 
 	/* pd_pop > 상품리뷰 페이지 */
@@ -4215,7 +4231,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.ev .btn_wrap .btn {min-width:220px; height:60px; font-size:18px; font-weight:300; line-height:normal;}
 	.ev .btn_wrap .btn.go_next span {display:inline-block; padding-right:20px; background:url('/images/pc/ico_bread_root_w.png') no-repeat 100% 50%;}
 	.ev .form_field input[type="radio"] + label,
-	.ev .form_field input[type="checkbox"] + label {padding-left:30px; color:#222; font-size:16px; font-weight:200; line-height:1;}
+	.ev .form_field input[type="checkbox"] + label {padding-left:30px; color:#222; font-size:16px; font-weight:200; line-height:1; vertical-align: top;}
 	.ev .form_field input[type="radio"] + label:before,
 	.ev .form_field input[type="radio"]:checked + label:after,
 	.ev .form_field input[type="checkbox"] + label:before,
@@ -4276,7 +4292,7 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.survey .survey_wrap .survey_con .survey_row .answer ul li:last-child {} 
 	
 	.survey .survey_wrap .survey_con .survey_row .answer input[type='text'].etc_input {visibility:hidden;margin-left:20px; width:300px !important; max-width:300px !important; height:52px; margin-top: -33px;}
-	.survey .survey_wrap .survey_con .survey_row .answer ul li .etc_radio:checked + label + .etc_input {margin-top: 0;}
+	.survey .survey_wrap .survey_con .survey_row .answer ul li .etc_radio:checked + label + .etc_input {margin-top: -20px;margin-bottom: -13px;}
 	.survey .survey_wrap .survey_con .btn_wrap {margin-top:20px} 
 
 	/* ev_rank 회원등급 혜택 */
@@ -4439,6 +4455,9 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.modal.adrsChange_pop {width:600px; max-width:none; height:auto;}
 	.modal.adrsChange_pop .modal-footer {margin-top:0; margin-left:-60px; margin-right:-60px; margin-bottom:-60px;}
 	.modal.adrsChange_pop .modal-body .pop_cont {max-height:510px !important; margin-left:-20px; margin-right:-20px; padding:0 20px 60px; line-height:1;}
+	.modal.adrsChange_pop .modal-body .pop_cont.nodata ul {display: none;}
+	.modal.adrsChange_pop .modal-body .pop_cont.nodata .empty_txt {display: block;}
+	.modal.adrsChange_pop .modal-body .pop_cont .empty_txt {display: none; padding:80px 0;}
 	.modal.adrsChange_pop button span {line-height:1;}
 	.modal.adrsChange_pop .btn.btn_sm {min-width:70px; height:34px; padding-top:9px; font-size:14px; font-weight:300;}
 	.modal.adrsChange_pop .form_field,
@@ -4637,6 +4656,8 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.modal.infoGift_pop {width:600px; max-width:none; height:auto;}
 	.modal.infoGift_pop .modal-body .pop_cont {max-height:none; padding:5px; border:1px solid #ddd; font-size:14px;}
 	.modal.infoGift_pop .modal-body .pop_cont .cont_box {line-height:20px; padding:15px; max-height:360px; overflow:auto;}
+	.modal.infoGift_pop .modal-body .pop_cont .cont_box ul li{width: 100%; position: relative; padding-left: 10px; word-break: keep-all;margin-bottom: 5px;}
+	.modal.infoGift_pop .modal-body .pop_cont .cont_box ul li::before {content: '';position: absolute;left: 0;top: 10px;margin-top: -1px;width: 2px;height: 2px;background: #888;}
 	.modal.infoGift_pop .modal-body .pop_cont .cont_box::-webkit-scrollbar {width: 2px;}
 	.modal.infoGift_pop .modal-body .pop_cont .cont_box::-webkit-scrollbar-thumb {background-color: #888888;border-radius: 0px;background-clip: padding-box;border: 0px solid transparent;}
 	.modal.infoGift_pop .modal-body .pop_cont .cont_box::-webkit-scrollbar-track{background-color: #dddddd;border-radius: 0px;}
@@ -5038,3 +5059,12 @@ ul.maintabs li [class^='box_depth'] {display:none; position:absolute; left:100%;
 	.order_amount .ico_calc.minus::after {content:''; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); width:12px; height:2px; background:#222;}
 	.order_amount .ico_calc.result::before {content:''; position:absolute; top:9px; left:50%; transform:translateX(-50%); width:12px; height:2px; background:#222;}
 	.order_amount .ico_calc.result::after {content:''; position:absolute; top:13px; left:50%; transform:translateX(-50%); width:12px; height:2px; background:#222;}*/
+
+
+	@media screen and (max-width:1459px) {
+		.fold_head .fold_state {width: 140px;}
+		.case1 .fold_head .fold_tit span, .case2 .fold_head .fold_tit span{width: 720px;}
+		.cs .history_wrap .txt {padding-left: 0px;}
+		.cs .history_wrap {padding: 50px 30px 50px 0;}
+	
+	}

+ 0 - 1
src/main/webapp/ux/plugins/gaga/gaga.paging.js

@@ -155,7 +155,6 @@ var gagaPaging = {
 				}
 			},
 			error : function(result) {
-				console.log(result);
 				mcxDialog.alert('오류로 인해 처리되지 않았습니다.');
 			}
 		});

+ 56 - 11
src/main/webapp/ux/style24_link.js

@@ -153,7 +153,6 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custParams) {
 	if ('P' === _frontGb) {
 		window.open(actionUrl, "popupCellphone", "top=" + popupY + ", left=" + popupX + ", width=" + popupWidth + ", height=" + popupHeight + ", fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbar=no");
 	} else {
-		console.log('redirectUrl', redirectUrl);
 		if (!gagajf.isNull(redirectUrl)) {
 			actionUrl = actionUrl + "?redirectUrl=" + redirectUrl;
 			if (!gagajf.isNull(custParams)) {
@@ -172,12 +171,12 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custParams) {
  *		 cfnOpenIpinCertify();
  *		 호출된 페이지에서
  *		 PC : fnNiceCallBack(encData) 콜백 함수 생성 후 encData 가지고 호출 처리
- *		 MO :
+ *		 MO : redirectUrl 호출하는 페이지에서 넣어줘야됨
  * </pre>
  * @since  : 2021/02/09
  * @author : jsshin
  */
-var cfnOpenIpinCertify = function (redirectUrl) {
+var cfnOpenIpinCertify = function (redirectUrl, custParams) {
 	var actionUrl = _frontUrl + "/customer/nice/ipin/form";
 	var popupWidth = 445;
 	var popupHeight = 550;
@@ -187,7 +186,11 @@ var cfnOpenIpinCertify = function (redirectUrl) {
 		window.open(actionUrl, "popupIpin", "top=" + popupY + ", left=" + popupX + ", width=" + popupWidth + ", height=" + popupHeight + ", fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbar=no");
 	} else {
 		if (!gagajf.isNull(redirectUrl)) {
-			document.location.href = actionUrl + "?redirectUrl=" + redirectUrl;
+			actionUrl = actionUrl + "?redirectUrl=" + redirectUrl;
+			if (!gagajf.isNull(custParams)) {
+				actionUrl = actionUrl + "&custParams=" + custParams;
+			}
+			document.location.href = actionUrl;
 		}
 	}
 };
@@ -836,13 +839,21 @@ function cfnConsentUseInfo(custNm) {
  * </pre>
  */
 function cfnPasswordModify() {
-	let str = '<div class="modal fade pswordModify_pop" id="pswordModifyPop" tabindex="-1" role="dialog" aria-labelledby="pswordModifyLabel" aria-hidden="true"></div>';
+	let str;
+	if (_frontGb === 'P') {
+		str = '<div class="modal fade pswordModify_pop" id="pswordModifyPop" tabindex="-1" role="dialog" aria-labelledby="pswordModifyLabel" aria-hidden="true"></div>';
+	} else {
+		str = '<div class="modal pop_full password_change_pop" id="pswordModifyPop" tabIndex="-1" role="dialog" aria-labelledby="pswordModifyPop" aria-hidden="true"></div>';
+	}
 
 	if ($('#pswordModifyPop').length == 0) {
 		$('body').append(str);
+		cfOpenLayer(_PAGE_PASSWORD_MODIFY, 'pswordModifyPop');
+	} else {
+		$('#pswordModifyPop').modal("show");
 	}
 
-	cfOpenLayer(_PAGE_PASSWORD_MODIFY, 'pswordModifyPop');
+
 }
 
 /**
@@ -854,7 +865,13 @@ function cfnPasswordModify() {
  * </pre>
  */
 function cfnUseTermsLayer() {
-	let str = '<div class="modal fade policiesTerms_pop" id="policiesTermsPop" tabindex="-1" role="dialog" aria-labelledby="policiesTermsLabel" aria-hidden="true"></div>';
+	let str;
+	if (_frontGb === 'P') {
+		str = '<div class="modal fade policiesTerms_pop" id="policiesTermsPop" tabindex="-1" role="dialog" aria-labelledby="policiesTermsLabel" aria-hidden="true"></div>';
+	}  else {
+		str = '<div class="modal pop_full fade" id="policiesTermsPop" tabindex="-1" role="dialog" aria-labelledby="policiesTermsLabel" aria-hidden="true"></div>';
+	}
+
 	if ($('#policiesTermsPop').length == 0) {
 		$('body').append(str);
 	}
@@ -864,13 +881,18 @@ function cfnUseTermsLayer() {
 /**
  * @type   : function
  * @access : public
- * @desc   : 개인정보취급방침 레이어
+ * @desc   : 개인정보취급방침
  * <pre>
  *		cfnPrivacyPolicyLayer();
  * </pre>
  */
 function cfnPrivacyPolicyLayer() {
-	let str = '<div class="modal fade policiesPrivacy_pop" id="policiesPrivacyPop" tabindex="-1" role="dialog" aria-labelledby="policiesPrivacyLabel" aria-hidden="true"></div>';
+	let str;
+	if (_frontGb === 'P') {
+		str = '<div class="modal fade policiesPrivacy_pop" id="policiesPrivacyPop" tabindex="-1" role="dialog" aria-labelledby="policiesPrivacyLabel" aria-hidden="true"></div>';
+	} else {
+		str = '<div class="modal pop_full fade" id="policiesPrivacyPop" tabindex="-1" role="dialog" aria-labelledby="policiesPrivacyLabel" aria-hidden="true"></div>'
+	}
 	if ($('#policiesPrivacyPop').length == 0) {
 		$('body').append(str);
 	}
@@ -886,7 +908,13 @@ function cfnPrivacyPolicyLayer() {
  * </pre>
  */
 function cfnPrivacyTrustLayer() {
-	let str = '<div class="modal fade trustPrivacy_pop" id="trustPrivacyPop" tabindex="-1" role="dialog" aria-labelledby="trustPrivacyLabel" aria-hidden="true"></div>';
+	let str;
+	if (_frontGb === 'P') {
+		str = '<div class="modal fade trustPrivacy_pop" id="trustPrivacyPop" tabindex="-1" role="dialog" aria-labelledby="trustPrivacyLabel" aria-hidden="true"></div>';
+	} else {
+		str = '<div class="modal pop_full fade" id="trustPrivacyPop" tabindex="-1" role="dialog" aria-labelledby="trustPrivacyLabel" aria-hidden="true"></div>';
+	}
+
 	if ($('#trustPrivacy_pop').length == 0) {
 		$('body').append(str);
 	}
@@ -1072,7 +1100,8 @@ var cfnGoToOutletMain = function(cateGb, cate1No) {
  * @author : gagamel
  */
 var cfnGoToGoodsList = function(brandGroupNo, cateGb, cate1No, cate2No, cate3No, cate4No, cate5No, formalGb) {
-	var params = '?brandGroupNo=' + brandGroupNo + '&cateGb=' + cateGb + '&cate1No=' + cate1No;
+	var params = '?brandGroupNo=' + brandGroupNo + '&cateGb=' + cateGb;
+	if (typeof (cate1No) != 'undefined') params += '&cate1No=' + cate1No;
 	if (typeof (cate2No) != 'undefined') params += '&cate2No=' + cate2No;
 	if (typeof (cate3No) != 'undefined') params += '&cate3No=' + cate3No;
 	if (typeof (cate4No) != 'undefined') params += '&cate4No=' + cate4No;
@@ -1116,6 +1145,22 @@ var cfnGoToPlanDetail = function (planSq , brandGroupNo) {
     cfnGoToPage(_PAGE_PLANNING_DETAIL + params);
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 폴상세로 이동
+ * <pre>
+ *        cfnGoToPollDetail(251);
+ * </pre>
+ * @param  : planSq - 기획전 번호. 필수
+ * @since  : 2021/03/29
+ * @author : sowon
+ */
+var cfnGoToPollDetail = function (planSq) {
+	var params = '?planSq='+planSq;
+    cfnGoToPage(_PAGE_EVENT_POLL + params);
+}
+
 /**
  * @type   : function
  * @access : public