Browse Source

Merge branch 'eskim' into develop

eskim 5 năm trước cách đây
mục cha
commit
618b7d4894

+ 15 - 4
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -3,6 +3,7 @@ package com.style24.admin.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.CodiGoods;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsDesc;
@@ -229,7 +230,7 @@ public interface TsaGoodsDao {
 	 * @since 2020. 10. 23
 	 */
 	String getGoodsSnm(String goodsCd);
-	
+
 	/**
 	 * 상품검색어 수정
 	 *
@@ -238,7 +239,7 @@ public interface TsaGoodsDao {
 	 * @since 2020. 10. 23
 	 */
 	void updateGoodsSnm(Goods goods);
-	
+
 	/**
 	 * 상품 품목변경 고시정보 조회
 	 *
@@ -248,7 +249,7 @@ public interface TsaGoodsDao {
 	 * @since 2020. 10. 23
 	 */
 	Collection<GoodsNotiInfo> getNewNotiInfo(Goods goods);
-	
+
 	/**
 	 * 상품 품목변경 고시정보 삭제
 	 *
@@ -257,7 +258,7 @@ public interface TsaGoodsDao {
 	 * @since 2020. 10. 23
 	 */
 	void deleteGoodsNotiInfo(Goods goods);
-	
+
 	/**
 	 * 상품 고시 정보 수정
 	 *
@@ -267,5 +268,15 @@ public interface TsaGoodsDao {
 	 */
 	void saveGoodsNotiInfo(GoodsNotiInfo goodsNotiInfo);
 
+	/**
+	 * 코디 상품 목록 조회
+	 *
+	 * @param codiGoods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 26
+	 */
+	Collection<CodiGoods> getCodiGoodsList(CodiGoods codiGoods);
+
 
 }

+ 13 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -14,6 +14,7 @@ import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Brand;
+import com.style24.persistence.domain.CodiGoods;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsDesc;
@@ -691,4 +692,16 @@ public class TsaGoodsService {
 //			displayService.moveCategoryGoods(categoryGoods);
 //		}
 	}
+
+	/**
+	 * 코디 상품 목록 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 26
+	 */
+	public Collection<CodiGoods> getCodiGoodsList(CodiGoods codiGoods) {
+		return goodsDao.getCodiGoodsList(codiGoods);
+	}
 }

+ 102 - 1
style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -25,6 +25,7 @@ import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TsaPageRequest;
+import com.style24.persistence.domain.CodiGoods;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsHst;
@@ -311,7 +312,7 @@ public class TsaGoodsController extends TsaBaseController {
 	@PostMapping("/list")
 	@ResponseBody
 	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
-		//log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
+
 		GagaMap result = new GagaMap();
 
 		// 입점업체담당자는 업체코드 설정
@@ -650,6 +651,24 @@ public class TsaGoodsController extends TsaBaseController {
 //		return goodsService.getGoodsDetailExtendList(goods);
 //	}
 
+	/**
+	 * 코디 상품 목록 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 23
+	 */
+	@GetMapping("/detail/codi/list")
+	@ResponseBody
+	public Collection<CodiGoods> getGoodsDetailCodiList(Goods goods) {
+
+		CodiGoods codiGoods = new CodiGoods();
+		codiGoods.setGoodsCd(goods.getGoodsCd());
+
+		return goodsService.getCodiGoodsList(codiGoods);
+	}
+
 	/**
 	 * 상품 품목 변경 저장
 	 *
@@ -825,4 +844,86 @@ public class TsaGoodsController extends TsaBaseController {
 		return mav;
 	}
 
+	/**
+	 * 상품조회 팝업
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 26
+	 */
+	@GetMapping("/popup/list/form")
+	@ResponseBody
+	public ModelAndView relationListForm(GoodsSearch goodsSearch) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
+		// 상품상태
+		String[] exceptCds = {"G008_00"};
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
+		// 정상이월
+		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
+		// 성별
+		mav.addObject("sexGbList", rendererService.getAvailCommonCodeList("G007"));
+		// 시즌
+		mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
+		// 연령대
+		mav.addObject("ageGrpCdList", rendererService.getAvailCommonCodeList("G023"));
+		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+		// 품목
+		mav.addObject("itemkindList", rendererService.getAllItemkindList());
+		// 상품유형
+		mav.addObject("goodsTypeList", rendererService.getAvailCommonCodeList("G056"));
+		// MD
+		mav.addObject("brandMdList", rendererService.getBrandMdList());
+
+		mav.addObject("params", goodsSearch);
+
+		mav.setViewName("goods/GoodsPopupListForm");
+
+		return mav;
+	}
+
+	/**
+	 * 상품조회 팝업 조회
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 26
+	 */
+	@PostMapping("/popup/list")
+	@ResponseBody
+	public GagaMap getPopupGoodsList(@RequestBody GoodsSearch goodsSearch) {
+
+		GagaMap result = new GagaMap();
+
+		// 입점업체담당자는 업체코드 설정
+		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
+			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
+			goodsSearch.setMdId(Integer.toString(TsaSession.getInfo().getUserNo()));
+		}
+
+		// multi row 검색관련 처리
+		if (!StringUtils.isEmpty(goodsSearch.getCondition())) {
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+
+			if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
+				goodsSearch.setSearchGb("EXTEND");
+			} else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
+				goodsSearch.setSearchGb("MASTER");
+			}
+		}
+
+		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
+
+		result.set("pageing", goodsSearch);
+		result.set("goodsList", goodsService.getGoodsList(goodsSearch));
+
+		return result;
+	}
+
 }

+ 29 - 0
style24.admin/src/main/java/com/style24/persistence/domain/CodiGoods.java

@@ -0,0 +1,29 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 코드 상품 Domain
+ * @author eskim
+ * @since 2020. 10. 26
+ */
+@SuppressWarnings("serial")
+@Data
+public class CodiGoods extends TscBaseDomain {
+
+	private String goodsCd;
+	private String codiGoodsCd;
+	private int dispOrd;
+	private String delYn;
+
+	private int currPrice;
+	private String goodsStat;
+	private String formalGb;
+	private String imgType;
+	private String imgPath1;
+	private String imgPath6;
+
+}
+

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

