Browse Source

Merge branch 'develop' into order

card007 5 years ago
parent
commit
a35eebf70b

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

@@ -88,6 +88,15 @@ public interface TsfReviewDao {
 	 */
 	Collection<Review> getCompleteReviewList(Review review);
 	
+	/**
+	 * 마이페이지 리뷰작성 상품 데이타
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	Goods getReviewGoodsInfo(Review review);
+	
 	/**
 	 * 마이페이지 리뷰 등록
 	 * @param review
@@ -133,5 +142,34 @@ public interface TsfReviewDao {
 	 */
 	Review getAdminConfirmCount(Review review);
 	
+	/**
+	 * 마이페이지 댓글 삭제
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 26
+	 */
+	void reviewDelete(Review review);
+	
+	/**
+	 * 마이페이지 댓글 관련 첨부파일 삭제
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 26
+	 */
+	void reviewAttachDelete(Review review);
+	
+	/**
+	 * 마이페이지 댓글 삭제건이 있는지 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 28
+	 */
+	Review reviewDeleteConfirm(Review review);
+	
+	
+	
 	
 }

+ 52 - 0
src/main/java/com/style24/front/biz/service/TsfReviewService.java

@@ -5,8 +5,10 @@ import java.util.Collection;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.front.biz.dao.TsfReviewDao;
+import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Review;
 
@@ -95,6 +97,17 @@ public class TsfReviewService {
 		return reviewDao.getCompleteReviewList(review);
 	}
 	
+	/**
+	 * 마이페이지 리뷰작성 상품 데이타
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public Goods getReviewGoodsInfo(Review review){
+		return reviewDao.getReviewGoodsInfo(review);
+	}
+	
 	/**
 	 * 마이페이지 리뷰 등록
 	 * @param review
@@ -155,5 +168,44 @@ public class TsfReviewService {
 	}
 	
 	
+	/**
+	 * 마이페이지 댓글 삭제
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 26
+	 */
+	public void reviewDelete(Review review) {
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+		reviewDao.reviewDelete(review);
+		//관련 파일 삭제 처리
+		reviewAttachDelete(review);
+	}
+	
+	/**
+	 * 마이페이지 댓글 관련 첨부파일 삭제
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 26
+	 */
+	@Transactional("shopTxnManager")
+	public void reviewAttachDelete(Review review) {
+		reviewDao.reviewAttachDelete(review);
+	}
+	
+	/**
+	 * 마이페이지 댓글 삭제건이 있는지 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 28
+	 */
+	public Review reviewDeleteConfirm(Review review) {
+		return reviewDao.reviewDeleteConfirm(review);
+	}
+	
+	
+	
 	
 }

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

