Jelajahi Sumber

자사 상품 대표 색상 설정관련

eskim 5 tahun lalu
induk
melakukan
45c2fdf2b0

+ 21 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -9,6 +9,7 @@ import com.style24.persistence.domain.GoodsCompose;
 import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsEpSkip;
 import com.style24.persistence.domain.GoodsHst;
+import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
@@ -239,6 +240,15 @@ public interface TsaGoodsDao {
 	 */
 	Collection<Option> getGoodsSizeList(Goods goods);
 
+	/**
+	 * 상품 색상목록 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 18
+	 */
+	Collection<GoodsImg> getGoodsColorList(Goods goods);
 
 	/**
 	 * 상품 고시 조회
@@ -250,6 +260,17 @@ public interface TsaGoodsDao {
 	 */
 	Collection<GoodsNotiInfo> getGoodsNotiInfoList(GoodsNotiInfo goodsNotiInfo);
 
+	/**
+	 * 상품의 정보고시 항목 목록
+	 *
+	 * @param notiInfo
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 18
+	 */
+	Collection<NotiInfo> getNotiGoodsInfoList(NotiInfo notiInfo);
+
+
 	/**
 	 * 구성상품 목록
 	 *

+ 34 - 5
style24.admin/src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -23,6 +23,7 @@ import com.style24.persistence.domain.GoodsCompose;
 import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsEpSkip;
 import com.style24.persistence.domain.GoodsHst;
+import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
@@ -542,6 +543,18 @@ public class TsaGoodsService {
 		return goodsDao.getGoodsSizeList(goods);
 	}
 
+	/**
+	 * 상품 색상목록 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 18
+	 */
+	public Collection<GoodsImg> getGoodsColorList(Goods goods) {
+		return goodsDao.getGoodsColorList(goods);
+	}
+
 	/**
 	 * 상품 정보고시 조회
 	 *
@@ -554,6 +567,18 @@ public class TsaGoodsService {
 		return goodsDao.getGoodsNotiInfoList(goodsNotiInfo);
 	}
 
+	/**
+	 * 상품의 정보고시 항목 목록
+	 *
+	 * @param notiInfo
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 18
+	 */
+	public Collection<NotiInfo> getNotiGoodsInfoList(NotiInfo notiInfo) {
+		return goodsDao.getNotiGoodsInfoList(notiInfo);
+	}
+
 	/**
 	 * 구성상품 목록
 	 *
@@ -1113,13 +1138,15 @@ public class TsaGoodsService {
 		stock.setUpdNo(goods.getUpdNo());
 		stock.setRegNo(goods.getRegNo());
 		goodsDao.createStockHst(stock);
-
+		log.info("saveStock goods={}", goods);
 		for (String optCd : goods.getOptCd()) {
+			log.info("saveStock index={}", index);
+			log.info("saveStock optCd={}", optCd);
 			Option goodsStock = new Option();
 			goodsStock.setGoodsCd(goods.getCompsGoodsCd()[index]); // 구성상품 코드
 			goodsStock.setOptCd(optCd);
-			goodsStock.setOptCd1(goods.getOptNm1()[index]);
-			goodsStock.setOptCd2(goods.getOptNm2()[index]);
+			goodsStock.setOptCd1(goods.getOptCd1()[index]);
+			goodsStock.setOptCd2(goods.getOptCd2()[index]);
 			goodsStock.setBaseStockQty(Integer.parseInt(goods.getBaseStockQty()[index]));
 			goodsStock.setSoldoutYn(goods.getSoldoutYn()[index]);
 			goodsStock.setDispOrd(goods.getDispOrd()[index]);
@@ -1201,7 +1228,7 @@ public class TsaGoodsService {
 		regGoods.setStyleYear(goods.getStyleYear());
 		regGoods.setSeasonCd(goods.getSeasonCd());
 		regGoods.setSexGb(goods.getSexGb());
-		regGoods.setMainColorCd("Y");
+		regGoods.setMainColorCd("00");
 		regGoods.setOriginCd(goods.getOriginCd());
 		regGoods.setMakeYmd(goods.getMakeYmd());
 		regGoods.setSelfMallYn(goods.getSelfMallYn());
@@ -1276,7 +1303,7 @@ public class TsaGoodsService {
 		regGoods.setStyleYear(goods.getStyleYear());
 		regGoods.setSeasonCd(goods.getSeasonCd());
 		regGoods.setSexGb(goods.getSexGb());
-		regGoods.setMainColorCd("Y");   /// 수정
+		regGoods.setMainColorCd("00");
 		regGoods.setOriginCd(goods.getOriginCd());
 		regGoods.setMakeYmd(goods.getMakeYmd());
 		regGoods.setSelfMallYn(goods.getSelfMallYn());
@@ -1385,6 +1412,7 @@ public class TsaGoodsService {
 			dispOrd++;
 		}
 
+
 		// 사용자 검색어를 검색어에 적용
 		String goodsSnm = goodsDao.getGoodsSnm(regGoods.getGoodsCd());
 		regGoods.setGoodsSnm(goodsSnm);
@@ -2120,4 +2148,5 @@ public class TsaGoodsService {
 
 		return goodsDao.getGoodsSizeCount(option);
 	}
+
 }

+ 16 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -802,6 +802,7 @@ public class TsaGoodsController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 		mav.addObject("goods", goodsService.getGoods(goods));
 		mav.addObject("goodsSizeList", goodsService.getGoodsSizeList(goods));
+		mav.addObject("goodsColorList", goodsService.getGoodsColorList(goods));
 		// 사용여부
 		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
 
@@ -830,6 +831,21 @@ public class TsaGoodsController extends TsaBaseController {
 		return goodsService.getGoodsNotiInfoList(goodsInfo);
 	}
 
+	/**
+	 * 상품의 정보고시 항목 목록
+	 *
+	 * @param notiInfo
+	 * @return
+	 * @author eskim
+	 * @since 2010. 11. 18
+	 */
+	@PostMapping("/noti/goodsInfo/list")
+	@ResponseBody
+	public Collection<NotiInfo> getNotiGoodsInfoList(NotiInfo notiInfo) {
+		return goodsService.getNotiGoodsInfoList(notiInfo);
+	}
+
+
 	/**
 	 * 구성상품 목록
 	 *

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

@@ -129,10 +129,10 @@ public class Goods extends TscBaseDomain {
 	private String[] optCd; // 상품 사이즈
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] optNm1; // 상품 옵션1
+	private String[] optCd1; // 상품 옵션1
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] optNm2; // 상품 옵션2
+	private String[] optCd2; // 상품 옵션2
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] baseStockQty; // 안전재고

+ 5 - 0
style24.admin/src/main/java/com/style24/persistence/domain/GoodsImg.java

@@ -14,6 +14,7 @@ import lombok.Data;
 public class GoodsImg extends TscBaseDomain {
 
 	private String goodsCd;
+	private String colorCd;
 	private String imgType;
 	private String imgPath1;
 	private String imgPath2;
@@ -38,5 +39,9 @@ public class GoodsImg extends TscBaseDomain {
 
 	private String goodsImgPath;
 	private String col;
+	private String mainColorCd;
+	private String mainColorYn;
+	private String colorEnm;
+	private String optCd1;
 
 }

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

@@ -25,6 +25,9 @@ public class NotiInfo extends TscBaseDomain {
 	private String reqYn;
 	private String dispYn;
 
+	private String crud;
+	private String goodsCd;
+
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrNiClsfCd;
 

+ 85 - 7
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -387,6 +387,7 @@
 		                   )
 		        </if>
 		        LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		                                        AND G.MAIN_COLOR_CD = GI.COLOR_CD
 		        WHERE 1=1
 		        <if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
 		        <include refid="getGoodsListCondition_sql"/>
@@ -497,6 +498,7 @@
 		                   )
 		        </if>
 		        LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		                                        AND G.MAIN_COLOR_CD = GI.COLOR_CD
 		        WHERE 1=1
 		        <if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
 		        <include refid="getGoodsListCondition_sql"/>
@@ -819,6 +821,7 @@
 		              )
 		</if>
 		LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		                                AND G.MAIN_COLOR_CD = GI.COLOR_CD
 		WHERE 1=1
 		<if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
 		<include refid="getGoodsListCondition_sql"/>
@@ -900,6 +903,7 @@
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
+		                                AND G.MAIN_COLOR_CD = GI.COLOR_CD
 		WHERE 1 = 1 
 		<choose>
 		<when test="goodsCd != null and goodsCd != ''">
@@ -948,6 +952,50 @@
 		ORDER BY C.DISP_ORD
 	</select>
 	
+	<!-- 상품의 정보고시 항목 목록 -->
+	<select id="getNotiGoodsInfoList" parameterType="NotiInfo" resultType="NotiInfo">
+		/* TsaGoods.getNotiGoodsInfoList */
+		SELECT  N.SUPPLY_COMP_CD
+		      , N.NI_CLSF_CD
+		      , N.NI_ITEM_CD
+		      , FN_GET_CODE_NM('G005', N.NI_ITEM_CD) AS NI_ITEM_NM
+		      , CASE WHEN NI_ITEM_CD = 'G005_003' THEN NVL(G.COLOR_NM,N.NI_CONTENT)
+		             WHEN NI_ITEM_CD = 'G005_004' THEN NVL(G.SIZE_NAME,N.NI_CONTENT)
+		             WHEN NI_ITEM_CD = 'G005_006' THEN NVL(FN_GET_CODE_NM('G076', G.ORIGIN_CD),N.NI_CONTENT)
+		             WHEN NI_ITEM_CD = 'G005_097' AND FN_GET_CODE_NM('G076', G.ORIGIN_CD) IN ('대한민국', '한국', 'KOREA') THEN 'N'
+		             WHEN NI_ITEM_CD = 'G005_097' AND FN_GET_CODE_NM('G076', G.ORIGIN_CD) NOT IN ('대한민국', '한국', 'KOREA') THEN 'Y'
+		             WHEN NI_ITEM_CD = 'G005_005' AND G.BRAND_CD= 'T007' THEN G.SUPPLY_COMP_NM
+		             WHEN NI_ITEM_CD = 'G005_009' THEN NVL(G.MAKE_YMD, N.NI_CONTENT)
+		        ELSE N.NI_CONTENT
+		        END
+		        AS  NI_CONTENT
+		      , N.DISP_ORD
+		      , N.REQ_YN
+		      , N.DISP_YN
+		 FROM (
+		     SELECT G.GOODS_CD
+		         , G.ITEMKIND_CD
+		         , G.SUPPLY_COMP_CD
+		         , G.ORIGIN_CD
+		         , G.MAKE_YMD
+		         , (SELECT GROUP_CONCAT(DISTINCT T.OPT_CD1) FROM TB_OPTION T WHERE T.GOODS_CD = G.GOODS_CD)  AS COLOR_NM
+		         , (SELECT GROUP_CONCAT(DISTINCT T.OPT_CD2) FROM TB_OPTION T WHERE T.GOODS_CD = G.GOODS_CD)  AS SIZE_NAME
+		         , G.BRAND_CD
+		         , (SELECT SUPPLY_COMP_NM FROM tb_supply_company SC WHERE SC.SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM 
+		     FROM TB_GOODS G
+		     WHERE 1=1
+		     AND G.GOODS_CD = #{goodsCd}
+		   ) G
+		  , TB_NOTI_INFO N
+		 WHERE 1 = 1
+		 AND N.NI_CLSF_CD = #{niClsfCd}
+		 AND N.SUPPLY_COMP_CD =  CASE G.SUPPLY_COMP_CD
+		                              WHEN 'S0001' THEN 'S0001'
+		                              WHEN 'S0002' THEN 'S0002'
+		                         ELSE 'E' END 
+		 ORDER BY  G.GOODS_CD , N.NI_CLSF_CD, N.DISP_ORD
+	</select>
+	
 	<!-- 상품 기본정보 이력 생성 -->
 	<insert id="createGoodsHst" parameterType="Goods">
 		/* TsaGoods.createGoodsHst */
@@ -1118,6 +1166,9 @@
 		<if test="dayMaxOrdQty != null and dayMaxOrdQty > 0" >
 		    , DAY_MAX_ORD_QTY = #{dayMaxOrdQty}
 		</if>
+		<if test="giftPackYn != null and giftPackYn != ''" >
+		    , GIFT_PACK_YN = #{giftPackYn}
+		</if>
 		WHERE GOODS_CD = #{goodsCd}
 	</update>
 	
@@ -1134,6 +1185,7 @@
 		       END AS GOODS_IMAGE_YN
 		FROM TB_GOODS A
 		LEFT OUTER JOIN TB_GOODS_IMG B ON A.GOODS_CD = B.GOODS_CD
+		                               AND A.MAIN_COLOR_CD = B.COLOR_CD
 		WHERE 1 = 1
 		<choose>
 		<when test="goodsCd != null and goodsCd != ''">
@@ -1166,6 +1218,7 @@
 		     , GOODS_SNM1
 		     , ITEMKIND_CD
 		     , SELF_MALL_YN
+		     , GIFT_PACK_YN
 		     , DATE_FORMAT(FRST_CFRM_DT, '%Y%m%d%H%i%S') AS FRST_CFRM_DT
 		     , UPD_NO
 		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
@@ -1200,15 +1253,15 @@
 		       G.STYLE_YEAR,';',
 		       FN_GET_CODE_NM('G006',G.SEASON_CD),';',
 		       FN_GET_CODE_NM('G007',G.SEX_GB),';',
-		       G.COLOR_CD,';',
+		      /* G.COLOR_CD,';',
 		       C.COLOR_ENM,';',
-		       C.COLOR_KNM,';',
+		       C.COLOR_KNM,';',*/
 		       REPLACE(I.ITEMKIND_NM,'>',';')
 		       )) AS GOODS_SNM
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
-		LEFT OUTER JOIN TB_COLOR C ON G.COLOR_CD = C.COLOR_CD
+		/*LEFT OUTER JOIN TB_COLOR C ON G.COLOR_CD = C.COLOR_CD*/
 		WHERE G.GOODS_CD = #{goodsCd}
 	</select>
 	