@@ -82,7 +82,7 @@ public class Goods extends TscBaseDomain {
 	private String chNotiYn = "N";
 	private String chStockDataYn = "N";
 	private String chGoodsStatYn = "N";
-	private String stockQtySum;
+	private int stockQtySum;
 	private String goodsImageYn;
 	private String itemkindNm;
 	private String niClsfCd;
@@ -108,7 +108,7 @@ public class Goods extends TscBaseDomain {
 //	private String goodsSizeCd;
 //	private String sizeSoldoutYn;
 //	private String siteCd;
-//	private Integer sellDay15Qty;
+	private int sellDay15Qty;
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsCd;

+ 26 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -253,6 +253,7 @@
 		    /*, (CASE WHEN Z.GOODS_TYPE = 'N' THEN (SELECT NVL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = Z.GOODS_CD) 
 		            ELSE (SELECT NVL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_EXTEND WHERE GOODS_CD = Z.GOODS_CD) 
 		            END) AS STOCK_QTY_SUM */
+		    , 0 AS STOCK_QTY_SUM
 		    , (SELECT ITEMKIND_NM FROM TB_ITEMKIND WHERE ITEMKIND_CD = Z.ITEMKIND_CD ) AS ITEMKIND_NM
 		    , FN_GET_USER_NM(REG_NO) AS REG_NM
 		    , FN_GET_USER_NM(UPD_NO) AS UPD_NM
@@ -1142,4 +1143,29 @@
 		    )
 	</update>
 	
+	<!-- 코디 상품 목록 조회  -->
+	<select id="getCodiGoodsList" parameterType="CodiGoods" resultType="CodiGoods">
+		/* TsaGoods.getCodiGoodsList */
+		SELECT A.GOODS_CD
+		     , A.CODI_GOODS_CD
+		     , A.DISP_ORD
+		     , A.DEL_YN
+		     , G.GOODS_NM
+		     , G.CURR_PRICE
+		     , G.GOODS_STAT
+		     , G.FORMAL_GB
+		     , GI.IMG_TYPE
+		     , GI.IMG_PATH1
+		     , GI.IMG_PATH6
+		     , FN_GET_USER_NM(A.UPD_NO) AS UPD_NM
+		     , A.UPD_NO
+		     , DATE_FORMAT(A.UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		FROM TB_CODI_GOODS A
+		INNER JOIN TB_GOODS G ON A.CODI_GOODS_CD = G.GOODS_CD
+		LEFT OUTER JOIN TB_GOODS_IMG GI ON A.CODI_GOODS_CD = GI.GOODS_CD
+		WHERE DEL_YN = 'N'
+		AND A.GOODS_CD = #{goodsCd}
+		ORDER BY A.DISP_ORD
+	</select>
+	
 </mapper>

+ 138 - 29
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -76,7 +76,7 @@
 							<li><a href="#goodstab2">옵션/재고정보</a></li>
 							<li><a href="#goodstab3">상품상세정보</a></li>
 							<li id="goodsNotiTab"><a href="#goodstab4">고시정보</a></li>
-							<li id="goodsExtmallTab"><a href="#goodstab5">외부몰가격정보</a></li>
+							<li id="goodsCodiTab"><a href="#goodstab5">코디상품</a></li>
 							<li id="goodsExtendTab" style="display:none;"><a href="#goodstab6">구성상품</a></li>
 							<li><a href="#goodstab7">변경이력</a></li>
 						</ul>
@@ -181,12 +181,7 @@
 									<tr id="erplinkarea">
 										<th>원산지</th>
 										<td><span id="makeNmTxt"></span></td>
-										<th>ERP가격연동여부<em class="required" title="필수"></em></th>
-										<td>
-											<label class="rdoBtn"><input type="radio" name="erpPriceLinkYn" id="erpPriceLinkYnY" value="Y"/>Y</label>
-											<label class="rdoBtn"><input type="radio" name="erpPriceLinkYn" id="erpPriceLinkYnN" value="N"/>N</label>
-											<input type="hidden" id="erpPriceLinkYnOrg" name="erpPriceLinkYnOrg"/>
-										</td>
+										
 										<th>상품구분<em class="required" title="필수"></em></th>
 										<td>
 											<select  name="goodsGb" id="goodsGb">
@@ -195,6 +190,8 @@
 											</select>
 											<input type="hidden" id="goodsGbOrg" name="goodsGbOrg"/>
 										</td>
+										<th>가격변경일</th>
+										<td colspan="3"><span id="priceUpdDtTxt"></span></td>
 									</tr>
 									<tr>
 										<th>정상가</th>
@@ -205,13 +202,8 @@
 										<td><input type="text" class="w80p aR" id="currPrice" name="currPrice" maxlength="10" data-valid-type="integer"/> 원
 											<input type="hidden" id="currPriceOrg" name="currPriceOrg"/>
 										</td>
-										<th>가격변경일</th>
-										<td colspan="3"><span id="priceUpdDtTxt"></span></td>
-									</tr>
-									<tr>
 										<th>할인율</th>
 										<td class="aR" ><span id="dcRateTxt"></span> %  <input type="hidden" id="dcRate" name="dcRate"/></td>
-										<td colspan="5"></td>
 									</tr>
 									<tr id="selfGoodsNSellFeeRate">
 										<th>최초승인일</th>
@@ -395,17 +387,24 @@
 							<!-- //TAB4 CONTENTS AREA -->
 						</li>
 						<!-- //TAB4 : 고시정보 -->
-						<!-- TAB5 : 추가정보 -->
+						<!-- TAB5 : 코디정보 -->
 						<li class="tab" id="goodstab5">
 							<!-- TAB6 CONTENTS AREA -->
 							<div class="panelStyle">
 								<!-- 내용 삽입 -->
-								<div id="gridGoodsExtMallPriceList" style="height: 550px;" class="ag-theme-balham"></div>
+								<ul class="panelBar">
+									<li class="right">
+										<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">양식다운로드</button>
+										<button type="button" class="btn btn-success btn-lg" id="btnCodiGoodsExcel">엑셀조회</button>
+										<button type="button" class="btn btn-base btn-lg" onclick="fnOpenCodiGoodsPopup()">상품조회</button>
+									</li>
+								</ul>
+								<div id="gridGoodsCodiList" style="height: 480px;" class="ag-theme-balham lh60"></div>
 								<!-- 내용 삽입 -->
 							</div>
 							<!-- //TAB6 CONTENTS AREA -->
 						</li>
-						<!-- //TAB5 : 추가정보 -->
+						<!-- //TAB5 : 코디정보 -->
 						<!-- TAB6 : 구성상품 -->
 						<li class="tab" id="goodstab6">
 							<!-- TAB6 CONTENTS AREA -->
@@ -416,7 +415,7 @@
 									<button type="button" class="btn btn-success btn-lg" id="btnGoodsDealSearchExcel">엑셀조회</button>
 									<button type="button" class="btn btn-base btn-lg" onclick="fnOpenGoodsDetailPopup()">상품조회</button>
 								</div>
-								<div id="gridGoodsExtendList" style="height: 500px;" class="ag-theme-balham lh60"></div>
+								<div id="gridGoodsExtendList" style="height: 550px;" class="ag-theme-balham lh60"></div>
 								<!-- 내용 삽입 -->
 							</div>
 							<!-- //TAB6 CONTENTS AREA -->
@@ -427,7 +426,7 @@
 							<!-- TAB8 CONTENTS AREA -->
 							<div class="panelStyle">
 								<!-- 내용 삽입 -->
-								<div id="gridGoodsHstoryList" style="height: 550px;" class="ag-theme-balham"></div>
+								<div id="gridGoodsHstoryList" style="height: 500px;" class="ag-theme-balham"></div>
 								<!-- 내용 삽입 -->
 							</div>
 							<!-- //TAB5 CONTENTS AREA -->
@@ -523,9 +522,9 @@
 			,cellRenderer: function(params) {
 				if (params.data.imgType == "A"){
 					if(!gagajf.isNull(params.data.imgPath6)){
-						return '<img width="60" src="'+ uploadGoodsUrl+params.data.imgPath6.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+						return '<img width="60" src="'+ uploadGoodsUrl+params.data.imgPath6 + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
 					}else{
-						return '<img width="60" src="'+ uploadGoodsUrl+params.value.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+						return '<img width="60" src="'+ uploadGoodsUrl+params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
 					}	
 				}else{
 					if(!gagajf.isNull(params.data.imgPath6)){
@@ -554,9 +553,6 @@
 		{headerName: "상품판매가", field: "extendCurrPrice" , width: 150, cellClass: 'text-right'
 			,valueFormatter: function(params) { return Number(params.value).addComma();}
 		},
-		/* {headerName: "상품임직원판매가", field: "extendStaffCurrPrice" , width: 150, cellClass: 'text-right'
-			,valueFormatter: function(params) { return Number(params.value).addComma();}
-		}, */
 		{headerName: "기준여부(품목-카테고리)", field: "baseYn", width: 180, cellClass: 'text-center'},
 		{headerName: "전시여부", field: "useYn", width: 100, cellClass: 'text-center',editable: true,
 			cellEditor: 'agRichSelectCellEditor',
@@ -575,28 +571,82 @@
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 		},
-		{headerName: "등록자", field: "regId", width: 100, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
 		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center' ,
 			cellRenderer: function(params) {
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 		},
-		{headerName: "수정자", field: "updId", width: 100, cellClass: 'text-center'}
+		{headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'}
+	];
+	
+	// specify the columns - 코디상품
+	var columnCodiGoodsDefs = [
+		{headerName: "정렬", field: "dispOrd", width: 70 ,hide: false, cellClass: 'text-center',  rowDrag: true },
+		{headerName: "CRUD", field: "crud", width: 75, minWidth: 75, hide: true},
+		//{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				if (params.data.imgType == "A"){
+					if(!gagajf.isNull(params.data.imgPath6)){
+						return '<img width="60" src="'+ uploadGoodsUrl+params.data.imgPath6 + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+					}else{
+						return '<img width="60" src="'+ uploadGoodsUrl+params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+					}	
+				}else{
+					if(!gagajf.isNull(params.data.imgPath6)){
+						return '<img width="60" src="'+ params.data.imgPath1 + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+					}else{
+						return '<img width="60" src="'+ params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+					}
+					
+				}
+			}
+		},
+		{headerName: "상품코드", field: "codiGoodsCd" , width: 130, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm" , width: 250, cellClass: 'text-left'},
+		{headerName: "판매가", field: "currPrice" , width: 100, cellClass: 'text-right'
+			,valueFormatter: function(params) { return Number(params.value).addComma();}
+		},
+		{headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
+		},
+		{headerName: "상품명", field: "goodsNm" , width: 180, cellClass: 'text-left'},
+		{headerName: "정상이월구분", field: "formalGb" , width: 100, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(formalGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(formalGbList, params.newValue); }
+		},
+		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center' ,
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
+		{headerName: "Master상품코드", field: "goodsCd", width: 150, cellClass: 'text-center', hide: true}
+		
 	];
 
 	// Get GridOptions
 	var gridGoodsHstoryOptions = gagaAgGrid.getGridOptions(columnGoodsHstoryDefs);
 	gridGoodsHstoryOptions.enableBrowserTooltips = true;
-	
+	var gridCodiGoodsOptions = gagaAgGrid.getGridOptions(columnCodiGoodsDefs);
+	gridCodiGoodsOptions.enableBrowserTooltips = true;
 	var gridGoodsExtendOptions = gagaAgGrid.getGridOptions(columnGoodsExtendDefs);
+	gridGoodsExtendOptions.enableBrowserTooltips = true;
 	// 드래그
 	gridGoodsExtendOptions.suppressRowClickSelection = true;
 	gridGoodsExtendOptions.rowDragManaged = true;
 	//gridGoodsExtendOptions.rowDeselection = true;
 	//gridGoodsExtendOptions.enableMultiRowDragging = true;
 	//gridGoodsExtendOptions.rowSelection = 'multiple';
+	gridCodiGoodsOptions.suppressRowClickSelection = true;
+	gridCodiGoodsOptions.rowDragManaged = true;
 	
 	gridGoodsExtendOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+	gridCodiGoodsOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
 	
 	//기준여부 표시
 	gridGoodsExtendOptions.getRowStyle = function(params) {
@@ -604,8 +654,6 @@
 			return { background: '#1ab394' };
 		}
 	}
-	
-	
 
 	// 상품상세 조회
 	var fnGoodsDeailSearch = function() {
@@ -835,6 +883,8 @@
 			//fnGoodsDetailSizeStockSearch(params);
 			//정보고시
 			fnGoodsDetailNotiInfoSearch(params);
+			//코디상품
+			fnGoodsDetailCodiSearch();
 			
 			//구성상품
 			if ("G056_S" == result.goodsType || "G056_D" == result.goodsType){
@@ -867,7 +917,6 @@
 		}else{	//딜
 			gagaAgGrid.showOrHideColumn(gridGoodsExtendOptions, 'qty', false);
 			gagaAgGrid.showOrHideColumn(gridGoodsExtendOptions, 'extendCurrPrice', false);
-			//gagaAgGrid.showOrHideColumn(gridGoodsExtendOptions, 'extendStaffCurrPrice', false);
 		}
 		gagaAgGrid.fetch("/goods/detail/extend/list?goodsCd=" + params.goodsCd , gridGoodsExtendOptions);
 	}	
@@ -877,6 +926,11 @@
 		gagaAgGrid.fetch("/goods/detail/hst/list?goodsCd=" + $('#goodsDetailForm input[name=goodsCd]').val() , gridGoodsHstoryOptions);
 	}
 	
+	//코디상품
+	var fnGoodsDetailCodiSearch = function() {
+		gagaAgGrid.fetch("/goods/detail/codi/list?goodsCd=" + $('#goodsDetailForm input[name=goodsCd]').val() , gridCodiGoodsOptions);
+	}
+	
 	//정보고시 콜백
 	var fnGoodsDetailNotiInfoSearchCallback = function(result) {
 		if (result == null) return;
@@ -1823,11 +1877,12 @@
 		});
 	});
 	
