eskim 5 лет назад
Родитель
Сommit
fdb2901feb

+ 6 - 3
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -451,18 +451,21 @@ public class TsfGoodsService {
 		boolean returnFlag = false;
 		//String[][] arrGoodsStoreList = null;	// 상품코드, 매장코드, 상품별 주문수량
 
+		log.info("[getGoodsSetStockQty] goodsStock = {}", goodsStock);
+		
 		int ableOrderCnt = 0;
 		for (String arrGoodsCd : goodsStock.getArrGoodsOption()) {	// [{goodsCd|optCd|qty},{goodsCd|optCd|qty}]
 
 			String[] goodsSizeInfo = arrGoodsCd.split("\\|");
-
+			log.info("[getGoodsSetStockQty] goodsSizeInfo = {}", goodsSizeInfo);
 			if (goodsSizeInfo.length == 3) {
+				
 				GoodsStock tmpStock = new GoodsStock();
 				tmpStock.setGoodsCd(goodsSizeInfo[0]);
 				tmpStock.setOptCd(goodsSizeInfo[1]);
 				int qty = Integer.parseInt(goodsSizeInfo[2]);	// 한번에 주문해야하는 상품수량
 				int stockByGoodsSize = goodsDao.getGoodsStockQty(tmpStock);
-
+				log.info("[getGoodsSetStockQty] stockByGoodsSize = {}", stockByGoodsSize);
 				if (stockByGoodsSize <= 0) {
 					returnFlag = true;
 					break;
@@ -477,7 +480,7 @@ public class TsfGoodsService {
 						}
 					}
 				}
-
+				log.info("[getGoodsSetStockQty] ableOrderCnt = {}", ableOrderCnt);
 			} else {
 				returnFlag = true;
 				break;

+ 2 - 1
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -1012,8 +1012,9 @@ public class TsfGoodsController extends TsfBaseController {
 	@ResponseBody
 	public GagaMap getGoodsOption2List(@RequestBody Goods goods) {
 
-		log.info("goods = {}", goods);
+		//log.info("goods = {}", goods);
 		GagaMap result = new GagaMap();
+		if (StringUtils.isEmpty(goods.getMastrGoodsCd())) goods.setMastrGoodsCd(goods.getGoodsCd());
 		result.set("dataList", goodsService.getGoodsOption2List(goods));
 
 		return result;

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

@@ -16,8 +16,6 @@ import lombok.Data;
 public class Goods extends TscBaseDomain {
 	// 상품 정보
 	private String goodsCd;		//상품코드
-	//private String productNo;		// ProductNo(WMS)
-	//private String productCode;		// ProductCode(WMS)
 	private String brandCd;		//브랜드코드
 	private String itemkindCd;		//품목코드
 	private String goodsNm;		//상품명
@@ -151,6 +149,7 @@ public class Goods extends TscBaseDomain {
 	private Integer reviewSq;
 	private String goodsStatNm;
 	private String regDtMonth;
+	
 
 	private String sizeGb;		// 사이즈구분(T:상의, B:하의, S:신발)
 	private String optionSoldoutSkip; 	//품절제외 Y, N
@@ -159,6 +158,7 @@ public class Goods extends TscBaseDomain {
 
 	private String skuModelNo;		// SKUModelNo(WMS)
 	private String compsGoodsCd;	// 세트 구성품 상품번호
+	private String mastrGoodsCd; 	
 	private String optCd;			// 옵션코드
 	private String optCd1;			// 옵션코드1
 	private String optCd2;			// 옵션코드2

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

@@ -37,6 +37,7 @@ public class GoodsStock extends TscBaseDomain {
 	private String goodsStat;		// 상품상태
 	private int minOrdQty;
 	private int maxOrdQty;
+	private int currPrice;
 	
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsOption;				

+ 27 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -277,6 +277,28 @@
 	<!-- 상품 옵션2 목록  - 자사용-->
 	<select id="getGoodsOption2List" parameterType="Goods" resultType="GoodsStock">
 		/* TsfGoods.getGoodsOption2List */
+		WITH TMP_GOODS AS (
+		    SELECT Y.GOODS_CD
+		         , IFNULL(Z.CURR_PRICE, Y.CURR_PRICE) AS CURR_PRICE
+		         , Y.MIN_ORD_QTY
+		         , Y.SELF_GOODS_YN
+		         , Y.GOODS_TYPE
+		         , Y.SELL_STDT
+		         , Y.SELL_EDDT
+		    FROM (
+		         SELECT A.GOODS_CD
+		              , A.GOODS_TYPE
+		              , IFNULL(B.COMPS_GOODS_CD, A.GOODS_CD) AS COMPS_GOODS_CD
+		              , IFNULL(B.DISP_ORD, 1)                AS DISP_ORD
+		              , IFNULL(B.COMPS_CURR_PRICE, A.CURR_PRICE) AS CURR_PRICE
+		              , A.SELF_GOODS_YN
+		         FROM TB_GOODS A
+		         LEFT OUTER JOIN TB_GOODS_COMPOSE B ON A.GOODS_CD = B.GOODS_CD
+		         WHERE A.GOODS_CD = #{mastrGoodsCd}
+		         ) Z
+		    INNER  JOIN TB_GOODS Y ON Z.COMPS_GOODS_CD = Y.GOODS_CD
+		    WHERE  Z.COMPS_GOODS_CD = #{goodsCd}
+		)
 		SELECT GOODS_CD
 		     , OPT_CD
 		     , OPT_CD1
@@ -288,6 +310,7 @@
 		     , SOLDOUT_YN
 		     , DISP_ORD
 		     , SELF_GOODS_YN
+		     , CURR_PRICE
 		FROM (
 		      SELECT O.GOODS_CD
 		           , O.OPT_CD
@@ -299,7 +322,8 @@
 		           , O.DISP_ORD
 		           , G.MIN_ORD_QTY
 		           , G.SELF_GOODS_YN
-		      FROM TB_GOODS G
+		           , G.CURR_PRICE
+		      FROM TMP_GOODS G
 		      INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD
 		                             AND O.OPT_CD1 = #{optCd1}
 		                             AND O.DISP_YN = 'Y' 
@@ -555,7 +579,7 @@
 	<select id="getGoodsStockQty"  parameterType="GoodsStock" resultType="int">
 		/* TsfGoods.getGoodsStockQty */
 		SELECT (CASE WHEN STOCK_QTY - MIN_ORD_QTY >= 0 THEN STOCK_QTY
-		        END ) AS STOCK_QTY
+		             ELSE 0 END ) AS STOCK_QTY
 		FROM ( 
 		    SELECT CASE WHEN A.SOLDOUT_YN = 'Y' THEN 0
 		                ELSE A.CURR_STOCK_QTY
@@ -843,6 +867,7 @@
 		     , DATE_FORMAT(G.SELL_STDT ,'%Y%m%d%H%i%S') AS SELL_STDT
 		     , DATE_FORMAT(G.SELL_EDDT ,'%Y%m%d%H%i%S') AS SELL_EDDT
 		     , (SELECT TI.SIZE_GB FROM TB_ITEMKIND TI WHERE TI.ITEMKIND_CD = G.ITEMKIND_CD) AS SIZE_GB
+		     , A.COMPS_CURR_PRICE
 		FROM TB_GOODS_COMPOSE A
 		INNER JOIN TB_GOODS G ON A.COMPS_GOODS_CD = G.GOODS_CD
 		                      AND G.SELF_MALL_YN = 'Y' -- 자사몰 노출

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

@@ -35,6 +35,7 @@
 		<input type="hidden" name="stock" />
 		<input type="hidden" name="minOrdQty"/>
 		<input type="hidden" name="maxOrdQty"/>
+		<input type="hidden" name="currPrice" th:value="${goodsInfo.currPrice}"/>
 		<input type="hidden" name="goodsType" th:value="${goodsInfo.goodsType}"/>
 		<input type="hidden" name="selfGoodsYn" th:value="${goodsInfo.selfGoodsYn}"/>
 	<section class="pd_detail">
@@ -680,17 +681,17 @@
 								<div class="nomOption">
 									<div class="form_wrap">
 										<div class="form_field">
-											<div class="select_custom item_opt1 item_opt1_1"  th:classappend="${goodsInfo.goodsCd}">
+											<div class="select_custom item_opt1 item_opt1_1"  th:classappend="${goodsInfo.goodsCd}" th:attr="id=${goodsInfo.goodsCd}">
 												<div class="combo">
 													<div class="select">선택</div>
 													<ul class="list" style="display: none;">
 														<li class="selected" th:id="|selfGoodsOpt1${goodsInfo.goodsCd}|" >선택</li> 
 														<th:block th:each="goodsOption, optionStatus : ${goodsOption1List}" >
-														<li th:onclick="fnOption2([[${optionStatus.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],1,[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]], [[${goodsInfo.currPrice}]])"
+														<li th:onclick="fnOption2([[${optionStatus.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
 															th:attr="aria-disabled=${(goodsOption.goodsStat != 'G008_90' or goodsOption.stockQty <= 0)? 'true':''}, data-soldout=${(goodsOption.goodsStat != 'G008_90'  or goodsOption.stockQty <= 0)? 'true':''}">
 															<div th:text="${goodsOption.optCd1}">상품옵션</div>
 															<div th:if="${goodsOption.addPrice > 0}" th:text="|${#numbers.formatInteger(goodsOption.addPrice, 0,'COMMA')}원|">0원</div>
-															<input type="hidden" name="opt1" th:value="${goodsOption.goodsCd}" th:attr="currPrice=${goodsInfo.currPrice}, selfGoodsYn=${goodsOption.selfGoodsYn}"/>
+															<input type="hidden" name="opt" th:value="${goodsOption.goodsCd}" th:attr="selfGoodsYn=${goodsOption.selfGoodsYn}"/>
 														</li>
 														</th:block>
 													</ul>
@@ -717,17 +718,17 @@
 									<div class="form_wrap"  th:each="goodsCompose, status : ${goodsComposeList}">
 										<div class="form_field">
 											<p class="title" th:text="${goodsCompose.compsGoodsFullNm}">슬림핏</p>
-											<div class="select_custom item_opt1" th:classappend="${'item_opt1_'+status.count +' '+goodsCompose.compsGoodsCd}" 
+											<div class="select_custom item_opt1" th:classappend="${'item_opt1_'+status.count +' '+goodsCompose.compsGoodsCd}" th:attr="id=${goodsCompose.compsGoodsCd}, qty=${goodsCompose.qty}"
 																				th:if="${goodsCompose.goodsOption1List != null and !goodsCompose.goodsOption1List.empty}" >
 												<div class="combo">
 													<div class="select">선택</div>
 													<ul class="list" style="display: none;">
 														<th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
 														<li class="selected" th:id="|selfGoodsOpt1${goodsCompose.compsGoodsCd}|" th:if=${optionStatus.first}>선택</li> 
-														<li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsCompose.qty}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]], [[${goodsOption.currPrice}]])"
+														<li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
 															th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
-															th:text="${goodsOption.optCd1}">상품옵션
-															<input type="hidden" name="opt" th:attr="addPrice=${goodsOption.addPrice}, optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
+															><th:block th:text="${goodsOption.optCd1}"></th:block>
+															<input type="hidden" name="opt" th:value="${goodsOption.goodsCd}" th:attr="optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
 														</li>
 														</th:block>
 													</ul>
@@ -921,6 +922,7 @@
 
 				fnSetTotalPrice();
 				
+				
 				$("#cartForm  input[name=opt]").each(function(){
 					if ($(this).attr('id') == optCd){
 				//		$(this).prop('checked', true);
@@ -938,7 +940,8 @@
 		let $obj = $(obj);
 		let $target = $obj.find('input[name="opt2"]');
 		let goodsCd = $target.attr("goodsCd");
-		let currPrice = $target.attr("currPrice");
+		//let currPrice = $target.attr("currPrice");
+		let currPrice = $('#cartForm input[name=currPrice]').val();
 		let optCd = $target.attr("optCd");
 		let optCd1 = $target.attr("optCd1");
 		let optCd2 = $target.attr("optCd2");
@@ -981,10 +984,6 @@
 			}
 			
 			//상품정보
-			let $selObj = $('.pd_descrp_pop .form_field .select_custom.deal_opt_item');
-			//let $goodsObj =$selObj.find('.combo .select').find('input[name=selectGoods]');
-			//let goodsNm =  $goodsObj.attr('goodsnm');
-			//let goodsCd =  $goodsObj.attr('goodscd');
 			let price = parseInt(currPrice)+ parseInt(addPrice);
 			
 			let tag = "";
@@ -995,7 +994,7 @@
 			tag += '		</div>\n';
 			tag += '	</div>\n';
 			tag += '	<div class="number_count">\n';
-			tag += '		<span class="minus" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>\n';
+			tag += '		<span class="minus min_val" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>\n';
 			tag += '		<input type="text" name="cea" optCd="'+optCd+'" maxlength="3" style="ime-mode:disabled" value="' +optQty+'" onblur="fnChangeOrderEa(this)" minOrdQty="'+minOrdQty+'" maxOrdQty="'+maxOrdQty+'" data-valid-type="numeric">\n';
 			tag += '		<input type="hidden" name="coption" value="'+optCd+'"  goodsCd="'+goodsCd+'"  price="'+currPrice+'"  addPrice="'+addPrice+'">\n';
 			tag += '		<span class="plus" onclick="fnAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>\n';
@@ -1007,11 +1006,8 @@
 			tag += '</div>\n';
 			
 			
-			let $objUp = null;
-			$objUp = $('.pd_detail .opt_result'); 
-			
+			let $objUp = $('.pd_detail .opt_result'); 
 			$objUp.append(tag);
-			
 			fnSetTotalPrice();
 			
 			// 해야하나 말아야하나
@@ -1021,18 +1017,21 @@
 	}
 	
 	//세트 사이즈 클릭시
-	function fnViewStockSet(obj, goodsCd, optCd1, optCd2, minOrdQty, maxOrdQty) {
+	function fnViewStockSet(obj, goodsCd, optCd, optCd1, optCd2, minOrdQty, maxOrdQty) {
 		
 		let target=$('.select_custom.item_opt2');
 		let targetSize = target.length;	//구성품 갯수
+		let goodsOption = [];
 		
-		//eskim
 		let cnt = 0;
 		let itemSize = 0;
+		let resultOptCd = "";  
 		target.each(function(){
 			if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' &&  !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
-				if (goodsCd != $(this).find('.select').find('input[name=opt2]').val()){
+				if (goodsCd != $(this).find('.select').find('input[name=opt2]').attr('goodscd')){
 					itemSize ++;
+					resultOptCd += $(this).find('.select').find('input[name=opt2]').attr('optcd') + "_";
+					goodsOption.push($(this).find('input[name=opt2]').val());   //goodsCd|optCd|qty	
 				}
 			}
 		});
@@ -1042,40 +1041,112 @@
 			itemSize ++;
 		}
 		
+		//내가 선택하 옵션
+		resultOptCd += $(obj).find('input[name=opt2]').attr('optcd') + "_";
+		goodsOption.push($(obj).find('input[name=opt2]').val());   //goodsCd|optCd|qty	
+		
+		
+		// 중복선택 확인  opt_result
+		let arrSelOpt = resultOptCd.split("_");	// 내가 선택한 옵션목록
+		let selCnt = 0;
+		let overlap = 0;
+		$('.pd_detail .opt_result .number_count').each(function() {
+			let val = $('input[name="coption"]', this).val();
+			val = val.replaceAll('result_', '');
+			let arrOpt = val.split("_");
+			
+			for(var i=0;i<arrOpt.length;i++){
+				for(var j=0;j<arrSelOpt.length;j++){
+					if (gagajf.isNull(arrOpt[i]) || gagajf.isNull(arrSelOpt[j])) continue;
+					if (arrOpt[i] == arrSelOpt[j]){
+						selCnt++;
+					}
+				}
+			}
+			
+			if (Number(itemSize) == Number(selCnt)) {
+				++overlap;
+			}
+			
+		});
+		
+		if (overlap > 0) {
+			mcxDialog.alert("이미 선택하신 옵션입니다.");
+			return false;
+		}
+		
 		let mGoodsCd = $("#cartForm  input[name=goodsCd]").val();
 		let selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
-		let goodsOption = [];
+		
 		if (targetSize == itemSize){
-			target.each(function() {
-				if (typeof ($(obj).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(obj).find('input[name=opt2]').val())){
-					goodsOption.push($(this).find('input[name=opt2]').val());	
-				}
-			});
 			
-			var maxCnt = maxOrdQty;
-			var data = {arrGoodsOption : goodsOption
+			let maxCnt = maxOrdQty;
+			let optQty = minOrdQty;
+			let data = {arrGoodsOption : goodsOption
 						,minOrdQty : minOrdQty
 						,maxOrdQty : maxOrdQty
 						,goodsCd : mGoodsCd
 						,selfGoodsYn : selfGoodsYn
 						};
-			var jsonData = JSON.stringify(data);
+			let jsonData = JSON.stringify(data);
 			
 			gagajf.ajaxJsonSubmit('/goods/detail/ajaxGoodsSetStockQty', jsonData, function(result) {
 				var itemCnt = eval(result); //해당 아이템에 선택되어진 사이즈의 수량
-				//console.log("itemCnt : "+itemCnt);
 				if (maxCnt > itemCnt) {
 					maxCnt = itemCnt;
 				}
 	
-				$("#cartForm  input[name=ordQty]").val(minOrdQty);
-				$("#cartForm  input[name=maxOrdQty]").val(maxCnt);
-				$("#cartForm  input[name=minOrdQty]").val(minOrdQty);
-				$("#cartForm  input[name=cea]").val(minOrdQty);
-				$("#cartForm  input[name=cea]").attr("readonly",false);
-				$("#cartForm  input[name=stock]").val(itemCnt);
-	
+				if (minOrdQty > itemCnt) {
+					//alert("무슨작업을 해야할가요?");
+					return false;		 //무슨작업을 해야하나?
+				}
+				
+				//상품정보
+				let $selObj = $('.pop_option_select .setOption .form_wrap');
+				let currPrice = Number($('#cartForm input[name=currPrice]').val());
+				let price = currPrice;
+				let addPrice = 0; 
+				resultOptCd = "";
+				
+				$selObj.each(function() {
+					resultOptCd += $(this).find('input[name=opt2]').attr('optcd') + "_";
+				});
+				
+				let tag = "";
+				tag += '<div class="result_item  result_'+resultOptCd+'">\n';
+				tag += '	<div class="opt_header">\n';
+				
+				$selObj.each(function() {
+					tag += '		<div class="bundle">\n';
+					tag += '			<span class="item_name">'+$(this).find('.title').text()+'</span>\n';
+					tag += '			<span class="item_option">'+$(this).find('input[name=opt2]').attr('optcd1')+'/'+$(this).find('input[name=opt2]').attr('optcd2')+'</span>\n';
+					tag += '			<input type="hidden" name="selOption" goodsCd="'+goodsCd+'"  optCd="'+optCd+'" qty="'+$(this).find('.item_opt1 ').attr('qty')+'" />	\n';
+					tag += '		</div>\n';
+					addPrice += Number($(this).find('input[name=opt2]').attr('addprice'));
+				});
+				
+				price = Number(currPrice) + Number(addPrice);
+				tag += '	</div>\n';
+				tag += '	<div class="number_count">\n';
+				tag += '		<span class="minus min_val" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>\n';
+				tag += '		<input type="text" name="cea" optCd="'+resultOptCd+'" maxlength="3" style="ime-mode:disabled" value="' +optQty+'" onblur="fnChangeOrderEa(this)" minOrdQty="'+minOrdQty+'" maxOrdQty="'+maxCnt+'" data-valid-type="numeric">\n';
+				tag += '		<input type="hidden" name="coption" value="'+resultOptCd+'"  goodsCd="'+goodsCd+'"  price="'+currPrice+'"  addPrice="'+addPrice+'">\n';
+				tag += '		<span class="plus" onclick="fnAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>\n';
+				tag += '	</div>\n';
+				tag += '	<div class="item_price">\n';
+				tag += '		<p><em id="goodsPrice">'+price.addComma() +'</em>원</p>\n';
+				tag += '	</div>\n';
+				tag += '	<button type="button" class="btn_delete_item" onclick="fnSelectGoodsDel(\''+resultOptCd+'\')"><span>삭제</span></button>\n';
+				tag += '</div>\n';
+				
+				
+				let $objUp = null;
+				$objUp = $('.pd_detail .opt_result'); 
+				
+				$objUp.append(tag);
+				
 				fnSetTotalPrice();
+				
 			}); 
 		}
 	}
@@ -1086,15 +1157,43 @@
 		// 품절제외 여부
 		let optionSoldoutSkip = $('.pop_option_select').find('input[name=soldoutSkipYn]').is(":checked") ? 'Y' : 'N';
 		
-		let data = {goodsCd : goodsCd
-					,optionSoldoutSkip : optionSoldoutSkip };
-		let jsonData = JSON.stringify(data);
+		// 입점
+		if("N" == $("#cartForm  input[name=selfGoodsYn]").val() ){
+			let data = {goodsCd : goodsCd
+					,optionSoldoutSkip : optionSoldoutSkip 
+					};
+			let jsonData = JSON.stringify(data);
+			
+			fnOption1Display(ridx, jsonData );
+			
+		}else if("G056_S" == $("#cartForm  input[name=goodsType]").val() ){ 
+
+			let idx = 1;
+			target=$('.select_custom.item_opt1');
+			target.each(function(){
+				let data = {goodsCd : $(this).attr('id')
+							,optionSoldoutSkip : optionSoldoutSkip 
+							};
+				let jsonData = JSON.stringify(data);
+				
+				fnOption1Display(idx, jsonData );
+				
+				idx++;
+				
+			});
+			
+		}
+	}
+	
+	// 옵션1 노출처리
+	var fnOption1Display = function(ridx, jsonData ){
+		
 		gagajf.ajaxJsonSubmit('/goods/detail/option1/list', jsonData, function(result) {
 			
-			if (result.dataList != null && result.dataList.length > 0) {debugger;
+			if (result.dataList != null && result.dataList.length > 0) {
 				let tag = "";
 				let $obj = null;
-				
+				let selfGoodsYn = 'N';
 				$.each(result.dataList, function(idx, item) {
 					if (idx == 0){
 						
@@ -1105,13 +1204,13 @@
 						tag += '<ul class="list" style="display: none;">\n';
 						//------
 						tag += '<li class="selected" id="selfGoodsOpt'+item.goodsCd+'">선택</li>\n';
-						
+						selfGoodsYn = item.selfGoodsYn;
 					}
 					let soldoutYn = ""; 
 					if ("G008_90" != item.goodsStat || item.stockQty <= 0) soldoutYn = "true";
-					tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2('+ (idx+1)+', \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ item.minOrdQty+'\', \''+ item.maxOrdQty+'\', \''+item.currPrice+'\')">\n';	
+					tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnOption2('+ (idx+1)+', \''+ item.goodsCd+'\' , \''+ item.optCd1+'\', \''+ item.minOrdQty+'\', \''+ item.maxOrdQty+'\' )">\n';	
 					tag += '<div>' +item.optCd1 +'</div>';
-					tag += '<input type="hidden" name="opt1" value="'+ item.goodsCd+' currPrice="'+ item.currPrice +'" selfGoodsYn="'+ selfGoodsYn+'"/>\n';
+					tag += '<input type="hidden" name="opt" value="'+ item.goodsCd+'" optCd1="'+ item.optCd1 +'" qty="'+ item.qty +'" />\n';
 					tag += '</li>\n';
 				});
 				
@@ -1121,7 +1220,7 @@
 					tag += '</div>\n';
 					//------	
 				}
-debugger;
+
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						$obj = $('.pop_option_select .select_custom.item_opt1.item_opt1_1');	
@@ -1167,7 +1266,7 @@ debugger;
 	}
 	
 	// 옵션2 조회
-	var fnOption2 = function(ridx, goodsCd, optCd1, qty, minOrdQty, maxOrdQty , currPrice){
+	var fnOption2 = function(ridx, goodsCd, optCd1, minOrdQty, maxOrdQty){
 		
 		// 품절제외 여부
 		let optionSoldoutSkip = $('.pop_option_select').find('input[name=soldoutSkipYn]').is(":checked") ? 'Y' : 'N';
@@ -1175,8 +1274,8 @@ debugger;
 		let selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
 		let data = {goodsCd : goodsCd
 					,optCd1 : optCd1
-					,adminYn : $("#cartForm  input[name=adminYn]").val()
 					,optionSoldoutSkip : optionSoldoutSkip
+					,mastrGoodsCd : $('#cartFprm input[name=goodsCd]').val()
 					};
 		let jsonData = JSON.stringify(data);
 	
@@ -1202,6 +1301,7 @@ debugger;
 				}else{
 					$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
 				}	
+				let qty = $obj.parent().parent().find('.select_custom').attr('qty'); // 구성수량
 				
 				$.each(result.dataList, function(idx, item) {
 					if (idx == 0){
@@ -1218,9 +1318,10 @@ debugger;
 						tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';	
 					}
 					let soldoutYn = ""; 
-					if ("Y" == item.soldoutYn || item.stockQty <= 0)soldoutYn = "true";
+					let saleQty = (Number(qty) * Number(minOrdQty));
+					if ("Y" == item.soldoutYn || Number(item.stockQty) <= Number(saleQty))soldoutYn = "true";
 					if (selfGoodsYn == "Y"){
-						tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSet(this, \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';	
+						tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSet(this, \''+ item.goodsCd+'\' , \''+ item.optCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';	
 					}else{
 						tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSelfNo(this)">\n';
 					}
@@ -1230,7 +1331,7 @@ debugger;
 					}else{
 							
 					}
-					tag += '<input type="hidden" name="opt2" value="'+ item.goodsCd+'|'+item.optCd +'|'+qty +'" goodsCd="'+item.goodsCd+'" currPrice="'+ currPrice +'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
+					tag += '<input type="hidden" name="opt2" value="'+ item.goodsCd+'|'+item.optCd +'|'+qty +'" goodsCd="'+item.goodsCd+'" currPrice="'+ item.currPrice +'" addPrice="'+item.addPrice+'"  optCd="'+item.optCd+'"  optCd1="'+item.optCd1+'"  optCd2="'+item.optCd2+'"  minOrdQty="'+minOrdQty+'"  maxOrdQty="'+maxOrdQty+'" selfGoodsYn="'+selfGoodsYn+'"/>\n';
 					tag += '</li>\n';
 				});
 				
@@ -1241,7 +1342,6 @@ debugger;
 					//------	
 				}
 				
-				
 				$obj.append(tag);
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
@@ -1268,34 +1368,23 @@ debugger;
 	// 수량 변경 클릭
 	var fnAdjustOrderEa = function(obj) {
 
-		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
-			if("G056_N" == $("#cartForm  input[name=goodsType]").val() ){
-				if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-					mcxDialog.alert("사이즈를 선택하세요.");
-					return false;
-				}
-			}else{  //세트
-				let target=$('.select_custom.item_opt2');
-				let targetSize = target.length;	//구성품 갯수
-				let itemSize = 0;
-				target.each(function(){
-					if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' &&  !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
-						itemSize ++;
-					}
-				});
-				
-				if (targetSize != itemSize){
-					mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
-					return false;
-				}
-			}
-		}
-
 		let $obj = $(obj);
 		let $target = $obj.parent().children('input[name="cea"]');
-		let minOrdQty = parseInt( $target.attr('minOrdQty'));
-		let maxOrdQty = parseInt( $target.attr('maxOrdQty'));
 		let ea =parseInt($target.val());
+		let minOrdQty = 0;
+		let maxOrdQty = 0;
+		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
+			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
+				mcxDialog.alert("사이즈를 선택하세요.");
+				return false;
+			}
+			minOrdQty = parseInt($("#cartForm  input[name=minOrdQty]").val());
+			maxOrdQty = parseInt($("#cartForm  input[name=maxOrdQty]").val());
+		}else{
+			
+			minOrdQty = parseInt( $target.attr('minOrdQty'));
+			maxOrdQty = parseInt( $target.attr('maxOrdQty'));
+		}
 
 		if ($obj.attr('adjust') == '-') --ea;
 		else ++ea;
@@ -1316,50 +1405,44 @@ debugger;
 	//옵션 갯수 변경
 	var fnChangeOrderEa = function(obj) {
 		
-		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val()){
-			if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
-				if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
-					mcxDialog.alert("사이즈를 선택하세요.");
-					return false;
-				}
-			}else{
-				
-				let target=$('.select_custom.item_opt2');
-				let targetSize = target.length;	//구성품 갯수
-				let itemSize = 0;
-				target.each(function(){
-					if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' &&  !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
-						itemSize ++;
-					}
-				});
-				
-				if (targetSize != itemSize){
-					mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
-					return false;
-				}
-			}
-		}	
-
 		let $obj = $(obj);
+		let $target = $obj.parent().children('input[name="cea"]');
 		let ea = parseInt($obj.val());
-		let maxOrdQty = parseInt($(obj).attr('maxOrdQty'));
-		let minOrdQty = parseInt($(obj).attr('minOrdQty'));
 		let optCd =  $(obj).attr('optCd');
+		let minOrdQty = parseInt($("#cartForm  input[name=minOrdQty]").val());
+		let maxOrdQty = parseInt($("#cartForm  input[name=maxOrdQty]").val());
+		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
+			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
+				mcxDialog.alert("사이즈를 선택하세요.");
+				return false;
+			}
+		}else{
+
+			maxOrdQty = parseInt($(obj).attr('maxOrdQty'));
+			minOrdQty = parseInt($(obj).attr('minOrdQty'));
+			optCd =  $(obj).attr('optCd');
+		}
+		
 		let alertMsg = '';
 		
 		if (ea < minOrdQty) {
-			alertMsg ="최소 주문 가능 수량은 "+buymin+"개 입니다.";
+			alertMsg ="최소 주문 가능 수량은 "+minOrdQty+"개 입니다.";
 			ea = minOrdQty;
 		}
 
 		if (ea > maxOrdQty) {
-			alertMsg = "최대 주문 가능 수량은 "+buymax+"개 입니다.";
+			alertMsg = "최대 주문 가능 수량은 "+maxOrdQty+"개 입니다.";
 			ea = maxOrdQty;
 		}
-
-		$("#cartForm  input[name=cea]").val(ea);
-		$("#cartForm  input[name=ordQty]").val(ea);
-		obj.value = ea;
+		
+		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
+			$("#cartForm  input[name=cea]").val(ea);
+			$("#cartForm  input[name=ordQty]").val(ea);
+		}
+		
+		//obj.value = ea;
+		$target.val(ea);
+		$target.attr('value', ea);
 		
 		if (alertMsg != ''){
 			mcxDialog.alert(alertMsg);
@@ -1371,13 +1454,17 @@ debugger;
 		}else{
 			$('.number_count').find('.minus').removeClass('min_val');
 		}
+		if ("Y" == $("#cartForm  input[name=selfGoodsYn]").val() && "G056_N" == $("#cartForm  input[name=goodsType]").val()){
+			
+		}else{
+			let addPrice = parseInt($obj.parent().find('input[name="coption"]').attr('addprice'));
+			let goodsPrice = parseInt($obj.parent().find('input[name="coption"]').attr('price'));
+			let totalPrice = ((goodsPrice+addPrice) * ea);
+			$('.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());	
+		}
 		
-		let addPrice = parseInt($obj.parent().find('input[name="coption"]').attr('addprice'));
-		let goodsPrice = parseInt($obj.parent().find('input[name="coption"]').attr('price'));
-		let totalPrice = ((goodsPrice+addPrice) * ea);
-		$('.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();
 	}
@@ -1449,66 +1536,76 @@ debugger;
 			
 		}else { 
 			
-			let target = null;
-			let targetSize = 0;	//구성품 갯수
+			let cartGoodsList = [];
+			let compsList = [];
+			let goodsList = {
+				cartCompsList : new Array()
+			}
+			let target = $('#cartForm input[name=cea]');
 			
-			if (goodsType == 'G056_S') {
+			if (goodsType == 'G056_N'){
 				
-				target=$('.select_custom.item_opt2');
-				targetSize = target.length;	//구성품 갯수
-				let itemSize = 0;
-				target.each(function(){
-					if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' &&  !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
-						itemSize ++;
+				target.each(function() {
+					
+					let targetItem = $(this).parent().parent();
+					
+					let ea = parseInt($(this).val());
+					//let goodsCd = $(this).parent().find('input[name="coption"]').attr('goodscd');
+					//let optCd = $(this).parent().find('input[name="coption"]').val();
+					let addPrice = parseInt(.find('input[name="coption"]').attr('addprice'));
+					let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
+					
+					var obj = new Object();
+					obj.cartGb = btnType;
+					obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+					obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
+					
+					targetItem.each(function() {
+						obj.itemCd = $(this).parent().parent()
+						obj.optCd = arrInfo[1];
 					}
+					
+					obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
+					obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
+					obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
+					obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
+					obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+					compsList.push(obj);
+					
 				});
 				
-				if (targetSize != itemSize){
-					mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
-					return false;
-				}
-			}else{
+				// 장바구니담기
+				cfnAddCart(compsList);
+
+			}else{ // 세트
+				
+				target.each(function() {
+					var arrInfo = $(this).find('input[name=opt2]').val().split('|');	// 상품코드|사이즈|구성수량
+					
+					var obj = new Object();
+					obj.cartGb = btnType;
+					obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+					obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
+					obj.itemCd = arrInfo[0];
+					obj.optCd = arrInfo[1];
+					obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
+					obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
+					obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
+					obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
+					obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+					compsList.push(obj);
+					
+				});
+				
+				goodsList.cartCompsList = compsList;
+				cartGoodsList.push(goodsList);
+				
+				// 장바구니담기
+				cfnAddCart(cartGoodsList);
 				
-				target = $('#cartForm input[name=cea]');
-				targetSize = target.length;	//선택성품 갯수
-				if (target.length <= 0){
-					mcxDialog.alert("구성상품들의 옵션을 선택하세요.");
-					return false;
-				}
-			}
-			
-			let cartGoodsList = [];
-			let compsList = [];
-			let goodsList = {
-				cartCompsList : new Array()
 			}
 			
-			target.each(function() {debugger;
-			
-				let ea = parseInt($(this).val());
-				let goodsCd = $(this).parent().find('input[name="coption"]').attr('goodscd');
-				let optCd = $(this).parent().find('input[name="coption"]').val();
-				let addPrice = parseInt($(this).parent().find('input[name="coption"]').attr('addprice'));
-				let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
-			
-				var obj = new Object();
-				obj.cartGb = btnType;
-				obj.goodsType = $("#cartForm  input[name=goodsType]").val();
-				obj.goodsCd = goodsCd;
-				obj.optCd = optCd;
-				obj.goodsQty = ea;
-				obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
-				obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
-				obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
-				obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-				compsList.push(obj);
-				
-			});
-			goodsList.cartCompsList = compsList;
-			cartGoodsList.push(goodsList);
 			
-			// 장바구니담기
-			cfnAddCart(cartGoodsList);
 		}
 	}
 

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

@@ -716,7 +716,7 @@
 	
 	//장바구니담기
 	var fnAddCart = function(btnType){
-		let params = [];
+		let compsList = [];
 		
 		let target = $('#cartForm input[name=cea]');
 		let targetSize = target.length;	//선택성품 갯수
@@ -743,13 +743,14 @@
 			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
 			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
 			obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
-			params.push(obj);
+			compsList.push(obj);
 			
 		});
 		
-		
 		// 장바구니담기
-		cfnAddCart(params);
+		cfnAddCart(compsList);
+		
+		
 	}
 	
 	// 선택상품 삭제

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

@@ -900,6 +900,10 @@
 				if (maxCnt > itemCnt) {
 					maxCnt = itemCnt;
 				}
+				if (minOrdQty > itemCnt) {
+					//alert("무슨작업을 해야할가요?");
+					return false;		 //무슨작업을 해야하나?
+				}
 	
 				$("#cartForm  input[name=ordQty]").val(minOrdQty);
 				$("#cartForm  input[name=maxOrdQty]").val(maxCnt);
@@ -1217,7 +1221,7 @@
 					}
 					let soldoutYn = ""; 
 					let saleQty = (Number(qty) * Number(minOrdQty));
-					if ("Y" == item.soldoutYn || item.stockQty <= saleQty)soldoutYn = "true";
+					if ("Y" == item.soldoutYn || Number(item.stockQty) <= Number(saleQty))soldoutYn = "true";
 					if (selfGoodsYn == "Y"){
 						tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSet(this, \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';	
 					}else{