瀏覽代碼

Merge branch 'develop' into jsshin

jsshin 5 年之前
父節點
當前提交
782612c009
共有 33 個文件被更改,包括 1515 次插入571 次删除
  1. 20 0
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 19 0
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  3. 12 0
      src/main/java/com/style24/front/biz/service/TsfCounselService.java
  4. 52 13
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  5. 24 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  6. 14 0
      src/main/java/com/style24/front/biz/web/TsfCommonController.java
  7. 42 11
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  8. 25 4
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  9. 11 7
      src/main/java/com/style24/persistence/domain/Counsel.java
  10. 1 1
      src/main/java/com/style24/persistence/domain/Goods.java
  11. 2 0
      src/main/java/com/style24/persistence/domain/Plan.java
  12. 24 0
      src/main/java/com/style24/persistence/domain/WishList.java
  13. 36 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  14. 99 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  15. 81 43
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  16. 246 0
      src/main/webapp/WEB-INF/views/mob/callcenter/OneToOneQnaFormMob.html
  17. 62 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html
  18. 37 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/GnbMob.html
  19. 48 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html
  20. 24 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/ScriptsMob.html
  21. 42 0
      src/main/webapp/WEB-INF/views/mob/common/fragments/VariablesMob.html
  22. 47 0
      src/main/webapp/WEB-INF/views/mob/common/layout/CallcenterLayoutMob.html
  23. 27 0
      src/main/webapp/WEB-INF/views/mob/common/layout/ErrorLayoutMob.html
  24. 60 0
      src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaFormWeb.html
  25. 2 2
      src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaRegisterFormWeb.html
  26. 1 1
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  27. 5 2
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  28. 65 437
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  29. 3 3
      src/main/webapp/WEB-INF/views/web/goods/GoodsQnaFormWeb.html
  30. 33 18
      src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html
  31. 215 0
      src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html
  32. 7 27
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  33. 129 0
      src/main/webapp/ux/style24_link.js

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

@@ -3,6 +3,7 @@ package com.style24.front.biz.dao;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.WishList;
 
 /**
  * 고객(회원) Dao
@@ -75,4 +76,23 @@ public interface TsfCustomerDao {
 	 * @since 2021. 03. 02
 	 */
 	String getCustomerMaxCustId(Customer customer);
+	
+	/**
+	 * 위시리스트 등록
+	 *
+	 * @param wishlist - 위시리스트 정보
+	 * @return
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	void createWishList(WishList wishlist);
+
+	/**
+	 * 위시리스트 삭제처리
+	 *
+	 * @param params - 고객일련번호, 상품코드
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	void deleteWishList(WishList wishList);
 }

+ 19 - 0
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -44,6 +44,25 @@ public interface TsfPlanningDao {
 	 * @date 2021. 3. 8
 	 */
 	Collection<Plan> getPlanList(Plan plan);
+	
+	/**
+	 * 기획전 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @date 2021. 3. 8
+	 */
+	Collection<Plan> getPlanGoodsList(Plan plan);
 
+	/**
+	 * 이벤트 갯수 조회
+	 * 
+	 * @param Plan
+	 * @return int
+	 * @author sowon
+	 * @since 2021.03.08
+	 */
+	int getEventAllCount(Plan plan);
 
 }

+ 12 - 0
src/main/java/com/style24/front/biz/service/TsfCounselService.java

@@ -2,6 +2,7 @@ package com.style24.front.biz.service;
 
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -41,6 +42,17 @@ public class TsfCounselService {
 		counsel.setCustNo(TsfSession.getInfo().getCustNo());
 		counsel.setCellPhnno(TsfSession.getInfo().getCellPhnno());
 		counsel.setEmail(TsfSession.getInfo().getEmail());
+
+		if (StringUtils.isNotBlank(counsel.getFile1SysFileNm())) {
+			counsel.setOrgFileNm1(counsel.getFile1OrgFileNm());
+			counsel.setSysFileNm1(counsel.getFile1SysFileNm());
+		}
+
+		if (StringUtils.isNotBlank(counsel.getFile2SysFileNm())) {
+			counsel.setOrgFileNm2(counsel.getFile2OrgFileNm());
+			counsel.setSysFileNm2(counsel.getFile2SysFileNm());
+		}
+
 		counsel.setRegNo(TsfSession.getInfo().getCustNo());
 		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
 		counselDao.createOneToOneQna(counsel);

+ 52 - 13
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -1,32 +1,36 @@
 package com.style24.front.biz.service;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.core.support.util.MaskingUtils;
+import com.style24.front.biz.dao.TsfCustomerDao;
 import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Login;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfCustomerDao;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.transaction.annotation.Transactional;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.util.ArrayList;
-import java.util.List;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.security.GagaPasswordEncoder;
 
 /**
  * 고객(회원) Service
@@ -612,7 +616,42 @@ public class TsfCustomerService {
 		return maskingCustId;
 	}
 
+	/**
+	 * 위시리스트 등록
+	 *
+	 * @return void
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public void createWishList(Collection<WishList> wishlist) {
+
+		for (WishList wishInfo : wishlist) {
+			wishInfo.setCustNo(TsfSession.getInfo().getCustNo());
+			wishInfo.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
+			//wishInfo.setIthrCd(GagaCookieUtil.getCookie(TsfSession.getHttpServletRequest(), TsfConstants.CK_PREFIX + "_ithrCd"));
+			//wishInfo.setContentsLoc(GagaCookieUtil.getCookie(TsfSession.getHttpServletRequest(), TsfConstants.CK_PREFIX + "_contentsLoc"));
+			wishInfo.setRegNo(TsfSession.getInfo().getCustNo());
+			customerDao.createWishList(wishInfo);
+		}
+	}
+
+	/**
+	 * 위시리스트 삭제처리
+	 *
+	 * @param paramList - 고객 일련번호
+	 * @return void
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteWishList(Collection<WishList> wishlist) {
 
+		for (WishList wishInfo : wishlist) {
+			wishInfo.setCustNo(TsfSession.getInfo().getCustNo());
+			customerDao.deleteWishList(wishInfo);
+		}
+	}
 
 
 }

+ 24 - 0
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -60,5 +60,29 @@ public class TsfPlanningService {
 		//plan.setSiteCd(TsfConstants.SITE_CD);
 		return planningDao.getPlanList(plan);
 	}
+	
+	/**
+	 * 기획전 상품 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 8
+	 */
+	public Collection<Plan> getPlanGoodsList(Plan plan) {
+		//plan.setSiteCd(TsfConstants.SITE_CD);
+		return planningDao.getPlanGoodsList(plan);
+	}
+
+	/**
+	 * 이벤트 갯수 조회
+	 * 
+	 * @param Plan
+	 * @author sowon
+	 * @since 2021.03.08
+	 */
+	public int getEvnetAllCount(Plan plan) {
+		return planningDao.getEventAllCount(plan);
+	}
 
 }

+ 14 - 0
src/main/java/com/style24/front/biz/web/TsfCommonController.java

@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import com.style24.front.support.controller.TsfBaseController;
+import com.style24.front.support.security.session.TsfSession;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -171,4 +172,17 @@ public class TsfCommonController extends TsfBaseController {
 		return ufList;
 	}
 
+	/**
+	 * 로그인 체크
+	 *
+	 * @return true:로그인, false:비로그인
+	 * @author eskim
+	 * @since 2021. 3. 08
+	 */
+	@GetMapping("/login/check")
+	@ResponseBody
+	public boolean checkLogin() {
+		return TsfSession.isLogin();
+	}
+
 }

+ 42 - 11
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -4,21 +4,16 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.lang.Nullable;
 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;
-import org.springframework.web.bind.annotation.RequestParam;
 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.GagaResponseStatus;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscOrderChangeService;
@@ -42,9 +37,13 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
+
 /**
  * 마이페이지 Controller
  * 
@@ -533,8 +532,6 @@ public class TsfMypageController extends TsfBaseController {
 		
 		result.set("accumulatePointList",pointService.getAccumulatePointList(point));
 		
-		log.info("result {}", result);
-		
 		return result;
 	}
 	
@@ -556,8 +553,6 @@ public class TsfMypageController extends TsfBaseController {
 		
 		result.set("usePointList",pointService.getUsePointList(point));
 		
-		log.info("result {}", result);
-		
 		return result;
 	}
 	
@@ -579,8 +574,6 @@ public class TsfMypageController extends TsfBaseController {
 		
 		result.set("allPointList",pointService.getAllPointList(point));
 		
-		log.info("result {}", result);
-		
 		return result;
 	}
 
@@ -598,4 +591,42 @@ public class TsfMypageController extends TsfBaseController {
 		return coreOrderRefundService.cnclRtnRefundAmt(orderList);
 	}
 
+	/**
+	 * 위시리스트 등록처리
+	 *
+	 * @param wishList 
+	 * @return GagaResponse
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@PostMapping("/wish/list/put")
+	@ResponseBody
+	public GagaMap createWishList(@RequestBody Collection<WishList> wishList) throws Exception {
+		GagaMap result = new GagaMap();
+
+		customerService.createWishList(wishList);
+		result.set("status", "200");
+
+		return result;
+	}
+
+	/**
+	 * 위시리스트 삭제처리
+	 *
+	 * @param wishList
+	 * @return GagaResponse
+	 * @throws Exception
+	 * @author eskim
+	 * @since 2021. 03. 08
+	 */
+	@PostMapping("/wish/list/delete")
+	@ResponseBody
+	public GagaMap deleteWishList(@RequestBody Collection<WishList> wishList) throws Exception {
+		GagaMap result = new GagaMap();
+
+		customerService.deleteWishList(wishList);
+		result.set("status", "200");
+
+		return result;
+	}
 }

