Просмотр исходного кода

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

card007 5 лет назад
Родитель
Сommit
dd3c73d08d

+ 11 - 7
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -1029,13 +1029,6 @@ public class TsfCartService {
 			result.put("message", "품절입니다.");
 			return result;
 		}
-		
-		// 현재 장바구니 수량
-		/*int goodsCartCnt = cartDao.getHasGoodsCartCnt(param);
-
-		if (param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
-			throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
-		}*/
 
 		// 구성 상품 재고 확인
 		for(int i = 0 ; i < param.getCartDtlSqArr().length ; i++) {
@@ -1055,6 +1048,17 @@ public class TsfCartService {
 			}
 		}
 
+		// 각 구성상품의 품절 여부 체크 후 최소, 최대 상품 수량 체크
+		if (goods.getMinOrdQty() > param.getGoodsQty()) {
+			result.put("status", "FAIL");
+			result.put("message", "해당 상품의 최소 주문 수량은 " + goods.getMinOrdQty() + "개 입니다.");
+			return result;
+		} else if (goods.getMaxOrdQty() < param.getGoodsQty()) {
+			result.put("status", "FAIL");
+			result.put("message", "해당 상품의 최대 주문 수량은 " + goods.getMaxOrdQty() + "개 입니다.");
+			return result;
+		}
+
 		StringBuilder sb = new StringBuilder();
 		if(TscConstants.GoodsType.SET.value().equals(param.getGoodsType())) {
 			// 장바구니 보유 CART_SQ 쿼리

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

@@ -59,6 +59,8 @@ public class Cart extends TscBaseDomain {
 	private int currStockQty;		// 기준 재고
 	private int qty;				// 구성 상품 기준 재고 수량
 	private int currPrice;			// 상품판매가
+	private int minOrdQty;			// 최소주문가능수량
+	private int addPrice;			// 상품 옵션가
 	private String goodsType;		// 상품 타입
 	private String compsGoodsCd;	// 세트 구성상품 코드
 	private String itemCdSql;		// 상품 조회 쿼리문
@@ -88,6 +90,7 @@ public class Cart extends TscBaseDomain {
 	private String itemOpts;	// 단품옵션
 	private Integer updCartSq;	// 업데이트할 장바구니번호
 	private Integer delCartSq;	// 삭제할 장바구니번호(0이면 삭제할 장바구니번호 없음)
+	private int colorNo;		// 컬러 번호
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private Cart[] cartGoodsList;		// 장바구니 단품코드

+ 48 - 39
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -495,17 +495,17 @@
 			 , Z.DELV_FEE_CD
 		     , Z.MIN_ORD_AMT
 		     , Z.DELV_FEE
-			 , Z.CART_DELV_FEE_CD
+		     , Z.CART_DELV_FEE_CD
 		     , CASE WHEN Z.ORD_CAN_YN = 'Y' AND Z.CUST_TODAY_ORD = 0 AND Z.NOCUST_TODAY_ORD = 0 THEN 'Y' ELSE 'N' END AS ORD_CAN_YN
 		     , Z.ORD_CAN_QTY
 		     , Z.MIN_ORD_QTY
 		     , Z.MAX_ORD_QTY
-			 , (Z.CURR_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS CURR_PRICE
-			 , (Z.LIST_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS LIST_PRICE
-			 , Z.SOLDOUT_YN
-			 , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
-					ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
-			 , SYS_IMG_NM
+		     , (Z.CURR_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS CURR_PRICE
+		     , (Z.LIST_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS LIST_PRICE
+		     , Z.SOLDOUT_YN
+		     , CASE WHEN #{frontGb} = 'P' THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
+		            ELSE (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100) END AS SAVE_PNT_AMT
+		     , SYS_IMG_NM
 		FROM   (SELECT C.CART_SQ
 		             , C.GOODS_CD
 		             , C.GOODS_QTY
@@ -584,7 +584,7 @@
 		                             , MAX(A.ORD_CAN_YN) AS ORD_CAN_YN
 		                             , MIN(A.ORD_CAN_QTY) AS ORD_CAN_QTY
 		                        FROM   (SELECT C.CART_SQ
-		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY * GC.QTY AND COMP_GOODS.GOODS_STAT != 'G008_70' AND G.GOODS_STAT != 'G008_70' THEN 'N'
+		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= GC.QTY AND COMP_GOODS.GOODS_STAT != 'G008_70' AND G.GOODS_STAT != 'G008_70' THEN 'N'
 		                                            ELSE 'Y' END AS SOLDOUT_YN
 		                                     , CASE WHEN G.GOODS_STAT != 'G008_90' AND G.GOODS_STAT != 'G008_70' AND COMP_GOODS.GOODS_STAT != 'G008_70' AND COMP_GOODS.GOODS_STAT != 'G008_90' THEN 'N'
 		                                            ELSE 'Y' END AS ORD_CAN_YN
@@ -617,7 +617,7 @@
 		                                </if>
 		                                UNION ALL
 		                                SELECT C.CART_SQ
-		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY AND G.GOODS_STAT != 'G008_70' THEN 'N'
+		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY > 0 AND G.GOODS_STAT != 'G008_70' THEN 'N'
 		                                            ELSE 'Y' END AS SOLDOUT_YN
 		                                     , CASE WHEN G.GOODS_STAT != 'G008_90' AND G.GOODS_STAT != 'G008_70' THEN 'N'
 		                                            ELSE 'Y' END AS ORD_CAN_YN
@@ -920,35 +920,39 @@
 	<!-- 장바구니 상품 컬러 정보 조회 -->
 	<select id="selectCartGoodsColorList" parameterType="Cart" resultType="Cart">
 		/* TsfCart.selectCartGoodsColorList : 장바구니 상품 컬러 정보 조회 */
-		SELECT ST.GOODS_CD
-			 , CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = ST.OPT_CD1)
-					ELSE ST.OPT_CD1 END AS COLOR_NM
-			 , CASE WHEN SELF_GOODS_YN = 'Y' AND GOODS_TYPE != 'G056_S' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = ST.GOODS_CD AND COLOR_CD = ST.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
-					ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
-			 , ST.OPT_CD1
-			 , G.MAIN_COLOR_CD
-			 , MAX(CD.CART_DTL_SQ) AS CART_DTL_SQ
-			 , MAX(ST.DISP_ORD) AS DISP_ORD
-			 , MAX(CD.OPT_CD1) AS CART_OPT_CD1
-			 , MAX(CD.OPT_CD2) AS CART_OPT_CD2
-			 , MAX(CD.OPT_CD) AS CART_OPT_CD
-		     , MAX(ST.SOLDOUT_YN) AS SOLDOUT_YN
-			 , IFNULL(MAX( CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = CD.OPT_CD1)
-								ELSE CD.OPT_CD1 END), MAX(CD.OPT_CD1)) AS CART_COLOR_NM
-		FROM   TB_GOODS G
-		INNER  JOIN VW_STOCK ST
-		ON     G.GOODS_CD = ST.GOODS_CD
-		LEFT   OUTER JOIN TB_CART_DETAIL CD
-		ON     G.GOODS_CD = CD.ITEM_CD
-		AND    ST.OPT_CD = CD.OPT_CD
-		AND    CD.CART_SQ = #{cartSq}
-		WHERE  ST.DISP_YN = 'Y'
-		AND    G.SELF_MALL_YN = 'Y'
-		AND    G.GOODS_STAT IN ('G008_90', 'G008_70')
-		AND    G.GOODS_CD = #{goodsCd}
-		GROUP  BY ST.GOODS_CD
-			 , ST.OPT_CD1
-			 , G.MAIN_COLOR_CD
+		SELECT A.*
+		     , IFNULL((CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = A.CART_OPT_CD1)
+		                    ELSE A.CART_OPT_CD1 END), A.CART_OPT_CD1) AS CART_COLOR_NM
+		FROM   (SELECT ST.GOODS_CD
+		             , MAX(CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = ST.OPT_CD1)
+		                        ELSE ST.OPT_CD1 END) AS COLOR_NM
+		             , MAX(CASE WHEN SELF_GOODS_YN = 'Y' AND GOODS_TYPE != 'G056_S' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = ST.GOODS_CD AND COLOR_CD = ST.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
+		                        ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END) AS SYS_IMG_NM
+		             , ST.OPT_CD1
+		             , G.MAIN_COLOR_CD
+		             , G.SELF_GOODS_YN
+		             , MAX(CD.CART_DTL_SQ) AS CART_DTL_SQ
+		             , MAX(ST.DISP_ORD) AS DISP_ORD
+		             , MAX(CD.OPT_CD1) AS CART_OPT_CD1
+		             , MAX(CD.OPT_CD2) AS CART_OPT_CD2
+		             , MAX(CD.OPT_CD) AS CART_OPT_CD
+		             , MAX(ST.SOLDOUT_YN) AS SOLDOUT_YN
+		             , ROW_NUMBER() OVER() AS COLOR_NO
+		        FROM   TB_GOODS G
+		        INNER  JOIN VW_STOCK ST
+		        ON     G.GOODS_CD = ST.GOODS_CD
+		        LEFT   OUTER JOIN TB_CART_DETAIL CD
+		        ON     G.GOODS_CD = CD.ITEM_CD
+		        AND    ST.OPT_CD = CD.OPT_CD
+		        AND    CD.CART_SQ = #{cartSq}
+		        WHERE  ST.DISP_YN = 'Y'
+		        AND    G.SELF_MALL_YN = 'Y'
+		        AND    G.GOODS_STAT IN ('G008_90', 'G008_70')
+		        AND    G.GOODS_CD = #{goodsCd}
+		        GROUP  BY ST.GOODS_CD
+		                , ST.OPT_CD1
+		                , G.SELF_GOODS_YN
+		                , G.MAIN_COLOR_CD ) A
 		ORDER  BY DISP_ORD
 	</select>
 
@@ -960,7 +964,11 @@
 		     , ST.OPT_CD1
 		     , ST.OPT_CD2
 		     , ST.CURR_STOCK_QTY
-		     , ST.SOLDOUT_YN
+		     , ST.ADD_PRICE
+		     , CASE WHEN ST.SOLDOUT_YN = 'N' AND G.GOODS_STAT = 'G008_90' THEN 'N' ELSE 'Y' END AS SOLDOUT_YN
+		     , G.MIN_ORD_QTY
+		     , G.MAX_ORD_QTY
+		     , G.DAY_MAX_ORD_QTY
 		     , CD.CART_DTL_SQ
 		     , CD.OPT_CD AS CART_OPT_CD
 		     , CD.OPT_CD2 AS CART_OPT_CD2
@@ -988,6 +996,7 @@
 		SELECT GI.GOODS_CD
 			 , GI.COLOR_CD
 			 , GI.SYS_IMG_NM
+			 , GI.DEFAULT_IMG_YN
 		FROM   TB_GOODS G
 		INNER  JOIN TB_GOODS_IMG GI
 		ON     G.GOODS_CD = GI.GOODS_CD

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

@@ -54,10 +54,10 @@
 		FROM   (SELECT CR.CPN_ID
 		             , CR.CPN_TARGET
 		             , CASE WHEN CR.CPN_TARGET = 'G260_10' THEN (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CR.REF_VAL AND GOODS_STAT = 'G008_90')
-		                    WHEN CR.CPN_TARGET = 'G260_11' THEN CASE WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL) > 0 THEN (SELECT CATE1_NM FROM VW_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL LIMIT 1)
-		                                                             WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM VW_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL LIMIT 1)
-		                                                             WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM VW_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL LIMIT 1)
-		                                                             WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM VW_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL LIMIT 1)
+		                    WHEN CR.CPN_TARGET = 'G260_11' THEN CASE WHEN (SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL) > 0 THEN (SELECT CATE1_NM FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL LIMIT 1)
+		                                                             WHEN (SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL LIMIT 1)
+		                                                             WHEN (SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL LIMIT 1)
+		                                                             WHEN (SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL LIMIT 1)
 		                                                             END    <!-- 카테고리명은 대 > 중 카테고리까지만 노출 20210330 정지혜과장님 확인 -->
 		                    WHEN CR.CPN_TARGET = 'G260_12' THEN (SELECT BRAND_KNM FROM TB_BRAND WHERE BRAND_CD = CR.REF_VAL AND USE_YN = 'Y')
 		                    WHEN CR.CPN_TARGET = 'G260_13' THEN (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = CR.REF_VAL AND USE_YN = 'Y' AND SUPPLY_STAT = 'G010_30')

+ 34 - 62
src/main/webapp/WEB-INF/views/mob/cart/CartChangeOptionPopupMob.html

@@ -66,23 +66,29 @@
 								</a>
 							</li>
 						</ul>
-
-						<div class="opt_size">
-							<div class="opt_header">
-								<span class="title">사이즈</span>
-							</div>
-							<div class="form_field selfGoodsSize">
-								<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
-									<th:block  th:if="${color.cartColorNm != null}">
-										<th:block th:each="size, index : ${color.cartSizeList}">
-											<div>
-												<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty > size.currStockQty}">
-												<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
-											</div>
+					</div>
+					<div class="opt_size">
+						<div class="opt_header">
+							<span class="title">사이즈</span>
+							<span class="info">
+									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+										<th:block th:each="size, index : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
+											<span th:text="${size.optCd2}"></span>
+											<span th:if="${size.addPrice > 0}">(+<em th:text="${#numbers.formatInteger(size.addPrice, 1, 'COMMA')}"></em>)원</span>
 										</th:block>
 									</th:block>
+								</span>
+						</div>
+						<div class="form_field selfGoodsSize">
+							<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
+								<th:block th:each="size, index : ${color.cartSizeList}">
+									<div>
+										<input type="hidden" name="addPrice" th:value="${size.addPrice}" />
+										<input type="radio" name="rdi-optsize" th:soldoutYn="${size.soldoutYn}" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or size.minOrdQty > size.currStockQty}">
+										<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span class="sizeNameTxt" th:text="${size.optCd2}"></span></label>
+									</div>
 								</th:block>
