Parcourir la source

Merge branch 'develop' into bin2107

bin2107 il y a 5 ans
Parent
commit
d94bf77efd

+ 1 - 0
src/main/java/com/style24/admin/biz/dao/TsaMailTemplateDao.java

@@ -125,5 +125,6 @@ public interface TsaMailTemplateDao {
 	MktmailManagement getMktmailPreviewHeader(Integer mktMailManagement);
 	MktmailManagement getMktmailPreviewFooter(Integer mktMailManagement);
 	MktmailManagement getMktmailPreviewContent(Integer mktMailManagement);
+	Collection<MktmailManagementGoods> getMktmailPreviewGoodsList(MktmailManagementTc mktmailManagementTc);
 
 }

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

@@ -1321,7 +1321,7 @@ public class TsaGoodsService {
 		regGoods.setStyleYear(goods.getStyleYear());
 		regGoods.setSeasonCd(goods.getSeasonCd());
 		regGoods.setSexGb(goods.getSexGb());
-		regGoods.setMainColorCd("00");
+		regGoods.setMainColorCd("XX");
 		regGoods.setOriginCd(goods.getOriginCd());
 		regGoods.setMakeYmd(goods.getMakeYmd());
 		regGoods.setSelfMallYn(goods.getSelfMallYn());
@@ -1402,7 +1402,7 @@ public class TsaGoodsService {
 		regGoods.setStyleYear(goods.getStyleYear());
 		regGoods.setSeasonCd(goods.getSeasonCd());
 		regGoods.setSexGb(goods.getSexGb());
-		regGoods.setMainColorCd("00");
+		regGoods.setMainColorCd("XX");
 		regGoods.setOriginCd(goods.getOriginCd());
 		regGoods.setMakeYmd(goods.getMakeYmd());
 		regGoods.setSelfMallYn(goods.getSelfMallYn());

+ 17 - 1
src/main/java/com/style24/admin/biz/service/TsaMailTemplateService.java

@@ -129,6 +129,22 @@ public class TsaMailTemplateService {
 		return mailtempletDao.getMktmailManagementGoodsList(mktmailManagementTc);
 	}
 	
+	/**
+	 * MKT미리보기 상품정보
+	 * @param mktmailManagementTc
+	 * @return
+	 * @author csh9191
+	 * @since 2021. 02. 24
+	 */
+	public Collection<MktmailManagementGoods> getMktmailPreviewGoodsList(Integer mailtcSq) {
+		MktmailManagementTc mktmailManagementTc = new MktmailManagementTc();
+		mktmailManagementTc.setMailtcSq(mailtcSq);
+		
+		log.info("mktmailManagementTc {}",mktmailManagementTc);
+		
+		return mailtempletDao.getMktmailPreviewGoodsList(mktmailManagementTc);
+	}
+	
 	/**
 	 * MKT 상세 등록/수정
 	 * @param mktmailManagement - 메일관련 정보
@@ -342,7 +358,7 @@ public class TsaMailTemplateService {
 			mktmailtc.setMailtcLink(mailtcLink);
 			mktmailtc.setGoodsCpr(goodsCpr);
 			mktmailtc.setMailtSq(mktmail.getMailtSq());
-			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
+			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());
 							
 			log.info("mktmailManagementTc : {}",mktmailManagementTc.getMailtcSq());
 			

+ 2 - 10
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1126,8 +1126,6 @@ public class TsaMarketingController extends TsaBaseController {
 				map.set("goodsList", goodsList);
 				map.set("tc", tmp);
 				
-				log.info("goodsList {}",goodsList);
-				log.info("tc {}",tmp);
 				mapList.add(map);
 			}
 			
@@ -1254,22 +1252,16 @@ public class TsaMarketingController extends TsaBaseController {
 		//내용
 		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());
+				Collection<MktmailManagementGoods> goodsList = mailTemplateService.getMktmailPreviewGoodsList(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);
 			}
 		

+ 1 - 0
src/main/java/com/style24/persistence/domain/MktmailManagementGoods.java

@@ -28,5 +28,6 @@ public class MktmailManagementGoods extends TscBaseDomain{
 	private String goodsStat;				// 판매상태
 	private String listPrice;				// 정상가
 	private String currPrice;				// 판매가
+	private String sysImgNm;				// 이미지정보
 
 }

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

@@ -1422,6 +1422,8 @@
 		    LEFT OUTER JOIN TB_GOODS_COMPOSE B ON A.GOODS_CD = B.GOODS_CD
 		    WHERE A.GOODS_CD = #{goodsCd}
 		    )
+		SELECT * 
+		FROM (
 		SELECT #{goodsCd} AS GOODS_CD
 		     , A.GOODS_CD AS COMPS_GOODS_CD
 		     , A.OPT_CD
@@ -1436,6 +1438,7 @@
 		     , A.SOLDOUT_YN
 		     , A.DISP_ORD
 		     , A.DISP_YN
+		     , C.DISP_ORD AS GOODS_ORD
 		     , COUNT(*) OVER(PARTITION BY A.GOODS_CD ) AS RCOUNT
 		     , ROW_NUMBER() OVER(PARTITION BY A.GOODS_CD ORDER BY A.DISP_ORD, A.OPT_CD1, A.OPT_CD2) AS RNUM
 		FROM  TMP_GOODS C 
@@ -1454,7 +1457,8 @@
 		             AND A.OPT_CD = B.OPT_CD)
 		WHERE 1 = 1
 		AND C.GOODS_CD = #{goodsCd}
-		ORDER BY C.DISP_ORD, A.DISP_ORD, A.OPT_CD1, A.OPT_CD2
+		) Z
+		ORDER BY GOODS_ORD, RNUM
 	</select>
 	
 	<!-- 상품 색상목록 조회 -->
@@ -1469,7 +1473,7 @@
 		FROM (
 		      SELECT A.GOODS_CD 
 		           , A.MAIN_COLOR_CD 
-		           , IFNULL(B.OPT_CD1,'00') AS OPT_CD1
+		           , IFNULL(B.OPT_CD1,'XX') AS OPT_CD1
 		      FROM TB_GOODS A
 		      LEFT OUTER JOIN TB_OPTION B ON A.GOODS_CD = B.GOODS_CD
 		                                  AND 1 = (CASE WHEN A.SELF_GOODS_YN = 'Y' THEN 1

+ 40 - 18
src/main/java/com/style24/persistence/mybatis/shop/TsaMailTemplate.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.style24.admin.biz.dao.TsaMailTemplateDao">
 
 		<select id="getmailHFList" parameterType="MailTemplate" resultType="MailTemplate">
-		/* TsaMailTemplate.getmailHFList */
+		/* TsaMailTemplate.getmailHFList 메일헤더푸터리스트*/
 		SELECT MAILHF_SQ                                             /*메일헤더푸터 일련번호*/
 		   	 , MAILHF_NM                                             /*메일헤더푸터 명*/
 		     , MAILHF_GB                                             /*메일 헤더푸터 구분 H:헤더 F:푸터*/
@@ -61,7 +61,7 @@
 		</insert>
 	
 		<select id="getMailHFDetail" parameterType="Integer" resultType="MailTemplate">
-		/* TsaMailTemplate.getMailHFDetail */
+		/* TsaMailTemplate.getMailHFDetail 메일헤더푸터 상세화면 */
 		SELECT MAILHF_SQ
 		     , MAILHF_NM
 		     , MAILHF_GB
@@ -71,14 +71,14 @@
 		</select>
 	
 		<update id='deleteMailHFList' parameterType='MailTemplate'>
-		/* TsaMailTemplate.deleteMailHFList */
+		/* TsaMailTemplate.deleteMailHFList 메일헤더푸터리스트삭제*/
 		UPDATE TB_MAILHF
 		SET    USE_YN = 'N'
 		WHERE  MAILHF_SQ = #{mailhfSq}
 		</update>
 	
 		<select id="getMailGoodsInfo" parameterType="Goods" resultType="Goods">
-		/*메일 템플릿 상품 전시*/
+		/*TsaMailTemplate.getMailGoodsInfo 메일 템플릿 상품 전시*/
 		SELECT GOODS_CD
 		     , BRAND_ENM 
 		     , GOODS_NM
@@ -130,7 +130,7 @@
 		</select>
 	
 		<insert id="saveMktmailform" parameterType="mktMailManagement" keyProperty="mailtSq">
-		/* TsaMailTemplate.saveMktmailform   mkt메일 등록/수정 */
+		/* TsaMailTemplate.saveMktmailform mkt메일 등록 수정 */
 		INSERT INTO TB_MAILT (
 				    MAILT_SQ
 				  , MAILT_NM
@@ -169,7 +169,7 @@
 		</insert>
 	
 		<insert id="saveMailTc" parameterType="MktmailManagement" keyProperty="mailtcSq">
-		/* TsaMailTemplate.saveMailTc 메일구분자 */
+		/* TsaMailTemplate.saveMailTc mkt메일 구분자 등록 */
 		INSERT INTO TB_MAILTC ( 
 				    MAILTC_SQ
 				  , MAILT_SQ
@@ -205,7 +205,7 @@
 		</insert>
 	
 		<insert id="saveMailGoods" parameterType="MktmailManagement" keyProperty="mailtcSq">
-		/* TsaMailTemplate.saveMailGoods 메일 전시상품등록 */
+		/* TsaMailTemplate.saveMailGoods mkt메일 상품등록 */
 		INSERT INTO TB_MAILTC_GOODS (
 				    MAILTC_SQ
 				  , GOODS_CD
@@ -233,7 +233,7 @@
 		</insert>
 		
 		<select id="getMktMailList" parameterType="MktmailManagement" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktMailList mkt메일 조회*/
+		/* TsaMailTemplate.getMktMailList mkt메일 리스트*/
 		SELECT 		   TM.MAILT_SQ
 					 , TM.MAILT_GB
 					 , TM.MAILT_NM
@@ -258,7 +258,7 @@
 		</select>
 		
 		<select id="getMktmailManagementDetail" parameterType="Integer" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailManagementDetail */
+		/* TsaMailTemplate.getMktmailManagementDetail mkt메일 상세화면*/
 		SELECT MAILT_SQ
 			 , MAILT_GB
 			 , MAILH_SQ
@@ -270,7 +270,7 @@
 		</select>
 		
 		<select id="getMktmailManagementTCList" parameterType="MktmailManagementTc" resultType="MktmailManagementTc">
-		/* TsaMailTemplate.getMktmailManagementTCDetail */
+		/* TsaMailTemplate.getMktmailManagementTCDetail mkt메일 구분자 상세화면*/
 		SELECT 		TC.MAILTC_SQ
 			 	  , TC.MAILT_SQ	
 			 	  , TC.MAILTC_NM
@@ -284,8 +284,8 @@
 		</select>
 		
 		<select id="getMktmailManagementGoodsList" parameterType="MktmailManagementTc" resultType="MktmailManagementGoods">
-		/* TsaMailTemplate.getMktmailManagementGoodsList */
-		 SELECT		TG.MAILTC_SQ
+		/* TsaMailTemplate.getMktmailManagementGoodsList mkt메일 상품 상세화면*/
+		SELECT		TG.MAILTC_SQ
 				  , TG.GOODS_CD
 			      , TBRAND.BRAND_ENM 
 			      , tbg.GOODS_NM 
@@ -304,29 +304,51 @@
 		ORDER  BY 	TG.DISP_ORD
 		</select>
 		
+		<select id="getMktmailPreviewGoodsList" parameterType="MktmailManagementTc" resultType="MktmailManagementGoods">
+		/* TsaMailTemplate.getMktmailPreviewGoodsList mkt메일 미리보기 상품정보 호출*/
+		SELECT		TG.MAILTC_SQ
+				  ,	IMG.SYS_IMG_NM
+			      , TBRAND.BRAND_ENM 
+			      , tbg.GOODS_NM 
+			      , TBG.LIST_PRICE 
+			      , TBG.CURR_PRICE
+		FROM 		TB_MAILTC_GOODS TG
+		INNER JOIN  TB_MAILTC TC
+		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
+		INNER JOIN  TB_GOODS_IMG IMG
+		ON  		IMG.GOODS_CD = TG.GOODS_CD
+		WHERE 		TC.MAILTC_SQ = #{mailtcSq}
+		AND 		IMG.DEFAULT_IMG_YN = 'Y'
+		ORDER  BY 	TG.DISP_ORD
+		</select>
+		
 		<update id='deleteMktmailList' parameterType='MktmailManagement'>
-		/* TsaMailTemplate.deleteMailHFList 리스트 삭제*/
+		/* TsaMailTemplate.deleteMailHFList mkt메일 리스트 삭제*/
 		UPDATE  TB_MAILT
 	  	SET     USE_YN = 'N'
 		WHERE   MAILT_SQ = #{mailtSq}
 		</update>
 		
 		<delete id="deleteMktCorner" parameterType='MktmailManagementTc'>
-		/* TsaMailTemplate.deleteMktCorner 코너 삭제*/
+		/* TsaMailTemplate.deleteMktCorner mkt메일 구분자 삭제*/
 		UPDATE  TB_MAILTC
 		SET		USE_YN = 'N'
 		WHERE	MAILTC_SQ = #{mailtcSq}
 		</delete>
 		
 		<delete id="deleteMktGoodsList" parameterType='MktmailManagementGoods'>
-		/* TsaMailTemplate.deleteMktGoods 상품 삭제*/
+		/* TsaMailTemplate.deleteMktGoods mkt메일 상품 삭제*/
 		DELETE 	
 		FROM	TB_MAILTC_GOODS
 		WHERE	MAILTC_SQ = #{mailtcSq}
 		</delete>
 		
 		<select id="getMktmailPreviewHeader" parameterType="Integer" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailPreviewHeader */
+		/* TsaMailTemplate.getMktmailPreviewHeader mkt메일 미리보기 헤더 호출*/
 		SELECT 		HF.MAILHF_CONTENT
 		FROM   		TB_MAILT TM
 		INNER JOIN  TB_MAILHF HF
@@ -336,7 +358,7 @@
 		</select>
 		
 		<select id="getMktmailPreviewFooter" parameterType="Integer" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailPreviewFooter */
+		/* TsaMailTemplate.getMktmailPreviewFooter mkt메일 미리보기 푸터 호출*/
 		SELECT 		HF.MAILHF_CONTENT
 		FROM   		TB_MAILT TM
 		INNER JOIN  TB_MAILHF HF
@@ -346,7 +368,7 @@
 		</select>
 		
 		<select id="getMktmailPreviewContent" parameterType="MktmailManagement" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailPreviewContent */
+		/* TsaMailTemplate.getMktmailPreviewContent mkt메일 미리보기 내용 호출*/
 		SELECT 		MAILT_NM
 				  , MAIL_CONTENT
 		FROM		TB_MAILT

+ 182 - 30
src/main/webapp/WEB-INF/views/envset/BasicEnvsetForm.html

@@ -112,10 +112,10 @@
 				</tbody>
 			</table>
 			
-			<h4>[B11] 기본설정</h4>
-			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('B11');">저장</button>
-			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('B11', '기본설정');">이력보기</button>
-			<table class="frmStyle" aria-describedby="기본설정">
+			<h4>[C10] 회원기본설정</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('C10');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('C10', '회원기본설정');">이력보기</button>
+			<table class="frmStyle" aria-describedby="회원기본설정">
 				<colgroup>
 					<col style="width: 15%;"/>
 					<col/>
@@ -123,23 +123,19 @@
 				<tbody>
 					<tr>
 						<th>탈퇴후재가입불가기간(일)</th>
-						<td><input name="b11StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="탈퇴후재가입불가기간"/><span class="cRed">개월</span> 동안 탈퇴 후 재가입 불가합니다.</td>
+						<td><input name="c10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="탈퇴후재가입불가기간"/><span class="cRed"></span> 동안 탈퇴 후 재가입 불가합니다.</td>
 					</tr>
 					<tr>
-						<th>휴면회선정기간(일)</th>
-						<td><input name="b11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원선정기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 선정합니다.</td>
+						<th>휴면회선정기간(일)</th>
+						<td><input name="c10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원선정기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 선정합니다.</td>
 					</tr>
 					<tr>
 						<th>휴면회원전환기간(일)</th>
-						<td><input name="b11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원전환기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 전환합니다.</td>
+						<td><input name="c10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원전환기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 전환합니다.</td>
 					</tr>
 					<tr>
 						<th>회원등급산정기간</th>
-						<td>직전월 이전 <input name="b11StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="회원등급산정기간"/><span class="cRed">개월</span> 기간 동안의 구매금액(실결제금액)과 구매건수를 기준으로 월초에 산정합니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자세한 사항은 "<span class="cRed">운영관리 > 환경설정 > 회원등급정책관리</span>" 화면을 참조해 주세요.</span></td>
-					</tr>
-					<tr>
-						<th>무료배송비최소주문금액</th>
-						<td>최소주문금액이 <input name="b11StrSetVal5" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="무료배송비최소주문금액"/> 원 이상이면 배송비가 무료입니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>이 값은 기본값이며 공급업체별로 다르게 설정할 수도 있습니다.</span></td>
+						<td>전월 기준 최근 <input name="c10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="회원등급산정기간"/><span class="cRed">개월</span> 기간 동안의 구매금액(실결제금액)과 구매건수를 기준으로 월초에 산정합니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자세한 사항은 "<span class="cRed">운영관리 > 환경설정 > 회원등급정책관리</span>" 화면을 참조해 주세요.</span></td>
 					</tr>
 				</tbody>
 			</table>
@@ -170,9 +166,9 @@
 						</td>
 					</tr>
 					<tr>
-						<th>특가세일노출기준</th>
+						<th>베스트상품노출개수</th>
 						<td>
-							상품 썸네일 리스트의 가격은 할인율이 <input name="g10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name=""/><span class="cRed">%</span> 이상일 경우 TAG가와 할인율 대신 <span class="infoTxt cBlue">'특가세일'</span>로 표기됩니다.
+							카테고리와 아울렛의 베스트 영역에 상품이 <input name="g10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer"/> 개 만큼만 노출됩니다.
 						</td>
 					</tr>
 				</tbody>
@@ -209,6 +205,107 @@
 					</tr>
 				</tbody>
 			</table>
+			
+			<h4>[O10] 주문/결제</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('O10');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('O10', '주문/결제');">이력보기</button>
+			<table class="frmStyle" aria-describedby="주문/결제">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>결제단위</th>
+						<td>
+							<select name="o10StrSetVal1">
+								<option value="">[선택]</option>
+								<option value="1">일원 단위</option>
+								<option value="10">십원 단위</option>
+								<option value="100">백원 단위</option>
+							</select>
+							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>주문 시의 결제단위 입니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>최소결제금액</th>
+						<td>
+							한 번의 결제 시 상품의 실결제금액이 <input name="o10StrSetVal2" type="text" class="w100 aR" maxlength="7" data-valid-type="integer" data-valid-name="최소결제금액"/> <span class="cRed">원</span> 보다 적을 경우 결제가 불가합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>무료배송비최소주문금액</th>
+						<td>최소주문금액이 <input name="o10StrSetVal3" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="무료배송비최소주문금액"/> 원 이상이면 배송비가 무료입니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>이 값은 기본값이며 공급업체별로 다르게 설정할 수도 있습니다.</span></td>
+					</tr>
+					<tr>
+						<th>총알배송주문가능시간</th>
+						<td>
+							오전 <input name="o10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="총알배송주문가능시간"/> <span class="cRed">시</span> 까지 주문한 자사상품은 총알배송이 가능합니다.
+						</td>
+					</tr>
+				</tbody>
+			</table>
+			
+			<h4>[O11] 품절안내</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('O11');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('O11', '품절안내');">이력보기</button>
+			<table class="frmStyle" aria-describedby="품절안내">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col style="width: 85%;"/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>품절안내방법</th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="o11StrSetVal1" value="A"/>자동</label>
+							<label class="rdoBtn"><input type="radio" name="o11StrSetVal1" value="M" checked="checked"/>수동</label>
+						</td>
+					</tr>
+					<tr>
+						<th>품절안내메시지자동발송기간(일)</th>
+						<td>
+							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="자동품절안내메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절안내 메시지를 자동으로 발송합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>품절메시지자동발송기간(일)</th>
+						<td>
+							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="자동품절메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절 메시지를 자동으로 발송합니다.
+						</td>
+					</tr>
+				</tbody>
+			</table>
+			
+			<h4>[D10] 배송/구매확정/반품</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('D10');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('D10', '배송/구매확정/반품');">이력보기</button>
+			<table class="frmStyle" aria-describedby="배송/구매확정/반품">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col style="width: 85%;"/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>배송완료자동처리기간(일)</th>
+						<td>
+							<span class="cRed">배송중</span> 상태를 기준으로 <input name="d10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="배송완료자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 배송완료로 처리합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>구매확정자동처리기간(일)</th>
+						<td>
+							배송완료일 기준으로 <input name="d10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="구매확정자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 구매확정 처리합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>반품가능기간(일)</th>
+						<td>
+							배송완료 후 <input name="d10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="반품가능기간"/><span class="cRed">일</span> 내에 반품 신청 및 접수가 가능합니다.
+						</td>
+					</tr>
+				</tbody>
+			</table>
 		</div>
 	</div>
 
@@ -245,16 +342,15 @@
 					}
 				});
 
-		// 기본설정
-		$.getJSON(actionUrl + '/B11'
+		// 회원기본설정
+		$.getJSON(actionUrl + '/C10'
 				, function(result, status) {
 					if (status === 'success') {
 						if (!gagajf.isNull(result)) {
-							$('input[name=b11StrSetVal1]').val(result.strSetVal1);
-							$('input[name=b11StrSetVal2]').val(result.strSetVal2);
-							$('input[name=b11StrSetVal3]').val(result.strSetVal3);
-							$('input[name=b11StrSetVal4]').val(result.strSetVal4);
-							$('input[name=b11StrSetVal5]').val(gagajf.isNull(result.strSetVal5) ? result.strSetVal5 : result.strSetVal5.addComma());
+							$('input[name=c10StrSetVal1]').val(result.strSetVal1);
+							$('input[name=c10StrSetVal2]').val(result.strSetVal2);
+							$('input[name=c10StrSetVal3]').val(result.strSetVal3);
+							$('input[name=c10StrSetVal4]').val(result.strSetVal4);
 						}
 					}
 				});
@@ -294,6 +390,48 @@
 						}
 					}
 				});
