Sfoglia il codice sorgente

Merge branch 'develop' into jsshin

jsshin 5 anni fa
parent
commit
ef479da9c6

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

@@ -517,6 +517,11 @@ public class TsaGoodsService {
 		String goodsMobileDownDesc = this.getGoodsDescList(goods);
 		resultGoods.setGoodsMobileDownDesc(goodsMobileDownDesc);
 
+		// 상품 상세 (as-is)
+		goods.setDescGb("80");
+		String goodsDesc = this.getGoodsDescList(goods);
+		resultGoods.setGoodsDesc(goodsDesc);
+
 		return resultGoods;
 	}
 
@@ -948,6 +953,7 @@ public class TsaGoodsService {
 		goods.setRegNo(TsaSession.getInfo().getUserNo());
 		goods.setUpdNo(TsaSession.getInfo().getUserNo());
 
+		goods.setGoodsDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsDesc(), "&lt;", "<"), "&gt;", ">"));
 		goods.setGoodsPcTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcTopDesc(), "&lt;", "<"), "&gt;", ">"));
 		goods.setGoodsMobileTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileTopDesc(), "&lt;", "<"), "&gt;", ">"));
 		goods.setGoodsPcDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcDownDesc(), "&lt;", "<"), "&gt;", ">"));
@@ -1102,7 +1108,7 @@ public class TsaGoodsService {
 	 * @since 2020. 10. 27.
 	 */
 	private void saveGoodsDetailDesc(Goods goods) {
-		// 상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:하위컨텐츠-모바일,70:상위컨텐츠-모바일)
+		// 상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:하위컨텐츠-모바일,70:상위컨텐츠-모바일,80:상품상세(as-is))
 		GoodsDesc goodsDesc = new GoodsDesc();
 		goodsDesc.setGoodsCd(goods.getGoodsCd());
 		goodsDesc.setRegNo(goods.getRegNo());
@@ -1146,6 +1152,10 @@ public class TsaGoodsService {
 		goodsDesc.setGoodsDesc(goods.getGoodsMobileDownDesc());
 		this.saveGoodsDesc(goodsDesc);
 
+		// 상품상세(as-is,입점
+		goodsDesc.setDescGb("80");
+		goodsDesc.setGoodsDesc(goods.getGoodsDesc());
+		this.saveGoodsDesc(goodsDesc);
 	}
 
 	/**
@@ -1264,7 +1274,7 @@ public class TsaGoodsService {
 			goodsStock.setOptCd2(goods.getOptCd2()[index]);
 			goodsStock.setBaseStockQty(Integer.parseInt(goods.getBaseStockQty()[index]));
 			goodsStock.setSoldoutYn(goods.getSoldoutYn()[index]);
-			goodsStock.setDispOrd(goods.getDispOrd()[index]);
+			goodsStock.setDispOrd(Integer.parseInt(goods.getDispOrd()[index]));
 			goodsStock.setDispYn(goods.getDispYn()[index]);
 			goodsStock.setRegNo(goods.getRegNo());
 			goodsStock.setUpdNo(goods.getUpdNo());
@@ -1566,7 +1576,7 @@ public class TsaGoodsService {
 		String goodsCd = "";
 		Goods goods = new Goods();
 		goodsDao.createGoodsSequence(goods);
-		String goodsSeq = GagaStringUtil.getLPadding(Integer.toString(goods.getGoodsSq()), 9, "0");
+		String goodsSeq = GagaStringUtil.getLPadding(Integer.toString(goods.getGoodsSq()), 8, "0");
 		if ("S".equals(goodsType) || "D".equals(goodsType)) {
 			goodsCd = SELF_GOOODS_AFTER + goodsCdAfter + goodsSeq;
 

+ 22 - 0
src/main/java/com/style24/admin/biz/web/TsaDisplayController.java

@@ -299,4 +299,26 @@ public class TsaDisplayController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
+	/**
+	 * 카테고리별상품전시관리 화면
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 19
+	 */
+	@GetMapping("/category/goods/form")
+	public ModelAndView CategoryGoodsForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+		// 카테고리구분
+		mav.addObject("cateGbList", rendererService.getAvailCommonCodeList("G032"));
+
+		mav.addObject("cateTypeList", rendererService.getAvailCommonCodeList("G031"));
+		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
+		mav.addObject("conentsLocList", rendererService.getAvailCommonCodeList("G028"));
+
+		mav.setViewName("display/CategoryGoodsForm");
+
+		return mav;
+	}
 }

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

