Ver código fonte

Merge branch 'develop' into eskim

eskim 5 anos atrás
pai
commit
7e360a3b40
33 arquivos alterados com 2244 adições e 542 exclusões
  1. 9 0
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  2. 57 0
      src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java
  3. 29 5
      src/main/java/com/style24/admin/biz/dao/TsaMailTemplateDao.java
  4. 3 3
      src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java
  5. 17 0
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  6. 142 13
      src/main/java/com/style24/admin/biz/service/TsaDisplayService.java
  7. 109 38
      src/main/java/com/style24/admin/biz/service/TsaMailTemplateService.java
  8. 7 8
      src/main/java/com/style24/admin/biz/service/TsaPlanService.java
  9. 15 2
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  10. 56 1
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  11. 128 46
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  12. 37 0
      src/main/java/com/style24/persistence/domain/Contents.java
  13. 8 0
      src/main/java/com/style24/persistence/domain/CustomerSearch.java
  14. 10 4
      src/main/java/com/style24/persistence/domain/MktmailManagement.java
  15. 3 2
      src/main/java/com/style24/persistence/domain/MktmailManagementGoods.java
  16. 3 0
      src/main/java/com/style24/persistence/domain/Poll.java
  17. 30 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  18. 216 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  19. 85 43
      src/main/java/com/style24/persistence/mybatis/shop/TsaMailTemplate.xml
  20. 10 7
      src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml
  21. 455 0
      src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html
  22. 115 16
      src/main/webapp/WEB-INF/views/display/MainListForm.html
  23. 378 157
      src/main/webapp/WEB-INF/views/marketing/MktmailmanagementDetailForm.html
  24. 38 10
      src/main/webapp/WEB-INF/views/marketing/MktmailmanagementForm.html
  25. 64 0
      src/main/webapp/WEB-INF/views/marketing/MktmailmanagementPreviewForm.html
  26. 1 1
      src/main/webapp/WEB-INF/views/marketing/PlanCornerCopyForm.html
  27. 3 6
      src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html
  28. 97 82
      src/main/webapp/WEB-INF/views/marketing/PlanDetailPopupForm.html
  29. 17 18
      src/main/webapp/WEB-INF/views/marketing/PlanListForm.html
  30. 38 21
      src/main/webapp/WEB-INF/views/marketing/PlanPopupForm.html
  31. 23 18
      src/main/webapp/WEB-INF/views/marketing/PollListForm.html
  32. 24 36
      src/main/webapp/WEB-INF/views/marketing/PollVoteRatePopupForm.html
  33. 17 1
      src/main/webapp/ux/js/admin.popup.js

+ 9 - 0
src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java

@@ -225,6 +225,15 @@ public interface TsaCustomerDao {
 	 */
 	Collection<Customer> getCustomerDormantList(CustomerSearch customerSearch);
 
+	/**
+	 * 휴대전화 번호 조회
+	 * @param customerSearch - 검색조건
+	 * @return int - 고객 수
+	 * @author jsshin
+	 * @since 2021. 02. 23
+	 */
+	int getCustomerFindByCellPhone(CustomerSearch customerSearch);
+
 	void createException();
 
 	void updateCutomerEncodeData(Customer customer);

+ 57 - 0
src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java

@@ -241,4 +241,61 @@ public interface TsaDisplayDao {
 	 * @since 2021. 2. 22
 	 */
 	void deleteMainLayout(MainDisplay mainDisplay);
+
+	/**
+	 * 메인전시 레이아웃 저장
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 22
+	 */
+	void saveMainLayout(MainDisplay mainDisplay);
+
+	/**
+	 * 메인전시 컨텐츠 설명
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	String getContentsDesc(String contentsLoc);
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 리스트
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	Collection<Contents> getContentsPreviewList(Contents contents);
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 삭제
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	void deleteContentsPreview(Contents contents);
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 저장
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	void saveContentsPreview(Contents contents);
+
+	/**
+	 * 메인전시 컨텐츠 삭제
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	void deleteContents(Contents contents);
+
+	/**
+	 * 메인전시 컨텐츠 저장
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	void saveContents(Contents contents);
+
 }

+ 29 - 5
src/main/java/com/style24/admin/biz/dao/TsaMailTemplateDao.java

@@ -62,12 +62,12 @@ public interface TsaMailTemplateDao {
 	 */
 	MktmailManagement getMktmailManagementDetail(Integer mailtSq);
 	Collection<MktmailManagementTc> getMktmailManagementTCList(MktmailManagementTc mktmailManagementTc);
-	Collection<MktmailManagementGoods> getMktmailManagementGoodsList(MktmailManagementGoods mktmailManagementGoods);
+	Collection<MktmailManagementGoods> getMktmailManagementGoodsList(MktmailManagementTc mktmailManagementTc);
 	/**
 	 * MKT메일 등록수정
 	 * @param  mailtemplate - 메일관련 정보
 	 * @author csh9191
-	 * @since 2021. 02. 03
+	 * @since 2021. 02. 13
 	 */
 	void saveMktMailDetail(MktmailManagement mktMailManagement);
 	
@@ -87,7 +87,7 @@ public interface TsaMailTemplateDao {
 	Collection<Goods> getMailGoodsInfo(Goods goods);
 	
 	/**
-	 * 메일헤더푸터 관리 목록
+	 * MKT메일 관리 목록
 	 * @param mailtemplate - 메일관련 정보
 	 * @return
 	 * @author csh9191
@@ -95,11 +95,35 @@ public interface TsaMailTemplateDao {
 	 */
 	Collection<MktmailManagement> getMktMailList(MktmailManagement mktMailManagement);
 	/**
-	 * 메일헤더푸터 리스트 삭제
-	 * @param  mailtemplate - 메일관련 정보
+	 * MKT메일 리스트 삭제
+	 * @param  mktmailManagement - 메일관련 정보
 	 * @author csh9191
 	 * @since 2021. 02. 15
 	 */
 	void deleteMktmailList(MktmailManagement mktMailManagement);
+	/**
+	 * MKT메일 구분자 삭제
+	 * @param  mktmailManagement - 메일관련 정보
+	 * @author csh9191
+	 * @since 2021. 02. 22
+	 */
+	void deleteMktCorner(MktmailManagementTc mktmailManagementTc);
+	/**
+	 * MKT메일 상품 삭제
+	 * @param  mktmailManagement - 메일관련 정보
+	 * @author csh9191
+	 * @since 2021. 02. 22
+	 */
+	void deleteMktGoodsList(MktmailManagementGoods mktmailManagementGoods);
+	/**
+	 * MKT 메일 미리보기
+	 * @param mktmailManagement - 메일관련 정보
+	 * @return
+	 * @author csh9191
+	 * @since 2021. 02. 19
+	 */
+	MktmailManagement getMktmailPreviewHeader(Integer mktMailManagement);
+	MktmailManagement getMktmailPreviewFooter(Integer mktMailManagement);
+	MktmailManagement getMktmailPreviewContent(Integer mktMailManagement);
 
 }

+ 3 - 3
src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java

@@ -34,7 +34,7 @@ public interface TsaPlanDao {
 	 * @author rladbwnd5
 	 * @since 2019. 12. 31
 	 */
-	void createPlanWebInfo(Plan param);
+	void createPlanInfo(Plan param);
 	
 	/**
 	 * 기획전 목록
@@ -53,7 +53,7 @@ public interface TsaPlanDao {
 	 * @author sowon
 	 * @since 2021. 2. 5
 	 */
-	int getPlanListCnt(Plan param);
+	int getPlanListCount(Plan param);
 	
 	/**
 	 * 기획전 삭제
@@ -99,7 +99,7 @@ public interface TsaPlanDao {
 	 * @author sowon
 	 * @since 2021. 2. 8
 	 */
-	void updatePlanWebInfo(Plan param);
+	void updatePlanInfo(Plan param);
 	
 	/**
 	 * 기획전 복사

+ 17 - 0
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -133,6 +133,7 @@ public class TsaCustomerService {
 		Integer userNo = TsaSession.getInfo().getUserNo();
 		customer.setRegNo(userNo);
 		customer.setUpdNo(userNo);
+		customer.encryptData();
 		coreCustomerService.createCustomerHistory(customer);
 		customerDao.updateCustomerCellPhnno(customer);
 	}
@@ -372,4 +373,20 @@ public class TsaCustomerService {
 	public String getTemporaryPassword(int length) {
 		return coreCustomerService.getTemporaryPassword(length);
 	}
+
+	/**
+	 * 휴대전화 번호 조회
+	 * @param  cellPhnno - 고객 번호
+	 * @return int - 고객 수
+	 * @author jsshin
+	 * @since 2021. 02. 23
+	 */
+	public int getCustomerFindByCellPhone(String cellPhnno) {
+		CustomerSearch customerSearch = new CustomerSearch();
+		customerSearch.setSiteCd(TscConstants.Site.STYLE24.value());
+		customerSearch.setCellPhnno(cellPhnno);
+		customerSearch.encryptData();
+		return customerDao.getCustomerFindByCellPhone(customerSearch);
+	}
+
 }

+ 142 - 13
src/main/java/com/style24/admin/biz/service/TsaDisplayService.java

@@ -1,18 +1,21 @@
 package com.style24.admin.biz.service;
 
-import java.util.Collection;
-
+import com.gagaframework.web.util.GagaDateUtil;
+import com.gagaframework.web.util.GagaFileUtil;
+import com.style24.admin.biz.dao.TsaDisplayDao;
+import com.style24.admin.support.security.session.TsaSession;
 import com.style24.persistence.domain.*;
-import org.apache.commons.lang3.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.style24.admin.biz.dao.TsaDisplayDao;
-import com.style24.admin.support.security.session.TsaSession;
-
-import lombok.extern.slf4j.Slf4j;
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
 
 /**
  * 전시 Service
@@ -30,6 +33,9 @@ public class TsaDisplayService {
 	@Autowired
 	private TsaCommonService commonService;
 
+	@Autowired
+	private Environment env;
+
 	/**
 	 * 카테고리 목록
 	 * @param category - 카테고리 정보
@@ -190,20 +196,20 @@ public class TsaDisplayService {
 		goodsCategory.setRegNo(TsaSession.getInfo().getUserNo());
 		goodsCategory.setUpdNo(TsaSession.getInfo().getUserNo());
 
-		if(StringUtils.isNotEmpty(goodsCategory.getGoodsCds())){
+		if(!StringUtils.isEmpty(goodsCategory.getGoodsCds())){
 			String[] goodsCdArr = goodsCategory.getGoodsCds().split(",");
 			for (String goodsCd : goodsCdArr) {
 				goodsCategory.setGoodsCd(goodsCd);
 				int cnt = 0;
 				for (String cateCd : goodsCategory.getCateCdArr()) {
-					if(StringUtils.isNotEmpty(cateCd)){
+					if(!StringUtils.isEmpty(cateCd)){
 						//goodsCategory.setCateCd(cateCd);
 						//goodsCategory.setCateGb(goodsCategory.getCateGbArr()[cnt]);
 						//goodsCategory.setCateType(goodsCategory.getCateTypeArr()[cnt]);
 						//displayDao.saveGoodsCategory(goodsCategory);
 
 						if(!"G031_20".equals(goodsCategory.getCateType())){
-							if(StringUtils.isNotEmpty(goodsCategory.getCateCd1Arr()[cnt])){
+							if(!StringUtils.isEmpty(goodsCategory.getCateCd1Arr()[cnt])){
 								String[] cate1Array = goodsCategory.getCateCd1Arr()[cnt] .split(",");
 								if(cate1Array[1].equals("Y")){
 									goodsCategory.setCateCd(cate1Array[0]);
@@ -211,7 +217,7 @@ public class TsaDisplayService {
 								}
 							}
 
-							if(StringUtils.isNotEmpty(goodsCategory.getCateCd2Arr()[cnt])){
+							if(!StringUtils.isEmpty(goodsCategory.getCateCd2Arr()[cnt])){
 								String[] cate2Array = goodsCategory.getCateCd2Arr()[cnt] .split(",");
 								if(cate2Array[1].equals("Y")){
 									goodsCategory.setCateCd(cate2Array[0]);
@@ -219,7 +225,7 @@ public class TsaDisplayService {
 								}
 							}
 
-							if(StringUtils.isNotEmpty(goodsCategory.getCateCd3Arr()[cnt])){
+							if(!StringUtils.isEmpty(goodsCategory.getCateCd3Arr()[cnt])){
 								String[] cate3Array = goodsCategory.getCateCd3Arr()[cnt].split(",");
 								if(cate3Array[1].equals("Y")){
 									goodsCategory.setCateCd(cate3Array[0]);
@@ -227,7 +233,7 @@ public class TsaDisplayService {
 								}
 							}
 
-							if(StringUtils.isNotEmpty(goodsCategory.getCateCd4Arr()[cnt])){
+							if(!StringUtils.isEmpty(goodsCategory.getCateCd4Arr()[cnt])){
 								String[] cate4Array = goodsCategory.getCateCd4Arr()[cnt].split(",");
 								if(cate4Array[1].equals("Y")){
 									goodsCategory.setCateCd(cate4Array[0]);
@@ -444,7 +450,130 @@ public class TsaDisplayService {
 
 		for(MainDisplay mainDisplay: mainDisplayList){
 			log.info("mainDisplay.getCateNo()::::{}",mainDisplay.getCateNo());
+			// 이미지 변경 시
+			if(mainDisplay.getNewSysFileNm() != null && mainDisplay.getNewSysFileNm() != ""){
+				String bannerUploadPath = env.getProperty("upload.default.target.path");
+				bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "display/main");
+				String newFilename = "MAIN_LAYOUT_" + mainDisplay.getContentsLoc() + "_" + GagaDateUtil.getTodayDateTime() + "." + StringUtils.getFilenameExtension(mainDisplay.getNewSysFileNm());
+
+				// 기존이미지 삭제
+				try{
+					GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(bannerUploadPath, mainDisplay.getOrgFileNm()));
+				}catch (IOException e){
+					//  nothing
+					log.info("[saveBanner MAIN_LAYOUT 기존 이미지 삭제중 error]");
+					//e.printStackTrace();
+				}
+
+				File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(bannerUploadPath, newFilename)));
+				File file = new File(GagaFileUtil.getConcatenationPath(bannerUploadPath, mainDisplay.getNewSysFileNm()));
+
+				// Rename a file
+				file.renameTo(uniqueFile);
+
+				mainDisplay.setOrgFileNm(newFilename);
+				mainDisplay.setSysFileNm(newFilename);
+			}
+			mainDisplay.setRegNo(TsaSession.getInfo().getUserNo());
+			mainDisplay.setUpdNo(TsaSession.getInfo().getUserNo());
+			displayDao.saveMainLayout(mainDisplay);
+		}
+	}
+
+	/**
+	 * 메인전시 컨텐츠 설명
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 22
+	 */
+	public String getContentsDesc(String contentsLoc) {
+		return displayDao.getContentsDesc(contentsLoc);
+	}
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 리스트
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	public Collection<Contents> getContentsPreviewList(Contents contents) {
+		return displayDao.getContentsPreviewList(contents);
+	}
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 저장
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	@Transactional("shopTxnManager")
+	public void saveContentsPreview(Collection<Contents> contentsList) {
+		for (Contents contents : contentsList) {
+			if (contents != null && contents.getContentsLoc() != null) {
+				displayDao.deleteContentsPreview(contents);
+				break;
+			}
+		}
+		int ind = 1;
+		for (Contents contents : contentsList) {
+			if (contents != null && contents.getDispStdt() != null && !contents.getDispStdt().equals("")) {
+				int cnt = 1;
+				for (String newImgFile : contents.getNewImgFileArr()) {
+					//이미지 변경이 일어났을 경우
+					if (newImgFile != null && !newImgFile.equals("")) {
+						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);
+						bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, "contents");
+						File newFile = new File(GagaFileUtil.getConcatenationPath(bannerUploadPath, newImgFile));
+						bannerUploadPath = GagaFileUtil.getConcatenationPath(bannerUploadPath, yearMonth);
+						String newFilename = "CONTENS_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + StringUtils.getFilenameExtension(newImgFile);
+						File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(bannerUploadPath, newFilename)));
+						// Rename a file
+						File path = new File(bannerUploadPath);
+						if (!path.exists()) {
+							path.mkdir();
+						}
+						newFile.renameTo(uniqueFile);
+						if (cnt == 1) {
+							contents.setImgPath1("/contents/" + yearMonth + "/" + newFilename);
+						} else if (cnt == 2) {
+							contents.setImgPath2("/contents/" + yearMonth + "/" + newFilename);
+						} else if (cnt == 3) {
+							contents.setImgPath3("/contents/" + yearMonth + "/" + newFilename);
+						} else if (cnt == 4) {
+							contents.setImgPath4("/contents/" + yearMonth + "/" + newFilename);
+						}
+						ind++;
+
+					}
+					cnt++;
+				}
+				contents.setRegNo(TsaSession.getInfo().getUserNo());
+				contents.setUpdNo(TsaSession.getInfo().getUserNo());
+				displayDao.saveContentsPreview(contents);
+			}
+		}
+	}
 
+	/**
+	 * 메인전시 컨텐츠 저장
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	@Transactional("shopTxnManager")
+	public void saveContents(Contents contents){
+		contents.setRegNo(TsaSession.getInfo().getUserNo());
+		contents.setUpdNo(TsaSession.getInfo().getUserNo());
+		for(String contentsLoc : contents.getContentsLocArr()) {
+			contents.setContentsLoc(contentsLoc);
+			displayDao.deleteContents(contents);
+			displayDao.saveContents(contents);
 		}
 	}
 }

+ 109 - 38
src/main/java/com/style24/admin/biz/service/TsaMailTemplateService.java

@@ -101,8 +101,8 @@ public class TsaMailTemplateService {
 		return mailtempletDao.getMktmailManagementDetail(mailtSq);
 	}
 	/**
-	 * MKT메일관리 상세화면
-	 * @param mktmailManagement
+	 * MKT메일관리 구분자 상세화면
+	 * @param mktmailManagementTc
 	 * @return
 	 * @author csh9191
 	 * @since 2021. 02. 16
@@ -110,27 +110,32 @@ public class TsaMailTemplateService {
 	public Collection<MktmailManagementTc> getMktmailManagementTCList(Integer mailtSq) {
 		MktmailManagementTc mktmailManagementTc = new MktmailManagementTc();
 		mktmailManagementTc.setMailtSq(mailtSq);
+		
 		return mailtempletDao.getMktmailManagementTCList(mktmailManagementTc);
 	}
 	/**
-	 * MKT메일관리 상세화면
-	 * @param mktmailManagement
+	 * MKT메일관리 상품 상세화면
+	 * @param mktmailManagementTc
 	 * @return
 	 * @author csh9191
 	 * @since 2021. 02. 16
 	 */
 	public Collection<MktmailManagementGoods> getMktmailManagementGoodsList(Integer mailtcSq) {
-		MktmailManagementGoods mktmailManagementGoods = new MktmailManagementGoods();
-		mktmailManagementGoods.setMailtcSq(mailtcSq);
-		return mailtempletDao.getMktmailManagementGoodsList(mktmailManagementGoods);
+		MktmailManagementTc mktmailManagementTc = new MktmailManagementTc();
+		mktmailManagementTc.setMailtcSq(mailtcSq);
+		
+		log.info("mktmailManagementTc {}",mktmailManagementTc);
+		
+		return mailtempletDao.getMktmailManagementGoodsList(mktmailManagementTc);
 	}
 	
 	/**
 	 * MKT 상세 등록/수정
-	 * @param mailtemplate - 메일관련 정보
+	 * @param mktmailManagement - 메일관련 정보
 	 * @author csh9191
 	 * @since 2021. 02. 13
 	 */
