Kaynağa Gözat

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.front into develop

card007 5 yıl önce
ebeveyn
işleme
6e786e6635

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

@@ -428,4 +428,13 @@ public interface TsfGoodsDao {
 	 * @since 2020. 05. 20
 	 */
 	Collection<Goods> getGoodsDetailOrderGradeList(Goods goods);
+
+	/**
+	 * 구성 상품 목록
+	 * @param goods
+	 * @return
+	 * @author xodud1202
+	 * @since 2020. 05. 25
+	 */
+	Collection<Goods> getCompsGoodsList(Goods goods);
 }

+ 185 - 71
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -1159,52 +1159,47 @@ public class TsfOrderService {
 				sb.append("\t\t<name>").append("<![CDATA[").append(item.getGoodsNm()).append("]]>").append("</name>\n");	//<!-- 상품명 -->
 				sb.append("\t\t<basePrice>").append(item.getCurrPrice()).append("</basePrice>\n");				//<!-- 상품금액 -->
 				// TODO http: 부분 운영 프로토콜 확인 후 수정 필요(운영 상품상세가 HTTPS일 경우 분기처리 필요(개발서버, 운영 구분))
-				sb.append("\t\t<infoUrl>").append("<![CDATA[https:").append(param.getGoodsUrl()).append(item.getGoodsCd()).append("]]>").append("</infoUrl>\n");	//<!-- 상품상세페이지 URL -->
+				sb.append("\t\t<infoUrl>").append("<![CDATA[https:").append(param.getGoodsUrl()).append(item.getGoodsCd()).append("]]>").append("</infoUrl>\n");		//<!-- 상품상세페이지 URL -->
 				sb.append("\t\t<imageUrl>").append("<![CDATA[https:").append(goodsImgUrl).append("/").append(item.getSysImgNm()).append("]]>").append("</imageUrl>\n");	//<!-- 상품원본이미지 URL -->
 
-				// 세트상품은 single quantity를 입력해야한다
-				/*sb.append("\t\t<single>\n");
-				sb.append("\t\t\t<quantity>").append(item.getGoodsQty()).append("</quantity>\n");
-				sb.append("\t\t</single>\n");*/
 				if(TscConstants.GoodsType.SET.value().equals(item.getGoodsType())) {		// 세트상품
-					// 구성상품 옵션정보 split
-					String[] optCds        = item.getOptCd().split(",");			// 옵션코드
-					String[] itemCds       = item.getItemCd().split(",");			// 상품코드
-
 					// 세트상품 manageCode 정렬 (optCd ASC)
 					Goods option = new Goods();
-					option.setArrGoodsCd(itemCds);
-					option.setSizeArr(optCds);
+					option.setArrGoodsCd(item.getItemCd().split(","));
+					option.setSizeArr(item.getOptCd().split(","));
 					List<Goods> optionList = (ArrayList<Goods>) goodsDao.getOrderGoodsOptionList(option);
 
 					StringBuilder manageCode = new StringBuilder();
+					int k = 0;
 					for(Goods opt : optionList) {
+						if(k++ > 0) manageCode.append("/");
 						manageCode.append(opt.getOptCd());
 					}
 
 					// 옵션 정보
 					sb.append("\t\t<option>\n");
-					sb.append("\t\t\t<quantity>").append(item.getGoodsQty()).append("</quantity>\n");    //<!-- 옵션수량-->
-					sb.append("\t\t\t<price>").append(item.getOptAddPrice()).append("</price>\n");			//<!-- 옵션금액 -->
-					sb.append("\t\t\t<manageCode>").append(manageCode).append("</manageCode>\n");	//<!-- 옵션관리코드 -->
+					sb.append("\t\t\t<quantity>").append(item.getGoodsQty()).append("</quantity>\n");	//<!-- 옵션수량-->
+					sb.append("\t\t\t<price>").append(item.getOptAddPrice()).append("</price>\n");		//<!-- 옵션금액 -->
+					sb.append("\t\t\t<manageCode>").append(manageCode).append("</manageCode>\n");		//<!-- 옵션관리코드 -->
 
-					// 칼라코드
-					/*for(int i = 0 ; i < itemNms.length ; i++) {
-						// 상품명, 컬러, 사이즈 확인 ==> 20200517 정지혜과장님 확인 :: 상품명=25,OPT1=13,OPT2=12 글자. 넘어갈경우 뒤에 ".." 붙여서 글자수 맞출것.
+					// 구성상품별 옵션 세팅
+					int i = 1;
+					for(Goods opt : optionList) {
+						// 상품명, 컬러, 사이즈 확인(최대 50자) ==> 20200517 정지혜과장님 확인 :: 상품명=25,OPT1=13,OPT2=12 글자. 넘어갈경우 뒤에 ".." 붙여서 글자수 맞출것.
 						// 상품명/컬러/사이즈 이므로 가운데 / 를 위해 24, 12, 12로 진행
-						if(itemNms[i].length() > 24)	{itemNms[i]  = itemNms[i].substring(0, 21) + "..";}
-						if(optCd2s[i].length() > 12)	{optCd2s[i]  = optCd2s[i].substring(0, 9)  + "..";}
-						if(colorNms[i].length() > 12)	{colorNms[i] = colorNms[i].substring(0, 9) + "..";}
+						if(opt.getGoodsNm().length() > 24)	{opt.setGoodsNm(opt.getGoodsNm().substring(0, 21) + "..");}
+						if(opt.getOptCd2().length() > 12)	{opt.setOptCd2(opt.getOptCd2().substring(0, 9)  + "..");}
+						if(opt.getColorNm().length() > 12)	{opt.setColorNm(opt.getColorNm().substring(0, 9) + "..");}
 
 						sb.append("\t\t\t<selectedItem>\n");
-						sb.append("\t\t\t\t<type>SELECT</type>\n");		//<!-- 옵션유형 -->
-						sb.append("\t\t\t\t<name>구성상품").append(i + 1).append("</name>\n");	//<!-- 옵션명 -->
+						sb.append("\t\t\t\t<type>SELECT</type>\n");								//<!-- 옵션유형 -->
+						sb.append("\t\t\t\t<name>구성상품").append(i++).append("</name>\n");		//<!-- 옵션명 -->
 						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(itemCds[i]).append("/").append(optCds[i]).append("</id>\n");//<!-- 옵션 -->
-						sb.append("\t\t\t\t\t<text>").append(itemNms[i]).append("/").append(colorNms[i]).append("/").append(optCd2s[i]).append("</text>\n");//<!-- 옵션명 -->
+						sb.append("\t\t\t\t\t<id>").append(opt.getOptCd()).append("</id>\n");	//<!-- 옵션 -->
+						sb.append("\t\t\t\t\t<text>").append(opt.getGoodsNm()).append("/").append(opt.getColorNm()).append("/").append(opt.getOptCd2()).append("</text>\n");//<!-- 옵션명 -->
 						sb.append("\t\t\t\t</value>\n");
 						sb.append("\t\t\t</selectedItem>\n");
-					}*/
+					}
 
 					sb.append("\t\t</option>\n");
 				} else if("Y".equals(item.getSelfGoodsYn())) {								// 세트상품 제외 자사상품
@@ -1315,6 +1310,28 @@ public class TsfOrderService {
 		return result;
 	}
 
+	private String getCombinationXml(String manageCode, int addPrice, int stockQty, int size) {
+		String[] optCd = manageCode.split("/");
+		StringBuilder sb = new StringBuilder();
+		sb.append("\t\t\t<combination>\n");
+		sb.append("\t\t\t\t<manageCode>").append(manageCode).append("</manageCode>\n");
+		sb.append("\t\t\t\t<price>").append(addPrice).append("</price>\n");
+		sb.append("\t\t\t\t<stockQuantity>").append(stockQty).append("</stockQuantity>\n");
+		sb.append("\t\t\t\t<status>true</status>\n");
+
+		// 옵션 옵션조합정보 색상
+		for(int i = 0 ; i < size ; i++) {
+			sb.append("\t\t\t\t<options>\n");
+			sb.append("\t\t\t\t\t<name>구성상품").append(i + 1).append("</name>\n");
+			sb.append("\t\t\t\t\t<id>").append(optCd[i]).append("</id>\n");
+			sb.append("\t\t\t\t</options>\n");
+		}
+
+		sb.append("\t\t\t</combination>\n");
+
+		return sb.toString();
+	}
+
 	/**
 	 * 네이버페이 주문 정보 송부
 	 * @param sb
@@ -1514,63 +1531,160 @@ public class TsfOrderService {
 					// 옵션정보 지원여부 true
 					sb.append("\t\t<optionSupport>true</optionSupport>\n");
 
-					// 옵션 정보
-					sb.append("\t\t<option>\n");
-
 					// 세트상품 정보  getGoodsSetComposeList
 					goods.setSiteCd(TscConstants.Site.STYLE24.value());
-					Collection<GoodsCompose> compsInfoList = goodsDao.getGoodsSetComposeList(goods);
-					List<String> colorNmList = new ArrayList<String>();
-					List<String> colorList = new ArrayList<String>();
-					List<String> sizeList = new ArrayList<String>();
+					Collection<Goods> compsInfoList = goodsDao.getCompsGoodsList(goods);
 
+					// 옵션 정보
+					sb.append("\t\t<option>\n");
+					int combCnt = 0;		// 옵션 조합 총 수량
 					// 옵션 아이템정보 구성상품
-					sb.append("\t\t\t<optionItem>\n");
-					sb.append("\t\t\t\t<type>SELECT</type>\n");
-					sb.append("\t\t\t\t<name>상품</name>\n");
-					for (GoodsCompose comps : compsInfoList) {
-						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(comps.getGoodsCd()).append("</id>\n");
-						if(comps.getCompsGoodsNm().length() > 50)	{comps.setCompsGoodsNm(comps.getCompsGoodsNm().substring(0, 47) + "..");}
-						sb.append("\t\t\t\t\t<text>").append(comps.getCompsGoodsNm()).append("</text>\n");
-						sb.append("\t\t\t\t</value>\n");
-					}
-					sb.append("\t\t\t</optionItem>\n");
-
-					// 옵션 아이템정보 색상
-					sb.append("\t\t\t<optionItem>\n");
-					sb.append("\t\t\t\t<type>SELECT</type>\n");
-					sb.append("\t\t\t\t<name>색상</name>\n");
-					int j = 0;
-					for (String color : colorList) {
-						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(color).append("</id>\n");
-						sb.append("\t\t\t\t\t<text>").append(colorNmList.get(j++)).append("</text>\n");
-						sb.append("\t\t\t\t</value>\n");
-					}
-					sb.append("\t\t\t</optionItem>\n");
-
-					// 옵션 아이템정보 사이즈
-					sb.append("\t\t\t<optionItem>\n");
-					sb.append("\t\t\t\t<type>SELECT</type>\n");
-					sb.append("\t\t\t\t<name>사이즈</name>\n");
-					for (String size : sizeList) {
-						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(size).append("</id>\n");
-						sb.append("\t\t\t\t\t<text>").append(size).append("</text>\n");
-						sb.append("\t\t\t\t</value>\n");
-					}
-					sb.append("\t\t\t</optionItem>\n");
+					for (Goods comps : compsInfoList) {
+						sb.append("\t\t\t<optionItem>\n");
+						sb.append("\t\t\t\t<type>SELECT</type>\n");
+						sb.append("\t\t\t\t<name>구성상품").append(comps.getRnum()).append("</name>\n");
 
-					// 옵션 정보 전체 송부
-					for (GoodsCompose comps : compsInfoList) {
+						// 구성상품별 옵션 정보
+						String[] optCds = comps.getOptCd().split(",");
+						String[] optCd2s = comps.getOptCd2().split(",");
+						String[] colorNms = comps.getColorNm().split(",");
+						combCnt *= optCds.length;
 
-					}
+						for(int j = 0 ; j < optCds.length ; i++) {
+							if(comps.getGoodsNm().length() > 24)	{comps.setGoodsNm(comps.getGoodsNm().substring(0, 21) + "..");}
+							if(optCd2s[j].length() > 12)	{optCd2s[j] = optCd2s[j].substring(0, 9)  + "..";}
+							if(colorNms[j].length() > 12)	{colorNms[j] = colorNms[j].substring(0, 9) + "..";}
 
+							sb.append("\t\t\t\t<value>\n");
+							sb.append("\t\t\t\t\t<id>").append(optCds[j]).append("</id>\n");
+							sb.append("\t\t\t\t\t<text>").append(comps.getGoodsNm()).append("/").append(colorNms[j]).append("/").append(optCd2s[j]).append("</text>\n");//<!-- 옵션명 -->
+							sb.append("\t\t\t\t</value>\n");
+						}
 
+						sb.append("\t\t\t</optionItem>\n");
+					}
 
 					sb.append("\t\t</option>\n");
 
+					// 세트 구성상품 모든 옵션 경우의 수 조회 > 상품코드 오름차순, OPTCD 오름차순으로 정확히 보낼것 > 주문요청된 manageCode가 같아야함.
+					for (Goods comps1 : compsInfoList) {
+						if(comps1.getRnum() == 1) {
+							// 구성상품별 옵션 정보
+							String[] goods1optCds = comps1.getOptCd().split(",");
+							String[] goods1addPrices = comps1.getItemStockQty().split(",");
+							String[] goods1stockQty = comps1.getItemStockQty().split(",");
+
+							for(int g1 = 0 ; g1 < goods1optCds.length ; g1++) {
+								StringBuilder manageCode = new StringBuilder(goods1optCds[g1]);	// 옵션코드 조합
+								int addPrice = Integer.parseInt(goods1addPrices[g1]);		// 추가금액 합계
+								int stockQty = Integer.parseInt(goods1stockQty[g1]);		// 상품 주문 최소 재고(구성상품 최소)
+
+								if(compsInfoList.size() == 2) {		// 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
+									for (Goods comps2 : compsInfoList) {
+										if(comps2.getRnum() == 2) {
+											// 구성상품별 옵션 정보
+											String[] goods2optCds = comps2.getOptCd().split(",");
+											String[] goods2addPrices = comps2.getItemStockQty().split(",");
+											String[] goods2stockQty = comps2.getItemStockQty().split(",");
+
+											// 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
+											String manageCodeSave2 = goods1optCds[g1];
+											int addPriceSave2 = Integer.parseInt(goods1addPrices[g1]);
+											int stockQtySave2 = Integer.parseInt(goods1stockQty[g1]);
+
+											for(int g2 = 0 ; g2 < goods2optCds.length ; g2++) {
+												manageCode = new StringBuilder(manageCodeSave2);		// String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
+												manageCode.append("/").append(goods2optCds[g2]);
+												addPrice = addPriceSave2 + Integer.parseInt(goods2addPrices[g2]);
+												if(stockQtySave2 < Integer.parseInt(goods2stockQty[g2])) stockQty = Integer.parseInt(goods2stockQty[g2]);
+
+												if(compsInfoList.size() == 3) {        // 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
+													for (Goods comps3 : compsInfoList) {
+														if (comps3.getRnum() == 3) {
+															// 구성상품별 옵션 정보
+															String[] goods3optCds = comps3.getOptCd().split(",");
+															String[] goods3addPrices = comps3.getItemStockQty().split(",");
+															String[] goods3stockQty = comps3.getItemStockQty().split(",");
+
+															// 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
+															String manageCodeSave3 = manageCodeSave2;
+															int addPriceSave3 = addPriceSave2;
+															int stockQtySave3 = stockQtySave2;
+
+															for(int g3 = 0 ; g3 < goods3optCds.length ; g3++) {
+																manageCode = new StringBuilder(manageCodeSave3);		// String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
+																manageCode.append("/").append(goods3optCds[g3]);
+																addPrice = addPriceSave3 + Integer.parseInt(goods3addPrices[g3]);
+																if(stockQtySave3 < Integer.parseInt(goods3stockQty[g3])) stockQty = Integer.parseInt(goods3stockQty[g3]);
+
+																if(compsInfoList.size() == 4) {        // 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
+																	for (Goods comps4 : compsInfoList) {
+																		if (comps4.getRnum() == 4) {
+																			// 구성상품별 옵션 정보
+																			String[] goods4optCds = comps4.getOptCd().split(",");
+																			String[] goods4addPrices = comps4.getItemStockQty().split(",");
+																			String[] goods4stockQty = comps4.getItemStockQty().split(",");
+
+																			// 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
+																			String manageCodeSave4 = manageCodeSave3;
+																			int addPriceSave4 = addPriceSave3;
+																			int stockQtySave4 = stockQtySave3;
+
+																			for(int g4 = 0 ; g4 < goods4optCds.length ; g4++) {
+																				manageCode = new StringBuilder(manageCodeSave4);		// String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
+																				manageCode.append("/").append(goods4optCds[g4]);
+																				addPrice = addPriceSave4 + Integer.parseInt(goods4addPrices[g4]);
+																				if(stockQtySave4 < Integer.parseInt(goods4stockQty[g4])) stockQty = Integer.parseInt(goods4stockQty[g4]);
+
+																				if(compsInfoList.size() == 5) {        // 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
+																					for (Goods comps5 : compsInfoList) {
+																						if (comps5.getRnum() == 5) {
+																							// 구성상품별 옵션 정보
+																							String[] goods5optCds = comps5.getOptCd().split(",");
+																							String[] goods5addPrices = comps5.getItemStockQty().split(",");
+																							String[] goods5stockQty = comps5.getItemStockQty().split(",");
+
+																							// 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
+																							String manageCodeSave5 = manageCodeSave4;
+																							int addPriceSave5 = addPriceSave4;
+																							int stockQtySave5 = stockQtySave4;
+
+																							for(int g5 = 0 ; g5 < goods5optCds.length ; g5++) {
+																								manageCode = new StringBuilder(manageCodeSave5);        // String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
+																								manageCode.append("/").append(goods5optCds[g5]);
+																								addPrice = addPriceSave5 + Integer.parseInt(goods5addPrices[g5]);
+																								if (stockQtySave5 < Integer.parseInt(goods5stockQty[g5])) stockQty = Integer.parseInt(goods5stockQty[g5]);
+
+																								// 세트상품은 최대 5개이므로 마무리.
+																								sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
+																							}
+																						}
+																					}
+																				} else {
+																					sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
+																				}
+																			}
+																		}
+																	}
+																} else {
+																	sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
+																}
+															}
+														}
+													}
+												} else {
+													sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
+												}
+											}
+										}
+									}
+								} else {
+									sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
+								}
+							}
+						}
+					}
+
 					// 10. 배송정보조회
 					// 5.2.1 업체별 기본배송비, 무료배송비
 					String delvFeeCd = "";

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

@@ -364,7 +364,6 @@ public class TsfCartController extends TsfBaseController {
 
 		// 장바구니 상품목록
 		cart = cartService.getCartGoodsList(cart);
-		log.info("CHECK LENGTH :::: {}", cart.getDelvAllCartList().size());
 		cart.setImgPath1(env.getProperty("upload.goods.view"));
 
 		// 현재 주문 가능 수량순으로 정렬

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

@@ -185,6 +185,7 @@ public class Goods extends TscBaseDomain {
 	private String brandKnm;
 	private Integer ordNo;			// 주문번호
 	private Integer ordDtlNo;		// 주문상세번호
+	private Integer rnum;
 
 	//상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:상위컨텐츠-모바일,70:하위컨텐츠-모바일,80:상품상세(as-is,입점))
 	private String goodsTitle; 			// 10:상품타이틀

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

@@ -575,7 +575,7 @@
 	</select>
 
 	<!-- 주문 상품 옵션 정보 조회 -->
-	<select id="getOrderGoodsOptionList" parameterType="GoodsStock" resultType="GoodsStock">
+	<select id="getOrderGoodsOptionList" parameterType="Goods" resultType="Goods">
 		/* TsfGoods.getOrderGoodsOptionList */
 		SELECT G.GOODS_CD
 		     , G.GOODS_STAT
@@ -583,7 +583,7 @@
 		     , VS.OPT_CD
 		     , VS.OPT_CD1
 		     , VS.OPT_CD2
-		     , CASE WHEN VS.SOLDOUT_YN = 'Y' THEN 0 ELSE VS.CURR_STOCK_QTY END AS STOCK_QTY
+		     , CASE WHEN VS.SOLDOUT_YN = 'Y' OR G.GOODS_STAT <![CDATA[ <> ]]> 'G008_90' THEN 0 ELSE VS.CURR_STOCK_QTY END AS STOCK_QTY
 		     , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(VS.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), VS.OPT_CD1) AS COLOR_NM
 		FROM   TB_GOODS G
 		INNER  JOIN VW_STOCK VS