@@ -1338,6 +1391,31 @@
 		ORDER BY C.DISP_ORD, A.DISP_ORD
 	</select>
 	
+	<!-- 상품 색상목록 조회 -->
+	<select id="getGoodsColorList" parameterType="Goods" resultType="GoodsImg">
+		/* TsaGoods.getGoodsColorList */
+		SELECT A.GOODS_CD 
+		     , NVL(A.OPT_CD1, A.MAIN_COLOR_CD) AS OPT_CD1
+		     , A.MAIN_COLOR_CD
+		     , IF(A.MAIN_COLOR_CD = NVL(A.OPT_CD1, A.MAIN_COLOR_CD), 'Y','N') AS  MAIN_COLOR_YN 
+		     , GI.IMG_PATH1
+		     , GI.IMG_PATH6
+		     , NVL(GI.IMG_TYPE,'G030_A') AS IMG_TYPE
+		     , C.COLOR_ENM 
+		FROM (
+		      SELECT A.GOODS_CD 
+		           , A.MAIN_COLOR_CD 
+		           , B.OPT_CD1 
+		      FROM TB_GOODS A
+		      LEFT OUTER JOIN TB_OPTION B ON A.GOODS_CD = B.GOODS_CD
+		      WHERE A.GOODS_CD  = #{goodsCd}
+		      GROUP BY A.GOODS_CD , B.OPT_CD1
+		     ) A 
+		LEFT OUTER JOIN TB_COLOR C ON A.OPT_CD1 = C.COLOR_CD 
+		LEFT OUTER JOIN TB_GOODS_IMG GI ON A.GOODS_CD  = GI.GOODS_CD 
+		                                AND A.OPT_CD1 = GI.COLOR_CD
+	</select>
+	
 	<!-- 구성상품 목록 -->
 	<select id="getGoodsDetailComposeList" parameterType="Goods" resultType="GoodsCompose">
 		/* TsaGoods.getGoodsDetailComposeList */
