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

Merge remote-tracking branch 'origin/develop' into jsh77b

tsit14 преди 5 години
родител
ревизия
6170c8f006

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

@@ -455,6 +455,15 @@ public interface TsaPlanDao {
 	 */
 	Collection<Plan> getPlanContentFileList(Plan param);
 	
+	/**
+	 * 기획전 템플릿 상세조회 - 유의사항
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentNoticeList(Plan param);
+	
 	/**
 	 * 기획전 템플릿 상세조회 - html
 	 *

+ 1 - 4
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -113,10 +113,7 @@ public class TsaCustomerService {
 		coreCustomerService.createCustomerHistory(customer);
 
 		// 2.마케팅수신동의 이력
-		if (StringUtils.isNotBlank(customer.getSmsAgreeYn())
-				|| StringUtils.isNotBlank(customer.getEmailAgreeYn())
-				|| StringUtils.isNotBlank(customer.getAppAgreeYn())
-				|| StringUtils.isNotBlank(customer.getMkAgreeYn())) {
+		if (StringUtils.isNotBlank(customer.getSmsAgreeYn()) || StringUtils.isNotBlank(customer.getEmailAgreeYn())) {
 			coreCustomerService.createCustomerMarketHst(customer);
 		}
 

+ 41 - 0
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -984,6 +984,34 @@ public class TsaPlanService {
 			}
 		}
 		
+		// 유의사항등록
+		Plan noticePlan = new Plan();
+		//유의사항 등록 - tb_plan_contents
+		if(!org.apache.commons.lang3.StringUtils.isAllEmpty(param.getMultiPlanNotice()) || param.getNoticeDispOrd() >=0) {
+			noticePlan.setRegNo(regNo);
+			noticePlan.setUpdNo(regNo);
+			noticePlan.setTmplType("G082_60");
+			noticePlan.setPlanSq(param.getPlanSq());
+			noticePlan.setDispYn(param.getNoticeDispYn());
+			noticePlan.setDispOrd(param.getNoticeDispOrd());
+			noticePlan.setPlanContSq(param.getNoticePlanContSq());
+			planDao.createPlanContents(noticePlan);
+			
+			// 기존 유의사항삭제
+			planDao.deletePlanContentItem(param.getNoticePlanContSq());
+						
+			//유의사항아이템 등록
+			if(param.getMultiPlanNotice().length>0) {
+				String[] noticeItemVal = param.getMultiPlanNotice();
+				
+				// 유의사항 insert
+				for (int j = 0; j < noticeItemVal.length; j++) {
+					noticePlan.setItemVal(noticeItemVal[j]);
+					planDao.createPlanContentsItem(noticePlan);
+				}
+			}
+		}
+		
 		//HTML[PC] 상단 하단 등록
 		if(param.getFsrcMobileTop() != "" || param.getFsrcPcTop() != "") {
 
@@ -1434,6 +1462,19 @@ public class TsaPlanService {
 		return planDao.getPlanContentFileList(param);
 	}
 	
+	/**
+	 * 기획전 템플릿 상세조회 - 유의사항
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 5 .28
+	 */
+	public Collection<Plan> getPlanContentNoticeList(Plan param){
+		return planDao.getPlanContentNoticeList(param);
+	}
+	
+	
 	/**
 	 * 기획전 템플릿 상세조회 - html
 	 *

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

@@ -2229,6 +2229,10 @@ public class TsaMarketingController extends TsaBaseController {
 			//파일리스트
 			param.setTmplType("G082_30");
 			mav.addObject("fileList", planService.getPlanContentFileList(param));
+			
+			//유의사항리스트
+			param.setTmplType("G082_60");
+			mav.addObject("noticeList", planService.getPlanContentNoticeList(param));
 
 			//html 리스트 - 상단
 			param.setFontGb("T");

+ 12 - 0
src/main/java/com/style24/persistence/domain/Plan.java

@@ -118,6 +118,7 @@ public class Plan extends TscBaseDomain{
 		private Integer entryCustNo;
 		private Integer custNo;
 		private String custNm;
+		private String custId;
 		private Integer planEntrySq;
 		private String sysFile;
 		
@@ -205,6 +206,8 @@ public class Plan extends TscBaseDomain{
 		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 		private String[] multiPlanCoupon;		//쿠폰목록
 		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] multiPlanNotice;			//유의사항목록
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 		private String[] multiPlanFile;			//이미지목록
 		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 		private String[] multiPlanFile2;			//이미지새장본창
@@ -239,6 +242,11 @@ public class Plan extends TscBaseDomain{
 		private int fileDispOrd;			//파일전시순서
 		private Integer filePlanContSq;		//파일 컨텐츠일련번호
 		
+		private String noticeItemVal;			//유의사항아이템
+		private String noticeDispYn;			//유의사항전시여부
+		private int noticeDispOrd;			//유의사항전시순서
+		private Integer noticePlanContSq;		//유의사항컨텐츠일련번호
+		
 		private String topFsrcDispYn;		//html상단 전시여부
 		private String BtmFsrcDispYn;		//html하단 전시여부
 		private int   topFsrcDispOrd;		//html상단 전시순서
@@ -337,4 +345,8 @@ public class Plan extends TscBaseDomain{
 		public String getMaskingCustNm() {
 			return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.name(getCustNm()) : getCustNm();
 		}
+		
+		public String getMaskingCustId() {
+			return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.id(getCustId()) : getCustId();
+		}
 }

+ 0 - 8
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -206,14 +206,6 @@
 		    , SMS_AGREE_DT = NOW()
 		    , SMS_AGREE_YN = #{smsAgreeYn}
 		    </if>
-		    <if test="appAgreeYn != null and appAgreeYn != ''">
-		    , APP_AGREE_DT = NOW()
-		    , APP_AGREE_YN = #{appAgreeYn}
-		    </if>
-		    <if test="mkAgreeYn != null and mkAgreeYn != ''">
-		    , MK_AGREE_DT = NOW()
-		    , MK_AGREE_YN = #{mkAgreeYn}
-		    </if>
 		    <if test="encodedHomeZipcode != null and encodedHomeZipcode != ''">
 		    , HOME_ZIPCODE = #{encodedHomeZipcode}
 		    </if>

+ 16 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -1186,6 +1186,21 @@
 		ORDER BY B.PLAN_CONT_ITEM_SQ 
 	</select>
 	
+	<select id="getPlanContentNoticeList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getPlanContentNoticeList */
+		SELECT A.PLAN_CONT_SQ 
+			  ,A.PLAN_SQ 
+		      ,A.TMPL_TYPE 
+		      ,A.DISP_YN 
+		      ,A.DISP_ORD 
+		      ,A.REG_NO 
+		      ,B.ITEM_VAL AS noticeItemVal
+		      ,B.PLAN_CONT_ITEM_SQ 
+		FROM TB_PLAN_CONTENTS A LEFT JOIN TB_PLAN_CONTENTS_ITEM B ON A.PLAN_CONT_SQ = B.PLAN_CONT_SQ
+		WHERE A.PLAN_SQ = #{planSq} AND A.TMPL_TYPE = #{tmplType}
+		ORDER BY B.PLAN_CONT_ITEM_SQ 
+	</select>
+	
 	<!-- 기획전 템플릿 이미지 파일 삭제 -->
 	<delete id="deletePlanTemplateFile" parameterType="Plan">
 		/* TsaPlan.deletePlanTemplateFile */
@@ -1366,6 +1381,7 @@
 		                   , PE.ENTRY_CUST_NO AS CUST_NO
 		                   , PE.PLAN_ENTRY_SQ 
 		                   , C.CUST_NM
+		                   , C.CUST_ID
 		             FROM TB_PLAN P INNER JOIN TB_PLAN_ENTRY PE
 		                              ON P.PLAN_SQ = PE.PLAN_SQ
 		                             INNER JOIN TB_CUSTOMER C

+ 2 - 9
src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html

@@ -1019,14 +1019,6 @@
 			delete customer.smsAgreeYn;
 		}
 