+ 25 - 4
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -51,7 +51,7 @@ public class TsfPlanningController extends TsfBaseController {
 		Cate4Srch cate = new Cate4Srch();
 		
 		// 디바이스 set
-		plan.setFrontGb(TsfSession.getFrontGb());
+		//plan.setFrontGb(TsfSession.getFrontGb());
 		
 		// 카테고리 
 		mav.addObject("categoryList", planningService.getPlanCate1(cate));
@@ -59,7 +59,7 @@ public class TsfPlanningController extends TsfBaseController {
 		
 		
 		
-		// 각 테고리 기획전 갯수
+		// 각 테고리 기획전 갯수
 		mav.addObject("planCount",planningService.getPlanAllCount(plan));
 		
 		cate.setCate1No(plan.getCateNo());
@@ -68,9 +68,30 @@ public class TsfPlanningController extends TsfBaseController {
 		
 		
 		mav.addObject("planList", planningService.getPlanList(plan));
+		mav.addObject("goodsList", planningService.getPlanGoodsList(plan));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningMainForm"));
 		return mav;
 	}
-
-
+	
+	/**
+	 * 이벤트 메인 화면
+	 * 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 8
+	 */
+	@GetMapping("/event/main/form")
+	public ModelAndView PlanningEventMainForm(Plan plan) throws Exception {
+		ModelAndView mav = new ModelAndView();
+		
+		// 디바이스 set
+		//plan.setFrontGb(TsfSession.getFrontGb());
+		
+		// 이벤트 갯수
+		mav.addObject("cnt",planningService.getEvnetAllCount(plan));
+				
+		
+		mav.setViewName(super.getDeviceViewName("planning/PlanningEventMainForm"));
+		return mav;
+	}
 }

+ 11 - 7
src/main/java/com/style24/persistence/domain/Counsel.java

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 
@@ -40,6 +41,10 @@ public class Counsel extends TscBaseDomain {
 	private String sysFileNm1;		// 시스템파일명1
 	private String orgFileNm2;		// 원본파일명2
 	private String sysFileNm2;		// 시스템파일명2
+	private String file1OrgFileNm;	// 원본파일명1(등록시 사용)
+	private String file1SysFileNm;	// 시스템파일명1(등록시 사용)
+	private String file2OrgFileNm;	// 원본파일명2(등록시 사용)
+	private String file2SysFileNm;	// 시스템파일명2(등록시 사용)
 	private String ansStat;			// 답변상태(공통코드G060)
 	private String ansStatNm;		// 답변상태명
 	private String ansTitle;		// 답변제목
@@ -54,12 +59,12 @@ public class Counsel extends TscBaseDomain {
 	private int ansCnt;		// 답변완료건수
 	private int ingCnt;		// 처리중건수
 
-	
 	// Masking
-	//public String getMaskingCustId() {
-		//return MaskingUtils.id(this.custId);
-	//}
-		
+	public String getMaskingCustId() {
+		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
+	}
+	
+
 	// Pagination
 	@JsonInclude(JsonInclude.Include.NON_EMPTY)
 	private TscPageRequest pageable;
@@ -67,6 +72,5 @@ public class Counsel extends TscBaseDomain {
 	private int pageNo = 1;
 	private int pageSize = 10;
 	private int pageUnit = 10;
-	
-	
+
 }

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

@@ -96,7 +96,7 @@ public class Goods extends TscBaseDomain {
 	private String custGrade;	//고객등급
 	private Integer custNo;		//고객번호
 	private String soldoutGoodsDisplayYn = "N";	//품절노추여부
-	private int pointUnit = 10;	//포인트단위
+	private int pointUnit = 1;	//포인트단위
 	private String goodsNmFull;	//상품타이틀+ 상품명
 	private String sysImgNm;	//상품이미지
 	private String logoFileNm;	//브랜드로고이미지

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

@@ -231,6 +231,8 @@ public class Plan extends TscBaseDomain{
 		private String brand;				// 기획전 리스트 (브랜드 명 외)
 		private String newPlan;				// 기획전 new 확인
 		private int cnt;					// 기획전 브랜드 카운트;
+		
+		private String sysImgNm;			// 상품 이미지
 		// Pagination
 		private TscPageRequest pageable;
 		private int pageNo = 1;

+ 24 - 0
src/main/java/com/style24/persistence/domain/WishList.java

@@ -0,0 +1,24 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 위시리스트 Domain
+ * 
+ * @author eskim
+ * @since 2021. 03. 08
+ */
+@SuppressWarnings("serial")
+@Data
+public class WishList extends TscBaseDomain {
+
+	private Integer custNo;
+	private String goodsCd;
+	private String afLinkCd;
+	private String ithrCd;
+	private String contentsLoc;
+	private Integer planDtlSq;
+
+}

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

@@ -442,4 +442,40 @@
 		      ) B
 	</select>
 
+	<!-- 위시리스트 등록 -->
+	<insert id="createWishList" parameterType="WishList">
+		/* TsfCustomer.createWishList */
+		INSERT INTO TB_WISHLIST
+		(
+		            CUST_NO
+		          , GOODS_CD
+		          , AF_LINK_CD
+		          , ITHR_CD
+		          , CONTENTS_LOC
+		          , PLAN_DTL_SQ
+		          , REG_NO
+		          , REG_DT
+		         ) VALUES (
+		            #{custNo}
+		          , #{goodsCd}
+		          , #{afLinkCd}
+		          , #{ithrCd}
+		          , #{contentsLoc}
+		          , #{planDtlSq}
+		          , #{regNo}
+		          , NOW()
+		         )
+		ON DUPLICATE KEY UPDATE
+		         REG_DT = NOW()
+	</insert>
+
+	<!-- 위시리스트 삭제 -->
+	<delete id="deleteWishList" parameterType="WishList">
+		/* TsfCustomer.deleteWishInfo */
+		DELETE FROM TB_WISHLIST
+		WHERE  CUST_NO = #{custNo}
+		<if test="goodsCd != null and goodsCd != ''">
+		AND    GOODS_CD = #{goodsCd}
+		</if>
+	</delete>
 </mapper>

+ 99 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -37,6 +37,7 @@
 		FROM TB_PLAN P  
 		WHERE 1=1
 		   AND P.DEL_YN = 'N'
+		   AND P.PLAN_GB = 'P'
 		   <if test="cateNo != null and cateNo != ''">
 		   AND P.PLAN_SQ IN (
 		   						SELECT PLAN_SQ 
@@ -45,7 +46,7 @@
 		   					)
 		   </if>
 		    AND NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
-		    AND P.FRONT_GB IN (#{frontGb}, 'A')
+		    <!-- AND P.FRONT_GB IN (#{frontGb}, 'A') -->
 	</select>
 	
 	<!-- 기획전 목록 -->
@@ -101,7 +102,7 @@
 		  AND P1.DEL_YN = 'N'
 		  AND P1.PLAN_GB = 'P'
 		  AND NOW() BETWEEN P1.DISP_STDT AND P1.DISP_EDDT
-		  AND P1.FRONT_GB IN (#{frontGb}, 'A')
+		 <!--  AND P1.FRONT_GB IN (#{frontGb}, 'A') -->
 		  AND P1.PLAN_SQ IN (
 				   						SELECT PLAN_SQ 
 				   						FROM TB_PLAN_CATE 
@@ -112,6 +113,102 @@
 		ORDER BY P1.NEW_PLAN DESC, ABS(DATEDIFF(P1.DISP_EDDT,NOW())) 
 	</select>
 	
+		<!-- 기획전 목록 -->
+	<select id="getPlanGoodsList" parameterType="Plan" resultType="Plan">
+		SELECT P1.PLAN_SQ 
+			      ,P1.PLAN_NM 
+			      ,P1.DTL_TITLE1 
+			      ,P1.PLAN_GB 
+			      ,P1.FRONT_GB 
+			      ,P1.MAIN_PIMG 
+			      ,P1.MAIN_MIMG 
+			      ,P1.DISP_ORD
+			      ,P1.NEW_PLAN
+			      ,P1.DISP_STDT
+			      ,P1.DISP_EDDT
+			      ,P1.REG_NO 
+			      ,P2.BRAND
+			      ,P2.CNT
+			      ,TPD.CORNER_NM
+			      ,P3.GOODS_CD
+			      ,P3.GOODS_STAT
+			      ,(SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = P3.GOODS_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+			      ,P3.CURR_PRICE
+			      ,P3.CURR_BPRICE 
+			      ,P3.GOODS_NM
+		FROM 
+		(
+			SELECT P.PLAN_SQ 
+			      ,P.PLAN_NM 
+			      ,P.DTL_TITLE1 
+			      ,P.PLAN_GB 
+			      ,P.FRONT_GB 
+			      ,P.MAIN_PIMG 
+			      ,P.MAIN_MIMG 
+			      ,P.DISP_ORD 
+			      ,P.REG_NO 
+			      ,CASE WHEN DATE(P.REG_DT) BETWEEN DATE_ADD(NOW(),INTERVAL -3 DAY ) AND NOW() THEN 'NEW' END AS 'NEW_PLAN'   /*등록일 기준 3일 */
+			      ,P.DISP_EDDT 
+			      ,P.DISP_STDT 
+			      ,P.DEL_YN 
+			FROM TB_PLAN P
+			GROUP BY  P.PLAN_SQ 
+			      ,P.PLAN_NM 
+			      ,P.DTL_TITLE1 
+			      ,P.PLAN_GB 
+			      ,P.FRONT_GB 
+			      ,P.MAIN_PIMG 
+			      ,P.MAIN_MIMG 
+			      ,P.DISP_ORD 
+			      ,P.REG_NO
+		)P1 INNER JOIN (
+						SELECT  PB.PLAN_SQ 
+						      , COUNT(PLAN_SQ) AS CNT
+						      ,CASE WHEN COUNT(PLAN_SQ) = 1 THEN MAX(TBG.BRAND_GROUP_KNM) ELSE MAX(TBG.BRAND_GROUP_KNM)END AS BRAND
+						FROM TB_PLAN_BRAND PB INNER JOIN TB_BRAND_GROUP TBG  ON PB.BRAND_GROUP_NO = TBG.BRAND_GROUP_NO
+						GROUP BY PB.PLAN_SQ
+						)P2 ON P1.PLAN_SQ = P2.PLAN_SQ 	
+			LEFT JOIN TB_PLAN_DETAIL TPD ON P1.PLAN_SQ = TPD.PLAN_SQ
+			LEFT JOIN (
+						SELECT TPG.GOODS_CD 
+						      ,TPG.DEL_YN 
+						      ,TPG.DISP_ORD 
+						      ,TPG.PLAN_DTL_SQ 
+						      ,TG.GOODS_STAT 
+						      ,TG.CURR_PRICE 
+						      ,TG.CURR_BPRICE 
+						      ,TG.GOODS_NM 
+						FROM TB_PLAN_GOODS TPG LEFT JOIN TB_GOODS TG ON TPG.GOODS_CD = TG.GOODS_CD 
+						WHERE 1=1
+						  AND TPG.DEL_YN = 'N'
+						  AND TG.GOODS_STAT = 'G008_90'
+					  )P3 ON TPD.PLAN_DTL_SQ = P3.PLAN_DTL_SQ
+		WHERE 1=1
+		  AND P1.DEL_YN = 'N'
+		  AND P1.PLAN_GB = 'P'
+		  AND NOW() BETWEEN P1.DISP_STDT AND P1.DISP_EDDT
+		  <!-- AND P1.FRONT_GB IN ('P','A') -->
+		 AND P1.PLAN_SQ IN (
+				   						SELECT PLAN_SQ 
+				   						FROM TB_PLAN_CATE 
+				   						 <if test="cateNo != null and cateNo != ''">
+				   						WHERE CATE_NO = #{cateNo}
+				   						</if>
+				   					)
+		ORDER BY P1.NEW_PLAN DESC, ABS(DATEDIFF(P1.DISP_EDDT,NOW())) 
+	</select>
+	
+	<select id="getEventAllCount" resultType="int" parameterType="Plan">
+		/* TsfPlanning.getEventAllCount */
+		SELECT COUNT(*) AS CNT
+		FROM TB_PLAN P  
+		WHERE 1=1
+		   AND P.DEL_YN = 'N'
+		   AND P.PLAN_GB = 'E'
+		    AND NOW() BETWEEN P.DISP_STDT AND P.DISP_EDDT
+		    <!-- AND P.FRONT_GB IN (#{frontGb}, 'A') -->
+	</select>
+	
 	
 
 </mapper>

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

@@ -46,34 +46,49 @@
 	<!-- 적립내역 조회-->
 	<select id="getAccumulatePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAccumulatePointList */
-	SELECT
-		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_12' THEN '상품 구매'
-		WHEN   'G069_20' THEN '리뷰'
-		WHEN   'G069_30' THEN '이벤트'
-		WHEN   'G069_90' THEN '관리자'
-		END AS OCCUR_GB ,	
-		CASE   TCHP.OCCUR_GB  	
-		WHEN   'G069_12' THEN TG.GOODS_NM 
-		WHEN   'G069_20' THEN TG.GOODS_NM 
-		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
+	SELECT	
+	   CASE   TCHP.OCCUR_GB
+			WHEN   'G069_12' THEN '상품 구매'
+			WHEN   'G069_20' THEN '리뷰'
+			WHEN   'G069_30' THEN '이벤트'
+			WHEN   'G069_90' THEN '관리자'
+		END AS OCCUR_GB
+	  , CASE   TCHP.OCCUR_GB
+			WHEN   'G069_12' THEN TG.GOODS_NM
+			WHEN   'G069_20' THEN TG.GOODS_NM
+			WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
+			WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
 		END AS  OCCUR_DTL_DESC
 			  , TCHP.PNT_AMT AS pntAmt
 			  , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
+		LEFT JOIN 
+		(
+			SELECT REVIEW_SQ
+				 , ORD_NO 
+				 , ORD_DTL_NO 
+		         , GOODS_CD
+			FROM TB_REVIEW TR
+			WHERE TR.PNT_GIVE_STAT = 'G043_30' 														/* 리뷰조건 : 포인트지급반영*/
+		) TR
+		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
+		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
 		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TOD.ORD_NO = TCHP.ORD_NO
-		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
-		LEFT JOIN TB_GOODS TG 
-		ON TG.GOODS_CD = TOD.GOODS_CD 
+		ON TCHP.ORD_NO = TOD.ORD_NO
+		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS TG
+		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
 		WHERE TCHP.CUST_NO = #{custNo}
+		AND CASE 																					/* 상품평조건 */
+			WHEN TCHP.REVIEW_SQ IS NULL THEN 1
+			WHEN TCHP.REVIEW_SQ IS NOT NULL AND TR.REVIEW_SQ IS NOT NULL THEN 1
+		END > 0	
 		AND TCHP.OCCUR_GB IN ('G069_12','G069_20','G069_30','G069_90')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
+		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
 		AND TCHP.PNT_AMT <![CDATA[>]]> 0
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
-	ORDER BY TCHP.UPD_DT DESC
+		GROUP BY tchp.REVIEW_SQ,TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 	
 	<!-- 사용내역 조회-->
@@ -81,69 +96,92 @@
 	/* TsfPoint.getUsePointList */
 	SELECT
 		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_10' THEN '구매 사용'
-		WHEN   'G069_21' THEN '구매 취소'
-		WHEN   'G069_90' THEN '관리자'
-		WHEN   'G069_99' THEN '소멸'
+			WHEN   'G069_13' THEN '구매 취소'
+			WHEN   'G069_40' THEN '구매 사용'
+			WHEN   'G069_42' THEN '사은품'
+			WHEN   'G069_90' THEN '관리자'
+			WHEN   'G069_99' THEN '소멸'
 		END AS OCCUR_GB ,	
 		CASE   TCHP.OCCUR_GB	
-		WHEN   'G069_10' THEN TG.GOODS_NM 
-		WHEN   'G069_21' THEN TG.GOODS_NM 
-		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_99' THEN TCHP.OCCUR_DTL_DESC
+			WHEN   'G069_13' THEN TG.GOODS_NM
+			WHEN   'G069_40' THEN TG.GOODS_NM 
+			WHEN   'G069_42' THEN TG.GOODS_NM
+			WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
+			WHEN   'G069_99' THEN '유효기간 경과 소멸'
 		END AS OCCUR_DTL_DESC
 			 , TCHP.PNT_AMT AS pntAmt
 			 , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN TB_ORDER_DETAIL TOD
+		LEFT JOIN TB_ORDER_DETAIL TOD																/* 주문상세 */
 		ON TOD.ORD_NO = TCHP.ORD_NO
 		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
-		LEFT JOIN TB_GOODS TG 
+		LEFT JOIN TB_ORD_FREEGIFT TOF																/* 사은품 */
+		ON TOD.ORD_NO = TOF.ORD_NO
+		LEFT JOIN TB_GOODS TG																		/* 상품품 */
 		ON TG.GOODS_CD = TOD.GOODS_CD 
 		WHERE TCHP.CUST_NO = #{custNo}
-		AND TCHP.OCCUR_GB IN ('G069_10','G069_21','G069_90','G069_99')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
+		AND TCHP.OCCUR_GB IN ('G069_13','G069_40','G069_42','G069_90','G069_99')
+		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
 		AND 0 <![CDATA[>]]> TCHP.PNT_AMT
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY  TCHP.OCCUR_GB, PNT_AMT, GOODS_NM,  TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+		GROUP BY  TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
 	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 	
 	<!-- 전체내역 조회-->
 	<select id="getAllPointList" parameterType="Point" resultType="Point">
-		/* TsfPoint.getAllPointList */
+	/* TsfPoint.getAllPointList */
 	SELECT
 		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_10' THEN '구매 사용'
 		WHEN   'G069_12' THEN '상품 구매'
+		WHEN   'G069_13' THEN '구매 취소'
 		WHEN   'G069_20' THEN '리뷰'	
-		WHEN   'G069_21' THEN '구매 취소'
 		WHEN   'G069_30' THEN '이벤트'
+		WHEN   'G069_40' THEN '구매 사용'
+		WHEN   'G069_42' THEN '사은품'
 		WHEN   'G069_90' THEN '관리자'
 		WHEN   'G069_99' THEN '소멸'
 		END AS OCCUR_GB ,	
 		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_10' THEN TG.GOODS_NM
 		WHEN   'G069_12' THEN TG.GOODS_NM 
+		WHEN   'G069_13' THEN TG.GOODS_NM 
 		WHEN   'G069_20' THEN TG.GOODS_NM 
-		WHEN   'G069_21' THEN TG.GOODS_NM
 		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_40' THEN TG.GOODS_NM 
+		WHEN   'G069_42' THEN TG.GOODS_NM
 		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_99' THEN TCHP.OCCUR_DTL_DESC
+		WHEN   'G069_99' THEN '유효기간 경과 소멸'
 		END AS OCCUR_DTL_DESC
 			 , TCHP.PNT_AMT AS pntAmt
 			 , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
+		LEFT JOIN 
+		(
+			SELECT REVIEW_SQ
+				 , ORD_NO 
+				 , ORD_DTL_NO 
+		         , GOODS_CD
+			FROM TB_REVIEW TR
+			WHERE TR.PNT_GIVE_STAT = 'G043_30'
+		) TR
+		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
+		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
 		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TOD.ORD_NO = TCHP.ORD_NO
-		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
+		ON TCHP.ORD_NO = TOD.ORD_NO
+		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
+		LEFT JOIN TB_ORD_FREEGIFT TOF
+		ON TOD.ORD_NO = TOF.ORD_NO
 		LEFT JOIN TB_GOODS TG 
-		ON TG.GOODS_CD = TOD.GOODS_CD 
+		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
 		WHERE TCHP.CUST_NO = #{custNo}
-		AND TCHP.OCCUR_GB IN ('G069_10','G069_12','G069_20','G069_21','G069_30','G069_90','G069_99')
+		AND CASE
+			WHEN TCHP.REVIEW_SQ IS NULL THEN 1
+			WHEN TCHP.REVIEW_SQ IS NOT NULL AND TR.REVIEW_SQ IS NOT NULL THEN 1
+		END > 0		
+		AND TCHP.OCCUR_GB IN ('G069_12','G069_13','G069_20','G069_30','G069_40','G069_42','G069_90','G069_99')
 		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
 		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+		GROUP BY TCHP.REVIEW_SQ, TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
 	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 </mapper>

+ 246 - 0
src/main/webapp/WEB-INF/views/mob/callcenter/OneToOneQnaFormMob.html

@@ -0,0 +1,246 @@
+<!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/CallcenterLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : OneToOneQnaFormWeb.html
+ * @desc    : 1:1문의 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.19   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+	<main role="" id="" class="container cs">
+		<!-- 고객센터 Gnb -->
+		<nav class="pnb" id="callcenterGnb">
+		</nav>
+		<!-- //고객센터 Gnb -->
+		
+		<!-- ★ 컨텐츠 시작 -->
+		<section class="content cs_contactUs_1">
+			<div class="inner sr-only"><h2 class="title">1:1문의</h2></div>
+			<div class="inner wide">
+				<!-- 게시판info -->
+				<ul class="inquiry_box">
+					<li>
+						<p th:text="${qnaCountInfo.totCnt}">999</p>
+						<p>총 문의</p>
+					</li>
+					<li>
+						<p th:text="${qnaCountInfo.ansCnt}">456</p>
+						<p>답변완료</p>
+					</li>
+					<li>
+						<p th:text="${qnaCountInfo.ingCnt}">690</p>
+						<p>처리 중</p>
+					</li>
+				</ul>
+				<!-- //게시판info -->
+			</div>
+			
+			<div class="inner wide">
+				<!-- 폴딩리스트2 -->
+				<div class="ui_row" id="divQna"> <!-- 데이터 없을시 클래스 nodata 추가 -->
+					<div class="foldGroup case2">
+						<!-- list2 -->
+						<ul id="ulQna">
+						</ul>
+						<!-- //list2 -->
+					</div>
+				</div>
+				<div class="ui_foot" id="nextPage">
+					<button class="btn btnM btnIcon_more" onclick="fnGetList();">더보기</button>
+				</div>
+			</div>
+		</section>
+		<!-- ★ 컨텐츠 종료 -->
+	</main>
+	
+	<div class="cs_contactUs_my_footer">
+		<a href="#none" class="questionMy"><p>1:1문의</p></a>
+	</div>
+	
+	<!-- 모달영역 -->
+	<div>
+		<div class="modal pop_full fade" id="thumb_pic" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true" style="display: none;">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h5 class="modal-title sr-only">문의이미지슬라이드</h5>
+					</div>
+					<div class="modal-body">
+						<div class="pop_cont">
+							<!-- Swiper -->
+							<div class="swiper-container cs_pop">
+								<div class="swiper-wrapper">
+									<div class="swiper-slide"><div class="pop_img" style="background-image: url(/images/mo/cs_pop_people.png);"></div></div>
+									<div class="swiper-slide"><div class="pop_img" style="background-image: url(/images/mo/cs_pop_people2.png);"></div></div>
+								</div>
+								<!-- Add Pagination -->
+								<div class="swiper-pagination"></div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- //모달끝 -->
+		
+	<form id="qnaForm" name="qnaForm" action="#" th:action="@{'/callcenter/onetoone/qna/list'}">
+		<input type="hidden" name="pageNo" value ="1"/>
+		<input type="hidden" name="pageSize" value ="10"/>
+	</form>
+
+<script src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// JQUERY를 이용한 버튼 모달 팝업
+	$(".thumb_pic").click(function() {
+		$("#thumb_pic").modal("show");
+	});
+	
+	// 슬라이더_팝업에 문의이미지슬라이드
+	var swiper = new Swiper('#thumb_pic .swiper-container.cs_pop', {
+		observer: true,
+		observeParents: true,
+		pagination: {
+			el: '#thumb_pic .swiper-pagination',
+		},
+	});
+	
+	$(document).ready(function() {
+		// 고객센터 GNB 설정
+		fnSetCallcenterGnb(2);
+		
+		fnGetList(1);
+	});
+	
+	let fnGetList = function(page) {
+		// Initialize a pagination
+		gagaPaging.init('qnaForm', fnGetListCallback, 'pageNav', 10);
+
+		// Load data
+		gagaPaging.load(page);
+	}
+	
+	var fnGetListCallback = function(result) {
+		$('#ulQna').html('');
+
+		// 목록
+		if (result.dataList != null && result.dataList.length > 0) {
+			$.each(result.dataList, function(idx, item) {
+				let tag = '<li>\n';
+				tag += '	<div class="inner wide">\n';
+				tag += '		<div class="ui_row">\n'; //데이터 없을시 클래스 nodata 추가
+				tag += '			<div class="foldGroup case2">\n';
+				tag += '				<ul>\n';
+				tag += '					<li>\n';
+				tag += '						<div class="fold_head">\n';
+				tag += '							<a href="javascript:void(0)">\n';
+				tag += '						<div>\n';
+				tag += '						<div class="fold_tit">\n';
+				tag += '							<div class="lap1">\n';
+				tag += '								<span class="fold_state ' + (item.ansStat == "G060_10" ? "doing" : "done") + '">' + item.ansStatNm + '</span>\n'; //답변완료 : done / 처리중 : doing
+				tag += '								<span class="prod">' + item.counselClsfNm + '</span>\n';
+				tag += '							</div>\n';
+				tag += '							<div class="lap2"><span>' + item.questTitle + '</span></div>\n';
+				tag += '						</div>\n';
+				tag += '						<span class="data">' + item.questDt + '</span>\n';
+				tag += '					</div>\n';
+				tag += '				</a>\n';
+				tag += '			</div>\n';
+				tag += '			<div class="fold_cont">\n';
+				tag += '				<div class="fold_detail">\n';
+				tag += '					<div>' + item.questContent + '</p>\n';
+				
+				if (!gagajf.isNull(item.sysFileNm1) || !gagajf.isNull(item.sysFileNm2)) {
+					tag += '				<p class="img_group">\n';
+					
+					if (!gagajf.isNull(item.sysFileNm1)) {
+						tag += '					<span class="thumb_pic">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm1 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
+						tag += '					</span>\n';
+					}
+					
+					if (!gagajf.isNull(item.sysFileNm2)) {
+						tag += '					<span class="thumb_pic">\n';
+						tag += '						<img src="' + _uploadImageUrl + '/counsel/' + item.sysFileNm2 + '" alt="" onerror="this.src=\'/image/bg_profile.png\'">\n';
+						tag += '					</span>\n';
+					}
+					
+					tag += '				</p>\n';
+				}
+				
+				tag += '				</div>\n';
+				tag += '			</div>\n';
+				
+				if (item.ansStat == 'G060_20') { // 답변완료 상태일 때
+					tag += '			<div class="fold_answer">\n';
+					tag += '				<div>\n';
+					tag += '					<div class="answer_body">' + item.ansContent + '</div>\n';
+					tag += '					<div class="answer_foot">\n';
+					tag += '						<span class="data">' + item.ansDt + '</span>\n';
+					
+					if (item.ansStat == 'G060_10') { // 처리중일때
+// 					tag += '						<button type="button" class="btn_delete" onclick="fnDeleteQna(' + item.counselSq + ');"><span>삭제</span></button>
+					}
+					tag += '					</div>\n';
+					tag += '				</div>\n';
+					tag += '			</div>\n';
+				}
+				
+				tag += '		</div>\n';
+				tag += '	</div>\n';
+				tag += '</li>\n';
+
+				$('#ulQna').append(tag);
+			});
+		} else {
+			let tag = '<li>내역이 없습니다.</li>\n';
+			$('#ulQna').append(tag);
+			$('#divQna').addClass('nodata');
+		}
+
+		// 더보기 버튼 노출/미노출
+		if (result.paging.pageable.totalPage == result.paging.pageable.currPage) {
+			$('#nextPage').hide();
+		} else {
+			$('#nextPage').show();
+		}
+	}
+	
+	// 삭제
+	let fnDeleteQna = function(counselSq) {
+		mcxDialog.confirm("등록된 내용을 삭제하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let params = new Object();
+				params.counselSq = counselSq;
+				
+				var jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/callcenter/onetoone/qna/delete'
+						, jsonData
+						, function() {
+							fnGetList();
+						});
+			}
+		});
+	}
+/*]]>*/
+</script>
+
+</th:block>
+
+</body>
+</html>

+ 62 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/FooterMob.html

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+
+<footer id="footer" th:fragment="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>
+
+			<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>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready( function() {
+	});
+/*]]>*/
+</script>
+
+</footer>
+
+</html>

+ 37 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/GnbMob.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GnbMob.html
+ * @desc    : GNB
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.08   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<header th:fragment="gnb">
+	<section class="htop" id="htopSub" style="background: #fff;">
+		<button class="btn_back" title="이전페이지로">
+			<span>
+				<i class="gl1"></i>
+				<i class="gl2"></i>
+				<i class="gl3"></i>
+			</span>
+		</button>
+		<h1 id="htopTitle">고객센터</h1>
+	</section>
+	
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+/*]]>*/
+</script>
+
+</header>
+
+</html>

+ 48 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/HeadMob.html

@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+
+<head th:fragment="head">
+	<meta charset="utf-8"/>
+	<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=medium-dpi"/> 
+<!-- 	<meta http-equiv="cache-control" content="no-cache"/> -->
+<!-- 	<meta http-equiv="expires" content="0"/> -->
+<!-- 	<meta http-equiv="pragma" content="no-cache"/> -->
+	<meta name="Title" th:content="${metaBrowserTitle}" content="한세공식몰 스타일24"/>
+	<meta name="description" th:content="${metaOgDesc}" content="한세공식몰,TBJ,FRJ,NBA,NBA KIDS,LPGA,PGATOUR,컬리수,모이몰른,MOIMOLN,리카앤,리바이스키즈,ANDEW,BUCKAROO,나이키키즈"/>
+	<meta name="keywords" th:content="${metaKeywords}" content="한세공식몰,TBJ,FRJ,NBA,NBA KIDS,LPGA,PGATOUR,컬리수,모이몰른,MOIMOLN,리카앤,리바이스키즈,ANDEW,BUCKAROO,나이키키즈"/>
+	<meta property="og:type" content="website"/>
+	<meta property="og:image" th:content="${metaOgImage}" content="/image/web/common/og_style24.png"/>
+	<meta property="og:url" th:content="${@environment.getProperty('domain.front')}" content="http://www.style24.com"/>
+	<meta property="og:title" th:content="${metaBrowserTitle}" content="스타일24"/>
+	<meta property="og:description" th:content="${metaOgDesc}" content="한세공식몰,TBJ,FRJ,NBA,NBA KIDS,LPGA,PGATOUR,컬리수,모이몰른,MOIMOLN,리카앤,리바이스키즈,ANDEW,BUCKAROO,나이키키즈"/>
+	<meta property="og:locale" content="ko_KR"/>
+	<meta property="og:site_name" th:content="${metaBrowserTitle}" content="한세공식몰 스타일24"/>
+	
+	<title th:text="${metaBrowserTitle}">한세공식몰 스타일24</title>
+	<link rel="icon" th:href="@{/images/favicon.ico}" href="favicon.ico" type="image/x-icon"/>
+	<link rel="apple-touch-icon" href="/images/apple-touch-icon.png" sizes="180x180"/>
+	<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="/ux/mo/css/swiper.min.css"/>
+	<link rel="stylesheet" type="text/css" th:href="@{'/ux/mo/css/style24.m.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/mo/css/style24.m.css"/>
+	
+	<script src="/ux/mo/js/jquery-3.5.1.min.js"></script>
+	<script src="/ux/mo/js/jquery.modal.min.js"></script>
+	<script src="/ux/mo/js/swiper.min.js"></script>
+	<script src="/ux/plugins/jquery.serializeObject.min.js"></script>
+	<script src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>
+
+	<!-- Global site tag (gtag.js) - Google Analytics -->
+<!-- 	<script async src="https://www.googletagmanager.com/gtag/js?id=UA-168660512-1"></script> -->
+	<script>
+// 		window.dataLayer = window.dataLayer || [];
+// 		function gtag(){dataLayer.push(arguments);}
+// 		gtag('js', new Date());
+// 		gtag('config', 'UA-168660512-1');
+	</script>
+</head>
+
+</html>

+ 24 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/ScriptsMob.html

@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ScriptsWeb.html
+ * @desc    : 공통 스크립트
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.08   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<th:block th:fragment="scripts">
+<script th:src="@{'/ux/mo/js/common_m.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/mo/js/common_m.js"></script>
+<script th:src="@{'/ux/mo/js/main_m.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/mo/js/main_m.js"></script>
+<script th:src="@{'/ux/style24_link.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/style24_link.js"></script>
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.common.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.common.js"></script>
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.validation.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.validation.js"></script>
+</th:block>
+</html>

+ 42 - 0
src/main/webapp/WEB-INF/views/mob/common/fragments/VariablesMob.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : VariablesWeb.html
+ * @desc    : Global variables 설정
+ *            prefix를 _(underbar)로 시작한다.
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.28   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<th:block th:fragment="variables">
+<script th:inline="javascript">
+/*<![CDATA[*/
+var _frontUrl = [[${@environment.getProperty('domain.front')}]];
+var _uximgUrl = [[${@environment.getProperty('domain.uximage')}]];
+var _imgUrl = [[${@environment.getProperty('domain.image')}]];
+var _uploadDefaultUrl = [[${@environment.getProperty('upload.default.view')}]];
+var _uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
+var _uploadImageUrl = [[${@environment.getProperty('upload.image.view')}]];
+var _frontGb = [[${frontGb}]];
+
+var _today = [[${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}]];
+var _realtime = [[${#calendars.format(#calendars.createNow(), 'HHmmss')}]];
+var _thisYear = [[${#calendars.format(#calendars.createNow(), 'yyyy')}]];
+
+// App Info.
+var _osType = [[${osType}]];
+var _isApp = [[${isApp}]];
+var _appName = [[${appName}]];
+var _appVersion = [[${appVersion}]];
+/*]]>*/
+</script>
+</th:block>
+
+</html>

+ 47 - 0
src/main/webapp/WEB-INF/views/mob/common/layout/CallcenterLayoutMob.html

@@ -0,0 +1,47 @@
+<!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="app">
+		<a href="#mainCon" class="skipNav">본문바로가기</a>
+		
+		<!-- GNB -->
+		<header th:replace="~{web/common/fragments/GnbWeb :: gnb}"></header>
+		<!--// GNB -->
+
+		<!-- CONTENT AREA -->
+		<th:block layout:fragment="content"></th:block>
+		<!-- // CONTENT AREA -->
+
+<!-- Footer -->
+<footer id="footer" th:replace="~{web/common/fragments/FooterWeb :: footer}"></footer>
+
+<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
+<!-- <th:block th:replace="~{web/common/fragments/MarketingScripts :: mscripts}"></th:block> -->
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var fnSetCallcenterGnb = function(lnbLvl) {
+		let tag = '';
+		tag += '<ul>\n';
+		tag += '	<li><a href=javascript:void(0);" onclick="cfnGoToPage(_PAGE_FAQ);"' + (lnbLvl == 1 ? ' class="on"' : '') + '>FAQ</a></li>\n';
+		tag += '	<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"' + (lnbLvl == 2 ? ' class="on"' : '') + '>1:1문의</a></li>\n';
+		tag += '	<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_GOODS_QNA);"' + (lnbLvl == 3 ? ' class="on"' : '') + '>상품문의</a></li>\n';
+		tag += '	<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOTICE);"' + (lnbLvl == 4 ? ' class="on"' : '') + '>공지</a></li>\n';
+		tag += '</ul>\n';
+		$('#callcenterGnb').html(tag);
+	}
+	
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+</body>
+</html>

+ 27 - 0
src/main/webapp/WEB-INF/views/mob/common/layout/ErrorLayoutMob.html

@@ -0,0 +1,27 @@
+<!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>
+
+<th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
+
+<!-- CONTENT AREA -->
+<th:block layout:fragment="content"></th:block>
+<!-- // CONTENT AREA -->
+
+<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+</body>
+</html>

+ 60 - 0
src/main/webapp/WEB-INF/views/web/callcenter/OneToOneQnaFormWeb.html

@@ -87,6 +87,30 @@
 	</div>
 	<!-- // container -->
 	
+	<!-- 문의 이미지 팝업 -->
+	<div class="modal fade cs_pop contact_img_pop" id="contactImgPop" tabindex="-1" role="dialog" aria-labelledby="contactImgLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<div class="modal-header sr-only">
+					<h5 class="modal-title" id="contactImgLabel">이미지 상세보기</h5>
+				</div>
+				<div class="modal-body">
+					<div class="pop_cont">
+ 						<div class="swiper-container">
+							<div class="swiper-wrapper">
+								<!-- 이미지 슬라이드 영역 -->
+							</div>
+						</div>
+						<div class="swiper-button-next"></div>
+						<div class="swiper-button-prev"></div>
+						<div class="swiper-pagination"></div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- //문의 이미지 팝업 -->
+	
 	<form id="qnaForm" name="qnaForm" action="#" th:action="@{'/callcenter/onetoone/qna/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
 		<input type="hidden" name="pageSize" value ="10"/>
@@ -95,6 +119,42 @@
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
+	//슬라이드 - 문의 이미지 팝업
+	var contactPopSwiper = new Swiper('.cs_pop.contact_img_pop .swiper-container', {
+		navigation: {
+			nextEl: '.cs_pop.contact_img_pop .swiper-button-next',
+			prevEl: '.cs_pop.contact_img_pop .swiper-button-prev',
+		},
+		pagination: {
+			el: '.cs_pop.contact_img_pop .swiper-pagination',
+			clickable: true,
+		},
+		observer:true,
+		observeParents: true,
+	});
+	
+	// 팝업 - 문의 이미지 슬라이드
+	$(document).on('click','.contactUs .img_group .thumb_pic',function(e){
+		$("#contactImgPop .swiper-wrapper").empty();
+
+		var popSlideIndex = $(this).index();
+		contactPopSwiper.slideTo(popSlideIndex);
+		contactPopSwiper.update();
+
+		var contactImglength = $('.contactUs .img_group .thumb_pic').length;
+		var popImgHtml = "";
+		for (i = 1; i <= contactImglength; i++) {
+			var contactImg = $(this).find('img');
+			var contactImgSrc = $('.img_group .thumb_pic:nth-child('+i+') img').attr('src');
+			popImgHtml += "<div class='swiper-slide'><div class='pop_img' style='background-image:url("+ contactImgSrc +")'></div></div>";
+		}
+
+		$("#contactImgPop .swiper-wrapper").append(popImgHtml);
+		$('#contactImgPop').modal("show");
+		
+		return false;
+	});
+	
 	$(document).ready(function() {
 		// 고객센터 LNB 설정
 		fnSetCallcenterLnb(2);

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

@@ -84,8 +84,8 @@
 													<div class="imgUpload">
 														<label for="fileAdd" class="fileAdd">첫번째업로드</label>
 														<input type="file" id="fileAdd" name="file1"/>
-														<input type="hidden" name="fileAddOrgFileNm"/>
-														<input type="hidden" name="fileAddSysFileNm"/>
+														<input type="hidden" name="file1OrgFileNm"/>
+														<input type="hidden" name="file1SysFileNm"/>
 													</div>
 													<div class="imgUpload">
 														<label for="fileAdds" class="fileAdd">두번째업로드</label>

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

@@ -101,7 +101,7 @@
 					<li><a href="#">총알배송</a></li>
 					<li><a href="#">아울렛</a></li>
 					<li><a href="#">룩북</a></li>
-					<li><a href="#">이벤트/혜택</a></li>
+					<li><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);" title="기획전 바로가기">이벤트/혜택</a></li>
 				</ul>
 			</div>
 			<!-- // nav -->

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

@@ -28,11 +28,14 @@
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/common.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/common.css"/>
 	<link rel="stylesheet" type="text/css" href="/ux/pc/css/jquery-ui.css">
 	<link rel="stylesheet" type="text/css" href="/ux/pc/css/slick.css" />
+	<link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.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="/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>
-	<script src="/ux/pc/js/jquery.modal.min.js"></script>
 	<script src="/ux/pc/js/jquery.ui.datepicker.monthyearpicker.js"></script>
 	<script src="/ux/plugins/jquery.serializeObject.min.js"></script>
 	<script src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>

+ 65 - 437
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -87,7 +87,7 @@
 								<div class="desc_top">
 									<a href="javascript:void(0);" class="btn_brand" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</a>
 									<button type="button" class="itemShare">상품 공유하기</button>
-									<button type="button" class="itemLike" th:classappend="${wishYn == 'Y'}? 'active' : ''">관심상품 추가</button>
+									<button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'active' : ''"  onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
 								</div>
 								<div class="desc_info">
 									<div class="title_blk">
@@ -421,114 +421,6 @@
 									</div>
 								</div>
 							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
-							<div class="swiper-slide">
-								<div class="item_prod">
-									<div class="item_state">
-										<a href="#none" class="itemLink">
-											<div class="itemPic">
-												<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
-												<button type="button" class="itemLike">관심상품 추가</button>
-											</div>
-											<p class="itemBrand">BRAND NAME1</p>
-											<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-											<p class="itemPrice">80,100
-												<span class="itemPrice_original">89,000</span>
-												<span class="itemPercent">10%</span>
-											</p>
-										</a>
-									</div>
-								</div>
-							</div>
 						</div>
 						<!-- Add Scrollbar -->
 						<div class="swiper-scrollbar"></div> 
@@ -560,53 +452,97 @@
 					</div>
 				</div>
 				<!-- //상품설명 노출 -->
-				<!-- 관리자 에디터입력 내용   상단 html -->
-				<th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" ></th:block>
-				<div class="mdhtml_box" th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}">
-				</div>
+				<!-- 관리자 에디터입력 내용   공지 html -->
+					<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 -->
 				<!-- 관리자 에디터입력 내용 노출  상단 html -->
-				<div class="mdhtml_box" th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}">
-				</div>
-				<!-- //관리자 에디터입력 내용 노출 -->
+				<div class="mdhtml_box" th:if="${goodsInfo.goodsTopDesc != null  and !goodsInfo.goodsTopDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></div>
+					
 				<!-- 착용컷 노출 -->
-				<div class="view_outfit_box">
+				<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">
-						<img src="/images/pc/thumb/tmp_outfit_desc1.jpg" alt="">
-						<img src="/images/pc/thumb/tmp_outfit_desc2.jpg" alt="">
-						<img src="/images/pc/thumb/tmp_outfit_desc3.jpg" alt="">
+						<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}" alt="">
+						</th:block>
 					</div>
 				</div>
+				
 				<!-- //착용컷 노출 -->
 				<!-- 상품컷 노출 -->
-				<div class="view_detail_box">
+				<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">
-						<img src="/images/pc/thumb/tmp_detail_desc1.jpg" alt="">
-						<img src="/images/pc/thumb/tmp_detail_desc2.jpg" alt="">
+						<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}" alt="">
+						</th:block>
 					</div>
 				</div>
 				<!-- //상품컷 노출 -->
 				<!-- 원단 노출 -->
-				<div class="view_fabric_box">
+				<div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1.')}">
 					<span class="tit_view">FABRIC</span>
 					<div class="view">
-						<img src="/images/pc/thumb/tmp_fabric_desc1.jpg" alt="">
+						<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">
+				<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>
-							<img src="/images/pc/thumb/tmp_label_desc1.jpg" alt="">
-							<img src="/images/pc/thumb/tmp_label_desc2.jpg" alt="">
+							<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">
+						<th:block th:each="goodsImg, status : ${goodsImgList}" >
+							<img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm}" 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>
+					
+				<!-- 관리자 에디터입력 내용 노출  하다단 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="brand_box">
 					<p class="name" th:text="${goodsInfo.brandGroupNm}">TBJ 티비제이</p>
@@ -738,114 +674,6 @@
 										</div>
 									</div>
 								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdClickother1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
 							</div>
 						</div>
 						<!-- Add Pagination -->
@@ -919,8 +747,6 @@
 										</div>
 									</div>
 								</div>
-								
-								
 							</div>
 						</div>
 						<!-- Add Pagination -->
@@ -979,114 +805,6 @@
 										</div>
 									</div>
 								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
 							</div>
 						</div>
 						<!-- Add Pagination -->
@@ -1163,96 +881,6 @@
 										</div>
 									</div>
 								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
-								<div class="swiper-slide">
-									<div class="item_prod">
-										<div class="item_state">
-											<a href="#none" class="itemLink">
-												<div class="itemPic">
-													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdRelate1.jpg">
-													<button type="button" class="itemLike">관심상품 추가</button>
-												</div>
-												<p class="itemBrand">BRAND NAME1</p>
-												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
-												<p class="itemPrice">80,100
-													<span class="itemPrice_original">89,000</span>
-													<span class="itemPercent">10%</span>
-												</p>
-											</a>
-										</div>
-									</div>
-								</div>
 							</div>
 						</div>
 						<!-- Add Pagination -->

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

@@ -43,7 +43,7 @@
 		<div class="pd_qnalist">
 		<form id="goodsQnaForm" name="goodsQnaForm" action="#" th:action="@{'/goods/qna/list'}">
 		<input type="hidden" name="pageNo" value ="1"/>
-		<input type="hidden" name="pageSize" value ="10"/>
+		<input type="hidden" name="pageSize" value ="20"/>
 		<input type="hidden" name="relGoodsCd" th:value ="${goodsInfo.goodsCd}"/>
 			<div class="info_txt">
 				<ul>
@@ -93,7 +93,7 @@
 	
 	let fnGetList = function() {
 		// Initialize a pagination
-		gagaPaging.init('goodsQnaForm', fnGetListCallback, 'pageNav', 10);
+		gagaPaging.init('goodsQnaForm', fnGetListCallback, 'pageNav', 20);
 
 		// Load data
 		gagaPaging.load(1);
@@ -121,7 +121,7 @@
 				}
 				tag += '				</div>\n';
 				tag += '				<div class="data">\n';
-				tag += '					<span class="wr_id">'+ item.custId+'</span>\n';
+				tag += '					<span class="wr_id">'+ item.maskingCustId+'</span>\n';
 				tag += '					<span class="wr_data">' + item.questDt + '</span>\n';
 				tag += '				</div>\n';
 				tag += '			</div>\n';

+ 33 - 18
src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html

@@ -86,24 +86,30 @@
 		// select 날짜 생성
 		var date = new Date();
 		var year = date.getFullYear();
-		var month = date.getMonth() + 1;
+		var month = date.getMonth() +1;
 		
 		var oneYearAgo = year -1;
-		var yearMonth = year;
 		var oneYearLater = year +1;
 		
+		if(10 > month){
+			month = 0 + "" + (date.getMonth()+1);
+		}
+		// Select this year month
+		var checkYm = year + "" + month;
+		
 		for(var i = 1;i <= 12; i++){
 			if(i < 10 && i != month){
-				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + 0 + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
 			}
 			else if(i < 10 && i == month){
-				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + 0 + i +"'>" + yearMonth + "년" + " " + i + "월" +"</li>");
+				$(".select").append("<li class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + 0 + i +"'>" + year + "년" + " " + i + "월" +"</li>");
 			}
 			else if(i > 9 && i != month){
-				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
 			}
 			else if(i > 9 && i == month){
-				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ year + "" + i +"'>"+ year + "년" + " " + i + "월" +"</li>");
 			}
 		}
 		
@@ -112,9 +118,8 @@
 		
 		let url = '/mypage/allpoint/list';		
 		let data = {};
-				
+
 		data.searchDt = $('#searchDt').find('.selected').val();
-		console.log(data);
 
 		var jsonData = JSON.stringify(data);
 		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
@@ -140,9 +145,13 @@
 		
 		let data = {};
 		
-		data.searchDt = $('#searchDt').find('.selected').val();
-		
-		console.log(data);
+		// 처음 화면 로딩시 이번 달 선택
+		if($('.select').find('.selected').val() == checkYm){
+			data.searchDt = $('.select').find('.selected').val();
+		}else{
+			data.searchDt = $('#searchDt').find('.selected').val();
+		}
+
 		var jsonData = JSON.stringify(data);
 		
 		$.ajax(
@@ -158,9 +167,7 @@
 				}
 		)
 	});
-	
 
-	
 	function PointAllListInfo(result) {
 		
 		let allPointList = result.allPointList;
@@ -197,7 +204,11 @@
 		
 		let data = {};
 		
-		data.searchDt = $('#searchDt').find('.selected').val();
+		if($('.select').find('.selected').val() == checkYm){
+			data.searchDt = $('.select').find('.selected').val();
+		}else{
+			data.searchDt = $('#searchDt').find('.selected').val();
+		}
 		
 		let jsonData = JSON.stringify(data);
 		
@@ -246,7 +257,11 @@
 		
 		let data = {};
 		
-		data.searchDt = $('#searchDt').find('.selected').val();
+		if($('.select').find('.selected').val() == checkYm){
+			data.searchDt = $('.select').find('.selected').val();
+		}else{
+			data.searchDt = $('#searchDt').find('.selected').val();
+		}
 		
 		let jsonData = JSON.stringify(data);
 		
@@ -287,9 +302,9 @@
 		// 마이페이지 location 설정
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
 		
-		// 전체내역
-		$("#SearchFullHistory").trigger('click');
-		
+		// 전체내역 표시
+ 		$("#SearchFullHistory").trigger('click');
+
 		// 셀렉트박스 활성화
 		$('.select_custom.type1').each(function(index) {
 			var selecter01 = new sCombo($(this));

+ 215 - 0
src/main/webapp/WEB-INF/views/web/planning/PlanningEventMainFormWeb.html

@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : PlanningEventMainFormWeb.html
+ * @desc    : 이벤트 Page
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.3.8  	 sowon     최초 작성
+ *******************************************************************************
+ -->
+ <body>
+<th:block layout:fragment="content">
+	<!--  container -->
+	<div id="container" class="container ev">
+		<div class="breadcrumb">
+			<ul>
+				<li class="bread_home"><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈</a></li>
+				<li class="bread_2depth">이벤트/혜택</li>
+			</ul>
+		</div>
+		<div class="wrap">
+			<div class="content ev_list">
+				<div class="cont_head">
+					<div>
+						<h3>이벤트</h3>
+					</div>
+				</div>
+				<div class="cont_body">
+					<div class="ev_mem_rank">
+						<div class="txt">
+							<strong>STYLE24 BENEFIT</strong>
+							<p>STYLE24 회원등급에 따라<br>제공되는 혜택 정보를 확인해 보세요.</p>
+							<a href="javascript:;" class="btn btn_dark">회원등급 혜택 보기</a>
+						</div>
+						<div class="mem_rank_list">
+							<ul class="clear">
+								<li>
+									<div class="icon vip"><span>V</span></div>
+									<span>VIP</span>
+								</li>
+								<li>
+									<div class="icon gold"><span>G</span></div>
+									<span>GOLD</span>
+								</li>
+								<li>
+									<div class="icon silver"><span>S</span></div>
+									<span>SILVER</span>
+								</li>
+								<li>
+									<div class="icon bronze"><span>B</span></div>
+									<span>BRONZE</span>
+								</li>
+								<li>
+									<div class="icon welcome"><span>W</span></div>
+									<span>WELCOME</span>
+								</li>
+							</ul>
+						</div>
+					</div>
+					<th:block th:if="${cnt > 0}">
+					<div class="event_list">
+					</th:block>
+					<th:block th:unless="${cnt > 0}">
+					<div class="event_list no_data">
+					</th:block>
+						<div class="event_top">
+							<div class="count">
+								<span>[[${cnt}]]</span>개의 이벤트
+							</div>
+							<div class="event_btn">
+								<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_NOTICE);">당첨자 발표</a>
+							</div>
+						</div>
+						<div class="list">
+							
+							<ul class="clear event_con">
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<div class="rank ranker"><span>NEW</span></div>
+											<img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션">
+										</div>
+										<div class="txt">
+											<p class="tit">ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+									<div class="ev_img">
+										<div class="rank ranker"><span>NEW</span></div><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP">
+									</div>
+									<div class="txt">
+										<p class="tit">단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP 단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP</p>
+										<div class="date">
+											<span>2020.12.17</span> - <span>2021.01.03</span>
+										</div>
+									</div>
+								</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img03.jpg" alt="ANDEW white 20winter">
+										</div>
+										<div class="txt">
+											<p class="tit">ANDEW white 20winter</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img04.jpg" alt="자연스럽고 편안한  Earth Colors">
+										</div>
+										<div class="txt">
+											<p class="tit">자연스럽고 편안한  Earth Colors</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img05.jpg" alt="RETRO CONTEMPORARY 3개 브랜드 BUCKAROO/NBA/ANDEW">
+										</div>
+										<div class="txt">
+											<p class="tit">RETRO CONTEMPORARY 3개 브랜드 BUCKAROO/NBA/ANDEW</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img06.jpg" alt="스타일24만의 스타일로, tbj 하이 스타일링">
+										</div>
+										<div class="txt">
+											<p class="tit">스타일24만의 스타일로, TBJ 하이 스타일링</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img07.jpg" alt="올 겨울, 나를 설레게하는 선물같은 브랜드 THIS IS FOUR YOU">
+										</div>
+										<div class="txt">
+											<p class="tit">올 겨울, 나를 설레게하는 선물같은 브랜드 THIS IS FOUR YOU</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+								<li>
+									<a href="">
+										<div class="ev_img">
+											<img src="/images/pc/thumb/ev_list_img08.jpg" alt="한눈에 살펴보는 우리 아이 겨울 아이템">
+										</div>
+										<div class="txt">
+											<p class="tit">한눈에 살펴보는 우리 아이 겨울 아이템</p>
+											<div class="date">
+												<span>2020.12.17</span> - <span>2021.01.03</span>
+											</div>
+										</div>
+									</a>
+								</li>
+							</ul>
+							
+							<ul class="clear no_con">
+								<li>
+									<p><img src="/images/pc/ico_content_find.png" alt="등록된 이벤트가 없습니다."></p>
+									<span>등록된 이벤트가 없습니다.</span>
+									<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MAIN);">홈으로 가기</a>
+								</li>
+							</ul>
+						
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- // container -->	
+
+<script th:inline="javascript">
+
+</script>
+
+</th:block>
+
+</body>
+</html>

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

@@ -81,7 +81,7 @@
                                     	<th:block th:if="${PlanData.newPlan != null}">
                                         <div class="shape ranker"><span>NEW</span></div>
                                         </th:block>
-                                        <img src="${@environment.getProperty('domain.image')+'/plan/'+PlanData.mainPimg}" alt=""> <!-- 430x430 사이즈 최적 -->
+                                        <img th:src="${@environment.getProperty('domain.image')+'/planning/'+PlanData.mainPimg}" style="width: 100%;" alt=""> <!-- 430x430 사이즈 최적 -->
                                         <div class="exhi_detail">
                                         	<th:block th:if="${PlanData.cnt > 1}">
                                             <p class="brand">[[${PlanData.brand}]] 외</p>
@@ -90,46 +90,26 @@
                                             <p class="brand">[[${PlanData.brand}]]</p>
                                             </th:block>
                                             <h3 class="tit">[[${PlanData.planNm}]]</h3>
-                                            <p class="sale">신상 15%쿠폰할인</p>
+                                            <p class="sale">[[${PlanData.dtlTitle1}]]</p>
                                         </div>
                                     </a>
                                 </div>
                              	
                                 <div class="exhi_item_pr">
                                     <ul class="prod_list clear">
+                                    <th:block th:each="goodsList, k : ${goodsList}">
+										<th:block th:if="${PlanData.planSq} == ${goodsList.planSq} and ${goodsList.goodsCd} != null">
                                         <li>
                                             <a href="">
                                                 <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr01.jpg" alt="볼패딩 푸퍼점퍼">
+                                                   <img th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsList.sysImgNm}"  style="width: 100%;" alt="">
                                                 </div>
                                                 <div class="txt">
-                                                    <p class="pr_tit">볼패딩 푸퍼점퍼 T204JP060P 볼패딩 푸퍼점퍼 T204JP060P</p>
-                                                    <p class="price"><span>25,410</span>원</p>
+                                                    <p class="pr_tit">[[${goodsList.goodsNm}]]</p>
+                                                    <p class="price"><span th:text="${#numbers.formatInteger(goodsList.currPrice, 0,'COMMA')}"></span>원</p>
                                                 </div>
                                             </a>
                                         </li>
-                                        <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr02.jpg" alt="테이퍼드 M톤 기모 데님 팬츠">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">테이퍼드 M톤 기모 데님 팬츠</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li>
-                                      <!--   <li>
-                                            <a href="">
-                                                <div class="img">
-                                                    <img src="/images/pc/thumb/dp_exhibition_pr03.jpg" alt="패딩 리버서블 FLEECE  점퍼">
-                                                </div>
-                                                <div class="txt">
-                                                    <p class="pr_tit">패딩 리버서블 FLEECE  점퍼</p>
-                                                    <p class="price"><span>25,410</span>원</p>
-                                                </div>
-                                            </a>
-                                        </li> -->
                                     </ul>
                                 </div>
                             </div>

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

@@ -47,12 +47,18 @@ const _PAGE_MYPAGE_DELIVERY_ADDR = _frontUrl + "/mypage/delivery/addr/form";	//
 const _PAGE_MYPAGE_WISHLIST = _frontUrl + "/mypage/wish/list/form";				// 마이페이지 > 위시리스트
 const _PAGE_MYPAGE_CUSTOMER = _frontUrl + "/mypage/customer/form";				// 마이페이지 > 내정보 관리
 const _PAGE_MYPAGE_SECEDE = _frontUrl + "/mypage/customer/secede/form";			// 마이페이지 > 회원탈퇴
+const _PAGE_WISHLIST_PUT = _frontUrl + "/mypage/wish/list/put";					// 위시리스트 담기
+const _PAGE_WISHLIST_DEL = _frontUrl + "/mypage/wish/list/delete";				// 위시리스트 삭제
 
 //== 검색 ==/
 
 //== 기획전 ==/
 const _PAGE_PLANNING_MAIN = _frontUrl + "/planning/main/form"; 					// 기획전 메인
 
+
+//== 이벤트 ==/
+const _PAGE_EVENT_MAIN = _frontUrl + "/planning/event/main/form"; 					// 이벤트 메인
+
 //== 고객센터 ==/
 const _PAGE_FAQ = _frontUrl + "/callcenter/faq/form";									// 고객센터 > FAQ
 const _PAGE_ONETOONE_QNA = _frontUrl + "/callcenter/onetoone/qna/form";					// 고객센터 > 1:1문의
@@ -493,4 +499,127 @@ function cfGoodsDelivery(goodsCd) {
 	cfOpenFullLayer(_PAGE_GOODS_DELIVERY_LAYER + goodsCd, 'layer_goods_delivery');
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 로그인 확인
+ * <pre>
+ *		cfCheckLogin('callbackFn');
+ * </pre>
+ */
+function cfCheckLogin() {
+	var result = '';
+	$.ajax({
+		type: 'get'
+		, async: false
+		, url: '/common/login/check'
+		, success: function (data) {
+			result = data;
+		}
+	});
+
+	return result;
+}
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 위시리스트 담기/삭제
+ * <pre>
+ *	 cfnPutWishList(OBJ);
+ * </pre>
+ * @param  : goodsCd - 상품코드. 필수
+ * @param  : planSq - 기획전번호. 옵션
+ * @date   : 2021/03/08
+ * @author : yujung
+ */
+function cfnPutWishList(a) {
+
+	if (!cfCheckLogin()) {
+		cfnGoToPage(_PAGE_LOGIN);
+		return false;
+	}
+
+	var goodsCd = $(a).attr("goodsCd");
+	var ithrCd = $(a).attr("ithrCd");
+	var contentsLoc = $(a).attr("contentsLoc");
+	var planDtlSq = $(a).attr("planDtlSq");
+	var flag = 'REG';
+	if ($(a).hasClass('active')) {
+		flag = 'DEL'
+	}
+
+	if (gagajf.isNull(goodsCd)) return;
 
+	var data = [];
+
+	var params = new Object();
+	params.goodsCd = goodsCd;
+
+	if (!gagajf.isNull(ithrCd)) {
+		params.ithrCd = ithrCd;
+	}
+	if (!gagajf.isNull(contentsLoc)) {
+		params.contentsLoc = contentsLoc;
+	}
+	if (!gagajf.isNull(planDtlSq)) {
+		params.planDtlSq = planDtlSq;
+	}
+	data.push(params);
+
+	var jsonData = JSON.stringify(data);
+
+	if (flag == 'REG') {
+		gagajf.ajaxJsonSubmit(_PAGE_WISHLIST_PUT, jsonData, function (result) {
+			var Msg = '';
+			if (result.status == "200") {
+				$(a).addClass('active');
+				if (_frontGb == "M") {
+					Msg = '위시리스트에 담겼습니다.';
+
+				} else {
+
+				//	mcxDialog.confirm("위시리스트로 이동하시겠습니까?", {
+				//		cancelBtnText: "아니요",	//취소 또는 닫기 버튼명
+				//		sureBtnText: "예",		//처리문 버튼명
+				//		sureBtnClick: function () {
+				//			cfnGoToPage(_PAGE_WISHLIST);
+				//		}
+				//	});
+				}
+			} else if (result.status == "중복") {
+				Msg = '이미 등록 되어있습니다.';
+			} else {
+				//Msg = '오류로 인해 처리되지 않았습니다.';
+			}
+
+			// 메시지 처리
+			if (!gagajf.isNull(Msg)) {
+				if (_frontGb == "M") {
+			//		mcxDialog.toast(Msg);
+				} else {
+			//		mcxDialog.alertC(Msg);
+				}
+			}
+		});
+	} else {
+		gagajf.ajaxJsonSubmit(_PAGE_WISHLIST_DEL, jsonData, function (result) {
+			var Msg = '';
+			if (result.status == "200") {
+				Msg = '삭제 되었습니다.';
+				$(a).removeClass('active');
+			} else {
+				Msg = '오류로 인해 처리되지 않았습니다.';
+			}
+
+			// 메시지 처리
+			if (!gagajf.isNull(Msg)) {
+				if (_frontGb == "M") {
+			//		mcxDialog.toast(Msg);
+				} else {
+			//		mcxDialog.alertC(Msg);
+				}
+			}
+		});
+	}
+}