@@ -599,7 +599,7 @@
 				#{item}
 			</foreach>
 		</if>
-		ORDER  BY VS.OPT_CD ASC
+		ORDER  BY G.GOODS_CD ASC, VS.OPT_CD ASC
 	</select>
 	
 	<!-- 무이자 혜택안내 -->
@@ -3084,4 +3084,36 @@
 		WHERE A.GOODS_CD = #{goodsCd}
 		ORDER BY G.GOODS_CD, A.CUST_GRADE
 	</select>
+
+	<!-- 구성 상품 목록 -->
+	<select id="getCompsGoodsList" parameterType="Goods" resultType="Goods">
+		/* TsfGoods.getSimpleCompsGoodsList */
+		SELECT ROW_NUMBER() OVER() AS RNUM
+		     , A.GOODS_CD
+		     , A.COMPS_GOODS_CD
+		     , A.GOODS_NM
+		     , A.OPT_CD
+		     , A.OPT_CD2
+		     , A.ADD_PRICE
+		     , A.ITEM_STOCK_QTY
+		     , A.COLOR_NM
+		FROM (SELECT GC.GOODS_CD
+		           , GC.COMPS_GOODS_CD
+		           , G.GOODS_NM
+		           , GROUP_CONCAT(VS.OPT_CD ORDER BY VS.OPT_CD ASC) AS OPT_CD
+		           , GROUP_CONCAT(VS.OPT_CD2 ORDER BY VS.OPT_CD ASC) AS OPT_CD2
+		           , GROUP_CONCAT(VS.ADD_PRICE ORDER BY VS.OPT_CD ASC) AS ADD_PRICE
+		           , GROUP_CONCAT(TRUNCATE(VS.CURR_STOCK_QTY / GC.QTY, 0) ORDER BY VS.OPT_CD ASC) AS ITEM_STOCK_QTY
+		           , GROUP_CONCAT(IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(VS.OPT_CD1,'') , VS.OPT_CD1 ) AND USE_YN  = 'Y'), VS.OPT_CD1) ORDER BY VS.OPT_CD ASC) AS COLOR_NM
+		      FROM   TB_GOODS_COMPOSE GC
+		      INNER  JOIN VW_STOCK VS
+		      ON     GC.COMPS_GOODS_CD = VS.GOODS_CD
+		      INNER  JOIN TB_GOODS G
+		      ON     GC.COMPS_GOODS_CD = G.GOODS_CD
+		      WHERE  GC.GOODS_CD = #{goodsCd}
+		      GROUP  BY GC.GOODS_CD
+		              , G.GOODS_NM
+		              , GC.COMPS_GOODS_CD
+		      ORDER  BY GC.COMPS_GOODS_CD) A		<!-- 변경x > 네이버페이 KEY로 송부되는 순서 -->
+	</select>
 </mapper>

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

