ChoiSooHwan пре 5 година
родитељ
комит
3ac1ecd5f7

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

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

+ 51 - 10
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
@@ -114,8 +114,8 @@ public class TsaMailTemplateService {
 		return mailtempletDao.getMktmailManagementTCList(mktmailManagementTc);
 	}
 	/**
-	 * MKT메일관리 상세화면
-	 * @param mktmailManagement
+	 * MKT메일관리 상품 상세화면
+	 * @param mktmailManagementTc
 	 * @return
 	 * @author csh9191
 	 * @since 2021. 02. 16
@@ -131,7 +131,7 @@ public class TsaMailTemplateService {
 	
 	/**
 	 * MKT 상세 등록/수정
-	 * @param mailtemplate - 메일관련 정보
+	 * @param mktmailManagement - 메일관련 정보
 	 * @author csh9191
 	 * @since 2021. 02. 13
 	 */
@@ -376,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
@@ -393,8 +393,8 @@ public class TsaMailTemplateService {
 	}
 	
 	/**
-	 * 메일헤더푸터 리스트 삭제
-	 * @param mailtemplate - 메일관련 정보
+	 * MKT메일 목록 삭제
+	 * @param mktmailManagement - 메일관련 정보
 	 * @author csh9191
 	 * @since 2021. 02. 15
 	 */
@@ -408,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);
+	}
 	
-
 }

+ 81 - 4
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1102,7 +1102,7 @@ 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));
 		
@@ -1145,7 +1145,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);
 		