+		
+		// 주문/결제
+		$.getJSON(actionUrl + '/O10'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$('select[name=o10StrSetVal1]').val(result.strSetVal1);
+							$('input[name=o10StrSetVal2]').val(gagajf.isNull(result.strSetVal2) ? result.strSetVal2 : result.strSetVal2.addComma());
+							$('input[name=o10StrSetVal3]').val(gagajf.isNull(result.strSetVal3) ? result.strSetVal3 : result.strSetVal3.addComma());
+							$('input[name=o10StrSetVal4]').val(result.strSetVal4);
+						}
+					}
+				});
+		
+		// 품절안내
+		$.getJSON(actionUrl + '/O11'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$("input:radio[name=o11StrSetVal1]").parents('td').find('label').removeClass('checked');
+							if (result.strSetVal1 == 'Y') {
+								$("input:radio[name=o11StrSetVal1]").eq(0).prop('checked', true);
+							} else {
+								$("input:radio[name=o11StrSetVal1]").eq(1).prop('checked', true);
+							}
+							$('input[name=o11StrSetVal2]').val(result.strSetVal2);
+							$('input[name=o11StrSetVal3]').val(result.strSetVal3);
+						}
+					}
+				});
+		
+		// 배송/구매확정/반품
+		$.getJSON(actionUrl + '/D10'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$('input[name=d10StrSetVal1]').val(result.strSetVal1);
+							$('input[name=d10StrSetVal2]').val(result.strSetVal2);
+							$('input[name=d10StrSetVal3]').val(result.strSetVal3);
+						}
+					}
+				});
 	}
 
 	// 파일첨부 선택 시