@@ -7,7 +7,6 @@ import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
 
-import com.style24.persistence.TscPageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.InputStreamResource;
@@ -32,6 +31,7 @@ import com.style24.admin.biz.service.TsaSystemService;
 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.TscPageRequest;
 import com.style24.persistence.domain.AdKeyword;
 import com.style24.persistence.domain.AdKeywordGoods;
 import com.style24.persistence.domain.Color;
@@ -617,7 +617,6 @@ public class TsaGoodsController extends TsaBaseController {
 					//고시정보
 					GoodsNotiInfo goodsNotiInfo = new GoodsNotiInfo();
 					goodsNotiInfo.setGoodsCd(tmpGoods.getGoodsCd());
-					goodsNotiInfo.setSupplyCompCd(tmpGoods.getSupplyCompCd());
 					goodsNotiInfo.setNiClsfCd(tmpGoods.getNiClsfCd());
 					Collection<GoodsNotiInfo> goodsNotiInfoList = goodsService.getGoodsNotiInfoList(goodsNotiInfo);
 					if (goodsNotiInfoList == null || goodsNotiInfoList.isEmpty()) {
@@ -845,7 +844,6 @@ public class TsaGoodsController extends TsaBaseController {
 		GoodsNotiInfo goodsInfo = new GoodsNotiInfo();
 		goodsInfo.setGoodsCd(goods.getGoodsCd());
 		goodsInfo.setNiClsfCd(goods.getNiClsfCd());
-		goodsInfo.setSupplyCompCd(goods.getSupplyCompCd());
 
 		return goodsService.getGoodsNotiInfoList(goodsInfo);
 	}

+ 21 - 0
src/main/java/com/style24/persistence/domain/CategoryGoods.java

@@ -0,0 +1,21 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+import lombok.Data;
+
+/**
+ * 카테고리 Domain
+ *
+ * @author bin2107
+ * @since 2021. 1. 19
+ */
+@SuppressWarnings("serial")
+@Data
+public class CategoryGoods extends TscBaseDomain {
+
+	private Integer cateNo;		// 카테고리번호
+
+
+	
+
+}

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

@@ -79,6 +79,7 @@ public class Goods extends TscBaseDomain {
 	private int brandNo;			//브랜드번호
 	private String supplyVendorCd;	//벤더코드
 
+	private String goodsDesc;		//상품상세(as-is, 입점)
 	private String goodsPcTopDesc;
 	private String goodsPcDownDesc;
 	private String goodsMobileTopDesc;

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

@@ -23,6 +23,6 @@ public class GoodsNotiInfo extends TscBaseDomain {
 	private String reqYn;
 
 	private String niItemNm;
-	private String supplyCompCd;
+	private String supplyVendorCd;
 
 }

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

@@ -26,7 +26,7 @@ public class Option extends TscBaseDomain {
 	private int currStockQty;
 	private int addPrice;
 	private String soldoutYn;
-	private String dispOrd;
+	private int dispOrd;
 	private String dispYn;
 
 	private int rnum;

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -669,7 +669,7 @@
 		            ELSE 'N'
 		       END
 		     , #{erpBrandCd}
-		     , #{DELV_FEE_CD}
+		     , #{delvFeeCd}
 		     , #{delvLocCd}
 		     , IFNULL(#{sellFeeRate},0)
 		     , IFNULL(#{pntPrate10},0)

+ 42 - 8
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -555,10 +555,26 @@
 	<select id="getGoodsCategoryListCount" parameterType="GoodsCategory" resultType="int">
 		/* TsaDisplay.getGoodsCategoryListCount */
 		SELECT  COUNT(*) AS TOTCNT
-		FROM	TB_GOODS G
-		WHERE	1=1
-		<if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
-			<include refid="getGoodsCategoryListCondition_sql"/>
+		FROM
+		<if test="searchGb == null or searchGb =='BASIC'">
+				TB_GOODS G
+			WHERE	1=1
+			<if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
+				<include refid="getGoodsCategoryListCondition_sql"/>
+			</if>
+		</if>
+		<if test="searchGb != null and searchGb =='EXCEL'">
+			 (SELECT C.*
+				, TMP_DISP_ORD
+				FROM TB_GOODS C
+				, (SELECT SEARCH_CD, MIN(DISP_ORD) AS TMP_DISP_ORD
+					FROM TB_SEARCH_DATA
+					WHERE REG_NO = #{regNo}
+					GROUP BY SEARCH_CD) D
+				WHERE C.GOODS_CD LIKE D.SEARCH_CD||'%'
+				OR C.SUPPLY_GOODS_CD LIKE D.SEARCH_CD||'%'
+			) A
+			WHERE 1 = 1
 		</if>
 	</select>
 
@@ -598,10 +614,28 @@
 						, G.SEASON_CD
 						, (SELECT BRAND_GRP_NM FROM TB_BRAND WHERE BRAND_CD = G.BRAND_CD) AS BRAND_GRP_NM
 						, (SELECT MAX(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' ) AS SYS_IMG_NM
-				FROM	TB_GOODS G
-				JOIN ( SELECT @rownum := 0) R
-				WHERE 1=1
-				<include refid="getGoodsCategoryListCondition_sql"/>
+				FROM
+				<if test="searchGb == null or searchGb =='BASIC'">
+						TB_GOODS G
+						JOIN ( SELECT @rownum := 0) R
+						WHERE 1=1
+						<include refid="getGoodsCategoryListCondition_sql"/>
+				</if>
+				<if test="searchGb != null and searchGb =='EXCEL'">
+					(SELECT C.*
+						, TMP_DISP_ORD
+						FROM TB_GOODS C
+						, (SELECT SEARCH_CD, MIN(DISP_ORD) AS TMP_DISP_ORD
+							FROM TB_SEARCH_DATA
+							WHERE REG_NO = #{regNo}
+							GROUP BY SEARCH_CD
+							) D
+						WHERE C.GOODS_CD LIKE D.SEARCH_CD||'%'
+						OR C.SUPPLY_GOODS_CD LIKE D.SEARCH_CD||'%'
+					) G
+					JOIN ( SELECT @rownum := 0) R
+					WHERE 1 = 1
+				</if>
 				ORDER BY G.REG_DT DESC, G.GOODS_CD
 			<include refid="getListPagingCondition_sql"/>
 	</select>

+ 5 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -9,7 +9,7 @@
 		     , ITEMKIND_NM
 		     , NI_CLSF_CD
 		     , USE_YN
-		     , EPLACE(SUBSTRING_INDEX(ITEMKIND_NM, '>', -2) ,'>','') AS ITEMKIND_LEAF_NM
+		     , REPLACE(SUBSTRING_INDEX(ITEMKIND_NM, '>', -2) ,'>','') AS ITEMKIND_LEAF_NM
 		FROM TB_ITEMKIND
 		WHERE 1 = 1
 		<if test="itemkindCd != null and itemkindCd != ''">
@@ -1435,9 +1435,12 @@
 		FROM (
 		      SELECT A.GOODS_CD 
 		           , A.MAIN_COLOR_CD 
-		           , B.OPT_CD1 
+		           , NVL(B.OPT_CD1,'00') AS OPT_CD1
 		      FROM TB_GOODS A
 		      LEFT OUTER JOIN TB_OPTION B ON A.GOODS_CD = B.GOODS_CD
+		                                  AND 1 = (CASE WHEN A.SELF_GOODS_YN = 'Y' THEN 1
+		                                                ELSE 2 END
+		                                          )
 		      WHERE A.GOODS_CD  = #{goodsCd}
 		      GROUP BY A.GOODS_CD , B.OPT_CD1
 		     ) A 

+ 348 - 0
src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html

@@ -0,0 +1,348 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CategoryGoodsForm.html
+ * @desc    : 카테고리별상품전시관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.1.19    bin2107     최초 작성
+ *******************************************************************************
+ -->
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	<!-- //메뉴 설명 -->
+
+	<!-- 검색조건 영역 -->
+	<div class="panelStyle">
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/display/category/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<table class="frmStyle" aria-describedby="검색조건">
+				<colgroup>
+					<col width="10%"/>
+					<col/>
+				</colgroup>
+				<tr>
+					<th>카테고리</th>
+					<td>
+						<input type="hidden" name="selLvl"/>
+						<select name="siteCd">
+							<!--<option value="">[사이트]</option> -->
+							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+						<select name="cateGb" id="selCate1" onchange="fnChangeSearchCondition($(this).val(), 1);">
+							<option value="">[카테고리구분]</option>
+							<option th:if="${cateGbList}" th:each="oneData, status : ${cateGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+						<select name="cate1No" id="selCate2" onchange="fnChangeSearchCondition($(this).val(), 2);">
+							<option value="">[카테고리1]</option>
+						</select>
+						<select name="cate2No" id="selCate3" onchange="fnChangeSearchCondition($(this).val(), 3);">
+							<option value="">[카테고리2]</option>
+						</select>
+						<select name="cate3No" id="selCate4" onchange="fnChangeSearchCondition($(this).val(), 4);">
+							<option value="">[카테고리3]</option>
+						</select>
+						<select name="cate4No" id="selCate5" onchange="fnChangeSearchCondition($(this).val(), 5);">
+							<option value="">[카테고리4]</option>
+						</select>
+					</td>
+				</tr>
+			</table>
+		</form>
+	</div>
+	<!-- 검색조건 영역 -->
+
+	<!-- 리스트 영역 -->
+	<div class="panelStyle">
+		<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+	</div>
+	<!-- //리스트 영역 -->
+
+	<!-- 등록/수정 -->
+	<div class="panelStyle">
+		<form id="detailForm" name="detailForm" action="#" th:action="@{'/display/category/save'}">
+
+		</form>
+
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+				<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+				<!--<button type="button" class="btn btn-base btn-lg" id="btnRefresh4Srch" th:if="${sessionInfo.roleCd == 'G001_0000'}">4SRCH 갱신</button>-->
+			</li>
+		</ul>
+		<!-- //버튼 배치 영역 -->
+	</div>
+	<!-- 등록/수정 -->
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	let siteList = gagajf.convertToArray([[${siteList}]]);
+	let cateGbList = gagajf.convertToArray([[${cateGbList}]]);
+	let cateTypeList = gagajf.convertToArray([[${cateTypeList}]]);
+	let formalGbList = gagajf.convertToArray([[${formalGbList}]]);
+	let conentsLocList = gagajf.convertToArray([[${conentsLocList}]]);
+
+	let columnDefs = [
+		{
+			headerName: "사이트", field: "siteCd", width: 150, cellClass: 'text-center',
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
+		},
+		{
+			headerName: "카테고리구분", field: "cateGb", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(cateGbList, params.value); }
+		},
+		{headerName: "카테고리번호", field: "cateNo", width: 150, cellClass: 'text-center'},
+		{
+			headerName: "카테고리명", field: "cateNm", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{
+			headerName: "카테고리유형", field: "cateType", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(cateTypeList, params.value); }
+		},
+		{headerName: "말단여부", field: "leafYn", width: 80, cellClass: 'text-center'},
+		{headerName: "노출순서", field: "dispOrd", width: 100, cellClass: 'text-center'},
+		{
+			headerName: "정상이월구분", field: "formalGb", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); }
+		},
+		{
+			headerName: "컨텐츠위치", field: "contentsLoc", width: 200, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(conentsLocList, params.value); }
+		},
+		{headerName: "노출여부", field: "dispYn", width: 80, cellClass: 'text-center'},
+		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'}
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// Cell click
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'cateNm')
+			return;
+
+		$("#btnNew").click();
+		$('#detailForm input[name=siteCd]').val(event.data.siteCd);
+		$('#detailForm input[name=cateNo]').val(event.data.cateNo);
+		$('#detailForm input[name=cateNm]').val(event.data.cateNm);
+		$('#detailForm select[name=cateType]').val(event.data.cateType);
+
+		// 상위카테고리
+		var selLvl = $("#searchForm input[name=selLvl]").val();
+		for (let i = 1; i <= 5; i++) {
+			$("#cateLvl" + i).html($("#selCate" + i).html());
+			$("#cateLvl" + i).val($("#selCate" + i).val());
+			if (i >= selLvl) {
+				$("#cateLvl" + i).hide();
+			} else {
+				$("#cateLvl" + i).show();
+			}
+		}
+		$('#detailForm input[name=selLvl]').val(selLvl);
+
+		$('#detailForm input[name=dispOrd]').val(event.data.dispOrd);
+		$('#detailForm select[name=formalGb]').val(event.data.formalGb);
+		$('#detailForm select[name=contentsLoc]').val(event.data.contentsLoc);
+
+		// 카테고리유형에 따른 컨텐츠위치 설정 변경
+		if (event.data.cateType == 'G031_10') {
+			$('#detailForm select[name=contentsLoc]').prop('disabled', true);
+		} else if (event.data.cateType == 'G031_20') {
+			$('#detailForm select[name=contentsLoc]').prop('disabled', false);
+		}
+
+		$('#detailForm input:radio[name=dispYn]:input[value=' + event.data.dispYn + ']').click();
+		$('#detailForm input:radio[name=useYn]:input[value=' + event.data.useYn + ']').click();
+	}
+
+	/**
+	 * 검색폼의 카테고리 선택 시
+	 */
+	var fnChangeSearchCondition = function(val, selLvl) {
+		if (gagajf.isNull(val)) {
+			if (selLvl > 1) {
+				selLvl = selLvl - 1;
+			} else {
+				selLvl = 1;
+			}
+		}
+		$('#searchForm input[name=selLvl]').val(selLvl);
+
+		// Fetch data
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', function(data) {
+			let selLvl = Number($('#searchForm input[name=selLvl]').val()) + 1;
+
+			for (let i = 2; i <= 5; i++) {
+				if (i >= selLvl) {
+					$('#selCate' + i).html('<option value="">[카테고리' + (i - 1) + ']</option>');
+				}
+			}
+
+			let tag = '';
+			for (let i = 0; i < data.length; i++) {
+				if (data[i].useYn == 'Y') {
+					tag += '<option value="' + data[i].cateNo + '">[' + data[i].cateNo + '] ' + data[i].cateNm + '</option>';
+				}
+			}
+
+			$("#selCate" + selLvl).append(tag);
+			//$("#btnNew").click();
+		});
+	}
+
+	// 카테고리유형 변경 시
+	$('#detailForm select[name=cateType]').on('change', function() {
+		if ($(this).val() == 'G031_10') { // 상품분류카테고리
+			$("#detailForm select[name=contentsLoc]").prop('disabled', true);
+		} else if ($(this).val() == 'G031_20') { // 컨텐츠카테고리
+			$("#detailForm select[name=contentsLoc]").prop('disabled', false);
+		}
+	});
+
+	// 등록/수정폼의 상위카테고리 선택 시
+	var fnChangeUpperCategory = function(val, selLvl) {
+		if (gagajf.isNull(val)) {
+			if (selLvl > 1) {
+				selLvl = selLvl - 1;
+			} else {
+				selLvl = 1;
+			}
+		}
+		$('#detailForm input[name=selLvl]').val(selLvl);
+
+		gagajf.ajaxFormSubmit($('#searchForm').prop('action'), "#detailForm", function(data) {
+			let selLvl = Number($('#detailForm input[name=selLvl]').val()) + 1;
+
+			for (let i = 2; i <= 5; i++) {
+				if (i >= selLvl) {
+					$('#cateLvl' + i).html('<option value="">[카테고리' + (i - 1) + ']</option>');
+				}
+			}
+
+			let tag = '';
+			for (let i = 0; i < data.length; i++) {
+				if (data[i].useYn == 'Y') {
+					tag += '<option value="' + data[i].cateNo + '">[' + data[i].cateNo + '] ' + data[i].cateNm + '</option>';
+				}
+			}
+
+			$("#cateLvl" + selLvl).append(tag);
+		});
+	}
+
+	// 신규
+	$('#btnNew').on('click', function(){
+		$("#detailForm")[0].reset();
+// 		$("#detailForm input[name=selLvl]").val('');
+		for (let i = 2; i <= 5; i++) {
+			$("#cateLvl" + i).show();
+		}
+	});
+
+	// 저장
+	$('#btnSave').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation('#detailForm'))
+			return false;
+
+		let selLvl = Number($('#detailForm input[name=selLvl]').val());
+		if (gagajf.isNull($('#detailForm select[name=cate1No]').val())) {
+			if (selLvl > 2) {
+				mcxDialog.alertC('카테고리1을 선택해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm select[name=cate1No]').focus();
+					}
+				});
+				return;
+			}
+		}
+
+		if (gagajf.isNull($('#detailForm select[name=cate2No]').val())) {
+			if (selLvl > 3) {
+				mcxDialog.alertC('카테고리2를 선택해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm select[name=cate2No]').focus();
+					}
+				});
+				return;
+			}
+		}
+
+		if (gagajf.isNull($('#detailForm select[name=cate3No]').val())) {
+			if (selLvl > 4) {
+				mcxDialog.alertC('카테고리3을 선택해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm select[name=cate3No]').focus();
+					}
+				});
+				return;
+			}
+		}
+
+		if (gagajf.isNull($('#detailForm select[name=cate4No]').val())) {
+			if (selLvl > 5) {
+				mcxDialog.alertC('카테고리4를 선택해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm select[name=cate4No]').focus();
+					}
+				});
+				return;
+			}
+		}
+
+		mcxDialog.confirm('저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				$("#detailForm select[name=contentsLoc]").prop('disabled', false);
+
+				var jsonData = JSON.stringify($('#detailForm').serializeObject());
+				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
+					$('#btnNew').trigger('click');
+				});
+			}
+		});
+	});
+
+	// 카테고리 갱신
+	$("#btnRefresh4Srch").on("click", function() {
+		mcxDialog.confirm('갱신하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxJsonSubmit('/display/category/refresh', null);
+			}
+		});
+	});
+
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+
+		$("#detailForm select[name=contentsLoc]").prop('disabled', false);
+	});
+	/*]]>*/
+</script>
+
+</html>