@@ -1185,8 +1185,8 @@ public class TsaMarketingController extends TsaBaseController {
 		return mailTemplateService.getMktMailList(mktmailManagement);
 	}
 	/**
-	 * 메일헤더푸터 리스트 삭제
-	 * @param 메일헤더푸터관리 - 메일헤더푸더 정보
+	 * MKT메일관리 목록 삭제
+	 * @param 
 	 * @return
 	 * @author csh9191	
 	 * @since 2021. 02. 15
@@ -1198,6 +1198,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 진행 */
 
 	/**

+ 8 - 2
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;				// 메일템플릿 코너명
@@ -64,11 +66,15 @@ public class MktmailManagement extends TscBaseDomain{
 	//상품정보
 	private String brandEnm;				// 브랜드명
 	private String goodsNm;					// 상품명
-	private String goodsStat;					// 판매상태
+	private String goodsStat;				// 판매상태
 	private String listPrice;				// 정상가
 	private String currPrice;				// 판매가
 	private String goodsCd;					// 상품코드(상품)
 	private Integer dispOrd;				// 표시순서
+	
+	//미리보기
+	private String mailhfContent;			//메잃 헤더 푸터 정보
+	
 
 
 	

+ 45 - 14
src/main/java/com/style24/persistence/mybatis/shop/TsaMailTemplate.xml

@@ -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
@@ -292,6 +280,7 @@
 		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="MktmailManagementTc" resultType="MktmailManagementGoods">
@@ -321,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>

+ 277 - 61
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementDetailForm.html

@@ -55,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>
@@ -64,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>
@@ -104,7 +104,7 @@
 							<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 -->
@@ -119,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="">
@@ -127,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>
@@ -192,7 +192,7 @@
 													<tr>
 														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="mailtcNm2"/>
+															<input type="text" name="mailtcNm2" maxlength="50"/>
 														</td>
 													</tr>
 													<tr>
@@ -241,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="">
@@ -249,7 +249,7 @@
 													<tr>
 														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="mailtcNm3"/>								
+															<input type="text" name="mailtcNm3" maxlength="50"/>								
 														</td>
 													</tr>
 													<tr>
@@ -298,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="">
@@ -306,7 +306,7 @@
 													<tr>
 														<th class="w100">번호</th>
 														<td>
-															<input type="text" name="mailtcNm4"/>								
+															<input type="text" name="mailtcNm4" maxlength="50"/>								
 														</td>
 													</tr>
 													<tr>
@@ -355,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="">
@@ -363,7 +363,7 @@
 													<tr>
 														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="mailtcNm5"/>								
+															<input type="text" name="mailtcNm5" maxlength="50"/>								
 														</td>
 													</tr>
 													<tr>
@@ -419,7 +419,7 @@
 		<!-- //버튼 배치 영역 -->
 				</form>
 		</div>
-	</div>//
+	</div>
 </div>
 
 <script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020102902"></script>
@@ -473,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;
@@ -496,7 +503,28 @@
 			let arrayData4 = gagaAgGrid.getAllRowData(gridOptions_c4)
 			let arrayData5 = gagaAgGrid.getAllRowData(gridOptions_c5)
 			
-			console.log(arrayData);
+
+			//상품 등록 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();
@@ -542,8 +570,8 @@
 				mailTc5.mailtcSq = $('#mailManagementForm input[name=mailtcSq5]').val();
 
 			}
-		 
-				
+		 	
+			
 			//헤더 선택체크 내용 체크
 			if(!gagajf.validation('#mailManagementForm'))
 				return false;
@@ -553,6 +581,29 @@
 				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: "확인",
@@ -573,11 +624,9 @@
 					
 					//업데이트 일 경우 처리
 					if($('#mailManagementForm input[name=mailtSq]').val() != null && $('#mailManagementForm input[name=mailtSq]').val() != ''){
-						alert(mktmailInfo.mailtSq);					
 						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();
@@ -585,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');
 					});
 				
 				}
@@ -635,7 +684,6 @@
 				AddgridRow = gridOptions_c5;
 				break;
 			}
-			
 			cfnOpenGoodsPopup('fnFetchGoods');
 		}
 
@@ -643,7 +691,6 @@
 		var fnFetchGoods = function(goodsData) {
 			
 			if (goodsData.length < 1) return;
-			
 			// 기존상품
 			var oldGoodsSetList = gagaAgGrid.getAllRowData(AddgridRow);
 			var index = oldGoodsSetList.length+1;
@@ -675,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
@@ -712,48 +759,203 @@
 			}
 			
 			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);
+					}
+				});
+			}
 		}
-		
-		
-		// 상품 구분 삭제 버튼  삭제는 해당 하는 폼이 삭제
-		// TODO reset 추가
-		var btnDeleteGridNum = function (param){
+
+		// 상품 구분 폼 삭제
+		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();
-
-				gagaAgGrid.removeRowData(gridOptions_c1, false);
 			}
-		}		
+		}
+
 		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();
-
-			}			
-		}			
+			}
+		}
+		
 		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();
-
-			}			
+			}
 		}		
+		
 		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();
-
-			}			
+			}
 		}
 		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();
-
 			}
 		} 
 
@@ -767,24 +969,48 @@
 		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);
 			}
-			console.log(mktmailTCInfo);
-
+			
 			$.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();
 				} 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();
 				}
 				
@@ -807,21 +1033,11 @@
 				}
 			});
 			
-// 			$.each(mktmailTCInfo.goodsList, function(idx, item) {
-// 			});
-			
 		}//end of mode
 
 		// 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');
 
 	});

+ 37 - 11
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementForm.html

@@ -92,7 +92,11 @@
 			}
 		},
 		{	//미리보기 
-			headerName: "미리보기", field:"미리보기" , 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'},
 		{
@@ -116,19 +120,17 @@
 	// Get GridOptions
 	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
 	
-	//검색 조건 확인
-	//TODO
-	
-	
 	// 다중 선택 추가
 	gridOptions.rowSelection = 'multiple';	
 	
 	//셀 클릭 이벤트 -> 팝업창
 	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'mailtNm')
-			return;
-		console.log(event.data);
-		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
@@ -152,7 +154,6 @@
 					updatedData.push(item);
 				});
 				
-				
 				var jsonData = JSON.stringify(updatedData);
 				gagajf.ajaxJsonSubmit('/marketing/mktmailManagement/delete', jsonData, function() {
 					$('#btnSearch').trigger('click');
@@ -163,19 +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, mailtcSq) {
+	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>