+	@Transactional("shopTxnManager")
 	public GagaMap saveMktMailTemplate (MktmailManagement mktMailManagement) {
 		GagaMap result = new GagaMap();
 		
@@ -139,22 +144,27 @@ public class TsaMailTemplateService {
 		String mailtNm = mktMailManagement.getMailtNm();
 		String mailtGb = mktMailManagement.getMailtGb();
 		String mailContent = mktMailManagement.getMailContent();
-		
+		log.info("mailtSq {}",mktMailManagement.getMailtSq());
 		MktmailManagement mktmail = new MktmailManagement();
+
 		mktmail.setMktHeader(mailHsq);
 		mktmail.setMktFooter(mailFsq);
 		mktmail.setMailtNm(mailtNm);
 		mktmail.setMailtGb(mailtGb);
 		mktmail.setMailContent(mailContent);
+		mktmail.setRegNo(TsaSession.getInfo().getUserNo());
+		mktmail.setUpdNo(TsaSession.getInfo().getUserNo());
+		mktmail.setMailtSq(mktMailManagement.getMailtSq());
 		
-		//메일 헤더 푸터 타이틀 내용 등록
-		mailtempletDao.saveMktmailform(mktMailManagement); 
-		mktMailManagement.getMailtSq();
-		mktMailManagement.getMailtcSq();
+		log.info("mktmail : {}", mktMailManagement.getMailtSq());
 		
+		//메일 헤더 푸터 타이틀 내용 등록
+		mailtempletDao.saveMktmailform(mktmail); 
+
 		//구분자1 등록
 		for(MktmailManagementTc mktmailManagementTc : mktMailManagement.getMktmailManagementTc()) {
 			if(!StringUtils.isEmpty(mktmailManagementTc.getMailtcNm())) {
+				
 				String mailtcNm = mktmailManagementTc.getMailtcNm();
 				String mailtcLink = mktmailManagementTc.getMailtcLink();
 				int goodsCpr = mktmailManagementTc.getGoodsCpr();
@@ -166,13 +176,15 @@ public class TsaMailTemplateService {
 				mktmailtc.setMailtcNm(mailtcNm);
 				mktmailtc.setMailtcLink(mailtcLink);
 				mktmailtc.setGoodsCpr(goodsCpr);
-				mktmailtc.setMailtSq(mktMailManagement.getMailtSq());
+				mktmailtc.setMailtSq(mktmail.getMailtSq());
+				mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
+				
+				log.info("구분자1.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
 				
 				mailtempletDao.saveMailTc(mktmailtc);
 				//grid1
 				for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods()) {
 					
-					
 					String goodsCd = mktmailManagementGoods.getGoodsCd();
 					int dispOrd = mktmailManagementGoods.getDispOrd();
 	
@@ -183,6 +195,8 @@ public class TsaMailTemplateService {
 					mktmailGoods.setDispOrd(dispOrd);
 					mktmailGoods.setGoodsCd(goodsCd);
 					mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
+					
+					log.info("그리드1.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
 					//grid 데이터 등록
 					mailtempletDao.saveMailGoods(mktmailGoods);
 				}
@@ -196,7 +210,7 @@ public class TsaMailTemplateService {
 				String mailtcNm = mktmailManagementTc.getMailtcNm();
 				String mailtcLink = mktmailManagementTc.getMailtcLink();
 				int goodsCpr = mktmailManagementTc.getGoodsCpr();
-	
+
 				MktmailManagement mktmailtc = new MktmailManagement();
 	
 				mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
@@ -204,8 +218,11 @@ public class TsaMailTemplateService {
 				mktmailtc.setMailtcNm(mailtcNm);
 				mktmailtc.setMailtcLink(mailtcLink);
 				mktmailtc.setGoodsCpr(goodsCpr);
-				mktmailtc.setMailtSq(mktMailManagement.getMailtSq());
-	
+				mktmailtc.setMailtSq(mktmail.getMailtSq());
+				mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
+				
+				log.info("구분자2.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
+				
 				mailtempletDao.saveMailTc(mktmailtc);
 				//grid2
 				for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods2()) {
@@ -220,6 +237,8 @@ public class TsaMailTemplateService {
 					mktmailGoods.setDispOrd(dispOrd);
 					mktmailGoods.setGoodsCd(goodsCd);
 					mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
+					
+					log.info("그리드2.getMailtcSq() : {}", mktmailtc.getMailtcSq());
 					//grid 데이터 등록
 					mailtempletDao.saveMailGoods(mktmailGoods);
 				}
@@ -232,7 +251,7 @@ public class TsaMailTemplateService {
 			String mailtcNm = mktmailManagementTc.getMailtcNm();
 			String mailtcLink = mktmailManagementTc.getMailtcLink();
 			int goodsCpr = mktmailManagementTc.getGoodsCpr();
-
+			
 			MktmailManagement mktmailtc = new MktmailManagement();
 
 			mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
@@ -240,8 +259,11 @@ public class TsaMailTemplateService {
 			mktmailtc.setMailtcNm(mailtcNm);
 			mktmailtc.setMailtcLink(mailtcLink);
 			mktmailtc.setGoodsCpr(goodsCpr);
-			mktmailtc.setMailtSq(mktMailManagement.getMailtSq());
-
+			mktmailtc.setMailtSq(mktmail.getMailtSq());
+			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
+							
+			log.info("mktmailManagementTc : {}",mktmailManagementTc.getMailtcSq());
+			
 			mailtempletDao.saveMailTc(mktmailtc);
 			//grid3
 			for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods3()) {
@@ -256,7 +278,8 @@ public class TsaMailTemplateService {
 				mktmailGoods.setDispOrd(dispOrd);
 				mktmailGoods.setGoodsCd(goodsCd);
 				mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
-				//grid 데이터 등록
+				
+				log.info("그리드3.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());//grid 데이터 등록
 				mailtempletDao.saveMailGoods(mktmailGoods);
 			}
 			}
@@ -276,7 +299,11 @@ public class TsaMailTemplateService {
 			mktmailtc.setMailtcNm(mailtcNm);
 			mktmailtc.setMailtcLink(mailtcLink);
 			mktmailtc.setGoodsCpr(goodsCpr);
-			mktmailtc.setMailtSq(mktMailManagement.getMailtSq());
+			mktmailtc.setMailtSq(mktmail.getMailtSq());
+			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
+							
+			log.info("mktmailManagementTc : {}",mktmailManagementTc.getMailtcSq());
+			
 			
 			mailtempletDao.saveMailTc(mktmailtc);
 			//grid4
@@ -284,19 +311,16 @@ public class TsaMailTemplateService {
 				
 				String goodsCd = mktmailManagementGoods.getGoodsCd();
 				int dispOrd = mktmailManagementGoods.getDispOrd();
-				
-				MktmailManagementTc mailTc = new MktmailManagementTc();
-				
-				int mailtcSq = mailTc.getMailtcSq();
-				log.info("mailtcSq={}", mailtcSq);
+
 				MktmailManagement mktmailGoods = new MktmailManagement();
 				
-				mktmailGoods.setMailtcSq(mailtcSq);
 				mktmailGoods.setRegNo(TsaSession.getInfo().getUserNo());
 				mktmailGoods.setUpdNo(TsaSession.getInfo().getUserNo());
 				mktmailGoods.setDispOrd(dispOrd);
 				mktmailGoods.setGoodsCd(goodsCd);
 				mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
+				
+				log.info("그리드4.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
 				//grid 데이터 등록
 				mailtempletDao.saveMailGoods(mktmailGoods);
 			}
@@ -309,7 +333,7 @@ public class TsaMailTemplateService {
 			String mailtcNm = mktmailManagementTc.getMailtcNm();
 			String mailtcLink = mktmailManagementTc.getMailtcLink();
 			int goodsCpr = mktmailManagementTc.getGoodsCpr();
-
+			
 			MktmailManagement mktmailtc = new MktmailManagement();
 
 			mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
@@ -317,8 +341,12 @@ public class TsaMailTemplateService {
 			mktmailtc.setMailtcNm(mailtcNm);
 			mktmailtc.setMailtcLink(mailtcLink);
 			mktmailtc.setGoodsCpr(goodsCpr);
-			mktmailtc.setMailtSq(mktMailManagement.getMailtSq());
-
+			mktmailtc.setMailtSq(mktmail.getMailtSq());
+			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
+							
+			log.info("mktmailManagementTc : {}",mktmailManagementTc.getMailtcSq());
+			
+			
 			mailtempletDao.saveMailTc(mktmailtc);
 			
 			//grid5
@@ -334,6 +362,8 @@ public class TsaMailTemplateService {
 				mktmailGoods.setDispOrd(dispOrd);
 				mktmailGoods.setGoodsCd(goodsCd);
 				mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
+				
+				log.info("그리드5.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
 				//grid 데이터 등록
 				mailtempletDao.saveMailGoods(mktmailGoods);
 			}
@@ -346,14 +376,14 @@ public class TsaMailTemplateService {
 		return result;
 	}
 	
-	/* MKT 메일 전시 */
+	/* MKT 메일 상품전시 */
 	public Collection<Goods> getMailGoodsInfo(Goods goods) {
 		return mailtempletDao.getMailGoodsInfo(goods);
 	}
 	
 	/**
 	 * MKT메일관리 목록
-	 * @param mailtemplate - 메일관련 정보
+	 * @param mktmailManagement - 메일관련 정보
 	 * @return
 	 * @author csh9191
 	 * @since 2021. 02. 13
@@ -363,8 +393,8 @@ public class TsaMailTemplateService {
 	}
 	
 	/**
-	 * 메일헤더푸터 리스트 삭제
-	 * @param mailtemplate - 메일관련 정보
+	 * MKT메일 목록 삭제
+	 * @param mktmailManagement - 메일관련 정보
 	 * @author csh9191
 	 * @since 2021. 02. 15
 	 */
@@ -378,6 +408,47 @@ public class TsaMailTemplateService {
 			mailtempletDao.deleteMktmailList(mktmailManagement);
 		}
 	}
+	/**
+	 * MKT메일 구분자 삭제
+	 * @param mktmailManagementGoods 메일전시상품
+	 * @author csh9191
+	 * @since 2021. 02. 22
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteMktCorner(Collection<MktmailManagementTc> mktmailManagementTcList) {
+		for(MktmailManagementTc mktmailManagementTc : mktmailManagementTcList) {
+			mailtempletDao.deleteMktCorner(mktmailManagementTc);
+		}
+	}
 	
-
-}
+	/**
+	 * MKT메일 상품 삭제
+	 * @param mktmailManagementGoods 메일전시상품
+	 * @author csh9191
+	 * @since 2021. 02. 22
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteMktGoodsList(Collection<MktmailManagementGoods> mktmailManagementGoodsList) {
+		for(MktmailManagementGoods mktmailManagementGoods : mktmailManagementGoodsList) {
+			mailtempletDao.deleteMktGoodsList(mktmailManagementGoods);
+		}
+	}
+	
+	/**
+	 * MKT메일 미리보기
+	 * @param mktmailManagement - 메일관련 정보
+	 * @return
+	 * @author csh9191
+	 * @since 2021. 02. 19
+	 */
+	public MktmailManagement getMktmailPreviewHeader(Integer mktMailManagement) {
+		return mailtempletDao.getMktmailPreviewHeader(mktMailManagement);
+	}
+	public MktmailManagement getMktmailPreviewFooter(Integer mktMailManagement) {
+		return mailtempletDao.getMktmailPreviewFooter(mktMailManagement);
+	}
+	public MktmailManagement getMktmailPreviewContent(Integer mktMailManagement) {
+		return mailtempletDao.getMktmailPreviewContent(mktMailManagement);
+	}
+	
+}

+ 7 - 8
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -60,11 +60,11 @@ public class TsaPlanService {
 	 * @since 2021. 2. 8
 	 */
 	@Transactional("shopTxnManager")
-	public void createPlanWebInfo(Plan param) {
+	public void createPlanInfo(Plan param) {
 		Plan plan = new Plan();
 		param.setRegNo(TsaSession.getInfo().getUserNo());
 		param.setUpdNo(TsaSession.getInfo().getUserNo());
-		planDao.createPlanWebInfo(param);
+		planDao.createPlanInfo(param);
 		
 		String[] brand = param.getMultiBrand();
 		// 기획전 브랜드 insert
@@ -237,8 +237,8 @@ public class TsaPlanService {
 	 * @author sowon
 	 * @since 2021. 2. 5
 	 */
-	public int getPlanListCnt(Plan param) {
-		return planDao.getPlanListCnt(param);
+	public int getPlanListCount(Plan param) {
+		return planDao.getPlanListCount(param);
 	}
 	
 	/**
@@ -265,7 +265,7 @@ public class TsaPlanService {
 	 * @author sowon
 	 * @since 2021. 2. 8
 	 */
-	public Plan getPlanWebDetailInfo(Plan param) {
+	public Plan getPlanDetailInfo(Plan param) {
 		Collection<Plan> planList = planDao.getPlanList(param);
 		Plan planInfo = new Plan();
 
@@ -345,7 +345,7 @@ public class TsaPlanService {
 	 * @since 2021. 2. 8
 	 */
 	@Transactional("shopTxnManager")
-	public void updatePlanWebInfo(Plan param) {
+	public void updatePlanInfo(Plan param) {
 		Plan plan = new Plan();
 		log.debug("param {}", param);
 		String targetPath = env.getProperty("upload.default.target.path") + "/planning";
@@ -405,7 +405,7 @@ public class TsaPlanService {
 		}
 		
 		// 최종업데이트 
-		planDao.updatePlanWebInfo(param);
+		planDao.updatePlanInfo(param);
 
 		// 웹용 소스
 //		if (StringUtils.isNotBlank(param.getFsrcPc())) {
@@ -634,7 +634,6 @@ public class TsaPlanService {
 		for (Plan cornerInfo : paramList) {
 			cornerInfo.setRegNo(TsaSession.getInfo().getUserNo());
 			cornerInfo.setUpdNo(TsaSession.getInfo().getUserNo());
-
 			planDao.savePlanCornerInfo(cornerInfo);
 		}
 

+ 15 - 2
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -4,7 +4,6 @@ import java.util.Collection;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.security.GagaPasswordEncoder;
-import com.gagaframework.web.util.GagaCryptoUtil;
 import com.gagaframework.web.util.GagaStringUtil;
 import com.style24.admin.biz.service.TsaCustomerService;
 import com.style24.admin.biz.service.TsaKakaoService;
@@ -312,7 +311,12 @@ public class TsaCustomerController extends TsaBaseController {
 	@ResponseBody
 	public GagaMap getCustomerActiveList(@RequestBody CustomerSearch customerSearch) {
 		GagaMap result = new GagaMap();
-		customerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		// 회원명, 이메일 암호화
+		if ("custNm".equals(customerSearch.getSearchGb()) || "email".equals(customerSearch.getSearchGb())) {
+			customerSearch.setSearchTxt(CryptoUtils.encryptAES(customerSearch.getSearchTxt()));
+		}
+		customerSearch.encryptData();	//데이터 암호화 필요
+		customerSearch.setRegNo(TsaSession.getInfo().getUserNo());
 		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo()-1, customerSearch.getPageSize()));
 		customerSearch.getPageable().setTotalCount(customerService.getCustomerActiveListCount(customerSearch));
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
@@ -549,10 +553,19 @@ public class TsaCustomerController extends TsaBaseController {
 	@PostMapping("/certno/send")
 	@ResponseBody
 	public GagaResponse sendCustomerCertNo(@RequestBody Customer customer) {
+
+		// 1.기존 사용하고 있는 고객이 있는지 확인
+		int custCnt = customerService.getCustomerFindByCellPhone(customer.getCellPhnno());
+
+		if (custCnt > 0) {
+			throw new IllegalStateException("해당 휴대전화번호로 사용하고 있는 고객이 있습니다.");
+		}
+
 		String certNo = GagaStringUtil.getRandomNumber(6);
 		TsaSession.setAttribute("certNo", certNo);
 		TsaSession.setAttribute("cellPhnno", customer.getCellPhnno());
 
+
 		Customer custInfo = customerService.getCustomerInfo(customer.getCustNo());
 		customer.setCustNm(custInfo.getCustNm());
 		customer.setCertNo(certNo);

+ 56 - 1
src/main/java/com/style24/admin/biz/web/TsaDisplayController.java

@@ -545,8 +545,63 @@ public class TsaDisplayController extends TsaBaseController {
 	@PostMapping("/main/layout/save")
 	@ResponseBody
 	public GagaResponse saveMainLayout(@RequestBody Collection<MainDisplay> mainDisplayList) {
-		log.info("controller saveMainLayout mainDisplayList::: {}",mainDisplayList);
 		displayService.saveMainLayout(mainDisplayList);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
+
+	/**
+	 * 메인전시 컨텐츠 수정 팝업
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 22
+	 */
+	@GetMapping("/main/contents/popup/form")
+	public ModelAndView mainContentsPopupForm(@RequestParam(value = "cateNo") String cateNo, @RequestParam(value = "contentsLoc") String contentsLoc) {
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("cateNo", cateNo);
+		mav.addObject("contentsLoc", contentsLoc);
+		mav.addObject("contentsDesc", displayService.getContentsDesc(contentsLoc));
+		mav.addObject("contentsLocList", rendererService.getAvailCommonCodeList("G028"));
+		mav.setViewName("display/MainContentsPopupForm");
+		return mav;
+	}
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 리스트
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	@PostMapping("/contents/preview/list")
+	@ResponseBody
+	public Collection<Contents> getContentsPreviewList(@RequestBody Contents contents) {
+		return displayService.getContentsPreviewList(contents);
+	}
+
+	/**
+	 * 메인전시 컨텐츠 미리보기 저장
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	@PostMapping("/contents/preview/save")
+	@ResponseBody
+	public GagaResponse saveContentsPreview(@RequestBody Collection<Contents> contentsList) {
+		displayService.saveContentsPreview(contentsList);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 메인전시 컨텐츠 저장
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 23
+	 */
+	@PostMapping("/contents/save")
+	@ResponseBody
+	public GagaResponse saveContents(@RequestBody Contents contents) {
+		log.info("controller saveContents contents::: {}",contents);
+		displayService.saveContents(contents);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 }

+ 128 - 46
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -36,6 +36,7 @@ import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.service.TscPointService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.core.support.session.TscSession;
 import com.style24.persistence.TscPageRequest;
 
 import com.style24.persistence.domain.CardPromotion;
@@ -1094,20 +1095,9 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2021. 02. 08
 	 */
 	@GetMapping("/mktmailmanagement/detail/form")
-	public ModelAndView mktmailManagementDetailForm(MktmailManagement mktmailManagement) {
-		
-		ModelAndView mav = new ModelAndView();
-		
-		MktmailManagementTc mktmailManagementTc = new MktmailManagementTc();
-		
-		Integer mailtSq = mktmailManagement.getMailtSq();
-		Integer mailtcSq = mktmailManagementTc.getMailtcSq();
-		
-		log.info("mailtcSq : {}",mailtcSq);
-		log.info("mailtSq : {}",mailtSq);
-		
-		String mode = mktmailManagement.getMode();
+	public ModelAndView mktmailManagementDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "mailtSq", required = false) Integer mailtSq, @RequestParam(value = "mailtcSq", required = false) Integer mailtcSq) {
 		
+		ModelAndView mav = new ModelAndView();		
 		MailTemplate param = new MailTemplate();
 		
 		param.setMailhfGb("H");
@@ -1116,16 +1106,32 @@ public class TsaMarketingController extends TsaBaseController {
 		param.setMailhfGb("F");
 		mav.addObject("mailFsqList", mailTemplateService.getmailHFList(param));
 		
+		// 판매상태
+		String[] mailCds = {"G008_00"};		
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", mailCds));
+		
 		mav.addObject("mode", mode);
 		
 		if ("U".equals(mode)) {
 			
 			mav.addObject("mktmailInfo", mailTemplateService.getMktmailManagementDetail(mailtSq));
-			mav.addObject("mktmailTCInfo", mailTemplateService.getMktmailManagementTCList(mailtSq));
-			mav.addObject("mktmailGoodsInfo", mailTemplateService.getMktmailManagementGoodsList(mailtcSq));
 			
-			log.info("mktmailTCInfo : {}",mailTemplateService.getMktmailManagementTCList(mailtSq));
-			log.info("mktmailGoodsInfo : {}",mailTemplateService.getMktmailManagementGoodsList(mailtcSq));
+			Collection<GagaMap> mapList = new ArrayList();
+			Collection<MktmailManagementTc> tcList = mailTemplateService.getMktmailManagementTCList(mailtSq);
+			log.info("tcList {}",tcList);
+			for (MktmailManagementTc tmp : tcList) {
+				Collection<MktmailManagementGoods> goodsList = mailTemplateService.getMktmailManagementGoodsList(tmp.getMailtcSq());
+				
+				GagaMap map = new GagaMap();
+				map.set("goodsList", goodsList);
+				map.set("tc", tmp);
+				
+				log.info("goodsList {}",goodsList);
+				log.info("tc {}",tmp);
+				mapList.add(map);
+			}
+			
+			mav.addObject("mktmailTCInfo", mapList);
 		}
 		
 		mav.setViewName("marketing/MktmailmanagementDetailForm");
@@ -1143,7 +1149,7 @@ public class TsaMarketingController extends TsaBaseController {
 	
 	@PostMapping("/mktMailManagement/goods/info")
 	@ResponseBody
-	public Collection<Goods> getOrderSampleGoodsInfo(@RequestBody String[] arrGoodsCd) {
+	public Collection<Goods> getMailGoodsInfo(@RequestBody String[] arrGoodsCd) {
 		Goods goods = new Goods();
 		goods.setArrGoodsCd(arrGoodsCd);
 		
@@ -1159,13 +1165,13 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@PostMapping("/mktMailManagement/save")
 	@ResponseBody
-	public GagaMap saveMktMailTemplate(@RequestBody MktmailManagement mktmailManagement){
+	public GagaMap saveMktMailTemplate(@RequestBody MktmailManagement mktMailManagement){
 		GagaMap result = new GagaMap();
-		mktmailManagement.setRegNo(TsaSession.getInfo().getUserNo());
-		mktmailManagement.setUpdNo(TsaSession.getInfo().getUserNo());
+		
 		result.set("status", GagaResponseStatus.FAIL.getCode());
+		log.info("mailtSq {}",mktMailManagement.getMailtSq());
+		result = mailTemplateService.saveMktMailTemplate(mktMailManagement);
 
-		result = mailTemplateService.saveMktMailTemplate(mktmailManagement);
 		result.set("message", message.getMessage("SUCC_0001"));
 		return result;
 	}
@@ -1183,8 +1189,8 @@ public class TsaMarketingController extends TsaBaseController {
 		return mailTemplateService.getMktMailList(mktmailManagement);
 	}
 	/**
-	 * 메일헤더푸터 리스트 삭제
-	 * @param 메일헤더푸터관리 - 메일헤더푸더 정보
+	 * MKT메일관리 목록 삭제
+	 * @param 
 	 * @return
 	 * @author csh9191	
 	 * @since 2021. 02. 15
@@ -1196,6 +1202,83 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 	
+	/**
+	 * MKT메일관리 코너(구분) 삭제
+	 * @param 
+	 * @return
+	 * @author csh9191	
+	 * @since 2021. 02. 22
+	 */
+	@PostMapping("/mktmailManagement/corner/delete")
+	@ResponseBody
+	public GagaMap deleteMktCorner(@RequestBody Collection<MktmailManagementTc> mktmailManagementTcList) {
+		GagaMap result = new GagaMap();
+		mailTemplateService.deleteMktCorner(mktmailManagementTcList);
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		return result;
+
+	}
+
+	/**
+	 * MKT메일관리 상품 삭제
+	 * @param 
+	 * @return
+	 * @author csh9191	
+	 * @since 2021. 02. 22
+	 */
+	@PostMapping("/mktmailManagement/goods/delete")
+	@ResponseBody
+	public GagaResponse deleteMktGoods(@RequestBody Collection<MktmailManagementGoods> mktmailManagementGoodsList) {		
+		mailTemplateService.deleteMktGoodsList(mktmailManagementGoodsList);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+
+	
+	/**
+	 * MKT메일관리 미리보기
+	 * @param 
+	 * @return
+	 * @author csh9191	
+	 * @since 2021. 02. 19
+	 */
+	@GetMapping("/mktmailmanagement/preview")
+	@ResponseBody
+	public ModelAndView MktmailmanagementPreview(@RequestParam(value = "mailtSq", required = false) Integer mailtSq) {
+
+		ModelAndView mav = new ModelAndView();
+		
+		//헤더
+		mav.addObject("mktmailPreviewHeader", mailTemplateService.getMktmailPreviewHeader(mailtSq));
+		//푸터
+		mav.addObject("mktmailPreviewFooter", mailTemplateService.getMktmailPreviewFooter(mailtSq));
+		//내용
+		mav.addObject("mktmailPreviewContent", mailTemplateService.getMktmailPreviewContent(mailtSq));
+		
+		// 판매상태
+		String[] mailCds = {"G008_00"};		
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", mailCds));		
+		
+		Collection<GagaMap> mapList = new ArrayList();
+		Collection<MktmailManagementTc> tcList = mailTemplateService.getMktmailManagementTCList(mailtSq);
+		log.info("tcList 1263LINE {}",tcList);
+			for (MktmailManagementTc tmp : tcList) {
+				Collection<MktmailManagementGoods> goodsList = mailTemplateService.getMktmailManagementGoodsList(tmp.getMailtcSq());
+				
+				GagaMap map = new GagaMap();
+				map.set("goodsList", goodsList);
+				map.set("tc", tmp);
+				
+				log.info("goodsList {}",goodsList);
+				log.info("tc {}",tmp);
+				mapList.add(map);
+			}
+		
+		mav.addObject("mktmailPreviewGoods", mapList);
+		
+		mav.setViewName("marketing/MktmailmanagementPreviewForm");
+
+		return mav;
+	}
 	/* // CSB 진행 */
 
 	/**
@@ -1566,8 +1649,8 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon
 	 * @since 2021. 2. 04
 	 */
-	@GetMapping("/planning/webdetail/form")
-	public ModelAndView planWebDetailForm(Plan param) {
+	@GetMapping("/planning/detail/form")
+	public ModelAndView planDetailForm(Plan param) {
 		ModelAndView mav = new ModelAndView();
 
 		if (param.getMode().equals("N")) { // 신규 일 때
@@ -1584,7 +1667,7 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("upperAfLinkCdList", rendererService.getAvailCommonCodeList("G053"));
 
 		} else if(param.getMode().equals("U")){ // 상세 일 때
-			mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
+			mav.addObject("planInfo", planService.getPlanDetailInfo(param));
 
 			mav.addObject("fsrcPc", planService.getPlanFsrcPcList(param));
 
@@ -1625,7 +1708,7 @@ public class TsaMarketingController extends TsaBaseController {
 		mav.addObject("usableCustGradeList", rendererService.getAvailCommonCodeList("G110"));
 		
 		mav.addObject("mode", param.getMode());
-		mav.setViewName("marketing/PlanWebDetailPopupForm");
+		mav.setViewName("marketing/PlanDetailPopupForm");
 		return mav;
 	}
 	
@@ -1636,10 +1719,10 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon
 	 * @since 2021. 2. 4
 	 */
-	@PostMapping("/planning/webdetail/create")
+	@PostMapping("/planning/detail/create")
 	@ResponseBody
-	public GagaResponse createPlanWebInfo(@RequestBody Plan param) {
-		planService.createPlanWebInfo(param);
+	public GagaResponse createPlanInfo(@RequestBody Plan param) {
+		planService.createPlanInfo(param);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 	
@@ -1663,7 +1746,7 @@ public class TsaMarketingController extends TsaBaseController {
 		
 //		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
-		param.getPageable().setTotalCount(planService.getPlanListCnt(param));
+		param.getPageable().setTotalCount(planService.getPlanListCount(param));
 		
 		
 		Collection<Plan> planList = planService.getPlanList(param);
@@ -1685,7 +1768,7 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon
 	 * @since 2021. 2. 16
 	 */
-	@PostMapping("/planning/listPop")
+	@PostMapping("/planning/list/detail/popup")
 	@ResponseBody
 	public Collection<Plan> getPlanListPop(@RequestBody Plan param) {
 		//param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
@@ -1715,10 +1798,10 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon		
 	 * @since 2021. 2. 8
 	 */
-	@PostMapping("/plan/webdetail/update")
+	@PostMapping("/plan/detail/update")
 	@ResponseBody
-	public GagaResponse updatePlanWebInfo(@RequestBody Plan param) {
-		planService.updatePlanWebInfo(param);
+	public GagaResponse updatePlanInfo(@RequestBody Plan param) {
+		planService.updatePlanInfo(param);
 		return super.ok(message.getMessage("SUCC_0002"));
 	}
 	
@@ -1784,7 +1867,7 @@ public class TsaMarketingController extends TsaBaseController {
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y"));
 
 		// 기획전 상세 정보
-		mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
+		mav.addObject("planInfo", planService.getPlanDetailInfo(param));
 
 
 		mav.setViewName("marketing/PlanCornerListForm");
@@ -1833,12 +1916,12 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon
 	 * @since 2021. 2. 16
 	 */
-	@GetMapping("/planning/corner/plandtlsq")
-	@ResponseBody
-	public long getPlanDtlSq(Plan param) {
-		return planService.getPlanDtlSq(param);
-	}
-	
+//	@GetMapping("/planning/corner/plandtlsq")
+//	@ResponseBody
+//	public long getPlanDtlSq(Plan param) {
+//		return planService.getPlanDtlSq(param);
+//	}
+//	
 	/**
 	 * 기획전 코너 삭제
 	 *
@@ -1983,7 +2066,7 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon
 	 * @since 2021. 2. 18
 	 */
-	@GetMapping("/planning/webdetail/template/form")
+	@GetMapping("/planning/detail/template/form")
 	public ModelAndView planTemplateForm(Plan param) {
 		ModelAndView mav = new ModelAndView();
 
@@ -2071,8 +2154,7 @@ public class TsaMarketingController extends TsaBaseController {
 	@PostMapping("/poll/list")
 	@ResponseBody
 	public Collection<Poll> getPollList(@RequestBody Poll poll) {
-		Collection<Poll> pollList = pollService.getPollList(poll);
-		return pollList;
+		return pollService.getPollList(poll);
 	}
 	
 	/**

+ 37 - 0
src/main/java/com/style24/persistence/domain/Contents.java

@@ -0,0 +1,37 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+import lombok.Data;
+
+@SuppressWarnings("serial")
+@Data
+public class Contents extends TscBaseDomain {
+    private Integer preContentsSq;
+    private Integer contentsSq;
+    private Integer cateNo;
+    private String contentsLoc;
+    private String contentsType;
+    private String dispStdt;
+    private String dispEddt;
+    private Integer dispOrd;
+    private String contentsYn;
+    private String imgPath1;
+    private String imgPath2;
+    private String imgPath3;
+    private String imgPath4;
+    private String strVar1;
+    private String strVar2;
+    private String strVar3;
+    private String strVar4;
+    private String strTitle1;
+    private String strTitle2;
+    private String strTitle3;
+    private String strTitle4;
+    private String useYn;
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] contentsLocArr;
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] newImgFileArr;
+}

+ 8 - 0
src/main/java/com/style24/persistence/domain/CustomerSearch.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.style24.core.support.util.CryptoUtils;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
@@ -42,4 +43,11 @@ public class CustomerSearch extends TscBaseDomain {
 	private int pageSize = 50;
 	private int pageUnit = 10;
 
+	// 암호화 대상 데이터 암호화 처리
+	public void encryptData () {
+		this.custNm = CryptoUtils.encryptAES(this.custNm);
+		this.cellPhnno = CryptoUtils.encryptAES(this.cellPhnno);
+		this.email = CryptoUtils.encryptAES(this.email);
+	}
+
 }

+ 10 - 4
src/main/java/com/style24/persistence/domain/MktmailManagement.java

@@ -1,6 +1,5 @@
 package com.style24.persistence.domain;
 
-import java.util.Collection;
 import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -23,6 +22,8 @@ public class MktmailManagement extends TscBaseDomain{
 	private Integer mailtSq; 				// 메일템플릿 번호
 	private String mailtNm;					// 메일템플릿 명
 	private String mailtGb;					// 메일템플릿 구분
+	private Integer mailHsq;
+	private Integer mailFsq;	
 	private Integer mktHeader;				// 메일헤더 일련번호
 	private Integer mktFooter;				// 메일푸터 일련번호
 	private String mailContent;				// 메일 내용
@@ -55,6 +56,7 @@ public class MktmailManagement extends TscBaseDomain{
 	List<MktmailManagementTc> mktmailManagementTc4; 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	List<MktmailManagementTc> mktmailManagementTc5; 
+	
 	// 메일 템플릿 코너 
 	private Integer mailtcSq;				// 메일템플릿 코너번호
 	private String mailtcNm;				// 메일템플릿 코너명
@@ -62,13 +64,17 @@ public class MktmailManagement extends TscBaseDomain{
 	private String mailtcLink;				// 메일템플릿 코너 링크
 	
 	//상품정보
-	private String brandKnm;				// 브랜드명
-	private String goodNms;					// 상품명
-	private String cdNm;					// 판매상태
+	private String brandEnm;				// 브랜드명
+	private String goodsNm;					// 상품명
+	private String goodsStat;				// 판매상태
 	private String listPrice;				// 정상가
 	private String currPrice;				// 판매가
 	private String goodsCd;					// 상품코드(상품)
 	private Integer dispOrd;				// 표시순서
+	
+	//미리보기
+	private String mailhfContent;			//메잃 헤더 푸터 정보
+	
 
 
 	

+ 3 - 2
src/main/java/com/style24/persistence/domain/MktmailManagementGoods.java

@@ -16,6 +16,7 @@ public class MktmailManagementGoods extends TscBaseDomain{
 	
 	// 메일 템플릿 코너 상품
 	private Integer mailtcSq;				// 메일템플릿코너 일련번호
+	private Integer mailtSq;				// 메일템플릿 일련번호
 	private String goodsCd;					// 상품코드(상품)
 	private Integer dispOrd;				// 표시순서
 	private String regDt;					// 등록일시
@@ -23,8 +24,8 @@ public class MktmailManagementGoods extends TscBaseDomain{
 	
 	//상품정보
 	private String brandEnm;				// 브랜드명
-	private String goodNms;					// 상품명
-	private String cdNm;					// 판매상태
+	private String goodsNm;					// 상품명
+	private String goodsStat;				// 판매상태
 	private String listPrice;				// 정상가
 	private String currPrice;				// 판매가
 

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

@@ -1,6 +1,8 @@
 package com.style24.persistence.domain;
 
 
+import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -61,5 +63,6 @@ public class Poll extends TscBaseDomain{
 	private String name;			// 투표율 구하기위한 변수선언 
 	private String voterNm;			// 투표자명
 	private String voteDt;			// 투표일시
+	
 
 }

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

@@ -70,7 +70,7 @@
 		AND    LOWER(CUST_NM) LIKE CONCAT('%',LOWER(#{custNm}),'%')
 		</if>
 		<if test="email != null and email != ''">
-		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{eamil}),'%')
+		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{email}),'%')
 		</if>
 		<if test="custId != null and custId != ''">
 		AND    CUST_ID = #{custId}
@@ -182,7 +182,7 @@
 		AND    LOWER(CUST_NM) LIKE CONCAT('%',LOWER(#{custNm}),'%')
 		</if>
 		<if test="email != null and email != ''">
-		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{eamil}),'%')
+		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{email}),'%')
 		</if>
 		<if test="custId != null and custId != ''">
 		AND    CUST_ID = #{custId}
@@ -972,4 +972,32 @@
 		WHERE  CUST_NO = #{custNo}
 	</update>
 
+	<!-- 휴대전화로 고객 조회 -->
+	<select id="getCustomerFindByCellPhone" parameterType="CustomerSearch" resultType="int">
+		/* TsaCustomer.getCustomerFindByCellPhone */
+		SELECT B.CNT
+		FROM (
+		      SELECT A.CNT
+		          , ROW_NUMBER() OVER (ORDER BY A.CNT DESC) AS NUMB
+		      FROM (
+		            SELECT COUNT(*) AS CNT
+		            FROM   TB_CUSTOMER
+		            WHERE  CUST_STAT = 'G104_10'   /* 활동회원*/
+		            AND    SITE_CD = #{siteCd}
+		            AND    CELL_PHNNO = #{cellPhnno}
+		            UNION ALL
+		            SELECT COUNT(*) AS CNT
+		            FROM   TB_SECEDE_CUST
+		            WHERE  SITE_CD = #{siteCd}
+		            AND    CELL_PHNNO = #{cellPhnno}
+		            UNION ALL
+		            SELECT COUNT(*) AS CNT
+		            FROM   TB_DORMANT_CUST
+		            WHERE  SITE_CD = #{siteCd}
+		            AND    CELL_PHNNO = #{cellPhnno}
+		          ) A
+		) B
+		WHERE NUMB = 1
+	</select>
+
 </mapper>

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

@@ -1125,10 +1125,10 @@
 			SET A.DISP_ORD = DISP_ORD - 1
 		</if>
 		<if test="changeGb != null and changeGb =='min'">
-			SET A.DISP_ORD = (SELECT DISP_ORD FROM (SELECT MIN(DISP_ORD) AS DISP_ORD FROM TB_CATE_GOODS B WHERE CATE_NO = 1127) TMP)
+			SET A.DISP_ORD = (SELECT DISP_ORD FROM (SELECT MIN(DISP_ORD) AS DISP_ORD FROM TB_CATE_GOODS B WHERE CATE_NO = #{cateNo}) TMP)
 		</if>
 		<if test="changeGb != null and changeGb =='max'">
-			SET A.DISP_ORD = (SELECT DISP_ORD FROM (SELECT MAX(DISP_ORD) AS DISP_ORD FROM TB_CATE_GOODS B WHERE CATE_NO = 1127) TMP)
+			SET A.DISP_ORD = (SELECT DISP_ORD FROM (SELECT MAX(DISP_ORD) AS DISP_ORD FROM TB_CATE_GOODS B WHERE CATE_NO = #{cateNo}) TMP)
 		</if>
 		WHERE A.CATE_NO = #{cateNo}
 		<choose>
@@ -1219,4 +1219,218 @@
 			AND SUBSTR(CONTENTS_LOC, 0, 4) = SUBSTR(#{contentsLoc}, 0, 4)
 		</if>
 	</delete>
+
+	<!-- 메인전시관리 저장 -->
+	<insert id="saveMainLayout" parameterType="MainDisplay">
+		/* TsaDisplay.saveMainLayout */
+		INSERT INTO TB_MAIN_LAYOUT
+		(
+			CATE_NO
+			,CONTENTS_LOC
+			,DISP_ORD
+			,CONTENTS_YN
+			,COL_CNT
+			,COL_NO
+			,ORG_FILE_NM
+			,SYS_FILE_NM
+			,REG_NO
+			,REG_DT
+			,UPD_NO
+			,UPD_DT
+		)
+		VALUES
+		(
+		 	#{cateNo}
+		 	,#{contentsLoc}
+		 	,#{dispOrd}
+			,#{contentsYn}
+			,#{colCnt}
+			,#{colNo}
+			,#{orgFileNm}
+			,#{sysFileNm}
+			,#{regNo}
+			,NOW()
+			,#{updNo}
+			,NOW()
+		)
+	</insert>
+
+	<!-- 컨텐츠 설명 조회 -->
+	<select id="getContentsDesc" parameterType="String" resultType="String">
+		/* TsaDisplay.getContentsDesc */
+		SELECT	IFNULL(CD_DESC, '') AS CONTENTS_DESC
+		FROM	TB_COMMON_CODE
+		WHERE	CD = #{contentsLoc}
+	</select>
+
+	<!-- 컨텐츠 미리보기 리스트 조회 -->
+	<select id="getContentsPreviewList" parameterType="Contents" resultType="Contents">
+		/* TsaDisplay.getContentsPreviewList */
+		SELECT PRE_CONTENTS_SQ
+			 , CATE_NO
+			 , CONTENTS_LOC
+			 , CONTENTS_TYPE
+			 , DISP_STDT
+			 , DISP_EDDT
+			 , DISP_ORD
+			 , IMG_PATH1
+			 , IMG_PATH2
+			 , IMG_PATH3
+			 , IMG_PATH4
+			 , STR_VAR1
+			 , STR_VAR2
+			 , STR_VAR3
+			 , STR_VAR4
+			 , STR_TITLE1
+			 , STR_TITLE2
+			 , STR_TITLE3
+			 , STR_TITLE4
+			 , USE_YN
+			 , REG_NO
+			 , REG_DT
+			 , UPD_NO
+			 , UPD_DT
+		FROM TB_CONTENTS_PREVIEW
+		WHERE CATE_NO = #{cateNo}
+		  AND CONTENTS_LOC = #{contentsLoc}
+		ORDER BY DISP_ORD
+	</select>
+
+	<!-- 메인전시 컨텐츠 미리보기 삭제 -->
+	<delete id="deleteContentsPreview" parameterType="Contents">
+		/* TsaDisplay.deleteContentsPreview */
+		DELETE FROM TB_CONTENTS_PREVIEW
+		WHERE 	CATE_NO = #{cateNo}
+		AND 	CONTENTS_LOC = #{contentsLoc}
+	</delete>
+
+	<!-- 메인전시 컨텐츠 미리보기 저장 -->
+	<insert id="saveContentsPreview" parameterType="Contents" keyProperty="preContentsSq">
+		/* TsaDisplay.saveContentsPreview */
+		INSERT INTO TB_CONTENTS_PREVIEW
+		(
+			PRE_CONTENTS_SQ
+			, CATE_NO
+			, CONTENTS_LOC
+			, CONTENTS_TYPE
+			, DISP_STDT
+			, DISP_EDDT
+			, DISP_ORD
+			, IMG_PATH1
+			, IMG_PATH2
+			, IMG_PATH3
+			, IMG_PATH4
+			, STR_VAR1
+			, STR_VAR2
+			, STR_VAR3
+			, STR_VAR4
+			, STR_TITLE1
+			, STR_TITLE2
+			, STR_TITLE3
+			, STR_TITLE4
+			, USE_YN
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		)
+		VALUES
+		(
+			#{preContentsSq}
+			,#{cateNo}
+			,#{contentsLoc}
+			,#{contentsType}
+			,DATE_FORMAT(#{dispStdt}, '%Y-%m-%d %H:%i:%S')
+			,DATE_FORMAT(#{dispEddt}, '%Y-%m-%d %H:%i:%S')
+			,(SELECT DISP_ORD FROM (SELECT IFNULL((MAX(DISP_ORD) + 1), 1) AS DISP_ORD FROM	TB_CONTENTS_PREVIEW	WHERE CATE_NO = #{cateNo} AND CONTENTS_LOC = #{contentsLoc}) TMP)
+			,#{imgPath1}
+			,#{imgPath2}
+			,#{imgPath3}
+			,#{imgPath4}
+			,#{strVar1}
+			,#{strVar2}
+			,#{strVar3}
+			,#{strVar4}
+			,#{strTitle1}
+			,#{strTitle2}
+			,#{strTitle3}
+			,#{strTitle4}
+			,#{useYn}
+			,#{regNo}
+			,NOW()
+			,#{updNo}
+			,NOW()
+		)
+	</insert>
+
+	<!-- 메인전시 컨텐츠 삭제 -->
+	<delete id="deleteContents" parameterType="Contents">
+		/* TsaDisplay.deleteContents */
+		DELETE FROM TB_CONTENTS
+		WHERE 	CATE_NO = #{cateNo}
+		  AND 	CONTENTS_LOC = #{contentsLoc}
+	</delete>
+
+	<!-- 메인전시 컨텐츠 저장 -->
+	<insert id="saveContents" parameterType="Contents">
+		/* TsaDisplay.saveContents */
+		<selectKey keyProperty="contentsSq" resultType="int" order="AFTER">
+			SELECT LAST_INSERT_ID()
+		</selectKey>
+		INSERT INTO TB_CONTENTS
+		(
+			CONTENTS_SQ
+		 	, CATE_NO
+			, CONTENTS_LOC
+			, CONTENTS_TYPE
+			, DISP_STDT
+			, DISP_EDDT
+			, DISP_ORD
+			, IMG_PATH1
+			, IMG_PATH2
+			, IMG_PATH3
+			, IMG_PATH4
+			, STR_VAR1
+			, STR_VAR2
+			, STR_VAR3
+			, STR_VAR4
+			, STR_TITLE1
+			, STR_TITLE2
+			, STR_TITLE3
+			, STR_TITLE4
+			, USE_YN
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		)
+		SELECT
+		     #{contentsSq}
+			 , CATE_NO
+			 , CONTENTS_LOC
+			 , CONTENTS_TYPE
+			 , DISP_STDT
+			 , DISP_EDDT
+			 , DISP_ORD
+			 , IMG_PATH1
+			 , IMG_PATH2
+			 , IMG_PATH3
+			 , IMG_PATH4
+			 , STR_VAR1
+			 , STR_VAR2
+			 , STR_VAR3
+			 , STR_VAR4
+			 , STR_TITLE1
+			 , STR_TITLE2
+			 , STR_TITLE3
+			 , STR_TITLE4
+			 , USE_YN
+			 , #{regNo}
+			 , NOW()
+			 , #{updNo}
+			 , NOW()
+		FROM	TB_CONTENTS_PREVIEW
+		WHERE	CONTENTS_LOC = #{contentsLoc}
+		AND 	CATE_NO = #{cateNo}
+	</insert>
 </mapper>

+ 85 - 43
src/main/java/com/style24/persistence/mybatis/shop/TsaMailTemplate.xml

@@ -52,7 +52,7 @@
 		     , NOW()
 		)
 		ON DUPLICATE KEY UPDATE
-		        MAILHF_SQ = #{mailhfSq}
+		       MAILHF_SQ = #{mailhfSq}
 		     , MAILHF_NM = #{mailhfNm}
 		     , MAILHF_GB = #{mailhfGb}
 		     , MAILHF_CONTENT = #{mailhfContent}
@@ -80,24 +80,12 @@
 		<select id="getMailGoodsInfo" parameterType="Goods" resultType="Goods">
 		/*메일 템플릿 상품 전시*/
 		SELECT GOODS_CD
-		     , GOODS_NM
 		     , BRAND_ENM 
-		     , STOCK_QTY_SUM
+		     , GOODS_NM
 	         , GOODS_STAT
-	         , STYLE_YEAR
-		     , SEASON_CD
 	         , LIST_PRICE
 	         , CURR_PRICE
-	         , PRICE_UPD_DT
-	         , ERP_STOCK_LINK_YN
-	         , FORMAL_GB
-	         , RETURNABLE_YN
-	         , REG_DT
-	         , REG_NM
-		     , UPD_DT
-	         , UPD_NM
-	         , REP_GOODS_CD
-		     , GROUP_CONCAT(OPT_CD2 ORDER BY DISP_ORD DESC, OPT_CD2 SEPARATOR ',')        AS SITE_CD
+		     , GROUP_CONCAT(OPT_CD2 ORDER BY DISP_ORD DESC, OPT_CD2 SEPARATOR ',')  AS SITE_CD
 	      FROM (
 		SELECT   GI.SYS_IMG_NM
 			   , G.GOODS_CD
@@ -141,8 +129,7 @@
 				   , UPD_DT, UPD_NM, REP_GOODS_CD
 		</select>
 	
-	
-		<insert id="saveMktmailform" parameterType="MktmailManagement" keyProperty="mailtSq">
+		<insert id="saveMktmailform" parameterType="mktMailManagement" keyProperty="mailtSq">
 		/* TsaMailTemplate.saveMktmailform   mkt메일 등록/수정 */
 		INSERT INTO TB_MAILT (
 				    MAILT_SQ
@@ -247,27 +234,27 @@
 		
 		<select id="getMktMailList" parameterType="MktmailManagement" resultType="MktmailManagement">
 		/* TsaMailTemplate.getMktMailList mkt메일 조회*/
-		SELECT MAILT_SQ
-			 , MAILT_GB
-			 , MAILT_NM
-			 , FN_GET_USER_NM(REG_NO)             AS REG_NM
-			 , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT
-			 , FN_GET_USER_NM(UPD_NO)             AS UPD_NM
-			 , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
-		FROM   TB_MAILT 
-		WHERE  USE_YN = 'Y'
+		SELECT 		   TM.MAILT_SQ
+					 , TM.MAILT_GB
+					 , TM.MAILT_NM
+					 , FN_GET_USER_NM(TM.REG_NO)             AS REG_NM
+					 , DATE_FORMAT(TM.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+					 , FN_GET_USER_NM(TM.UPD_NO)             AS UPD_NM
+					 , DATE_FORMAT(TM.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		FROM    	   TB_MAILT TM
+		WHERE  		   TM.USE_YN = 'Y'
 		<if test="mktmailStdt != null and mktmailStdt != '' and mktmailEddt != null and mktmailEddt != ''">
-		AND  REG_DT BETWEEN STR_TO_DATE(#{mktmailStdt}, '%Y-%m-%d%H%i%S') AND STR_TO_DATE(CONCAT(#{mktmailEddt}, '235959'),'%Y-%m-%d%H%i%S')
+		AND  TM.REG_DT BETWEEN STR_TO_DATE(#{mktmailStdt}, '%Y-%m-%d%H%i%S') AND STR_TO_DATE(CONCAT(#{mktmailEddt}, '235959'),'%Y-%m-%d%H%i%S')
 		</if> 
 		<if test="searchTxt != null and searchTxt != ''">
 			<if test="searchGb != null and searchGb == 'mailtSq'">
-				AND MAILT_SQ = #{searchTxt}
+				AND TM.MAILT_SQ = #{searchTxt}
 			</if>
 			<if test="searchGb != null and searchGb == 'mailtNm'">
-				AND MAILT_NM LIKE CONCAT('%',LOWER(#{searchTxt}), '%')
+				AND TM.MAILT_NM LIKE CONCAT('%',LOWER(#{searchTxt}), '%')
 			</if>
 		</if>
-		ORDER BY MAILT_SQ
+		ORDER BY TM.MAILT_SQ
 		</select>
 		
 		<select id="getMktmailManagementDetail" parameterType="Integer" resultType="MktmailManagement">
@@ -282,26 +269,39 @@
 		WHERE  MAILT_SQ = #{mailtSq}
 		</select>
 		
-		<select id="getMktmailManagementTCList" parameterType="Integer" resultType="MktmailManagement">
+		<select id="getMktmailManagementTCList" parameterType="MktmailManagementTc" resultType="MktmailManagementTc">
 		/* TsaMailTemplate.getMktmailManagementTCDetail */
-		SELECT MAILTC_SQ
-			 , MAILT_SQ	
-			 , MAILTC_NM
-			 , GOODS_CPR	
-			 , MAILTC_LINK
-		FROM   TB_MAILTC
-		WHERE  MAILT_SQ = #{mailtSq}
+		SELECT 		TC.MAILTC_SQ
+			 	  , TC.MAILT_SQ	
+			 	  , TC.MAILTC_NM
+			  	  , TC.GOODS_CPR	
+			 	  , TC.MAILTC_LINK
+		FROM   		TB_MAILTC TC
+		INNER JOIN 	TB_MAILT TM
+		ON 			TM.MAILT_SQ = TC.MAILT_SQ 
+		WHERE  		TC.MAILT_SQ = #{mailtSq}
+		AND	  		TC.USE_YN = "Y"
 		</select>
 		
-		<select id="getMktmailManagementGoodsList" parameterType="Integer" resultType="MktmailManagement">
+		<select id="getMktmailManagementGoodsList" parameterType="MktmailManagementTc" resultType="MktmailManagementGoods">
 		/* TsaMailTemplate.getMktmailManagementGoodsList */
-		SELECT  	TG.MAILTC_SQ,
-					TG.GOODS_CD,
-					TG.DISP_ORD
+		 SELECT		TG.MAILTC_SQ
+				  , TG.GOODS_CD
+			      , TBRAND.BRAND_ENM 
+			      , tbg.GOODS_NM 
+			      , TBG.GOODS_STAT
+			      , TBG.LIST_PRICE 
+			      , TBG.CURR_PRICE
+			      , TG.DISP_ORD
 		FROM 		TB_MAILTC_GOODS TG
 		INNER JOIN  TB_MAILTC TC
-		ON 			TG.MAILTC_SQ = TC.MAILTC_SQ 
+		ON 			TC.MAILTC_SQ = TG.MAILTC_SQ 
+		INNER JOIN  tb_goods TBG
+		ON 			TBG.GOODS_CD = TG.GOODS_CD 
+		INNER JOIN 	tb_brand TBRAND
+		ON		    TBRAND.BRAND_CD = TBG.BRAND_CD
 		WHERE 		TC.MAILTC_SQ = #{mailtcSq}
+		ORDER  BY 	TG.DISP_ORD
 		</select>
 		
 		<update id='deleteMktmailList' parameterType='MktmailManagement'>
@@ -310,5 +310,47 @@
 	  	SET     USE_YN = 'N'
 		WHERE   MAILT_SQ = #{mailtSq}
 		</update>
+		
+		<delete id="deleteMktCorner" parameterType='MktmailManagementTc'>
+		/* TsaMailTemplate.deleteMktCorner 코너 삭제*/
+		UPDATE  TB_MAILTC
+		SET		USE_YN = 'N'
+		WHERE	MAILTC_SQ = #{mailtcSq}
+		</delete>
+		
+		<delete id="deleteMktGoodsList" parameterType='MktmailManagementGoods'>
+		/* TsaMailTemplate.deleteMktGoods 상품 삭제*/
+		DELETE 	
+		FROM	TB_MAILTC_GOODS
+		WHERE	MAILTC_SQ = #{mailtcSq}
+		</delete>
+		
+		<select id="getMktmailPreviewHeader" parameterType="Integer" resultType="MktmailManagement">
+		/* TsaMailTemplate.getMktmailPreviewHeader */
+		SELECT 		HF.MAILHF_CONTENT
+		FROM   		TB_MAILT TM
+		INNER JOIN  TB_MAILHF HF
+		ON 	  		TM.MAILH_SQ = HF.MAILHF_SQ
+		WHERE 		HF.MAILHF_GB = 'H'
+		AND 		TM.MAILT_SQ = #{mailtSq}
+		</select>
+		
+		<select id="getMktmailPreviewFooter" parameterType="Integer" resultType="MktmailManagement">
+		/* TsaMailTemplate.getMktmailPreviewFooter */
+		SELECT 		HF.MAILHF_CONTENT
+		FROM   		TB_MAILT TM
+		INNER JOIN  TB_MAILHF HF
+		ON 	  		TM.MAILF_SQ = HF.MAILHF_SQ
+		WHERE 		HF.MAILHF_GB = 'F'
+		AND 		TM.MAILT_SQ = #{mailtSq}
+		</select>
+		
+		<select id="getMktmailPreviewContent" parameterType="MktmailManagement" resultType="MktmailManagement">
+		/* TsaMailTemplate.getMktmailPreviewContent */
+		SELECT 		MAILT_NM
+				  , MAIL_CONTENT
+		FROM		TB_MAILT
+		WHERE 		MAILT_SQ =   #{mailtSq}
+		</select>
 	
 </mapper>

+ 10 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -3,8 +3,8 @@
 <mapper namespace="com.style24.admin.biz.dao.TsaPlanDao">
 
 	<!-- 기획전 등록 -->
-	<insert id="createPlanWebInfo" parameterType="Plan">
-		/* TsaMarketing.createPlanWebInfo */
+	<insert id="createPlanInfo" parameterType="Plan">
+		/* TsaMarketing.createPlanInfo */
 		<selectKey keyProperty="planSq" resultType="Integer" order="AFTER">
 			SELECT LAST_INSERT_ID()	/* 기획전 일련번호  */
 		</selectKey>
@@ -154,8 +154,8 @@
 	</select>
 	
 	<!-- 기획전 리스트 카운트 조회-->
-	<select id="getPlanListCnt" parameterType="Plan" resultType="int">
-		/* TsaMarketing.getPlanListCnt */
+	<select id="getPlanListCount" parameterType="Plan" resultType="int">
+		/* TsaMarketing.getPlanListCount */
 		SELECT COUNT(1)
 		  FROM TB_PlAN
 		 WHERE 1=1
@@ -297,8 +297,8 @@
 	</select>
 	
 	<!-- 기획전 수정 -->
-	<update id="updatePlanWebInfo" parameterType="Plan">
-		/* TsaMarketing.updatePlanWebInfo */
+	<update id="updatePlanInfo" parameterType="Plan">
+		/* TsaMarketing.updatePlanInfo */
 		UPDATE TB_PLAN
 		   SET PLAN_GB = #{planGb}
 		     <!-- , CUST_GB = #{custGb} -->
@@ -659,6 +659,9 @@
 	<!-- 기획전 코너 저장 -->
 	<insert id="savePlanCornerInfo" parameterType="Plan">
 		/* TsaMarketing.savePlanCornerInfo */
+		<selectKey keyProperty="planDtlSq" resultType="Integer" order="AFTER">
+			SELECT LAST_INSERT_ID()	/* 기획전 일련번호  */
+		</selectKey>
 		INSERT INTO
 			      TB_PLAN_DETAIL (
 			            PLAN_SQ         
@@ -674,7 +677,7 @@
                       , UPD_NO          
 			      )
 			   VALUES (
-			    	   #{planSq}                                         
+			    	   #{planSq}                                        
                      , #{planDtlSq}                                      
                      , DATE_FORMAT(#{dispStdt} , '%Y-%m-%d %H:%i:%s')     
                      , DATE_FORMAT(#{dispEddt} , '%Y-%m-%d %H:%i:%s')   

+ 455 - 0
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -0,0 +1,455 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MainContentsPopupForm.html
+ * @desc    : 메인전시 컨텐츠 수정 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.2.23    bin2107     최초 작성
+ *******************************************************************************
+ -->
+	<div class="modalPopup" data-width="1200" >
+		<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 style="height:600px; width:1100px; overflow:auto; margin-left:40px; border-style: solid; border-width: 1px;" id="popSortable">
+			</form>
+		</div>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var cateNo = [[${cateNo}]];
+	var contentsLoc = [[${contentsLoc}]];
+	var contentsLocArr = gagajf.convertToArray([[${contentsLocList}]]);
+	var tdWidth = $("#sortable").find("td").width();
+	var tdDeleteWidth = parseInt(tdWidth/11, 10);
+	tdWidth = tdWidth - tdDeleteWidth;
+
+	// 컨텐츠 미리보기 리스트
+	var fnGetContentsPreviewList = function() {
+		$("#popSortable").html('');
+		var data = {cateNo : cateNo
+			,contentsLoc : contentsLoc
+		};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/display/contents/preview/list', jsonData, fnCreatePopLayout);
+	}
+
+	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 += '<colgroup>';
+			html += '<col style="width:10%;"/>';
+			html += '<col style="width:55%;"/>';
+			html += '<col/>';
+			html += '</colgroup>';
+			html += '<thead><tr><th>전시일시</th><td><input name="dispStdt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출시작일" data-valid-type="calendar" value="'+dispStdt[0]+'"/>';
+			html += '<select name="stTimeHour" required="required" data-valid-name="노출기간 시작시간">';
+			html += fnCreateTimeOption(24, dispStdt[1].split(":")[0]);
+			html += '</select>';
+			html += '<select name="stTimeMin" required="required" data-valid-name="노출기간 시작시간">';
+			html += fnCreateTimeOption(60, dispStdt[1].split(":")[1]);
+			html += '</select>';
+			html += '<span> ~ </span>';
+			html += '<input name="dispEddt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출종료일" data-valid-type="calendar" value="'+dispEddt[0]+'"/>';
+			html += '<select name="edTimeHour" required="required" data-valid-name="노출기간 종료시간">';
+			html += fnCreateTimeOption(24, dispEddt[1].split(":")[0]);
+			html += '</select>';
+			html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
+			html += fnCreateTimeOption(60, dispEddt[1].split(":")[1]);
+			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 += '<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>';
+			html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
+			html += '</tr></thead><tbody>';
+			for(var j=1; j<5; j++){
+				var strTitle = eval("result["+i+"].strTitle" + j);
+				var imgPath = eval("result["+i+"].imgPath" + j);
+				var strVar = eval("result["+i+"].strVar" + j);
+				if(strTitle!=null && strTitle!='null' && strTitle!='' ){
+					html += fnAddTitlePopRow(strTitle);
+				}
+				if(imgPath!=null && imgPath!='null' && imgPath!='' ){
+					html += fnAddImgPopRow(imgPath);
+				}
+				if(strVar!=null && strVar!='null' && strVar!='' ){
+					html += fnAddLinkPopRow(strVar);
+				}
+			}
+			html += '</tbody></table>';
+		}
+		$("#popSortable").append(html);
+		$("#popSortable").sortable();
+		$('.schDate').datepicker("destroy");
+		$('.schDate').datepicker({
+			changeMonth: true,
+			changeYear: true,
+			defaultDate: $('.schDate').val()
+		});
+	}
+	/**
+	 * 컨텐츠 추가 버튼
+	 */
+	$("#btnPopAddRow").on("click", function (){
+		var html = '<table class="frmStyle" style="margin-bottom:30px">';
+		html += '<colgroup>';
+		html += '<col style="width:10%;"/>';
+		html += '<col style="width:55%;"/>';
+		html += '<col/>';
+		html += '</colgroup>';
+		html += '<thead><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);
+		html += '</select>';
+		html += '<select name="stTimeMin" required="required" data-valid-name="노출기간 시작시간">';
+		html += fnCreateTimeOption(60);
+		html += '</select>';
+		html += '<span> ~ </span>';
+		html += '<input name="dispEddt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출종료일" data-valid-type="calendar"/>';
+		html += '<select name="edTimeHour" required="required" data-valid-name="노출기간 종료시간">';
+		html += fnCreateTimeOption(24,23);
+		html += '</select>';
+		html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
+		html += fnCreateTimeOption(60,59);
+		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 += '<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>';
+		html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
+		html += '</tr></thead><tbody></tbody></table>';
+		$("#popSortable").prepend(html);
+		$("#popSortable").sortable();
+		$('.schDate').datepicker("destroy");
+		$('.schDate').datepicker({
+			changeMonth: true,
+			changeYear: true,
+			defaultDate: $('.schDate').val()
+		});
+	});
+
+	/**
+	 * 임시저장
+	 */
+	var dataArr = [];
+	$("#btnPopSave").on("click", function (){
+		if(!gagajf.checkRequired("#popSortable")){
+			return;
+		}
+		var titleBool = true;
+		$("#popSortable").find('input[name=title]').each(function(idx, title) {
+			if ($(title).val()==''){
+				titleBool = false;
+				$(title).focus();
+				gagajf.alertMessage($(title), 'input');
+				return;
+			}
+		});
+		if(!titleBool){
+			return false;
+		}
+		dataArr = [];
+		$("#popSortable table").each(function(){
+			var newImgFileArr = [];
+			var imgPath1 = '';
+			var imgPath2 = '';
+			var imgPath3 = '';
+			var imgPath4 = '';
+			var strVar1 = '';
+			var strVar2 = '';
+			var strVar3 = '';
+			var strVar4 = '';
+			var strTitle1 = '';
+			var strTitle2 = '';
+			var strTitle3 = '';
+			var strTitle4 = '';
+			var i = 1;
+			$(this).find('input[name=imgPath]').each(function(){
+				eval("imgPath" + i + "='"+$(this).val()+"'");
+				i++;
+			});
+			$(this).find('input[name=newImgFile]').each(function(){
+				newImgFileArr.push($(this).val());
+			});
+			i = 1;
+			$(this).find('input[name=title]').each(function(){
+				var title = $(this).val().replace(/[\']/gi, "\\'");
+				eval("strTitle" + i + "='"+title+"'");
+				i++;
+			});
+			i = 1;
+			$(this).find('input[name=link]').each(function(){
+				_mall = [[${@environment.getProperty('domain.front')}]];
+				var val = $(this).val();
+				val = val.replace('https:'+_mall, '');
+				val = val.replace('http:'+_mall, '');
+				val = val.replace(_mall, '');
+				eval("strVar" + i + "='"+val+"'");
+				i++;
+			});
+
+			var dispStdt = $(this).find("[name=dispStdt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=stTimeHour]").val().replace('시', '') + "" +$(this).find("[name=stTimeMin]").val().replace('분', '') + "00";
+			var dispEddt = $(this).find("[name=dispEddt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=edTimeHour]").val().replace('시', '') + "" +$(this).find("[name=edTimeMin]").val().replace('분', '') + "59";
+
+			var dispOrd = $(this).find("[name=dispOrd]").val();
+
+			var data = {cateNo : cateNo
+				, contentsLoc : contentsLoc
+				, dispStdt : dispStdt
+				, dispEddt : dispEddt
+				, newImgFileArr : newImgFileArr
+				, imgPath1 : imgPath1
+				, imgPath2 : imgPath2
+				, imgPath3 : imgPath3
+				, imgPath4 : imgPath4
+				, strVar1 : strVar1
+				, strVar2 : strVar2
+				, strVar3 : strVar3
+				, strVar4 : strVar4
+				, strTitle1 : strTitle1
+				, strTitle2 : strTitle2
+				, strTitle3 : strTitle3
+				, strTitle4 : strTitle4
+				, useYn : 'Y'
+				, dispOrd : dispOrd
+			};
+
+			dataArr.push(data);
+		});
+		if(dataArr.length==0){
+			var data = {cateNo : cateNo
+				, contentsLoc : contentsLoc
+			};
+			dataArr.push(data);
+		}else{
+			var dataArrSort = [];
+			dataArr.forEach(function(item, index){
+				if(dataArr[index].dispOrd>0){
+					for(var i=1; i<dataArr.length; i++){
+						if(i>index){
+							if(dataArr[index].dispOrd==dataArr[i].dispOrd){
+								dataArr[i].dispOrd = Number(dataArr[i].dispOrd) + 1;
+							}
+						}
+					}
+				}
+			});
+			dataArr.forEach(function(item, index){
+				if(dataArr[index].dispOrd != ''){
+					dataArrSort[dataArr[index].dispOrd-1] = item;
+				}
+			});
+			dataArr.forEach(function(item, index){
+				if(dataArr[index].dispOrd == ''){
+					var empty = false;
+					for(var i=0; i<dataArrSort.length; i++){
+						if(typeof dataArrSort[i] == 'undefined'){
+							dataArrSort[i] = item;
+							empty = true;
+							break;
+						}
+					};
+					if(!empty){
+						dataArrSort.push(item);
+					}
+				}
+			});
+			dataArr = dataArrSort;
+		}
+
+		var jsonData = JSON.stringify(dataArr);
+		mcxDialog.confirm('컨텐츠를 저장 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				gagajf.ajaxJsonSubmit('/display/contents/preview/save', jsonData, fnGetContentsPreviewList);
+			}
+		});
+	});
+
+	/**
+	 * 파일첨부
+	 */
+	var fnPopFileUpload = function (obj, ind){
+		var file = obj.files[0];
+		file.name = 'test';
+		if (typeof(file) == 'undefined'){
+			return;
+		}
+		// 파일 업로드
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/contents'
+				, file
+				, function(result) {
+					$(obj).closest('div').find('input:hidden[name=newImgFile]').val(result.newFileName);
+					$("#bannerPreViewUrlPop_"+ind).attr('src', $("#uploadDefaultUrlPop").val()+result.newFileName);
+					$("#imgViewPop_"+ind).removeClass("off").addClass("on");
+				}
+				, 'image'
+		);
+	}
+
+	/**
+	 * 링크추가
+	 */
+	var fnAddLinkPopRow = function (param){
+		var val = typeof param=='object'?'#':param;
+		var html = '<tr name="linkPopRow">';
+		html += '<th>링크 (없으면 #)</th>';
+		html += '<td><input name="link" type="text" maxlength="200" required="required" data-valid-name="링크" value="'+val+'"/></td>';
+		html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
+		html += '</tr>';
+		if(typeof param == 'object'){
+			if($(param).closest("table").find("tbody").find("tr[name=linkPopRow]").length>3){
+				mcxDialog.alert("링크는 4개까지 등록 가능합니다");
+				return;
+			}
+			$(param).closest("table").find("tbody").append(html);
+		}else{
+			return html;
+		}
+	}
+
+	/**
+	 * 이미지 추가
+	 */
+	var imgIndex = 0;
+	var fnAddImgPopRow = function (param){
+		var src = '';
+		var imgPath = '';
+		if(typeof param!='object'){
+			src = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+param;
+			imgPath = param;
+		}
+		var html = '<tr name="imgPopRow">';
+		html += '<th>이미지';
+		html += '</th>';
+		html += '<td><div class="uFile w300">';
+		html += '<input id="filePop_'+imgIndex+'" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, '+imgIndex+')"/>';
+		html += '<label for="filePop_'+imgIndex+'" class="uFileLabel">파일선택</label>';
+		html += '<input type="hidden" name="imgPath" value="'+imgPath+'"/>';
+		html += '<input type="hidden" name="newImgFile" value="" />';
+		html += '</div>';
+		html += '<div id="imgViewPop_'+imgIndex+'" class=';
+		if(src!=''){
+			html += '"on">';
+		}else{
+			html += '"off">';
+		}
+		html += '<img id="bannerPreViewUrlPop_'+imgIndex+'" src="'+src+'" style="height:100px; max-width:500px;"  onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
+		html += '</div></td>';
+		html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
+		html += '</tr>';
+		if(typeof param == 'object'){
+			if($(param).closest("table").find("tbody").find("tr[name=imgPopRow]").length>3){
+				mcxDialog.alert("이미지는 4개까지 등록 가능합니다");
+				return;
+			}
+			imgIndex++;
+			$(param).closest("table").find("tbody").append(html);
+		}else{
+			imgIndex++;
+			return html;
+		}
+	}
+
+	/**
+	 * 타이틀추가
+	 */
+	var fnAddTitlePopRow = function (param){
+		var val = typeof param=='object'?'':param;
+		var html = '<tr name="titlePopRow">';
+		html += '<th>타이틀</th>';
+		html += '<td><input name="title" type="text" maxlength="200" data-valid-name="타이틀" value="'+val+'"/></td>';
+		html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
+		html += '</tr>';
+		if(typeof param == 'object'){
+			if($(param).closest("table").find("tbody").find("tr[name=titlePopRow]").length>3){
+				mcxDialog.alert("타이틀은 4개까지 등록 가능합니다");
+				return;
+			}
+			$(param).closest("table").find("tbody").append(html);
+		}else{
+			return html;
+		}
+	}
+
+	// 컨텐츠 행삭제
+	var fnDeleteContentsRow = function (obj){
+		$(obj).closest("table").remove();
+	}
+
+	// 행삭제
+	var fnDeleteTrRow = function (obj){
+		$(obj).closest("tr").remove();
+	}
+
+	// 컨텐츠 추가 날짜 설정
+	var fnCreateTimeOption = function(val, sel) {
+		var html = '';
+		for(var i=0; i<val; i++){
+			var time = 0;
+			if(i<10){
+				time = '0'+i;
+			}else {
+				time = i;
+			}
+			var select = false;
+			if(sel==time){
+				select = true;
+			}
+			if(val==24){
+				time += '시';
+			}else if(val==60){
+				time += '분';
+			}
+			html += '<option value="'+time+'"';
+			if(select){
+				html += 'selected="selected"';
+			}
+			html += '>'+time+'</option>';
+		}
+		return html;
+	}
+
+	// 창닫기
+	var fnMainContentsPopupFormClose = function (){
+		uifnPopupClose('popupMainContents');
+	}
+
+	$(document).ready(function() {
+		$("#popTitle").text("["+contentsLoc+"] "+gagaAgGrid.lookupValue(contentsLocArr, contentsLoc));
+		$("#popSortable").disableSelection();
+		fnGetContentsPreviewList();
+	});
+/*]]>*/
+</script>
+
+</html>

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

@@ -88,8 +88,26 @@
 										<span class="cBlue">* 마우스 드래그&드랍으로 레이아웃 순서 변경 가능하며 X 버튼으로 삭제 가능합니다.</span>
 									</li>
 								</th:block>
-								<li id="viewUl">
-
+								<li id="viewUl" class="off aC">
+									<span>
+										<input name="viewDate" id="viewDate" type="text" class="w80 schDate" maxlength="10" data-valid-name="미리보기일자" data-valid-type="calendar"/>
+										<select id="viewTimeHour" name="viewTimeHour" data-valid-name="미리보기 시간">
+											<th:block th:each="num, index  : ${#numbers.sequence(0,24)}">
+											<option  th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" >시간</option>
+											</th:block>
+										</select>
+										<select id="viewTimeMin" name="viewTimeMin" data-valid-name="미리보기 시간">
+											<th:block th:each="num: ${#numbers.sequence(0,59)}">
+											<option  th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|">분</option>
+											</th:block>
+										</select>
+										<input name="viewTime" id="viewTime" type="hidden" data-valid-name="미리보기 시간" />
+										<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.image.view') + '/display/main/'}"/>
+									</span>
+									<span>
+										<button type="button" class="btn btn-info btn-lg" id="btnView">미리보기</button>
+										<button type="button" class="btn btn-default btn-lg" id="btnAllUpd">일괄적용</button>
+									</span>
 								</li>
 								<th:block th:if="${sessionInfo.roleCd == 'G001_0000'}">
 									<li class="right">
@@ -127,17 +145,17 @@
 	*/
 	var fnGetMainDisplayList = function (cate){
 		if(cate=='cate1'){
-			$("#cate2No").html('<option value="">[선택]</option>');
+			$("#searchForm select[name=cate2No]").html('<option value="">[선택]</option>');
 		}
-
-		var val = $("#cate1No").val();
+		$("#viewUl").addClass("off");
+		var val = $("#searchForm select[name=cate1No]").val();
 		if(gagajf.isNull(val)||val.split(',')[0]=='0'){
 			var html = '<tbody><tr style="height:170px;"><td colspan="8" style="text-align:center;"><span>카테고리를 선택해 주세요</span></td></tr></tbody>';
 			$("#mainSortable").html(html);
 		}else{
 			$("#mainSortable").html('');
-			if(val.split(',')[1]=='N' && gagajf.isNull($("#cate2No").val())){
-				$("cate2No").html('<option value="">[선택]</option>');
+			if(val.split(',')[1]=='N' && gagajf.isNull($("#searchForm select[name=cate2No]").val())){
+				$("#searchForm select[name=cate2No]").html('<option value="">[선택]</option>');
 				var data = {
 					cateNo : val.split(',')[0]
 					,clsLvl : 2
@@ -145,9 +163,10 @@
 				var jsonData = JSON.stringify(data);
 				gagajf.ajaxJsonSubmit('/display/main/category/list', jsonData, fnCate2NoCallBack);
 			}else{
+				$("#viewUl").removeClass("off");
 				var cateNo = val.split(',')[0];
-				if(!gagajf.isNull($("#cate2No").val())){
-					cateNo = $("#cate2No").val().split(',')[0];
+				if(!gagajf.isNull($("#searchForm select[name=cate2No]").val())){
+					cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
 				}
 				var data = {
 					cateNo : cateNo
@@ -168,7 +187,7 @@
 		var orgFileNm = '';
 		var sysFileNm = '';
 		var onOff = 'off';
-		var cate1No = $("#cate1No").val().split(',')[0];
+		var cate1No = $("#searchForm select[name=cate1No]").val().split(',')[0];
 
 		for(var i=0; i<result.length; i++){
 			var colCnt = result[i].colCnt;
@@ -294,7 +313,7 @@
 		for (var i=0; i<result.length; i++){
 			html += '<option value="'+result[i].cateNo+','+result[i].leafYn+'">['+result[i].cateNo+']'+result[i].cateNm+'</option>';
 		}
-		$("#cate2No").html(html);
+		$("#searchForm select[name=cate2No]").html(html);
 		// grid 높이 조절
 		//uifnFitGrid();
 	}
@@ -304,13 +323,13 @@
 	*/
 	$("#btnAddRow").on("click", function (){
 		console.log('[행추가 start]');
-		var val = $("#cate1No").val();
+		var val = $("#searchForm select[name=cate1No]").val();
 		var cate1No = val.split(',')[0];
 		//console.log('val>>'+val);
 		//console.log('cate1No>>'+cate1No);
 		//console.log('leafYn>>>'+val.split(',')[1]);
 
-		if(gagajf.isNull(val) || cate1No=='0' || val.split(',')[1]=='N' && gagajf.isNull($("#cate2No").val())){
+		if(gagajf.isNull(val) || cate1No=='0' || val.split(',')[1]=='N' && gagajf.isNull($("#searchForm select[name=cate2No]").val())){
 			mcxDialog.alert('카테고리를 선택해 주세요.');
 			return;
 		}
@@ -438,12 +457,19 @@
 		//uifnFitGrid();
 	});
 
+	/**
+	* 레이아웃 행 삭제
+	*/
+	var fnDeleteRow = function (obj){
+		$(obj).closest("tbody").remove();
+	}
+
 	/**
 	 * 레이아웃 저장
 	 */
 	$("#btnSave").on("click",function(){
-		var val = $("#cate1No").val();
-		if(gagajf.isNull(val) || (val.split(',')[1]=='N' && gagajf.isNull($("#cate2No").val())) ){
+		var val = $("#searchForm select[name=cate1No]").val();
+		if(gagajf.isNull(val) || (val.split(',')[1]=='N' && gagajf.isNull($("#searchForm select[name=cate2No]").val())) ){
 			mcxDialog.alert('카테고리를 선택해 주세요.');
 			return;
 		}
@@ -455,7 +481,7 @@
 		if(val.split(',')[1]=='Y'){
 			cateNo = val.split(',')[0];
 		}else{
-			cateNo = $("#cate2No").val().split(',')[0];
+			cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
 		}
 		var dataArr = [];
 		var contentLocArr = [];
@@ -522,7 +548,80 @@
 		});
 	});
 
+	/**
+	 * 레이아웃 수정 버튼 > 팝업
+	 */
+	var fnChangeContents = function (obj){
+		var val = $("#searchForm select[name=cate1No]").val();
+		var cateNo = '';
+		if(val.split(',')[1]=='Y'){
+			cateNo = val.split(',')[0];
+		}else{
+			cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
+		}
+		var contentsLoc = $(obj).closest("td").find('input:hidden[name="contentsLoc"]').val();
+		console.log('fnChangeContents contentsLoc>>> '+contentsLoc);
+		cfnOpenMainContentsPopup(cateNo, contentsLoc);
+	}
+
+	/**
+	 * 개별 적용 버튼
+	 */
+	var fnUpdateContents = function (contentsLoc){
+		mcxDialog.confirm('컨텐츠를 적용 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var val = $("#searchForm select[name=cate1No]").val();
+				var cateNo = '';
+				if(val.split(',')[1]=='Y'){
+					cateNo = val.split(',')[0];
+				}else{
+					cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
+				}
+				var data = { contentsLocArr : [contentsLoc]
+					,cateNo : cateNo
+				};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/display/contents/save', jsonData);
+			}
+		});
+	}
+
+	/**
+	 * 일괄적용 버튼
+	 */
+	$("#btnAllUpd").on("click", function(){
+		mcxDialog.confirm('컨텐츠를 일괄적용 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var val = $("#searchForm select[name=cate1No]").val();
+				var cateNo = '';
+				if(val.split(',')[1]=='Y'){
+					cateNo = val.split(',')[0];
+				}else{
+					cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
+				}
+				var contentsLocArr = [];
+				$("input:hidden[name=contentsLoc]").each(function(){
+					contentsLocArr.push($(this).val());
+				});
+
+				var data = { contentsLocArr : contentsLocArr
+					,cateNo : cateNo
+				};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/display/contents/save', jsonData);
+			}
+		});
+	});
+
 	$(document).ready(function() {
+		var today = new Date(_today);
+		var yesterDay = new Date(today.getFullYear(), today.getMonth(), today.getDate()+1).format("YYYY-MM-DD");
+		$("#viewDate").val(yesterDay);
+		$("#viewTimeHour").val("09");
 		// Create a agGrid
 		$("#mainSortable").disableSelection();
 		//uifnFitGrid();

+ 378 - 157
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementDetailForm.html

@@ -36,9 +36,13 @@
 					<tbody>
 						<tr>
 							<th>메일번호</th>
-							<td>
+							<td class="left"  th:if="${mode  == 'N' }">
+								<input type="text" name="mailtSq" maxlength="20" placeholder="자동생성" readonly="readonly"/>
+							</td>
+							<td class="left"  th:if="${mode  == 'U' }">
 								<input type="text" name="mailtSq" maxlength="20" placeholder="자동생성" readonly="readonly"/>
 							</td>
+							
 						</tr>
 						<tr>
 							<th>메일구분</th>
@@ -51,8 +55,8 @@
 							<th>헤더</th>
 							<td>
 								<select name="mailHsq">
-									<option>선택하기 ▼</option>
-									<option th:if="${mailHsqList}" th:each="oneData, status : ${mailHsqList}" th:value="|${oneData.mailhfSq}|" th:text="|${oneData.mailhfNm}|" selected="selected"></option>
+									<option value="0">선택하기 ▼</option>
+									<option th:if="${mailHsqList}" th:each="oneData, status : ${mailHsqList}" th:value="|${oneData.mailhfSq}|" th:text="|${oneData.mailhfNm}|"></option>
 								</select>
 							</td>
 						</tr>
@@ -60,8 +64,8 @@
 							<th>푸터</th>
 							<td>
 								<select name="mailFsq">
-										<option>선택하기 ▼</option>
-										<option th:if="${mailFsqList}" th:each="oneData, status : ${mailFsqList}" th:value="|${oneData.mailhfSq}|" th:text="|${oneData.mailhfNm}|" selected="selected"></option>
+										<option value="0">선택하기 ▼</option>
+										<option th:if="${mailFsqList}" th:each="oneData, status : ${mailFsqList}" th:value="|${oneData.mailhfSq}|" th:text="|${oneData.mailhfNm}|"></option>
 								</select>
 							</td>
 						</tr>
@@ -100,13 +104,13 @@
 							<p>상품은 구분자 당 최대 40 개 까지만 등록하실 수 있습니다.</p>
 						</li>
 						<li class="right">
-							<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddGrid" onclick="btnAddGrid();">구분추가하기</button>
+							<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddGrid">구분추가하기</button>
 						</li>
 					</ul>
 						<!-- 구분 1 -->
 						<div class="inner-panelContent" id="btnAddGridNum" style="display:none;">
-							<input type="hidden" name="btnAddGridNumUseYn"  value ="Y">
-							<input type="hidden" name="mailtcSq">
+							<input type="hidden" name="mailtcSq" th:value="${mailtcSq}">
+							<input type="hidden" name="mailtSq" th:value="${mailtSq}">
 							<div class="panelContent">
 								<table class="frmStyle">
 									<colgroup>
@@ -115,7 +119,7 @@
 									</colgroup>
 									<tr>
 										<th>상품 구분 1<br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum();">구분 삭제</button>
+											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum('');">구분 삭제</button>
 										</th>
 										<td>
 											<div class="">
@@ -123,13 +127,13 @@
 													<tr>
 														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="mailtcNm"/>								
+															<input type="text" name="mailtcNm" maxlength="50"/>
 														</td>
 													</tr>
 													<tr>
 														<th>링크</th>
 														<td>
-															<input type="text" name="mailtcLink"/>								
+															<input type="text" name="mailtcLink"/>
 														</td>
 													</tr>
 													<tr>
@@ -170,7 +174,8 @@
 						
 						<!-- 구분2 -->
 						<div class="inner-panelContent" id="btnAddGridNum2" style="display:none;">
-							<input type="hidden" name="btnAddGridNum2UseYn" value="Y">
+							<input type="hidden" name="mailtSq" th:value="${mailtSq}">
+							<input type="hidden" name="mailtcSq2" th:value="${mailtcSq}">
 							<div class="panelContent">
 								<table class="frmStyle">
 									<colgroup>
@@ -187,7 +192,7 @@
 													<tr>
 														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="mailtcNm2"/>
+															<input type="text" name="mailtcNm2" maxlength="50"/>
 														</td>
 													</tr>
 													<tr>
@@ -227,7 +232,7 @@
 						
 						<!-- 구분3 -->
 						<div class="inner-panelContent" id="btnAddGridNum3" style="display:none;">
-							<input type="hidden" name="btnAddGridNum3UseYn" value="Y">
+							<input type="hidden" name="mailtcSq3" th:value="${mailtcSq}">
 							<div class="panelContent">
 								<table class="frmStyle">
 									<colgroup>
@@ -236,7 +241,7 @@
 									</colgroup>
 									<tr>
 										<th>상품 구분 3<br><br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum3('gridOptions_c3');">구분 삭제</button>
+											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum3();">구분 삭제</button>
 										</th>
 										<td>
 											<div class="">
@@ -244,7 +249,7 @@
 													<tr>
 														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="mailtcNm3"/>								
+															<input type="text" name="mailtcNm3" maxlength="50"/>								
 														</td>
 													</tr>
 													<tr>
@@ -284,7 +289,7 @@
 						
 						<!-- 구분4 -->
 						<div class="inner-panelContent" id="btnAddGridNum4" style="display:none;">
-							<input type="hidden" name="btnAddGridNum4UseYn" value="Y">
+							<input type="hidden" name="mailtcSq4" th:value="${mailtcSq}">
 							<div class="panelContent">
 								<table class="frmStyle">
 									<colgroup>
@@ -293,7 +298,7 @@
 									</colgroup>
 									<tr>
 										<th>상품 구분 4<br><br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum4('gridOptions_c4');">구분 삭제</button>
+											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum4();">구분 삭제</button>
 										</th>
 										<td>
 											<div class="">
@@ -301,7 +306,7 @@
 													<tr>
 														<th class="w100">번호</th>
 														<td>
-															<input type="text" name="mailtcNm4"/>								
+															<input type="text" name="mailtcNm4" maxlength="50"/>								
 														</td>
 													</tr>
 													<tr>
@@ -341,7 +346,7 @@
 						
 						<!-- 구분5 -->
 						<div class="inner-panelContent" id="btnAddGridNum5" style="display:none;">
-							<input type="hidden" name="btnAddGridNum5UseYn" value="Y">
+						<input type="hidden" name="mailtcSq5" th:value="${mailtcSq}">
 							<div class="panelContent">
 								<table class="frmStyle">
 									<colgroup>
@@ -350,7 +355,7 @@
 									</colgroup>
 									<tr>
 										<th>상품 구분 5<br><br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum5('gridOptions_c5');">구분 삭제</button>
+											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum5();">구분 삭제</button>
 										</th>
 										<td>
 											<div class="">
@@ -358,7 +363,7 @@
 													<tr>
 														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="mailtcNm5"/>								
+															<input type="text" name="mailtcNm5" maxlength="50"/>								
 														</td>
 													</tr>
 													<tr>
@@ -414,7 +419,7 @@
 		<!-- //버튼 배치 영역 -->
 				</form>
 		</div>
-	</div>//
+	</div>
 </div>
 
 <script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020102902"></script>
@@ -425,7 +430,7 @@
 		let mode = [[${mode}]]; 
 		let mktmailInfo = [[${mktmailInfo}]];
 		let mktmailTCInfo = [[${mktmailTCInfo}]];
-		let mktmailGoodsInfo = [[${mktmailGoodsInfo}]];
+		let goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
 		
 		//팝업창 삭제버튼
 		$('#btndeleteMktmail').on('click', function() {
@@ -438,17 +443,22 @@
 			});
 		});
 		
-		//상품 전시 그리드 그리기
+		//그리드 그리기
 		var columnDefs = [
 			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 			{headerName: "Product ID", field: "goodsCd" , width: 120, cellClass: 'text-center'},
 			{headerName: "브랜드명", field: "brandEnm" , width: 200, cellClass: 'text-center'},
-			{headerName: "상품명", field: "goodNms" , width: 200, cellClass: 'text-center'},
-			{headerName: "판매상태", field: "cdNm" , width: 100, cellClass: 'text-center'	},
+			{headerName: "상품명", field: "goodsNm" , width: 200, cellClass: 'text-center'},
+			{headerName: "판매상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
+				cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
+				valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
+				valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
+			},
 			{headerName: "정상가", field: "listPrice" , width: 120, cellClass: 'text-center'},
 			{headerName: "판매가", field: "listPrice" , width: 120, cellClass: 'text-center'},
 			{headerName: "순번", field: "dispOrd" , width: 120, cellClass: 'text-center'}
-		]
+		];
+		
 		
 		// Add on options
 		var gridOptions_c1 = gagaAgGrid.getGridOptions(columnDefs);
@@ -463,6 +473,13 @@
 		gridOptions_c3.defaultColDef.editable = true;
 		gridOptions_c4.defaultColDef.editable = true;
 		gridOptions_c5.defaultColDef.editable = true;
+		//중복선택
+		gridOptions_c1.rowSelection = 'multiple';
+		gridOptions_c2.rowSelection = 'multiple';
+		gridOptions_c3.rowSelection = 'multiple';
+		gridOptions_c4.rowSelection = 'multiple';
+		gridOptions_c5.rowSelection = 'multiple';
+		
 		gridOptions_c1.suppressRowClickSelection = true;
 		gridOptions_c2.suppressRowClickSelection = true;
 		gridOptions_c3.suppressRowClickSelection = true;
@@ -471,7 +488,7 @@
 		
 		///저장
 		$('#btnSaveMktMail').on('click', function() {
-		
+			
 			//타이틀 길이 제한 2자 이상 50자미만
 			var check = $('#mailManagementForm input[name=mailtNm]').val();
 
@@ -486,35 +503,74 @@
 			let arrayData4 = gagaAgGrid.getAllRowData(gridOptions_c4)
 			let arrayData5 = gagaAgGrid.getAllRowData(gridOptions_c5)
 			
-			let mailTc = {};
-	
-			mailTc.mailtcNm = $('#mailManagementForm input[name=mailtcNm]').val();
-			mailTc.mailtcLink = $('#mailManagementForm input[name=mailtcLink]').val();
-			mailTc.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr]:checked').val();
-			
- 			let mailTc2 = {};
-			
-			mailTc2.mailtcNm = $('#mailManagementForm input[name=mailtcNm2]').val();
-			mailTc2.mailtcLink = $('#mailManagementForm input[name=mailtcLink2]').val();
-			mailTc2.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr2]:checked').val();
+
+			//상품 등록 CHECK
+			if(arrayData.length == 0 && $('#btnAddGridNum').css('display') != 'none'){
+				mcxDialog.alert('구분자1의 상품을 등록해주세요.');
+				return false;
+			}
+			if(arrayData2.length == 0 && $('#btnAddGridNum2').css('display') != 'none'){
+				mcxDialog.alert('구분자2의 상품을 등록해주세요.');
+				return false;
+			}
+			if(arrayData3.length == 0 && $('#btnAddGridNum3').css('display') != 'none'){
+				mcxDialog.alert('구분자3의 상품을 등록해주세요.');
+				return false;
+			}
+			if(arrayData4.length == 0 && $('#btnAddGridNum4').css('display') != 'none'){
+				mcxDialog.alert('구분자4의 상품을 등록해주세요.');
+				return false;
+			}
+			if(arrayData5.length == 0 && $('#btnAddGridNum5').css('display') != 'none'){
+				mcxDialog.alert('구분자5의 상품을 등록해주세요.');
+				return false;
+			}
 			
+			let check1 = $('#mailManagementForm input[name=mailtcNm]').val();
+			let check2 = $('#mailManagementForm input[name=mailtcNm2]').val();
+			let check3 = $('#mailManagementForm input[name=mailtcNm3]').val();
+			let check4 = $('#mailManagementForm input[name=mailtcNm4]').val();
+			let check5 = $('#mailManagementForm input[name=mailtcNm5]').val();
+
+			let mailTc = {};
+			let mailTc2 = {};
 			let mailTc3 = {};
-			
-			mailTc3.mailtcNm = $('#mailManagementForm input[name=mailtcNm3]').val();
-			mailTc3.mailtcLink = $('#mailManagementForm input[name=mailtcLink3]').val();
-			mailTc3.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr3]:checked').val();
-			
 			let mailTc4 = {};
-			
-			mailTc4.mailtcNm = $('#mailManagementForm input[name=mailtcNm4]').val();
-			mailTc4.mailtcLink = $('#mailManagementForm input[name=mailtcLink4]').val();
-			mailTc4.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr4]:checked').val();
-			
 			let mailTc5 = {};
 			
-			mailTc5.mailtcNm = $('#mailManagementForm input[name=mailtcNm5]').val();
-			mailTc5.mailtcLink = $('#mailManagementForm input[name=mailtcLink5]').val();
-			mailTc5.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr5]:checked').val();
+			if(check1 != null && check1 != '') {
+				mailTc.mailtcNm = $('#mailManagementForm input[name=mailtcNm]').val();
+				mailTc.mailtcLink = $('#mailManagementForm input[name=mailtcLink]').val();
+				mailTc.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr]:checked').val();
+				mailTc.mailtSq = $('#mailManagementForm input[name=mailtSq]').val();
+				mailTc.mailtcSq = $('#mailManagementForm input[name=mailtcSq]').val();
+			} if(check2 != null && check2 != '') {
+				mailTc2.mailtcNm = $('#mailManagementForm input[name=mailtcNm2]').val();
+				mailTc2.mailtcLink = $('#mailManagementForm input[name=mailtcLink2]').val();
+				mailTc2.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr2]:checked').val();
+				mailTc2.mailtcSq = $('#mailManagementForm input[name=mailtcSq2]').val();
+
+			} if(check3 != null && check3 != '') {
+				mailTc3.mailtcNm = $('#mailManagementForm input[name=mailtcNm3]').val();
+				mailTc3.mailtcLink = $('#mailManagementForm input[name=mailtcLink3]').val();
+				mailTc3.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr3]:checked').val();
+				mailTc3.mailtcSq = $('#mailManagementForm input[name=mailtcSq3]').val();
+
+			} if(check4 != null && check4 != '') {
+				mailTc4.mailtcNm = $('#mailManagementForm input[name=mailtcNm4]').val();
+				mailTc4.mailtcLink = $('#mailManagementForm input[name=mailtcLink4]').val();
+				mailTc4.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr4]:checked').val();
+				mailTc4.mailtcSq = $('#mailManagementForm input[name=mailtcSq4]').val();
+
+				
+			} if(check5!= null && check5 != '') {
+				mailTc5.mailtcNm = $('#mailManagementForm input[name=mailtcNm5]').val();
+				mailTc5.mailtcLink = $('#mailManagementForm input[name=mailtcLink5]').val();
+				mailTc5.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr5]:checked').val();
+				mailTc5.mailtcSq = $('#mailManagementForm input[name=mailtcSq5]').val();
+
+			}
+		 	
 			
 			//헤더 선택체크 내용 체크
 			if(!gagajf.validation('#mailManagementForm'))
@@ -524,39 +580,35 @@
 				mcxDialog.alert('내용을 입력해 주세요.');
 				return false;
 			}
-			
-			if($('#btnAddGridNum').css('display') != 'none'){
-				if(gagajf.isNull($('#mailManagementForm input[name=mailtcNm]').val())){
-					mcxDialog.alert('구분자명을 입력해 주세요.');
-					return false;
-				}
-				var check = $('#mailManagementForm input[name=mailtcNm]').val();
-				
-				if(check.length < 2){
-					mcxDialog.alert('구분자명은 2자 이상 50자 미만으로 입력하세요.');
-					return false;
-				}
-				
-			}else if($('#btnAddGridNum2').css('display') != 'none'){
-				if(gagajf.isNull($('#mailManagementForm input[name=mailtcNm2]').val())){
-					mcxDialog.alert('구분자명을 입력해 주세요.');
-					return false;
-				}
-				var check = $('#mailManagementForm input[name=mailtcNm2]').val();
-				
-				if(check.length < 2){
-					mcxDialog.alert('구분자명은 2자 이상 50자 미만으로 입력하세요.');
-					return false;
-				}
-			}
 						
+			//구분자명 CHECK
+			if($('#btnAddGridNum').css('display') != 'none' && check1.length < 2){
+				mcxDialog.alert('구분자1명은 2자 이상 50자 미만으로 입력하세요.');
+				return false;
+			}
+			if($('#btnAddGridNum2').css('display') != 'none' && check2.length < 2){
+				mcxDialog.alert('구분자2명은 2자 이상 50자 미만으로 입력하세요.');
+				return false;
+			}
+			if($('#btnAddGridNum3').css('display') != 'none' && check3.length < 2){
+				mcxDialog.alert('구분자3명은 2자 이상 50자 미만으로 입력하세요.');
+				return false;
+			}
+			if($('#btnAddGridNum4').css('display') != 'none' && check4.length < 2){
+				mcxDialog.alert('구분자4명은 2자 이상 50자 미만으로 입력하세요.');
+				return false;
+			}
+			if($('#btnAddGridNum5').css('display') != 'none' && check5.length < 2){
+				mcxDialog.alert('구분자5명은 2자 이상 50자 미만으로 입력하세요.');
+				return false;
+			}
+			
+			
 			mcxDialog.confirm("내용을 등록 하시겠습니까?", {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function() {
-					
-					let data = {
-					};
+					let data = {};
 					
 					data.mktmailManagementTc = mailTc;
 					data.mktmailManagementTc2 = mailTc2;
@@ -570,6 +622,11 @@
 					data.mktmailManagementGoods4 = arrayData4;
 					data.mktmailManagementGoods5 = arrayData5;
 					
+					//업데이트 일 경우 처리
+					if($('#mailManagementForm input[name=mailtSq]').val() != null && $('#mailManagementForm input[name=mailtSq]').val() != ''){
+						data.mailtSq = mktmailInfo.mailtSq;
+					}
+					
 					data.mktHeader = $('#mailManagementForm select[name=mailHsq]').val();
 					data.mktFooter = $('#mailManagementForm select[name=mailFsq]').val();
 					data.mailtNm = $('#mailManagementForm input[name=mailtNm]').val();
@@ -577,10 +634,10 @@
 					data.mailContent = $('#mailManagementForm textarea[name=mailContent]').val();
 					
 					let jsonData = JSON.stringify(data);
-					console.log(jsonData);
 					
 					gagajf.ajaxJsonSubmit($('#mailManagementForm').prop('action'), jsonData, function(data){
 						uifnPopupClose('popupMktMail');
+						$('#btnSearch').trigger('click');
 					});
 				
 				}
@@ -627,7 +684,6 @@
 				AddgridRow = gridOptions_c5;
 				break;
 			}
-			
 			cfnOpenGoodsPopup('fnFetchGoods');
 		}
 
@@ -635,7 +691,6 @@
 		var fnFetchGoods = function(goodsData) {
 			
 			if (goodsData.length < 1) return;
-			
 			// 기존상품
 			var oldGoodsSetList = gagaAgGrid.getAllRowData(AddgridRow);
 			var index = oldGoodsSetList.length+1;
@@ -667,8 +722,8 @@
 						var data = {
 							   goodsCd : item.goodsCd
 						   ,  brandEnm : item.brandEnm
-						   ,   goodNms : item.goodsNm
-						   ,      cdNm : item.goodsStat
+						   ,   goodsNm : item.goodsNm
+						   , goodsStat : item.goodsStat
 						   , listPrice : item.listPrice
 						   , currPrice : item.currPrice
 						   ,   dispOrd : index
@@ -704,119 +759,285 @@
 			}
 			
 			var selectedData = gagaAgGrid.selectedRowData(AddgridRow);
-		
+			var removedData = gagaAgGrid.removeRowData(AddgridRow);
+			
 			if (selectedData.length == 0) {
 				mcxDialog.alert('선택된 행이 없습니다.');
 				return false;
-			}		
-			//화면에서 삭제
-			gagaAgGrid.removeRowData(AddgridRow, false);
+			}
+			
+			//상세보기에서 삭제처리
+			if(mode == 'U') {
+				mcxDialog.confirm('해당 상품을 삭제하시겠습니까?', {
+					cancelBtnText: "취소",
+					sureBtnText: "확인",
+					sureBtnClick: function(){
+						
+						//화면에서 삭제
+						gagaAgGrid.removeRowData(AddgridRow, false);
+						var deleteData = [];
+						$.each(removedData, function(idx, item) {
+							deleteData.push(item);
+						})
+						
+						var jsonData = JSON.stringify(deleteData);
+						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
+					}
+				});
+			}
 		}
-		
-		
-		// 상품 구분 삭제 버튼  삭제는 해당 하는 폼이 삭제
+
+		// 상품 구분 폼 삭제
 		function btnDeleteGridNum(param){
 			if($('#btnAddGridNum').css('display') !='none'){
+				//구분자 DB 삭제
+				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm]').val() != null && $('#mailManagementForm input[name=mailtcNm]').val() != ''){
+					var deleteData = [];
+					var corner = {};
+						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq]').val();
+						corner.useYn = 'N';
+						deleteData.push(corner);
+					var jsonData = JSON.stringify(deleteData);
+					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
+				}
+				//상품전시 삭제
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c1);
+				if(mode == "U" && selectedData.length != 0){
+						//상세보기에서 삭제처리
+						var deleteData = [];
+						$.each(selectedData, function(idx, item) {
+							deleteData.push(item);
+						})
+						var jsonData = JSON.stringify(deleteData);
+						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
+				}
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c1);
+				selectedData.forEach(function(item, index) {
+					gridOptions_c1.api.updateRowData({remove: [item]});
+				});
+				$('#mailManagementForm input[name=mailtcNm]').val('');
+				$('#mailManagementForm input[name=mailtcLink]').val('');
+				$('#mailManagementForm input:radio[name="goodsCpr"]:radio[value="3"]').prop('checked', true);
 				$('#btnAddGridNum').hide();
-				$('#btnAddGridNum')[0].reset();
 			}
-		}		
+		}
+
 		function btnDeleteGridNum2(param){
 			if($('#btnAddGridNum2').css('display') !='none'){
+				//구분자 DB 삭제
+				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm2]').val() != null && $('#mailManagementForm input[name=mailtcNm2]').val() != ''){
+					var deleteData = [];
+					var corner = {};
+						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq2]').val();
+						corner.useYn = 'N';
+						deleteData.push(corner);
+					var jsonData = JSON.stringify(deleteData);
+					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
+				}
+				//상품전시 삭제
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c2);
+				if(mode == "U" && selectedData.length != 0){
+						//상세보기에서 삭제처리
+						var deleteData = [];
+						$.each(selectedData, function(idx, item) {
+							deleteData.push(item);
+						})
+						var jsonData = JSON.stringify(deleteData);
+						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
+				}
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c2);
+				selectedData.forEach(function(item, index) {
+					gridOptions_c1.api.updateRowData({remove: [item]});
+				});
+				$('#mailManagementForm input[name=mailtcNm2]').val('');
+				$('#mailManagementForm input[name=mailtcLink2]').val('');
+				$('#mailManagementForm input:radio[name="goodsCpr2"]:radio[value="3"]').prop('checked', true);
 				$('#btnAddGridNum2').hide();
-				$('#searchForm2')[0].reset();
-			}			
-		}			
+			}
+		}
+		
 		function btnDeleteGridNum3(param){
-			if ($('#btnAddGridNum3').css('display') !='none'){
+			if($('#btnAddGridNum3').css('display') !='none'){
+				//구분자 DB 삭제
+				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm3]').val() != null && $('#mailManagementForm input[name=mailtcNm3]').val() != ''){
+					var deleteData = [];
+					var corner = {};
+						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq3]').val();
+						corner.useYn = 'N';
+						deleteData.push(corner);
+					var jsonData = JSON.stringify(deleteData);
+					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
+				}
+				//상품전시 삭제
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c3);
+				if(mode == "U" && selectedData.length != 0){
+						//상세보기에서 삭제처리
+						var deleteData = [];
+						$.each(selectedData, function(idx, item) {
+							deleteData.push(item);
+						})
+						var jsonData = JSON.stringify(deleteData);
+						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
+				}
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c3);
+				selectedData.forEach(function(item, index) {
+					gridOptions_c1.api.updateRowData({remove: [item]});
+				});
+				$('#mailManagementForm input[name=mailtcNm3]').val('');
+				$('#mailManagementForm input[name=mailtcLink3]').val('');
+				$('#mailManagementForm input:radio[name="goodsCpr3"]:radio[value="3"]').prop('checked', true);
 				$('#btnAddGridNum3').hide();
-				$('#searchForm3')[0].reset();
-			}			
+			}
 		}		
+		
 		function btnDeleteGridNum4(param){
 			if ($('#btnAddGridNum4').css('display') !='none'){
+				
+				//구분자 DB 삭제
+				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm4]').val() != null && $('#mailManagementForm input[name=mailtcNm4]').val() != ''){
+					var deleteData = [];
+					var corner = {};
+						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq4]').val();
+						corner.useYn = 'N';
+						deleteData.push(corner);
+					var jsonData = JSON.stringify(deleteData);
+					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
+				}
+				//상품전시 삭제
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c4);
+				if(mode == "U" && selectedData.length != 0){
+						//상세보기에서 삭제처리
+						var deleteData = [];
+						$.each(selectedData, function(idx, item) {
+							deleteData.push(item);
+						})
+						var jsonData = JSON.stringify(deleteData);
+						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
+				}
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c4);
+				selectedData.forEach(function(item, index) {
+					gridOptions_c1.api.updateRowData({remove: [item]});
+				});
+				$('#mailManagementForm input[name=mailtcNm4]').val('');
+				$('#mailManagementForm input[name=mailtcLink4]').val('');
+				$('#mailManagementForm input:radio[name="goodsCpr4"]:radio[value="3"]').prop('checked', true);
 				$('#btnAddGridNum4').hide();
-				$('#searchForm3')[0].reset();
-			}			
+			}
 		}
 		function btnDeleteGridNum5(param){
 			if ($('#btnAddGridNum5').css('display') !='none'){
+				
+				//구분자 DB 삭제
+				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm5]').val() != null && $('#mailManagementForm input[name=mailtcNm5]').val() != ''){
+					var deleteData = [];
+					var corner = {};
+						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq5]').val();
+						corner.useYn = 'N';
+						deleteData.push(corner);
+					var jsonData = JSON.stringify(deleteData);
+					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
+				}
+				//상품전시 삭제
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c5);
+				if(mode == "U" && selectedData.length != 0){
+						//상세보기에서 삭제처리
+						var deleteData = [];
+						$.each(selectedData, function(idx, item) {
+							deleteData.push(item);
+						})
+						var jsonData = JSON.stringify(deleteData);
+						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
+				}
+				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c5);
+				selectedData.forEach(function(item, index) {
+					gridOptions_c1.api.updateRowData({remove: [item]});
+				});	
+				$('#mailManagementForm input[name=mailtcNm5]').val('');
+				$('#mailManagementForm input[name=mailtcLink5]').val('');
+				$('#mailManagementForm input:radio[name="goodsCpr5"]:radio[value="3"]').prop('checked', true);
 				$('#btnAddGridNum5').hide();
-				$('#searchForm5')[0].reset();
 			}
 		} 
 
 	$(document).ready(function() {
+		gagaAgGrid.createGrid("gridSectionGbList1", gridOptions_c1);
+		gagaAgGrid.createGrid("gridSectionGbList2", gridOptions_c2);
+		gagaAgGrid.createGrid("gridSectionGbList3", gridOptions_c3);
+		gagaAgGrid.createGrid("gridSectionGbList4", gridOptions_c4);
+		gagaAgGrid.createGrid("gridSectionGbList5", gridOptions_c5);
 		
 		if (mode == 'U') {
 			
+			$('#mailManagementForm input[name=mailtSq]').val(mktmailInfo.mailtSq);
+			$('#mailManagementForm select[name=mailHsq]').val(mktmailInfo.mailHsq);
+			$('#mailManagementForm select[name=mailFsq]').val(mktmailInfo.mailFsq);
 			$('#mailManagementForm input[name=mailtNm]').val(mktmailInfo.mailtNm);
 			$('#mailManagementForm textarea[name=mailContent]').val(mktmailInfo.mailContent);
-
+			
 			if(mktmailInfo.mailtGb == "A"){
 				$('#mailManagementForm input:radio[name="mailtGb"]:radio[value="A"]').prop('checked', true);
 			}
 			
-//   		alert(mktmailTCInfo.length);
-//   		alert(mktmailGoodsInfo.length);
-//   	   	alert(mktmailGoodsInfo[1]);
-
-	   		
-			if(mktmailTCInfo != null && mktmailTCInfo.length > 0){				
-				//구분자1
-				if($('#mailManagementForm input[name=mailtcNm]')){
-					$('#mailManagementForm input[name=mailtcNm]').val(mktmailTCInfo[0].mailtcNm);
-					$('#mailManagementForm input[name=mailtcLink]').val(mktmailTCInfo[0].mailtcLink);
-					
-
+			$.each(mktmailTCInfo, function(idx, item) {
+				
+				if (idx == 0) {
+					$('#mailManagementForm input[name=mailtcNm]').val(item.tc.mailtcNm);						
+					$('#mailManagementForm input[name=mailtcSq]').val(item.tc.mailtcSq);
+					$('#mailManagementForm input[name=mailtcLink]').val(item.tc.mailtcLink);
+					if(mktmailTCInfo[idx].tc.goodsCpr == 1){
+						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="1"]').prop('checked', true);
+					}else if(mktmailTCInfo[idx].tc.goodsCpr == 2){
+						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="2"]').prop('checked', true);
+					}else if(mktmailTCInfo[idx].tc.goodsCpr == 3){
+						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="3"]').prop('checked', true);
+					}else if(mktmailTCInfo[idx].tc.goodsCpr == 4){
+						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="4"]').prop('checked', true);
+					}else if(mktmailTCInfo[idx].tc.goodsCpr == 5){
+						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="5"]').prop('checked', true);
+					}
 					$('#btnAddGridNum').show();
-
-					//구분자2
-					if(mktmailTCInfo.length >= 2){
-						$('#mailManagementForm input[name=mailtcNm2]').val(mktmailTCInfo[1].mailtcNm);
-						$('#mailManagementForm input[name=mailtcLink2]').val(mktmailTCInfo[1].mailtcLink);
-						$('#btnAddGridNum2').show();
-						//구분자3
-						if(mktmailTCInfo.length >= 3){
-							$('#mailManagementForm input[name=mailtcNm3]').val(mktmailTCInfo[2].mailtcNm);
-							$('#mailManagementForm input[name=mailtcLink3]').val(mktmailTCInfo[2].mailtcLink);
-							$('#btnAddGridNum3').show();
-							//구분자4
-							if(mktmailTCInfo.length >= 4){
-								$('#mailManagementForm input[name=mailtcNm4]').val(mktmailTCInfo[3].mailtcNm);
-								$('#mailManagementForm input[name=mailtcLink4]').val(mktmailTCInfo[3].mailtcLink);
-								$('#btnAddGridNum4').show();
-								//구분자5
-								if(mktmailTCInfo.length == 5){
-									$('#mailManagementForm input[name=mailtcNm5]').val(mktmailTCInfo[4].mailtcNm);
-									$('#mailManagementForm input[name=mailtcLink5]').val(mktmailTCInfo[4].mailtcLink);
-									$('#btnAddGridNum5').show();
-								}
-							}
+				} else {
+					$('#mailManagementForm input[name=mailtcNm' + (idx + 1) + ']').val(item.tc.mailtcNm);
+					$('#mailManagementForm input[name=mailtcLink' + (idx + 1) + ']').val(item.tc.mailtcLink);
+					$('#mailManagementForm input[name=mailtcSq' + (idx + 1) + ']').val(item.tc.mailtcSq);
+						if(mktmailTCInfo[idx].tc.goodsCpr == 1){
+							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="1"]').prop('checked', true);
+						}else if(mktmailTCInfo[idx].tc.goodsCpr == 2){
+							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="2"]').prop('checked', true);
+						}else if(mktmailTCInfo[idx].tc.goodsCpr == 3){
+							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="3"]').prop('checked', true);
+						}else if(mktmailTCInfo[idx].tc.goodsCpr == 4){
+							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="4"]').prop('checked', true);
+						}else if(mktmailTCInfo[idx].tc.goodsCpr == 5){
+							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="5"]').prop('checked', true);
 						}
-					}
+					$('#btnAddGridNum' + (idx + 1)).show();
 				}
-			}
-			
+				
+				switch(idx) {
+				case 0:
+					gridOptions_c1.api.setRowData(item.goodsList);
+					break;
+				case 1:
+					gridOptions_c2.api.setRowData(item.goodsList);
+					break;
+				case 2:
+					gridOptions_c3.api.setRowData(item.goodsList);
+					break;
+				case 3:
+					gridOptions_c4.api.setRowData(item.goodsList);
+					break;
+				case 4:
+					gridOptions_c5.api.setRowData(item.goodsList);
+					break;
+				}
+			});
 			
 		}//end of mode
-		
-		gagaAgGrid.createGrid("gridSectionGbList1", gridOptions_c1);
-		gagaAgGrid.createGrid("gridSectionGbList2", gridOptions_c2);
-		gagaAgGrid.createGrid("gridSectionGbList3", gridOptions_c3);
-		gagaAgGrid.createGrid("gridSectionGbList4", gridOptions_c4);
-		gagaAgGrid.createGrid("gridSectionGbList5", gridOptions_c5);
 
 		// Create a summernote
 		let snOptions = gagaSn.getToolbarOptions();
-		
-
-		gridOptions_c1.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c2.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c3.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c4.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c5.api.setRowData(mktmailGoodsInfo);
-		
+				
 		gagaSn.createSummernote(snOptions, '#mailContent');
 
 	});

+ 38 - 10
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementForm.html

@@ -23,6 +23,7 @@
 		<div class="infoBox menu-desc"></div>
 
 		<form id="searchForm" name="searchForm" action="#" th:action="@{'/marketing/mktmailManagement/list'}"  onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<input type="hidden" name="mailtcSq" th:value="${mailtcSq}">
 			<!-- 검색조건 영역 -->
 			<div class="panelStyle" >
 				<!-- //TITLE -->
@@ -91,7 +92,11 @@
 			}
 		},
 		{	//미리보기 
-			headerName: "미리보기", width: 150, cellClass: 'text-center'
+			headerName: "", field:"preview" , width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return '<button="javascript:void(0);" class="btn btn-info btn-sm">'+ '미리보기' +'</button>'
+			}
+		
 		},
 		{headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
 		{
@@ -115,19 +120,17 @@
 	// Get GridOptions
 	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
 	
-	//검색 조건 확인
-	//TODO
-	
-	
 	// 다중 선택 추가
 	gridOptions.rowSelection = 'multiple';	
 	
 	//셀 클릭 이벤트 -> 팝업창
 	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'mailtNm')
-			return;
-		
-		fnOpenMailHFPopup('U', event.data.mailtSq);
+		if (event.colDef.field == 'mailtNm'){
+			fnOpenMailHFPopup('U', event.data.mailtSq);
+		}else if(event.colDef.field == 'preview'){
+			fnOpenMailPreviewPopup(event.data.mailtSq);
+		}
+			
 	}
 	
 	// grid row Delete
@@ -151,7 +154,6 @@
 					updatedData.push(item);
 				});
 				
-				
 				var jsonData = JSON.stringify(updatedData);
 				gagajf.ajaxJsonSubmit('/marketing/mktmailManagement/delete', jsonData, function() {
 					$('#btnSearch').trigger('click');
@@ -162,18 +164,44 @@
 	
 	// 조회버튼 - 검색
 	$('#btnSearch').on('click', function() {
+		if(!dateCheck()) return;
 		var formId = "#searchForm";
 		gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
 	});
 	
+	// 조회검색 조건 CHECK
+		var dateCheck = function(){
+		var fromDate = $('#mktmailStdt').val();
+		var toDate = $('#mktmailEddt').val();
+
+			if (gagajf.isNull(fromDate)) {
+				mcxDialog.alert('시작 기간을 입력하세요.');
+				return;
+			}
+			if (gagajf.isNull(toDate)) {
+				mcxDialog.alert('종료 기간을 입력하세요.');
+				return;
+			}
+			return true;
+	}
 	
 	// 등록/상세 팝업
 	var fnOpenMailHFPopup = function(mode, mailtSq) {
+		let data = gridOptions.api.getSelectedRows();
 		var actionUrl = '/marketing/mktmailmanagement/detail/form' + '?mode=' + mode;
 		if (!gagajf.isNull(mailtSq)) actionUrl += '&mailtSq=' + mailtSq;
 		cfnOpenModalPopup(actionUrl, 'popupMktMail');
 	}
 	
+	//미리보기
+	var fnOpenMailPreviewPopup = function(mailtSq) {
+		let data = gridOptions.api.getSelectedRows();
+		var actionUrl = '/marketing/mktmailmanagement/preview';
+		if (!gagajf.isNull(mailtSq)) actionUrl += '?mailtSq=' + mailtSq;
+		cfnOpenModalPopup(actionUrl, 'popupMktMailPreview');
+	}
+	
+	
 	$(document).ready(function() {
 	
 		cfnCreateCalendar('#sellTerms', 'mktmailStdt', 'mktmailEddt', true);

+ 64 - 0
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementPreviewForm.html

@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MktmailmanagementPreviewForm.html
+ * @desc    : MktmailmanagementPreviewForm MKT메일 미리보기 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021. 02. 19   csh9191     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1200" id="popupMktMailPreview">
+	<div class="panelStyle" style="height:700px;width:800px; overflow-y:scroll; max-height:700px;">
+		<!-- 팝업창 타이틀 -->
+		<div class="panelTitle">
+			<strong>메일 미리보기</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupMktMailPreview');"><em class="fa fa-times"></em></button>
+		</div>
+			<!-- Header  -->
+ 			<div th:if="${mktmailPreviewHeader}">
+					<p th:text="${mktmailPreviewHeader.mailhfContent}"></p>
+			</div>
+			
+			<!-- content -->
+			<div th:if="${mktmailPreviewContent}">
+			 	<p th:text="${mktmailPreviewContent.mailtNm}"></p> 
+ 				<p th:text="${mktmailPreviewContent.mailContent}"></p> 
+			</div>
+			
+			<!-- Footer -->
+			 <div th:if="${mktmailPreviewFooter}">
+					<p th:text="${mktmailPreviewFooter.mailhfContent}"></p>
+			</div>
+	</div>
+</div>
+<script th:inline="javascript">
+	let mktmailPreviewHeader = [[${mktmailPreviewHeader}]];
+	let mktmailPreviewContent = [[${mktmailPreviewContent}]];
+	let mktmailPreviewFooter = [[${mktmailPreviewFooter}]];
+	let mktmailPreviewGoods = [[${mktmailPreviewGoods}]];
+	
+	console.log(mktmailPreviewContent);
+	console.log(mktmailPreviewGoods);
+	
+	$(document).ready(function() {
+		
+		$.each(mktmailPreviewGoods, function(idx, item) {
+			if (idx == 0) {
+				$('#mailtcNm').text(item.tc.mailtcNm);						
+				$('#mailtcLink').text(item.tc.mailtcLink);
+			}else {
+				$('#mailtcNm'+ idx).text(item.tc.mailtcNm);
+				$('#mailtcLink' + idx).text(item.tc.mailtcLink);
+			} 
+		});
+	});
+</script>
+
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/marketing/PlanCornerCopyForm.html

@@ -207,7 +207,7 @@
 						fnCornerSearch();
 					} else {
 						fnSearch();						
-						uifnPopupClose('popupEventWebDetail');
+						uifnPopupClose('popupEventDetail');
 					}
 					uifnPopupClose('popupCornerCopy')
 				});

+ 3 - 6
src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html

@@ -206,12 +206,9 @@
 			mcxDialog.alert('추가 된 코너를 저장 후 코너를 추가하세요.');
 			return;
 		} else {
-			var actionUrl = '/marketing/planning/corner/plandtlsq?planSq=' + planSq;
-			$.get(actionUrl
-						, function(planDtlSq) {
-								var data = { planDtlSq: planDtlSq, planSq:planSq, cornerNm:'',cornerDispType: 4 + '컷', startSearchDate: _today, startSearchTime: stdt[1], endSearchDate: eddt[0], endSearchTime: eddt[1]};
-								gagaAgGrid.addRowData(gridOptionsCorner, data, "planDtlSq");
-					});
+	
+			var data = { planDtlSq: '', planSq:planSq, cornerNm:'',cornerDispType: 6 + '컷', startSearchDate: _today, startSearchTime: stdt[1], endSearchDate: eddt[0], endSearchTime: eddt[1]};
+			gagaAgGrid.addRowData(gridOptionsCorner, data);
 		}
 
 	});

+ 97 - 82
src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html → src/main/webapp/WEB-INF/views/marketing/PlanDetailPopupForm.html

@@ -3,7 +3,7 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : PlanWebDetailForm.html
+ * @source  : PlanDetailForm.html
  * @desc    : 웹 수정 / 웹 등록 팝업 화면 Page
  *============================================================================
  * SISUN
@@ -14,16 +14,16 @@
  * 1.0  2020.02.04   sowon   최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="1100" id="planWebRegisterFormDiv">
+<div class="modalPopup" data-width="1100" id="planRegisterFormDiv">
 	<div class="panelStyle">
 		<div class="panelTitle">
-			<h2 th:text="${'기획전 ' + (mode == 'N' ? '등록' : '수정')}">기획전 웹 수정</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupPlanWebDetail')"><i class="fa fa-times"></i></button>
+			<h2 th:text="${'기획전 ' + (mode == 'N' ? '등록' : '수정')}"></h2>
+			<button type="button" class="close" onclick="uifnPopupClose('planRegisterFormDiv')"><i class="fa fa-times"></i></button>
 		</div>
 		
 	<!-- 기획전 웹 수정 -->
 		<div class="panelContent" th:if="${mode == 'U'}">
-		<form th:object="${planInfo}" id="planWebUpdateForm" name="planWebUpdateForm" action="#" th:action="@{'/system/user/save'}" th:method="post">
+		<form th:object="${planInfo}" id="planUpdateForm" name="planUpdateForm" action="#" th:method="post">
 			<input type="hidden" name="mode" th:value="${mode}"/>
 			<input type="hidden" name="planSq" th:value="*{planSq}"/>
 
@@ -271,7 +271,7 @@
 			<div style='margin: 13px;'>
 			<ul class="panelBar">
 				<li class="right" th:if="${mode == 'U'}">
-					<button type="button" class="btn btn-success btn-lg" onclick="fnPlanSave('#planWebUpdateForm');">저장</button>
+					<button type="button" class="btn btn-success btn-lg" onclick="fnPlanSave('#planUpdateForm');">저장</button>
 				</li>
 			</ul>
 			</div>
@@ -281,22 +281,25 @@
 	
 		<!-- 기획전 웹 등록 -->
 		<div class="panelContent" th:if="${mode == 'N'}">
-			<form id="planWebRegisterForm" name="planWebRegisterForm" action="#" th:action="@{'/system/user/save'}" th:method="post">
+			<form id="planRegisterForm" name="planRegisterForm" action="#" th:action="@{'/system/user/save'}" th:method="post">
 			<input type="hidden" name="mode" th:value="${mode}"/>
 			<div>
 				<table class="frmStyle">
 					<colgroup>
-						<col style="width: 150px;"/>
+						<col style="width:13%;"/>
 						<col/>
 					</colgroup>
 					<tr>
 						<th>기존 기획전</th>
 						<td>
-							<select name="planSq" id="planSq">
+							<!-- <select name="planSq" id="planSq">
 								<option value="">선택</option>
 								<option th:if="${planList}" th:each="oneData, status : ${planList}" th:value="${oneData.planSq}" th:text="|[${oneData.planSq}]  ${oneData.planNm}|"></option>
-							</select>
-							<button type="button" class="btn btn-default btn-lg" onclick="fnPlanCopyPopup();">기획전 복사</button>
+							</select> -->
+							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" readonly="readonly"/>
+							<input type="hidden" class="w100" name="planSq_Hideen" id="planSq_Hideen" maxlength="20"/>
+							<button type="button" class="btn icn" id="btnPopupSearchPlan"><i class="fa fa-search"></i></button>
+							<button type="button" class="btn btn-primary btn-lg" onclick="fnPlanCopyPopup();">기획전 복사</button>
 						</td>
 					</tr>
 				</table>
@@ -534,7 +537,7 @@
 				</div>
 				<ul class="panelBar">
 					<li class="right" th:if="${mode == 'N'}">
-						<button type="button" class="btn btn-info btn-lg" onclick="fnPlanSave('#planWebRegisterForm');">저장</button>
+						<button type="button" class="btn btn-info btn-lg" onclick="fnPlanSave('#planRegisterForm');">저장</button>
 					</li>
 				</ul>
 			</form>
@@ -580,14 +583,25 @@
 	
 	//템플릿 유형 설정
 	var fnPlanTemplatePopup = function () {
-		var actionUrl = "/marketing/planning/webdetail/template/form?mode=C";
+		var actionUrl = "/marketing/planning/detail/template/form?mode=C";
 		cfnOpenModalPopup(actionUrl,'popupPlanTemplate');
 	}
 	
+	// 기존 기획전 조회 선택시
+	$('#btnPopupSearchPlan').on('click', function(result) {
+		cfnOpenPlanPopup('popupPlan');
+		
+	});
+	
+	var popupPlan = function (result) {
+		$("#planSq_Hideen").val(result[0].planSq);
+		$("#searchTxt").val("[" + result[0].planSq + "] " +result[0].planNm);
+		
+	}
 
 	// 기획전 복사
 	var fnPlanCopyPopup = function() {
-		var planSq = $('#planWebRegisterForm select[name=planSq]').val();
+		var planSq = $("#planSq_Hideen").val(); 
 
 		if (gagajf.isNull(planSq)) {
 			mcxDialog.alert('복사할 기획전을 선택하세요.');
@@ -609,11 +623,11 @@
 
 	// 기획전 복사 callback
 	var fnCopyCallback = function(result) {
-		uifnPopupClose('planWebRegisterFormDiv');
+		uifnPopupClose('planRegisterFormDiv');
 		fnPlanListSearch();
 
-		var actionUrl = "/marketing/planning/webdetail/form?mode=U&planSq=" + result.planSq;
-		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
+		var actionUrl = "/marketing/planning/detail/form?mode=U&planSq=" + result.planSq;
+		cfnOpenModalPopup(actionUrl,'popupPlan');
 	}
 
 	var fnPlanSave = function(formId) {
@@ -711,7 +725,7 @@
 			return;
 		}
 
-		//var jsonData = JSON.stringify($("#planWebRegisterForm").serializeObject());
+		//var jsonData = JSON.stringify($("#planRegisterForm").serializeObject());
 		
 		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
 		var multiBrand = [];
@@ -726,7 +740,7 @@
 		});
 		
 		// 기획전 등록
-		if (formId == '#planWebRegisterForm') {
+		if (formId == '#planRegisterForm') {
 			mcxDialog.confirm('등록 하시겠습니까?', {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
@@ -737,37 +751,37 @@
 							,brandList : allBrandData
 							,multiCate : multiCate
 							,CateList : allCateData
-						    ,mode : $('#planWebRegisterForm input[name=mode]').val()
-						    ,planSq : $('#planWebRegisterForm input[name=planSq]').val()
-							,planGb	: $('#planWebRegisterForm select[name=planGb]').val()
-							,templateType :	$('#planWebRegisterForm select[name=templateType]').val()
-							,frontGb : $('#planWebRegisterForm select[name=frontGb]').val()
-							,planNm : $('#planWebRegisterForm input[name=planNm]').val()
-							,startSearchDate : $('#planWebRegisterForm input[name=startSearchDate]').val()
-							,startSearchHour : $('#planWebRegisterForm input[name=startSearchHour]').val()
-							,startSearchMin : $('#planWebRegisterForm input[name=startSearchMin]').val()
-							,endSearchDate : $('#planWebRegisterForm input[name=endSearchDate]').val()
-							,endSearchHour : $('#planWebRegisterForm input[name=endSearchHour]').val()
-							,endSearchMin : $('#planWebRegisterForm input[name=endSearchMin]').val()
-							,dispStdt : $('#planWebRegisterForm input[name=dispStdt]').val()
-							,dispEddt : $('#planWebRegisterForm input[name=dispEddt]').val()
-							,dtlTitle1 : $('#planWebRegisterForm input[name=dtlTitle1]').val()
-							,cornerNmDispYn :  $('#planWebRegisterForm select[name=cornerNmDispYn]').val()
-							,openYn :  $('#planWebRegisterForm select[name=openYn]').val()
-							,siteCd :$('#planWebRegisterForm select[name=siteCd]').val()
-							,dispOrd : $('#planWebRegisterForm input[name=dispOrd]').val()
-							,replyYn : $('#planWebRegisterForm select[name=replyYn]').val()
-							,mainPimg :$('#planWebRegisterForm input[name=mainPimg]').val()
-							,mainMimg : $('#planWebRegisterForm input[name=mainMimg]').val()
-							,fsrcPc :  $('#planWebRegisterForm input[name=fsrcPc]').val()
-							,fsrcMobile : $('#planWebRegisterForm input[name=fsrcMobile]').val()
+						    ,mode : $('#planRegisterForm input[name=mode]').val()
+						    ,planSq : $('#planRegisterForm input[name=planSq]').val()
+							,planGb	: $('#planRegisterForm select[name=planGb]').val()
+							,templateType :	$('#planRegisterForm select[name=templateType]').val()
+							,frontGb : $('#planRegisterForm select[name=frontGb]').val()
+							,planNm : $('#planRegisterForm input[name=planNm]').val()
+							,startSearchDate : $('#planRegisterForm input[name=startSearchDate]').val()
+							,startSearchHour : $('#planRegisterForm input[name=startSearchHour]').val()
+							,startSearchMin : $('#planRegisterForm input[name=startSearchMin]').val()
+							,endSearchDate : $('#planRegisterForm input[name=endSearchDate]').val()
+							,endSearchHour : $('#planRegisterForm input[name=endSearchHour]').val()
+							,endSearchMin : $('#planRegisterForm input[name=endSearchMin]').val()
+							,dispStdt : $('#planRegisterForm input[name=dispStdt]').val()
+							,dispEddt : $('#planRegisterForm input[name=dispEddt]').val()
+							,dtlTitle1 : $('#planRegisterForm input[name=dtlTitle1]').val()
+							,cornerNmDispYn :  $('#planRegisterForm select[name=cornerNmDispYn]').val()
+							,openYn :  $('#planRegisterForm select[name=openYn]').val()
+							,siteCd :$('#planRegisterForm select[name=siteCd]').val()
+							,dispOrd : $('#planRegisterForm input[name=dispOrd]').val()
+							,replyYn : $('#planRegisterForm select[name=replyYn]').val()
+							,mainPimg :$('#planRegisterForm input[name=mainPimg]').val()
+							,mainMimg : $('#planRegisterForm input[name=mainMimg]').val()
+							,fsrcPc :  $('#planRegisterForm input[name=fsrcPc]').val()
+							,fsrcMobile : $('#planRegisterForm input[name=fsrcMobile]').val()
 						}	
 					
 					var jsonData =  JSON.stringify(data);
-					gagajf.ajaxJsonSubmit("/marketing/planning/webdetail/create", jsonData, fnPlanWebDetailCallBack); 
-					uifnPopupClose('planWebRegisterFormDiv');
+					gagajf.ajaxJsonSubmit("/marketing/planning/detail/create", jsonData, fnPlanDetailCallBack); 
+					uifnPopupClose('planRegisterFormDiv');
 					fnPlanListSearch();
-					//fnPlanWebDetailClose();
+					//fnPlanDetailClose();
 				}
 			});
 		} else { // 기획전 수정
@@ -781,39 +795,39 @@
 							,brandList : allBrandData
 							,multiCate : multiCate
 							,CateList : allCateData
-						    ,mode : $('#planWebUpdateForm input[name=mode]').val()
-						    ,planSq : $('#planWebUpdateForm input[name=planSq]').val()
-							,planGb	: $('#planWebUpdateForm select[name=planGb]').val()
-							,templateType :	$('#planWebUpdateForm select[name=templateType]').val()
-							,frontGb : $('#planWebUpdateForm select[name=frontGb]').val()
-							,planNm : $('#planWebUpdateForm input[name=planNm]').val()
-							,startSearchDate : $('#planWebUpdateForm input[name=startSearchDate]').val()
-							,startSearchHour : $('#planWebUpdateForm input[name=startSearchHour]').val()
-							,startSearchMin : $('#planWebUpdateForm input[name=startSearchMin]').val()
-							,endSearchDate : $('#planWebUpdateForm input[name=endSearchDate]').val()
-							,endSearchHour : $('#planWebUpdateForm input[name=endSearchHour]').val()
-							,endSearchMin : $('#planWebUpdateForm input[name=endSearchMin]').val()
-							,dispStdt : $('#planWebUpdateForm input[name=dispStdt]').val()
-							,dispEddt : $('#planWebUpdateForm input[name=dispEddt]').val()
-							,dtlTitle1 : $('#planWebUpdateForm input[name=dtlTitle1]').val()
-							,cornerNmDispYn :  $('#planWebUpdateForm select[name=cornerNmDispYn]').val()
-							,openYn :  $('#planWebUpdateForm select[name=openYn]').val()
-							,siteCd :$('#planWebUpdateForm select[name=siteCd]').val()
-							,dispOrd : $('#planWebUpdateForm input[name=dispOrd]').val()
-							,replyYn : $('#planWebUpdateForm select[name=replyYn]').val()
-							,mainPimg :$('#planWebUpdateForm input[name=mainPimg]').val()
-							,mainMimg : $('#planWebUpdateForm input[name=mainMimg]').val()
-							,fsrcPc :  $('#planWebUpdateForm input[name=fsrcPc]').val()
-							,fsrcMobile : $('#planWebUpdateForm input[name=fsrcMobile]').val()
+						    ,mode : $('#planUpdateForm input[name=mode]').val()
+						    ,planSq : $('#planUpdateForm input[name=planSq]').val()
+							,planGb	: $('#planUpdateForm select[name=planGb]').val()
+							,templateType :	$('#planUpdateForm select[name=templateType]').val()
+							,frontGb : $('#planUpdateForm select[name=frontGb]').val()
+							,planNm : $('#planUpdateForm input[name=planNm]').val()
+							,startSearchDate : $('#planUpdateForm input[name=startSearchDate]').val()
+							,startSearchHour : $('#planUpdateForm input[name=startSearchHour]').val()
+							,startSearchMin : $('#planUpdateForm input[name=startSearchMin]').val()
+							,endSearchDate : $('#planUpdateForm input[name=endSearchDate]').val()
+							,endSearchHour : $('#planUpdateForm input[name=endSearchHour]').val()
+							,endSearchMin : $('#planUpdateForm input[name=endSearchMin]').val()
+							,dispStdt : $('#planUpdateForm input[name=dispStdt]').val()
+							,dispEddt : $('#planUpdateForm input[name=dispEddt]').val()
+							,dtlTitle1 : $('#planUpdateForm input[name=dtlTitle1]').val()
+							,cornerNmDispYn :  $('#planUpdateForm select[name=cornerNmDispYn]').val()
+							,openYn :  $('#planUpdateForm select[name=openYn]').val()
+							,siteCd :$('#planUpdateForm select[name=siteCd]').val()
+							,dispOrd : $('#planUpdateForm input[name=dispOrd]').val()
+							,replyYn : $('#planUpdateForm select[name=replyYn]').val()
+							,mainPimg :$('#planUpdateForm input[name=mainPimg]').val()
+							,mainMimg : $('#planUpdateForm input[name=mainMimg]').val()
+							,fsrcPc :  $('#planUpdateForm input[name=fsrcPc]').val()
+							,fsrcMobile : $('#planUpdateForm input[name=fsrcMobile]').val()
 						}	
 					
 					
-					var actionUrl = '/marketing/plan/webdetail/update';
+					var actionUrl = '/marketing/plan/detail/update';
 					var jsonData =  JSON.stringify(data);
-					gagajf.ajaxJsonSubmit(actionUrl, jsonData, fnPlanWebDetailCallBack); 
-						uifnPopupClose('planWebRegisterFormDiv');
+					gagajf.ajaxJsonSubmit(actionUrl, jsonData, fnPlanDetailCallBack); 
+						uifnPopupClose('planRegisterFormDiv');
 						fnPlanListSearch();
-						//fnPlanWebDetailClose();
+						//fnPlanDetailClose();
 				}
 			});
 		}
@@ -889,8 +903,8 @@
 		$(obj).closest('div').find('input[name="attachYn"]').val(val);
 	}
 
-	var fnPlanWebDetailCallBack = function() {
-		uifnPopupClose('planWebRegisterForm');
+	var fnPlanDetailCallBack = function() {
+		uifnPopupClose('planRegisterForm');
 		fnPlanListSearch();
 		
 	}
@@ -900,6 +914,7 @@
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "브랜드ID", field: "brandCd", width: 110, cellClass: 'text-center'},
 		{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
+		{headerName: "브랜드그룹명", field: "brandGrpNm", width: 150, cellClass: 'text-center'},
 		{headerName: "", field: "brandKnm", width: 150, cellClass: 'text-center'},
 		/* {headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
@@ -1005,13 +1020,13 @@
 		gagaAgGrid.createGrid("gridFGCateList", gridOptionsFGCateList);
 		
 		 if (mode =='U') {
-			/* $('#planWebDetailForm input[name=badgeFcolor]').spectrum({
+			/* $('#planDetailForm input[name=badgeFcolor]').spectrum({
 				preferredFormat: "hex",
 				showInput: true,
 				allowEmpty: true
 			});
 
-			$('#planWebDetailForm input[name=badgeBcolor]').spectrum({
+			$('#planDetailForm input[name=badgeBcolor]').spectrum({
 				preferredFormat: "hex",
 				showInput: true,
 				allowEmpty: true
@@ -1021,9 +1036,9 @@
 			gridOptionsFGCateList.api.setRowData(planCateList);
 
 			if (planInfo.goodsLimitYn == 'N') {
-				$('#planWebDetailForm input[name=goodsLimitQty]').hide();
+				$('#planDetailForm input[name=goodsLimitQty]').hide();
 			} else {
-				$('#planWebDetailForm input[name=goodsLimitQty]').show();
+				$('#planDetailForm input[name=goodsLimitQty]').show();
 			}
 
 			// 썸머노트 값 설정
@@ -1038,13 +1053,13 @@
 			}
 
 		} else {
-			/* $('#planWebRegisterForm input[name=badgeFcolor]').spectrum({
+			/* $('#planRegisterForm input[name=badgeFcolor]').spectrum({
 				preferredFormat: "hex",
 				showInput: true,
 				allowEmpty: true
 			});
 
-			$('#planWebRegisterForm input[name=badgeBcolor]').spectrum({
+			$('#planRegisterForm input[name=badgeBcolor]').spectrum({
 				preferredFormat: "hex",
 				showInput: true,
 				allowEmpty: true

+ 17 - 18
src/main/webapp/WEB-INF/views/marketing/PlanListForm.html

@@ -15,11 +15,10 @@
  -->
 <div id="main">
 	<div class="main-title"></div>
-
-	<div class="panelStyle">
-		<form id="planListSearchForm" name="planListSearchForm" action="#"
+<form id="planListSearchForm" name="planListSearchForm" action="#"
 			th:action="@{'/marketing/planning/list'}"
 			onsubmit="$('#btnSearch').trigger('click'); return false;">
+	<div class="panelStyle">
 			<table class="frmStyle">
 				<colgroup>
 					<col style="width: 5%;" />
@@ -114,7 +113,7 @@
 			</li>
 			<li class="right">
 				<button type="button" class="btn btn-primary btn-lg"
-					onclick="fnPlanWebRegisterPopup();">등록</button> 검색결과 : <strong><span
+					onclick="fnPlanRegisterPopup();">등록</button> 검색결과 : <strong><span
 					id="gridRowTotalCount">0</span> 건</strong>&nbsp; 쪽번호 <span id="pgNo">0</span>/
 				<strong id="endPgNo">0</strong>&nbsp;&nbsp; <select id="pageSize"
 				name="pageSize">
@@ -160,6 +159,12 @@
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(planGbList, params.value); },
 			valueParser: function (params) { return gagaAgGrid.lookupKey(planGbList, params.newValue); }
 		},
+		{headerName: "사이트"			, field:'siteCd'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(siteCdList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteCdList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(siteCdList, params.newValue); }
+		},
 		{headerName: "프론트구분"	, field:'frontGb'	, width:120, cellClass: 'text-center',
 			cellEditor: 'agRichSelectCellEditor',
 			cellEditorParams: { values: gagaAgGrid.extractValues(wmGbList) },
@@ -174,12 +179,6 @@
 			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
 		},
 		{headerName: "서브제목"		, field:'dtlTitle1'	, width:300 , cellClass: 'text-center'},
-		{headerName: "사이트"			, field:'siteCd'	, width:100, cellClass: 'text-center',
-			cellEditor: 'agRichSelectCellEditor',
-			cellEditorParams: { values: gagaAgGrid.extractValues(siteCdList) },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteCdList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(siteCdList, params.newValue); }
-		},
 		{headerName: "기획전템플릿유형"	, field:'templateType'	, width:100, cellClass: 'text-center',
 			cellEditor: 'agRichSelectCellEditor',
 			cellEditorParams: { values: gagaAgGrid.extractValues(templateTypeList) },
@@ -212,7 +211,7 @@
 	// 바인딩
 	var fnBindDetail = function(field, rowData) {
 		if (field == 'planSq') { // 기획전 웹수정 팝업
-			fnEventWebDetailPopup(rowData.planSq);
+			fnEventDetailPopup(rowData.planSq);
 		}
 
 		if (field == 'planNm') { // 기획전 관리 팝업
@@ -222,15 +221,15 @@
 	
 
 	// 웹 등록 팝업
-	var fnPlanWebRegisterPopup = function() {
-		var actionUrl = "/marketing/planning/webdetail/form?mode=N";
-		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
+	var fnPlanRegisterPopup = function() {
+		var actionUrl = "/marketing/planning/detail/form?mode=N";
+		cfnOpenModalPopup(actionUrl,'popupPlanDetail');
 	} 
 
 	// 웹 수정 팝업
-	var fnEventWebDetailPopup = function(planSq) {
-		var actionUrl = "/marketing/planning/webdetail/form?mode=U&planSq=" + planSq;
-		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
+	var fnEventDetailPopup = function(planSq) {
+		var actionUrl = "/marketing/planning/detail/form?mode=U&planSq=" + planSq;
+		cfnOpenModalPopup(actionUrl,'popupPlanDetail');
 	}
 	
 	// 이벤트 코너 관리 팝업
@@ -348,7 +347,7 @@
 	}
 	
 	var fnSearchCallBack = function(result){
-
+		console.log(result.pageing.pageable.totalCount.addComma());
 		$('#planListSearchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
 		$('#planListSearchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
 		$('#planListSearchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());

+ 38 - 21
src/main/webapp/WEB-INF/views/marketing/PlanPopupForm.html

@@ -27,7 +27,7 @@
 
 		<div class="panelContent">
 			<form id="popupPlanSearchForm" name="popupPlanSearchForm" action="#"
-				th:action="@{'/marketing/planning/listPop'}"
+				th:action="@{'/marketing/planning/list/detail/popup'}"
 				onsubmit="$('#btnPlanPopupSearch').trigger('click'); return false;">
 				<table class="frmStyle">
 					<colgroup>
@@ -92,13 +92,11 @@
 
 						<tr>
 							<th>진행기간</th>
-							<td colspan="3" id="popupPlanTerms"></td>
-
-							
-
+							<td colspan="5" id="popupPlanTerms"></td>
+<!-- 
 							<th>등록자</th>
 							<td><input type="text" name="regId" id="regId" />
-							</td>
+							</td> -->
 						</tr>
 					</tbody>
 				</table>
@@ -144,29 +142,48 @@
 		$('#popupPlanSearchForm')[0].reset();
 	}
 
-	var columnDefs = [
- 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
- 		{headerName: "미리보기"		, field:'plan'		, width:100, cellClass: 'text-center',
- 			cellRenderer: function(params) { return '<a href="javascript:void(0);" onclick="fnPreview(\'' + params.data.planSq + '\');">' + '미리보기' + '</a>'; }
- 		},
- 		{headerName: "기획전번호"		, field:'planSq'	, width:100, cellClass: 'text-center'},
- 		{headerName: "기획전명"		, field:'planNm'	, width:300, cellClass: 'text-left'},
- 		{headerName: "서브제목"		, field:'dtlTitle1'	, width:300 , cellClass: 'text-center'},
+	var columnDefs =  [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "미리보기"		, field:'plan'		, width:100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);" onclick="fnPreview(\'' + params.data.planSq + '\');">' + '미리보기' + '</a>'; }
+		},
+		{headerName: "기획전구분"		, field:'planGb'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(planGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(planGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(planGbList, params.newValue); }
+		},
 		{headerName: "사이트"			, field:'siteCd'	, width:100, cellClass: 'text-center',
- 			cellEditor: 'agRichSelectCellEditor',
+			cellEditor: 'agRichSelectCellEditor',
 			cellEditorParams: { values: gagaAgGrid.extractValues(siteCdList) },
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteCdList, params.value); },
 			valueParser: function (params) { return gagaAgGrid.lookupKey(siteCdList, params.newValue); }
 		},
-		{headerName: "기획전구분"		, field:'planGb'	, width:100, cellClass: 'text-center'},
-		{headerName: "기획전템플릿유형"	, field:'templateType'	, width:100, cellClass: 'text-center'},
-		/* {headerName: "전시순서"		, field:'dispOrd'	, width:100, cellClass: 'text-right' }, */
+		{headerName: "프론트구분"	, field:'frontGb'	, width:120, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(wmGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(wmGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(wmGbList, params.newValue); }
+		},
+		{headerName: "오픈여부"		, field:'openYn'	, width:80 , cellClass: 'text-center'},
+		{headerName: "기획전번호"		, field:'planSq'	, width:100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "기획전명"		, field:'planNm'	, width:300, cellClass: 'text-left',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "서브제목"		, field:'dtlTitle1'	, width:300 , cellClass: 'text-center'},
+		{headerName: "기획전템플릿유형"	, field:'templateType'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(templateTypeList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(templateTypeList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(templateTypeList, params.newValue); }
+		},
+		{headerName: "전시순서"		, field:'dispOrd'	, width:100, cellClass: 'text-right' },
 		{headerName: "진행시작일시"		, field:'dispStdt'	, width:150, cellClass: 'text-center'},
 		{headerName: "진행종료일시"		, field:'dispEddt'	, width:150, cellClass: 'text-center'},
-		{headerName: "프론트구분"	, field:'frontGb'	, width:120, cellClass: 'text-center'	},
-		{headerName: "오픈여부"		, field:'openYn'	, width:80 , cellClass: 'text-center'},
 		{headerName: "등록자"			, field:'regNm'		, width:100, cellClass: 'text-center'},
-		{headerName: "등록일"			, field:'regDt'		, width:150, cellClass: 'text-center'},
+		{headerName: "등록일"			, field:'regDt'		, width:150, cellClass: 'text-center'}
 	];
 
 	var gridOptionsPopupPlan = gagaAgGrid.getGridOptions(columnDefs);

+ 23 - 18
src/main/webapp/WEB-INF/views/marketing/PollListForm.html

@@ -20,10 +20,11 @@
 
 		<div class="panelStyle">
 			<form id="PollsearchForm" name="PollsearchForm" action="#" th:action="@{'/marketing/poll/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<input type="hidden" name="maskingYn" value="Y"/>
 				<table class="frmStyle">
 					<colgroup>
 						<col style="width:10%;"/>
-						<col style="width:30%;"/>
+						<col style="width:10%;"/>
 						<col style="width:10%;"/>
 						<col style="width:30%;"/>
 						<col style="width:10%;"/>
@@ -31,21 +32,20 @@
 					</colgroup>
 					<tbody>
 						<tr>
-							<th>등록기간</th>
-							<td id="terms" colspan="3"></td>
-						</tr>
-						<tr>
-							<th>POLL 제목</th>
-							<td>
-								<input type="text" name="pollTitle" id="pollTitle"/>
-							</td>
-
 							<th>사이트</th>
 							<td>
 								<select name="siteCd">
 									<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}|"></option>
 								</select>
 							</td>
+							<th>POLL 제목</th>
+							<td>
+								<input type="text" name="pollTitle" id="pollTitle"/>
+							</td>
+						</tr>
+						<tr>
+							<th>등록기간</th>
+							<td id="terms" colspan="3"></td>
 						</tr>
 					</tbody>
 				</table>
@@ -59,15 +59,20 @@
 		</div>
 
 		<div class="panelStyle">
-			<ul class="lrStyle">
-				<li class="aR">
-					<h4 class="btnLeft" id="pollQtitle">투표자수</h4>
+			<ul class="division">
+				<li style="width:60%">
+					<div class="panelBar">
+						<h4>POLL 목록</h4>
+					</div>
+					<div id="gridListPoll" style="width: 100%; height: 500px; float: left;" class="ag-theme-balham"></div>
+				</li>
+				<li style="width:40%">
+					<div class="panelBar">
+						<h4 id="pollQtitle">투표자 수</h4>
+					</div>
+					<div id="gridListVote" style="width: 100%; height: 500px; float: right;" class="ag-theme-balham"></div>
 				</li>
 			</ul>
-			<div class="panelContent" style="padding-bottom: 530px;">
-				<div id="gridListPoll" style="width: 60%; height: 500px; float: left;" class="ag-theme-balham"></div>
-				<div id="gridListVote" style="width: 38%; height: 500px; float: right;" class="ag-theme-balham"></div>
-			</div>
 		</div>
 
 		<div class="panelStyle">
@@ -129,7 +134,7 @@
 										<input name="dispEdTime" id="edTime" type="hidden" data-valid-name="투표기간 종료시간" value='235959' />
 									</td>
 
-									<th>사이트<i class="star"></i></th>
+									<th>사이트</th>
 									<td>
 										<select name="siteCd">
 											<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}|"></option>

+ 24 - 36
src/main/webapp/WEB-INF/views/marketing/PollVoteRatePopupForm.html

@@ -13,12 +13,12 @@
  * ===  ===========  ==========  =============================================
  * 1.0  2021.02.22   sowon     최초 작성
  *******************************************************************************
- -->s
-<div class="modalPopup" data-width="960" data-height="300" id="popupPollVoteRate">
+ -->
+<div class="modalPopup" data-width="960" data-height="400" id="popupPollVoteRate">
 	<div id="panel" class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
-			<strong>POLL 투표율</strong>
+			<h2>POLL 투표율</h2>
 			<button type="button" class="close"
 				onclick="uifnPopupClose('popupPollVoteRate');">
 				<em class="fa fa-times"></em>
@@ -32,41 +32,29 @@
 				<input type="hidden" name="pollSq" />
 				<ul class="boxContent">
 					<li class="boxContentTop">
-						<table class="frmStyle">
+						<table class="frmStyle" style="overflow:auto;">
+							<colgroup>
+								<col width="">
+								<col width="">
+								<col width="">
+								<col width="">
+								<col width="">
+								<col width="">
+								<col width="">
+								<col width="">
+								<col width="">
+								<col width="">
+							</colgroup>
 							<tbody>
 								<tr>
-									<td>
-										<div id="questionDiv" class="btn_left"
-											style="width: 100%; height: 200px; overflow: yes; overflow-x: auto; overflow-y: auto;">
-											<table class="tableStyle" id="questionTable" 
-												style="overflow-x: auto; overflow-y: auto;">
-												<colgroup>
-													<col width="">
-													<col width="">
-													<col width="">
-													<col width="">
-													<col width="">
-													<col width="">
-													<col width="">
-													<col width="">
-													<col width="">
-													<col width="">
-												</colgroup>
-												<tbody>
-													<tr>
-														<td>문항</td>
-														<td>투표수</td>
-														<td>투표율</td>
-													</tr>								
-													<tr th:each="list : ${pollAList}" align="center">
-														<td>[[${list.name}]]</td>
-														<td>[[${list.voteCnt}]]</td>
-														<td><label>[[${list.voteRate}]]%</label></td>
-													</tr>
-												</tbody>
-											</table>
-										</div>
-									</td>
+									<th>문항</th>
+									<th>투표수(명)</th>
+									<th>투표율</th>
+								</tr>								
+								<tr th:each="list : ${pollAList}" align="center">
+									<td>[[${list.name}]]</td>
+									<td>[[${list.voteCnt}]]</td>
+									<td><label>[[${list.voteRate}]]%</label></td>
 								</tr>
 							</tbody>
 						</table>

+ 17 - 1
src/main/webapp/ux/js/admin.popup.js

@@ -579,7 +579,7 @@ var cfnOpenCouponRetrievePopup = function(sName, oParam) {
  * @author : yujung
  */
 var cfnOpenPlanPopup = function(callbackfun) {
-	var actionUrl = "/marketing/plan/list/popup";
+	var actionUrl = "/marketing/planning/list/popup";
 	if (typeof(callbackfun) != 'undefined') actionUrl += "?callBackFun=" + callbackfun;
 
 	cfnOpenModalPopup(actionUrl,'popupPlan');
@@ -873,3 +873,19 @@ var cfnOpenGoodsDispOrdChangePopup = function(callbackfun, params) {
 	if (typeof(params) != 'undefined') actionUrl += "&" + params;
 	cfnOpenModalPopup(actionUrl,'popupGoodsDispOrdChange');
 }
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 메인전시 컨텐츠 수정 팝업 오픈
+ * <pre>
+ *     cfnOpenMainContentsPopup(cateCd, contentsLoc);
+ * </pre>
+ * @since  : 2021/02/23
+ * @author : bin2107
+ */
+var cfnOpenMainContentsPopup = function(cateNo, contentsLoc) {
+	var actionUrl = "/display/main/contents/popup/form?cateNo="+cateNo+"&contentsLoc=" + contentsLoc;
+	//uifnPopClose('popupMainContents');
+	cfnOpenModalPopup(actionUrl, 'popupMainContents');
+}