@@ -847,6 +847,46 @@
 		
 	}
 	
+	//팝업 - 딜상세팝업 구매하기버튼 > 옵션셀렉트팝업	
+	var fnGoodsDealOptionOpen = function(goodsCd){
+		$("#pdDescrpPop .close-modal ").click();
+		$('.container').addClass('btPop_open');
+		$(".Purchase_pop .pop_option_select").show();
+		popOpenScroll();
+		let selIdx = 0;
+		$('.Purchase_pop .pop_option_select').find('#form_field_item_Up .list li').each(function() { 
+			if (goodsCd == $(this).find('.item_prod').attr('goodscd')){
+				return false;
+			}
+			selIdx ++;
+		});
+		
+		$('.Purchase_pop .pop_option_select').find('#form_field_item_Up .list li').eq(selIdx).trigger("click");
+        return false;
+	}	
+	
+	// pop open
+	function popOpenScroll(){
+		$('html, body').css({'overflow': 'hidden', 'height': '100%'}); 
+		$('#element').on('scroll touchmove mousewheel', function(event) { // 터치무브, 휠 스크롤 방지
+			event.preventDefault();
+			event.stopPropagation();
+			return false;
+		});
+	}
+	// pop close
+	function popClsScroll(){
+		$('html, body').css({'overflow': 'auto', 'height': '100%'}); //n 해제
+		$('#element').off('scroll touchmove mousewheel'); // 터치무브, 휠 스크롤 가능
+		return false;
+	}
+	// pop close
+	function popClsScroll2(){
+		$('html, body').css({'overflow': 'auto', 'height': '100%'}); //n 해제
+		$('#element').off('scroll touchmove mousewheel'); // 터치무브, 휠 스크롤 가능
+		return false;
+	}
+	
 	 $(document).ready( function() {
 		 
 		 $('.timer_box').css('display', 'none');
@@ -1047,8 +1087,8 @@
 		});
 
 