-		if (customer.appAgreeYn === orgData.appAgreeYn) {
-			delete customer.appAgreeYn;
-		}
-
-		if (customer.mkAgreeYn === orgData.mkAgreeYn) {
-			delete customer.mkAgreeYn;
-		}
-
 		customer.birthYmd = customer.birthYmd.replaceAll('-', '');
 
 		let jsonData = JSON.stringify(customer);
@@ -1456,7 +1448,7 @@
 		const $appAgreeYn = $('#custInfoForm input:radio[name=appAgreeYn]');
 		$appAgreeYn.eq(appEq).prop('checked', true);
 		$appAgreeYn.eq(appEq).parent().addClass('checked');
-
+		$appAgreeYn.attr('disabled', true);
 	};
 
 	// 마케팅 수신동의
@@ -1465,6 +1457,7 @@
 		const $mkAgreeYn = $('#custInfoForm input:radio[name=mkAgreeYn]');
 		$mkAgreeYn.eq(mkEq).prop('checked', true);
 		$mkAgreeYn.eq(mkEq).parent().addClass('checked');
+		$mkAgreeYn.attr('disabled', true);
 	};
 
 

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

@@ -179,7 +179,7 @@
 		{headerName: "댓글참여"		, field:'replyYn'	, width:300 , cellClass: 'text-center',
 			cellRenderer: function(params) {
 				if(params.value === 'Y'){
-					return '<a href="javascript:void(0);">' + params.value + '</a>';
+					return '<a href="javascript:void(0);">댓글 보기</a>';
 				}else{
 					return params.value;
 				}

+ 24 - 6
src/main/webapp/WEB-INF/views/marketing/PlanReplyDetailForm.html

@@ -25,15 +25,15 @@
 		
 		<!-- CONTENT -->
 		<div class="panelContent">
-			<form id="reviewDetailForm" name="reviewDetailForm" action="#" th:method="post" >
+			<form id="replyDetailForm" name="replyDetailForm" action="#" th:method="post" >
 				
 				<div class="reviewWrap">
 					<div class="user_review">
 						<!-- 리뷰 파일 -->
-						<dl class="rvPic">
+						<dl class="rvPic" style="display: none;">
 							<dt>이미지</dt>
 							<dd>
-								<div class="picList" id="divPicList">
+								<div class="picList" id="divPicList" style="background: url() repeat 0 0;">
 									<th:block th:if="${attachList != null}" th:each="oneData, status : ${attachList}">
 										<a  href="javascript:void(0);" onclick="fnPopupOpen('layer_review_pic', this);">
 											<span th:style="${'background-image:url(' + @environment.getProperty('domain.image') + oneData.sysFile + ');'}">사진</span>
@@ -55,12 +55,30 @@
 		</div>
 	</div>
 </div>
-
+<div class="uPopupWrap off" id="layer_review_pic">
+	<div class="area reviewPic" style="width:500px; height:500px;">
+		<ul class="picList" th:object="${reviewInfo}">
+			<th:block th:if="${attachList != null}" th:each="oneData, status : ${attachList}">
+				<li><div class="img" th:style="${'background-image:url(' + @environment.getProperty('domain.image') + oneData.sysFile + ');'}"></div></li>
+			</th:block>
+		</ul>
+		<button type="button" class="btnArr prev" onclick="fnPicPrev('layer_review_pic');">이전</button>
+		<button type="button" class="btnArr next" onclick="fnPicNext('layer_review_pic');">다음</button>
+		<button type="button" class="btnClose">닫기</button>
+	</div>
+</div>
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	
-	
+	$(document).ready(function() {
+		let attachList = [[${attachList}]];
+		
+		if(attachList.length>0){
+			$(".rvPic").show();
+		}else{
+			$(".rvPic").hide();	
+		}
+	});
 	// 팝업 열기
 	function fnPopupOpen(id,el,kind) {
 		$("#"+id).removeClass("off");	//레이어 Open

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

@@ -96,7 +96,7 @@
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: '회원번호', field: 'custNo', width: 200, cellClass: 'text-center', hide: true},
 		{
-			headerName: '회원명', field: 'maskingCustNm', width: 200, cellClass: 'text-center',
+			headerName: '회원아이디', field: 'maskingCustId', width: 200, cellClass: 'text-center',
 			cellRenderer: function(params) {
 				if (gagajf.isNull(params.value)) return '';
 				return '<a href="javascript:void(0);">' + params.value + '</a>';	

+ 118 - 10
src/main/webapp/WEB-INF/views/marketing/PlanTemplatePopupForm.html

@@ -29,6 +29,7 @@
 			<input type="hidden" name="rePlanContSq">
 			<input type="hidden" name="cuPlanContSq">
 			<input type="hidden" name="filePlanContSq">
+			<input type="hidden" name="noticePlanContSq">
 			<input type="hidden" name="goodsPlanContSq1">
 			<input type="hidden" name="goodsPlanContSq2">
 			<input type="hidden" name="goodsPlanContSq3">
@@ -210,6 +211,56 @@
 						</div>
 					</div>
 				</div>
+				
+				<div class="panelContent">
+					<div class="panelStyle" style="margin: unset;">
+						<!-- TITLE -->
+						<div class="panelTitle">
+							<h2>유의사항</h2>
+							<span class="panelControl"> <i
+								class="fa inner-fa-chevron-up"></i> <!-- 열림/닫힘 화살표 -->
+							</span>
+						</div>
+						<!-- //TITLE -->
+						<div class="inner-panelContent">
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%" />
+										<col width="90%" />
+									</colgroup>
+									<tr>
+										<th>유의사항<br/>[전시여부<label class="chkBox"><input type="checkbox" name="noticeDispYn" value="N"/></label>]</th>
+										<td colspan="5">
+											<div id="registeredFile"></div>
+											<div style="display: block">
+												<select name="noticeCnt" id="noticeCnt">
+													<th:block th:each="num: ${#numbers.sequence(1,10)}">
+														<option th:value="${num}" th:text="${num}"></option>
+													</th:block>
+												</select>* 유의사항 개수 선택(10개까지 가능)
+											</div> 
+											<th:block th:each="num: ${#numbers.sequence(1,10)}">
+												<div>
+													<table>
+														<tr th:id="${'notice'+num}">
+															<th th:text="${'유의사항' + num}"></th>
+															<td><input type="text" th:id="${'noticeItemVal' + num}" th:name="${'noticeItemVal' + num}" class="w300 aR">
+															</td>
+														</tr>
+													</table>
+												</div>
+											</th:block>
+										</td>
+
+										<th>전시순서</th>
+										<td><input type="text" name="noticeDispOrd" class="w100 aR" data-valid-type="numeric"></td>
+									</tr>
+								</table>
+							</div>
+						</div>
+					</div>
+				</div>
 
 				<div class="panelContent">
 					<div class="panelStyle" style="margin: unset;">
@@ -1017,6 +1068,7 @@
 	let reviewList = [[${reviewList}]];
 	let couponList = [[${couponList}]];
 	let fileList = [[${fileList}]];
+	let noticeList = [[${noticeList}]];
 	let fsrcListTop = [[${fsrcListTop}]];
 	let fsrcListBtm = [[${fsrcListBtm}]];
 	let goodsList = [[${goodsList}]];
@@ -1485,6 +1537,18 @@
 			$('#file' + i).parent().parent().hide();
 		}
 	});
+	
+	// 유의사항 개수 선택시
+	$("#noticeCnt").on("change", function() {
+		for (var i = 1; i <= 10; i++) {
+			$('#notice' + i).parent().parent().parent().show();
+		}
+
+		var noticeCnt = $(this).val();
+		for (var i = 10; i > noticeCnt; i--) {
+			$('#notice' + i).parent().parent().parent().hide();
+		}
+	});
 
 	// 파일첨부 선택 시
 	$('#file1').on('change', function() { fnChooseFile(this, 1); });
@@ -1631,6 +1695,18 @@
 			}
 		}
 		