@@ -1369,6 +1447,7 @@
 		FROM TB_GOODS_COMPOSE A
 		INNER JOIN  TB_GOODS B ON A.COMPS_GOODS_CD = B.GOODS_CD
 		LEFT OUTER JOIN TB_GOODS_IMG I ON A.COMPS_GOODS_CD = I.GOODS_CD
+		                               AND B.MAIN_COLOR_CD = I.COLOR_CD
 		WHERE A.GOODS_CD = #{goodsCd}
 		ORDER BY A.DISP_ORD 
 	</select>
@@ -1514,6 +1593,7 @@
 		  , AGE_GRP_CD = #{ageGrpCd}
 		  , SELL_FEE_RATE = #{sellFeeRate}
 		  , GIFT_PACK_YN = #{giftPackYn}
+		  , MAIN_COLOR_CD = #{mainColorCd}
 		  , UPD_NO = #{updNo}
 		  , UPD_DT = NOW()
 		WHERE GOODS_CD = #{goodsCd}
@@ -1656,8 +1736,8 @@
 		VALUES (
 		       #{goodsCd}
 		     , #{optCd}
-		     , #{optNm1}
-		     , #{optNm2}
+		     , #{optCd1}
+		     , #{optCd2}
 		     , #{baseStockQty}
 		     , #{currStockQty}
 		     , #{addPrice}
@@ -1671,8 +1751,6 @@
 		)
 		ON DUPLICATE KEY UPDATE 
 		        BASE_STOCK_QTY = #{baseStockQty}