@@ -337,14 +475,12 @@
 			params.strSetVal4 = $('input[name=b10StrSetVal4SysFileNm]').val();
 			params.strSetVal5 = $('input[name=b10StrSetVal5]').val();
 			params.strSetVal6 = $('input[name=b10StrSetVal6SysFileNm]').val();
-		} else if (envsetType == 'B11') { // 기본설정
-			params.envsetNm = '기본설정';
-			params.strSetVal1 = $('input[name=b11StrSetVal1]').val();
-			params.strSetVal2 = $('input[name=b11StrSetVal2]').val();
-			params.strSetVal3 = $('input[name=b11StrSetVal3]').val();
-			params.strSetVal4 = $('input[name=b11StrSetVal4]').val();
-			params.strSetVal5 = $('input[name=b11StrSetVal5]').val().removeComma();
-			params.strSetVal6 = $('input[name=b10StrSetVal6SysFileNm]').val();
+		} else if (envsetType == 'C10') { // 회원기본설정
+			params.envsetNm = '회원기본설정';
+			params.strSetVal1 = $('input[name=c10StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=c10StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=c10StrSetVal3]').val();
+			params.strSetVal4 = $('input[name=c10StrSetVal4]').val();
 		} else if (envsetType == 'G10') { // 상품노출
 			params.envsetNm = '상품노출';
 			params.strSetVal1 = $('input:radio[name=g10StrSetVal1]:checked').val();
@@ -355,6 +491,22 @@
 			params.strSetVal1 = $('input[name=g11StrSetVal1]').val();
 			params.strSetVal2 = $('input[name=g11StrSetVal2]').val();
 			params.strSetVal3 = $('input[name=g11StrSetVal3]').val();
+		} else if (envsetType == 'O10') { // 주문/결제
+			params.envsetNm = '주문/결제';
+			params.strSetVal1 = $('select[name=o10StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=o10StrSetVal2]').val().removeComma();
+			params.strSetVal3 = $('input[name=o10StrSetVal3]').val().removeComma();
+			params.strSetVal4 = $('input[name=o10StrSetVal4]').val();
+		} else if (envsetType == 'O11') { // 품절안내
+			params.envsetNm = '품절안내';
+			params.strSetVal1 = $('input:radio[name=o11StrSetVal1]:checked').val();
+			params.strSetVal2 = $('input[name=o11StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=o11StrSetVal3]').val();
+		} else if (envsetType == 'D10') { // 배송/구매확정/반품
+			params.envsetNm = '배송/구매확정/반품';
+			params.strSetVal1 = $('input[name=d10StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=d10StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=d10StrSetVal3]').val();
 		}
 
 		var jsonData = JSON.stringify(params);

