ソースを参照

기획전 추가 커밋

sowon4187 5 年 前
コミット
ce8cb72452

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

@@ -60,8 +60,47 @@ public interface TsaPlanDao {
 	 * 기획전 삭제
 	 *
 	 * @param 기획전 번호
-	 * @author rladbwnd5
+	 * @author sowon
 	 * @since 2021. 2. 8
 	 */
 	void deletePlan(Plan param);
+	
+	/**
+	 * 기획전 소스 삭제
+	 *
+	 * @param 기획전 일련번호
+	 * @author sowon
+	 * @since 2021. 2.8
+	 */
+	void deletePlanFsrcInfo(Plan param);
+	
+	/**
+	 * 기획전 소스 등록
+	 *
+	 * @param 기획전 소스
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	void savePlanFsrcInfo(Plan param);
+	
+	/**
+	 * 기획전 소스 조회
+	 *
+	 * @param 기획전 일련번호
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	Collection<Plan> getPlanFsrcList(Plan param);
+	
+	/**
+	 * 기획전 웹 수정
+	 *
+	 * @param 기획전 등록 정보
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	void updatePlanWebInfo(Plan param);
+
+
 }

+ 289 - 113
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -1,12 +1,16 @@
 package com.style24.admin.biz.service;
 
+import java.io.IOException;
 import java.util.Collection;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.gagaframework.web.util.GagaFileUtil;
+import com.gagaframework.web.util.GagaStringUtil;
 import com.style24.admin.biz.dao.TsaPlanDao;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.session.TscSession;
@@ -28,6 +32,9 @@ public class TsaPlanService {
 	@Autowired
 	private TsaPlanDao planDao;
 	
+	@Autowired
+	private Environment env;
+	
 	/**
 	 * 기획전 코너 전체 조회
 	 *
@@ -46,7 +53,7 @@ public class TsaPlanService {
 	 * @param
 	 * @return
 	 * @author sowon
-	 * @since 2019. 12. 31
+	 * @since 2021. 2. 8
 	 */
 	@Transactional("shopTxnManager")
 	public void createPlanWebInfo(Plan param) {
@@ -57,27 +64,27 @@ public class TsaPlanService {
 		log.debug("planSq : {}", param.getPlanSq());
 
 		// 웹용 소스
-//		if (StringUtils.isNotBlank(param.getFsrcPc())) {
-//			createPlanFsrcPc(param);
-//		}
+		if (StringUtils.isNotBlank(param.getFsrcPc())) {
+			createPlanFsrcPc(param);
+		}
 
-//		// 모바일용 소스
-//		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
-//			createPlanFsrcMobile(param);
-//		}
-//
-//		//기획전 응모이벤트
+		// 모바일용 소스
+		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
+			createPlanFsrcMobile(param);
+		}
+
+		//기획전 응모이벤트
 //		if (StringUtils.isNotBlank(param.getPrivacyPolicy())) {
 //			int i = 0;
 //			for (String planQtitle : param.getPlanQtitle()) {
-//				TsaPlanQuestAnswer planQuestAnswer = new TsaPlanQuestAnswer();
+//				PlanQuestAnswer planQuestAnswer = new PlanQuestAnswer();
 //				planQuestAnswer.setPlanSq(param.getPlanSq());
 //				planQuestAnswer.setPlanQtitle(planQtitle);
 //				planQuestAnswer.setAttachYn(param.getAttachYn()[i]);
 //				planQuestAnswer.setQuestNo(i);
-//				planQuestAnswer.setRegId(param.getRegId());
-//				planQuestAnswer.setUpdId(param.getUpdId());
-//				marketingDao.savePlanQuestion(planQuestAnswer);
+//				planQuestAnswer.setRegNo(param.getRegNo());
+//				planQuestAnswer.setUpdNo(param.getUpdNo());
+//				planDao.savePlanQuestion(planQuestAnswer);
 //				i++;
 //			}
 //		}
@@ -86,105 +93,105 @@ public class TsaPlanService {
 	/*
 	 * 기획전 웹용 소스 등록
 	 */
-//	@Transactional("shopTxnManager")
-//	public Plan createPlanFsrcPc(Plan param) {
-//		int fsrcPcTotalCnt = param.getFsrcPc().toCharArray().length;
-//		int byteCnt = 1500;
-//
-//		// 기존 소스 삭제
-//		param.setFrontGb("P");
-//		planDao.deletePlanFsrcInfo(param);
-//		if (fsrcPcTotalCnt > byteCnt) { // 4000 바이트 이상 일 때 파싱.
-//			StringBuilder sbStr = new StringBuilder(4000);
-//
-//			int cnt = 0;
-//			int getCnt = 0;
-//			int tempCnt = 1500;
-//
-//			for (char ch : param.getFsrcPc().toCharArray()) {
-//				getCnt++;
-//				sbStr.append(ch);
-//
-//				if (getCnt == tempCnt || getCnt == fsrcPcTotalCnt) {
-//					TsaPlan planPc = new TsaPlan();
-//					planPc.setPlanSq(param.getPlanSq());
-//					planPc.setFrontGb("P");
-//					planPc.setSeq(cnt + 1);
-//					planPc.setRegId(param.getRegId());
-//					planPc.setFsrc(sbStr.toString());
-//
-//					// 초기화
-//					sbStr.delete(0, tempCnt);
-//					cnt++;
-//					tempCnt += byteCnt;
-//
-//					marketingDao.savePlanFsrcInfo(planPc);
-//				}
-//
-//			}
-//		} else {
-//			TsaPlan planPc = new TsaPlan();
-//			planPc.setPlanSq(param.getPlanSq());
-//			planPc.setFrontGb("P");
-//			planPc.setSeq(1);
-//			planPc.setRegId(param.getRegId());
-//			planPc.setFsrc(param.getFsrcPc());
-//
-//			marketingDao.savePlanFsrcInfo(planPc);
-//		}
-//		return param;
-//	}
-//
-//	/*
-//	 * 기획전 모바일 소스 등록
-//	 */
-//	@Transactional("shopTxnManager")
-//	public TsaPlan createPlanFsrcMobile(TsaPlan param) {
-//		int fsrcMobileTotalCnt = param.getFsrcMobile().toCharArray().length;
-//		int byteCnt = 1500;
-//
-//		// 기존 소스 삭제
-//		param.setFrontGb("M");
-//		marketingDao.deletePlanFsrcInfo(param);
-//		if (fsrcMobileTotalCnt > byteCnt) { // 4000 바이트 이상 일 때 파싱.
-//			StringBuilder sbStr = new StringBuilder(4000);
-//
-//			int cnt = 0;
-//			int getCnt = 0;
-//			int tempCnt = 1500;
-//
-//			for (char ch : param.getFsrcMobile().toCharArray()) {
-//				getCnt++;
-//				sbStr.append(ch);
-//
-//				if (getCnt == tempCnt || getCnt == fsrcMobileTotalCnt) {
-//					TsaPlan planMobile = new TsaPlan();
-//					planMobile.setPlanSq(param.getPlanSq());
-//					planMobile.setFrontGb("M");
-//					planMobile.setSeq(++cnt);
-//					planMobile.setRegId(param.getRegId());
-//					planMobile.setFsrc(sbStr.toString());
-//
-//					// 초기화
-//					sbStr.delete(0, tempCnt);
-//					//					cnt++;
-//					tempCnt += byteCnt;
-//
-//					marketingDao.savePlanFsrcInfo(planMobile);
-//				}
-//			}
-//		} else {
-//			TsaPlan planMobile = new TsaPlan();
-//			planMobile.setPlanSq(param.getPlanSq());
-//			planMobile.setFrontGb("M");
-//			planMobile.setSeq(1);
-//			planMobile.setRegId(param.getRegId());
-//			planMobile.setFsrc(param.getFsrcMobile());
-//
-//			marketingDao.savePlanFsrcInfo(planMobile);
-//		}
-//		return param;
-//	}
+	@Transactional("shopTxnManager")
+	public Plan createPlanFsrcPc(Plan param) {
+		int fsrcPcTotalCnt = param.getFsrcPc().toCharArray().length;
+		int byteCnt = 1500;
+
+		// 기존 소스 삭제
+		param.setFrontGb("P");
+		//planDao.deletePlanFsrcInfo(param);
+		if (fsrcPcTotalCnt > byteCnt) { // 4000 바이트 이상 일 때 파싱.
+			StringBuilder sbStr = new StringBuilder(4000);
+
+			int cnt = 0;
+			int getCnt = 0;
+			int tempCnt = 1500;
+
+			for (char ch : param.getFsrcPc().toCharArray()) {
+				getCnt++;
+				sbStr.append(ch);
+
+				if (getCnt == tempCnt || getCnt == fsrcPcTotalCnt) {
+					Plan planPc = new Plan();
+					planPc.setPlanSq(param.getPlanSq());
+					planPc.setFrontGb("P");
+					planPc.setSeq(cnt + 1);
+					planPc.setRegNo(param.getRegNo());
+					planPc.setFsrc(sbStr.toString());
+
+					// 초기화
+					sbStr.delete(0, tempCnt);
+					cnt++;
+					tempCnt += byteCnt;
+
+					planDao.savePlanFsrcInfo(planPc);
+				}
+
+			}
+		} else {
+			Plan planPc = new Plan();
+			planPc.setPlanSq(param.getPlanSq());
+			planPc.setFrontGb("P");
+			planPc.setSeq(1);
+			planPc.setRegNo(param.getRegNo());
+			planPc.setFsrc(param.getFsrcPc());
+
+			planDao.savePlanFsrcInfo(planPc);
+		}
+		return param;
+	}
+
+	/*
+	 * 기획전 모바일 소스 등록
+	 */
+	@Transactional("shopTxnManager")
+	public Plan createPlanFsrcMobile(Plan param) {
+		int fsrcMobileTotalCnt = param.getFsrcMobile().toCharArray().length;
+		int byteCnt = 1500;
+
+		// 기존 소스 삭제
+		param.setFrontGb("M");
+		//planDao.deletePlanFsrcInfo(param);
+		if (fsrcMobileTotalCnt > byteCnt) { // 4000 바이트 이상 일 때 파싱.
+			StringBuilder sbStr = new StringBuilder(4000);
+
+			int cnt = 0;
+			int getCnt = 0;
+			int tempCnt = 1500;
+
+			for (char ch : param.getFsrcMobile().toCharArray()) {
+				getCnt++;
+				sbStr.append(ch);
+
+				if (getCnt == tempCnt || getCnt == fsrcMobileTotalCnt) {
+					Plan planMobile = new Plan();
+					planMobile.setPlanSq(param.getPlanSq());
+					planMobile.setFrontGb("M");
+					planMobile.setSeq(++cnt);
+					planMobile.setRegNo(param.getRegNo());
+					planMobile.setFsrc(sbStr.toString());
+
+					// 초기화
+					sbStr.delete(0, tempCnt);
+					//					cnt++;
+					tempCnt += byteCnt;
+
+					planDao.savePlanFsrcInfo(planMobile);
+				}
+			}
+		} else {
+			Plan planMobile = new Plan();
+			planMobile.setPlanSq(param.getPlanSq());
+			planMobile.setFrontGb("M");
+			planMobile.setSeq(1);
+			planMobile.setRegNo(param.getRegNo());
+			planMobile.setFsrc(param.getFsrcMobile());
+
+			planDao.savePlanFsrcInfo(planMobile);
+		}
+		return param;
+	}
 	
 	/**
 	 * 기획전 목록
@@ -224,4 +231,173 @@ public class TsaPlanService {
 			planDao.deletePlan(plan);
 		}
 	}
+	
+	/**
+	 * 기획전 상세 정보
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	public Plan getPlanWebDetailInfo(Plan param) {
+		Collection<Plan> planList = planDao.getPlanList(param);
+		Plan planInfo = new Plan();
+
+		if (!planList.isEmpty()) {
+			for (Plan plan : planList) {
+				planInfo = plan;
+			}
+		}
+
+		// 날짜 설정
+		String[] stDate = planInfo.getDispStdt().split(" ");
+		planInfo.setStartSearchDate(stDate[0]);
+		planInfo.setStartSearchTime(GagaStringUtil.replace(stDate[1], ":", "").substring(0, 6));
+
+		String[] edDate = planInfo.getDispEddt().split(" ");
+		planInfo.setEndSearchDate(edDate[0]);
+		planInfo.setEndSearchTime(GagaStringUtil.replace(edDate[1], ":", "").substring(0, 6));
+
+		return planInfo;
+	}
+	
+	/**
+	 * 기획전 웹용 소스 조회
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	public Plan getPlanFsrcPcList(Plan param) {
+		param.setFrontGb("P");
+		Collection<Plan> planFsrcList = planDao.getPlanFsrcList(param);
+		Plan planPc = new Plan();
+
+		for (Plan pcTemp : planFsrcList) {
+			if (StringUtils.isNotBlank(planPc.getFsrc())) {
+				planPc.setFsrc(planPc.getFsrc() + pcTemp.getFsrc());
+			} else {
+				planPc.setFsrc(pcTemp.getFsrc());
+			}
+
+		}
+		log.debug("fsrcPc = {}", planPc.getFsrcPc());
+		return planPc;
+	}
+
+	/**
+	 * 기획전 모바일용 소스 조회
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	public Plan getPlanFsrcMobileList(Plan param) {
+		param.setFrontGb("M");
+		Collection<Plan> planFsrcList = planDao.getPlanFsrcList(param);
+		Plan planMobile = new Plan();
+
+		for (Plan mobileTemp : planFsrcList) {
+			if (StringUtils.isNotBlank(planMobile.getFsrc())) {
+				planMobile.setFsrc(planMobile.getFsrc() + mobileTemp.getFsrc());
+			} else {
+				planMobile.setFsrc(mobileTemp.getFsrc());
+			}
+		}
+
+		return planMobile;
+	}
+	
+	/**
+	 * 기획전 웹 수정
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	@Transactional("shopTxnManager")
+	public void updatePlanWebInfo(Plan param) {
+		log.debug("param {}", param);
+		String targetPath = env.getProperty("upload.default.target.path") + "/planning";
+		param.setRegNo(TsaSession.getInfo().getUserNo());
+		param.setUpdNo(TsaSession.getInfo().getUserNo());
+
+		// 이미지 삭제 여부에 따른 이미지 삭제 처리
+		if (("Y").equals(param.getOrgMainPimgDelYn())) {
+			deleteFile(targetPath, param.getOrgMainPimg());
+		}
+
+		if (("Y").equals(param.getOrgMainMimgDelYn())) {
+			deleteFile(targetPath, param.getOrgMainMimg());
+		}
+
+		if (("Y").equals(param.getOrgDtlPimgDelYn())) {
+			deleteFile(targetPath, param.getOrgDtlPimg());
+		}
+
+		if (("Y").equals(param.getOrgDtlMimgDelYn())) {
+			deleteFile(targetPath, param.getOrgDtlMimg());
+		}
+
+		if (("Y").equals(param.getOrgReplyImgDelYn())) {
+			param.setReplyImg(null);
+			deleteFile(targetPath, param.getOrgReplyImg());
+		}
+
+		planDao.updatePlanWebInfo(param);
+
+		// 웹용 소스
+		if (StringUtils.isNotBlank(param.getFsrcPc())) {
+			createPlanFsrcPc(param);
+		} else {
+			param.setFrontGb("P");
+			planDao.deletePlanFsrcInfo(param);
+		}
+
+		// 모바일용 소스
+		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
+			createPlanFsrcMobile(param);
+		} else {
+			param.setFrontGb("M");
+			planDao.deletePlanFsrcInfo(param);
+		}
+
+		//기획전 응모이벤트
+//		if (StringUtils.isNotBlank(param.getPrivacyPolicy())) {
+//			int i = 0;
+//			for (String planQtitle : param.getPlanQtitle()) {
+//				PlanQuestAnswer planQuestAnswer = new TsaPlanQuestAnswer();
+//				planQuestAnswer.setPlanSq(param.getPlanSq());
+//				planQuestAnswer.setPlanQtitle(planQtitle);
+//				planQuestAnswer.setAttachYn(param.getAttachYn()[i]);
+//				planQuestAnswer.setQuestNo(i);
+//				planQuestAnswer.setRegNo(param.getRegNo());
+//				planQuestAnswer.setUpdNo(param.getUpdNo());
+//				planDao.savePlanQuestion(planQuestAnswer);
+//				i++;
+//			}
+//		}
+	}
+	
+	/**
+	 * 파일 삭제
+	 *
+	 * @param targetPath
+	 * @param excelFilename
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	private void deleteFile(String targetPath, String excelFilename) {
+		// 파일 삭제
+		try {
+			GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, excelFilename));
+		} catch (IOException e) {
+			// Nothing Do
+		}
+	}
+
 }

+ 29 - 14
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1289,17 +1289,17 @@ public class TsaMarketingController extends TsaBaseController {
 			// 기획전 전체 목록
 			mav.addObject("planList", planService.getPlanAllList(param));
 
-		} //else { // 상세 일 때
-//			mav.addObject("planInfo", marketingService.getPlanWebDetailInfo(param));
-//
-//			mav.addObject("fsrcPc", marketingService.getPlanFsrcPcList(param));
-//
-//			mav.addObject("fsrcMobile", marketingService.getPlanFsrcMobileList(param));
-//
-//			mav.addObject("planQuestionList", marketingService.getPlanQuestionList(param));
-//
-//			mav.addObject("brandList", rendererService.getSupplyCompanyBrandList("W"));
-//		}
+		} else if(param.getMode().equals("U")){ // 상세 일 때
+			mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
+
+			mav.addObject("fsrcPc", planService.getPlanFsrcPcList(param));
+
+			mav.addObject("fsrcMobile", planService.getPlanFsrcMobileList(param));
+
+			//mav.addObject("planQuestionList", planService.getPlanQuestionList(param));
+
+			//mav.addObject("brandList", rendererService.getSupplyCompanyBrandList("W"));
+		}
 
 		// 사이트 목록
 		mav.addObject("siteList", rendererService.getCommonCodeList("G000"));
@@ -1312,9 +1312,10 @@ public class TsaMarketingController extends TsaBaseController {
 //
 //		// 회원구분 목록
 //		mav.addObject("custGbList", rendererService.getCommonCodeList("G100", "Y"));
-//
-//		// 회원등급 목록
-//		mav.addObject("custGradeList", rendererService.getCommonCodeList("G110", "Y"));
+		
+		// 사용가능 고객등급 조회
+		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
+		
 		mav.addObject("mode", param.getMode());
 		mav.setViewName("marketing/PlanWebDetailPopupForm");
 		return mav;
@@ -1378,5 +1379,19 @@ public class TsaMarketingController extends TsaBaseController {
 		planService.deletePlan(paramList);
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
+	
+	/**
+	 * 기획전 웹 수정
+	 *
+	 * @return
+	 * @author sowon		
+	 * @since 2021. 2. 8
+	 */
+	@PostMapping("/plan/webdetail/update")
+	@ResponseBody
+	public GagaResponse updatePlanWebInfo(@RequestBody Plan param) {
+		planService.updatePlanWebInfo(param);
+		return super.ok(message.getMessage("SUCC_0002"));
+	}
 
 }

+ 129 - 20
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -145,31 +145,35 @@
 		<if test ="siteCd != null and siteCd !=''">
 		AND    SITE_CD = #{siteCd}
 		</if>
-		<if test="condition != null and condition !=''">
-	        <if test="conditionList != null and conditionList.length>0">
-			<choose>
+		<if test="planSq != null and planSq != ''">
+		AND    PLAN_SQ = #{planSq}
+		</if>
+		<if test="planNm != null and planNm != ''">
+		AND    PLAN_NM LIKE UPPER('%' || #{planNm} || '%')
+		</if>
+		
+		<if test="condition != null and condition != ''">
+		<choose>
 			     <when test="search != null and search == 'searchPlanNm'">
-	 		AND (
-			         <foreach collection="conditionList" item="item" open="(" separator="," close=")">
-			           UPPER(PLAN_NM) LIKE CONCAT('%',UPPER(#{item}),'%') 
-			         </foreach>
-			     )
-			     </when>
-			     <when test="search != null and search == 'searchPlanSq'">
-	 		AND (		 
-			         <foreach collection="conditionList" item="item" open="(" separator="," close=")">
-		    		   UPPER(PLAN_SQ) LIKE CONCAT('%',UPPER(#{item}),'%') 
-			         </foreach>
-			    )
+		AND    (
+		        <foreach collection="conditionList" item="item" index="index" separator="or">
+		        UPPER(PLAN_NM) LIKE CONCAT('%',UPPER(#{item}),'%') 
+		        </foreach>
+		       )
+	         </when>
+	          <when test="search != null and search == 'searchPlanSq'">
+ 		AND 		 
+		         <foreach collection="conditionList"  item="item" index="index" separator="or">
+	    		   UPPER(PLAN_SQ) LIKE CONCAT('%',UPPER(#{item}),'%') 
+		         </foreach>
 			      </when>
-			</choose>
-			</if>
+		</choose>
 		</if>
 		<if test="openYn != null and openYn != ''">
 		AND    OPEN_YN = #{openYn}
 		</if>
 		<if test="regNo != null and regNo != ''">
-		AND    REG_NO = #{regNo}
+		AND    REG_NO = #{regNo} 
 		</if>
 		<if test="frontGb != null and frontGb != ''">
 		AND    FRONT_GB = #{frontGb}
@@ -253,7 +257,7 @@
 	
 	<!-- 기획전 삭제처리 -->
 	<update id="deletePlan" parameterType="Plan">
-		/* TsaPlan.deletePlan */
+		/* TsaMarketing.deletePlan */
 		UPDATE TB_PLAN
 		SET    UPD_NO = #{updNo}
 		     , UPD_DT = now()
@@ -261,10 +265,115 @@
 		WHERE  PLAN_SQ = #{planSq}
 	</update>
 	
+	<!-- 기획전  소스 삭제 -->
+	<delete id="deletePlanFsrcInfo" parameterType="Plan">
+		/* TsaMarketing.deletePlanFsrcInfo */
+		DELETE TB_PLAN_FSRC
+		WHERE  PLAN_SQ = #{planSq}
+		AND    FRONT_GB = #{frontGb}
+	</delete>
+	
+	<!-- 기획전  소스 등록 -->
+	<insert id="savePlanFsrcInfo" parameterType="Plan">
+		/* TsaMarketing.savePlanFsrcInfo */
+		         INSERT INTO
+				      TB_PLAN_FSRC (
+				          PLAN_SQ
+				          , FRONT_GB
+				          , FSRC
+				          , REG_NO
+				          , REG_DT
+				          , UPD_NO
+				          , UPD_DT
+				      )
+				   VALUES (
+				    	  #{planSq}
+				          , #{frontGb}
+				          , #{fsrc}
+				          , #{regNo}
+				          , now()
+				          , #{regNo}
+				          , now() 
+				   )
+				   ON
+				      DUPLICATE KEY
+				   UPDATE
+				       FSRC = #{fsrc}
+		         	 , UPD_NO = #{regNo}
+		         	 , UPD_DT = now()
+	</insert>
+	
+	<!--  기획전 웹용 소스 조회 -->
+	<select id="getPlanFsrcList" parameterType="Plan" resultType="Plan">
+		/* TsaMarketing.getPlanFsrcList */
+		SELECT PLAN_SQ
+	          , FRONT_GB
+	          , FSRC
+	          , REG_NO
+	          , REG_DT
+	          , UPD_NO
+	          , UPD_DT
+		FROM   TB_PLAN_FSRC
+		WHERE  PLAN_SQ = #{planSq}
+		AND    FRONT_GB = #{frontGb}
+	</select>
+	
+	<!-- 기획전 수정 -->
+	<update id="updatePlanWebInfo" parameterType="Plan">
+		/* TsaMarketing.updatePlanWebInfo */
+		UPDATE TB_PLAN
+		   SET PLAN_GB = #{planGb}
+		     <!-- , CUST_GB = #{custGb} -->
+		     <!-- , CUST_GRADE = #{custGrade} -->
+		     <!-- , PLAN_SNM = #{planSnm} -->
+		     , TEMPLATE_TYPE = #{templateType}
+		     , FRONT_GB = #{frontGb}
+		     , PLAN_NM = #{planNm}
+		     , DISP_STDT = DATE_FORMAT(#{dispStdt} , '%Y-%m-%d %H:%i:%s')
+		     , DISP_EDDT = DATE_FORMAT(#{dispEddt} , '%Y-%m-%d %H:%i:%s')
+		     , CORNER_NM_DISP_YN = #{cornerNmDispYn}
+		     , OPEN_YN = #{openYn}
+		     <!-- , DEL_YN = #{delYn} -->
+		     , SITE_CD = #{siteCd}
+		     , DISP_ORD = IFNULL(#{dispOrd}, 999)
+		     , DTL_TITLE1 = #{dtlTitle1}
+		     , MAIN_PIMG = #{mainPimg}
+		     , MAIN_MIMG = #{mainMimg}
+		     , DTL_PIMG = #{dtlPimg}
+		     , DTL_MIMG = #{dtlMimg}
+		     , REPLY_IMG = #{replyImg}
+		     , REPLY_TITLE1 = #{replyTitle1}
+		     , REPLY_TITLE2 = #{replyTitle2}
+		     , POLL_SQ = #{pollSq}
+		     <!-- , PRIVACY_POLICY = #{privacyPolicy} -->
+		     , DEV_URL = #{devUrl}
+		     , REPLY_YN = #{replyYn}
+		     , REPLY_LOC = #{replyLoc}
+		     , BADGE_NM = #{badgeNm}
+		     , BADGE_FCOLOR = #{badgeFcolor}
+		     , BADGE_BCOLOR = #{badgeBcolor}
+		<if test='goodsLimitYn == "Y"'>
+		     , GOODS_LIMIT_YN = 'Y'
+		     , GOODS_LIMIT_QTY = #{goodsLimitQty}
+		</if>
+		<if test='goodsLimitYn == null or goodsLimitYn == "" or goodsLimitYn == "N"'>
+		     , GOODS_LIMIT_YN = 'N'
+		     , GOODS_LIMIT_QTY = 0
+		</if>
+	<!-- 	<if test='cateDispYn == null or cateDispYn == ""'>
+		     , CATE_DISP_YN = 'N'
+		</if>
+		<if test="cateDispYn != null and cateDispYn != ''">
+		     , CATE_DISP_YN = #{cateDispYn}
+		</if> -->
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = now()
+		WHERE  PLAN_SQ = #{planSq}
+	</update>
 	
 	<!-- 기획전 전체 조회 -->
 	<select id="getPlanAllList" parameterType="Plan" resultType="Plan">
-		/* TsaPlan.getPlanAllList */
+		/* TsaMarketing.getPlanAllList */
 		SELECT PLAN_SQ
 		     , PLAN_NM
 		FROM   TB_PLAN

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

@@ -239,13 +239,13 @@
 
 	// 웹 수정 팝업
 	var fnEventWebDetailPopup = function(planSq) {
-		var actionUrl = "/marketing/plan/webdetail/form?mode=U&planSq=" + planSq;
+		var actionUrl = "/marketing/planning/webdetail/form?mode=U&planSq=" + planSq;
 		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
 	}
 	
 	// 이벤트 코너 관리 팝업
 	var fnEventCornerPopup = function(planSq) {
-		var actionUrl = "/marketing/plan/corner/list/form?planSq=" + planSq;
+		var actionUrl = "/marketing/planning/corner/list/form?planSq=" + planSq;
 		cfnOpenModalPopup(actionUrl, 'popupCorner');
 	}
 

+ 264 - 243
src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html

@@ -14,36 +14,20 @@
  * 1.0  2020.02.04   sowon   최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="1510" data-height="865">
-	<div class="panelStyle" >
+<div class="modalPopup" data-width="1100" id="planWebRegisterFormDiv">
+	<div class="panelStyle">
 		<div class="panelTitle">
 			<h2 th:text="${'기획전 웹 ' + (mode == 'N' ? '등록' : '수정')}">기획전 웹 수정</h2>
 			<button type="button" class="close" onclick="uifnPopupClose('popupPlanWebDetail')"><i class="fa fa-times"></i></button>
 		</div>
 		
-		<!-- 기획전 웹 등록 -->
-		<div class="panelContent" th:if="${mode == 'N'}">
-			<form id="planWebRegisterForm" name="planWebRegisterForm" action="#" th:action="@{'/system/user/save'}" th:method="post">
+	<!-- 기획전 웹 수정 -->
+		<div class="panelContent" th:if="${mode == 'U'}">
+		<form th:object="${planInfo}" id="planWebUpdateForm" name="planWebUpdateForm" action="#" th:action="@{'/system/user/save'}" th:method="post">
 			<input type="hidden" name="mode" th:value="${mode}"/>
-			<div style="margin-bottom:10px;">
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width: 150px;"/>
-						<col/>
-					</colgroup>
-					<tr>
-						<th>기존 기획전</th>
-						<td>
-							<select name="planSq" id="planSq">
-								<option value="">선택</option>
-								<option th:if="${planList}" th:each="oneData, status : ${planList}" th:value="${oneData.planSq}" th:text="|[${oneData.planSq}]  ${oneData.planNm}|"></option>
-							</select>
-							<button type="button" class="btn btn-default btn-lg" onclick="fnPlanCopyPopup();">기획전복사</button>
-						</td>
-					</tr>
-				</table>
-			</div>
-			<div class="cardArea" style="height: 750px;margin: -5px;">
+			<input type="hidden" name="planSq" th:value="*{planSq}"/>
+
+			<div class="cardArea" style="height: 700px;margin: -5px;">
 				<table class="frmStyle">
 					<colgroup>
 						<col style="width:10%"/>
@@ -55,31 +39,30 @@
 					<tr>
 						<th class="dashR">기획전구분<i class="star"></i></th>
 						<td class="dashR">
-							<select name="planGb" required="required" data-valid-name="기획전구분" onchange="fnChangePlanGb(this);">
-								<option value="">선택</option>
+							<select name="planGb" id="planGb" th:field="*{planGb}" onchange="fnChangePlanGb(this);">
 								<option value="P">기획전</option>
 								<option value="E">이벤트</option>
 							</select>
 						</td>
 						<th class="dashR">기획전탬플릿유형<i class="star"></i></th>
 						<td class="dashR" colspan="3">
-							<select name="templateType" required="required" data-valid-name="기획전탬플릿유형">
+							<select name="templateType" th:field="*{templateType}">
 								<option value="">선택</option>
 								<option value="H">HTML</option>
 								<option value="T">TEXT</option>
 							</select>
 						</td>
 					</tr>
-				<!-- 	<tr>
+					<!-- <tr>
 						<th class="dashR">회원구분<i class="star"></i></th>
 						<td class="dashR">
-							<select name="custGb" required="required" data-valid-name="회원구분">
+							<select name="custGb" required="required" data-valid-name="회원구분" th:field="*{custGb}">
 								<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 						<th class="dashR">회원등급<i class="star"></i></th>
 						<td class="dashR" colspan="3">
-							<select name="custGrade" required="required" data-valid-name="회원등급">
+							<select name="custGrade" required="required" data-valid-name="회원등급" th:field="*{custGrade}">
 								<option value="0">전체</option>
 								<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
@@ -88,7 +71,7 @@
 					<tr>
 						<th class="dashR">프론트 구분<i class="star"></i></th>
 						<td class="dashR">
-							<select name="frontGb" id="frontGb" required="required" data-valid-name="프론트 구분">
+							<select name="frontGb" id="frontGb" th:field="*{frontGb}">
 								<option value="">선택</option>
 								<option value="A">전체</option>
 								<option value="P">웹</option>
@@ -97,33 +80,33 @@
 						</td>
 						<th class="dashR">기획전명<i class="star"></i></th>
 						<td class="dashR" colspan="3">
-							<input type="text" name="planNm" id="planNm" maxlength="50" required="required" data-valid-name="기획전명"/>
+							<input type="text" name="planNm" id="planNm" th:field="*{planNm}"/>
 						</td>
 					</tr>
 					<tr>
 						<th class="dashR">진행기간<i class="star"></i></th>
 						<td class="dashR">
-							<input type="text" class="schDate w100" id="viewStartDtNew" name="startSearchDate" maxlength="10" required="required" data-valid-name="노출기간" />
+							<input type="text" class="schDate w100" name="startSearchDate" maxlength="10" required="required" data-valid-name="노출기간" th:field="*{startSearchDate}"/>
 							<select name="startSearchHour" required="required" data-valid-name="진행기간 시작시간">
 								<th:block th:each="num, index  : ${#numbers.sequence(0,23)}">
-								<option  th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" >시간</option>
+								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="*{#strings.substring(dispStdt, 11, 13)} == ${#strings.toString(num)} ? 'true'">시간</option>
 								</th:block>
 							</select>
 							<select name="startSearchMin" required="required" data-valid-name="진행기간 시작시간">
 								<th:block th:each="num: ${#numbers.sequence(0,59)}">
-								<option  th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" >분</option>
+								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="*{#strings.substring(dispStdt, 14, 16)} == ${#strings.toString(num)} ? 'true'">분</option>
 								</th:block>
 							</select>
 							~
-							<input type="text" class="schDate w100" id="viewEndDtNew" name="endSearchDate" maxlength="10" required="required" data-valid-name="노출기간"/>
+							<input type="text" class="schDate w100" name="endSearchDate" maxlength="10" required="required" data-valid-name="노출기간" th:field="*{endSearchDate}"/>
 							<select name="endSearchHour" required="required" data-valid-name="진행기간 종료시간">
 								<th:block th:each="num, index  : ${#numbers.sequence(0,23)}">
-								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${#numbers.formatInteger(num,2)}==23 ? 'true'">시간</option>
+								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="*{#strings.substring(dispEddt, 11, 13)} == ${#strings.toString(num)} ? 'true'">시간</option>
 								</th:block>
 							</select>
 							<select name="endSearchMin" required="required" data-valid-name="진행기간 종료시간">
 								<th:block th:each="num: ${#numbers.sequence(0,59)}">
-								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="${#numbers.formatInteger(num,2)}==59 ? 'true'">분</option>
+								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="*{#strings.substring(dispEddt, 14, 16)} == ${#strings.toString(num)} ? 'true'">분</option>
 								</th:block>
 							</select>
 							<input type="hidden" name="dispStdt" id="dispStdt"/>
@@ -131,19 +114,19 @@
 						</td>
 						<th class="dashR">서브제목</th>
 						<td class="dashR" colspan="3">
-							<input type="text" name="dtlTitle1" id="dtlTitle1"/>
+							<input type="text" name="dtlTitle1" id="dtlTitle1" th:value="*{dtlTitle1}"/>
 						</td>
 					</tr>
 					<tr>
 						<th class="dashR">코너명노출 여부<i class="star"></i></th>
 						<td class="dashR">
-							<select name="cornerNmDispYn" required="required" data-valid-name="코너명노출 여부">
+							<select name="cornerNmDispYn" th:field="*{cornerNmDispYn}">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 						<th class="dashR">오픈여부<i class="star"></i></th>
-						<td class="dashR" colspan="3">
-							<select name="openYn" required="required" data-valid-name="오픈여부">
+						<td class="dashR">
+							<select name="openYn" th:field="*{openYn}">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
@@ -151,111 +134,169 @@
 					<tr>
 						<th class="dashR">사이트<i class="star"></i></th>
 						<td class="dashR">
-							<select name="siteCd" required="required" data-valid-name="사이트">
+							<select name="siteCd" th:field="*{siteCd}">
 								<option value="">선택</option>
 								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 						<th class="dashR">전시순서</th>
-						<td class="dashR" colspan="3">
-							<input type="text" class="w100 aR" name="dispOrd"/>
+						<td class="dashR">
+							<input type="text" name="dispOrd" class="w100 aR" th:value="*{dispOrd}"/>
+						</td>
+						<!-- <th class="dashR">삭제여부<i class="star"></i></th>
+						<td class="dashR">
+							<select name="delYn" th:field="*{delYn}" required="required" data-valid-name="삭제여부">
+								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'N'" th:text="|${oneData.cdNm}|"></option>
+							</select>
+						</td> -->
+					</tr>
+					<tr>
+						<th class="dashR">사용고객등급구분<em class="required" title="필수"></em></th>
+						<td class="dashR">
+							<label class="chkBox" th:if="${usableCustGradeList}" th:each="oneData, status : ${usableCustGradeList}">
+								<input type="checkbox" name="usableCustGradeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+							</label>
+						</td>
+						<th class="dashR">댓글여부</th>
+						<td class="dashR">
+							<select name="replyYn" th:field="*{replyYn}">
+								<option value="">선택</option>
+								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
+							</select>
 						</td>
 					</tr>
 					<!-- <tr>
 						<th class="dashR">뱃지 타이틀</th>
-						<td class="dashR">
-							<input type="text" class="w500" name="badgeNm"/>
+						<td class="dashR" colspan="3">
+							<input type="text" name="badgeNm" th:value="*{badgeNm}"/>
 						</td>
-
 						<th class="dashR">뱃지 배경색상</th>
 						<td class="dashR">
-							<input type="text" class="w100" name="badgeBcolor"/>
+							<input type="text" name="badgeBcolor" th:value="*{badgeBcolor}"/>
 						</td>
-
 						<th class="dashR">뱃지 글자색상</th>
-						<td class="dashR">
-							<input type="text" class="w100" name="badgeFcolor"/>
+						<td class="dashR" colspan="3">
+							<input type="text" name="badgeFcolor" th:value="*{badgeFcolor}"/>
 						</td>
 					</tr> -->
 					<tr>
-						<th class="dashR">PC 메인 이미지<i id="pMimgStar"></i></th>
-						<td class="dashR" colspan="5">
+						<th class="dashR">PC 메인 이미지<i id="pMimgStar"></i><br/>[삭제여부<label class="chkBox"><input type="checkbox" name="orgMainPimgDelYn" value="Y"/></label>]</th>
+						<td class="dashR">
+							<div th:if=*{mainPimg} id="mainPimgView" style="float:left;">
+								<img id="PreMainPimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/planning/'} + *{mainPimg}" style="max-width:720px;"/>
+							</div>
+						</td>
+						<td class="dashR" colspan="4">
 							<div class="uFile w400">
 								<input id="registerMainPimg" name="registerMainPimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainPimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="mainPimg" id="mainPimg" value=""/>
+								<input type="hidden" name="orgMainPimg" id="orgMainPimg" th:value="*{mainPimg}"/>
+								<input type="hidden" name="mainPimg" id="mainPimg"/>
 							</div>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일 메인 이미지<i id="mMimgStar"></i></th>
-						<td class="dashR" colspan="5">
+						<th class="dashR">모바일 메인 이미지<i id="mMimgStar"></i><br/>[삭제여부<label class="chkBox"><input type="checkbox" name="orgMainMimgDelYn" value="Y"/></label>]</th>
+						<td class="dashR">
+							<div th:if=*{mainMimg} id="imgFileView" style="float:left;">
+								<img id="PreMainMimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/planning/'} + *{mainMimg}" style="max-width:720px;"/>
+							</div>
+						</td>
+						<td class="dashR" colspan="4">
 							<div class="uFile w400">
 								<input id="registerMainMimg" name="registerMainMimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainMimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="mainMimg" id="mainMimg" value=""/>
+								<input type="hidden" name="orgMainMimg" id="orgMainMimg" th:value="*{mainMimg}"/>
+								<input type="hidden" name="mainMimg" id="mainMimg"/>
 							</div>
 						</td>
 					</tr>
 					<!-- <tr>
-						<th class="dashR">PC 상세 이미지</th>
-						<td class="dashR" colspan="5">
+						<th class="dashR">웹 상세 이미지<br/>[삭제여부<label><input type="checkbox" name="orgDtlPimgDelYn" value="Y"/></label>]</th>
+						<td class="dashR">
+							<div th:if=*{dtlPimg} id="DtlPimgView" style="float:left;">
+								<img id="PreDtlPimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{dtlPimg}" style="width:100%;"/>
+							</div>
+						</td>
+						<td class="dashR" colspan="4">
 							<div class="uFile w400">
 								<input id="registerDtlPimg" name="registerDtlPimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerDtlPimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="dtlPimg" value=""/>
+								<input type="hidden" name="orgDtlPimg" id="orgDtlPimg" th:value="*{dtlPimg}"/>
+								<input type="hidden" name="dtlPimg" id="dtlPimg"/>
 							</div>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일 상세 이미지</th>
-						<td class="dashR" colspan="5">
+						<th class="dashR">모바일 상세 이미지<br/>[삭제여부<label><input type="checkbox" name="orgDtlMimgDelYn" value="Y"/></label>]</th>
+						<td class="dashR">
+							<div th:if=*{dtlMimg} id="DtlMimgView" style="float:left;">
+								<img id="PredtlMimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{dtlMimg}" style="width:100%;"/>
+							</div>
+						</td>
+						<td class="dashR" colspan="4">
 							<div class="uFile w400">
 								<input id="registerDtlMimg" name="registerDtlMimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerDtlMimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="dtlMimg" value=""/>
+								<input type="hidden" name="orgDtlMimg" id="orgDtlMimg" th:value="*{dtlMimg}"/>
+								<input type="hidden" name="dtlMimg" id="dtlMimg"/>
 							</div>
 						</td>
 					</tr> -->
 				</tbody>
-				<!-- <tbody id="questionEventInsert">
+				<!-- <tbody id="questionEventUpdate">
 					<tr>
 						<th class="dashR">개인정보 수집동의</th>
-						<td class="dashR" >
+						<td class="dashR">
 							<div style="margin-top:5px;">
-								<textarea name="textareaR4" id="privacyPolicyRegister" style="width:720px;"></textarea>
+								<textarea name="privacyPolicy" id="privacyPolicyDetail" style="width:720px;">[[*{privacyPolicy}]]</textarea>
 							</div>
 						</td>
-						<th class="dashR">입력항목</th>
-						<td class="dashR" colspan="5">
-							<div>
-								<input type="text" class="w200" name="planQtitle"/>
-								<label><input type="checkbox" onclick="fnAttachYnClick(this);" />첨부파일</label>
-								<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
-								<input type="hidden" name="attachYn" value="N"/>
-							</div>
+						<th class="dashR">입력항목<div><button type="button" class="btn btn-primary btn-lg" th:onclick="'cfnOpenPlanAnswerPopup('+*{planSq}+');'">참여자</button></div></th>
+						<td class="dashR">
+							<th:bock th:if="${planQuestionList != null and !planQuestionList.empty}" th:each="oneData, status : ${planQuestionList}">
+								<div>
+									<input type="text" class="w200" name="planQtitle" th:value="${oneData.planQtitle}"/>
+									<label class="chkBox"><input type="checkbox" th:checked="${oneData.attachYn}=='Y'" onclick="fnAttachYnClick(this);" />첨부파일</label>
+									<th:block th:if="${status.first}">
+										<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
+									</th:block>
+									<th:block th:unless="${status.first}">
+										<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>
+									</th:block>
+									<input type="hidden" name="attachYn" th:value="${oneData.attachYn}"/>
+								</div>
+							</th:bock>
+							<th:block th:unless="${planQuestionList != null and !planQuestionList.empty}">
+								<div>
+									<input type="text" class="w200" name="planQtitle" />
+									<label><input type="checkbox" onclick="fnAttachYnClick(this);" />첨부파일</label>
+									<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
+									<input type="hidden" name="attachYn" th:value="N"/>
+								</div>
+							</th:block>
 						</td>
 					</tr>
 				</tbody> -->
 				<tbody>
-					<tr>
+					<!-- <tr>
 						<th class="dashR">댓글여부</th>
 						<td class="dashR" colspan="5">
-							<select name="replyYn">
-								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'N'" th:text="|${oneData.cdNm}|"></option>
+							<select name="replyYn" th:field="*{replyYn}">
+								<option value="">선택</option>
+								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
-						<!-- <th class="dashR">DEV URL</th>
-						<td class="dashR" colspan="3">
-							<input type="text" name="devUrl" id="devUrl"/>
-						</td> -->
-					</tr>
+						<th class="dashR">DEV URL</th>
+						<td class="dashR" colspan="4">
+							<input type="text" name="devUrl" id="devUrl" th:value="*{devUrl}"/>
+						</td>
+					</tr> -->
 					<tr>
 						<th class="dashR">웹용소스</th>
 						<td class="dashR" colspan="5">
 							<div style="margin-top:5px;">
-								<!-- <textarea name="fsrcPc" id="fsrcPcRegister" rows="15" cols="95" style="width:1280px;"></textarea> -->
-								<textarea class="textareaR4" id="fsrcPcDetail"></textarea>
+								<textarea name="fsrcPc" id="fsrcPcDetail" rows="15" cols="95" style="width:1280px;"></textarea>
 							</div>
 						</td>
 					</tr>
@@ -263,32 +304,46 @@
 						<th class="dashR">모바일용소스</th>
 						<td class="dashR" colspan="5">
 							<div style="margin-top:5px;">
-								<!-- <textarea name="fsrcMobile" id="fsrcMobileRegister" rows="15" cols="95" style="width:1280px;"></textarea> -->
-								<textarea class="textareaR4" id="fsrcMobileDetail"></textarea>
+								<textarea name="fsrcMobile" id="fsrcMobileDetail" rows="15" cols="95" style="width:1280px;"></textarea>
 							</div>
 						</td>
 					</tr>
 				</table>
 			</div>
-				<div style='margin: 13px;'>
-					<ul class="panelBar">
-						<li class="right" th:if="${mode == 'N'}">
-							<button type="button" class="btn btn-info btn-lg" onclick="fnPlanSave('#planWebRegisterForm');">저장</button>
-						</li>
-					</ul>
-				</div>
-			</form>
-		</div>
+			<div style='margin: 13px;'>
+			<ul class="panelBar">
+				<li class="right" th:if="${mode == 'U'}">
+					<button type="button" class="btn btn-success btn-lg" onclick="fnPlanSave('#planWebUpdateForm');">저장</button>
+				</li>
+			</ul>
+			</div>
+		</form>
 	</div>
-</div>
-
-	<!-- 기획전 웹 수정 -->
-	<li class="mdPopContent" th:if="${mode == 'U'}">
-		<form th:object="${planInfo}" id="planWebDetailForm" name="planWebDetailForm" action="#" th:action="@{'/system/user/save'}" th:method="post">
+		
+	
+		<!-- 기획전 웹 등록 -->
+		<div class="panelContent" th:if="${mode == 'N'}">
+			<form id="planWebRegisterForm" name="planWebRegisterForm" action="#" th:action="@{'/system/user/save'}" th:method="post">
 			<input type="hidden" name="mode" th:value="${mode}"/>
-			<input type="hidden" name="planSq" th:value="*{planSq}"/>
-
-			<div class="cardArea" style="height: 700px;margin: -5px;">
+			<div>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width: 150px;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>기존 기획전</th>
+						<td>
+							<select name="planSq" id="planSq">
+								<option value="">선택</option>
+								<option th:if="${planList}" th:each="oneData, status : ${planList}" th:value="${oneData.planSq}" th:text="|[${oneData.planSq}]  ${oneData.planNm}|"></option>
+							</select>
+							<button type="button" class="btn btn-default btn-lg" onclick="fnPlanCopyPopup();">기획전복사</button>
+						</td>
+					</tr>
+				</table>
+			</div>
+			<div class="cardArea">
 				<table class="frmStyle">
 					<colgroup>
 						<col style="width:10%"/>
@@ -300,39 +355,40 @@
 					<tr>
 						<th class="dashR">기획전구분<i class="star"></i></th>
 						<td class="dashR">
-							<select name="planGb" id="planGb" th:field="*{planGb}" onchange="fnChangePlanGb(this);">
+							<select name="planGb" required="required" data-valid-name="기획전구분" onchange="fnChangePlanGb(this);">
+								<option value="">선택</option>
 								<option value="P">기획전</option>
 								<option value="E">이벤트</option>
 							</select>
 						</td>
 						<th class="dashR">기획전탬플릿유형<i class="star"></i></th>
 						<td class="dashR" colspan="3">
-							<select name="templateType" th:field="*{templateType}">
+							<select name="templateType" required="required" data-valid-name="기획전탬플릿유형">
 								<option value="">선택</option>
 								<option value="H">HTML</option>
 								<option value="T">TEXT</option>
 							</select>
 						</td>
 					</tr>
-					<tr>
+				<!-- 	<tr>
 						<th class="dashR">회원구분<i class="star"></i></th>
 						<td class="dashR">
-							<select name="custGb" required="required" data-valid-name="회원구분" th:field="*{custGb}">
+							<select name="custGb" required="required" data-valid-name="회원구분">
 								<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 						<th class="dashR">회원등급<i class="star"></i></th>
 						<td class="dashR" colspan="3">
-							<select name="custGrade" required="required" data-valid-name="회원등급" th:field="*{custGrade}">
+							<select name="custGrade" required="required" data-valid-name="회원등급">
 								<option value="0">전체</option>
 								<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
-					</tr>
+					</tr> -->
 					<tr>
 						<th class="dashR">프론트 구분<i class="star"></i></th>
 						<td class="dashR">
-							<select name="frontGb" id="frontGb" th:field="*{frontGb}">
+							<select name="frontGb" id="frontGb" required="required" data-valid-name="프론트 구분">
 								<option value="">선택</option>
 								<option value="A">전체</option>
 								<option value="P">웹</option>
@@ -341,33 +397,33 @@
 						</td>
 						<th class="dashR">기획전명<i class="star"></i></th>
 						<td class="dashR" colspan="3">
-							<input type="text" name="planNm" id="planNm" th:field="*{planNm}"/>
+							<input type="text" name="planNm" id="planNm" maxlength="50" required="required" data-valid-name="기획전명"/>
 						</td>
 					</tr>
 					<tr>
 						<th class="dashR">진행기간<i class="star"></i></th>
 						<td class="dashR">
-							<input type="text" class="schDate w100" name="startSearchDate" maxlength="10" required="required" data-valid-name="노출기간" th:field="*{startSearchDate}"/>
+							<input type="text" class="schDate w100" id="viewStartDtNew" name="startSearchDate" maxlength="10" required="required" data-valid-name="노출기간" />
 							<select name="startSearchHour" required="required" data-valid-name="진행기간 시작시간">
 								<th:block th:each="num, index  : ${#numbers.sequence(0,23)}">
-								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="*{#strings.substring(dispStdt, 11, 13)} == ${#strings.toString(num)} ? 'true'">시간</option>
+								<option  th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" >시간</option>
 								</th:block>
 							</select>
 							<select name="startSearchMin" required="required" data-valid-name="진행기간 시작시간">
 								<th:block th:each="num: ${#numbers.sequence(0,59)}">
-								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="*{#strings.substring(dispStdt, 14, 16)} == ${#strings.toString(num)} ? 'true'">분</option>
+								<option  th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" >분</option>
 								</th:block>
 							</select>
 							~
-							<input type="text" class="schDate w100" name="endSearchDate" maxlength="10" required="required" data-valid-name="노출기간" th:field="*{endSearchDate}"/>
+							<input type="text" class="schDate w100" id="viewEndDtNew" name="endSearchDate" maxlength="10" required="required" data-valid-name="노출기간"/>
 							<select name="endSearchHour" required="required" data-valid-name="진행기간 종료시간">
 								<th:block th:each="num, index  : ${#numbers.sequence(0,23)}">
-								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="*{#strings.substring(dispEddt, 11, 13)} == ${#strings.toString(num)} ? 'true'">시간</option>
+								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${#numbers.formatInteger(num,2)}==23 ? 'true'">시간</option>
 								</th:block>
 							</select>
 							<select name="endSearchMin" required="required" data-valid-name="진행기간 종료시간">
 								<th:block th:each="num: ${#numbers.sequence(0,59)}">
-								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="*{#strings.substring(dispEddt, 14, 16)} == ${#strings.toString(num)} ? 'true'">분</option>
+								<option th:value="${#numbers.formatInteger(num,2)}"  th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="${#numbers.formatInteger(num,2)}==59 ? 'true'">분</option>
 								</th:block>
 							</select>
 							<input type="hidden" name="dispStdt" id="dispStdt"/>
@@ -375,183 +431,140 @@
 						</td>
 						<th class="dashR">서브제목</th>
 						<td class="dashR" colspan="3">
-							<input type="text" name="dtlTitle1" id="dtlTitle1" th:value="*{dtlTitle1}"/>
+							<input type="text" name="dtlTitle1" id="dtlTitle1"/>
 						</td>
 					</tr>
 					<tr>
 						<th class="dashR">코너명노출 여부<i class="star"></i></th>
 						<td class="dashR">
-							<select name="cornerNmDispYn" th:field="*{cornerNmDispYn}">
+							<select name="cornerNmDispYn" required="required" data-valid-name="코너명노출 여부">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 						<th class="dashR">오픈여부<i class="star"></i></th>
-						<td class="dashR">
-							<select name="openYn" th:field="*{openYn}">
+						<td class="dashR" colspan="3">
+							<select name="openYn" required="required" data-valid-name="오픈여부">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 					</tr>
-					<tr>
-						<th class="dashR">전시순서</th>
-						<td class="dashR">
-							<input type="text" name="dispOrd" class="w100 aR" th:value="*{dispOrd}"/>
-						</td>
-						<th class="dashR">삭제여부<i class="star"></i></th>
-						<td class="dashR">
-							<select name="delYn" th:field="*{delYn}" required="required" data-valid-name="삭제여부">
-								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'N'" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td>
-					</tr>
 					<tr>
 						<th class="dashR">사이트<i class="star"></i></th>
 						<td class="dashR">
-							<select name="siteCd" th:field="*{siteCd}">
+							<select name="siteCd" required="required" data-valid-name="사이트">
 								<option value="">선택</option>
 								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
-						<th class="dashR">댓글여부</th>
-						<td class="dashR">
-							<select name="replyYn" th:field="*{replyYn}">
-								<option value="">선택</option>
-								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
-							</select>
+						<th class="dashR">전시순서</th>
+						<td class="dashR" colspan="3">
+							<input type="text" class="w100 aR" name="dispOrd"/>
 						</td>
 					</tr>
 					<!-- <tr>
 						<th class="dashR">뱃지 타이틀</th>
-						<td class="dashR" colspan="3">
-							<input type="text" name="badgeNm" th:value="*{badgeNm}"/>
+						<td class="dashR">
+							<input type="text" class="w500" name="badgeNm"/>
 						</td>
+
 						<th class="dashR">뱃지 배경색상</th>
 						<td class="dashR">
-							<input type="text" name="badgeBcolor" th:value="*{badgeBcolor}"/>
+							<input type="text" class="w100" name="badgeBcolor"/>
 						</td>
+
 						<th class="dashR">뱃지 글자색상</th>
-						<td class="dashR" colspan="3">
-							<input type="text" name="badgeFcolor" th:value="*{badgeFcolor}"/>
+						<td class="dashR">
+							<input type="text" class="w100" name="badgeFcolor"/>
 						</td>
 					</tr> -->
 					<tr>
-						<th class="dashR">PC 메인 이미지<i id="pMimgStar"></i><br/>[삭제여부<label><input type="checkbox" name="orgMainPimgDelYn" value="Y"/></label>]</th>
+						<th class="dashR">사용고객등급구분<em class="required" title="필수"></em></th>
 						<td class="dashR">
-							<div th:if=*{mainPimg} id="mainPimgView" style="float:left;">
-								<img id="PreMainPimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{mainPimg}" style="max-width:720px;"/>
-							</div>
+							<label class="chkBox" th:if="${usableCustGradeList}" th:each="oneData, status : ${usableCustGradeList}">
+								<input type="checkbox" name="usableCustGradeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+							</label>
 						</td>
-						<td class="dashR" colspan="4">
+						<th class="dashR">댓글여부</th>
+						<td class="dashR" colspan="5">
+							<select name="replyYn">
+								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'N'" th:text="|${oneData.cdNm}|"></option>
+							</select>
+						</td>
+					</tr>
+					<!--<tr>
+					
+						 <th class="dashR">DEV URL</th>
+						<td class="dashR" colspan="3">
+							<input type="text" name="devUrl" id="devUrl"/>
+						</td> 
+					</tr>-->
+					<tr>
+						<th class="dashR">PC 메인 이미지<i id="pMimgStar"></i></th>
+						<td class="dashR" colspan="5">
 							<div class="uFile w400">
 								<input id="registerMainPimg" name="registerMainPimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainPimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="orgMainPimg" id="orgMainPimg" th:value="*{mainPimg}"/>
-								<input type="hidden" name="mainPimg" id="mainPimg"/>
+								<input type="hidden" name="mainPimg" id="mainPimg" value=""/>
 							</div>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일 메인 이미지<i id="mMimgStar"></i><br/>[삭제여부<label><input type="checkbox" name="orgMainMimgDelYn" value="Y"/></label>]</th>
-						<td class="dashR">
-							<div th:if=*{mainMimg} id="imgFileView" style="float:left;">
-								<img id="PreMainMimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{mainMimg}" style="max-width:720px;"/>
-							</div>
-						</td>
-						<td class="dashR" colspan="4">
+						<th class="dashR">모바일 메인 이미지<i id="mMimgStar"></i></th>
+						<td class="dashR" colspan="5">
 							<div class="uFile w400">
 								<input id="registerMainMimg" name="registerMainMimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainMimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="orgMainMimg" id="orgMainMimg" th:value="*{mainMimg}"/>
-								<input type="hidden" name="mainMimg" id="mainMimg"/>
+								<input type="hidden" name="mainMimg" id="mainMimg" value=""/>
 							</div>
 						</td>
 					</tr>
 					<!-- <tr>
-						<th class="dashR">웹 상세 이미지<br/>[삭제여부<label><input type="checkbox" name="orgDtlPimgDelYn" value="Y"/></label>]</th>
-						<td class="dashR">
-							<div th:if=*{dtlPimg} id="DtlPimgView" style="float:left;">
-								<img id="PreDtlPimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{dtlPimg}" style="width:100%;"/>
-							</div>
-						</td>
-						<td class="dashR" colspan="4">
+						<th class="dashR">PC 상세 이미지</th>
+						<td class="dashR" colspan="5">
 							<div class="uFile w400">
 								<input id="registerDtlPimg" name="registerDtlPimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerDtlPimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="orgDtlPimg" id="orgDtlPimg" th:value="*{dtlPimg}"/>
-								<input type="hidden" name="dtlPimg" id="dtlPimg"/>
+								<input type="hidden" name="dtlPimg" value=""/>
 							</div>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일 상세 이미지<br/>[삭제여부<label><input type="checkbox" name="orgDtlMimgDelYn" value="Y"/></label>]</th>
-						<td class="dashR">
-							<div th:if=*{dtlMimg} id="DtlMimgView" style="float:left;">
-								<img id="PredtlMimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{dtlMimg}" style="width:100%;"/>
-							</div>
-						</td>
-						<td class="dashR" colspan="4">
+						<th class="dashR">모바일 상세 이미지</th>
+						<td class="dashR" colspan="5">
 							<div class="uFile w400">
 								<input id="registerDtlMimg" name="registerDtlMimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerDtlMimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="orgDtlMimg" id="orgDtlMimg" th:value="*{dtlMimg}"/>
-								<input type="hidden" name="dtlMimg" id="dtlMimg"/>
+								<input type="hidden" name="dtlMimg" value=""/>
 							</div>
 						</td>
 					</tr> -->
 				</tbody>
-				<tbody id="questionEventUpdate">
+				<!-- <tbody id="questionEventInsert">
 					<tr>
 						<th class="dashR">개인정보 수집동의</th>
-						<td class="dashR">
+						<td class="dashR" >
 							<div style="margin-top:5px;">
-								<textarea name="privacyPolicy" id="privacyPolicyDetail" style="width:720px;">[[*{privacyPolicy}]]</textarea>
+								<textarea name="textareaR4" id="privacyPolicyRegister" style="width:720px;"></textarea>
 							</div>
 						</td>
-						<th class="dashR">입력항목<div><button type="button" class="btn btn-primary btn-lg" th:onclick="'cfnOpenPlanAnswerPopup('+*{planSq}+');'">참여자</button></div></th>
-						<td class="dashR">
-							<th:bock th:if="${planQuestionList != null and !planQuestionList.empty}" th:each="oneData, status : ${planQuestionList}">
-								<div>
-									<input type="text" class="w200" name="planQtitle" th:value="${oneData.planQtitle}"/>
-									<label class="chkBox"><input type="checkbox" th:checked="${oneData.attachYn}=='Y'" onclick="fnAttachYnClick(this);" />첨부파일</label>
-									<th:block th:if="${status.first}">
-										<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
-									</th:block>
-									<th:block th:unless="${status.first}">
-										<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>
-									</th:block>
-									<input type="hidden" name="attachYn" th:value="${oneData.attachYn}"/>
-								</div>
-							</th:bock>
-							<th:block th:unless="${planQuestionList != null and !planQuestionList.empty}">
-								<div>
-									<input type="text" class="w200" name="planQtitle" />
-									<label><input type="checkbox" onclick="fnAttachYnClick(this);" />첨부파일</label>
-									<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
-									<input type="hidden" name="attachYn" th:value="N"/>
-								</div>
-							</th:block>
+						<th class="dashR">입력항목</th>
+						<td class="dashR" colspan="5">
+							<div>
+								<input type="text" class="w200" name="planQtitle"/>
+								<label><input type="checkbox" onclick="fnAttachYnClick(this);" />첨부파일</label>
+								<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
+								<input type="hidden" name="attachYn" value="N"/>
+							</div>
 						</td>
 					</tr>
-				</tbody>
+				</tbody> -->
 				<tbody>
-					<!-- <tr>
-						<th class="dashR">댓글여부</th>
-						<td class="dashR" colspan="5">
-							<select name="replyYn" th:field="*{replyYn}">
-								<option value="">선택</option>
-								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th class="dashR">DEV URL</th>
-						<td class="dashR" colspan="4">
-							<input type="text" name="devUrl" id="devUrl" th:value="*{devUrl}"/>
-						</td>
-					</tr> -->
 					<tr>
 						<th class="dashR">웹용소스</th>
 						<td class="dashR" colspan="5">
 							<div style="margin-top:5px;">
-								<textarea name="fsrcPc" id="fsrcPcDetail" rows="15" cols="95" style="width:1280px;"></textarea>
+								<!-- <textarea name="fsrcPc" id="fsrcPcRegister" rows="15" cols="95" style="width:1280px;"></textarea> -->
+								<textarea class="textareaR4" id="fsrcPcDetail" name="fsrcPc"></textarea>
 							</div>
 						</td>
 					</tr>
@@ -559,20 +572,24 @@
 						<th class="dashR">모바일용소스</th>
 						<td class="dashR" colspan="5">
 							<div style="margin-top:5px;">
-								<textarea name="fsrcMobile" id="fsrcMobileDetail" rows="15" cols="95" style="width:1280px;"></textarea>
+								<!-- <textarea name="fsrcMobile" id="fsrcMobileRegister" rows="15" cols="95" style="width:1280px;"></textarea> -->
+								<textarea class="textareaR4" id="fsrcMobileDetail" name="fsrcMobile"></textarea>
 							</div>
 						</td>
 					</tr>
 				</table>
 			</div>
-		</form>
-	</li>
-
-	<li class="mdPopBtnB aR" th:if="${mode == 'U'}">
-		<button type="button" class="btn btn-success btn-lg" onclick="fnPlanSave('#planWebDetailForm');">저장</button>
-	</li>
-
-</ul>
+				<div style='margin: 13px;'>
+					<ul class="panelBar">
+						<li class="right" th:if="${mode == 'N'}">
+							<button type="button" class="btn btn-info btn-lg" onclick="fnPlanSave('#planWebRegisterForm');">저장</button>
+						</li>
+					</ul>
+				</div>
+			</form>
+		</div>
+	</div>
+</div>
 
 <script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020103001"></script>
 <script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=2020103001"></script>
@@ -615,9 +632,11 @@
 			//gagaSe.createSmartEditor(seOptions, 'fsrcPcDetail');
 			//gagaSe.createSmartEditor(seOptions, 'fsrcMobileDetail');
 
-			// 스마트에디어 값 설정
-			//gagaSe.setContents('fsrcPcDetail', fsrcPc.fsrc);
-			//gagaSe.setContents('fsrcMobileDetail', fsrcMobile.fsrc);
+			// 썸머노트 값 설정
+			$('#fsrcPcDetail').summernote('code', fsrcPc.fsrc);
+			$('#fsrcMobileDetail').summernote('code', fsrcMobile.fsrc);
+			//gagaSn.setContents('#fsrcPcDetail', fsrcPc.fsrc);
+			//gagaSn.setContents('#fsrcMobileDetail', fsrcMobile.fsrc);
 
 			if($("#planGb").val()!='E'){
 				$("#questionEventInsert").hide();
@@ -698,9 +717,9 @@
 
 	var fnCopyCallback = function(result) {
 		fnPlanWebDetailClose();
-		fnSearch();
+		//fnSearch();
 
-		var actionUrl = "/marketing/plan/webdetail/form?mode=U&planSq=" + result.planSq;
+		var actionUrl = "/marketing/planning/webdetail/form?mode=U&planSq=" + result.planSq;
 		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
 	}
 
@@ -807,8 +826,9 @@
 				sureBtnText: "확인",
 				sureBtnClick: function() {
 					gagajf.ajaxFormSubmit("/marketing/planning/webdetail/create", "#planWebRegisterForm", fnPlanWebDetailCallBack); 
-					//fnSearch();
-					fnPlanWebDetailClose();
+					uifnPopupClose('planWebRegisterFormDiv');
+					fnPlanListSearch();
+					//fnPlanWebDetailClose();
 				}
 			});
 		} else {
@@ -819,8 +839,9 @@
 					var actionUrl = '/marketing/plan/webdetail/update';
 
 					gagajf.ajaxFormSubmit(actionUrl, formId, function() {
-						fnSearch();
-						fnPlanWebDetailClose();
+						uifnPopupClose('planWebRegisterFormDiv');
+						fnPlanListSearch();
+						//fnPlanWebDetailClose();
 					});
 				}
 			});
@@ -833,7 +854,7 @@
 
 		var file = this.files[0];
 
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/plan'
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/planning'
 				, file
 				, function(result) {
 					if (name == 'registerMainPimg')
@@ -898,9 +919,9 @@
 	}
 
 	var fnPlanWebDetailCallBack = function() {
-		fnSearch();
-		$('.sp-container').remove();	// 컬러피커 제거
-		uifnPopClose('popupPlanWebDetail');
+		uifnPopupClose('planWebRegisterForm');
+		fnPlanListSearch();
+		
 	}
 /*]]>*/
 </script>