-		      , OPT_CD1 = #{optCd1}
-		      , OPT_CD2 = #{optCd2}
 		      , ADD_PRICE = #{addPrice}
 		      , SOLDOUT_YN = #{soldoutYn}
 		      , DISP_ORD = #{dispOrd}

+ 24 - 5
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -32,6 +32,7 @@
 				<input type="hidden" id="goodsImageYn" name="goodsImageYn" />
 				<input type="hidden" id="niClsfNm" name="niClsfNm" />
 				<input type="hidden" id="uploadGoodsUrl" name="uploadGoodsUrl" th:value="${@environment.getProperty('upload.goods.view')}"/>
+				<input type="hidden" id="mainColorCd" name="mainColorCd" />
 				<input type="hidden" id="goodsType" name="goodsType" />
 				<input type="hidden" id="goodsComposeList" name="goodsComposeList" />
 				<table class="frmStyle">
@@ -658,6 +659,8 @@
 			$('#goodsDetailForm').find('#styleYearTxt').html(result.styleYear);
 			$('#goodsDetailForm select[name=goodsGb]').val(result.goodsGb);
 			$('#goodsDetailForm input[name=goodsGbOrg]').val(result.goodsGb);
+			$('#goodsDetailForm input[name=mainColorCd]').val(result.mainColorCd);
+			
 
 			$("#goodsDetailForm input[name=goodsNm]").val(result.goodsNm);
 			$('#goodsDetailForm input[name=goodsNmOrg]').val(result.goodsNm);