+ 506 - 0
src/main/webapp/WEB-INF/views/envset/BenefitEnvsetForm.html

@@ -0,0 +1,506 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : BenefieEnvsetForm.html
+ * @desc    : 회원혜택설정 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.21   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<table class="frmStyle" aria-describedby="검색조건">
+				<colgroup>
+					<col style="width:10%;"/>
+					<col/>
+				</colgroup>
+				<tr>
+					<th>사이트</th>
+					<td>
+						<select name="siteCd" class="w150" onchange="fnSearch();">
+							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<div class="panelStyle">
+			<h4>[C14] 포인트적립-회원포인트</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('C14');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('C14', '포인트적립-회원포인트');">이력보기</button>
+			
+			<table class="frmStyle" aria-describedby="포인트적립-회원포인트">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>가입축하포인트</th>
+						<td>
+							<input name="c14StrSetVal1" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="가입축하포인트"/>
+							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>회원가입 시 적립해 줄 기본 포인트입니다.</span>
+							<span class="cRed">단, 성별, 생년월일을 입력하고 SMS 및 E-MAIL 수신동의 시 </span><input name="c14StrSetVal2" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="가입축하추가포인트"/><span class="cRed">포인트를 추가로 적립해 줍니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>생일축하포인트</th>
+						<td>
+							<input name="p10NumSetVal2" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="생일축하포인트"/>
+							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>회원의 생일 도래 </span><input name="p10NumSetVal3" type="text" class="w20 aR" maxlength="2" data-valid-type="integer" data-valid-name="생일도래시점"/><span class="cRed">일</span><span class="cBlue">전 적립해 줄 포인트입니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>앱설치후최초로그인포인트</th>
+						<td>
+							<input name="p10NumSetVal4" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="앱설치후최초로그인포인트"/>
+							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>앱 설치 후 앱을 통해서 로그인을 했을 때 최초 한 번만 적립해 줄 포인트입니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>출석체크1일포인트</th>
+						<td>
+							<input name="p10NumSetVal5" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="출석체크1일포인트"/>
+							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>출석체크 이벤트 하루 체크 시 적립해 줄 포인트입니다.</span>
+						</td>
+					</tr>
+				</tbody>
+			</table>
+			
+			<h4>[C10] 회원기본설정</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('C10');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('C10', '회원기본설정');">이력보기</button>
+			<table class="frmStyle" aria-describedby="회원기본설정">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>탈퇴후재가입불가기간(일)</th>
+						<td><input name="c10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="탈퇴후재가입불가기간"/><span class="cRed">일</span> 동안 탈퇴 후 재가입 불가합니다.</td>
+					</tr>
+					<tr>
+						<th>휴면회선정기간(일)</th>
+						<td><input name="c10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원선정기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 선정합니다.</td>
+					</tr>
+					<tr>
+						<th>휴면회원전환기간(일)</th>
+						<td><input name="c10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원전환기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 전환합니다.</td>
+					</tr>
+					<tr>
+						<th>회원등급산정기간</th>
+						<td>전월 기준 최근 <input name="c10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="회원등급산정기간"/><span class="cRed">개월</span> 기간 동안의 구매금액(실결제금액)과 구매건수를 기준으로 월초에 산정합니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자세한 사항은 "<span class="cRed">운영관리 > 환경설정 > 회원등급정책관리</span>" 화면을 참조해 주세요.</span></td>
+					</tr>
+				</tbody>
+			</table>
+			
+			<h4>[G10] 상품노출</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('G10');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('G10', '상품노출');">이력보기</button>
+			<table class="frmStyle" aria-describedby="상품노출">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col style="width: 85%;"/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>상품평노출여부</th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="g10StrSetVal1" value="Y" checked="checked"/>노출</label>
+							<label class="rdoBtn"><input type="radio" name="g10StrSetVal1" value="N">미노출</label>
+							<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>미노출로 설정 시 상품상세의 상품평 영역이 노출되지 않습니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>품절상품노출여부</th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="g10StrSetVal2" value="Y"/>노출</label>
+							<label class="rdoBtn"><input type="radio" name="g10StrSetVal2" value="N" checked="checked">미노출</label>
+							<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>품절된 상품을 사이트에 노출할지 말지를 설정합니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>베스트상품노출개수</th>
+						<td>
+							카테고리와 아울렛의 베스트 영역에 상품이 <input name="g10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer"/> 개 만큼만 노출됩니다.
+						</td>
+					</tr>
+				</tbody>
+			</table>
+
+			<h4>[G11] 상품보관</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('G11');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('G11', '상품보관');">이력보기</button>
+			<table class="frmStyle" aria-describedby="상품보관">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col style="width: 85%;"/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>장바구니보관기간(일)</th>
+						<td>
+							장바구니 보관기간은 <input name="g11StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="장바구니보관기간"/><span class="cRed">일</span> 입니다. 보관기간 경과 시 자동 삭제됩니다.
+							<span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 삭제 처리를 하지 않습니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>장바구니담기최대상품수</th>
+						<td>
+							장바구니에 담을 수 있는 최대 상품 개수는 <input name="g11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="장바구니보관기간"/><span class="cRed">개</span> 입니다.
+						</td>
+					</tr>
+					<tr>
+						<th>위시리스트보관기간(일)</th>
+						<td>
+							위시리스트 보관기간은 <input name="g11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="위시리스트보관기간"/><span class="cRed">일</span> 입니다. 보관기간 경과 시 자동 삭제됩니다.
+							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>0으로 설정하면 자동으로 삭제 처리를 하지 않습니다.</span>
+						</td>
+					</tr>
+				</tbody>
+			</table>
+			
+			<h4>[O10] 주문/결제</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('O10');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('O10', '주문/결제');">이력보기</button>
+			<table class="frmStyle" aria-describedby="주문/결제">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>결제단위</th>
+						<td>
+							<select name="o10StrSetVal1">
+								<option value="">[선택]</option>
+								<option value="1">일원 단위</option>
+								<option value="10">십원 단위</option>
+								<option value="100">백원 단위</option>
+							</select>
+							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>주문 시의 결제단위 입니다.</span>
+						</td>
+					</tr>
+					<tr>
+						<th>최소결제금액</th>
+						<td>
+							한 번의 결제 시 상품의 실결제금액이 <input name="o10StrSetVal2" type="text" class="w100 aR" maxlength="7" data-valid-type="integer" data-valid-name="최소결제금액"/> <span class="cRed">원</span> 보다 적을 경우 결제가 불가합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>무료배송비최소주문금액</th>
+						<td>최소주문금액이 <input name="o10StrSetVal3" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="무료배송비최소주문금액"/> 원 이상이면 배송비가 무료입니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>이 값은 기본값이며 공급업체별로 다르게 설정할 수도 있습니다.</span></td>
+					</tr>
+					<tr>
+						<th>총알배송주문가능시간</th>
+						<td>
+							오전 <input name="o10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="총알배송주문가능시간"/> <span class="cRed">시</span> 까지 주문한 자사상품은 총알배송이 가능합니다.
+						</td>
+					</tr>
+				</tbody>
+			</table>
+			
+			<h4>[O11] 품절안내</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('O11');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('O11', '품절안내');">이력보기</button>
+			<table class="frmStyle" aria-describedby="품절안내">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col style="width: 85%;"/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>품절안내방법</th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="o11StrSetVal1" value="A"/>자동</label>
+							<label class="rdoBtn"><input type="radio" name="o11StrSetVal1" value="M" checked="checked"/>수동</label>
+						</td>
+					</tr>
+					<tr>
+						<th>품절안내메시지자동발송기간(일)</th>
+						<td>
+							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="자동품절안내메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절안내 메시지를 자동으로 발송합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>품절메시지자동발송기간(일)</th>
+						<td>
+							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="자동품절메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절 메시지를 자동으로 발송합니다.
+						</td>
+					</tr>
+				</tbody>
+			</table>
+			
+			<h4>[D10] 배송/구매확정/반품</h4>
+			<button type="button" class="btn btn-success btn-ssm" onclick="fnSave('D10');">저장</button>
+			<button type="button" class="btn btn-info btn-ssm" onclick="fnOpenEnvsetPopup('D10', '배송/구매확정/반품');">이력보기</button>
+			<table class="frmStyle" aria-describedby="배송/구매확정/반품">
+				<colgroup>
+					<col style="width: 15%;"/>
+					<col style="width: 85%;"/>
+				</colgroup>
+				<tbody>
+					<tr>
+						<th>배송완료자동처리기간(일)</th>
+						<td>
+							<span class="cRed">배송중</span> 상태를 기준으로 <input name="d10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="배송완료자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 배송완료로 처리합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>구매확정자동처리기간(일)</th>
+						<td>
+							배송완료일 기준으로 <input name="d10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="구매확정자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 구매확정 처리합니다.
+						</td>
+					</tr>
+					<tr>
+						<th>반품가능기간(일)</th>
+						<td>
+							배송완료 후 <input name="d10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="반품가능기간"/><span class="cRed">일</span> 내에 반품 신청 및 접수가 가능합니다.
+						</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// 조회
+	var fnSearch = function() {
+		var siteCd = $('select[name=siteCd]').val();
+		var actionUrl = '/envset/' + siteCd;
+
+		// 쇼핑몰Meta정보
+		$.getJSON(actionUrl + '/B10'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$('input[name=b10StrSetVal1]').val(result.strSetVal1);
+							$('input[name=b10StrSetVal2]').val(result.strSetVal2);
+							$('input[name=b10StrSetVal3]').val(result.strSetVal3);
+							
+							if (!gagajf.isNull(result.strSetVal4)) {
+								$('input[name=b10StrSetVal4SysFileNm]').val(result.strSetVal4);
+								$('#b10StrSetVal4FileDownload').html(result.strSetVal4);
+								$('#b10StrSetVal4FileDownload').show();
+							}
+							
+							$('input[name=b10StrSetVal5]').val(result.strSetVal5);
+							
+							if (!gagajf.isNull(result.strSetVal6)) {
+								$('input[name=b10StrSetVal6SysFileNm]').val(result.strSetVal6);
+								$('#b10StrSetVal6FileDownload').html(result.strSetVal6);
+								$('#b10StrSetVal6FileDownload').show();
+							}
+						}
+					}
+				});
+
+		// 회원기본설정
+		$.getJSON(actionUrl + '/C10'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$('input[name=c10StrSetVal1]').val(result.strSetVal1);
+							$('input[name=c10StrSetVal2]').val(result.strSetVal2);
+							$('input[name=c10StrSetVal3]').val(result.strSetVal3);
+							$('input[name=c10StrSetVal4]').val(result.strSetVal4);
+						}
+					}
+				});
+		
+		// 상품노출
+		$.getJSON(actionUrl + '/G10'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$("input:radio[name=g10StrSetVal1]").parents('td').find('label').removeClass('checked');
+							if (result.strSetVal1 == 'Y') {
+								$("input:radio[name=g10StrSetVal1]").eq(0).prop('checked', true);
+							} else {
+								$("input:radio[name=g10StrSetVal1]").eq(1).prop('checked', true);
+							}
+
+							$("input:radio[name=g10StrSetVal2]").parents('td').find('label').removeClass('checked');
+							if (result.strSetVal2 == 'Y') {
+								$("input:radio[name=g10StrSetVal2]").eq(0).prop('checked', true);
+							} else {
+								$("input:radio[name=g10StrSetVal2]").eq(1).prop('checked', true);
+							}
+							
+							$('input[name=g10StrSetVal3]').val(result.strSetVal3);
+						}
+					}
+				});
+
+		// 상품보관
+		$.getJSON(actionUrl + '/G11'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$('input[name=g11StrSetVal1]').val(result.strSetVal1);
+							$('input[name=g11StrSetVal2]').val(result.strSetVal2);
+							$('input[name=g11StrSetVal3]').val(result.strSetVal3);
+						}
+					}
+				});
+		
+		// 주문/결제
+		$.getJSON(actionUrl + '/O10'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$('select[name=o10StrSetVal1]').val(result.strSetVal1);
+							$('input[name=o10StrSetVal2]').val(gagajf.isNull(result.strSetVal2) ? result.strSetVal2 : result.strSetVal2.addComma());
+							$('input[name=o10StrSetVal3]').val(gagajf.isNull(result.strSetVal3) ? result.strSetVal3 : result.strSetVal3.addComma());
+							$('input[name=o10StrSetVal4]').val(result.strSetVal4);
+						}
+					}
+				});
+		
+		// 품절안내
+		$.getJSON(actionUrl + '/O11'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$("input:radio[name=o11StrSetVal1]").parents('td').find('label').removeClass('checked');
+							if (result.strSetVal1 == 'Y') {
+								$("input:radio[name=o11StrSetVal1]").eq(0).prop('checked', true);
+							} else {
+								$("input:radio[name=o11StrSetVal1]").eq(1).prop('checked', true);
+							}
+							$('input[name=o11StrSetVal2]').val(result.strSetVal2);
+							$('input[name=o11StrSetVal3]').val(result.strSetVal3);
+						}
+					}
+				});
+		
+		// 배송/구매확정/반품
+		$.getJSON(actionUrl + '/D10'
+				, function(result, status) {
+					if (status === 'success') {
+						if (!gagajf.isNull(result)) {
+							$('input[name=d10StrSetVal1]').val(result.strSetVal1);
+							$('input[name=d10StrSetVal2]').val(result.strSetVal2);
+							$('input[name=d10StrSetVal3]').val(result.strSetVal3);
+						}
+					}
+				});
+	}
+
+	// 파일첨부 선택 시
+	$('#b10StrSetVal4').on('change', function() { fnChooseFile(this); });
+	$('#b10StrSetVal6').on('change', function() { fnChooseFile(this); });
+
+	var fnChooseFile = function(obj) {
+		// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
+		var file = obj.files[0];
+
+		// 파일 업로드
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/envset'
+				, file
+				, function(result) {
+					// 업로드한 파일명 설정
+					$('input[name=' + obj.name + 'OrgFileNm]').val(result.oldFileName);
+					$('input[name=' + obj.name + 'SysFileNm]').val(result.newFileName);
+				}
+		);
+	}
+
+	// 파일다운로드
+	var fnDownloadFile = function(id) {
+		$('#' + id + 'FileDownload').attr({
+			href : _uploadDefaultUrl + '/envset/' + $('input[name=' + id + 'SysFileNm]').val(),
+			target: '_blank'
+		}).get(0).click();
+	}
+
+	// 저장 처리
+	var fnSave = function(envsetType) {
+		var params = new Object();
+		params.siteCd = $('select[name=siteCd]').val();
+		params.envsetType = envsetType;
+
+		if (envsetType == 'B10') { // 쇼핑몰Meta정보
+			params.envsetNm = '쇼핑몰Meta정보';
+			params.strSetVal1 = $('input[name=b10StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=b10StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=b10StrSetVal3]').val();
+			params.strSetVal4 = $('input[name=b10StrSetVal4SysFileNm]').val();
+			params.strSetVal5 = $('input[name=b10StrSetVal5]').val();
+			params.strSetVal6 = $('input[name=b10StrSetVal6SysFileNm]').val();
+		} else if (envsetType == 'C10') { // 회원기본설정
+			params.envsetNm = '회원기본설정';
+			params.strSetVal1 = $('input[name=c10StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=c10StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=c10StrSetVal3]').val();
+			params.strSetVal4 = $('input[name=c10StrSetVal4]').val();
+		} else if (envsetType == 'G10') { // 상품노출
+			params.envsetNm = '상품노출';
+			params.strSetVal1 = $('input:radio[name=g10StrSetVal1]:checked').val();
+			params.strSetVal2 = $('input:radio[name=g10StrSetVal2]:checked').val();
+			params.strSetVal3 = $('input[name=g10StrSetVal1]').val();
+		} else if (envsetType == 'G11') { // 상품보관
+			params.envsetNm = '상품보관';
+			params.strSetVal1 = $('input[name=g11StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=g11StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=g11StrSetVal3]').val();
+		} else if (envsetType == 'O10') { // 주문/결제
+			params.envsetNm = '주문/결제';
+			params.strSetVal1 = $('select[name=o10StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=o10StrSetVal2]').val().removeComma();
+			params.strSetVal3 = $('input[name=o10StrSetVal3]').val().removeComma();
+			params.strSetVal4 = $('input[name=o10StrSetVal4]').val();
+		} else if (envsetType == 'O11') { // 품절안내
+			params.envsetNm = '품절안내';
+			params.strSetVal1 = $('input:radio[name=o11StrSetVal1]:checked').val();
+			params.strSetVal2 = $('input[name=o11StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=o11StrSetVal3]').val();
+		} else if (envsetType == 'D10') { // 배송/구매확정/반품
+			params.envsetNm = '배송/구매확정/반품';
+			params.strSetVal1 = $('input[name=d10StrSetVal1]').val();
+			params.strSetVal2 = $('input[name=d10StrSetVal2]').val();
+			params.strSetVal3 = $('input[name=d10StrSetVal3]').val();
+		}
+
+		var jsonData = JSON.stringify(params);
+		gagajf.ajaxJsonSubmit('/envset/create', jsonData);
+	}
+
+	// 환경설정 이력보기 팝업
+	var fnOpenEnvsetPopup = function(envsetType, envsetTypeNm) {
+		var actionUrl = '/envset/history/form'
+				+ '?siteCd=' + $('select[name=siteCd]').val()
+				+ '&envsetType=' + envsetType
+				+ '&envsetTypeNm=' + encodeURIComponent(envsetTypeNm);
+		cfnOpenModalPopup(actionUrl, 'popupEnvset');
+	}
+	
+	$(document).ready(function() {
+		$('select[name=siteCd]').trigger('change');
+	});
+/*]]>*/
+</script>
+
+</html>