@@ -32,6 +32,7 @@ import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Counsel;
+import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.Lookbook;
@@ -162,8 +163,28 @@ public class TsfGoodsController extends TsfBaseController {
 
 		int goodsReviewCnt = 0;
 		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) {	// 딜상품
+
+			Collection<Goods> goodsDealComposeList = goodsService.getGoodsDealComposeList(paramsGoods);
 			// 딜 구성상품 정보
-			mav.addObject("goodsDealComposeList", goodsService.getGoodsDealComposeList(paramsGoods));
+			mav.addObject("goodsDealComposeList", goodsDealComposeList);
+
+			Collection<Coupon> goodsCouponList = new ArrayList<Coupon>();
+			// 상품쿠폰
+			if (goodsDealComposeList != null && !goodsDealComposeList.isEmpty()) {
+
+				ArrayList<String> arrGoodsList = new ArrayList<>();
+				for (Goods goodsCompose : goodsDealComposeList) {
+
+					arrGoodsList.add(goodsCompose.getCompsGoodsCd());
+				}
+
+				String[] arrGoodsCd = arrGoodsList.stream().toArray(String[]::new);
+
+				paramsGoods.setArrGoodsCd(arrGoodsCd);
+				paramsGoods.setMaxRownum(1);
+				goodsCouponList = couponService.getGoodsCouponList(paramsGoods);
+			}
+			mav.addObject("goodsCouponList", goodsCouponList);
 
 			// 딜용 상품평건수
 			Review review = new Review();
@@ -173,14 +194,14 @@ public class TsfGoodsController extends TsfBaseController {
 
 			// 딜용상품평건수
 			mav.addObject("goodsReviewCnt", goodsReviewCnt);
-			
+
 		} else {
 			if (TscConstants.GoodsType.NORMAL.value().equals(goods.getGoodsType())) {	// 일반상품
 				//if ("Y".equals(goods.getSelfGoodsYn())) {  // 자사상품
-					// 상품 옵션1(색상) 정보
-					mav.addObject("goodsOption1List", goodsService.getGoodsOption1List(paramsGoods));
-					// 상품 옵션2(사이즈) 정보
-					mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
+				// 상품 옵션1(색상) 정보
+				mav.addObject("goodsOption1List", goodsService.getGoodsOption1List(paramsGoods));
+				// 상품 옵션2(사이즈) 정보
+				mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
 //				} else {
 //					mav.addObject("goodsOptionList", goodsService.getGoodsOptionList(paramsGoods));
 //				}
@@ -200,6 +221,14 @@ public class TsfGoodsController extends TsfBaseController {
 			// 상품쿠폰
 			paramsGoods.setMaxRownum(1);
 			mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
+
+			// 베스트 상품평
+			Review review = new Review();
+			review.setGoodsCd(goods.getGoodsCd());
+			review.setBestYn("Y");
+			review.setRownum(1);
+			review.setGoodsType(goods.getGoodsType());
+			mav.addObject("bestReviewList", reviewService.getReviewList(review));
 		}
 
 		// 상품 문의건수
@@ -209,23 +238,13 @@ public class TsfGoodsController extends TsfBaseController {
 		counsel.setGoodsType(goods.getGoodsType());	 // 딜상품(G056_D)일 경우 구성상품의 상품평수 
 		int goodsQnaCnt = counselService.getGoodsQnaTotalCount(counsel);
 		mav.addObject("goodsQnaCnt", goodsQnaCnt);
-		
-		
-//
+
 //		// 상품포인트사용방법
 //		mav.addObject("goodsPointMothod", envsetService.getPointMothod(TscConstants.Site.STYLE24.value())); // A:정액, R:정율
 		// 상품평노출여부 
 		//mav.addObject("reviewDisplayYn", envsetService.getGoodsReviewDisplayYn(TscConstants.Site.STYLE24.value()));
 		mav.addObject("reviewDisplayYn", "Y");
 
-		// 베스트 상품평
-		Review review = new Review();
-		review.setGoodsCd(goods.getGoodsCd());
-		review.setBestYn("Y");
-		review.setRownum(1);
-		review.setGoodsType(goods.getGoodsType());
-		mav.addObject("bestReviewList", reviewService.getReviewList(review));
-
 		// 카드 혜택안내
 		CardPromotion cardPromotion = new CardPromotion();
 		cardPromotion.setRownum(1); // 혜택유형별로 1건씩
@@ -240,8 +259,6 @@ public class TsfGoodsController extends TsfBaseController {
 		// SSL Server
 		boolean isSslServer = Boolean.parseBoolean(hasSsl);
 		//log.info("isSslServer: [{}]", isSslServer);
-
-		//기존쿠키 가져오기
 		setTodayGoodsCd(paramsGoods);
 
 		mav.addObject("params", paramsGoods);
@@ -385,7 +402,7 @@ public class TsfGoodsController extends TsfBaseController {
 		log.info("[getAjaxGoodsSetStockQty] stockQty = {}", stockQty);
 		return String.valueOf(stockQty);
 	}
-	
+
 	/**
 	 * 상품상세 -  상품 QNA LIST 레이어
 	 * @return
@@ -479,21 +496,30 @@ public class TsfGoodsController extends TsfBaseController {
 	 * @author eskim
 	 * @since 2021. 3. 8
 	 */
-	@PostMapping("/coupon/layer/{goodsCd}")
-	public ModelAndView goodsCouponForm(@PathVariable String goodsCd) {
+	@PostMapping("/coupon/layer")
+	public ModelAndView goodsCouponForm(Goods goods) {
 		ModelAndView mav = new ModelAndView();
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
-		Goods paramsGoods = new Goods();
-		paramsGoods.setGoodsCd(goodsCd);
-		setGoods(paramsGoods);
-		// Goods goods = goodsService.getGoodsInfo(paramsGoods);
+		setGoods(goods);
+
+		if (!StringUtils.isBlank(goods.getGoodsType()) && TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) {
+			Collection<Goods> goodsDealComposeList = goodsService.getGoodsDealComposeList(goods);
+			// 상품쿠폰
+			if (goodsDealComposeList != null && !goodsDealComposeList.isEmpty()) {
 
+				ArrayList<String> arrGoodsList = new ArrayList<>();
+				for (Goods goodsCompose : goodsDealComposeList) {
+					arrGoodsList.add(goodsCompose.getCompsGoodsCd());
+				}
+
+				String[] arrGoodsCd = arrGoodsList.stream().toArray(String[]::new);
+				goods.setArrGoodsCd(arrGoodsCd);
+			}
+		}
 		// 상품쿠폰정보
-		mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
+		mav.addObject("goodsCouponList", couponService.getGoodsCouponList(goods));
 		// 상품 기본정보
-		mav.addObject("params", paramsGoods);
-
-		//mav.addObject("goodsInfo", goods);
+		mav.addObject("params", goods);
 
 		mav.setViewName(super.getDeviceViewName("goods/GoodsCouponForm"));
 		return mav;
@@ -946,11 +972,11 @@ public class TsfGoodsController extends TsfBaseController {
 	public GagaMap getGoodsOption1List(@RequestBody Goods goods) {
 
 		GagaMap result = new GagaMap();
-		result.set("dataList",  goodsService.getGoodsOption1List(goods));
+		result.set("dataList", goodsService.getGoodsOption1List(goods));
 
 		return result;
 	}
-	
+
 	/**
 	 * 상품 옵션2 목록
 	 * @param goods
@@ -963,7 +989,7 @@ public class TsfGoodsController extends TsfBaseController {
 	public GagaMap getGoodsOption2List(@RequestBody Goods goods) {
 
 		GagaMap result = new GagaMap();
-		result.set("dataList",  goodsService.getGoodsOption2List(goods));
+		result.set("dataList", goodsService.getGoodsOption2List(goods));
 
 		return result;
 	}
@@ -1000,7 +1026,7 @@ public class TsfGoodsController extends TsfBaseController {
 		}
 		return recentlyGoodsList;
 	}
-	
+
 	/**
 	 * 딜상품상세 -  구성상품 상세정보 레이어
 	 * @return
@@ -1016,23 +1042,25 @@ public class TsfGoodsController extends TsfBaseController {
 		setGoods(paramsGoods);
 		// 1. 딜상품코드 적용
 		mav.addObject("goodsDealComposeList", goodsService.getGoodsDealComposeList(paramsGoods));
-		
+
 		// 2.구상상품코드 적용
 		paramsGoods.setGoodsCd(compsGoodsCd);
+		paramsGoods.setAdminYn("Y"); 	// 딜상세 레이어는 상품상태가 승인완료가 아니더라도 보이게 처리
 		Goods goods = goodsService.getGoodsInfo(paramsGoods);
 		// 상품 기본정보
 		mav.addObject("goodsInfo", goods);
-		
+
 		GagaMap params = new GagaMap();
 		params.set("goodsCd", goodsCd);
 		params.set("compsGoodsCd", compsGoodsCd);
-		
+		params.set("adminYn", "Y");
+
 		mav.addObject("params", params);
 
 		mav.setViewName(super.getDeviceViewName("goods/GoodsDealListForm"));
 		return mav;
 	}
-	
+
 	/**
 	 * 딜상품상세 -  ajax 구성상품 상세정보
 	 * @return
@@ -1044,7 +1072,7 @@ public class TsfGoodsController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView();
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(paramsGoods);
-		
+
 		Goods goods = goodsService.getGoodsInfo(paramsGoods);
 		// 상품 상세
 		goods = goodsService.getGoodsDesc(goods);
@@ -1076,7 +1104,7 @@ public class TsfGoodsController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("goods/GoodsDealDescForm"));
 		return mav;
 	}
-	
+
 	/**
 	 * 상품상세 -  ajax 구성상품 배송정보
 	 * @return
@@ -1088,7 +1116,7 @@ public class TsfGoodsController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView();
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(paramsGoods);
-		
+
 		Goods goods = goodsService.getGoodsInfo(paramsGoods);
 
 		// 배송업체명, 반품비, 교환비, 주소
@@ -1097,11 +1125,10 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 기본정보
 		mav.addObject("goodsInfo", goods);
 
-		
 		mav.setViewName(super.getDeviceViewName("goods/GoodsDetailDeliveryForm"));
 		return mav;
 	}
-	
+
 	/**
 	 * 상품상세 -  ajax 구성상품 문의정보
 	 * @return
@@ -1113,19 +1140,19 @@ public class TsfGoodsController extends TsfBaseController {
 		ModelAndView mav = new ModelAndView();
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(paramsGoods);
-		
+
 //		Goods goods = goodsService.getGoodsInfo(paramsGoods);
 //
 //		// 상품 기본정보
 //		mav.addObject("goodsInfo", goods);
-		
+
 		// 상품 기본정보
 		mav.addObject("goodsInfo", paramsGoods);
-		
+
 		mav.setViewName(super.getDeviceViewName("goods/GoodsDetailQnaForm"));
 		return mav;
 	}
-	
+
 	/**
 	 * 상품상세 -  ajax 구성상품 상품평정보
 	 * @return
@@ -1194,7 +1221,7 @@ public class TsfGoodsController extends TsfBaseController {
 
 		// 상품평 몸무게
 		mav.addObject("reviewWeightList", reviewWeightList);
-		
+
 		mav.setViewName(super.getDeviceViewName("goods/GoodsDetailReviewForm"));
 		return mav;
 	}

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

@@ -945,7 +945,7 @@ public class TsfMypageController extends TsfBaseController {
 		// 작성한 리뷰 카운트
 		mav.addObject("alreadyReviewCount", reviewService.getAlreadyReviewCount(review));
 		
-		// 관리자 댓글확인 카운트
+		// 관리자 댓글확인 
 		mav.addObject("adminCount", reviewService.getAdminConfirmCount(review));
 		
 		// 리뷰 이미지/동영상
@@ -1029,8 +1029,9 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author sowon	
 	 * @since 2021. 03. 25
 	 */
-	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}")
-	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo,@PathVariable(value = "ordDtlNo") Integer ordDtlNo,@PathVariable(value = "goodsCd") String goodsCd) {
+	@GetMapping("/review/create/form/{ordNo}/{ordDtlNo}/{goodsCd}/{reviewStat}")
+	public ModelAndView mypageReviewCreateForm(@PathVariable(value = "ordNo") Integer ordNo,@PathVariable(value = "ordDtlNo") Integer ordDtlNo
+			,@PathVariable(value = "goodsCd") String goodsCd, @PathVariable(value = "reviewStat") String reviewStat) {
 		Review review = new Review();
 		ModelAndView mav = new ModelAndView();
 		
@@ -1039,8 +1040,10 @@ public class TsfMypageController extends TsfBaseController {
 		review.setOrdNo(ordNo);
 		review.setOrdDtlNo(ordDtlNo);
 		review.setGoodsCd(goodsCd);
+		review.setReviewStat(reviewStat);
 		
-		mav.addObject("completeReviewList", reviewService.getCompleteReviewList(review));
+		mav.addObject("reviewStat", reviewStat);
+		mav.addObject("reviewInfo", reviewService.getReviewGoodsInfo(review));
 		
 		mav.setViewName(super.getDeviceViewName("mypage/MypageReviewCreateForm"));
 
@@ -1059,11 +1062,35 @@ public class TsfMypageController extends TsfBaseController {
 	public GagaMap mypageReviewSave(@RequestBody Review review) {
 
 		GagaMap result = new GagaMap();
+		if(reviewService.reviewDeleteConfirm(review).getCount() > 0) {
+			review.setReviewSq(reviewService.reviewDeleteConfirm(review).getReviewSq());
+		}
+		
 		reviewService.saveMypageReview(review);
 		result.set("status", "200");
 
 		return result;
 	}
+	
+	/**
+	 * 마이페이지 리뷰 삭제처리
+	 *
+	 * @param review
+	 * @return 
+	 * @throws Exception
+	 * @author sowon
+	 * @since 2021. 03. 26
+	 */
+	@PostMapping("/review/delete")
+	@ResponseBody
+	public GagaMap mypageReviewDelete(@RequestBody Review review) throws Exception {
+		GagaMap result = new GagaMap();
+		reviewService.reviewDelete(review);
+		
+		result.set("status", "200");
+
+		return result;
+	}
 
 	/*신주승 시작*/
 

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

@@ -187,6 +187,9 @@ public class Goods extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private int[] arrCpnId;				// 쿠폰
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrGoodsCd;			// 상품코드
+
 	private String todayGoodsSql;	// 오늘본상품SQL
 
 	private String likeIt;			// 위시리스트에담긴상품

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

@@ -85,6 +85,7 @@ public class Review extends TscBaseDomain {
 	private int cnt;				// 작성가능한 리뷰 카운트
 	private int count;				// 작성한 리뷰 카운트
 	private String siteCd;
+	private String reviewStat;		// 리뷰상태(수정or등록)
 	
 	// Masking
 	public String getMaskingCustId() {
@@ -102,11 +103,11 @@ public class Review extends TscBaseDomain {
 	private TscPageRequest pageable2;
 
 	private int pageNo = 1;							// 페이지번호
-	private int pageSize = 10;						// 페이지목록수
+	private int pageSize = 5;						// 페이지목록수
 	private int pageUnit = 10;						// 페이지번호수
 	
 	private int pageNo2 = 1;							// 페이지번호
-	private int pageSize2 = 10;						// 페이지목록수
+	private int pageSize2 = 5;						// 페이지목록수
 	private int pageUnit2 = 10;						// 페이지번호수
 	
 	

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

@@ -235,7 +235,18 @@
 		                     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD, G.CURR_PRICE,#{custGb}) AS CURR_PRICE
 		                FROM   TB_GOODS G
 		                     , TB_COUPON CP
-		                WHERE G.GOODS_CD = #{goodsCd}
+		                WHERE 1 = 1
+		                <choose>
+		                    <when test="arrGoodsCd != null and arrGoodsCd != ''">
+		                AND G.GOODS_CD IN
+		                    <foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
+		                    UPPER(#{item})
+		                    </foreach>
+		                    </when>
+		                    <otherwise>
+		                AND G.GOODS_CD = #{goodsCd}
+		                    </otherwise>
+		                </choose> 
 		                <if test="cpnId != null and cpnId != ''">
 		                AND    CP.CPN_ID = #{cpnId}
 		                </if>

+ 142 - 18
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -351,18 +351,9 @@
 			WHERE 1=1
 				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
 				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
-				AND O.CUST_NO =#{custNo}
+				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 				AND O.SITE_CD = #{siteCd}
-				<if test="ordNo!=null and ordNo != ''">
-				AND O.ORD_NO = #{ordNo}
-				</if>
-				<if test="ordDtlNo!=null and ordDtlNo != ''">
-				AND OD.ORD_DTL_NO = #{ordDtlNo}
-				</if>
-				<if test="goodsCd!=null and goodsCd!=''">
-				AND G.GOODS_CD = #{goodsCd}
-				</if>
 			GROUP BY O.ORD_NO 
 			      ,O.ORD_NM 
 			      ,O.PAY_DT 
@@ -387,6 +378,108 @@
 		ORDER BY F.PAY_DT DESC
 	</select>
 	
+	<!-- 마이페이지 리뷰작성 상품데이타 -->
+	<select id="getReviewGoodsInfo" parameterType="Review" resultType="Goods">
+		/* TsfReivew.getReviewGoodsInfo */
+		SELECT F.*
+			  , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = F.GOODS_CD AND COLOR_CD = F.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+		FROM
+		(
+			SELECT O.ORD_NO 
+			      ,O.ORD_NM
+			      ,DATE_FORMAT(O.PAY_DT, '%Y-%m-%d') AS PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+			      ,I.ITEMKIND_NM 
+			      ,I.ITEMKIND_CD 
+			      ,I.SIZE_GB 
+			      <if test="reviewStat == 'u'.toString()">
+			      ,R.REVIEW_SQ        
+			      ,R.REVIEW_GB        
+				  ,R.REVIEW_TITLE     
+			      ,R.REVIEW_CONTENT   
+				  ,R.SCORE            
+				  ,R.HEIGHT           
+				  ,R.WEIGHT           
+				  ,R.SCORE_SIZE       
+				  ,R.SCORE_COLOR      
+				  ,R.SCORE_FIT        
+				  ,R.SCORE_THICK      
+				  ,R.SCORE_WEIGHT     
+				  ,R.SCORE_BALL       
+				  ,R.GIVE_DUE_PNT     
+				  ,R.PNT_GIVE_STAT    
+				  ,R.BEST_YN          
+				  ,R.GIVE_DUE_BPNT    
+				  ,R.BPNT_GIVE_YN     
+				  ,R.DISP_YN          
+				  ,R.DEL_YN           
+				  ,R.CONFIRM_YN       
+				  ,R.CONFIRM_UNO      
+				  ,R.CONFIRM_DT       
+				  ,R.REG_NO           
+				  ,R.REG_DT           
+				  ,R.UPD_NO           
+				  ,R.UPD_DT           
+				  ,R.ADM_RPL          
+				  ,R.ADM_RPL_REG_NO   
+				  ,R.ADM_RPL_DT       
+				  </if>
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS REMAIN_DT -- 남은시간
+			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
+								 			 	 AND OD.ORD_DTL_STAT = 'G013_70' -- 구매 확정인것만
+			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			                  	                AND ODI.ORD_DTL_STAT = 'G013_70'
+			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
+			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
+			                LEFT JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
+			               <if test="reviewStat == 'u'.toString()">
+			                INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
+			                                      AND R.ORD_NO = O.ORD_NO
+			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
+			               </if> 
+			WHERE 1=1
+				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+				<choose>
+					<when test="reviewStat == 'u'.toString()">
+					AND O.ORD_NO IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+					</when>
+					<otherwise>
+					AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+					</otherwise>
+				</choose>
+				AND O.CUST_NO = #{custNo}
+				AND O.DISP_YN = 'Y'
+				AND O.SITE_CD = #{siteCd}
+				<if test="ordNo!=null and ordNo != ''">
+				AND O.ORD_NO = #{ordNo}
+				</if>
+				<if test="ordDtlNo!=null and ordDtlNo != ''">
+				AND OD.ORD_DTL_NO = #{ordDtlNo}
+				</if>
+				<if test="goodsCd!=null and goodsCd!=''">
+				AND G.GOODS_CD = #{goodsCd}
+				</if>
+		)F
+		ORDER BY F.PAY_DT DESC
+	</select>
+	
 	<!-- 마이페이지 작성가능한 리뷰 -->
 	<select id="getCompleteReviewCount" parameterType="Review" resultType="int">
 		/* TsfReivew.getCompleteReviewCount */
@@ -454,7 +547,8 @@
 	<select id="saveMypageReview" parameterType="Review" resultType="Review">
 		/* TsfReivew.saveMypageReview */
 		INSERT INTO TB_REVIEW (
-						GOODS_CD
+		                REVIEW_SQ
+					  ,	GOODS_CD
 					  , CUST_NO
 					  , ORD_NO
 					  , ORD_DTL_NO
@@ -477,7 +571,8 @@
 					  , UPD_DT
 					)
 					VALUES (
-					     	#{goodsCd}
+					        #{reviewSq}
+					      ,	#{goodsCd}
 						  , #{custNo}
 						  , #{ordNo}
 						  , #{ordDtlNo}
@@ -500,8 +595,7 @@
 						  , now()
 					)
 					ON DUPLICATE KEY UPDATE
-					
-			                REVIEW_TITLE   =  #{reviewTitle}
+						   DEL_YN = 'N'
 			               ,REVIEW_CONTENT =  #{reviewContent} 
 			               ,SCORE          =  #{score}           
 			               ,HEIGHT         =  #{height}          
@@ -521,7 +615,7 @@
 		SELECT COUNT(*) AS COUNT
 		FROM TB_REVIEW R
 		WHERE 1=1
-		 AND CUST_NO = 100011
+		 AND CUST_NO = #{custNo}
 		 AND DEL_YN = 'N'
 		 AND DISP_YN = 'Y'
 	</select>
@@ -615,7 +709,7 @@
 			                              		AND R.DISP_YN = 'Y'
 			                LEFT JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD 
 			WHERE 1=1
-				AND O.CUST_NO = 100011
+				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 				AND O.SITE_CD = #{siteCd}
 			GROUP BY O.ORD_NO 
@@ -687,7 +781,7 @@
 		FROM TB_REVIEW R LEFT JOIN TB_REVIEW_ATTACH RA ON R.REVIEW_SQ = RA.REVIEW_SQ 
 		WHERE 1=1
 		 AND R.REVIEW_SQ = RA.REVIEW_SQ 
-		 AND R.CUST_NO = 100011
+		 AND R.CUST_NO = #{custNo}
 		 AND R.DEL_YN = 'N'
 		 AND R.DISP_YN = 'Y'
 		 AND RA.DEL_YN = 'N'
@@ -699,10 +793,40 @@
 		     , R.REVIEW_SQ 
 		FROM TB_REVIEW R
 		WHERE 1=1
-		 AND CUST_NO = 100011
+		 AND CUST_NO = #{custNo}
 		 AND DEL_YN = 'N'
 		 AND DISP_YN = 'Y' 
 		 AND ADM_RPL IS NOT NULL
 		ORDER BY  R.ADM_RPL_DT DESC, R.REVIEW_SQ LIMIT 1
 	</select>
+	
+	<update id="reviewDelete" parameterType="Review">
+		/* TsfReivew.reviewDelete */
+		UPDATE TB_REVIEW R
+		SET R.DEL_YN = 'Y'
+		WHERE 1=1
+ 		AND R.REVIEW_SQ = #{reviewSq}
+ 		AND R.ADM_RPL IS NULL
+ 		AND R.CUST_NO = #{custNo}
+	</update>
+	
+	<update id="reviewAttachDelete" parameterType="Review">
+	   /* TsfReivew.reviewAttachDelete */
+		UPDATE TB_REVIEW_ATTACH RA
+		SET RA.DEL_YN = 'Y'
+		WHERE 1=1
+ 		AND RA.REVIEW_SQ = #{reviewSq}
+	</update>
+	
+	<select id="reviewDeleteConfirm" parameterType="Review" resultType="Review">
+		/* TsfReivew.reviewDeleteConfirm */
+		SELECT IFNULL(R.REVIEW_SQ,0) AS REVIEW_SQ, COUNT(*) AS COUNT
+		FROM TB_REVIEW R
+		WHERE 1=1
+		  AND R.ORD_NO = #{ordNo}
+		  AND R.ORD_DTL_NO =#{ordDtlNo}
+		  AND R.DEL_YN ='Y'
+		  AND R.GOODS_CD = #{goodsCd}
+		  AND R.CUST_NO = #{custNo}
+	</select>
 </mapper>

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

@@ -107,7 +107,7 @@
 										<span class="sale_price">
 											<em th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}">134,100</em>원 ~ 
 										</span>
-										<button type="button" id="btn_saleCoupon_pop" class="btn btn_primary btn_sm btn_coupon"  th:if="${goodsCouponList != null and !goodsCouponList.empty}" th:onclick="cfGoodsCouponInfo([[${goodsInfo.goodsCd}]])"><span>쿠폰받기</span></button>
+										<button type="button" id="btn_saleCoupon_pop" class="btn btn_primary btn_sm btn_coupon"  th:if="${goodsCouponList != null and !goodsCouponList.empty}" th:onclick="cfGoodsCouponInfo([[${goodsInfo.goodsCd}]],[[${goodsInfo.goodsType}]] )"><span>쿠폰받기</span></button>
 									</div>
 								</div>
 							</div>
@@ -247,8 +247,9 @@
 		</div>
 		<!-- 상품 대표설명 -->
 		
-		<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsDealComposeForm}"></th:block>
 		<!-- //***** 상품소개영역 ***** -->
+		<th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsDealComposeForm}"></th:block>
+		
 		<!-- 이 상품과 함께 본 상품 -->
 		<div class="content wide pd_clickother" id="goodsTogetherbArea">
 		</div>
@@ -267,6 +268,10 @@
 		</div>		
 	</div>
 	<!-- //상품썸네일 크게보기 팝업 -->
+	
+	<!-- **************** 개별상품 상세정보 팝업 **************** -->
+	
+ 
 </div>
  
 <script th:inline="javascript">
@@ -589,6 +594,7 @@
 		if (ea < 1) ea = minOrdQty;
 
 		$target.val(ea);
+		$target.attr('value', ea);
 
 		fnChangeOrderEa($target[0]);
 	}
@@ -629,6 +635,7 @@
 		let totalPrice = ((goodsPrice+addPrice) * ea);
 		//$obj.parent().parent().find('#goodsPrice').text(totalPrice.addComma());
 		$('.opt_result .result_'+optCd+' .number_count').find('input[name=cea]').val(ea);
+		$('.opt_result .result_'+optCd+' .number_count').find('input[name=cea]').attr('value',ea);
 		$('.opt_result .result_'+optCd+' .item_price').find('em').text(totalPrice.addComma());
 		
 		fnSetTotalPrice();
@@ -929,7 +936,7 @@
 			if (typeof ($(this).attr('aria-disabled')) == 'undefined' || !$(this).attr('aria-disabled')){
 				return false;
 			}
-			iselIdxdx ++;
+			selIdx ++;
 		});
 		$('.tab_detail_cont.pd_delivery').find('.combo .list li').eq(selIdx).trigger("click");
 		$('.tab_detail_cont.pd_qnalist').find('.combo .list li').eq(selIdx).trigger("click");

+ 36 - 76
src/main/webapp/WEB-INF/views/web/goods/GoodsDealListFormWeb.html

@@ -71,95 +71,47 @@
 	<div class="full_pop_fix_r">
 		<div class="option_box">
 			<div class="opt_select">
-				<form class="form_wrap">
-					<div class="form_field">
-						<div class="select_custom deal_opt1">
-							<div class="combo">
-								<div class="select">선택</div>
-								<ul class="list">
-									<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-									<li class="selected">선택</li> 
-									<li>상품옵션01</li>
-									<li>상품옵션02</li>
-									<li>상품옵션03</li>
-									<li aria-disabled="true">
-										<div>상품옵션05</div>
-										<div>120,000원</div>
-									</li>
-									<li>상품옵션06</li>
-									<li aria-disabled="true" data-soldout="true">
-										<div>상품옵션07</div>
-										<div>120,000원</div>
-									</li>
-								</ul>
-							</div>
+				<div class="form_field">
+					<div class="select_custom deal_opt1">
+						<div class="combo">
+							<div class="select">선택</div>
+							<ul class="list">
+								<li class="selected">선택</li> 
+								<li aria-disabled="true" data-soldout="true">
+									<div>상품옵션07</div>
+									<div>120,000원</div>
+								</li>
+							</ul>
 						</div>
 					</div>
-					<div class="form_field">
-						<div class="select_custom deal_opt2" disabled>
-							<div class="combo">
-								<div class="select">선택</div>
-								<ul class="list">
-									<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-									<li class="selected">선택</li> 
-									<li>상품옵션11</li>
-									<li>상품옵션12</li>
-									<li>상품옵션13</li>
-									<li aria-disabled="true">
-										<div>상품옵션15</div>
-										<div>120,000원</div>
-									</li>
-									<li>상품옵션16</li>
-									<li aria-disabled="true" data-soldout="true">
-										<div>상품옵션17</div>
-										<div>120,000원</div>
-									</li>
-								</ul>
-							</div>
+				</div>
+				<div class="form_field">
+					<div class="select_custom deal_opt2" disabled>
+						<div class="combo">
+							<div class="select">선택</div>
+							<ul class="list">
+								<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
+								<li class="selected">선택</li> 
+								<li aria-disabled="true" data-soldout="true">
+									<div>상품옵션17</div>
+									<div>120,000원</div>
+								</li>
+							</ul>
 						</div>
 					</div>
-				</form>
+				</div>
 			</div>
 			<div class="opt_result">
-				<div class="result_item">
-					<div class="opt_header">
-						<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-						<span class="item_option">다크그레이/XXL</span>
-					</div>
-					<div class="number_count">
-						<span class="minus"><em class="sr-only">감소</em></span>
-						<input type="text" name="" maxlength="3" style='ime-mode:disabled' value="1" />
-						<span class="plus"><em class="sr-only">추가</em></span>
-					</div>
-					<div class="item_price">
-						<p><em>99,999,999</em>원</p>
-					</div>
-					<button type="button" class="btn_delete_item"><span>삭제</span></button>
-				</div>
-				<div class="result_item">
-					<div class="opt_header">
-						<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
-						<span class="item_option">블루그레이/S</span>
-					</div>
-					<div class="number_count">
-						<span class="minus"><em class="sr-only">감소</em></span>
-						<input type="text" name="" maxlength="3" style='ime-mode:disabled' value="1" />
-						<span class="plus"><em class="sr-only">추가</em></span>
-					</div>
-					<div class="item_price">
-						<p><em>99,999,999</em>원</p>
-					</div>
-					<button type="button" class="btn_delete_item"><span>삭제</span></button>
-				</div>
+				
 			</div>
 		</div>
 		<div class="price_box">
 			<p class="number">
-				총&nbsp;<span>99</span>개
+				총&nbsp;<span>0</span>개
 			</p>
 			<p class="price">
 				<span>
-					99,999,999<em>원</em>
+					0<em>원</em>
 				</span>
 			</p>
 		</div>
@@ -201,7 +153,15 @@
 
 		var params = new Object();
 		params.goodsCd = [[${params.compsGoodsCd}]];
+		params.adminYn = [[${params.adminYn}]];
 		fnGoodsDealDetail(params);  // ajax html
+		
+		let $obj = $('.pd_detail .opt_result'); 
+		let $taget = $('.full_pop_fix_r .opt_result');
+		$taget.html($obj.html());
+		
+		fnSetTotalPrice();
+		
 	});
 	
 	

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

@@ -121,7 +121,7 @@
 										<span class="save_point" th:if="${goodsInfo.pntAmt > 0}">
 											스타일포인트 <th:block th:text="${#numbers.formatInteger(goodsInfo.pntAmt, 0,'COMMA')}"></th:block>P 적립예정
 										</span>
-										<button type="button" id="btn_saleCoupon_pop" class="btn btn_primary btn_sm btn_coupon"  th:if="${goodsCouponList != null and !goodsCouponList.empty}" th:onclick="cfGoodsCouponInfo([[${goodsInfo.goodsCd}]])"><span>쿠폰받기</span></button>
+										<button type="button" id="btn_saleCoupon_pop" class="btn btn_primary btn_sm btn_coupon"  th:if="${goodsCouponList != null and !goodsCouponList.empty}" th:onclick="cfGoodsCouponInfo([[${goodsInfo.goodsCd}]],[[${goodsInfo.goodsType})"><span>쿠폰받기</span></button>
 									</div>
 								</div>
 								<div class="desc_status" th:if="${not #strings.isEmpty(goodsInfo.delvResDt) }">

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

@@ -96,7 +96,7 @@
 						<!--  반복 -->
 						<div class="item_prod" th:each="goodsInfo, status : ${goodsDealComposeList}">
 							<div class="item_state">
-								<a href="javascript:void(0);" class="itemLink" th:onclick="cfGoodsDeailDetail([[${goodsInfo.goodsCd}]],[[${goodsInfo.compsGoodsCd}]])">
+								<a href="javascript:void(0);" class="itemLink" th:onclick="fnOpenGoodsDealDetail([[${goodsInfo.goodsCd}]],[[${goodsInfo.compsGoodsCd}]])">
 									<div class="shape ranker">
 										<span>상품<em class="number" th:text="${#numbers.formatInteger(status.count,2)}">01</em></span>
 									</div>
@@ -370,9 +370,131 @@
 		</div>
 	</div>
 </div>
+
+<!-- **************** 개별상품 상세정보 팝업 **************** -->
+	<div class="pd_pop full_pop pd_descrp_pop" id="layer_goods_deal_detail">
+		<div class="full_popup_wrap" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}">
+			<h5 class="sr-only">개별상품 상세정보 안내</h5>
+			<div class="btn_close">
+				<a href="javascript:void(0)" onclick="fnCloseGoodsDealDetail();">닫기버튼</a>
+			</div>
+			<div class="full_pop_header">
+				<!-- 아이템선택 -->
+				<div class="form_field">
+					<div class="select_custom deal_opt_item">
+						<div class="combo">
+							<div class="select">
+								<div class="item_prod">
+										<div class="item_state">
+											<a href="javascript:void(0)" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												</div>
+												<div class="itemName">선택</div>
+											</a>
+										</div>
+									</div>
+							</div>
+							<ul class="list" th:if="${goodsDealComposeList  != null and !goodsDealComposeList.empty}">
+								<li class="selected" th:each="goodsInfo, status : ${goodsDealComposeList}" th:attr="aria-disabled=${(goodsInfo.goodsStat != 'G008_90' or goodsInfo.stockQty <= 0)? 'true':''}, data-soldout=${(goodsInfo.stockQty <= 0)? 'true':''}">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="javascript:void(0);" class="itemLink" th:onclick="fnGoodsDealDesc([[${goodsInfo.compsGoodsCd}]])">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+goodsInfo.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
+												</div>
+												<p class="itemBrand" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</p>
+												<div class="itemName" th:text="${goodsInfo.goodsFullNm}">유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업</div>
+												<p class="itemPrice"><th:block th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}"> 134,100</th:block>
+													<span class="itemPrice_original" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</span>
+													<span class="itemPercent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">30%</span>
+												</p>
+											</a>
+											<input type="hidden" name="selectGoods" th:value="${goodsInfo.compsGoodsCd}" />
+										</div>
+									</div>
+								</li> 
+							</ul>
+						</div>
+					</div>
+				</div>
+				<!-- //아이템선택 -->
+			</div>
+			<div class="full_pop_container" id="goodsDealDetail">
+				<!-- 개별상품 상세정보 팝업 내용 -->
+			</div>
+			<div class="full_pop_fix_r">
+				<div class="option_box">
+					<div class="opt_select">
+						<div class="form_field">
+							<div class="select_custom deal_opt1">
+								<div class="combo">
+									<div class="select">선택</div>
+									<ul class="list">
+										<li class="selected">선택</li> 
+										<li aria-disabled="true" data-soldout="true">
+											<div>상품옵션07</div>
+											<div>120,000원</div>
+										</li>
+									</ul>
+								</div>
+							</div>
+						</div>
+						<div class="form_field">
+							<div class="select_custom deal_opt2" disabled>
+								<div class="combo">
+									<div class="select">선택</div>
+									<ul class="list">
+										<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
+										<li class="selected">선택</li> 
+										<li aria-disabled="true" data-soldout="true">
+											<div>상품옵션17</div>
+											<div>120,000원</div>
+										</li>
+									</ul>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="opt_result">
+					</div>
+				</div>
+				<div class="price_box">
+					<p class="number">
+						총&nbsp;<span>0</span>개
+					</p>
+					<p class="price">
+						<span>
+							0<em>원</em>
+						</span>
+					</p>
+				</div>
+				<div class="btn_box">
+					<div class="btn_group_block ui_row">
+					<th:block  th:if="${goodsInfo.stockQty > 0}">
+						<div class="ui_col_6">
+							<button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
+						</div>
+						<div class="ui_col_6">
+							<button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
+						</div>
+					</th:block>
+					<th:block  th:unless="${goodsInfo.stockQty > 0}">
+						<div class="ui_col_12">
+							<button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
+						</div>
+					</th:block>
+					</div>
+				</div>
+			</div>
+		</div>
+				
+	</div>
+	<!-- **************** 개별상품 상세정보 팝업 **************** -->
 <script th:inline="javascript">
 /*<![CDATA[*/
-		
+	
+	
 	// 구성 상품 상세 상품평
 	var fnGoodsDetailReview = function(params) {
 		gagajf.ajaxSubmit("/goods/detail/review/frame", "html", "goodsDealReview", params);
@@ -408,27 +530,72 @@
 		params.goodsCd = goodsCd;
 		fnGoodsDetailDelivery(params);  // ajax html
 	}
-
+	
+	// 상품선택시 상품상세내용 변경
+	var fnOpenGoodsDealDetail = function(goodsCd, compsGoodsCd){
+		
+		// 콤보박스 선택 처리
+		let $selObj = $('#layer_goods_deal_detail').find('.select_custom.deal_opt_item');
+		
+		// 탭별 선택시 기본 상품 설정
+		let selIdx = 0;
+		$selObj.find('.combo .list li').each(function() { 
+			if ($(this).find('input[name=selectGoods]').val() == compsGoodsCd){
+				return false;
+			}
+			selIdx ++;
+		});
+		
+		$selObj.find('.combo .list li').eq(selIdx).trigger("click");
+		
+		// 상세노출
+		fnGoodsDealDesc(compsGoodsCd);
+		
+		$('body').addClass('lock');
+		$("#layer_goods_deal_detail").show(); 
+		
+	}
+	
+	// 상세 레이어 창닫기
+	var fnCloseGoodsDealDetail = function(){
+		$('body').removeClass('lock');
+		$("#layer_goods_deal_detail").hide(); 
+		
+		
+		// 선택값 본창에 넘기기
+	}
+	
+	// 구성 상품 상세 
+	var fnGoodsDealDetail2 = function(params) {
+		gagajf.ajaxSubmit("/goods/deal/detail/info/frame", "html", "goodsDealDetail", params);
+	}
+	
+	// 상품선택시
+	var fnGoodsDealDesc = function(goodsCd){
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		fnGoodsDealDetail2(params);  // ajax html
+	}
+	
+	
+	
 	$(document).ready( function() {
 
-		//var params = new Object();
-		//let goodsCd = $('.tab_detail_cont.pd_delivery').find('.combo .select').find('input[name=selectGoods]').val();
-		//params.goodsCd = goodsCd;
+		/* var params = new Object();
+		params.goodsCd = [[${params.compsGoodsCd}]];
+		params.adminYn = [[${params.adminYn}]];
+		fnGoodsDealDetail(params);  // ajax html
 		
-		// 배송정보 
-		//fnGoodsDetailDelivery(params);  // ajax html
+		let $obj = $('.pd_detail .opt_result'); 
+		let $taget = $('.full_pop_fix_r .opt_result');
+		$taget.html($obj.html());
 		
-		// 상품문의
-		//fnGoodsDetailQna(params);  // ajax html
-		
-		// 상품평
-		//fnGoodsDetailReview(params);  // ajax html
+		fnSetTotalPrice(); */
 		
 	});
+	
+	
 /*]]>*/
 </script>
-
-		
 </th:block>
-
 </html>

+ 130 - 29
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -42,12 +42,13 @@
 									<li>리뷰 작성시 욕설, 비방, 선정적인 내용등이 있을 경우 통보 없이 관리자에 의해 삭제 될 수 있습니다.</li>
 								</ul>
 							</div>
-							<th:block th:each="review, status : ${completeReviewList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
-							<form class="form_wrap" id="reviewForm" th:action="@{'/mypage/review/save'}">
-								<input type="hidden" name="ordNo" th:value="${review.ordNo}">
-								<input type="hidden" name="ordDtlNo" th:value="${review.ordDtlNo}">
-								<input type="hidden" name="goodsCd" th:value="${review.goodsCd}">
-								<input type="hidden" name="custNo" th:value="${review.custNo}">
+							<form class="form_wrap" id="reviewForm" th:action="@{'/mypage/review/save'}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+								<input type="hidden" name="ordNo" th:value="${reviewInfo.ordNo}">
+								<input type="hidden" name="ordDtlNo" th:value="${reviewInfo.ordDtlNo}">
+								<input type="hidden" name="goodsCd" th:value="${reviewInfo.goodsCd}">
+								<input type="hidden" name="custNo" th:value="${reviewInfo.custNo}">
+								<input type="hidden" name="reviewStat" th:value="${reviewStat}">
+								<input type="hidden" name="reviewSq" th:if="${reviewStat == 'u'}" th:value="${reviewInfo.reviewSq}">
 								<h4 class="subH3">리뷰쓰기</h4>
 								<div class="part_goods">
 									<div class="goods_cont">
@@ -59,24 +60,24 @@
 													<div class="gd_item">	
 														<a href="">
 															<span class="thumb">
-																<img th:src="${imageUrl + '/' + review.sysImgNm}" width="100%" alt="">
+																<img th:src="${imageUrl + '/' + reviewInfo.sysImgNm}" width="100%" alt="">
 															</span>
 															<p>
-																<span class="buy_date"><em th:text="${review.payDt}"></em>&nbsp;구매</span>
+																<span class="buy_date"><em th:text="${reviewInfo.payDt}"></em>&nbsp;구매</span>
 															</p>
 															<p>
-																<span class="brand" th:text="${review.brandEnm}"></span>
+																<span class="brand" th:text="${reviewInfo.brandEnm}"></span>
 																<!-- <span class="tag">STYLE24 일반배송</span> -->
 															</p>
 															<p>
-																<span class="name" th:text="${review.goodsNm}"></span>																
+																<span class="name" th:text="${reviewInfo.goodsNm}"></span>																
 															</p>
 														</a>
 													</div>
 													<div class="gd_opt">
 														<div class="option_wrap">
 															<span class="title sr-only">주문 옵션</span>
-															<span class="option">[[${review.optCd1}]]K&nbsp;/&nbsp;[[${review.optCd2}]]</span>
+															<span class="option">[[${reviewInfo.optCd1}]]K&nbsp;/&nbsp;[[${reviewInfo.optCd2}]]</span>
 														</div>
 													</div>
 												</div>
@@ -152,7 +153,7 @@
 									</table>
 								</div>
 								
-								<!-- <th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B' or review.sizeGb == 'S'}"> --> 
+								<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B' or reviewInfo.sizeGb == 'S'}">
 								<h4 class="subH3">상품 평가</h4>
 								<div class="tbl type1">
 									<table>
@@ -160,7 +161,7 @@
 											<col width="170">
 											<col width="*">
 										</colgroup>  
-										<!-- <th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B' or review.sizeGb == 'S'}"> --> 
+										<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B' or reviewInfo.sizeGb == 'S'}"> 
 										<tr>
 											<th>
 												사이즈
@@ -207,8 +208,8 @@
 												</div>
 											</td>
 										</tr>
-										<!-- </th:block>
-										<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}"> --> 
+										</th:block>
+										<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B'}"> 
 										<tr>
 											<th>
@@ -255,8 +256,8 @@
 												</div>
 											</td>
 										</tr>
-										<!-- </th:block>
-										<th:block th:if="${review.sizeGb == 'S'}">  -->
+										</th:block>
+										<th:block th:if="${reviewInfo.sizeGb == 'S'}"> 
 										<tr>
 											<th>
 												무게감
@@ -303,10 +304,10 @@
 												</div>
 											</td>
 										</tr>
-										<!-- </th:block> -->
+										</th:block>
 									</table>
 								</div>
-								<!-- </th:block> -->
+								</th:block>
 								<h4 class="subH3">고객님의 리뷰가 다른 고객들에게 도움이 될 수 있어요!</h4>
 								<div class="tbl type1">
 									<table>
@@ -322,7 +323,7 @@
 												<div class="input_txt_review">
 													<div class="form_field">
 														<div class="input_wrap">
-															<textarea class="doc_review" name="reviewContent" id="reviewContent" cols="30" rows="10" placeholder="·&nbsp;리뷰 내용은 최소 10자 이상 입력해 주세요.&#13;&#10;·&nbsp;상품과 무관하거나 스팸, 음란, 불법적인 내용의 리뷰는 통보 없이 삭제되며, 지급한 포인트는 회수 될 수 있습니다.&#13;&#10;·&nbsp;리뷰 등록 후 관리자 승인이 필요한 경우 바로 노출이 되지 않을 수 있습니다." style="resize: none;"></textarea>
+															<textarea class="doc_review" name="reviewContent" id="reviewContent" cols="30" rows="10" placeholder="·&nbsp;리뷰 내용은 최소 10자 이상 입력해 주세요.&#13;&#10;·&nbsp;상품과 무관하거나 스팸, 음란, 불법적인 내용의 리뷰는 통보 없이 삭제되며, 지급한 포인트는 회수 될 수 있습니다.&#13;&#10;·&nbsp;리뷰 등록 후 관리자 승인이 필요한 경우 바로 노출이 되지 않을 수 있습니다." style="resize: none;" ></textarea>
 															<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/500</p>			
 														</div> 
 													</div>
@@ -360,10 +361,10 @@
 
 								<div class="btn_footer_area">
 									<button type="button" class="btn btn_default btn_md" onclick="reviewCancel()"><span>취소</span></button>
-									<button type="button" id="btn_review_registration" class="btn btn_dark btn_md" onclick="reviewCreate()"><span>리뷰 등록</span></button>
+									<button type="button" id="btn_review_registration" class="btn btn_dark btn_md" th:if="${reviewStat == 'c'}" onclick="reviewCreate()"><span>리뷰 등록</span></button>
+									<button type="button" id="btn_review_registration" class="btn btn_dark btn_md" th:if="${reviewStat == 'u'}" onclick="reviewUpdate()"><span>리뷰 수정</span></button>
 								</div>		
 							</form>	
-							</th:block>						
 						</div>
 					</div>
 					<!-- // CONT-BODY -->					
@@ -372,7 +373,8 @@
 
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
-let reviewList = [[${completeReviewList}]];
+let reviewList = [[${reviewInfo}]];
+let reviewStat = [[${reviewStat}]];
 // 별점 class="on"
 var $starEls = $('#star button#starBtn');
 var rate = 0;
@@ -406,11 +408,14 @@ var reviewCancel = function() {
         	cfnGoToPage(_PAGE_MYPAGE_REVIEW);
         }
     });
+}
+var reviewValidation = function() {
+	
+
 }
 
 // 리뷰 등록
 var reviewCreate = function () {
-	
 	if($("#score").val()=='' || $("#score").val()==null){
 		mcxDialog.alert('별점을 선택하세요.');
 		return;
@@ -427,7 +432,7 @@ var reviewCreate = function () {
 	}
 	
 	
-	if(reviewList[0].sizeGb == 'T' || reviewList[0].sizeGb == 'B' || reviewList[0].sizeGb == 'S'){
+	if(reviewList.sizeGb == 'T' || reviewList.sizeGb == 'B' || reviewList.sizeGb == 'S'){
 		if($('#reviewForm input:radio[name=scoreSize]').prop('checked') == false){
 			mcxDialog.alert('상품 사이즈를 평가해주세요.');
 			return;
@@ -439,7 +444,7 @@ var reviewCreate = function () {
 		}
 	}
 	
-	if(reviewList[0].sizeGb == 'T' || reviewList[0].sizeGb == 'B'){
+	if(reviewList.sizeGb == 'T' || reviewList.sizeGb == 'B'){
 		if($('#reviewForm input:radio[name=scoreFit]').prop('checked') == false){
 			mcxDialog.alert('상품 핏을 평가해주세요.');
 			return;
@@ -450,7 +455,7 @@ var reviewCreate = function () {
 		}	
 	}
 	
-	if(reviewList[0].sizeGb == 'S' ){
+	if(reviewList.sizeGb == 'S' ){
 		if($('#reviewForm input:radio[name=scoreWeight]').prop('checked') == false){
 			mcxDialog.alert('상품 무게감을 평가해주세요.');
 			return;
@@ -467,6 +472,7 @@ var reviewCreate = function () {
 		return;
 	}
 	
+	
 	mcxDialog.confirm('리뷰를 등록하시겠습니까"?', {
         cancelBtnText: "취소",
         sureBtnText: "확인",
@@ -475,12 +481,53 @@ var reviewCreate = function () {
         }
     });
 	
+	
+	
+	
+}
+
+// 리뷰 수정
+var reviewUpdate = function() {
+	
+	if($("#reviewForm input[name=height]").val() == '' || $("#reviewForm input[name=height]").val() == null){
+		mcxDialog.alert('키를 입력하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=weight]").val() == '' || $("#reviewForm input[name=weight]").val() == null){
+		mcxDialog.alert('몸무게를 입력하세요.');
+		return;
+	}
+
+	if($('#reviewContent').val().length<10){
+		mcxDialog.alert("리뷰 내용을 10자 이상 입력해주세요.");
+		return;
+	}
+	
+	mcxDialog.confirm('리뷰를 수정하시겠습니까"?', {
+        cancelBtnText: "취소",
+        sureBtnText: "확인",
+        sureBtnClick: function(){
+        	gagajf.ajaxFormSubmit($('#reviewForm').prop('action'), '#reviewForm', fnUpdateCallback);
+        }
+    });
+	
 }
 var fnSaveCallback = function (result) {
 	if(result.status == "200"){
-		mcxDialog.alert("상품 리뷰를 등록하였습니다.");
 		//포인트 예정금액 고지해야함
 		cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+		
+		//mcxDialog.alert("상품 리뷰를 등록하였습니다.");
+	}
+}
+
+var fnUpdateCallback = function (result) {
+	if(result.status == "200"){
+		//포인트 예정금액 고지해야함
+		cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+		$("#alreadyReview").trigger('click');
+		//mcxDialog.alert("상품 리뷰를 수정하였습니다.");
 	}
 }
 
@@ -526,7 +573,61 @@ var fnChooseFile = function(obj) {
 }
 
 $(document).ready(function() {
-	
+	 if(reviewStat=='u'){
+		 var reviewScore = reviewList.score -1;
+		 $("#score").val(reviewScore);
+		 rating(reviewScore);
+		$("#reviewForm input[name=height]").val(reviewList.height);
+		$("#reviewForm input[name=weight]").val(reviewList.weight);
+		$("#reviewForm textarea[name=reviewContent]").val(reviewList.reviewContent);
+		if(reviewList.scoreSize == "1"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreSize == "2"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreSize == "3"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreColor == "1"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreColor == "2"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreColor == "3"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreFit == "1"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreFit == "2"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreFit == "3"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreThick == "1"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreThick == "2"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreThick == "3"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreWeight == "1"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreWeight == "2"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreWeight == "3"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreBall == "1"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreBall == "2"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreBall == "3"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="3"]').prop('checked', true);
+		}
+	} 
 	// 마이페이지 LNB 설정
 	fnSetMypageLnbList(7);
 

+ 50 - 9
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html

@@ -76,13 +76,20 @@
 									</ul>
 								</div>																					
 							</div>
-							<div class="nodata">
+							<div class="nodata" id="nodata1">
 								<div class="txt_box">
 									<p>
 										작성 가능한 리뷰가 없습니다.<br>
 									</p>
 								</div>
-							</div> 
+							</div>
+							<div class="nodata" id="nodata2">
+								<div class="txt_box">
+									<p>
+										작성한 리뷰가 없습니다.<br>
+									</p>
+								</div>
+							</div>  
 						
 						</div>
 						
@@ -141,7 +148,8 @@
 	
 	// 주문 목록 조회 콜백
 	var fnSearchCallback1 = function(result) {
-		$('.nodata').hide();
+		$('#nodata1').hide();
+		$('#nodata2').hide();
 		
 		$('#reviewList').html('');
 		
@@ -189,7 +197,7 @@
 				$('#reviewList').append(html);
 			})
 		}else{
-			$('.nodata').show();
+			$('#nodata1').show();
 		}
 		// Create pagination
 		gagaPaging.createPagination(result.paging.pageable);
@@ -197,7 +205,8 @@
 	
 	// 주문 목록 조회 콜백
 	var fnSearchCallback2 = function(result) {
-		$('.nodata').hide();
+		$('#nodata1').hide();
+		$('#nodata2').hide();
 		
 		$('#reviewList').html('');
 		
@@ -234,9 +243,9 @@
 				html+='					</div>';
 				html+='					<div class="button_box">';
 				if (item.admRpl == null || item.admRpl == '') {
-					html+='						<p><button type="button" class="btn btn_default btn_sm"><span>리뷰 수정</span></button></p>';
+					html+='						<p><button type="button" class="btn btn_default btn_sm" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+','+item.goodsCd+','+item.reviewSq+')"><span>리뷰 수정</span></button></p>';
 				}
-				html+='						<p><button type="button" class="btn btn_default btn_sm"><span>리뷰 삭제</span></button></p>';
+				html+='						<p><button type="button" class="btn btn_default btn_sm" onclick="fnDeleteReview('+item.reviewSq+')"><span>리뷰 삭제</span></button></p>';
 				html+='					</div>';
 				html+='				</div>';
 				html+='				<div class="order_review">';
@@ -351,7 +360,7 @@
 				$('#reviewList').append(html);
 			})
 		}else{
-			$('.nodata').show();
+			$('#nodata2').show();
 		}
 		// Create pagination
 		gagaPaging.createPagination(result.paging2.pageable2);
@@ -362,15 +371,47 @@
 		let ordNo = obj1;
 		let ordDtlNo = obj2;
 		let goodsCd = obj3;
+		let reviewStat = 'c';
 		
-		cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd);
+		cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd+'/'+reviewStat);
 	}
 	
+	// 스크롤 이동
 	var fnMove = function(obj) {
 	  	 var offset = $("#admin_" + obj).offset();
 	  	 console.log(offset);
         $('html, body').animate({scrollTop : offset.top}, 400);
 	}
+	
+	// 리뷰삭제
+	var fnDeleteReview = function(obj) {
+		var data = {reviewSq : obj};
+				
+		var jsonData = JSON.stringify(data);
+
+		mcxDialog.confirm("작성한 리뷰를 삭제하시겠습니까?", {
+			cancelBtnText : "취소",
+			sureBtnText : "확인",
+			sureBtnClick : function() {
+
+				gagajf.ajaxJsonSubmit('/mypage/review/delete', jsonData, function() {
+					
+					mcxDialog.alert("삭제되었습니다.");
+					
+					$("#alreadyReview").trigger('click');	
+				});
+			}
+		});
+	}
+	
+	// 리뷰 수정
+	var fnReviewUpdate = function(obj1,obj2,obj3) {
+		let ordNo = obj1;
+		let ordDtlNo = obj2;
+		let goodsCd = obj3;
+		let reviewStat = 'u';
+		cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd+'/'+reviewStat);
+	}
 	</script>
 	</th:block>
 

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

@@ -31,7 +31,7 @@ const _PAGE_CUSTOMER_CONSENT_USERINFO = _frontUrl + "/customer/consent/useinfo/l
 
 //== 상품상세 ==/
 const _PAGE_GOODS_DETAIL = _frontUrl + "/goods/detail/form?goodsCd=";								// 상품 상세
-const _PAGE_GOODS_COUPON_LAYER = _frontUrl + "/goods/coupon/layer/";								// 쿠폰레이어
+const _PAGE_GOODS_COUPON_LAYER = _frontUrl + "/goods/coupon/layer?goodsCd=";						// 쿠폰레이어
 const _PAGE_GOODS_SHOP_BENEFIT_LAYER = _frontUrl + "/goods/shop/benefit/layer/";					// 쇼핑혜택레이어
 const _PAGE_CARD_PRMT_LAYER = _frontUrl + "/goods/card/prmt/layer/";								// 카드혜택레이어
 const _PAGE_GOODS_SIZEINFO_LAYER = _frontUrl + "/goods/sizeInfo/layer/";							// 사이즈정보레이어
@@ -338,7 +338,7 @@ var cfnLoginYes24 = function (requestGb, chkRememberMe) {
  */
 var cfnGoToGoodsDetail = function (goodsCd, colorCd, ithrCd, contentsLoc, planDtlSq, rccode ) {
 	var params = goodsCd;
-	params += "&colorCd=" + colorCd;
+	if (typeof (ithrCd) != 'colorCd') params += "&colorCd=" + colorCd;
 	if (typeof (ithrCd) != 'undefined') params += "&ithrCd=" + ithrCd;
 	if (typeof (contentsLoc) != 'undefined' && contentsLoc != "") params += "&contentsLoc=" + contentsLoc;
 	if (typeof (planDtlSq) != 'undefined') params += "&planDtlSq=" + planDtlSq;
@@ -436,7 +436,7 @@ function cfCardInfo() {
 *		cfGoodsCouponInfo(goodsCd);
 * </pre>
 */
-function cfGoodsCouponInfo(goodsCd) {
+function cfGoodsCouponInfo(goodsCd, goodsType) {
 	
 	if (!cfCheckLogin()) {
 		cfnGoToPage(_PAGE_LOGIN);
@@ -448,8 +448,9 @@ function cfGoodsCouponInfo(goodsCd) {
 	if ($('#layer_goods_coupon').length == 0) {
 		$('body').append(str);
 	}
-
-	cfOpenLayer(_PAGE_GOODS_COUPON_LAYER+goodsCd, 'layer_goods_coupon');
+	var params = goodsCd;
+	if (typeof (goodsType) != 'undefined') params += "&goodsType=" + goodsType;
+	cfOpenLayer(_PAGE_GOODS_COUPON_LAYER + params, 'layer_goods_coupon');
 }
 
 /**
@@ -685,26 +686,6 @@ function cfGoodsReview(goodsCd) {
 	cfOpenFullLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review',null , fnReviewLayerCollBack);
 }
 
-/**
-* @type   : function
-* @access : public
-* @desc   : 딜구성상품상세 full 팝업
-* <pre>
-*		cfGoodsDeailDetail();
-* </pre>
-*/
-function cfGoodsDeailDetail(goodsCd, compsGoodsCd) {
-	var Param = new Object();
-	var str = '<div class="pd_pop full_pop pd_descrp_pop" id="layer_goods_deal_detail"></div>';
-
-	if ($('#layer_goods_deal_detail').length == 0) {
-		$('body').append(str);
-	}
-
-	cfOpenFullLayer(_PAGE_DEAL_GOODS_DETAIL_LAYER + goodsCd +'/'+compsGoodsCd, 'layer_goods_deal_detail');
-}
-
-
 /**
  * @type   : function
  * @access : public