-			//팝업 - 제품리뷰 > 카테고리팝오픈
-			// 오픈
+		//팝업 - 제품리뷰 > 카테고리팝오픈
+		// 오픈
 		 $(document).on('click','.pd_review .category_open > li',function(e){
 				var dataName=$(this).attr("data_name");
 			 $(".pd_review .category_box").show();
@@ -1089,27 +1129,7 @@
 		
 			// =============구매하기팝업========================================================
 
-		// pop open
-		function popOpenScroll(){
-			$('html, body').css({'overflow': 'hidden', 'height': '100%'}); 
-			$('#element').on('scroll touchmove mousewheel', function(event) { // 터치무브, 휠 스크롤 방지
-				event.preventDefault();
-				event.stopPropagation();
-				return false;
-			});
-		}
-		// pop close
-		function popClsScroll(){
-			$('html, body').css({'overflow': 'auto', 'height': '100%'}); //n 해제
-			$('#element').off('scroll touchmove mousewheel'); // 터치무브, 휠 스크롤 가능
-			return false;
-		}
-		// pop close
-		function popClsScroll2(){
-			$('html, body').css({'overflow': 'auto', 'height': '100%'}); //n 해제
-			$('#element').off('scroll touchmove mousewheel'); // 터치무브, 휠 스크롤 가능
-			return false;
-		}
+
 
 		//팝업 - 구매하기 > 옵션선택 > 옵션셀렉트팝업
 		$(document).on('click','.Purchase_pop .option_result .option_open',function(e){
@@ -1128,16 +1148,17 @@
 			 return false;
 		 });
 
-			//팝업 - 딜상세팝업 구매하기버튼 > 옵션셀렉트팝업
-		$(document).on('click','#pdDescrpPop .modal-footer button',function(e){
-			$("#pdDescrpPop .close-modal ").click();
-			$('.container').addClass('btPop_open');
-			$(".Purchase_pop .pop_option_select").show();
-			popOpenScroll();
-		 return false;
-		 });
-		// ============================================================================//
+		//팝업 - 딜상세팝업 구매하기버튼 > 옵션셀렉트팝업  ==> fnGoodsDealOptionOpen()대체
+//		$(document).on('click','#pdDescrpPop .modal-footer button',function(e){
+//			$("#pdDescrpPop .close-modal ").click();
+//			$('.container').addClass('btPop_open');
+//			$(".Purchase_pop .pop_option_select").show();
+//			popOpenScroll();
+//		 return false;
+//		 });
 			
+		
+		// ============================================================================//
 
 
 		// =============딜리스트팝업========================================================

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

@@ -685,13 +685,13 @@
 						</div>
 					</a>
 				</div>
-				<div class="area_slider" id="btn_pdBestReview_pop" th:if="${bestReviewList != null and !bestReviewList.empty}">
+				<div class="area_slider" id="btn_pdBestReview_pop"  th:if="${bestReviewList != null and !bestReviewList.empty}">
 					<div class="swiper-container">
 						<div class="swiper-wrapper">
 							<div class="swiper-slide"  th:each="bestReview, status : ${bestReviewList}"  >
 								<!-- 베스트 리뷰 등록시 노출 -->
 								<div class="best_review">
-									<a href="javascript:void(0);" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])">
+									<a href="javascript:void(0);"  th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])">
 										<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.iscore*100/5), 0,0)}">
 											<span class="star">
 												<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
@@ -934,7 +934,7 @@
 								<div class="form_field">
 									<div class="select_custom option_open">
 										<div class="combo">
-											<div class="select">옵션을 선택해주세요</div>
+											<div class="select">옵션을 선택해주세요.</div>
 										</div>
 									</div>
 								</div>
@@ -2306,6 +2306,7 @@
 			},
 		});
 		
+		//--상품문의 창 순서 - 
 		var qnaCount = 0;
 		//팝업 - 상품문의 리스트	
 		$(document).on('click','#btn_pdQnaList_pop',function(e){
@@ -2326,6 +2327,48 @@
 			}
             return false;
         });
+		//--상품문의 창 순서 -
+		
+		
+		//--상품리뷰 창 순서 -
+		var reviewCount = 0;
+		//팝업 - 상품상세 베스트리뷰
+		$(document).on('click','.pd_detail #btn_pdBestReview_pop a',function(e){
+               reviewCount = 1;
+               return false;
+           })
+        //팝업 - 상품상세>리뷰팝업>포토상세(포토영상상세)
+		$(document).on('click','.pd_review_pop .area_rv_photo a',function(e){
+               $("#layer_review_best").modal("show");
+               reviewCount = 2;
+               return false;
+           })
+        //팝업 - 상품상세>리뷰팝업>포토상세(베스트상세)
+		$(document).on('click','.pd_review_pop .area_rv_best a',function(e){
+               $("#layer_review_best").modal("show");
+               reviewCount = 2;
+               return false;
+           })
+        //팝업 - 상품상세>리뷰팝업>포토상세 닫기
+		$(document).on('click','#layer_review_best .close-modal',function(e){
+			if(reviewCount === 2){
+				$('.pd_review_pop').modal('show');
+			}
+               return false;
+           });
+		//팝업 - 포토/영상 (list)
+		$(document).on('click','.pd_review_pop #btn_more_photoreview',function(e){
+               reviewCount = 2;
+               return false;
+           })
+		$(document).on('click','#layer_review_photo .close-modal',function(e){
+			if(reviewCount === 2){
+				$('.pd_review_pop').modal('show');
+			}
+               return false;
+           });
+		
+		//--상품리뷰 창 순서 -
 		
 		$(document).on('click','.pd_detail .thumb_box .thumb',function(e){
             $('#pdItemThumbPop').css("display", "block");
@@ -2471,9 +2514,10 @@
             return false;
         });
 		
-		/* $(document).on('click','.pop_open_btn',function(){
+		// 상품평 상세 토글
+		$(document).on('click','.pop_open_btn',function(){
 			$('.modal.photo_comment_popup .pop_detail').toggleClass('active');
-		}); */
+		});
 		
 	});
 	

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

@@ -78,7 +78,7 @@
 		if (result.paging.pageable.pageNo == 1){
 			$('#ulGoodsQna').html('');
 		}	
-		debugger;
+		
 		$.each(result.dataList, function(idx, item) {
 			$('#goodsQnaForm').find('.nodata').hide();
 			let tag = '';

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

@@ -416,7 +416,7 @@
 					<div class="swiper-wrapper">
 						<div class="swiper-slide" th:each="bestReview, status : ${bestReviewList}">
 							<div class="best_review">
-								<a href="javascript:void(0);">
+								<a href="javascript:void(0);" id="btn_pdBestReview_pop" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])">
 									<div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.iscore*100/5), 0,0)}">
 										<span class="star">
 											<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->

+ 8 - 0
src/main/webapp/WEB-INF/views/mob/goods/GoodsIncludeFormMob.html

@@ -405,6 +405,7 @@
 				$(this).addClass('selected');
 				let tag = $(this).html();
 				$('#pdDescrpPop').find('.item_blk').html(tag);
+				$('.deal_listDescrp_open').html('상품'+ (selIdx+1));
 			}
 			selIdx ++;
 		});
@@ -440,6 +441,13 @@
 		$("#pdDescrpPop").modal("show");
 	}
 	
+	//팝업 - 딜상세팝업 구매하기버튼
+	$(document).on('click','#btn_deal_purchase',function(e){
+		let selGoodsCd = $('#pdDescrpPop').find('input[name=selectGoods]').val();
+		fnGoodsDealOptionOpen(selGoodsCd);
+	});
+	
+	
 	$(document).ready( function() {
 		
 	});

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

@@ -32,8 +32,8 @@
 				</div>
 				<div class="form_field">
 					<div class="input_box">
-						<div class="lap">
-							<textarea class="doc_itemqna"  name="questContent" cols="30" rows="10"  maxlength="500" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
+						<div class="input_wrap">
+							<textarea name="questContent" cols="30" rows="10"  maxlength="500" placeholder="문의내용 입력(500자 이내)" style="resize: none;"></textarea>
 							<p class="txt_cnt">
 								<span id="itemqna_cnt" class="itemqna_cnt" ><em class="c_primary">0</em>/500자</span>
 							</p>   

+ 91 - 86
src/main/webapp/WEB-INF/views/mob/goods/GoodsReviewDetailFormMob.html

@@ -58,113 +58,114 @@
 					</div>
 				<!-- //리뷰사진영역 -->
 				<!-- 리뷰내용 -->
-				<div class="pd_review best">
-					<div class="area_rv_all">
-						<div class="btn_review_open">리뷰오픈</div>
-						<div class="review_list">
-							<ul>
-								<li>
-									<div class="review">
-										<div class="info_box">
-											<div class="star_score" th:with="starScore=${#numbers.formatDecimal((review.iscore*100/5), 0,0)}">
-												<span class="star">
-													<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
-												</span>
+					<div class="pop_detail">
+						<button type="button" class="pop_open_btn"><span class="sr-only"></span></button>
+						<div class="comment_wrap">
+							<div class="review_list">
+								<ul>
+									<li>
+										<div class="review">
+											<div class="info_box">
+												<div class="star_score" th:with="starScore=${#numbers.formatDecimal((review.iscore*100/5), 0,0)}">
+													<span class="star">
+														<em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
+													</span>
+												</div>
+												<div class="writer">
+													<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
+													<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
+												</div>
 											</div>
-											<div class="writer">
-												<span class="wr_id" th:text="${review.maskingCustId}">ab2****</span>
-												<span class="wr_date" th:text="${review.regDt}">2020.07.15</span>
+											<div class="response_box">
+												<div>
+													<dl>
+														<div th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}" >
+															<dt >구매옵션</dt>
+															<th:block th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}">
+															<dd th:text="${reviewGoods.optCd1Nm +' / '+ reviewGoods.optCd2}">베이지 / 100</dd>
+															</th:block>
+														</div>
+														<div>
+															<dt>키/몸무게</dt>
+															<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
+																<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
+															</dd>
+														</div>
+													</dl>
+												</div>
 											</div>