+ 33 - 32
src/main/webapp/WEB-INF/views/envset/EnvsetHistoryForm.html

@@ -34,6 +34,7 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 	var envsetType = [[${envsetType}]];
+	var payUintType = { "1":"일원 단위", "10":"십원 단위", "100":"백원 단위" };
 	var pointGiveType = { "A":"승인후지급", "D":"즉시지급" };
 	var pointUseType = { "A":"정액", "R":"정율" };
 
@@ -50,30 +51,17 @@
 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
 	];
 
-	// 기본설정
-	var columnDefsB11 = [
+	// 회원기본설정
+	var columnDefsC10 = [
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
-		{headerName: "탈퇴후재가입불가기간(월)", field: "strSetVal1", width: 150, cellClass: 'text-center'},
+		{headerName: "탈퇴후재가입불가기간(일)", field: "strSetVal1", width: 180, cellClass: 'text-center'},
 		{headerName: "휴면회원선정기간(일)", field: "strSetVal2", width: 150, cellClass: 'text-center'},
 		{headerName: "휴면회원전환기간(일)", field: "strSetVal3", width: 150, cellClass: 'text-center'},
 		{headerName: "회원등급산정기간(월)", field: "strSetVal4", width: 150, cellClass: 'text-center'},
-		{headerName: "무료배송비최소주문금액", field: "strSetVal5", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value);}},
 		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
 	];
 
