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

Merge branch 'develop' into jsshin

jsshin 5 лет назад
Родитель
Сommit
dcab6d45c5
19 измененных файлов с 545 добавлено и 161 удалено
  1. 2 1
      src/main/java/com/style24/admin/biz/service/TsaBusinessService.java
  2. 8 16
      src/main/java/com/style24/admin/biz/service/TsaDisplayService.java
  3. 15 0
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  4. 2 1
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  5. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  6. 5 5
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  7. 5 3
      src/main/java/com/style24/persistence/mybatis/shop/TsaReview.xml
  8. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaSocial.xml
  9. 19 15
      src/main/webapp/WEB-INF/views/business/BrandGroupPopupForm.html
  10. 2 2
      src/main/webapp/WEB-INF/views/display/LookbookBannerPopupForm.html
  11. 32 0
      src/main/webapp/WEB-INF/views/display/LookbookListForm.html
  12. 360 48
      src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html
  13. 13 48
      src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html
  14. 53 6
      src/main/webapp/WEB-INF/views/display/MainListForm.html
  15. 4 4
      src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html
  16. 1 1
      src/main/webapp/WEB-INF/views/display/PopupListForm.html
  17. 6 4
      src/main/webapp/WEB-INF/views/goods/GoodsFreeGoodsForm.html
  18. 8 2
      src/main/webapp/WEB-INF/views/marketing/ReviewForm.html
  19. 6 1
      src/main/webapp/ux/plugins/gaga/gaga.validation.js

+ 2 - 1
src/main/java/com/style24/admin/biz/service/TsaBusinessService.java