-							</div>
+							</th:block>
 						</div>
 					</div>
 				</th:block>
@@ -115,7 +121,7 @@
 										<div class="select" th:text="${comp.colorNm}"></div>
 										<ul class="list" th:data="${comp.goodsCd}">
 											<th:block th:each="color, index : ${comp.cartColorList}">
-												<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
+												<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:colorNo="${color.colorNo}" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
 											</th:block>
 										</ul>
 									</div>
@@ -131,12 +137,12 @@
 						<form class="form_wrap">
 							<div class="form_field">
 								<th:block th:each="color, index : ${comp.cartColorList}">
-									<div class="select_custom item_opt2 sizeList" th:classappend="|${comp.goodsCd}_${color.optCd1} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:inline-block' : 'display:none'}">
+									<div class="select_custom item_opt2 sizeList" th:classappend="|color_${comp.goodsCd}_${color.colorNo} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:inline-block' : 'display:none'}">
 										<div class="combo">
 											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 												</th:block>
 											</ul>
 										</div>
@@ -172,7 +178,7 @@
 										<div class="select" th:text="${comp.colorNm}"></div>
 										<ul class="list" th:data="${comp.goodsCd}">
 											<th:block th:each="color, index : ${comp.cartColorList}">
-												<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
+												<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:colorNo="${color.colorNo}" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
 											</th:block>
 										</ul>
 									</div>