-// 	// 회원혜택안내
-// 	var columnDefsB12 = [
-// 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
-// 		{headerName: "가입혜택안내배너(A)", field: "strSetVal1", width: 180},
-// 		{headerName: "가입혜택안내배너(B)", field: "strSetVal2", width: 180},
-// 		{headerName: "회원혜택안내배너", field: "strSetVal3", width: 180},
-// 		{headerName: "상품평혜택안내배너(상품상세)", field: "strSetVal4", width: 210},
-// 		{headerName: "상품평혜택안내배너(마이페이지)", field: "strSetVal5", width: 210},
-// 		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
-// 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
-// 	];
-
 	// 상품노출
 	var columnDefsG10 = [
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
@@ -93,24 +81,37 @@
 		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
 	];
+	
+	// 주문/결제
+	var columnDefsO10 = [
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "결제단위", field: "strSetVal1", width: 150, cellClass: 'text-center', valueFormatter: function (params) { return gagaAgGrid.lookupValue(payUintType, params.value); }},
+		{headerName: "최소결제금액(원)", field: "strSetVal2", width: 150, cellClass: 'text-center'},
+		{headerName: "무료배송비최소주문금액(원)", field: "strSetVal3", width: 180, cellClass: 'text-center'},
+		{headerName: "총알배송주문가능시간", field: "strSetVal4", width: 150, cellClass: 'text-center', cellRenderer: function(params) { return '오전 ' + params.value + '시'; }},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
+	];
 
