Преглед на файлове

Merge branch 'develop' into csh9191

ChoiSooHwan преди 5 години
родител
ревизия
11d23fe3d8

+ 6 - 15
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,7 +531,6 @@ 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.setContentsSq(contents.getDispOrd());
 				contents.setRegNo(TsaSession.getInfo().getUserNo());
@@ -551,18 +550,14 @@ public class TsaDisplayService {
 		int ind = 1;
 		for (Contents contents : contentsList) {
 			contents.setContentsSq(null);
-			log.info("1==========={}");
 			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);
@@ -577,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);
 						}
@@ -613,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

+ 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/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);

+ 266 - 70
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -59,6 +59,8 @@
 	var tdDeleteWidth = parseInt(tdWidth/11, 10);
 	tdWidth = tdWidth - tdDeleteWidth;
 
+	var tableLen = 0;		// 테이블 ID
+
 	// 컨텐츠 미리보기 리스트
 	var fnGetContentsPreviewList = function() {
 		$("#popSortable").html('');
@@ -69,13 +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 mcTable" style="margin-bottom:30px" id="mcTable'+i+'">';
-			html += '<input type="hidden" name="tableIdx" value="'+i+'" >';
+			html += '<input type="hidden" name="tableIdx" value="'+i+'" data-id="'+i+'">';
 			html += '<colgroup>';
 			html += '<col style="width:10%;"/>';
 			html += '<col style="width:55%;"/>';
@@ -98,38 +101,106 @@
 			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>';
+			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>';
 			if(contentsLoc=='SMM001'){
-				//html += fnMainBannerArea(i);
 				html += '<tr>';
 				html += '	<th>컨텐츠유형</th>';
-				html += '	<td class="planArea" name="planArea" colspan="3">';
-				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>';
-				html += '		<input type="text" class="w100 inputPlan" name="planSq'+i+'" value=""/>';
-				html += '		<button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan('+i+');">기획전검색</button>';
+				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">';
-				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>';
+				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);
@@ -159,30 +230,8 @@
 			changeYear: true,
 			defaultDate: $('.schDate').val()
 		});
-		fnResetIdx();
-	}
-
-	var fnResetIdx = function (){
-		$(".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();
-			console.log(i+ '::contentsTypeVal::'+contentsTypeVal);
-			console.log(i+ '::textColorVal::'+textColorVal);
-
-			$(this).find("input:radio[name=contentsType"+thisIdx+"]").removeAttr("onclick");
-			$(this).find("input:radio[name=contentsType"+thisIdx+"]").attr("onclick", "fnChangeContentsType(this,"+i+");");
-			$(this).find("input:radio[name=contentsType"+thisIdx+"]").val(contentsTypeVal);
-			$(this).find("input[name=planSq"+thisIdx+"]").removeAttr("onclick");
-			$(this).find("input[name=planSq"+thisIdx+"]").attr("onclick", "fnSearchPlan("+i+");");
-			$(this).find("input[name=contentsType"+thisIdx+"]").attr('name','contentsType'+i);
-			$(this).find("input[name=planSq"+thisIdx+"]").attr('name','planSq'+i);
-			$(this).find("input:radio[name=thumTextColor"+thisIdx+"]").attr('name','thumTextColor'+i);
-			$(this).find("input:radio[name=thumTextColor"+thisIdx+"]").val(textColorVal);
-			$(this).attr('id','mcTable'+i);
-			$(this).find("input[name=tableIdx]").val(i);
-		});
 