+ 20 - 2
src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html

@@ -172,7 +172,7 @@
 			<ul class="panelBar">
 				<li>
 					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">상품엑셀조회 양식 다운로드</button>
-					<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelUpLoad">엑셀조회</button>
+					<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelSearch">엑셀조회</button>
 				</li>
 				<li class="aR">
 					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
@@ -526,7 +526,7 @@
 			mcxDialog.confirm('저장하시겠습니까?', {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
-				sureBtnClick: function(){
+				sureBtnClick: function(){ //debugger;
 					gagajf.ajaxFormSubmit($('#goodsCateForm').prop('action'), "#goodsCateForm", fnGoodsCateSaveCallBack);
 				}
 			});
@@ -611,6 +611,24 @@
 			fnDisplayCategorySearch();
 		};
 
+		// 엑셀 상품 조회
+		$("#btnGoodsExcelSearch").on('click', function(){
+			cfnExcelUploadPopup('goodsExcelUpload', 'goodsExcelUpload');
+		});
+
+		var goodsExcelUpload = function(result){
+			var data = {procJob : result.procJob
+				,excelFileNm : result.excelFileNm
+			};
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit('/goods/search/excelupload/save', jsonData, fnGoodsExcelUploadCallBack);
+		}
+
+		var fnGoodsExcelUploadCallBack = function(result){
+			$("#goodsSearchForm input[name=searchGb]").val("EXCEL");
+			fnSearch();
+		}
+
 		$(document).ready(function() {
 			cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '기간', 'X');
 			// Create a agGrid

+ 9 - 4
src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -433,6 +433,13 @@
 												<col width="12%"/>
 												<col/>
 											</colgroup>
+											<tr>
+												<th>상품상세</th>
+												<td><div class="tabJrContArea">
+													<textarea class="textareaR4 summernote" name="goodsDesc" id="goodsDesc"></textarea>
+													</div>
+												</td>
+											</tr>
 											<tr>
 												<th>상위(PC)</th>
 												<td><div class="tabJrContArea">
@@ -939,8 +946,6 @@
 			$('#goodsDetailForm input[name=certNum]').val(result.certNum);
 			$('#goodsDetailForm input[name=certNumOrg]').val(result.certNum);
 			
-			
-			
 			//상품상세
 			$('#goodsDetailForm input[name=goodsTitlesDesc]').val(result.goodsTitlesDesc);
 			// Summernote에 값 세팅
@@ -950,7 +955,7 @@
 			gagaSn.setContents('#goodsMobileTopDesc', result.goodsMobileTopDesc); 
 			gagaSn.setContents('#goodsPcDownDesc', result.goodsPcDownDesc); 
 			gagaSn.setContents('#goodsMobileDownDesc', result.goodsMobileDownDesc); 
-			
+			gagaSn.setContents('#goodsDesc', result.goodsDesc);
 
 			if (!gagajf.isNull(result.niClsfNm)){
 				$('#goodsDetailForm').find('#itemkindNoti').html('품목기준 고시분류 : ' + result.niClsfNm);
@@ -1250,7 +1255,7 @@
 
 			// SUPER관리자, 어드민관리자, 계정관리자. 총괄관리자, MD 를 제외하고 승인처리 할수 없음
 			if ("G001_0000" != sessRoleCd && "G001_A000" != sessRoleCd && "G001_A001" != sessRoleCd && "G001_A100" != sessRoleCd && "G001_A101" != sessRoleCd ){
-				if ($("#goodsDetailForm select[name=goodsStat]").val() == "G008_90" &&  $("#goodsDetailForm select[name=goodsStatOrg]").val() != "G008_90"){
+				if ($("#goodsDetailForm select[name=goodsStat]").val() == "G008_90" &&  $("#goodsDetailForm input[name=goodsStatOrg]").val() != "G008_90"){
 					mcxDialog.alert(" '승인완료' 상태로 변경할 권한이 없습니다.");
 					return false;
 				}

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

@@ -65,7 +65,7 @@
 			cellEditor: 'textCellEditor',
 			cellEditorParams: { maxlength: 50, required: true }
 		},
-		{headerName: "색상코드", field: "colorCd", width: 100, cellClass: 'text-center',editable: true,
+		{headerName: "온라인 색상", field: "colorCd", width: 100, cellClass: 'text-center',editable: true,
 			cellEditor: 'agRichSelectCellEditor',
 			cellEditorParams: { values: gagaAgGrid.extractValues(colorList) },
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(colorList, params.value); },

+ 4 - 4
src/main/webapp/WEB-INF/views/marketing/CouponRetrievePopupForm.html

@@ -171,10 +171,10 @@
 	gridOptionsCouponList.rowSelection = 'single';
 	gridOptionsCouponList.rowMultiSelectWithClick = true; // 클릭으로 선택 가능
 	
-	// Row double click
-	gridOptionsCouponList.onRowDoubleClicked = function(event) {
-		$('#btnConfirmCoupon').trigger('click');
-	}
+// 	// Row double click
+// 	gridOptionsCouponList.onRowDoubleClicked = function(event) {
+// 		$('#btnConfirmCoupon').trigger('click');
+// 	}
 
 	// 조회
 	$('#btnSearchCouponRetrieve').on('click', function() {

+ 1 - 1
src/main/webapp/ux/js/admin.ui.js

@@ -3,7 +3,7 @@ function uifnAlertClose(id){
 	$("#"+id).css({display:'none'});
 	return true;
 };
-
+ 
 //차트 리사이징
 function chartResize(){
 	if ( $(document).find(".chartUnit").length > 0 ) {