-// 	// 품절안내
-// 	var columnDefsB14 = [
-// 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
-// 		{headerName: "품절안내방법", field: "strSetVal1", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return params.value == 'A' ? '발송' : '미발송'; }},
-// 		{headerName: "품절안내메시지발송기간", field: "strSetVal1", width: 150, cellClass: 'text-center'},
-// 		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
-// 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
-// 	];
+	// 품절안내
+	var columnDefsO11 = [
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "품절안내방법", field: "strSetVal1", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return params.value == 'A' ? '자동' : '수동'; }},
+		{headerName: "품절안내메시지발송기간(일)", field: "strSetVal2", width: 180, cellClass: 'text-center'},
+		{headerName: "품절메시지발송기간(일)", field: "strSetVal3", width: 180, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
+	];
 
-// 	// 배송/구매확정
-// 	var columnDefsB15 = [
-// 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
-// 		{headerName: "배송완료처리기간", field: "strSetVal1", width: 150, cellClass: 'text-center'},
-// 		{headerName: "구매확정처리기간", field: "strSetVal2", width: 150, cellClass: 'text-center'},
-// 		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
-// 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
-// 	];
+	// 배송/구매확정
+	var columnDefsD10 = [
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "배송완료자동처리기간(일)", field: "strSetVal1", width: 180, cellClass: 'text-center'},
+		{headerName: "구매확정자동처리기간(일)", field: "strSetVal2", width: 180, cellClass: 'text-center'},
+		{headerName: "반품가능기간(일)", field: "strSetVal3", width: 150, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }}
+	];
 
 // 	// 회원쿠폰
 // 	var columnDefsC10 = [

+ 7 - 0
src/main/webapp/WEB-INF/views/goods/GoodsDealForm.html

@@ -429,6 +429,7 @@
 		//대표여부 Y  존재하는지 확인
 		var checkRepYn = false;
 		optCheck = false;
+		var goodsCnt = 0;
 		$.each(allData, function(index, item) {
 			if (index == 0){
 				comSelfGoodsYn = item.selfGoodsYn;
@@ -487,12 +488,18 @@
 				}
 			}
 			
+			goodsCnt++;
 		});
 		
 		if(optCheck) {
 			return false;
 		}
 		
+		if (goodsCnt > 200){
+			mcxDialog.alert('딜 구성상품은 200개 초과 설정할수 없습니다.');
+			return false;
+		}
+		
 		if (!checkBaseYn){
 			mcxDialog.alert('구성상품중 기준여부를 선택해 주세요.');
 			return false;

+ 7 - 1
src/main/webapp/WEB-INF/views/goods/GoodsSetForm.html

@@ -373,6 +373,7 @@
 		//기준여부 Y  존재하는지 확인
 		var checkBaseYn = false;
 		optCheck = false;
+		var goodsCnt = 0;
 		$.each(allData, function(index, item) {
 			if (index == 0){
 				comSelfGoodsYn = item.selfGoodsYn;
@@ -427,13 +428,18 @@
 				}
 			}
 			
-			
+			goodsCnt++;
 		});
 		
 		if(optCheck) {
 			return false;
 		}
 		