+		tableLen = $(".mcTable").length;
 	}
 
 	/**
@@ -190,8 +239,10 @@
 	 */
 	var dataIdx=0;
 	$("#btnPopAddRow").on("click", function (){
+		dataIdx = tableLen;
+
 		var html = '<table class="frmStyle mcTable" style="margin-bottom:30px" id="mcTable'+dataIdx+'">';
-		html += '<input type="hidden" name="tableIdx" value="'+dataIdx+'">';
+		html += '<input type="hidden" name="tableIdx" value="'+dataIdx+'" data-id="'+dataIdx+'">';
 		html += '<colgroup>';
 		html += '<col style="width:10%;"/>';
 		html += '<col style="width:55%;"/>';
@@ -214,24 +265,28 @@
 		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>';
+		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>';
 		if(contentsLoc=='SMM001'){
-			//html += fnMainBannerArea();
 			html += '<tr>';
 			html += '	<th>컨텐츠유형</th>';
-			html += '	<td class="planArea" name="planArea" colspan="3">';
+			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=""/>';
@@ -246,7 +301,53 @@
 			html += '	</td>';
 			html += '</tr>';
 		}
-		html += '</thead><tbody></tbody></table>';
+		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");
@@ -255,45 +356,42 @@
 			changeYear: true,
 			defaultDate: $('.schDate').val()
 		});
-		fnResetIdx();
+
+		tableLen = tableLen+1;
 	});
 
-	var mbIdx = 0;
-	var fnMainBannerArea = function (param){
-		var html = '';
-		html += '<tr>';
-		html += '	<th>컨텐츠유형</th>';
-		html += '	<td class="planArea" name="planArea" colspan="3">';
-		html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+mbIdx+'" value="P" onclick="fnChangeContentsType(this,'+mbIdx+');" checked="checked"/>기획전</label>';
-		html += '		<label class="rdoBtn"><input type="radio" name="contentsType'+mbIdx+'" value="E" onclick="fnChangeContentsType(this,'+mbIdx+');"/>이벤트</label>';
-		html += '		<input type="text" class="w100 inputPlan" name="planSq'+mbIdx+'" value=""/>';
-		html += '		<button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan('+mbIdx+');">기획전검색</button>';
-		html += '	</td>';
-		html += '</tr>';
-		html += '<tr>';
-		html += '	<th>썸네일 <br>글자 색상</th>';
-		html += '	<td colspan="3">';
-		html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+mbIdx+'" value="BLACK" checked="checked"/>BLACK</label>';
-		html += '		<label class="rdoBtn"><input type="radio" name="thumTextColor'+mbIdx+'" value="WHITE" />WHITE</label>';
-		html += '	</td>';
-		html += '</tr>';
-		mbIdx++;
-		return html;
+	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'){
-			$(obj).find(".planArea .inputPlan").show();
-			$(obj).find(".planArea .btnPlan").show();
+			$("#planArea"+idx+" .inputPlan").show();
+			$("#planArea"+idx+" .btnPlan").show();
 		}else{
-			$(obj).find(".planArea").find("input[name=planSq"+idx+"]").val('');
-			$(obj).find(".planArea .inputPlan").hide();
-			$(obj).find(".planArea .btnPlan").hide();
+			$("#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){
@@ -305,6 +403,66 @@
 		$("#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;
+	}
+
 	/**
 	 * 임시저장
 	 */
@@ -321,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()==''){
@@ -344,6 +514,10 @@
 			var strVar2 = '';
 			var strVar3 = '';
 			var strVar4 = '';
+			var strVar5 = '';
+			var strVar6 = '';
+			var strVar7 = '';
+			var strVar8 = '';
 			var strTitle1 = '';
 			var strTitle2 = '';
 			var strTitle3 = '';
@@ -352,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()+"'");
@@ -388,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
@@ -401,6 +593,10 @@
 				, strVar2 : strVar2
 				, strVar3 : strVar3
 				, strVar4 : strVar4
+				, strVar5 : strVar5
+				, strVar6 : strVar6
+				, strVar7 : strVar7
+				, strVar8 : strVar8
 				, strTitle1 : strTitle1
 				, strTitle2 : strTitle2
 				, strTitle3 : strTitle3
@@ -487,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);

+ 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() {

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

@@ -628,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);

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

@@ -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);

+ 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;
 						}
 					}
 			}