-										</div>
-										<div class="response_box">
-											<div>
-												<dl>
-													<div th:if="${review.goodsOptionList != null and !review.goodsOptionList.empty}" th:each="reviewGoods, goodsStatus : ${review.goodsOptionList}">
-														<dt >구매옵션</dt>
-														<dd th:text="${reviewGoods.optCd1 +' / '+ reviewGoods.optCd2}">베이지 / 100</dd>
-													</div>
-													<div>
-														<dt>키/몸무게</dt>
-														<dd><th:block th:if="${not #strings.isEmpty(review.height)}" th:text="|${review.height}cm / |"></th:block> 
-															<th:block th:if="${not #strings.isEmpty(review.weight)}" th:text="|${review.weight}kg|"></th:block>
-														</dd>
-													</div>
-												</dl>
+											<div class="txt_review_box">
+												<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">옷</p>
 											</div>
-										</div>
-										<div class="txt_review_box">
-											<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.reviewContent))}">옷</p>
-										</div>
-										<div class="response_box2"  th:if="${not #strings.isEmpty(review.sizeGb)}">
-											<div>
-												<dl>
-													<div>
-														<dt>사이즈</dt>
-														<dd th:text="${review.scoreSizeNm}">작음</dd>
-													</div>
-													<div>
-														<dt>컬러</dt>
-														<dd th:text="${review.scoreColorNm}">밝음</dd>
-													</div>
-													<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
-													<div>
-														<dt>핏</dt>
-														<dd th:text="${review.scoreFitNm}">레귤러</dd>
-													</div>
-													<div>
-														<dt>두께감</dt>
-														<dd th:text="${review.scoreThickNm}">적당함</dd>
-													</div>
-													</th:block>
-													<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
-													<div>
-														<dt>무게감</dt>
-														<dd th:text="${review.scoreWeightNm}">레귤러</dd>
+											<div class="response_box2"  th:if="${not #strings.isEmpty(review.sizeGb)}">
+												<div>
+													<dl>
+														<div>
+															<dt>사이즈</dt>
+															<dd th:text="${review.scoreSizeNm}">작음</dd>
+														</div>
+														<div>
+															<dt>컬러</dt>
+															<dd th:text="${review.scoreColorNm}">밝음</dd>
+														</div>
+														<th:block th:if="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+														<div>
+															<dt>핏</dt>
+															<dd th:text="${review.scoreFitNm}">레귤러</dd>
+														</div>
+														<div>
+															<dt>두께감</dt>
+															<dd th:text="${review.scoreThickNm}">적당함</dd>
+														</div>
+														</th:block>
+														<th:block th:unless="${review.sizeGb == 'T' or review.sizeGb == 'B'}">
+														<div>
+															<dt>무게감</dt>
+															<dd th:text="${review.scoreWeightNm}">레귤러</dd>
+														</div>
+														<div>
+															<dt>볼너비</dt>
+															<dd th:text="${review.scoreBallNm}">적당함</dd>
+														</div>
+														</th:block>
+													</dl>
+												</div>
+											</div>
+											<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
+												<div class="reply">
+													<div class="reply_writer">
+														<span class="wr_name">관리자</span>
+														<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
 													</div>
-													<div>
-														<dt>볼너비</dt>
-														<dd th:text="${review.scoreBallNm}">적당함</dd>
+													<div class="reply_txt">
+														<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
+															안녕하세요, 스타일24 관리자입니다.
+														</p>
 													</div>
-													</th:block>
-												</dl>
-											</div>
-										</div>
-										<div class="reply_box" th:if="${not #strings.isEmpty(review.admRpl)}">
-											<div class="reply">
-												<div class="reply_writer">
-													<span class="wr_name">관리자</span>
-													<span class="wr_date" th:text="${review.admRplDt}" >2020.07.15</span>
-												</div>
-												<div class="reply_txt">
-													<p th:utext="${#strings.unescapeJava(#strings.escapeJava(review.admRpl))}">
-														안녕하세요, 스타일24 관리자입니다.
-													</p>
 												</div>
 											</div>
 										</div>
-									</div>
-								</li>
-							</ul>
+									</li>                               
+								</ul>
+							</div>
 						</div>
 					</div>
-				</div>
 				<!-- //리뷰내용 -->
 			</div>
 		</div>
 	</div>
 </div>