@@ -188,12 +194,12 @@
 						<form class="form_wrap">
 							<div class="form_field">
 								<th:block th:each="color, index : ${comp.cartColorList}">
-									<div class="select_custom item_opt2 sizeList" th:classappend="|${comp.goodsCd}_${color.optCd1} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:inline-block' : 'display:none'}">
+									<div class="select_custom item_opt2 sizeList" th:classappend="|color_${comp.goodsCd}_${color.colorNo} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:inline-block' : 'display:none'}">
 										<div class="combo">
 											<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 											<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 												<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+													<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 												</th:block>
 											</ul>
 										</div>
@@ -233,10 +239,11 @@
 	$("#cartOptionModal .colorList > .combo > .list li").on("click", function(e) {
 		let goodsCd = $(this).parent().attr("data");
 		let optCd1 = $(this).attr("data");
+		let colorNo = $(this).attr("colorNo");
 		let firstSize = "";
 		if(optCd1 != $(".option1_" + goodsCd).val()) {
-			let firstOptCd = $("#cartOptionModal ." + goodsCd + "_" + optCd1 + " li:first").attr("optcd");
-			let firstOptCd2 = $("#cartOptionModal ." + goodsCd + "_" + optCd1 + " li:first").text();
+			let firstOptCd = $("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " li:first").attr("optcd");
+			let firstOptCd2 = $("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " li:first").text();
 
 			$("#cartOptionModal .chooseColorNm_" + goodsCd).text($(this).text());
 			$("#cartOptionModal .option_" + goodsCd).val(firstOptCd);
@@ -244,8 +251,8 @@
 			$("#cartOptionModal .option2_" + goodsCd).val(firstOptCd2);
 
 			$("#cartOptionModal .sizeList" + goodsCd).hide();
-			$("#cartOptionModal ." + goodsCd + "_" + optCd1).show();
-			$("#cartOptionModal ." + goodsCd + "_" + optCd1 + " .select").text(firstOptCd2);
+			$("#cartOptionModal .color_" + goodsCd + "_" + colorNo).show();
+			$("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " .select").text(firstOptCd2);
 			$("#cartOptionModal .chooseSizeNm_" + goodsCd).text(firstOptCd2);
 		}
 	});
@@ -264,44 +271,9 @@
 		$('.optModify_pop .number_count .minus').addClass('min_val');
 	}
 
-	// 자사 일반 상품 컬러 선택시
-	$(".selfGoodsColorSelect").on("click", function(e) {
-		let sizeHtml = "";
-		let imgHtml = "";
-		let cart = [[${cart}]];
-		let color =  [[${cart.cartCompsList[0].cartColorList}]];
-		let optCd1 = $(this).attr("data");
-
-		for(let i = 0 ; i < color.length ; i++) {
-			let size = color[i].cartSizeList;
-			for(let j = 0 ; j < size.length ; j++) {
-				if(optCd1 == size[j].optCd1) {
-					sizeHtml += "<div>";
-					sizeHtml += "<input type='radio' name='rdi-optsize' id='" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
-					if(size[j].soldoutYn == "Y" || cart.goodsQty > size[j].currStockQty) {
-						sizeHtml += "disabled = 'disabled'";
-					}
-					sizeHtml += " />\n";
-					sizeHtml += "<label for='" + size[j].goodsCd + "-" + size[j].optCd + "'><span>" + size[j].optCd2 + "</span></label>\n"
-					sizeHtml += "</div>\n";
-				}
-			}
-
-			if(optCd1 == color[i].optCd1) {
-				for (let j = 0; j < color[i].cartImgList.length; j++) {
-					let img = color[i].cartImgList[j];
-					if(optCd1 == img.colorCd) {
-						imgHtml += "<li>\n<span class='thumb'>\n";
-						imgHtml += "<img src='" + _uploadGoodsUrl + "/" + img.sysImgNm + "' onerror='this.src='" + [[${@environment.getProperty('domain.uximage')}]] + "/images/pc/thumb/bg_item_none.png' alt='" + img.sysImgNm + "' />\n";
-						imgHtml += "</span>\n</li>\n";
-					}
-				}
-			}
-		}
-
-		$(".cartOptionModal .pic_list").html(imgHtml);
-		$(".cartOptionModal .selfGoodsSize").html(sizeHtml);
-	});
+	function getSelfColorList() {
+		return [[${cart.cartCompsList[0].cartColorList}]];
+	}
 
 	function fnChangeCartOption(cartSq) {
 		let cart = [[${cart}]];

+ 51 - 0
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -187,6 +187,57 @@
 		$("#couponInfoPop_close").click(function() {
 			$("#couponInfoPop").modal("hide");
 		});
+
+		// 자사 일반 상품 사이즈 선택시
+		$(document).on("change", ".selfGoodsSize input[type=radio]", function() {
+			let addPrice = $(this).parent().find("input[name=addPrice]").val();
+			let sizeTextHtml = "<span>" + $(this).parent().find(".sizeNameTxt").text() + "</span>";
+			if(addPrice > 0) {
+				sizeTextHtml += "<span>(+<em>" + Number(addPrice).toLocaleString() + "</em>)원</span>";
+			}
+			$(this).parent().parent().parent().find(".opt_header>.info").html(sizeTextHtml);
+		});
+
+		// 자사 일반 상품 컬러 선택시
+		$(document).on("click", ".selfGoodsColorSelect", function(e) {
+			let sizeHtml = "";
+			let imgHtml = "";
+			let color =  getSelfColorList();
+			let optCd1 = $(this).attr("data");
+
+			for(let i = 0 ; i < color.length ; i++) {
+				let size = color[i].cartSizeList;
+				for(let j = 0 ; j < size.length ; j++) {
+					if(optCd1 == size[j].optCd1) {
+						sizeHtml += "<div>";
+						sizeHtml += "<input type='hidden' name='addPrice' value='" + size[j].addPrice + "' />";
+						sizeHtml += "<input type='radio' name='rdi-optsize' id='rdi-optsize" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
+						if(size[j].soldoutYn == "Y" || size[j].minOrdQty > size[j].currStockQty) {
+							sizeHtml += "disabled = 'disabled'";
+						}
+						sizeHtml += " />\n";
+						sizeHtml += "<label for='rdi-optsize" + size[j].goodsCd + "-" + size[j].optCd + "'><span class='sizeNameTxt'>" + size[j].optCd2 + "</span></label>\n"
+						sizeHtml += "</div>\n";
+					}
+				}
+
+				if(optCd1 == color[i].optCd1) {
+					for (let j = 0; j < color[i].cartImgList.length; j++) {
+						let img = color[i].cartImgList[j];
+						if(optCd1 == img.colorCd && img.defaultImgYn == "Y") {
+							imgHtml += '<img src="' + _uploadGoodsUrl + "/" + img.sysImgNm + '?RS=100" onerror="' + _uximgUrl + '/images/pc/thumb/bg_item_none.png" alt="' + img.sysImgNm + '" />\n';
+							/*imgHtml += "<li>\n<span class='thumb'>\n";
+							imgHtml += "<img src='" + _uploadGoodsUrl + "/" + img.sysImgNm + "' onerror='this.src='" + [[${@environment.getProperty('domain.uximage')}]] + "/images/pc/thumb/bg_item_none.png' alt='" + img.sysImgNm + "' />\n";
+							imgHtml += "</span>\n</li>\n";*/
+						}
+					}
+				}
+			}
+
+			$(".cartOptionModal .area_order .goods_section .goods_detail .thumb_box").html(imgHtml);
+			$(".cartOptionModal .selfGoodsSize").html(sizeHtml);
+			$(".cartOptionModal .opt_size .opt_header .info").html("");
+		});
 	});
 
 	function getCartList(parameter) {

+ 13 - 12
src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html

@@ -62,7 +62,7 @@
 												<div class="select" th:text="${comp.colorNm}"></div>
 												<ul class="list" th:data="${comp.goodsCd}">
 													<th:block th:each="color, index : ${comp.cartColorList}">
-														<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
+														<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:colorNo="${color.colorNo}" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
 													</th:block>
 												</ul>
 											</div>
@@ -78,12 +78,12 @@
 								<form class="form_wrap">
 									<div class="form_field">
 										<th:block th:each="color, index : ${comp.cartColorList}">
-											<div class="select_custom item_opt2 sizeList" th:classappend="|${comp.goodsCd}_${color.optCd1} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:block' : 'display:none'}">
+											<div class="select_custom item_opt2 sizeList" th:classappend="|color_${comp.goodsCd}_${color.colorNo} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:block' : 'display:none'}">
 												<div class="combo">
 													<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 													<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 														<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-															<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+															<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 														</th:block>
 													</ul>
 												</div>
@@ -122,7 +122,7 @@
 										<th:block th:if="${color.cartColorNm != null}">
 											<th:block th:each="size, index : ${color.cartSizeList}">
 												<div>
-													<input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty > size.currStockQty}">
+													<input type="radio" name="rdi-optsize" th:soldoutYn="${size.soldoutYn}" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or size.minOrdQty > size.currStockQty}">
 													<label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
 												</div>
 											</th:block>