@@ -449,7 +449,7 @@ public class TsaBusinessService {
 			String brandImgName = "BRAND_" + brandGroup.getBrandGroupNo() + "_" + GagaDateUtil.getTodayDateTime() + "." + StringUtils.getFilenameExtension(brandGroup.getNewSysFileNm());
 
 			String brandUploadPath = env.getProperty("upload.default.target.path");
-			brandUploadPath = GagaFileUtil.getConcatenationPath(brandUploadPath, "display");
+			brandUploadPath = GagaFileUtil.getConcatenationPath(brandUploadPath, "contents", "brand");
 
 			//기존이미지 삭제
 			try {
@@ -467,6 +467,7 @@ public class TsaBusinessService {
 			// Rename a file
 			file.renameTo(uniqueFile);
 
+			brandImgName = "/contents/brand/" + brandImgName;
 			brandGroup.setLogoFileNm(brandImgName);
 
 		}

+ 8 - 16
src/main/java/com/style24/admin/biz/service/TsaDisplayService.java

@@ -454,7 +454,7 @@ public class TsaDisplayService {
 			// 이미지 변경 시
 			if(mainDisplay.getNewSysFileNm() != null && mainDisplay.getNewSysFileNm() != ""){
 				String bannerUploadPath = env.getProperty("upload.default.target.path");
-				bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "display/main");
+				bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "/main");
 				String newFilename = "MAIN_LAYOUT_" + mainDisplay.getContentsLoc() + "_" + GagaDateUtil.getTodayDateTime() + "." + StringUtils.getFilenameExtension(mainDisplay.getNewSysFileNm());
 
 				// 기존이미지 삭제
@@ -531,9 +531,8 @@ public class TsaDisplayService {
 
 		for (Contents contents : contentsList){
 			log.info("getGoodsCdArr contents:::::{}",contents);
-			//log.info("getGoodsCdArr length:::::{}",contents.getGoodsCdArr().length);
 			if(contents != null && contents.getGoodsCdArr() != null){
-				contents.setPreContentsSq(contents.getDispOrd());
+				contents.setContentsSq(contents.getDispOrd());
 				contents.setRegNo(TsaSession.getInfo().getUserNo());
 				displayDao.deleteContentsGoodsTemp(contents);
 
@@ -550,18 +549,15 @@ public class TsaDisplayService {
 
 		int ind = 1;
 		for (Contents contents : contentsList) {
-			log.info("1==========={}");
+			contents.setContentsSq(null);
 			if (contents != null && contents.getDispStdt() != null && !contents.getDispStdt().equals("")) {
 				// 브랜드 이미지 변경이 일어났을 경우
-				log.info("2==========={}");
 				String brandGroupImg = contents.getBrandGroupImg();
 				if(brandGroupImg != null && !brandGroupImg.equals("")){
-					log.info("3==========={}");
 					String imgInd = "01";
 					String bannerUploadPath = env.getProperty("upload.default.target.path");
-					bannerUploadPath = bannerUploadPath + "/display/";
 					String yearMonth = GagaDateUtil.getToday().substring(0, 6);
-					bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "contents/brand");
+					bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "/contents/brand");
 					File newFile = new File(GagaFileUtil.getConcatenationPath(bannerUploadPath, brandGroupImg));
 					bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, yearMonth);
 					String newFilename = "BRAND_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + StringUtils.getFilenameExtension(brandGroupImg);
@@ -576,29 +572,25 @@ public class TsaDisplayService {
 				}
 
 				int cnt = 1;
-				log.info("4==========={}");
 				for (String newImgFile : contents.getNewImgFileArr()) {
-					log.info("5==========={}");
 					//이미지 변경이 일어났을 경우
 					if (newImgFile != null && !newImgFile.equals("")) {
-						log.info("6==========={}");
 						String imgInd = String.valueOf(ind);
 						if (ind < 10) {
 							imgInd = "0" + imgInd;
 						}
 						String bannerUploadPath = env.getProperty("upload.default.target.path");
-						bannerUploadPath = bannerUploadPath + "/display/";
 						String yearMonth = GagaDateUtil.getToday().substring(0, 6);
 						if("Y".equals(contents.getMultiContentsYn())){
-							bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "contents/plan");
+							bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "/contents/planning");
 						}else{
-							bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "contents");
+							bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "/contents");
 						}
 						File newFile = new File(GagaFileUtil.getConcatenationPath(bannerUploadPath, newImgFile));
 						bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, yearMonth);
 						String newFilename = "";
 						if("Y".equals(contents.getMultiContentsYn())){
-							newFilename = "PLAN_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + StringUtils.getFilenameExtension(newImgFile);
+							newFilename = "PLANNING_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + StringUtils.getFilenameExtension(newImgFile);
 						}else{
 							newFilename = "CONTENS_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + StringUtils.getFilenameExtension(newImgFile);
 						}
@@ -612,7 +604,7 @@ public class TsaDisplayService {
 
 						String contentsPath = "";
 						if("Y".equals(contents.getMultiContentsYn())){
-							contentsPath = "/contents/plan/";
+							contentsPath = "/contents/planning/";
 						}else{
 							contentsPath = "/contents/";
 						}

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

@@ -851,6 +851,21 @@ public class TsaDisplayController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
+	/**
+	 * 룩북 메인룩북 등록
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 15
+	 */
+	@PostMapping("/mainlookbook/save")
+	@ResponseBody
+	public GagaResponse saveMainLookbook(@RequestBody Lookbook lookbook) {
+		lookbook.setRegNo(TsaSession.getInfo().getUserNo());
+		lookbook.setUpdNo(TsaSession.getInfo().getUserNo());
+		coreLookbookService.saveMainLookbook(lookbook);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 	/**
 	 * 메인전시 컨텐츠 GNB TAB 수정 팝업
 	 * @return

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

@@ -2616,7 +2616,7 @@ public class TsaGoodsController extends TsaBaseController {
 			String sysImgNm = freeGoods.getProductNo() + "_" + GagaDateUtil.getTodayDateTime() + "." + org.springframework.util.StringUtils.getFilenameExtension(freeGoods.getNewSysImgNm());
 
 			String imgUploadPath = env.getProperty("upload.default.target.path");
-			imgUploadPath = GagaFileUtil.getConcatenationPath(imgUploadPath, "display", "freegoods");
+			imgUploadPath = GagaFileUtil.getConcatenationPath(imgUploadPath, "contents", "freegoods");
 
 			//기존이미지 삭제
 			try {
@@ -2634,6 +2634,7 @@ public class TsaGoodsController extends TsaBaseController {
 			// Rename a file
 			file.renameTo(uniqueFile);
 
+			sysImgNm = "/contents/freegoods/" + sysImgNm;
 			freeGoods.setSysImgNm(sysImgNm);
 
 		}

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

@@ -1088,7 +1088,7 @@
 		     , #{brandGroupEnm}
 		     , #{brandGroupKnm}
 		     , #{dispNmLang}
-		     , #{rgbCd}
+		     , IFNULL(NULLIF(#{rgbCd},''),'222222')
 		     , #{logoFileNm}
 		     , #{regNo}
 		     , NOW()
@@ -1104,7 +1104,7 @@
 		SET    BRAND_GROUP_ENM = #{brandGroupEnm}
 		     , BRAND_GROUP_KNM = #{brandGroupKnm}
 		     , DISP_NM_LANG = #{dispNmLang}
-		     , RGB_CD = #{rgbCd}
+		     , RGB_CD = IFNULL(NULLIF(#{rgbCd},''),'222222')
 		     , LOGO_FILE_NM = #{logoFileNm}
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()

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

@@ -1304,21 +1304,21 @@
 			    FROM	TMP_CONTENTS_GOODS B
 			   WHERE	B.CATE_NO = A.CATE_NO
 				 AND	B.CONTENTS_LOC = A.CONTENTS_LOC
-				 AND	B.PRE_CONTENTS_SQ = A.DISP_ORD
+				 AND	B.CONTENTS_SQ = A.DISP_ORD
 				 AND	B.CATE_NO = #{cateNo}
 				 AND	B.CONTENTS_LOC = #{contentsLoc}) AS GOODS_CD_LIST
 			 ,(SELECT 	GROUP_CONCAT(B.GOODS_NM ORDER BY B.DISP_ORD SEPARATOR ',')
 			   FROM	TMP_CONTENTS_GOODS B
 			   WHERE	B.CATE_NO = A.CATE_NO
 				 AND	B.CONTENTS_LOC = A.CONTENTS_LOC
-				 AND	B.PRE_CONTENTS_SQ = A.DISP_ORD
+				 AND	B.CONTENTS_SQ = A.DISP_ORD
 				 AND	B.CATE_NO = #{cateNo}
 				 AND	B.CONTENTS_LOC = #{contentsLoc}) AS GOODS_NM_LIST
 			 ,(SELECT 	GROUP_CONCAT(B.IMG_PATH1 ORDER BY B.DISP_ORD SEPARATOR ',')
 			   FROM	TMP_CONTENTS_GOODS B
 			   WHERE	B.CATE_NO = A.CATE_NO
 				 AND	B.CONTENTS_LOC = A.CONTENTS_LOC
-				 AND	B.PRE_CONTENTS_SQ = A.DISP_ORD
+				 AND	B.CONTENTS_SQ = A.DISP_ORD
 				 AND	B.CATE_NO = #{cateNo}
 				 AND	B.CONTENTS_LOC = #{contentsLoc}) AS GOODS_IMG_LIST
 			 , A.USE_YN
@@ -1615,7 +1615,7 @@
 		DELETE	FROM TMP_CONTENTS_GOODS
 		WHERE	CATE_NO = #{cateNo}
 		AND 	CONTENTS_LOC = #{contentsLoc}
-		AND 	PRE_CONTENTS_SQ = #{preContentsSq}
+		AND 	CONTENTS_SQ = #{contentsSq}
 	</delete>
 
 	<insert id="saveContentsGoodsTemp" parameterType="Contents">
@@ -1643,7 +1643,7 @@
 						 				AND		CONTENTS_LOC = #{contentsLoc}) TMP)
 			,#{contentsLoc}
 		 	,#{preContentsSq}
-		 	,NULL
+		 	,#{contentsSq}
 		 	,#{goodsCd}
 		 	,#{goodsNm}
 		 	,#{imgPath1}

+ 5 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsaReview.xml

@@ -68,11 +68,13 @@
 		<if test="dispYn != null and dispYn != ''">
 		AND    R.DISP_YN = #{dispYn}
 		</if>
-		<if test="searchGb == 'memNm'">
+		<if test="searchTxt != null and searchTxt != ''">
+		    <if test="searchGb == 'memNm'">
 		AND    UPPER(C.CUST_NM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
-		</if>
-		<if test="searchGb == 'email'">
+		    </if>
+		    <if test="searchGb == 'email'">
 		AND    UPPER(C.EMAIL) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+		    </if>
 		</if>
 		ORDER  BY R.REG_DT DESC
 	</select>

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

@@ -201,8 +201,8 @@
 		SELECT COUNT(*)
 		FROM tb_social A
 		WHERE 1=1
-			AND A.USE_YN = #{useYn}
-			AND A.APPLY_GB = #{applyGb}
+			AND A.USE_YN = 'Y'
+			AND A.APPLY_GB = 'A'
 			AND  (A.SOCIAL_STDT <![CDATA[ <= ]]>  DATE_FORMAT(DATE_ADD(#{socialStdt}, INTERVAL 0 DAY), '%Y%m%d%H%i%S')  
 			OR A.SOCIAL_EDDT <![CDATA[ >= ]]>  DATE_FORMAT(DATE_ADD(#{socialStdt}, INTERVAL 0 DAY), '%Y%m%d%H%i%S'))  
 	</select>

+ 19 - 15
src/main/webapp/WEB-INF/views/business/BrandGroupPopupForm.html

@@ -25,7 +25,7 @@
 		
 		<!-- 검색 조건 -->
 		<div class="panelContent" >
-		<form id="searchBrandGroupForm" name="searchBrandGroupForm" action="#" th:action="@{'/business/brand/group/list'}" onsubmit="$('#btnSearchBrandGroup').trigger('click'); return false;">
+		<form id="searchBrandGroupForm" name="searchBrandGroupForm" action="#" th:action="@{'/business/brand/group/list'}" >
 			
 			<table class="frmStyle" aria-describedby="검색조건">
 				<colgroup>
@@ -96,10 +96,10 @@
 					</td>
 				</tr>
 				<tr>
-					<th>RGB코드<i class="required" title="필수"></i></th>
+					<th>RGB코드</th>
 					<td  colspan="3">
-						<input type="text" class="w100 aR" name="rgbCd" maxlength="6" data-valid-name="REG코드" />
-						<!-- <span class="marL10 cRed"><i class="fa fa-info-circle" aria-hidden="true"></i> 브랜드메인 GBN 배경색으로 적용, 미 입력시 기본색상으로 설정됩니다.</span> -->
+						<input type="text" class="w100 aR" name="rgbCd" maxlength="6" data-valid-name="REG코드" value="222222"/>
+						<span class="marL10 cRed"><i class="fa fa-info-circle" aria-hidden="true"></i> 브랜드메인 GBN 배경색으로 적용, 미 입력시 기본색상(222222)으로 설정됩니다.</span>
 					</td>
 				</tr>
 				<tr style="height:100px">
@@ -112,9 +112,9 @@
 							<input type="hidden" name="sysFileNm" id="sysFileNm"/>
 							<input type="hidden" name="newSysFileNm" id="newSysFileNm"/>
 						</div>
-						<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.default.view') + '/display/'}"/>
+						<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.default.view')}"/>
 						<span id="imgView" class="off">
-							<img id="bannerPreViewUrl" src="" style="height:100px"/>
+							<img id="bannerPreViewUrl" src="" style="width:100px"/>
 						</span>
 					</td>
 				</tr>
@@ -178,6 +178,8 @@
 			$("#logoFileNm").val('');
 			$("#orgFileNm").val('');
 			$("#bannerPreViewUrl").attr('src', '');
+			$("#imgView").removeClass("on").addClass("off");
+			
 		}
 		$('#brandGroupForm input[name=file]').closest('div').find('label').text('파일선택'); 
 		
@@ -186,10 +188,10 @@
 	// 조회
 	$('#btnSearchBrandGroup').on('click', function() {
 		
-		if (gagajf.isNull($('#searchBrandGroupForm textarea[name=searchBrandGroupNo]').val())  && gagajf.isNull($('#searchBrandGroupForm textarea[name=searchBrandGroupNm]').val())){
-			mcxDialog.alert('검색조건을 입력하세요.');
-			return false;
-		}
+		//if (gagajf.isNull($('#searchBrandGroupForm textarea[name=searchBrandGroupNo]').val())  && gagajf.isNull($('#searchBrandGroupForm textarea[name=searchBrandGroupNm]').val())){
+		//	mcxDialog.alert('검색조건을 입력하세요.');
+		//	return false;
+		//}
 		
 		// Fetch data
 		gagaAgGrid.fetch($('#searchBrandGroupForm').prop('action'), gridOptionsBrandGroupList, '#searchBrandGroupForm');
@@ -237,12 +239,12 @@
 			return;
 		}
 		
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/contents'
 				, file
 				, function(result) {
 					$('#brandGroupForm input[name=newSysFileNm]').val(result.newFileName);
 					$('#brandGroupForm input[name=sysFileNm]').val(result.newFileName);
-					$("#bannerPreViewUrl").attr('src', $("#uploadDefaultUrl").val()+result.newFileName);
+					$("#bannerPreViewUrl").attr('src', $("#uploadDefaultUrl").val()+"/contents/brand/"+result.newFileName);
 					$("#imgView").removeClass("off").addClass("on");
 				}
 				, 'image'
@@ -256,7 +258,7 @@
 			return false;
 		
 		// RGB 체크
-		if (!gagajf.isNull($('#brandGroupForm input[name=rgbCd]')) ){
+		if (!gagajf.isNull($('#brandGroupForm input[name=rgbCd]').val()) ){debugger;
 			
 			var rgbCd = $('#brandGroupForm input[name=rgbCd]').val();
 			if (rgbCd.indexOf('#') >= 0){
@@ -297,9 +299,11 @@
 	$("#btnBrandGroupNew").on("click", function() {
 		$("#brandGroupForm")[0].reset();
 		$("#brandGroupForm input[name=mode]").val("N");
-		$("#orgFileNm").val('');
 		$("#bannerPreViewUrl").attr('src', '');
-		$("#logoFileNm").val('');
+		$('#brandGroupForm input[name=newSysFileNm]').val('');
+		$('#brandGroupForm input[name=sysFileNm]').val('');
+		$('#brandGroupForm input[name=logoFileNm]').val('');
+		$("#imgView").removeClass("on").addClass("off");
 	});
 	
 	$(document).ready(function() {

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

@@ -187,7 +187,7 @@
 			return;
 		}
 		// 파일 업로드
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/lookbook/banner/'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/lookbook/banner/'
 				, file
 				, function(result) {
 					$(obj).closest('div').find('input:hidden[name=bannerImgPath]').val(result.oldFileName);
@@ -285,7 +285,7 @@
 			return;
 		}
 
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/lookbook/thumbnail'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/lookbook/thumbnail'
 				, file
 				, function(result) {
 					$('#lbBannerForm input[name=orgTnfileNm]').val(result.oldFileName);

+ 32 - 0
src/main/webapp/WEB-INF/views/display/LookbookListForm.html

@@ -99,6 +99,7 @@
 				<li class="left">
 					<span class="btnLeft">
 						<button type="button" class="btn btn-danger btn-lg" id="btnDel">노출안함</button>
+						<button type="button" class="btn btn-success btn-lg" id="btnMain">메인룩북설정</button>
 					</span>
 				</li>
 				<li class="right">
@@ -196,6 +197,37 @@
 		gagaPaging.createPagination(result.pageing.pageable);
 	}
 
+	// 메인룩북설정
+	$("#btnMain").on('click', function(){
+		var selectRowData = gagaAgGrid.selectedRowData(gridOptions);
+
+		if(selectRowData.length < 1){
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}else if(selectRowData.length > 1){
+			mcxDialog.alert('메인룩북은 1개만 설정 가능합니다.');
+			return;
+		}else{
+			mcxDialog.confirm('메인룩북으로 설정하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var selectDataArr = [];
+					$.each(selectRowData, function(idx, item) {
+						selectDataArr.push(item.lookbookSq);
+					});
+
+					var data = {
+						selectDataArr : selectDataArr
+					};
+
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/display/mainlookbook/save', jsonData, fnSaveCollback);
+				}
+			});
+		}
+	});
+
 	// 노출안함
 	$("#btnDel").on('click', function (){
 		var selectRowData = gagaAgGrid.selectedRowData(gridOptions);

+ 360 - 48
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
+	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
  * @source  : MainContentsPopupForm.html
@@ -14,43 +14,43 @@
  * 1.0  2021.2.23    bin2107     최초 작성
  *******************************************************************************
  -->
-	<div class="modalPopup" data-width="1400" >
-		<div class="panelStyle">
-			<div class="panelTitle">
-				<h2 id="popTitle" th:text="${contentsLoc}"></h2>
-				<button type="button" class="close" onclick="fnMainContentsPopupFormClose()"><i class="fa fa-times"></i></button>
-			</div>
-			<div class="panelContent">
-				<ul class="panelBar">
-					<li class="aL">
-						<span class="cBlue">* 상단으로 드래그&amp;드랍하여 순서 변경 가능합니다.</span>
-					</li>
-					<li class="aR">
-						<button type="button" class="btn btn btn-base btn-sm" id="btnPopAddRow">컨텐츠 추가</button>
-						<button type="button" class="btn btn btn-dark btn-sm" id="btnPopSave">임시저장</button>
-						<input type="hidden" name="uploadDefaultUrlPop" id="uploadDefaultUrlPop" th:value="${@environment.getProperty('upload.image.view') + '/display/contents/'}"/>
-					</li>
-				</ul>
-			</div>
-			<form name="contentsTitleForm" id="contentsTitleForm" style="width:1170px; overflow:auto; display: none;">
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:90%;"/>
-					</colgroup>
-					<tr>
-						<th>컨텐츠 타이틀</th>
-						<td><input type="text" name="contentsTitle" style="width:50%;" maxlength="40" required="required" data-valid-name="컨텐츠타이틀" th:value="${contentsTitle}"></td>
-					</tr>
-				</table>
-			</form>
-			<form style="height:600px; width:1370px; overflow:auto;" id="popSortable">
-			</form>
+<div class="modalPopup" data-width="1500" >
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2 id="popTitle" th:text="${contentsLoc}"></h2>
+			<button type="button" class="close" onclick="fnMainContentsPopupFormClose()"><i class="fa fa-times"></i></button>
 		</div>
+		<div class="panelContent">
+			<ul class="panelBar">
+				<li class="aL">
+					<span class="cBlue">* 상단으로 드래그&amp;드랍하여 순서 변경 가능합니다.</span>
+				</li>
+				<li class="aR">
+					<button type="button" class="btn btn btn-base btn-sm" id="btnPopAddRow">컨텐츠 추가</button>
+					<button type="button" class="btn btn btn-dark btn-sm" id="btnPopSave">임시저장</button>
+					<input type="hidden" name="uploadDefaultUrlPop" id="uploadDefaultUrlPop" th:value="${@environment.getProperty('upload.image.view') + '/display/contents/'}"/>
+				</li>
+			</ul>
+		</div>
+		<form name="contentsTitleForm" id="contentsTitleForm" style="width:1170px; overflow:auto; display: none;">
+			<table class="frmStyle">
+				<colgroup>
+					<col style="width:10%;"/>
+					<col style="width:90%;"/>
+				</colgroup>
+				<tr>
+					<th>컨텐츠 타이틀</th>
+					<td><input type="text" name="contentsTitle" style="width:50%;" maxlength="40" required="required" data-valid-name="컨텐츠타이틀" th:value="${contentsTitle}"></td>
+				</tr>
+			</table>
+		</form>
+		<form style="height:600px; width:1470px; overflow:auto;" id="popSortable">
+		</form>
 	</div>
+</div>
 
 <script th:inline="javascript">
-/*<![CDATA[*/
+	/*<![CDATA[*/
 	var cateNo = [[${cateNo}]];
 	var contentsLoc = [[${contentsLoc}]];
 	var contentsTitle = [[${contentsTitle}]];
@@ -59,6 +59,8 @@
 	var tdDeleteWidth = parseInt(tdWidth/11, 10);
 	tdWidth = tdWidth - tdDeleteWidth;
 
+	var tableLen = 0;		// 테이블 ID
+
 	// 컨텐츠 미리보기 리스트
 	var fnGetContentsPreviewList = function() {
 		$("#popSortable").html('');
@@ -69,12 +71,14 @@
 		gagajf.ajaxJsonSubmit('/display/contents/preview/list', jsonData, fnCreatePopLayout);
 	}
 
+	var createIdx = 0;
 	var fnCreatePopLayout = function(result) {
 		var html = '';
 		for(var i=0; i<result.length; i++){
 			var dispStdt = result[i].dispStdt.split(" ");
 			var dispEddt = result[i].dispEddt.split(" ");
-			html += '<table class="frmStyle" style="margin-bottom:30px">';
+			html += '<table class="frmStyle mcTable" style="margin-bottom:30px" id="mcTable'+i+'">';
+			html += '<input type="hidden" name="tableIdx" value="'+i+'" data-id="'+i+'">';
 			html += '<colgroup>';
 			html += '<col style="width:10%;"/>';
 			html += '<col style="width:55%;"/>';
@@ -97,19 +101,107 @@
 			html += '</select>';
 			html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
 			html += '</td>';
-			html += '<td class="aL"><button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
-			if(contentsLoc=='SMM001' || contentsLoc=='SBM004' || contentsLoc=='SBMM004'){
+			html += '<td class="aL">';
+			if(contentsLoc!='SMM005'){
+				html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
+			}
+			if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004'){
 				html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 			}
 			if(contentsLoc=='SBM005' || contentsLoc=='SBMM005'){
 				html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddBrandDescRow(this);">브랜드소개추가</button>';
 			}
-			if(contentsLoc!='SBM005' && contentsLoc!='SBMM005'){
+			if(contentsLoc!='SMM005' && contentsLoc!='SBM005' && contentsLoc!='SBMM005'){
 				html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddImgPopRow(this);">이미지추가</button>';
 			}
-			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddLinkPopRow(this);">링크추가</button>';
+			if(contentsLoc!='SMM005') {
+				html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddLinkPopRow(this);">링크추가</button>';
+			}
 			html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
-			html += '</tr></thead><tbody>';
+			html += '</tr>';
+			if(contentsLoc=='SMM001'){
+				html += '<tr>';
+				html += '	<th>컨텐츠유형</th>';
+				html += '	<td class="planArea" name="planArea" id="planArea'+i+'" colspan="3">';
+				if(result[i].strVar5=='P'){
+					html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="P" onclick="fnChangeContentsType(this,'+i+');" checked="checked"/>기획전</label>';
+					html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="E" onclick="fnChangeContentsType(this,'+i+');"/>이벤트</label>';
+				}else{
+					html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="P" onclick="fnChangeContentsType(this,'+i+');" />기획전</label>';
+					html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="E" onclick="fnChangeContentsType(this,'+i+');" checked="checked"/>이벤트</label>';
+				}
+				if(result[i].strVar5=='P') {
+					html += '		<input type="text" class="w100 inputPlan" name="planSq' + i + '" value="' + result[i].strVar6 + '"/>';
+					html += '		<button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan(' + i + ');">기획전검색</button>';
+				}else{
+					html += '		<input type="text" class="w100 inputPlan" name="planSq' + i + '" value="" style="display: none;"/>';
+					html += '		<button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan(' + i + ');" style="display: none;">기획전검색</button>';
+				}
+				html += '	</td>';
+				html += '</tr>';
+				html += '<tr>';
+				html += '	<th>썸네일 <br>글자 색상</th>';
+				html += '	<td colspan="3">';
+				if(result[i].strVar7='BLACK'){
+					html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="BLACK" checked="checked"/>BLACK</label>';
+					html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="WHITE" />WHITE</label>';
+				}else{
+					html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="BLACK" />BLACK</label>';
+					html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="WHITE" checked="checked"/>WHITE</label>';
+				}
+				html += '	</td>';
+				html += '</tr>';
+			}
+			if(contentsLoc=='SMM005'){
+				if(contentsLoc=='SMM005'){
+					html += '<tr>';
+					html += '	<th>배너유형</th>';
+					html += '	<td class="bannerArea" id="bannerArea'+i+'">';
+					html += '		<label class="rdoBtn"><input type="radio" name="bannerType'+i+'" value="1" onclick="fnChangeBannerType(this,1);">1단</label>';
+					html += '		<label class="rdoBtn"><input type="radio" name="bannerType'+i+'" value="2" onclick="fnChangeBannerType(this,2);">2단</label>';
+					html += '	</td>';
+					html += '</tr>';
+					html += '<tr id="bannerImgTr1" name="imgPopRow">';
+					html += '	<th>이미지1</th>';
+					html += '	<td>';
+					html += '		<div id="ImageArea1" style="height:33px;">';
+					html += '			<span className="uFile w300">';
+					html += '									<input id="file_1" name="file" type="file" className="uFileInput w300" data-valid-name="이미지파일" onChange="fnPopFileUpload(this, 1)"/>';
+					html += '									<label htmlFor="file_1" className="uFileLabel"></label>';
+					html += '									<input type="hidden" name="imgPath" value="'+result[i].imgPath1+'"/>';
+					html += '									<input type="hidden" name="newImgFile" value="" />';
+					html += '								</span>';
+					html += '			<span className="memAdd off" id="imgFileNm1"></span>';
+					html += '		</div>';
+					html += '	</td>';
+					html += '</tr>';
+					html += '<tr id="bannerLinkTr1" name="linkRow">';
+					html += '	<th>링크1</th>';
+					html += '	<td><input type="text" class="w400" name="linkUrl" maxlength="300" required="required" data-valid-name="LINK" value="'+result[i].strVar1+'"/></td>';
+					html += '</tr>';
+					if(result[i].contentsType==2){
+						html += '<tr id="bannerImgTr2" name="imgPopRow">';
+						html += '	<th>이미지2</th>';
+						html += '	<td>';
+						html += '		<div id="ImageArea2" style="height:33px;">';
+						html += '			<span className="uFile w300">';
+						html += '									<input id="file_2" name="file" type="file" className="uFileInput w300" data-valid-name="이미지파일" onChange="fnPopFileUpload(this, 2)"/>';
+						html += '									<label htmlFor="file_2" className="uFileLabel"></label>';
+						html += '									<input type="hidden" name="imgPath" value="'+result[i].imgPath2+'"/>';
+						html += '									<input type="hidden" name="newImgFile" value="" />';
+						html += '								</span>';
+						html += '			<span className="memAdd off" id="imgFileNm2"></span>';
+						html += '		</div>';
+						html += '	</td>';
+						html += '</tr>';
+						html += '<tr id="bannerLinkTr2" name="linkRow" >';
+						html += '	<th>링크2</th>';
+						html += '	<td><input type="text" class="w400" name="linkUrl" maxlength="300" required="required" data-valid-name="LINK" value="'+result[i].strVar2+'"/></td>';
+						html += '</tr>';
+					}
+				}
+			}
+			html += '</thead><tbody>';
 			for(var j=1; j<5; j++){
 				var strTitle = eval("result["+i+"].strTitle" + j);
 				var imgPath = eval("result["+i+"].imgPath" + j);
@@ -138,12 +230,19 @@
 			changeYear: true,
 			defaultDate: $('.schDate').val()
 		});
+
+		tableLen = $(".mcTable").length;
 	}
+
 	/**
 	 * 컨텐츠 추가 버튼
 	 */
+	var dataIdx=0;
 	$("#btnPopAddRow").on("click", function (){
-		var html = '<table class="frmStyle" style="margin-bottom:30px">';
+		dataIdx = tableLen;
+
+		var html = '<table class="frmStyle mcTable" style="margin-bottom:30px" id="mcTable'+dataIdx+'">';
+		html += '<input type="hidden" name="tableIdx" value="'+dataIdx+'" data-id="'+dataIdx+'">';
 		html += '<colgroup>';
 		html += '<col style="width:10%;"/>';
 		html += '<col style="width:55%;"/>';
@@ -166,19 +265,89 @@
 		html += '</select>';
 		html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
 		html += '</td>';
-		html += '<td class="aL"><button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
-		if(contentsLoc=='SMM001' || contentsLoc=='SBM004' || contentsLoc=='SBMM004'){
+		html += '<td class="aL">';
+		if(contentsLoc!='SMM005'){
+			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
+		}
+		if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004'){
 			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 		}
 		if(contentsLoc=='SBM005' || contentsLoc=='SBMM005'){
 			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddBrandDescRow(this);">브랜드소개추가</button>';
 		}
-		if(contentsLoc!='SBM005' && contentsLoc!='SBMM005') {
+		if(contentsLoc!='SMM005' && contentsLoc!='SBM005' && contentsLoc!='SBMM005') {
 			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddImgPopRow(this);">이미지추가</button>';
 		}
-		html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddLinkPopRow(this);">링크추가</button>';
+		if(contentsLoc!='SMM005') {
+			html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddLinkPopRow(this);">링크추가</button>';
+		}
 		html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
-		html += '</tr></thead><tbody></tbody></table>';
+		html += '</tr>';
+		if(contentsLoc=='SMM001'){
+			html += '<tr>';
+			html += '	<th>컨텐츠유형</th>';
+			html += '	<td class="planArea" name="planArea" id="planArea'+dataIdx+'" colspan="3">';
+			html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+dataIdx+'" value="P" onclick="fnChangeContentsType(this,'+dataIdx+');" checked="checked"/>기획전</label>';
+			html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+dataIdx+'" value="E" onclick="fnChangeContentsType(this,'+dataIdx+');"/>이벤트</label>';
+			html += '		<input type="text" class="w100 inputPlan" name="planSq'+dataIdx+'" value=""/>';
+			html += '		<button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan('+dataIdx+');">기획전검색</button>';
+			html += '	</td>';
+			html += '</tr>';
+			html += '<tr>';
+			html += '	<th>썸네일 <br>글자 색상</th>';
+			html += '	<td colspan="3">';
+			html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+dataIdx+'" value="BLACK" checked="checked"/>BLACK</label>';
+			html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+dataIdx+'" value="WHITE" />WHITE</label>';
+			html += '	</td>';
+			html += '</tr>';
+		}
+		if(contentsLoc=='SMM005'){
+			html += '<tr>';
+			html += '	<th>배너유형</th>';
+			html += '	<td class="bannerArea" id="bannerArea'+dataIdx+'">';
+			html += '		<label class="rdoBtn"><input type="radio" name="bannerType'+dataIdx+'" value="1" onclick="fnChangeBannerType(this,1);">1단</label>';
+			html += '		<label class="rdoBtn"><input type="radio" name="bannerType'+dataIdx+'" value="2" onclick="fnChangeBannerType(this,2);">2단</label>';
+			html += '	</td>';
+			html += '</tr>';
+			html += '<tr id="bannerImgTr1" name="imgPopRow" style="display: none;">';
+			html += '	<th>이미지1</th>';
+			html += '	<td>';
+			html += '		<div id="ImageArea1" style="height:33px;">';
+			html += '			<span className="uFile w300">';
+			html += '									<input id="file_1" name="file" type="file" className="uFileInput w300" data-valid-name="이미지파일" onChange="fnPopFileUpload(this, 1)"/>';
+			html += '									<label htmlFor="file_1" className="uFileLabel"></label>';
+			html += '									<input type="hidden" name="imgPath" value=""/>';
+			html += '									<input type="hidden" name="newImgFile" value="" />';
+			html += '								</span>';
+			html += '			<span className="memAdd off" id="imgFileNm1"></span>';
+			html += '		</div>';
+			html += '	</td>';
+			html += '</tr>';
+			html += '<tr id="bannerLinkTr1" name="linkRow" style="display: none;">';
+			html += '	<th>링크1</th>';
+			html += '	<td><input type="text" class="w400" name="linkUrl" maxlength="300" required="required" data-valid-name="LINK" value="#"/></td>';
+			html += '</tr>';
+			html += '<tr id="bannerImgTr2" name="imgPopRow" style="display: none;">';
+			html += '	<th>이미지2</th>';
+			html += '	<td>';
+			html += '		<div id="ImageArea2" style="height:33px;">';
+			html += '			<span className="uFile w300">';
+			html += '									<input id="file_2" name="file" type="file" className="uFileInput w300" data-valid-name="이미지파일" onChange="fnPopFileUpload(this, 2)"/>';
+			html += '									<label htmlFor="file_2" className="uFileLabel"></label>';
+			html += '									<input type="hidden" name="imgPath" value=""/>';
+			html += '									<input type="hidden" name="newImgFile" value="" />';
+			html += '								</span>';
+			html += '			<span className="memAdd off" id="imgFileNm2"></span>';
+			html += '		</div>';
+			html += '	</td>';
+			html += '</tr>';
+			html += '<tr id="bannerLinkTr2" name="linkRow" style="display: none;">';
+			html += '	<th>링크2</th>';
+			html += '	<td><input type="text" class="w400" name="linkUrl" maxlength="300" required="required" data-valid-name="LINK" value="#"/></td>';
+			html += '</tr>';
+		}
+		html += '</thead><tbody>';
+		html += '</tbody></table>';
 		$("#popSortable").prepend(html);
 		$("#popSortable").sortable();
 		$('.schDate').datepicker("destroy");
@@ -187,8 +356,113 @@
 			changeYear: true,
 			defaultDate: $('.schDate').val()
 		});
+
+		tableLen = tableLen+1;
 	});
 
+	var fnChangeBannerType = function (obj, idx){
+		if(idx==1){
+			$(obj).closest("table").find("[id=bannerImgTr1]").show();
+			$(obj).closest("table").find("[id=bannerLinkTr1]").show();
+			$(obj).closest("table").find("[id=bannerImgTr2]").hide();
+			$(obj).closest("table").find("[id=bannerLinkTr2]").hide();
+		}else{
+			$(obj).closest("table").find("[id=bannerImgTr1]").show();
+			$(obj).closest("table").find("[id=bannerLinkTr1]").show();
+			$(obj).closest("table").find("[id=bannerImgTr2]").show();
+			$(obj).closest("table").find("[id=bannerLinkTr2]").show();
+		}
+	}
+
+	// 몰메인>메인롤링배너 컨텐츠유형 선택시
+	var fnChangeContentsType = function (obj, idx){
+		var radioVal = $(obj).closest("td").find("input[name=contentsType"+idx+"]:checked").val();
+		if(radioVal=='P'){
+			$("#planArea"+idx+" .inputPlan").show();
+			$("#planArea"+idx+" .btnPlan").show();
+		}else{
+			$("#planArea"+idx).find("input[name=planSq"+idx+"]").val('');
+			$("#planArea"+idx+" .inputPlan").hide();
+			$("#planArea"+idx+" .btnPlan").hide();
+		}
+	}
+
+	// SMM005 배너유형 이미지/링크
+	var fnAddSmm005ImgRow = function (param , idx){
+
+	}
+
+	// 몰메인>메인롤링배너 기획전 조회
+	var tableDataId = 0;
+	var fnSearchPlan = function (idx){
+		cfnOpenPlanPopup('callbackPlanPopup');
+		tableDataId = idx;
+	}
+
+	var callbackPlanPopup = function (result){
+		$("#mcTable"+tableDataId+" .planArea").find("input[name=planSq"+tableDataId+"]").val(result[0].planSq);
+	}
+
+	// SMM005 데이터 validation 체크
+	function smm005DataValidation(){
+		$(".mcTable").each(function(i){
+			var thisIdx = $(this).find("input[name=tableIdx]").val();
+			var contentsType = $(this).find("input:radio[name=bannerType"+thisIdx+"]:checked").val();
+
+			var imgPath1 = $(this).find("[id=ImageArea1]").find("input[name=imgPath]").val();
+			var imgPath2 = $(this).find("[id=ImageArea2]").find("input[name=imgPath]").val();
+			var link1 = $(this).find("[id=bannerLinkTr1]").find("input[name=linkUrl]").val();
+			var link2 = $(this).find("[id=bannerLinkTr2]").find("input[name=linkUrl]").val();
+
+			if(gagajf.isNull(imgPath1)){
+				mcxDialog.alert('배너1 이미지를 선택해주세요.');
+				return false;
+			}
+			if(gagajf.isNull(link1)){
+				mcxDialog.alert('배너1 링크를 선택해주세요.');
+				return false;
+			}
+
+			if(contentsType==2){
+				if(gagajf.isNull(imgPath2)){
+					mcxDialog.alert('배너2 이미지를 선택해주세요.');
+					return false;
+				}
+				if(gagajf.isNull(link2)){
+					mcxDialog.alert('배너2 링크를 선택해주세요.');
+					return false;
+				}
+			}
+		});
+		return true;
+	}
+
+	// SMM001 데이터 validation 체크
+	function smm001DataValidation(){
+		$(".mcTable").each(function(i){
+			var thisIdx = $(this).find("input[name=tableIdx]").val();
+			var contentsTypeVal = $(this).find("input:radio[name=contentsType"+thisIdx+"]:checked").val();
+			var textColorVal = $(this).find("input:radio[name=thumTextColor"+thisIdx+"]:checked").val();
+
+			if(gagajf.isNull(contentsTypeVal)){
+				mcxDialog.alert('컨텐츠 유형을 선택해주세요.');
+				return false;
+			}
+			if(contentsTypeVal=='P'){
+				if(gagajf.isNull($(this).find("input[name=planSq"+thisIdx+"]").val())){
+					mcxDialog.alert('기획전 번호를 입력해주세요.');
+					return false;
+				}
+			}
+			if(gagajf.isNull(textColorVal)){
+				mcxDialog.alert('썸네일 글자 색상을 선택해주세요.');
+				return false;
+			}
+		});
+
+		return true;
+	}
+
 	/**
 	 * 임시저장
 	 */
@@ -205,6 +479,18 @@
 			}
 		}
 
+		if(contentsLoc=='SMM001'){
+			if(!smm001DataValidation()){
+				return false;
+			}
+		}
+
+		if(contentsLoc=='SMM005'){
+			if(!smm005DataValidation()){
+				return false;
+			}
+		}
+
 		var titleBool = true;
 		$("#popSortable").find('input[name=title]').each(function(idx, title) {
 			if ($(title).val()==''){
@@ -228,6 +514,10 @@
 			var strVar2 = '';
 			var strVar3 = '';
 			var strVar4 = '';
+			var strVar5 = '';
+			var strVar6 = '';
+			var strVar7 = '';
+			var strVar8 = '';
 			var strTitle1 = '';
 			var strTitle2 = '';
 			var strTitle3 = '';
@@ -236,6 +526,7 @@
 			var subText2 = '';
 			var subText3 = '';
 			var subText4 = '';
+			var contentsType = '';
 			var i = 1;
 			$(this).find('input[name=imgPath]').each(function(){
 				eval("imgPath" + i + "='"+$(this).val()+"'");
@@ -272,8 +563,25 @@
 
 			var dispOrd = $(this).find("[name=dispOrd]").val();
 
+			if(contentsLoc=='SMM001'){
+				var thisIdx = $(this).find("input[name=tableIdx]").val();
+				strVar5 = $(this).find("input:radio[name=contentsType"+thisIdx+"]:checked").val();
+				strVar6 = $(this).find("input[name=planSq"+thisIdx+"]").val();
+				strVar7 = $(this).find("input:radio[name=thumTextColor"+thisIdx+"]:checked").val();
+			}
+
+			if(contentsLoc=='SMM005'){
+				var thisIdx = $(this).find("input[name=tableIdx]").val();
+				contentsType = $(this).find("input:radio[name=bannerType1"+thisIdx+"]:checked").val();
+				imgPath1 = $(this).find("#ImageArea1").find("input[name=imgPath]").val();
+				strVar1 = $(this).find("#bannerLinkTr1").find("input[name=linkUrl]").val();
+				imgPath2 = $(this).find("#ImageArea2").find("input[name=imgPath]").val();
+				strVar2 = $(this).find("#bannerLinkTr2").find("input[name=linkUrl]").val();
+			}
+
 			var data = {cateNo : cateNo
 				, contentsLoc : contentsLoc
+				, contentsType : contentsType
 				, dispStdt : dispStdt
 				, dispEddt : dispEddt
 				, newImgFileArr : newImgFileArr
@@ -285,6 +593,10 @@
 				, strVar2 : strVar2
 				, strVar3 : strVar3
 				, strVar4 : strVar4
+				, strVar5 : strVar5
+				, strVar6 : strVar6
+				, strVar7 : strVar7
+				, strVar8 : strVar8
 				, strTitle1 : strTitle1
 				, strTitle2 : strTitle2
 				, strTitle3 : strTitle3
@@ -371,7 +683,7 @@
 			return;
 		}
 		// 파일 업로드
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/contents'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/contents'
 				, file
 				, function(result) {
 					$(obj).closest('div').find('input:hidden[name=newImgFile]').val(result.newFileName);
@@ -565,7 +877,7 @@
 		$("#popSortable").disableSelection();
 		fnGetContentsPreviewList();
 	});
-/*]]>*/
+	/*]]>*/
 </script>
 
 </html>

+ 13 - 48
src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html

@@ -46,16 +46,7 @@
 	var tdDeleteWidth = parseInt(tdWidth/11, 10);
 	tdWidth = tdWidth - tdDeleteWidth;
 	var cate1List = [[${cate1List}]];
-
-	// 컨텐츠 미리보기 리스트
-	var fnGetContentsPreviewList = function() {
-		$("#gnbTabList").html('');
-		var data = {cateNo : cateNo
-			,contentsLoc : contentsLoc
-		};
-		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/display/contents/preview/list', jsonData, fnCreatePopLayout);
-	}
+	var tableIdx = 0;
 
 	// 컨텐츠 추가 날짜 설정
 	var fnCreateTimeOption = function(val, sel) {
@@ -147,11 +138,7 @@
 	 */
 	var tabIdx = 0;
 	var fnAddTab = function (param){
-		if(gagajf.isNull($(".tabTable").find("input[data-id]").val())){
-			tabIdx = 0;
-		}else{
-			tabIdx = parseInt($(".tabTable").find("input[data-id]").val())+1;
-		}
+		tabIdx = tableIdx;
 
 		var html = '<table class="frmStyle tabTable" style="margin-bottom:30px" id="tabTable'+tabIdx+'">';
 		html += '<input type="hidden" name="idxTest" value="'+tabIdx+'" data-id="'+tabIdx+'">';
@@ -161,7 +148,15 @@
 		html += '<col/>';
 		html += '</colgroup>';
 		html += '<thead>';
-		html += fnCateTypeArea();
+		html += '<tr class="cateTypeTr">';
+		html += '<th>유형선택</th>';
+		html += '<td colspan="3">';
+		html += '<label class="rdoBtn"><input type="radio" name="cateType'+tabIdx+'" value="B" onclick="fnChangeCateType(this,'+tabIdx+');"/>브랜드</label>';
+		html += '<label class="rdoBtn"><input type="radio" name="cateType'+tabIdx+'" value="C" onclick="fnChangeCateType(this,'+tabIdx+');"/>대카테고리</label>';
+		html += '<label class="rdoBtn"><input type="radio" name="cateType'+tabIdx+'" value="O" onclick="fnChangeCateType(this,'+tabIdx+');"/>아울렛</label>';
+		html += '<label class="rdoBtn"><input type="radio" name="cateType'+tabIdx+'" value="L" onclick="fnChangeCateType(this,'+tabIdx+');"/>이벤트링크</label>';
+		html += '</td>';
+		html += '</tr>';
 		html += '<tr><th>전시일시</th><td><input name="dispStdt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출시작일" data-valid-type="calendar"/>';
 		html += '<select name="stTimeHour" required="required" data-valid-name="노출기간 시작시간">';
 		html += fnCreateTimeOption(24);
@@ -235,33 +230,11 @@
 			changeYear: true,
 			defaultDate: $('.schDate').val()
 		});
-		tabIdx++;
+		tableIdx = tableIdx+1;
 		fnResetTabIdx();
 		//fnResetCateTypeIdx();
 	}
 
-	var cateTypeIdx = 0;
-	var fnCateTypeArea = function (){
-		if(gagajf.isNull($(".tabTable").find("input[data-id]").val())){
-			cateTypeIdx = 0;
-		}else{
-			cateTypeIdx = parseInt($(".tabTable").find("input[data-id]").val())+1;
-		}
-		var html = '';
-		html += '<tr class="cateTypeTr">';
-		html += '<th>유형선택</th>';
-		html += '<td colspan="3">';
-		html += '<label class="rdoBtn"><input type="radio" name="cateType'+cateTypeIdx+'" value="B" onclick="fnChangeCateType(this,'+cateTypeIdx+');"/>브랜드</label>';
-		html += '<label class="rdoBtn"><input type="radio" name="cateType'+cateTypeIdx+'" value="C" onclick="fnChangeCateType(this,'+cateTypeIdx+');"/>대카테고리</label>';
-		html += '<label class="rdoBtn"><input type="radio" name="cateType'+cateTypeIdx+'" value="O" onclick="fnChangeCateType(this,'+cateTypeIdx+');"/>아울렛</label>';
-		html += '<label class="rdoBtn"><input type="radio" name="cateType'+cateTypeIdx+'" value="L" onclick="fnChangeCateType(this,'+cateTypeIdx+');"/>이벤트링크</label>';
-		html += '</td>';
-		html += '</tr>';
-
-		cateTypeIdx++;
-		return html;
-	}
-
 	var fnResetTabIdx = function (){
 		$(".tabTable").each(function(i){
 			//$(this).attr('id','tabTable'+i);
@@ -414,7 +387,6 @@
 	});
 
 	var fnGetGnbTabContentsPreviewList = function (){
-		console.log('등록이되었다!');
 		$("#gnbTabList").html('');
 		var data = {cateNo : cateNo
 			,contentsLoc : contentsLoc
@@ -423,15 +395,7 @@
 		gagajf.ajaxJsonSubmit('/display/contents/preview/list', jsonData, fnCreateGnbTabLayout);
 	}
 
-
-
-	var tableIdx = 0;
 	var fnCreateGnbTabLayout = function (result){
-		/*if(gagajf.isNull($(".tabTable").find("input[data-id]").val())){
-			tabIdx = 0;
-		}else{
-			tabIdx = parseInt($(".tabTable").find("input[data-id]").val())+1;
-		}*/
 		var html = '';
 		for(var i=0; i<result.length; i++){
 			var dispStdt = result[i].dispStdt.split(" ");
@@ -556,6 +520,7 @@
 			changeYear: true,
 			defaultDate: $('.schDate').val()
 		});
+		tableIdx = $(".tabTable").length;
 	}
 
 	$(document).ready(function() {

+ 53 - 6
src/main/webapp/WEB-INF/views/display/MainListForm.html

@@ -44,11 +44,15 @@
 							</select>
 						</td>
 						<th>중분류</th>
-						<td>
+						<td name="cate2Select" style="display:block;">
 							<select name="cate2No" id="cate2No" onchange="fnGetMainDisplayList('cate2');">
 								<option value="">[선택]</option>
 							</select>
 						</td>
+						<td name="cate2Search" style="display:none;">
+							<input type="text" class="w200" name="brandGroupNo" value="" />
+							<button type="button" class="btn btnRight btn-success btn-lg" onclick="fnSearchBrandGroup();">브랜드조회</button>
+						</td>
 					</tr>
 				</table>
 			</form>
@@ -145,7 +149,17 @@
 	*/
 	var fnGetMainDisplayList = function (cate){
 		if(cate=='cate1'){
-			$("#searchForm select[name=cate2No]").html('<option value="">[선택]</option>');
+			var cate1Val = $("#searchForm select[name=cate1No] option:selected").val().split(',')[0];		//1700,Y
+
+			if((!gagajf.isNull(cate1Val)&&cate1Val=='1711') || (!gagajf.isNull(cate1Val)&&cate1Val=='1721')){
+				$("#searchForm").find("td[name=cate2Select]").css('display','none');
+				$("#searchForm").find("td[name=cate2Search]").css('display','block');
+			}else{
+				$("#searchForm").find("td[name=cate2Select]").css('display','block');
+				$("#searchForm").find("td[name=cate2Search]").css('display','none');
+				$("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val('');
+				$("#searchForm select[name=cate2No]").html('<option value="">[선택]</option>');
+			}
 		}
 		$("#viewUl").addClass("off");
 		var val = $("#searchForm select[name=cate1No]").val();
@@ -164,10 +178,18 @@
 				gagajf.ajaxJsonSubmit('/display/main/category/list', jsonData, fnCate2NoCallBack);
 			}else{
 				$("#viewUl").removeClass("off");
-				var cateNo = val.split(',')[0];
-				if(!gagajf.isNull($("#searchForm select[name=cate2No]").val())){
-					cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
+				var cateNo = "";
+				var cate1Val = $("#searchForm select[name=cate1No] option:selected").val().split(',')[0];		//1700,Y
+				if((!gagajf.isNull(cate1Val)&&cate1Val=='1711') || (!gagajf.isNull(cate1Val)&&cate1Val=='1721')){
+					cateNo = $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val();
+				}else{
+					cateNo = val.split(',')[0];
+					if(!gagajf.isNull($("#searchForm select[name=cate2No]").val())){
+						cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
+					}
 				}
+
+				console.log('cateNo::'+cateNo);
 				var data = {
 					cateNo : cateNo
 				};
@@ -178,6 +200,15 @@
 		}
 	}
 
+	var fnSearchBrandGroup = function (){
+		cfnOpenBrandGroupListPopup("fnCallBackBrandGroup", "S", "S");
+	}
+
+	var fnCallBackBrandGroup = function (result){
+		$("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val(result[0].brandGroupNo);
+		fnGetMainDisplayList('cate2');
+	}
+
 	/**
 	 * 레이아웃 조회
 	 */
@@ -463,6 +494,16 @@
 		$(obj).closest("tbody").remove();
 	}
 
+	function fnCate2BrandCheck(){
+		var cateBrand = $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val();
+		if(gagajf.isNull(cateBrand)){
+			mcxDialog.alert('브랜드코드를 조회해주세요.');
+			return false;
+		}
+
+		return true;
+	}
+
 	/**
 	 * 레이아웃 저장
 	 */
@@ -479,6 +520,12 @@
 		var cateNm = '';
 		if(val.split(',')[1]=='Y'){
 			cateNo = val.split(',')[0];
+			if(cateNo == '1711' || cateNo == '1711'){
+				if(!fnCate2BrandCheck()){
+					return false;
+				}
+				cateNo = $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val();
+			}
 		}else{
 			cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
 		}
@@ -581,7 +628,7 @@
 		if (typeof(file) == 'undefined'){
 			return;
 		}
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/main'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/main'
 				, file
 				, function(result) {
 					$(obj).closest('div').find('input:hidden[name=sysFileNm]').val(result.oldFileName);

+ 4 - 4
src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html

@@ -14,7 +14,7 @@
  * 1.0  2021.2.24    bin2107     최초 작성
  *******************************************************************************
  -->
-	<div class="modalPopup" data-width="1400" >
+	<div class="modalPopup" data-width="1500" >
 		<div class="panelStyle">
 			<div class="panelTitle">
 				<h2 id="multiPopTitle" th:text="${contentsLoc}">Multi</h2>
@@ -47,7 +47,7 @@
 					</tr>
 				</table>
 			</form>
-			<form style="height:600px; width:1370px; overflow:auto;" id="multiPopSortable">
+			<form style="height:600px; width:1470px; overflow:auto;" id="multiPopSortable">
 				<input type="hidden" name="mdTitle">
 			</form>
 		</div>
@@ -303,7 +303,7 @@
 			return;
 		}
 		// 파일 업로드
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/contents/brand/'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/contents/brand/'
 				, file
 				, function(result) {
 					$(obj).closest('div').find('input:hidden[name=brandNewImgFile]').val(result.newFileName);
@@ -377,7 +377,7 @@
 			return;
 		}
 		// 파일 업로드
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/contents/plan'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/contents/planning'
 				, file
 				, function(result) {
 					$(obj).closest('div').find('input:hidden[name=planNewImgFile]').val(result.newFileName);

+ 1 - 1
src/main/webapp/WEB-INF/views/display/PopupListForm.html

@@ -505,7 +505,7 @@
 		if (typeof(file) == 'undefined'){
 			return;
 		}
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/popup'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/popup'
 				, file
 				, function(result) {
 					$(obj).closest('div').find('input:hidden[name=sysFileNm]').val(result.oldFileName);

+ 6 - 4
src/main/webapp/WEB-INF/views/goods/GoodsFreeGoodsForm.html

@@ -130,7 +130,7 @@
 								<input type="hidden" name="sysImgNm" id="sysImgNm"/>
 								<input type="hidden" name="newSysImgNm" id="newSysImgNm"/>
 							</div>
-							<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.default.view') + '/display/freegoods/'}"/>
+							<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.default.view')}"/>
 							<div id="imgView" class="off">
 								<img id="bannerPreViewUrl" src="" style="height:100px"/>
 							</div>
@@ -154,7 +154,7 @@
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _imgUrl+ "/display/freegoods/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _imgUrl+  params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
 			}
 		},
 		{headerName: "브랜드", field: "brandEnm", width: 130, cellClass: 'text-center'},
@@ -208,6 +208,8 @@
 				$("#imgView").removeClass("off").addClass("on");
 			}else {
 				$("#sysImgNm").val('');
+				$("#bannerPreViewUrl").attr('src', '');
+				$("#imgView").removeClass("on").addClass("off");
 			}
 			$('#detailForm input[name=file]').closest('div').find('label').text('파일선택');
 		}
@@ -294,12 +296,12 @@
 		var file = this.files[0];
 
 		// 파일 업로드
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/freegoods'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/contents/freegoods'
 				, file
 				, function(result) {
 					// 업로드한 파일명 설정
 					$('#detailForm input[name=newSysImgNm]').val(result.newFileName);
-					$("#bannerPreViewUrl").attr('src', $("#uploadDefaultUrl").val()+result.newFileName);
+					$("#bannerPreViewUrl").attr('src', $("#uploadDefaultUrl").val()+"/contents/freegoods/"+result.newFileName);
 					$("#imgView").removeClass("off").addClass("on");
 				}
 		);

+ 8 - 2
src/main/webapp/WEB-INF/views/marketing/ReviewForm.html

@@ -149,14 +149,20 @@
 		{
 			headerName: "상품평번호", field: "reviewSq", width: 90, cellClass: 'text-center',
 			cellRenderer: function(params) {
-				return '<a href="javascript:void(0);">' + (params.value == 'R' ? '일반' : '포토/영상') + '</a>';
+				return '<a href="javascript:void(0);" onclick="fnOpenReviewPopup(' + params.value + ');">' + (params.value == 'R' ? '일반' : '포토/영상') + '</a>';
 			}
 		},
 		{headerName: "상품평유형", field: "reviewGb", width: 90, cellClass: 'text-center'},
 		{
 			headerName: "주문상품", cellClass: 'text-center',
 			children: [
-				{headerName: '주문번호', field: 'ordNo', width: 90, cellClass: 'text-center', cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }},
+				{
+					headerName: '주문번호', field: 'ordNo', width: 90, cellClass: 'text-center',
+					cellRenderer: function(params) {
+						if (gagajf.isNull(params.value)) return '';
+						return '<a href="javascript:void(0);">' + params.value + '</a>';
+					}
+				},
 				{headerName: '주문상세번호', field: 'ordDtlNo', width: 120, cellClass: 'text-center', hide: true},
 				{headerName: "브랜드명", field: "brandKnm", width: 130, cellClass: 'text-center'},
 				{

+ 6 - 1
src/main/webapp/ux/plugins/gaga/gaga.validation.js

@@ -380,6 +380,7 @@ var gagajf = {
 								}
 							});
 							isInvalid = false;
+							return false;
 						}
 					}
 					//최소값
@@ -392,6 +393,7 @@ var gagajf = {
 								}
 							});
 							isInvalid = false;
+							return false;
 						}
 					}
 
@@ -406,6 +408,7 @@ var gagajf = {
 								}
 							});
 							isInvalid = false;
+							return false;
 						}
 					}
 					//최소값
@@ -418,9 +421,9 @@ var gagajf = {
 								}
 							});
 							isInvalid = false;
+							return false;
 						}
 					}
-
 				case 'real': // 실수
 					//최대값
 					if ($(el).attr("max")) {
@@ -432,6 +435,7 @@ var gagajf = {
 								}
 							});
 							isInvalid = false;
+							return false;
 						}
 					}
 					//최소값
@@ -444,6 +448,7 @@ var gagajf = {
 								}
 							});
 							isInvalid = false;
+							return false;
 						}
 					}
 			}