@@ -1143,6 +1146,15 @@
 				});
 			}
 			
+			// 자사일 경우 대표색상 선택 여부
+			if ("Y" == $('#goodsDetailForm input[name=selfGoodsYn]').val()){
+				
+				if($("#goodsDetailForm input[name=basicColor]:checked").length == 0) {
+					mcxDialog.alert("대표색상을 선택해주세요.")
+					return false;
+				}
+			}
+			
 		}
 
 		if(optCheck) {
@@ -1486,6 +1498,8 @@
 			return false;
 		}
 		
+		var basicColor = $("#goodsDetailForm input[name=basicColor]:checked").val();
+		
 		var dcRate = 0;
 		var listPrice = $("#goodsDetailForm input[name=listPrice]").val().removeComma();
 		var currPrice = $("#goodsDetailForm input[name=currPrice]").val().removeComma();
@@ -1631,6 +1645,7 @@
 				}else{
 					$("#goodsDetailForm input[name=chDataYn]").val('N');
 				}
+				$("#goodsDetailForm input[name=mainColorCd]").val($("#goodsDetailForm input[name=basicColor]:checked").val());
 				
 				//구성상품
 				var allData = gagaAgGrid.getAllRowData(gridGoodsComposeOptions);
@@ -1692,7 +1707,7 @@
 	}
 
 	//상품기본정보 변경여부 확인