@@ -154,7 +154,7 @@
 												<div class="select" th:text="${comp.colorNm}"></div>
 												<ul class="list" th:data="${comp.goodsCd}">
 													<th:block th:each="color, index : ${comp.cartColorList}">
-														<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
+														<li th:classappend="${color.cartColorNm != null} ? 'selected'" th:colorNo="${color.colorNo}" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
 													</th:block>
 												</ul>
 											</div>
@@ -170,12 +170,12 @@
 								<form class="form_wrap">
 									<div class="form_field">
 										<th:block th:each="color, index : ${comp.cartColorList}">
-											<div class="select_custom item_opt2 sizeList" th:classappend="|${comp.goodsCd}_${color.optCd1} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:block' : 'display:none'}">
+											<div class="select_custom item_opt2 sizeList" th:classappend="|color_${comp.goodsCd}_${color.colorNo} sizeList${comp.goodsCd}|" th:style="${color.cartColorNm != null ? 'display:block' : 'display:none'}">
 												<div class="combo">
 													<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm|" th:text="${comp.optCd2}" th:data="${color.goodsCd}"></div>
 													<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|" th:data="${comp.goodsCd}">
 														<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-															<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+															<li th:classappend="${size.cartOptCd != null} ? selected" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') or size.minOrdQty > size.currStockQty ? true : false}"></li>
 														</th:block>
 													</ul>
 												</div>