-<a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer('layer_review_best')" class="close-modal">Close</a> 
 <script th:inline="javascript">
 /*<![CDATA[*/
 	
 	$(document).ready( function() {
 		 //슬라이드 - 포토,영상리뷰팝업
-//		let reviewAttchSq = 0; 
-//		if (!gagajf.isNull( [[${review.attachSq}]])){
-//			reviewAttchSq = [[${review.attachSq}]];
-//		}
+		let reviewAttchSq = 0; 
+		if (!gagajf.isNull( [[${review.attachSq}]])){
+			reviewAttchSq = [[${review.attachSq}]];
+		}
 //		reviewAttchSq = Number(reviewAttchSq) +1;
-		//console.log("reviewAttchSq {}",reviewAttchSq);
+//		console.log("reviewAttchSq {}",reviewAttchSq);
         var photoreviewdetailSwiper = new Swiper('.pd_photoreviewdetail_pop .area_slider .swiper-container', {
             observer: true,
             observeParents: true,
@@ -174,6 +175,10 @@
                 type: 'fraction',
             },
         });
+        
+        //선태 이미지 노출
+        photoreviewdetailSwiper.slideTo(reviewAttchSq, 0, false); 
+    	
         // 포토,베스트리뷰숨김
         var review_open=$(".btn_review_open");
         $(document).on('click','.btn_review_open',function(e){

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

@@ -157,6 +157,11 @@
 /*<![CDATA[*/
 	
 	$(document).ready( function() {
+		/* let reviewAttchSq = 0; 
+		if (!gagajf.isNull( [[${review.rvAtcSq}]])){
+			reviewAttchSq = [[${review.rvAtcSq}]];
+		
+		} */
 		 //슬라이드 - 포토,영상리뷰팝업 
         var photoreviewdetailSwiper = new Swiper('.pd_photoreviewdetail_pop .area_slider .swiper-container', {
             observer: true,
@@ -166,7 +171,9 @@
                 el: '.swiper-pagination',
                 type: 'fraction',
             },
+         /*    photoreviewdetailSwiper.slideTo(reviewAttchSq, 0, false); */
         });
+		 
         // 포토,베스트리뷰숨김
         var review_open=$(".btn_review_open");
         $(document).on('click','.btn_review_open',function(e){

+ 151 - 151
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -108,145 +108,145 @@
 				}	
 				var html = '';
 				$.each(result.dataList2, function(idx, item) {
-					html += '	<div class="part_goods">';
-					html += '		<div class="goods_section">';
-					html += '			<div class="goods_detail">';
-					html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" >';
-					html += '					<div class="thumb_box">';
-					html += '						<img src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '?RS=405" alt="tmp_pdClickother1">';
-					html += '					</div>';
-					html += '					<div class="info_box">';
-					html += '						<div class="od_name">';
-					html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span>구매</div>';
-					html += '							<div class="brand">';
-					html += '								<span>'+item.brandNm+'</span>';
-					html += '							</div>';
-					html += '							<div class="name">'+item.goodsNm+'</div>';
-					html += '						</div>';
-					html += '						<div class="od_opt">';
-					html += '							<div class="option">';
+					html += '	<div class="part_goods">\n';
+					html += '		<div class="goods_section">\n';
+					html += '			<div class="goods_detail">\n';
+					html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" >\n';
+					html += '					<div class="thumb_box">\n';
+					html += '						<img src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '?RS=405" alt="tmp_pdClickother1">\n';
+					html += '					</div>\n';
+					html += '					<div class="info_box">\n';
+					html += '						<div class="od_name">\n';
+					html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span>구매</div>\n';
+					html += '							<div class="brand">\n';
+					html += '								<span>'+item.brandNm+'</span>\n';
+					html += '							</div>\n';
+					html += '							<div class="name">'+item.goodsNm+'</div>\n';
+					html += '						</div>\n';
+					html += '						<div class="od_opt">\n';
+					html += '							<div class="option">\n';
 					if (item.goodsType =='G056_S') {
 						$.each(item.colorNmArr, function (index2, option) {
 							html += '							<em>' + item.itemNmArr[index2] + ' / ' + option +'</em>\n';
 						})
 					}else{
-						html += '							<em>'+item.colorNm+'</em>     ';
+						html += '							<em>'+item.colorNm+'</em>\n';
 					}
-					html += '							</div>';
-					html += '						</div>';
-					html += '					</div>';
-					html += '				</a>';
-					html += '			</div>											';
-					html += '		</div>';
-					html += '	</div>';
-					html += '	<div class="reviewMy">';
-					html += '		<div class="info_box">';
-					html += '			<div class="star_score">';
-					html += '				<span class="star">';
-					html += '					<em class="progbar" style="width:'+(item.score*20)+'%;"></em> ';
-					html += '				</span>';
-					html += '			</div>';
-					html += '			<div class="writer">';
-					html += '				<span class="wr_date">'+item.regDt+'</span>';
-					html += '			</div>';
-					html += '		</div>';
-					html += '		<div class="response_box">';
-					html += '			<div>';
-					html += '				<dl>';
-					html += '					<div>';
-					html += '						<dt>구매옵션</dt>';
-					html += '						<dd>'+item.colorNm+'</dd>';
-					html += '					</div>';
-					html += '					<div>';
-					html += '						<dt>키/몸무게</dt>';
-					html += '						<dd>'+item.height+'cm/'+item.weight+'kg</dd>';
-					html += '					</div>';
-					html += '				</dl>';
-					html += '			</div>';
-					html += '		</div>';
+					html += '							</div>\n';
+					html += '						</div>\n';
+					html += '					</div>\n';
+					html += '				</a>\n';
+					html += '			</div>\n											';
+					html += '		</div>\n';
+					html += '	</div>\n';
+					html += '	<div class="reviewMy">\n';
+					html += '		<div class="info_box">\n';
+					html += '			<div class="star_score">\n';
+					html += '				<span class="star">\n';
+					html += '					<em class="progbar" style="width:'+(item.score*20)+'%;"></em>\n';
+					html += '				</span>\n';
+					html += '			</div>\n';
+					html += '			<div class="writer">\n';
+					html += '				<span class="wr_date">'+item.regDt+'</span>\n';
+					html += '			</div>\n';
+					html += '		</div>\n';
+					html += '		<div class="response_box">\n';
+					html += '			<div>\n';
+					html += '				<dl>\n';
+					html += '					<div>\n';
+					html += '						<dt>구매옵션</dt>\n';
+					html += '						<dd>'+item.colorNm+'</dd>\n';
+					html += '					</div>\n';
+					html += '					<div>\n';
+					html += '						<dt>키/몸무게</dt>\n';
+					html += '						<dd>'+item.height+'cm/'+item.weight+'kg</dd>\n';
+					html += '					</div>\n';
+					html += '				</dl>\n';
+					html += '			</div>\n';
+					html += '		</div>\n';
 					if (attachList != null && attachList.length >0) {
-						html += '		<div class="photo_box">';
-						html += '			<div class="photo_list">';
-						html += '				<ul>';
+						html += '		<div class="photo_box">\n';
+						html += '			<div class="photo_list">\n';
+						html += '				<ul>\n';
 						for (var i = 0; i < attachList.length; i++) {
 							if (attachList[i].reviewSq == item.reviewSq) {
-								html += '					<li>';
-								html += '						<a>';
-								html += '							<div class="pic">';
+								html += '					<li>\n';
+								html += '						<a>\n';
+								html += '							<div class="pic">\n';
 								if (attachList[i].fileGb == 'M') {
-									html += '								<span class="thumb mov" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\',\''+attachList[i].rvAtcSq+'\');"  style="background-image:url(' + _kollusMediaUrl + '/poster/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
+									html += '								<span class="thumb mov" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\',\''+attachList[i].rvAtcSq+'\');"  style="background-image:url(' + _kollusMediaUrl + '/poster/' + attachList[i].kmcKey + '?player_version=html5);"></span>\n';
 								}else{
-									html += '								<span class="thumb" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\',\''+attachList[i].rvAtcSq+'\');" style="background-image:url(' + _uploadImageUrl + '/' + attachList[i].sysFileNm + ');"></span>';
+									html += '								<span class="thumb" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\',\''+attachList[i].rvAtcSq+'\');" style="background-image:url(' + _uploadImageUrl + '/' + attachList[i].sysFileNm + ');"></span>\n';
 								}
 								
-								html += '							</div>';
-								html += '						</a>';
-								html += '					</li>';
+								html += '							</div>\n';
+								html += '						</a>\n';
+								html += '					</li>\n';
 							}
 						}
-						html += '				</ul>';
-						html += '			</div>';
-						html += '		</div>';
+						html += '				</ul>\n';
+						html += '			</div>\n';
+						html += '		</div>\n';
 					}
-					html += '		<div class="txt_review_box" id="admin_'+item.reviewSq+'">';
-					html += '			<p>'+item.reviewContent.escapeHtml()+'</p>';
-					html += '		</div>';
-					html += '		<div  class="response_box2">';
-					html += '			<div>';
-					html += '				<dl class="clear">';
+					html += '		<div class="txt_review_box" id="admin_'+item.reviewSq+'">\n';
+					html += '			<p>'+item.reviewContent.escapeHtml()+'</p>\n';
+					html += '		</div>\n';
+					html += '		<div  class="response_box2">\n';
+					html += '			<div>\n';
+					html += '				<dl class="clear">\n';
 					if (item.sizeGb == 'T' || item.sizeGb == 'B' || item.sizeGb == 'S') {
-						html += '					<div>';
-						html += '						<dt>사이즈</dt>';
-						html += '						<dd>'+item.scoreSize+'</dd>';
-						html += '					</div>';
-						html += '					<div>';
-						html += '						<dt>컬러</dt>';
-						html += '						<dd>'+item.scoreColor+'</dd>';
-						html += '					</div>';
+						html += '					<div>\n';
+						html += '						<dt>사이즈</dt>\n';
+						html += '						<dd>'+item.scoreSize+'</dd>\n';
+						html += '					</div>\n';
+						html += '					<div>\n';
+						html += '						<dt>컬러</dt>\n';
+						html += '						<dd>'+item.scoreColor+'</dd>\n';
+						html += '					</div>\n';
 					}
 					if (item.sizeGb == 'T' || item.sizeGb == 'B') {
-						html += '					<div>';
-						html += '						<dt>핏</dt>';
-						html += '						<dd>'+item.scoreFit+'</dd>';
-						html += '					</div>';
-						html += '					<div>';
-						html += '						<dt>두께감</dt>';
-						html += '						<dd>'+item.scoreThick+'</dd>';
-						html += '					</div>';
+						html += '					<div>\n';
+						html += '						<dt>핏</dt>\n';
+						html += '						<dd>'+item.scoreFit+'</dd>\n';
+						html += '					</div>\n';
+						html += '					<div>\n';
+						html += '						<dt>두께감</dt>\n';
+						html += '						<dd>'+item.scoreThick+'</dd>\n';
+						html += '					</div>\n';
 					}
 					if (item.sizeGb == 'S') {
-						html += '					<div>';
-						html += '						<dt>무게감</dt>';
-						html += '						<dd>'+item.scoreWeight+'</dd>';
-						html += '					</div>';
-						html += '					<div>';
-						html += '						<dt>볼넓이</dt>';
-						html += '						<dd>'+item.scoreBall+'</dd>';
-						html += '					</div>';
+						html += '					<div>\n';
+						html += '						<dt>무게감</dt>\n';
+						html += '						<dd>'+item.scoreWeight+'</dd>\n';
+						html += '					</div>\n';
+						html += '					<div>\n';
+						html += '						<dt>볼넓이</dt>\n';
+						html += '						<dd>'+item.scoreBall+'</dd>\n';
+						html += '					</div>\n';
 					}
-					html += '				</dl>';
-					html += '			</div>';
-					html += '		</div>';
+					html += '				</dl>\n';
+					html += '			</div>\n';
+					html += '		</div>\n';
 					if (item.admRpl != null && item.admRpl != '') {
-						html += '		<div class="reply_box">';
-						html += '			<div class="reply">';
-						html += '				<div class="reply_writer">';
-						html += '					<span class="wr_name">관리자</span>';
-						html += '					<span class="wr_date">'+item.admRplDt+'</span>';
-						html += '				</div>';
-						html += '				<div class="reply_txt">';
-						html += '					<p>'+item.admRpl.escapeHtml()+'</p>';
-						html += '				</div>';
-						html += '			</div>';
-						html += '		</div>';
+						html += '		<div class="reply_box">\n';
+						html += '			<div class="reply">\n';
+						html += '				<div class="reply_writer">\n';
+						html += '					<span class="wr_name">관리자</span>\n';
+						html += '					<span class="wr_date">'+item.admRplDt+'</span>\n';
+						html += '				</div>\n';
+						html += '				<div class="reply_txt">\n';
+						html += '					<p>'+item.admRpl.escapeHtml()+'</p>\n';
+						html += '				</div>\n';
+						html += '			</div>\n';
+						html += '		</div>\n';
 					}
-					html += '		<div class="goods_btn_wrap btn_group_flex">';
+					html += '		<div class="goods_btn_wrap btn_group_flex">\n';
 					if (item.admRpl == null || item.admRpl == '') {
-						html += '			<div><button type="button" id="btn_review_delete" class="btn btn_dark" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+',\''+item.goodsCd+'\','+item.reviewSq+')"><span>리뷰 수정</span></button></div> ';
+						html += '			<div><button type="button" id="btn_review_delete" class="btn btn_dark" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+',\''+item.goodsCd+'\','+item.reviewSq+')"><span>리뷰 수정</span></button></div>\n';
 					}
-					html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnDeleteReview('+item.reviewSq+')"><span>리뷰 삭제</span></button></div> ';
-					html += '		</div>';
-					html += '	</div>';
+					html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnDeleteReview('+item.reviewSq+')"><span>리뷰 삭제</span></button></div>\n';
+					html += '		</div>\n';
+					html += '	</div>\n';
 				});
 				
 				$('#reviewList').append(html);
@@ -261,13 +261,13 @@
 				
 			}else{
 				var html = '';
-				html += '<div class="nodata" id="nodata1">';
-				html += '	<div class="txt_box">';
+				html += '<div class="nodata" id="nodata1">\n';
+				html += '	<div class="txt_box">\n';
 				html += '		<p>';
 				html += '			작성한 리뷰가 없습니다.<br>';
 				html += '		</p>';
-				html += '	</div>';
-				html += '</div>';
+				html += '	</div>\n';
+				html += '</div>\n';
 				$('#btnMore2').parent().hide();
 				$('#btnMore').parent().hide();
 				$('#reviewList').append(html);
@@ -280,42 +280,42 @@
 			if (result.paging1.pageable.pageNo == 1){
 				$('#reviewList').html('');
 			}	
-			var html = '	<div class="part_goods">';
+			var html = '	<div class="part_goods">\n';
 			$.each(result.dataList1, function(idx, item) {
-				html += '		<div class="goods_section">';
-				html += '			<div class="goods_detail">';
-				html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">';
-				html += '					<div class="thumb_box">';
-				html += '						<img src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '" alt="tmp_pdClickother1">';
-				html += '					</div>';
-				html += '					<div class="info_box">';
-				html += '						<div class="od_name">';
-				html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span> 구매</div>';
-				html += '							<div class="brand">';
-				html += '								<span>'+item.brandNm+'</span>';
-				html += '							</div>';
-				html += '							<div class="name">'+item.goodsNm+'</div>';
-				html += '						</div>';
-				html += '						<div class="od_opt">';
-				html += '							<div class="option">';
+				html += '		<div class="goods_section">\n';
+				html += '			<div class="goods_detail">\n';
+				html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">\n';
+				html += '					<div class="thumb_box">\n';
+				html += '						<img src="' + _uploadGoodsUrl + '/' + item.sysImgNm + '" alt="tmp_pdClickother1">\n';
+				html += '					</div>\n';
+				html += '					<div class="info_box">\n';
+				html += '						<div class="od_name">\n';
+				html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span> 구매</div>\n';
+				html += '							<div class="brand">\n';
+				html += '								<span>'+item.brandNm+'</span>\n';
+				html += '							</div>\n';
+				html += '							<div class="name">'+item.goodsNm+'</div>\n';
+				html += '						</div>\n';
+				html += '						<div class="od_opt">\n';
+				html += '							<div class="option">\n';
 				if (item.goodsType =='G056_S') {
 					$.each(item.colorNmArr, function (index2, option) {
-						html += '							<em>' + item.itemNmArr[index2] + ' / ' + option + '</em\n';
+						html += '							<em>' + item.itemNmArr[index2] + ' / ' + option + '</em>\n';
 					})
 				}else{
-					html += '							<em>'+item.colorNm+'</em>     ';
+					html += '							<em>'+item.colorNm+'</em>\n';
 				}
-				html += '							</div>';
-				html += '						</div>';
-				html += '					</div>';
-				html += '				</a>';
-				html += '			</div>';
-				html += '			<div class="goods_btn_wrap btn_group_flex">';
-				html += '				<div><button type="button" class="btn btn_default" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기(</span><em>'+item.remainDt+'</em><span>일 남음)</span></button></div>';
-				html += '			</div>';
-				html += '		</div>';
+				html += '							</div>\n';
+				html += '						</div>\n';
+				html += '					</div>\n';
+				html += '				</a>\n';
+				html += '			</div>\n';
+				html += '			<div class="goods_btn_wrap btn_group_flex">\n';
+				html += '				<div><button type="button" class="btn btn_default" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기(</span><em>'+item.remainDt+'</em><span>일 남음)</span></button></div>\n';
+				html += '			</div>\n';
+				html += '		</div>\n';
 			});
-			html += '	</div>';
+			html += '	</div>\n';
 			$('#reviewList').append(html);
 			if (result.paging1.pageable.totalPage > result.paging1.pageable.pageNo) {
 				$('#btnMore').parent().show();
@@ -325,13 +325,13 @@
 			}
 		}else{
 			var html = '';
-			html += '<div class="nodata" id="nodata1">';
-			html += '	<div class="txt_box">';
+			html += '<div class="nodata" id="nodata1">\n';
+			html += '	<div class="txt_box">\n';
 			html += '		<p>';
 			html += '			작성 가능한 리뷰가 없습니다.<br>';
-			html += '		</p>';
-			html += '	</div>';
-			html += '</div>';
+			html += '		</p>\n';
+			html += '	</div>\n';
+			html += '</div>\n';
 			
 			$('#reviewList').append(html);
 			$('#btnMore').parent().hide();

+ 45 - 1
src/main/webapp/WEB-INF/views/mob/planning/PlanningDetailFormMob.html

@@ -17,8 +17,8 @@
  *******************************************************************************
  -->
 <body>
+<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>
 <th:block layout:fragment="content">
-<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 <main role="" id="" class="container dp">
 			<section class="content">
 				<div class="inner">
@@ -206,6 +206,47 @@
 	<div class="modal pop_full photo_comment_popup" id="photo_full_popup" tabindex="-1" role="dialog" aria-labelledby="comment_popup" aria-hidden="true">
 		
 	</div>
+	<!-- (공통) 공유팝업 -->
+		<div class="modal fade" id="tglShare" tabindex="-1" role="dialog"
+			aria-labelledby="aModalLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h5 class="modal-title" id="aModalLabel">공유하기</h5>
+					</div>
+					<div class="modal-body">
+						<!-- toggle contents -->
+						<div id="layerShare" class="setShare open"
+							th:with="stylelUrl=${@environment.getProperty('domain.front')},  planView=${@environment.getProperty('upload.image.view')}">
+							<span>
+								<button type="button" id="kakao-link-btn" class="kk"
+									th:attr="onclick=|cfnSendToKakaoMob('${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '${planView+ '/'+planInfo.mainMimg}');|">
+									<span>카카오톡</span>
+								</button>
+								<button type="button" class="fb"
+									th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '', '');|">
+									<span>페이스북</span>
+								</button>
+								<button type="button" class="tw"
+									th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}',  '${planInfo.planNm+ '#style24몰'}', '', '');|">
+									<span>트위터</span>
+								</button>
+								<button type="button" class="url btn_copy">
+									<span>URL</span>
+								</button>
+							</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<script>
+			// 공유팝업
+			$('.share_btn').click(function(e){
+				e.preventDefault();
+				$('#tglShare').modal("show");
+			});
+		</script>
 		
 <th:block th:each="a, template : ${templateOrd}">
 	<th:block th:if="${a.tmplType == 'G082_51'}">
@@ -950,6 +991,9 @@ $(document).ready(function(){
 		$('.modal.photo_comment_popup .pop_detail').toggleClass('active');
 	});
 
+	$('.btn_copy').bind('click', function() {
+		copyToClipboard();
+	});
 	
 	//상단 빅배너 슬라이드
 	var big_banner_slide = new Swiper('.big_banner_slide .swiper-container', {

+ 42 - 1
src/main/webapp/WEB-INF/views/mob/planning/PlanningEventAttendFormMob.html

@@ -17,8 +17,8 @@
  *******************************************************************************
  -->
 <body>
+<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>
 <th:block layout:fragment="content">
-<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 	<main role="" id="" class="container dp">
 			<section class="content dp_detail_visual">
 				<div class="inner">
@@ -154,6 +154,47 @@
 					</div>
 				</div>
 			</section>
+			<!-- (공통) 공유팝업 -->
+		<div class="modal fade" id="tglShare" tabindex="-1" role="dialog"
+			aria-labelledby="aModalLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h5 class="modal-title" id="aModalLabel">공유하기</h5>
+					</div>
+					<div class="modal-body">
+						<!-- toggle contents -->
+						<div id="layerShare" class="setShare open"
+							th:with="stylelUrl=${@environment.getProperty('domain.front')},  planView=${@environment.getProperty('upload.image.view')}">
+							<span>
+								<button type="button" id="kakao-link-btn" class="kk"
+									th:attr="onclick=|cfnSendToKakaoMob('${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '${planView+ '/'+planInfo.mainMimg}');|">
+									<span>카카오톡</span>
+								</button>
+								<button type="button" class="fb"
+									th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '', '');|">
+									<span>페이스북</span>
+								</button>
+								<button type="button" class="tw"
+									th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}',  '${planInfo.planNm+ '#style24몰'}', '', '');|">
+									<span>트위터</span>
+								</button>
+								<button type="button" class="url btn_copy">
+									<span>URL</span>
+								</button>
+							</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<script>
+			// 공유팝업
+			$('.share_btn').click(function(e){
+				e.preventDefault();
+				$('#tglShare').modal("show");
+			});
+		</script>
 		</main>	<script th:inline="javascript">
 	/*<![CDATA[*/
 	let today = new Date();   

+ 43 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningEventPollFormMob.html

@@ -17,6 +17,7 @@
  *******************************************************************************
  -->
 <body>
+<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>
 <th:block layout:fragment="content">
 <main role="" id="" class="container ev">
 			<section class="content renew">
@@ -197,6 +198,48 @@
 					</div>
 				</div>
 			</section>
+			
+				<!-- (공통) 공유팝업 -->
+		<div class="modal fade" id="tglShare" tabindex="-1" role="dialog"
+			aria-labelledby="aModalLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h5 class="modal-title" id="aModalLabel">공유하기</h5>
+					</div>
+					<div class="modal-body">
+						<!-- toggle contents -->
+						<div id="layerShare" class="setShare open"
+							th:with="stylelUrl=${@environment.getProperty('domain.front')},  planView=${@environment.getProperty('upload.image.view')}">
+							<span>
+								<button type="button" id="kakao-link-btn" class="kk"
+									th:attr="onclick=|cfnSendToKakaoMob('${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '${planView+ '/'+planInfo.mainMimg}');|">
+									<span>카카오톡</span>
+								</button>
+								<button type="button" class="fb"
+									th:attr="onclick=|sendSns('facebook', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '', '');|">
+									<span>페이스북</span>
+								</button>
+								<button type="button" class="tw"
+									th:attr="onclick=|sendSns('twitter', '${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}',  '${planInfo.planNm+ '#style24몰'}', '', '');|">
+									<span>트위터</span>
+								</button>
+								<button type="button" class="url btn_copy">
+									<span>URL</span>
+								</button>
+							</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<script>
+			// 공유팝업
+			$('.share_btn').click(function(e){
+				e.preventDefault();
+				$('#tglShare').modal("show");
+			});
+		</script>
 		</main>
 <script th:inline="javascript">
 let pollList = [[${pollList}]];

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

@@ -42,7 +42,7 @@
 									<div id="layerShare" class="setShare open">
 										<span>
 											<button type="button" class="kk"
-												th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '${planView+ '/'+planInfo.mainImg}');|">
+												th:attr="onclick=|cfnSendToKakao('${stylelUrl+'/planning/detail/form?planSq='+planInfo.planSq}', '${planInfo.planNm}', '${planView+ '/'+planInfo.mainPimg}');|">
 												<span>카카오톡</span>
 											</button>
 											<button type="button" class="fb"
@@ -442,9 +442,9 @@ if(image.length>0){
 	for (var i = 0; i < image.length; i++) {
 		html += '                	<div class="swiper-slide">\n';
 		if (image[i].linkOpenGb == 'M') {
-			html += '                    	<a href="'+image[i].linkUrl+'" target="_self">><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>\n';
+			html += '                    	<a href="'+image[i].linkUrl+'" target="_self"><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>\n';
 		}else{
-			html += '                    	<a href="'+image[i].linkUrl+'" target="_blank">><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>\n';
+			html += '                    	<a href="'+image[i].linkUrl+'" target="_blank"><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>\n';
 		}
 		
 		html += '                	</div>\n';

+ 51 - 48
src/main/webapp/ux/style24_link.js

@@ -645,32 +645,6 @@ function cfGoodsInstockAlarmInfo(goodsCd, colorCd) {
 	cfnOpenLayer(_PAGE_GOODS_INSTOCK_ALARM_LAYER+goodsCd+'/'+colorCd, 'layer_instock_alarm');
 }
 
-/**
-* @type   : function
-* @access : public
-* @desc   : 상품평- 베스트 리뷰 보기
-* <pre>
-*		cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq);
-* </pre>
-*/
-function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq) {
-	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
-	if ("P" != _frontGb){
-		str = '<div class="modal pop_full fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
-	}
-
-	if ($('#layer_review_best').length == 0) {
-		$('body').append(str);
-	}
-	
-	var params = '?goodsCd=' + goodsCd;
-	params += '&reviewSq=' + reviewSq;
-	params += '&bestYn=' + bestYn;
-	params += '&photoYn=' + photoYn;
-	if (typeof (attachSq) != 'undefined') params += "&attachSq=" + attachSq;
-	
-	cfnOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
-}
 
 /**
 * @type   : function
@@ -694,27 +668,6 @@ function cfPlanReplyDetail(planSq, planEntrySq, planEntryAtSq) {
 	cfnOpenLayer(_PAGE_PLANNING_REPLY_DETAIL_LAYER+params, 'photo_full_popup');
 }
 
-/**
-* @type   : function
-* @access : public
-* @desc   : 상품평- 포토/영상 리뷰 리스트 보기
-* <pre>
-*		cfGoodsPhotoReview(goodsCd);
-* </pre>
-*/
-function cfGoodsReviewPhoto(goodsCd) {
-	var str = '<div class="modal fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="pdPhotoReviewListLabel" aria-hidden="true"></div>';
-	if ("P" != _frontGb){
-		str = '<div class="modal pop_full fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
-	}
-	
-	if ($('#layer_review_photo').length == 0) {
-		$('body').append(str);
-	}
-
-	cfnOpenLayer(_PAGE_GOODS_REVIEW_PHTO_LIST_LAYER+goodsCd, 'layer_review_photo');
-}
-
 /**
  * @type   : function
  * @access : public
@@ -821,7 +774,7 @@ function cfGoodsQngCreate(goodsCd) {
 /**
 * @type   : function
 * @access : public
-* @desc   : 상품문의 full 팝업
+* @desc   : 상품배송 full 팝업
 * <pre>
 *		cfGoodsDelivery();
 * </pre>
@@ -869,10 +822,60 @@ function cfGoodsReview(goodsCd) {
 	}else{
 		cfnOpenLayer(_PAGE_GOODS_REVIEW_LAYER + goodsCd, 'layer_goods_review');
 	}
+}
+
+
+/**
+* @type   : function
+* @access : public
+* @desc   : 상품평- 베스트 리뷰 보기
+* <pre>
+*		cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq);
+* </pre>
+*/
+function cfGoodsReviewDetail(goodsCd, bestYn, photoYn, reviewSq, attachSq) {
+	var str = '<div class="modal fade pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="pdBestReviewLabel" aria-hidden="true"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade photo_comment_popup pd_pop pd_photoreviewdetail_pop" id="layer_review_best" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
+
+	if ($('#layer_review_best').length == 0) {
+		$('body').append(str);
+	}else{
+		$("#layer_review_best").modal("show");
+	}
+	
+	var params = '?goodsCd=' + goodsCd;
+	params += '&reviewSq=' + reviewSq;
+	params += '&bestYn=' + bestYn;
+	params += '&photoYn=' + photoYn;
+	if (typeof (attachSq) != 'undefined') params += "&attachSq=" + attachSq;
+	
+	cfnOpenLayer(_PAGE_GOODS_REVIEW_DETAIL_LAYER+params, 'layer_review_best');
+}
 
+/**
+* @type   : function
+* @access : public
+* @desc   : 상품평- 포토/영상 리뷰 리스트 보기
+* <pre>
+*		cfGoodsPhotoReview(goodsCd);
+* </pre>
+*/
+function cfGoodsReviewPhoto(goodsCd) {
+	var str = '<div class="modal fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="pdPhotoReviewListLabel" aria-hidden="true"></div>';
+	if ("P" != _frontGb){
+		str = '<div class="modal pop_full fade pd_pop pd_photoreviewlist_pop" id="layer_review_photo" tabindex="-1" role="dialog" aria-labelledby="exampleFullLabel" aria-hidden="true"></div>';
+	}
 	
+	if ($('#layer_review_photo').length == 0) {
+		$('body').append(str);
+	}
+
+	cfnOpenLayer(_PAGE_GOODS_REVIEW_PHTO_LIST_LAYER+goodsCd, 'layer_review_photo');
 }
 
+
 /**
  * @type   : function
  * @access : public