+		if (goodsCnt > 5){
+			mcxDialog.alert('세트 구성상품은 5개 초과 설정할수 없습니다.');
+			return false;
+		}
+		
 		if (!checkBaseYn){
 			mcxDialog.alert('구성상품중 기준여부를 선택해 주세요.');
 			return false;

+ 41 - 22
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementDetailForm.html

@@ -125,7 +125,7 @@
 											<div class="">
 												<table  class="frmStyle">
 													<tr>
-														<th class="w100">구분자 명</th>
+														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
 														<td>
 															<input type="text" name="mailtcNm" maxlength="50"/>
 														</td>
@@ -139,10 +139,10 @@
 													<tr>
 														<th>상품 노출 기준
 															<div class="iconTooltip">
-																	<i class="fa fa-info" aria-hidden="true"></i>
-																	<span class="left aL" style="width:230px;">
-																		<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
-																	</span>
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
 															</div>
 														</th>
 														<td>
@@ -150,7 +150,6 @@
 															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="2"/>2개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="3" checked/>3개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="4"/>4개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="5"/>5개</label>
 														</td>
 													</tr>
 												</table>
@@ -190,7 +189,7 @@
 											<div class="">
 												<table  class="frmStyle">
 													<tr>
-														<th class="w100">구분자 명</th>
+														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
 														<td>
 															<input type="text" name="mailtcNm2" maxlength="50"/>
 														</td>
@@ -202,13 +201,19 @@
 														</td>
 													</tr>
 													<tr>
-														<th>상품 노출 기준</th>
+														<th>상품 노출 기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
 														<td>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="1"/>1개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="2"/>2개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="3" checked/>3개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="4"/>4개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="5"/>5개</label>
 														</td>
 													</tr>
 												</table>
@@ -247,7 +252,7 @@
 											<div class="">
 												<table  class="frmStyle">
 													<tr>
-														<th class="w100">구분자 명</th>
+														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
 														<td>
 															<input type="text" name="mailtcNm3" maxlength="50"/>								
 														</td>
@@ -259,13 +264,19 @@
 														</td>
 													</tr>
 													<tr>
-														<th>상품 노출 기준</th>
+														<th>상품 노출 기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
 														<td>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="1"/>1개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="2"/>2개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="3" checked/>3개</label>						
 															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="4"/>4개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="5"/>5개</label>
 														</td>
 													</tr>
 												</table>
@@ -304,7 +315,7 @@
 											<div class="">
 												<table  class="frmStyle">
 													<tr>
-														<th class="w100">번호</th>
+														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
 														<td>
 															<input type="text" name="mailtcNm4" maxlength="50"/>								
 														</td>
@@ -316,13 +327,19 @@
 														</td>
 													</tr>
 													<tr>
-														<th>상품 노출 기준</th>
+														<th>상품 노출 기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
 														<td>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="1"/>1개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="2"/>2개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="3" checked/>3개</label>						
 															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="4"/>4개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="5"/>5개</label>
 														</td>
 													</tr>
 												</table>
@@ -361,7 +378,7 @@
 											<div class="">
 												<table  class="frmStyle">
 													<tr>
-														<th class="w100">구분자 명</th>
+														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
 														<td>
 															<input type="text" name="mailtcNm5" maxlength="50"/>								
 														</td>
@@ -373,13 +390,19 @@
 														</td>
 													</tr>
 													<tr>
-														<th>상품 노출 기준</th>
+														<th>상품 노출 기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
 														<td>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="1"/>1개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="2"/>2개</label>
 															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="3" checked/>3개</label>						
 															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="4"/>4개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="5"/>5개</label>
 														</td>
 													</tr>
 												</table>
@@ -992,8 +1015,6 @@
 						$('#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 {
@@ -1008,8 +1029,6 @@
 							$('#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();
 				}

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

@@ -34,7 +34,7 @@
 							<col/>
 						</colgroup>
 						<tr>
-							<th>기간<em class="required" title="필수"></em></th>
+							<th>기간</th>
 							<td id="sellTerms"></td>
 						</tr>
 
@@ -164,26 +164,26 @@
 	
 	// 조회버튼 - 검색
 	$('#btnSearch').on('click', function() {
-		if(!dateCheck()) return;
+// 		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();
+// 조회검색 조건 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;
-	}
+// 		if (gagajf.isNull(fromDate)) {
+// 			mcxDialog.alert('시작 기간을 입력하세요.');
+// 			return;
+// 		}
+// 		if (gagajf.isNull(toDate)) {
+// 			mcxDialog.alert('종료 기간을 입력하세요.');
+// 			return;
+// 		}
+// 		return true;
+// 	}
 	
 	// 등록/상세 팝업
 	var fnOpenMailHFPopup = function(mode, mailtSq) {
@@ -198,7 +198,8 @@
 		let data = gridOptions.api.getSelectedRows();
 		var actionUrl = '/marketing/mktmailmanagement/preview';
 		if (!gagajf.isNull(mailtSq)) actionUrl += '?mailtSq=' + mailtSq;
-		cfnOpenModalPopup(actionUrl, 'popupMktMailPreview');
+// 		cfnOpenModalPopup(actionUrl, 'popupMktMailPreview');
+		window.open(actionUrl, '_blank', 'popupMktMailPreview');
 	}
 	
 	

+ 32 - 42
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementPreviewForm.html

@@ -15,50 +15,40 @@
  *******************************************************************************
  -->
 <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 class="panelStyle">
+  		<!-- Header  -->
+ 		<header th:if="${mktmailPreviewHeader}">
+			<th:block th:utext="${mktmailPreviewHeader.mailhfContent}"></th:block>
+		</header>
+		
+		<!-- content -->
+		<div th:if="${mktmailPreviewContent}">
+ 			<th:block th:utext="${mktmailPreviewContent.mailContent}"></th:block> 
 		</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>
+
+		<!-- 링크/상품이미지 -->
+		<div th:if="${mktmailPreviewGoods}">
+			<th:block th:each="oneData, status : ${mktmailPreviewGoods}">
+				
+				<!-- 메일 코너 링크표시  -->
+				<div th:if="${oneData.tc.mailtcLink != null && oneData.tc.mailtcLink != ''}">
+					<a th:href="@{${oneData.tc.mailtcLink}}" target="_blank">상품 상세보기</a>
+				</div><br>
+					
+				<!-- 상품이미지 -->
+				<th:block th:each="goodsData, status : ${oneData.goodsList}">
+					<img th:src="${goodsData.sysImgNm}"/>
+					<!-- goodsCpr -->
+					<th:block th:if="${status.count  % oneData.tc.goodsCpr == 0}">
+						<br>
+					</th:block>
+				</th:block><br><!-- 구분자별 br -->
+		</div><br>
 			
-			<!-- Footer -->
-			 <div th:if="${mktmailPreviewFooter}">
-					<p th:text="${mktmailPreviewFooter.mailhfContent}"></p>
-			</div>
+		<!-- Footer -->
+		 <footer th:if="${mktmailPreviewFooter}">
+			<th:block th:utext="${mktmailPreviewFooter.mailhfContent}"></th:block>
+		</footer>
 	</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>