@@ -215,10 +215,11 @@
 		$("#cartOptionModal .colorList > .combo > .list li").on("click", function(e) {
 			let goodsCd = $(this).parent().attr("data");
 			let optCd1 = $(this).attr("data");
+			let colorNo = $(this).attr("colorNo");
 			let firstSize = "";
 			if(optCd1 != $(".option1_" + goodsCd).val()) {
-				let firstOptCd = $("#cartOptionModal ." + goodsCd + "_" + optCd1 + " li:first").attr("optcd");
-				let firstOptCd2 = $("#cartOptionModal ." + goodsCd + "_" + optCd1 + " li:first").text();
+				let firstOptCd = $("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " li:first").attr("optcd");
+				let firstOptCd2 = $("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " li:first").text();
 
 				$("#cartOptionModal .chooseColorNm_" + goodsCd).text($(this).text());
 				$("#cartOptionModal .option_" + goodsCd).val(firstOptCd);
@@ -226,8 +227,8 @@
 				$("#cartOptionModal .option2_" + goodsCd).val(firstOptCd2);
 
 				$("#cartOptionModal .sizeList" + goodsCd).hide();
-				$("#cartOptionModal ." + goodsCd + "_" + optCd1).show();
-				$("#cartOptionModal ." + goodsCd + "_" + optCd1 + " .select").text(firstOptCd2);
+				$("#cartOptionModal .color_" + goodsCd + "_" + colorNo).show();
+				$("#cartOptionModal .color_" + goodsCd + "_" + colorNo + " .select").text(firstOptCd2);
 				$("#cartOptionModal .chooseSizeNm_" + goodsCd).text(firstOptCd2);
 			}
 		});
@@ -260,7 +261,7 @@
 					if(optCd1 == size[j].optCd1) {
 						sizeHtml += "<div>";
 						sizeHtml += "<input type='radio' name='rdi-optsize' id='" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
-						if(size[j].soldoutYn == "Y" || cart.goodsQty > size[j].currStockQty) {
+						if(size[j].soldoutYn == "Y" || size[j].minOrdQty > size[j].currStockQty) {
 							sizeHtml += "disabled = 'disabled'";
 						}
 						sizeHtml += " />\n";

+ 0 - 15
src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html

@@ -288,21 +288,6 @@
 		getCartList(data);
 	});
 
-    //상품옵션변경 팝업 > 수량조절
-    $(document).on('click','.opt_modify_pop .number_count .minus',function(e){
-        var $input = $(this).parent().find('input');
-        var count = parseInt($input.val()) - 1;
-        count = count < 1 ? 1 : count;
-        $input.val(count);
-        $input.change();
-        return false;
-    }).on('click','.opt_modify_pop .number_count .plus',function(e){
-        var $input = $(this).parent().find('input');
-        $input.val(parseInt($input.val()) + 1);
-        $input.change();
-        return false;
-    });
-
 	//팝업 - 쿠폰사용안내
 	$(document).on('click','#btn_cartCouponInfo_pop',function(e){
 		$(".cartCpnInfoModal").modal("show");