+		//유의사항관련 데이터 담기
+		var multiPlanNotice = [];
+		
+		var count = $("#planTemplateForm select[name=noticeCnt]").val();
+		for (var i = 0; i < count; i++) {
+			if($('#noticeItemVal'+(i+1)).val() == '' || typeof $('#noticeItemVal'+(i+1)).val() == 'undeifined'){
+				false;
+			}else{
+				multiPlanNotice.push($('#noticeItemVal'+(i+1)).val());
+			}
+		}
+		
 		// 리뷰 전시 클릭했을 경우
 		if($("input:checkbox[name=reDispYn]").prop("checked")){
 			$("input:checkbox[name=reDispYn]").val('Y');
@@ -1692,6 +1768,23 @@
 			$("input:checkbox[name=fileDispOrd]").val('N');
 		}
 		
+		// 유의사항 전시 클랙했을 경우
+		if($("input:checkbox[name=noticeDispYn]").prop("checked")){
+			$("input:checkbox[name=noticeDispYn]").val('Y');
+			
+			if($("input[name=noticeDispOrd]").val()==''){
+				mcxDialog.alert('유의사항 전시순서를 입력하세요.');
+				return;
+			}
+			if(multiPlanNotice.length == 0){
+				mcxDialog.alert('등록할 유의사항를 입력하세요.');
+				return;
+			}
+			
+		}else{
+			$("input:checkbox[name=noticeDispOrd]").val('N');
+		}
+		
 		// html 상단 전시 클릭했을 경우
 		if($("input:checkbox[name=topFsrcDispYn]").prop("checked")){
 			$("input:checkbox[name=topFsrcDispYn]").val('Y');
@@ -2049,6 +2142,10 @@
 						   ,fileDispYn : $('#planTemplateForm input:checkbox[name=fileDispYn]').val() 
 						   ,fileDispOrd : $('#planTemplateForm input[name=fileDispOrd]').val()  
 						   ,filePlanContSq : $('#planTemplateForm input[name=filePlanContSq]').val()
+						   ,multiPlanNotice : multiPlanNotice
+						   ,noticeDispYn : $('#planTemplateForm input:checkbox[name=noticeDispYn]').val() 
+						   ,noticeDispOrd : $('#planTemplateForm input[name=noticeDispOrd]').val()  
+						   ,noticePlanContSq : $('#planTemplateForm input[name=noticePlanContSq]').val()
 						   ,topFsrcDispYn : $('#planTemplateForm input:checkbox[name=topFsrcDispYn]').val() 
 						   ,btmFsrcDispYn : $('#planTemplateForm input:checkbox[name=btmFsrcDispYn]').val() 
 						   ,topFsrcDispOrd: $('#planTemplateForm input[name=topFsrcDispOrd]').val() 
@@ -2200,16 +2297,6 @@ $(document).ready(function() {
 				{
 					$("#planTemplateForm select[name=fileCnt]").val(fileList.length);
 					
-					 /* for (var i = 0; i <fileList.length; i++) {
-						var tag = '';
-						tag += '<span class="memAdd">';
-						tag += '	<a id="dnFile' + (i + 1) + '">' + fileList[i].fileItemVal + '</a>\n';
-						tag += '	<button type="button" onclick="fnDeleteFile(this, ' + fileList[i].planSq + ', ' +  fileList[i].planContItemSq + ', \'' +  fileList[i].fileItemVal + '\')">삭제</button>\n';
-						tag += '</span>';
-						$('#registeredFile').prepend(tag);
-							
-					}  */
-					
 					for (var i = 0; i <fileList.length; i++) {
 						$("#planTemplateForm input[name=fileLinkUrl"+ (i+1) +"]").val(fileList[i].linkUrl);
 						$("#planTemplateForm label[id=file_"+ (i+1) +"]").html(fileList[i].fileItemVal);
@@ -2224,6 +2311,26 @@ $(document).ready(function() {
 				}
 			}
 			
+			if(typeof noticeList[0] != 'undefined'){
+				//유의사항
+				$('#planTemplateForm input[name=noticeDispOrd]').val(noticeList[0].dispOrd);
+				$('#planTemplateForm input[name=noticePlanContSq]').val(noticeList[0].planContSq);
+				
+				if (noticeList[0].dispYn == 'Y') {
+					$('#planTemplateForm input:checkbox[name="noticeDispYn"]').prop('checked', true);
+				}
+				
+				if(noticeList.length > 0 && noticeList[0].noticeItemVal != null)
+				{
+					$("#planTemplateForm select[name=noticeCnt]").val(noticeList.length);
+					
+					for (var i = 0; i <noticeList.length; i++) {
+						$("#planTemplateForm input[id=noticeItemVal"+ (i+1) +"]").val(noticeList[i].noticeItemVal);
+							
+					} 
+				}
+			}
+			
 			//html(하단)
 			if(typeof fsrcListBtm[0] != 'undefined'){
 				$('#planTemplateForm input[name=btmFsrcDispOrd]').val(fsrcListBtm[0].dispOrd);
@@ -2301,6 +2408,7 @@ $(document).ready(function() {
 		
 
 		$("#fileCnt").trigger('change');
+		$("#noticeCnt").trigger('change');
 		
 });