+	// 구성상품 조회 팝업
 	var fnOpenGoodsDetailPopup = function() {
 		cfnOpenGoodsPopup('fnGoodsDetailGoodsDeal');
 	}
 
-	// 상품추가
+	// 구성상품 조회 팝업 - 상품추가
 	var fnGoodsDetailGoodsDeal = function(goodsData) {
 		if (goodsData.length < 1) return;
 		
@@ -1878,6 +1933,59 @@
 		});
 		gridGoodsExtendOptions.api.refreshCells();
 	}
+	
+	// 코디상품 조회 팝업
+	var fnOpenCodiGoodsPopup = function() {
+		cfnOpenGoodsPopup('fnGoodsDetailCodiGoods');
+	}
+
+	// 코디상품 조회 팝업 - 상품추가
+	var fnGoodsDetailCodiGoods = function(goodsData) {
+		if (goodsData.length < 1) return;
+		
+		// 기존상품
+		var oldCodiGoodsList = gagaAgGrid.getAllRowData(gridCodiGoodsOptions);
+		var idx = oldCodiGoodsList.length+1; 
+		var goodsCd = $('#goodsDetailForm input[name=goodsCd]').val();
+		var isExist = false;
+		goodsData.forEach(function(goods){
+			isExist = false;
+
+			gridCodiGoodsOptions.api.forEachNode(function(rowNode, index) {
+
+				if (goods.goodsCd == rowNode.data.codiGoodsCd){
+					isExist = true;
+				}
+			});
+			
+			if (goods.goodsCd == goodsCd) {
+				isExist = true;
+			}
+			
+			if(!isExist){
+				
+				var data = { 
+						  goodsCd : goodsCd
+						, codiGoodsCd: goods.goodsCd
+						, dispOrd: idx
+						, delYn: 'N'
+						, goodsStat : goods.goodsStat
+						, useYn: 'Y'
+						, goodsNm : goods.goodsNm
+						, currPrice : goods.currPrice
+						, formalGb : goods.formalGb
+						, imgType : goods.imgType
+						, imgPath1 : goods.imgPath1
+						, imgPath6 : goods.imgPath6
+						};
+				gridCodiGoodsOptions.api.updateRowData({add: [data], addIndex: idx});
+				
+				idx++;
+			
+			}
+		});
+		gridGoodsExtendOptions.api.refreshCells();
+	}
 
 	//엑셀 상품 조회
 	$('#btnGoodsDealSearchExcel').on('click', function() {
@@ -1913,6 +2021,7 @@
 		gagaSe.createSmartEditor(seOptions, 'goodsMobileDownDesc');
 
 		gagaAgGrid.createGrid('gridGoodsHstoryList', gridGoodsHstoryOptions);
+		gagaAgGrid.createGrid('gridGoodsCodiList', gridCodiGoodsOptions);
 		gagaAgGrid.createGrid('gridGoodsExtendList', gridGoodsExtendOptions);
 
 		fnGoodsDeailSearch();

+ 121 - 123
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -205,17 +205,17 @@
 		<!-- 패널 영역1 -->
 		<div class="panelStyle">
 			<!-- 검색결과 영역 -->
-				<!-- 상단버튼 영역  -->
-				<ul class="panelBar">
-					<li>
-						<button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('');">엑셀다운로드</button>
-						<button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('Y');">엑셀다운로드(이미지포함)</button>
-						<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF013');">상품엑셀조회 양식 다운로드</button>
-						<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelUpLoad">엑셀조회</button>
-					</li>
-					<li class="right">
-						검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
-						쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('');">엑셀다운로드</button>
+					<button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('Y');">엑셀다운로드(이미지포함)</button>
+					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF013');">상품엑셀조회 양식 다운로드</button>
+					<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelUpLoad">엑셀조회</button>
+				</li>
+				<li class="right">
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
 					<select id="pageSize" name="pageSize">
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
@@ -223,115 +223,115 @@
 						<option value="1000">1000개씩 보기</option>
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
-					</li>
-				</ul>
-				<label class="off">
-					<a href="javascript:void(0);" id="GoodsExcelList" style="display: none;">상품목록 엑셀다운로드</a>
-				</label>
-				<!-- //상단버튼 영역  -->
-				<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>
-				<ul class="panelBar">
-					<li class="center">
-						<div class="tablePaging" id="goodsListPagination"></div>
-					</li>
-				</ul>
-				<ul class="panelBar">
-					<li class="right">
-						<button type="button" class="btn btn-info btn-sm"  onclick="fnGoodsStatArea();" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">상태일괄적용</button>
-					</li>
-				</ul>
-				<ul class="boxContent off" id="goodsStatArea">
-					<li class="pad20">
-						<table class="frmStyle">
-							<colgroup>
-								<col style="width: 7%;"/>
-								<col style="width: 18%;"/>
-								<col style="width: 7%;"/>
-								<col style="width: 18%;"/>
-								<col style="width: 7%;"/>
-								<col style="width: 18%;"/>
-								<col style="width: 7%;"/>
-								<col/>
-							</colgroup>
-							<tr>
-								<th>상품상태</th>
-								<td>
-									<select  name="goodsStatC" id="goodsStatC">
-										<option value="">[선택]</option>
-										<option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsStat')">적용</button>
-								</td>
-								<th>재고연동여부</th>
-								<td >
-									<select id="erpStockLinkYnC" name="erpStockLinkYnC">
-										<option value="">[선택]</option>
-										<option value="Y">연동</option>
-										<option value="N">비연동</option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('erpStockLinkYn')" >적용</button>
-								</td>
-								<th>정상/이월 구분</th>
-								<td>
-									<select  name="formalGbC" id="formalGbC">
-										<option value="">[선택]</option>
-										<option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('formalGb')" >적용</button>
-								</td>
-								<th>반품가능여부</th>
-								<td>
-									<select id="returnableYnC" name="returnableYnC">
-										<option value="">[선택]</option>
-										<option value="Y">가능</option>
-										<option value="N">불가</option>
-									</select>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('returnableYn')" >적용</button>
-								</td>
-							</tr>
-							<tr>
-								<th>상품타이틀</th>
-								<td colspan="3">
-									<input id="goodsTnmC" name="goodsTnmC" type="text" class="w200" maxlength="70"/>
-									<label class="chkBox"><input type="checkbox" name="blankFlag" value="Y"/>BLANK 적용<span></span></label>
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsTnm')" >적용</button>
-								</td>
-								<th>무료배송기준</th>
-								<td>
-									<input id="minOrdAmtC" name="minOrdAmtC" type="text" class="w100"  data-valid-type="numeric" maxlength="10"/>이상 구매시 무료
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('minOrdAmt')" >적용</button>
-								</td>
-								<th>ID당1일최대구매수량</th>
-								<td>
-									<input id="dayMaxOrdQtyC" name="dayMaxOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('dayMaxOrdQty')" >적용</button>
-								</td>
-							</tr>
-							<tr>
-								<th>최소주문수량</th>
-								<td>
-									<input id="minOrdQtyC" name="minOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('minOrdQty')" >적용</button>
-								</td>
-								<th>최대주문수량</th>
-								<td>
-									<input id="maxOrdQtyC" name="maxOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('maxOrdQty')" >적용</button>
-								</td>
-								<th>PC포인트</th>
-								<td>
-									<input type="text" class="w100 aR" id="pntPrateC" name="pntPrateC" data-valid-type="numeric" maxlength="3"/> %
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntPrate')" >적용</button>
-								</td>
-								<th>모바일포인트</th>
-								<td>
-									<input type="text" class="w100 aR" id="pntMrateC" name="pntMrateC" data-valid-type="numeric" maxlength="3"/> %
-									<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntMrate')" >적용</button>
-								</td>
-							</tr>
-						</table>
-					</li>
-				</ul>
+				</li>
+			</ul>
+			<label class="off">
+				<a href="javascript:void(0);" id="GoodsExcelList" style="display: none;">상품목록 엑셀다운로드</a>
+			</label>
+			<!-- //상단버튼 영역  -->
+			<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="goodsListPagination"></div>
+				</li>
+			</ul>
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-sm"  onclick="fnGoodsStatArea();" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">상태일괄적용</button>
+				</li>
+			</ul>
+			<ul class="boxContent off" id="goodsStatArea">
+				<li class="pad20">
+					<table class="frmStyle">
+						<colgroup>
+							<col style="width: 7%;"/>
+							<col style="width: 18%;"/>
+							<col style="width: 7%;"/>
+							<col style="width: 18%;"/>
+							<col style="width: 7%;"/>
+							<col style="width: 18%;"/>
+							<col style="width: 7%;"/>
+							<col/>
+						</colgroup>
+						<tr>
+							<th>상품상태</th>
+							<td>
+								<select  name="goodsStatC" id="goodsStatC">
+									<option value="">[선택]</option>
+									<option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+								</select>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsStat')">적용</button>
+							</td>
+							<th>재고연동여부</th>
+							<td >
+								<select id="erpStockLinkYnC" name="erpStockLinkYnC">
+									<option value="">[선택]</option>
+									<option value="Y">연동</option>
+									<option value="N">비연동</option>
+								</select>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('erpStockLinkYn')" >적용</button>
+							</td>
+							<th>정상/이월 구분</th>
+							<td>
+								<select  name="formalGbC" id="formalGbC">
+									<option value="">[선택]</option>
+									<option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+								</select>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('formalGb')" >적용</button>
+							</td>
+							<th>반품가능여부</th>
+							<td>
+								<select id="returnableYnC" name="returnableYnC">
+									<option value="">[선택]</option>
+									<option value="Y">가능</option>
+									<option value="N">불가</option>
+								</select>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('returnableYn')" >적용</button>
+							</td>
+						</tr>
+						<tr>
+							<th>상품타이틀</th>
+							<td colspan="3">
+								<input id="goodsTnmC" name="goodsTnmC" type="text" class="w200" maxlength="70"/>
+								<label class="chkBox"><input type="checkbox" name="blankFlag" value="Y"/>BLANK 적용<span></span></label>
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('goodsTnm')" >적용</button>
+							</td>
+							<th>무료배송기준</th>
+							<td>
+								<input id="minOrdAmtC" name="minOrdAmtC" type="text" class="w100"  data-valid-type="numeric" maxlength="10"/>이상 구매시 무료
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('minOrdAmt')" >적용</button>
+							</td>
+							<th>ID당1일최대구매수량</th>
+							<td>
+								<input id="dayMaxOrdQtyC" name="dayMaxOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('dayMaxOrdQty')" >적용</button>
+							</td>
+						</tr>
+						<tr>
+							<th>최소주문수량</th>
+							<td>
+								<input id="minOrdQtyC" name="minOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('minOrdQty')" >적용</button>
+							</td>
+							<th>최대주문수량</th>
+							<td>
+								<input id="maxOrdQtyC" name="maxOrdQtyC" type="text" class="w100" data-valid-type="numeric" />
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('maxOrdQty')" >적용</button>
+							</td>
+							<th>PC포인트</th>
+							<td>
+								<input type="text" class="w100 aR" id="pntPrateC" name="pntPrateC" data-valid-type="numeric" maxlength="3"/> %
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntPrate')" >적용</button>
+							</td>
+							<th>모바일포인트</th>
+							<td>
+								<input type="text" class="w100 aR" id="pntMrateC" name="pntMrateC" data-valid-type="numeric" maxlength="3"/> %
+								<button type="button" class="btn btn-dark btn-sm" onclick="fnChangeGoodsState('pntMrate')" >적용</button>
+							</td>
+						</tr>
+					</table>
+				</li>
+			</ul>
 			<!-- 검색결과 영역 -->
 		</div>
 		</form>
@@ -344,8 +344,6 @@
 	var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
 	var seasonList = gagajf.convertToArray([[${seasonList}]]);
 	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
-	var goodsImgParam = "?width=60&height=60";
-	var goodsImgBigParam = "?width=600&height=600";
 	var columnDefs = [];
 	columnDefs = [
 		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
@@ -603,7 +601,7 @@
 	$('#searchForm select[name=supplyCompCd]').on('change', function() {
 		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
 
-		if(sessRoleCd == "B000"){
+		if(sessRoleCd == "G001_B000"){
 			actionUrl = '/renderer/brand/AuthBrandlist';
 		}
 		

+ 517 - 0
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsPopupListForm.html

@@ -0,0 +1,517 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsPopupListForm.html
+ * @desc    : 상품 조회 팝업
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.26   eskim       최초 작성
+ *******************************************************************************
+ -->
+	<div class="modalPopup" data-width="1600">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<h2>상품조회</h2>
+			<button type="button" class="close" onclick="uiPopupClose('popupGoods')"><i class="fa fa-times"></i></button>
+		</div>
+		<!-- //TITLE -->
+		<form id="goodsPopupForm" name="goodsPopupForm" action="#" th:action="@{'/goods/popup/list'}">
+		<div class="panelContent">
+			<ul class="notice">
+				<li>아래 검색조건 중 <font color="red">업체, 키워드, 발생일</font>중 하나를 꼭 입력해 주세요.</li>
+			</ul>
+			<table class="frmStyle">
+				<colgroup>
+					<col style="width: 7%;"/>
+					<col style="width: 21%;"/>
+					<col style="width: 7%;"/>
+					<col style="width: 18%;"/>
+					<col style="width: 7%;"/>
+					<col style="width: 18%;"/>
+					<col style="width: 7%;"/>
+					<col/>
+				</colgroup>
+				<tr>
+					<th>업체/브랜드<em class="required" title="필수"></em></th>
+					<td colspan="3">
+						<select name="supplyCompCd" id="supplyCompCd">
+							<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
+							<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+						<span id="multiBrand"></span>
+					</td>
+					<th>상품타입</th>
+					<td>
+						<select name="goodsType" id="goodsType">
+							<option value="">[전체]</option>
+							<option th:if="${goodsTypeList}" th:each="oneData, status : ${goodsTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+					<th rowspan="4">키워드<em class="required" title="필수"></em></th>
+					<td rowspan="4">
+						<select name="search" id="search">
+							<option value="searchGoodsCd">상품코드</option>
+							<option value="searchGoodsNm">상품명</option>
+							<option value="searchGoodsNum">품번</option>
+							<option value="searchSupplyGoodsCd">업체상품코드</option>
+						</select>
+						<!-- <input type="text" class="w40p" name="condition" id="condition" maxlength="50"/> -->
+						<textarea class="textareaR3 w70p" name="condition" id="condition"></textarea>
+					</td>
+				</tr>
+				<tr>
+					<th>품목</th>
+					<td>
+						<div class="multiCheckBox"  style="width:300px">
+							<button type="button" class="sltBtn">[전체]</button>
+							<ul style="overflow:auto; height:170px;">
+								<li><label class="chkBox"><input type="checkbox" name="전체선택" id="multiItemkindCd" onclick="uifnAllCheck('multiItemkindCd')">전체선택</label></li>
+								<li th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}"><label class="chkBox"><input type="checkbox" name="multiItemkindCd" th:id="${'itemkindCd' + oneData.cd}" th:value="${oneData.cd}" ><th:block th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></th:block></label></li>
+							</ul>
+						</div>
+					</td>
+					<th>상품상태</th>
+					<td>
+						<div class="multiCheckBox"  style="width:200px">
+							<button type="button" class="sltBtn">[전체]</button>
+							<ul style="overflow:auto; height:170px">
+								<li><label class="chkBox"><input type="checkbox" name="전체선택" id="multiGoodsStat" onclick="uifnAllCheck('multiGoodsStat')">전체선택</label></li>
+								<li th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}"><label class="chkBox"><input type="checkbox" name="multiGoodsStat" th:id="${'goodsStat' + oneData.cd}" th:value="${oneData.cd}" ><th:block th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></th:block></label></li>
+							</ul>
+						</div>
+					</td>
+					<th>년도/시즌</th>
+					<td>
+						<select  name="styleYear" id="styleYear">
+							<option value="">[전체]</option>
+							<option value="2017">[2017] 2017</option>
+							<option value="2018">[2018] 2018</option>
+							<option value="2019">[2019] 2019</option>
+							<option value="2020">[2020] 2020</option>
+							<option value="2021">[2021] 2021</option>
+						</select>
+						<select  name="seasonCd" id="seasonCd">
+							<option value="">[전체]</option>
+							<option th:if="${seasonList}" th:each="oneData, status : ${seasonList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+				</tr>
+				<tr>
+					<th>정상/이월 구분</th>
+					<td>
+						<select  name="formalGb" id="formalGb">
+							<option value="">[전체]</option>
+							<option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+					<th>연령대</th>
+					<td>
+						<select  name="ageGrpCd" id="ageGrpCd">
+							<option value="">[전체]</option>
+							<option th:if="${ageGrpCdList}" th:each="oneData, status : ${ageGrpCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+					<th>성별</th>
+					<td>
+						<select  name="sexGb" id="sexGb">
+							<option value="">[전체]</option>
+							<option th:if="${sexGbList}" th:each="oneData, status : ${sexGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+				</tr>
+				<tr>
+					<th>재고연동여부</th>
+					<td>
+						<select  name="erpStockLinkYn" id="erpStockLinkYn">
+							<option value="">[전체]</option>
+							<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+					<th>자사몰노출여부</th>
+					<td>
+						<select  name="dispYn" id="dispYn">
+							<option value="">[전체]</option>
+							<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+					<th>품절여부</th>
+					<td>
+						<select  name="soldOutYn" id="soldOutYn">
+							<option value="">[전체]</option>
+							<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+				</tr>
+				<tr>
+					<th>반품가능여부</th>
+					<td>
+						<select  name="returnableYn" id="returnableYn">
+							<option value="">[전체]</option>
+							<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+						<!-- <label class="chkBox"><input type="checkbox" name="returnableYn" value="Y"/>반품가능</label>
+						<label class="chkBox"><input type="checkbox" name="changeableYn" value="Y"/>교환가능</label>
+						<label class="chkBox"><input type="checkbox" name="returnFeeFreeYn" value="Y"/>무료반품</label>
+						<label class="chkBox"><input type="checkbox" name="changeFeeFreeYn" value="Y"/>무료교환</label> -->
+					</td>
+					<th>담당MD</th>
+					<td>
+						<select  name="mdId" id="mdId">
+							<option value="">[전체]</option>
+							<option th:if="${brandMdList}" th:each="oneData, status : ${brandMdList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+						</select>
+					</td>
+					<th>판매가</th>
+					<td>
+						<input type="text" class="w90" name="currPriceSt" id="currPriceSt" maxlength="10" data-valid-type="numeric"/>원 ~ <input type="text" class="w90" name="currPriceEd" id="currPriceEd" maxlength="10" data-valid-type="numeric"/>원
+					</td>
+					<th>할인율</th>
+					<td>
+						<input type="text" class="w70" name="dcRateSt" id="dcRateSt" maxlength="3" data-valid-type="numeric"/> % ~ <input type="text" class="w70" name="dcRateEd" id="dcRateEd" maxlength="3" data-valid-type="numeric"/> %
+					</td>
+				</tr>
+				<tr>
+					<th>발생일<em class="required" title="필수"></em></th>
+					<td colspan="7" id="sellTermsP"></td>
+				</tr>
+			</table>
+			<ul class="panelBar">
+				<li class="center">
+					<button type="button" class="btn btn-gray btn-lg" id="btnPopupGoodsInit" >초기화</button>
+					<button type="button" class="btn btn-info btn-lg" id="btnPopupGoodsSearch" >조회</button>
+				</li>
+			</ul>
+			</form>
+			<ul class="panelBar">
+				<li>검색 결과 : <em><span id="gridRowTotalCount">0</span></em>개가 검색되었습니다.
+				<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+				<li class="right">
+					<select class="w100" name="pageSize" id="pageSize">
+						<option value="50" selected>50개</option>
+						<option value="100">100개</option>
+						<option value="500">500개</option>
+					</select>
+					<span class="btnRight" style="margin-top: 4px;">쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;</span>
+				</li>
+			</ul>
+			<div id="gridPopupGoodsList" style="width: 100%; height: 400px;" class="ag-theme-balham lh60"></div>
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="goodsPopupListPagination"></div>
+				</li>
+			</ul>
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btnRight btn btn-base btn-lg" id="btnPopupGoodsApply">적용</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+	</div>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var sessRoleCd = [[${sessionInfo.roleCd}]];
+	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
+	var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
+	var seasonList = gagajf.convertToArray([[${seasonList}]]);
+	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
+	
+	var popupGoodsColumnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: 'No', width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return cfnGridNumner('goodsPopupForm',params.node.rowIndex, 'A');}
+		},
+		{headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				if (params.data.imgType == "A"){
+					if(!gagajf.isNull(params.data.imgPath6)){
+						return '<img width="60" src="'+ uploadGoodsUrl+params.data.imgPath6 + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+					}else{
+						return '<img width="60" src="'+ uploadGoodsUrl+params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+					}	
+				}else{
+					if(!gagajf.isNull(params.data.imgPath6)){
+						return '<img width="60" src="'+ params.data.imgPath1 + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+					}else{
+						return '<img width="60" src="'+ params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+					}
+					
+				}
+			}
+		},
+		{headerName: "브랜드", field: "brandCd", width: 100, cellClass: 'text-center'},
+		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
+		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
+		{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-left'},
+		{headerName: "재고", field: "stockQtySum", width: 80, cellClass: 'text-right',
+			valueFormatter: function(params) {	return params.value.addComma();}
+		},
+		{headerName: "상품상태", field: "goodsStat" , width: 120, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
+		},
+		{headerName: "15일간판매수량", field: "sellDay15Qty", width: 120, cellClass: 'text-right',
+			valueFormatter: function(params) {	return params.value.addComma();}
+		},
+		{headerName: "년도", field: "styleYear" , width: 90, cellClass: 'text-center'},
+		{headerName: "시즌", field: "seasonCd" , width: 90, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(seasonList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(seasonList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(seasonList, params.newValue); }
+		},
+		{headerName: "정상가", field: "listPrice" , width: 100, cellClass: 'text-right'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "판매가", field: "currPrice" , width: 100, cellClass: 'text-right'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "할인율", field: "dcRate" , width: 90, cellClass: 'text-right'},
+		{headerName: "가격변경일", field: "priceUpdDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "이월구분", field: "formalGb", width: 100, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(formalGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(formalGbList, params.newValue); }
+		},
+		{headerName: "반품가능", field: "returnableYn" , width: 90, cellClass: 'text-center'},
+		{headerName: "수정일자", field: "updDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "수정자", field: "updNm" , width: 100, cellClass: 'text-center'}
+	];
+
+	// Get GridOptions
+	var popupGoodsGridOptions = gagaAgGrid.getGridOptions(popupGoodsColumnDefs);
+
+	// Add on options
+	popupGoodsGridOptions.suppressRowClickSelection = true;
+	popupGoodsGridOptions.rowSelection = 'multiple';
+
+	popupGoodsGridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+
+	popupGoodsGridOptions.getRowStyle = function(params) {
+		if ("G008_00" == params.data.goodsStat  || "G008_10" == params.data.goodsStat || "G008_20" == params.data.goodsStat || "G008_30" == params.data.goodsStat) {
+			return { background: '#23c6c8' };
+		}
+	}
+
+	// 초기화클릭시
+	$('#btnPopupGoodsInit').on('click', function() {
+		$('#goodsPopupForm')[0].reset();
+		//$("#goodsPopupForm input[type=radio]").removeClass("checked");
+		$("#goodsPopupForm input[type=checkbox]").removeClass("checked");
+		//$("#goodsPopupForm input[type=radio]").parent("label").removeClass("checked");
+		$("#goodsPopupForm input[type=checkbox]").parent("label").removeClass("checked");
+		$("#goodsPopupForm input[type=radio][checked]").parent("label").addClass("checked");
+	});
+
+	// 조회클릭시
+	$('#btnPopupGoodsSearch').on('click', function() {
+		fnPopupGoodsSearch();
+	});
+
+
+	// 조회
+	var fnPopupGoodsSearch = function() {
+
+		var formId = '#goodsPopupForm';
+		// Fetch data
+		//gagaAgGrid.fetch($(formId).prop('action'), popupGoodsGridOptions, formId, fnPopupGoodsSearchCallBack);
+
+		if(!fnPopupGoodsConditionCheck()) return;
+
+		gagaPaging.init('goodsPopupForm', fnPopupGoodsSearchCallBack, 'goodsPopupListPagination', $('#goodsPopupForm').find('#pageSize').val());
+		gagaPaging.load(1);
+
+	}
+
+	//검색 조건 확인
+	var fnPopupGoodsConditionCheck = function(){
+		var formId = '#goodsPopupForm';
+		var form = document.goodsPopupForm;
+
+		if($("#goodsPopupForm input[name=searchGb]").val() == "EXCEL") return true;
+
+		var searchFlag = false;
+		var cnt = 0;
+
+		if( !gagajf.isNull($("#goodsPopupForm select[name=supplyCompCd]").val())
+				|| !gagajf.isNull($("#goodsPopupForm textarea[name=condition]").val())
+				|| (!gagajf.isNull($("#goodsPopupForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsPopupForm input[name=edDate]").val())
+				|| !gagajf.isNull($("#goodsPopupForm select[name=brandGrpNm]").val())
+
+				)
+			){
+			searchFlag = true;
+		}else{
+			/* for (i = 0; i < form.elements.length; i++ ) {
+				var el = form.elements[i];
+
+				if ((el.getAttribute("type") == "text" || el.getAttribute("type") == "select-one") || el.name== "supplyCompCd") {
+					if (!(el.value == null || el.value == "")) {
+						cnt++;
+					}
+				}
+			}
+
+			if(cnt > 0) searchFlag = true; */
+		}
+
+		if(searchFlag == false){
+			mcxDialog.alert("검색조건을 입력하세요.");
+			return false;
+		}
+
+		if(!gagajf.isNull($("#goodsPopupForm input[name=currPriceSt]").val()) && !gagajf.isNull($("#goodsPopupForm input[name=currPriceEd]").val())){
+			if (Number($("#goodsPopupForm input[name=currPriceSt]").val().removeComma()) > Number($("#goodsPopupForm input[name=currPriceEd]").val().removeComma()) ){
+				mcxDialog.alertC("판매가를 확인해 주세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#goodsPopupForm input[name=currPriceEd]").focus();
+					}
+				});
+				return false;
+			}
+		}
+
+		if(!gagajf.isNull($("#goodsPopupForm input[name=dcRateSt]").val()) && !gagajf.isNull($("#goodsPopupForm input[name=dcRateEd]").val())){
+			if (Number($("#goodsPopupForm input[name=dcRateSt]").val().removeComma()) > Number($("#goodsPopupForm input[name=dcRateEd]").val().removeComma()) ){
+				mcxDialog.alertC("할인율를 확인해 주세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#goodsPopupForm input[name=dcRateEd]").focus();
+					}
+				});
+				return false;
+			}
+		}
+
+		var fromDate = $('#goodsPopupForm input[name=stDate]').val();
+		var toDate = $('#goodsPopupForm input[name=edDate]').val();
+
+		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
+
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#goodsPopupForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alertC("노출기간 시작일자는 종료일자 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#goodsPopupForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			}
+		}
+
+		return true;
+	}
+	var fnPopupGoodsSearchCallBack = function(result) {
+
+		if (!gagajf.isNull(result.couponGoodsList)) {
+			PopupCouponGoodsList = result.couponGoodsList;
+		}
+
+		$('#goodsPopupForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#goodsPopupForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
+		$('#goodsPopupForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#goodsPopupForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+		popupGoodsGridOptions.api.setRowData(result.goodsList);
+		gagaPaging.createPagination(result.pageing.pageable);
+
+	}
+
+	// 적용버튼 클릭시
+	$('#btnPopupGoodsApply').on('click', function() {
+		var callback = [[${params.callBackFun}]];
+		//console.log(callback);
+		var selectedData = popupGoodsGridOptions.api.getSelectedRows();
+
+		if(selectedData.length == 0){
+			mcxDialog.alert("선택된 데이터가 없습니다.");
+			return false;
+		}
+
+		var jsonData = JSON.stringify(selectedData);
+
+		if( typeof callback != 'undefined' && callback){
+
+			if (typeof callback == 'function') {
+				callback(jsonData);
+			}else{
+				if( callback ) {
+					if( callback.indexOf("(") == -1 ) eval( callback +"(" + jsonData+")");
+					else eval( callback(jsonData) );
+				}
+			}
+			//uiPopupClose('goodsPopupForm');
+		}
+	});
+
+	//업체변경시
+	$('#goodsPopupForm select[name=supplyCompCd]').on('change', function() {
+		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+		if(sessRoleCd == "G001_B000"){
+			actionUrl = '/renderer/brand/AuthBrandlist';
+		}
+		//$("#goodsPopupForm select[name=brandCd] option:gt(0)").remove();
+		//cfnCreateCombo(actionUrl, $('#goodsPopupForm select[name=brandCd]'), "[전체]", brandCd);
+		
+		cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y', null, null, 'goodsPopupForm');
+	});
+
+	$(document).ready(function() {
+		cfnCreateCalendar('#sellTermsP', 'stDate', 'edDate', true, '등록일', 'X');
+
+		var selectCode = '<select  name="dateGbn" id="dateGbn"  class="w100">';
+		selectCode += '<option value="R" seledted>상품등록일</option>';
+		selectCode += '<option value="P">가격변경일</option>';
+		selectCode += '<option value="S">승인일</option>';
+		selectCode += '</select>';
+
+		$("#goodsPopupForm").find('#sellTermsP').prepend(selectCode);
+
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridPopupGoodsList', popupGoodsGridOptions);
+		
+		// 입점 사용자 브랜드 조회 처리
+		if(sessRoleCd == "G001_B000"){
+			actionUrl = '/renderer/brand/AuthBrandlist';
+			cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y', null, null, 'goodsPopupForm');
+		}
+
+	});
+
+/*]]>*/
+</script>
+</html>