-	var fnChangeCheck = function(){
+	var fnChangeCheck = function(){debugger;
 		
 		//상품타이틀
 		if ($("#goodsDetailForm input[name=goodsTnmOrg]").val() != $("#goodsDetailForm input[name=goodsTnm]").val()){
@@ -1731,13 +1746,14 @@
 			return true;
 		}
 		
-		//자사일경우만
-		if($("#goodsDetailForm input[name=selfGoodsYn]").val() == 'Y' ){
+		//자사 일반상품만 
+		if($("#goodsDetailForm input[name=selfGoodsYn]").val() == 'Y' && $("#goodsDetailForm input[name=goodType]").val() == 'G056_N'){
 			//ERP재고연동여부
-			if ($("#goodsDetailForm input[name=erpStockLinkYnOrg]").val() != $("input[name=erpStockLinkYn]:checked").val()){
+			if ($("#goodsDetailForm input[name=erpStockLinkYnOrg]").val() != $("#goodsDetailForm input[name=erpStockLinkYn]:checked").val()){
 				return true;
 			}
 		}
+		
 		//자사몰 노출여부
 		if ($("#goodsDetailForm input[name=selfMallYnOrg]").val() != $("input[name=selfMallYn]:checked").val()){
 			return true;
@@ -1790,7 +1806,10 @@
 		if ($("#goodsDetailForm input[name=sellFeeRateOrg]").val() != $("#goodsDetailForm input[name=sellFeeRate]").val()){
 			return true;
 		}
-
+		// 메인 색상코드
+		if ($("#goodsDetailForm input[name=mainColorCd]").val() != $("#goodsDetailForm input[name=basicColor]:checked").val()){
+			return true;
+		}
 		
 		return false;
 	}

+ 23 - 26
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html

@@ -14,7 +14,7 @@
  * 1.0  2020.10.26   eskim       수정
  *******************************************************************************
  -->
-	<table class="frmStyle">
+	<table class="frmStyle" th:with="uploadGoodsUrl=${@environment.getProperty('upload.goods.view')},uxImgUrl=${@environment.getProperty('domain.uximage')}">
 		<colgroup>
 			<col width="100px"/>
 			<col width="100px"/>
@@ -31,30 +31,27 @@
 			<th>색상</th>
 			<th>이미지관리</th>
 		</tr>
+		<tbody id="colorList" >
+		<th:block  th:if="${goodsColorList}" th:each="goodsColor, sizeStatus : ${goodsColorList}">
 		<tr>
-			<td class="aC">1</td>
-			<td class="aC"><label class="rdoBtn"><input type="radio" name="A" id="A" value="Y"  checked/></label></td>
-			<td class="aC"><img alt="" src="http://image.istyle24.com/Upload/ProductImage/0000004766/20200826/14505664_L.jpg?RS=560" width="60px"></td>
-			<td class="aC">BK</td>
-			<td class="aC">BLACK</td>
-			<td><button type="button" class="btn btn-base btn-lg" onclick="fnGoodsDetailImg('BK')">등록</button></td>
-		</tr>
-		<tr>
-			<td class="aC">2</td>
-			<td class="aC"><label class="rdoBtn"><input type="radio" name="A" id="A" value="Y"  /></label></td>
-			<td class="aC"><img alt="" src="http://image.istyle24.com/Upload/ProductImage/0000004766/20200826/14505664_L.jpg?RS=560" width="60px"></td>
-			<td class="aC">BK</td>
-			<td class="aC">BLACK</td>
-			<td><button type="button" class="btn btn-base btn-lg" onclick="fnGoodsDetailImg('BK')">등록</button></td>
-		</tr>
-		<tr>
-			<td class="aC">3</td>
-			<td class="aC"><label class="rdoBtn"><input type="radio" name="A" id="A" value="Y"  /></label></td>
-			<td class="aC"><img alt="" src="http://image.istyle24.com/Upload/ProductImage/0000004766/20200826/14505664_L.jpg?RS=560" width="60px"></td>
-			<td class="aC">BK</td>
-			<td class="aC">BLACK</td>
-			<td><button type="button" class="btn btn-base btn-lg" onclick="fnGoodsDetailImg('BK')">등록</button></td>
+			<td class="aC" th:text="${sizeStatus.count}">1</td>
+			<td class="aC"><label class="rdoBtn"><input type="radio" name="basicColor" th:value="${goodsColor.optCd1}"  th:checked="${goodsColor.mainColorYn =='Y'}" /></label></td>
+			<td class="aC">
+				<th:block th:if="${goodsColor.imgType == 'G030_A'}">
+					<img width="60" th:if="${goodsColor.imgPath6}" th:src="${goodsColor.imgPath6}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/image/no.gif'}+'\';'" alt="">
+					<img width="60" th:unless="${goodsColor.imgPath6}" th:src="${goodsColor.imgPath1}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/image/no.gif'}+'\';'" alt="">
+				</th:block>
+				<th:block th:unless="${goodsColor.imgType == 'G030_A'}">
+					<img width="60" th:if="${goodsColor.imgPath6}" th:src="${uploadGoodsUrl+goodsColor.imgPath6}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/image/no.gif'}+'\';'" alt="">
+					<img width="60" th:unless="${goodsColor.imgPath6}" th:src="${uploadGoodsUrl+goodsColor.imgPath1}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/image/no.gif'}+'\';'" alt="">
+				</th:block>
+			</td>	
+			<td class="aC" th:text="${goodsColor.optCd1}">BK</td>
+			<td class="aC" th:text="${goodsColor.colorEnm}">BLACK</td>
+			<td><button type="button" class="btn btn-base btn-lg" th:onclick="fnGoodsDetailImg([[${goodsColor.optCd1}]])" th:text="${#strings.isEmpty(goodsColor.imgPath1) ?'등록':'수정'}">등록</button></td>
 		</tr>
+		</th:block>
+		</tbody>
 	</table>
 
 	<table class="frmStyle">
@@ -98,16 +95,16 @@
 			<th>품절여부</th>
 		</tr>
 		<tbody id="optionList" >
-		<th:block th:each="goodsSize, sizeStatus : ${goodsSizeList}">
+		<th:block  th:if="${goodsSizeList}" th:each="goodsSize, sizeStatus : ${goodsSizeList}">
 		<tr>
 			<td th:rowspan="${goodsSize.rcount}" th:text="${goodsSize.compsGoodsCd}" th:if="${goodsSize.rnum == 1}"></td>
 			<td><th:block th:text="${goodsSize.optCd1}"></th:block>
 				<input type="hidden" name="compsGoodsCd" th:value="${goodsSize.compsGoodsCd}" />
 				<input type="hidden" name="optCd" th:value="${goodsSize.optCd}" />
-				<input type="hidden" name="hidOptCd1" th:value="${goodsSize.optCd1}" />
+				<input type="hidden" name="optCd1" th:value="${goodsSize.optCd1}" />
 			</td>
 			<td><th:block th:text="${goodsSize.optCd2}"></th:block>
-				<input type="hidden" name="hidOptCd2" th:value="${goodsSize.optCd2}" />
+				<input type="hidden" name="optCd2" th:value="${goodsSize.optCd2}" />
 			</td>
 			<td><input type="text" class="w100p aR" name="addPrice" th:value="${goodsSize.addPrice}"  maxlength="7"  data-valid-type="numeric"/>
 				<input type="hidden" name="hidAddPrice" th:value="${goodsSize.addPrice}" />

+ 16 - 0
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -344,6 +344,18 @@
 								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntMrate')" >적용</button>
 							</td>
 						</tr>
+						<tr>
+							<th>선물 주문가능</th>
+							<td>
+								<select id="giftPackYnC" name="giftPackYnC">
+									<option value="">[선택]</option>
+									<option value="Y">가능</option>
+									<option value="N">불가</option>
+								</select>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('giftPackYn')" >적용</button>
+							</td>
+							<td colspan="6"></td>
+						</tr>
 					</table>
 				</li>
 			</ul>
@@ -731,6 +743,7 @@
 		var dayMaxOrdQtyVal = '';
 		var pntPrateVal = '';
 		var pntMrateVal = '';
+		var giftPackYnVal = '';
 
 		if (proc == "goodsStat") {
 			goodsStatVal = $(objId).val();
@@ -803,6 +816,8 @@
 				return;
 			}
 			pntMrateVal = $(objId).val();
+		}else if (proc == "giftPackYn") {
+			giftPackYnVal = $(objId).val();	
 		}else{
 			return;
 		}
@@ -829,6 +844,7 @@
 							,dayMaxOrdQty : dayMaxOrdQtyVal
 							,pntPrate : pntPrateVal
 							,pntMrate : pntMrateVal
+							,giftPackYn : giftPackYnVal
 							,procJob : proc
 							};