Просмотр исходного кода

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

# Conflicts:
#	src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
card007 5 лет назад
Родитель
Сommit
89481ad4ae
99 измененных файлов с 9137 добавлено и 11402 удалено
  1. 9 0
      pom.xml
  2. 94 2
      src/main/java/com/style24/admin/biz/dao/TsaCardPromotionDao.java
  3. 0 219
      src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java
  4. 28 0
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  5. 24 0
      src/main/java/com/style24/admin/biz/dao/TsaFreegiftPromotionDao.java
  6. 45 0
      src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java
  7. 134 0
      src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java
  8. 8 0
      src/main/java/com/style24/admin/biz/dao/TsaRendererDao.java
  9. 260 2
      src/main/java/com/style24/admin/biz/service/TsaCardPromotionService.java
  10. 0 423
      src/main/java/com/style24/admin/biz/service/TsaCouponService.java
  11. 39 4
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  12. 22 1
      src/main/java/com/style24/admin/biz/service/TsaFreegiftPromotionService.java
  13. 14 5
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  14. 24 6
      src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  15. 478 0
      src/main/java/com/style24/admin/biz/service/TsaPlanService.java
  16. 10 0
      src/main/java/com/style24/admin/biz/service/TsaRendererService.java
  17. 29 12
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  18. 1 0
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  19. 8 4
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  20. 398 34
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  21. 54 18
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  22. 0 6
      src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  23. 28 4
      src/main/java/com/style24/persistence/domain/CardPromotion.java
  24. 12 0
      src/main/java/com/style24/persistence/domain/CardPromotionCondition.java
  25. 1 0
      src/main/java/com/style24/persistence/domain/CardPromotionTarget.java
  26. 36 2
      src/main/java/com/style24/persistence/domain/Coupon.java
  27. 29 0
      src/main/java/com/style24/persistence/domain/CouponLimitedTime.java
  28. 1 0
      src/main/java/com/style24/persistence/domain/CouponRefval.java
  29. 9 0
      src/main/java/com/style24/persistence/domain/CustomerSearch.java
  30. 5 2
      src/main/java/com/style24/persistence/domain/Goods.java
  31. 2 0
      src/main/java/com/style24/persistence/domain/GoodsImg.java
  32. 1 0
      src/main/java/com/style24/persistence/domain/MoreBetter.java
  33. 4 5
      src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  34. 1 1
      src/main/java/com/style24/persistence/domain/NotiInfo.java
  35. 160 0
      src/main/java/com/style24/persistence/domain/Plan.java
  36. 2 1
      src/main/java/com/style24/persistence/domain/WmsColorMapping.java
  37. 1 1
      src/main/java/com/style24/persistence/domain/WmsSeasonMapping.java
  38. 1 1
      src/main/java/com/style24/persistence/domain/WmsStyleYearMapping.java
  39. 302 45
      src/main/java/com/style24/persistence/mybatis/shop/TsaCardPromotion.xml
  40. 0 677
      src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml
  41. 180 21
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  42. 122 6
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  43. 71 19
      src/main/java/com/style24/persistence/mybatis/shop/TsaFreegiftPromotion.xml
  44. 62 48
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  45. 128 86
      src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  46. 533 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml
  47. 12 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml
  48. BIN
      src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar
  49. 37 39
      src/main/webapp/WEB-INF/views/customer/CellphoneChangePopupForm.html
  50. 127 97
      src/main/webapp/WEB-INF/views/customer/CustomerActiveListForm.html
  51. 4 4
      src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html
  52. 92 61
      src/main/webapp/WEB-INF/views/customer/CustomerDormantListForm.html
  53. 39 7
      src/main/webapp/WEB-INF/views/customer/CustomerSecedeListForm.html
  54. 43 45
      src/main/webapp/WEB-INF/views/customer/EmailPopupForm.html
  55. 36 38
      src/main/webapp/WEB-INF/views/customer/LmsPopupForm.html
  56. 69 15
      src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html
  57. 30 0
      src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html
  58. 6 3
      src/main/webapp/WEB-INF/views/goods/GoodsFreeGoodsForm.html
  59. 9 7
      src/main/webapp/WEB-INF/views/goods/GoodsImageForm.html
  60. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsListForm.html
  61. 2 2
      src/main/webapp/WEB-INF/views/goods/GoodsMassRegisterForm.html
  62. 11 22
      src/main/webapp/WEB-INF/views/goods/NotiinfoForm.html
  63. 7 7
      src/main/webapp/WEB-INF/views/goods/WmsColorMappingForm.html
  64. 7 7
      src/main/webapp/WEB-INF/views/goods/WmsSeasonMappingForm.html
  65. 7 7
      src/main/webapp/WEB-INF/views/goods/WmsStyleYearMappingForm.html
  66. 62 38
      src/main/webapp/WEB-INF/views/marketing/CardInterestForm.html
  67. 87 29
      src/main/webapp/WEB-INF/views/marketing/CardInterestPopupForm.html
  68. 1 1
      src/main/webapp/WEB-INF/views/marketing/CardListPopupForm.html
  69. 365 0
      src/main/webapp/WEB-INF/views/marketing/CardPromotionForm.html
  70. 303 0
      src/main/webapp/WEB-INF/views/marketing/CardPromotionPopupForm.html
  71. 499 133
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  72. 72 0
      src/main/webapp/WEB-INF/views/marketing/CouponPubCustListPopupForm.html
  73. 16 2
      src/main/webapp/WEB-INF/views/marketing/CouponPubForCustPopupForm.html
  74. 0 2
      src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html
  75. 312 182
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html
  76. 385 0
      src/main/webapp/WEB-INF/views/marketing/PlanListForm.html
  77. 1124 0
      src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html
  78. 0 1092
      src/main/webapp/WEB-INF/views/order/CancelRequestFormBack01.html
  79. 0 1054
      src/main/webapp/WEB-INF/views/order/CancelRequestFormBack02.html
  80. 0 1114
      src/main/webapp/WEB-INF/views/order/CnclReqForm.html
  81. 0 145
      src/main/webapp/WEB-INF/views/order/CnclReqViewForm.html
  82. 199 56
      src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html
  83. 0 110
      src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html
  84. 0 133
      src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html
  85. 14 8
      src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  86. 0 1397
      src/main/webapp/WEB-INF/views/order/OrderDetailFormBack20210122.html
  87. 0 106
      src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html
  88. 0 97
      src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html
  89. 0 78
      src/main/webapp/WEB-INF/views/order/OrderDetailTmtbHst.html
  90. 36 48
      src/main/webapp/WEB-INF/views/order/OrderListForm.html
  91. 0 766
      src/main/webapp/WEB-INF/views/order/OrderListFormBack.html
  92. 0 183
      src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html
  93. 0 437
      src/main/webapp/WEB-INF/views/order/OrderSamplePopupForm.html
  94. 0 370
      src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html
  95. 0 127
      src/main/webapp/WEB-INF/views/order/RefundAccountRegistForm.html
  96. 78 12
      src/main/webapp/WEB-INF/views/order/RtnReqForm.html
  97. 5 5
      src/main/webapp/dx5/dextuploadx5-configuration.js
  98. 928 924
      src/main/webapp/ux/css/admin.ui.css
  99. 742 736
      src/main/webapp/ux/js/admin.ui.js

+ 9 - 0
pom.xml

@@ -13,6 +13,15 @@
 	<description>STYLE24 Admin</description>
 	<description>STYLE24 Admin</description>
 	
 	
 	<dependencies>
 	<dependencies>
+		<!-- Maven module core -->
+		<dependency>
+			<groupId>com.style24.core</groupId>
+			<artifactId>style24.core</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<!--// Maven module core -->
+		
 		<dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-security</artifactId>
 			<artifactId>spring-boot-starter-security</artifactId>

+ 94 - 2
src/main/java/com/style24/admin/biz/dao/TsaCardPromotionDao.java

@@ -4,6 +4,8 @@ import java.util.Collection;
 
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.CardPromotion;
+import com.style24.persistence.domain.CardPromotionCondition;
+import com.style24.persistence.domain.CardPromotionTarget;
 
 
 /**
 /**
  * 카드프로모션 Dao
  * 카드프로모션 Dao
@@ -33,13 +35,103 @@ public interface TsaCardPromotionDao {
 	Collection<CardPromotion> getCardInterestList(CardPromotion cardPromotion);
 	Collection<CardPromotion> getCardInterestList(CardPromotion cardPromotion);
 
 
 	/**
 	/**
-	 * 카드무이자할부저장
+	 * 카드무이자할부 조건 목록
 	 * @param cardPromotion
 	 * @param cardPromotion
 	 * @return
 	 * @return
 	 * @author eskim
 	 * @author eskim
 	 * @since 2021. 2. 1
 	 * @since 2021. 2. 1
 	 */
 	 */
-	void saveCardInterest(CardPromotion cardPromotion);
+	Collection<CardPromotionCondition> getCardPromotionConditionList(int cardPrmtSq);
 
 
+	/**
+	 * 카드무이자할부 대상 목록
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 1
+	 */
+	Collection<CardPromotionTarget> getCardPromotionTargetList(int cardPrmtCdtSq);
+
+	/**
+	 * 카드프로모션 저장
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 1
+	 */
+	void saveCardPromotion(CardPromotion cardPromotion);
+
+	/**
+	 * 카드프로모션 행사조건 삭제
+	 * @param cardPromotionCondition
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 2
+	 */
+	void deleteCardPromotionCondition(int cardPrmtCdtSq);
+
+	/**
+	 * 카드프로모션 행사조건  저장
+	 * @param cardPromotionCondition
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 2
+	 */
+	void saveCardPromotionCondition(CardPromotionCondition cardPromotionCondition);
+
+
+	/**
+	 * 카드프로모션 대상 삭제
+	 * @param cardPrmtCdtSq
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 2
+	 */
+	void deleteCardPromotionTarget(int cardPrmtCdtSq);
+
+	/**
+	 * 카드프로모션 대상 저장
+	 * @param cardPromotionTarget
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 2
+	 */
+	void createCardPromotionTarget(CardPromotionTarget cardPromotionTarget);
+
+	/**
+	 * 카드프로모션 비노출처리
+	 * @param cardPrmtSq
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 2
+	 */
+	void updateCardPromotionDsipYn(CardPromotion cardPromotion);
+
+	/**
+	 * 카드프로모션 삭제
+	 * @param cardPrmtSq
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 2
+	 */
+	void deleteCardPromotion(int cardPrmtSq);
+
+	/**
+	 * 카드프로모션 목록  건수
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 03
+	 */
+	int getCardPromotionListCount(CardPromotion cardPromotion);
+
+	/**
+	 * 카드프로모션 목록
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 03
+	 */
+	Collection<CardPromotion> getCardPromotionList(CardPromotion cardPromotion);
 
 
 }
 }

+ 0 - 219
src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java

@@ -1,219 +0,0 @@
-package com.style24.admin.biz.dao;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import com.style24.persistence.domain.*;
-import org.springframework.stereotype.Component;
-
-import com.style24.core.support.annotation.ShopDs;
-import org.springframework.stereotype.Component;
-
-/**
- * 쿠폰 DAO
- * @author xyzp1539
- * @since  2021-01-11
- */
-@ShopDs
-@Component
-public interface TsaCouponDao {
-
-	/**
-	 * 쿠폰 리스트 조회
-	 * @param  param
-	 * @return ArrayList<Coupon>
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	ArrayList<Coupon> getCouponList(Coupon param);
-
-	/**
-	 * 쿠폰 리스트 카운트 조회
-	 * @param  param
-	 * @return int
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	int getCouponListCnt(Coupon param);
-
-	/**
-	 * 쿠폰 등록
-	 * @param params
-	 * @author xyzp1539
-	 * @since  2021-01-12
-	 */
-	void couponInsert(Coupon params);
-
-	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
-	 */
-	Collection<Coupon> getCouponRetrieveList(Coupon coupon);
-
-	/**
-	 * 쿠폰 적용대상 등록
-	 * @param supplyComp
-	 * @author xyzp1539
-	 * @since  2021-01-14
-	 */
-	void saveCouponRefVal(CouponRefval supplyComp);
-
-	/**
-	 * 쿠폰 입점업체 분담 등록
-	 * @param burden
-	 * @author xyzp1539
-	 * @since  2021-01-14
-	 */
-	void saveCouponBurden(CouponBurden burden);
-
-	/**
-	 * 자사브랜드 조회
-	 * @param
-	 * @author xyzp1539
-	 * @since  2021-01-14
-	 */
-    Collection<CommonCode> getSelfBrandList();
-
-	/**
-	 * 쿠폰 상세 조회
-	 * @param  cpnId
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-15
-	 */
-    Coupon getCouponDetail(int cpnId);
-
-	/**
-	 * 쿠폰 발급개수 조회
-	 * @param  cpnId
-	 * @return int
-	 * @author xyzp1539
-	 * @since 2021-01-15
-	 */
-	int getCouponIssueCnt(int cpnId);
-
-	/**
-	 * 쿠폰 적용 대상 - 제외상품
-	 * @param  cpnRefval
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	ArrayList<CouponRefval> getCouponRefvalExceptGoodsList(CouponRefval cpnRefval);
-
-	/**
-	 * 쿠폰 적용 대상 - 브랜드
-	 * @param cpnRefval
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	ArrayList<CouponRefval> getCouponRefvalBrandList(CouponRefval cpnRefval);
-
-	/**
-	 * 쿠폰 적용 대상 - 카테고리
-	 * @param cpnRefval
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	ArrayList<CouponRefval> getCouponRefvalCategoryList(CouponRefval cpnRefval);
-
-	/**
-	 * 쿠폰 적용 대상 - 적용/제외상품
-	 * @param  cpnRefval
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	ArrayList<CouponRefval> getCouponRefvalGoodsList(CouponRefval cpnRefval);
-
-	/**
-	 * 쿠폰 적용 대상 - 공급처
-	 * @param cpnRefval
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	ArrayList<CouponRefval> getCouponRefvalSupplyCompList(CouponRefval cpnRefval);
-
-	/**
-	 * 쿠폰 입점업쳅 분담율 조회
-	 * @param cpnId
-	 * @return  Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	ArrayList<Coupon> getCouponBurdenList(int cpnId);
-
-	/**
-	 * 쿠폰 적용대상 삭제
-	 * @param  couponRefval
-	 * @return
-	 * @author xyzp1539
-	 * @since 2021-01-19
-	 */
-    void updateCouponRefval(CouponRefval couponRefval);
-
-    /**
-     * 고객 쿠폰 발행
-     * @param  custPub
-     * @return
-     * @author xyzp1539
-     * @since 2021-01-21
-     */
-	void saveCouponCustPub(CustCoupon custPub);
-
-	/**
-	 * 특정 쿠폰 발급받은 고객 조회
-	 * @param  custCoupon
-	 * @return
-	 * @author xyzp1539
-	 * @since 2021-01-21
-	 */
-	ArrayList<CustCoupon> getCouponIssueCustList(CustCoupon custCoupon);
-
-	/**
-	 * 발급받은 쿠폰 유효기간 변경
-	 * @param
-	 * @return
-	 * @author xyzp1539
-	 * @since 2021-01-21
-	 */
-	void updateCustCouponAvailEddt(CustCoupon issueCust);
-
-	/**
-	 * 난수, 시리얼 쿠폰 등록
-	 * @param param
-	 * @author xodud1202
-	 * @since 2021. 01. 26
-	 */
-	void createRandomCouponInfo(Coupon param);
-
-	/**
-	 * 동일 쿠폰명이 같은 기간에 존재하는지 확인
-	 * @param param
-	 * @author xodud1202
-	 * @since 2021. 01. 26
-	 */
-	int getSerialOverlapCheck(Coupon param);
-
-	/**
-	 * 동일 쿠폰명이 존재하는지 확인
-	 * @param param
-	 * @author xodud1202
-	 * @since 2021. 01. 27
-	 */
-	int getRandomCouponNmCnt(String param);
-
-	/**
-	 * 동일 쿠폰명이 존재하는지 확인
-	 * @param param
-	 * @author xodud1202
-	 * @since 2021. 01. 26
-	 */
-	ArrayList<CustCoupon> getRandomCouponInfo(int cpnId);
-}

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

@@ -28,6 +28,15 @@ import java.util.Collection;
 @Repository
 @Repository
 public interface TsaCustomerDao {
 public interface TsaCustomerDao {
 
 
+	/**
+	 * 활동회원 건수
+	 * @param customerSearch - 검색조건
+	 * @return int
+	 * @author jsshin
+	 * @since 2021. 2. 01
+	 */
+	int getCustomerActiveListCount(CustomerSearch customerSearch);
+
 	/**
 	/**
 	 * 활동회원 목록
 	 * 활동회원 목록
 	 * @param customerSearch - 검색조건
 	 * @param customerSearch - 검색조건
@@ -180,6 +189,15 @@ public interface TsaCustomerDao {
 	 */
 	 */
 	Collection<CustContactHst> getCustomerContactList(Integer custNo);
 	Collection<CustContactHst> getCustomerContactList(Integer custNo);
 
 
+	/**
+	 * 탈퇴회원 목록 건수
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2021. 02. 01
+	 */
+	int getCustomerSecedeListCount(CustomerSearch customerSearch);
+
 	/**
 	/**
 	 * 탈퇴회원 목록
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건
 	 * @param customerSearch - 검색조건
@@ -189,6 +207,15 @@ public interface TsaCustomerDao {
 	 */
 	 */
 	Collection<Customer> getCustomerSecedeList(CustomerSearch customerSearch);
 	Collection<Customer> getCustomerSecedeList(CustomerSearch customerSearch);
 
 
+	/**
+	 * 휴면회원 목록 건수
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2021. 02. 01
+	 */
+	int getCustomerDormantListCount(CustomerSearch customerSearch);
+
 	/**
 	/**
 	 * 휴면회원 목록
 	 * 휴면회원 목록
 	 * @param customerSearch - 검색조건
 	 * @param customerSearch - 검색조건
@@ -201,4 +228,5 @@ public interface TsaCustomerDao {
 	void createException();
 	void createException();
 
 
 
 
+
 }
 }

+ 24 - 0
src/main/java/com/style24/admin/biz/dao/TsaFreegiftPromotionDao.java

@@ -185,4 +185,28 @@ public interface TsaFreegiftPromotionDao {
 	 * @since 2021. 01. 20
 	 * @since 2021. 01. 20
 	 */
 	 */
 	void updateFreegoodsPromotionStat(FreeGoodsPromotion param);
 	void updateFreegoodsPromotionStat(FreeGoodsPromotion param);
+
+	/**
+	 * 적용 업체 및 브랜드 목록 제거
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 02. 04
+	 */
+	void deleteFreegiftGoodsApply(FreeGoodsPromotion param);
+
+	/**
+	 * 실사용 업체/브랜드 리스트 등록 (업체/브랜드 모두 등록된 경우)
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 02. 04
+	 */
+	void insertFreegiftGoodsApplyList(FreeGoodsPromotion param);
+
+	/**
+	 * 실사용 업체/브랜드 리스트 등록 (한곳만 있을 경우)
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 02. 04
+	 */
+	void insertFreegiftGoodsApplyCompanyOrBrandList(FreeGoodsPromotion param);
 }
 }

+ 45 - 0
src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java

@@ -269,5 +269,50 @@ public interface TsaMorebetterDao {
     List<MoreBetterGoods> getMorebetterRealApplyGoodsList(MoreBetter moreBetter);
     List<MoreBetterGoods> getMorebetterRealApplyGoodsList(MoreBetter moreBetter);
 
 
     List<MoreBetterGoods> getMorebetterCompBrandGoodsList(MoreBetterGoods moreBetterGoods);
     List<MoreBetterGoods> getMorebetterCompBrandGoodsList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 업체,브랜드,상품 (TB_TMTB_GOODS) 삭제
+     * @param moreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 2. 8
+     */
+    void deleteTmtbGoods(MoreBetter moreBetter);
+
+    /**
+     * 다다익선 분담율 (TB_TMTB_BURDEN) 삭제
+     * @param moreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 2. 8
+     */
+    void deleteTmtbBurden(MoreBetter moreBetter);
+
+    /**
+     * 다다익선 할인 구간 (TB_TMTB_SECTION) 삭제
+     * @param moreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 2. 8
+     */
+    void deleteTmtbSection(MoreBetter moreBetter);
+
+    /**
+     * 다다익선 할인값 (TB_TMTB_VAL) 삭제
+     * @param moreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 2. 8
+     */
+    void deleteTmtbVal(MoreBetter moreBetter);
+
+    /**
+     * 다다익선 임시 적용상품 (TB_TMTB_APPLY_GOODS_TEMP) 삭제
+     * @param moreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 2. 8
+     */
+    void deleteTmtbApplyGoods(MoreBetter moreBetter);
     /* // CSB 진행 */
     /* // CSB 진행 */
 }
 }

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

@@ -0,0 +1,134 @@
+package com.style24.admin.biz.dao;
+
+import java.util.Collection;
+
+import org.springframework.stereotype.Repository;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.Plan;
+
+/**
+ * 기획전 Dao
+ *
+ * @author sowon
+ * @since 2021. 2. 4
+ */
+
+@ShopDs
+@Repository
+public interface TsaPlanDao {
+	/**
+	 * 기획전 코너 전체 조회
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 4
+	 */
+	Collection<Plan> getPlanAllList(Plan param);
+	
+	/**
+	 * 기획전 웹 등록
+	 *
+	 * @param 기획전 등록 정보
+	 * @author rladbwnd5
+	 * @since 2019. 12. 31
+	 */
+	void createPlanWebInfo(Plan param);
+	
+	/**
+	 * 기획전 목록
+	 *
+	 * @param 검색조건
+	 * @return
+	 * @author sowon
+	 * @since 2019. 12. 27
+	 */
+	Collection<Plan> getPlanList(Plan param);
+	
+	/**
+	 * 기획전 리스트 카운트 조회
+	 * @param  param
+	 * @return int
+	 * @author sowon
+	 * @since 2021. 2. 5
+	 */
+	int getPlanListCnt(Plan param);
+	
+	/**
+	 * 기획전 삭제
+	 *
+	 * @param 기획전 번호
+	 * @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);
+	
+	/**
+	 * 기획전 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	void createPlanCopy(Plan param);
+	
+	/**
+	 * 기획전 브랜드 등록
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	void createPlanBrand(Plan param);
+	
+	/**
+	 * 기획전 브랜드 목록
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	Collection<Plan> getPlanBrandList(Plan param);
+
+
+}

+ 8 - 0
src/main/java/com/style24/admin/biz/dao/TsaRendererDao.java

@@ -241,4 +241,12 @@ public interface TsaRendererDao {
 	 */
 	 */
 	Collection<CommonCode> getAflinkList(String afChannel);
 	Collection<CommonCode> getAflinkList(String afChannel);
 
 
+	/**
+	 * 자사브랜드 조회
+	 * @param
+	 * @author xyzp1539
+	 * @since  2021-01-14
+	 */
+	Collection<CommonCode> getSelfBrandList();
+
 }
 }

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

@@ -2,12 +2,16 @@ package com.style24.admin.biz.service;
 
 
 import java.util.Collection;
 import java.util.Collection;
 
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
 import com.style24.admin.biz.dao.TsaCardPromotionDao;
 import com.style24.admin.biz.dao.TsaCardPromotionDao;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.CardPromotion;
+import com.style24.persistence.domain.CardPromotionCondition;
+import com.style24.persistence.domain.CardPromotionTarget;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 
 
@@ -25,7 +29,7 @@ public class TsaCardPromotionService {
 	private TsaCardPromotionDao cardPromotionDao;
 	private TsaCardPromotionDao cardPromotionDao;
 
 
 	/**
 	/**
-	 * 카드무이자할부 목록 건
+	 * 카드무이자할부 목록 건수
 	 * @param cardPromotion
 	 * @param cardPromotion
 	 * @return
 	 * @return
 	 * @author eskim
 	 * @author eskim
@@ -53,13 +57,267 @@ public class TsaCardPromotionService {
 	 * @author eskim
 	 * @author eskim
 	 * @since 2021. 02. 1
 	 * @since 2021. 02. 1
 	 */
 	 */
+	@Transactional("shopTxnManager")
 	public void saveCardInterest(CardPromotion cardPromotion) {
 	public void saveCardInterest(CardPromotion cardPromotion) {
 
 
 		Integer userNo = TsaSession.getInfo().getUserNo();
 		Integer userNo = TsaSession.getInfo().getUserNo();
+		log.info("[saveCardInterest] cardPromotion = {}", cardPromotion);
+		// 카드 프로모션 저장
+		cardPromotion.setRegNo(userNo);
+		cardPromotion.setUpdNo(userNo);
 
 
+		cardPromotion.setPrmtStd(cardPromotion.getPrmtStd().replace("-", ""));
+		cardPromotion.setPrmtEdd(cardPromotion.getPrmtEdd().replace("-", ""));
 
 
-		cardPromotionDao.saveCardInterest(cardPromotion);
+		cardPromotionDao.saveCardPromotion(cardPromotion);
+		log.info("[saveCardInterest] cardPromotion 2  = {}", cardPromotion);
+		// 카드 프로모션 행사조건 저장
+		if ("B".equals(cardPromotion.getPrmtGb())) {
+			if (cardPromotion.getArrMinNoItrt().length > 0) {
+				int cardPromotionSize = cardPromotion.getArrMinNoItrt().length;
+				for(int i=0; i < cardPromotionSize; i++ ) {
+
+					CardPromotionCondition cardPromotionCondition = new CardPromotionCondition();
+					cardPromotionCondition.setRegNo(userNo);
+					cardPromotionCondition.setUpdNo(userNo);
+					cardPromotionCondition.setCardPrmtSq(cardPromotion.getCardPrmtSq());
+
+					cardPromotionCondition.setMinNoItrt(cardPromotion.getArrMinNoItrt()[i].toString());
+					cardPromotionCondition.setMaxNoItrt(cardPromotion.getArrMaxNoItrt()[i].toString());
+					cardPromotionCondition.setMinPayAmt(Integer.parseInt(cardPromotion.getArrMinPayAmt()[i].toString()));
+					if (cardPromotion.getCardPrmtCdtSq() != null && cardPromotion.getCardPrmtCdtSq().length > 0) {
+						if (!StringUtils.isBlank(cardPromotion.getCardPrmtCdtSq()[i])) {
+							cardPromotionCondition.setCardPrmtCdtSq(Integer.parseInt(cardPromotion.getCardPrmtCdtSq()[i].toString()));
+						}
+					}
+
+					cardPromotionDao.saveCardPromotionCondition(cardPromotionCondition);
+					log.info("[saveCardInterest] cardPromotionCondition 2  = {}", cardPromotionCondition);
+					// 카드 프로모션 카드 삭제
+					cardPromotionDao.deleteCardPromotionTarget(cardPromotionCondition.getCardPrmtCdtSq());
+
+					// 카드 프로모션 카드목록 저장
+					if (cardPromotion.getArrCardCd().length > 0) {
+						String cardCd =  cardPromotion.getArrCardCd()[i].toString(); //  형식 G941_01/G941_06/G941_11
+						String [] arrCardCd = cardCd.split("/");
+						int cardSize = arrCardCd.length;
+						for(int j=0; j < cardSize; j++ ) {
+							CardPromotionTarget cardPromotionTarget = new CardPromotionTarget();
+							cardPromotionTarget.setRegNo(userNo);
+							cardPromotionTarget.setUpdNo(userNo);
+							cardPromotionTarget.setCardPrmtCdtSq(cardPromotionCondition.getCardPrmtCdtSq());
+							cardPromotionTarget.setPrmtTargetCd(arrCardCd[j].toString());
+
+							cardPromotionDao.createCardPromotionTarget(cardPromotionTarget);
+						}
+					}
+				}
+			}
+		}else {
+
+			CardPromotionCondition cardPromotionCondition = new CardPromotionCondition();
+			cardPromotionCondition.setRegNo(userNo);
+			cardPromotionCondition.setUpdNo(userNo);
+			cardPromotionCondition.setCardPrmtSq(cardPromotion.getCardPrmtSq());
+
+			cardPromotionCondition.setDcWay(cardPromotion.getDcWay());
+			cardPromotionCondition.setDcVal(cardPromotion.getDcVal());
+			cardPromotionCondition.setMaxDcAmt(cardPromotion.getMaxDcAmt());
+			cardPromotionCondition.setMinPayAmt(cardPromotion.getMinPayAmt());
+			if (cardPromotion.getCardPrmtCdtSq() != null && cardPromotion.getCardPrmtCdtSq().length > 0) {
+				if (!StringUtils.isBlank(cardPromotion.getCardPrmtCdtSq()[0])) {
+					cardPromotionCondition.setCardPrmtCdtSq(Integer.parseInt(cardPromotion.getCardPrmtCdtSq()[0].toString()));
+				}
+			}
+
+			cardPromotionDao.saveCardPromotionCondition(cardPromotionCondition);
+			log.info("[saveCardInterest] cardPromotionCondition 2  = {}", cardPromotionCondition);
+			// 카드 프로모션 카드 삭제
+			cardPromotionDao.deleteCardPromotionTarget(cardPromotionCondition.getCardPrmtCdtSq());
+
+			// 카드 프로모션 카드목록 저장
+			if (cardPromotion.getArrCardCd().length > 0) {
+				String cardCd =  cardPromotion.getArrCardCd()[0].toString(); //  형식 G941_01/G941_06/G941_11
+				String [] arrCardCd = cardCd.split("/");
+				int cardSize = arrCardCd.length;
+				for(int j=0; j < cardSize; j++ ) {
+					CardPromotionTarget cardPromotionTarget = new CardPromotionTarget();
+					cardPromotionTarget.setRegNo(userNo);
+					cardPromotionTarget.setUpdNo(userNo);
+					cardPromotionTarget.setCardPrmtCdtSq(cardPromotionCondition.getCardPrmtCdtSq());
+					cardPromotionTarget.setPrmtTargetCd(arrCardCd[j].toString());
+
+					cardPromotionDao.createCardPromotionTarget(cardPromotionTarget);
+				}
+			}
+
+		}
+
+
+		// 삭제할 프로모션 조건이 있는경우
+		if(!StringUtils.isEmpty(cardPromotion.getDelCardPrmtCdtSq())) {
+			String [] delCardPrmtCdtSq = cardPromotion.getDelCardPrmtCdtSq().split("/");
+			int cardPrmtCdtSq = 0;
+			for(int j=0; j < delCardPrmtCdtSq.length; j++ ) {
+				if (!StringUtils.isBlank(delCardPrmtCdtSq[j])) {
+					cardPrmtCdtSq = Integer.parseInt(delCardPrmtCdtSq[j]);
+					cardPromotionDao.deleteCardPromotionCondition(cardPrmtCdtSq);
+					cardPromotionDao.deleteCardPromotionTarget(cardPrmtCdtSq);
+				}
+			}
+
+		}
 	}
 	}
 
 
+	/**
+	 * 카드무이자할부 조회
+	 * @param cardPrmtSq
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 1
+	 */
+	public CardPromotion getCardInterest(Integer cardPrmtSq) {
+		CardPromotion cardPrmt = new CardPromotion();
+		cardPrmt.setCardPrmtSq(cardPrmtSq);
+		cardPrmt.setPrmtGb("B");	// 무이자
+		cardPrmt.setSearch("1");	// 프로모션id
+		cardPrmt.setCondition(Integer.toString(cardPrmtSq));
+		Collection<CardPromotion> cardInterestList = cardPromotionDao.getCardInterestList(cardPrmt);
+
+		CardPromotion cardPromotion = new CardPromotion();
+		if (cardInterestList != null && !cardInterestList.isEmpty()) {
+			cardPromotion = cardInterestList.iterator().next();
+		}
+
+		Collection<CardPromotionCondition> cardPrmtCdtList = cardPromotionDao.getCardPromotionConditionList(cardPrmtSq);
+
+
+		for (CardPromotionCondition cardPromotionCondition: cardPrmtCdtList) {
+			String cardCd = "";
+			String cardNm = "";
+			Collection<CardPromotionTarget> cardPrmtTgtList = cardPromotionDao.getCardPromotionTargetList(cardPromotionCondition.getCardPrmtCdtSq());
+			for(CardPromotionTarget cardPromotionTarget : cardPrmtTgtList) {
+				cardCd += cardPromotionTarget.getPrmtTargetCd() +"/";
+				cardNm += cardPromotionTarget.getPrmtTargetNm() +"/";
+			}
+
+			cardPromotionCondition.setArrCardCd(cardCd.substring(0, cardCd.lastIndexOf("/")));
+			cardPromotionCondition.setArrCardNm(cardNm.substring(0, cardNm.lastIndexOf("/")));
+		}
+
+		cardPromotion.setCardPrmtCdtList(cardPrmtCdtList);
+
+		log.info("[getCardPromotion] cardPromotion = {}", cardPromotion);
+		return cardPromotion;
+	}
 
 
+	/**
+	 * 카드프로모션 비노출처리
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 2
+	 */
+	@Transactional("shopTxnManager")
+	public void updateCardPromotionDsipYn(CardPromotion cardPromotion) {
+		cardPromotion.setUpdNo(TsaSession.getInfo().getUserNo());
+		cardPromotionDao.updateCardPromotionDsipYn(cardPromotion);
+	}
+
+	/**
+	 * 카드프로모션 삭제
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 2
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteCardPromotion(CardPromotion cardPromotion) {
+
+		for(String tmpCardPrmtSq: cardPromotion.getArrCardPrmtSq()) {
+			int cardPrmtSq = Integer.parseInt(tmpCardPrmtSq);
+			//카드프로모션 조건 조회
+			Collection<CardPromotionCondition> cardPrmtCdtList = cardPromotionDao.getCardPromotionConditionList(cardPrmtSq);
+			for (CardPromotionCondition cardPromotionCondition : cardPrmtCdtList){
+				//카드프로모션 대상 삭제
+				cardPromotionDao.deleteCardPromotionTarget(cardPromotionCondition.getCardPrmtCdtSq());
+				//카드프로모션 조건 삭제
+				cardPromotionDao.deleteCardPromotionCondition(cardPromotionCondition.getCardPrmtCdtSq());
+			}
+			//카드프로모션삭제
+			cardPromotionDao.deleteCardPromotion(cardPrmtSq);
+		}
+	}
+
+	/**
+	 * 카드프로모션 목록 건수
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 03
+	 */
+	public int getCardPromotionListCount(CardPromotion cardPromotion) {
+		return cardPromotionDao.getCardPromotionListCount(cardPromotion);
+	}
+
+	/**
+	 * 카드프로모션 목록
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 03
+	 */
+	public Collection<CardPromotion> getCardPromotionList(CardPromotion cardPromotion) {
+		return cardPromotionDao.getCardPromotionList(cardPromotion);
+	}
+
+	/**
+	 * 카드무이자할부 조회
+	 * @param cardPrmtSq
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 1
+	 */
+	public CardPromotion getCardPromotion(Integer cardPrmtSq) {
+		CardPromotion cardPrmt = new CardPromotion();
+		cardPrmt.setCardPrmtSq(cardPrmtSq);
+		cardPrmt.setSearch("1");	// 프로모션id
+		cardPrmt.setCondition(Integer.toString(cardPrmtSq));
+		Collection<CardPromotion> cardInterestList = cardPromotionDao.getCardPromotionList(cardPrmt);
+
+		CardPromotion cardPromotion = new CardPromotion();
+		if (cardInterestList != null && !cardInterestList.isEmpty()) {
+			cardPromotion = cardInterestList.iterator().next();
+//			cardPromotion.setCardPrmtSq(tmpCardPromotionCondition.getCardPrmtSq());
+//			cardPromotion.setPrmtNm(tmpCardPromotionCondition.getPrmtNm());
+//			cardPromotion.setPrmtStd(tmpCardPromotionCondition.getPrmtStd());
+//			cardPromotion.setPrmtEdd(tmpCardPromotionCondition.getPrmtEdd());
+//			cardPromotion.setPrmtGb(tmpCardPromotionCondition.getPrmtGb());
+//			cardPromotion.setDcGb(tmpCardPromotionCondition.getDcGb());
+//			cardPromotion.setLinkUrl(tmpCardPromotionCondition.getLinkUrl());
+//			cardPromotion.setNote(tmpCardPromotionCondition.getNote());
+//			cardPromotion.setDispYn(tmpCardPromotionCondition.getDispYn());
+		}
+
+		Collection<CardPromotionCondition> cardPrmtCdtList = cardPromotionDao.getCardPromotionConditionList(cardPrmtSq);
+
+
+		for (CardPromotionCondition cardPromotionCondition: cardPrmtCdtList) {
+			String cardCd = "";
+			String cardNm = "";
+			Collection<CardPromotionTarget> cardPrmtTgtList = cardPromotionDao.getCardPromotionTargetList(cardPromotionCondition.getCardPrmtCdtSq());
+			for(CardPromotionTarget cardPromotionTarget : cardPrmtTgtList) {
+				cardCd += cardPromotionTarget.getPrmtTargetCd() +"/";
+				cardNm += cardPromotionTarget.getPrmtTargetNm() +"/";
+			}
+
+			cardPromotionCondition.setArrCardCd(cardCd.substring(0, cardCd.lastIndexOf("/")));
+			cardPromotionCondition.setArrCardNm(cardNm.substring(0, cardNm.lastIndexOf("/")));
+		}
+
+		cardPromotion.setCardPrmtCdtList(cardPrmtCdtList);
+
+		log.info("[getCardPromotion] cardPromotion = {}", cardPromotion);
+		return cardPromotion;
+	}
 }
 }

+ 0 - 423
src/main/java/com/style24/admin/biz/service/TsaCouponService.java

@@ -1,423 +0,0 @@
-package com.style24.admin.biz.service;
-
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.style24.admin.biz.dao.TsaCouponDao;
-import com.style24.admin.support.env.TsaConstants;
-import com.style24.admin.support.security.session.TsaSession;
-import com.style24.core.support.env.TscConstants;
-import com.style24.persistence.domain.*;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Random;
-
-/**
- * 쿠폰 Service
- *
- * @author xyzp1539
- * @since 2021. 01. 11
- */
-@Service
-@Slf4j
-public class TsaCouponService {
-
-	@Autowired
-	private TsaCouponDao couponDao;
-
-	@Autowired
-	private TsaCommonService commonService;
-
-	/**
-	 * 쿠폰 저장
-	 * @param params
-	 * @author xyzp1539
-	 * @since  2021-01-11
-	 */
-	@Transactional("shopTxnManager")
-	public String saveCoupon(Coupon params){
-		int cpnId = params.getCpnId();		// 쿠폰ID (신규생성인지 수정인지 구분하기 위해 params의 cpnId를 먼저 가져옴 > 쿠폰 생성시 cpnId를 저장하기때문임)
-		params.setRegNo(TsaSession.getInfo().getUserNo());
-		params.setUpdNo(TsaSession.getInfo().getUserNo());
-
-		couponDao.couponInsert(params);
-
-		Gson gson = new Gson();
-		Integer sequence;
-		// 적용대상 - 공급업체
-		Collection<CouponRefval> supplyCompList = gson.fromJson(params.getSupplyCompList() , new TypeToken<Collection<CouponRefval>>(){}.getType());
-		for(CouponRefval supplyComp : supplyCompList) {
-			sequence = null;
-
-			if(supplyComp.getCpnRefvalSq() != null && supplyComp.getCpnRefvalSq() > 0){
-				sequence = supplyComp.getCpnRefvalSq();
-			}
-
-			supplyComp.setCpnId(cpnId);
-			supplyComp.setCpnRefvalSq(sequence);
-			supplyComp.setCpnTarget("G260_13");
-			supplyComp.setRefVal(supplyComp.getSupplyCompCd());
-			supplyComp.setRegNo(TsaSession.getInfo().getUserNo());
-			supplyComp.setUpdNo(TsaSession.getInfo().getUserNo());
-			couponDao.saveCouponRefVal(supplyComp);
-		}
-		// 적용대상 - 브랜드
-		Collection<CouponRefval> brandList = gson.fromJson(params.getBrandList() , new TypeToken<Collection<CouponRefval>>(){}.getType());
-		for(CouponRefval brand : brandList) {
-			sequence = null;
-
-			if(brand.getCpnRefvalSq() != null && brand.getCpnRefvalSq() > 0){
-				sequence = brand.getCpnRefvalSq();
-			}
-
-			brand.setCpnId(cpnId);
-			brand.setCpnRefvalSq(sequence);
-			brand.setCpnTarget("G260_12");
-			brand.setRefVal(brand.getBrandCd());
-			brand.setRegNo(TsaSession.getInfo().getUserNo());
-			brand.setUpdNo(TsaSession.getInfo().getUserNo());
-
-			couponDao.saveCouponRefVal(brand);
-		}
-		// 적용대상 - 적용상품
-		Collection<CouponRefval> applyGoodsList = gson.fromJson(params.getApplyGoodsList() , new TypeToken<Collection<CouponRefval>>(){}.getType());
-		for(CouponRefval applyGoods : applyGoodsList ) {
-			sequence = null;
-
-			if(applyGoods.getCpnRefvalSq() != null && applyGoods.getCpnRefvalSq() > 0){
-				sequence = applyGoods.getCpnRefvalSq();
-			}
-			applyGoods.setCpnId(cpnId);
-			applyGoods.setCpnRefvalSq(sequence);
-			applyGoods.setCpnTarget("G260_10");
-			applyGoods.setRefVal(applyGoods.getGoodsCd());
-			applyGoods.setRegNo(TsaSession.getInfo().getUserNo());
-			applyGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-
-			couponDao.saveCouponRefVal(applyGoods);
-		}
-		// 적용대상 - 카테고리
-		Collection<CouponRefval> cateList = gson.fromJson(params.getCateList() , new TypeToken<Collection<CouponRefval>>(){}.getType());
-		for(CouponRefval cate : cateList ) {
-			sequence = null;
-
-			if(cate.getCpnRefvalSq() != null && cate.getCpnRefvalSq() > 0){
-				sequence = cate.getCpnRefvalSq();
-			}
-			cate.setCpnId(cpnId);
-			cate.setCpnRefvalSq(sequence);
-			cate.setCpnTarget("G260_11");
-			cate.setRefVal(cate.getCateNo());
-			cate.setRefFormalGb(cate.getFormalGb());
-			cate.setRefBrandCd(cate.getBrandCd());		// ag-grid 브랜드코드
-			cate.setRegNo(TsaSession.getInfo().getUserNo());
-			cate.setUpdNo(TsaSession.getInfo().getUserNo());
-
-			couponDao.saveCouponRefVal(cate);
-		}
-		// 적용대상 - 제외상품
-		Collection<CouponRefval> exceptGoodsList = gson.fromJson(params.getExceptGoodsList() , new TypeToken<Collection<CouponRefval>>(){}.getType());
-		for(CouponRefval exceptGoods: exceptGoodsList ) {
-			sequence = null;
-
-			if(exceptGoods.getCpnRefvalSq() != null && exceptGoods.getCpnRefvalSq() > 0){
-				sequence = exceptGoods.getCpnRefvalSq();
-			}
-
-			exceptGoods.setCpnId(cpnId);
-			exceptGoods.setCpnRefvalSq(sequence);
-			exceptGoods.setCpnTarget("G260_14");
-			exceptGoods.setRefVal(exceptGoods.getGoodsCd());
-			exceptGoods.setRegNo(TsaSession.getInfo().getUserNo());
-			exceptGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-
-			couponDao.saveCouponRefVal(exceptGoods);
-		}
-		// 입점업체분담율
-		Collection<CouponBurden> burdenList = gson.fromJson(params.getBurdenList() , new TypeToken<Collection<CouponBurden>>(){}.getType());
-		for(CouponBurden burden: burdenList ) {
-			burden.setCpnId(cpnId);
-			burden.setRegNo(TsaSession.getInfo().getUserNo());
-			burden.setUpdNo(TsaSession.getInfo().getUserNo());
-
-			couponDao.saveCouponBurden(burden);
-		}
-
-		// 수정모드이고 변경된 쿠폰상태가 대기 , 중지 인경우 고객이 발급받은 내용도 변경
-		if(cpnId != 0 &&
-				(params.getCpnStat().equals("G232_10") || params.getCpnStat().equals("G232_12")) ) {
-
-			CustCoupon custCoupon = new CustCoupon();
-			custCoupon.setCpnId(params.getCpnId());
-			custCoupon.setUseYn("Y");
-			ArrayList<CustCoupon> custList = couponDao.getCouponIssueCustList(custCoupon);
-
-			if(custList != null && custList.size() > 0 ) {
-				for(CustCoupon issueCust : custList) {
-					issueCust.setAvailEddt(params.getAvailEddt());
-					issueCust.setUpdNo(TsaSession.getInfo().getUserNo());
-
-					couponDao.updateCustCouponAvailEddt(issueCust);
-				}
-			}
-		}
-
-		// 시리얼 쿠폰 생성(최초 쿠폰 생성일 경우에만)
-		if(cpnId == 0 && params.getCpnType().equals(TscConstants.CpnType.PAY_CPN.value()) && params.getDcCdGb().equals(TscConstants.DcCdGb.SERIAL.value())) {
-			// 시리얼 쿠폰명이 동일한 쿠폰이 일정 겹치는 부분이 있는지 확인
-			int overlapCheck = couponDao.getSerialOverlapCheck(params);
-			if(overlapCheck < 1) {
-				for(int i = 0 ; i < params.getTotPubLimitQty() ; i++) {
-					couponDao.createRandomCouponInfo(params);
-				}
-			} else {
-				throw new IllegalStateException("같은 시리얼명이 사용되는 쿠폰이 중복됩니다. 기간을 확인해주세요.");
-			}
-		} else if(cpnId == 0 && params.getCpnType().equals(TscConstants.CpnType.PAY_CPN.value()) && params.getDcCdGb().equals(TscConstants.DcCdGb.RANDOM.value())) {
-			Random random = new Random();
-			String prefixRandomCpn = "" + params.getCpnId();		// 랜덤 번호는 쿠폰번호 + 랜덤문자 = 12로 처리함
-			// 랜덤 문자 발급 수 만큼 진행
-			for(int j = 0 ; j < params.getTotPubLimitQty() ; j++) {
-				boolean chk = true;
-				while (chk) {
-					// 대문자+소문자+숫자 조합 10자리 인증번호 생성
-					StringBuilder sb = new StringBuilder();
-					// 쿠폰번호 + 랜덤글자 = 12 글자만큼 생성
-					for (int i = 0; i < 12 - prefixRandomCpn.length(); i++) {
-						int index = random.nextInt(2);
-						switch (index) {
-							case 0:
-								sb.append((char) (random.nextInt(26) + 65));
-								break;
-							case 1:
-								sb.append(random.nextInt(10));
-								break;
-						}
-					}
-
-					// 인증번호 중복 체크
-					int cnt = couponDao.getRandomCouponNmCnt(sb.toString());
-
-					if (cnt == 0) {
-						// 인증번호 설정
-						params.setRdCpnNm(sb.substring(0, 4) + params.getCpnId() + sb.substring(4));
-						couponDao.createRandomCouponInfo(params);
-						chk = false;
-					}
-				}
-			}
-		}
-
-		return "SUCCESS";
-	}
-
-	/**
-	 * 쿠폰 리스트 조회
-	 * @param  param
-	 * @return ArrayList<Coupon>
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	public ArrayList<Coupon> getCouponList(Coupon param) {
-		return couponDao.getCouponList(param);
-	}
-
-	/**
-	 * 쿠폰리스트 카운트 조회
-	 * @param  param
-	 * @return int
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	public int getCouponListCnt(Coupon param) {
-		return couponDao.getCouponListCnt(param);
-	}
-
-	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
-	 */
-	public Collection<Coupon> getCouponRetrieveList(Coupon coupon) {
-		return couponDao.getCouponRetrieveList(coupon);
-	}
-
-	/**
-	 * 쿠폰조회 목록
-	 * @param
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
-	 */
-	public Collection<CommonCode> getSelfBrandList() {
-		return couponDao.getSelfBrandList();
-	}
-
-	/**
-	 * 쿠폰 상세 조회
-	 * @param  cpnId
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-15
-	 */
-    public Coupon getCouponDetail(int cpnId) { return couponDao.getCouponDetail(cpnId);}
-
-	/**
-	 * 쿠폰 발급 개수 조회
-	 * @param  cpnId
-	 * @return  cnt
-	 * @author xyzp1539
-	 * @since 2021-01-15
-	 */
-	public int getCouponIssueCnt(int cpnId) {
-		return couponDao.getCouponIssueCnt(cpnId);
-	}
-
-	/**
-	 * 쿠폰 적용 대상 - 제외상품
-	 * @param  cpnId
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	public ArrayList<CouponRefval> getCouponRefvalExceptGoodsList(int cpnId ) {
-		CouponRefval cpnRefval = new CouponRefval();
-		cpnRefval.setCpnId(cpnId);
-		cpnRefval.setCpnTarget("G260_14");
-		return couponDao.getCouponRefvalExceptGoodsList(cpnRefval);
-	}
-
-	/**
-	 * 쿠폰 적용 대상 - 브랜드
-	 * @param cpnId
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	public ArrayList<CouponRefval> getCouponRefvalBrandList(int cpnId ) {
-		CouponRefval cpnRefval = new CouponRefval();
-		cpnRefval.setCpnId(cpnId);
-		cpnRefval.setCpnTarget("G260_12");
-		return couponDao.getCouponRefvalBrandList(cpnRefval);
-	}
-
-	/**
-	 * 쿠폰 적용 대상 - 카테고리
-	 * @param cpnId
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	public ArrayList<CouponRefval> getCouponRefvalCategoryList(int cpnId) {
-		CouponRefval cpnRefval = new CouponRefval();
-		cpnRefval.setCpnId(cpnId);
-		cpnRefval.setCpnTarget("G260_11");
-		return couponDao.getCouponRefvalCategoryList(cpnRefval);
-	}
-
-	/**
-	 * 쿠폰 적용 대상 - 적용상품
-	 * @param  cpnId
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	public ArrayList<CouponRefval> getCouponRefvalGoodsList(int cpnId , String cpnTarget) {
-		CouponRefval cpnRefval = new CouponRefval();
-		cpnRefval.setCpnId(cpnId);
-		cpnRefval.setCpnTarget(cpnTarget);
-		return couponDao.getCouponRefvalGoodsList(cpnRefval);
-	}
-
-	/**
-	 * 쿠폰 적용 대상 - 공급처
-	 * @param cpnId
-	 * @return Coupon
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	public ArrayList<CouponRefval> getCouponRefvalSupplyCompList(int cpnId) {
-		CouponRefval cpnRefval = new CouponRefval();
-		cpnRefval.setCpnId(cpnId);
-		cpnRefval.setCpnTarget("G260_13");
-		return couponDao.getCouponRefvalSupplyCompList(cpnRefval);
-	}
-
-	/**
-	 * 쿠폰 입점업체 분담율 조회
-	 * @param  
-	 * @return 
-	 * @author xyzp1539
-	 * @since 2021-01-18
-	 */
-	public ArrayList<Coupon> getCouponBurdenList(int cpnId) {
-		return couponDao.getCouponBurdenList(cpnId);
-	}
-
-	/**
-	 * 쿠폰 적용대상 삭제
-	 * @param   couponRefval
-	 * @return
-	 * @author xyzp1539
-	 * @since 2021-01-19
-	 */
-	@Transactional("shopTxnManager")
-	public void updateCouponRefval(CouponRefval couponRefval) {
-		couponRefval.setUpdNo(TsaSession.getInfo().getUserNo());
-		couponDao.updateCouponRefval(couponRefval);
-	}
-
-	/**
-	 * 고객 쿠폰
-	 * @param
-	 * @return
-	 * @author xyzp1539
-	 * @since 2021-01-21
-	 */
-	@Transactional("shopTxnManager")
-	public void saveCouponCustPub(CustCoupon custCoupon) {
-		Gson gson = new Gson();
-
-		Collection<CustCoupon> custPubList = gson.fromJson(custCoupon.getCustList() , new TypeToken<Collection<CustCoupon>>(){}.getType());
-		for(CustCoupon custPub : custPubList ) {
-			custPub.setCpnId(custCoupon.getCpnId());
-			custPub.setAvailStdt(custCoupon.getAvailStdt());
-			custPub.setAvailEddt(custCoupon.getAvailEddt());
-			custPub.setPubReason(custCoupon.getPubReason());
-			custPub.setPubReasonDtl(custCoupon.getPubReasonDtl());
-			custPub.setEndAlimSendYn(custCoupon.getEndAlimSendYn());
-			custPub.setRegNo(TsaSession.getInfo().getUserNo());
-			custPub.setUpdNo(TsaSession.getInfo().getUserNo());
-
-			couponDao.saveCouponCustPub(custPub);
-		}
-	}
-
-	/**
-	 * 랜덤쿠폰 생성 리스트 조회
-	 * @param
-	 * @return
-	 * @author xodud1202
-	 * @since 2021-01-26
-	 */
-	public ArrayList<CustCoupon> getRandomCouponInfo(int cpnId) {
-		return couponDao.getRandomCouponInfo(cpnId);
-	}
-
-	/**
-	 * 회원상세 - 쿠폰발급
-	 * @param coupon - 쿠폰정보
-	 * @author jsshin
-	 * @since 2021. 1. 29
-	 */
-	@Transactional("shopTxnManager")
-	public void saveCouponIssue(CustCoupon coupon) {
-		couponDao.saveCouponCustPub(coupon);
-	}
-}

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

@@ -5,6 +5,7 @@ import com.style24.admin.biz.dao.TsaCustomerDao;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.env.TscConstants;
+import com.style24.core.support.util.CryptoUtils;
 import com.style24.persistence.domain.Counsel;
 import com.style24.persistence.domain.Counsel;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustContactHst;
 import com.style24.persistence.domain.CustContactHst;
@@ -41,6 +42,17 @@ public class TsaCustomerService {
 	@Autowired
 	@Autowired
 	private TscCustomerService coreCustomerService;
 	private TscCustomerService coreCustomerService;
 
 
+	/**
+	 * 활동회원 건수
+	 * @param customerSearch - 검색조건
+	 * @return int
+	 * @author jsshin
+	 * @since 2021. 2. 01
+	 */
+	public int getCustomerActiveListCount(CustomerSearch customerSearch) {
+		return  customerDao.getCustomerActiveListCount(customerSearch);
+	}
+
 	/**
 	/**
 	 * 활동회원 목록
 	 * 활동회원 목록
 	 * @param customerSearch - 검색조건
 	 * @param customerSearch - 검색조건
@@ -61,6 +73,7 @@ public class TsaCustomerService {
 	 */
 	 */
 	public Customer getCustomerInfo(Integer custNo) {
 	public Customer getCustomerInfo(Integer custNo) {
 		Customer customer = new Customer();
 		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.setCustNo(custNo);
 		customer.setCustNo(custNo);
 		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
 		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
 		return coreCustomerService.getCustomerInfo(customer);
 		return coreCustomerService.getCustomerInfo(customer);
@@ -77,15 +90,14 @@ public class TsaCustomerService {
 		Integer userNo = TsaSession.getInfo().getUserNo();
 		Integer userNo = TsaSession.getInfo().getUserNo();
 		customer.setRegNo(userNo);
 		customer.setRegNo(userNo);
 		customer.setUpdNo(userNo);
 		customer.setUpdNo(userNo);
-
+		customer.encryptData();  // 암호화 처리
 		// 고객 이력 생성
 		// 고객 이력 생성
 		coreCustomerService.createCustomerHistory(customer);
 		coreCustomerService.createCustomerHistory(customer);
 
 
 		// 마케팅수신동의 이력 화면단에서 수신 변경이 없으면 ''처리
 		// 마케팅수신동의 이력 화면단에서 수신 변경이 없으면 ''처리
 		if (StringUtils.isNotBlank(customer.getSmsAgreeYn())
 		if (StringUtils.isNotBlank(customer.getSmsAgreeYn())
-				|| StringUtils.isNotBlank(customer.getSmsAgreeYn())
-				|| StringUtils.isNotBlank(customer.getAppAgreeYn()) ){
-
+				|| StringUtils.isNotBlank(customer.getEmailAgreeYn())
+				|| StringUtils.isNotBlank(customer.getAppAgreeYn())) {
 			coreCustomerService.createCustomerMarketHst(customer);
 			coreCustomerService.createCustomerMarketHst(customer);
 		}
 		}
 
 
@@ -127,6 +139,7 @@ public class TsaCustomerService {
 	 */
 	 */
 	@Transactional("shopTxnManager")
 	@Transactional("shopTxnManager")
 	public GagaMap saveCustomerSecede(Customer customer) {
 	public GagaMap saveCustomerSecede(Customer customer) {
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.setCustStat(TscConstants.CustStat.SECEDE.value());
 		customer.setCustStat(TscConstants.CustStat.SECEDE.value());
 		return coreCustomerService.saveCustomerSecede(customer);
 		return coreCustomerService.saveCustomerSecede(customer);
 	}
 	}
@@ -298,6 +311,17 @@ public class TsaCustomerService {
 		coreCustomerService.createCustomerContactHistory(custContactHst);
 		coreCustomerService.createCustomerContactHistory(custContactHst);
 	}
 	}
 
 
+	/**
+	 * 탈퇴회원 목록 건수
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2021. 02. 01
+	 */
+	public int getCustomerSecedeListCount(CustomerSearch customerSearch) {
+		return customerDao.getCustomerSecedeListCount(customerSearch);
+	}
+
 	/**
 	/**
 	 * 탈퇴회원 목록
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건
 	 * @param customerSearch - 검색조건
@@ -309,6 +333,17 @@ public class TsaCustomerService {
 		return customerDao.getCustomerSecedeList(customerSearch);
 		return customerDao.getCustomerSecedeList(customerSearch);
 	}
 	}
 
 
+	/**
+	 * 휴면회원 목록 건수
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2021. 02. 01
+	 */
+	public int getCustomerDormantListCount(CustomerSearch customerSearch) {
+		return customerDao.getCustomerDormantListCount(customerSearch);
+	}
+
 	/**
 	/**
 	 * 휴면회원 목록
 	 * 휴면회원 목록
 	 * @param customerSearch - 검색조건
 	 * @param customerSearch - 검색조건

+ 22 - 1
src/main/java/com/style24/admin/biz/service/TsaFreegiftPromotionService.java

@@ -130,8 +130,9 @@ public class TsaFreegiftPromotionService {
 			freegiftPromotionDao.deleteFreegiftGoodsInfo(param);		// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
 			freegiftPromotionDao.deleteFreegiftGoodsInfo(param);		// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
 			freegiftPromotionDao.deleteFreegiftSectionInfo(param);		// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
 			freegiftPromotionDao.deleteFreegiftSectionInfo(param);		// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
 			freegiftPromotionDao.deleteFreegiftValInfo(param);			// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
 			freegiftPromotionDao.deleteFreegiftValInfo(param);			// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
+			freegiftPromotionDao.deleteFreegiftGoodsApply(param);		// 사은품 프로모션 적용 업체/브랜드 실적용 데이터 제거
 		} else {
 		} else {
-			param.setFreegiftStat("G232_10");					// 프로모션 등록이면 대기 상태로 저장
+			param.setFreegiftStat("G232_10");							// 프로모션 등록이면 대기 상태로 저장
 			freegiftPromotionDao.createFreegoodsPromotionInfo(param);   // 사은품 프로모션 마스터 정보 저장
 			freegiftPromotionDao.createFreegoodsPromotionInfo(param);   // 사은품 프로모션 마스터 정보 저장
 		}
 		}
 
 
@@ -261,6 +262,26 @@ public class TsaFreegiftPromotionService {
 				freegiftPromotionDao.createPromotionFreeGoodsInfo(freegoodsGiveInfo);	// 사은품 지급 상품 영역 저장
 				freegiftPromotionDao.createPromotionFreeGoodsInfo(freegoodsGiveInfo);	// 사은품 지급 상품 영역 저장
 			}
 			}
 		}
 		}
+
+		// 공급업체 / 브랜드 실 사용 테이블 저장
+		if(param.getSupplyCompList() != null && param.getSupplyCompList().size() > 0 && param.getBrandList() != null && param.getBrandList().size() > 0) {
+			freegiftPromotionDao.insertFreegiftGoodsApplyList(param);
+		} else if (param.getSupplyCompList() != null && param.getSupplyCompList().size() > 0) {
+			FreeGoodsPromotion company = new FreeGoodsPromotion();
+			company.setFreegiftSq(param.getFreegiftSq());
+			company.setTargetGb("G260_13");		// 적용 대상 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
+			company.setRegNo(param.getRegNo());
+			freegiftPromotionDao.insertFreegiftGoodsApplyList(company);	// 등록된 업체 코드 등록
+			freegiftPromotionDao.insertFreegiftGoodsApplyCompanyOrBrandList(company);
+		} else if (param.getBrandList() != null && param.getBrandList().size() > 0) {
+			FreeGoodsPromotion brand = new FreeGoodsPromotion();
+			brand.setFreegiftSq(param.getFreegiftSq());
+			brand.setTargetGb("G260_12");		// 적용 대상 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
+			brand.setRegNo(param.getRegNo());
+			freegiftPromotionDao.insertFreegiftGoodsApplyList(brand);	// 등록된 업체 코드 등록
+			freegiftPromotionDao.insertFreegiftGoodsApplyCompanyOrBrandList(brand);
+		}
+
 	}
 	}
 
 
 	/**
 	/**

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

@@ -870,7 +870,7 @@ public class TsaGoodsService {
 			String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
 			String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
 			Goods tmpGoods = goodsDao.getGoods(goods);
 			Goods tmpGoods = goodsDao.getGoods(goods);
 			if (tmpGoods != null && !StringUtils.isBlank(tmpGoods.getGoodsSnm1())) {
 			if (tmpGoods != null && !StringUtils.isBlank(tmpGoods.getGoodsSnm1())) {
-				String[] arrGoodsSnm = tmpGoods.getGoodsSnm1().split(";");
+				String[] arrGoodsSnm = tmpGoods.getGoodsSnm1().split("\\;");
 				StringBuilder tempGoodsSnm = new StringBuilder();
 				StringBuilder tempGoodsSnm = new StringBuilder();
 				for (String loopGoodsSnm : arrGoodsSnm) {
 				for (String loopGoodsSnm : arrGoodsSnm) {
 					if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
 					if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
@@ -977,7 +977,7 @@ public class TsaGoodsService {
 		String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
 		String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
 		if (!StringUtils.isBlank(goods.getGoodsSnm1())) {
 		if (!StringUtils.isBlank(goods.getGoodsSnm1())) {
 			goods.setGoodsSnm1(GagaStringUtil.replace(goods.getGoodsSnm1(), " ", "")); // 빈값 삭제
 			goods.setGoodsSnm1(GagaStringUtil.replace(goods.getGoodsSnm1(), " ", "")); // 빈값 삭제
-			String[] arrGoodsSnm = goods.getGoodsSnm1().split(";");
+			String[] arrGoodsSnm = goods.getGoodsSnm1().split("\\;");
 			StringBuilder tempGoodsSnm = new StringBuilder();
 			StringBuilder tempGoodsSnm = new StringBuilder();
 			for (String loopGoodsSnm : arrGoodsSnm) {
 			for (String loopGoodsSnm : arrGoodsSnm) {
 				if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
 				if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
@@ -1240,6 +1240,7 @@ public class TsaGoodsService {
 			goodsStock.setOptCd(optCd);
 			goodsStock.setOptCd(optCd);
 			goodsStock.setOptCd1(goods.getOptCd1()[index]);
 			goodsStock.setOptCd1(goods.getOptCd1()[index]);
 			goodsStock.setOptCd2(goods.getOptCd2()[index]);
 			goodsStock.setOptCd2(goods.getOptCd2()[index]);
+			goodsStock.setAddPrice(Integer.parseInt(goods.getAddPrice()[index]));
 			goodsStock.setBaseStockQty(Integer.parseInt(goods.getBaseStockQty()[index]));
 			goodsStock.setBaseStockQty(Integer.parseInt(goods.getBaseStockQty()[index]));
 			goodsStock.setSoldoutYn(goods.getSoldoutYn()[index]);
 			goodsStock.setSoldoutYn(goods.getSoldoutYn()[index]);
 			goodsStock.setDispOrd(Integer.parseInt(goods.getDispOrd()[index]));
 			goodsStock.setDispOrd(Integer.parseInt(goods.getDispOrd()[index]));
@@ -2739,7 +2740,7 @@ public class TsaGoodsService {
 		GoodsMass goodsMass = mapper.convertValue(gagaMap, GoodsMass.class);
 		GoodsMass goodsMass = mapper.convertValue(gagaMap, GoodsMass.class);
 
 
 		if (StringUtils.isBlank(goodsMass.getGoodsCd())) {
 		if (StringUtils.isBlank(goodsMass.getGoodsCd())) {
-			throw new IllegalStateException("상품코드가 없습니다.");
+			throw new IllegalStateException("상품코드는 필수입니다.");
 		}
 		}
 
 
 		// 상품기본정보
 		// 상품기본정보
@@ -2759,6 +2760,14 @@ public class TsaGoodsService {
 			return goods.getGoodsStat();
 			return goods.getGoodsStat();
 		}
 		}
 
 
+		// 옵션
+		if (!UPDATE_NO_PATTERN.equals(goodsMass.getOptStr().trim())) {
+			goods.setGoodsRegMsg("옵션은 변경할 수 없습니다.");
+			goods.setGoodsStat("10");
+			this.setGoodsRegResult(goods, goodsMass, procJob);
+			return goods.getGoodsStat();
+		}
+
 		// 상품 고시
 		// 상품 고시
 		Collection<GoodsNotiInfo> newGoodsNotiList = new ArrayList<>(); //적용할 고시 정보
 		Collection<GoodsNotiInfo> newGoodsNotiList = new ArrayList<>(); //적용할 고시 정보
 		goods = this.getUpdateMassGoodsNotiCheck(goods, gagaMap, goodsOrigin, newGoodsNotiList);
 		goods = this.getUpdateMassGoodsNotiCheck(goods, gagaMap, goodsOrigin, newGoodsNotiList);
@@ -2795,7 +2804,7 @@ public class TsaGoodsService {
 				// 사용자 검색어를 검색어에 적용
 				// 사용자 검색어를 검색어에 적용
 				String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
 				String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
 
 
-				String[] arrGoodsSnm = goods.getGoodsSnm1().split(";");
+				String[] arrGoodsSnm = goods.getGoodsSnm1().split("\\;");
 				StringBuilder tempGoodsSnm = new StringBuilder();
 				StringBuilder tempGoodsSnm = new StringBuilder();
 				for (String loopGoodsSnm : arrGoodsSnm) {
 				for (String loopGoodsSnm : arrGoodsSnm) {
 					if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
 					if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
@@ -3441,7 +3450,7 @@ public class TsaGoodsService {
 		Collection<GoodsNotiInfo> goodsNotiList = new ArrayList<>();
 		Collection<GoodsNotiInfo> goodsNotiList = new ArrayList<>();
 		//고시분류 코드의 고시항목 조회
 		//고시분류 코드의 고시항목 조회
 		NotiInfo notiInfo = new NotiInfo();
 		NotiInfo notiInfo = new NotiInfo();
-		notiInfo.setSupplyVendorCd(goodsOrigin.getSupplyVendorCd());
+		notiInfo.setSupplyCompCd(goodsOrigin.getSupplyCompCd());
 		if (!UPDATE_NO_PATTERN.equals(newNiClsfCd)) {
 		if (!UPDATE_NO_PATTERN.equals(newNiClsfCd)) {
 			notiInfo.setNiClsfCd(newNiClsfCd);
 			notiInfo.setNiClsfCd(newNiClsfCd);
 		} else {
 		} else {

+ 24 - 6
src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java

@@ -145,6 +145,14 @@ public class TsaMorebetterService {
         Gson gson = new Gson();
         Gson gson = new Gson();
         String jsonData = gson.toJson(moreBetter);
         String jsonData = gson.toJson(moreBetter);
 
 
+        if("U".equals(moreBetter.getMode())){
+            morebetterDao.deleteTmtbGoods(moreBetter);      // TB_TMTB_GOODS DEL_YN 'Y' UPDATE
+            morebetterDao.deleteTmtbBurden(moreBetter);     // TB_TMTB_BURDEN DEL_YN 'Y' UPDATE
+            morebetterDao.deleteTmtbSection(moreBetter);    // TB_TMTB_SECTION DEL_YN 'Y' UPDATE
+            morebetterDao.deleteTmtbVal(moreBetter);        // TB_TMTB_VAL DEL_YN 'Y' UPDATE
+            morebetterDao.deleteTmtbApplyGoods(moreBetter); // TB_TMTB_APPLY_GOODS DELETE
+        }
+
         // TMTB 마스터(TB_TMTB) 저장
         // TMTB 마스터(TB_TMTB) 저장
         morebetterDao.saveMorebetterMst(moreBetter);
         morebetterDao.saveMorebetterMst(moreBetter);
 
 
@@ -166,12 +174,22 @@ public class TsaMorebetterService {
             regBrand.setTargetVal(regBrand.getBrandCd());
             regBrand.setTargetVal(regBrand.getBrandCd());
             regBrand.setRegNo(moreBetter.getRegNo());
             regBrand.setRegNo(moreBetter.getRegNo());
             regBrand.setUpdNo(moreBetter.getUpdNo());
             regBrand.setUpdNo(moreBetter.getUpdNo());
-
             morebetterDao.saveMorebetterGoods(regBrand);
             morebetterDao.saveMorebetterGoods(regBrand);
         }
         }
 
 
-        List<MoreBetterGoods> realApplyGoodsList = morebetterDao.getMorebetterRealApplyGoodsList(moreBetter);
         // 적용상품
         // 적용상품
+        for(MoreBetterGoods regApplyGoods : moreBetter.getGridApplyGoodsList()){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            regApplyGoods.setTmtbSq(moreBetter.getTmtbSq());
+            regApplyGoods.setTargetVal(regApplyGoods.getGoodsCd());
+            regApplyGoods.setRegNo(moreBetter.getRegNo());
+            regApplyGoods.setUpdNo(moreBetter.getUpdNo());
+            regApplyGoods.setMultiDuplicateGoods(moreBetter.getMultiDuplicateGoods());
+            morebetterDao.saveMorebetterGoods(regApplyGoods);
+        }
+
+        // apply_goods
+        List<MoreBetterGoods> realApplyGoodsList = morebetterDao.getMorebetterRealApplyGoodsList(moreBetter);
         for(MoreBetterGoods realApplyGoods : realApplyGoodsList){
         for(MoreBetterGoods realApplyGoods : realApplyGoodsList){
             for(MoreBetterGoods regApplyGoods : moreBetter.getApplyGoodsList()){
             for(MoreBetterGoods regApplyGoods : moreBetter.getApplyGoodsList()){
                 if(regApplyGoods.getGoodsCd().equals(realApplyGoods.getGoodsCd())){
                 if(regApplyGoods.getGoodsCd().equals(realApplyGoods.getGoodsCd())){
@@ -180,8 +198,6 @@ public class TsaMorebetterService {
                     regApplyGoods.setTargetVal(realApplyGoods.getGoodsCd());
                     regApplyGoods.setTargetVal(realApplyGoods.getGoodsCd());
                     regApplyGoods.setRegNo(moreBetter.getRegNo());
                     regApplyGoods.setRegNo(moreBetter.getRegNo());
                     regApplyGoods.setUpdNo(moreBetter.getUpdNo());
                     regApplyGoods.setUpdNo(moreBetter.getUpdNo());
-
-                    morebetterDao.saveMorebetterGoods(regApplyGoods);
                     morebetterDao.saveMorebetterApplyGoods(regApplyGoods);
                     morebetterDao.saveMorebetterApplyGoods(regApplyGoods);
                 }
                 }
             }
             }
@@ -190,6 +206,7 @@ public class TsaMorebetterService {
         // 제외상품
         // 제외상품
         for(MoreBetterGoods regExceptGoods : moreBetter.getExceptGoodsList()){
         for(MoreBetterGoods regExceptGoods : moreBetter.getExceptGoodsList()){
             // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
             // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            log.info("exception::{}",moreBetter.getExceptGoodsList());
             regExceptGoods.setTmtbSq(moreBetter.getTmtbSq());
             regExceptGoods.setTmtbSq(moreBetter.getTmtbSq());
             regExceptGoods.setTargetVal(regExceptGoods.getGoodsCd());
             regExceptGoods.setTargetVal(regExceptGoods.getGoodsCd());
             regExceptGoods.setRegNo(moreBetter.getRegNo());
             regExceptGoods.setRegNo(moreBetter.getRegNo());
@@ -344,12 +361,13 @@ public class TsaMorebetterService {
 
 
         morebetterDao.deleteTmtbApplyGoodsTemp(moreBetterGoods);
         morebetterDao.deleteTmtbApplyGoodsTemp(moreBetterGoods);
 
 
-        List<MoreBetterGoods> applyGoodsList = moreBetterGoods.getApplyGoodsList();
+        // 적용상품 그리드 데이터
+        List<MoreBetterGoods> applyGoodsList = moreBetterGoods.getGridApplyGoodsList();
 
 
         if(moreBetterGoods.getMultiSupplyCompCd().length > 0 || moreBetterGoods.getMultiBrand().length > 0){
         if(moreBetterGoods.getMultiSupplyCompCd().length > 0 || moreBetterGoods.getMultiBrand().length > 0){
+            // 공급업체, 브랜드에 해당하는 상품
             List<MoreBetterGoods> compBrandGoodsList = morebetterDao.getMorebetterCompBrandGoodsList(moreBetterGoods);
             List<MoreBetterGoods> compBrandGoodsList = morebetterDao.getMorebetterCompBrandGoodsList(moreBetterGoods);
             if(compBrandGoodsList.size() > 0){
             if(compBrandGoodsList.size() > 0){
-
                 for(int i=0; i<compBrandGoodsList.size(); i++){
                 for(int i=0; i<compBrandGoodsList.size(); i++){
                     moreBetterGoods.setGoodsCd(compBrandGoodsList.get(i).getGoodsCd());
                     moreBetterGoods.setGoodsCd(compBrandGoodsList.get(i).getGoodsCd());
                     morebetterDao.createTmtbApplyGoodsTemp(moreBetterGoods);
                     morebetterDao.createTmtbApplyGoodsTemp(moreBetterGoods);

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

@@ -0,0 +1,478 @@
+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;
+import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.MoreBetterGoods;
+import com.style24.persistence.domain.Plan;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 기획전 Service
+ * 
+ * @author sowon
+ * @since 2021. 02. 04
+ */
+@Service
+@Slf4j
+public class TsaPlanService {
+
+	@Autowired
+	private TsaPlanDao planDao;
+	
+	@Autowired
+	private Environment env;
+	
+	/**
+	 * 기획전 코너 전체 조회
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 4
+	 */
+	public Collection<Plan> getPlanAllList(Plan param) {
+		return planDao.getPlanAllList(param);
+	}
+	
+	/**
+	 * 기획전 웹 등록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	@Transactional("shopTxnManager")
+	public void createPlanWebInfo(Plan param) {
+		Plan plan = new Plan();
+		param.setRegNo(TsaSession.getInfo().getUserNo());
+		param.setUpdNo(TsaSession.getInfo().getUserNo());
+		planDao.createPlanWebInfo(param);
+		
+		String[] brand = param.getMultiBrand();
+		// 기획전 브랜드 insert
+		for (int j = 0; j < brand.length; j++) {
+			plan.setBrandCd(brand[j]);
+			plan.setPlanSq(param.getPlanSq());
+			plan.setRegNo(TsaSession.getInfo().getUserNo());
+			plan.setUpdNo(TsaSession.getInfo().getUserNo());
+			planDao.createPlanBrand(plan);
+		}
+		    
+
+		log.debug("planSq : {}", param.getPlanSq());
+
+		// 웹용 소스
+		if (StringUtils.isNotBlank(param.getFsrcPc())) {
+			createPlanFsrcPc(param);
+		}
+
+		// 모바일용 소스
+		if (StringUtils.isNotBlank(param.getFsrcMobile())) {
+			createPlanFsrcMobile(param);
+		}
+
+		//기획전 응모이벤트
+//		if (StringUtils.isNotBlank(param.getPrivacyPolicy())) {
+//			int i = 0;
+//			for (String planQtitle : param.getPlanQtitle()) {
+//				PlanQuestAnswer planQuestAnswer = new PlanQuestAnswer();
+//				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++;
+//			}
+//		}
+
+	}
+	/*
+	 * 기획전 웹용 소스 등록
+	 */
+	@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;
+	}
+	
+	/**
+	 * 기획전 목록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 5
+	 */
+	public Collection<Plan> getPlanList(Plan param) {
+		return planDao.getPlanList(param);
+	}
+	
+	/**
+	 * 기획전 목록 카운트 조회
+	 * @param  param
+	 * @return int
+	 * @author sowon
+	 * @since 2021. 2. 5
+	 */
+	public int getPlanListCnt(Plan param) {
+		return planDao.getPlanListCnt(param);
+	}
+	
+	/**
+	 * 기획전 삭제 처리
+	 *
+	 * @param
+	 * @return
+	 * @author rladbwnd5
+	 * @since 2021. 2. 5
+	 */
+	@Transactional("shopTxnManager")
+	public void deletePlan(Collection<Plan> paramList) {
+		for (Plan plan : paramList) {
+			plan.setUpdNo(TsaSession.getInfo().getUserNo());
+			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 복사대상 기획전 번호
+	 * @return 복사된 기획전 번호
+	 * @author rladbwnd5
+	 * @since 2021. 02. 09
+	 */
+	@Transactional("shopTxnManager")
+	public Plan copyPlan(Plan param) {
+		Plan plan = new Plan();
+		int userNo = TsaSession.getInfo().getUserNo();
+		// 01. 기획전 복사
+		param.setRegNo(userNo);
+		param.setUpdNo(userNo);
+		planDao.createPlanCopy(param);
+		
+
+		// 02. 기획전 코너 목록 조회
+//		Plan serchCorner = new Plan();
+//		serchCorner.setPlanSq(param.getCopyPlanSq());
+//		Collection<TsaPlan> cornerList = marketingDao.getPlanCornerList(serchCorner);
+//
+//		for (TsaPlan cornerInfo : cornerList) {
+//			// 03. 기획전 코너 복사
+//			TsaPlan copyCorner = new TsaPlan();
+//			copyCorner.setPlanSq(plan.getPlanSq());
+//			copyCorner.setCopyPlanDtlSq(cornerInfo.getPlanDtlSq());
+//			copyCorner.setRegId(userId);
+//			copyCorner.setUpdId(userId);
+//			marketingDao.createPlanCornerCopy(copyCorner);
+//			plan.setPlanDtlSq(copyCorner.getPlanDtlSq());
+//
+//			// 04. 상품 조회
+//			TsaPlan searchGoods = new TsaPlan();
+//			searchGoods.setPlanDtlSq(cornerInfo.getPlanDtlSq());
+//			Collection<TsaPlan> goodsList = marketingDao.getPlanGoodsList(searchGoods);
+//
+//			// 05. 상품 복사
+//			for (TsaPlan goodsInfo : goodsList) {
+//				goodsInfo.setPlanDtlSq(plan.getPlanDtlSq());
+//				goodsInfo.setRegId(userId);
+//				goodsInfo.setUpdId(userId);
+//				marketingDao.createPlanGoodsCopy(goodsInfo);
+//			}
+//		}
+
+		return plan;
+	}
+	
+	/**
+	 * 파일 삭제
+	 *
+	 * @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
+		}
+	}
+	
+	/**
+	 * 기획전 브랜드 목록
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 9
+	 */
+	public Collection<Plan> getPlanBrandList(Plan param){
+		return planDao.getPlanBrandList(param);
+	}
+
+}

+ 10 - 0
src/main/java/com/style24/admin/biz/service/TsaRendererService.java

@@ -555,4 +555,14 @@ public class TsaRendererService {
 		return rendererDao.getAflinkList(afChannel);
 		return rendererDao.getAflinkList(afChannel);
 	}
 	}
 
 
+	/**
+	 * 자사브랜드 조회
+	 * @param
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 8
+	 */
+	public Collection<CommonCode> getSelfBrandList() {
+		return rendererDao.getSelfBrandList();
+	}
 }
 }

+ 29 - 12
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -12,6 +12,7 @@ import com.style24.admin.biz.service.TsaSystemService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.core.support.session.TscSession;
 import com.style24.core.support.util.CryptoUtils;
 import com.style24.core.support.util.CryptoUtils;
+import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustContactHst;
 import com.style24.persistence.domain.CustContactHst;
 import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.CustGrade;
@@ -309,9 +310,16 @@ public class TsaCustomerController extends TsaBaseController {
 	 */
 	 */
 	@PostMapping("/active/list")
 	@PostMapping("/active/list")
 	@ResponseBody
 	@ResponseBody
-	public Collection<Customer> getCustomerActiveList(@RequestBody CustomerSearch customerSearch) {
+	public GagaMap getCustomerActiveList(@RequestBody CustomerSearch customerSearch) {
+		GagaMap result = new GagaMap();
+		customerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo()-1, customerSearch.getPageSize()));
+		customerSearch.getPageable().setTotalCount(customerService.getCustomerActiveListCount(customerSearch));
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
-		return customerService.getCustomerActiveList(customerSearch);
+
+		result.set("pageing", customerSearch);
+		result.set("custList", customerService.getCustomerActiveList(customerSearch));
+		return result;
 	}
 	}
 
 
 	/**
 	/**
@@ -403,7 +411,6 @@ public class TsaCustomerController extends TsaBaseController {
 	@ResponseBody
 	@ResponseBody
 	public Customer getCustomerInfo(@PathVariable Integer custNo) {
 	public Customer getCustomerInfo(@PathVariable Integer custNo) {
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
-
 		return customerService.getCustomerInfo(custNo);
 		return customerService.getCustomerInfo(custNo);
 	}
 	}
 
 
@@ -721,11 +728,6 @@ public class TsaCustomerController extends TsaBaseController {
 	@PostMapping("/delivery/addr/save")
 	@PostMapping("/delivery/addr/save")
 	@ResponseBody
 	@ResponseBody
 	public GagaResponse saveCustomerDeliveryAddr(@RequestBody Delivery delivery) {
 	public GagaResponse saveCustomerDeliveryAddr(@RequestBody Delivery delivery) {
-		delivery.setRecipNm(CryptoUtils.encryptAES(delivery.getRecipNm()));
-		delivery.setRecipTelno(CryptoUtils.encryptAES(delivery.getRecipTelno()));
-		delivery.setRecipPhnno(CryptoUtils.encryptAES(delivery.getRecipPhnno()));
-		delivery.setRecipDtlAddr(CryptoUtils.encryptAES(delivery.getRecipDtlAddr()));
-		delivery.setRecipBaseAddr(CryptoUtils.encryptAES(delivery.getRecipBaseAddr()));
 		customerService.saveCustomerDeliveryAddr(delivery);
 		customerService.saveCustomerDeliveryAddr(delivery);
 		return super.ok(message.getMessage("SUCC_0001"));
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 	}
@@ -902,9 +904,17 @@ public class TsaCustomerController extends TsaBaseController {
 	 */
 	 */
 	@PostMapping("/secede/list")
 	@PostMapping("/secede/list")
 	@ResponseBody
 	@ResponseBody
-	public Collection<Customer> getCustomerSecedeList(@RequestBody CustomerSearch customerSearch) {
+	public GagaMap getCustomerSecedeList(@RequestBody CustomerSearch customerSearch) {
+		GagaMap result = new GagaMap();
+		customerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo() - 1, customerSearch.getPageSize()));
+		customerSearch.getPageable().setTotalCount(customerService.getCustomerSecedeListCount(customerSearch));
+
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
-		return customerService.getCustomerSecedeList(customerSearch);
+		result.set("pageing", customerSearch);
+		result.set("custList", customerService.getCustomerSecedeList(customerSearch));
+
+		return result;
 	}
 	}
 
 
 	/**
 	/**
@@ -934,9 +944,16 @@ public class TsaCustomerController extends TsaBaseController {
 	 */
 	 */
 	@PostMapping("/dormant/list")
 	@PostMapping("/dormant/list")
 	@ResponseBody
 	@ResponseBody
-	public Collection<Customer>getCustomerDormantList(@RequestBody CustomerSearch customerSearch) {
+	public GagaMap getCustomerDormantList(@RequestBody CustomerSearch customerSearch) {
+		GagaMap result = new GagaMap();
+		customerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo() - 1, customerSearch.getPageSize()));
+		customerSearch.getPageable().setTotalCount(customerService.getCustomerDormantListCount(customerSearch));
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
-		return customerService.getCustomerDormantList(customerSearch);
+
+		result.set("pageing", customerSearch);
+		result.set("custList", customerService.getCustomerDormantList(customerSearch));
+		return result;
 	}
 	}
 
 
 
 

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

@@ -333,6 +333,7 @@ public class TsaDisplayController extends TsaBaseController {
 	public GagaMap getCategoryGoodsList(@RequestBody CategoryGoods categoryGoods) {
 	public GagaMap getCategoryGoodsList(@RequestBody CategoryGoods categoryGoods) {
 		GagaMap result = new GagaMap();
 		GagaMap result = new GagaMap();
 
 
+		log.info("getCategoryGoodsList categoryGoods::{}",categoryGoods);
 		categoryGoods.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		categoryGoods.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		categoryGoods.setPageable(new TscPageRequest(categoryGoods.getPageNo() - 1, categoryGoods.getPageSize()));
 		categoryGoods.setPageable(new TscPageRequest(categoryGoods.getPageNo() - 1, categoryGoods.getPageSize()));
 		categoryGoods.getPageable().setTotalCount(displayService.getCategoryGoodsListCount(categoryGoods));
 		categoryGoods.getPageable().setTotalCount(displayService.getCategoryGoodsListCount(categoryGoods));

+ 8 - 4
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -985,10 +985,14 @@ public class TsaGoodsController extends TsaBaseController {
 				if (goodsImgInfo.getDefaultImgYn().equals("Y")) {
 				if (goodsImgInfo.getDefaultImgYn().equals("Y")) {
 					mav.addObject("defaultImgOrd", goodsImgInfo.getDispOrd());
 					mav.addObject("defaultImgOrd", goodsImgInfo.getDispOrd());
 				}
 				}
+				if (goodsImgInfo.getMouseoverImgYn() .equals("Y")) {
+					mav.addObject("mouseoverImgOrd", goodsImgInfo.getDispOrd());
+				}
 			}
 			}
 		} else { // 대표이미지와 마우스오버이미지가 없으면
 		} else { // 대표이미지와 마우스오버이미지가 없으면
 			mav.addObject("goodsImgList", new ArrayList<GoodsImg>());
 			mav.addObject("goodsImgList", new ArrayList<GoodsImg>());
 			mav.addObject("defaultImgOrd", "1");
 			mav.addObject("defaultImgOrd", "1");
+			mav.addObject("mouseoverImgOrd", "1");
 		}
 		}
 
 
 		mav.addObject("goodsImg", goodsImg);
 		mav.addObject("goodsImg", goodsImg);
@@ -2446,7 +2450,7 @@ public class TsaGoodsController extends TsaBaseController {
 	}
 	}
 
 
 	/**
 	/**
-	 * 사은품 화면
+	 * 사은품 상품 화면
 	 * @return
 	 * @return
 	 * @author eskim
 	 * @author eskim
 	 * @since 2020. 12. 28
 	 * @since 2020. 12. 28
@@ -2486,7 +2490,7 @@ public class TsaGoodsController extends TsaBaseController {
 	}
 	}
 
 
 	/**
 	/**
-	 * 사은품 목록
+	 * 사은품 상품 목록
 	 * @param adKeywordSq
 	 * @param adKeywordSq
 	 * @return
 	 * @return
 	 * @author eskim
 	 * @author eskim
@@ -2505,7 +2509,7 @@ public class TsaGoodsController extends TsaBaseController {
 	}
 	}
 
 
 	/**
 	/**
-	 * 광고 키워드 상품 삭제
+	 *  사은품 상품 저장
 	 *
 	 *
 	 * @param freeGoods
 	 * @param freeGoods
 	 * @return
 	 * @return
@@ -2566,7 +2570,7 @@ public class TsaGoodsController extends TsaBaseController {
 		String[] goodsNames = {"goodsCd", "goodsNm", "goodsTnm", "goodsSnm1", "itemkindCd", "seasonCd",
 		String[] goodsNames = {"goodsCd", "goodsNm", "goodsTnm", "goodsSnm1", "itemkindCd", "seasonCd",
 			"sexGb", "currPrice", "sellFeeRate", "goodsGb", "formalGb", "minOrdQty", "maxOrdQty", "dayMaxOrdQty",
 			"sexGb", "currPrice", "sellFeeRate", "goodsGb", "formalGb", "minOrdQty", "maxOrdQty", "dayMaxOrdQty",
 			"giftPackYn", "newCustOrdYn","pntPrate","prePpntUsableYn", "pntMrate","preMpntUsableYn",
 			"giftPackYn", "newCustOrdYn","pntPrate","prePpntUsableYn", "pntMrate","preMpntUsableYn",
-			"returnableYn", "changeableYn","taxGb", "ageGrpCd", "adultYn", "delvFeeCd", "goodsContent",
+			"returnableYn", "changeableYn","taxGb", "ageGrpCd", "adultYn", "delvFeeCd", "optStr", "goodsContent",
 			"niClsfCd", "niContent1", "niContent2",
 			"niClsfCd", "niContent1", "niContent2",
 			"niContent3", "niContent4", "niContent5", "niContent6", "niContent7", "niContent8", "niContent9",
 			"niContent3", "niContent4", "niContent5", "niContent6", "niContent7", "niContent8", "niContent9",
 			"niContent10", "niContent11", "niContent12", "niContent13", "niContent14", "niContent15", "niContent16",
 			"niContent10", "niContent11", "niContent12", "niContent13", "niContent14", "niContent15", "niContent16",

+ 398 - 34
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -6,6 +6,8 @@ import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collection;
 import java.util.Date;
 import java.util.Date;
 
 
+import com.style24.core.biz.service.TscCouponService;
+import com.style24.persistence.domain.*;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.env.Environment;
@@ -21,10 +23,10 @@ import org.springframework.web.servlet.ModelAndView;
 
 
 import com.style24.admin.biz.service.TsaCardPromotionService;
 import com.style24.admin.biz.service.TsaCardPromotionService;
 import com.style24.admin.biz.service.TsaCommonService;
 import com.style24.admin.biz.service.TsaCommonService;
-import com.style24.admin.biz.service.TsaCouponService;
 import com.style24.admin.biz.service.TsaFreegiftPromotionService;
 import com.style24.admin.biz.service.TsaFreegiftPromotionService;
 import com.style24.admin.biz.service.TsaMailTemplateService;
 import com.style24.admin.biz.service.TsaMailTemplateService;
 import com.style24.admin.biz.service.TsaMorebetterService;
 import com.style24.admin.biz.service.TsaMorebetterService;
+import com.style24.admin.biz.service.TsaPlanService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.biz.service.TsaReviewService;
 import com.style24.admin.biz.service.TsaReviewService;
 import com.style24.admin.biz.service.TsaSystemService;
 import com.style24.admin.biz.service.TsaSystemService;
@@ -33,6 +35,7 @@ import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.service.TscPointService;
 import com.style24.core.biz.service.TscPointService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.core.support.session.TscSession;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.TscPageRequest;
 
 
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.CardPromotion;
@@ -91,9 +94,6 @@ public class TsaMarketingController extends TsaBaseController {
 	@Autowired
 	@Autowired
 	private TsaMorebetterService morebetterService;
 	private TsaMorebetterService morebetterService;
 
 
-	@Autowired
-	private TsaCouponService couponService;
-
 	@Autowired
 	@Autowired
 	private TsaReviewService reviewService;
 	private TsaReviewService reviewService;
 
 
@@ -110,6 +110,12 @@ public class TsaMarketingController extends TsaBaseController {
 
 
 	@Autowired
 	@Autowired
 	private TsaCardPromotionService cardPromotionService;
 	private TsaCardPromotionService cardPromotionService;
+	
+	@Autowired
+	private TsaPlanService planService;
+
+	@Autowired
+	private TscCouponService coreCouponService;
 
 
 
 
 	/**
 	/**
@@ -361,8 +367,8 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getCouponList(@RequestBody Coupon param) {
 	public GagaMap getCouponList(@RequestBody Coupon param) {
 		GagaMap result = new GagaMap();
 		GagaMap result = new GagaMap();
 
 
-		ArrayList<Coupon> cpnList = couponService.getCouponList(param);
-		int cpnTotCnt = couponService.getCouponListCnt(param);
+		ArrayList<Coupon> cpnList = coreCouponService.getCouponList(param);
+		int cpnTotCnt = coreCouponService.getCouponListCnt(param);
 
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
@@ -436,7 +442,7 @@ public class TsaMarketingController extends TsaBaseController {
 		// 카테고리 구분 조회
 		// 카테고리 구분 조회
 		mav.addObject("cateGbList", rendererService.getCommonCodeList("G032"));
 		mav.addObject("cateGbList", rendererService.getCommonCodeList("G032"));
 		// 자사 브랜드 조회
 		// 자사 브랜드 조회
-		mav.addObject("selfBrandList", couponService.getSelfBrandList());
+		mav.addObject("selfBrandList", rendererService.getSelfBrandList());
 		// 사이트코드 조회
 		// 사이트코드 조회
 		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
 		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
 		// 쿠폰상태 조회
 		// 쿠폰상태 조회
@@ -444,7 +450,8 @@ public class TsaMarketingController extends TsaBaseController {
 		// 쿠폰 유형 조회
 		// 쿠폰 유형 조회
 		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230", "Y"));
 		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230", "Y"));
 		// 사용가능 고객구분 조회
 		// 사용가능 고객구분 조회
-		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
+		String[] exceptCds1 = {"G100_00"};
+		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100", "Y", exceptCds1));
 		// 사용가능 고객등급 조회
 		// 사용가능 고객등급 조회
 		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
 		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
 		// 재발급 여부 조회
 		// 재발급 여부 조회
@@ -457,27 +464,36 @@ public class TsaMarketingController extends TsaBaseController {
 		mav.addObject("payTypeList", rendererService.getCommonCodeList("G015"));
 		mav.addObject("payTypeList", rendererService.getCommonCodeList("G015"));
 		// 상위제휴채널 조회
 		// 상위제휴채널 조회
 		mav.addObject("upperAfLinkCdList", rendererService.getCommonCodeList("G053"));
 		mav.addObject("upperAfLinkCdList", rendererService.getCommonCodeList("G053"));
-
+		// 선착순쿠폰 조회
+		mav.addObject("limitedTimeCpnList", new Coupon());
 		// 이미 쿠폰 아이디가 있으면 적용대상 조회
 		// 이미 쿠폰 아이디가 있으면 적용대상 조회
 		if (cpnId != 0) {
 		if (cpnId != 0) {
 			mode = "U";
 			mode = "U";
-			issueCnt = couponService.getCouponIssueCnt(cpnId);
+			issueCnt = coreCouponService.getCouponIssueCnt(cpnId);
 			// 쿠폰상세조회
 			// 쿠폰상세조회
-			mav.addObject("cpnDetail", couponService.getCouponDetail(cpnId));
+			mav.addObject("cpnDetail", coreCouponService.getCouponDetail(cpnId));
 			// 쿠폰적용대상 - 공급업체 조회
 			// 쿠폰적용대상 - 공급업체 조회
-			mav.addObject("cpnDtlRefvalSupplyCompList", couponService.getCouponRefvalSupplyCompList(cpnId));
+			mav.addObject("cpnDtlRefvalSupplyCompList", coreCouponService.getCouponRefvalSupplyCompList(cpnId));
 			// 쿠폰적용대상 - 적용상품 조회
 			// 쿠폰적용대상 - 적용상품 조회
-			mav.addObject("cpnDtlRefvalApplyGoodsList", couponService.getCouponRefvalGoodsList(cpnId, "G260_10"));
+			mav.addObject("cpnDtlRefvalApplyGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_10"));
 			// 쿠폰적용대상 - 카테고리 조회
 			// 쿠폰적용대상 - 카테고리 조회
-			mav.addObject("cpnDtlRefvalCateList", couponService.getCouponRefvalCategoryList(cpnId));
+			mav.addObject("cpnDtlRefvalCateList", coreCouponService.getCouponRefvalCategoryList(cpnId));
 			// 쿠폰적용대상 - 브랜드 조회
 			// 쿠폰적용대상 - 브랜드 조회
-			mav.addObject("cpnDtlRefvalBrandList", couponService.getCouponRefvalBrandList(cpnId));
+			mav.addObject("cpnDtlRefvalBrandList", coreCouponService.getCouponRefvalBrandList(cpnId));
 			// 쿠폰적용대상 - 제외상품 조회
 			// 쿠폰적용대상 - 제외상품 조회
-			mav.addObject("cpnDtlRefvalExceptGoodsList", couponService.getCouponRefvalGoodsList(cpnId, "G260_14"));
+			mav.addObject("cpnDtlRefvalExceptGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_14"));
 			// 쿠폰 입점업체분담율 조회
 			// 쿠폰 입점업체분담율 조회
-			mav.addObject("cpnDtlBurdenList", couponService.getCouponBurdenList(cpnId));
+			mav.addObject("cpnDtlBurdenList", coreCouponService.getCouponBurdenList(cpnId));
 			// 시리얼 및 난수 쿠폰 조회
 			// 시리얼 및 난수 쿠폰 조회
-			mav.addObject("randomCpnList", couponService.getRandomCouponInfo(cpnId));
+			mav.addObject("randomCpnList", coreCouponService.getRandomCouponInfo(cpnId));
+			// 쿠폰사용가능고객구분 조회
+			mav.addObject("cpnCustGbList", coreCouponService.getCouponCustGbList(cpnId));
+			// 쿠폰사용가능고객등급 조회
+			mav.addObject("cpnCustGradeList", coreCouponService.getCouponCustGradeList(cpnId));
+			// 쿠폰사용가능결제수단 조회
+			mav.addObject("cpnPayTypeList", coreCouponService.getCouponPayTypeList(cpnId));
+			// 선착순쿠폰 조회
+			mav.addObject("limitedTimeCpnList", coreCouponService.getLimitedTimeCouponList(cpnId));
 		}
 		}
 
 
 		//issueCnt = 3;
 		//issueCnt = 3;
@@ -500,8 +516,9 @@ public class TsaMarketingController extends TsaBaseController {
 	@ResponseBody
 	@ResponseBody
 	public GagaResponse saveCoupon(@RequestBody Coupon coupon) {
 	public GagaResponse saveCoupon(@RequestBody Coupon coupon) {
 		log.info("couponSave : {}", coupon);
 		log.info("couponSave : {}", coupon);
-
-		String result = couponService.saveCoupon(coupon);
+		coupon.setRegNo(TsaSession.getInfo().getUserNo());
+		coupon.setUpdNo(TsaSession.getInfo().getUserNo());
+		String result = coreCouponService.saveCoupon(coupon);
 		if(!"SUCCESS".equals(result)) {
 		if(!"SUCCESS".equals(result)) {
 			return super.error(message.getMessage(result));
 			return super.error(message.getMessage(result));
 		}
 		}
@@ -520,8 +537,8 @@ public class TsaMarketingController extends TsaBaseController {
 	@ResponseBody
 	@ResponseBody
 	public GagaResponse updateCouponRefval(@RequestBody CouponRefval CouponRefval) {
 	public GagaResponse updateCouponRefval(@RequestBody CouponRefval CouponRefval) {
 		log.info("couponSave : {}", CouponRefval);
 		log.info("couponSave : {}", CouponRefval);
-
-		couponService.updateCouponRefval(CouponRefval);
+		CouponRefval.setUpdNo(TsaSession.getInfo().getUserNo());
+		coreCouponService.updateCouponRefval(CouponRefval);
 
 
 		return super.ok(message.getMessage("SUCC_0001"));
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 	}
@@ -580,7 +597,8 @@ public class TsaMarketingController extends TsaBaseController {
 		// 사이트조회
 		// 사이트조회
 		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
 		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
 		// 사용가능 고객구분 조회
 		// 사용가능 고객구분 조회
-		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
+		String[] exceptCds1 = {"G100_00"};
+		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100", "Y", exceptCds1));
 		// 사용가능 고객등급 조회
 		// 사용가능 고객등급 조회
 		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
 		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
 		// 쿠폰발행사유 조회
 		// 쿠폰발행사유 조회
@@ -601,8 +619,9 @@ public class TsaMarketingController extends TsaBaseController {
 	@PostMapping("/coupon/insertCustPub")
 	@PostMapping("/coupon/insertCustPub")
 	@ResponseBody
 	@ResponseBody
 	public GagaResponse saveCouponCustPub(@RequestBody CustCoupon custCoupon) {
 	public GagaResponse saveCouponCustPub(@RequestBody CustCoupon custCoupon) {
-		couponService.saveCouponCustPub(custCoupon);
-
+		custCoupon.setRegNo(TsaSession.getInfo().getUserNo());
+		custCoupon.setUpdNo(TsaSession.getInfo().getUserNo());
+		coreCouponService.saveCouponCustPub(custCoupon);
 		return super.ok(message.getMessage("SUCC_0006"));
 		return super.ok(message.getMessage("SUCC_0006"));
 
 
 	}
 	}
@@ -735,8 +754,10 @@ public class TsaMarketingController extends TsaBaseController {
 
 
 			// TMTB_GOODS_TEMP TABLE TRUNCATE -> 다른 다다에서 사용중인 상품 조회 -> INSERT
 			// TMTB_GOODS_TEMP TABLE TRUNCATE -> 다른 다다에서 사용중인 상품 조회 -> INSERT
 			moreBetterGoods.setApplyGoodsList(moreBetter.getApplyGoodsList());
 			moreBetterGoods.setApplyGoodsList(moreBetter.getApplyGoodsList());
-			morebetterService.createMorebetterGoodsTemp(moreBetterGoods);
+			moreBetterGoods.setGridApplyGoodsList(moreBetter.getApplyGoodsList());
+			moreBetterGoods.setSectionGb(moreBetter.getSectionGb());
 
 
+			morebetterService.createMorebetterGoodsTemp(moreBetterGoods);
 			morebetterService.saveMoreBetterDetail(moreBetter);
 			morebetterService.saveMoreBetterDetail(moreBetter);
 
 
 			// 다른 다다에서 사용중인 상품 조회
 			// 다른 다다에서 사용중인 상품 조회
@@ -859,15 +880,107 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	 */
 	@PostMapping("/morebetter/changeStat")
 	@PostMapping("/morebetter/changeStat")
 	@ResponseBody
 	@ResponseBody
-	public GagaResponse updateMorebetterStat(@RequestBody MoreBetter moreBetter) {
+	public GagaMap updateMorebetterStat(@RequestBody MoreBetter moreBetter) {
+		GagaMap map = new GagaMap();
+
+		try{
+			log.info("getTmtbStat :::{}",moreBetter.getTmtbStat());
+			MoreBetterGoods moreBetterGoods = new MoreBetterGoods();
+
+			if("G232_11".equals(moreBetter.getTmtbStat())){
+				moreBetterGoods.setMultiSupplyCompCd(moreBetter.getMultiSupplyCompCd());
+				moreBetterGoods.setMultiBrand(moreBetter.getMultiBrand());
+				moreBetterGoods.setMultiApplyGoods(moreBetter.getMultiApplyGoods());
+				moreBetterGoods.setMultiExceptGoods(moreBetter.getMultiExceptGoods());
+
+				// TMTB_GOODS_TEMP TABLE TRUNCATE -> 다른 다다에서 사용중인 상품 조회 -> INSERT
+				moreBetterGoods.setApplyGoodsList(moreBetter.getApplyGoodsList());
+				moreBetterGoods.setGridApplyGoodsList(moreBetter.getApplyGoodsList());
+				moreBetterGoods.setSectionGb(moreBetter.getSectionGb());
+				morebetterService.createMorebetterGoodsTemp(moreBetterGoods);
+
+				// 다른 다다에서 사용중인 상품 조회
+				Collection<MoreBetterGoods> duplicateGoodsList = morebetterService.getMorebetterDuplicateList(moreBetterGoods);
+
+				// 조회 건수 있으면 -> 해당 상품코드 엑셀로 던져주기
+				if(duplicateGoodsList.size() > 0){
+					map.set("duplicateYn","Y");
+					map.set("duplicateGoodsList",duplicateGoodsList);
+					map.set("message", message.getMessage("FAIL_0001"));
+				}else{
+					// 조회 건수 없으면 -> 저장으로 넘어감
+					map.set("duplicateYn","N");
+					morebetterService.saveMoreBetterDetail(moreBetter);
+					//morebetterService.updateMorebetterStat(moreBetter);
+					map.set("message", message.getMessage("SUCC_0002"));
+				}
+			}else{
+				morebetterService.updateMorebetterStat(moreBetter);
+				map.set("message", message.getMessage("SUCC_0002"));
+			}
+		} catch(Exception e) {
+			e.printStackTrace();
+			map.set("message", message.getMessage("FAIL_0001"));
+			return map;
+		}
+
+		return map;
+	}
+
+	/**
+	 * 쿠폰발급받은 회원리스트 팝업
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021-02-03
+	 */
+	@GetMapping("/coupon/pubCust/popup/form")
+	@ResponseBody
+	public ModelAndView couponPubCustListPopup(@RequestParam(value = "cpnId", required = true)int cpnId) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("cpnPubCustList", coreCouponService.getCpnPubCustList(cpnId));
+
+		mav.setViewName("marketing/CouponPubCustListPopupForm");
+		return mav;
+	}
+
+	/**
+	 * 선착순쿠폰 삭제
+	 *
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 5
+	 */
+	@PostMapping("/coupon/limitedtime/coupon/update")
+	@ResponseBody
+	public GagaResponse updateLimitedTimeCouponList(@RequestBody CouponLimitedTime couponLimitedTime) {
+		couponLimitedTime.setRegNo(TsaSession.getInfo().getUserNo());
+		couponLimitedTime.setUpdNo(TsaSession.getInfo().getUserNo());
+		coreCouponService.updateLimitedTimeCouponList(couponLimitedTime);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+
+	/**
+	 * 쿠폰 상태 변경
+	 * @param coupon
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 02. 05
+	 */
+	@ResponseBody
+	@PostMapping("/marketing/coupon/changeStat")
+	public GagaResponse updateCouponStat(@RequestBody Coupon coupon) {
 		try {
 		try {
-			morebetterService.updateMorebetterStat(moreBetter);
+			coupon.setUpdNo(TsaSession.getInfo().getUserNo());
+			coreCouponService.updateCouponStat(coupon);
 		} catch (Exception e) {
 		} catch (Exception e) {
 			e.printStackTrace();
 			e.printStackTrace();
 			return super.error(message.getMessage("FAIL_0001"));
 			return super.error(message.getMessage("FAIL_0001"));
 		}
 		}
 
 
-		return super.ok(message.getMessage("SUCC_0003"));
+		return super.ok(message.getMessage("SUCC_0001"));
 	}
 	}
 	
 	
 	/* 최수환 진행 */
 	/* 최수환 진행 */
@@ -1096,7 +1209,7 @@ public class TsaMarketingController extends TsaBaseController {
 	@PostMapping("/coupon/retrieve/list")
 	@PostMapping("/coupon/retrieve/list")
 	@ResponseBody
 	@ResponseBody
 	public Collection<Coupon> getCouponRetrieveList(@RequestBody Coupon coupon) {
 	public Collection<Coupon> getCouponRetrieveList(@RequestBody Coupon coupon) {
-		return couponService.getCouponRetrieveList(coupon);
+		return coreCouponService.getCouponRetrieveList(coupon);
 	}
 	}
 
 
 	/**
 	/**
@@ -1197,7 +1310,7 @@ public class TsaMarketingController extends TsaBaseController {
 		Integer userNo = TsaSession.getInfo().getUserNo();
 		Integer userNo = TsaSession.getInfo().getUserNo();
 		custCoupon.setRegNo(userNo);
 		custCoupon.setRegNo(userNo);
 		custCoupon.setUpdNo(userNo);
 		custCoupon.setUpdNo(userNo);
-		couponService.saveCouponIssue(custCoupon);
+		coreCouponService.saveCouponIssue(custCoupon);
 		return super.ok(message.getMessage("SUCC_0006"));
 		return super.ok(message.getMessage("SUCC_0006"));
 	}
 	}
 
 
@@ -1256,6 +1369,8 @@ public class TsaMarketingController extends TsaBaseController {
 
 
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 
 
+		mav.addObject("cardPrmt", cardPromotionService.getCardInterest(cardPrmtSq));
+
 		mav.addObject("cardPrmtSq", cardPrmtSq);
 		mav.addObject("cardPrmtSq", cardPrmtSq);
 		mav.setViewName("marketing/CardInterestPopupForm");
 		mav.setViewName("marketing/CardInterestPopupForm");
 		return mav;
 		return mav;
@@ -1285,10 +1400,10 @@ public class TsaMarketingController extends TsaBaseController {
 
 
 	/**
 	/**
 	 * 카드무이자할부 저장
 	 * 카드무이자할부 저장
-	 * @param point - 포인트 정보
-	 * @return ModelAndView
+	 * @param cardPromotion
+	 * @return
 	 * @author eskim
 	 * @author eskim
-	 * @since 2021. 2. 1
+	 * @since 2021. 2. 2
 	 */
 	 */
 	@PostMapping("/card/interest/save")
 	@PostMapping("/card/interest/save")
 	@ResponseBody
 	@ResponseBody
@@ -1297,8 +1412,257 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 	}
 
 
+	/**
+	 * 카드프로모션 비노출 처리
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 3
+	 */
+	@PostMapping("/card/promotion/dispYn/update")
+	@ResponseBody
+	public GagaResponse updateCardPromotionDsipYn(@RequestBody CardPromotion cardPromotion) {
+		cardPromotionService.updateCardPromotionDsipYn(cardPromotion);
+		return super.ok(message.getMessage("SUCC_0009"));	//성공적 변경
+	}
+
+	/**
+	 * 카드프로모션 삭제 처리
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 3
+	 */
+	@PostMapping("/card/promotion/delete")
+	@ResponseBody
+	public GagaResponse deleteCardPromotion(@RequestBody CardPromotion cardPromotion) {
+		cardPromotionService.deleteCardPromotion(cardPromotion);
+		return super.ok(message.getMessage("SUCC_0003"));	//성공적 변경
+	}
+
+	/**
+	 * 카드프로모션 관리
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 03
+	 */
+	@GetMapping("/card/promotion/form")
+	@ResponseBody
+	public ModelAndView cardPromotionForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName("marketing/CardPromotionForm");
+		return mav;
+	}
+
+	/**
+	 * 카드프로모션 목록
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 1. 29
+	 */
+	@PostMapping("/card/promotion/list")
+	@ResponseBody
+	public GagaMap getCardPromotionList(@RequestBody CardPromotion cardPromotion) {
+
+		GagaMap result = new GagaMap();
+
+		cardPromotion.setPageable(new TscPageRequest(cardPromotion.getPageNo() - 1, cardPromotion.getPageSize()));
+		cardPromotion.getPageable().setTotalCount(cardPromotionService.getCardPromotionListCount(cardPromotion));
+
+		result.set("pageing", cardPromotion);
+		result.set("cardPromotionList", cardPromotionService.getCardPromotionList(cardPromotion));
+
+		return result;
+	}
+
+	/**
+	 * 카드프로모션 팝업
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 1
+	 */
+	@GetMapping("/card/promotion/popup/form/{cardPrmtSq}")
+	@ResponseBody
+	public ModelAndView cardProMotionPopupForm(@PathVariable Integer cardPrmtSq) {
+
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("cardPrmt", cardPromotionService.getCardPromotion(cardPrmtSq));
+
+		mav.addObject("cardPrmtSq", cardPrmtSq);
+		mav.setViewName("marketing/CardPromotionPopupForm");
+		return mav;
+	}
+
 	/**
 	/**
 	 *   카드관련 작업 종료 - eskim
 	 *   카드관련 작업 종료 - eskim
 	 */
 	 */
 
 
+	/**
+	 *   기획전 작업 시작 - sowon
+	 */
+
+	/**
+	 * 기획전 관리
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 3
+	 */
+	@GetMapping("/planning/form")
+	public ModelAndView planListForm() {
+		ModelAndView mav = new ModelAndView();		
+		// 사이트 목록
+		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
+		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+		mav.setViewName("marketing/PlanListForm");
+		return mav;
+	}
+	
+	/**
+	 * 기획전 웹 등록/수정 화면
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 04
+	 */
+	@GetMapping("/planning/webdetail/form")
+	public ModelAndView planWebDetailForm(Plan param) {
+		ModelAndView mav = new ModelAndView();
+
+		if (param.getMode().equals("N")) { // 신규 일 때
+			// 기획전 전체 목록
+			mav.addObject("planList", planService.getPlanAllList(param));
+			
+			// 브랜드 목록
+			mav.addObject("brandList", rendererService.getSupplyCompanyBrandList(""));
+
+		} 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("planBrandList", planService.getPlanBrandList(param));
+			
+			mav.addObject("brandList", rendererService.getSupplyCompanyBrandList(""));
+
+			//mav.addObject("planQuestionList", planService.getPlanQuestionList(param));
+
+			//mav.addObject("brandList", rendererService.getSupplyCompanyBrandList("W"));
+		}
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getCommonCodeList("G000"));
+
+		// 공급업체 목록
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
+//
+//		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+//
+//		// 회원구분 목록
+//		mav.addObject("custGbList", rendererService.getCommonCodeList("G100", "Y"));
+		
+		// 사용가능 고객등급 조회
+		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
+		
+		mav.addObject("mode", param.getMode());
+		mav.setViewName("marketing/PlanWebDetailPopupForm");
+		return mav;
+	}
+	
+	/**
+	 * 기획전 웹 등록
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 4
+	 */
+	@PostMapping("/planning/webdetail/create")
+	@ResponseBody
+	public GagaResponse createPlanWebInfo(@RequestBody Plan param) {
+		planService.createPlanWebInfo(param);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+	
+	/**
+	 * 기획전관리 목록
+	 *
+	 * @param
+	 * @return 기획전 목록
+	 * @author sowon
+	 * @since 2021. 2. 5
+	 */
+	@PostMapping("/planning/list")
+	@ResponseBody
+	public GagaMap getPlanList(@RequestBody Plan param) {
+		GagaMap result = new GagaMap();
+		
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(param.getCondition())) {
+			param.setConditionList(param.getCondition().replaceAll("\r", "").split("\n"));
+		}
+		Collection<Plan> planList = planService.getPlanList(param);
+
+		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
+		param.getPageable().setTotalCount(planService.getPlanListCnt(param));
+		result.set("pageing", param);
+		result.set("planList", planList);
+
+		//log.debug("dataList: {}", planList);
+
+		return result;
+	}
+	
+	/**
+	 * 기획전관리 목록
+	 *
+	 * @param
+	 * @return 기획전 삭제
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	@PostMapping("/planning/delete")
+	@ResponseBody
+	public GagaResponse deletePlan(@RequestBody Collection<Plan> paramList) {
+		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"));
+	}
+	
+	/**
+	 * 기획전 등록 화면 기획전 복사
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 8
+	 */
+	@PostMapping("/planning/copy")
+	@ResponseBody
+	public Plan copyPlan(@RequestBody Plan param) {
+		System.out.println("컨트롤러 :" + param);
+		return planService.copyPlan(param);
+	}
+
 }
 }

+ 54 - 18
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -226,6 +226,11 @@ public class TsaOrderChangeController extends TsaBaseController {
 		List<Order> cancelRequestTargetList 		= orderChangeService.getCancelRequestTargetList(order);
 		List<Order> cancelRequestTargetList 		= orderChangeService.getCancelRequestTargetList(order);
 		List<Order> orderChangeDetailList 			= orderChangeService.getOrderChangeDetailList(order);
 		List<Order> orderChangeDetailList 			= orderChangeService.getOrderChangeDetailList(order);
 		Collection<Order> orderInfoList 			= orderService.getOrderInfoList(order);
 		Collection<Order> orderInfoList 			= orderService.getOrderInfoList(order);
+
+		if (ordChgSq > 0) {
+			Collection<Order> exchangeInfoList = orderChangeService.getExchangeInfo(order);
+			mav.addObject("exchangeInfoList"		, exchangeInfoList);								// 교환정보
+		}
 		
 		
 		// 3. 화면으로 데이타 전송
 		// 3. 화면으로 데이타 전송
 		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 통합
 		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 통합
@@ -286,6 +291,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		
 		
 		mav.set("allCanYn"		, rtnReq.getAllCanYn());			// 무통장입금전 전체취소 여부 
 		mav.set("allCanYn"		, rtnReq.getAllCanYn());			// 무통장입금전 전체취소 여부 
 		mav.set("isCustomer"	, rtnReq.getIsCustomer());			// 변경사유 (고객, 회사)
 		mav.set("isCustomer"	, rtnReq.getIsCustomer());			// 변경사유 (고객, 회사)
+		mav.set("wdGb"			, rtnReq.getWdGb());				// 회수방법
 		
 		
 		// 4. 주문변경 회수지정보 추가
 		// 4. 주문변경 회수지정보 추가
 		mav.set("chgerNm"		, rtnReq.getChgerNm());				// 변경자명
 		mav.set("chgerNm"		, rtnReq.getChgerNm());				// 변경자명
@@ -295,6 +301,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		mav.set("chgerDtlAddr"	, rtnReq.getChgerDtlAddr());		// 회수지상세주소
 		mav.set("chgerDtlAddr"	, rtnReq.getChgerDtlAddr());		// 회수지상세주소
 		mav.set("chgerPhnno"	, rtnReq.getChgerPhnno());			// 변경자핸드폰번호
 		mav.set("chgerPhnno"	, rtnReq.getChgerPhnno());			// 변경자핸드폰번호
 		mav.set("chgerTelno"	, rtnReq.getChgerTelno());			// 변경자전화번호
 		mav.set("chgerTelno"	, rtnReq.getChgerTelno());			// 변경자전화번호
+		mav.set("chgerRtnMemo"	, rtnReq.getChgerRtnMemo());		// 반품메모
 		
 		
 		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
 		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
 		orderChangeService.rtnReq(mav, userNo);
 		orderChangeService.rtnReq(mav, userNo);
@@ -353,21 +360,6 @@ public class TsaOrderChangeController extends TsaBaseController {
 		return mav;
 		return mav;
 	}
 	}
 	
 	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
 	/**
 	/**
 	 * 환불계좌목록
 	 * 환불계좌목록
 	 *
 	 *
@@ -454,12 +446,13 @@ public class TsaOrderChangeController extends TsaBaseController {
 	 * @since 2021. 01. 14
 	 * @since 2021. 01. 14
 	 */
 	 */
 	@GetMapping("/exchange/request/form")
 	@GetMapping("/exchange/request/form")
-	public ModelAndView exchangeRequestFrom(@RequestParam(value = "ordNo") int ordNo) {
+	public ModelAndView exchangeRequestFrom(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "ordChgSq") int ordChgSq) {
 
 
 		Order order = new Order();
 		Order order = new Order();
 		ModelAndView mav = new ModelAndView();
 		ModelAndView mav = new ModelAndView();
 
 
 		order.setOrdNo(ordNo);
 		order.setOrdNo(ordNo);
+		order.setOrdChgSq(ordChgSq);
 
 
 		// 교환가능 주문상세상탭값 설정
 		// 교환가능 주문상세상탭값 설정
 		String[] ordDtlStatArr = new String[3];
 		String[] ordDtlStatArr = new String[3];
@@ -469,13 +462,18 @@ public class TsaOrderChangeController extends TsaBaseController {
 		order.setOrdDtlStatArr(ordDtlStatArr);
 		order.setOrdDtlStatArr(ordDtlStatArr);
 
 
 		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
 		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
-
 		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
 		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
 
 
+		if (ordChgSq > 0) {
+			Collection<Order> exchangeInfoList = orderChangeService.getExchangeInfo(order);
+			mav.addObject("exchangeInfoList"		, exchangeInfoList);								// 교환정보
+		}
+
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G689"));	// 교환사유
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G689"));	// 교환사유
 		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 교환요청대상 목록
 		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 교환요청대상 목록
 		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
 		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
-		mav.addObject("ordNo"						, ordNo);
+		mav.addObject("ordNo"						, ordNo);											// 주문번호
+		mav.addObject("ordChgSq"					, ordChgSq);										// 주문변경번호
 		mav.addObject("orderDelvAddrInfo"			, orderService.getDeliveryAddrList(order));			// 배송정보
 		mav.addObject("orderDelvAddrInfo"			, orderService.getDeliveryAddrList(order));			// 배송정보
 		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));	// 전화번호국번
 		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));	// 전화번호국번
 		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));	// (휴대전화)번호국번
 		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));	// (휴대전화)번호국번
@@ -523,6 +521,44 @@ public class TsaOrderChangeController extends TsaBaseController {
 		return result;
 		return result;
 	}
 	}
 
 
+	/**
+	 * 교환철회 (관리자)
+	 *
+	 * @param Collection<OrderChange>
+	 * @return
+	 * @author card007rtn
+	 * @since 2021. 01. 22
+	 */
+	@PostMapping("/exchangeCancelRequest")
+	@ResponseBody
+	public GagaMap orderExchangeCancelRequest(@RequestBody OrderChange excReq) {
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.FAIL.getCode());
+
+		// 교환철회 요청 데이터 확인
+		if (excReq == null) {
+			result.set("message", message.getMessage("FAIL_1001"));
+			return result;
+		}
+
+		// 세션 회원번호 설정
+		int userNo = TsaSession.getInfo().getUserNo();
+		excReq.setUpdNo(userNo);
+		excReq.setRegNo(userNo);
+
+		// 교환철회 처리
+		result = orderChangeService.exchangeCancel(excReq);
+
+		// 처리 결과 코드에 따른 메세지 설정
+		if (result.get("status").equals(GagaResponseStatus.SUCCESS.getCode())) {
+			result.set("message", message.getMessage("SUCC_0004"));
+		} else {
+			result.set("message", message.getMessage("FAIL_0004"));
+		}
+
+		return result;
+	}
+
 	/**
 	/**
 	 * 취소요청 (ADMIN, NAPY, 외부몰) (배치) (사용안함)
 	 * 취소요청 (ADMIN, NAPY, 외부몰) (배치) (사용안함)
 	 * 
 	 * 

+ 0 - 6
src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -123,12 +123,6 @@ public class TsaOrderController extends TsaBaseController {
 			}
 			}
 		}
 		}
 
 
-		// 주문취소상태 CD_GB 변경
-		if (order.getChgGb() != null) {
-			String chgDtlStat = order.getChgGb().replace("G680", "G685");
-			order.setChgGb(chgDtlStat);
-		}
-
 		// 주문전체건수 조회
 		// 주문전체건수 조회
 		int totalCount = orderService.getOrderListCount(order);
 		int totalCount = orderService.getOrderListCount(order);
 		order.getPageable().setTotalCount(totalCount);
 		order.getPageable().setTotalCount(totalCount);

+ 28 - 4
src/main/java/com/style24/persistence/domain/CardPromotion.java

@@ -1,5 +1,7 @@
 package com.style24.persistence.domain;
 package com.style24.persistence.domain;
 
 
+import java.util.Collection;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.TscPageRequest;
@@ -21,7 +23,7 @@ public class CardPromotion extends TscBaseDomain {
 	private String prmtStd;	// 프로모션시작일
 	private String prmtStd;	// 프로모션시작일
 	private String prmtEdd;	// 프로모션종료일
 	private String prmtEdd;	// 프로모션종료일
 	private String prmtGb;	// 프로모션구분(A:할인, B:무이자)
 	private String prmtGb;	// 프로모션구분(A:할인, B:무이자)
-	private String dcGb;	// 행사구분(프로모션구분이 A:할인인 경우)
+	private String dcGb;	// 행사구분(프로모션구분이 A:할인인 경우 1:즉시할인,2:청구할인,3:제휴카드)
 	private String linkUrl;	// 연결URL
 	private String linkUrl;	// 연결URL
 	private String note;	// 안내
 	private String note;	// 안내
 	private String dispYn;	// 표시여부
 	private String dispYn;	// 표시여부
@@ -35,17 +37,39 @@ public class CardPromotion extends TscBaseDomain {
 
 
 	//무이자 저장용
 	//무이자 저장용
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] minPayAmt;	// 최소결제금액
+	private String[] arrMinPayAmt;	// 최소결제금액
 
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] minNoItrt;	// 최소무이자월수(프로모션구분이 B:무이자 인경우)
+	private String[] arrMinNoItrt;	// 최소무이자월수(프로모션구분이 B:무이자 인경우)
 
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] maxNoItrt;	// 최대무이자월수(프로모션구분이 B:무이자 인경우)
+	private String[] arrMaxNoItrt;	// 최대무이자월수(프로모션구분이 B:무이자 인경우)
 
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrCardCd;
 	private String[] arrCardCd;
 
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] cardPrmtCdtSq;
+
+	// 카드프로모션 목록 조회/저장용
+	private int minPayAmt;	// 최소결제금액
+	private String dcWay;	// 할인구분할인방식(공통코드G240, 프로모션구분이 A:할인인 경우)
+	private int dcVal;	// 할인값(프로모션구분이 A:할인인 경우, 할인방식이 금액이면 할인금액, 율이면 할인율)
+	private int maxDcAmt;	// 최대할인금액(프로모션구분이 A:할인인 경우)
+	private String minNoItrt;	// 최소무이자월수(프로모션구분이 B:무이자 인경우)
+	private String maxNoItrt;	// 최대무이자월수(프로모션구분이 B:무이자 인경우)
+
+
+	// 삭제할 프로모션조건
+	private String delCardPrmtCdtSq;	// 형식 /8/9
+
+	// 삭제(비노출)할 프로모션
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrCardPrmtSq;
+
+	// 화면 조회용
+	Collection<CardPromotionCondition> cardPrmtCdtList;
+
 
 
 	// Pagination
 	// Pagination
 	private TscPageRequest pageable;
 	private TscPageRequest pageable;

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

@@ -23,4 +23,16 @@ public class CardPromotionCondition extends TscBaseDomain {
 	private String minNoItrt;	// 최소무이자월수(프로모션구분이 B:무이자 인경우)
 	private String minNoItrt;	// 최소무이자월수(프로모션구분이 B:무이자 인경우)
 	private String maxNoItrt;	// 최대무이자월수(프로모션구분이 B:무이자 인경우)
 	private String maxNoItrt;	// 최대무이자월수(프로모션구분이 B:무이자 인경우)
 
 
+	// 화면조회용
+	private String arrCardCd;
+	private String arrCardNm;
+
+//	private String prmtNm;	// 프로모션명
+//	private String prmtStd;	// 프로모션시작일
+//	private String prmtEdd;	// 프로모션종료일
+//	private String prmtGb;	// 프로모션구분(A:할인, B:무이자)
+//	private String dcGb;	// 행사구분(프로모션구분이 A:할인인 경우 1:즉시할인,2:청구할인,3:제휴카드)
+//	private String linkUrl;	// 연결URL
+//	private String note;	// 안내
+//	private String dispYn;	// 표시여부
 }
 }

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

@@ -16,6 +16,7 @@ public class CardPromotionTarget extends TscBaseDomain {
 
 
 	private Integer cardPrmtCdtSq;	// 카드프로모션행사조건일련번호
 	private Integer cardPrmtCdtSq;	// 카드프로모션행사조건일련번호
 	private String prmtTargetCd;	// 포로모션대상카드(공통코드G941)
 	private String prmtTargetCd;	// 포로모션대상카드(공통코드G941)
+	private String prmtTargetNm;	// 카드명
 
 
 	private String callBackFun;
 	private String callBackFun;
 	private String arrCard;
 	private String arrCard;

+ 36 - 2
src/main/java/com/style24/persistence/domain/Coupon.java

@@ -5,6 +5,7 @@ import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 import lombok.Data;
 
 
+import java.util.List;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collection;
 
 
@@ -59,17 +60,50 @@ public class Coupon extends TscBaseDomain {
     private String dcCdGb;                  // 할인코드유형 (공통코드G233)
     private String dcCdGb;                  // 할인코드유형 (공통코드G233)
     private String rdCpnNm;                 // 랜덤쿠폰 사용키 (시리얼명 or 난수)
     private String rdCpnNm;                 // 랜덤쿠폰 사용키 (시리얼명 or 난수)
 
 
+    private String custNo;
+    private String custNm;
+    private String custGbNm;
+    private String custGradeNm;
+    private String useYn;
+    private String usedDt;
+    private String pubReason;
+    private String pubReasonNm;
+    private String pubReasonDtl;
+
+    private Integer limitCpnId;         // 선착순쿠폰일련번호
+    private String delYn;
+
     // 그리드 파라미터
     // 그리드 파라미터
-    private String supplyCompList;          // 공급업체 리스트
+    /*private String supplyCompList;          // 공급업체 리스트
     private String brandList;               // 브랜드 리스트
     private String brandList;               // 브랜드 리스트
     private String applyGoodsList;          // 적용상품 리스트
     private String applyGoodsList;          // 적용상품 리스트
     private String exceptGoodsList;         // 제외상품 리스트
     private String exceptGoodsList;         // 제외상품 리스트
     private String cateList;                // 카테고리 리스트
     private String cateList;                // 카테고리 리스트
-    private String burdenList;              // 업체 분담율 리스트
+    private String burdenList;              // 업체 분담율 리스트*/
+    List<CouponRefval> supplyCompList;          // 공급업체 리스트
+    List<CouponRefval> brandList;               // 브랜드 리스트
+    List<CouponRefval> applyGoodsList;          // 적용상품 리스트
+    List<CouponRefval> exceptGoodsList;         // 제외상품 리스트
+    List<CouponRefval> cateList;                // 카테고리 리스트
+    List<CouponBurden> burdenList;              // 업체 분담율 리스트
 
 
     // TB_COUPON_BAN_GOODS
     // TB_COUPON_BAN_GOODS
     private int    cpnBanGoodsSq;           //  제외상품시퀀스
     private int    cpnBanGoodsSq;           //  제외상품시퀀스
 
 
+    // 사용가능고객구분
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] usableCustGbArr;
+
+    // 사용가능고객등급
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] usableCustGradeArr;
+
+    // 결제수단
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] payTypeArr;
+
+    List<CouponLimitedTime> limitedTimeCpnList; //선착순 쿠폰 리스트
+
     // Pagination
     // Pagination
     private TscPageRequest pageable;
     private TscPageRequest pageable;
     private int pageNo = 1;
     private int pageNo = 1;

+ 29 - 0
src/main/java/com/style24/persistence/domain/CouponLimitedTime.java

@@ -0,0 +1,29 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 선착순 쿠폰 도메인
+ * @author bin2107
+ * @since 2021-02-04
+ */
+@SuppressWarnings("serial")
+@Data
+public class CouponLimitedTime extends TscBaseDomain {
+    // TB_COUPON_REFVAL
+    private int     cpnId;				// 쿠폰ID
+    private Integer limitCpnId;         // 선착순쿠폰일련번호
+    private String  limitCpnNm;         // 선착순쿠폰명
+    private int     downLimitQty;       // 다운로드가능수량
+    private String  downStdt;           // 다운로드시작일시
+    private String  downEddt;           // 다운로드종료일시
+    private String  delYn;              // 삭제여부
+
+    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+    private String[] arrLimitCpnId;
+
+}

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

@@ -20,6 +20,7 @@ public class CouponRefval extends TscBaseDomain {
     private Integer cpnRefvalSq;            // 쿠폰대상일련번호
     private Integer cpnRefvalSq;            // 쿠폰대상일련번호
     private String  refFormalGb;            // 정상/이월구분(G009). 쿠폰대상구분이 카테고리일 경우 사용
     private String  refFormalGb;            // 정상/이월구분(G009). 쿠폰대상구분이 카테고리일 경우 사용
     private String  refBrandCd;             // 브랜드코드. 쿠폰대상구분이 카테고리일 경우 사용
     private String  refBrandCd;             // 브랜드코드. 쿠폰대상구분이 카테고리일 경우 사용
+    private String  cpnType;			    // 쿠폰유형(공통코드G230)
     @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
     @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
     private Integer[] cpnRefvalSqArr;       // 쿠폰적용대상시퀀스배열
     private Integer[] cpnRefvalSqArr;       // 쿠폰적용대상시퀀스배열
 
 

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

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 package com.style24.persistence.domain;
 
 
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 import lombok.Data;
 
 
 /**
 /**
@@ -32,5 +33,13 @@ public class CustomerSearch extends TscBaseDomain {
 	private String custNm;
 	private String custNm;
 	private String email;
 	private String email;
 	private String custId;
 	private String custId;
+	
+	// 쿠폰발행팝업
+	private String cpnPubPopYn;		// 쿠폰발행팝업
+
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
 
 
 }
 }

+ 5 - 2
src/main/java/com/style24/persistence/domain/Goods.java

@@ -19,8 +19,8 @@ import lombok.Data;
 public class Goods extends TscBaseDomain {
 public class Goods extends TscBaseDomain {
 
 
 	private String goodsCd;		//상품코드
 	private String goodsCd;		//상품코드
-	private int productNo;		//ProductNo(WMS)
-	private String productCode;		//ProductCode(WMS)
+	//private int productNo;		//ProductNo(WMS)
+	//private String productCode;		//ProductCode(WMS)
 	private String brandCd;		//브랜드코드
 	private String brandCd;		//브랜드코드
 	private String itemkindCd;		//품목코드
 	private String itemkindCd;		//품목코드
 	private String goodsNm;		//상품명
 	private String goodsNm;		//상품명
@@ -150,6 +150,9 @@ public class Goods extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] optCd2; // 상품 옵션2
 	private String[] optCd2; // 상품 옵션2
 
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] addPrice; // 추가금액
+
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] baseStockQty; // 안전재고
 	private String[] baseStockQty; // 안전재고
 
 

+ 2 - 0
src/main/java/com/style24/persistence/domain/GoodsImg.java

@@ -19,9 +19,11 @@ public class GoodsImg extends TscBaseDomain {
 	private String orgImgNm;
 	private String orgImgNm;
 	private String sysImgNm;
 	private String sysImgNm;
 	private String defaultImgYn;
 	private String defaultImgYn;
+	private String mouseoverImgYn;
 	private String colorNm;
 	private String colorNm;
 	private String mode;
 	private String mode;
 	private int defaultImgOrd;
 	private int defaultImgOrd;
+	private int mouseoverImgOrd;
 	private String sysImgUrl;
 	private String sysImgUrl;
 	private int brandNo;
 	private int brandNo;
 
 

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

@@ -61,6 +61,7 @@ public class MoreBetter extends TscBaseDomain {
 	List<MoreBetterGoods> supplyCompList;
 	List<MoreBetterGoods> supplyCompList;
 	List<MoreBetterGoods> brandList;
 	List<MoreBetterGoods> brandList;
 	List<MoreBetterGoods> applyGoodsList;
 	List<MoreBetterGoods> applyGoodsList;
+	List<MoreBetterGoods> gridApplyGoodsList;
 	List<MoreBetterGoods> exceptGoodsList;
 	List<MoreBetterGoods> exceptGoodsList;
 	List<MoreBetterBurden> burdenList;
 	List<MoreBetterBurden> burdenList;
 	List<MoreBetterSection> sectionGbList;
 	List<MoreBetterSection> sectionGbList;

+ 4 - 5
src/main/java/com/style24/persistence/domain/MoreBetterGoods.java

@@ -32,6 +32,8 @@ public class MoreBetterGoods extends TscBaseDomain {
 	private String goodsCd;
 	private String goodsCd;
 	private String goodsNm;
 	private String goodsNm;
 
 
+	private String sectionGb;		// 구간설정 구분값(G810_10:수량,G810_11:금액)
+
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrCompanySq;
 	private String[] arrCompanySq;
 
 
@@ -61,9 +63,6 @@ public class MoreBetterGoods extends TscBaseDomain {
 	private String[] multiDuplicateGoods;
 	private String[] multiDuplicateGoods;
 
 
 	List<MoreBetterGoods> applyGoodsList;
 	List<MoreBetterGoods> applyGoodsList;
-/*
-	List<MoreBetterGoods> multiSupplyCompCd;
-	List<MoreBetterGoods> multiBrand;
-	List<MoreBetterGoods> multiGoods;
-	List<MoreBetterGoods> multiExceptGoods;*/
+	List<MoreBetterGoods> gridApplyGoodsList;
+
 }
 }

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

@@ -15,7 +15,7 @@ import lombok.Data;
 @Data
 @Data
 public class NotiInfo extends TscBaseDomain {
 public class NotiInfo extends TscBaseDomain {
 
 
-	private String supplyVendorCd;
+	private String supplyCompCd;
 	private String niClsfCd;
 	private String niClsfCd;
 	private String niClsfNm;
 	private String niClsfNm;
 	private String niItemCd;
 	private String niItemCd;

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

@@ -0,0 +1,160 @@
+package com.style24.persistence.domain;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
+
+import lombok.Data;
+
+/**
+ * 기획전 Domain
+ *
+ * @author sowon
+ * @since 2021. 02. 04
+ */
+
+@SuppressWarnings("serial")
+@Data
+public class Plan extends TscBaseDomain{
+	// 기획전
+		private Integer planSq;				//기획전일련번호(SeqPlan sequence)
+		private String planNm;				//기획전명
+		private String planGb;				//기획전구분(P:기획전private String  E:이벤트)
+		private String custGb;				//고객구분
+		private String custGrade;			//회원등급
+		private String planSnm;				//검색어
+		private String templateType;		//템플릿유형(H:Htmlprivate String  T:텍스트)
+		private String siteCd;				//사이트코드(공통코드g000)
+		private String frontGb;				//프론트구분(A:All, P:웹, M:모바일)
+		private String dispStdt;			//기획전 시작일시
+		private String dispEddt;			//기획전 종료일시
+		private String mainPimg;			//메인이미지(Pc)
+		private String mainMimg;			//메인이미지(모바일)
+		private String dtlPimg;				//상세이미지(Pc)
+		private String dtlMimg;				//상세이미지(모바일)
+		private String orgMainPimg;			//원본메인이미지(Pc)
+		private String orgMainMimg;			//원본메인이미지(모바일)
+		private String orgDtlPimg;			//원본상세이미지(Pc)
+		private String orgDtlMimg;			//원본상세이미지(모바일)
+		private String orgMainPimgDelYn;	//원본메인이미지(Pc) 삭제여부
+		private String orgMainMimgDelYn;	//원본메인이미지(모바일) 삭제여부
+		private String orgDtlPimgDelYn;		//원본상세이미지(Pc) 삭제여부
+		private String orgDtlMimgDelYn;		//원본상세이미지(모바일) 삭제여부
+		private String dtlTitle1;			//상세제목1
+		private String dtlTitle2;			//상세제목2
+		private String cateCd;				//카테고리코드(대/중/소/세카테고리)
+		private String cateDispYn;			//카테고리전시여부(Y:전시)
+		private String replyYn;				//댓글여부(Y:댓글)
+		private String replyLoc;			//댓글위치(U:상품리스트상단 D:상품리스트하단)
+		private String replyImg;			//댓글이미지
+		private String orgReplyImg;			//원본댓글이미지
+		private String replyTitle1;			//댓글제목1
+		private String replyTitle2;			//댓글제목2
+		private String devUrl;				//호출 URL
+		private String orgReplyImgDelYn;	//원본댓글이미지 삭제여부
+		private String cornerNmDispYn;		//코너명노출여부(Y:노출)
+		private String goodsLimitYn;		//상품등록제한여부(Y:상품등록제한)
+		private String goodsLimitQty;		//상품등록제한수(상품등록제한여부가 "Y"일 떄)
+		private String delYn;				//삭제여부(Y:삭제)
+		private String openYn;				//오픈여부(Y:오픈)
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private long[] dispOrdArr;			// 표시순서 배열
+		private long dispOrd;				//표시순서
+		private long readCnt;				//조회수
+		private Integer pollSq;				//투표일련번호
+		private String badgeNm;				//뱃지이름
+		private String badgeFcolor;			//뱃지글자컬러
+		private String badgeBcolor;			//뱃지배경컬러
+		private String privacyPolicy;		//개인정보수집동의정책
+
+		// 기획전 소스
+		private Integer seq;					//일련번호
+		private String fsrc;				//프론트소스
+		private String fsrcPc;				//프론트소스(pc)	/ 화면용
+		private String fsrcMobile;			//프론트소스(모바일)	/ 화면용
+
+		// 기획전 상세
+		private Integer planDtlSq;				//기획전상세일련번호(SEQ_PLAN_DTL sequence)
+		private Integer copyPlanDtlSq;			//복사할 상세 일련번호
+		private Integer copyPlanSq;			//복사할 일련번호
+		private String copyMode;			//복사 선택(CORNER:코너복사, PLAN:기획전복사)
+		private String cornerDispType;		//코너노출유형(공통코드G045) (2:2컷 , 3:3컷, 4:4컷)
+		private String cornerNm;			//코너 명
+		private String planDtlStat;			//기획전상세상태(공통코드G044)
+		
+		// 기획전 브랜드
+		private String brandCd;		//기획전브랜드코드
+		private String DispYn;      	//표시여부           
+		private String brandKnm;    // 브랜드명(한글)
+		private String brandEnm;    // 브랜드명(영문)
+		/* Multi CheckBox 항목*/
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] multiBrand;
+		
+		// 기획전 응모
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] planQtitle;
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] attachYn;
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] planAnswerSq;
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] answer;
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] sysFileNm;
+
+		//private Collection<TsaPlanQuestAnswer> planQuestAnswerList; // 고시항목
+
+		// 검색
+		private String startSearchDate;		// 진행기간 시작일
+		private String startSearchTime;		// 진행기간 시작시간
+		private String endSearchDate;		// 진행기간 종료일
+		private String endSearchTime;		// 진행기간 종료시간
+		private String excelFileNm;			// 엑셀 파일 명
+		private int startRow;				// 페이징 시작
+		private int endRow;					// 피이징 종료
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] siteCds;			// 사이트
+
+		// 코너 상품
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] goodsCdArr;		// 상품 코드 배열
+		private String goodsCd;				// 상품 코드
+		private String goodsNm;				// 상품 명
+		private String imgType;				// 이미지 타입
+		private String imgPath1;			// 이미지 경로1
+		private String imgPath2;			// 이미지 경로2
+		private String imgPath4;			// 이미지 경로4
+		private String imgPath5;			// 이미지 경로5
+		private String imgPath6;			// 이미지 경로6
+		private String goodsStat;			// 상품 상태
+		private String dcRate;				// 할인율
+		private String listPrice;			// 최소 소비자가
+		private String tagPrice;			// tag 가
+		private String currPrice;			// 판매가
+		private String supplyCompCd;		// 업체코드
+		private String supplyCompNm;		// 업체명
+		private String formalGb;			// 정상/이월 여부
+		private String currStockQty;		// 재고
+		private String pageYn;				// 페이징 사용 여부
+		private String changeGb;			// 순서변경 updown 구분
+
+		// 기획전 팝업
+		private String callBackFun;			// 콜백함수명
+		private String popupDispStdt;		//기획전 시작일시
+		private String popupDispEddt;		//기획전 종료일시
+		
+		// Pagination
+		private TscPageRequest pageable;
+		private int pageNo = 1;
+		private int pageSize = 50;
+		private int pageUnit = 10;
+		
+		private String condition; // 키워드 종류
+		private String search; // 검색어
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		private String[] conditionList;
+		
+		
+}

+ 2 - 1
src/main/java/com/style24/persistence/domain/WmsColorMapping.java

@@ -14,10 +14,11 @@ import lombok.Data;
 @Data
 @Data
 public class WmsColorMapping extends TscBaseDomain {
 public class WmsColorMapping extends TscBaseDomain {
 
 
-	private String supplyVendorCd;
+	private String supplyCompCd;
 	private String wmsColorCd;
 	private String wmsColorCd;
 	private String wmsColorNm;
 	private String wmsColorNm;
 	private String colorCd;
 	private String colorCd;
 	private String useYn;
 	private String useYn;
 
 
+
 }
 }

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

@@ -14,7 +14,7 @@ import lombok.Data;
 @Data
 @Data
 public class WmsSeasonMapping extends TscBaseDomain {
 public class WmsSeasonMapping extends TscBaseDomain {
 
 
-	private String supplyVendorCd;
+	private String supplyCompCd;
 	private String wmsSeasonCd;
 	private String wmsSeasonCd;
 	private String wmsSeasonNm;
 	private String wmsSeasonNm;
 	private String seasonCd;
 	private String seasonCd;

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

@@ -14,7 +14,7 @@ import lombok.Data;
 @Data
 @Data
 public class WmsStyleYearMapping extends TscBaseDomain {
 public class WmsStyleYearMapping extends TscBaseDomain {
 
 
-	private String supplyVendorCd;
+	private String supplyCompCd;
 	private String wmsStyleYearCd;
 	private String wmsStyleYearCd;
 	private String wmsStyleYearNm;
 	private String wmsStyleYearNm;
 	private String styleYear;
 	private String styleYear;

+ 302 - 45
src/main/java/com/style24/persistence/mybatis/shop/TsaCardPromotion.xml

@@ -7,12 +7,10 @@
 		<choose>
 		<choose>
 		<when test="pageable != null">
 		<when test="pageable != null">
 		    ) A
 		    ) A
-		)Z
-		WHERE RNUM BETWEEN  #{pageable.startRow} AND #{pageable.endRow}
+		WHERE NUMB BETWEEN  #{pageable.startRow} AND #{pageable.endRow}
 		</when>
 		</when>
 		<otherwise>
 		<otherwise>
 		    ) A
 		    ) A
-		)Z
 		</otherwise>
 		</otherwise>
 		</choose>
 		</choose>
 	</sql>
 	</sql>
@@ -22,7 +20,7 @@
 		/* TsaCardPromotionDao.getCardInterestListCount */
 		/* TsaCardPromotionDao.getCardInterestListCount */
 		SELECT COUNT(1)
 		SELECT COUNT(1)
 		FROM TB_CARD_PROMOTION 
 		FROM TB_CARD_PROMOTION 
-		WHERE PRMT_GB = #{prmtGb}
+		WHERE PRMT_GB = 'B'
 		<if test="condition != null and condition != ''">
 		<if test="condition != null and condition != ''">
 		    <choose>
 		    <choose>
 		        <when test='search != null and search == "1"'>
 		        <when test='search != null and search == "1"'>
@@ -34,11 +32,11 @@
 		    </choose>
 		    </choose>
 		</if>
 		</if>
 		<if test="stDate != null and stDate != ''">
 		<if test="stDate != null and stDate != ''">
-		AND PRMT_EDD >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND PRMT_EDD >= REPLACE(#{stDate},'-','')
 		</if>
 		</if>
 		<if test="edDate != null and edDate != ''">
 		<if test="edDate != null and edDate != ''">
 		<![CDATA[
 		<![CDATA[
-		AND PRMT_STD < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		AND PRMT_STD <= REPLACE(#{edDate},'-','')
 		]]>
 		]]>
 		</if>
 		</if>
 		<if test='beforSkipFlag != null and beforSkipFlag == "Y"'>
 		<if test='beforSkipFlag != null and beforSkipFlag == "Y"'>
@@ -49,48 +47,307 @@
 	<!-- 카드무이자할부 목록 -->
 	<!-- 카드무이자할부 목록 -->
 	<select id="getCardInterestList" parameterType="CardPromotion" resultType="CardPromotion">
 	<select id="getCardInterestList" parameterType="CardPromotion" resultType="CardPromotion">
 		/* TsaCardPromotionDao.getCardInterestList */
 		/* TsaCardPromotionDao.getCardInterestList */
-		SELECT Z.*
+		SELECT A.*
 		FROM (
 		FROM (
-		    SELECT A.*, @rownum := @rownum + 1 AS RNUM 
-		    FROM (
-		        SELECT CARD_PRMT_SQ
-		             , PRMT_NM
-		             , DATE_FORMAT(PRMT_STD, '%Y%m%d%H%i%S') AS PRMT_STD
-		             , DATE_FORMAT(PRMT_EDD, '%Y%m%d%H%i%S') AS PRMT_EDD
-		             , PRMT_GB
-		             , DC_GB
-		             , LINK_URL
-		             , NOTE
-		             , DISP_YN
-		             , FN_GET_USER_NM(REG_NO) AS REG_NM
-		             , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S') AS REG_DT
-		             , FN_GET_USER_NM(UPD_NO) AS UPD_NM
-		             , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
-		        FROM TB_CARD_PROMOTION 
-		        WHERE PRMT_GB = #{prmtGb}
-		        <if test="condition != null and condition != ''">
-		            <choose>
-		                <when test='search != null and search == "1"'>
-		        AND CARD_PRMT_SQ = #{condition}
-		                </when>
-		                <otherwise >
-		        AND UPPER(PRMT_NM) LIKE CONCAT('%',UPPER(#{condition}),'%')
-		                </otherwise>
-		            </choose>
-		        </if>
-		        <if test="stDate != null and stDate != ''">
-		        AND PRMT_EDD >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
-		        </if>
-		        <if test="edDate != null and edDate != ''">
-		        <![CDATA[
-		        AND PRMT_STD < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
-		        ]]>
-		        </if>
-		        <if test='beforSkipFlag != null and beforSkipFlag == "Y"'>
-		        AND PRMT_EDD >= NOW() 
-		        </if>
+		    SELECT CARD_PRMT_SQ
+		         , PRMT_NM
+		         , DATE_FORMAT(PRMT_STD, '%Y-%m-%d') AS PRMT_STD
+		         , DATE_FORMAT(PRMT_EDD, '%Y-%m-%d') AS PRMT_EDD
+		         , PRMT_GB
+		         , DC_GB
+		         , LINK_URL
+		         , NOTE
+		         , DISP_YN
+		         , FN_GET_USER_NM(REG_NO) AS REG_NM
+		         , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		         , FN_GET_USER_NM(UPD_NO) AS UPD_NM
+		         , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		         , RANK() OVER(ORDER BY CARD_PRMT_SQ DESC)        AS NUMB
+		    FROM TB_CARD_PROMOTION 
+		    WHERE PRMT_GB = 'B'
+		    <if test="condition != null and condition != ''">
+		        <choose>
+		            <when test='search != null and search == "1"'>
+		    AND CARD_PRMT_SQ = #{condition}
+		            </when>
+		            <otherwise >
+		    AND UPPER(PRMT_NM) LIKE CONCAT('%',UPPER(#{condition}),'%')
+		            </otherwise>
+		        </choose>
+		    </if>
+		    <if test="stDate != null and stDate != ''">
+		    AND PRMT_EDD >= REPLACE(#{stDate},'-','')
+		    </if>
+		    <if test="edDate != null and edDate != ''">
+		    <![CDATA[
+		    AND PRMT_STD <= REPLACE(#{edDate},'-','')
+		    ]]>
+		    </if>
+		    <if test='beforSkipFlag != null and beforSkipFlag == "Y"'>
+		    AND PRMT_EDD >= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
+		    </if>
 		<include refid="getListPagingCondition_sql"/>
 		<include refid="getListPagingCondition_sql"/>
 	</select>
 	</select>
 	
 	
+	<!-- 카드 프로모션 조건 목록 -->
+	<select id="getCardPromotionConditionList" parameterType="int" resultType="CardPromotionCondition">
+		/* TsaCardPromotionDao.getCardPromotionConditionList */
+		SELECT CARD_PRMT_CDT_SQ
+		     , CARD_PRMT_SQ
+		     , MIN_PAY_AMT
+		     , DC_WAY
+		     , DC_VAL
+		     , MAX_DC_AMT
+		     , MIN_NO_ITRT
+		     , MAX_NO_ITRT
+		     , FN_GET_USER_NM(REG_NO) AS REG_NM
+		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
+		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		FROM TB_CARD_PROMOTION_CONDITION 
+		WHERE CARD_PRMT_SQ = #{cardPrmtSq}
+		ORDER BY CARD_PRMT_CDT_SQ
+	</select>
+	
+	<!-- 카드 프로모션 대상 목록 -->
+	<select id="getCardPromotionTargetList" parameterType="int" resultType="CardPromotionTarget">
+		/* TsaCardPromotionDao.getCardPromotionTargetList */
+		SELECT A.CARD_PRMT_CDT_SQ
+		     , A.PRMT_TARGET_CD
+		     , B.CD_NM AS PRMT_TARGET_NM
+		     , FN_GET_USER_NM(A.REG_NO) AS REG_NM
+		     , DATE_FORMAT(A.REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		FROM TB_CARD_PROMOTION_TARGET A
+		INNER JOIN TB_COMMON_CODE B ON A.PRMT_TARGET_CD = B.CD
+		                            AND B.CD_GB = 'G941'
+		WHERE A.CARD_PRMT_CDT_SQ = #{cardPrmtCdtSq}
+		ORDER BY A.PRMT_TARGET_CD
+	</select>
+	
+	<!-- 카드프로모션 저장 -->
+	<insert id="saveCardPromotion" parameterType="CardPromotion"  keyProperty="cardPrmtSq">
+		/* TsaGoods.saveCardPromotion */
+		INSERT INTO TB_CARD_PROMOTION (
+		       CARD_PRMT_SQ
+		     , PRMT_NM
+		     , PRMT_STD
+		     , PRMT_EDD
+		     , PRMT_GB
+		     , DC_GB
+		     , LINK_URL
+		     , NOTE
+		     , DISP_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{cardPrmtSq}
+		     , #{prmtNm}
+		     , #{prmtStd}
+		     , #{prmtEdd}
+		     , #{prmtGb}
+		     , #{dcGb}
+		     , #{linkUrl}
+		     , #{note}
+		     , #{dispYn}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       PRMT_NM = #{prmtNm}
+		     , PRMT_STD = #{prmtStd}
+		     , PRMT_EDD = #{prmtEdd}
+		     , LINK_URL = #{linkUrl}
+		     , NOTE = #{note}
+		     , DISP_YN = #{dispYn}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
+	
+	<!-- 카드프로모션 행사조건 삭제 -->
+	<delete id="deleteCardPromotionCondition"  parameterType="int" >
+		/* TsaGoods.deleteCardPromotionCondition */
+		DELETE FROM TB_CARD_PROMOTION_CONDITION 
+		WHERE CARD_PRMT_CDT_SQ = #{cardPrmtCdtSq}
+	</delete>
+	
+	<!-- 카드프로모션 행사조건 저장 -->
+	<insert id="saveCardPromotionCondition" parameterType="CardPromotionCondition"  keyProperty="cardPrmtCdtSq">
+		/* TsaGoods.saveCardPromotionCondition */
+		INSERT INTO TB_CARD_PROMOTION_CONDITION (
+		       CARD_PRMT_CDT_SQ
+		     , CARD_PRMT_SQ
+		     , MIN_PAY_AMT
+		     , DC_WAY
+		     , DC_VAL
+		     , MAX_DC_AMT
+		     , MIN_NO_ITRT
+		     , MAX_NO_ITRT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{cardPrmtCdtSq}
+		     , #{cardPrmtSq}
+		     , #{minPayAmt}
+		     , #{dcWay}
+		     , #{dcVal}
+		     , #{maxDcAmt}
+		     , #{minNoItrt}
+		     , #{maxNoItrt}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       MIN_PAY_AMT = #{minPayAmt}
+		     , DC_WAY = #{dcWay}
+		     , DC_VAL = #{dcVal}
+		     , MAX_DC_AMT = #{maxDcAmt}
+		     , MIN_NO_ITRT = #{minNoItrt}
+		     , MAX_NO_ITRT = #{maxNoItrt}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
+	
+	<!-- 카드프로모션 타겟 삭제 -->
+	<delete id="deleteCardPromotionTarget"  parameterType="int" >
+		/* TsaGoods.deleteCardPromotionTarget */
+		DELETE FROM TB_CARD_PROMOTION_TARGET 
+		WHERE CARD_PRMT_CDT_SQ = #{cardPrmtCdtSq}
+	</delete>
+	
+	<!-- 카드프로모션 타겟 등록 -->
+	<insert id="createCardPromotionTarget" parameterType="CardPromotionTarget">
+		/* TsaGoods.createCardPromotionTarget */
+		INSERT INTO TB_CARD_PROMOTION_TARGET (
+		       CARD_PRMT_CDT_SQ
+		     , PRMT_TARGET_CD
+		     , REG_NO
+		     , REG_DT
+		)
+		VALUES (
+		       #{cardPrmtCdtSq}
+		     , #{prmtTargetCd}
+		     , #{regNo}
+		     , NOW()
+		)
+	</insert>
+	
+	<!-- 카드프로모션 비노출처리 -->
+	<delete id="updateCardPromotionDsipYn"  parameterType="CardPromotion" >
+		/* TsaGoods.updateCardPromotionDsipYn */
+		UPDATE TB_CARD_PROMOTION 
+		SET DISP_YN = 'N'
+		  , UPD_NO = #{updNo} 
+		  , UPD_DT = NOW()
+		WHERE 1 = 1
+		<choose>
+		    <when test="arrCardPrmtSq != null and arrCardPrmtSq != ''">
+		AND CARD_PRMT_SQ IN
+		        <foreach collection="arrCardPrmtSq" item="item" index="index"  open="(" close=")" separator=",">
+		        #{item}
+		        </foreach>
+		    </when>
+		<otherwise>
+		AND CARD_PRMT_SQ = #{cardPrmtSq}
+		</otherwise>
+		</choose>
+	</delete>
+	
+	<!-- 카드프로모션 삭제 -->
+	<delete id="deleteCardPromotion"  parameterType="int" >
+		/* TsaGoods.deleteCardPromotion */
+		DELETE FROM TB_CARD_PROMOTION
+		WHERE CARD_PRMT_SQ = #{cardPrmtSq}
+	</delete>
+	
+	<!-- 카드프로모션 목록 건수-->
+	<select id="getCardPromotionListCount" parameterType="CardPromotion" resultType="int">
+		/* TsaCardPromotionDao.getCardPromotionListCount */
+		SELECT COUNT(1)
+		FROM TB_CARD_PROMOTION A
+		INNER JOIN TB_CARD_PROMOTION_CONDITION B ON A.CARD_PRMT_SQ = B.CARD_PRMT_SQ
+		WHERE A.PRMT_GB = 'A'
+		<if test="condition != null and condition != ''">
+		    <choose>
+		        <when test='search != null and search == "1"'>
+		AND A.CARD_PRMT_SQ = #{condition}
+		        </when>
+		        <otherwise >
+		AND UPPER(A.PRMT_NM) LIKE CONCAT('%',UPPER(#{condition}),'%')
+		        </otherwise>
+		    </choose>
+		</if>
+		<if test="stDate != null and stDate != ''">
+		AND A.PRMT_EDD >= REPLACE(#{stDate},'-','')
+		</if>
+		<if test="edDate != null and edDate != ''">
+		<![CDATA[
+		AND A.PRMT_STD <= REPLACE(#{edDate},'-','')
+		]]>
+		</if>
+		<if test='beforSkipFlag != null and beforSkipFlag == "Y"'>
+		AND A.PRMT_EDD >= NOW() 
+		</if>
+	</select>
 	
 	
+	<!-- 카드프로모션 목록 -->
+	<select id="getCardPromotionList" parameterType="CardPromotion" resultType="CardPromotion">
+		/* TsaCardPromotionDao.getCardPromotionList */
+		SELECT A.*
+		FROM (
+		    SELECT A.CARD_PRMT_SQ
+		         , A.PRMT_NM
+		         , DATE_FORMAT(A.PRMT_STD, '%Y-%m-%d') AS PRMT_STD
+		         , DATE_FORMAT(A.PRMT_EDD, '%Y-%m-%d') AS PRMT_EDD
+		         , A.PRMT_GB
+		         , A.DC_GB
+		         , A.LINK_URL
+		         , A.NOTE
+		         , A.DISP_YN
+		         , B.MIN_PAY_AMT
+		         , B.DC_WAY
+		         , B.DC_VAL
+		         , B.MAX_DC_AMT
+		         , B.MIN_NO_ITRT
+		         , B.MAX_NO_ITRT
+		         , FN_GET_USER_NM(A.REG_NO) AS REG_NM
+		         , DATE_FORMAT(A.REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		         , FN_GET_USER_NM(A.UPD_NO) AS UPD_NM
+		         , DATE_FORMAT(A.UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		         , RANK() OVER(ORDER BY A.CARD_PRMT_SQ DESC)        AS NUMB
+		    FROM TB_CARD_PROMOTION A
+		    INNER JOIN TB_CARD_PROMOTION_CONDITION B ON A.CARD_PRMT_SQ = B.CARD_PRMT_SQ
+		    WHERE A.PRMT_GB = 'A'
+		    <if test="condition != null and condition != ''">
+		        <choose>
+		            <when test='search != null and search == "1"'>
+		    AND A.CARD_PRMT_SQ = #{condition}
+		            </when>
+		            <otherwise >
+		    AND UPPER(A.PRMT_NM) LIKE CONCAT('%',UPPER(#{condition}),'%')
+		            </otherwise>
+		        </choose>
+		    </if>
+		    <if test="stDate != null and stDate != ''">
+		    AND A.PRMT_EDD >= REPLACE(#{stDate},'-','')
+		    </if>
+		    <if test="edDate != null and edDate != ''">
+		    <![CDATA[
+		    AND A.PRMT_STD <= REPLACE(#{edDate},'-','')
+		    ]]>
+		    </if>
+		    <if test='beforSkipFlag != null and beforSkipFlag == "Y"'>
+		    AND A.PRMT_EDD >= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
+		    </if>
+		<include refid="getListPagingCondition_sql"/>
+	</select>
 </mapper>
 </mapper>

+ 0 - 677
src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml

@@ -1,677 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.admin.biz.dao.TsaCouponDao">
-	<!-- 쿠폰리스트 조회 -->
-	<select id="getCouponList" parameterType="Coupon" resultType="Coupon">
-		/* TsaCoupon.getCouponList */
-		SELECT T.*
-			 , COUNT(CUST_CPN_SQ) AS ISSUE_CNT
-			 , COUNT(USED_DT) AS USE_CNT
-		 FROM (
-				SELECT SITE_CD
-					 , CPN_ID
-					 , CPN_NM
-					 , CPN_TYPE
-					 , DC_WAY
-					 , DC_PVAL
-					 , DC_MVAL
-					 , MAX_DC_AMT
-					 , PD_GB
-					 , AVAIL_STDT
-					 , AVAIL_EDDT
-				     , AVAIL_DAYS
-					 , FN_GET_USER_NM(REG_NO) AS REG_NM
-					 , REG_DT
-				  FROM TB_COUPON
-				 WHERE 1=1
-				<if test="siteCd != null and siteCd != ''">
-				   AND SITE_CD = #{siteCd}
-				</if>
-				<if test="cpnId != null and cpnId != ''">
-				   AND CPN_ID = #{cpnId}
-				</if>
-				<if test="cpnType != null and cpnType != ''">
-				   AND CPN_TYPE = #{cpnType}
-				</if>
-				<if test="regNo != null and regNo != ''">
-				   AND REG_NO = #{regNo}
-				</if>
-				<if test="dcWay != null and dcWay != ''">
-				   AND DC_WAY = #{dcWay}
-				</if>
-				<if test="cpnNm != null and cpnNm != ''">
-				   AND CPN_NM LIKE LOWER('%' || #{cpnNm} || '%')
-				</if>
-				<if test="pdGb != null and pdGb != ''">
-				   AND PD_GB = #{pdGb}
-				</if>
-				<if test="availStdt != null and availStdt != '' and availEddt != null and availEddt != ''">
-				   AND AVAIL_STDT >= DATE_FORMAT(#{availStdt} , '%Y-%m-%d')
-				   AND AVAIL_EDDT <![CDATA[ <= ]]> DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
-				</if>
-			) T
-		LEFT OUTER JOIN TB_CUST_COUPON CC
-		             ON T.CPN_ID = CC.CPN_ID
-		GROUP BY  T.SITE_CD
-				, T.CPN_ID
-				, T.CPN_NM
-				, T.CPN_TYPE
-				, T.DC_WAY
-				, T.DC_PVAL
-				, T.DC_MVAL
-				, T.MAX_DC_AMT
-				, T.PD_GB
-				, T.AVAIL_STDT
-				, T.AVAIL_EDDT
-				, T.REG_NM
-				, T.REG_DT
-		ORDER BY  T.REG_DT DESC
-	</select>
-
-	<!-- 쿠폰 리스트 카운트 조회-->
-	<select id="getCouponListCnt" parameterType="Coupon" resultType="int">
-		/* TsaCoupon.getCouponListCnt */
-		SELECT COUNT(1)
-		  FROM TB_COUPON
-		 WHERE 1=1
-		<if test="siteCd != null and siteCd != ''">
-		   AND SITE_CD = #{siteCd}
-		</if>
-		<if test="cpnId != null and cpnId != ''">
-		   AND CPN_ID = #{cpnId}
-		</if>
-		<if test="cpnType != null and cpnType != ''">
-		   AND CPN_TYPE = #{cpnType}
-		</if>
-		<if test="regNo != null and regNo != ''">
-		   AND REG_NO = #{regNo}
-		</if>
-		<if test="dcWay != null and dcWay != ''">
-		   AND DC_WAY = #{dcWay}
-		</if>
-		<if test="cpnNm != null and cpnNm != ''">
-		   AND CPN_NM LIKE LOWER('%' || #{cpnNm} || '%')
-		</if>
-		<if test="pdGb != null and pdGb != ''">
-		   AND PD_GB = #{pdGb}
-		</if>
-		<if test="availStdt != null and availStdt != '' and availEddt != null and availEddt != ''">
-		   AND AVAIL_STDT >= DATE_FORMAT(#{availStdt} , '%Y-%m-%d')
-		   AND AVAIL_EDDT <![CDATA[ <= ]]> DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
-		</if>
-	</select>
-
-	<!-- 쿠폰 등록 -->
-	<insert id="couponInsert" parameterType="Coupon">
-		/* TsaCoupon.couponInsert*/
-		<selectKey keyProperty="cpnId" resultType="int" order="AFTER">
-			SELECT LAST_INSERT_ID()
-		</selectKey>
-		INSERT INTO TB_COUPON (
-		    CPN_NM
-		  , SITE_CD
-		  , AF_LINK_CD
-		  , CPN_TYPE
-		  , APPLY_SCOPE
-		  , DC_WAY
-		  , DC_PVAL
-		  , DC_MVAL
-		  , DC_AVAL
-		  , MAX_DC_AMT
-		  , PD_GB
-		  , AVAIL_STDT
-		  , AVAIL_EDDT
-		  , AVAIL_DAYS
-		  , CUST_PUB_LIMIT_QTY
-		  , TOT_PUB_LIMIT_QTY
-		  , ONE_PUB_QTY
-		  , DN_GB
-		  , DC_CD_GB
-		  , DOWN_STDT
-		  , DOWN_EDDT
-		  , BUY_LIMIT_AMT
-		  , PLAN_SQ
-		  , REISSUANCE
-		  , CPN_STAT
-		  , END_ALIM_YN
-		  , REG_NO
-		  , REG_DT
-		  , UPD_NO
-		  , UPD_DT
-		  , FIRST_ORD_YN
-		  , DOWN_ABL_YN
-		  , CUST_JOIN_STDT
-		  , CUST_JOIN_EDDT
-		  , BUY_STDT
-		  , BUY_EDDT
-		  , NEW_CUST_YN
-		) VALUES (
-		    #{cpnNm}
-		  , #{siteCd}
-		  , #{afLinkCd}
-		  , #{cpnType}
-		  , #{applyScope}
-		  , #{dcWay}
-		  , #{dcPval}
-		  , #{dcMval}
-		  , #{dcAval}
-		  , #{maxDcAmt}
-		  , #{pdGb}
-		  <choose>
-			  <when test='pdGb != null and pdGb == "P"'>
-		  , DATE_FORMAT(#{availStdt} , '%Y-%m-%d %H:%i:%s')
-		  , DATE_FORMAT(#{availEddt} , '%Y-%m-%d %H:%i:%s')
-		  , null
-			  </when>
-			  <when test='pdGb != null and pdGb == "D"' >
-		  , null
-		  , null
-		  , #{availDays}
-			  </when>
-		  </choose>
-		  , #{custPubLimitQty}
-		  , #{totPubLimitQty}
-		  , #{onePubQty}
-		  , #{dnGb}
-		  , #{dcCdGb}
-		  , DATE_FORMAT(#{downStdt} , '%Y-%m-%d %H:%i:%s')
-		  , DATE_FORMAT(#{downEddt} , '%Y-%m-%d %H:%i:%s')
-		  , #{buyLimitAmt}
-		  , #{planSq}
-		  , #{reissuance}
-		  , #{cpnStat}
-		  , #{endAlimYn}
-		  , #{regNo}
-		  , now()
-		  , #{updNo}
-		  , now()
-		  , #{firstOrdYn}
-		  , #{downAblYn}
-		  <choose>
-			  <when test='newCustYn != null and newCustYn == "Y"'>
-		  , DATE_FORMAT(#{custJoinStdt} , '%Y-%m-%d %H:%i:%s')
-		  , DATE_FORMAT(#{custJoinEddt} , '%Y-%m-%d %H:%i:%s')
-			  </when>
-			  <when test='newCustYn != null and newCustYn == "N"'>
-		  , null
-		  , null
-			  </when>
-		  </choose>
-		  <choose>
-			  <when test='firstOrdYn != null and firstOrdYn == "Y"'>
-		  , DATE_FORMAT(#{buyStdt} , '%Y-%m-%d %H:%i:%s')
-		  , DATE_FORMAT(#{buyEddt} , '%Y-%m-%d %H:%i:%s')
-			  </when>
-			  <when test='firstOrdYn != null and firstOrdYn == "N"'>
-		  , DATE_FORMAT(#{buyStdt} , '%Y-%m-%d %H:%i:%s')
-		  , DATE_FORMAT(#{buyEddt} , '%Y-%m-%d %H:%i:%s')
-			  </when>
-		  </choose>
-		  , #{newCustYn}
-		) ON DUPLICATE KEY UPDATE
-		    CPN_NM = #{cpnNm}
-		  , SITE_CD = #{siteCd}
-		  , AF_LINK_CD = #{afLinkCd}
-		  , CPN_TYPE = #{cpnType}
-		  , APPLY_SCOPE = #{applyScope}
-		  , DC_WAY = #{dcWay}
-		  , DC_PVAL = #{dcPval}
-		  , DC_MVAL = #{dcMval}
-		  , DC_AVAL = #{dcAval}
-		  , MAX_DC_AMT = #{maxDcAmt}
-		  , PD_GB = #{pdGb}
-		<choose>
-			<when test='pdGb != null and pdGb == "P"'>
-		  , AVAIL_STDT = DATE_FORMAT(#{availStdt} , '%Y-%m-%d %H:%i:%s')
-		  , AVAIL_EDDT = DATE_FORMAT(#{availEddt} , '%Y-%m-%d %H:%i:%s')
-		  , AVAIL_DAYS = null
-			</when>
-			<when test='pdGb != null and pdGb == "D"' >
-		  , AVAIL_STDT = null
-		  , AVAIL_EDDT = null
-	   	  , AVAIL_DAYS = #{availDays}
-			</when>
-		</choose>
-		  , CUST_PUB_LIMIT_QTY = #{custPubLimitQty}
-		  , TOT_PUB_LIMIT_QTY = #{totPubLimitQty}
-		  , ONE_PUB_QTY = #{onePubQty}
-		  , DOWN_STDT = DATE_FORMAT(#{downStdt} , '%Y-%m-%d %H:%i:%s')
-		  , DOWN_EDDT = DATE_FORMAT(#{downEddt} , '%Y-%m-%d %H:%i:%s')
-		  , BUY_LIMIT_AMT = #{buyLimitAmt}
-		  , PLAN_SQ = #{planSq}
-		  , REISSUANCE = #{reissuance}
-		  , CPN_STAT = #{cpnStat}
-		  , END_ALIM_YN = #{endAlimYn}
-		  , UPD_NO = #{updNo}
-		  , UPD_DT = now()
-		  , FIRST_ORD_YN = #{firstOrdYn}
-		  , DOWN_ABL_YN = #{downAblYn}
-		<choose>
-			<when test='newCustYn != null and newCustYn == "Y"'>
-		  , CUST_JOIN_STDT = DATE_FORMAT(#{custJoinStdt} , '%Y-%m-%d %H:%i:%s')
-		  , CUST_JOIN_EDDT = DATE_FORMAT(#{custJoinEddt} , '%Y-%m-%d %H:%i:%s')
-			</when>
-			<when test='newCustYn != null and newCustYn == "N"'>
-		  , CUST_JOIN_STDT = null
-		  , CUST_JOIN_EDDT = null
-			</when>
-		</choose>
-		<choose>
-			<when test='firstOrdYn != null and firstOrdYn == "Y"'>
-		  , BUY_STDT = DATE_FORMAT(#{buyStdt} , '%Y-%m-%d %H:%i:%s')
-		  , BUY_EDDT = DATE_FORMAT(#{buyEddt} , '%Y-%m-%d %H:%i:%s')
-			</when>
-			<when test='firstOrdYn != null and firstOrdYn == "N"'>
-		  , BUY_STDT = null
-		  , BUY_EDDT = null
-			</when>
-		</choose>
-		  , NEW_CUST_YN = #{newCustYn}
-	</insert>
-
-	<!-- 쿠폰조회 목록 -->
-	<select id="getCouponRetrieveList" parameterType="Coupon" resultType="Coupon">
-		/* TsaCoupon.getCouponRetrieveList */
-		SELECT A.CPN_ID                                               /*쿠폰ID*/
-		     , A.CPN_NM                                               /*쿠폰명*/
-		     , A.SITE_CD                                              /*사이트코드(공통코드G000)*/
-		     , A.CPN_TYPE                                             /*쿠폰유형(공통코드G230)*/
-		     , A.DC_WAY                                               /*할인방식(공통코드G240)*/
-		     , A.DC_PVAL                                              /*할인값(PC). 할인방식이 금액이면 할인금액, 율이면 할인율*/
-		     , A.DC_MVAL                                              /*할인값(모바일). 할인방식이 금액이면 할인금액, 율이면 할인율*/
-		     , A.MAX_DC_AMT                                           /*최고할인값. 할인방식이 금액이면 최고할인금액, 율이면 최고할인율*/
-		     , A.PD_GB                                                /*기간/일수구분(P 기간, D 일수)*/
-		     , DATE_FORMAT(A.AVAIL_STDT,'%Y%m%d%H%i%S') AS AVAIL_STDT /*유효시작일시(기간/일수구분 "P 기간"일 때 사용됨)*/
-		     , DATE_FORMAT(A.AVAIL_EDDT,'%Y%m%d%H%i%S') AS AVAIL_EDDT /*유효종료일시(기간/일수구분 "P 기간"일 때 사용됨)*/
-		     , A.AVAIL_DAYS                                           /*유효일수(기간/일수구분 "D 일수"일 때 사용됨)*/
-		     , A.CUST_PUB_LIMIT_QTY                                   /*고객당발행제한수량(0은 무제한)*/
-		     , A.TOT_PUB_LIMIT_QTY                                    /*총발행제한수량(0은 무제한)*/
-		     , A.ONE_PUB_QTY                                          /*1회발행수량*/
-		     , A.DN_GB                                                /*다운로드구분(A:자동다운로드, D:직접다운로드). 다운로드가능여부가 "Y 다운로드가능"일 때만 사용됨*/
-		     , A.BUY_LIMIT_AMT                                        /*구매제한금액(0은 제한없음)*/
-		FROM   TB_COUPON A
-		WHERE  A.SITE_CD = #{siteCd}
-		<if test="cpnId !=null and cpnId !=''">
-			AND	   A.CPN_ID = #{cpnId}
-		</if>
-		<if test="cpnNm !=null and cpnNm !=''">
-			AND	   A.CPN_NM LIKE CONCAT('%',#{cpnNm},'%')
-		</if>
-		<if test="cpnType !=null and cpnType !=''">
-			AND	   A.CPN_TYPE = #{cpnType}
-		</if>
-	</select>
-
-	<!-- 쿠폰 적용대상 등록 -->
-	<insert id="saveCouponRefVal" parameterType="Coupon">
-		/* TsaCoupon.saveCouponRefVal */
-		INSERT INTO TB_COUPON_REFVAL (
-		    CPN_ID
-		  <if test='cpnRefvalSq != null and cpnRefvalSq > 0'>
-		  , CPN_REFVAL_SQ
-		  </if>
-		  , CPN_TYPE
-		  , CPN_TARGET
-		  , REF_VAL
-		  <if test='refFormalGb != null and refFormalGb != ""'>
-		  , REF_FORMAL_GB
-		  </if>
-		  <if test='refBrandCd != null and refBrandCd != ""'>
-		  , REF_BRAND_CD
-		  </if>
-		  , REG_NO
-		  , REG_DT
-		  , UPD_NO
-		  , UPD_DT
-		)
-		SELECT CPN_ID
-		     <if test="cpnRefvalSq != null and cpnRefvalSq > 0">
-			 , #{cpnRefvalSq}
-			 </if>
-			 , CPN_TYPE
-			 , #{cpnTarget}
-			 , #{refVal}
-			 <if test='refFormalGb != null and refFormalGb != ""'>
-			 , #{refFormalGb}
-			 </if>
-			 <if test='refBrandCd != null and refBrandCd != ""'>
-			 , #{refBrandCd}
-			 </if>
-			 , REG_NO
-			 , now()
-			 , UPD_NO
-			 , now()
-		  FROM TB_COUPON
-		 WHERE CPN_ID = #{cpnId}
-		    ON DUPLICATE KEY UPDATE
-			REF_VAL = #{refVal}
-		  , REF_FORMAL_GB = #{refFormalGb}
-		  , REF_BRAND_CD = #{refBrandCd}
-		  , UPD_NO = #{updNo}
-		  , UPD_DT = now()
-	</insert>
-
-	<!-- 쿠폰 입점업체 분담율 등록 -->
-	<insert id="saveCouponBurden" parameterType="CouponBurden">
-		/* TsaCoupon.saveCouponBurden */
-		INSERT INTO TB_COUPON_BURDEN(
-		    CPN_ID
-		  , SUPPLY_COMP_CD
-		  , BURDEN_RATE
-		  , REG_NO
-		  , REG_DT
-		  , UPD_NO
-		  , UPD_DT
-		)
-		SELECT CPN_ID
-			 , #{supplyCompCd}
-			 , #{burdenRate}
-			 , REG_NO
-			 , now()
-			 , UPD_NO
-			 , now()
-		  FROM TB_COUPON
-		 WHERE CPN_ID = #{cpnId}
-			ON DUPLICATE KEY UPDATE
-			   BURDEN_RATE = #{burdenRate}
-			 , UPD_NO = #{updNo}
-			 , UPD_DT = now()
-	</insert>
-
-	<!-- 자사브랜드 조회-->
-	<select id="getSelfBrandList" resultType="CommonCode">
-		/* TsaCoupon.getSelfBrandList */
-		SELECT BRAND_CD  AS CD
-		     , BRAND_ENM AS CD_NM
-		  FROM TB_BRAND
-		 WHERE 1 = 1
-		   AND USE_YN = 'Y'
-		   AND SELF_YN = 'Y'
-		ORDER  BY SUPPLY_COMP_CD, DISP_ORD
-	</select>
-
-	<!-- 쿠폰 상세 조회-->
-	<select id="getCouponDetail" parameterType="int" resultType="Coupon">
-		/* TsaCoupon.getCouponDetail */
-		SELECT B.CPN_ID
-			 , B.CPN_NM
-			 , B.SITE_CD
-			 , B.AF_LINK_CD
-			 , B.CPN_TYPE
-			 , B.APPLY_SCOPE
-			 , B.DC_WAY
-			 , B.DC_PVAL
-			 , B.DC_MVAL
-			 , B.DC_AVAL
-			 , B.MAX_DC_AMT
-			 , B.PD_GB
-			 , B.AVAIL_STDT
-			 , B.AVAIL_EDDT
-			 , B.AVAIL_DAYS
-			 , B.CUST_PUB_LIMIT_QTY
-			 , B.TOT_PUB_LIMIT_QTY
-			 , B.ONE_PUB_QTY
-			 , B.DN_GB
-			 , B.DOWN_STDT
-			 , B.DOWN_EDDT
-			 , B.BUY_LIMIT_AMT
-			 , B.PLAN_SQ
-			 , B.REISSUANCE
-			 , B.CPN_STAT
-			 , B.END_ALIM_YN
-			 , B.FIRST_ORD_YN
-			 , B.DOWN_ABL_YN
-		     , B.DC_CD_GB
-			 , B.CUST_JOIN_STDT
-			 , B.CUST_JOIN_EDDT
-			 , B.BUY_STDT
-			 , B.BUY_EDDT
-			 , B.NEW_CUST_YN
-			 , (SELECT AF_CHANNEL
-			      FROM TB_AF_LINK A
-			     WHERE A.AF_LINK_CD = B.AF_LINK_CD) AS AF_CHANNEL
-			 , RC.RD_CPN_NM AS RD_CPN_NM
-  		  FROM TB_COUPON B
-		  LEFT OUTER JOIN (SELECT CPN_ID
-		  						, RD_CPN_NM
-							 FROM TB_RANDOM_COUPON
-		    				GROUP BY CPN_ID, RD_CPN_NM) RC
-		    ON B.CPN_ID = RC.CPN_ID
-		   AND B.DC_CD_GB = 'G233_10'		<!-- 시리얼 유형일 경우에만 랜덤쿠폰 검색 검색 -->
-    	 WHERE B.CPN_ID = #{value}
-	</select>
-
-	<!-- 쿠폰 발급 개수 조회 -->
-	<select id="getCouponIssueCnt" parameterType="int" resultType="int">
-		/* TsaCoupon.getCouponIssueCnt*/
-		SELECT COUNT(1)
-		  FROM TB_CUST_COUPON
-		 WHERE CPN_ID = #{cpnId}
-	</select>
-
-	<!-- 쿠폰 적용대상 조회 - 제외/적용 상품 -->
-	<select id="getCouponRefvalGoodsList" parameterType="CouponRefval" resultType="CouponRefval">
-		/* TsaCoupon.getCouponRefvalGoodsList */
-		SELECT FN_GET_CODE_NM('G073',B.GOODS_GB) AS GOODS_GB
-			 , B.GOODS_CD
-			 , B.GOODS_NM
-			 , C.BRAND_ENM
-			 , A.CPN_REFVAL_SQ
-		  FROM TB_COUPON_REFVAL A
-		 INNER JOIN TB_GOODS B ON A.REF_VAL = B.GOODS_CD
-		 INNER JOIN TB_BRAND C ON B.BRAND_CD = C.BRAND_CD
-		 WHERE A.CPN_ID = #{cpnId}
-		   AND A.CPN_TARGET = #{cpnTarget}
-		   AND A.DEL_YN = 'N'
-		 ORDER BY A.CPN_REFVAL_SQ DESC
-	</select>
-
-	<!-- 쿠폰 적용대상 조회 - 브랜드 -->
-	<select id="getCouponRefvalBrandList" parameterType="CouponRefval" resultType="CouponRefval">
-		/* TsaCoupon.getCouponRefvalExceptGoodsList */
-		SELECT B.BRAND_CD
-			 , B.BRAND_ENM
-		     , C.SUPPLY_COMP_NM
-			 , A.CPN_REFVAL_SQ
-		  FROM TB_COUPON_REFVAL A
-		 INNER JOIN TB_BRAND B ON A.REF_VAL = B.BRAND_CD
-		 INNER JOIN TB_SUPPLY_COMPANY C ON B.SUPPLY_COMP_CD = C.SUPPLY_COMP_CD
-		 WHERE A.CPN_ID = #{cpnId}
-		   AND A.CPN_TARGET = #{cpnTarget}
-		   AND A.DEL_YN = 'N'
-		 ORDER BY A.CPN_REFVAL_SQ DESC
-	</select>
-
-	<!-- 쿠폰적용대상 - 카테고리 조회 -->
-	<select id="getCouponRefvalCategoryList" parameterType="CouponRefval" resultType="CouponRefval">
-		/* TsaCoupon.getCouponRefvalCategoryList */
-		SELECT B.CATE_GB
-			 , A.REF_VAL AS CATE_NO
-			 , B.FULL_CATE_NM 					AS CATE_NM
-			 , B.SITE_CD
-			 , A.REF_FORMAL_GB					AS FORMAL_GB
-		     , A.REF_BRAND_CD					AS BRAND_CD
-			 , A.CPN_REFVAL_SQ
-		  FROM TB_COUPON_REFVAL A
-		 INNER JOIN TB_CATE_4SRCH B ON A.REF_VAL = B.LEAF_CATE_NO
-		 WHERE A.CPN_ID = #{cpnId}
-		   AND A.CPN_TARGET = #{cpnTarget}
-		   AND A.DEL_YN = 'N'
-		 ORDER BY A.CPN_REFVAL_SQ DESC
-	</select>
-
-	<!-- 쿠폰 적용대상 - 공급처 조회 -->
-	<select id="getCouponRefvalSupplyCompList" parameterType="CouponRefval" resultType="CouponRefval">
-		/* TsaCoupon.getCouponRefvalSupplyCompList */
-		SELECT B.SUPPLY_COMP_CD
-			 , B.SUPPLY_COMP_NM
-			 , A.CPN_REFVAL_SQ
-		  FROM TB_COUPON_REFVAL A
-		 INNER JOIN TB_SUPPLY_COMPANY B ON A.REF_VAL = B.SUPPLY_COMP_CD
-		 WHERE A.CPN_ID = #{cpnId}
-		   AND A.CPN_TARGET = #{cpnTarget}
-		   AND A.DEL_YN = 'N'
-		 ORDER BY A.CPN_REFVAL_SQ DESC
-	</select>
-
-	<!-- 쿠폰 입점업체 분담율 조회-->
-	<select id="getCouponBurdenList" parameterType="int" resultType="CouponBurden">
-		/* TsaCoupon.getCouponBurdenList */
-		SELECT SUPPLY_COMP_CD
-			 , BURDEN_RATE
-			 , DEL_YN
-			 , CPN_ID
-		  FROM TB_COUPON_BURDEN
-		 WHERE CPN_ID = #{value}
-	</select>
-
-	<!-- 쿠폰 적용대상 수정-->
-	<update id="updateCouponRefval" parameterType="CouponRefval" >
-		/* TsaCoupon.updateCouponRefval */
-		UPDATE TB_COUPON_REFVAL
-		   SET DEL_YN = 'Y'
-			 , UPD_NO = #{updNo}
-			 , UPD_DT = now()
-		 WHERE CPN_ID = #{cpnId}
-		   AND CPN_REFVAL_SQ IN
-		  <foreach collection="cpnRefvalSqArr" item="item" open="(" separator="," close=")">
-			#{item}
-		  </foreach>
-	</update>
-
-	<!-- 고객 쿠폰 발행 -->
-	<insert id="saveCouponCustPub" parameterType="CustCoupon">
-		/* TsaCoupon.saveCouponCustPub */
-		INSERT INTO TB_CUST_COUPON (
-		       CUST_NO
-		     , CPN_ID
-		     , AVAIL_STDT
-		     , AVAIL_EDDT
-		     , PUB_REASON
-		     , PUB_REASON_DTL
-		     , END_ALIM_SEND_YN
-		     , REG_NO
-		     , REG_DT
-		     , UPD_NO
-		     , UPD_DT
-		) VALUES (
-		       #{custNo}
-		     , #{cpnId}
-		     , DATE_FORMAT(#{availStdt} , '%Y%m%d%H%i%S')
-		     , DATE_FORMAT(#{availEddt} , '%Y%m%d%H%i%S')
-		     , #{pubReason}
-		     , #{pubReasonDtl}
-		     , #{endAlimSendYn}
-		     , #{regNo}
-		     , NOW()
-		     , #{updNo}
-		     , NOW()
-		)
-	</insert>
-
-	<!-- 특정 쿠폰 발급받은 회원 조회-->
-	<select id="getCouponIssueCustList" parameterType="CustCoupon" resultType="CustCoupon">
-		/* TsaCoupon.getCouponIssueCustList */
-		SELECT CUST_CPN_SQ
-			 , CUST_NO
-			 , CPN_ID
-			 , AVAIL_STDT
-			 , AVAIL_EDDT
-		  FROM TB_CUST_COUPON
-		 WHERE CPN_ID = #{cpnId}
-		   AND USED_DT IS NOT NULL
-	</select>
-
-	<!-- 특정 쿠폰 발급받은 고객 유효기간 수정-->
-	<update id="updateCustCouponAvailEddt" parameterType="CustCoupon">
-		/* TsaCoupon.updateCustCouponAvailEddt */
-		UPDATE TB_CUST_COUPON
-		   SET AVAIL_EDDT = DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
-			 , UPD_NO = #{updNo}
-			 , UPD_DT = now()
-		 WHERE CPN_ID = #{cpnId}
-		   AND USED_DT IS NOT NULL
-		   AND CUST_NO = #{custNo}
-		   AND CUST_CPN_SQ = #{custCpnSq}
-	</update>
-
-	<!-- 특정 쿠폰 발급받은 회원 조회-->
-	<select id="getSerialOverlapCheck" parameterType="Coupon" resultType="int">
-		/* TsaCoupon.getSerialOverlapCheck : 기간 내 중복 시리얼넘버 체크 */
-		WITH CHECK_DATA AS (
-		    SELECT C.CPN_ID
-				 , C.DOWN_STDT
-		    	 , C.DOWN_EDDT
-		    	 , C.AVAIL_STDT
-		    	 , C.AVAIL_EDDT
-		    	 , C.AVAIL_DAYS
-		    FROM TB_COUPON C
-			INNER JOIN (SELECT CPN_ID
-							 , RD_CPN_NM
-						FROM TB_RANDOM_COUPON
-						WHERE RD_CPN_NM = #{rdCpnNm}
-						GROUP BY CPN_ID, RD_CPN_NM ) RC
-		    ON C.CPN_ID = RC.CPN_ID
-		)
-		SELECT SUM(A.CNT) AS CNT
-		FROM ( SELECT COUNT(1) AS CNT		<!-- 다운 시작일이 겹치는 쿠폰번호 찾기 -->
-				FROM CHECK_DATA C
-				WHERE 1=1
-				AND C.DOWN_STDT >= STR_TO_DATE(#{downStdt}, '%Y-%m-%d %H:%i:%s')
-				AND C.DOWN_STDT <![CDATA[ <= ]]> STR_TO_DATE(#{downEddt}, '%Y-%m-%d %H:%i:%s')
-				UNION
-				SELECT COUNT(1) AS CNT		<!-- 다운 종료일이 겹치는 쿠폰번호 찾기 -->
-				FROM CHECK_DATA C
-				WHERE 1=1
-				AND C.DOWN_EDDT >= STR_TO_DATE(#{downStdt}, '%Y-%m-%d %H:%i:%s')
-				AND C.DOWN_EDDT <![CDATA[ <= ]]> STR_TO_DATE(#{downEddt}, '%Y-%m-%d %H:%i:%s')
-		      ) A
-	</select>
-
-	<!-- 특정 쿠폰 발급받은 회원 조회-->
-	<select id="getRandomCouponNmCnt" parameterType="String" resultType="int">
-		/* TsaCoupon.getRandomCouponNmCnt : 중복 시리얼넘버 체크 */
-		SELECT COUNT(1) AS CNT
-		FROM TB_RANDOM_COUPON
-		WHERE RD_CPN_NM = #{value}
-	</select>
-
-	<!-- 고객 쿠폰 발행 -->
-	<insert id="createRandomCouponInfo" parameterType="Coupon">
-		/* TsaCoupon.createRandomCouponInfo */
-		INSERT INTO TB_RANDOM_COUPON (
-			  RD_CPN_NM
-			, CPN_ID
-			, REG_NO
-			, REG_DT
-			, UPD_NO
-			, UPD_DT
-		) VALUES (
-			  #{rdCpnNm}
-			, #{cpnId}
-			, #{regNo}
-			, CURRENT_TIMESTAMP()
-			, #{updNo}
-			, CURRENT_TIMESTAMP()
-		)
-	</insert>
-
-	<!-- 특정 쿠폰 발급받은 회원 조회-->
-	<select id="getRandomCouponInfo" parameterType="int" resultType="CustCoupon">
-		/* TsaCoupon.getRandomCouponInfo */
-		SELECT RC.CPN_ID
-			 , RC.RD_CPN_NM
-		     , C.CUST_NO
-			 , C.CUST_ID
-			 , C.CUST_NM
-			 , DATE_FORMAT(CC.REG_DT, '%Y-%m-%d %H:%i:%s') AS REG_DT
-			 , DATE_FORMAT(CC.USED_DT, '%Y-%m-%d %H:%i:%s') AS USED_DT
-		FROM TB_RANDOM_COUPON RC
-		LEFT OUTER JOIN TB_CUSTOMER C
-		ON RC.CUST_NO = C.CUST_NO
-		LEFT OUTER JOIN TB_CUST_COUPON CC
-		ON RC.CPN_ID = CC.CPN_ID
-		AND C.CUST_NO = CC.CUST_NO
-		WHERE RC.CPN_ID = #{cpnId}
-	</select>
-</mapper>

+ 180 - 21
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -2,9 +2,87 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.style24.admin.biz.dao.TsaCustomerDao">
 <mapper namespace="com.style24.admin.biz.dao.TsaCustomerDao">
 
 
+	<!-- 페이징을 위한 select절 상단 -->
+	<sql id="selectForPagingHeader">
+		SELECT *
+		FROM (
+	</sql>
+
+	<!-- 페이징을 위한 select절 하단 -->
+	<sql id="selectForPagingFooter">
+		) ORIGINAL
+		WHERE NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+	</sql>
+
+	<!-- 활동회원목록 -->
+	<select id="getCustomerActiveListCount" parameterType="CustomerSearch" resultType="int">
+		/* TsaCustomer.getCustomerActiveListCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_CUSTOMER
+		WHERE  CUST_STAT = 'G104_10'
+		<if test="searchGb == 'custNo'">
+		AND    CUST_NO = #{searchTxt}
+		</if>
+		<if test="searchGb == 'custNm'">
+		AND    LOWER(CUST_NM) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		</if>
+		<if test="searchGb == 'email'">
+		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		</if>
+		<if test="searchGb == 'custId'">
+		AND    LOWER(CUST_ID) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		</if>
+		<if test="siteCd != null and siteCd != ''">
+		AND    SITE_CD = #{siteCd}
+		</if>
+		<if test="cellPhnno != null and cellPhnno != ''">
+		AND    CELL_PHNNO = #{cellPhnno}
+		</if>
+		<if test="custGb != null and custGb != ''">
+		AND    CUST_GB = #{custGb}
+		</if>
+		<if test="custGrade != null and custGrade != ''">
+		AND    CUST_GRADE = #{custGrade}
+		</if>
+		<if test="managedRsn != null and managedRsn != ''">
+		AND    MANAGED_RSN = #{managedRsn}
+		</if>
+		<if test="smsAgreeYn != null and smsAgreeYn != ''">
+		AND   SMS_AGREE_YN = #{smsAgreeYn}
+		</if>
+		<if test="emailAgreeYn != null and emailAgreeYn != ''">
+		AND   EMAIL_AGREE_YN = #{emailAgreeYn}
+		</if>
+		<if test="appAgreeYn != null and appAgreeYn != ''">
+		AND   APP_AGREE_YN = #{appAgreeYn}
+		</if>
+		<if test="stDate != null and edDate != '' and stDate != null and edDate != ''">
+		     <if test="searchDateGb == 'joinDt'">
+		AND   JOIN_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND   JOIN_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		     </if>
+		     <if test="searchDateGb == 'loginLdt'">
+		AND   LOGIN_LDT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND   LOGIN_LDT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		     </if>
+		</if>
+		<if test="custNm != null and custNm != ''">
+		AND    LOWER(CUST_NM) LIKE CONCAT('%',LOWER(#{custNm}),'%')
+		</if>
+		<if test="email != null and email != ''">
+		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{eamil}),'%')
+		</if>
+		<if test="custId != null and custId != ''">
+		AND    CUST_ID = #{custId}
+		</if>
+	</select>
+
 	<!-- 활동회원목록 -->
 	<!-- 활동회원목록 -->
 	<select id="getCustomerActiveList" parameterType="CustomerSearch" resultType="Customer">
 	<select id="getCustomerActiveList" parameterType="CustomerSearch" resultType="Customer">
 		/* TsaCustomer.getCustomerActiveList */
 		/* TsaCustomer.getCustomerActiveList */
+		<if test='cpnPubPopYn != null and cpnPubPopYn != "Y"'>
+		<include refid="selectForPagingHeader"/>
+		</if>
 		SELECT CUST_NO
 		SELECT CUST_NO
 		     , CUST_ID
 		     , CUST_ID
 		     , CUST_NM
 		     , CUST_NM
@@ -51,10 +129,16 @@
 		     , SECEDE_RSN
 		     , SECEDE_RSN
 		     , SECEDE_DTL_RSN
 		     , SECEDE_DTL_RSN
 		     , DATE_FORMAT(SECEDE_DT, '%Y%m%d%H%i%S') AS SECEDE_DT
 		     , DATE_FORMAT(SECEDE_DT, '%Y%m%d%H%i%S') AS SECEDE_DT
-		     , FN_GET_USER_NM(REG_NO)              AS REG_NM
-		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S') AS REG_DT
-		     , FN_GET_USER_NM(UPD_NO)              AS UPD_NM
-		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		     , FN_GET_USER_NM(REG_NO)                 AS REG_NM
+		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S')    AS REG_DT
+		     , FN_GET_USER_NM(UPD_NO)                 AS UPD_NM
+		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S')    AS UPD_DT
+		     <if test="searchDateGb == 'joinDt'">
+		     , RANK() OVER(ORDER BY JOIN_DT DESC)     AS NUMB
+		     </if>
+		     <if test="searchDateGb == 'loginLdt'">
+		     , RANK() OVER(ORDER BY LOGIN_LDT DESC)   AS NUMB
+		     </if>
 		FROM   TB_CUSTOMER
 		FROM   TB_CUSTOMER
 		WHERE  CUST_STAT = 'G104_10'
 		WHERE  CUST_STAT = 'G104_10'
 		<if test="searchGb == 'custNo'">
 		<if test="searchGb == 'custNo'">
@@ -112,6 +196,9 @@
 		<if test="custId != null and custId != ''">
 		<if test="custId != null and custId != ''">
 		AND    CUST_ID = #{custId}
 		AND    CUST_ID = #{custId}
 		</if>
 		</if>
+		<if test='cpnPubPopYn != null and cpnPubPopYn != "Y"'>
+		<include refid="selectForPagingFooter"/>
+		</if>
 	</select>
 	</select>
 
 
 	<!--회원정보 수정-->
 	<!--회원정보 수정-->
@@ -132,17 +219,17 @@
 		    <if test="homeZipcode != null and homeZipcode != ''">
 		    <if test="homeZipcode != null and homeZipcode != ''">
 		    , HOME_ZIPCODE = #{homeZipcode}
 		    , HOME_ZIPCODE = #{homeZipcode}
 		    </if>
 		    </if>
-		    <if test="homeBaseAddr != null and homeBaseAddr != ''">
-		    , HOME_BASE_ADDR = #{homeBaseAddr}
+		    <if test="encodedHomeBaseAddr != null and encodedHomeBaseAddr != ''">
+		    , HOME_BASE_ADDR = #{encodedHomeBaseAddr}
 		    </if>
 		    </if>
-		    <if test="homeDtlAddr != null and homeDtlAddr != ''">
-		    , HOME_DTL_ADDR = #{homeDtlAddr}
+		    <if test="encodedHomeDtlAddr != null and encodedHomeDtlAddr != ''">
+		    , HOME_DTL_ADDR = #{encodedHomeDtlAddr}
 		    </if>
 		    </if>
-		    <if test="birthYmd != null and birthYmd != ''">
-		    , BIRTH_YMD = REPLACE(#{birthYmd}, '-', '')
+		    <if test="encodedBirthYmd != null and encodedBirthYmd != ''">
+		    , BIRTH_YMD = #{encodedBirthYmd}
 		    </if>
 		    </if>
-		    <if test="email != null and email != ''">
-		    , EMAIL = #{email}
+		    <if test="encodedEmail != null and encodedEmail != ''">
+		    , EMAIL = #{encodedEmail}
 		    </if>
 		    </if>
 		    <if test="managedRsn != null and managedRsn != ''">
 		    <if test="managedRsn != null and managedRsn != ''">
 		    , MANAGED_DT = CASE WHEN MANAGED_RSN = #{managedRsn}
 		    , MANAGED_DT = CASE WHEN MANAGED_RSN = #{managedRsn}
@@ -657,8 +744,43 @@
 	</select>
 	</select>
 
 
 	<!-- 탈퇴회원목록 -->
 	<!-- 탈퇴회원목록 -->
+	<select id="getCustomerSecedeListCount" parameterType="CustomerSearch" resultType="int">
+		/* TsaCustomer.getCustomerSecedeListCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_SECEDE_CUST
+		WHERE  CUST_STAT = 'G104_30'
+		<if test="searchTxt != null and searchTxt != ''">
+		    <if test="searchGb == 'custNo'">
+		AND    CUST_NO = #{searchTxt}
+		    </if>
+		    <if test="searchGb == 'custNm'">
+		AND    LOWER(CUST_NM) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </if>
+		    <if test="searchGb == 'email'">
+		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </if>
+		    <if test="searchGb == 'custNo'">
+		AND    LOWER(CUST_NO) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </if>
+		</if>
+		<if test="siteCd != null and siteCd != ''">
+		AND    SITE_CD = #{siteCd}
+		</if>
+		<if test="cellPhnno != null and cellPhnno != ''">
+		AND    CELL_PHNNO = #{cellPhnno}
+		</if>
+		<if test="secedeRsn != null and secedeRsn != ''">
+		AND    SECEDE_RSN = #{secedeRsn}
+		</if>
+		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
+		AND    SECEDE_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    SECEDE_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+	</select>
+
 	<select id="getCustomerSecedeList" parameterType="CustomerSearch" resultType="Customer">
 	<select id="getCustomerSecedeList" parameterType="CustomerSearch" resultType="Customer">
 		/* TsaCustomer.getSecedeCustomerList */
 		/* TsaCustomer.getSecedeCustomerList */
+		<include refid="selectForPagingHeader"/>
 		SELECT CUST_NO
 		SELECT CUST_NO
 		     , CUST_ID
 		     , CUST_ID
 		     , CUST_NM
 		     , CUST_NM
@@ -705,10 +827,11 @@
 		     , SECEDE_RSN
 		     , SECEDE_RSN
 		     , SECEDE_DTL_RSN
 		     , SECEDE_DTL_RSN
 		     , DATE_FORMAT(SECEDE_DT, '%Y%m%d%H%i%S') AS SECEDE_DT
 		     , DATE_FORMAT(SECEDE_DT, '%Y%m%d%H%i%S') AS SECEDE_DT
-		     , FN_GET_USER_NM(REG_NO)              AS REG_NM
-		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S') AS REG_DT
-		     , FN_GET_USER_NM(UPD_NO)              AS UPD_NM
-		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		     , FN_GET_USER_NM(REG_NO)                 AS REG_NM
+		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S')    AS REG_DT
+		     , FN_GET_USER_NM(UPD_NO)                 AS UPD_NM
+		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S')    AS UPD_DT
+		     , RANK() OVER(ORDER BY SECEDE_DT DESC)   AS NUMB
 		FROM   TB_SECEDE_CUST
 		FROM   TB_SECEDE_CUST
 		WHERE  CUST_STAT = 'G104_30'
 		WHERE  CUST_STAT = 'G104_30'
 		<if test="searchTxt != null and searchTxt != ''">
 		<if test="searchTxt != null and searchTxt != ''">
@@ -738,11 +861,45 @@
 		AND    SECEDE_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
 		AND    SECEDE_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
 		AND    SECEDE_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
 		AND    SECEDE_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
 		</if>
 		</if>
+		<include refid="selectForPagingFooter"/>
+	</select>
+
+	<!-- 휴면회원목록 -->
+	<select id="getCustomerDormantListCount" parameterType="CustomerSearch" resultType="int">
+		/* TsaCustomer.getCustomerDormantListCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_DORMANT_CUST
+		WHERE  CUST_STAT = 'G104_20'
+		<if test="searchTxt != null and searchTxt != ''">
+		    <if test="searchGb == 'custNo'">
+		AND    CUST_NO = #{searchTxt}
+		    </if>
+		    <if test="searchGb == 'custNm'">
+		AND    LOWER(CUST_NM) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </if>
+		    <if test="searchGb == 'email'">
+		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </if>
+		    <if test="searchGb == 'custNo'">
+		AND    LOWER(CUST_NO) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </if>
+		</if>
+		<if test="siteCd != null and siteCd != ''">
+		AND    SITE_CD = #{siteCd}
+		</if>
+		<if test="cellPhnno != null and cellPhnno != ''">
+		AND    CELL_PHNNO = #{cellPhnno}
+		</if>
+		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
+		AND    DORMANT_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    DORMANT_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
 	</select>
 	</select>
 
 
 	<!-- 휴면회원목록 -->
 	<!-- 휴면회원목록 -->
 	<select id="getCustomerDormantList" parameterType="CustomerSearch" resultType="Customer">
 	<select id="getCustomerDormantList" parameterType="CustomerSearch" resultType="Customer">
 		/* TsaCustomer.getDormantCustomerList */
 		/* TsaCustomer.getDormantCustomerList */
+		<include refid="selectForPagingHeader"/>
 		SELECT CUST_NO
 		SELECT CUST_NO
 		     , CUST_ID
 		     , CUST_ID
 		     , CUST_NM
 		     , CUST_NM
@@ -788,12 +945,13 @@
 		     , DATE_FORMAT(MANAGED_DT, '%Y%m%d%H%i%S') AS MANAGED_DT
 		     , DATE_FORMAT(MANAGED_DT, '%Y%m%d%H%i%S') AS MANAGED_DT
 		     , SECEDE_RSN
 		     , SECEDE_RSN
 		     , SECEDE_DTL_RSN
 		     , SECEDE_DTL_RSN
-		     , DATE_FORMAT(SECEDE_DT, '%Y%m%d%H%i%S') AS SECEDE_DT
-		     , FN_GET_USER_NM(REG_NO)              AS REG_NM
-		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S') AS REG_DT
-		     , FN_GET_USER_NM(UPD_NO)              AS UPD_NM
-		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		     , DATE_FORMAT(SECEDE_DT, '%Y%m%d%H%i%S')  AS SECEDE_DT
+		     , FN_GET_USER_NM(REG_NO)                  AS REG_NM
+		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S')     AS REG_DT
+		     , FN_GET_USER_NM(UPD_NO)                  AS UPD_NM
+		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S')     AS UPD_DT
 		     , DATE_FORMAT(DORMANT_DT, '%Y%m%d%H%i%S') AS DORMANT_DT
 		     , DATE_FORMAT(DORMANT_DT, '%Y%m%d%H%i%S') AS DORMANT_DT
+		     , RANK() OVER(ORDER BY DORMANT_DT DESC)   AS NUMB
 		FROM   TB_DORMANT_CUST
 		FROM   TB_DORMANT_CUST
 		WHERE  CUST_STAT = 'G104_20'
 		WHERE  CUST_STAT = 'G104_20'
 		<if test="searchTxt != null and searchTxt != ''">
 		<if test="searchTxt != null and searchTxt != ''">
@@ -820,6 +978,7 @@
 		AND    DORMANT_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
 		AND    DORMANT_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
 		AND    DORMANT_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
 		AND    DORMANT_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
 		</if>
 		</if>
+		<include refid="selectForPagingFooter"/>
 	</select>
 	</select>
 
 
 	<insert id="createException">
 	<insert id="createException">

+ 122 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -580,12 +580,13 @@
 
 
 	<!-- 상품별카테고리전시관리 목록 조회 -->
 	<!-- 상품별카테고리전시관리 목록 조회 -->
 	<select id="getGoodsCategoryList" parameterType="GoodsCategory" resultType="GoodsCategory">
 	<select id="getGoodsCategoryList" parameterType="GoodsCategory" resultType="GoodsCategory">
+		/* TsaDisplay.getGoodsCategoryList */
 		SELECT	Z.*
 		SELECT	Z.*
 		FROM	(
 		FROM	(
 			SELECT	@rownum := @rownum + 1 AS RNUM
 			SELECT	@rownum := @rownum + 1 AS RNUM
 					,A.*
 					,A.*
-					, CASE WHEN A.GOODS_TYPE = 'G056_S' THEN (SELECT NVL(SUM(CURR_STOCK_QTY), 0) - NVL(SUM(BASE_STOCK_QTY), 0) AS CURR_STOCK_QTY FROM VW_STOCK_COMPOSE WHERE GOODS_CD = A.GOODS_CD)
-					ELSE (SELECT NVL(SUM(CURR_STOCK_QTY), 0) - NVL(SUM(BASE_STOCK_QTY), 0) AS CURR_STOCK_QTY FROM VW_STOCK WHERE GOODS_CD = A.GOODS_CD)
+					, CASE WHEN A.GOODS_TYPE = 'G056_S' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY), 0) - IFNULL(SUM(BASE_STOCK_QTY), 0) AS CURR_STOCK_QTY FROM VW_STOCK_COMPOSE WHERE GOODS_CD = A.GOODS_CD)
+					ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY), 0) - IFNULL(SUM(BASE_STOCK_QTY), 0) AS CURR_STOCK_QTY FROM VW_STOCK WHERE GOODS_CD = A.GOODS_CD)
 					END AS CURR_STOCK_QTY
 					END AS CURR_STOCK_QTY
 			FROM	(
 			FROM	(
 				SELECT	'카테고리확인' AS FULL_CATE_NM
 				SELECT	'카테고리확인' AS FULL_CATE_NM
@@ -787,7 +788,7 @@
 				VALUES (
 				VALUES (
 				    #{cateCd}
 				    #{cateCd}
 				    ,#{goodsCd}
 				    ,#{goodsCd}
-				    ,(SELECT	NVL((MAX(DISP_ORD) + 1), 1) AS DISP_ORD
+				    ,(SELECT	IFNULL((MAX(DISP_ORD) + 1), 1) AS DISP_ORD
 				        FROM	TB_CATE_GOODS ALIAS_FOR_SUBQUERY
 				        FROM	TB_CATE_GOODS ALIAS_FOR_SUBQUERY
 				        WHERE   CATE_NO = #{cateCd})
 				        WHERE   CATE_NO = #{cateCd})
 				    ,#{regNo}
 				    ,#{regNo}
@@ -939,6 +940,121 @@
 	<select id="getCategoryGoodsListCount" parameterType="CategoryGoods" resultType="int">
 	<select id="getCategoryGoodsListCount" parameterType="CategoryGoods" resultType="int">
 		/* TsaDisplay.getCategoryGoodsListCount */
 		/* TsaDisplay.getCategoryGoodsListCount */
 		SELECT COUNT(*)
 		SELECT COUNT(*)
+		FROM ( SELECT A.GOODS_CD
+					, A.CATE_NO
+					, A.DISP_ORD
+					, A.REG_NO
+					, A.REG_DT
+				FROM TB_CATE_GOODS A
+				WHERE 1=1
+				  AND A.CATE_NO IN (
+				      			SELECT LEAF_CATE_NO
+								  FROM TB_CATE_4SRCH
+								 WHERE 1=1
+								<if test='selLvl == "3"'>
+									AND CATE1_NO  = #{cate1No}
+								</if>
+								<if test='selLvl == "4"'>
+									AND CATE2_NO  = #{cate2No}
+								</if>
+								<if test='selLvl == "5"'>
+									AND CATE3_NO  = #{cate3No}
+								</if>
+								<if test='selLvl == "6"'>
+									AND CATE4_NO  = #{cate4No}
+								</if>
+				)
+		) A
+		<if test="searchGb == null or searchGb =='BASIC'">
+			, TB_GOODS G
+		</if>
+		<if test="searchGb != null and searchGb =='EXCEL'">
+			, (SELECT G.*
+			, TMP_DISP_ORD
+			FROM TB_GOODS G
+			, (SELECT SEARCH_CD, MIN(DISP_ORD) AS TMP_DISP_ORD
+			FROM TB_SEARCH_DATA
+			WHERE REG_NO = #{regNo}
+			GROUP BY SEARCH_CD
+			) D
+			WHERE G.GOODS_CD LIKE D.SEARCH_CD||'%'
+			OR G.SUPPLY_GOODS_CD LIKE D.SEARCH_CD||'%'
+			) G
+		</if>
+		WHERE A.GOODS_CD = G.GOODS_CD
+	</select>
+
+	<select id="getCategoryGoodsList" parameterType="CategoryGoods" resultType="CategoryGoods">
+		/* TsaDisplay.getCategoryGoodsList */
+		SELECT Z.*
+		FROM ( SELECT @rownum := @rownum + 1 AS RNUM
+				, A.*
+				FROM ( SELECT G.GOODS_CD
+							, G.GOODS_TNM
+							, G.GOODS_NM
+							, A.CATE_NO
+							, A.DISP_ORD
+							, G.GOODS_TYPE
+							, G.TAG_PRICE
+							, G.LIST_PRICE
+							, G.CURR_PRICE
+							, G.DC_RATE
+							, G.GOODS_STAT
+							, G.BRAND_CD
+							, A.REG_NO
+							, A.REG_DT
+							, G.SUPPLY_GOODS_CD
+							, G.STYLE_YEAR
+							, IFNULL(G.FORMAL_GB,'10') AS FORMAL_GB
+						FROM ( SELECT A.GOODS_CD
+									, A.CATE_NO
+									, A.DISP_ORD
+									, A.REG_NO
+									, A.REG_DT
+								FROM TB_CATE_GOODS A
+								WHERE 1=1
+								AND A.CATE_NO IN ( SELECT LEAF_CATE_NO
+													FROM TB_CATE_4SRCH
+													WHERE 1=1
+												<if test='selLvl == "3"'>
+													AND CATE1_NO  = #{cate1No}
+												</if>
+												<if test='selLvl == "4"'>
+													AND CATE2_NO  = #{cate2No}
+												</if>
+												<if test='selLvl == "5"'>
+													AND CATE3_NO  = #{cate3No}
+												</if>
+												<if test='selLvl == "6"'>
+													AND CATE4_NO  = #{cate4No}
+												</if>
+								)
+					) A
+				<if test="searchGb == null or searchGb =='BASIC'">
+					, TB_GOODS G
+				</if>
+				<if test="searchGb != null and searchGb =='EXCEL'">
+					, (SELECT G.*
+					, TMP_DISP_ORD
+					FROM TB_GOODS G
+					, (SELECT SEARCH_CD, MIN(DISP_ORD) AS TMP_DISP_ORD
+					FROM TB_SEARCH_DATA
+					WHERE REG_NO = #{regNo}
+					GROUP BY SEARCH_CD
+					) D
+					WHERE G.GOODS_CD LIKE D.SEARCH_CD||'%'
+					OR G.SUPPLY_GOODS_CD LIKE D.SEARCH_CD||'%'
+					) G
+				</if>
+				JOIN ( SELECT @rownum := 0) R
+				WHERE A.GOODS_CD = G.GOODS_CD
+				ORDER BY A.DISP_ORD ASC, G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC
+		<include refid="getListPagingCondition_sql"/>
+	</select>
+
+	<select id="getCategoryGoodsListCount_old" parameterType="CategoryGoods" resultType="int">
+		/* TsaDisplay.getCategoryGoodsListCount_old */
+		SELECT COUNT(*)
 		FROM ( SELECT A.GOODS_CD
 		FROM ( SELECT A.GOODS_CD
 					, A.CATE_NO
 					, A.CATE_NO
 					, A.DISP_ORD
 					, A.DISP_ORD
@@ -989,8 +1105,8 @@
 		WHERE A.GOODS_CD = G.GOODS_CD
 		WHERE A.GOODS_CD = G.GOODS_CD
 	</select>
 	</select>
 
 
-	<select id="getCategoryGoodsList" parameterType="CategoryGoods" resultType="CategoryGoods">
-		/* TsaDisplay.getCategoryGoodsList */
+	<select id="getCategoryGoodsList_old" parameterType="CategoryGoods" resultType="CategoryGoods">
+		/* TsaDisplay.getCategoryGoodsList_old */
 		SELECT Z.*
 		SELECT Z.*
 		FROM ( SELECT @rownum := @rownum + 1 AS RNUM
 		FROM ( SELECT @rownum := @rownum + 1 AS RNUM
 					, A.*
 					, A.*
@@ -1010,7 +1126,7 @@
 						   , A.REG_DT
 						   , A.REG_DT
 						   , G.SUPPLY_GOODS_CD
 						   , G.SUPPLY_GOODS_CD
 						   , G.STYLE_YEAR
 						   , G.STYLE_YEAR
-						   , NVL(G.FORMAL_GB,'10') AS FORMAL_GB
+						   , IFNULL(G.FORMAL_GB,'10') AS FORMAL_GB
 					   FROM ( SELECT A.GOODS_CD
 					   FROM ( SELECT A.GOODS_CD
 								   , A.CATE_NO
 								   , A.CATE_NO
 								   , A.DISP_ORD
 								   , A.DISP_ORD

+ 71 - 19
src/main/java/com/style24/persistence/mybatis/shop/TsaFreegiftPromotion.xml

@@ -186,14 +186,14 @@
 			 , DATE_FORMAT(FG.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
 			 , DATE_FORMAT(FG.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
 			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.UPD_NO) AS UPD_NM
 			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.UPD_NO) AS UPD_NM
 			 , DATE_FORMAT(FG.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
 			 , DATE_FORMAT(FG.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
-		FROM TB_FREEGIFT_GOODS FG
-		INNER JOIN TB_GOODS G
-		ON G.GOODS_CD = FG.TARGET_VAL
-		WHERE DEL_YN = 'N'
-		AND FG.TARGET_GB = 'G260_10'		/* G260_10|상품, G260_12|브랜드, G260_13|공급처 */
-		AND FG.GOODS_GB = #{goodsGb}		/* G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL */
-		AND FG.FREEGIFT_SQ = #{freegiftSq}	/* 사은품 프로모션 번호 */
-		ORDER BY TARGET_VAL ASC
+		  FROM TB_FREEGIFT_GOODS FG
+		 INNER JOIN TB_GOODS G
+		    ON G.GOODS_CD = FG.TARGET_VAL
+		 WHERE DEL_YN = 'N'
+		   AND FG.TARGET_GB = 'G260_10'		/* G260_10|상품, G260_12|브랜드, G260_13|공급처 */
+		   AND FG.GOODS_GB = #{goodsGb}		/* G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL */
+		   AND FG.FREEGIFT_SQ = #{freegiftSq}	/* 사은품 프로모션 번호 */
+		 ORDER BY TARGET_VAL ASC
 	</select>
 	</select>
 
 
 	<!-- 사은품 프로모션 섹션정보 리스트 조회 -->
 	<!-- 사은품 프로모션 섹션정보 리스트 조회 -->
@@ -202,10 +202,10 @@
 		SELECT FC.FREEGIFT_SECTION_SQ
 		SELECT FC.FREEGIFT_SECTION_SQ
 		     , FC.SECTION_GB
 		     , FC.SECTION_GB
 		     , FC.SECTION_VAL
 		     , FC.SECTION_VAL
-		FROM   TB_FREEGIFT_SECTION FC
-		WHERE  FC.DEL_YN = 'N'
-		AND    FC.FREEGIFT_SQ = #{freegiftSq}	/* 사은품 프로모션 번호 */
-		ORDER BY FC.FREEGIFT_SECTION_SQ ASC
+		  FROM TB_FREEGIFT_SECTION FC
+		 WHERE FC.DEL_YN = 'N'
+		   AND FC.FREEGIFT_SQ = #{freegiftSq}	/* 사은품 프로모션 번호 */
+		 ORDER BY FC.FREEGIFT_SECTION_SQ ASC
 	</select>
 	</select>
 
 
 	<!-- 사은품 프로모션 섹션정보 리스트 조회 -->
 	<!-- 사은품 프로모션 섹션정보 리스트 조회 -->
@@ -219,13 +219,13 @@
 		     , FV.ITEM_CD
 		     , FV.ITEM_CD
 			 , FG.PRODUCT_NO
 			 , FG.PRODUCT_NO
 			 , FG.GOODS_NM
 			 , FG.GOODS_NM
-		FROM TB_FREEGIFT_VAL FV
-		INNER JOIN TB_FREE_GOODS FG
-		ON FV.ITEM_CD = FG.PRODUCT_NO
-		WHERE FV.DEL_YN = 'N'
-		AND FV.FREEGIFT_SQ = #{freegiftSq}					/* 사은품 프로모션 번호 */
-		AND FV.FREEGIFT_SECTION_SQ = #{freegiftSectionSq}	/* 사은품 프로모션 섹션 번호 */
-		ORDER BY FV.FREEGIFT_SECTION_SQ, FV.ITEM_CD
+		  FROM TB_FREEGIFT_VAL FV
+		 INNER JOIN TB_FREE_GOODS FG
+		    ON FV.ITEM_CD = FG.PRODUCT_NO
+		 WHERE FV.DEL_YN = 'N'
+		   AND FV.FREEGIFT_SQ = #{freegiftSq}					/* 사은품 프로모션 번호 */
+		   AND FV.FREEGIFT_SECTION_SQ = #{freegiftSectionSq}	/* 사은품 프로모션 섹션 번호 */
+		 ORDER BY FV.FREEGIFT_SECTION_SQ, FV.ITEM_CD
 	</select>
 	</select>
 
 
 	<!-- 사은품 프로모션 마스터 정보 저장 -->
 	<!-- 사은품 프로모션 마스터 정보 저장 -->
@@ -430,4 +430,56 @@
 			, UPD_DT = CURRENT_TIMESTAMP
 			, UPD_DT = CURRENT_TIMESTAMP
 		WHERE FREEGIFT_SQ = #{freegiftSq}
 		WHERE FREEGIFT_SQ = #{freegiftSq}
 	</update>
 	</update>
+
+	<!-- 사은품 프로모션 지급 사은품 정보 삭제 -->
+	<delete id="deleteFreegiftGoodsApply" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.deleteFreegiftGoodsApply : 적용 업체 및 브랜드 목록 제거 */
+		DELETE FROM TB_FREEGIFT_GOODS_APPLY
+			  WHERE FREEGIFT_SQ = #{freegiftSq}
+	</delete>
+
+	<!-- 실사용 업체/브랜드 리스트 등록 -->
+	<insert id="insertFreegiftGoodsApplyList" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.insertFreegiftGoodsApplyList : 실사용 업체/브랜드 리스트 등록 */
+		INSERT INTO TB_FREEGIFT_GOODS_APPLY
+		SELECT FREEGIFT_SQ
+			 , TARGET_GB
+			 , TARGET_VAL
+			 , #{regNo}
+			 , NOW()
+		  FROM TB_FREEGIFT_GOODS
+		 WHERE 1=1
+		   AND FREEGIFT_SQ = #{freegiftSq}
+		   AND DEL_YN = 'N'
+		   AND TARGET_GB IN ('G260_12', 'G260_13')
+	</insert>
+
+	<!-- 실사용 업체/브랜드 리스트 등록 -->
+	<insert id="insertFreegiftGoodsApplyCompanyOrBrandList" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.insertFreegiftGoodsApplyList : 실사용 업체/브랜드 리스트 등록 */
+		INSERT INTO TB_FREEGIFT_GOODS_APPLY
+		SELECT FG.FREEGIFT_SQ
+		<if test="targetGb == 'G260_13'">		<!-- 업체일 경우 업체에 등록된 브랜드 코드 입력 -->
+		     , 'G260_12'
+		     , BS.BRAND_CD
+		</if>
+		<if test="targetGb == 'G260_12'">		<!-- 브랜드일 경우 업체에 등록된 업체 코드 입력 -->
+			, 'G260_13'
+			 , BS.SUPPLY_COMP_CD
+		</if>
+			 , #{regNo}
+			 , NOW()
+		  FROM TB_FREEGIFT_GOODS FG
+		 INNER JOIN TB_BRAND_SUPPLY BS
+		<if test="targetGb == 'G260_13'">
+			ON FG.TARGET_VAL = BS.SUPPLY_COMP_CD
+		</if>
+		<if test="targetGb == 'G260_12'">
+			ON FG.TARGET_VAL = BS.BRAND_CD
+		</if>
+		 WHERE 1=1
+		   AND FG.FREEGIFT_SQ = #{freegiftSq}
+		   AND FG.TARGET_GB = #{targetGb}
+		   AND FG.DEL_YN = 'N'
+	</insert>
 </mapper>
 </mapper>

+ 62 - 48
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -127,15 +127,16 @@
 	<!-- 정보고시분류 목록 -->
 	<!-- 정보고시분류 목록 -->
 	<select id="getNotiInfoList" parameterType="NotiInfo" resultType="NotiInfo">
 	<select id="getNotiInfoList" parameterType="NotiInfo" resultType="NotiInfo">
 		/* TsaGoods.getNotiInfoList */
 		/* TsaGoods.getNotiInfoList */
-		SELECT DISTINCT B.SUPPLY_VENDOR_CD
+		SELECT DISTINCT B.SUPPLY_COMP_CD
 		     , B.NI_CLSF_CD
 		     , B.NI_CLSF_CD
 		     , C.CD_NM AS NI_CLSF_NM
 		     , C.CD_NM AS NI_CLSF_NM
 		     , C.DISP_ORD
 		     , C.DISP_ORD
 		FROM TB_NOTI_INFO B
 		FROM TB_NOTI_INFO B
 		INNER JOIN TB_COMMON_CODE C ON B.NI_CLSF_CD = C.CD 
 		INNER JOIN TB_COMMON_CODE C ON B.NI_CLSF_CD = C.CD 
-		WHERE B.SUPPLY_VENDOR_CD = CASE #{supplyVendorCd} 
-		                         WHEN 'SV0001' THEN 'SV0001'
-		                         WHEN 'SV0002' THEN 'SV0002'
+		WHERE B.SUPPLY_COMP_CD = CASE #{supplyCompCd} 
+		                         WHEN '1003' THEN '1003'
+		                         WHEN '1004' THEN '1004'
+		                         WHEN '1005' THEN '1005'
 		                         ELSE 'E' END 
 		                         ELSE 'E' END 
 		AND C.CD_GB = 'G004'   /*고시정보*/
 		AND C.CD_GB = 'G004'   /*고시정보*/
 		ORDER BY C.DISP_ORD
 		ORDER BY C.DISP_ORD
@@ -144,16 +145,17 @@
 	<!-- 정보고시 상세 목록 -->
 	<!-- 정보고시 상세 목록 -->
 	<select id="getNotiInfoItemList" parameterType="NotiInfo" resultType="NotiInfo">
 	<select id="getNotiInfoItemList" parameterType="NotiInfo" resultType="NotiInfo">
 		/* TsaGoods.getNotiInfoItemList */
 		/* TsaGoods.getNotiInfoItemList */
-		SELECT B.SUPPLY_VENDOR_CD
+		SELECT B.SUPPLY_COMP_CD
 		     , B.NI_CLSF_CD
 		     , B.NI_CLSF_CD
 		     , B.NI_ITEM_CD
 		     , B.NI_ITEM_CD
 		     , FN_GET_CODE_NM('G005', B.NI_ITEM_CD) AS NI_ITEM_NM
 		     , FN_GET_CODE_NM('G005', B.NI_ITEM_CD) AS NI_ITEM_NM
 		     , B.NI_CONTENT
 		     , B.NI_CONTENT
 		     , B.DISP_ORD
 		     , B.DISP_ORD
 		FROM TB_NOTI_INFO B
 		FROM TB_NOTI_INFO B
-		WHERE B.SUPPLY_VENDOR_CD = CASE #{supplyVendorCd} 
-		                         WHEN 'SV0001' THEN 'SV0001'
-		                         WHEN 'SV0002' THEN 'SV0002'
+		WHERE B.SUPPLY_COMP_CD = CASE #{supplyCompCd} 
+		                         WHEN '1003' THEN '1003'
+		                         WHEN '1004' THEN '1004'
+		                         WHEN '1005' THEN '1005'
 		                         ELSE 'E' END 
 		                         ELSE 'E' END 
 		<if test="niClsfCd != null and niClsfCd != ''">
 		<if test="niClsfCd != null and niClsfCd != ''">
 		AND B.NI_CLSF_CD = #{niClsfCd}
 		AND B.NI_CLSF_CD = #{niClsfCd}
@@ -165,7 +167,7 @@
 	<insert id="saveNotiInfo" parameterType="NotiInfo">
 	<insert id="saveNotiInfo" parameterType="NotiInfo">
 		/* TsaGoods.saveNotiInfo */
 		/* TsaGoods.saveNotiInfo */
 		INSERT INTO TB_NOTI_INFO (
 		INSERT INTO TB_NOTI_INFO (
-		       SUPPLY_VENDOR_CD
+		       SUPPLY_COMP_CD
 		     , NI_CLSF_CD
 		     , NI_CLSF_CD
 		     , NI_ITEM_CD
 		     , NI_ITEM_CD
 		     , NI_CONTENT
 		     , NI_CONTENT
@@ -176,7 +178,7 @@
 		     , UPD_DT
 		     , UPD_DT
 		)
 		)
 		VALUES (
 		VALUES (
-		       #{supplyVendorCd}
+		       #{supplyCompCd}
 		     , #{niClsfCd}
 		     , #{niClsfCd}
 		     , #{niItemCd}
 		     , #{niItemCd}
 		     , #{niContent}
 		     , #{niContent}
@@ -196,7 +198,7 @@
 	<!-- WMS 색상 매핑 조회 -->
 	<!-- WMS 색상 매핑 조회 -->
 	<select id="getWmsColorMappingList" parameterType="WmsColorMapping" resultType="WmsColorMapping" >
 	<select id="getWmsColorMappingList" parameterType="WmsColorMapping" resultType="WmsColorMapping" >
 		/* TsaGoods.getWmsColorMappingList */
 		/* TsaGoods.getWmsColorMappingList */
-		SELECT SUPPLY_VENDOR_CD
+		SELECT SUPPLY_COMP_CD
 		     , WMS_COLOR_CD
 		     , WMS_COLOR_CD
 		     , WMS_COLOR_NM
 		     , WMS_COLOR_NM
 		     , COLOR_CD
 		     , COLOR_CD
@@ -206,7 +208,7 @@
 		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
 		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
 		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
 		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
 		FROM TB_WMS_COLOR_MAPPING
 		FROM TB_WMS_COLOR_MAPPING
-		WHERE SUPPLY_VENDOR_CD = #{supplyVendorCd}
+		WHERE SUPPLY_COMP_CD = #{supplyCompCd}
 		ORDER BY WMS_COLOR_CD
 		ORDER BY WMS_COLOR_CD
 	</select>
 	</select>
 	
 	
@@ -214,7 +216,7 @@
 	<update id="saveWmsColorMapping" parameterType="WmsColorMapping">
 	<update id="saveWmsColorMapping" parameterType="WmsColorMapping">
 		/* TsaGoods.saveWmsColorMapping */
 		/* TsaGoods.saveWmsColorMapping */
 		INSERT INTO TB_WMS_COLOR_MAPPING (
 		INSERT INTO TB_WMS_COLOR_MAPPING (
-		       SUPPLY_VENDOR_CD
+		       SUPPLY_COMP_CD
 		     , WMS_COLOR_CD
 		     , WMS_COLOR_CD
 		     , WMS_COLOR_NM
 		     , WMS_COLOR_NM
 		     , COLOR_CD
 		     , COLOR_CD
@@ -225,7 +227,7 @@
 		     , UPD_DT
 		     , UPD_DT
 		)
 		)
 		VALUES (
 		VALUES (
-		       #{supplyVendorCd}
+		       #{supplyCompCd}
 		     , #{wmsColorCd}
 		     , #{wmsColorCd}
 		     , #{wmsColorNm}
 		     , #{wmsColorNm}
 		     , #{colorCd}
 		     , #{colorCd}
@@ -245,7 +247,7 @@
 	<!-- WMS 스타일년도 매핑 조회 -->
 	<!-- WMS 스타일년도 매핑 조회 -->
 	<select id="getWmsStyleYearMappingList" parameterType="WmsStyleYearMapping" resultType="WmsStyleYearMapping" >
 	<select id="getWmsStyleYearMappingList" parameterType="WmsStyleYearMapping" resultType="WmsStyleYearMapping" >
 		/* TsaGoods.getWmsStyleYearMappingList */
 		/* TsaGoods.getWmsStyleYearMappingList */
-		SELECT SUPPLY_VENDOR_CD
+		SELECT SUPPLY_COMP_CD
 		     , WMS_STYLE_YEAR_CD
 		     , WMS_STYLE_YEAR_CD
 		     , WMS_STYLE_YEAR_NM
 		     , WMS_STYLE_YEAR_NM
 		     , STYLE_YEAR
 		     , STYLE_YEAR
@@ -255,7 +257,7 @@
 		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
 		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
 		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
 		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
 		FROM TB_WMS_STYLE_YEAR_MAPPING
 		FROM TB_WMS_STYLE_YEAR_MAPPING
-		WHERE SUPPLY_VENDOR_CD = #{supplyVendorCd}
+		WHERE SUPPLY_COMP_CD = #{supplyCompCd}
 		ORDER BY WMS_STYLE_YEAR_CD
 		ORDER BY WMS_STYLE_YEAR_CD
 	</select>
 	</select>
 	
 	
@@ -263,7 +265,7 @@
 	<update id="saveWmsStyleYearMapping" parameterType="WmsStyleYearMapping">
 	<update id="saveWmsStyleYearMapping" parameterType="WmsStyleYearMapping">
 		/* TsaGoods.saveWmsStyleYearMapping */
 		/* TsaGoods.saveWmsStyleYearMapping */
 		INSERT INTO TB_WMS_STYLE_YEAR_MAPPING (
 		INSERT INTO TB_WMS_STYLE_YEAR_MAPPING (
-		       SUPPLY_VENDOR_CD
+		       SUPPLY_COMP_CD
 		     , WMS_STYLE_YEAR_CD
 		     , WMS_STYLE_YEAR_CD
 		     , WMS_STYLE_YEAR_NM
 		     , WMS_STYLE_YEAR_NM
 		     , STYLE_YEAR
 		     , STYLE_YEAR
@@ -274,7 +276,7 @@
 		     , UPD_DT
 		     , UPD_DT
 		)
 		)
 		VALUES (
 		VALUES (
-		       #{supplyVendorCd}
+		       #{supplyCompCd}
 		     , #{wmsStyleYearCd}
 		     , #{wmsStyleYearCd}
 		     , #{wmsStyleYearNm}
 		     , #{wmsStyleYearNm}
 		     , #{styleYear}
 		     , #{styleYear}
@@ -294,7 +296,7 @@
 	<!-- WMS 시즌 매핑 조회 -->
 	<!-- WMS 시즌 매핑 조회 -->
 	<select id="getWmsSeasonMappingList" parameterType="WmsSeasonMapping" resultType="WmsSeasonMapping" >
 	<select id="getWmsSeasonMappingList" parameterType="WmsSeasonMapping" resultType="WmsSeasonMapping" >
 		/* TsaGoods.getWmsSeasonMappingList */
 		/* TsaGoods.getWmsSeasonMappingList */
-		SELECT SUPPLY_VENDOR_CD
+		SELECT SUPPLY_COMP_CD
 		     , WMS_SEASON_CD
 		     , WMS_SEASON_CD
 		     , WMS_SEASON_NM
 		     , WMS_SEASON_NM
 		     , SEASON_CD
 		     , SEASON_CD
@@ -304,7 +306,7 @@
 		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
 		     , FN_GET_USER_NM(UPD_NO) AS UPD_NM
 		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
 		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
 		FROM TB_WMS_SEASON_MAPPING
 		FROM TB_WMS_SEASON_MAPPING
-		WHERE SUPPLY_VENDOR_CD = #{supplyVendorCd}
+		WHERE SUPPLY_COMP_CD = #{supplyCompCd}
 		ORDER BY WMS_SEASON_CD
 		ORDER BY WMS_SEASON_CD
 	</select>
 	</select>
 	
 	
@@ -312,7 +314,7 @@
 	<update id="saveWmsSeasonMapping" parameterType="WmsSeasonMapping">
 	<update id="saveWmsSeasonMapping" parameterType="WmsSeasonMapping">
 		/* TsaGoods.saveWmsSeasonMapping */
 		/* TsaGoods.saveWmsSeasonMapping */
 		INSERT INTO TB_WMS_STYLE_YEAR_MAPPING (
 		INSERT INTO TB_WMS_STYLE_YEAR_MAPPING (
-		       SUPPLY_VENDOR_CD
+		       SUPPLY_COMP_CD
 		     , WMS_SEASON_CD
 		     , WMS_SEASON_CD
 		     , WMS_SEASON_NM
 		     , WMS_SEASON_NM
 		     , SEASON_CD
 		     , SEASON_CD
@@ -323,7 +325,7 @@
 		     , UPD_DT
 		     , UPD_DT
 		)
 		)
 		VALUES (
 		VALUES (
-		       #{supplyVendorCd}
+		       #{supplyCompCd}
 		     , #{wmsSeasonCd}
 		     , #{wmsSeasonCd}
 		     , #{wmsSeasonNm}
 		     , #{wmsSeasonNm}
 		     , #{seasonCd}
 		     , #{seasonCd}
@@ -929,10 +931,8 @@
 		     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
 		     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
 		     , E.CERT_NUM
 		     , E.CERT_NUM
 		     , E.CERT_DT
 		     , E.CERT_DT
-		     , C.SUPPLY_VENDOR_CD
 		FROM TB_GOODS G
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		INNER JOIN TB_SUPPLY_COMPANY C ON G.SUPPLY_COMP_CD = C.SUPPLY_COMP_CD 
 		LEFT OUTER JOIN TB_DELV_FEE_POLICY D ON G.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 		LEFT OUTER JOIN TB_DELV_FEE_POLICY D ON G.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 		                                     AND G.DELV_FEE_CD =  D.DELV_FEE_CD
 		                                     AND G.DELV_FEE_CD =  D.DELV_FEE_CD
 		LEFT OUTER JOIN TB_GOODS_SAFE_NO E ON G.GOODS_CD = E.GOODS_CD
 		LEFT OUTER JOIN TB_GOODS_SAFE_NO E ON G.GOODS_CD = E.GOODS_CD
@@ -972,14 +972,14 @@
 		     , C.DISP_ORD
 		     , C.DISP_ORD
 		FROM TB_GOODS_NOTI_INFO C
 		FROM TB_GOODS_NOTI_INFO C
 		INNER JOIN TB_GOODS B ON C.GOODS_CD = B.GOODS_CD
 		INNER JOIN TB_GOODS B ON C.GOODS_CD = B.GOODS_CD
-        INNER JOIN TB_SUPPLY_COMPANY D ON B.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 		INNER JOIN TB_NOTI_INFO A ON C.NI_CLSF_CD = A.NI_CLSF_CD
 		INNER JOIN TB_NOTI_INFO A ON C.NI_CLSF_CD = A.NI_CLSF_CD
 		                          AND C.NI_ITEM_CD = A.NI_ITEM_CD
 		                          AND C.NI_ITEM_CD = A.NI_ITEM_CD
-		                          AND A.SUPPLY_VENDOR_CD = CASE D.SUPPLY_VENDOR_CD
-		                                                        WHEN 'SV0001' THEN 'SV0001'
-		                                                        WHEN 'SV0002' THEN 'SV0002'
-		                                                        ELSE 'E' 
-		                                                   END
+		                          AND A.SUPPLY_COMP_CD = CASE B.SUPPLY_COMP_CD
+		                                                      WHEN '1003' THEN '1003'
+		                                                      WHEN '1004' THEN '1004'
+		                                                      WHEN '1005' THEN '1005'
+		                                                      ELSE 'E' 
+		                                                 END
 		WHERE C.GOODS_CD = #{goodsCd}
 		WHERE C.GOODS_CD = #{goodsCd}
 		AND C.NI_CLSF_CD = #{niClsfCd}
 		AND C.NI_CLSF_CD = #{niClsfCd}
 		ORDER BY C.DISP_ORD
 		ORDER BY C.DISP_ORD
@@ -988,7 +988,7 @@
 	<!-- 상품의 정보고시 항목 목록 -->
 	<!-- 상품의 정보고시 항목 목록 -->
 	<select id="getNotiGoodsInfoList" parameterType="NotiInfo" resultType="NotiInfo">
 	<select id="getNotiGoodsInfoList" parameterType="NotiInfo" resultType="NotiInfo">
 		/* TsaGoods.getNotiGoodsInfoList */
 		/* TsaGoods.getNotiGoodsInfoList */
-		SELECT  N.SUPPLY_VENDOR_CD
+		SELECT  N.SUPPLY_COMP_CD
 		      , N.NI_CLSF_CD
 		      , N.NI_CLSF_CD
 		      , N.NI_ITEM_CD
 		      , N.NI_ITEM_CD
 		      , FN_GET_CODE_NM('G005', N.NI_ITEM_CD) AS NI_ITEM_NM
 		      , FN_GET_CODE_NM('G005', N.NI_ITEM_CD) AS NI_ITEM_NM
@@ -1005,7 +1005,7 @@
 		 FROM (
 		 FROM (
 		     SELECT G.GOODS_CD
 		     SELECT G.GOODS_CD
 		         , G.ITEMKIND_CD
 		         , G.ITEMKIND_CD
-		         , (SELECT SUPPLY_VENDOR_CD FROM TB_SUPPLY_COMPANY SC WHERE SC.SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_VENDOR_CD
+		         , G.SUPPLY_COMP_CD
 		         , G.ORIGIN_CD
 		         , G.ORIGIN_CD
 		         , G.MAKE_YMD
 		         , G.MAKE_YMD
 		         , (SELECT GROUP_CONCAT(DISTINCT T.OPT_CD1) FROM TB_OPTION T WHERE T.GOODS_CD = G.GOODS_CD)  AS COLOR_NM
 		         , (SELECT GROUP_CONCAT(DISTINCT T.OPT_CD1) FROM TB_OPTION T WHERE T.GOODS_CD = G.GOODS_CD)  AS COLOR_NM
@@ -1018,9 +1018,10 @@
 		  , TB_NOTI_INFO N
 		  , TB_NOTI_INFO N
 		 WHERE 1 = 1
 		 WHERE 1 = 1
 		 AND N.NI_CLSF_CD = #{niClsfCd}
 		 AND N.NI_CLSF_CD = #{niClsfCd}
-		 AND N.SUPPLY_VENDOR_CD =  CASE G.SUPPLY_VENDOR_CD
-		                                WHEN 'SV0001' THEN 'SV0001'
-		                                WHEN 'SV0002' THEN 'SV0002'
+		 AND N.SUPPLY_COMP_CD =  CASE G.SUPPLY_COMP_CD
+		                                WHEN '1003' THEN '1003'
+		                                WHEN '1004' THEN '1004'
+		                                WHEN '1005' THEN '1005'
 		                                ELSE 'E' 
 		                                ELSE 'E' 
 		                           END 
 		                           END 
 		 ORDER BY  G.GOODS_CD , N.NI_CLSF_CD, N.DISP_ORD
 		 ORDER BY  G.GOODS_CD , N.NI_CLSF_CD, N.DISP_ORD
@@ -1031,8 +1032,6 @@
 		/* TsaGoods.createGoodsHst */
 		/* TsaGoods.createGoodsHst */
 		INSERT INTO TB_GOODS_HST 
 		INSERT INTO TB_GOODS_HST 
 		(       GOODS_CD
 		(       GOODS_CD
-		      , PRODUCT_NO
-		      , PRODUCT_CODE
 		      , BRAND_CD
 		      , BRAND_CD
 		      , ITEMKIND_CD
 		      , ITEMKIND_CD
 		      , GOODS_NM
 		      , GOODS_NM
@@ -1088,8 +1087,6 @@
 		      , UPD_DT
 		      , UPD_DT
 		)
 		)
 		SELECT GOODS_CD            
 		SELECT GOODS_CD            
-		     , PRODUCT_NO
-		     , PRODUCT_CODE
 		     , BRAND_CD            
 		     , BRAND_CD            
 		     , ITEMKIND_CD         
 		     , ITEMKIND_CD         
 		     , GOODS_NM            
 		     , GOODS_NM            
@@ -1344,7 +1341,7 @@
 		       FROM TB_NOTI_INFO A
 		       FROM TB_NOTI_INFO A
 		          , TB_ITEMKIND B
 		          , TB_ITEMKIND B
 		       WHERE A.NI_CLSF_CD = B.NI_CLSF_CD
 		       WHERE A.NI_CLSF_CD = B.NI_CLSF_CD
-		       AND A.SUPPLY_VENDOR_CD = #{supplyVendorCd}
+		       AND A.SUPPLY_COMP_CD = #{supplyCompCd}
 		       AND B.ITEMKIND_CD = #{itemkindCd}
 		       AND B.ITEMKIND_CD = #{itemkindCd}
 		     ) D
 		     ) D
 		    LEFT OUTER JOIN (
 		    LEFT OUTER JOIN (
@@ -1425,7 +1422,7 @@
 		     , A.DISP_ORD
 		     , A.DISP_ORD
 		     , A.DISP_YN
 		     , A.DISP_YN
 		     , COUNT(*) OVER(PARTITION BY A.GOODS_CD ) AS RCOUNT
 		     , COUNT(*) OVER(PARTITION BY A.GOODS_CD ) AS RCOUNT
-		     , ROW_NUMBER() OVER(PARTITION BY A.GOODS_CD ORDER BY A.DISP_ORD) AS RNUM
+		     , 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 
 		FROM  TMP_GOODS C 
 		INNER JOIN TB_OPTION A ON C.COMPS_GOODS_CD = A.GOODS_CD 
 		INNER JOIN TB_OPTION A ON C.COMPS_GOODS_CD = A.GOODS_CD 
 		LEFT OUTER JOIN (
 		LEFT OUTER JOIN (
@@ -1442,7 +1439,7 @@
 		             AND A.OPT_CD = B.OPT_CD)
 		             AND A.OPT_CD = B.OPT_CD)
 		WHERE 1 = 1
 		WHERE 1 = 1
 		AND C.GOODS_CD = #{goodsCd}
 		AND C.GOODS_CD = #{goodsCd}
-		ORDER BY C.DISP_ORD, A.DISP_ORD
+		ORDER BY C.DISP_ORD, A.DISP_ORD, A.OPT_CD1, A.OPT_CD2
 	</select>
 	</select>
 	
 	
 	<!-- 상품 색상목록 조회 -->
 	<!-- 상품 색상목록 조회 -->
@@ -1508,8 +1505,6 @@
 		/* TsaGoods.createGoods */
 		/* TsaGoods.createGoods */
 		INSERT INTO TB_GOODS (
 		INSERT INTO TB_GOODS (
 		    GOODS_CD
 		    GOODS_CD
-		  , PRODUCT_NO
-		  , PRODUCT_CODE
 		  , BRAND_CD
 		  , BRAND_CD
 		  , ITEMKIND_CD
 		  , ITEMKIND_CD
 		  , GOODS_NM
 		  , GOODS_NM
@@ -1553,8 +1548,6 @@
 		)
 		)
 		VALUES(
 		VALUES(
 		    #{goodsCd}
 		    #{goodsCd}
-		  , IFNULL(#{productNo},0)
-		  , IFNULL(#{productCode},0)
 		  , #{brandCd}
 		  , #{brandCd}
 		  , #{itemkindCd}
 		  , #{itemkindCd}
 		  , IFNULL(#{goodsNm},'상품명없음')
 		  , IFNULL(#{goodsNm},'상품명없음')
@@ -3574,6 +3567,7 @@
 		     , SUBSTRING_INDEX(SYS_IMG_NM , '/', -1) AS SYS_IMG_NM  /* S0001/20201221/14505664_L.jpg */
 		     , SUBSTRING_INDEX(SYS_IMG_NM , '/', -1) AS SYS_IMG_NM  /* S0001/20201221/14505664_L.jpg */
 		     , SUBSTRING_INDEX(SYS_IMG_NM , '/', 2) AS SYS_IMG_URL
 		     , SUBSTRING_INDEX(SYS_IMG_NM , '/', 2) AS SYS_IMG_URL
 		     , DEFAULT_IMG_YN
 		     , DEFAULT_IMG_YN
+		     , MOUSEOVER_IMG_YN
 		FROM   TB_GOODS_IMG
 		FROM   TB_GOODS_IMG
 		WHERE  GOODS_CD = #{goodsCd}
 		WHERE  GOODS_CD = #{goodsCd}
 		AND    COLOR_CD = #{colorCd}
 		AND    COLOR_CD = #{colorCd}
@@ -3608,6 +3602,7 @@
 		     , DISP_ORD
 		     , DISP_ORD
 		     , SYS_IMG_NM
 		     , SYS_IMG_NM
 		     , DEFAULT_IMG_YN
 		     , DEFAULT_IMG_YN
+		     , MOUSEOVER_IMG_YN
 		     , REG_NO
 		     , REG_NO
 		     , REG_DT
 		     , REG_DT
 		)
 		)
@@ -3617,6 +3612,7 @@
 		     , #{dispOrd}
 		     , #{dispOrd}
 		     , #{sysImgNm}
 		     , #{sysImgNm}
 		     , #{defaultImgYn}
 		     , #{defaultImgYn}
+		     , #{mouseoverImgYn}
 		     , #{regNo}
 		     , #{regNo}
 		     , NOW()
 		     , NOW()
 		)
 		)
@@ -3661,11 +3657,29 @@
 		      </otherwise>
 		      </otherwise>
 		    </choose>
 		    </choose>
 		</if>
 		</if>
-		<include refid="getGoodsListCondition_sql"/>
+		<if test="brandCd != null and brandCd != ''">
+		AND B.BRAND_CD = #{brandCd}
+		</if>
+		<if test="multiBrand != null and multiBrand != ''">
+		AND B.BRAND_CD IN
+		    <foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+		#{item}
+		    </foreach>
+		</if>
+		<if test='dateGbn != null and dateGbn == "R"'>
+		    <if test="stDate != null and stDate != ''">
+		AND G.REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		    </if>
+		    <if test="edDate != null and edDate != ''">
+		    <![CDATA[
+		AND G.REG_DT < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		    ]]>
+		    </if>
+		</if>
 		ORDER BY G.PRODUCT_NO DESC
 		ORDER BY G.PRODUCT_NO DESC
 	</select>
 	</select>
 	
 	
-	<!-- 상품이미지 삭제 -->
+	<!-- 상품이미지 변경 -->
 	<update id="updateFreeGoods" parameterType="FreeGoods">
 	<update id="updateFreeGoods" parameterType="FreeGoods">
 		/* TsaGoods.updateFreeGoods */
 		/* TsaGoods.updateFreeGoods */
 		UPDATE TB_FREE_GOODS
 		UPDATE TB_FREE_GOODS

+ 128 - 86
src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.style24.admin.biz.dao.TsaMorebetterDao">
 <mapper namespace="com.style24.admin.biz.dao.TsaMorebetterDao">
 	<!-- // CSB 진행 -->
 	<!-- // CSB 진행 -->
 	<select id="getMorebetterListCount" parameterType="MoreBetter" resultType="int">
 	<select id="getMorebetterListCount" parameterType="MoreBetter" resultType="int">
-		/* TsaMarketing.getMorebetterListCount */
+		/* TsaMorebetter.getMorebetterListCount */
 		SELECT  COUNT(*) AS TOTCNT
 		SELECT  COUNT(*) AS TOTCNT
 		FROM	TB_TMTB T
 		FROM	TB_TMTB T
 		WHERE	1=1
 		WHERE	1=1
@@ -21,7 +21,7 @@
 	</select>
 	</select>
 
 
 	<select id="getMorebetterList" parameterType="MoreBetter" resultType="MoreBetter">
 	<select id="getMorebetterList" parameterType="MoreBetter" resultType="MoreBetter">
-		/* TsaMarketing.getMorebetterList */
+		/* TsaMorebetter.getMorebetterList */
 		SELECT Z.*
 		SELECT Z.*
 		FROM(
 		FROM(
 			SELECT @rownum := @rownum + 1 AS RNUM
 			SELECT @rownum := @rownum + 1 AS RNUM
@@ -70,7 +70,7 @@
 	</sql>
 	</sql>
 
 
 	<select id="getMorebetterMstInfo" parameterType="Integer" resultType="MoreBetter">
 	<select id="getMorebetterMstInfo" parameterType="Integer" resultType="MoreBetter">
-		/* TsaMarketing.getMorebetterMstInfo */
+		/* TsaMorebetter.getMorebetterMstInfo */
 		SELECT	   	   TT.TMTB_SQ
 		SELECT	   	   TT.TMTB_SQ
 					 , TT.TMTB_NM
 					 , TT.TMTB_NM
 					 , TT.TMTB_STAT
 					 , TT.TMTB_STAT
@@ -106,7 +106,7 @@
 	</select>
 	</select>
 
 
 	<select id="getMorebetterSectionValList" parameterType="Integer" resultType="MoreBetterSection">
 	<select id="getMorebetterSectionValList" parameterType="Integer" resultType="MoreBetterSection">
-		/* TsaMarketing.getMorebetterSectionValList */
+		/* TsaMorebetter.getMorebetterSectionValList */
 		SELECT    TS.TMTB_SQ
 		SELECT    TS.TMTB_SQ
 				 ,TS.TMTB_SECTION_SQ
 				 ,TS.TMTB_SECTION_SQ
 				 ,TV.TMTB_VAL_SQ
 				 ,TV.TMTB_VAL_SQ
@@ -125,11 +125,12 @@
 		AND		TS.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
 		AND		TS.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
 		WHERE 	1=1
 		WHERE 	1=1
 		  AND 	TS.TMTB_SQ = #{tmtbSq}
 		  AND 	TS.TMTB_SQ = #{tmtbSq}
+		  AND   TS.DEL_YN = 'N'
 		ORDER BY TS.TMTB_SQ, TS.TMTB_SECTION_SQ, TV.TMTB_VAL_SQ
 		ORDER BY TS.TMTB_SQ, TS.TMTB_SECTION_SQ, TV.TMTB_VAL_SQ
 	</select>
 	</select>
 
 
 	<select id="getMorebetterSupplyCompList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
 	<select id="getMorebetterSupplyCompList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
-		/* TsaMarketing.getMorebetterSupplyCompList */
+		/* TsaMorebetter.getMorebetterSupplyCompList */
 		SELECT 	 TMTB_GOODS_SQ
 		SELECT 	 TMTB_GOODS_SQ
 				 , TMTB_SQ
 				 , TMTB_SQ
 				 , GOODS_GB
 				 , GOODS_GB
@@ -146,10 +147,11 @@
 		WHERE 1=1
 		WHERE 1=1
 		  AND TMTB_SQ = #{tmtbSq}
 		  AND TMTB_SQ = #{tmtbSq}
 		  AND TARGET_GB = 'G260_13'
 		  AND TARGET_GB = 'G260_13'
+		  AND DEL_YN = 'N'
 	</select>
 	</select>
 
 
 	<select id="getMorebetterBrandList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
 	<select id="getMorebetterBrandList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
-		/* TsaMarketing.getMorebetterBrandList */
+		/* TsaMorebetter.getMorebetterBrandList */
 		SELECT 	 TMTB_GOODS_SQ
 		SELECT 	 TMTB_GOODS_SQ
 				 , TMTB_SQ
 				 , TMTB_SQ
 				 , GOODS_GB
 				 , GOODS_GB
@@ -171,10 +173,11 @@
 		WHERE 1=1
 		WHERE 1=1
 		  AND TMTB_SQ = #{tmtbSq}
 		  AND TMTB_SQ = #{tmtbSq}
 		  AND TARGET_GB = 'G260_12'
 		  AND TARGET_GB = 'G260_12'
+		  AND DEL_YN = 'N'
 	</select>
 	</select>
 
 
 	<select id="getMorebetterApplyGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
 	<select id="getMorebetterApplyGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
-		/* TsaMarketing.getMorebetterApplyGoodsList */
+		/* TsaMorebetter.getMorebetterApplyGoodsList */
 		SELECT 	 A.TMTB_GOODS_SQ
 		SELECT 	 A.TMTB_GOODS_SQ
 				 , A.TMTB_SQ
 				 , A.TMTB_SQ
 				 , B.TMTB_APPLY_GOODS_SQ
 				 , B.TMTB_APPLY_GOODS_SQ
@@ -199,10 +202,11 @@
 		  AND A.TMTB_SQ = #{tmtbSq}
 		  AND A.TMTB_SQ = #{tmtbSq}
 		  AND A.TARGET_GB = 'G260_10'
 		  AND A.TARGET_GB = 'G260_10'
 		  AND A.GOODS_GB IN ('G800_10','G800_20')
 		  AND A.GOODS_GB IN ('G800_10','G800_20')
+ 		  AND A.DEL_YN = 'N'
 	</select>
 	</select>
 
 
 	<select id="getMorebetterExceptGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
 	<select id="getMorebetterExceptGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
-		/* TsaMarketing.getMorebetterExceptGoodsList */
+		/* TsaMorebetter.getMorebetterExceptGoodsList */
 		SELECT 	 A.TMTB_GOODS_SQ
 		SELECT 	 A.TMTB_GOODS_SQ
 				 , A.TMTB_SQ
 				 , A.TMTB_SQ
 				 , B.TMTB_APPLY_GOODS_SQ
 				 , B.TMTB_APPLY_GOODS_SQ
@@ -227,10 +231,11 @@
 		  AND A.TMTB_SQ = #{tmtbSq}
 		  AND A.TMTB_SQ = #{tmtbSq}
 		  AND A.TARGET_GB = 'G260_10'
 		  AND A.TARGET_GB = 'G260_10'
 		  AND A.GOODS_GB IN ('G800_30')
 		  AND A.GOODS_GB IN ('G800_30')
+		  AND A.DEL_YN = 'N'
 	</select>
 	</select>
 
 
 	<select id="getMorebetterBurdenList" parameterType="Integer" resultType="MoreBetterBurden">
 	<select id="getMorebetterBurdenList" parameterType="Integer" resultType="MoreBetterBurden">
-		/* TsaMarketing.getMorebetterBurdenList */
+		/* TsaMorebetter.getMorebetterBurdenList */
 		SELECT 		TB_TMTB_BURDEN_SQ
 		SELECT 		TB_TMTB_BURDEN_SQ
 				   , TMTB_SQ
 				   , TMTB_SQ
 				   , TMTB_SUPPLY_CD
 				   , TMTB_SUPPLY_CD
@@ -243,10 +248,11 @@
 		FROM TB_TMTB_BURDEN
 		FROM TB_TMTB_BURDEN
 		WHERE 1=1
 		WHERE 1=1
 		  AND TMTB_SQ = #{tmtbSq}
 		  AND TMTB_SQ = #{tmtbSq}
+		  AND USE_YN = 'Y'
 	</select>
 	</select>
 
 
 	<insert id="saveMorebetterMst" parameterType="MoreBetter" keyProperty="tmtbSq">
 	<insert id="saveMorebetterMst" parameterType="MoreBetter" keyProperty="tmtbSq">
-		/* TsaMarketing.saveMorebetterMst */
+		/* TsaMorebetter.saveMorebetterMst */
 		INSERT INTO TB_TMTB(
 		INSERT INTO TB_TMTB(
 		        TMTB_SQ
 		        TMTB_SQ
 		        ,TMTB_NM
 		        ,TMTB_NM
@@ -267,7 +273,7 @@
 			,DATE_FORMAT(#{tmtbStdt},'%Y-%m-%d %H:%i:%s')
 			,DATE_FORMAT(#{tmtbStdt},'%Y-%m-%d %H:%i:%s')
 			,DATE_FORMAT(#{tmtbEddt},'%Y-%m-%d %H:%i:%s')
 			,DATE_FORMAT(#{tmtbEddt},'%Y-%m-%d %H:%i:%s')
 			,#{applyGb}
 			,#{applyGb}
-			,#{multiYn}
+			,'Y'
 			,'N'
 			,'N'
 			,#{regNo}
 			,#{regNo}
 			,NOW()
 			,NOW()
@@ -279,13 +285,13 @@
 			,TMTB_STAT = #{tmtbStat}
 			,TMTB_STAT = #{tmtbStat}
 			,TMTB_ST_DT = #{tmtbStdt}
 			,TMTB_ST_DT = #{tmtbStdt}
 			,TMTB_ED_DT = #{tmtbEddt}
 			,TMTB_ED_DT = #{tmtbEddt}
-			,MULTI_YN = #{multiYn}
+			,APPLY_GB = #{applyGb}
 			,UPD_NO = #{updNo}
 			,UPD_NO = #{updNo}
 			,UPD_DT = NOW()
 			,UPD_DT = NOW()
 	</insert>
 	</insert>
 
 
 	<insert id="saveMorebetterGoods" parameterType="MoreBetterGoods" keyProperty="tmtbGoodsSq">
 	<insert id="saveMorebetterGoods" parameterType="MoreBetterGoods" keyProperty="tmtbGoodsSq">
-		/* TsaMarketing.saveMorebetterGoods */
+		/* TsaMorebetter.saveMorebetterGoods */
 		INSERT INTO TB_TMTB_GOODS(
 		INSERT INTO TB_TMTB_GOODS(
 		         	 TMTB_GOODS_SQ
 		         	 TMTB_GOODS_SQ
 		        	,TMTB_SQ
 		        	,TMTB_SQ
@@ -314,12 +320,13 @@
 						 GOODS_GB = #{goodsGb}
 						 GOODS_GB = #{goodsGb}
 						,TARGET_GB = #{targetGb}
 						,TARGET_GB = #{targetGb}
 						,TARGET_VAL = #{targetVal}
 						,TARGET_VAL = #{targetVal}
+			    		,DEL_YN = #{delYn}
 						,UPD_NO = #{updNo}
 						,UPD_NO = #{updNo}
 						,UPD_DT = NOW()
 						,UPD_DT = NOW()
 	</insert>
 	</insert>
 
 
 	<insert id="saveMorebetterApplyGoods" parameterType="MoreBetterGoods" keyProperty="tmtbApplyGoodsSq">
 	<insert id="saveMorebetterApplyGoods" parameterType="MoreBetterGoods" keyProperty="tmtbApplyGoodsSq">
-		/* TsaMarketing.saveMorebetterApplyGoods */
+		/* TsaMorebetter.saveMorebetterApplyGoods */
 		INSERT INTO TB_TMTB_APPLY_GOODS(
 		INSERT INTO TB_TMTB_APPLY_GOODS(
 					TMTB_APPLY_GOODS_SQ
 					TMTB_APPLY_GOODS_SQ
 					,TMTB_SQ
 					,TMTB_SQ
@@ -350,7 +357,7 @@
 	</insert>
 	</insert>
 
 
 	<insert id="saveMorebetterSection" parameterType="MoreBetterSection" keyProperty="tmtbSectionSq">
 	<insert id="saveMorebetterSection" parameterType="MoreBetterSection" keyProperty="tmtbSectionSq">
-		/* TsaMarketing.saveMorebetterSection */
+		/* TsaMorebetter.saveMorebetterSection */
 		INSERT INTO TB_TMTB_SECTION(
 		INSERT INTO TB_TMTB_SECTION(
 					 TMTB_SECTION_SQ
 					 TMTB_SECTION_SQ
 					,TMTB_SQ
 					,TMTB_SQ
@@ -376,12 +383,13 @@
 			ON DUPLICATE KEY UPDATE
 			ON DUPLICATE KEY UPDATE
 						 SECTION_GB = #{sectionGb}
 						 SECTION_GB = #{sectionGb}
 						,SECTION_VAL = #{sectionVal}
 						,SECTION_VAL = #{sectionVal}
+						,DEL_YN = #{delYn}
 						,UPD_NO = #{updNo}
 						,UPD_NO = #{updNo}
 						,UPD_DT = NOW()
 						,UPD_DT = NOW()
 	</insert>
 	</insert>
 
 
 	<insert id="saveMorebetterVal" parameterType="MoreBetterSection" keyProperty="tmtbValSq">
 	<insert id="saveMorebetterVal" parameterType="MoreBetterSection" keyProperty="tmtbValSq">
-		/* TsaMarketing.saveMorebetterVal */
+		/* TsaMorebetter.saveMorebetterVal */
 		INSERT INTO TB_TMTB_VAL(
 		INSERT INTO TB_TMTB_VAL(
 					 TMTB_VAL_SQ
 					 TMTB_VAL_SQ
 					,TMTB_SQ
 					,TMTB_SQ
@@ -409,12 +417,13 @@
 			ON DUPLICATE KEY UPDATE
 			ON DUPLICATE KEY UPDATE
 						 DC_WAY = #{dcWay}
 						 DC_WAY = #{dcWay}
 						,DC_VAL = #{dcVal}
 						,DC_VAL = #{dcVal}
+						,DEL_YN = #{delYn}
 						,UPD_NO = #{updNo}
 						,UPD_NO = #{updNo}
 						,UPD_DT = NOW()
 						,UPD_DT = NOW()
 	</insert>
 	</insert>
 
 
 	<insert id="saveMorebetterBurden" parameterType="MoreBetterBurden" keyProperty="tbTmtbBurdenSq">
 	<insert id="saveMorebetterBurden" parameterType="MoreBetterBurden" keyProperty="tbTmtbBurdenSq">
-		/* TsaMarketing.saveMorebetterBurden */
+		/* TsaMorebetter.saveMorebetterBurden */
 		INSERT INTO TB_TMTB_BURDEN(
 		INSERT INTO TB_TMTB_BURDEN(
 								  TB_TMTB_BURDEN_SQ
 								  TB_TMTB_BURDEN_SQ
 		                          ,TMTB_SQ
 		                          ,TMTB_SQ
@@ -445,7 +454,7 @@
 	</insert>
 	</insert>
 
 
 	<delete id="deleteTmtbSupplyCompanyList" parameterType="MoreBetterGoods">
 	<delete id="deleteTmtbSupplyCompanyList" parameterType="MoreBetterGoods">
-		/* TsaMarketing.deleteTmtbSupplyCompanyList */
+		/* TsaMorebetter.deleteTmtbSupplyCompanyList */
 		DELETE FROM TB_TMTB_GOODS
 		DELETE FROM TB_TMTB_GOODS
 		WHERE TMTB_SQ =  #{tmtbSq}
 		WHERE TMTB_SQ =  #{tmtbSq}
 		<if test="arrCompanySq != null and arrCompanySq.length>0">
 		<if test="arrCompanySq != null and arrCompanySq.length>0">
@@ -457,7 +466,7 @@
 	</delete>
 	</delete>
 
 
 	<delete id="deleteTmtbBrandList" parameterType="MoreBetterGoods">
 	<delete id="deleteTmtbBrandList" parameterType="MoreBetterGoods">
-		/* TsaMarketing.deleteTmtbBrandList */
+		/* TsaMorebetter.deleteTmtbBrandList */
 		DELETE FROM TB_TMTB_GOODS
 		DELETE FROM TB_TMTB_GOODS
 		WHERE TMTB_SQ =  #{tmtbSq}
 		WHERE TMTB_SQ =  #{tmtbSq}
 		<if test="arrBrandSq != null and arrBrandSq.length>0">
 		<if test="arrBrandSq != null and arrBrandSq.length>0">
@@ -469,7 +478,7 @@
 	</delete>
 	</delete>
 
 
 	<delete id="deleteTmtbApplyGoodsList" parameterType="MoreBetterGoods">
 	<delete id="deleteTmtbApplyGoodsList" parameterType="MoreBetterGoods">
-		/* TsaMarketing.deleteTmtbApplyGoodsList */
+		/* TsaMorebetter.deleteTmtbApplyGoodsList */
 		DELETE FROM TB_TMTB_GOODS
 		DELETE FROM TB_TMTB_GOODS
 		WHERE TMTB_SQ =  #{tmtbSq}
 		WHERE TMTB_SQ =  #{tmtbSq}
 		<if test="arrApplyGoodsSq != null and arrApplyGoodsSq.length>0">
 		<if test="arrApplyGoodsSq != null and arrApplyGoodsSq.length>0">
@@ -481,7 +490,7 @@
 	</delete>
 	</delete>
 
 
 	<delete id="deleteTmtbExceptGoodsList" parameterType="MoreBetterGoods">
 	<delete id="deleteTmtbExceptGoodsList" parameterType="MoreBetterGoods">
-		/* TsaMarketing.deleteTmtbExceptGoodsList */
+		/* TsaMorebetter.deleteTmtbExceptGoodsList */
 		DELETE FROM TB_TMTB_GOODS
 		DELETE FROM TB_TMTB_GOODS
 		WHERE TMTB_SQ =  #{tmtbSq}
 		WHERE TMTB_SQ =  #{tmtbSq}
 		<if test="arrExceptGoodsSq != null and arrExceptGoodsSq.length>0">
 		<if test="arrExceptGoodsSq != null and arrExceptGoodsSq.length>0">
@@ -493,7 +502,7 @@
 	</delete>
 	</delete>
 
 
 	<delete id="deleteTmtbSectionList" parameterType="MoreBetterSection">
 	<delete id="deleteTmtbSectionList" parameterType="MoreBetterSection">
-		/* TsaMarketing.deleteTmtbSectionList */
+		/* TsaMorebetter.deleteTmtbSectionList */
 		DELETE FROM TB_TMTB_SECTION
 		DELETE FROM TB_TMTB_SECTION
 		WHERE TMTB_SQ =  #{tmtbSq}
 		WHERE TMTB_SQ =  #{tmtbSq}
 		<if test="arrSectionSq != null and arrSectionSq.length>0">
 		<if test="arrSectionSq != null and arrSectionSq.length>0">
@@ -505,7 +514,7 @@
 	</delete>
 	</delete>
 
 
 	<delete id="deleteTmtbValList" parameterType="MoreBetterSection">
 	<delete id="deleteTmtbValList" parameterType="MoreBetterSection">
-		/* TsaMarketing.deleteTmtbValList */
+		/* TsaMorebetter.deleteTmtbValList */
 		DELETE FROM TB_TMTB_VAL
 		DELETE FROM TB_TMTB_VAL
 		WHERE TMTB_SQ =  #{tmtbSq}
 		WHERE TMTB_SQ =  #{tmtbSq}
 		<if test="arrSectionSq != null and arrSectionSq.length>0">
 		<if test="arrSectionSq != null and arrSectionSq.length>0">
@@ -517,7 +526,7 @@
 	</delete>
 	</delete>
 
 
 	<delete id="deleteTmtbBurdenList" parameterType="MoreBetterGoods">
 	<delete id="deleteTmtbBurdenList" parameterType="MoreBetterGoods">
-		/* TsaMarketing.deleteTmtbBurdenList */
+		/* TsaMorebetter.deleteTmtbBurdenList */
 		DELETE FROM TB_TMTB_BURDEN
 		DELETE FROM TB_TMTB_BURDEN
 		WHERE TMTB_SQ =  #{tmtbSq}
 		WHERE TMTB_SQ =  #{tmtbSq}
 		<if test="arrBurdenSq != null and arrBurdenSq.length>0">
 		<if test="arrBurdenSq != null and arrBurdenSq.length>0">
@@ -529,76 +538,62 @@
 	</delete>
 	</delete>
 
 
 	<delete id="deleteTmtbGoodsTemp" parameterType="MoreBetterGoods">
 	<delete id="deleteTmtbGoodsTemp" parameterType="MoreBetterGoods">
-		/* TsaMarketing.deleteTmtbGoodsTemp */
+		/* TsaMorebetter.deleteTmtbGoodsTemp */
 		DELETE FROM TB_TMTB_USING_GOODS_TEMP
 		DELETE FROM TB_TMTB_USING_GOODS_TEMP
 		WHERE	REG_NO = #{regNo}
 		WHERE	REG_NO = #{regNo}
 	</delete>
 	</delete>
 
 
 	<insert id="createTmtbGoodsTemp" parameterType="MoreBetterGoods">
 	<insert id="createTmtbGoodsTemp" parameterType="MoreBetterGoods">
-		/* TsaMarketing.createTmtbGoodsTemp */
+		/* TsaMorebetter.createTmtbGoodsTemp */
 		INSERT INTO TB_TMTB_USING_GOODS_TEMP
 		INSERT INTO TB_TMTB_USING_GOODS_TEMP
-			SELECT 	#{regNo} AS REG_NO
-			        ,B.GOODS_CD
-					,G.GOODS_NM
-			  FROM 	TB_TMTB A
-		INNER JOIN  TB_TMTB_APPLY_GOODS B
-				ON  A.TMTB_SQ = B.TMTB_SQ
-		INNER JOIN  TB_GOODS G
-				ON  B.GOODS_CD = G.GOODS_CD
+			SELECT Z.REG_NO
+				, Z.GOODS_CD
+				, Z.GOODS_NM
+			FROM (
+					SELECT 	#{regNo} AS REG_NO
+							, B.GOODS_CD
+							, G.GOODS_NM
+							, (SELECT SECTION_GB FROM TB_TMTB_SECTION WHERE A.TMTB_SQ = TMTB_SQ GROUP BY SECTION_GB) AS SECTION_GB
+					  FROM 	TB_TMTB A
+				INNER JOIN  TB_TMTB_APPLY_GOODS B
+						ON  A.TMTB_SQ = B.TMTB_SQ
+				INNER JOIN  TB_GOODS G
+						ON  B.GOODS_CD = G.GOODS_CD
+					WHERE 1=1
+					  AND NOW() BETWEEN DATE_FORMAT(A.TMTB_ST_DT, '%Y-%m-%d %H:%i:%S') AND DATE_FORMAT(A.TMTB_ED_DT, '%Y-%m-%d %H:%i:%S')
+					  AND A.TMTB_STAT = 'G232_11'
+					  AND A.DEL_YN = 'N'
+					  AND B.GOODS_GB IN ('G800_10','G800_20')
+					  AND B.DEL_YN = 'N'
+					  AND B.GOODS_CD NOT IN (
+											SELECT	GOODS_CD
+											FROM	TB_TMTB_APPLY_GOODS C
+											WHERE	1=1
+											  AND		B.TMTB_SQ = C.TMTB_SQ
+											  AND		C.GOODS_GB = 'G800_30'
+					      					  AND 		C.DEL_YN = 'N'
+										)
+			) Z
 			WHERE 1=1
 			WHERE 1=1
-			  AND NOW() BETWEEN DATE_FORMAT(A.TMTB_ST_DT, '%Y-%m-%d %H:%i:%S') AND DATE_FORMAT(A.TMTB_ED_DT, '%Y-%m-%d %H:%i:%S')
-			  AND A.TMTB_STAT = 'G232_11'
-			  AND B.GOODS_GB IN ('G800_10','G800_20')
-			  AND B.DEL_YN = 'N'
-			  AND B.GOODS_CD NOT IN (
-									SELECT	GOODS_CD
-									FROM	TB_TMTB_APPLY_GOODS C
-									WHERE	1=1
-									  AND		B.TMTB_SQ = C.TMTB_SQ
-									  AND		C.GOODS_GB = 'G800_30'
-								)
+			AND Z.SECTION_GB = #{sectionGb}
 	</insert>
 	</insert>
 
 
 	<select id="getMorebetterDuplicateList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
 	<select id="getMorebetterDuplicateList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
-		/* TsaMarketing.getMorebetterDuplicateList */
-		SELECT TMP.GOODS_CD
-			  ,TMP.GOODS_NM
-		  FROM TB_TMTB_USING_GOODS_TEMP TMP
-		 WHERE 1=1
-		   AND TMP.REG_NO = #{regNo}
-		   AND TMP.GOODS_CD IN (
-				   SELECT  G.GOODS_CD
-					 FROM  TB_GOODS G
-					WHERE  1=1
-						<if test="multiSupplyCompCd != null and multiSupplyCompCd.length>0">
-							AND G.SUPPLY_COMP_CD IN
-							<foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
-								#{item}
-							</foreach>
-						</if>
-						<if test="multiBrand != null and multiBrand.length>0">
-							AND G.BRAND_CD IN
-							<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
-								#{item}
-							</foreach>
-						</if>
-						<if test="multiApplyGoods != null and multiApplyGoods.length>0">
-							OR G.GOODS_CD IN
-							<foreach collection="multiApplyGoods" item="item" index="index"  open="(" close=")" separator=",">
-								#{item}
-							</foreach>
-						</if>
-				)
-		   <if test="multiExceptGoods != null and multiExceptGoods.length>0">
-		   AND TMP.GOODS_CD NOT IN
-			   <foreach collection="multiExceptGoods" item="item" index="index"  open="(" close=")" separator=",">
-				   #{item}
-			   </foreach>
-		   </if>
+		/* TsaMorebetter.getMorebetterDuplicateList */
+		SELECT 	B.REG_NO
+				, B.GOODS_CD
+				, B.GOODS_NM
+		FROM 	TB_TMTB_APPLY_GOODS_TEMP A
+		JOIN 	TB_TMTB_USING_GOODS_TEMP B
+			ON 	A.REG_NO = B.REG_NO
+			AND A.GOODS_CD = B.GOODS_CD
+		WHERE 1=1
+		  AND A.REG_NO = #{regNo}
+		;
 	</select>
 	</select>
 
 
 	<update id="updateMorebetterStat" parameterType="MoreBetter">
 	<update id="updateMorebetterStat" parameterType="MoreBetter">
-		/* TsaMarketing.updateMorebetterStat */
+		/* TsaMorebetter.updateMorebetterStat */
 		UPDATE TB_TMTB SET
 		UPDATE TB_TMTB SET
 			TMTB_STAT = #{tmtbStat}
 			TMTB_STAT = #{tmtbStat}
 		<if test="tmtbStat == 'G232_14'">
 		<if test="tmtbStat == 'G232_14'">
@@ -610,13 +605,13 @@
 	</update>
 	</update>
 
 
 	<delete id="deleteTmtbApplyGoodsTemp" parameterType="MoreBetterGoods">
 	<delete id="deleteTmtbApplyGoodsTemp" parameterType="MoreBetterGoods">
-		/* TsaMarketing.deleteTmtbApplyGoodsTemp */
+		/* TsaMorebetter.deleteTmtbApplyGoodsTemp */
 		DELETE FROM TB_TMTB_APPLY_GOODS_TEMP
 		DELETE FROM TB_TMTB_APPLY_GOODS_TEMP
 		WHERE	REG_NO = #{regNo}
 		WHERE	REG_NO = #{regNo}
 	</delete>
 	</delete>
 
 
 	<insert id="createTmtbApplyGoodsTemp" parameterType="MoreBetterGoods">
 	<insert id="createTmtbApplyGoodsTemp" parameterType="MoreBetterGoods">
-		/* TsaMarketing.createTmtbApplyGoodsTemp */
+		/* TsaMorebetter.createTmtbApplyGoodsTemp */
 		INSERT INTO TB_TMTB_APPLY_GOODS_TEMP(
 		INSERT INTO TB_TMTB_APPLY_GOODS_TEMP(
 											 REG_NO
 											 REG_NO
 											,GOODS_CD
 											,GOODS_CD
@@ -628,7 +623,7 @@
 	</insert>
 	</insert>
 
 
 	<select id="getMorebetterRealApplyGoodsList" parameterType="MoreBetter" resultType="MoreBetterGoods">
 	<select id="getMorebetterRealApplyGoodsList" parameterType="MoreBetter" resultType="MoreBetterGoods">
-		/* TsaMarketing.getMorebetterRealApplyGoodsList */
+		/* TsaMorebetter.getMorebetterRealApplyGoodsList */
 		SELECT	GOODS_CD
 		SELECT	GOODS_CD
 		  FROM	TB_TMTB_APPLY_GOODS_TEMP
 		  FROM	TB_TMTB_APPLY_GOODS_TEMP
 		 WHERE	1=1
 		 WHERE	1=1
@@ -642,7 +637,7 @@
 	</select>
 	</select>
 
 
 	<select id="getMorebetterCompBrandGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
 	<select id="getMorebetterCompBrandGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
-		/* TsaMarketing.getMorebetterCompBrandGoodsList */
+		/* TsaMorebetter.getMorebetterCompBrandGoodsList */
 		SELECT  G.GOODS_CD
 		SELECT  G.GOODS_CD
 				,'G800_20' AS GOODS_GB
 				,'G800_20' AS GOODS_GB
 				,'G260_10' AS TARGET_GB
 				,'G260_10' AS TARGET_GB
@@ -655,11 +650,58 @@
 			</foreach>
 			</foreach>
 		</if>
 		</if>
 		<if test="multiBrand != null and multiBrand.length>0">
 		<if test="multiBrand != null and multiBrand.length>0">
-			AND G.BRAND_CD IN
+			OR G.BRAND_CD IN
 			<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
 			<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 				#{item}
 			</foreach>
 			</foreach>
 		</if>
 		</if>
 	</select>
 	</select>
+
+	<update id="deleteTmtbGoods" parameterType="MoreBetter">
+		/* TsaMorebetter.deleteTmtbGoods */
+		UPDATE TB_TMTB_GOODS SET
+			DEL_YN = 'Y'
+			, UPD_NO = #{updNo}
+			, UPD_DT = CURRENT_TIMESTAMP
+		WHERE TMTB_SQ = #{tmtbSq}
+		  AND DEL_YN = 'N'
+	</update>
+
+	<update id="deleteTmtbBurden" parameterType="MoreBetter">
+		/* TsaMorebetter.deleteTmtbBurden */
+		UPDATE TB_TMTB_BURDEN SET
+			USE_YN = 'N'
+			, UPD_NO = #{updNo}
+			, UPD_DT = CURRENT_TIMESTAMP
+		WHERE TMTB_SQ = #{tmtbSq}
+		  AND USE_YN = 'Y'
+	</update>
+
+	<update id="deleteTmtbSection" parameterType="MoreBetter">
+		/* TsaMorebetter.deleteTmtbSection */
+		UPDATE TB_TMTB_SECTION SET
+			DEL_YN = 'Y'
+			, UPD_NO = #{updNo}
+			, UPD_DT = CURRENT_TIMESTAMP
+		WHERE TMTB_SQ = #{tmtbSq}
+		  AND DEL_YN = 'N'
+	</update>
+
+	<update id="deleteTmtbVal" parameterType="MoreBetter">
+		/* TsaMorebetter.deleteTmtbVal */
+		UPDATE TB_TMTB_VAL SET
+			DEL_YN = 'Y'
+			, UPD_NO = #{updNo}
+			, UPD_DT = CURRENT_TIMESTAMP
+		WHERE TMTB_SQ = #{tmtbSq}
+		  AND DEL_YN = 'N'
+	</update>
+
+	<delete id="deleteTmtbApplyGoods" parameterType="MoreBetter">
+		/* TsaMarketing.deleteTmtbApplyGoods */
+		DELETE FROM TB_TMTB_APPLY_GOODS
+		WHERE	TMTB_SQ = #{tmtbSq}
+	</delete>
+
 	<!--// CSB 진행 -->
 	<!--// CSB 진행 -->
 </mapper>
 </mapper>

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

@@ -0,0 +1,533 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaPlanDao">
+
+	<!-- 기획전 등록 -->
+	<insert id="createPlanWebInfo" parameterType="Plan">
+		/* TsaMarketing.createPlanWebInfo */
+		<selectKey keyProperty="planSq" resultType="Integer" order="AFTER">
+			SELECT LAST_INSERT_ID()	/* 기획전 일련번호  */
+		</selectKey>
+		INSERT INTO TB_PLAN (
+		       PLAN_SQ               
+		     , PLAN_NM               
+		     , PLAN_GB               
+		     <!-- , CUST_GB -->
+		    <!--  , CUST_GRADE -->
+		     <!-- , PLAN_SNM -->
+		     , TEMPLATE_TYPE         
+		     , SITE_CD               
+		     , FRONT_GB              
+		     , DISP_STDT             
+		     , DISP_EDDT             
+		     , MAIN_PIMG             
+		     , MAIN_MIMG             
+		     , DTL_PIMG              
+		     , DTL_MIMG              
+		     , DTL_TITLE1            
+		     <!-- , DTL_TITLE2 -->          
+		     <!-- , CATE_CD               
+		     , CATE_DISP_YN   -->        
+		     , REPLY_YN              
+		     , REPLY_LOC           
+		     , REPLY_IMG           
+		     , REPLY_TITLE1        
+		     , REPLY_TITLE2        
+		     , POLL_SQ             
+		     <!-- , PRIVACY_POLICY -->
+		     , DEV_URL             
+		     , CORNER_NM_DISP_YN   
+		     , GOODS_LIMIT_YN      
+		     , GOODS_LIMIT_QTY     
+		     , DEL_YN              
+		     , OPEN_YN             
+		     , DISP_ORD            
+		     , READ_CNT              
+		     , BADGE_NM              
+		     , BADGE_FCOLOR          
+		     , BADGE_BCOLOR          
+		     , REG_NO               
+		     , REG_DT                
+		     , UPD_NO                
+		     , UPD_DT                
+		   ) VALUES (
+		       #{planSq}
+		     , #{planNm}
+		     , #{planGb}
+		    <!--  , #{custGb} -->
+		     <!-- , #{custGrade} -->
+		     <!-- , #{planSnm} -->
+		     , #{templateType}
+		     , #{siteCd}
+		     , #{frontGb}
+		     , DATE_FORMAT(#{dispStdt} , '%Y-%m-%d %H:%i:%s')
+		     , DATE_FORMAT(#{dispEddt} , '%Y-%m-%d %H:%i:%s')
+		     , #{mainPimg}
+		     , #{mainMimg}
+		     , #{dtlPimg}
+		     , #{dtlMimg}
+		     , #{dtlTitle1}
+		     <!-- , #{cateCd}
+		     , NVL(#{cateDispYn}, 'N') -->
+		     , #{replyYn}
+		     , #{replyLoc}
+		     , #{replyImg}
+		     , #{replyTitle1}
+		     , #{replyTitle2}
+		     , #{pollSq}
+		     <!-- , #{privacyPolicy} -->
+		     , #{devUrl}
+		     , #{cornerNmDispYn}
+		     , IFNULL(#{goodsLimitYn}, 'N')
+		     , #{goodsLimitQty}
+		     , 'N'
+		     , #{openYn}
+		     , #{dispOrd}
+		     , 1
+		     , #{badgeNm}
+		     , #{badgeFcolor}
+		     , #{badgeBcolor}
+		     , #{regNo}
+		     , now() 
+		     , #{updNo}
+		     , now()
+		)
+	</insert>
+	
+	<!-- 기획전 목록 -->
+	<select id="getPlanList" parameterType="Plan" resultType="Plan">
+		/* TsaMarketing.getPlanList */
+		SELECT PLAN_SQ                
+		     , PLAN_NM                
+		     , PLAN_GB                
+		     <!-- , CUST_GB -->
+		     <!-- , CUST_GRADE -->
+		     <!-- , PLAN_SNM -->
+		     , TEMPLATE_TYPE          
+		     , SITE_CD                
+		     , FRONT_GB               
+		     , DISP_STDT    
+		     , DISP_EDDT   
+		     , MAIN_PIMG              
+		     , MAIN_MIMG              
+		     , DTL_PIMG               
+		     , DTL_MIMG               
+		     , DTL_TITLE1             
+		     <!-- , DTL_TITLE2 -->
+		     <!-- , CATE_CD -->
+		     <!-- , CATE_DISP_YN -->           
+		     , REPLY_YN               
+		     , REPLY_TITLE1           
+		     , REPLY_TITLE2           
+		     , REPLY_LOC              
+		     , REPLY_IMG              
+		     , POLL_SQ                
+		     <!-- , PRIVACY_POLICY -->
+		     , DEV_URL                
+		     , CORNER_NM_DISP_YN      
+		     , GOODS_LIMIT_YN         
+		     , GOODS_LIMIT_QTY        
+		     , DEL_YN                 
+		     , OPEN_YN                
+		     , DISP_ORD               
+		     , READ_CNT               
+		     , BADGE_NM               
+		     , BADGE_FCOLOR           
+		     , BADGE_BCOLOR           
+		     , FN_GET_USER_NM(REG_NO) AS REG_NM               
+		     , REG_DT
+		       AS REG_DT              
+		     , UPD_NO                 
+		     , UPD_DT              
+		FROM   TB_PLAN
+		WHERE  1=1
+		AND    DEL_YN = 'N'
+		<if test ="siteCd != null and siteCd !=''">
+		AND    SITE_CD = #{siteCd}
+		</if>
+		<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" 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>
+		<if test="openYn != null and openYn != ''">
+		AND    OPEN_YN = #{openYn}
+		</if>
+		<if test="regNo != null and regNo != ''">
+		AND    REG_NO = #{regNo} 
+		</if>
+		<if test="frontGb != null and frontGb != ''">
+		AND    FRONT_GB = #{frontGb}
+		</if>
+		<if test="planGb != null and planGb != ''">
+		AND    PLAN_GB = #{planGb}
+		</if>
+		<if test="templateType != null and templateType != ''">
+		AND    TEMPLATE_TYPE = #{templateType}
+		</if>
+		<if test="dispStdt != null and dispStdt != ''">
+		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{dispStdt}, 'YYYY-MM-DD')
+		</if>
+		<if test="dispEddt != null and dispEddt != ''">
+		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{dispEddt}, 'YYYY-MM-DD') + 0.99999
+		</if>
+		<if test="popupDispStdt != null and popupDispStdt != ''">
+		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{popupDispStdt}, 'YYYY-MM-DD')
+		</if>
+		<if test="popupDispEddt != null and popupDispEddt != ''">
+		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{popupDispEddt}, 'YYYY-MM-DD') + 0.99999
+		</if>
+		ORDER  BY PLAN_SQ DESC
+	</select>
+	
+	<!-- 기획전 리스트 카운트 조회-->
+	<select id="getPlanListCnt" parameterType="Plan" resultType="int">
+		/* TsaMarketing.getPlanListCnt */
+		SELECT COUNT(1)
+		  FROM TB_PlAN
+		 WHERE 1=1
+		<if test ="siteCd != null and siteCd !=''">
+		AND    SITE_CD = #{siteCd}
+		</if>
+        <if test='condition != null and condition != "" '>
+		<choose>
+		     <when test='search != null and search == "searchPlanNm"'>
+ 		AND (
+		         <foreach collection="condition" 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="condition" item="item" index="index" separator="or">
+	    		   UPPER(PLAN_SQ) LIKE CONCAT('%',UPPER(#{item}),'%') 
+		         </foreach>
+		    )
+		      </when>
+		</choose>
+		</if>
+		<if test="openYn != null and openYn != ''">
+		AND    OPEN_YN = #{openYn}
+		</if>
+		<if test="regNo != null and regNo != ''">
+		AND    REG_NO = #{regNo}
+		</if>
+		<if test="frontGb != null and frontGb != ''">
+		AND    FRONT_GB = #{frontGb}
+		</if>
+		<if test="planGb != null and planGb != ''">
+		AND    PLAN_GB = #{planGb}
+		</if>
+		<if test="templateType != null and templateType != ''">
+		AND    TEMPLATE_TYPE = #{templateType}
+		</if>
+		<if test="dispStdt != null and dispStdt != ''">
+		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{dispStdt}, 'YYYY-MM-DD')
+		</if>
+		<if test="dispEddt != null and dispEddt != ''">
+		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{dispEddt}, 'YYYY-MM-DD') + 0.99999
+		</if>
+		<if test="popupDispStdt != null and popupDispStdt != ''">
+		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{popupDispStdt}, 'YYYY-MM-DD')
+		</if>
+		<if test="popupDispEddt != null and popupDispEddt != ''">
+		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{popupDispEddt}, 'YYYY-MM-DD') + 0.99999
+		</if>
+	</select>
+	
+	<!-- 기획전 삭제처리 -->
+	<update id="deletePlan" parameterType="Plan">
+		/* TsaMarketing.deletePlan */
+		UPDATE TB_PLAN
+		SET    UPD_NO = #{updNo}
+		     , UPD_DT = now()
+		     , DEL_YN = 'Y'
+		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">
+		/* TsaMarketing.getPlanAllList */
+		SELECT PLAN_SQ
+		     , PLAN_NM
+		FROM   TB_PLAN
+		WHERE  1=1
+		AND    DEL_YN = 'N'
+		<if test="planSq != null and planSq != ''">
+		AND    PLAN_SQ != #{planSq}
+		</if>
+		ORDER  BY PLAN_SQ DESC
+	</select>
+
+	<!-- 기획전 복사 -->
+	<insert id="createPlanCopy" parameterType="Plan">
+		/* TsaMarketing.createPlanCopy */
+		<selectKey keyProperty="planSq" resultType="Integer" order="AFTER">
+			SELECT LAST_INSERT_ID()	/* 기획전 일련번호  */
+		</selectKey>
+
+		INSERT INTO TB_PLAN (
+		            PLAN_SQ
+		          , PLAN_NM
+		          , PLAN_GB
+		          <!-- , CUST_GB -->
+		          <!-- , CUST_GRADE -->
+		          <!-- , PLAN_SNM -->
+		          , TEMPLATE_TYPE
+		          , SITE_CD
+		          , FRONT_GB
+		          , DISP_STDT
+		          , DISP_EDDT
+		          , MAIN_PIMG
+		          , MAIN_MIMG
+		          , DTL_PIMG
+		          , DTL_MIMG
+		          , DTL_TITLE1        
+		          <!-- , CATE_CD -->
+		          <!-- , CATE_DISP_YN -->
+		          , REPLY_YN
+		          , REPLY_LOC
+		          , REPLY_IMG
+		          , REPLY_TITLE1
+		          , REPLY_TITLE2
+		          , POLL_SQ
+		          <!-- , PRIVACY_POLICY -->
+		          , DEV_URL
+		          , CORNER_NM_DISP_YN
+		          , GOODS_LIMIT_YN
+		          , GOODS_LIMIT_QTY
+		          , DEL_YN
+		          , OPEN_YN
+		          , DISP_ORD
+		          , READ_CNT
+		          , BADGE_NM
+		          , BADGE_FCOLOR
+		          , BADGE_BCOLOR
+		          , REG_NO
+		          , REG_DT
+		          , UPD_NO
+		          , UPD_DT
+		      ) SELECT #{planSq}
+		             , PLAN_NM
+		             , PLAN_GB
+		             <!-- , CUST_GB -->
+		             <!-- , CUST_GRADE -->
+		             <!-- , PLAN_SNM -->
+		             , TEMPLATE_TYPE
+		             , SITE_CD
+		             , FRONT_GB
+		             , DISP_STDT
+		             , DISP_EDDT
+		             , MAIN_PIMG
+		             , MAIN_MIMG
+		             , DTL_PIMG
+		             , DTL_MIMG
+		             , DTL_TITLE1
+		             <!-- , CATE_CD -->
+		             <!-- , CATE_DISP_YN -->
+		             , REPLY_YN
+		             , REPLY_LOC
+		             , REPLY_IMG
+		             , REPLY_TITLE1
+		             , REPLY_TITLE2
+		             , POLL_SQ
+		             <!-- , PRIVACY_POLICY -->
+		             , DEV_URL
+		             , CORNER_NM_DISP_YN
+		             , GOODS_LIMIT_YN
+		             , GOODS_LIMIT_QTY
+		             , 'N'
+		             , OPEN_YN
+		             , DISP_ORD
+		             , 0
+		             , BADGE_NM
+		             , BADGE_FCOLOR
+		             , BADGE_BCOLOR
+		             , #{regNo}
+		             , now()
+		             , #{updNo}
+		             , now()
+		        FROM   TB_PLAN
+		        WHERE  PLAN_SQ = #{copyPlanSq}
+	</insert>
+	
+	<insert id="createPlanBrand" parameterType="Plan">
+		INSERT INTO TB_PLAN_BRAND
+			(
+				BRAND_CD
+			  , PLAN_SQ
+			  , DISP_YN
+			  , REG_NO
+			  , REG_DT
+			  , UPD_NO
+			  , UPD_DT
+			)
+		VALUES
+		   (
+			  #{brandCd}
+			, #{planSq}
+			,'Y'
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		   )
+	</insert>
+	
+	<select id="getPlanBrandList" parameterType="Plan" resultType="Plan">
+		SELECT TP.PLAN_NM AS PLAN_NM
+		     , TP.PLAN_SQ AS PLAN_SQ
+		     , TB.BRAND_ENM AS BRAND_ENM
+		     , TB.BRAND_CD AS BRAND_CD
+		     , TB.BRAND_KNM AS BRAND_KNM
+		FROM TB_PLAN TP  LEFT OUTER JOIN TB_PLAN_BRAND TPB 
+							   ON TP.PLAN_SQ = TPB.PLAN_SQ 
+		            	 LEFT OUTER JOIN  TB_BRAND TB 
+		   					   ON TPB.BRAND_CD = TB.BRAND_CD 
+		WHERE 1=1
+		 	AND TP.PLAN_SQ = TPB.PLAN_SQ 
+		 	AND TP.PLAN_SQ = #{planSq}
+		    AND TP.DEL_YN = 'N'
+	</select>
+</mapper>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 12 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml

@@ -394,4 +394,16 @@
 		AND    USE_YN = 'Y'
 		AND    USE_YN = 'Y'
 	</select>
 	</select>
 
 
+	<!-- 자사브랜드 조회-->
+	<select id="getSelfBrandList" resultType="CommonCode">
+		/* TsaRenderer.getSelfBrandList */
+		SELECT BRAND_CD  AS CD
+			 , BRAND_ENM AS CD_NM
+		FROM TB_BRAND
+		WHERE 1 = 1
+		  AND USE_YN = 'Y'
+		  AND SELF_YN = 'Y'
+		ORDER  BY SUPPLY_COMP_CD, DISP_ORD
+	</select>
+
 </mapper>
 </mapper>

BIN
src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar


+ 37 - 39
src/main/webapp/WEB-INF/views/customer/CellphoneChangePopupForm.html

@@ -14,7 +14,7 @@
  * 1.0  2021.01.25   jsshin     최초 작성
  * 1.0  2021.01.25   jsshin     최초 작성
  *******************************************************************************
  *******************************************************************************
  -->
  -->
-<div class="modalPopup" data-width="800">
+<div class="modelessPopup" data-width="800">
 	<div class="panelStyle">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<!-- TITLE -->
 		<div class="panelTitle">
 		<div class="panelTitle">
@@ -24,45 +24,43 @@
 		<!-- //TITLE -->
 		<!-- //TITLE -->
 		<!-- CONTENT -->
 		<!-- CONTENT -->
 		<div class="panelContent">
 		<div class="panelContent">
-			<div class="panelStyle">
-				<form id="cellPhoneForm" name="cellPhoneForm">
-					<input type="hidden" id="custNo" name="custNo">
-					<table class="frmStyle">
-						<colgroup>
-							<col style="width:1%"/>
-							<col style="width:40%"/>
-						</colgroup>
-						<tbody>
-						<tr>
-							<span class="infoTxt cBlue"><i class="fa fa-info-circle"></i>인증번호 확인 후 번호변경가능 </span>
-							<span class="infoTxt cBlue"><i class="fa fa-info-circle"></i>변경 할 휴대폰번호 입력 후 전송</span> <br/>
-							<span class="infoTxt cBlue"><i class="fa fa-info-circle"></i>인증번호는 6자리 입니다.</span><br/>
-							<th>기존휴대전화번호<em class="star"></em></th>
-							<td>
-								<input type="text" class="w150" name="orgCellPhone" maxlength="13" readonly="readonly"/>
-							</td>
-							<th>변경할휴대전화번호<em class="star"></em></th>
-							<td>
-								<input type="text" class="w150" name="cellPhnno" required="required" maxlength="13" data-valid-name="휴대전화번호" />
-							</td>
-						</tr>
-						<tr id="trCertNo" style="display: none">
-							<th>인증번호</th>
-							<td>
-								<input type="text" class="w200" name="certNo" placeholder="인증번호 입력" style="display:none;">
-							</td>
-						</tr>
-						</tbody>
-					</table>
-				</form>
-			</div>
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" id="btnSendCustCrtfdNo" class="btn btn-success btn-lg" >인증번호발송</button>
-					<button type="button" id="btnCustCertNo" class="btn btn-success btn-lg" style="display: none">확인(번호변경)</button>
-				</li>
-			</ul>
+			<form id="cellPhoneForm" name="cellPhoneForm">
+				<input type="hidden" id="custNo" name="custNo">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:1%"/>
+						<col style="width:40%"/>
+					</colgroup>
+					<tbody>
+					<tr>
+						<span class="infoTxt cBlue"><i class="fa fa-info-circle"></i>인증번호 확인 후 번호변경가능 </span>
+						<span class="infoTxt cBlue"><i class="fa fa-info-circle"></i>변경 할 휴대폰번호 입력 후 전송</span> <br/>
+						<span class="infoTxt cBlue"><i class="fa fa-info-circle"></i>인증번호는 6자리 입니다.</span><br/>
+						<th>기존휴대전화번호<em class="star"></em></th>
+						<td>
+							<input type="text" class="w150" name="orgCellPhone" maxlength="13" readonly="readonly"/>
+						</td>
+						<th>변경할휴대전화번호<em class="star"></em></th>
+						<td>
+							<input type="text" class="w150" name="cellPhnno" required="required" maxlength="13" data-valid-name="휴대전화번호" />
+						</td>
+					</tr>
+					<tr id="trCertNo" style="display: none">
+						<th>인증번호</th>
+						<td>
+							<input type="text" class="w200" name="certNo" placeholder="인증번호 입력" style="display:none;">
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</form>
 		</div>
 		</div>
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" id="btnSendCustCrtfdNo" class="btn btn-success btn-lg" >인증번호발송</button>
+				<button type="button" id="btnCustCertNo" class="btn btn-success btn-lg" style="display: none">확인(번호변경)</button>
+			</li>
+		</ul>
 		<!-- //CONTENT -->
 		<!-- //CONTENT -->
 	</div>
 	</div>
 </div>
 </div>

+ 127 - 97
src/main/webapp/WEB-INF/views/customer/CustomerActiveListForm.html

@@ -26,109 +26,128 @@
 	<!-- //메뉴 설명 -->
 	<!-- //메뉴 설명 -->
 
 
 	<!-- 검색조건 영역 -->
 	<!-- 검색조건 영역 -->
-	<div class="panelStyle">
-		<form id="searchForm" name="searchForm" action="#" th:action="@{'/customer/active/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
-			<table class="frmStyle" aria-describedby="검색조건">
-				<colgroup>
-					<col style="width:10%;"/>
-					<col style="width:20%;"/>
-					<col style="width:10%;"/>
-					<col style="width:15%;"/>
-					<col style="width:10%;"/>
-					<col style="width:20%;"/>
-					<col/>
-				</colgroup>
-				<tbody>
-				<tr>
-					<th class="dashR">검색구분</th>
-					<td class="dashR">
-						<select name="searchGb">
-							<option value="">선택</option>
-							<option value="custNm">회원명 </option>
-							<option value="email">이메일</option>
-							<option value="custId">아이디</option>
-						</select>
-						<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
-					</td>
+	<div class="panelContent">
+		<form id="custActiveForm" name="custActiveForm" action="#" th:action="@{'/customer/active/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<div class="panelStyle">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+					<tr>
+						<th class="dashR">검색구분</th>
+						<td class="dashR">
+							<select name="searchGb">
+								<option value="">선택</option>
+								<option value="custNm">회원명 </option>
+								<option value="email">이메일</option>
+								<option value="custId">아이디</option>
+							</select>
+							<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
+						</td>
 
 
-					<th class="dashR">사이트</th>
-					<td class="dashR">
-						<select name="siteCd">
-							<option value="">전체</option>
-							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-						</select>
-					</td>
-					<th class="dashR">수신여부</th>
-					<td class="dashR">
-						<label class="chkBox">
-							<input type="checkbox" name='emailAgreeYn' value='Y'/> 메일 수신여부
-						</label>
-						<label class="chkBox">
-							<input type="checkbox" name='smsAgreeYn' value='Y'/> SMS 수신여부
-						</label>
-					</td>
-				</tr>
-				<tr>
-					<th class="dashR">회원구분</th>
-					<td class="dashR">
-						<select name="custGb">
-							<option value="">전체</option>
-							<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-						</select>
-					</td>
+						<th class="dashR">사이트</th>
+						<td class="dashR">
+							<select name="siteCd">
+								<option value="">전체</option>
+								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th class="dashR">수신여부</th>
+						<td class="dashR">
+							<label class="chkBox">
+								<input type="checkbox" name='emailAgreeYn' value='Y'/> 메일 수신여부
+							</label>
+							<label class="chkBox">
+								<input type="checkbox" name='smsAgreeYn' value='Y'/> SMS 수신여부
+							</label>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">회원구분</th>
+						<td class="dashR">
+							<select name="custGb">
+								<option value="">전체</option>
+								<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
 
 
-					<th class="dashR">회원등급</th>
-					<td class="dashR">
-						<select name="custGrade">
-							<option value="">전체</option>
-							<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-						</select>
-					</td>
+						<th class="dashR">회원등급</th>
+						<td class="dashR">
+							<select name="custGrade">
+								<option value="">전체</option>
+								<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
 
 
-					<th class="dashR">관리대상</th>
-					<td class="dashR">
-						<select name="managedRsn">
-							<option value="">전체</option>
-							<option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-						</select>
-					</td>
-				</tr>
-				<tr>
-					<th class="dashR">휴대폰번호</th>
-					<td class="dashR" colspan="5">
-						<input type="text" class="w200" name="cellPhnno" id="cellPhnno"/>
-					</td>
-				</tr>
-				<tr>
-					<th class="dashR">조회일자</th>
-					<td class="dashR" colspan="5" >
-						<select name="searchDateGb">
-							<option value="joinDt">가입일자</option>
-							<option value="loginLdt">로그인일자</option>
-						</select>
-						<span id="terms"></span>
-					</td>
-				</tr>
-				</tbody>
-			</table>
+						<th class="dashR">관리대상</th>
+						<td class="dashR">
+							<select name="managedRsn">
+								<option value="">전체</option>
+								<option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">휴대폰번호</th>
+						<td class="dashR" colspan="5">
+							<input type="text" class="w200" name="cellPhnno" id="cellPhnno"/>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">조회일자</th>
+						<td class="dashR" colspan="5" >
+							<select name="searchDateGb">
+								<option value="joinDt">가입일자</option>
+								<option value="loginLdt">로그인일자</option>
+							</select>
+							<span id="terms"></span>
+						</td>
+					</tr>
+					</tbody>
+				</table>
 
 
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#custActiveForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+		</div>
+		<!-- //검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li class="right">
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
 			<ul class="panelBar">
 			<ul class="panelBar">
 				<li class="center">
 				<li class="center">
-					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
-					<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+					<div class="tablePaging" id="custListPagination"></div>
 				</li>
 				</li>
 			</ul>
 			</ul>
+		</div>
 		</form>
 		</form>
 	</div>
 	</div>
-	<!-- //검색조건 영역 -->
-
-	<!-- 리스트 영역 -->
-	<div class="panelStyle">
-		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
-	</div>
-	<!-- //리스트 영역 -->
 </div>
 </div>
-
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.paging.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	/*<![CDATA[*/
 
 
@@ -205,22 +224,22 @@
 	});
 	});
 
 
 	//엔터키 조회
 	//엔터키 조회
-	$('#searchForm input[name=cellPhnno], #searchForm input[name=searchNm]').on('keypress' ,function (event) {
+	$('#custActiveForm input[name=cellPhnno], #custActiveForm input[name=searchNm]').on('keypress' ,function (event) {
 		if (event.which === 13) {
 		if (event.which === 13) {
 			fnSearch();
 			fnSearch();
 		}
 		}
 	});
 	});
 
 
 	// 휴대폰 자동 하이픈
 	// 휴대폰 자동 하이픈
-	$('#searchForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
+	$('#custActiveForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
 		cfnCellPhonnHypen(this);
 		cfnCellPhonnHypen(this);
 	});
 	});
 
 
 	// 유효성 확인
 	// 유효성 확인
 	var fnValidationCheck = function () {
 	var fnValidationCheck = function () {
 		// 입력 값 체크
 		// 입력 값 체크
-		const $searchGb = $('#searchForm select[name=searchGb]');	// 검색구분
-		const $searchTxt = $('#searchForm input[name=searchTxt]');	// 검색내용
+		const $searchGb = $('#custActiveForm select[name=searchGb]');	// 검색구분
+		const $searchTxt = $('#custActiveForm input[name=searchTxt]');	// 검색내용
 		let isSearchVaild = true;
 		let isSearchVaild = true;
 		let validationMessage;
 		let validationMessage;
 
 
@@ -261,9 +280,20 @@
 		if (!validation) {
 		if (!validation) {
 			return;
 			return;
 		}
 		}
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		//gagaAgGrid.fetch($('#custActiveForm').prop('action'), gridOptions, '#custActiveForm');
+		gagaPaging.init('custActiveForm', fnSearchCallBack, 'custListPagination', $('#custActiveForm select[name=pageSize]').val());
+		gagaPaging.load($('#custActiveForm input[name=pageNo]').val());
 	};
 	};
 
 
+	var fnSearchCallBack = function (result) {
+		$('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#custActiveForm input[name=pageNo]').val(result.pageing.pageable.pageNo.addComma());
+		$('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+
+		gridOptions.api.setRowData(result.custList);
+		gagaPaging.createPagination(result.pageing.pageable);
+	};
 
 
 	$(document).ready(function() {
 	$(document).ready(function() {
 		// 공통 달력 생성
 		// 공통 달력 생성

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

@@ -14,7 +14,7 @@
  * 1.0  2021.01.18   jsshin     최초 작성
  * 1.0  2021.01.18   jsshin     최초 작성
  *******************************************************************************
  *******************************************************************************
  -->
  -->
-<div class="modalPopup" data-width="1600">
+<div class="modalPopup" data-width="1820" data-height="750">
 	<div class="panelStyle">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<!-- TITLE -->
 		<div class="panelTitle">
 		<div class="panelTitle">
@@ -967,6 +967,7 @@
 
 
 	});
 	});
 
 
+	// 기본정보 - 탈퇴버튼
 	$('#btnCustSecede').on('click', function () {
 	$('#btnCustSecede').on('click', function () {
 		let custNo = $('#custInfoForm input[name=custNo]').val();
 		let custNo = $('#custInfoForm input[name=custNo]').val();
 		if (gagajf.isNull(custNo)) {
 		if (gagajf.isNull(custNo)) {
@@ -1000,6 +1001,7 @@
 			return;
 			return;
 		}
 		}
 
 
+		// 마케팅 수신여부가 기존하고 바꼈는지 확인
 		// 데이터 변경 없으면 공배처리
 		// 데이터 변경 없으면 공배처리
 		if (customer.emailAgreeYn === orgData.emailAgreeYn) {
 		if (customer.emailAgreeYn === orgData.emailAgreeYn) {
 			customer.emailAgreeYn = '';
 			customer.emailAgreeYn = '';
@@ -1008,9 +1010,7 @@
 		if (customer.smsAgreeYn === orgData.smsAgreeYn) {
 		if (customer.smsAgreeYn === orgData.smsAgreeYn) {
 			customer.smsAgreeYn = '';
 			customer.smsAgreeYn = '';
 		}
 		}
-
-		// 마케팅 수신여부가 기존하고 바꼈는지 확인
-
+		customer.birthYmd = customer.birthYmd.replaceAll('-', '');
 
 
 		mcxDialog.confirm("기본정보를 수정 하시겠습니까?", {
 		mcxDialog.confirm("기본정보를 수정 하시겠습니까?", {
 			cancelBtnText: "취소",
 			cancelBtnText: "취소",

+ 92 - 61
src/main/webapp/WEB-INF/views/customer/CustomerDormantListForm.html

@@ -26,67 +26,86 @@
 	<!-- //메뉴 설명 -->
 	<!-- //메뉴 설명 -->
 
 
 	<!-- 검색조건 영역 -->
 	<!-- 검색조건 영역 -->
-	<div class="panelStyle">
-		<form id="searchForm" name="searchForm" action="#" th:action="@{'/customer/dormant/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
-			<table class="frmStyle" aria-describedby="검색조건">
-				<colgroup>
-					<col style="width:10%;"/>
-					<col style="width:20%;"/>
-					<col style="width:10%;"/>
-					<col style="width:15%;"/>
-					<col style="width:10%;"/>
-					<col style="width:20%;"/>
-					<col/>
-				</colgroup>
-				<tbody>
-				<tr>
-					<th class="dashR">검색구분</th>
-					<td class="dashR">
-						<select name="searchGb">
-							<option value="">선택</option>
-							<option value="custNm">회원명 </option>
-							<option value="email">이메일</option>
-							<option value="custId">아이디</option>
+	<div class="panelContent">
+		<form id="custDormantForm" name="custDormantForm" action="#" th:action="@{'/customer/dormant/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<div class="panelStyle">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+					<tr>
+						<th class="dashR">검색구분</th>
+						<td class="dashR">
+							<select name="searchGb">
+								<option value="">선택</option>
+								<option value="custNm">회원명 </option>
+								<option value="email">이메일</option>
+								<option value="custId">아이디</option>
+							</select>
+							<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
+						</td>
+						<th class="dashR">사이트</th>
+						<td class="dashR">
+							<select name="siteCd">
+								<option value="">전체</option>
+								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th class="dashR">휴대폰번호(숫자만)</th>
+						<td class="dashR">
+							<input type="text" class="w200" name="cellPhnno" id="cellPhnno" maxlength="13"/>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">휴면일</th>
+						<td class="dashR" colspan="5" id="terms">
+						</td>
+					</tr>
+					</tbody>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#custDormantForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</div>
+			<!-- //검색조건 영역 -->
+			<!-- 리스트 영역 -->
+			<div class="panelStyle">
+				<ul class="panelBar">
+					<li class="right">
+						검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+						쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+						<select id="pageSize" name="pageSize">
+							<option value="50" selected="selected">50개씩 보기</option>
+							<option value="100">100개씩 보기</option>
+							<option value="500">500개씩 보기</option>
+							<option value="1000">1000개씩 보기</option>
 						</select>
 						</select>
-						<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
-					</td>
-					<th class="dashR">사이트</th>
-					<td class="dashR">
-						<select name="siteCd">
-							<option value="">전체</option>
-							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-						</select>
-					</td>
-					<th class="dashR">휴대폰번호(숫자만)</th>
-					<td class="dashR">
-						<input type="text" class="w200" name="cellPhnno" id="cellPhnno" maxlength="13"/>
-					</td>
-				</tr>
-				<tr>
-					<th class="dashR">휴면일</th>
-					<td class="dashR" colspan="5" id="terms">
-					</td>
-				</tr>
-				</tbody>
-			</table>
-
-			<ul class="panelBar">
-				<li class="center">
-					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
-					<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
-				</li>
-			</ul>
+						<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+					</li>
+				</ul>
+				<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+				<ul class="panelBar">
+					<li class="center">
+						<div class="tablePaging" id="custListPagination"></div>
+					</li>
+				</ul>
+			</div>
+			<!-- //리스트 영역 -->
 		</form>
 		</form>
 	</div>
 	</div>
-	<!-- //검색조건 영역 -->
-
-	<!-- 리스트 영역 -->
-	<div class="panelStyle">
-		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
-	</div>
-	<!-- //리스트 영역 -->
 </div>
 </div>
 
 
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.paging.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	/*<![CDATA[*/
 	// 사이트목록
 	// 사이트목록
@@ -126,22 +145,22 @@
 	});
 	});
 
 
 	//엔터키 조회
 	//엔터키 조회
-	$('#searchForm input[name=cellPhnno], #searchForm input[name=searchNm]').on('keypress', function (event) {
+	$('#custDormantForm input[name=cellPhnno], #custDormantForm input[name=searchNm]').on('keypress', function (event) {
 		if (event.which === 13) {
 		if (event.which === 13) {
 			fnSearch();
 			fnSearch();
 		}
 		}
 	});
 	});
 
 
 	// 휴대폰 자동 하이픈
 	// 휴대폰 자동 하이픈
-	$('#searchForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
+	$('#custDormantForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
 		cfnCellPhonnHypen(this);
 		cfnCellPhonnHypen(this);
 	});
 	});
 
 
 	// 유효성 확인
 	// 유효성 확인
 	var fnValidationCheck = function () {
 	var fnValidationCheck = function () {
 		// 입력 값 체크
 		// 입력 값 체크
-		const $searchGb = $('#searchForm select[name=searchGb]');	// 검색구분
-		const $searchTxt = $('#searchForm input[name=searchTxt]');	// 검색내용
+		const $searchGb = $('#custDormantForm select[name=searchGb]');	// 검색구분
+		const $searchTxt = $('#custDormantForm input[name=searchTxt]');	// 검색내용
 		let isSearchVaild = true;
 		let isSearchVaild = true;
 		let validationMessage;
 		let validationMessage;
 
 
@@ -181,7 +200,19 @@
 		if (!validation) {
 		if (!validation) {
 			return;
 			return;
 		}
 		}
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		//gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		gagaPaging.init('custDormantForm', fnSearchCallBack, 'custListPagination', $('#custDormantForm select[name=pageSize]').val());
+		gagaPaging.load($('#custDormantForm input[name=pageNo]').val());
+	};
+
+	var fnSearchCallBack = function (result) {
+		$('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#custDormantForm input[name=pageNo]').val(result.pageing.pageable.pageNo.addComma());
+		$('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+
+		gridOptions.api.setRowData(result.custList);
+		gagaPaging.createPagination(result.pageing.pageable);
 	};
 	};
 
 
 	$(document).ready(function() {
 	$(document).ready(function() {

+ 39 - 7
src/main/webapp/WEB-INF/views/customer/CustomerSecedeListForm.html

@@ -27,7 +27,7 @@
 
 
 	<!-- 검색조건 영역 -->
 	<!-- 검색조건 영역 -->
 	<div class="panelStyle">
 	<div class="panelStyle">
-		<form id="searchForm" name="searchForm" action="#" th:action="@{'/customer/secede/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<form id="custSecedeForm" name="custSecedeForm" action="#" th:action="@{'/customer/secede/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
 			<table class="frmStyle" aria-describedby="검색조건">
 			<table class="frmStyle" aria-describedby="검색조건">
 				<colgroup>
 				<colgroup>
 					<col style="width:10%;"/>
 					<col style="width:10%;"/>
@@ -82,7 +82,7 @@
 			<ul class="panelBar">
 			<ul class="panelBar">
 				<li class="center">
 				<li class="center">
 					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
 					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
-					<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+					<button type="button" class="btn btn-gray btn-lg" onclick="$('#custSecedeForm')[0].reset();">초기화</button>
 				</li>
 				</li>
 			</ul>
 			</ul>
 		</form>
 		</form>
@@ -91,11 +91,30 @@
 
 
 	<!-- 리스트 영역 -->
 	<!-- 리스트 영역 -->
 	<div class="panelStyle">
 	<div class="panelStyle">
+		<ul class="panelBar">
+			<li class="right">
+				검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+				쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+				<select id="pageSize" name="pageSize">
+					<option value="50" selected="selected">50개씩 보기</option>
+					<option value="100">100개씩 보기</option>
+					<option value="500">500개씩 보기</option>
+					<option value="1000">1000개씩 보기</option>
+				</select>
+				<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+			</li>
+		</ul>
 		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
 		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		<ul class="panelBar">
+			<li class="center">
+				<div class="tablePaging" id="custListPagination"></div>
+			</li>
+		</ul>
 	</div>
 	</div>
 	<!-- //리스트 영역 -->
 	<!-- //리스트 영역 -->
 </div>
 </div>
 
 
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.paging.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	/*<![CDATA[*/
 	// 사이트목록
 	// 사이트목록
@@ -135,22 +154,22 @@
 	});
 	});
 
 
 	//엔터키 조회
 	//엔터키 조회
-	$('#searchForm input[name=cellPhnno], #searchForm input[name=searchNm]').on('keypress', function (event) {
+	$('#custSecedeForm input[name=cellPhnno], #custSecedeForm input[name=searchNm]').on('keypress', function (event) {
 		if (event.which === 13) {
 		if (event.which === 13) {
 			fnSearch();
 			fnSearch();
 		}
 		}
 	});
 	});
 
 
 	// 휴대폰 자동 하이픈
 	// 휴대폰 자동 하이픈
-	$('#searchForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
+	$('#custSecedeForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
 		cfnCellPhonnHypen(this);
 		cfnCellPhonnHypen(this);
 	});
 	});
 
 
 	// 유효성 확인
 	// 유효성 확인
 	var fnValidationCheck = function () {
 	var fnValidationCheck = function () {
 		// 입력 값 체크
 		// 입력 값 체크
-		const $searchGb = $('#searchForm select[name=searchGb]');	// 검색구분
-		const $searchTxt = $('#searchForm input[name=searchTxt]');	// 검색내용
+		const $searchGb = $('#custSecedeForm select[name=searchGb]');	// 검색구분
+		const $searchTxt = $('#custSecedeForm input[name=searchTxt]');	// 검색내용
 		let isSearchVaild = true;
 		let isSearchVaild = true;
 		let validationMessage;
 		let validationMessage;
 
 
@@ -190,7 +209,20 @@
 		if (!validation) {
 		if (!validation) {
 			return;
 			return;
 		}
 		}
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		//gagaAgGrid.fetch($('#custSecedeForm').prop('action'), gridOptions, '#custSecedeForm');
+
+		gagaPaging.init('custSecedeForm', fnSearchCallBack, 'custListPagination', $('#custSecedeForm select[name=pageSize]').val());
+		gagaPaging.load($('#custSecedeForm input[name=pageNo]').val());
+	};
+
+	var fnSearchCallBack = function (result) {
+		$('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#custSecedeForm input[name=pageNo]').val(result.pageing.pageable.pageNo.addComma());
+		$('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+
+		gridOptions.api.setRowData(result.custList);
+		gagaPaging.createPagination(result.pageing.pageable);
 	};
 	};
 
 
 	$(document).ready(function() {
 	$(document).ready(function() {

+ 43 - 45
src/main/webapp/WEB-INF/views/customer/EmailPopupForm.html

@@ -14,7 +14,7 @@
  * 1.0  2021.01.21   jsshin     최초 작성
  * 1.0  2021.01.21   jsshin     최초 작성
  *******************************************************************************
  *******************************************************************************
  -->
  -->
-<div class="modalPopup" data-width="800">
+<div class="modelessPopup" data-width="800">
 	<div class="panelStyle">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<!-- TITLE -->
 		<div class="panelTitle">
 		<div class="panelTitle">
@@ -24,51 +24,49 @@
 		<!-- //TITLE -->
 		<!-- //TITLE -->
 		<!-- CONTENT -->
 		<!-- CONTENT -->
 		<div class="panelContent">
 		<div class="panelContent">
-			<div class="panelStyle">
-				<form id="emailForm" name="emailForm">
-					<input type="hidden" name="sendEmail" th:value="${sendEmail}"/>
-					<input type="hidden" name="email"/>
-					<table class="frmStyle">
-						<colgroup>
-							<col style="width:1%"/>
-							<col style="width:40%"/>
-						</colgroup>
-						<tbody>
-						<tr >
-							<th>보내는사람</th>
-							<td>
-								<span name="sendEmail" th:text="${sendEmail}"></span>
-							</td>
-						</tr>
-						<tr>
-							<th>받는사람</th>
-							<td>
-								<span name="email"></span>
-							</td>
-						</tr>
-						<tr>
-							<th>제목<em class="star"></em></th>
-							<td>
-								<input type="text" class="w150" name="title" value="" required="required" data-valid-name="제목"/>
-							</td>
-						</tr>
-						<tr>
-							<th>내용<em class="star"></em></th>
-							<td>
-								<textarea class="textareaR4" style="resize: none;" name ="content" ></textarea>
-							</td>
-						</tr>
-						</tbody>
-					</table>
-				</form>
-			</div>
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-success btn-lg" id="btnSendEmail">발송</button>
-					<button type="button" class="btn btn-gray btn-lg" onclick="uifnPopupClose('popupEmailForm')">취소</button>
-				</li>
-			</ul>
+			<form id="emailForm" name="emailForm">
+				<input type="hidden" name="sendEmail" th:value="${sendEmail}"/>
+				<input type="hidden" name="email"/>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:1%"/>
+						<col style="width:40%"/>
+					</colgroup>
+					<tbody>
+					<tr >
+						<th>보내는사람</th>
+						<td>
+							<span name="sendEmail" th:text="${sendEmail}"></span>
+						</td>
+					</tr>
+					<tr>
+						<th>받는사람</th>
+						<td>
+							<span name="email"></span>
+						</td>
+					</tr>
+					<tr>
+						<th>제목<em class="star"></em></th>
+						<td>
+							<input type="text" class="w150" name="title" value="" required="required" data-valid-name="제목"/>
+						</td>
+					</tr>
+					<tr>
+						<th>내용<em class="star"></em></th>
+						<td>
+							<textarea class="textareaR4" style="resize: none;" name ="content" ></textarea>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</form>
 		</div>
 		</div>
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-success btn-lg" id="btnSendEmail">발송</button>
+				<button type="button" class="btn btn-gray btn-lg" onclick="uifnPopupClose('popupEmailForm')">취소</button>
+			</li>
+		</ul>
 		<!-- //CONTENT -->
 		<!-- //CONTENT -->
 	</div>
 	</div>
 </div>
 </div>

+ 36 - 38
src/main/webapp/WEB-INF/views/customer/LmsPopupForm.html

@@ -14,7 +14,7 @@
  * 1.0  2021.01.21   jsshin     최초 작성
  * 1.0  2021.01.21   jsshin     최초 작성
  *******************************************************************************
  *******************************************************************************
  -->
  -->
-<div class="modalPopup" data-width="800">
+<div class="modelessPopup" data-width="800">
 	<div class="panelStyle">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<!-- TITLE -->
 		<div class="panelTitle">
 		<div class="panelTitle">
@@ -24,44 +24,42 @@
 		<!-- //TITLE -->
 		<!-- //TITLE -->
 		<!-- CONTENT -->
 		<!-- CONTENT -->
 		<div class="panelContent">
 		<div class="panelContent">
-			<div class="panelStyle">
-				<form id="lmsForm" name="lmsForm">
-					<table class="frmStyle">
-						<colgroup>
-							<col style="width:1%"/>
-							<col style="width:40%"/>
-						</colgroup>
-						<tbody>
-						<tr >
-							<th>수신자번호<em class="required" title="필수"></em></th>
-							<td>
-								<input type="text" class="w150" name="cellPhnno" data-valid-name="수신번호"  required="required"  maxlength="13"/>
-							</td>
-						</tr>
-						<tr>
-							<th>발신자번호<em class="required" title="필수"></em></th>
-							<td>
-								<input type="text" class="w150" name="callBack" th:value="${callBack}" maxlength="11" readonly="readonly"/>
-							</td>
-						</tr>
-						<tr>
-							<th>메시지<em class="required" title="필수"></em></th>
-							<td>
-								<textarea class="textareaR4"  style="resize: none;" name ="content" ></textarea>
-								<span name="count">0</span> / 2000 byte
-							</td>
-						</tr>
-						</tbody>
-					</table>
-				</form>
-			</div>
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-success btn-lg" id="btnSendSms">발송</button>
-					<button type="button" class="btn btn-gray btn-lg" onclick="uifnPopupClose('popupLmsForm')">취소</button>
-				</li>
-			</ul>
+			<form id="lmsForm" name="lmsForm">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:1%"/>
+						<col style="width:40%"/>
+					</colgroup>
+					<tbody>
+					<tr >
+						<th>수신자번호<em class="required" title="필수"></em></th>
+						<td>
+							<input type="text" class="w150" name="cellPhnno" data-valid-name="수신번호"  required="required"  maxlength="13"/>
+						</td>
+					</tr>
+					<tr>
+						<th>발신자번호<em class="required" title="필수"></em></th>
+						<td>
+							<input type="text" class="w150" name="callBack" th:value="${callBack}" maxlength="11" readonly="readonly"/>
+						</td>
+					</tr>
+					<tr>
+						<th>메시지<em class="required" title="필수"></em></th>
+						<td>
+							<textarea class="textareaR4"  style="resize: none;" name ="content" ></textarea>
+							<span name="count">0</span> / 2000 byte
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</form>
 		</div>
 		</div>
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-success btn-lg" id="btnSendSms">발송</button>
+				<button type="button" class="btn btn-gray btn-lg" onclick="uifnPopupClose('popupLmsForm')">취소</button>
+			</li>
+		</ul>
 		<!-- //CONTENT -->
 		<!-- //CONTENT -->
 	</div>
 	</div>
 </div>
 </div>

+ 69 - 15
src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html

@@ -27,6 +27,7 @@
 
 
 	<!-- 검색조건 영역 -->
 	<!-- 검색조건 영역 -->
 	<form id="searchForm" name="searchForm" action="#" th:action="@{'/display/category/goods/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
 	<form id="searchForm" name="searchForm" action="#" th:action="@{'/display/category/goods/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<input type="hidden" id="cateLeafYn" value="N"/>
 		<div class="panelStyle">
 		<div class="panelStyle">
 			<input type="hidden" id="searchGb" name="searchGb" />
 			<input type="hidden" id="searchGb" name="searchGb" />
 			<table class="frmStyle" aria-describedby="검색조건">
 			<table class="frmStyle" aria-describedby="검색조건">
@@ -99,9 +100,9 @@
 		</ul>
 		</ul>
 		<ul class="panelBar">
 		<ul class="panelBar">
 			<li class="aR" id="btnGoodsEdit" style="display:none">
 			<li class="aR" id="btnGoodsEdit" style="display:none">
-				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnAddGoods">상품추가</button>
-				<!-- <button type="button" class="btn btn-primary btn-lg" id="btnDispChange">순서변경</button>
-                <button type="button" class="btn btn-primary btn-lg" id="btnSelectTop">선택최상위로</button> -->
+				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnAddGoods" style="display:none">상품추가</button>
+				<button type="button" class="btn btn-primary btn-lg" id="btnDispChange">순서변경</button>
+                <button type="button" class="btn btn-primary btn-lg" id="btnSelectTop">선택최상위로</button>
 				<button type="button" class="btn btn-danger btn-lg" id="btnSelectDel">선택삭제</button>
 				<button type="button" class="btn btn-danger btn-lg" id="btnSelectDel">선택삭제</button>
 			</li>
 			</li>
 		</ul>
 		</ul>
@@ -110,17 +111,45 @@
 	<!-- 상품이동/복사 -->
 	<!-- 상품이동/복사 -->
 	<div class="panelStyle" id="addCategory" style="display:none">
 	<div class="panelStyle" id="addCategory" style="display:none">
 		<form id="saveForm" name="saveForm" action="#" th:action="@{'/display/goods/category/save'}">
 		<form id="saveForm" name="saveForm" action="#" th:action="@{'/display/goods/category/save'}">
-
+			<ul class="panelBar">
+				<li>
+					<strong>* 상품 선택 후 하단 leaf 카테고리 선택시 상품이동/ 상품복사 가능합니다.</strong>
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnMoveGoods">상품이동</button>
+					<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnCopyGoods">상품복사</button>
+				</li>
+			</ul>
+
+			<table class="frmStyle">
+				<colgroup>
+					<col style="width:20%"/>
+					<col style="width:20%"/>
+					<col style="width:20%"/>
+					<col style="width:20%"/>
+					<col style="width:20%"/>
+				</colgroup>
+				<tr>
+					<th>카테고리구분</th>
+					<th>카테고리1</th>
+					<th>카테고리2</th>
+					<th>카테고리3</th>
+					<th>카테고리4</th>
+				</tr>
+				<tr>
+					<td>
+						<select>
+							<option value="">[카테고리구분]</option>
+							<option th:if="${cateGbList}" th:each="oneData, status : ${cateGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>
+					<td>2</td>
+					<td>3</td>
+					<td>4</td>
+					<td>5</td>
+				</tr>
+			</table>
 		</form>
 		</form>
-
-		<!-- 버튼 배치 영역 -->
-		<ul class="panelBar">
-			<li class="right">
-				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnMoveGoods">상품이동</button>
-				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnCopyGoods">상품복사</button>
-			</li>
-		</ul>
-		<!-- //버튼 배치 영역 -->
 	</div>
 	</div>
 	<!-- 상품이동/복사 -->
 	<!-- 상품이동/복사 -->
 	</form>
 	</form>
@@ -168,10 +197,23 @@
 		if (gagajf.isNull(val)) {
 		if (gagajf.isNull(val)) {
 			if (selLvl > 1) {
 			if (selLvl > 1) {
 				selLvl = selLvl - 1;
 				selLvl = selLvl - 1;
-				$("#goodsSearch").show();
-				$("#btnGoodsEdit").show();
+				if(gagajf.isNull($("#selCate2").val())){
+					$("#goodsSearch").hide();
+					$("#btnGoodsEdit").hide();
+					gagaPaging.load(1);
+				}
 			} else {
 			} else {
 				selLvl = 1;
 				selLvl = 1;
+				$("#goodsSearch").hide();
+				$("#btnGoodsEdit").hide();
+			}
+		}else{
+			if (selLvl > 1) {
+				$("#goodsSearch").show();
+				$("#btnGoodsEdit").show();	// 순서변경,선택최상위로,선택삭제
+			}else{
+				$("#goodsSearch").hide();
+				$("#btnGoodsEdit").hide();
 			}
 			}
 		}
 		}
 		$('#searchForm input[name=selLvl]').val(selLvl);
 		$('#searchForm input[name=selLvl]').val(selLvl);
@@ -211,6 +253,11 @@
 
 
 		// 대카테고리 이상이면 상품 조회해서 그리드
 		// 대카테고리 이상이면 상품 조회해서 그리드
 		if(selLvl > 2){
 		if(selLvl > 2){
+			if(data.length<1){
+				$("#cateLeafYn").val('Y');
+			}else{
+				$("#cateLeafYn").val('N');
+			}
 			$('#searchForm input[name=selLvl]').val(selLvl);
 			$('#searchForm input[name=selLvl]').val(selLvl);
 			fnCategoryGoodsListSearch();
 			fnCategoryGoodsListSearch();
 		}
 		}
@@ -219,6 +266,13 @@
 	var fnCategoryGoodsListSearch = function(){
 	var fnCategoryGoodsListSearch = function(){
 		gagaPaging.init('searchForm', fnSearchCallBack, 'categoryGoodsListPagination', $('#searchForm').find('#pageSize').val());
 		gagaPaging.init('searchForm', fnSearchCallBack, 'categoryGoodsListPagination', $('#searchForm').find('#pageSize').val());
 		gagaPaging.load(1);
 		gagaPaging.load(1);
+		if($("#cateLeafYn").val()=='Y'){
+			$("#addCategory").show();	// 상품이동/복사 show
+			$("#btnAddGoods").show();	// [상품추가] show
+		}else{
+			$("#addCategory").hide();	// 상품이동/복사 hide
+			$("#btnAddGoods").hide();	// [상품추가] hide
+		}
 	}
 	}
 
 
 	var fnSearchCallBack = function(result){
 	var fnSearchCallBack = function(result){

+ 30 - 0
src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -1592,6 +1592,8 @@
 			var hidDispYn = $(this).find("input[name=hidDispYn]").val();
 			var hidDispYn = $(this).find("input[name=hidDispYn]").val();
 			var soldoutYn = $(this).find("select[name=soldoutYn]").val();
 			var soldoutYn = $(this).find("select[name=soldoutYn]").val();
 			var hidSoldoutYn = $(this).find("input[name=hidSoldoutYn]").val();
 			var hidSoldoutYn = $(this).find("input[name=hidSoldoutYn]").val();
+			var addPrice = $(this).find("input[name=addPrice]").val();
+			var hidAddPrice = $(this).find("input[name=hidAddPrice]").val();
 
 
 			var editCurrStockQty = $(this).find("input[name=editCurrStockQty]").val();	// 입점 확인용
 			var editCurrStockQty = $(this).find("input[name=editCurrStockQty]").val();	// 입점 확인용
 			var currStockQty = $(this).find("input[name=currStockQty]").val();	// 입점 확인용 (hidden)
 			var currStockQty = $(this).find("input[name=currStockQty]").val();	// 입점 확인용 (hidden)
@@ -1636,6 +1638,28 @@
 				}
 				}
 			}
 			}
 			
 			
+			if(gagajf.isNull(addPrice)){
+				optCheck = true;
+				mcxDialog.alertC("추가가격을 입력해주세요", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#optionList tr").find("input[name=addPrice]").eq(idx).focus();
+					}
+				});
+				return false;
+			}
+			
+			if(gagajf.isNull(dispOrd)){
+				optCheck = true;
+				mcxDialog.alertC("노출순서를 입력해주세요", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#optionList tr").find("input[name=dispOrd]").eq(idx).focus();
+					}
+				});
+				return false;
+			}
+			
 			if(gagajf.isNull(baseStockQty)){
 			if(gagajf.isNull(baseStockQty)){
 				optCheck = true;
 				optCheck = true;
 				mcxDialog.alertC("안전재고를 입력해주세요", {
 				mcxDialog.alertC("안전재고를 입력해주세요", {
@@ -1666,6 +1690,12 @@
 			if (soldoutYn != hidSoldoutYn){
 			if (soldoutYn != hidSoldoutYn){
 				$("#goodsDetailForm input[name=chStockDataYn]").val('Y');
 				$("#goodsDetailForm input[name=chStockDataYn]").val('Y');
 			}
 			}
+			
+			if (addPrice != hidAddPrice){
+				$("#goodsDetailForm input[name=chStockDataYn]").val('Y');
+			}
+			
+			
 
 
 			idx++;
 			idx++;
 		});
 		});

+ 6 - 3
src/main/webapp/WEB-INF/views/goods/GoodsFreeGoodsForm.html

@@ -40,8 +40,6 @@
 					<tr>
 					<tr>
 						<th>업체/브랜드<em class="required" title="필수"></em></th>
 						<th>업체/브랜드<em class="required" title="필수"></em></th>
 						<td colspan="3">
 						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
 							<select name="supplyCompCd" id="supplyCompCd">
 							<select name="supplyCompCd" id="supplyCompCd">
 								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
 								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
@@ -150,6 +148,7 @@
 
 
 <script th:inline="javascript">
 <script th:inline="javascript">
 /*<![CDATA[*/
 /*<![CDATA[*/
+	var sessRoleCd = [[${sessionInfo.roleCd}]];
 	// specify the columns
 	// specify the columns
 	var columnDefs = [
 	var columnDefs = [
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
@@ -256,7 +255,11 @@
 			mcxDialog.alert("검색조건을 입력하세요.");
 			mcxDialog.alert("검색조건을 입력하세요.");
 			return false;
 			return false;
 		}
 		}
-		
+		if($("#searchForm input[name=multiBrand]:checked").length == 0) {
+			mcxDialog.alert("브랜드까지 조회해주세요.");
+			return false;
+		}
+	
 		// 기간 값 체크
 		// 기간 값 체크
 		if (!fnCalendarDateValidation('#sellTerms', 'stDate', 'edDate')){
 		if (!fnCalendarDateValidation('#sellTerms', 'stDate', 'edDate')){
 			return false;
 			return false;

+ 9 - 7
src/main/webapp/WEB-INF/views/goods/GoodsImageForm.html

@@ -14,7 +14,7 @@
  * 1.0  2020.11.27   eskim       최초 작성
  * 1.0  2020.11.27   eskim       최초 작성
  *******************************************************************************
  *******************************************************************************
  -->
  -->
-	<div class="modalPopup" data-width="1280">
+	<div class="modalPopup" data-width="1400" data-height="800">
 		<!-- PANELSTYLE -->
 		<!-- PANELSTYLE -->
 			<div class="panelStyle">
 			<div class="panelStyle">
 				<!-- TITLE -->
 				<!-- TITLE -->
@@ -39,13 +39,13 @@
 					<table class="frmStyle">
 					<table class="frmStyle">
 						<colgroup>
 						<colgroup>
 							<col width="7%"/>
 							<col width="7%"/>
-							<col width="25%"/>
-							<col width="8%"/>
+							<col/>
+							<col width="10%"/>
+							<col width="10%"/>
+							<col width="10%"/>
+							<col width="10%"/>
 							<col width="10%"/>
 							<col width="10%"/>
-							<col width="8%"/>
 							<col width="10%"/>
 							<col width="10%"/>
-							<col width="8%"/>
-							<col/>
 						</colgroup>
 						</colgroup>
 						<tr>
 						<tr>
 							<th>상품코드</th>
 							<th>상품코드</th>
@@ -54,7 +54,8 @@
 							<td th:text="${goodsImg.colorNm}">PINK</td>
 							<td th:text="${goodsImg.colorNm}">PINK</td>
 							<th>대표 이미지순번</th>
 							<th>대표 이미지순번</th>
 							<td><input type="text" class="text-right" name="defaultImgOrd" maxlength="3" th:value="${defaultImgOrd}" required="required" data-valid-type="number" data-valid-name="대표이미지순번"/></td>
 							<td><input type="text" class="text-right" name="defaultImgOrd" maxlength="3" th:value="${defaultImgOrd}" required="required" data-valid-type="number" data-valid-name="대표이미지순번"/></td>
-							<td colspan="2"></td>
+							<th>마우스오버 이미지순번</th>
+							<td><input type="text" class="text-right" name="mouseoverImgOrd" maxlength="3" th:value="${mouseoverImgOrd}" required="required" data-valid-type="number" data-valid-name="마우스오버 이미지순번"/></td>
 						</tr>
 						</tr>
 						<tr>
 						<tr>
 							<th>이미지등록</th>
 							<th>이미지등록</th>
@@ -189,6 +190,7 @@
 				params.sysImgNm = item.name;
 				params.sysImgNm = item.name;
 				params.sysImgUrl = item.url;
 				params.sysImgUrl = item.url;
 				params.defaultImgYn = ($('#goodsImgForm input[name=defaultImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
 				params.defaultImgYn = ($('#goodsImgForm input[name=defaultImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
+				params.mouseoverImgYn = ($('#goodsImgForm input[name=mouseoverImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
 				updatedData.push(params);
 				updatedData.push(params);
 			}
 			}
 		}
 		}

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

@@ -536,7 +536,7 @@
 
 
 	gridOptions.getRowStyle = function(params) {
 	gridOptions.getRowStyle = function(params) {
 		if ("G008_00" == params.data.goodsStat  || "G008_10" == params.data.goodsStat || "G008_20" == params.data.goodsStat || "G008_30" == params.data.goodsStat) {
 		if ("G008_00" == params.data.goodsStat  || "G008_10" == params.data.goodsStat || "G008_20" == params.data.goodsStat || "G008_30" == params.data.goodsStat) {
-			return { background: '#23c6c8' };
+			return { background: '#B5EAD7' };
 		}
 		}
 	}
 	}
 
 

+ 2 - 2
src/main/webapp/WEB-INF/views/goods/GoodsMassRegisterForm.html

@@ -26,7 +26,7 @@
 		<form id="massForm" name="massForm" >
 		<form id="massForm" name="massForm" >
 		<div class="panelStyle">
 		<div class="panelStyle">
 			<ul class="notice">
 			<ul class="notice">
-				<li>상품을 대량으로 등록하는 페이지입니다.</li>
+				<li>상품을 대량으로 수정하는 페이지입니다.</li>
 				<li>상품을 등록 할 경우 [승인대기] 상태이며, STYLE 관리자의 [승인완료] 상태 변경 후 FRONT애 노출이 가능합니다.</li>
 				<li>상품을 등록 할 경우 [승인대기] 상태이며, STYLE 관리자의 [승인완료] 상태 변경 후 FRONT애 노출이 가능합니다.</li>
 				<li><th:block th:if="${wmsSyncYn == 'N'}"><em><b>WMS연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
 				<li><th:block th:if="${wmsSyncYn == 'N'}"><em><b>WMS연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
 			</ul>
 			</ul>
@@ -42,7 +42,7 @@
 								}" 
 								}" 
 							th:style="'padding-left:80px;'">
 							th:style="'padding-left:80px;'">
 						<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF014');">상품대량수정 등록양식 다운로드</button>
 						<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF014');">상품대량수정 등록양식 다운로드</button>
-						<button th:if="${wmsSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >상품 수정</button>
+						<button th:if="${wmsSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >대량상품 수정</button>
 					</span>
 					</span>
 				</li>
 				</li>
 			</ul>
 			</ul>

+ 11 - 22
src/main/webapp/WEB-INF/views/goods/NotiinfoForm.html

@@ -32,16 +32,17 @@
 			<ul class="boxContent">
 			<ul class="boxContent">
 				<li class="boxContentBtnT">
 				<li class="boxContentBtnT">
 					<span style="padding:5.5px 15px; background:#e9ecfb; border-top:1px solid #dae0fd; border-bottom:0.5px solid #dae0fd;">업체</span>
 					<span style="padding:5.5px 15px; background:#e9ecfb; border-top:1px solid #dae0fd; border-bottom:0.5px solid #dae0fd;">업체</span>
-					<select name="supplyVendorCd" id="supplyVendorCd">
-						<option value="SV0001" selected="selected">한세엠케이</option>
-						<option value="SV0002">한세드림</option>
+					<select name="supplyCompCd" id="supplyCompCd">
+						<option value="1003" selected="selected">한세드림</option>
+						<option value="1004">(주)에프알제이</option>
+						<option value="1005">(주)엠케이트렌드</option>
 						<option value="E" >입점</option>
 						<option value="E" >입점</option>
 					</select>
 					</select>
 				</li>
 				</li>
 				<li class="boxContentTop">
 				<li class="boxContentTop">
 					<table class="w100p">
 					<table class="w100p">
 						<colgroup>
 						<colgroup>
-							<col style="width:39%;"/>
+							<col style="width:45%;"/>
 							<col style="width:2%;"/>
 							<col style="width:2%;"/>
 							<col/>
 							<col/>
 							<col style="width:10%;"/>
 							<col style="width:10%;"/>
@@ -102,18 +103,6 @@
 			cellEditor: 'textCellEditor',
 			cellEditor: 'textCellEditor',
 			cellEditorParams: { maxlength: 500, required: true }
 			cellEditorParams: { maxlength: 500, required: true }
 		},
 		},
-		{headerName: "필수여부", field: "reqYn" , width: 110, cellClass: 'text-center',editable: false,
-			cellEditor: 'agRichSelectCellEditor',
-			cellEditorParams: { values: gagaAgGrid.extractValues(useYnList), required: true },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(useYnList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(useYnList, params.newValue); }
-		},
-		{headerName: "노출여부", field: "dispYn" , width: 110, cellClass: 'text-center',editable: true,
-			cellEditor: 'agRichSelectCellEditor',
-			cellEditorParams: { values: gagaAgGrid.extractValues(useYnList), required: true },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(useYnList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(useYnList, params.newValue); }
-		},
 		{headerName: "노출순서", field: "dispOrd" , width: 110, cellClass: 'text-center',editable: true,
 		{headerName: "노출순서", field: "dispOrd" , width: 110, cellClass: 'text-center',editable: true,
 			cellEditor: 'textCellEditor',
 			cellEditor: 'textCellEditor',
 			cellEditorParams: { maxlength: 3, validType: 'integer', required: true }
 			cellEditorParams: { maxlength: 3, validType: 'integer', required: true }
@@ -121,7 +110,7 @@
 		{headerName: "등록일자", field: "regDt" , width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "등록일자", field: "regDt" , width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "수정일자", field: "udtDt", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "수정일자", field: "udtDt", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "niClsfCd", field: "niClsfCd", hide: true},
 		{headerName: "niClsfCd", field: "niClsfCd", hide: true},
-		{headerName: "supplyVendorCd", field: "supplyVendorCd", hide: true}
+		{headerName: "supplyCompCd", field: "supplyCompCd", hide: true}
 	];
 	];
 
 
 	// Get GridOptions
 	// Get GridOptions
@@ -150,11 +139,11 @@
 		var formId = '#searchForm';
 		var formId = '#searchForm';
 		$('#searchForm input[name=niClsfCd]').val('');
 		$('#searchForm input[name=niClsfCd]').val('');
 		
 		
-		if (gagajf.isNull($('#searchForm select[name=supplyVendorCd]').val())){
+		if (gagajf.isNull($('#searchForm select[name=supplyCompCd]').val())){
 			mcxDialog.alertC("업체를 선택해 주세요.", {
 			mcxDialog.alertC("업체를 선택해 주세요.", {
 				sureBtnText: "확인",
 				sureBtnText: "확인",
 				sureBtnClick: function() {
 				sureBtnClick: function() {
-					$('#searchForm select[name=supplyVendorCd]').focus();
+					$('#searchForm select[name=supplyCompCd]').focus();
 				}
 				}
 			});
 			});
 			return;
 			return;
@@ -192,9 +181,9 @@
 		});
 		});
 		
 		
 		var niClsfCd = $('#searchForm input[name=niClsfCd]').val();
 		var niClsfCd = $('#searchForm input[name=niClsfCd]').val();
-		var supplyVendorCd = $('#searchForm select[name=supplyVendorCd]').val();
+		var supplyCompCd = $('#searchForm select[name=supplyCompCd]').val();
 		
 		
-		var data = { crud: "C", niItemCd: "", niContent: "", dispOrd: Number(maxDispOrd)+1, niClsfCd: niClsfCd, supplyVendorCd: supplyVendorCd};
+		var data = { crud: "C", niItemCd: "", niContent: "", dispOrd: Number(maxDispOrd)+1, niClsfCd: niClsfCd, supplyCompCd: supplyCompCd};
 		
 		
 		//그리드 마지막에 추가해야함
 		//그리드 마지막에 추가해야함
 		gridNotiItemlOptions.api.updateRowData({add: [data], addIndex: 0});
 		gridNotiItemlOptions.api.updateRowData({add: [data], addIndex: 0});
@@ -299,7 +288,7 @@
 		fnNotiItemlSearch($('#searchForm input[name=niClsfCd]').val());
 		fnNotiItemlSearch($('#searchForm input[name=niClsfCd]').val());
 	}
 	}
 	
 	
-	$("#supplyVendorCd").on("change", function(){
+	$("#supplyCompCd").on("change", function(){
 		fnSearch();
 		fnSearch();
 	});
 	});
 	
 	

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

@@ -30,10 +30,10 @@
 				<ul class="panelBar">
 				<ul class="panelBar">
 					<li>
 					<li>
 						<h3>업체명</h3>
 						<h3>업체명</h3>
-						<select name="supplyVendorCd" id="supplyVendorCd">
-							<option value="SV0001" selected="selected">한세엠케이</option>
-							<option value="SV0002">한세드림</option>
-							<option value="S006">FRJ</option>
+						<select name="supplyCompCd" id="supplyCompCd">
+							<option value="1003" selected="selected">한세드림</option>
+							<option value="1004">(주)에프알제이</option>
+							<option value="1005">(주)엠케이트렌드</option>
 						</select>
 						</select>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 					</li>
 					</li>
@@ -89,7 +89,7 @@
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 			}
 		},
 		},
-		{headerName: "supplyVendorCd", field: "supplyVendorCd", hide: true}
+		{headerName: "supplyCompCd", field: "supplyCompCd", hide: true}
 	];
 	];
 
 
 	// Get GridOptions
 	// Get GridOptions
@@ -107,7 +107,7 @@
 
 
 	// 행추가
 	// 행추가
 	$('#btnAddRow').on('click', function() {
 	$('#btnAddRow').on('click', function() {
-		var data = { wmsColorCd: null, wmsColorNm: null, colorCd: null, useYn: "Y", supplyVendorCd: $('#supplyVendorCd').val() };
+		var data = { wmsColorCd: null, wmsColorNm: null, colorCd: null, useYn: "Y", supplyCompCd: $('#supplyCompCd').val() };
 		gagaAgGrid.addRowData(gridOptions, data, "wmsColorCd");
 		gagaAgGrid.addRowData(gridOptions, data, "wmsColorCd");
 	});
 	});
 
 
@@ -164,7 +164,7 @@
 	});
 	});
 	
 	
 	//업체변경시
 	//업체변경시
-	$("#supplyVendorCd").on("change", function(){
+	$("#supplyCompCd").on("change", function(){
 		fnSearch();
 		fnSearch();
 	});
 	});
 	
 	

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

@@ -30,10 +30,10 @@
 				<ul class="panelBar">
 				<ul class="panelBar">
 					<li>
 					<li>
 						<h3>업체명</h3>
 						<h3>업체명</h3>
-						<select name="supplyVendorCd" id="supplyVendorCd">
-							<option value="SV0001" selected="selected">한세엠케이</option>
-							<option value="SV0002">한세드림</option>
-							<option value="S006">FRJ</option>
+						<select name="supplyCompCd" id="supplyCompCd">
+							<option value="1003" selected="selected">한세드림</option>
+							<option value="1004">(주)에프알제이</option>
+							<option value="1005">(주)엠케이트렌드</option>
 						</select>
 						</select>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 					</li>
 					</li>
@@ -89,7 +89,7 @@
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 			}
 		},
 		},
-		{headerName: "supplyVendorCd", field: "supplyVendorCd", hide: true}
+		{headerName: "supplyCompCd", field: "supplyCompCd", hide: true}
 	];
 	];
 
 
 	// Get GridOptions
 	// Get GridOptions
@@ -107,7 +107,7 @@
 
 
 	// 행추가
 	// 행추가
 	$('#btnAddRow').on('click', function() {
 	$('#btnAddRow').on('click', function() {
-		var data = { wmsSeasonCd: null, wmsSeasonNm: null, seasonCd: null, useYn: "Y", supplyVendorCd: $('#supplyVendorCd').val() };
+		var data = { wmsSeasonCd: null, wmsSeasonNm: null, seasonCd: null, useYn: "Y", supplyCompCd: $('#supplyCompCd').val() };
 		gagaAgGrid.addRowData(gridOptions, data, "wmsSeasonCd");
 		gagaAgGrid.addRowData(gridOptions, data, "wmsSeasonCd");
 	});
 	});
 
 
@@ -164,7 +164,7 @@
 	});
 	});
 	
 	
 	//업체변경시
 	//업체변경시
-	$("#supplyVendorCd").on("change", function(){
+	$("#supplyCompCd").on("change", function(){
 		fnSearch();
 		fnSearch();
 	});
 	});
 	
 	

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

@@ -30,10 +30,10 @@
 				<ul class="panelBar">
 				<ul class="panelBar">
 					<li>
 					<li>
 						<h3>업체명</h3>
 						<h3>업체명</h3>
-						<select name="supplyVendorCd" id="supplyVendorCd">
-							<option value="SV0001" selected="selected">한세엠케이</option>
-							<option value="SV0002">한세드림</option>
-							<option value="S006">FRJ</option>
+						<select name="supplyCompCd" id="supplyCompCd">
+							<option value="1003" selected="selected">한세드림</option>
+							<option value="1004">(주)에프알제이</option>
+							<option value="1005">(주)엠케이트렌드</option>
 						</select>
 						</select>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 					</li>
 					</li>
@@ -89,7 +89,7 @@
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 			}
 		},
 		},
-		{headerName: "supplyVendorCd", field: "supplyVendorCd", hide: true}
+		{headerName: "supplyCompCd", field: "supplyCompCd", hide: true}
 	];
 	];
 
 
 	// Get GridOptions
 	// Get GridOptions
@@ -107,7 +107,7 @@
 
 
 	// 행추가
 	// 행추가
 	$('#btnAddRow').on('click', function() {
 	$('#btnAddRow').on('click', function() {
-		var data = { wmsStyleYearCd: null, wmsStyleYearNm: null, colorCd: null, useYn: "Y", supplyVendorCd: $('#supplyVendorCd').val() };
+		var data = { wmsStyleYearCd: null, wmsStyleYearNm: null, colorCd: null, useYn: "Y", supplyCompCd: $('#supplyCompCd').val() };
 		gagaAgGrid.addRowData(gridOptions, data, "wmsStyleYearCd");
 		gagaAgGrid.addRowData(gridOptions, data, "wmsStyleYearCd");
 	});
 	});
 
 
@@ -164,7 +164,7 @@
 	});
 	});
 	
 	
 	//업체변경시
 	//업체변경시
-	$("#supplyVendorCd").on("change", function(){
+	$("#supplyCompCd").on("change", function(){
 		fnSearch();
 		fnSearch();
 	});
 	});
 	
 	

+ 62 - 38
src/main/webapp/WEB-INF/views/marketing/CardInterestForm.html

@@ -101,29 +101,21 @@
 			valueGetter: function(params) { return cfnGridNumner('cardInterestSearchForm',params.node.rowIndex, 'A');}
 			valueGetter: function(params) { return cfnGridNumner('cardInterestSearchForm',params.node.rowIndex, 'A');}
 		},
 		},
 		{headerName: "프로모션ID", field: "cardPrmtSq", width: 130, cellClass: 'text-center'},
 		{headerName: "프로모션ID", field: "cardPrmtSq", width: 130, cellClass: 'text-center'},
-		{headerName: "프로모션명", field: "prmtNm", width: 140, cellClass: 'text-center'
+		{headerName: "프로모션명", field: "prmtNm", width: 200, cellClass: 'text-center'
 			,cellRenderer: function(params) {
 			,cellRenderer: function(params) {
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
 			}
 		},
 		},
-		{headerName: "노출여부", field: "dispYn", width: 180, cellClass: 'text-center'},
-		{headerName: "시작일", field: "prmtStd", width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
-			}
-		},
-		{headerName: "종료일", field: "prmtEdd", width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
-			}
-		},
-		{headerName: "수정자", field: "updNm" , width: 100, cellClass: 'text-center'},
+		{headerName: "노출여부", field: "dispYn", width: 100, cellClass: 'text-center'},
+		{headerName: "시작일", field: "prmtStd", width: 120, cellClass: 'text-center'},
+		{headerName: "종료일", field: "prmtEdd", width: 120, cellClass: 'text-center'},
+		{headerName: "수정자", field: "updNm" , width: 150, cellClass: 'text-center'},
 		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
 		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) {
 			cellRenderer: function(params) {
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 			}
 		},
 		},
-		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
 		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) {
 			cellRenderer: function(params) {
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
@@ -140,9 +132,8 @@
 
 
 	// Row Click
 	// Row Click
 	gridOptions.onCellClicked = function(event) {
 	gridOptions.onCellClicked = function(event) {
-		var goodsCd = event.data.goodsCd;
 		if (event.colDef.field == "prmtNm"){
 		if (event.colDef.field == "prmtNm"){
-			
+			cardInterestPopup(event.data.cardPrmtSq);
 		}
 		}
 	}
 	}
 
 
@@ -255,10 +246,9 @@
 		
 		
 		cfnOpenModalPopup(actionUrl, 'popupCardInterest'); 
 		cfnOpenModalPopup(actionUrl, 'popupCardInterest'); 
 	}
 	}
-	
-	
-	//카드 프로모션 삭제
-	$('#btnCardPromotionDelete').click(function(e) {
+
+	//카드 프로모션 비노출
+	$('#btnCardPromotionDispUpdate').click(function(e) {
 		//상품선택여부 확인처리 추가
 		//상품선택여부 확인처리 추가
 		var selectedData = gridOptions.api.getSelectedRows();
 		var selectedData = gridOptions.api.getSelectedRows();
 
 
@@ -267,32 +257,68 @@
 			return false;
 			return false;
 		}
 		}
 		
 		
-		var arrGoodsCd = [];
-		var arrGoodsTnmResSq = [];
+		var arrCardPrmtSq = [];
 		var chkFlag = false;
 		var chkFlag = false;
-		//selectedData = gagaAgGrid.getAllRowData(gridOptions);
 		$.each(selectedData, function(idx, item) {
 		$.each(selectedData, function(idx, item) {
 			
 			
-			if (gagajf.isNull(item.goodsTnmResSq) || item.goodsTnmResSq == "0"){
+			var toDateStr = new Date().format("YYYYMMDD");
+			if (toDateStr > item.prmtEdd.replace(/-/gi,'') ){
 				chkFlag = true;
 				chkFlag = true;
-				mcxDialog.alert(item.goodsCd +"상품은 상품타이틀이 예약된 상품이 아닙니다.");
+				mcxDialog.alertC("종료된 무이자할부정보는 삭제할 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						gridOptions.api.setFocusedCell(idx, "prmtEdd", null);
+					}
+				});
 				return false;
 				return false;
 			}
 			}
+		
+			arrCardPrmtSq.push(item.cardPrmtSq);
+		});
+
+		if (chkFlag){
+			return;
+		}
+		
+		mcxDialog.confirm('비노출 처리 하시겠습니까? ',  {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {arrCardPrmtSq : arrCardPrmtSq};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/marketing/card/promotion/dispYn/update', jsonData, fnCardPromotionDeleteCollBack);
+			}
+		});
+		
+	});
+	
+	//카드 프로모션 삭제
+	$('#btnCardPromotionDelete').click(function(e) {
+		//상품선택여부 확인처리 추가
+		var selectedData = gridOptions.api.getSelectedRows();
+
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return false;
+		}
+		
+		var arrCardPrmtSq = [];
+		var chkFlag = false;
+		$.each(selectedData, function(idx, item) {
 			
 			
-			var toDateStr = new Date().format("YYYYMMDDHHmmss");
-			if (toDateStr > item.applyEddt){
+			var toDateStr = new Date().format("YYYYMMDD");
+			if (toDateStr > item.prmtEdd.replace(/-/gi,'') ){
 				chkFlag = true;
 				chkFlag = true;
-				mcxDialog.alertC("종료된 예약 상품은 삭제할 수 없습니다.", {
+				mcxDialog.alertC("종료된 무이자할부정보는 삭제할 수 없습니다.", {
 					sureBtnText: "확인",
 					sureBtnText: "확인",
 					sureBtnClick: function() {
 					sureBtnClick: function() {
-						$('#goodsRsvtTnmForm input[name=applyEdYMD]').focus();
+						gridOptions.api.setFocusedCell(idx, "prmtEdd", null);
 					}
 					}
 				});
 				});
 				return false;
 				return false;
 			}
 			}
 		
 		
-			arrGoodsCd.push(item.goodsCd);
-			arrGoodsTnmResSq.push(item.goodsTnmResSq);
+			arrCardPrmtSq.push(item.cardPrmtSq);
 		});
 		});
 
 
 		if (chkFlag){
 		if (chkFlag){
@@ -303,18 +329,15 @@
 			cancelBtnText: "취소",
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnText: "확인",
 			sureBtnClick: function(){
 			sureBtnClick: function(){
-				var data = {arrGoodsCd : arrGoodsCd
-						,arrGoodsTnmResSq : arrGoodsTnmResSq
-			};
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit('/goods/title/reserve/delete', jsonData, fnCardPromotionDeleteCollBack);
+				var data = {arrCardPrmtSq : arrCardPrmtSq};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/marketing/card/promotion/delete', jsonData, fnCardPromotionDeleteCollBack);
 			}
 			}
 		});
 		});
 	});
 	});
 	
 	
 	var fnCardPromotionDeleteCollBack = function(){
 	var fnCardPromotionDeleteCollBack = function(){
-		//fnCardPromotionListSearch($();
+		fnCardPromotionListSearch();
 	}
 	}
 	
 	
 	$(document).ready(function() {
 	$(document).ready(function() {
@@ -322,6 +345,7 @@
 		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '기간', 'X');
 		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '기간', 'X');
 		var chkBeforSkipFlag = '&nbsp;&nbsp;<label class="chkBox"><input type="checkbox" name="beforSkipFlag" value="Y" >이전데이터 제외</label>';
 		var chkBeforSkipFlag = '&nbsp;&nbsp;<label class="chkBox"><input type="checkbox" name="beforSkipFlag" value="Y" >이전데이터 제외</label>';
 		$("#cardInterestSearchForm").find('#sellTerms').append(chkBeforSkipFlag);
 		$("#cardInterestSearchForm").find('#sellTerms').append(chkBeforSkipFlag);
+		gagajf.setDate('#sellTerms','stDate', 'edDate', '7d');
 		
 		
 		// Create a agGrid
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
 		gagaAgGrid.createGrid('gridList', gridOptions);

+ 87 - 29
src/main/webapp/WEB-INF/views/marketing/CardInterestPopupForm.html

@@ -21,6 +21,9 @@
 				<button type="button" class="close" onclick="uifnPopupClose('popupCardInterest')"><i class="fa fa-times"></i></button>
 				<button type="button" class="close" onclick="uifnPopupClose('popupCardInterest')"><i class="fa fa-times"></i></button>
 			</div>
 			</div>
 			<form id="cardInterestForm" name="cardInterestForm" >
 			<form id="cardInterestForm" name="cardInterestForm" >
+			<input type="hidden" name="prmtGb"  value="B"/> <!-- 무이자 -->
+			<input type="hidden" name="delCardPrmtCdtSq" /> <!-- 삭제할 프로모션조건 -->
+			
 			<div class="panelContent">
 			<div class="panelContent">
 				<table class="frmStyle">
 				<table class="frmStyle">
 					<colgroup>
 					<colgroup>
@@ -31,24 +34,22 @@
 					</colgroup>
 					</colgroup>
 					<tr>
 					<tr>
 						<th>프로모션명<em class="required" title="필수"></em></th>
 						<th>프로모션명<em class="required" title="필수"></em></th>
-						<td><input type="text" class="w500" id="prmtNm" name="prmtNm"  maxlength="30" required="required" data-valid-name="프로모션명" /></td>
+						<td><input type="text" class="w500" id="prmtNm" name="prmtNm"  maxlength="30" required="required" data-valid-name="프로모션명"  th:value="${cardPrmt.prmtNm}"/></td>
 						<th>프로모션ID</th>
 						<th>프로모션ID</th>
-						<td><input type="text" class="w100 formControl" id="cardPrmtSq" name="cardPrmtSq"  readonly/></td>
+						<td><input type="text" class="w100 formControl" id="cardPrmtSq" name="cardPrmtSq"  readonly th:value="${cardPrmt.cardPrmtSq}"/></td>
 					</tr>
 					</tr>
 					<tr>
 					<tr>
 						<th>행사기간<em class="required" title="필수"></em></th>
 						<th>행사기간<em class="required" title="필수"></em></th>
 						<td >
 						<td >
-							<input name="prmtStdYMD" id="prmtStdYMD" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="행사시작일" />
-							<input name="prmtStd" id="prmtStd" type="hidden" />
+							<input name="prmtStd" id="prmtStd" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="행사시작일" th:value="${cardPrmt.prmtStd}"/>
 							~
 							~
-							<input name="prmtEddYMD" id="prmtEddYMD" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="행사종료일" />
-							<input name="prmtEdd" id="prmtEdd" type="hidden" />
+							<input name="prmtEdd" id="prmtEdd" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="행사종료일" th:value="${cardPrmt.prmtEdd}"/>
 						</td>
 						</td>
 						<th>노출여부<em class="required" title="필수"></em></th>
 						<th>노출여부<em class="required" title="필수"></em></th>
 						<td >
 						<td >
-							<label class="rdoBtn"><input type="radio" name="dispYn" value="Y"  checked/>Y</label>
-							<label class="rdoBtn"><input type="radio" name="dispYn" value="N"/>N</label>
-							<input type="hidden" id="dispYnOrg" name="dispYnOrg"/>
+							<label class="rdoBtn"><input type="radio" name="dispYn" value="Y" th:checked="${cardPrmt.dispYn =='Y' or #strings.isEmpty(cardPrmt.dispYn)}"/>Y</label>
+							<label class="rdoBtn"><input type="radio" name="dispYn" value="N" th:checked="${cardPrmt.dispYn =='N'}"/>N</label>
+							<input type="hidden" id="dispYnOrg" name="dispYnOrg" th:value="${cardPrmt.dispYn}"/>
 						</td>
 						</td>
 					</tr>
 					</tr>
 					<tr>
 					<tr>
@@ -63,16 +64,34 @@
 									<col/>
 									<col/>
 								</colgroup>
 								</colgroup>
 								<tbody id="cardContionList">
 								<tbody id="cardContionList">
-								<tr>
+								
+								<tr th:if="${#lists.isEmpty(cardPrmt.cardPrmtCdtList)}" >
 									<td style="height:100px;"></td>
 									<td style="height:100px;"></td>
-									<td><p class="dot">무이자개월 <input type="text" class="w100"  name="minNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월"/>개월 ~
-										<input type="text" class="w100"  name="maxNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월"/>개월</p>
-										<p class="dot">구매금액기준 <input type="text" class="w100"  name="minPayAmt" data-valid-type="numeric" required="required" data-valid-name="구매금액기준"/>원 이상 구매시</p>
-										<p class="dot">대상카드 <button type="button" class="btn btn-base btn-sm" onClick="fnCardAdd(1);">선택</button><br/><span id="arrCardNm1" class="cRed"></span></p>
+									<td><p>무이자개월 <input type="text" class="w100 aR"  name="arrMinNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월" maxlength="3" />개월 ~
+										<input type="text" class="w100 aR"  name="arrMaxNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월"  maxlength="3" />개월</p>
+										<p>구매금액기준 <input type="text" class="w100 aR"  name="arrMinPayAmt" data-valid-type="numeric" required="required" data-valid-name="구매금액기준"  maxlength="10" />원 이상 구매시</p>
+										<p>대상카드 <button type="button" class="btn btn-base btn-sm" onClick="fnCardAdd(1);">선택</button><br/>
+										<span id="arrCardNm1" class="cRed"></span></p>
 										<input type="hidden" name="arrCardCd"/>
 										<input type="hidden" name="arrCardCd"/>
+										<input type="hidden" name="cardPrmtCdtSq" />
 										<input type="hidden" name="cardIdx" id="cardIdx"/>
 										<input type="hidden" name="cardIdx" id="cardIdx"/>
 									</td>
 									</td>
 								</tr>
 								</tr>
+								<tr th:if="${cardPrmt.cardPrmtCdtList}" th:each="cardPrmtCdt, sizeStatus : ${cardPrmt.cardPrmtCdtList}">
+									<td style="height:100px;" th:if="${sizeStatus.first}"></td>
+									<td style="height:100px;" th:unless="${sizeStatus.first}"><button type="button" class="btn icn"><i class="fa fa-times" aria-hidden="true" th:onclick="fnDeleteCardPrmtCdt([[${cardPrmtCdt.cardPrmtCdtSq}]]);$(this).parent().parent().parent().remove();return false;"></i></button></td>
+									<td>
+										<p>무이자개월 <input type="text" class="w100 aR"  name="arrMinNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월" th:value="${cardPrmtCdt.minNoItrt}"  maxlength="3" />개월 ~
+										<input type="text" class="w100 aR"  name="arrMaxNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월" th:value="${cardPrmtCdt.maxNoItrt}" maxlength="3" />개월</p>
+										<p>구매금액기준 <input type="text" class="w100 aR"  name="arrMinPayAmt" data-valid-type="numeric" required="required" data-valid-name="구매금액기준" th:value="${cardPrmtCdt.minPayAmt}"  maxlength="10"/>원 이상 구매시</p>
+										<p>대상카드 <button type="button" class="btn btn-base btn-sm" th:onClick="fnCardAdd([[${sizeStatus.count}]]);">선택</button><br/>
+										<span th:id="${'arrCardNm'+ sizeStatus.count}" class="cRed"  th:text="${cardPrmtCdt.arrCardNm}"></span>
+										</p>
+										<input type="hidden" name="arrCardCd" th:value="${cardPrmtCdt.arrCardCd}"/>
+										<input type="hidden" name="cardPrmtCdtSq" th:value="${cardPrmtCdt.cardPrmtCdtSq}"/>
+										<input type="hidden" name="cardIdx" id="cardIdx" th:if="${sizeStatus.first}"/>
+									</td>
+								</tr>
 								</tbody>
 								</tbody>
 							</table>
 							</table>
 							</div>
 							</div>
@@ -81,17 +100,17 @@
 					<tr>
 					<tr>
 						<th>부분무이자안내</th>
 						<th>부분무이자안내</th>
 						<td  colspan="3">
 						<td  colspan="3">
-						<textarea class="textareaR2" name="note" id="note"></textarea>
+						<textarea class="textareaR2" name="note" id="note" th:field="${cardPrmt.note}"></textarea>
 						</td>
 						</td>
 					</tr>
 					</tr>
 				</table>
 				</table>
 			</div>
 			</div>
 			<ul class="panelBar">
 			<ul class="panelBar">
 				<li class="left">
 				<li class="left">
-					<button type="button" class="btn btn-danger btn-lg" id="btnDeleteGoodsRsvtTnm">상품삭제</button>
+					<button type="button" class="btn btn-danger btn-lg" id="btnCardInterestDelete" th:if="${cardPrmtSq}">삭제</button>
 				</li>	
 				</li>	
 				<li class="right">
 				<li class="right">
-					<button type="button" class="btnRight btn btn-success btn-lg" id="btnSaveCardInterest">적용</button>
+					<button type="button" class="btnRight btn btn-success btn-lg" id="btnCardInterestSave">적용</button>
 				</li>
 				</li>
 			</ul>
 			</ul>
 			</form>	
 			</form>	
@@ -114,11 +133,12 @@
 		var cardHtml = "";
 		var cardHtml = "";
 		cardHtml +='<tr>';
 		cardHtml +='<tr>';
 		cardHtml +='	<td style="height:100px;"><button type="button" class="btn icn"><i class="fa fa-times" aria-hidden="true" onclick="$(this).parent().parent().parent().remove();return false;"></i></button></td>';
 		cardHtml +='	<td style="height:100px;"><button type="button" class="btn icn"><i class="fa fa-times" aria-hidden="true" onclick="$(this).parent().parent().parent().remove();return false;"></i></button></td>';
-		cardHtml +='	<td><p class="dot">무이자개월 <input type="text" class="w100"  name="minNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월"/>개월 ~';
-		cardHtml +='	<input type="text" class="w100"  name="maxNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월"/>개월</p>';
-		cardHtml +='	<p class="dot">구매금액기준 <input type="text" class="w100"  name="minPayAmt" data-valid-type="numeric" required="required" data-valid-name="구매금액기준"/>원 이상 구매시</p>';
-		cardHtml +='	<p class="dot">대상카드 <button type="button" class="btn btn-base btn-sm" onClick="fnCardAdd('+ (len+1) +');">선택</button><br/><span id="arrCardNm'+(len+1)+'" class="cRed"></span></p>';
+		cardHtml +='	<td><p>무이자개월 <input type="text" class="w100 aR"  name="arrMinNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월" maxlength="3" />개월 ~';
+		cardHtml +='	<input type="text" class="w100 aR"  name="arrMaxNoItrt" data-valid-type="numeric" required="required" data-valid-name="무이자개월" maxlength="3" />개월</p>';
+		cardHtml +='	<p>구매금액기준 <input type="text" class="w100 aR"  name="arrMinPayAmt" data-valid-type="numeric" required="required" data-valid-name="구매금액기준"  maxlength="10"/>원 이상 구매시</p>';
+		cardHtml +='	<p>대상카드 <button type="button" class="btn btn-base btn-sm" onClick="fnCardAdd('+ (len+1) +');">선택</button><br/><span id="arrCardNm'+(len+1)+'" class="cRed"></span></p>';
 		cardHtml +='	<input type="hidden" name="arrCardCd"/>';
 		cardHtml +='	<input type="hidden" name="arrCardCd"/>';
+		cardHtml +='	<input type="hidden" name="cardPrmtCdtSq" />';
 		cardHtml +='	</td>';
 		cardHtml +='	</td>';
 		cardHtml +='</tr>';
 		cardHtml +='</tr>';
 		
 		
@@ -137,11 +157,49 @@
 	var fnCardAddCallBakup = function(arrCardCd, arrCardNm) {
 	var fnCardAddCallBakup = function(arrCardCd, arrCardNm) {
 		var index = $('#cardInterestForm').find('#cardIdx').val();
 		var index = $('#cardInterestForm').find('#cardIdx').val();
 		$('#cardInterestForm').find("#arrCardNm" + (index)).html(arrCardNm);
 		$('#cardInterestForm').find("#arrCardNm" + (index)).html(arrCardNm);
-		$('#cardInterestForm').find("input[name=arrCardCd]").eq(index-1).val(arrCardCd);
-	};
+		$('#cardInterestForm input[name=arrCardCd]').eq(index-1).val(arrCardCd);
+	}
+	
+	// 카드프로모션 조건 삭제항목 설정
+	var fnDeleteCardPrmtCdt = function(cardPrmtCdtSq){
+		var delCardPrmtCdtSq = $('#cardInterestForm input[name=delCardPrmtCdtSq]').val();
+		delCardPrmtCdtSq += "/" + cardPrmtCdtSq; 
+		$('#cardInterestForm input[name=delCardPrmtCdtSq]').val(delCardPrmtCdtSq);
+	}
+	
+	//카드 프로모션 삭제
+	$('#btnCardInterestDelete').click(function(e) {
+		var arrCardPrmtSq = [];
+		
+		var toDateStr = new Date().format("YYYYMMDD");
+		var prmtEdd = $('#cardInterestForm input[name=prmtEdd]').val();
+		if (toDateStr > prmtEdd.replace(/-/gi,'') ){
+			chkFlag = true;
+			mcxDialog.alertC("종료된 무이자할부정보는 삭제할 수 없습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#cardInterestForm input[name=prmtEdd]').focus();
+				}
+			});
+			return false;
+		}
+	
+		arrCardPrmtSq.push($('#cardInterestForm input[name=cardPrmtSq]').val());
+		
+		mcxDialog.confirm('삭제하시겠습니까? <br/> 삭제한 프로모션은 복구할수 없습니다.',  {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {arrCardPrmtSq : arrCardPrmtSq};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/marketing/card/promotion/delete', jsonData, fnSaveCardInterestCallBack);
+			}
+		});
+	});
+	
 	
 	
 	// 저장 클릭 시
 	// 저장 클릭 시
-	$('#btnSaveCardInterest').on('click', function() {
+	$('#btnCardInterestSave').on('click', function() {
 		
 		
 		var optCheck = false;
 		var optCheck = false;
 		// 입력 값 체크
 		// 입력 값 체크
@@ -150,9 +208,9 @@
 		
 		
 		var idx = 0;
 		var idx = 0;
 		$('#cardInterestForm').find('#cardContionList tr').each(function() {
 		$('#cardInterestForm').find('#cardContionList tr').each(function() {
-			var minNoItrt = $(this).find("input[name=minNoItrt]").val();
-			var maxNoItrt = $(this).find("input[name=maxNoItrt]").val();
-			var minPayAmt = $(this).find("input[name=minPayAmt]").val();
+			var minNoItrt = $(this).find("input[name=arrMinNoItrt]").val();
+			var maxNoItrt = $(this).find("input[name=arrMaxNoItrt]").val();
+			var minPayAmt = $(this).find("input[name=arrMinPayAmt]").val();
 			var arrCardCd = $(this).find("input[name=arrCardCd]").val();
 			var arrCardCd = $(this).find("input[name=arrCardCd]").val();
 			
 			
 			if (Number(minNoItrt) > Number(maxNoItrt)){
 			if (Number(minNoItrt) > Number(maxNoItrt)){
@@ -160,7 +218,7 @@
 				mcxDialog.alertC("무이자개월수를 확인해주세요", {
 				mcxDialog.alertC("무이자개월수를 확인해주세요", {
 					sureBtnText: "확인",
 					sureBtnText: "확인",
 					sureBtnClick: function() {
 					sureBtnClick: function() {
-						$('#cardInterestForm').find('#cardContionList tr').find("input[name=maxNoItrt]").eq(idx).focus();
+						$('#cardInterestForm').find('#cardContionList tr').find("input[name=arrMaxNoItrt]").eq(idx).focus();
 					}
 					}
 				});
 				});
 				return false;
 				return false;
@@ -171,7 +229,7 @@
 				mcxDialog.alertC("구매기준금액을 확인해주세요", {
 				mcxDialog.alertC("구매기준금액을 확인해주세요", {
 					sureBtnText: "확인",
 					sureBtnText: "확인",
 					sureBtnClick: function() {
 					sureBtnClick: function() {
-						$('#cardInterestForm').find('#cardContionList tr').find("input[name=minPayAmt]").eq(idx).focus();
+						$('#cardInterestForm').find('#cardContionList tr').find("input[name=arrMinPayAmt]").eq(idx).focus();
 					}
 					}
 				});
 				});
 				return false;
 				return false;

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

@@ -26,7 +26,7 @@
 					<tr>
 					<tr>
 						<td id="cardArea">
 						<td id="cardArea">
 							<th:block th:if="${cardList}" th:each="oneData, status : ${cardList}">
 							<th:block th:if="${cardList}" th:each="oneData, status : ${cardList}">
-							<label class="chkBox" th:classappend="${not #strings.isEmpty(params.arrCard) and  #strings.contains(params.arrCard,oneData.cd)?'checked':''}"><input type="checkbox" name="card" th:value="${oneData.cd}" th:text="${oneData.cdNm}" th:checked="${not #strings.isEmpty(params.arrCard) and  #strings.contains(params.arrCard,oneData.cd)}">국민</label>
+							<label class="chkBox" th:classappend="${not #strings.isEmpty(params.arrCard) and  #strings.contains(params.arrCard,oneData.cd)?'checked':''}"><input type="checkbox" name="card" th:value="${oneData.cd}" th:text="${oneData.cdNm}" th:checked="${not #strings.isEmpty(params.arrCard) and  #strings.contains(params.arrCard,oneData.cd)}"></label>
 							</th:block>
 							</th:block>
 						</td>
 						</td>
 					</tr>
 					</tr>

+ 365 - 0
src/main/webapp/WEB-INF/views/marketing/CardPromotionForm.html

@@ -0,0 +1,365 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CardPromotionForm.html
+ * @desc    : 카드프로모션관리
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.03   eskim       최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<form id="cardPromotionSearchForm" name="cardPromotionSearchForm" action="#" th:action="@{'/marketing/card/promotion/list'}">
+		<input type="hidden" id="prmtGb" name="prmtGb" value="B" /> <!-- 무이자 -->
+ 		<!-- 패널 영역1 -->
+		<div class="panelStyle" >
+			<div class="panelTitle">
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 하나를 꼭 입력해 주세요.</h3>
+			</div>
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col width="10%"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>구분</th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="search"  value="1"  checked/>프로모션ID</label>
+							<label class="rdoBtn"><input type="radio" name="search"  value="2"/>프로모션명</label>
+							<input type="text" class="w300" maxlength="30" name="condition"/>
+						</td>
+					</tr>
+					<tr>
+						<th>기간</th>
+						<td id="sellTerms"></td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
+						<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
+					</li>
+				</ul>	
+			</div>
+			<!-- //검색조건 영역 -->
+		</div>
+		<!-- 패널 영역1 -->
+		<div class="panelStyle">
+			<!-- 검색결과 영역 -->
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-danger btn-lg" id="btnCardPromotionDispUpdate">선택비노출</button>
+					<button type="button" class="btn btn-danger btn-lg" id="btnCardPromotionDelete">선택삭제</button>
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-primary btn-lg" id="btnCardPromotionSave">등록</button>
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<!-- //상단버튼 영역  -->
+			<div id="gridList" style="width: 100%; height: 550px;" class="ag-theme-balham"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="cardListPagination"></div>
+				</li>
+			</ul>
+			<!-- 검색결과 영역 -->
+		</div>
+		</form>
+		<!-- //패널 영역2 -->
+	</div>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var dcGbList = { "1":"즉시할인", "2":"청구할인", "3":"제휴카드" };
+	var columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: 'No', width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return cfnGridNumner('cardPromotionSearchForm',params.node.rowIndex, 'A');}
+		},
+		{headerName: "프로모션ID", field: "cardPrmtSq", width: 130, cellClass: 'text-center'},
+		{headerName: "프로모션명", field: "prmtNm", width: 200, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{headerName: "행사구분", field: "dcGb", width: 120, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(dcGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(dcGbList, params.value); }
+		},
+		{headerName: "할인조건", field: "minPayAmt", width: 150, cellClass: 'text-center'},
+		{headerName: "할인액", field: "dcVal", width: 150, cellClass: 'text-center'},
+		{headerName: "노출여부", field: "dispYn", width: 100, cellClass: 'text-center'},
+		{headerName: "시작일", field: "prmtStd", width: 120, cellClass: 'text-center'},
+		{headerName: "종료일", field: "prmtEdd", width: 120, cellClass: 'text-center'},
+		{headerName: "수정자", field: "updNm" , width: 150, cellClass: 'text-center'},
+		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
+		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		}
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복 선택 가능
+	gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+
+	// Row Click
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field == "prmtNm"){
+			cardPromotionPopup(event.data.cardPrmtSq);
+		}
+	}
+
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		fnInit();
+	});
+	
+	var fnInit = function(){
+		$('#cardPromotionSearchForm')[0].reset();
+	}
+	
+	// 조회클릭시
+	$('#btnSearch').on('click', function() {
+		$("#cardPromotionSearchForm input[name=pageNo]").val('1');
+		fnCardPromotionListSearch();
+	});
+
+	// 조회
+	var fnCardPromotionListSearch = function() {
+		
+		if(!fnConditionCheck()) return;
+		
+		gagaPaging.init('cardPromotionSearchForm', fnSearchCallBack, 'cardListPagination', $('#cardPromotionSearchForm').find('#pageSize').val());
+		gagaPaging.load($("#cardPromotionSearchForm input[name=pageNo]").val());
+	}
+
+	//검색 조건 확인
+	var fnConditionCheck = function(){
+		var formId = '#cardPromotionSearchForm';
+		var form = document.cardPromotionSearchForm;
+
+		var searchFlag = false;
+		var cnt = 0;
+		
+		for (i = 0; i < form.elements.length; i++ ) {
+			var el = form.elements[i];
+			if ($(el).prop("type") == "text" || $(el).prop("type") == "textarea" || ($(el).prop("type") == "select-one" && 
+					el.name != "search" && el.name != "pageSize" && el.name != "beforSkipFlag")) {
+				if (!(el.value == null || el.value == "")) {
+					cnt++;
+				}
+			}
+		}
+		
+		if(cnt > 0) searchFlag = true;
+		
+		if(searchFlag == false){
+			mcxDialog.alert("검색조건을 입력하세요.");
+			return false;
+		}
+		
+		var fromDate = $('#cardPromotionSearchForm input[name=stDate]').val();
+		var toDate = $('#cardPromotionSearchForm input[name=edDate]').val();
+		
+		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
+			
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#cardPromotionSearchForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alert("노출기간 시작일자는 종료일자 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#cardPromotionSearchForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			} 
+		}
+
+		return true;
+	}
+	
+	var fnSearchCallBack = function(result){
+
+		$('#cardPromotionSearchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#cardPromotionSearchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
+		$('#cardPromotionSearchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#cardPromotionSearchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+		gridOptions.api.setRowData(result.cardPromotionList);
+		gagaPaging.createPagination(result.pageing.pageable);
+	}
+	
+	//페이징 
+	$('#cardPromotionSearchForm select[name=pageSize]').on('change', function() {
+		$("#cardPromotionSearchForm input[name=pageNo]").val('1');
+		fnCardPromotionListSearch($("#cardPromotionSearchForm input[name=searchGb]").val());
+	});
+	
+	//카드 무이자 팝업
+	$('#btnCardPromotionSave').click(function(e) {
+		cardPromotionPopup();
+	});
+	
+	var cardPromotionPopup = function(cardPrmtSq){
+		var actionUrl = "/marketing/card/promotion/popup/form/";
+		if (typeof(cardPrmtSq) != 'undefined' && cardPrmtSq != null ){
+			actionUrl += cardPrmtSq;
+		}else{
+			actionUrl += 0;
+		}
+		
+		cfnOpenModalPopup(actionUrl, 'popupCardPromotion'); 
+	}
+
+	//카드 프로모션 비노출
+	$('#btnCardPromotionDispUpdate').click(function(e) {
+		//상품선택여부 확인처리 추가
+		var selectedData = gridOptions.api.getSelectedRows();
+
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return false;
+		}
+		
+		var arrCardPrmtSq = [];
+		var chkFlag = false;
+		$.each(selectedData, function(idx, item) {
+			
+			var toDateStr = new Date().format("YYYYMMDD");
+			if (toDateStr > item.prmtEdd.replace(/-/gi,'') ){
+				chkFlag = true;
+				mcxDialog.alertC("종료된 무이자할부정보는 삭제할 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						gridOptions.api.setFocusedCell(idx, "prmtEdd", null);
+					}
+				});
+				return false;
+			}
+		
+			arrCardPrmtSq.push(item.cardPrmtSq);
+		});
+
+		if (chkFlag){
+			return;
+		}
+		
+		mcxDialog.confirm('비노출 처리 하시겠습니까? ',  {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {arrCardPrmtSq : arrCardPrmtSq};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/marketing/card/promotion/dispYn/update', jsonData, fnCardPromotionDeleteCollBack);
+			}
+		});
+		
+	});
+	
+	//카드 프로모션 삭제
+	$('#btnCardPromotionDelete').click(function(e) {
+		//상품선택여부 확인처리 추가
+		var selectedData = gridOptions.api.getSelectedRows();
+
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return false;
+		}
+		
+		var arrCardPrmtSq = [];
+		var chkFlag = false;
+		$.each(selectedData, function(idx, item) {
+			
+			var toDateStr = new Date().format("YYYYMMDD");
+			if (toDateStr > item.prmtEdd.replace(/-/gi,'') ){
+				chkFlag = true;
+				mcxDialog.alertC("종료된 무이자할부정보는 삭제할 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						gridOptions.api.setFocusedCell(idx, "prmtEdd", null);
+					}
+				});
+				return false;
+			}
+		
+			arrCardPrmtSq.push(item.cardPrmtSq);
+		});
+
+		if (chkFlag){
+			return;
+		}
+		
+		mcxDialog.confirm('삭제하시겠습니까? <br/> 삭제한 프로모션은 복구할수 없습니다.',  {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {arrCardPrmtSq : arrCardPrmtSq};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/marketing/card/promotion/delete', jsonData, fnCardPromotionDeleteCollBack);
+			}
+		});
+	});
+	
+	var fnCardPromotionDeleteCollBack = function(){
+		fnCardPromotionListSearch();
+	}
+	
+	$(document).ready(function() {
+
+		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '기간', 'X');
+		var chkBeforSkipFlag = '&nbsp;&nbsp;<label class="chkBox"><input type="checkbox" name="beforSkipFlag" value="Y" >이전데이터 제외</label>';
+		$("#cardPromotionSearchForm").find('#sellTerms').append(chkBeforSkipFlag);
+		gagajf.setDate('#sellTerms','stDate', 'edDate', '7d');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+
+	});
+
+/*]]>*/
+</script>
+ 	
+</html>

+ 303 - 0
src/main/webapp/WEB-INF/views/marketing/CardPromotionPopupForm.html

@@ -0,0 +1,303 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CardPromotionPopupForm.html
+ * @desc    : 카드프로모션 팝업 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.03   eskim       최초 작성
+ *******************************************************************************
+ -->	
+	<div class="modalPopup" data-width="1000"> <!-- data-width="850"  -->
+		<div class="panelStyle">
+			<div class="panelTitle">
+				<h2>프로모션<th:block th:text="${cardPrmtSq > 0 }?'상세':'등록'"></th:block> </h2>
+				<button type="button" class="close" onclick="uifnPopupClose('popupCardPromotion')"><i class="fa fa-times"></i></button>
+			</div>
+			<form id="cardPromotionForm" name="cardPromotionForm" >
+			<input type="hidden" name="prmtGb"  value="A"/> <!-- 할인 -->
+			<input type="hidden" name="delCardPrmtCdtSq" /> <!-- 삭제할 프로모션조건 -->
+			
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:50%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>프로모션명<em class="required" title="필수"></em></th>
+						<td><input type="text" class="w500" id="prmtNm" name="prmtNm"  maxlength="30" required="required" data-valid-name="프로모션명"  th:value="${cardPrmt.prmtNm}"/></td>
+						<th>프로모션ID</th>
+						<td><input type="text" class="w100 formControl" id="cardPrmtSq" name="cardPrmtSq"  readonly th:value="${cardPrmt.cardPrmtSq}"/></td>
+					</tr>
+					<tr>
+						<th>행사기간<em class="required" title="필수"></em></th>
+						<td >
+							<input name="prmtStd" id="prmtStd" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="행사시작일" th:value="${cardPrmt.prmtStd}"/>
+							~
+							<input name="prmtEdd" id="prmtEdd" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="행사종료일" th:value="${cardPrmt.prmtEdd}"/>
+						</td>
+						<th>노출여부<em class="required" title="필수"></em></th>
+						<td >
+							<label class="rdoBtn"><input type="radio" name="dispYn" value="Y" th:checked="${cardPrmt.dispYn =='Y' or #strings.isEmpty(cardPrmt.dispYn)}"/>Y</label>
+							<label class="rdoBtn"><input type="radio" name="dispYn" value="N" th:checked="${cardPrmt.dispYn =='N'}"/>N</label>
+							<input type="hidden" id="dispYnOrg" name="dispYnOrg" th:value="${cardPrmt.dispYn}"/>
+						</td>
+					</tr>
+					<tr>
+						<th>행사구분<em class="required" title="필수"></em></th>
+						<td colspan="3" >
+							<label class="rdoBtn"><input type="radio" name="dcGb" value="1" th:checked="${cardPrmt.dcGb =='1' or #strings.isEmpty(cardPrmt.dcGb)}" th:disabled="${cardPrmtSq > 0}"/>즉시할인</label>
+							<label class="rdoBtn"><input type="radio" name="dcGb" value="2" th:checked="${cardPrmt.dcGb =='2'}" th:disabled="${cardPrmtSq > 0}"/>청구할인</label>
+							<label class="rdoBtn"><input type="radio" name="dcGb" value="3" th:checked="${cardPrmt.dcGb =='3'}" th:disabled="${cardPrmtSq > 0}"/>제휴카드</label>
+						</td>
+					</tr>
+					<tr>
+						<th>행사조건<em class="required" title="필수"></em></th>
+						<td colspan="3" >
+							<th:block th:if="${#lists.isEmpty(cardPrmt.cardPrmtCdtList)}"  >
+								<span id="contionArea">
+								<label class="rdoBtn"><input type="radio" name="dcWay" value="G240_10" checked/> 정액할인</label>
+								<label class="rdoBtn"><input type="radio" name="dcWay" value="G240_11" />정율할인</label>
+								<p>구매금액기준 <input type="text" class="w100 aR"  name="minPayAmt" data-valid-type="numeric"  data-valid-name="구매금액기준"  maxlength="10"/> 원 이상 구매시
+								<input type="text" class="w100 aR"  name="dcVal" data-valid-type="numeric"  data-valid-name="할인"  maxlength="10"/> 할인(율/액)</p>
+								<p>최대할인금액 <input type="text" class="w100 aR"  name="maxDcAmt" data-valid-type="numeric"  data-valid-name="최대할인금액"  maxlength="10"/> 원</p>
+								</span>
+								<p>대상카드 <button type="button" class="btn btn-base btn-sm" onClick="fnCardAdd(1);">선택</button><br/>
+								<span id="arrCardNm1" class="cRed"></span></p>
+								<input type="hidden" name="arrCardCd"/>
+								<input type="hidden" name="cardPrmtCdtSq" />
+								<input type="hidden" name="cardIdx" id="cardIdx"/>
+							</th:block>
+							<th:block th:if="${cardPrmt.cardPrmtCdtList}" th:each="cardPrmtCdt, sizeStatus : ${cardPrmt.cardPrmtCdtList}">
+								<th:block  th:if="${sizeStatus.first}">
+									<span id="contionArea" th:if="${cardPrmt.dcGb !='3'}">
+									<label class="rdoBtn"><input type="radio" name="dcWay" value="G240_10" th:checked="${cardPrmtCdt.dcWay =='G240_10' or #strings.isEmpty(cardPrmtCdt.dcWay)}"/>정액할인</label>
+									<label class="rdoBtn"><input type="radio" name="dcWay" value="G240_11" th:checked="${cardPrmtCdt.dcWay =='G240_11'}"/>정율할인</label>
+									<p>구매금액기준 <input type="text" class="w100 aR"  name="minPayAmt" data-valid-type="numeric"  data-valid-name="구매금액기준" th:value="${cardPrmtCdt.minPayAmt}" maxlength="10"/> 원 이상 구매시
+									<input type="text" class="w100 aR" name="dcVal" data-valid-type="numeric"  data-valid-name="할인" th:value="${cardPrmtCdt.dcVal}" maxlength="10"/> 할인(율/액)</p>
+									<p>최대할인금액 <input type="text" class="w100 aR"  name="maxDcAmt" data-valid-type="numeric"  data-valid-name="최대할인금액" th:value="${cardPrmtCdt.maxDcAmt}" maxlength="10"/> 원</p>
+									</span>
+									<p>대상카드 <button type="button" class="btn btn-base btn-sm" onClick="fnCardAdd([[${sizeStatus.count}]]);">선택</button><br/>
+									<span th:id="${'arrCardNm'+ sizeStatus.count}" class="cRed"  th:text="${cardPrmtCdt.arrCardNm}"></span>
+									<input type="hidden" name="arrCardCd" th:value="${cardPrmtCdt.arrCardCd}"/>
+									<input type="hidden" name="cardPrmtCdtSq" th:value="${cardPrmtCdt.cardPrmtCdtSq}"/>
+									<input type="hidden" name="cardIdx" id="cardIdx"/>
+								</th:block>
+							</th:block>
+
+						</td>
+					</tr>
+					<tr>
+						<th>연결 URL <div class="iconTooltip">
+									<i class="fa fa-info" aria-hidden="true"></i>
+									<span class="left" style="width:320px;">URL 입력 시 Front에서 바로가기 버튼이 노출됩니다.</span>
+								</div>
+						</th>
+						<td><input type="text" class="w500" id="linkUrl" name="linkUrl"  maxlength="150" data-valid-name="연결URL"  th:value="${cardPrmt.linkUrl}"/></td>
+					</tr>
+					<tr>
+						<th>유의사항</th>
+						<td  colspan="3">
+						<textarea class="textareaR2" name="note" id="note" th:field="${cardPrmt.note}"></textarea>
+						</td>
+					</tr>
+				</table>
+			</div>
+			<ul class="panelBar">
+				<li class="left">
+					<button type="button" class="btn btn-danger btn-lg" id="btnCardInterestDelete" th:if="${cardPrmtSq}">삭제</button>
+				</li>	
+				<li class="right">
+					<button type="button" class="btnRight btn btn-success btn-lg" id="btnCardPromotiontSave">적용</button>
+				</li>
+			</ul>
+			</form>	
+		</div>
+	</div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	//카드조회팝업
+	var fnCardAdd = function(idx){
+		$('#cardPromotionForm').find('#cardIdx').val(idx);
+		var arrCardCd = $('#cardPromotionForm').find("input[name=arrCardCd]").eq(idx-1).val();
+		cfnOpenCardListPopup('fnCardAddCallBakup', arrCardCd);	// /로 구분
+	}
+	
+	// 카드추가/삭제
+	var fnCardAddCallBakup = function(arrCardCd, arrCardNm) {
+		var index = $('#cardPromotionForm').find('#cardIdx').val();
+		$('#cardPromotionForm').find("#arrCardNm" + (index)).html(arrCardNm);
+		$('#cardPromotionForm input[name=arrCardCd]').eq(index-1).val(arrCardCd);
+	}
+	
+	// 카드프로모션 조건 삭제항목 설정
+	var fnDeleteCardPrmtCdt = function(cardPrmtCdtSq){
+		var delCardPrmtCdtSq = $('#cardPromotionForm input[name=delCardPrmtCdtSq]').val();
+		delCardPrmtCdtSq += "/" + cardPrmtCdtSq; 
+		$('#cardPromotionForm input[name=delCardPrmtCdtSq]').val(delCardPrmtCdtSq);
+	}
+	
+	//카드 프로모션 삭제
+	$('#btnCardInterestDelete').click(function(e) {
+		var arrCardPrmtSq = [];
+		
+		var toDateStr = new Date().format("YYYYMMDD");
+		var prmtEdd = $('#cardPromotionForm input[name=prmtEdd]').val();
+		if (toDateStr > prmtEdd.replace(/-/gi,'') ){
+			chkFlag = true;
+			mcxDialog.alertC("종료된 무이자할부정보는 삭제할 수 없습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#cardPromotionForm input[name=prmtEdd]').focus();
+				}
+			});
+			return false;
+		}
+	
+		arrCardPrmtSq.push($('#cardPromotionForm input[name=cardPrmtSq]').val());
+		
+		mcxDialog.confirm('삭제하시겠습니까? <br/> 삭제한 프로모션은 복구할수 없습니다.',  {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {arrCardPrmtSq : arrCardPrmtSq};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/marketing/card/promotion/delete', jsonData, fnSaveCardInterestCallBack);
+			}
+		});
+	});
+	
+	// 행사구분 변경시
+	$("#cardPromotionForm input[name=dcGb]").bind('click change', function () {debugger;
+		var cardPrmtSq = [[${cardPrmtSq}]];
+		// 수정시에는 미 적용
+		if (cardPrmtSq > 0){
+			return;
+		}
+		var radioValue = $(this).val();
+		// 제휴카드일 경우
+		if (radioValue == "3"){ 
+			$("#cardPromotionForm input[name=minPayAmt]").val('');
+			$("#cardPromotionForm input[name=dcVal]").val('');
+			$("#cardPromotionForm input[name=maxDcAmt]").val('');
+			$("#cardPromotionForm").find('#contionArea').removeClass('on').addClass('off');
+		}else{
+			$("#cardPromotionForm").find('#contionArea').removeClass('off').addClass('on');
+		}
+	});
+	
+	// 저장 클릭 시
+	$('#btnCardPromotiontSave').on('click', function() {
+		
+		var optCheck = false;
+		// 입력 값 체크
+		if (!gagajf.validation('#cardPromotionForm'))
+			return false;
+		
+		var idx = 0;
+		$('#cardPromotionForm').find('#cardContionList tr').each(function() {
+			var dcGb = $("#cardPromotionForm input[name=dcGb]").val();
+			var dcWay = $(this).find("input[name=dcWay]").val();
+			var minPayAmt = $(this).find("input[name=minPayAmt]").val();
+			var dcVal = $(this).find("input[name=dcVal]").val();
+			var maxDcAmt = $(this).find("input[name=maxDcAmt]").val();
+			var arrCardCd = $(this).find("input[name=arrCardCd]").val();
+			
+			if ("3" != dcGb){
+				
+				if (gagajf.isNull(minPayAmt) || Number(minPayAmt) < 10000){
+					optCheck = true;
+					mcxDialog.alertC("구매기준금액을 확인해주세요", {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							$('#cardPromotionForm').find('#cardContionList tr').find("input[name=minPayAmt]").eq(idx).focus();
+						}
+					});
+					return false;
+				}
+				
+				if (gagajf.isNull(dcVal)){
+					optCheck = true;
+					mcxDialog.alertC("할인을 확인해주세요", {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							$('#cardPromotionForm').find('#cardContionList tr').find("input[name=dcVal]").eq(idx).focus();
+						}
+					});
+					return false;
+				}
+				
+				
+				if (dcWay == 'G240_11' && (Number(dcVal) > 99)){
+					optCheck = true;
+					mcxDialog.alertC("할인율이 99보다 큽니다.확인해주세요", {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							$('#cardPromotionForm').find('#cardContionList tr').find("input[name=dcVal]").eq(idx).focus();
+						}
+					});
+					return false;
+				}
+				
+				if (gagajf.isNull(maxDcAmt)){
+					optCheck = true;
+					mcxDialog.alertC("최대할인금액을 확인해주세요", {
+						sureBtnText: "확인",
+						sureBtnClick: function() {
+							$('#cardPromotionForm').find('#cardContionList tr').find("input[name=maxDcAmt]").eq(idx).focus();
+						}
+					});
+					return false;
+				}
+				
+			}
+			
+			if (gagajf.isNull(arrCardCd)){
+				optCheck = true;
+				mcxDialog.alert((idx+1)+"번째 행사조건의 대상카드를 선택해주세요")
+				return false;
+			}
+			
+			idx++;
+		});
+		
+		if (optCheck){
+			return false;
+		}
+		
+		mcxDialog.confirm('저장하시겠습니까?',  {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+
+				gagajf.ajaxFormSubmit("/marketing/card/interest/save", "#cardPromotionForm", fnSaveCardInterestCallBack); 
+
+			}
+		});
+	});
+
+	
+	//창종료
+	var fnSaveCardInterestCallBack = function(){
+		fnCardPromotionListSearch(); 	//본창 호출
+		uifnPopupClose('popupCardPromotion');
+		
+	}
+
+	$(document).ready(function() {
+
+	});
+
+/*]]>*/
+</script>
+</html>

Разница между файлами не показана из-за своего большого размера
+ 499 - 133
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html


+ 72 - 0
src/main/webapp/WEB-INF/views/marketing/CouponPubCustListPopupForm.html

@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CouponPubCustListPopupForm.html
+ * @desc    : 쿠폰 발급받은 회원리스트 팝업 화면
+ *============================================================================
+ * ISTYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.03   bin2107       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="960" data-height="500" >
+	<div class="panelStyle" >
+		<div class="panelTitle">
+			<h2>쿠폰 발급받은 회원</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('CpnPubCustListPopup')"><i class="fa fa-times"></i></button>
+		</div>
+		<div class="panelContent">
+			<div id="pubCustgridList" style="width:100%; height:420px;" class="ag-theme-balham"></div>
+		</div>
+	</div>
+</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	var cpnPubCustList = [[${cpnPubCustList}]]; //gagajf.convertToArray([[${cpnPubCustList}]]);
+
+	var columnDefs = [
+		{ headerName: "회원번호" , field:"custNo" , width:100, cellClass:"text-center"} ,
+		{ headerName: "회원명" , field:"custNm" , width:120, cellClass:"text-center" } ,
+		{ headerName: "회원구분" , field:"custGbNm" , width:120, cellClass:"text-center" } ,
+		{ headerName: "회원등급" , field:"custGradeNm" , width:120, cellClass:"text-center" } ,
+		{ headerName: "시작유효기간" , field:"availStdt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.availStdt);
+			}
+		} ,
+		{ headerName: "종료유효기간" , field:"availEddt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.availEddt);
+			}
+		} ,
+		{ headerName: "사용여부" , field:"useYn" , width:120, cellClass:"text-center" } ,
+		/*{ headerName: "사용일" , field:"usedDt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.usedDt);
+			}
+		} ,*/
+		{ headerName: "발급사유" , field:"pubReasonNm" , width:200, cellClass:"text-center"} ,
+		{ headerName: "발급상세사유" , field:"pubReasonDtl" , width:200, cellClass:"text-center"} ,
+		{ headerName: "발급인ID" , field:"regNo" , width:100, cellClass:"text-center"} ,
+		{ headerName: "발급시간" , field:"regDt" , width:150, cellClass:"text-center"
+			,valueGetter	: function (params) {
+				return gagaAgGrid.toDateTimeFormat(params.data.regDt);
+			}
+		}
+	];
+
+	let pubCustGridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	$(document).ready(function(){
+		gagaAgGrid.createGrid('pubCustgridList', pubCustGridOptions);
+		pubCustGridOptions.api.setRowData(cpnPubCustList);
+	});
+
+	/*]]>*/
+</script>
+</html>

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

@@ -22,6 +22,7 @@
 		</div>
 		</div>
 		<div class="panelContent">
 		<div class="panelContent">
 			<form id="custSearchForm" name="custSearchForm" action="#" th:action="@{'/customer/active/list'}" >
 			<form id="custSearchForm" name="custSearchForm" action="#" th:action="@{'/customer/active/list'}" >
+				<input type="hidden" name="cpnPubPopYn" value="Y"/>
 				<table class="frmStyle">
 				<table class="frmStyle">
 					<colgroup>
 					<colgroup>
 						<col width="10%">
 						<col width="10%">
@@ -46,6 +47,7 @@
 							<th>회원구분</th>
 							<th>회원구분</th>
 							<td>
 							<td>
 								<select name="custGb" id="custGb">
 								<select name="custGb" id="custGb">
+									<option value="">전체</option>
 									<option th:if="${usableCustGbList}" th:each="oneData , status : ${usableCustGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 									<option th:if="${usableCustGbList}" th:each="oneData , status : ${usableCustGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 								</select>
 								</select>
 							</td>
 							</td>
@@ -168,13 +170,25 @@
 		}
 		}
 	];
 	];
 
 
-	var pubCustGridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	let pubCustGridOptions = gagaAgGrid.getGridOptions(columnDefs);
 
 
 	// 고객 조회
 	// 고객 조회
 	function fnSearchPubCustList(){
 	function fnSearchPubCustList(){
-		gagaAgGrid.fetch($("#custSearchForm").prop('action') , pubCustGridOptions , '#custSearchForm');
+		//gagaAgGrid.fetch($("#custSearchForm").prop('action') , pubCustGridOptions , '#custSearchForm');
+		gagaPaging.init('custSearchForm', fnSearchCallBack, 'custSearchForm', $('#custSearchForm select[name=pageSize]').val());
+		gagaPaging.load($('#custSearchForm input[name=pageNo]').val());
 	}
 	}
 
 
+	var fnSearchCallBack = function (result) {
+		//$('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		//$('#custActiveForm input[name=pageNo]').val(result.pageing.pageable.pageNo.addComma());
+		//$('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		//$('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+
+		pubCustGridOptions.api.setRowData(result.custList);
+		//gagaPaging.createPagination(result.pageing.pageable);
+	};
+
 	function fnCpnPubCustomer(){
 	function fnCpnPubCustomer(){
 		setReqValue();
 		setReqValue();
 		checkValidation();
 		checkValidation();

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

@@ -856,8 +856,6 @@
 		let selfYn = $("#freeGoodsPromotionForm input[name=selfYn]:checked").val();
 		let selfYn = $("#freeGoodsPromotionForm input[name=selfYn]:checked").val();
 		if(!selfYn || selfYn == "") { selfYn = "N"; }
 		if(!selfYn || selfYn == "") { selfYn = "N"; }
 
 
-		alert($("#freeGoodsPromotionForm select[name=freegiftEdHH]").val());
-
 		let freegiftStdt = $("#freeGoodsPromotionForm input[name=freegiftStDate]").val() + " " + $("#freeGoodsPromotionForm select[name=freegiftStHH]").val() + ":" + $("#freeGoodsPromotionForm select[name=freegiftStMM]").val() + ":00";
 		let freegiftStdt = $("#freeGoodsPromotionForm input[name=freegiftStDate]").val() + " " + $("#freeGoodsPromotionForm select[name=freegiftStHH]").val() + ":" + $("#freeGoodsPromotionForm select[name=freegiftStMM]").val() + ":00";
 		let freegiftEddt = $("#freeGoodsPromotionForm input[name=freegiftEdDate]").val();
 		let freegiftEddt = $("#freeGoodsPromotionForm input[name=freegiftEdDate]").val();
 		if($("#freeGoodsPromotionForm select[name=freegiftEdHH]").val() == "24") {
 		if($("#freeGoodsPromotionForm select[name=freegiftEdHH]").val() == "24") {

+ 312 - 182
src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html

@@ -103,11 +103,6 @@
 						</td>
 						</td>
 					</tr>
 					</tr>
 					<tr>
 					<tr>
-						<th>상품여부<em class="required" title="필수"></em></th>
-						<td>
-							<label class="rdoBtn"><input type="radio" name="multiYn" id="multiYnY" value="Y" checked="checked"/>복합상품</label>
-							<label class="rdoBtn"><input type="radio" name="multiYn" id="multiYnN" value="N"/>단일상품</label>
-						</td>
 						<th>상태<em class="required" title="필수"></em></th>
 						<th>상태<em class="required" title="필수"></em></th>
 						<td>
 						<td>
 							<!-- 상태 입력 : before
 							<!-- 상태 입력 : before
@@ -139,8 +134,10 @@
 								<th>할인 구간</th>
 								<th>할인 구간</th>
 								<td>
 								<td>
 									<div class="padding10">
 									<div class="padding10">
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddSectionRow">행추가</button>
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelSectionRow">행삭제</button>
+										<span class="buttonSpan">
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddSectionRow">행추가</button>
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelSectionRow">행삭제</button>
+										</span>
 										<br/>
 										<br/>
 										<div id="gridSectionGbList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										<div id="gridSectionGbList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 									</div>
 									</div>
@@ -175,19 +172,23 @@
 								<td>
 								<td>
 									<!-- 수정시 프로모션명 입력 : before -->
 									<!-- 수정시 프로모션명 입력 : before -->
 									<div class="padding10" style="display:inline-block;width:49%;">
 									<div class="padding10" style="display:inline-block;width:49%;">
-										<span>공급업체 설정</span>
+										<!--<span>공급업체 설정</span>-->
 										<div class="padding10 inner-tb-solid">
 										<div class="padding10 inner-tb-solid">
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddCompany">업체 추가</button>
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteCompany">선택삭제</button>
+											<span class="buttonSpan">
+												<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddCompany">업체 추가</button>
+												<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteCompany">선택삭제</button>
+											</span>
 											<br/>
 											<br/>
 											<div id="gridFGPromotionCompanyList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 											<div id="gridFGPromotionCompanyList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										</div>
 										</div>
 									</div>
 									</div>
 									<div class="padding10" style="display:inline-block;width:49%;">
 									<div class="padding10" style="display:inline-block;width:49%;">
-										<span>브랜드 설정</span>
+										<!--<span>브랜드 설정</span>-->
 										<div class="padding10 inner-tb-solid">
 										<div class="padding10 inner-tb-solid">
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드 추가</button>
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteBrand">선택삭제</button>
+											<span class="buttonSpan">
+												<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드 추가</button>
+												<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteBrand">선택삭제</button>
+											</span>
 											<br/>
 											<br/>
 											<!-- 브랜드 선택 팝업(단수 선택 팝업... 복수를 새로 만들어야하는지 ? 아니면 변수처리해야하는지 ? -->
 											<!-- 브랜드 선택 팝업(단수 선택 팝업... 복수를 새로 만들어야하는지 ? 아니면 변수처리해야하는지 ? -->
 											<div id="gridFGBrandList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 											<div id="gridFGBrandList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
@@ -199,8 +200,10 @@
 								<th>적용상품</th>
 								<th>적용상품</th>
 								<td>
 								<td>
 									<div class="padding10">
 									<div class="padding10">
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyGoods">상품 추가</button>
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteApplyGoods">선택삭제</button>
+										<span class="buttonSpan">
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyGoods">상품 추가</button>
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteApplyGoods">선택삭제</button>
+										</span>
 										<br/>
 										<br/>
 										<div id="gridFGApplyGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										<div id="gridFGApplyGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 									</div>
 									</div>
@@ -239,8 +242,10 @@
 								<th>제외 대상</th>
 								<th>제외 대상</th>
 								<td>
 								<td>
 									<div class="padding10">
 									<div class="padding10">
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddExceptGoods">상품 추가</button>
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteExtGoods">선택삭제</button>
+										<span class="buttonSpan">
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddExceptGoods">상품 추가</button>
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteExtGoods">선택삭제</button>
+										</span>
 										<br/>
 										<br/>
 										<div id="gridFGExceptGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										<div id="gridFGExceptGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 									</div>
 									</div>
@@ -271,8 +276,10 @@
 								<th>업체 분담율</th>
 								<th>업체 분담율</th>
 								<td>
 								<td>
 									<div class="padding10">
 									<div class="padding10">
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyBurden">업체추가</button>
-										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelApplyBurden">선택삭제</button>
+										<span class="buttonSpan">
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyBurden">업체추가</button>
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelApplyBurden">선택삭제</button>
+										</span>
 										<br/>
 										<br/>
 										<div id="gridApplyBurdenList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										<div id="gridApplyBurdenList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 									</div>
 									</div>
@@ -312,12 +319,12 @@
 		<ul class="panelBar">
 		<ul class="panelBar">
 			<li  class="right">
 			<li  class="right">
 				<button type="button" class="btn btnRight btn-success btn-lg" id="btnSearchList">목록</button>
 				<button type="button" class="btn btnRight btn-success btn-lg" id="btnSearchList">목록</button>
-				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnMorebetterSave">저장</button>
+				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnMorebetterSave" style="display: none;">저장</button>
 				<!--<button type="button" th:if="${mode == 'N'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterSave">저장</button>
 				<!--<button type="button" th:if="${mode == 'N'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterSave">저장</button>
 				<button type="button" th:if="${mode == 'U'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterUpdate">수정</button>-->
 				<button type="button" th:if="${mode == 'U'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterUpdate">수정</button>-->
-				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnChangeStatIng">진행</button>
-				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnMorebetterDelete">삭제</button>
-				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnMorebetterStop">중지</button>
+				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnChangeStatIng" style="display: none;">진행</button>
+				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnMorebetterDelete" style="display: none;">삭제</button>
+				<button type="button" class="btn btnRight btn-success btn-lg tmtbButton" id="btnMorebetterStop" style="display: none;">중지</button>
 			</li>
 			</li>
 		</ul>
 		</ul>
 	</div>
 	</div>
@@ -348,7 +355,8 @@
 		{headerName: "공급처ID", field: "supplyCompCd", width: 120, cellClass: 'text-center'},
 		{headerName: "공급처ID", field: "supplyCompCd", width: 120, cellClass: 'text-center'},
 		{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
 		{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
-		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}
 	];
 	];
 	// 브랜드 리스트 설정
 	// 브랜드 리스트 설정
 	var columnBrandList = [
 	var columnBrandList = [
@@ -357,7 +365,8 @@
 		{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
 		{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
 		{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
 		{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
-		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}
 	];
 	];
 	// 적용상품 리스트 설정
 	// 적용상품 리스트 설정
 	var columnApplyGoodsList = [
 	var columnApplyGoodsList = [
@@ -372,7 +381,8 @@
 		{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
-		{headerName: "실제적용대상 시퀀스", field: "tmtbApplyGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+		{headerName: "실제적용대상 시퀀스", field: "tmtbApplyGoodsSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}
 	];
 	];
 	// 제외상품 리스트 설정
 	// 제외상품 리스트 설정
 	var columnExceptGoodsList = [
 	var columnExceptGoodsList = [
@@ -387,7 +397,8 @@
 		{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
-		{headerName: "실제적용대상 시퀀스", field: "tmtbApplyGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+		{headerName: "실제적용대상 시퀀스", field: "tmtbApplyGoodsSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}
 	];
 	];
 
 
 	// 업체분담율 리스트 설정
 	// 업체분담율 리스트 설정
@@ -406,7 +417,7 @@
 			//cellEditor: 'textCellEditor',
 			//cellEditor: 'textCellEditor',
 			cellEditorParams: { maxlength: 3, validType: 'numeric'}
 			cellEditorParams: { maxlength: 3, validType: 'numeric'}
 		},
 		},
-		{headerName: "사용여부", field: "useYn" , width: 120, cellClass: 'text-center'},
+		{headerName: "사용여부", field: "useYn" , width: 120, cellClass: 'text-center', hide: true},
 		{headerName: "시퀀스", field: "tmtbBurdenSq", width: 150, cellClass: 'text-center', hide: true}
 		{headerName: "시퀀스", field: "tmtbBurdenSq", width: 150, cellClass: 'text-center', hide: true}
 	];
 	];
 
 
@@ -455,7 +466,8 @@
 			cellEditorParams: { maxlength: 14, validType: 'numeric'}
 			cellEditorParams: { maxlength: 14, validType: 'numeric'}
 		},
 		},
 		{headerName: "구간시퀀스", field: "tmtbSectionSq", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "구간시퀀스", field: "tmtbSectionSq", width: 150, cellClass: 'text-center', hide: true},
-		{headerName: "할인값시퀀스", field: "tmtbValSq", width: 150, cellClass: 'text-center', hide: true}
+		{headerName: "할인값시퀀스", field: "tmtbValSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}
 	];
 	];
 	// 다른 다다익선 사용중인 중복상품 엑셀 리스트 설정
 	// 다른 다다익선 사용중인 중복상품 엑셀 리스트 설정
 	var columnDuplicateGoodsList = [
 	var columnDuplicateGoodsList = [
@@ -525,7 +537,6 @@
 			$("input:radio[name='disTmtbStat']:radio[value="+tmtbMstInfo.tmtbStat+"]").prop('checked', true); // 선택하기
 			$("input:radio[name='disTmtbStat']:radio[value="+tmtbMstInfo.tmtbStat+"]").prop('checked', true); // 선택하기
 			$("input:radio[name='sectionGb']:radio[value="+tmtbMstInfo.sectionGb+"]").prop('checked', true); // 선택하기
 			$("input:radio[name='sectionGb']:radio[value="+tmtbMstInfo.sectionGb+"]").prop('checked', true); // 선택하기
 			$("input:radio[name='dcWay']:radio[value="+tmtbMstInfo.dcWay+"]").prop('checked', true); // 선택하기
 			$("input:radio[name='dcWay']:radio[value="+tmtbMstInfo.dcWay+"]").prop('checked', true); // 선택하기
-			$("input:radio[name='multiYn']:radio[value="+tmtbMstInfo.multiYn+"]").prop('checked', true); // 선택하기
 
 
 			let edDtArr = tmtbMstInfo.tmtbEddt.split(" ");
 			let edDtArr = tmtbMstInfo.tmtbEddt.split(" ");
 			if(edDtArr[1] == "23:59:59") {
 			if(edDtArr[1] == "23:59:59") {
@@ -540,9 +551,14 @@
 				$("#btnMorebetterSave").show();		// 저장버튼
 				$("#btnMorebetterSave").show();		// 저장버튼
 				$("#btnChangeStatIng").show();		// 진행버튼
 				$("#btnChangeStatIng").show();		// 진행버튼
 				$("#btnMorebetterDelete").show();	// 삭제버튼
 				$("#btnMorebetterDelete").show();	// 삭제버튼
+				$("#moreBetterForm .buttonSpan").show();	//행추가,삭제버튼
 			}else if(tmtbMstInfo.tmtbStat == "G232_11"){
 			}else if(tmtbMstInfo.tmtbStat == "G232_11"){
-				$("#btnMorebetterSave").show();		// 저장버튼
+				$("#btnMorebetterSave").hide();		// 저장버튼
 				$("#btnMorebetterStop").show();		// 중지버튼
 				$("#btnMorebetterStop").show();		// 중지버튼
+				$("#btnMorebetterDelete").show();	// 삭제버튼
+				$("#moreBetterForm .buttonSpan").hide();	//행추가,삭제버튼
+			}else{
+				$("#moreBetterForm .buttonSpan").hide();	//행추가,삭제버튼
 			}
 			}
 		}
 		}
 
 
@@ -550,6 +566,7 @@
 		if(mode=="N"){
 		if(mode=="N"){
 			$("input:radio[name='disTmtbStat']:radio[value='G232_10']").prop('checked', true); // 선택하기
 			$("input:radio[name='disTmtbStat']:radio[value='G232_10']").prop('checked', true); // 선택하기
 			$("#btnMorebetterSave").show();	// 저장버튼
 			$("#btnMorebetterSave").show();	// 저장버튼
+			$("#moreBetterForm .buttonSpan").show();
 
 
 			if(tmtbMstInfo.eventEdHH == "24"){
 			if(tmtbMstInfo.eventEdHH == "24"){
 				$("#moreBetterForm #eventEdHH option:last").show().prop("selected", true);
 				$("#moreBetterForm #eventEdHH option:last").show().prop("selected", true);
@@ -584,6 +601,8 @@
 			mcxDialog.alert("기본상품을 1개 이상 지정해주세요.");
 			mcxDialog.alert("기본상품을 1개 이상 지정해주세요.");
 			return false;
 			return false;
 		}
 		}
+
+		return true;
 	};
 	};
 
 
 	var fnBurdenValueCheck = function (){
 	var fnBurdenValueCheck = function (){
@@ -597,10 +616,12 @@
 			mcxDialog.alert("업체분담율의 합이 100을 넘을수 없습니다.");
 			mcxDialog.alert("업체분담율의 합이 100을 넘을수 없습니다.");
 			return false;
 			return false;
 		}
 		}
+
+		return true;
 	};
 	};
 
 
-	// 저장
-	$('#btnMorebetterSave').on('click', function() {
+	var fnCheckData = function (){
+		console.log('[fnCheckData]');
 		// validation
 		// validation
 		if (!gagajf.validation('#moreBetterForm'))
 		if (!gagajf.validation('#moreBetterForm'))
 			return false;
 			return false;
@@ -633,6 +654,22 @@
 			return false;
 			return false;
 		}
 		}
 
 
+		// 적용상품 그리드에 기본상품 1개이상 있는지 체크
+		if(!fnGoodsGbCheck()) {
+			return false;
+		}
+
+		// 업체분담율 토탈 100% 넘는지 체크
+		if(!fnBurdenValueCheck()) {
+			return false;
+		}
+
+	};
+
+	// 저장
+	$('#btnMorebetterSave').on('click', function() {
+		fnCheckData();
+
 		// 각 ag-grid list 수량
 		// 각 ag-grid list 수량
 		let allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
 		let allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
 		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
 		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
@@ -646,12 +683,6 @@
 			return false;
 			return false;
 		}
 		}
 
 
-		// 적용상품 그리드에 기본상품 1개이상 있는지 체크
-		fnGoodsGbCheck();
-
-		// 업체분담율 토탈 100% 넘는지 체크
-		fnBurdenValueCheck();
-
 		// 공급업체+브랜드 상품조회
 		// 공급업체+브랜드 상품조회
 		var multiSupplyCompCd = [];
 		var multiSupplyCompCd = [];
 		$.each(allSupplyCompData, function(idx, item) {
 		$.each(allSupplyCompData, function(idx, item) {
@@ -683,10 +714,10 @@
 			, sectionGb : $('input:radio[name="sectionGb"]:checked').val()
 			, sectionGb : $('input:radio[name="sectionGb"]:checked').val()
 			, applyGb : $('input:radio[name="sectionGb"]:checked').val()
 			, applyGb : $('input:radio[name="sectionGb"]:checked').val()
 			, dcWay : $('input:radio[name="dcWay"]:checked').val()
 			, dcWay : $('input:radio[name="dcWay"]:checked').val()
-			, multiYn : $('#moreBetterForm input[name=multiYn]').val()
 			, supplyCompList : allSupplyCompData
 			, supplyCompList : allSupplyCompData
 			, brandList : allBrandData
 			, brandList : allBrandData
 			, applyGoodsList : allApplyGoodsData
 			, applyGoodsList : allApplyGoodsData
+			, gridApplyGoodsList : allApplyGoodsData
 			, exceptGoodsList : allExceptGoodsData
 			, exceptGoodsList : allExceptGoodsData
 			, burdenList : allApplyBurdenData
 			, burdenList : allApplyBurdenData
 			, sectionGbList : allSectionGbData
 			, sectionGbList : allSectionGbData
@@ -702,10 +733,7 @@
 	});
 	});
 
 
 	var fnMorebetterSaveCollback = function(result){
 	var fnMorebetterSaveCollback = function(result){
-		mcxDialog.alert(result.message);
-
 		if(result.duplicateYn == "Y"){
 		if(result.duplicateYn == "Y"){
-			//console.log('duplicateGoodsList Size::'+ result.duplicateGoodsList.length);
 			for(let i=0; i<result.duplicateGoodsList.length; i++){
 			for(let i=0; i<result.duplicateGoodsList.length; i++){
 				gagaAgGrid.addRowData(gridOptionsDuplicateGoodsList, {"goodsCd" : result.duplicateGoodsList[i].goodsCd, "goodsNm" : result.duplicateGoodsList[i].goodsNm});
 				gagaAgGrid.addRowData(gridOptionsDuplicateGoodsList, {"goodsCd" : result.duplicateGoodsList[i].goodsCd, "goodsNm" : result.duplicateGoodsList[i].goodsNm});
 			}
 			}
@@ -806,7 +834,6 @@
 		gridAddGoodsList(gridOptionsFGExceptGoodsList, result , "except");
 		gridAddGoodsList(gridOptionsFGExceptGoodsList, result , "except");
 	};
 	};
 
 
-
 	// ag-grid 상품관련 list 콜백함수
 	// ag-grid 상품관련 list 콜백함수
 	function gridAddGoodsList(OriginGridListOption, result, gubun) {
 	function gridAddGoodsList(OriginGridListOption, result, gubun) {
 		var goodsGbVal = "G800_10";
 		var goodsGbVal = "G800_10";
@@ -865,7 +892,10 @@
 		cfnOpenCompanyListPopup("fnSetPopupApplyBurdenInfo");
 		cfnOpenCompanyListPopup("fnSetPopupApplyBurdenInfo");
 	});
 	});
 
 
-	/*
+	// 할인구간 선택삭제 버튼 클릭시
+	$('#moreBetterForm #btnDelSectionRow').on('click', function() {
+		gridOptionsSectionGbList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsSectionGbList)});
+	});
     // 공급업체 설정 선택삭제 버튼 클릭시
     // 공급업체 설정 선택삭제 버튼 클릭시
     $('#moreBetterForm #btnDeleteCompany').on('click', function() {
     $('#moreBetterForm #btnDeleteCompany').on('click', function() {
         gridOptionsFGCompanyList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGCompanyList)});
         gridOptionsFGCompanyList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGCompanyList)});
@@ -886,7 +916,7 @@
     $('#moreBetterForm #btnDelApplyBurden').on('click', function() {
     $('#moreBetterForm #btnDelApplyBurden').on('click', function() {
         gridOptionsApplyBurdenList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList)});
         gridOptionsApplyBurdenList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList)});
     });
     });
-    */
+
 	//패널영역 줄이기
 	//패널영역 줄이기
 	$(document).on("click",".panelControl .inner-fa-chevron-up", function() {
 	$(document).on("click",".panelControl .inner-fa-chevron-up", function() {
 		$(this).parent().parent().parent().find(".inner-panelContent").slideUp(100);
 		$(this).parent().parent().parent().find(".inner-panelContent").slideUp(100);
@@ -913,39 +943,6 @@
 		gagaAgGrid.addRowData(gridOptionsSectionGbList, data, "sectionVal");
 		gagaAgGrid.addRowData(gridOptionsSectionGbList, data, "sectionVal");
 	});
 	});
 
 
-	// 구간할인 행삭제
-	$('#btnDelSectionRow').on('click', function() {
-		var selectedData = gridOptionsSectionGbList.api.getSelectedRows();
-		if (selectedData.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-
-		var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList, false);
-
-		var arrSectionSq = [];
-
-		$.each(selectedData, function(idx, item) {
-			arrSectionSq.push(item.tmtbSectionSq);
-		});
-
-		if (removedData.length > 0) {
-
-			mcxDialog.confirm('삭제하시겠습니까?', {
-				cancelBtnText: "취소",
-				sureBtnText: "확인",
-				sureBtnClick: function(){
-					var data = { arrSectionSq : arrSectionSq
-						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-					};
-
-					var jsonData = JSON.stringify(data);
-					gagajf.ajaxJsonSubmit('/marketing/morebetter/sectionVal/delete', jsonData);
-				}
-			});
-		}
-	});
-
 	// 할인구간 선택 시 기본 조건 변경
 	// 할인구간 선택 시 기본 조건 변경
 	$("#moreBetterForm input[name=sectionGb]").bind('click change', function () {
 	$("#moreBetterForm input[name=sectionGb]").bind('click change', function () {
 		var sectionGbValue = $(this).val();
 		var sectionGbValue = $(this).val();
@@ -988,6 +985,219 @@
 		}
 		}
 	});
 	});
 
 
+	// 수정 버튼 클릭시
+	$('#btnMorebetterUpdate').on('click', function() {
+		// validation
+		if (!gagajf.validation('#moreBetterForm'))
+			return false;
+
+		// 행사기간 확인
+		let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
+		let toDate = $('#moreBetterForm input[name=tmtbEddt]').val();
+
+		if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+			mcxDialog.alert("행사 기간 시작일자와 종료일자를 입력하세요.");
+			$('#moreBetterForm input[name=tmtbStdt]').focus();
+			return false;
+		}
+
+		if (fromDate > toDate) {
+			mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+			$('#moreBetterForm input[name=tmtbStdt]').focus();
+			return false;
+		}
+
+		// disabled 값 넘겨주기
+		$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
+		$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
+
+		mcxDialog.confirm('수정하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var compAllData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);	//selectedRowData
+				var brandAllData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
+				var applyAllData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
+				var exceptAllData = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList);
+				var burdenAllData = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);
+				var sectionGbAllData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
+
+				var jsonSupplyCompData = JSON.stringify(compAllData);
+				$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
+				var jsonBrandData = JSON.stringify(brandAllData);
+				$('#moreBetterForm input[name=brandList]').val(jsonBrandData);
+				var jsonApplyData = JSON.stringify(applyAllData);
+				$('#moreBetterForm input[name=applyGoodsList]').val(jsonApplyData);
+				var jsonExceptData = JSON.stringify(exceptAllData);
+				$('#moreBetterForm input[name=exceptGoodsList]').val(jsonExceptData);
+				var jsonSectionGbData = JSON.stringify(sectionGbAllData);
+				$('#moreBetterForm input[name=sectionGbList]').val(jsonSectionGbData);
+				var jsonBurdenData = JSON.stringify(burdenAllData);
+				$('#moreBetterForm input[name=burdenList]').val(jsonBurdenData);
+
+				var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
+				gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
+					fnMorebetterFormClose();
+					$('#btnInit').trigger('click');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+
+	// 목록 버튼 클릭
+	$("#moreBetterForm #btnSearchList").on("click", function() {
+		uifnPopupClose('popupMorebetterReg');
+	});
+
+	// 진행 버튼 클릭
+	$("#btnChangeStatIng").on("click", function() {
+		console.log('1111111111111');
+
+		fnCheckData();
+
+		// 각 ag-grid list 수량
+		let allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
+		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
+		let allApplyGoodsData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
+		let allExceptGoodsData = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList);
+		let allApplyBurdenData = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);
+		let allSectionGbData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
+
+		if(allSectionGbData.length < 1){
+			mcxDialog.alert("할인구간을 설정해주세요.");
+			return false;
+		}
+
+		// 공급업체+브랜드 상품조회
+		var multiSupplyCompCd = [];
+		$.each(allSupplyCompData, function(idx, item) {
+			multiSupplyCompCd.push(item.supplyCompCd);
+		});
+
+		var multiBrand = [];
+		$.each(allBrandData, function(idx, item) {
+			multiBrand.push(item.brandCd);
+		});
+
+		var multiApplyGoods = [];
+		$.each(allApplyGoodsData, function(idx, item) {
+			multiApplyGoods.push(item.goodsCd);
+		});
+
+		var multiExceptGoods = [];
+		$.each(allExceptGoodsData, function(idx, item) {
+			multiExceptGoods.push(item.goodsCd);
+		});
+
+		/*var data = {
+			mode : $('#moreBetterForm input[name=mode]').val()
+			, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+			, tmtbNm : $('#moreBetterForm input[name=tmtbNm]').val()
+			, tmtbStat : "G232_11"				// 진행
+			, tmtbStdt : $('#moreBetterForm input[name=tmtbStdt]').val()
+			, tmtbEddt : $('#moreBetterForm input[name=tmtbEddt]').val()
+			, sectionGb : $('input:radio[name="sectionGb"]:checked').val()
+			, applyGb : $('input:radio[name="sectionGb"]:checked').val()
+			, dcWay : $('input:radio[name="dcWay"]:checked').val()
+			, supplyCompList : allSupplyCompData
+			, brandList : allBrandData
+			, applyGoodsList : allApplyGoodsData
+			, exceptGoodsList : allExceptGoodsData
+			, burdenList : allApplyBurdenData
+			, sectionGbList : allSectionGbData
+			, multiSupplyCompCd : multiSupplyCompCd
+			, multiBrand : multiBrand
+			, multiApplyGoods : multiApplyGoods
+			, multiExceptGoods : multiExceptGoods
+		};
+
+		var jsonData = JSON.stringify(data);
+		 */
+
+		mcxDialog.confirmC("프로모션을 진행하시겠습니까?<br/>진행 후에는 수정이 제한될 수 있습니다.", {
+			btn: confirmBtnText,
+			btnClick: function(index) {
+				if(index == 1) {
+					let data = {
+						mode : $('#moreBetterForm input[name=mode]').val()
+						, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+						, tmtbNm : $('#moreBetterForm input[name=tmtbNm]').val()
+						, tmtbStat : "G232_11"				// 진행
+						, tmtbStdt : $('#moreBetterForm input[name=tmtbStdt]').val()
+						, tmtbEddt : $('#moreBetterForm input[name=tmtbEddt]').val()
+						, sectionGb : $('input:radio[name="sectionGb"]:checked').val()
+						, applyGb : $('input:radio[name="sectionGb"]:checked').val()
+						, dcWay : $('input:radio[name="dcWay"]:checked').val()
+						, supplyCompList : allSupplyCompData
+						, brandList : allBrandData
+						, applyGoodsList : allApplyGoodsData
+						, gridApplyGoodsList : allApplyGoodsData
+						, exceptGoodsList : allExceptGoodsData
+						, burdenList : allApplyBurdenData
+						, sectionGbList : allSectionGbData
+						, multiSupplyCompCd : multiSupplyCompCd
+						, multiBrand : multiBrand
+						, multiApplyGoods : multiApplyGoods
+						, multiExceptGoods : multiExceptGoods
+					}
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/changeStat', jsonData, fnMorebetterChangeStatCollback);
+				}
+			}
+		});
+	});
+
+	var fnMorebetterChangeStatCollback = function(result){
+		if(result.duplicateYn == "Y"){
+			for(let i=0; i<result.duplicateGoodsList.length; i++){
+				gagaAgGrid.addRowData(gridOptionsDuplicateGoodsList, {"goodsCd" : result.duplicateGoodsList[i].goodsCd, "goodsNm" : result.duplicateGoodsList[i].goodsNm});
+			}
+			mcxDialog.alert("다른 다다익선에서 사용중인 상품이 존재합니다.");
+			gagaAgGrid.exportToExcel('다다익선 중복상품 목록', gridOptionsDuplicateGoodsList);
+			fnMorebetterFormClose();
+			$('#btnInit').trigger('click');
+			$('#btnSearch').trigger('click');
+		}else{
+			fnMorebetterFormClose();
+			$('#btnInit').trigger('click');
+			$('#btnSearch').trigger('click');
+		}
+	};
+
+	// 중지 버튼 클릭
+	$("#btnMorebetterStop").on("click", function() {
+		mcxDialog.confirmC("프로모션을 중지하시겠습니까?<br/>중지 후에는 진행으로 복원하실 수 없습니다.", {
+			btn: confirmBtnText,
+			btnClick: function(index) {
+				if(index == 1) {
+					let data = { tmtbStat : "G232_12"			// 중지
+						, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					}
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/changeStat', jsonData, fnMorebetterFormClose);
+				}
+			}
+		});
+	});
+
+	// 삭제 버튼 클릭
+	$("#btnMorebetterDelete").on("click", function() {
+		mcxDialog.confirmC("프로모션을 삭제하시겠습니까?<br/>삭제한 프로모션은 복원하실 수 없습니다.", {
+			btn: confirmBtnText,
+			btnClick: function(index) {
+				if(index == 1) {
+					let data = { tmtbStat: "G232_14"			// 삭제
+						, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					}
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/changeStat', jsonData, fnMorebetterFormClose);
+				}
+			}
+		});
+	});
+
+/*
 	// 공급업체 행삭제
 	// 공급업체 행삭제
 	$('#btnDeleteCompany').on('click', function() {
 	$('#btnDeleteCompany').on('click', function() {
 		var selectedData = gridOptionsFGCompanyList.api.getSelectedRows();
 		var selectedData = gridOptionsFGCompanyList.api.getSelectedRows();
@@ -1122,120 +1332,40 @@
 			});
 			});
 		}
 		}
 	});
 	});
+*/
 
 
-
-	// 수정 버튼 클릭시
-	$('#btnMorebetterUpdate').on('click', function() {
-		// validation
-		if (!gagajf.validation('#moreBetterForm'))
-			return false;
-
-		// 행사기간 확인
-		let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
-		let toDate = $('#moreBetterForm input[name=tmtbEddt]').val();
-
-		if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
-			mcxDialog.alert("행사 기간 시작일자와 종료일자를 입력하세요.");
-			$('#moreBetterForm input[name=tmtbStdt]').focus();
-			return false;
-		}
-
-		if (fromDate > toDate) {
-			mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
-			$('#moreBetterForm input[name=tmtbStdt]').focus();
-			return false;
+	// 구간할인 행삭제
+	/*$('#btnDelSectionRow').on('click', function() {
+		var selectedData = gridOptionsSectionGbList.api.getSelectedRows();
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
 		}
 		}
 
 
-		// disabled 값 넘겨주기
-		$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
-		$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
-
-		mcxDialog.confirm('수정하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				var compAllData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);	//selectedRowData
-				var brandAllData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
-				var applyAllData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
-				var exceptAllData = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList);
-				var burdenAllData = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);
-				var sectionGbAllData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
+		var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList, false);
 
 
-				var jsonSupplyCompData = JSON.stringify(compAllData);
-				$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
-				var jsonBrandData = JSON.stringify(brandAllData);
-				$('#moreBetterForm input[name=brandList]').val(jsonBrandData);
-				var jsonApplyData = JSON.stringify(applyAllData);
-				$('#moreBetterForm input[name=applyGoodsList]').val(jsonApplyData);
-				var jsonExceptData = JSON.stringify(exceptAllData);
-				$('#moreBetterForm input[name=exceptGoodsList]').val(jsonExceptData);
-				var jsonSectionGbData = JSON.stringify(sectionGbAllData);
-				$('#moreBetterForm input[name=sectionGbList]').val(jsonSectionGbData);
-				var jsonBurdenData = JSON.stringify(burdenAllData);
-				$('#moreBetterForm input[name=burdenList]').val(jsonBurdenData);
+		var arrSectionSq = [];
 
 
-				var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
-				gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
-					fnMorebetterFormClose();
-					$('#btnInit').trigger('click');
-					$('#btnSearch').trigger('click');
-				});
-			}
+		$.each(selectedData, function(idx, item) {
+			arrSectionSq.push(item.tmtbSectionSq);
 		});
 		});
-	});
 
 
-	// 목록 버튼 클릭
-	$("#moreBetterForm #btnSearchList").on("click", function() {
-		uifnPopupClose('popupMorebetterReg');
-	});
-
-	// 진행 버튼 클릭
-	$("#moreBetterForm #btnChangeStatIng").on("click", function() {
-		mcxDialog.confirmC("프로모션을 진행하시겠습니까?<br/>진행 후에는 수정이 제한될 수 있습니다.", {
-			btn: confirmBtnText,
-			btnClick: function(index) {
-				if(index == 1) {
-					let data = { tmtbStat : "G232_11"				// 진행
-						, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-					}
-					var jsonData = JSON.stringify(data);
-					gagajf.ajaxJsonSubmit('/marketing/morebetter/changeStat', jsonData, fnMorebetterFormClose);
-				}
-			}
-		});
-	});
+		if (removedData.length > 0) {
 
 
-	// 진행 버튼 클릭
-	$("#moreBetterForm #btnMorebetterStop").on("click", function() {
-		mcxDialog.confirmC("프로모션을 중지하시겠습니까?<br/>중지 후에는 진행으로 복원하실 수 없습니다.", {
-			btn: confirmBtnText,
-			btnClick: function(index) {
-				if(index == 1) {
-					let data = { tmtbStat : "G232_12"			// 중지
-						, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-					}
-					var jsonData = JSON.stringify(data);
-					gagajf.ajaxJsonSubmit('/marketing/morebetter/changeStat', jsonData, fnMorebetterFormClose);
-				}
-			}
-		});
-	});
+			mcxDialog.confirm('삭제하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var data = { arrSectionSq : arrSectionSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
 
 
-	// 삭제 버튼 클릭
-	$("#btnMorebetterDelete").on("click", function() {
-		mcxDialog.confirmC("프로모션을 삭제하시겠습니까?<br/>삭제한 프로모션은 복원하실 수 없습니다.", {
-			btn: confirmBtnText,
-			btnClick: function(index) {
-				if(index == 1) {
-					let data = { tmtbStat: "G232_14"			// 삭제
-						, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-					}
 					var jsonData = JSON.stringify(data);
 					var jsonData = JSON.stringify(data);
-					gagajf.ajaxJsonSubmit('/marketing/morebetter/changeStat', jsonData, fnMorebetterFormClose);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/sectionVal/delete', jsonData);
 				}
 				}
-			}
-		});
-	});
+			});
+		}
+	});*/
 
 
 </script>
 </script>
 </html>
 </html>

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

@@ -0,0 +1,385 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PlanListForm.html
+ * @desc    : 기획전관리 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.03   sowon        최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<div class="main-title">
+		</div>
+
+		<div class="panelStyle">
+			<form id="planListSearchForm" name="planListSearchForm" action="#" th:action="@{'/marketing/planning/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:5%;"/>
+						<col style="width:20%;"/>
+						<col style="width:5%;"/>
+						<col style="width:20%;"/>
+						<col style="width:5%;"/>
+						<col style="width:10%;"/>
+						<col style="width:5%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>사이트</th>
+							<td>
+								<select name="siteCd">
+									<option value="">전체</option>
+									<th:block th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" >
+										<option th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+									</th:block>
+								</select>
+							</td>
+							<!-- <th>기획전명</th>
+							<td>
+								<input type="text" name="planNm" id="planNm"/>
+							</td>
+							<th>기획전번호</th>
+							<td colspan="3">
+								<input type="text" name="planSq" id="planSq"/>
+							</td> -->
+							<th>오픈여부</th>
+							<td>
+								<select name="openYn">
+									<option value="">전체</option>
+									<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>등록자</th>
+							<td>
+								<input type="text" name="regId" id="regId"/>
+							</td>
+							<th rowspan="3">키워드</th>
+							<td rowspan="3">
+								<select name="search" id="search">
+									<option value="searchPlanNm">기획전명</option>
+									<option value="searchPlanSq">기획전번호</option>
+								</select> 
+								<textarea class="textareaR3 w70p" name="condition" id="condition"></textarea>
+							</td>
+						</tr>
+						<tr>
+							<th>PC/모바일구분</th>
+							<td>
+								<select name="frontGb">
+									<option value="">ALL</option>
+									<option value="P">웹</option>
+									<option value="M">모바일</option>
+								</select>
+							</td>
+
+							<th>기획전구분</th>
+							<td>
+								<select name="planGb">
+									<option value="">전체</option>
+									<option value="P">기획전</option>
+									<option value="E">이벤트</option>
+								</select>
+							</td>
+							<th>기획전템플릿유형</th>
+							<td colspan="1">
+								<select name="templateType">
+									<option value="">전체</option>
+									<option value="H">HTML</option>
+									<option value="T">TEXT</option>
+								</select>
+							</td>
+						</tr>
+
+						<tr>
+							<th>진행기간</th>
+							<td colspan="6" id="sellTerms"></td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+					<input type="button" value="초기화" class="btn btn-gray btn-lg" id="btnInit"/>
+					<input type="button" value="조회" class="btn btn-base btn-lg" id="btnSearch"/>
+					</li>
+				</ul>
+			</form>
+		</div>
+
+
+	<div class="panelStyle">
+			<!-- 검색결과 영역 -->
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-danger btn-lg" onclick="fnSelectedDelete();">삭제</button>
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-primary btn-lg" onclick="fnPlanWebRegisterPopup();">등록</button>
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			
+			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="planListPagination"></div>
+				</li>
+			</ul>
+		</div>
+	</div>
+
+<!-- 컬러 피커 -->
+<!-- <script src='https://bgrins.github.io/spectrum/spectrum.js'></script> -->
+<!-- <link rel='stylesheet' href='https://bgrins.github.io/spectrum/spectrum.css' /> -->
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	
+	var siteCdList = gagajf.convertToArray([[${siteCdList}]]);
+	var wmGbList = {"A":"ALL", "P":"웹", "M":"모바일"};
+	var templateTypeList = {"H":"HTML", "T":"TEXT"};
+	var planGbList = {"P":"기획전", "E":"이벤트"};
+
+	var columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "미리보기"		, field:'plan'		, width:100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);" onclick="fnPreview(\'' + params.data.planSq + '\');">' + '미리보기' + '</a>'; }
+		},
+		{headerName: "기획전구분"		, field:'planGb'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(planGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(planGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(planGbList, params.newValue); }
+		},
+		{headerName: "프론트구분"	, field:'frontGb'	, width:120, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(wmGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(wmGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(wmGbList, params.newValue); }
+		},
+		{headerName: "오픈여부"		, field:'openYn'	, width:80 , cellClass: 'text-center'},
+		{headerName: "기획전번호"		, field:'planSq'	, width:100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "기획전명"		, field:'planNm'	, width:300, cellClass: 'text-left',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "서브제목"		, field:'dtlTitle1'	, width:300 , cellClass: 'text-center'},
+		{headerName: "사이트"			, field:'siteCd'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(siteCdList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteCdList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(siteCdList, params.newValue); }
+		},
+		{headerName: "기획전템플릿유형"	, field:'templateType'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(templateTypeList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(templateTypeList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(templateTypeList, params.newValue); }
+		},
+		{headerName: "전시순서"		, field:'dispOrd'	, width:100, cellClass: 'text-right' },
+		{headerName: "진행시작일시"		, field:'dispStdt'	, width:150, cellClass: 'text-center'},
+		{headerName: "진행종료일시"		, field:'dispEddt'	, width:150, cellClass: 'text-center'},
+		{headerName: "등록자"			, field:'regNm'		, width:100, cellClass: 'text-center'},
+		{headerName: "등록일"			, field:'regDt'		, width:150, cellClass: 'text-center'}
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복 선택 가능
+	gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+		var field = event.colDef.field;
+		if (field != 'planSq' && field != 'planNm')
+			return;
+
+		fnBindDetail(field, event.data); // 바인딩
+	}
+	
+	// 바인딩
+	var fnBindDetail = function(field, rowData) {
+		if (field == 'planSq') { // 기획전 웹수정 팝업
+			fnEventWebDetailPopup(rowData.planSq);
+		}
+
+		if (field == 'planNm') { // 기획전 관리 팝업
+			fnEventCornerPopup(rowData.planSq);
+		}
+	}
+	
+
+	// 웹 등록 팝업
+	var fnPlanWebRegisterPopup = function() {
+		var actionUrl = "/marketing/planning/webdetail/form?mode=N";
+		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
+	}
+
+	// 웹 수정 팝업
+	var fnEventWebDetailPopup = function(planSq) {
+		var actionUrl = "/marketing/planning/webdetail/form?mode=U&planSq=" + planSq;
+		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
+	}
+	
+	// 이벤트 코너 관리 팝업
+	var fnEventCornerPopup = function(planSq) {
+		var actionUrl = "/marketing/planning/corner/list/form?planSq=" + planSq;
+		cfnOpenModalPopup(actionUrl, 'popupCorner');
+	}
+
+	// 미리보기
+	var fnPreview = function(planSq) {
+		var _wmall = [[${@environment.getProperty('domain.pastel')}]];
+		window.open(_wmall + '/planning/detail/form?planSq=' + planSq + '&adminPreview=Y', '_blank');
+ 		//document.location.href = _PAGE_CUSTOMER_INFO;
+	}
+
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		fnInit();
+	});
+	
+	var fnInit = function(){
+		$('#planListSearchForm')[0].reset();
+	}
+	
+	// 조회클릭시
+	$('#btnSearch').on('click', function() {
+		$("#planListSearchForm input[name=pageNo]").val('1');
+		fnPlanListSearch();
+	});
+
+	// 조회
+	var fnPlanListSearch = function() {
+		
+		if(!fnConditionCheck()) return;
+		
+		gagaPaging.init('planListSearchForm', fnSearchCallBack, 'planListPagination', $('#pageSize').val());
+		gagaPaging.load($("#planListSearchForm input[name=pageNo]").val());
+	}
+	
+	// 삭제클릭시
+	var fnSelectedDelete = function() {
+		var selectedData = gagaAgGrid.selectedRowData(gridOptions);
+
+		if (selectedData.length < 1) {
+			mcxDialog.alert('선택 된 기획전이 업습니다.');
+			return;
+		}
+
+		mcxDialog.confirm('선택된 기획전을 삭제하시겠습니까?',{
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(selectedData);
+
+				gagajf.ajaxJsonSubmit('/marketing/planning/delete', jsonData, function() {
+					fnPlanListSearch();
+				});
+			}
+		});
+	}
+
+	//검색 조건 확인
+	var fnConditionCheck = function(){
+		var formId = '#planListSearchForm';
+		var form = document.planListSearchForm;
+
+		var searchFlag = false;
+		var cnt = 0;
+		
+		for (i = 0; i < form.elements.length; i++ ) {
+			var el = form.elements[i];
+			if ($(el).prop("type") == "text" || $(el).prop("type") == "textarea" || ($(el).prop("type") == "select-one" && 
+					el.name != "search" && el.name != "pageSize" && el.name != "beforSkipFlag")) {
+				if (!(el.value == null || el.value == "")) {
+					cnt++;
+				}
+			}
+		}		
+		if(cnt > 0) searchFlag = true;
+		
+		var fromDate = $('#planListSearchForm input[name=stDate]').val();
+		var toDate = $('#planListSearchForm input[name=edDate]').val();
+		
+		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
+			
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alertC("등록일 조회시 시작일자와 종료일자를 입력하세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#planListSearchForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alert("노출기간 시작일자는 종료일자 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#planListSearchForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			} 
+		}
+
+		return true;
+	}
+	
+	var fnSearchCallBack = function(result){
+
+		$('#planListSearchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#planListSearchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
+		$('#planListSearchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#planListSearchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+		gridOptions.api.setRowData(result.planList);
+		
+		gagaPaging.createPagination(result.pageing.pageable);
+	}
+	
+	//페이징 
+	$('#planListSearchForm select[name=pageSize]').on('change', function() {
+		$("#planListSearchForm input[name=pageNo]").val('1');
+		fnPlanListSearch($("#planListSearchForm input[name=searchGb]").val());
+	});
+	
+	
+	$(document).ready(function() {
+
+		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '기간', 'X');
+		var chkBeforSkipFlag = '&nbsp;&nbsp;<label class="chkBox"><input type="checkbox" name="beforSkipFlag" value="Y" >이전데이터 제외</label>';
+		$("#planListSearchForm").find('#sellTerms').append(chkBeforSkipFlag);
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+
+	});
+
+/*]]>*/
+</script>
+
+</html>

+ 1124 - 0
src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html

@@ -0,0 +1,1124 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PlanWebDetailForm.html
+ * @desc    : 웹 수정 / 웹 등록 팝업 화면 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.02.04   sowon   최초 작성
+ *******************************************************************************
+ -->
+<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 == '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}"/>
+			<input type="hidden" name="planSq" th:value="*{planSq}"/>
+
+			<div class="cardArea" style="height: 700px;margin: -5px;">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%"/>
+						<col style="width:40%;"/>
+						<col style="width:10%;"/>
+						<col style="width:35%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th class="dashR">기획전구분<i class="star"></i></th>
+						<td class="dashR">
+							<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" th:field="*{templateType}">
+								<option value="H">HTML</option>
+								<option value="T">TEXT</option>
+							</select>
+						</td>
+					</tr>
+					<!-- <tr>
+						<th class="dashR">회원구분<i class="star"></i></th>
+						<td class="dashR">
+							<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="회원등급" 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>
+						</td>
+					</tr> -->
+					<tr>
+						<th class="dashR">프론트 구분<i class="star"></i></th>
+						<td class="dashR">
+							<select name="frontGb" id="frontGb" th:field="*{frontGb}">
+								<option value="A">전체</option>
+								<option value="P">웹</option>
+								<option value="M">모바일</option>
+							</select>
+						</td>
+						<th class="dashR">기획전명<i class="star"></i></th>
+						<td class="dashR" colspan="3">
+							<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" 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)}시|" 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)}분|" th:selected="*{#strings.substring(dispStdt, 14, 16)} == ${#strings.toString(num)} ? 'true'">분</option>
+								</th:block>
+							</select>
+							~
+							<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="*{#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="*{#strings.substring(dispEddt, 14, 16)} == ${#strings.toString(num)} ? 'true'">분</option>
+								</th:block>
+							</select>
+							<input type="hidden" name="dispStdt" id="dispStdt"/>
+							<input type="hidden" name="dispEddt" id="dispEddt"/>
+						</td>
+						<th class="dashR">서브제목</th>
+						<td class="dashR" colspan="3">
+							<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" 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">
+							<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>
+					</tr>
+					<tr>
+						<th class="dashR">사이트<i class="star"></i></th>
+						<td class="dashR">
+							<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">
+							<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" colspan="3">
+							<input type="text" name="badgeNm" th:value="*{badgeNm}"/>
+						</td>
+						<th class="dashR">뱃지 배경색상</th>
+						<td class="dashR">
+							<input type="text" name="badgeBcolor" th:value="*{badgeBcolor}"/>
+						</td>
+						<th class="dashR">뱃지 글자색상</th>
+						<td class="dashR" colspan="3">
+							<input type="text" name="badgeFcolor" th:value="*{badgeFcolor}"/>
+						</td>
+					</tr> -->
+					<tr>
+						<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="orgMainPimg" id="orgMainPimg" th:value="*{mainPimg}"/>
+								<input type="hidden" name="mainPimg" id="mainPimg"/>
+							</div>
+						</td>
+					</tr>
+					<tr>
+						<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="orgMainMimg" id="orgMainMimg" th:value="*{mainMimg}"/>
+								<input type="hidden" name="mainMimg" id="mainMimg"/>
+							</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">
+							<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"/>
+							</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">
+							<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"/>
+							</div>
+						</td>
+					</tr> -->
+				</tbody>
+				<!-- <tbody id="questionEventUpdate">
+					<tr>
+						<th class="dashR">개인정보 수집동의</th>
+						<td class="dashR">
+							<div style="margin-top:5px;">
+								<textarea name="privacyPolicy" id="privacyPolicyDetail" style="width:720px;">[[*{privacyPolicy}]]</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>
+						</td>
+					</tr>
+				</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>
+							</div>
+						</td>
+					</tr>
+					<tr>
+						<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>
+							</div>
+						</td>
+					</tr>
+				</table>
+									<div class="panelStyle" style="margin: unset;">
+						<!-- TITLE -->
+						<div class="panelTitle">
+							<h2>카테고리 / 브랜드 등록</h2>
+							<span class="panelControl"> <i
+								class="fa inner-fa-chevron-up"></i> <!-- 열림/닫힘 화살표 -->
+							</span>
+						</div>
+						<!-- //TITLE -->
+						<div class="inner-panelContent">
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%" />
+										<col width="90%" />
+									</colgroup>
+									<tr>
+										<th>카테고리/브랜드</th>
+										<td>
+											<!-- 수정시 프로모션명 입력 : before -->
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>공급업체 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnAddCompany">업체 추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteCompany">선택삭제</button>
+													</span> <br />
+													<div id="gridFGPromotionCompanyList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>브랜드 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드
+															추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteBrand">선택삭제</button>
+													</span> <br />
+													<div id="gridFGBrandList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+					</div>
+			</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 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}"/>
+			<div>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width: 150px;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th class="dashR">기존 기획전</th>
+						<td class="dashR">
+							<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%"/>
+						<col style="width:40%;"/>
+						<col style="width:10%;"/>
+						<col style="width:35%;"/>
+						<col/>
+					</colgroup>
+					<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="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="기획전탬플릿유형">
+								<option value="H">HTML</option>
+								<option value="T">TEXT</option>
+							</select>
+						</td>
+					</tr>
+				<!-- 	<tr>
+						<th class="dashR">회원구분<i class="star"></i></th>
+						<td class="dashR">
+							<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="회원등급">
+								<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>
+						<th class="dashR">프론트 구분<i class="star"></i></th>
+						<td class="dashR">
+							<select name="frontGb" id="frontGb" required="required" data-valid-name="프론트 구분">
+								<option value="A">전체</option>
+								<option value="P">웹</option>
+								<option value="M">모바일</option>
+							</select>
+						</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="기획전명"/>
+						</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="노출기간" />
+							<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>
+								</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>
+								</th:block>
+							</select>
+							~
+							<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="${#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="${#numbers.formatInteger(num,2)}==59 ? 'true'">분</option>
+								</th:block>
+							</select>
+							<input type="hidden" name="dispStdt" id="dispStdt"/>
+							<input type="hidden" name="dispEddt" id="dispEddt"/>
+						</td>
+						<th class="dashR">서브제목</th>
+						<td class="dashR" colspan="3">
+							<input type="text" name="dtlTitle1" id="dtlTitle1"/>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">코너명노출 여부<i class="star"></i></th>
+						<td class="dashR">
+							<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" 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">사이트<i class="star"></i></th>
+						<td class="dashR">
+							<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" colspan="3">
+							<input type="text" class="w100 aR" name="dispOrd"/>
+						</td>
+					</tr>
+					<!-- <tr>
+						<th class="dashR">뱃지 타이틀</th>
+						<td class="dashR">
+							<input type="text" class="w500" name="badgeNm"/>
+						</td>
+
+						<th class="dashR">뱃지 배경색상</th>
+						<td class="dashR">
+							<input type="text" class="w100" name="badgeBcolor"/>
+						</td>
+
+						<th class="dashR">뱃지 글자색상</th>
+						<td class="dashR">
+							<input type="text" class="w100" name="badgeFcolor"/>
+						</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" 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="mainPimg" id="mainPimg" value=""/>
+							</div>
+						</td>
+					</tr>
+					<tr>
+						<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="mainMimg" id="mainMimg" value=""/>
+							</div>
+						</td>
+					</tr>
+					<!-- <tr>
+						<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="dtlPimg" value=""/>
+							</div>
+						</td>
+					</tr>
+					<tr>
+						<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="dtlMimg" value=""/>
+							</div>
+						</td>
+					</tr> -->
+				</tbody>
+				<!-- <tbody id="questionEventInsert">
+					<tr>
+						<th class="dashR">개인정보 수집동의</th>
+						<td class="dashR" >
+							<div style="margin-top:5px;">
+								<textarea name="textareaR4" id="privacyPolicyRegister" style="width:720px;"></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>
+						</td>
+					</tr>
+				</tbody> -->
+				<tbody>
+					<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" name="fsrcPc"></textarea>
+							</div>
+						</td>
+					</tr>
+					<tr>
+						<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" name="fsrcMobile"></textarea>
+							</div>
+						</td>
+					</tr>
+				</table>
+					<div class="panelStyle" style="margin: unset;">
+						<!-- TITLE -->
+						<div class="panelTitle">
+							<h2>카테고리 / 브랜드 등록</h2>
+							<span class="panelControl"> <i
+								class="fa inner-fa-chevron-up"></i> <!-- 열림/닫힘 화살표 -->
+							</span>
+						</div>
+						<!-- //TITLE -->
+						<div class="inner-panelContent">
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%" />
+										<col width="90%" />
+									</colgroup>
+									<tr>
+										<th>카테고리/브랜드</th>
+										<td>
+											<!-- 수정시 프로모션명 입력 : before -->
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>공급업체 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnAddCompany">업체 추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteCompany">선택삭제</button>
+													</span> <br />
+													<div id="gridFGPromotionCompanyList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+											<div class="padding10"
+												style="display: inline-block; width: 49%;">
+												<!--<span>브랜드 설정</span>-->
+												<div class="padding10 inner-tb-solid">
+													<span class="buttonSpan">
+														<button type="button"
+															class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드
+															추가</button>
+														<button type="button"
+															class="btn btnRight btn-success btn-lg"
+															id="btnDeleteBrand">선택삭제</button>
+													</span> <br />
+													<!-- 브랜드 선택 팝업(단수 선택 팝업... 복수를 새로 만들어야하는지 ? 아니면 변수처리해야하는지 ? -->
+													<div id="gridFGBrandList"
+														style="width: 100%; height: 200px;"
+														class="ag-theme-balham"></div>
+												</div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+					</div>
+				</div>
+				<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>
+			</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>
+<script th:inline="javascript">
+/*<![CDATA[*/
+
+	var mode = [[${mode}]];
+	var planInfo = [[${planInfo}]];
+	var fsrcPc = [[${fsrcPc}]];
+	var fsrcMobile = [[${fsrcMobile}]];
+	var planBrandList = [[${planBrandList}]];
+	var snOptions;
+
+	// 카테고리 전시 여부
+	var fnCataCheck = function(is, formId) {
+		if (is.checked) {
+			$(formId + ' input[name=cateDispYn]').val('Y');
+			// 추후 카테고리 표시
+		} else {
+			$(formId + ' input[name=cateDispYn]').val('N');
+		}
+	}
+
+	// 상품제한여부
+	var fnGoodsCheck = function(is, formId) {
+		if (is.checked) {
+			$(formId + ' input[name=goodsLimitYn]').val('Y');
+			$(formId + ' input[name=goodsLimitQty]').show();
+			$(formId + ' input[name=goodsLimitQty]').focus();
+			// 추후 카테고리 표시
+		} else {
+			$(formId + ' input[name=goodsLimitYn]').val('N');
+			$(formId + ' input[name=goodsLimitQty]').hide();
+		}
+	}
+
+	// 기획전 복사
+	var fnPlanCopyPopup = function() {
+		var planSq = $('#planWebRegisterForm select[name=planSq]').val();
+
+		if (gagajf.isNull(planSq)) {
+			mcxDialog.alert('복사할 기획전을 선택하세요.');
+			return;
+		}
+
+		mcxDialog.confirm('선택 된 기획전을 복사 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var actionUrl = '/marketing/planning/copy';
+				var data = {copyPlanSq : planSq};
+				var jsonData = JSON.stringify(data);
+
+				gagajf.ajaxJsonSubmit(actionUrl, jsonData, fnCopyCallback);
+			}
+		});
+	}
+
+	// 기획전 복사 callback
+	var fnCopyCallback = function(result) {
+		uifnPopupClose('planWebRegisterFormDiv');
+		fnPlanListSearch();
+
+		var actionUrl = "/marketing/planning/webdetail/form?mode=U&planSq=" + result.planSq;
+		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
+	}
+
+	var fnPlanSave = function(formId) {
+		if (!gagajf.validation(formId))
+			return;
+
+		// 날짜 유효성 체크
+		var stDate = $(formId + ' input[name=startSearchDate]').val().replaceAll("-", "");
+		var edDate = $(formId + ' input[name=endSearchDate]').val().replaceAll("-", "");
+		var toDate = _today.replaceAll("-", "");
+
+		if (Number(stDate) > Number(edDate)) {
+			mcxDialog.alert('종료일자는 시작일자 보다 클 수 없습니다.');
+			return;
+		}
+
+		if (Number(stDate) < Number(toDate) && mode == 'N') {
+			mcxDialog.alert('시작일자는 오늘포함 이후로 등록해주세요.');
+			return;
+		}
+
+		if (Number(edDate) < Number(toDate) && mode == 'N') {
+			mcxDialog.alert('종료일자는 오늘포함 이후로 등록해주세요.');
+			return;
+		}
+		
+		stDate = $(formId + ' input[name=startSearchDate]').val();
+		edDate = $(formId + ' input[name=endSearchDate]').val();
+		$(formId + ' input[name=dispStdt]').val(stDate + ' ' + $(formId + ' select[name=startSearchHour]').val() + ':' + $(formId + ' select[name=startSearchMin]').val() + ':00');
+		$(formId + ' input[name=dispEddt]').val(edDate + ' ' + $(formId + ' select[name=endSearchHour]').val() + ':' + $(formId + ' select[name=endSearchMin]').val() + ':59');
+
+		/* // 댓글여부에 따른 위치 체크
+		if ($('#replyYn').val() == 'Y') {
+			var replyLoc = $(':radio[name="replyLoc"]:checked').val();
+
+			if (typeof replyLoc == 'undefined') {
+				mcxDialog.alert('댓글 사용 시 댓글위치를 선택해야합니다.');
+				return;
+			}
+		} */
+
+		// poll 관리일련번호 유효성 체크
+		/* if (!gagajf.isNull($(formId + ' input[name=pollSq]').val())) {
+			gagajf.ajaxFormSubmit('/marketing/poll/list', formId, function(result) {
+				console.log(result);
+				if (result.length < 1) {
+					mcxDialog.alert('입력하신 투표 일련번호가 존재 하지않습니다.');
+					return;
+				}
+			});
+		} */
+
+		var privacyPolicy = '';
+		var frontGb = $('#frontGb').val();
+		if (mode =='U') {
+			//if($("#planGb").val()=='E'){
+			//	privacyPolicy = gagaSn.getContents('privacyPolicyDetail');
+			//}
+			
+			// 이미지 처리
+			if ((!$('input[name=orgMainPimgDelYn]').is(':checked') ? true : false) &&
+				(gagajf.isNull($(formId + ' input[name=mainPimg]').val()) == true)   ) {
+				$(formId + ' input[name=mainPimg]').val($(formId + ' input[name=orgMainPimg]').val());
+			}
+
+			if ((!$('input[name=orgMainMimgDelYn]').is(':checked') ? true : false) &&
+				(gagajf.isNull($(formId + ' input[name=mainMimg]').val()) == true)  ) {
+				$(formId + ' input[name=mainMimg]').val($(formId + ' input[name=orgMainMimg]').val());
+			}
+
+			if ((!$('input[name=orgDtlPimgDelYn]').is(':checked') ? true : false) &&
+				(gagajf.isNull($(formId + ' input[name=dtlPimg]').val()) == true)  ) {
+				$(formId + ' input[name=dtlPimg]').val($(formId + ' input[name=orgDtlPimg]').val());
+			}
+
+			if ((!$('input[name=orgDtlMimgDelYn]').is(':checked') ? true : false) &&
+				(gagajf.isNull($(formId + ' input[name=dtlMimg]').val()) == true)  ) {
+				$(formId + ' input[name=dtlMimg]').val($(formId + ' input[name=orgDtlMimg]').val());
+			}
+
+			if ((!$('input[name=orgReplyImgYn]').is(':checked') ? true : false) &&
+				(gagajf.isNull($(formId + ' input[name=replyImg]').val()) == true) ) {
+				$(formId + ' input[name=replyImg]').val($(formId + ' input[name=orgReplyImg]').val());
+			}
+		} else {
+			//gagaSn.getContents('fsrcPcRegister');
+			//gagaSn.getContents('fsrcMobileRegister');
+			//if($("#planGb").val()=='E'){
+			//	privacyPolicy = gagaSn.getContents('privacyPolicyRegister');
+			//}
+		}
+
+		if(!gagajf.isNull($(formId + ' input[name=planQtitle]').val()) && gagajf.isNull(privacyPolicy.replace(/<br>/gi, '').replace(/<p>/gi, '').replace(/<\/\p>/gi, ''))){
+			mcxDialog.alert('입력항목 등록 시 개인정보 수집동의를 입력해 주세요.');
+			return;
+		}
+
+		//var jsonData = JSON.stringify($("#planWebRegisterForm").serializeObject());
+		
+		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
+		var multiBrand = [];
+		$.each(allBrandData, function(idx, item) {
+			multiBrand.push(item.brandCd);
+		});
+		
+		let data = {
+				 multiBrand : multiBrand
+				,brandList : allBrandData
+			    ,mode : $('#planWebRegisterForm input[name=mode]').val()
+			    ,planSq : $('#planWebRegisterForm input[name=planSq]').val()
+				,planGb	: $('#planWebRegisterForm select[name=planGb]').val()
+				,templateType :	$('#planWebRegisterForm select[name=templateType]').val()
+				,frontGb : $('#planWebRegisterForm select[name=frontGb]').val()
+				,planNm : $('#planWebRegisterForm input[name=planNm]').val()
+				,startSearchDate : $('#planWebRegisterForm input[name=startSearchDate]').val()
+				,startSearchHour : $('#planWebRegisterForm input[name=startSearchHour]').val()
+				,startSearchMin : $('#planWebRegisterForm input[name=startSearchMin]').val()
+				,endSearchDate : $('#planWebRegisterForm input[name=endSearchDate]').val()
+				,endSearchHour : $('#planWebRegisterForm input[name=endSearchHour]').val()
+				,endSearchMin : $('#planWebRegisterForm input[name=endSearchMin]').val()
+				,dispStdt : $('#planWebRegisterForm input[name=dispStdt]').val()
+				,dispEddt : $('#planWebRegisterForm input[name=dispEddt]').val()
+				,dtlTitle1 : $('#planWebRegisterForm input[name=dtlTitle1]').val()
+				,cornerNmDispYn :  $('#planWebRegisterForm select[name=cornerNmDispYn]').val()
+				,openYn :  $('#planWebRegisterForm select[name=openYn]').val()
+				,siteCd :$('#planWebRegisterForm select[name=siteCd]').val()
+				,dispOrd : $('#planWebRegisterForm input[name=dispOrd]').val()
+				,replyYn : $('#planWebRegisterForm select[name=replyYn]').val()
+				,mainPimg :$('#planWebRegisterForm input[name=mainPimg]').val()
+				,mainMimg : $('#planWebRegisterForm input[name=mainMimg]').val()
+				,fsrcPc :  $('#planWebRegisterForm input[name=fsrcPc]').val()
+				,fsrcMobile : $('#planWebRegisterForm input[name=fsrcMobile]').val()
+			}	
+		
+		// 기획전 등록
+		if (formId == '#planWebRegisterForm') {
+			mcxDialog.confirm('등록 하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					var jsonData =  JSON.stringify(data);
+					gagajf.ajaxJsonSubmit("/marketing/planning/webdetail/create", jsonData, fnPlanWebDetailCallBack); 
+					uifnPopupClose('planWebRegisterFormDiv');
+					fnPlanListSearch();
+					//fnPlanWebDetailClose();
+				}
+			});
+		} else { // 기획전 수정
+			mcxDialog.confirm('저장 하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					var actionUrl = '/marketing/plan/webdetail/update';
+
+					gagajf.ajaxFormSubmit(actionUrl, formId, function() {
+						uifnPopupClose('planWebRegisterFormDiv');
+						fnPlanListSearch();
+						//fnPlanWebDetailClose();
+					});
+				}
+			});
+		}
+	}
+
+	// 이미지 첨부
+	$('input[name=registerMainPimg],input[name=registerMainMimg],input[name=registerDtlPimg],input[name=registerDtlMimg],input[name=registerReplyImg]').on('change', function() {
+		var name = $(this)[0].name;
+
+		var file = this.files[0];
+
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/planning'
+				, file
+				, function(result) {
+					if (name == 'registerMainPimg')
+						$('input[name=mainPimg]').val(result.newFileName);
+
+					if (name == 'registerMainMimg')
+						$('input[name=mainMimg]').val(result.newFileName);
+
+					if (name == 'registerDtlPimg')
+						$('input[name=dtlPimg]').val(result.newFileName);
+
+					if (name == 'registerDtlMimg')
+						$('input[name=dtlMimg]').val(result.newFileName);
+
+					if (name == 'registerReplyImg')
+						$('input[name=replyImg]').val(result.newFileName);
+				}
+				, 'image'
+		);
+	});
+
+
+	var fnChangePlanGb = function(obj) {
+		if($(obj).val()=='E'){
+			$("#questionEventInsert").show();
+			$("#questionEventUpdate").show();
+			if (mode =='U') {
+				if($("#privacyPolicyDetail").closest('div').children('#the_iframe').length==0){
+					gagaSn.createSummernote(snOptions, '#privacyPolicyDetail');
+				}
+			}else{
+				if($("#privacyPolicyRegister").closest('div').children('#the_iframe').length==0){
+					gagaSn.createSummernote(snOptions, '#privacyPolicyRegister');
+				}
+			}
+		}else{
+			$("#questionEventInsert").hide();
+			$("#questionEventUpdate").hide();
+		}
+	}
+
+	var fnAddRow = function(obj){
+		var html = '<div>';
+		html += '<input type="text" class="w200" name="planQtitle"/>';
+		html += '<label class="chkBox"><input type="checkbox" onclick="fnAttachYnClick(this);" />첨부파일</label>';
+		html += '<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>';
+		html += '<input type="hidden" name="attachYn" value="N"/>';
+		html += '</div>';
+		$(obj).closest('td').append(html);
+	}
+
+	var fnDeleteRow = function(obj){
+		$(obj).closest('div').remove();
+	}
+
+	var fnAttachYnClick = function(obj){
+		var val = 'N';
+		if($(obj).prop('checked')){
+			val = 'Y';
+		}
+		$(obj).closest('div').find('input[name="attachYn"]').val(val);
+	}
+
+	var fnPlanWebDetailCallBack = function() {
+		uifnPopupClose('planWebRegisterForm');
+		fnPlanListSearch();
+		
+	}
+	
+	// 브랜드 리스트 설정
+	var columnBrandList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "브랜드ID", field: "brandCd", width: 110, cellClass: 'text-center'},
+		{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
+		{headerName: "", field: "brandKnm", width: 150, cellClass: 'text-center'},
+		/* {headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}  */
+	];
+	
+	// 브랜드 그리드 설정
+	var gridOptionsFGBrandList = gagaAgGrid.getGridOptions(columnBrandList);
+	gridOptionsFGBrandList.rowSelection = "multiple";
+	gridOptionsFGBrandList.suppressRowClickSelection = true;
+	
+	// 브랜드 추가 버튼 클릭시 (복수 브랜드때 수정 필요)
+	$('#btnAddBrand').on('click', function() {
+		cfnOpenBrandListPopup("fnSetPopupBrandInfo", "M");
+	});
+	
+	 // 브랜드 설정 선택삭제 버튼 클릭시
+    $('#btnDeleteBrand').on('click', function() {
+        gridOptionsFGBrandList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGBrandList)});
+    });
+	
+	// 브랜드 설정 / 브랜드 추가 콜백함수 (단수로 가져오므로 복수일 경우에 수정 확인 필요)
+	var fnSetPopupBrandInfo = function(result) {
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				if(gridListValue[j].brandCd == result[i].brandCd) {	addChk = false;	}					// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(gridOptionsFGBrandList, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "brandKnm" : result[i].brandKnm});
+			}
+		}
+	};
+	
+
+	$(document).ready(function() {
+		
+		snOptions = gagaSn.getToolbarOptions('media');
+		
+		// 썸머노트 그리기
+		gagaSn.createSummernote(snOptions, '#fsrcPcDetail');
+		gagaSn.createSummernote(snOptions, '#fsrcMobileDetail');
+		
+		// 그리드 그리기
+		gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
+		
+		 if (mode =='U') {
+			/* $('#planWebDetailForm input[name=badgeFcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			});
+
+			$('#planWebDetailForm input[name=badgeBcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			}); */
+			
+			gridOptionsFGBrandList.api.setRowData(planBrandList);
+
+			if (planInfo.goodsLimitYn == 'N') {
+				$('#planWebDetailForm input[name=goodsLimitQty]').hide();
+			} else {
+				$('#planWebDetailForm input[name=goodsLimitQty]').show();
+			}
+
+			// 썸머노트 값 설정
+			$('#fsrcPcDetail').summernote('code', fsrcPc.fsrc);
+			$('#fsrcMobileDetail').summernote('code', fsrcMobile.fsrc);
+
+			if($("#planGb").val()!='E'){
+				$("#questionEventInsert").hide();
+				$("#questionEventUpdate").hide();
+			}else{
+				gagaSn.createSummernote(snOptions, '#privacyPolicyRegister');
+			}
+
+		} else {
+			/* $('#planWebRegisterForm input[name=badgeFcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			});
+
+			$('#planWebRegisterForm input[name=badgeBcolor]').spectrum({
+				preferredFormat: "hex",
+				showInput: true,
+				allowEmpty: true
+			}); */
+
+			$("#viewStartDtNew").val(_today);
+			$("#viewEndDtNew").val(_today);
+
+			$("#questionEventInsert").hide();
+			$("#questionEventUpdate").hide();
+		} 
+		$('#frontGb').trigger('change');
+	});
+
+/*]]>*/
+</script>
+
+</html>

+ 0 - 1092
src/main/webapp/WEB-INF/views/order/CancelRequestFormBack01.html

@@ -1,1092 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : CancelRequestForm.html
- * @desc    : 취소요청 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.12   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1400" data-height="600">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>취소요청</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupCancelRequestForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
-				<input type="hidden" name="chgGb" 		value="30" />
-				<input type="hidden" name="ordDtlNos" 	value="" />
-				<input type="hidden" name="chgQtys" 	value="" />
-				<input type="hidden" name="ordNo" 	 	th:value="${ordNo}" />
-				<input type="hidden" name="mallGb" 		th:value="${orderInfo.mallGb}" />
-				<input type="hidden" name="delvFee" 	value="0" />
-				<input type="hidden" name="pgStat"	 	value="" />
-				<input type="hidden" name="chgReason"	value="" />
-				<input type="hidden" name="chgReasonDesc" value="" />
-				<input type="hidden" name="cncWait" 	th:value="${cncWait}" />
-		
-				<h3>주문정보</h3>
-				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
-
-				<h3>취소정보</h3>
-				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
-				
-				<h3>배송비정보</h3>
-				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
-				
-				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
-					<label th:if="${sessionInfo.userId == 'jsshin'
-									|| sessionInfo.userId == 'dlffyd7942'
-									|| sessionInfo.userId == 'card007'
-									|| sessionInfo.userId == 'hrkim'
-									|| sessionInfo.userId =='666badboy'
-									|| sessionInfo.userId =='yjyy83'}">
-						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
-					</label>
-					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
-				</div>
-				
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:160px;" />
-						<col style="width:320px;" />
-						<col style="width:160px;" />
-						<col />
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>취소사유 <i class="star"></i></th>
-							<td>
-								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
-									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-								</select>
-							</td>
-							<th>귀책사유</th>
-							<td><span id="imputeReason"></span></td>
-						</tr>
-						<tr>
-							<th>요청메모</th>
-							<td colspan="3">
-								<textarea name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
-							</td>
-						</tr>
-					</tbody>
-				</table>
-				
-				<h4>환불예정금액</h4>
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:20%;"/>
-						<col style="width:30%;"/>
-						<col style="width:20%;"/>
-						<col style="width:30%;"/>
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>총 결제 금액</th>
-							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
-						</tr>
-						<tr>
-							<th>주문 상품 금액</th>
-							<td><span id="spanOrdAmt"></span>원</td>
-							<th>취소 상품 금액</th>
-							<td><span id="spanCnclRtnAmt"></span>원</td>
-						</tr>
-						<tr>
-							<th>취소 사용 포인트</th>
-							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
-						</tr>
-						<tr>
-							<th>취소 사용 쿠폰금액</th>
-							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
-						</tr>
-						<tr>
-							<th>취소 다다익선 금액</th>
-							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
-						</tr>
-						
-						<tr>
-							<th>취소 고객 상품권 금액</th>
-							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
-						</tr>
-						
-						<tr>
-							<th>취소 상품 실결제 금액</th>
-							<td><span id="spanRealCnclRtnAmt"></span>원</td>
-							<th>추가 배송 금액</th>
-							<td><span id="spanTotDeliveryFee"></span>원 </td>
-						</tr>
-						<tr>
-							<th>환불 금액 합계</th>
-							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
-						</tr>
-					</tbody>
-				</table>
-				
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var cancelRequestTargetList = [[${cancelRequestTargetList}]];
-
-var temp1 = true;
-var temp2 = false;
-
-// specify the columns
-var columnCancelReqList = [
-	{
-		headerName	: "주문상세정보",
-		children	: [
-			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
-			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
-		]
-	},
-	{
-		headerName	: "주문상세단품정보",
-		children	: [
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세수량",
-		children	: [
-			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
-					return cnclRtnReqQty;
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "ordCanChgQty"			
-				, width			: 100		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var ordQty 			= parseInt(params.data.ordQty);
-					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
-					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
-					
-					var strVal 			= "";
-					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
-					
-					for (i=0 ; i<=ordCanChgQty ; i++) {
-						if (i == params.data.ordCanChgQty) {
-							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
-						} else {
-							strVal += "	<option value='"+i+"'>"+i+"</option>";
-						}
-					}
-				
-					strVal += "</select>";
-					return strVal;
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문단품금액",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "실결제금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
-// Add on options
-gridOptionsCancelReqList.suppressRowClickSelection = true;
-gridOptionsCancelReqList.rowSelection = 'multiple';
-
-
-//specify the columns
-var columnCancelReqToBeList = [
-	{
-		headerName	: "주문상세정보",
-		children	: [
-			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
-			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
-		]
-	},
-	{
-		headerName	: "주문상세단품정보",
-		children	: [
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세수량",
-		children	: [
-			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
-					return cnclRtnReqQty;
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "ordCanChgQty"			
-				, width			: 100		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문단품금액",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "환불금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
-
-//specify the columns
-var columnDelvCdList = [
-	{
-		headerName	: "배송코드기준금액",
-		children	: [
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "환불"		
-				, field			: "realOrdAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "추가배송비"		
-				, field			: "addDelvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
-</script>
-
-<!-- AgGrid 컬럼 세팅 -->
-<script>
-// 공통1. 주문상세 그리드 옵션 정보 적용
-var orderAgGrid = {
-	getGridOptions : function(colDefs) {
-		return {
-			columnDefs					: colDefs
-			, detailCellRendererParams	: {
-				detailGridOptions	: {
-					columnDefs				: []
-					, defaultColDef			: {
-						resizable: true
-					}
-					, suppressLoadingOverlay: false
-					, onGridReady			: function (params) {
-						params.api.setDomLayout('autoHeight');
-					}
-					, onFirstDataRendered	: function (params) {
-						params.api.sizeColumnsToFit();
-					}
-				}
-				, getDetailRowData: function (params) {
-					params.successCallback(params.data.orderDetailList);
-				}
-			}
-			, defaultColDef: {
-				resizable: true
-			}
-			, isRowMaster: function (dataItem) {
-				return dataItem ? dataItem.orderDetailList.length > 1 : false;
-			}
-			, suppressRowTransform: true
-			, enableRangeSelection: true
-		};
-	}
-}
-</script>
-
-<script>
-// 취소정보계산
-var fnCalculateRefundAmt = function (obj) {
-	// 취소정보담은목록
-	var cancelRequestTargetToBeList = [];
-
-	if (obj != null) {
-		for (i=0 ; i<cancelRequestTargetList.length ; i++) {
-			var orDtlNo 		= $(obj).attr("ordDtlNo");
-			var ordCanChgQty 	= $(obj).val();
-			
-			if (cancelRequestTargetList[i].ordDtlNo == orDtlNo) {
-				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
-			}
-		}
-		// 주문정보 다시 셋팅 (체크해봐야할문제)
-		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	}
-	
-	/*
-	// 취소 후 발생되는 배송정보 설정
-	var delvFeeList 		= [];
-	var delvObj				= new Object();
-	var k					= 0;
-	
-	// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
-	delvObj.ordAmt 			= 0;
-	delvObj.cnclRtnAmt 		= 0;
-	delvObj.realOrdAmt 		= 0;
-	delvObj.delvFee 		= cancelRequestTargetList[k].delvFee;
-	delvObj.minOrdAmt 		= cancelRequestTargetList[k].minOrdAmt;
-	delvObj.orgDelvFee 		= cancelRequestTargetList[k].orgDelvFee;
-	delvObj.supplyCompCd 	= cancelRequestTargetList[k].supplyCompCd;
-	delvObj.delvFeeCd 		= cancelRequestTargetList[k].delvFeeCd;
-	delvObj.allCanYn		= cancelRequestTargetList[k].allCanYn;
-
-	delvFeeList[k] 			= delvObj;
-	
-	var spanPayAmt			= 0; // 총 결제 금액
-	var spanSumRealOrdAmt	= 0; // 상품 실결제 금액
-	var spanSumDeliveryFee	= 0; // 배송금액
-	var spanOrdAmt			= 0; // 주문 상품 금액
-	var spanCnclRtnAmt		= 0; // 취소 상품 금액
-	var spanTotPntDcAmt		= 0; // 취소 사용 포인트
-	var spanPntDcAmt		= 0; // 고객 포인트
-	var spanPrePntDcAmt		= 0; // 상품 선포인트
-	var spanCpnDcAmt		= 0; // 취소 사용 쿠폰금액
-	var spanCpn1DcAmt		= 0; // 즉시할인쿠폰
-	var spanGoodsCpnDcAmt	= 0; // 상품쿠폰
-	var spanCartCpnDcAmt	= 0; // 장바구니쿠폰
-	var spanTmtbDcAmt		= 0; // 취소 다다익선 금액
-	var spanTmtb1DcAmt		= 0; // 수량할인
-	var spanTmtb2DcAmt		= 0; // 금액할인
-	var spanGfcdUseAmt		= 0; // 취소 고객 상품권 금액
-	var spanRealCnclRtnAmt	= 0; // 취소 상품 실결제 금액
-	var spanTotDeliveryFee	= 0; // 환불 배송 금액
-	var spanRefundAmt		= 0; // 환불 금액 합계
-
-	// 취소정보 설정
-	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
-		var obj 			= new Object();
-		
-		var itemQty 		= cancelRequestTargetList[i].itemQty;
-		var ordQty 			= cancelRequestTargetList[i].ordQty;
-		var cnclRtnQty 		= cancelRequestTargetList[i].cnclRtnQty;
-		var ordReqChgQty 	= cancelRequestTargetList[i].ordReqChgQty;
-		var ordCanChgQty 	= cancelRequestTargetList[i].ordCanChgQty;
-		var itemPrice 		= cancelRequestTargetList[i].itemPrice;
-		var optAddPrice 	= cancelRequestTargetList[i].optAddPrice;
-		var ordAmt 			= cancelRequestTargetList[i].ordAmt;
-		
-		var cnclRtnAmt 		= cancelRequestTargetList[i].cnclRtnAmt;
-		var cpn1DcAmt 		= cancelRequestTargetList[i].cpn1DcAmt;
-		var tmtb1DcAmt 		= cancelRequestTargetList[i].tmtb1DcAmt;
-		var tmtb2DcAmt 		= cancelRequestTargetList[i].tmtb2DcAmt;
-		var goodsCpnDcAmt 	= cancelRequestTargetList[i].goodsCpnDcAmt;
-		var cartCpnDcAmt 	= cancelRequestTargetList[i].cartCpnDcAmt;
-		var pntDcAmt 		= cancelRequestTargetList[i].pntDcAmt;
-		var prePntDcAmt 	= cancelRequestTargetList[i].prePntDcAmt;
-		var gfcdUseAmt 		= cancelRequestTargetList[i].gfcdUseAmt;
-		var realOrdAmt 		= cancelRequestTargetList[i].realOrdAmt;
-		
-		obj.ordNo			= cancelRequestTargetList[i].ordNo;
-		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
-		obj.goodsCd			= cancelRequestTargetList[i].goodsCd;
-		obj.goodsNm			= cancelRequestTargetList[i].goodsNm;
-		obj.itemCd			= cancelRequestTargetList[i].itemCd;
-		obj.itemNm			= cancelRequestTargetList[i].itemNm;
-		obj.optCd1			= cancelRequestTargetList[i].optCd1;
-		obj.optCd2			= cancelRequestTargetList[i].optCd2;
-		obj.itemQty			= itemQty;
-		obj.ordQty			= ordQty;
-		obj.cnclRtnQty		= cnclRtnQty;
-		obj.ordReqChgQty	= ordReqChgQty;
-		obj.ordCanChgQty	= ordCanChgQty;
-		obj.itemPrice		= itemPrice;
-		obj.optAddPrice		= optAddPrice;
-		obj.ordAmt			= ordAmt;
-		
-		obj.cnclRtnAmt 		= ((itemPrice + optAddPrice) * itemQty) * ordCanChgQty;
-		obj.cpn1DcAmt 		= cpn1DcAmt 		* (ordCanChgQty/ordQty);
-		obj.tmtb1DcAmt 		= tmtb1DcAmt 		* (ordCanChgQty/ordQty);
-		obj.tmtb2DcAmt 		= tmtb2DcAmt 		* (ordCanChgQty/ordQty);
-		obj.goodsCpnDcAmt 	= goodsCpnDcAmt 	* (ordCanChgQty/ordQty);
-		obj.cartCpnDcAmt 	= cartCpnDcAmt 		* (ordCanChgQty/ordQty);
-		obj.pntDcAmt 		= pntDcAmt 			* (ordCanChgQty/ordQty);
-		obj.prePntDcAmt 	= prePntDcAmt 		* (ordCanChgQty/ordQty);
-		obj.gfcdUseAmt 		= gfcdUseAmt 		* (ordCanChgQty/ordQty);
-		
-		obj.realOrdAmt 		= obj.cnclRtnAmt - (obj.cpn1DcAmt  + obj.tmtb1DcAmt + obj.tmtb2DcAmt + obj.goodsCpnDcAmt + obj.cartCpnDcAmt + obj.pntDcAmt + obj.prePntDcAmt + obj.gfcdUseAmt);
-		
-		// 배송관련 설정		
-		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
-		obj.goodsTypeNm		= cancelRequestTargetList[i].goodsTypeNm;
-		obj.delvFee			= cancelRequestTargetList[i].delvFee;
-		obj.supplyCompCd	= cancelRequestTargetList[i].supplyCompCd;
-		obj.delvFeeCd		= cancelRequestTargetList[i].delvFeeCd;
-		obj.minOrdAmt		= cancelRequestTargetList[i].minOrdAmt;
-		obj.orgDelvFee		= cancelRequestTargetList[i].orgDelvFee;
-		
-		// 주문상세상태
-		obj.ordDtlStat		= cancelRequestTargetList[i].ordDtlSat;
-		obj.ordDtlSatNm		= cancelRequestTargetList[i].ordDtlSatNm;
-		obj.allCanYn		= cancelRequestTargetList[i].allCanYn;
-		
-		cancelRequestTargetToBeList[i] = obj;
-
-		// 배송비 정책 기준으로 조건 처리
-		if (delvFeeList[k].supplyCompCd == obj.supplyCompCd && delvFeeList[k].delvFeeCd == obj.delvFeeCd) {
-			// 공급업체 와 배송정책코드가 같으면 주문금액, 취소금액 SUM
-			delvFeeList[k].ordAmt 		+= obj.ordAmt;
-			delvFeeList[k].cnclRtnAmt 	+= obj.cnclRtnAmt;
-			delvFeeList[k].realOrdAmt 	+= obj.realOrdAmt;
-			
-			if (obj.allCanYn == "N") {
-				delvFeeList[k].allCanYn = "N";
-			}
-		} else {			
-			k++;
-			
-			var delvObj					= new Object();
-			
-			// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
-			delvObj.ordAmt 				= obj.ordAmt;
-			delvObj.cnclRtnAmt 			= obj.cnclRtnAmt;
-			delvObj.realOrdAmt 			= obj.realOrdAmt;
-			
-			delvObj.delvFee 			= obj.delvFee;
-			delvObj.minOrdAmt 			= obj.minOrdAmt;			
-			delvObj.orgDelvFee 			= obj.orgDelvFee;
-			delvObj.supplyCompCd 		= obj.supplyCompCd;
-			delvObj.delvFeeCd 			= obj.delvFeeCd;
-			delvObj.allCanYn			= obj.allCanYn;
-			
-			delvFeeList[k] 				= delvObj;
-		}
-		
-		spanSumRealOrdAmt	+= realOrdAmt;
-		spanPntDcAmt		+= obj.pntDcAmt;
-		spanPrePntDcAmt		+= obj.prePntDcAmt;
-		spanCpn1DcAmt		+= obj.cpn1DcAmt;
-		spanGoodsCpnDcAmt	+= obj.goodsCpnDcAmt;
-		spanCartCpnDcAmt	+= obj.cartCpnDcAmt;
-		spanTmtb1DcAmt		+= obj.tmtb1DcAmt;
-		spanTmtb2DcAmt		+= obj.tmtb2DcAmt;
-		spanGfcdUseAmt		+= obj.gfcdUseAmt;
-		spanRealCnclRtnAmt	+= obj.realOrdAmt;
-	}
-	
-	// 추가배송비 발생여부 , 추가배송비, 배송비정책단위 전체취소 여부
-	for (i=0 ; i<delvFeeList.length ; i++) {
-		var obj = delvFeeList[i];
-		
-		// 무료배송비용 > (주문금액 - 취소금액)
-		if (obj.minOrdAmt > (obj.ordAmt - obj.cnclRtnAmt)) {
-			// 2020.12.28 
-			// case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
-			if ((obj.ordAmt - obj.cnclRtnAmt) == 0) {
-				if (obj.allCanYn == "N") {
-					obj.addDelvFeeYn 	= "Y";
-					obj.addDelvFee 		= obj.orgDelvFee;
-				} else {
-					// 전체취소의 경우에 해당
-					obj.addDelvFeeYn 	= "N";
-					obj.addDelvFee 		= 0;
-				}
-			} else {
-				// 취소신청화면에서 대부분 아래의 조건에 해당
-				obj.addDelvFeeYn 	= "Y";
-				obj.addDelvFee 		= obj.orgDelvFee;
-			}
-			
-			//obj.addDelvFeeYn 	= "Y";
-			//obj.addDelvFee 		= obj.orgDelvFee;
-		} else {
-			obj.addDelvFeeYn 	= "N";
-			obj.addDelvFee 		= 0;
-		}
-		
-		spanSumDeliveryFee	+= obj.delvFee;
-		spanOrdAmt			+= obj.ordAmt;
-		spanCnclRtnAmt		+= obj.cnclRtnAmt;
-		spanTotDeliveryFee  += obj.addDelvFee;
-				
-		delvFeeList[i] = obj;
-	}
-
-	gridOptionsCancelReqToBeList.api.setRowData(cancelRequestTargetToBeList);
-	gridOptionsDelvCdList.api.setRowData(delvFeeList);
-	
-	// 환불금액표시
-	spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee;
-	spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
-	spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
-	spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
-	spanRefundAmt 		= spanRealCnclRtnAmt - spanTotDeliveryFee;
-	
-	$("#spanPayAmt").text(spanPayAmt.addComma());					//총 결제 금액
-	$("#spanSumRealOrdAmt").text(spanSumRealOrdAmt.addComma());		//상품 실결제 금액
-	$("#spanSumDeliveryFee").text(spanSumDeliveryFee.addComma());	//배송금액
-	
-	$("#spanOrdAmt").text(spanOrdAmt.addComma());					//주문 상품 금액
-	$("#spanCnclRtnAmt").text(spanCnclRtnAmt.addComma());			//취소 상품 금액
-	
-	$("#spanTotPntDcAmt").text(spanTotPntDcAmt.addComma());			//취소 사용 포인트
-	$("#spanPntDcAmt").text(spanPntDcAmt.addComma());				//고객 포인트
-	$("#spanPrePntDcAmt").text(spanPrePntDcAmt.addComma());			//상품 선포인트
-	
-	$("#spanCpnDcAmt").text(spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
-	$("#spanCpn1DcAmt").text(spanCpn1DcAmt.addComma());				//즉시할인쿠폰
-	$("#spanGoodsCpnDcAmt").text(spanGoodsCpnDcAmt.addComma());		//상품쿠폰
-	$("#spanCartCpnDcAmt").text(spanCartCpnDcAmt.addComma());		//장바구니쿠폰
-	
-	$("#spanTmtbDcAmt").text(spanTmtbDcAmt.addComma());				//취소 다다익선 금액
-	$("#spanTmtb1DcAmt").text(spanTmtb1DcAmt.addComma());			//수량할인
-	$("#spanTmtb2DcAmt").text(spanTmtb2DcAmt.addComma());			//금액할인
-	
-	$("#spanGfcdUseAmt").text(spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
-	
-	$("#spanRealCnclRtnAmt").text(spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
-	$("#spanTotDeliveryFee").text(spanTotDeliveryFee.addComma());	//환불 배송 금액
-	
-	$("#spanRefundAmt").text(spanRefundAmt.addComma());				//환불 금액 합계
-	*/
-	
-	// 환불금액계산호출
-	var jsonData = JSON.stringify(cancelRequestTargetList);
-	gagajf.ajaxJsonSubmit(
-		'/order/cancel/refundAmt'
-		, jsonData
-		, function(result) {
-			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
-			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
-			
-			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
-			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
-			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
-			
-			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
-			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
-			
-			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
-			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
-			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
-			
-			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
-			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
-			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
-			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
-			
-			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
-			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
-			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
-			
-			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
-			
-			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
-			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
-			
-			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
-			
-			//alert("a");
-			//$('#btnSearch').trigger('click');
-		}
-	);
-}
-
-//  사유
-var fnChangeChgReason = function(reasonCd){
-	var arrREasonCd = reasonCd.split(":");
-	
-	// 취소, 반품, 교환 사유 판단
-	if (arrREasonCd[0] == 'G686_10') {
-		$("#imputeReason").text("고객");
-		isImputationCustomers = true;
-	} else {
-		$("#imputeReason").text("회사");
-		isImputationCustomers = false;
-	}
-
-	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
-
-	//fnCalculateRefundAmt();			//환불예정금액 계산.
-}
-
-// 에스크로 전체취소, 부분취소 요청
-var fnCancelRequestPartOk = function () {
-	// 취소, 반품, 교환 신청 정보 목록
-	//cancelRequestTargetList;
-	
-	var jsonData = JSON.stringify(cancelRequestTargetList);
-	
-	gagajf.ajaxJsonSubmit(
-		'/order/cancel/'
-		, jsonData
-		, function() {
-			$('#btnSearch').trigger('click');
-		}
-	);
-	
-}
-
-$(document).ready(function() {	
-	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
-	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	
-	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
-	
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
-	
-	// 취소정보계산
-	fnCalculateRefundAmt(null);
-});
-</script>
-</html>
-
-
-
-
-

+ 0 - 1054
src/main/webapp/WEB-INF/views/order/CancelRequestFormBack02.html

@@ -1,1054 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : CancelRequestForm.html
- * @desc    : 취소요청 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.12   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1400" data-height="600">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>취소요청</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupCancelRequestForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/orderChange/cancel" method="post" target="hdFrameForOrderCancel">
-				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
-				<input type="hidden" name="chgReason" value=""/>
-				<input type="hidden" name="chgReasonDesc" value=""/>
-				
-				<h4>주문정보</h4>
-				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
-
-				<h4>취소정보</h4>
-				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
-				
-				<h4>배송비정보</h4>
-				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
-				
-				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" onclick="fnCnclReq('req');">취소신청</button>
-					<button type="button" class="btn btn-success" onclick="fnCnclReq('complete');">취소완료</button>
-				</div>
-				
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:160px;" />
-						<col style="width:320px;" />
-						<col style="width:160px;" />
-						<col />
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>취소사유 <i class="star"></i></th>
-							<td>
-								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
-									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-								</select>
-							</td>
-							<th>귀책사유</th>
-							<td><span id="imputeReason"></span></td>
-						</tr>
-						<tr>
-							<th>요청메모</th>
-							<td colspan="3">
-								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
-							</td>
-						</tr>
-					</tbody>
-				</table>
-				
-				<h4>환불예정금액</h4>
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:20%;"/>
-						<col style="width:30%;"/>
-						<col style="width:20%;"/>
-						<col style="width:30%;"/>
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>총 결제 금액</th>
-							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
-						</tr>
-						<tr>
-							<th>주문 상품 금액</th>
-							<td><span id="spanOrdAmt"></span>원</td>
-							<th>취소 상품 금액</th>
-							<td><span id="spanCnclRtnAmt"></span>원</td>
-						</tr>
-						<tr>
-							<th>취소 사용 포인트</th>
-							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
-						</tr>
-						<tr>
-							<th>취소 사용 쿠폰금액</th>
-							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
-						</tr>
-						<tr>
-							<th>취소 다다익선 금액</th>
-							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
-						</tr>
-						
-						<tr>
-							<th>취소 고객 상품권 금액</th>
-							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
-						</tr>
-						
-						<tr>
-							<th>취소 상품 실결제 금액</th>
-							<td><span id="spanRealCnclRtnAmt"></span>원</td>
-							<th>추가 배송 금액</th>
-							<td><span id="spanTotDeliveryFee"></span>원 </td>
-						</tr>
-						
-						<tr>
-							<th>환불 금액 합계</th>
-							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
-						</tr>
-					</tbody>
-				</table>
-				
-				<div id="wrapRefundAccount" style="width:50%;">
-					<h4>환불계좌정보</h4>
-					<button type="button" id="btnSaveAccount" class="btn btnRight btn-base btn-sm" style="margin-left:10px;" onclick="fnCreateOrderRfAccount();">등록</button>
-					<div id="gridRefundAccountInfo" style="height: 150px;" class="ag-theme-balham"></div>
-				</div>
-				
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상목록
-var ordNo 					= [[${ordNo}]];									// 주문번호
-var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
-var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
-
-var temp1 = true;
-var temp2 = false;
-
-// 1. 주문정보(반품대상)
-var columnCancelReqList = [
-	{
-		headerName	: "주문상세정보",
-		children	: [
-			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
-			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
-		]
-	},
-	{
-		headerName	: "주문상세단품정보",
-		children	: [
-			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세수량",
-		children	: [
-			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
-					return cnclRtnReqQty;
-				}
-			},
-			{
-				headerName		: "취소/반품"		
-				, field			: "ordCanChgQty"			
-				, width			: 100		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var ordQty 			= parseInt(params.data.ordQty);
-					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
-					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
-					
-					var strVal 			= "";
-					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
-					
-					for (i=0 ; i<=ordCanChgQty ; i++) {
-						if (i == params.data.ordCanChgQty) {
-							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
-						} else {
-							strVal += "	<option value='"+i+"'>"+i+"</option>";
-						}
-					}
-				
-					strVal += "</select>";
-					return strVal;
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문단품금액",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "실결제금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
-
-// Add on options
-gridOptionsCancelReqList.suppressRowClickSelection = true;
-gridOptionsCancelReqList.rowSelection = 'multiple';
-
-// 2. 취소정보(환불정보)
-var columnCancelReqToBeList = [
-	{
-		headerName	: "주문상세정보",
-		children	: [
-			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
-			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
-		]
-	},
-	{
-		headerName	: "주문상세단품정보",
-		children	: [
-			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세수량",
-		children	: [
-			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
-					return cnclRtnReqQty;
-				}
-			},
-			{
-				headerName		: "취소/반품"		
-				, field			: "ordCanChgQty"			
-				, width			: 100		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문단품금액",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "환불금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
-
-// 3. 배송비정보(환불정보)
-var columnDelvCdList = [
-	{
-		headerName	: "배송코드기준금액",
-		children	: [
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "환불"		
-				, field			: "realOrdAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "추가배송비"		
-				, field			: "addDelvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
-
-// 4. 무통장 계좌정보
-var columnDefsRefundAccountInfo = [
-	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
-	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
-	{headerName: "은행코드"	, field: "bankCd"		, width: 120	, cellClass: 'text-center', hidden:true},
-	{headerName: "계좌번호"	, field: "accountNo"	, width: 150	, cellClass: 'text-center'},
-	{headerName: "예금주"		, field: "accountNm"	, width: 120	, cellClass: 'text-center'},
-	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
-];
-
-var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
-</script>
-
-<script>
-// 현재 사유는 고객 입니다.
-var isCustomer = true;
-
-// 취소정보계산
-var fnCalculateRefundAmt = function (obj) {
-	// 취소정보담은목록
-	var cancelRequestTargetToBeList = [];
-
-	if (obj != null) {
-		for (i=0 ; i<cancelRequestTargetList.length ; i++) {
-			var orDtlNo 		= $(obj).attr("ordDtlNo");
-			var ordCanChgQty 	= $(obj).val();
-			
-			if (cancelRequestTargetList[i].ordDtlNo == orDtlNo) {
-				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
-			}
-		}
-		// 주문정보 다시 셋팅 (체크해봐야할문제)
-		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	}
-	
-	if (cancelRequestTargetList.length == 0) {
-		alert("요청 대상정보가 존재 하지 않습니다.");
-		uifnPopupClose('popupCancelRequestForm');
-		return false;
-	}
-	
-	// 환불금액계산호출
-	var jsonData = JSON.stringify(cancelRequestTargetList);
-	gagajf.ajaxJsonSubmit(
-		'/orderChange/cancel/refundAmt'
-		, jsonData
-		, function(result) {
-			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
-			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
-			
-			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
-			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
-			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
-			
-			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
-			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
-			
-			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
-			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
-			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
-			
-			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
-			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
-			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
-			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
-			
-			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
-			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
-			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
-			
-			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
-			
-			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
-			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//취소 환불 배송 금액
-			
-			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//반품 환불 배송 금액
-			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
-			
-			if (result.spanRealCnclRtnAmt > 0) {
-				// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
-				if (isCustomer) {
-					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee;
-				} 
-				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
-				else {
-					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
-				}
-			}
-			
-			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
-		}
-	);
-}
-
-//  사유
-var fnChangeChgReason = function(reasonCd){
-	var arrReasonCd = reasonCd.split(":");
-	var customerReasonArr = ['G686_10'];
-
-	isCustomer = false;
-	
-	// 취소, 반품, 교환 사유 판단
-	for (i=0 ; i<customerReasonArr.length ; i++) {
-		if (customerReasonArr[i] == arrReasonCd[0]) {
-			isCustomer = true;
-		}
-	}
-	
-	// 귀책사유설정 회사, 고객
-	if (isCustomer) {
-		$("#imputeReason").text("고객");
-	} else {
-		$("#imputeReason").text("회사");
-	}
-
-	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
-
-	fnCalculateRefundAmt();			//환불예정금액 계산.
-}
-
-// 취소신청/완료
-var fnCnclReq = function (reqGbn) {
-	
-	var temp 		= false;
-	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
-	var allCanYn 	= "N";
-	
-	// 1. 취소수량 체크
-	for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
-		if (cancelRequestTargetList[i].ordCanChgQty > 0) {
-			temp = true;
-		}
-	}
-	
-	if (temp == false) {
-		mcxDialog.alert('취소신청수량을 입력하세요.');
-		return;
-	}
-	
-	// 2. 입금대기건 & 전체취소 체크
-	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
-		alert("입금대기건은 전체 취소만 가능합니다.");
-		return;
-	}
-	
-	// 2.1 전체취소 여부 적용
-	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
-		allCanYn = "Y";	
-	}
-	
-	// 3. 취소사유 체크
-	var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
-	
-	if (gagajf.isNull(chgReason)) {
-		mcxDialog.alert("취소사유를 입력하세요."); 
-		return ;
-	}
-	
-	// 4. 환불계좌 체크
-	var accountNo 	= "";
-	var accountNm 	= "";
-	var bankCd 		= "";
-	
-	// 결제타입 무통장입금시 환불계좌 등록
-	if (payMeans == 'G014_20') {
-		var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
-		
-		if (refundAccount.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-		
-		accountNo 	= refundAccount[0].accountNo;
-		accountNm 	= refundAccount[0].accountNm;
-		bankCd 		= refundAccount[0].bankCd;
-	}
-	
-	// 5. 추가정보설정
-	var chgerNm 	= orderInfoList[0].ordNm;
-	var chgerEmail 	= orderInfoList[0].ordEmail;
-	var chgerPhnno 	= orderInfoList[0].ordPhnno;
-	var chgerTelno 	= orderInfoList[0].ordTelno;
-	
-	var jsonObj = {
-		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
-		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
-		,"chgMemo"			: $('#chgMemo').val()
-		,"cancelReqList" 	: cancelRequestTargetList
-		,"accountNo" 		: accountNo
-		,"accountNm" 		: accountNm
-		,"bankCd" 			: bankCd
-		,"allCanYn" 		: allCanYn
-		,"isCustomer" 		: isCustomer
-		,"chgerNm"			: chgerNm
-		,"chgerEmail"		: chgerEmail
-		,"chgerZipcode"		: ""
-		,"chgerBaseAddr"	: ""
-		,"chgerDtlAddr"		: ""
-		,"chgerPhnno"		: chgerPhnno
-		,"chgerTelno"		: chgerTelno
-	}
-	
-	// 6. 취소신청, 취소완료 여부 체크
-	// 취소완료
-	if (reqGbn == "complete") {
-		cnclUrl = '/orderChange/cnclComplete/';
-	}
-	// 취소신청
-	else if (reqGbn == "req") {
-		cnclUrl = '/orderChange/cnclReq/';
-	}
-	// 취소신청 완료
-	else if (reqGbn == "reqComplete"){
-		cnclUrl = '/orderChange/cnclReqComplete/';
-	}
-
-	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
-	var jsonData = JSON.stringify(jsonObj);
-	
-	mcxDialog.confirm('취소요청하시겠습니까?', {
-		cancelBtnText		: "취소",
-		sureBtnClick		: function(){
-			// 취소 실행
-			gagajf.ajaxJsonSubmit(
-				cnclUrl
-				, jsonData
-				, function() {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-					uifnPopupClose('popupCancelRequestForm');
-				}
-			);
-		}
-	});
-}
-
-// 환불계좌 등록
-var fnCreateOrderRfAccount = function () {	
-	var actionUrl = "/orderChange/refund/account/create/form?ordNo=" + ordNo ;
-	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
-};
-
-// 환불계좌 정보
-var fnBindOrderRfAccountInfo = function () {
-	gagaAgGrid.fetch(
-		"/orderChange/refund/account/info/list?ordNo=" + ordNo
-		, gridOptionsRefundAccountInfo
-		, null
-		, function (result) {
-		}
-	)
-};
-
-$(document).ready(function() {
-	// 1. 그리드생성
-	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
-	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
-	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
-	
-	// 2. 그리드 데이타 싱크작업
-	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);								// 주문정보
-	
-	// 2.1 TOTAL ROWS 없애기
-	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
-	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
-	gagaAgGrid.hideStatusBar('gridDelvCdList');
-	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
-	
-	// 3. 환불정보계산
-	fnCalculateRefundAmt(null);
-	
-	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
-	if (payMeans !== 'G014_20') {
-		$('#wrapRefundAccount').addClass("off");
-		fnBindOrderRfAccountInfo();
-	}
-});
-</script>
-</html>
-
-
-
-
-

+ 0 - 1114
src/main/webapp/WEB-INF/views/order/CnclReqForm.html

@@ -1,1114 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : CancelRequestForm.html
- * @desc    : 취소요청 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.12   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1400" data-height="600">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>취소요청</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupCancelRequestForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/orderChange/cancel" method="post" target="hdFrameForOrderCancel">
-				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
-				<input type="hidden" name="ordChgSq" th:value="${ordChgSq}"/>
-				<input type="hidden" name="chgReason" value=""/>
-				<input type="hidden" name="chgReasonDesc" value=""/>
-				
-				<h4>주문정보</h4>
-				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
-
-				<h4 id="h4OrderCancelRequestToBeList">취소정보</h4>
-				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
-				
-				<h4 id="h4DelvCdList">배송비정보</h4>
-				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
-				
-				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" id="cnclReqBtn" onclick="fnCnclReq('cnclReq');">취소신청</button>
-					<button type="button" class="btn btn-success" id="cnclCompleteBtn" onclick="fnCnclReq('cnclComplete');">취소완료</button>
-					<button type="button" class="btn btn-success" id="cnclReqCancelBtn" onclick="fnCnclReq('cnclReqCancel');">취소철회</button>
-					<button type="button" class="btn btn-success" id="cnclReqCompleteBtn" onclick="fnCnclReq('cnclReqComplete');">취소승인</button>
-				</div>
-				
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:160px;" />
-						<col style="width:320px;" />
-						<col style="width:160px;" />
-						<col />
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>취소사유 <i class="star"></i></th>
-							<td>
-								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
-									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|"></option>
-								</select>
-							</td>
-							<th>귀책사유</th>
-							<td><span id="imputeReason"></span></td>
-						</tr>
-						<tr>
-							<th>요청메모</th>
-							<td colspan="3">
-								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
-							</td>
-						</tr>
-					</tbody>
-				</table>
-				
-				<h4>환불예정금액</h4>
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:20%;"/>
-						<col style="width:30%;"/>
-						<col style="width:20%;"/>
-						<col style="width:30%;"/>
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>총 결제 금액</th>
-							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
-						</tr>
-						<tr>
-							<th>주문 상품 금액</th>
-							<td><span id="spanOrdAmt"></span>원</td>
-							<th>취소 상품 금액</th>
-							<td><span id="spanCnclRtnAmt"></span>원</td>
-						</tr>
-						<tr>
-							<th>취소 사용 포인트</th>
-							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
-						</tr>
-						<tr>
-							<th>취소 사용 쿠폰금액</th>
-							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
-						</tr>
-						<tr>
-							<th>취소 다다익선 금액</th>
-							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
-						</tr>
-						
-						<tr>
-							<th>취소 고객 상품권 금액</th>
-							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
-						</tr>
-						
-						<tr>
-							<th>취소 상품 실결제 금액</th>
-							<td><span id="spanRealCnclRtnAmt"></span>원</td>
-							<th>추가 배송 금액</th>
-							<td><span id="spanTotDeliveryFee"></span>원 </td>
-						</tr>
-						
-						<tr>
-							<th>환불 금액 합계</th>
-							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
-						</tr>
-					</tbody>
-				</table>
-				
-				<div id="wrapRefundAccount" style="width:50%;">
-					<h4>환불계좌정보</h4>
-					<button type="button" id="btnSaveAccount" class="btn btnRight btn-base btn-sm" style="margin-left:10px;" onclick="fnCreateOrderRfAccount();">등록</button>
-					<div id="gridRefundAccountInfo" style="height: 150px;" class="ag-theme-balham"></div>
-				</div>
-				
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상목록
-var ordNo 					= [[${ordNo}]];									// 주문번호
-var ordChgSq 				= [[${ordChgSq}]];								// 주문변경번호
-var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
-var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/교환요청 정보
-var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
-var chgReason				= "";											// 변경사유코드
-var chgMemo					= "";											// 변경사유메모
-
-// 변경요청정보 승인, 철회
-if (ordChgSq > 0) {
-	chgReason				= orderChangeDetailList[0].chgReason;			// 변경사유코드
-	chgMemo					= orderChangeDetailList[0].chgMemo;				// 변경사유메모
-}
-
-var temp1 = true;
-var temp2 = true;
-
-// 1. 주문정보(변경요청가능대상)
-var columnCancelReqList = [
-	{
-		headerName	: "주문상세정보",
-		children	: [
-			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
-			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
-		]
-	},
-	{
-		headerName	: "주문상세단품정보",
-		children	: [
-			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세수량",
-		children	: [
-			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
-					return cnclRtnReqQty;
-				}
-			},
-			{
-				headerName		: "취소/반품"		
-				, field			: "ordCanChgQty"			
-				, width			: 100		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var ordQty 			= parseInt(params.data.ordQty);
-					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
-					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= parseInt(params.value);
-					var rtnStr 			= "";
-					
-					// 취소신청가능수량있으면 수량만 표시 (취소,반품,교환 신청정보 처리)
-					if (ordChgSq > 0) {
-						rtnStr = ordCanChgQty;
-					} else {
-						ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
-						
-						rtnStr += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
-						
-						for (i=0 ; i<=ordCanChgQty ; i++) {
-							if (i == params.data.ordCanChgQty) {
-								rtnStr += "	<option value='"+i+"' selected>"+i+"</option>";
-							} else {
-								rtnStr += "	<option value='"+i+"'>"+i+"</option>";
-							}
-						}
-					
-						rtnStr += "</select>";
-					}
-					
-					return rtnStr;
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문단품금액",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "실결제금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
-
-// Add on options
-gridOptionsCancelReqList.suppressRowClickSelection = true;
-gridOptionsCancelReqList.rowSelection = 'multiple';
-
-// 2. 취소정보(환불정보)
-var columnCancelReqToBeList = [
-	{
-		headerName	: "주문상세정보",
-		children	: [
-			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
-			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
-		]
-	},
-	{
-		headerName	: "주문상세단품정보",
-		children	: [
-			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세수량",
-		children	: [
-			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
-					return cnclRtnReqQty;
-				}
-			},
-			{
-				headerName		: "취소/반품"		
-				, field			: "ordCanChgQty"			
-				, width			: 100		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문단품금액",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "환불금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
-
-// 3. 배송비정보(환불정보)
-var columnDelvCdList = [
-	{
-		headerName	: "배송코드기준금액",
-		children	: [
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "환불"		
-				, field			: "realOrdAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "추가배송비"		
-				, field			: "addDelvFee"			
-				, width			: 100		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
-];
-var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
-
-// 4. 무통장 계좌정보
-var columnDefsRefundAccountInfo = [
-	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
-	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
-	{headerName: "은행코드"	, field: "bankCd"		, width: 120	, cellClass: 'text-center', hidden:true},
-	{headerName: "계좌번호"	, field: "accountNo"	, width: 150	, cellClass: 'text-center'},
-	{headerName: "예금주"		, field: "accountNm"	, width: 120	, cellClass: 'text-center'},
-	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
-];
-
-var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
-</script>
-
-<script>
-// 현재 사유는 고객 입니다.
-var isCustomer = true;
-
-// 취소정보계산
-var fnCalculateRefundAmt = function (obj) {
-	// 변경신청목록
-	var cancelRequestTargetToBeList = [];
-
-	if (obj != null) {
-		for (i=0 ; i<cancelRequestTargetList.length ; i++) {
-			var orDtlNo 		= $(obj).attr("ordDtlNo");
-			var ordCanChgQty 	= $(obj).val();
-			
-			if (cancelRequestTargetList[i].ordDtlNo == orDtlNo) {
-				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
-			}
-		}
-		// 주문변경대상정보 재설정
-		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	}
-	
-	if (cancelRequestTargetList.length == 0) {
-		alert("요청 대상정보가 존재 하지 않습니다.");
-		uifnPopupClose('popupCancelRequestForm');
-		return false;
-	}
-	
-	// 환불금액계산호출
-	var jsonData = JSON.stringify(cancelRequestTargetList);
-	gagajf.ajaxJsonSubmit(
-		'/orderChange/cancel/refundAmt'
-		, jsonData
-		, function(result) {
-			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
-			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
-			
-			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
-			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
-			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
-			
-			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
-			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
-			
-			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
-			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
-			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
-			
-			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
-			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
-			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
-			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
-			
-			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
-			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
-			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
-			
-			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
-			
-			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
-			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//취소 환불 배송 금액
-			
-			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//반품 환불 배송 금액
-			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
-			
-			if (result.spanRealCnclRtnAmt > 0) {
-				// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
-				if (isCustomer) {
-					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee;
-				} 
-				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
-				else {
-					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
-				}
-			}
-			
-			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
-		}
-	);
-}
-
-//  사유
-var fnChangeChgReason = function(reasonCd){
-	var customerReasonArr = ['G686_10'];
-
-	isCustomer = false;
-	
-	// 귀책사유체크(취소,반품,교환)
-	for (i=0 ; i<customerReasonArr.length ; i++) {
-		if (customerReasonArr[i] == reasonCd) {
-			isCustomer = true;
-		}
-	}
-	
-	// 귀책사유체크(회사,고객)
-	if (isCustomer) {
-		$("#imputeReason").text("고객");
-	} else {
-		$("#imputeReason").text("회사");
-	}
-
-	$('#cancelRequestFrm input[name=chgReason]').val(reasonCd);
-	
-	//환불예정금액 계산
-	fnCalculateRefundAmt();
-}
-
-// 취소신청/완료
-var fnCnclReq = function (reqGbn) {
-	var temp 		= false;
-	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat;
-	var allCanYn 	= "N";
-	
-	var accountNo 	= "";
-	var accountNm 	= "";
-	var bankCd 		= "";
-	
-	if (reqGbn == "cnclReq" || reqGbn == "cnclComplete") {
-		// 1. 취소수량 체크
-		for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
-			if (cancelRequestTargetList[i].ordCanChgQty > 0) {
-				temp = true;
-			}
-		}
-		
-		if (temp == false) {
-			mcxDialog.alert('취소신청수량을 입력하세요.');
-			return;
-		}
-		
-		// 2. 입금대기건 & 전체취소 체크
-		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
-			alert("입금대기건은 전체 취소만 가능합니다.");
-			return;
-		}
-		
-		// 2.1 전체취소 여부 적용
-		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
-			allCanYn = "Y";	
-		}
-		
-		// 3. 취소사유 체크
-		var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
-		
-		if (gagajf.isNull(chgReason)) {
-			mcxDialog.alert("취소사유를 입력하세요."); 
-			return ;
-		}
-		
-		// 4. 환불계좌 체크
-		// 결제타입 무통장입금시 환불계좌 등록
-		if (payMeans == 'G014_20') {
-			var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
-			
-			if (refundAccount.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return;
-			}
-			
-			accountNo 	= refundAccount[0].accountNo;
-			accountNm 	= refundAccount[0].accountNm;
-			bankCd 		= refundAccount[0].bankCd;
-		}
-	} else {
-		
-	}
-	
-	// 5. 추가정보설정
-	var chgerNm 	= orderInfoList[0].ordNm;
-	var chgerEmail 	= orderInfoList[0].ordEmail;
-	var chgerPhnno 	= orderInfoList[0].ordPhnno;
-	var chgerTelno 	= orderInfoList[0].ordTelno;
-
-	// 2021.01.26 화면통합
-	// 6. 취소신청, 취소완료 여부 체크
-	// 취소신청
-	if (reqGbn == "cnclReq") {
-		confirmStr 		= "취소신청하시겠습니까?";
-		cnclUrl 		= '/orderChange/cnclComplete/';
-	}
-	// 취소완료
-	else if (reqGbn == "cnclComplete") {
-		confirmStr 		= "취소완료하시겠습니까?";
-		cnclUrl 		= '/orderChange/cnclComplete/';
-	}
-	// 취소신청승인
-	else if (reqGbn == "cnclReqComplete") {
-		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?";
-		cnclUrl 		= '/orderChange/cnclComplete/';
-	}
-	// 취소신청철회
-	else if (reqGbn == "cnclReqCancel") {
-		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?";
-		cnclUrl 		= '/orderChange/cnclReqCancel/';
-	}
-
-	var jsonObj = {
-		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
-		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
-		,"chgMemo"			: $('#chgMemo').val()
-		,"cancelReqList" 	: cancelRequestTargetList
-		,"accountNo" 		: accountNo
-		,"accountNm" 		: accountNm
-		,"bankCd" 			: bankCd
-		,"allCanYn" 		: allCanYn
-		,"isCustomer" 		: isCustomer
-		,"chgerNm"			: chgerNm
-		,"chgerEmail"		: chgerEmail
-		,"chgerZipcode"		: ""
-		,"chgerBaseAddr"	: ""
-		,"chgerDtlAddr"		: ""
-		,"chgerPhnno"		: chgerPhnno
-		,"chgerTelno"		: chgerTelno
-		,"reqGbn"			: reqGbn
-		,"ordChgSq"			: ordChgSq
-	}
-
-	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
-	var jsonData = JSON.stringify(jsonObj);
-	
-	mcxDialog.confirm(confirmStr, {
-		cancelBtnText		: "취소",
-		sureBtnText			: "확인",
-		sureBtnClick		: function() {
-			gagajf.ajaxJsonSubmit(
-				cnclUrl
-				, jsonData
-				, function() {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-					uifnPopupClose('popupCancelRequestForm');
-				}
-			);
-		}
-	});
-}
-
-// 환불계좌 등록
-var fnCreateOrderRfAccount = function () {	
-	var actionUrl = "/orderChange/refund/account/create/form?ordNo=" + ordNo ;
-	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
-};
-
-// 환불계좌 정보
-var fnBindOrderRfAccountInfo = function () {
-	gagaAgGrid.fetch(
-		"/orderChange/refund/account/info/list?ordNo=" + ordNo
-		, gridOptionsRefundAccountInfo
-		, null
-		, function (result) {
-		}
-	)
-};
-
-$(document).ready(function() {
-	// 1. 그리드생성
-	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
-	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
-	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
-	
-	// 2. 그리드 데이타 싱크작업
-	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);								// 주문정보
-	
-	// 2.1 TOTAL ROWS 없애기
-	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
-	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
-	gagaAgGrid.hideStatusBar('gridDelvCdList');
-	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
-	
-	// 3. 환불정보계산
-	fnCalculateRefundAmt(null);
-	
-	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
-	if (payMeans !== 'G014_20') {
-		$('#wrapRefundAccount').addClass("off");
-		fnBindOrderRfAccountInfo();
-	}
-	
-	// 5. 취소신청, 취소완료, 취소승인, 취소철회 버튼 제어
-	if (ordChgSq > 0) {
-		$("#cnclReqBtn").css("display", "none");
-		$("#cnclCompleteBtn").css("display", "none");
-	} else {
-		$("#cnclReqCompleteBtn").css("display", "none");
-		$("#cnclReqCancelBtn").css("display", "none");
-	}
-	
-	// 6. 취소사유 선택
-	if (ordChgSq > 0) {
-		$("select[name='selectChgReason']").val(chgReason);										// 변경사유코드
-		$("select[name='selectChgReason']").attr("disabled", "true");							// 변경사유 비활성화
-		$("#chgMemo").text(chgMemo);															// 변경사유메모
-		$("#chgMemo").attr("disabled", "true");													// 변경사유메모 비활성화
-		fnChangeChgReason(chgReason);															// 귀책사유
-	}
-	
-	// debug mode 해제
-	if (temp2) {
-		$("#h4OrderCancelRequestToBeList").css("display", "none");
-		$("#gridOrderCancelRequestToBeList").css("display", "none");
-		$("#h4DelvCdList").css("display", "none");
-		$("#gridDelvCdList").css("display", "none");
-	}
-});
-</script>
-</html>
-
-
-
-
-

+ 0 - 145
src/main/webapp/WEB-INF/views/order/CnclReqViewForm.html

@@ -1,145 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : CancelRequestForm.html
- * @desc    : 취소요청 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.12   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1400" data-height="350">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>취소요청정보</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupCancelRequestForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/orderChange/cancel" method="post" target="hdFrameForOrderCancel">
-				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
-				<input type="hidden" name="ordChgSq" th:value="${ordChgSq}"/>
-				<input type="hidden" name="chgReason" value=""/>
-				<input type="hidden" name="chgReasonDesc" value=""/>
-
-				<h4>(취소/반품/교환) 요청 정보</h4>
-				<div id="gridOrderChangeList" style="width:100%; height: 180px; min-height:99px;" class="ag-theme-balham"></div>
-				
-				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" onclick="fnCnclReq('cancel');">취소철회</button>
-					<button type="button" class="btn btn-success" onclick="fnCnclReq('confirm');">취소승인</button>
-				</div>
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var ordNo 					= [[${ordNo}]];									// 주문번호
-var ordChgSq 				= [[${ordChgSq}]];								// 주문변경번호
-var orderChangeList 		= [[${orderChangeList}]];						// 취소/반품/교환요청 정보
-
-//
-//var orderInfoList 		= [[${orderInfoList}]];							// 주문기본정보
-//var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
-//var chgReason				= orderChangeList[0].chgReason;					// 변경사유코드
-//var chgMemo				= orderChangeList[0].chgMemo;					// 변경사유메모
-
-var temp1 = true;
-var temp2 = false;
-
-// 6. 반품/교환 정보
-var columnDefsOrderChangeList = [
-	{
-		headerName		: "요청번호"		
-		, field			: "ordChgSq"		
-		, width			: 100	
-		, cellClass		: 'text-center'
-	},
-	{headerName: "요청구분"		, field: "chgGbNm"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "옵션1"			, field: "optCd1"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "수량"			, field: "chgQty"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
-	{
-		headerName		: "요청일자"		
-		, field			: "regDt"		
-		, width			: 150		
-		, cellClass		: 'text-center'
-		, cellRenderer	: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	},
-	{headerName: "변경사유"		, field: "chgReasonNm"	, width: 100	, cellClass: 'text-center'},
-	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-center'},
-	{headerName: "변경자명"		, field: "chgerNm"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "변경자핸드폰"		, field: "chgerPhnno"	, width: 120	, cellClass: 'text-center'}
-];
-var gridOptionsOrderChangeList = gagaAgGrid.getGridOptions(columnDefsOrderChangeList);
-</script>
-
-<!-- function -->
-<script>
-// 취소승인
-var fnCnclReq = function (cnclGbn) {
-	var confirmStr 		= "";
-	var cnclLinkStr	 	= "";
-	
-	if (cnclGbn == "cancel") {
-		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?";
-		cnclLinkStr 	= "/orderChange/cnclReqCancel";
-	} else {
-		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?";
-		cnclLinkStr 	= "/orderChange/cnclReqComplete";
-	}
-	
-	mcxDialog.confirm(confirmStr, {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordNo 		= ordNo;	//전역변수
-			data.ordChgSq 	= ordChgSq;
-
-			var jsonData = JSON.stringify(data);
-			
-			gagajf.ajaxJsonSubmit(
-				cnclLinkStr
-				, jsonData
-				, function (result) {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-					uifnPopupClose('popupCancelRequestForm');
-				}
-			);
-		}
-	});
-};
-</script>
-
-<script>
-$(document).ready(function() {
-	// 1. 그리드생성
-	gagaAgGrid.createGrid('gridOrderChangeList'				, gridOptionsOrderChangeList);			// 취소/반품/교환 요청 정보
-	
-	// 2. 그리드 데이타 싱크작업
-	gridOptionsOrderChangeList.api.setRowData(orderChangeList);										// 취소/반품/교환요청 정보
-	
-	// 2.1 TOTAL ROWS 없애기
-	gagaAgGrid.hideStatusBar('gridOrderChangeList');
-});
-</script>
-</html>
-
-
-
-
-

+ 199 - 56
src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html

@@ -33,7 +33,8 @@
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				
 				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" id="fnExchangeRequestSubmit" onclick="fnExchange()">요청</button>
+					<button type="button" class="btn btn-success" th:unless="${ordChgSq > 0}" id="fnExchangeRequestSubmit" onclick="fnExchange()">교환요청</button>
+					<button type="button" class="btn btn-success" th:if="${ordChgSq > 0}" id="fnExchangeCancelRequestSubmit" onclick="fnExchangeCancel()">교환철회</button>
 				</div>
 				</div>
 				
 				
 				<table class="frmStyle">
 				<table class="frmStyle">
@@ -46,20 +47,21 @@
 					<tbody>
 					<tbody>
 						<tr>
 						<tr>
 							<th>교환사유 <i class="star"></i></th>
 							<th>교환사유 <i class="star"></i></th>
-							<td>
+							<td th:unless="${ordChgSq > 0}">
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
 									<option value="">[선택하세요]</option>
 									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 								</select>
 								</select>
 							</td>
 							</td>
+							<td th:if="${ordChgSq > 0}" th:id="chgReason"></td>
 							<th>귀책사유</th>
 							<th>귀책사유</th>
 							<td><span id="imputeReason"></span></td>
 							<td><span id="imputeReason"></span></td>
 						</tr>
 						</tr>
 						<tr>
 						<tr>
 							<th>회수방법</th>
 							<th>회수방법</th>
 							<td>
 							<td>
-								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="W" onclick="fnChangeQty()" checked="checked"/>회수요청<span></span></label>
-								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="D" onclick="fnChangeQty()"/>직접발송<span></span></label>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="W" onclick="fnChangeWdGb(this)"/>회수요청<span></span></label>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="D" onclick="fnChangeWdGb(this)"/>직접발송<span></span></label>
 							</td>
 							</td>
 							<th>추가배송비</th>
 							<th>추가배송비</th>
 							<td id="addDelvFee"></td>
 							<td id="addDelvFee"></td>
@@ -73,8 +75,8 @@
 					</tbody>
 					</tbody>
 				</table>
 				</table>
 				
 				
-				<h4>회수지 정보</h4>
-				<table class="frmStyle">
+				<h4 class="chger">회수지 정보</h4>
+				<table class="frmStyle chger">
 					<colgroup>
 					<colgroup>
 						<col style="width:160px;" />
 						<col style="width:160px;" />
 						<col style="width:320px;" />
 						<col style="width:320px;" />
@@ -90,7 +92,7 @@
 							<th>회수지주소 <i class="star"></i></th>
 							<th>회수지주소 <i class="star"></i></th>
 							<td colspan="3">
 							<td colspan="3">
 								<input type="text" name ="chgerZipcode" class="w100" readonly="readonly"/>
 								<input type="text" name ="chgerZipcode" class="w100" readonly="readonly"/>
-								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('withdraw');">우편번호찾기</button>
+								<button type="button" class="btn btn-info" th:unless="${ordChgSq > 0}" onclick="fnOpenDaumAddr('withdraw');">우편번호찾기</button>
 								<input type="text" name ="chgerBaseAddr" class="w300"/>
 								<input type="text" name ="chgerBaseAddr" class="w300"/>
 								<input type="text" name ="chgerDtlAddr" class="w300"/>
 								<input type="text" name ="chgerDtlAddr" class="w300"/>
 							</td>
 							</td>
@@ -102,8 +104,8 @@
 									<option value="">[선택하세요]</option>
 									<option value="">[선택하세요]</option>
 									<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 									<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 								</select>
 								</select>
-								- <input type="text" name ="chgerTelno2" class="w60" value="0000" />
-								- <input type="text" name ="chgerTelno3" class="w60" value="0000" />
+								- <input type="text" name ="chgerTelno2" class="w60"/>
+								- <input type="text" name ="chgerTelno3" class="w60"/>
 							</td>
 							</td>
 							<th>휴대전화 <i class="star"></i></th>
 							<th>휴대전화 <i class="star"></i></th>
 							<td>
 							<td>
@@ -111,8 +113,8 @@
 									<option value="">[선택하세요]</option>
 									<option value="">[선택하세요]</option>
 									<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 									<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 								</select>
 								</select>
-								- <input type="text" name ="chgerPhnno2" class="w60" value="0000" />
-								- <input type="text" name ="chgerPhnno3" class="w60" value="0000" />
+								- <input type="text" name ="chgerPhnno2" class="w60"/>
+								- <input type="text" name ="chgerPhnno3" class="w60"/>
 							</td>
 							</td>
 						</tr>
 						</tr>
 						<tr>
 						<tr>
@@ -141,7 +143,7 @@
 						<th>교환지주소 <i class="star"></i></th>
 						<th>교환지주소 <i class="star"></i></th>
 						<td colspan="3">
 						<td colspan="3">
 							<input type="text" name ="recipZipcode" class="w100" readonly="readonly"/>
 							<input type="text" name ="recipZipcode" class="w100" readonly="readonly"/>
-							<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('exchange');">우편번호찾기</button>
+							<button type="button" class="btn btn-info" th:unless="${ordChgSq > 0}" onclick="fnOpenDaumAddr('exchange');">우편번호찾기</button>
 							<input type="text" name ="recipBaseAddr" class="w300"/>
 							<input type="text" name ="recipBaseAddr" class="w300"/>
 							<input type="text" name ="recipDtlAddr" class="w300"/>
 							<input type="text" name ="recipDtlAddr" class="w300"/>
 						</td>
 						</td>
@@ -153,8 +155,8 @@
 								<option value="">[선택하세요]</option>
 								<option value="">[선택하세요]</option>
 								<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 								<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 							</select>
 							</select>
-							- <input type="text" name ="recipTelno2" class="w60" value="0000" />
-							- <input type="text" name ="recipTelno3" class="w60" value="0000" />
+							- <input type="text" name ="recipTelno2" class="w60"/>
+							- <input type="text" name ="recipTelno3" class="w60"/>
 						</td>
 						</td>
 						<th>휴대전화 <i class="star"></i></th>
 						<th>휴대전화 <i class="star"></i></th>
 						<td>
 						<td>
@@ -162,8 +164,8 @@
 								<option value="">[선택하세요]</option>
 								<option value="">[선택하세요]</option>
 								<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 								<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 							</select>
 							</select>
-							- <input type="text" name ="recipPhnno2" class="w60" value="0000" />
-							- <input type="text" name ="recipPhnno3" class="w60" value="0000" />
+							- <input type="text" name ="recipPhnno2" class="w60"/>
+							- <input type="text" name ="recipPhnno3" class="w60"/>
 						</td>
 						</td>
 					</tr>
 					</tr>
 					<tr>
 					<tr>
@@ -184,16 +186,32 @@
 /*<![CDATA[*/
 /*<![CDATA[*/
 var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 교환대상목록
 var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 교환대상목록
 var ordNo 					= [[${ordNo}]];									// 주문번호
 var ordNo 					= [[${ordNo}]];									// 주문번호
+var ordChgSq 				= [[${ordChgSq}]];								// 주문변경번호
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var orderDelvAddrInfo		= [[${orderDelvAddrInfo}]];						// 회수지정보
 var orderDelvAddrInfo		= [[${orderDelvAddrInfo}]];						// 회수지정보
 var addDelvFee				= 0;											// 추가배송비
 var addDelvFee				= 0;											// 추가배송비
 var addDelvFeeList			= [];											// 추가배송비정보
 var addDelvFeeList			= [];											// 추가배송비정보
 var exchangeRequestList		= [];											// 교환요청목록
 var exchangeRequestList		= [];											// 교환요청목록
+var exchangeInfoList;														// 교환정보
+var wdGb;																	// 회수방법
+var chgerRtnMemo;															// 반품메모
+var delvMemo;																// 배송메모
 
 
 var temp1 = true;
 var temp1 = true;
 var temp2 = true;
 var temp2 = true;
 
 
+// 변경요청정보 승인, 철회
+if (ordChgSq > 0) {
+	exchangeInfoList		= [[${exchangeInfoList}]];						// 교환정보
+	chgReason				= exchangeInfoList[0].chgReason;				// 변경사유코드
+	chgReasonNm				= exchangeInfoList[0].chgReasonNm;				// 변경사유코드명
+	chgMemo					= exchangeInfoList[0].chgMemo;					// 변경사유메모
+	chgerRtnMemo			= exchangeInfoList[0].chgerRtnMemo;				// 반품메모
+	delvMemo				= exchangeInfoList[0].delvMemo;					// 배송메모
+	wdGb					= exchangeInfoList[0].wdGb;						// 회수방법
+}
+
 // 1. 주문정보(교환대상)
 // 1. 주문정보(교환대상)
 var columnExchangeReqList = [
 var columnExchangeReqList = [
 	{
 	{
@@ -274,26 +292,33 @@ var columnExchangeReqList = [
 				, width			: 100
 				, width			: 100
 				, cellClass		: "text-center"
 				, cellClass		: "text-center"
 				, cellRenderer	: function (params) {
 				, cellRenderer	: function (params) {
-					var optArr			= params.data.optCd2s.split(',');
-					var ordChgOpt = params.data.ordChgOpt;
-
-					var strVal			= '';
-					strVal += '<select class="ordChgOpt" name="ordChgOpt" ordDtlNo="' + params.data.ordDtlNo + '" ordDtlItemSq="' + params.data.ordDtlItemSq + '" onchange="fnChangeOption(this)">';
-					
-					if (gagajf.isNull(ordChgOpt)) {
-						strVal += '<option value="">선택</option>';
+					if (ordChgSq > 0) {
+						$.each(exchangeInfoList, function(idx, item) {
+							if (params.data.itemCd == item.itemCd && params.data.optCd1 == item.optCd1) {
+								strVal = item.optCd2;
+							}
+						});
 					} else {
 					} else {
-						strVal += '<option value="" selected>선택</option>';
-					}
-
-					$.each(optArr, function(idx,item){
-						if (ordChgOpt == item) {
-							strVal += '<option value="' + item + '" selected>' + item + '</option>';
+						var optArr = params.data.optCd2s.split(',');
+						var ordChgOpt = params.data.ordChgOpt;
+						
+						var strVal = '';
+						strVal += '<select class="ordChgOpt" name="ordChgOpt" ordDtlNo="' + params.data.ordDtlNo + '" ordDtlItemSq="' + params.data.ordDtlItemSq + '" onchange="fnChangeOption(this)">';
+						
+						if (gagajf.isNull(ordChgOpt)) {
+							strVal += '<option value="">선택</option>';
 						} else {
 						} else {
-							strVal += '<option value="' + item + '">' + item + '</option>';
+							strVal += '<option value="" selected>선택</option>';
 						}
 						}
-					});
-
+						
+						$.each(optArr, function (idx, item) {
+							if (ordChgOpt == item) {
+								strVal += '<option value="' + item + '" selected>' + item + '</option>';
+							} else {
+								strVal += '<option value="' + item + '">' + item + '</option>';
+							}
+						});
+					}
 					return strVal;
 					return strVal;
 				}
 				}
 			},
 			},
@@ -304,23 +329,31 @@ var columnExchangeReqList = [
 				, width			: 100
 				, width			: 100
 				, cellClass		: 'text-center'
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 				, cellRenderer	: function (params) {
-					var ordQty 			= parseInt(params.data.ordQty);
-					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
-					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
-					
-					var strVal 			= "";
-					strVal += '<select class="ordCanChgQty ' + params.data.ordDtlNo + '" name="chgQty" ordDtlNo="'+params.data.ordDtlNo+'" onchange="fnChangeQty(this)">';
-					
-					for (i=0 ; i<=ordCanChgQty ; i++) {
-						if (i == params.data.chgQty) {
-							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
-						} else {
-							strVal += "	<option value='"+i+"'>"+i+"</option>";
+					if (ordChgSq > 0) {
+						$.each(exchangeInfoList, function(idx, item) {
+							if (params.data.itemCd == item.itemCd && params.data.optCd1 == item.optCd1) {
+								strVal = item.chgQty;
+							}
+						});
+					} else {
+						var ordQty = parseInt(params.data.ordQty);
+						var cnclRtnQty = parseInt(params.data.cnclRtnQty);
+						var ordReqChgQty = parseInt(params.data.ordReqChgQty);
+						var ordCanChgQty = ordQty - (cnclRtnQty + ordReqChgQty);
+						
+						var strVal = "";
+						strVal += '<select class="ordCanChgQty ' + params.data.ordDtlNo + '" name="chgQty" ordDtlNo="' + params.data.ordDtlNo + '" onchange="fnChangeQty(this)">';
+						
+						for (i = 0; i <= ordCanChgQty; i++) {
+							if (i == params.data.chgQty) {
+								strVal += "	<option value='" + i + "' selected>" + i + "</option>";
+							} else {
+								strVal += "	<option value='" + i + "'>" + i + "</option>";
+							}
 						}
 						}
+						
+						strVal += "</select>";
 					}
 					}
-				
-					strVal += "</select>";
 					return strVal;
 					return strVal;
 				}
 				}
 			}
 			}
@@ -521,7 +554,7 @@ var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 //현재 사유는 회사 입니다.
 //현재 사유는 회사 입니다.
 var isCustomer = false;
 var isCustomer = false;
 
 
-//  사유
+//  사유 변경
 var fnChangeChgReason = function(reasonCd){
 var fnChangeChgReason = function(reasonCd){
 	var arrReasonCd = reasonCd.split(":");
 	var arrReasonCd = reasonCd.split(":");
 	var customerReasonArr = ['G689_10', 'G689_30'];
 	var customerReasonArr = ['G689_10', 'G689_30'];
@@ -620,8 +653,13 @@ var fnExchange = function () {
 		}
 		}
 	
 	
 		var chgerPhnno 		= chgerPhnno1 + '-' + chgerPhnno2 + '-' + chgerPhnno3;
 		var chgerPhnno 		= chgerPhnno1 + '-' + chgerPhnno2 + '-' + chgerPhnno3;
-		var chgerTelno 		= chgerTelno1 + '-' + chgerTelno2 + '-' + chgerTelno3;
 		var chgerEmail 		= orderInfoList[0].ordEmail;
 		var chgerEmail 		= orderInfoList[0].ordEmail;
+		var chgerTelno;
+		if (gagajf.isNull(chgerTelno1) && gagajf.isNull(chgerTelno2) && gagajf.isNull(chgerTelno3)) {
+			chgerTelno 		= '';
+		} else {
+			chgerTelno 		= chgerTelno1 + '-' + chgerTelno2 + '-' + chgerTelno3;
+		}
 	}
 	}
 
 
 	// 교환지정보 설정
 	// 교환지정보 설정
@@ -657,10 +695,15 @@ var fnExchange = function () {
 	if (gagajf.isNull(recipPhnno3)) {
 	if (gagajf.isNull(recipPhnno3)) {
 		mcxDialog.alert("휴대전화를 입력하세요."); return;
 		mcxDialog.alert("휴대전화를 입력하세요."); return;
 	}
 	}
-	
+
 	var recipPhnno 		= recipPhnno1 + '-' + recipPhnno2 + '-' + recipPhnno3;
 	var recipPhnno 		= recipPhnno1 + '-' + recipPhnno2 + '-' + recipPhnno3;
-	var recipTelno 		= recipTelno1 + '-' + recipTelno2 + '-' + recipTelno3;
 	var recipEmail 		= orderInfoList[0].ordEmail;
 	var recipEmail 		= orderInfoList[0].ordEmail;
+	var recipTelno;
+	if (gagajf.isNull(recipTelno1) && gagajf.isNull(recipTelno2) && gagajf.isNull(recipTelno3)) {
+		recipTelno 		= '';
+	} else {
+		recipTelno 		= recipTelno1 + '-' + recipTelno2 + '-' + recipTelno3;
+	}
 	
 	
 	var jsonObj = {
 	var jsonObj = {
 		"ordNo"				: $('#exchangeRequestFrm input[name=ordNo]').val()
 		"ordNo"				: $('#exchangeRequestFrm input[name=ordNo]').val()
@@ -708,11 +751,35 @@ var fnExchange = function () {
 	});
 	});
 }
 }
 
 
+// 교환철회 처리
+var fnExchangeCancel = function() {
+	let data = {};
+	data.ordChgSq = ordChgSq;
+	data.ordNo = ordNo;
+
+	let jsonData = JSON.stringify(data);
+
+	mcxDialog.confirm('요청번호 [' + ordChgSq + '] 에 대한 요청철회 처리를 하시겠습니까?', {
+		cancelBtnText		: "취소",
+		sureBtnClick		: function(){
+			// 교환 실행
+			gagajf.ajaxJsonSubmit(
+				'/orderChange/exchangeCancelRequest/'
+				, jsonData
+				, function() {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+					uifnPopupClose('popupExchangeRequestForm');
+				}
+			);
+		}
+	});
+}
+
 // 우편번호 DAUM을 이용한 우편번호 팝업 레이어
 // 우편번호 DAUM을 이용한 우편번호 팝업 레이어
 var fnOpenDaumAddr = function(loc) {
 var fnOpenDaumAddr = function(loc) {
 	let daumZip = new daum.Postcode({
 	let daumZip = new daum.Postcode({
 		oncomplete: function(data) {
 		oncomplete: function(data) {
-			console.log(data);
 			// 우편번호와 주소 정보를 해당 필드에 넣는다.
 			// 우편번호와 주소 정보를 해당 필드에 넣는다.
 			if (loc == 'withdraw') {
 			if (loc == 'withdraw') {
 				$('#exchangeRequestFrm input[name=chgerZipcode]').val(data.zonecode);
 				$('#exchangeRequestFrm input[name=chgerZipcode]').val(data.zonecode);
@@ -734,7 +801,14 @@ var fnOpenDaumAddr = function(loc) {
 
 
 // 회수지정보 설정
 // 회수지정보 설정
 var fnSetChger = function(){
 var fnSetChger = function(){
-	var data = orderDelvAddrInfo[0];
+	var data;
+	
+	if (ordChgSq > 0) {
+		data = exchangeInfoList[0];
+	} else {
+		data = orderDelvAddrInfo[0];
+	}
+	
 	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
 	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
 	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
 	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
 	
 	
@@ -742,6 +816,7 @@ var fnSetChger = function(){
 	$("#exchangeRequestFrm input[name=chgerZipcode]").val(data.recipZipcode);
 	$("#exchangeRequestFrm input[name=chgerZipcode]").val(data.recipZipcode);
 	$("#exchangeRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
 	$("#exchangeRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
 	$("#exchangeRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
 	$("#exchangeRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
+	$("#exchangeRequestFrm textarea[name=chgerRtnMemo]").val(data.chgerRtnMemo);
 	
 	
 	if (spRecipPhnno) {
 	if (spRecipPhnno) {
 		$("#exchangeRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
 		$("#exchangeRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
@@ -758,7 +833,14 @@ var fnSetChger = function(){
 
 
 // 교환지정보 설정
 // 교환지정보 설정
 var fnSetExchangeAddr = function(){
 var fnSetExchangeAddr = function(){
-	var data = orderDelvAddrInfo[0];
+	var data;
+	
+	if (ordChgSq > 0) {
+		data = exchangeInfoList[0];
+	} else {
+		data = orderDelvAddrInfo[0];
+	}
+	
 	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
 	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
 	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
 	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
 	
 	
@@ -821,6 +903,8 @@ var fnChangeQty = function(param) {
 			}
 			}
 		} else if (item.chgQty > 0) {
 		} else if (item.chgQty > 0) {
 			exchangeRequestTargetList.push(item);
 			exchangeRequestTargetList.push(item);
+		} else if (ordChgSq > 0 && item.ordCanChgQty > 0) {
+			exchangeRequestTargetList.push(item);
 		}
 		}
 	});
 	});
 
 
@@ -867,7 +951,22 @@ var fnAddDelvFee = function (exchangeRequestTargetList) {
 		gridOptionsDelvCdList.api.setRowData();
 		gridOptionsDelvCdList.api.setRowData();
 	}
 	}
 	
 	
-	$('#addDelvFee').text(addDelvFee + '원');
+	$('#addDelvFee').text(addDelvFee.addComma() + '원');
+}
+
+// 회수방법 라디오 클릭 이벤트
+var fnChangeWdGb = function(param) {
+	let wdGb = $(param).val();
+
+	// 회수지정보 히든 처리
+	if (wdGb == 'D') {
+		$('.chger').css('display', 'none');
+	} else {
+		$('.chger').css('display', '');
+	}
+
+	// 추가배송비 계산
+	fnChangeQty();
 }
 }
 
 
 $(document).ready(function() {
 $(document).ready(function() {
@@ -886,6 +985,50 @@ $(document).ready(function() {
 	
 	
 	// 4. 교환지정보설정
 	// 4. 교환지정보설정
 	fnSetExchangeAddr();
 	fnSetExchangeAddr();
+	
+	// 5. 회수방법 라디오 체크 처리
+	if (wdGb == 'D') {
+		$('input:radio[name="wdGb"]:radio[value="D"]').prop('checked', true);
+	} else {
+		$('input:radio[name="wdGb"]:radio[value="W"]').prop('checked', true);
+	}
+	
+	// 교환철회 처리
+	if (ordChgSq > 0) {
+		// 5. 교환사유설정
+		$('#chgReason').text(chgReasonNm);
+		
+		// 6. 교환요청메모설정
+		$('#chgMemo').text(chgMemo);
+		
+		// 7. 귀책사유 설정
+		fnChangeChgReason(chgReason);
+		
+		// 8. 데이터 Disabled 처리
+		$('input:radio[name=wdGb]').attr('disabled', true);				// 8-1. 회수방법
+		$('#chgMemo').attr('readOnly', true);							// 8-2. 요청메모
+		$('input[name=chgerNm]').attr('readOnly', true);				// 8-3. 회수지정보 > 보내는사람
+		$('input[name=chgerBaseAddr]').attr('readOnly', true);			// 8-4. 회수지정보 > 기본주소
+		$('input[name=chgerDtlAddr]').attr('readOnly', true);			// 8-5. 회수지정보 > 상세주소
+		$('select[name=chgerTelno1]').attr('disabled', true);			// 8-6. 회수지정보 > 일반전화
+		$('input[name=chgerTelno2]').attr('readOnly', true);			// 8-6. 회수지정보 > 일반전화
+		$('input[name=chgerTelno3]').attr('readOnly', true);			// 8-6. 회수지정보 > 일반전화
+		$('select[name=chgerPhnno1]').attr('disabled', true);			// 8-7. 회수지정보 > 휴대전화
+		$('input[name=chgerPhnno2]').attr('readOnly', true);			// 8-7. 회수지정보 > 휴대전화
+		$('input[name=chgerPhnno3]').attr('readOnly', true);			// 8-7. 회수지정보 > 휴대전화
+		$('#chgerRtnMemo').attr('readOnly', true);						// 8-8. 회수지정보 > 반품메모
+		$('input[name=recipNm]').attr('readOnly', true);				// 8-9. 교환지정보 > 받는사람
+		$('input[name=recipBaseAddr]').attr('readOnly', true);			// 8-10. 교환지정보 > 기본주소
+		$('input[name=recipDtlAddr]').attr('readOnly', true);			// 8-11. 교환지정보 > 상세주소
+		$('select[name=recipTelno1]').attr('disabled', true);			// 8-12. 교환지정보 > 일반전화
+		$('input[name=recipTelno2]').attr('readOnly', true);			// 8-12. 교환지정보 > 일반전화
+		$('input[name=recipTelno3]').attr('readOnly', true);			// 8-12. 교환지정보 > 일반전화
+		$('select[name=recipPhnno1]').attr('disabled', true);			// 8-13. 교환지정보 > 휴대전화
+		$('input[name=recipPhnno2]').attr('readOnly', true);			// 8-13. 교환지정보 > 휴대전화
+		$('input[name=recipPhnno3]').attr('readOnly', true);			// 8-13. 교환지정보 > 휴대전화
+		$('#delvMemo').prop('readOnly', true);							// 8-14. 교환지정보 > 배송메모
+		
+	}
 });
 });
 </script>
 </script>
 </html>
 </html>

+ 0 - 110
src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html

@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderDetailChangeHst.html
- * @desc    : 주문상품상세이력 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.18   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="780" data-height="400">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>주문상품상세이력</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailChangeHstForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="overflow-y:auto;">
-			<form id="cancelRequestFrm">
-				<div id="gridOrderDetailChangeHstList" style="width:100%; height:300px;" class="ag-theme-balham"></div>
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var orderDetailHstList = [[${orderDetailHstList}]];
-
-// specify the columns
-var columnDefs4OrderDetailChangeHstList = [
-	{
-		headerName			: "변경일시"	
-		, field				: "updDt"
-		, width				: 150
-		, cellClass			: 'text-center' 
-		, cellRenderer: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	},
-	{headerName: "변경아이디"		, field: "updId"		, width: 120	, cellClass: 'text-center'},
-	{headerName: "변경내용"		, field: "ordDtlStatNm"	, width: 130	, cellClass: 'text-center'},
-	{headerName: "주문수량"		, field: "ordQty"		, width: 80		, cellClass: 'text-center'},
-	{headerName: "취소수량"		, field: "cnclRtnQty"	, width: 80		, cellClass: 'text-center'},
-	{headerName: "출고처"			, field: "delvLocNm"	, width: 150	, cellClass: 'text-center'},
-	{headerName: "송장번호"		, field: "invoiceNo"	, width: 130	, cellClass: 'text-center'},
-	{headerName: "택배사"			, field: "shipCompNm"	, width: 130	, cellClass: 'text-center'}
-];
-
-var gridOptions4OrderDetailChangeHstList = gagaAgGrid.getGridOptions(columnDefs4OrderDetailChangeHstList);
-
-$(document).ready(function() {	
-	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderDetailChangeHstList', gridOptions4OrderDetailChangeHstList);
-	gridOptions4OrderDetailChangeHstList.api.setRowData(orderDetailHstList);
-	gagaAgGrid.hideStatusBar('gridOrderDetailChangeHstList');
-});
-/*]]>*/
-
-</script>
-
-<!-- AgGrid 컬럼 세팅 -->
-<script>
-// 공통1. 주문상세 그리드 옵션 정보 적용
-var orderAgGrid = {
-	getGridOptions : function(colDefs) {
-		return {
-			columnDefs					: colDefs
-			, detailCellRendererParams	: {
-				detailGridOptions	: {
-					columnDefs				: []
-					, defaultColDef			: {
-						resizable: true
-					}
-					, suppressLoadingOverlay: false
-					, onGridReady			: function (params) {
-						params.api.setDomLayout('autoHeight');
-					}
-					, onFirstDataRendered	: function (params) {
-						params.api.sizeColumnsToFit();
-					}
-				}
-				, getDetailRowData: function (params) {
-					params.successCallback(params.data.orderDetailList);
-				}
-			}
-			, defaultColDef: {
-				resizable: true
-			}
-			, isRowMaster: function (dataItem) {
-				return dataItem ? dataItem.orderDetailList.length > 1 : false;
-			}
-			, suppressRowTransform: true
-			, enableRangeSelection: true
-		};
-	}
-}
-</script>
-</html>
-
-
-
-
-

+ 0 - 133
src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html

@@ -1,133 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderDetailCouponHst.html
- * @desc    : 주문상품 상세 쿠폰 이력 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.16   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1000">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>쿠폰 내역</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailCouponHstForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="overflow-y:auto;">
-			<form id="cancelRequestFrm">
-				<div id="gridOrderCouponInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var orderCouponHstList = [[${orderCouponHstList}]];
-
-//specify the columns
-var columnDefsOrderCouponInfo = [
-	{headerName: "쿠폰구분", 			field: "cpnType", 	width: 100, cellClass: 'text-center'},
-	{headerName: "상품코드/공급처코드", 	field: "targetCd1", width: 160, cellClass: 'text-center'},
-	{headerName: "주문상세/배송정책", 	field: "targetCd2", width: 160, cellClass: 'text-center'},
-	{headerName: "쿠폰ID", 			field: "cpnSq", 	width: 100, cellClass: 'text-center'},
-	{headerName: "쿠폰명", 			field: "cpnNm", 	width: 140, cellClass: 'text-center'},
-	{
-		headerName			: "웹 할인금액/율"
-		, field				: "dcPval"
-		, width				: 120
-		, cellClass			: 'text-center'
-		, valueFormatter	: function(params) {
-			return (params.data.dcWay == '10') ? params.value.addComma() + '원' : params.value.addComma() + '%';}	
-	},
-	{
-		headerName			: "모바일 할인금액/율"
-		, field				: "dcMval"
-		, width				: 120
-		, cellClass			: 'text-center'
-		, valueFormatter	: function(params) {
-			return (params.data.dcWay == '10') ? params.value.addComma() + '원' : params.value.addComma() + '%';
-		}	
-	},
-	{
-		headerName			: "판매상품가격"
-		, field				: "ordAmt"
-		, width				: 100
-		, cellClass			: 'text-center'
-		, valueFormatter	: function(params) {
-			return params.value.addComma();
-		}	
-	},
-	{
-		headerName			: "실할인금액"
-		, field				: "cpnDcAmt"
-		, width				: 100
-		, cellClass			: 'text-center'
-		, valueFormatter	: function(params) {
-			return params.value.addComma();
-		}	
-	}
-];
-
-var gridOptionsOrderCouponInfo = orderAgGrid.getGridOptions(columnDefsOrderCouponInfo);
-
-$(document).ready(function() {	
-	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderCouponInfo', gridOptionsOrderCouponInfo);
-	gridOptionsOrderCouponInfo.api.setRowData(orderCouponHstList);
-});
-/*]]>*/
-
-</script>
-
-<!-- AgGrid 컬럼 세팅 -->
-<script>
-// 공통1. 주문상세 그리드 옵션 정보 적용
-var orderAgGrid = {
-	getGridOptions : function(colDefs) {
-		return {
-			columnDefs					: colDefs
-			, detailCellRendererParams	: {
-				detailGridOptions	: {
-					columnDefs				: []
-					, defaultColDef			: {
-						resizable: true
-					}
-					, suppressLoadingOverlay: false
-					, onGridReady			: function (params) {
-						params.api.setDomLayout('autoHeight');
-					}
-					, onFirstDataRendered	: function (params) {
-						params.api.sizeColumnsToFit();
-					}
-				}
-				, getDetailRowData: function (params) {
-					params.successCallback(params.data.orderDetailList);
-				}
-			}
-			, defaultColDef: {
-				resizable: true
-			}
-			, isRowMaster: function (dataItem) {
-				return dataItem ? dataItem.orderDetailList.length > 1 : false;
-			}
-			, suppressRowTransform: true
-			, enableRangeSelection: true
-		};
-	}
-}
-</script>
-</html>
-
-
-
-
-

+ 14 - 8
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -167,7 +167,8 @@ var orderRefundInfo 		= [[${orderRefundInfo}]];				// 환불정보
 var orderCounselInfo 		= [[${orderCounselInfo}]];				// 상담내역
 var orderCounselInfo 		= [[${orderCounselInfo}]];				// 상담내역
 var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
 var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
 
 
-var canChgDelvStat			= ['G013_10', 'G013_11', 'G013_17', 'G013_20', 'G013_30', 'G013_40'];
+var canChgDelvOrdStat		= ['G013_10', 'G013_11', 'G013_17', 'G013_20', 'G013_30', 'G013_40'];
+var canChgDelvChgStat		= ['G685_30', 'G685_33', 'G685_40'];
 </script>
 </script>
 
 
 <!-- AgGrid 컬럼 세팅 -->
 <!-- AgGrid 컬럼 세팅 -->
@@ -513,7 +514,7 @@ var columnDefsDeliveryInfo = [
 		, cellClass		: 'text-center'
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
 		, cellRenderer	: function (params) {
 			var rtnStr = ""
 			var rtnStr = ""
-			if (canChgDelvStat.includes(params.data.ordDtlStat)) {
+			if (canChgDelvOrdStat.includes(params.data.ordDtlStat)) {
 				// 배송지 수정 (주문배송, 교환배송)
 				// 배송지 수정 (주문배송, 교환배송)
 				rtnStr += params.value;
 				rtnStr += params.value;
 				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'ADDR');\">POST</button>";
 				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'ADDR');\">POST</button>";
@@ -618,7 +619,7 @@ var columnDefsOrderChangeInfo = [
 				rtnStr = '<a href="javascript:void(0);" onclick="fnCancelRequest(\'' + params.value + '\');">' + params.value + '</a>';
 				rtnStr = '<a href="javascript:void(0);" onclick="fnCancelRequest(\'' + params.value + '\');">' + params.value + '</a>';
 			} else if (params.data.chgStat == 'G685_40') {
 			} else if (params.data.chgStat == 'G685_40') {
 				rtnStr = '<a href="javascript:void(0);" onclick="fnReturnRequest(\'' + params.value + '\');">' + params.value + '</a>';
 				rtnStr = '<a href="javascript:void(0);" onclick="fnReturnRequest(\'' + params.value + '\');">' + params.value + '</a>';
-			} else if (params.data.chgStat == 'G685_30') {
+			} else if (params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_33') {
 				rtnStr = '<a href="javascript:void(0);" onclick="fnExchangeRequest(\'' + params.value + '\');">' + params.value + '</a>';
 				rtnStr = '<a href="javascript:void(0);" onclick="fnExchangeRequest(\'' + params.value + '\');">' + params.value + '</a>';
 			} else {
 			} else {
 				rtnStr = params.value;
 				rtnStr = params.value;
@@ -644,6 +645,12 @@ var columnDefsOrderChangeInfo = [
 		}
 		}
 	},
 	},
 	{headerName: "변경사유"		, field: "chgReasonNm"	, width: 100	, cellClass: 'text-center'},
 	{headerName: "변경사유"		, field: "chgReasonNm"	, width: 100	, cellClass: 'text-center'},
+	{
+		headerName: "회수구분", field: "wdGb", width: 100, cellClass: 'text-center',
+		cellRenderer: function (params) {
+			return params.value == 'W' ? '회수요청' : '직접배송'; 
+		}
+	},
 	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-center'},
 	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-center'},
 	{headerName: "변경자명"		, field: "chgerNm"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "변경자명"		, field: "chgerNm"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "변경자핸드폰"		, field: "chgerPhnno"	, width: 120	, cellClass: 'text-center', editable: true},
 	{headerName: "변경자핸드폰"		, field: "chgerPhnno"	, width: 120	, cellClass: 'text-center', editable: true},
@@ -655,10 +662,9 @@ var columnDefsOrderChangeInfo = [
 		, cellRenderer	: function (params) {
 		, cellRenderer	: function (params) {
 			var rtnStr = ""
 			var rtnStr = ""
 			
 			
+			rtnStr += params.value;
 			// 회수지수정가능(교환요청, 반품요청)
 			// 회수지수정가능(교환요청, 반품요청)
-			if (!params.data.wdGb != 'D' && (params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_40')) {
-				
-				rtnStr += params.value;			
+			if (params.data.wdGb != 'D' && canChgDelvChgStat.includes(params.data.chgStat)) {
 				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'CLAIM');\">POST</button>";
 				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'CLAIM');\">POST</button>";
 				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
 				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
 			} else {
 			} else {
@@ -964,7 +970,7 @@ $(document).ready(function () {
 	});
 	});
 	// 교환요청
 	// 교환요청
 	$('#btnExchange').on('click', function () {
 	$('#btnExchange').on('click', function () {
-		fnExchangeRequest(ordNo, 'N');
+		fnExchangeRequest();
 	});
 	});
 	// 메모등록
 	// 메모등록
 	$('#btnCreateOrderMemo').on('click', function () {
 	$('#btnCreateOrderMemo').on('click', function () {
@@ -1036,7 +1042,7 @@ var fnReturnRequest = function (ordChgSq) {
 // 교환요청
 // 교환요청
 var fnExchangeRequest = function (ordChgSq) {
 var fnExchangeRequest = function (ordChgSq) {
 	
 	
-	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+	// 교환요청 구분 (orChgSq null 이면 교환요청화면 있으면 교환요청정보화면)
 	if (ordChgSq == null) {
 	if (ordChgSq == null) {
 		ordChgSq = 0;
 		ordChgSq = 0;
 	}
 	}

+ 0 - 1397
src/main/webapp/WEB-INF/views/order/OrderDetailFormBack20210122.html

@@ -1,1397 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderListForm.html
- * @desc    : 주문상세화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.11.16   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1500" data-height="700"> <!-- data-width="1500" data-height="870" -->
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>주문상세내역</h2>
-			<button type="button" class="close" onclick="fnOrderDetailClose()"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="orderDetailInfo" name="orderDetailInfo" action="#" th:method="post">
-				<input type="hidden" name="custNo"/>
-				<input type="hidden" name="orderNm"/>
-				<input type="hidden" name="orderPhnno"/>
-				<input type="hidden" name="orderEmail"/>
-				
-				<h4>기본정보</h4>
-				<!-- <div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div> -->
-
-				<!-- TABLE -->
-				<table class="tableStyle">
-					<colgroup>
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-						<col width="">
-					</colgroup>
-					<thead>
-						<tr>
-							<th>사이트</th>
-							<th>몰구분</th>
-							<th>웹구분</th>
-							<th>외부몰</th>
-							<th>주문일시</th>
-							<th>주문자</th>
-							<th>고객번호</th>
-							<th>주문번호</th>
-							<th>이메일</th>
-							<th>핸드폰번호</th>
-							<th>회원구분</th>
-							<th>관리대상</th>
-							<th>등급</th>
-						</tr>
-					</thead>
-					<tbody>
-						<tr>
-							<td th:text="${orderInfo[0].siteCdNm}"></td>
-							<td th:text="${orderInfo[0].mallGbNm}"></td>
-							<td th:text="${orderInfo[0].frontGbNm}"></td>
-							<td th:text="${orderInfo[0].extmallNm}"></td>
-							<td th:text="${orderInfo[0].ordDt}"></td>
-							<td th:text="${orderInfo[0].ordNm}"></td>
-							<td th:text="${orderInfo[0].custNo}"></td>
-							<td th:text="${orderInfo[0].ordNo}"></td>
-							<td th:text="${orderInfo[0].ordEmail}"></td>
-							<td th:text="${orderInfo[0].ordPhnno}"></td>
-							<td th:text="${orderInfo[0].custGbNm}"></td>
-							<td th:text="${orderInfo[0].managedRsnNm}"></td>
-							<td th:text="${orderInfo[0].custGradeNm}"></td>
-						</tr>
-					</tbody>
-				</table>
-				<!-- //TABLE -->
-									
-				<h4>주문상품정보</h4>
-				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnExchange" style="margin-left:10px;" >교환요청</button>
-				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnReturn">반품요청</button>
-				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnCancel">취소요청</button>
-				<div id="gridOrderGoodsInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-				
-				<h4>주문사은품정보</h4>
-				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnFreeGiftCancel" style="margin-left:10px;" >사은품취소</button>
-				<div id="gridOrderFreeGiftInfo" style="width:100%; height:120px;" class="ag-theme-balham"></div>
-				
-				<h4>배송정보</h4>
-				<div id="gridDeliveryAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
-				
-				<table style="width:100%;">
-					<colgroup>
-						<col style="width:65%;"/>
-						<col/>                                                                                  
-					</colgroup>
-					<tbody>
-						<tr>
-							<td style="">
-								<h4>결제정보</h4>
-								<div id="gridPaymentInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
-							</td>
-							<td style="">
-								<h4>배송비정보</h4>
-								<div id="gridDeliveryFeeInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
-							</td>
-						<tr>
-					</tbody>
-				</table>
-
-				<div id="wrapOrderChange">
-					<h4>(취소/반품/교환)요청 정보</h4>
-					<div id="gridOrderChangeInfo" style="width:100%; height: 180px; min-height:99px;" class="ag-theme-balham"></div>
-				</div>
-
-				<div id="wrapRefund">
-					<h4>환불정보</h4>
-					<div id="gridOrderRefundInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
-				</div>
-
-				<table style="width:100%;">
-					<colgroup>
-						<col style="width:65%;"/>
-						<col/>
-					</colgroup>
-					<tbody>
-						<tr>
-							<td style="">
-								<h4>상담내역</h4>
-								<div id="gridOrderCounselInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
-							</td>
-							<td style="">
-								<h4>관리자메모</h4>
-								<button type="button" id="btnCreateOrderMemo" class="btn btnRight btn-base btn-sm" style="margin-left:10px;"> +</button>
-								<div id="gridOrderMemoInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
-							</td>
-						</tr>
-					</tbody>
-				</table>
-				
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-var ordNo 					= [[${ordNo}]];							// 주문번호
-var userNo 					= [[${userNo}]]							// 관리자번호
-
-var orderInfo 				= [[${orderInfo}]];						// 기본정보
-var orderGoodsInfo 			= [[${orderGoodsInfo}]];				// 주문상세정보
-var orderFreeGiftInfo 		= [[${orderFreeGiftInfo}]];				// 주문사은품정보
-var orderDeliveryAddrInfo	= [[${orderDeliveryAddrInfo}]];			// 배송정보
-var orderPaymentInfo 		= [[${orderPaymentInfo}]];				// 결제정보
-var orderDeliveryFeeInfo 	= [[${orderDeliveryFeeInfo}]];			// 배송비정보
-var orderChangeInfo 		= [[${orderChangeInfo}]];				// 취소/반품/교환요청 정보
-var orderRefundInfo 		= [[${orderRefundInfo}]];				// 환불정보
-var orderCounselInfo 		= [[${orderCounselInfo}]];				// 상담내역
-var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
-</script>
-
-<!-- AgGrid 컬럼 세팅 -->
-<script>
-// 1.주문기본정보 그리드 바인딩
-// 2.상품별 상세정보
-var columnDefsGoodsInfo = [
-	{
-		headerName	: "주문상세",
-		children	: [
-			{headerName: "번호"		, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'},
-			{headerName: "주문구분"	, field: "exchGbNm"		, width: 80, cellClass: 'text-center'},
-		],
-	},
-	{
-		headerName	: "상품정보",
-		children	: [
-			{headerName: "상품코드"	, field: "goodsCd"		, width: 80, cellClass: 'text-center'},
-			{
-				headerName		: "상품명"
-				, field			: "goodsNm"
-				, width			: 200
-				, cellClass		: 'text-left'
-				, cellRenderer: function (params) {
-					return '<a href="javascript:void(0);" onclick="cfnOpenFrontGoodsPopup(\'' + params.data.goodsCd + '\',\'' + params.data.siteCd + '\');">' + params.value + '</a>';
-				}
-			},
-			{headerName: "상품타입"	, field: "goodsTypeNm"	, width: 100, cellClass: 'text-center'},
-			{headerName: "브랜드"		, field: "brandEnm"		, width: 80, cellClass: 'text-center'}
-		]
-	},
-	{
-		headerName	: "단품정보",
-		children	: [
-			{headerName: "단품코드"	, field: "itemCd"		, width: 80, cellClass: 'text-center'},
-			{
-				headerName		: "단품명"
-				, field			: "itemNm"
-				, width			: 200
-				, cellClass		: 'text-left'
-				, cellRenderer: function (params) {
-					return '<a href="javascript:void(0);" onclick="cfnOpenFrontGoodsPopup(\'' + params.data.itemCd + '\',\'' + params.data.siteCd + '\');">' + params.value + '</a>';
-				}
-			},
-			{headerName: "옵션1"		, field: "optCd1"		, width: 80, cellClass: 'text-center'},
-			{headerName: "옵션2"		, field: "optCd2"		, width: 80, cellClass: 'text-center'},
-			{headerName: "단품수량"	, field: "itemQty"		, width: 80, cellClass: 'text-center'},
-			{
-				headerName		: "단품금액"
-				, field			: "itemPrice"
-				, width			: 100
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "옵션추가금액"
-				, field			: "optAddPrice"
-				, width			: 100
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세단품",
-		children	: [
-			{headerName: "주문수량"	, field: "ordQty"		, width: 80, cellClass: 'text-center'},
-			{headerName: "취소수량"	, field: "cnclRtnQty"	, width: 80, cellClass: 'text-center'},
-			{headerName: "변경요청수량"	, field: "ordReqChgQty"	, width: 100, cellClass: 'text-center'},
-			{headerName: "상세상태"	, field: "ordDtlStat"	, width: 120, cellClass: 'text-center', hide: true},
-			{
-				headerName		: "상세상태"
-				, field			: "ordDtlStatNm"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var retVal = "";
-					retVal += (params.data.cancelRequestQty > 0) ? " 취" + params.data.cancelRequestQty : "";
-					retVal += (params.data.returnRequestQty > 0) ? " 반" + params.data.returnRequestQty : "";
-					retVal += (params.data.exchangeRequestQty > 0) ? " 교" + params.data.exchangeRequestQty : "";
-					
-					if (!gagajf.isNull(retVal)) {
-						retVal = "-" + retVal;
-					}
-					
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailChangeHst('" + params.data.ordDtlNo + "');\">" + params.value + retVal + "</a>";
-				}
-			},
-			{
-				headerName		: "상태변경"
-				, field			: "ordDtlStatChg"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {				
-					var strVal 		= "";
-					var strCheck	= "";
-					
-					// 현재상태에 따라서 갈수 있는 상태 정리
-					// @ 자사 : 결제완료, 배송준비중, 배송중, 배송완료
-					// @ 입점 : 결제완료, 상품준비중, 출고완료
-					// @ 모든상태값 변경 기준 (상세내역의 상택값 이력으로만 이동가능)
-					// G013_00	주문접수
-					// G013_10	입금대기
-					// G013_18	발주대기-가격차이
-					// G013_19	발주대기-우편번호상이
-					// G013_20	결제완료
-					// G013_30	상품준비중
-					// G013_40	배송준비중
-					// G013_50	배송중
-					// G013_55	출고완료
-					// G013_60	배송완료
-					// G013_98	결제전주문취소
-					// G013_99	결제후주문취소
-					// 2020.12.22 추가적인 개발은 추후 물류개발이 완료된 후 추가할 예정
-					// To Do List
-					// @ 재고정보수정
-					// @ 정산정보수정
-					strVal += "<select class='ordDtlStatChg' name='ordDtlStatChg' ordDtlNo='"+params.data.ordDtlNo+"' ordNo='"+params.data.ordNo+"' onChange='fnChangOrdDtlStat(this);'>";
-					strVal += "	<option value=''>선택</option>";
-					
-					if (!gagajf.isNull(params.data.g20)) {
-						strVal += "	<option value='G013_20'>결제완료</option>";
-					}
-					if (!gagajf.isNull(params.data.g30)) {
-						strVal += "	<option value='G013_30'>상품준비중</option>";
-					}
-					if (!gagajf.isNull(params.data.g40)) {
-						strVal += "	<option value='G013_40'>배송준비중</option>";
-					}
-					if (!gagajf.isNull(params.data.g50)) {
-						strVal += "	<option value='G013_50'>배송중</option>";
-					}
-					if (!gagajf.isNull(params.data.g55)) {
-						strVal += "	<option value='G013_55'>출고완료</option>";
-					}
-					if (!gagajf.isNull(params.data.g60)) {
-						strVal += "	<option value='G013_60'>배송완료</option>";
-					}
-					strVal += "</select>";
-					
-					return strVal;
-				}
-			}
-		]
-	},
-	{
-		headerName	: "쿠폰",
-		children	: [
-			{
-				headerName		: "즉시할인"
-				, field			: "cpn1DcAmt"
-				, width			: 80
-				, cellClass		: 'text-right' //goodsCpnDcAmtClass
-				, cellRenderer: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			},
-			{
-				headerName		: "상품"
-				, field			: "goodsCpnDcAmt"
-				, width			: 80
-				, cellClass		: 'text-right' //goodsCpnDcAmtClass
-				, cellRenderer: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			},
-			{
-				headerName		: "장바구니"
-				, field			: "cartCpnDcAmt"
-				, width			: 80
-				, cellClass		: 'text-right' //cartCpnDcAmtClass
-				, cellRenderer	: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			}
-		]
-	},
-	{
-		headerName	: "다다익선",
-		children	: [
-			{
-				headerName		: "수량"
-				, field			: "tmtb1DcAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			},
-			{
-				headerName		: "금액"
-				, field			: "tmtb2DcAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			}
-		]
-	},
-	{
-		headerName	: "포인트",
-		children	: [
-			{
-				headerName		: "사용"
-				, field			: "pntDcAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			},
-			{
-				headerName		: "즉시사용"
-				, field			: "prePntDcAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			},
-			{
-				headerName		: "적립"
-				, field			: "savePntAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			}
-		]
-	},
-	{
-		headerName	: "상품권",
-		children	: [
-			{
-				headerName		: "사용"
-				, field			: "gfcdUseAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderGiftcardHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
-				}
-			}
-		]
-	},
-	{
-		headerName	: "금액(원/단위)",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, valueFormatter: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "실결제"
-				, field			: "realOrdAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, valueFormatter: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"
-				, field			: "cnclRtnAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, valueFormatter: function (params) {
-					return params.value.addComma();
-				}
-			},
-		]
-	},
-	{headerName: "결품", field: "soldoutYn", width: 60, cellClass: 'text-center'},
-	{
-		headerName	: "배송",
-		children	: [
-			{
-				headerName		: "송장번호"
-				, field			: "invoiceNo"
-				, width			: 100
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var retStr = '';
-					if (!gagajf.isNull(params.value)) retStr = '<a href="javascript:void(0);" onclick="fnSearchDelivery(\'' + params.data.trackingUrl + '\',\'' + params.data.invoiceNo + '\');">' + params.value + '</a>';
-					return retStr;
-				}
-			},
-			{headerName: "출고처"		, field: "delvLocNm"	, width: 120, cellClass: 'text-center'},
-			{headerName: "배송지번호"	, field: "delvAddrSq"	, width: 120, cellClass: 'text-center'}
-		]
-	}
-];
-var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
-
-// 2.5 주문사은품정보
-var columnDefsOrderFreeGiftInfo = [
-	{headerName: "주문사은품번호"	, field: "ordFreegiftSq"	, width: 120, cellClass: 'text-center', hide: true},
-	{headerName: "주문번호"		, field: "ordNo"			, width: 120, cellClass: 'text-center'},
-	{headerName: "사은품프로모션"	, field: "freegiftSq"		, width: 100, cellClass: 'text-center', hide: true},
-	{headerName: "사은품프로모션명"	, field: "freegiftNm"		, width: 250, cellClass: 'text-center'},
-	{headerName: "사은품혜택번호"	, field: "freegiftValSq"	, width: 100, cellClass: 'text-center', hide: true},
-	{
-		headerName			: "사용포인트"		
-		, field				: "usePoint"			
-		, width				: 100
-		, cellClass			: 'text-right'
-		, valueFormatter	: function (params) {
-			return params.value.addComma();
-		}
-	},
-	{headerName: "사은품코드"		, field: "itemCd"			, width: 100, cellClass: 'text-center'},
-	{headerName: "사은품명"		, field: "itemNm"			, width: 100, cellClass: 'text-center'},
-	{headerName: "사은품수량"		, field: "itemQty"			, width: 100, cellClass: 'text-center'},
-	{headerName: "옵션명"			, field: "optCd"			, width: 100, cellClass: 'text-center'},
-	{headerName: "옵션코드1"		, field: "optCd1"			, width: 100, cellClass: 'text-center'},
-	{headerName: "옵션코드2"		, field: "optCd2"			, width: 100, cellClass: 'text-center'},
-	{headerName: "삭제여부"		, field: "delYn"			, width: 100, cellClass: 'text-center'}
-];
-var gridOptionsOrderFreeGiftInfo = gagaAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
-
-// 3.배송정보
-var columnDefsDeliveryInfo = [
-	{headerName: "배송지번호"		, field: "delvAddrSq"		, width: 80, cellClass: 'text-center'},
-	{headerName: "주문구분"		, field: "exchGbNm"			, width: 80, cellClass: 'text-center'},
-	{headerName: "수정여부"		, field: "delvAddrEditYn"	, width: 80, cellClass: 'text-center', hide: true},
-	{headerName: "받는분"			, field: "recipNm"			, width: 80, cellClass: 'text-left', editable: true},
-	{headerName: "핸드폰번호"		, field: "recipPhnno"		, width: 120, cellClass: 'text-left', editable: true},
-	{headerName: "전화번호"		, field: "recipTelno"		, width: 120, cellClass: 'text-left', editable: true},
-	{
-		headerName		: "우편번호"		
-		, field			: "recipZipNo"
-		, width			: 220
-		, cellClass		: 'text-center'
-		, cellRenderer	: function (params) {
-			var rtnStr = ""
-			
-			if (params.data.delvAddrEditYn < 1) {
-				// 배송지 수정 (주문배송, 교환배송)
-				rtnStr += params.value;			
-				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'ADDR');\">POST</button>";
-				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnUpdateOrderAddr('" + params.node.rowIndex + "');\">저장</button>";
-			} else {
-				rtnStr += params.value;
-			}
-			
-			return rtnStr;
-		}
-	},
-	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 220, cellClass: 'text-left'},
-	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 220, cellClass: 'text-left', editable: true},
-	{headerName: "배송메모"		, field: "delvMemo"			, width: 250, cellClass: 'text-left', editable: true}
-];
-var gridOptionsDeliveryInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryInfo);
-
-// 4.결제정보
-var columnDefsPaymentInfo = [
-	{headerName: "결제수단"		, field: "payMeansNm"	, width: 100	, cellClass: 'text-center'},
-	{headerName: "카드(은행)"		, field: "cardNm"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "할부(입금계좌)"	, field: "cardMips"		, width: 150	, cellClass: 'text-center'},
-	{
-		headerName		: "승인번호"
-		, field			: "pgTradeNo"
-		, width			: 100
-		, cellClass		: 'text-center'
-		, cellRenderer	: function (params) {
-			var retStr = '';
-
-			if (!gagajf.isNull(params.value)) {
-				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + params.value + '</a>';
-			}
-
-			if (gagajf.isNull(params.value) && !gagajf.isNull(params.data.pgTid)) {
-				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + '거래내역' + '</a>';
-			}
-
-			return retStr;
-		}
-	},
-	{
-		headerName			: "결제일시"	
-		, field				: "payDt"
-		, width				: 130
-		, cellClass			: 'text-center' 
-		, cellRenderer: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	},
-	{headerName: "결제상태"	, field: "payStatNm"	, width: 80		, cellClass: 'text-center'},
-	{
-		headerName			: "결제금액"
-		, field				: "payAmt"
-		, width				: 80
-		, cellClass			: 'text-right'
-		, valueFormatter	: function (params) {
-			return params.value.addComma();
-		}
-	},
-	{headerName: "계좌만료일"	, field: "vaDeadline"	, width: 150	, cellClass: 'text-center'}
-];
-var gridOptionsPaymentInfo = gagaAgGrid.getGridOptions(columnDefsPaymentInfo);
-
-// 5.배송비
-var columnDefsDeliveryFeeInfo = [
-	{headerName: "배송비종류"		, field: "delvFeeGbNm", width: 120, cellClass: 'text-center'},
-	{
-		headerName			: "배송비"
-		, field				: "delvFee"
-		, width				: 100
-		, cellClass			: 'text-right'
-		, valueFormatter	: function (params) {
-			return params.value.addComma();
-		}
-	},
-	{headerName: "배송비정산여부"	, field: "delvUsacYn", width: 120, cellClass: 'text-center'},
-	{
-		headerName			: "배송비정산일시"	
-		, field				: "delvUsacDt"
-		, width				: 140
-		, cellClass			: 'text-center' 
-		, cellRenderer: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	}
-];
-var gridOptionsDeliveryFeeInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
-
-// 6. 반품/교환 정보
-var columnDefsOrderChangeInfo = [
-	{headerName: "요청번호"		, field: "ordChgSq"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "요청구분"		, field: "chgGbNm"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "옵션1"			, field: "optCd1"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "수량"			, field: "chgQty"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
-	{
-		headerName		: "요청일자"		
-		, field			: "regDt"		
-		, width			: 150		
-		, cellClass		: 'text-center'
-		, cellRenderer	: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	},
-	{headerName: "변경사유"		, field: "chgReasonNm"	, width: 100	, cellClass: 'text-center'},
-	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-center'},
-	{headerName: "변경자명"		, field: "chgerNm"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "변경자핸드폰"		, field: "chgerPhnno"	, width: 120	, cellClass: 'text-center', editable: true},
-	{
-		headerName		: "우편번호"		
-		, field			: "chgerZipNo"
-		, width			: 220
-		, cellClass		: 'text-center'
-		, cellRenderer	: function (params) {
-			var rtnStr = ""
-			
-			if (params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_40' ) {
-				// 배송지 수정 (주문배송, 교환배송)
-				rtnStr += params.value;			
-				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'CLAIM');\">POST</button>";
-				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
-			} else {
-				rtnStr = "";
-			}
-			
-			return rtnStr;
-		}
-	},
-	{headerName: "주소(기본)"		, field: "chgerBaseAddr"	, width: 220, cellClass: 'text-left'},
-	{headerName: "주소(상세)"		, field: "chgerDtlAddr"	, width: 150	, cellClass: 'text-center'	, editable: true},
-	{
-		headerName		: "택배사전송"
-		, field			: "wdInvoiceSendYn"
-		, width			: 120
-		, cellClass		: 'text-center'
-		, cellRenderer	: function (params) {
-			return (params.value == 'N') ? '미전송' : '전송';
-		}
-	},
-	{
-		headerName		: "요청취소"
-		, field			: "ordDtlNo"
-		, width			: 100
-		, cellClass		: 'text-center'
-		, cellRenderer	: function (params) {
-			var retStr = "";
-
-			if (params.data.chgGb == "G680_30" && params.data.chgStat == "G685_40") {
-				retStr = ' <button type="button" class="btn btn-success" onclick="fnReturnReqeustCancel(\'' + params.data.ordChgSq + '\',\'' + params.value + '\',\'' + params.node.rowIndex + '\');">반품취소</button>';
-			} else if (params.data.chgGb == "G680_40" && params.data.chgStat == "G685_30") {
-				retStr = ' <button type="button" class="btn btn-success" onclick="fnExchangeReqeustCancel(\'' + params.data.ordChgSq + '\',\'' + ordNo + '\',\'' + params.value + '\',\'' + params.node.rowIndex + '\');">교환취소</button>';
-			} else if (params.data.chgGb == "G680_20" && params.data.chgStat == "G685_20") {
-				retStr = '<button type="button" class="btn btn-success" onclick="fnCancelConfirmRequestCancel(\'' + params.data.ordChgSq + '\')">요청철회</button>';
-			}
-
-			return retStr;
-		}
-	},
-	{
-		headerName		: "회수지시전송"
-		, field			: "wdInvoiceSendYn"
-		, width			: 120
-		, cellClass		: 'text-center'
-	},
-	{headerName: "회수송장번호", field: "wdInvoiceNo", width: 90, cellClass: 'text-center'}
-];
-var gridOptionsOrderChangeInfo = gagaAgGrid.getGridOptions(columnDefsOrderChangeInfo);
-
-// 7.환불정보
-var columnDefsRefundInfo = [
-	{headerName: "환불수단"		, field: "payMeansNm"	, width: 80		, cellClass: 'text-center'},
-	{headerName: "환불은행(카드)"	, field: "cardNm"		, width: 120	, cellClass: 'text-center'},
-	{headerName: "환불은행계좌번호"	, field: "raNo"			, width: 150	, cellClass: 'text-center'},
-	{headerName: "예금주"			, field: "raNm"			, width: 80		, cellClass: 'text-center'},
-	{
-		headerName			: "환불금액"
-		, field				: "refundAmt"
-		, width				: 100
-		, cellClass			: 'text-right'
-		, valueFormatter	: function (params) {
-			return params.value.addComma();
-		}
-	},
-	{
-		headerName		: "환불완료일자"		
-		, field			: "updDt"		
-		, width			: 140	
-		, cellClass		: 'text-center'
-		, cellRenderer	: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	},
-	{headerName: "환불처리자"		, field: "updNm"		, width: 120		, cellClass: 'text-center'}
-];
-var gridOptionsRefundInfo = gagaAgGrid.getGridOptions(columnDefsRefundInfo);
-
-// 8.상담내역
-var columnDefsOrderCounselInfo = [
-	{headerName: "상담구분"		, field: "counselClsfNm"	, width: 120	, cellClass: 'text-center'},
-	{headerName: "상품코드"		, field: "goodsCd"			, width: 120	, cellClass: 'text-center'},
-	{
-		headerName		: "질문제목"
-		, field			: "questTitle"
-		, width			: 250
-		, cellClass		: 'text-center'
-		, cellRenderer	: function (params) {
-			return '<a href="javascript:void(0);" onclick="cfnOpenOneToOneAskDetailPopup(\'' + params.data.counselSq + '\')">' + params.value + '</a>';
-		}
-	},
-	{
-		headerName		: "등록일"			
-		, field			: "questDt"	
-		, width			: 120	
-		, cellClass		: 'text-center'
-		, cellRenderer	: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	},
-	{
-		headerName		: "답변일"			
-		, field			: "ansDt"	
-		, width			: 120	
-		, cellClass		: 'text-center'
-		, cellRenderer	: function(params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-		}
-	},
-	{headerName: "답변자"			, field: "ansNm"	, width: 80		, cellClass: 'text-center'},
-	{headerName: "삭제여부"		, field: "delYn"	, width: 80		, cellClass: 'text-center'}
-];
-var gridOptionsOrderCounselInfo = gagaAgGrid.getGridOptions(columnDefsOrderCounselInfo);
-
-// 9.주문메모
-var columnDefsOrderMemoInfo = [
-	{headerName: "등록일시"		, field: "regDt"	, width: 135	, cellClass: 'text-center'},
-	{
-		headerName		: "등록자"
-		, field			: "regNm"
-		, width			: 100
-		, cellClass		: 'text-center'
-	},
-	{
-		headerName		: "관리메모"
-		, field			: "memo"
-		, width			: 150
-		, cellClass		: 'text-left'
-		, cellRenderer	: function (params) {
-			var retStr = '';
-			
-			if (!gagajf.isNull(params.value)) {
-				retStr = '<a href="javascript:void(0);" onclick="fnCreateOrderMemo(\'' + params.data.ordNo + '\',\'' + params.data.orderMemoSq + '\',\'U' + '\');">' + params.value + '</a>';
-			}
-			return retStr;
-		}
-	},
-	{
-		headerName		: "삭제"
-		, field			: "orderMemoSq"
-		, width			: 80
-		, cellClass		: 'text-center'
-		, cellRenderer	: function (params) {
-			var retStr = '';
-			
-			if (params.data.updNo == userNo) {
-				retStr = '<button type="button" class="btn btn-danger" onclick="fnDeleteOrderMemo(\'' + params.data.ordNo + '\',\'' + params.value + '\');"> - </button>';
-			}
-			return retStr;
-		}
-	},
-];
-var gridOptionsOrderMemoInfo = gagaAgGrid.getGridOptions(columnDefsOrderMemoInfo);
-</script>
-
-<script>
-var fnSetGridHeightInit = function () {
-	if (_windowWidth < 1780) {
-		_girdRowH1 = 33 + _scrollH;
-		_girdRowH2 = 80 + _scrollH;
-	} else {
-		_girdRowH1 = 33
-		_girdRowH2 = 80;
-	}
-}
-</script>
-
-<!-- 버튼 이벤트 바인딩 -->
-<script>
-var _windowWidth 	= $(window).width();		/* 위도우창 넓이 */
-var _girdRowH 		= 33;						/* 그리드 Row 줄 높이 */
-var _girdRowH1 		= 33;						/* 그리드 타이틀 1줄 짜리 높이*/
-var _girdRowH2 		= 62;						/* 그리드 타이틀 2줄 짜리 높이*/
-var _scrollH 		= 27;						/* 가로스크롤bar 높이 */
-
-$(window).resize(function () {
-	_windowWidth = $(window).width();
-	fnSetGridHeightInit();
-});
-
-</script>
-<!-- AgGrid 생성 -->
-<script>
-// 팝업닫기
-var fnOrderDetailClose = function(){
-	uifnPopupClose('popupOrderDetail');
-}
-
-$(document).ready(function () {
-	
-	// 1. 그리드 그리기
-	//gagaAgGrid.createGrid('gridOrderInfo'					, gridOptionsOrderInfo);			// 기본정보
-	gagaAgGrid.createGrid('gridOrderGoodsInfo'				, gridOptionsGoodsInfo);			// 상품정보
-	gagaAgGrid.createGrid('gridOrderFreeGiftInfo'			, gridOptionsOrderFreeGiftInfo);	// 사은품정보
-	gagaAgGrid.createGrid('gridDeliveryAddrInfo'			, gridOptionsDeliveryInfo);			// 배송정보
-	gagaAgGrid.createGrid('gridPaymentInfo'					, gridOptionsPaymentInfo);			// 결제정보
-	gagaAgGrid.createGrid('gridDeliveryFeeInfo'				, gridOptionsDeliveryFeeInfo);		// 배송비정보
-	gagaAgGrid.createGrid('gridOrderChangeInfo'				, gridOptionsOrderChangeInfo);		// 취소/반품/교환 요청 정보
-	gagaAgGrid.createGrid('gridOrderRefundInfo'				, gridOptionsRefundInfo);			// 환불정보
-	gagaAgGrid.createGrid('gridOrderCounselInfo'			, gridOptionsOrderCounselInfo);		// 상담내역
-	gagaAgGrid.createGrid('gridOrderMemoInfo'				, gridOptionsOrderMemoInfo);		// 관리자메모
-	
-	// 2. 그리드 데이터 바인딩
-	//gridOptionsOrderInfo.api.setRowData(orderInfo);								// 기본정보
-	gridOptionsGoodsInfo.api.setRowData(orderGoodsInfo);							// 상품정보
-	gridOptionsOrderFreeGiftInfo.api.setRowData(orderFreeGiftInfo);					// 사은품품정보
-	gridOptionsDeliveryInfo.api.setRowData(orderDeliveryAddrInfo);					// 배송정보
-	gridOptionsPaymentInfo.api.setRowData(orderPaymentInfo);						// 결제정보
-	gridOptionsDeliveryFeeInfo.api.setRowData(orderDeliveryFeeInfo);				// 배송비정보
-	gridOptionsOrderChangeInfo.api.setRowData(orderChangeInfo);						// 취소/반품/교환요청 정보
-	gridOptionsRefundInfo.api.setRowData(orderRefundInfo);							// 환불정보
-	gridOptionsOrderCounselInfo.api.setRowData(orderCounselInfo);					// 상담내역
-	gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);					// 관리자메모
-	
-	// 2.1 TOTAL ROWS 없애기
-	gagaAgGrid.hideStatusBar('gridOrderGoodsInfo');
-	gagaAgGrid.hideStatusBar('gridOrderFreeGiftInfo');
-	gagaAgGrid.hideStatusBar('gridDeliveryAddrInfo');
-	gagaAgGrid.hideStatusBar('gridPaymentInfo');
-	gagaAgGrid.hideStatusBar('gridDeliveryFeeInfo');
-	gagaAgGrid.hideStatusBar('gridOrderChangeInfo');
-	gagaAgGrid.hideStatusBar('gridOrderRefundInfo');
-	gagaAgGrid.hideStatusBar('gridOrderCounselInfo');
-	gagaAgGrid.hideStatusBar('gridOrderMemoInfo');
-	
-	// 3. 그리드 높이 설정
-	fnSetGridHeightInit();
-	
-	// 4. 그리드 숨김 처리
-	if (orderChangeInfo == null || orderChangeInfo.length === 0) {
-		$("#wrapOrderChange").addClass("off");
-	}
-	
-	if (orderRefundInfo == null || orderRefundInfo.length === 0) {
-		$("#wrapRefund").addClass("off");
-	}
-	
-	// 5. 버튼처리
-	// G013_00	주문접수
-	// G013_10	입금대기
-	// G013_18	발주대기-가격차이
-	// G013_19	발주대기-우편번호상이
-	// G013_20	결제완료
-	// G013_30	상품준비중
-	// G013_40	배송준비중
-	// G013_50	배송중
-	// G013_55	출고완료
-	// G013_60	배송완료
-	// G013_98	결제전주문취소
-	// G013_99	결제후주문취소
-	
-	// G685_10	결제전취소
-	// G685_20	취소요청
-	// G685_21	취소완료
-	// G685_30	교환요청
-	// G685_31	교환요청취소
-	// G685_32	교환완료
-	// G685_40	반품요청
-	// G685_41	반품요청취소
-	// G685_42	반품완료
-
-	var addrBtnChkCnt = 0;
-	gridOptionsGoodsInfo.api.forEachNode(function (rowNode, index) {
-		
-		// 입금대기, 결제완료, 상품준비중, 배송준비중 일때 취소가능
-		if (rowNode.data.ordDtlStat == 'G013_10' || rowNode.data.ordDtlStat == 'G013_20' || rowNode.data.ordDtlStat == 'G013_30' || rowNode.data.ordDtlStat == 'G013_40') {
-			$("#btnCancel").removeClass("off");	//취소요청
-		}
-		
-		// 배송중, 출고완료, 배송완료 일때 반품, 교환 가능
-		if ((rowNode.data.ordDtlStat == 'G013_50' || rowNode.data.ordDtlStat == 'G013_55' || rowNode.data.ordDtlStat == 'G013_60') && rowNode.data.ordQty > rowNode.data.ordReqChgQty) {
-			$("#btnReturn, #btnExchange").removeClass("off");
-		}
-		
-		// 입금대기, 결제완료, 상품준비중, 배송준비중 일때 취소가능
-		if (rowNode.data.ordDtlStat == 'G013_10' || rowNode.data.ordDtlStat == 'G013_20' || rowNode.data.ordDtlStat == 'G013_30' || rowNode.data.ordDtlStat == 'G013_40') {
-			addrBtnChkCnt++;
-		}
-	});
-
-	// 주소변경 버튼 히든처리
-	if (addrBtnChkCnt > 0) {
-		$("#btnUpdateOrderAddr").removeClass("off");
-	}
-});
-
-$(document).ready(function () {
-	$('#orderDetailContents').css("width", "97%").css("height", "96%");
-	
-	// 취소요청
-	$('#btnCancel').on('click', function () {
-		fnCancelRequest(ordNo, 'N');
-	});
-	// 반품요청
-	$('#btnReturn').on('click', function () {
-		fnReturnRequest(ordNo, 'N');
-	});
-	// 교환요청
-	$('#btnExchange').on('click', function () {
-		fnExchangeRequest(ordNo, 'N');
-	});
-	// 메모등록
-	$('#btnCreateOrderMemo').on('click', function () {
-		fnCreateOrderMemo(ordNo, 0, 'N');
-	});
-	// 배송 정보 수정
-	$('#btnUpdateOrderAddr').on('click', function () {
-		fnUpdateOrderAddr();
-	});
-	// 환불계좌 등록
-	$('#btnSaveAccount').on('click', function () {
-		fnCreateOrderRfAccount(ordNo, custNo);
-	});
-});
-</script>
-
-<!-- function -->
-<script>
-var gridOrderChangeInfoSelectedIdx = '';
-
-// 배송지변경
-var fnUpdateOrderAddr = function (rowIdx) {	
-	gridOptionsDeliveryInfo.api.stopEditing();
-	var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(rowIdx).data);
-	
-	mcxDialog.confirm("주소를 변경하시겠습니까?", {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			gagajf.ajaxJsonSubmit(
-				"/order/deliver/addr/update"
-				, jsonData
-				, function () {
-					
-				}
-			);
-		}
-	});
-}
-
-// 취소요청
-var fnCancelRequest = function () {
-	var actionUrl = "/orderChange/cncl/req/form?ordNo=" + ordNo;
-	cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
-};
-
-// 반품요청
-var fnReturnRequest = function () {
-	var actionUrl = "/orderChange/rtn/req/form?ordNo=" + ordNo;
-	cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
-};
-
-// 교환요청
-var fnExchangeRequest = function () {
-	var actionUrl = "/orderChange/exchange/request/form?ordNo=" + ordNo;
-	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
-};
-
-// 취소승인
-var fnCancelConfirmRequest = function (ordChgSq) {
-	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?", {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordNo 		= ordNo;	//전역변수
-			data.ordChgSq 	= ordChgSq;
-
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/orderChange/cancel/confirm'
-				, jsonData
-				, function (result) {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-				}
-			);
-		}
-	});
-};
-
-// 취소요청철회
-var fnCancelConfirmRequestCancel = function (ordChgSq) {
-	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?", {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordChgSq = ordChgSq;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/orderChange/cancel/wait/cancel'
-				, jsonData
-				, function (result) {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-			});
-		}
-	});
-}
-
-// 주문상품 상세 변경 이력 팝업
-var fnOrderDetailChangeHst = function (ordDtlNo) {
-	var actionUrl = "/order/detail/change/hst/form/" + ordDtlNo;
-	cfnOpenModalPopup(actionUrl, 'popupOrderDetailChangeHstForm');
-};
-
-// 쿠폰내역 팝업
-var fnOrderCouponHst = function (ordNo) {
-	var actionUrl = "/order/detail/coupon/hst/form/" + ordNo;
-	cfnOpenModalPopup(actionUrl, 'popupOrderDetailCouponHstForm');
-};
-
-// 다다익선내역 팝업
-var fnOrderTmtbHst = function (ordNo) {
-	var actionUrl = "/order/detail/tmtb/hst/form/" + ordNo;
-	cfnOpenModalPopup(actionUrl, 'popupOrderDetailTmtbHstForm');
-};
-
-// 포인트내역 팝업
-var fnOrderPointHst = function (ordNo) {
-	var actionUrl = "/order/detail/point/hst/form/" + ordNo;
-	cfnOpenModalPopup(actionUrl, 'popupOrderDetailPointHstForm');
-};
-
-// 상품권내역 팝업
-var fnOrderGiftcardHst = function (ordNo) {
-	var actionUrl = "/order/detail/giftcard/hst/form/" + ordNo;
-	cfnOpenModalPopup(actionUrl, 'popupOrderDetailGiftcardHstForm');
-};
-
-// 관리자메모 등록
-var fnCreateOrderMemo = function (ordNo, seq, mode) {
-	var actionUrl = "/order/memo/create/form?ordNo=" + ordNo + "&seq=" + seq + "&mode=" + mode;
-	cfnOpenModalPopup(actionUrl, 'popupCreateOrderMemo');
-};
-
-// 환불계좌 등록
-var fnCreateOrderRfAccount = function (ordNo, custNo) {
-	var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo + "&custNo="+custNo;
-	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
-};
-
-// 주문메모 삭제
-var fnDeleteOrderMemo = function (ordNo, orderMemoSq) {
-	mcxDialog.confirm('삭제하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordNo 	= ordNo;
-			data.seq 	= orderMemoSq;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/memo/delete'
-				, jsonData
-				, function () {
-					fnBindOrderMemo();
-				}
-			);
-		}
-	});
-}
-
-// 주문메모 바인딩
-var fnBindOrderMemo = function() {
-	gagaAgGrid.fetch(
-		"/order/admin/memo/list/" + ordNo
-		, gridOptionsOrderMemoInfo
-		, null
-		, function (result) {
-		}
-	);
-};
-
-// 주문 변경요청정보 바인딩
-var fnBindOrderChangeInfo = function() {
-	gagaAgGrid.fetch(
-		"/order/return/info/list/" + ordNo
-		, gridOptionsOrderChangeInfo
-		, null
-		, function (result) {
-			$('#gridOrderChangeInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
-		}
-	);
-};
-
-// 환불계좌 정보
-var fnBindOrderRfAccountInfo = function () {
-	gagaAgGrid.fetch(
-		"/order/refund/account/info/list?ordNo=" + ordNo+"&custNo="+custNo
-		, gridOptionsRefundAccountInfo
-		, null
-		, function (result) {
-			$('#gridOptionsRefundAccountInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
-		}
-	);
-};
-
-// 배송비 DATA 바인딩
-var fnBindDeliveryAddr = function(delvAddrSq) {
-	if (typeof (delvAddrSq) != 'undefined') {
-		var strLink = '/order/deliver/addr/info/' + delvAddrSq;
-		var jsonData = JSON.stringify([]);
-		gagajf.ajaxJsonSubmit(strLink, jsonData, fnBindDeliveryAddrCallBack);
-	}
-};
-
-// 배송정보
-var fnBindDeliveryAddrCallBack = function(result) {
-	gridOptionsDeliveryInfo.api.setRowData(result);
-};
-
-// 변경요청 > 회수지정보 저장
-var fnSaveChgerAddr = function (rowIdx) {
-	gridOptionsOrderChangeInfo.api.stopEditing();
-	
-	var jsonData = JSON.stringify(gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data);
-	
-	mcxDialog.confirm("주소를 변경하시겠습니까?", {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			gagajf.ajaxJsonSubmit(
-				"/order/change/info/addr/update"
-				, jsonData
-				, function () {
-					
-				}
-			);
-		}
-	});
-}
-
-// 반품요청 철회
-var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
-	mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordChgSq = ordChgSq;
-			data.ordDtlNo = ordDtlNo;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/return/request/cancel'
-				, jsonData
-				, function (result) {
-					if (result.message != '회수컨펌 된 내역이 있습니다.') {
-						var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
-						gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
-					}
-				}
-			);
-		}
-	});
-};
-
-// 교환요청 철회
-var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
-	mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordNo 		= ordNo;
-			data.ordDtlNo 	= ordDtlNo;
-			data.ordChgSq 	= ordChgSq;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/exchange/request/cancel'
-				, jsonData, function () {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-				}
-			);
-		}
-	});
-};
-
-// LMS 전송
-var fnOpenLmsForm = function (orderPhnno, custNo) {
-	if (gagajf.isNull(custNo) && gagajf.isNull(orderPhnno)) {
-		mcxDialog.alert("정보가 올바르지 않습니다.");
-		return false;
-	}
-
-	$('#orderDetailInfo input[name=orderPhnno]').val(orderPhnno);
-	$('#orderDetailInfo input[name=custNo]').val(custNo);
-
-	var param = {};
-	param.elementCellPhnno = '#orderDetailInfo input[name=orderPhnno]';
-	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
-	cfnOpenLmsPopup(param);
-};
-
-// EMAIL 전송
-var fnOpenEmailForm = function (orderEmail, orderNm, custNo) {
-	if (gagajf.isNull(orderEmail) && gagajf.isNull(orderNm) && gagajf.isNull(custNo)) {
-		mcxDialog.alert("정보가 올바르지 않습니다.");
-		return false;
-	}
-	$('#orderDetailInfo input[name=orderEmail]').val(orderEmail);
-	$('#orderDetailInfo input[name=orderNm]').val(orderNm);
-	$('#orderDetailInfo input[name=custNo]').val(custNo);
-
-	var param = {};
-	param.elementRecipEmail = '#orderDetailInfo input[name=orderEmail]';
-	param.elementCustNm = '#orderDetailInfo input[name=orderNm]';
-	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
-
-	cfnOpenEmailPopup(param);
-};
-
-// 송장조회
-var fnSearchDelivery = function (url, invoiceNo) {
-	var fullUrl = url + invoiceNo;
-	window.open(fullUrl, '_blank');
-};
-
-// 카드전표 영수증 조회
-var fnReceiptPage = function (tid) {
-	var fullUrl = "https://npg.nicepay.co.kr/issue/IssueLoader.do?TID=" + tid + "&type=0";
-	window.open(fullUrl, '_blank');
-};
-
-// 수동 회수 지시 
-var fnWdinvocieSend = function (ordChgSq) {
-	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 회수지시 처리 하시겠습니까? <br> 시스템에서 회수지시를 보내지는않습니다.", {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordChgSq = ordChgSq;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/wdinvoice/send/save'
-				, jsonData
-				, function (result) {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-				}
-			);
-		}
-	});
-};
-
-// 구매확정철회
-var fnChangedCompleteDelivery = function (ordNo, ordDtlNo, ordDtlStat) {
-	if ('70' !== ordDtlStat) {
-		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
-		return false;
-	}
-	
-	var data = {};
-	data.ordDtlNo = ordDtlNo;
-	data.ordNo = ordNo;
-	var jsonData = JSON.stringify(data);
-	
-	gagajf.ajaxJsonSubmit('/order/check/status', jsonData, fnChangedCompleteDeliveryCallback);
-};
-
-var fnChangedCompleteDeliveryCallback = function (result) {
-	// 구매확정 처리 가능 하지 않으면 얼럿 노출 끝
-	if (!result.isPossible) {
-		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
-		return false;
-	} else {
-		mcxDialog.confirm("구매확정 철회 하시겠습니까? <br> 지급된 포인트에 대한 처리는 별도로 하셔야 합니다. ", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = {};
-				data.ordDtlNo = result.ordDtlNo;
-				data.ordNo = result.ordNo;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/complete/delivery/changed'
-					, jsonData
-					, function (result) {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-					}
-				);
-			}
-		});
-	}
-};
-
-// 주문상세 상태값 변경
-var fnChangOrdDtlStat = function (obj) {
-	var ordNo 			= $(obj).attr("ordNo");
-	var ordDtlNo 		= $(obj).attr("ordDtlNo");
-	var ordDtlStat 		= $(obj).val();
-	var ordDtlStatNm 	= $(obj).children("option:selected").text();
-	var strConfirm		= "주문상태를 " + ordDtlStatNm + "(으)로 변경 하시겠습니까?"
-	
-	mcxDialog.confirm(strConfirm, {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordNo			= ordNo;
-			data.ordDtlNo 		= ordDtlNo;
-			data.ordDtlStat 	= ordDtlStat;
-
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/detail/ordDtlStat/changed'
-				, jsonData
-				, function (result) {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-				}
-			);
-		}
-	});
-};
-
-// DAUM을 이용한 우편번호 팝업 레이어
-var fnOpenDaumAddr = function(idx, addrGb) {
-		
-	let daumZip = new daum.Postcode({
-		oncomplete: function(data) {
-			// 배송지주소 수정
-			if ("ADDR" == addrGb) {
-				gridOptionsDeliveryInfo.api.gre
-				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipZipNo 		= data.zonecode;
-				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipBaseAddr 		= cfnGetDaumRoadAddr(data);
-				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipDtlAddr 		= "";
-				gridOptionsDeliveryInfo.api.refreshCells();
-			}
-			// 회수지주소 수정
-			else {
-				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerZipNo 		= data.zonecode;
-				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerBaseAddr 	= cfnGetDaumRoadAddr(data);
-				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerDtlAddr 	= "";
-				gridOptionsOrderChangeInfo.api.refreshCells();
-			}
-			
-			cfnCloseDaumAddr();
-		},
-		width: '100%'
-	});
-	
-	cfnOpenDaumAddr(daumZip);
-}
-</script>
-
-</html>
-
-
-
-
-

+ 0 - 106
src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html

@@ -1,106 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderDetailPointHst.html
- * @desc    : 주문상품 상세 상품권 이력 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.16   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="900">
-	<div class="panelStyle">
-		<div class="giftcardTitle">
-			<h2>상품권 사용 내역</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailGiftcardHstForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="overflow-y:auto;">
-			<form id="pointHstFrm">
-				<div id="gridOrderGiftcardInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var orderGiftcardHstList = [[${orderGiftcardHstList}]];
-
-// specify the columns
-var columnDefsOrderGiftcardInfo = [
-		{headerName: "상품권명", 		field: "gfcdNm", 		width: 180, cellClass: 'text-center'},
-		{headerName: "상품권코드", 		field: "gfcdNo", 		width: 180, cellClass: 'text-center'},
-		{
-			headerName			: "상품권승인금액"
-			, field				: "chgGfcdAmt"
-			, width				: 130
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{
-			headerName			: "상품권사용금액"
-			, field				: "usGfcdAmt"
-			, width				: 130
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{
-			headerName			: "상품권남은금액"
-			, field				: "rmGfcdAmt"
-			, width				: 130
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{headerName: "주문상세", 		field: "ordDtlNo", 		width: 100, cellClass: 'text-center'},
-		{headerName: "상품코드", 		field: "goodsCd", 		width: 100, cellClass: 'text-center'},
-		{
-			headerName			: "상품권사용금액"
-			, field				: "gfcdAmt"
-			, width				: 130
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{headerName: "사유", 			field: "occurDtlDesc", 	width: 180, cellClass: 'text-center'},
-		{
-			headerName			: "등록일시"	
-			, field				: "regDt"
-			, width				: 130
-			, cellClass			: 'text-center' 
-			, cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-			}
-		}
-];
-
-var gridOptionsOrderGiftcardInfo = gagaAgGrid.getGridOptions(columnDefsOrderGiftcardInfo);
-
-$(document).ready(function() {	
-	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderGiftcardInfo', gridOptionsOrderGiftcardInfo);
-	gridOptionsOrderGiftcardInfo.api.setRowData(orderGiftcardHstList);
-	gagaAgGrid.hideStatusBar('gridOrderGiftcardInfo');
-});
-/*]]>*/
-
-</script>
-</html>
-
-
-
-
-

+ 0 - 97
src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html

@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderDetailPointHst.html
- * @desc    : 주문상품 상세 마일리지 이력 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.16   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="900">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>포인트 사용 내역</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailPointHstForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="overflow-y:auto;">
-			<form id="pointHstFrm">
-				<div id="gridOrderPointInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var orderPointHstList = [[${orderPointHstList}]];
-
-// specify the columns
-var columnDefsOrderPointInfo = [
-		{headerName: "상품코드", 		field: "goodsCd", 		width: 100, cellClass: 'text-center'},
-		{headerName: "적립율(PC)", 	field: "pntPrate", 		width: 100, cellClass: 'text-center'},
-		{headerName: "적립율(모바일)", 	field: "pntMrate", 		width: 100, cellClass: 'text-center'},
-		{
-			headerName			: "판매상품가격"
-			, field				: "currPrice"
-			, width				: 120
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{
-			headerName			: "실결제상품가격"
-			, field				: "realOrdAmt"
-			, width				: 140
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{
-			headerName			: "사용포인트"
-			, field				: "pntAmt"
-			, width				: 100
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{headerName: "사유", 			field: "occurDtlDesc", 	width: 180, cellClass: 'text-center'},
-		{
-			headerName			: "등록일시"	
-			, field				: "regDt"
-			, width				: 130
-			, cellClass			: 'text-center' 
-			, cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-			}
-		}
-];
-
-var gridOptionsOrderPointInfo = gagaAgGrid.getGridOptions(columnDefsOrderPointInfo);
-
-$(document).ready(function() {	
-	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderPointInfo', gridOptionsOrderPointInfo);
-	gridOptionsOrderPointInfo.api.setRowData(orderPointHstList);
-	gagaAgGrid.hideStatusBar('gridOrderPointInfo');
-});
-/*]]>*/
-
-</script>
-
-</html>
-
-
-
-
-

+ 0 - 78
src/main/webapp/WEB-INF/views/order/OrderDetailTmtbHst.html

@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderDetailPointHst.html
- * @desc    : 주문상품 상세 상품권 이력 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.12.16   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="800">
-	<div class="panelStyle">
-		<div class="giftcardTitle">
-			<h2>다다익선 적용 내역</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupOrderDetailTmtbHstForm');"><i class="fa fa-times"></i></button>
-		</div>
-			
-		<div class="panelContent" style="overflow-y:auto;">
-			<form id="pointHstFrm">
-				<div id="gridOrderTmtbInfo" style="width:100%; height:260px;" class="ag-theme-balham"></div>
-			</form>
-		</div>
-	</div>
-</div>
-
-<!-- data -->
-<script th:inline="javascript">
-/*<![CDATA[*/
-var orderTmtbHstList = [[${orderTmtbHstList}]];
-
-// specify the columns
-var columnDefsOrderGiftcardInfo = [
-		{headerName: "다다익선번호"	, field: "tmtbSq", 		width: 100, cellClass: 'text-center'},
-		{headerName: "다다익선명"	, field: "tmtbNm", 		width: 180, cellClass: 'text-center'},
-		{
-			headerName			: "할인금액"
-			, field				: "tmtbDcAmt"
-			, width				: 120
-			, cellClass			: 'text-center'
-			, valueFormatter	: function(params) {
-				return params.value.addComma();
-			}	
-		},
-		{headerName: "주문상세", 		field: "ordDtlNo",	width: 120, cellClass: 'text-center'},
-		{headerName: "상품코드", 		field: "goodsCd",	width: 120, cellClass: 'text-center'},
-		{
-			headerName			: "등록일시"	
-			, field				: "regDt"
-			, width				: 130
-			, cellClass			: 'text-center' 
-			, cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
-			}
-		}
-];
-
-var gridOptionsOrderTmtbInfo = gagaAgGrid.getGridOptions(columnDefsOrderGiftcardInfo);
-
-$(document).ready(function() {	
-	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderTmtbInfo', gridOptionsOrderTmtbInfo);
-	gridOptionsOrderTmtbInfo.api.setRowData(orderTmtbHstList);
-	gagaAgGrid.hideStatusBar('gridOrderTmtbInfo');
-});
-/*]]>*/
-
-</script>
-</html>
-
-
-
-
-

+ 36 - 48
src/main/webapp/WEB-INF/views/order/OrderListForm.html

@@ -192,9 +192,6 @@
 							<select name="searchDateGb">
 							<select name="searchDateGb">
 								<option value="ordDt">주문일자</option>
 								<option value="ordDt">주문일자</option>
 								<option value="delvStdt">출고일자</option>
 								<option value="delvStdt">출고일자</option>
-								<option value="cnclReqDt">@취소요청일자</option>
-								<option value="changReqDt">@교환요청일자</option>
-								<option value="rtnReqDt">@반품요청일자</option>
 								<option value="soldoutDt">품절일자</option>
 								<option value="soldoutDt">품절일자</option>
 							</select>
 							</select>
 							<span id="terms"></span>
 							<span id="terms"></span>
@@ -400,21 +397,7 @@ var columnDefsOrderList = [
 			{headerName: "상품코드"	, field: "goodsCd"		, width: 100	, cellClass: 'text-center'	, sortable: true},
 			{headerName: "상품코드"	, field: "goodsCd"		, width: 100	, cellClass: 'text-center'	, sortable: true},
 			{headerName: "브랜드"		, field: "brandEnm"		, width: 100	, cellClass: 'text-center'	, sortable: true},
 			{headerName: "브랜드"		, field: "brandEnm"		, width: 100	, cellClass: 'text-center'	, sortable: true},
 			{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 100	, cellClass: 'text-center'	, sortable: true},
 			{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 100	, cellClass: 'text-center'	, sortable: true},
-			{
-				headerName		: "상품명"
-				, field			: 'goodsNm'
-				, width			: 200
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, cellRenderer	: function (params) {
-					var roleCd = [[${sessionInfo.roleCd}]];
-					if (!roleCd.startsWith("C")) {
-						return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
-					} else {
-						return params.value;
-					}
-				}
-			}
+			{headerName: "상품명"		, field: "goodsNm"		, width: 200	, cellClass: 'text-center'	, sortable: true}
 		]
 		]
 	},
 	},
 	{
 	{
@@ -567,36 +550,36 @@ var columnDefsOrderList = [
 				}
 				}
 			},
 			},
 			{headerName: "품절처리자", field: "soldoutRegId", width: 120, cellClass: 'text-center'},
 			{headerName: "품절처리자", field: "soldoutRegId", width: 120, cellClass: 'text-center'},
-			{
-				headerName		: "변경요청번호"
-				, field			: "ordChgSq"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) {
-					return params.data.ordChgSq === 0 ? '' : params.data.ordChgSq;
-				}
-			},
-			{
-				headerName		: "변경구분"
-				, field			: "chgGb"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, valueGetter: function (params) { 
-					return gagaAgGrid.lookupValue(chgGbList, params.data.chgGb); 
-				}
-			},
-			{
-				headerName		: "변경상태"
-				, field			: "chgStat"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(chgStatList, params.data.chgStat); 
-				}
-			},
-			{headerName: "회수지시여부"		, field: "wdInvoiceSendYn"		, width: 100, cellClass: 'text-center'},
-			{headerName: "회수택배사"		, field: "wdShipCompNm"			, width: 100, cellClass: 'text-center'},
-			{headerName: "회수송장"		, field: "wdInvoiceNo"			, width: 120, cellClass: 'text-center'},
+			//{
+			//	headerName		: "변경요청번호"
+			//	, field			: "ordChgSq"
+			//	, width			: 120
+			//	, cellClass		: 'text-center'
+			//	, valueGetter	: function (params) {
+			//		return params.data.ordChgSq === 0 ? '' : params.data.ordChgSq;
+			//	}
+			//},
+			//{
+			//	headerName		: "변경구분"
+			//	, field			: "chgGb"
+			//	, width			: 120
+			//	, cellClass		: 'text-center'
+			//	, valueGetter: function (params) { 
+			//		return gagaAgGrid.lookupValue(chgGbList, params.data.chgGb); 
+			//	}
+			//},
+			//{
+			//	headerName		: "변경상태"
+			//	, field			: "chgStat"
+			//	, width			: 120
+			//	, cellClass		: 'text-center'
+			//	, valueGetter	: function (params) { 
+			//		return gagaAgGrid.lookupValue(chgStatList, params.data.chgStat); 
+			//	}
+			//},
+			//{headerName: "회수지시여부"		, field: "wdInvoiceSendYn"		, width: 100, cellClass: 'text-center'},
+			//{headerName: "회수택배사"		, field: "wdShipCompNm"			, width: 100, cellClass: 'text-center'},
+			//{headerName: "회수송장"		, field: "wdInvoiceNo"			, width: 120, cellClass: 'text-center'},
 			{headerName: "수취인명"		, field: "recipNm"				, width: 100, cellClass: 'text-center'},
 			{headerName: "수취인명"		, field: "recipNm"				, width: 100, cellClass: 'text-center'},
 			{headerName: "수취인연락처"		, field: "recipPhnno"			, width: 120, cellClass: 'text-center'},
 			{headerName: "수취인연락처"		, field: "recipPhnno"			, width: 120, cellClass: 'text-center'},
 			{headerName: "수취인주소"		, field: "recipAddr"			, width: 500, cellClass: 'text-left'},
 			{headerName: "수취인주소"		, field: "recipAddr"			, width: 500, cellClass: 'text-left'},
@@ -749,6 +732,11 @@ var fnCreateSampleOrder = function() {
 	var actionUrl = "/order/sample/create/form";
 	var actionUrl = "/order/sample/create/form";
 	cfnOpenModalPopup(actionUrl, "popupOrderSample");
 	cfnOpenModalPopup(actionUrl, "popupOrderSample");
 }
 }
+
+var fnRemoveEmojis = function (str) {
+	var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
+	return str.replace(regex, '');
+};
 </script>
 </script>
 
 
 </html>
 </html>

+ 0 - 766
src/main/webapp/WEB-INF/views/order/OrderListFormBack.html

@@ -1,766 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderListForm.html
- * @desc    : 주문목록 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.11.16   jsh77b       최초 작성
- *******************************************************************************
- -->
- <style>
- .ag-neo .ag-cell.top-row-span {
-     border-bottom: 0px;
-}
-.ag-neo .ag-cell.bottom-row-span {
-     border-top: 0px;
-     text-indent: -100em;
-}
- </style>
- 
-<div id="main">
-	<!-- 메인타이틀 영역 -->
-	<div class="main-title">
-	</div>
-	<!-- //메인타이틀 영역 -->
-	
-	<!-- 메뉴 설명 -->
-	<div class="infoBox menu-desc">
-	</div>
-	
-	<form id="searchForm" name="searchForm" action="#" th:action="@{'/order/list'}">
-		<input type="hidden" id="searchGb" name="searchGb" />
-		
-		<!-- 패널 영역1 -->
-		<div class="panelStyle" >
-			<!-- 검색조건 영역 -->
-			<!-- TITLE -->
-			<div class="panelTitle">
-				<h3>
-					<i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">주문번호</font> 또는 <font color="red">검색조건</font> 하나를 꼭 입력해 주세요.
-				</h3>
-				<span class="panelControl">
-					<i class="fa fa-chevron-up"></i>
-				</span>
-			</div>
-			
-			<div class="panelContent">
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-					</colgroup>
-					<tr>
-						<th>사이트</th>
-						<td>
-							<select name="siteCd">
-								<option value="">[전체]</option>
-								<option th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" th:value="${oneData.cd}"
-										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th>몰구분</th>
-						<td>
-							<select name="mallCd">
-								<option value="">[전체]</option>
-								<option th:if="${mallGbList}" th:each="oneData, status : ${mallGbList}" th:value="${oneData.cd}"
-										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th>업체/브랜드<em class="required" title="필수"></em></th>
-						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
-							<select name="supplyCompCd" id="supplyCompCd">
-								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-							<span id="multiBrand"></span>
-						</td>
-					</tr>
-					<tr>
-						<th>주문상태</th>
-						<td>
-							<div class="multiCheckBox" style="width:270px">
-								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
-								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
-									<li th:if="${ordStatList}" th:each="oneData, status : ${ordStatList}">
-										<label class="chkBox">
-											<input type="checkbox" name="multiOrdStat" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|">
-										</label>
-									</li>
-								</ul>
-							</div>
-						</td>
-						<th>주문상세상태</th>
-						<td colspan="3">
-							<div class="multiCheckBox" style="width:270px">
-								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
-								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
-									<li th:if="${ordDtlStatList}" th:each="oneData, status : ${ordDtlStatList}">
-										<label class="chkBox">
-											<input type="checkbox" name="multiOrdDtlStat" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|">
-										</label>
-									</li>
-								</ul>
-							</div>
-						</td>
-						<th rowspan="5">키워드<i class="star"></i></th>
-						<td rowspan="5">
-							<select name="search" id="search">
-								<option value="searchOrdNo">주문번호</option>
-								<option value="searchExtmallOrderId">외부몰주문번호</option>
-								<option value="searchAgentOrderId">에이전트주문번호</option>
-							</select>
-							<textarea class="textareaR3 w70p" name="condition" id="condition"></textarea>
-						</td>
-					</tr>
-					<tr>
-						<th>변경구분</th>
-						<td>
-							<select name="chgGb">
-								<option value="">[전체]</option>
-								<option th:if="${chgGbList}" th:each="oneData, status : ${chgGbList}" th:value="${oneData.cd}"
-										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th>변경요청처리상태</th>
-						<td>
-							<select name="chgStat">
-								<option value="">[전체]</option>
-								<option value="9999">[품절취소]</option>
-								<option th:if="${chgStatList}" th:each="oneData, status : ${chgStatList}" th:value="${oneData.cd}"
-										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th>결제수단</th>
-						<td>
-							<select name="payMeans">
-								<option value="">[전체]</option>
-								<option th:if="${payMeansList}" th:each="oneData, status : ${payMeansList}" th:value="${oneData.cd}"
-										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>주문자명</th>
-						<td>
-							<input type="text" name="orderNm" placeholder="" maxlength="20"/>
-						</td>
-						<th>고객ID</th>
-						<td>
-							<input type="text" name="custId" placeholder="" maxlength="20"/>
-						</td>
-						<th>주문자휴대폰번호</th>
-						<td>
-							<input type="text" name="orderPhnno" placeholder="" maxlength="20"/>
-						</td>
-					</tr>
-					<tr>
-						<th>상품코드</th>
-						<td>
-							<input type="text" name="goodsCd" placeholder="" maxlength="20"/>
-						</td>
-						<th>사이즈</th>
-						<td>
-							<input type="text" name="sizeCd" placeholder="" maxlength="20"/>
-						</td>
-						<th>단품명</th>
-						<td>
-							<input type="text" name="goodsNm" placeholder="" maxlength="20"/>
-						</td>
-					</tr>
-					<tr>
-						<th>수취인명</th>
-						<td>
-							<input type="text" name="recipNm" placeholder="" maxlength="20"/>
-						</td>
-						<th>송장번호</th>
-						<td>
-							<input type="text" name="invoiceNo" placeholder="" maxlength="20"/>
-						</td>
-						<th>회수지시전송여부</th>
-						<td>
-							<select name="wdInvoiceSendYn" class="w150">
-								<option value="">전체</option>
-								<option value="Y">전송</option>
-								<option value="N">미전송</option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>조회일자</th>
-						<td colspan="7">
-							<select name="searchDateGb">
-								<option value="ordDt">주문일자</option>
-								<option value="delvStdt">출고일자</option>
-								<option value="cnclReqDt">@취소요청일자</option>
-								<option value="changReqDt">@교환요청일자</option>
-								<option value="rtnReqDt">@반품요청일자</option>
-								<option value="soldoutDt">품절일자</option>
-							</select>
-							<span id="terms"></span>
-						</td>
-					</tr>
-				</table>
-				
-				<ul class="panelBar">
-					<li class="center">
-						<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch">조회</button>
-						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
-					</li>
-				</ul>
-				
-			</div>
-		</div>
-
-		<div class="panelStyle">
-			<ul class="panelBar">
-				<li>
-					<button type="button" class="btn btn-info btn-lg" onclick="fnOrderExcelList();">엑셀다운로드</button>
-				</li>
-				<li class="aR">
-					검색결과 : <strong><span id="rowCntOrderList">0</span> 건</strong>&nbsp;
-					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
-					<select id="pageSize" name="pageSize">
-						<option value="100" selected="selected">100개씩 보기</option>
-						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
-						<option value="5000">5000개씩 보기</option>
-					</select>
-					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
-				</li>
-			</ul>
-			
-			<div class="panelContent" style="overflow: hidden;">
-				<div id="gridOrderList" style="width: 100%; height: 600px;" class="ag-theme-balham lh60"></div>
-			</div>
-
-			<ul class="panelBar">
-				<li class="center">
-					<div class="tablePaging" id="orderListPagination"></div>
-				</li>
-			</ul>
-		</div>
-
-	</form>
-</div>
-
-<label class="off">
-	<a href="javascript:void(0);" id="hdOrderExcelList" style="display: none;">엑셀다운로드</a>
-</label>
-
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-var sessRoleCd 		= [[${sessionInfo.roleCd}]];
-var siteCdList 		= gagajf.convertToArray([[${siteCdList}]]);
-var mallGbList 		= gagajf.convertToArray([[${mallGbList}]]);
-var ordDtlStatList 	= gagajf.convertToArray([[${ordDtlStatList}]]);
-var payMeansList 	= gagajf.convertToArray([[${payMeansList}]]);
-var chgStatList 	= gagajf.convertToArray([[${chgStatList}]]);
-var chgGbList 		= gagajf.convertToArray([[${chgGbList}]]);
-var formalGbList 	= gagajf.convertToArray([[${formalGbList}]]);
-var frontGbList 	= {'P': 'PC', 'M': 'MO'};
-var uploadGoodsUrl 	= [[${@environment.getProperty('upload.goods.view')}]];
-
-// 1. 주문기본정보
-var columnDefsOrderList = [
-	{
-		headerName	: "주문기본정보"
-		, cellClass	: 'text-center'
-		, children	: [
-			{
-				headerName		: "주문번호"
-				, field			: 'ordNo'
-				, width			: 80
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, cellRenderer	: function (params) {
-					var roleCd = [[${sessionInfo.roleCd}]];
-					if (!roleCd.startsWith("C")) {
-						return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
-					} else {
-						return params.value;
-					}
-				}
-			},
-			{
-				headerName		: "주문자"
-				, field			: "ordNm"
-				, width			: 100
-				, cellClass		: 'text-left'
-				, sortable		: true
-				, cellRenderer	: function (params) {
-					var custNo = '';
-					if (!gagajf.isNull(params.data.custNo)) {
-						custNo = params.data.custNo;
-					}
-					
-					var roleCd = [[${sessionInfo.roleCd}]];
-					if (!roleCd.startsWith("C") && !gagajf.isNull(params.data.custNo)  && params.data.mallGb === '10' ) {
-						return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.value + '(' + custNo + ')' + '</a>';
-					} else {
-						return params.value + '(' + custNo + ')';
-					}
-				}
-			},
-			{headerName: "고객고유번호"	, field: "custNo"		, width: 120, cellClass: 'text-center', hide: true},
-			{headerName: "외부몰"		, field: "extmallNm"	, width: 100, cellClass: 'text-center', sortable: true},
-			{headerName: "휴대폰번호"	, field: "orderPhnno"	, width: 120, cellClass: 'text-center', hide: true},
-			{
-				headerName		: "사이트"
-				, field			: "siteCd"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(siteCdList, params.data.siteCd); 
-				}
-			},
-			{
-				headerName		: "프론트"
-				, field			: "frontGb"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(frontGbList, params.data.frontGb); 
-				}
-			},
-			{
-				headerName		: "몰구분"
-				, field			: "mallGb"
-				, width			: 60
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(mallGbList, params.data.mallGb); 
-				}
-			},
-			{
-				headerName		: "주문일시"
-				, field			: "ordDt"
-				, width			: 140
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.ordDt); 
-				}
-			},
-			{
-				headerName		: "결제수단"
-				, field			: "payMeans"
-				, width			: 100
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(payMeansList, params.data.payMeans); 
-				}
-			},
-			{
-				headerName		: "신규/교환"
-				, field			: "ordExchGb"
-				, width			: 100
-				, cellClass		: 'text-center',
-				valueGetter 	: function (params) {
-					return params.data.ordExchGb === 'O' ? '신규' : '교환';
-				}
-			},
-			{
-				headerName		: "주문상세상태"
-				, field			: "ordDtlStat"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, valueGetter	: function (params) {
-					var ordDtlStat = gagaAgGrid.lookupValue(ordDtlStatList, params.data.ordDtlStat);
-					var chgStat='';
-					if (params.data.ordDtlStat === '99') {
-						chgStat = gagaAgGrid.lookupValue(chgStatList, params.data.chgStat);
-						if (!gagajf.isNull(chgStat)) {
-							chgStat = chgStat.substr(0, 2);
-							if (params.data.soldoutYn === 'Y') {
-								chgStat = '품절';
-							}
-							ordDtlStat = ordDtlStat + '-' + chgStat;
-						}
-
-					}
-					return ordDtlStat;
-				}
-			},
-			{headerName: "출고처", field: "delvLocNm", width: 110, cellClass: 'text-center', sortable: true, hide:true},
-		]
-	},
-	{
-		headerName	: "상품정보"
-		, cellClass	: 'text-center'
-		, children	: [
-			{headerName: "상품코드"	, field: "goodsCd"		, width: 100	, cellClass: 'text-center'	, sortable: true},
-			{headerName: "브랜드"		, field: "brandEnm"		, width: 100	, cellClass: 'text-center'	, sortable: true},
-			{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 100	, cellClass: 'text-center'	, sortable: true},
-			{
-				headerName		: "상품명"
-				, field			: 'goodsNm'
-				, width			: 200
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, cellRenderer	: function (params) {
-					var roleCd = [[${sessionInfo.roleCd}]];
-					if (!roleCd.startsWith("C")) {
-						return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
-					} else {
-						return params.value;
-					}
-				}
-			}
-		]
-	},
-	{
-		headerName	: "단품정보"
-		, cellClass	: 'text-center'
-		, children	: [
-			{
-				headerName		: "이미지"
-				, field			: "sysImgNm"
-				, width			: 100
-				, height		: 60
-				, cellClass		: 'text-center'
-				,cellRenderer	: function(params) {
-					return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
-				}
-			},			
-			{
-				headerName		: "단품코드"
-				, field			: "itemCd"
-				, width			: 100
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, cellRenderer: function (params) {
-					var roleCd = [[${sessionInfo.roleCd}]];
-					if (!roleCd.startsWith("C")) {
-						return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenGoodsDetailPopup('U','" + params.value + "');\">" + params.value + "</a>";
-					} else {
-						return params.value;
-					}
-				}
-			},
-			{headerName: "옵션1"		, field: "optCd1"		, width: 60	, cellClass: 'text-center'	, sortable: true},
-			{headerName: "옵션2"		, field: "optCd2"		, width: 60		, cellClass: 'text-center'	, sortable: true},
-			{headerName: "단품명"		, field: "itemNm"		, width: 200	, cellClass: 'text-left'	, sortable: true},
-			{
-				headerName		: "외부몰벤더"
-				, field			: "vendorId"
-				, width			: 110
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(vendorList, params.data.vendorId); 
-				}
-			},
-			{headerName: "외부몰주문번호"	, field: "extmallOrderId"	, width: 150, cellClass: 'textFormat', sortable: true},
-			{headerName: "외부몰부주문번호"	, field: "agentOrderId"		, width: 120, cellClass: 'textFormat', sortable: true},
-			{
-				headerName		: "주문수량"
-				, field			: "ordQty"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, valueGetter: function (params) { 
-					return params.data.ordQty.addComma(); 
-				}
-			},
-			{
-				headerName		: "취소수량"
-				, field			: "cnclRtnQty"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return params.data.cnclRtnQty.addComma(); 
-				}
-			},
-			{
-				headerName		: "주문금액"
-				, field			: "ordAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, valueGetter	: function (params) { 
-					return params.data.ordAmt.addComma(); 
-				}
-			},
-			{
-				headerName		: "취소반품금액"
-				, field			: "cnclRtnAmt"
-				, width			: 120
-				, cellClass		: 'text-right'
-				, valueGetter	: function (params) { 
-					return params.data.cnclRtnAmt.addComma(); 
-				}
-			},
-			{
-				headerName		: "총할인금액"
-				, field			: "totDcAmt"
-				, width			: 120
-				, cellClass		: 'text-right'
-				, valueGetter: function (params) { 
-					return params.data.totDcAmt.addComma(); 
-				}
-			},
-			{
-				headerName		: "실판매금액"
-				, field			: "realOrdAmt"
-				, width			: 100
-				, cellClass		: 'text-right'
-				, valueGetter	: function (params) { 
-					return params.data.realOrdAmt.addComma(); 
-				}
-			},
-			{headerName: "원코드"		, field: "supplyGoodsCd"	, width: 130, cellClass: 'text-center', sortable: true},
-			{
-				headerName		: "정상/이월"
-				, field			: "formalGb"
-				, width			: 100
-				, cellClass		: 'text-center'
-				, sortable		: true 
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(formalGbList, params.data.formalGb); 
-				}
-			},
-			{
-				headerName		: "출고처지정일시"
-				, field			: "delvAssignDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.delvAssignDt); 
-				}
-			},
-			{
-				headerName		: "송장출력일시"
-				, field			: "invoiceDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.invoiceDt); 
-				}
-			},
-			{headerName: "출고택배사"		, field: "shipCompNm"	, width: 150, cellClass: 'text-center'},
-			{headerName: "출고송장"		, field: "invoiceNo"	, width: 150, cellClass: 'text-center'},
-			{
-				headerName		: "출고일시"
-				, field			: "delvResDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.delvResDt); 
-				}
-			},
-			{headerName: "품절여부"		, field: "soldoutYn"	, width: 90		, cellClass: 'text-center', sortable: true},
-			{headerName: "품절메모"		, field: "soldoutMemo"	, width: 120	, cellClass: 'text-left'},
-			{
-				headerName		: "품절일시"
-				, field			: "soldoutRegDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.soldoutRegDt); 
-				}
-			},
-			{headerName: "품절처리자", field: "soldoutRegId", width: 120, cellClass: 'text-center'},
-			{
-				headerName		: "변경요청번호"
-				, field			: "ordChgSq"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) {
-					return params.data.ordChgSq === 0 ? '' : params.data.ordChgSq;
-				}
-			},
-			{
-				headerName		: "변경구분"
-				, field			: "chgGb"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, valueGetter: function (params) { 
-					return gagaAgGrid.lookupValue(chgGbList, params.data.chgGb); 
-				}
-			},
-			{
-				headerName		: "변경상태"
-				, field			: "chgStat"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(chgStatList, params.data.chgStat); 
-				}
-			},
-			{headerName: "회수지시여부"		, field: "wdInvoiceSendYn"		, width: 100, cellClass: 'text-center'},
-			{headerName: "회수택배사"		, field: "wdShipCompNm"			, width: 100, cellClass: 'text-center'},
-			{headerName: "회수송장"		, field: "wdInvoiceNo"			, width: 120, cellClass: 'text-center'},
-			{headerName: "수취인명"		, field: "recipNm"				, width: 100, cellClass: 'text-center'},
-			{headerName: "수취인연락처"		, field: "recipPhnno"			, width: 120, cellClass: 'text-center'},
-			{headerName: "수취인주소"		, field: "recipAddr"			, width: 500, cellClass: 'text-left'},
-			{
-				headerName		: "배송메모"
-				, field			: "delvMemo"
-				, width			: 200
-				, cellClass		: 'left'
-				, valueGetter: function (params) {
-					var delvMemo = '';
-					if (!gagajf.isNull(params.data.delvMemo)) {
-						delvMemo = fnRemoveEmojis(params.data.delvMemo);
-					}
-					return delvMemo;
-				}
-			},
-			{headerName: "출고메모", field: "dstrbtNote", width: 200, cellClass: 'left'}
-		]
-	}
-];
-
-var gridOptionsOrderList = gagaAgGrid.getGridOptions(columnDefsOrderList);
-
-gridOptionsOrderList.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
-
-// 최근상세보기한 주문번호
-var currOrdNo = '';
-
-// 조회
-$('#btnOrderSearch').on('click', function () {
-	fnSearchList();
-});
-
-var fnSearchList = function () {
-	var ordNo 	= $('#searchForm input[name=ordNo]').val();
-	var stDate 	= $('#stDate').val();
-	var edDate 	= $('#edDate').val();
-
-	if (gagajf.isNull(ordNo)) {
-		if (gagajf.isNull(stDate)) {
-			mcxDialog.alert('시작 기간을 입력하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(edDate)) {
-			mcxDialog.alert('종료 기간을 입력하세요.');
-			return;
-		}
-	}
-	
-	gagaPaging.init('searchForm', fnSearchCallBack, 'orderListPagination', $('#searchForm').find('#pageSize').val());
-	gagaPaging.load($("#searchForm input[name=pageNo]").val());
-	
-	// 2020.12.08 페이징 처리 때문에 주석 처리
-	//gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptionsOrderList, '#searchForm', function (result) {
-		//$("#rowCntOrderList").text(gridOptionsOrderList.api.getDisplayedRowCount());
-		// 주문리스트 합계 정보
-		//gagajf.ajaxFormSubmit('/order/list/sum/info', '#searchForm', fnOrderListSumInfoCallback);
-	//});
-};
-
-var fnSearchCallBack = function(result){
-	$('#searchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
-	$('#searchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
-	$('#searchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
-	$('#searchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
-	
-	gridOptionsOrderList.api.setRowData(result.orderList);
-	gagaPaging.createPagination(result.pageing.pageable);
-}
-
-// 엑셀조회
-$("#btnSearchExcel").on('click', function () {
-	cfnExcelUploadPopup('', 'fnExcelUpoadCallback');
-});
-
-var fnExcelUpoadCallback = function (data) {
-	$("#excelFileNm").val(data.excelFileNm);
-	gagaAgGrid.fetch('/order/excel/search', gridOptionsOrderList, '#searchForm', function () {
-		$("#rowCntOrderList").text(gridOptionsOrderList.api.getDisplayedRowCount());
-	});
-};
-
-// 초기화 클릭시
-$('#btnInit').on('click', function() {
-	$('#searchForm')[0].reset();
-	$("#multiBrand").empty();
-});
-
-// 엑셀 다운로드
-// 2020.12.11 현재는 그리드의 조회 목록을 엑셀 다운로드 하고 있지만 추후 에는 조건의 엑셀 조회 후 다운로드 기능으로 변경 해야 할듯함
-// 기존의 주문목록은 페이징 기능이 없었지만 페이징 기능을 추가 하면서 엑셀다운로드시 조회 후 파일다운 기능 필요  
-var fnOrderExcelList = function () {
-	gagaAgGrid.showOrHideColumn(gridOptionsOrderList	, "custNo", true);
-	gagaAgGrid.exportToExcel('주문목록'					, gridOptionsOrderList);
-	gagaAgGrid.showOrHideColumn(gridOptionsOrderList	, "custNo", false);
-};
-
-var fnOpenOrderDetailPopup = function (ordNo) {
-	currOrdNo = ordNo;
-	cfnOpenOrderDetailPopup(ordNo);
-};
-
-var fnReOpenOrderDetailPopup = function () {
-	cfnOpenOrderDetailPopup(currOrdNo);
-};
-	
-//자사/입점 변경여부
-$("#searchForm input[name=selfYn]").bind('click change', function () {
-	var radioValue = $(this).val();
-	var selfGb = "S";	// 자사 공급 업체
-	
-	if (radioValue == "N"){
-		selfGb = "E";	//입점 공급업체
-	}
-	
-	var actionUrl = '/renderer/supply/company/list/'+ selfGb;	
-
-	$('#searchForm').find('#multiBrand').empty();
-
-	cfnCreateCombo(actionUrl, $('#searchForm select[name=supplyCompCd]'), "[전체]", "");
-});
-	
-// 업체변경시
-$('#searchForm select[name=supplyCompCd]').on('change', function() {
-	var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
-
-	if(sessRoleCd == "G001_B000"){
-		actionUrl = '/renderer/brand/AuthBrandlist';
-	}
-
-	cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
-});
-
-//페이징
-$('#searchForm select[name=pageSize]').on('change', function() {
-	$("#searchForm input[name=pageNo]").val('1');
-	fnGoodsListSearch($("#searchForm input[name=searchGb]").val());
-});
-
-// 초기설정
-$(document).ready(function() {
-	// 달력기능 활성화
-	cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '주문');
-	gagaAgGrid.createGrid('gridOrderList', gridOptionsOrderList);
-	gridOptionsOrderList.api.hideOverlay();
-});
-</script>
-
-</html>
-
-
-
-
-

+ 0 - 183
src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html

@@ -1,183 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderMemoRegistForm.html
- * @desc    : 주문메모 등록 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.11.16   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="900">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>주문메모등록</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupCreateOrderMemo');"><i class="fa fa-times"></i></button>
-		</div>
-	
-		<div class="panelContent" style="height:100%; overflow-y:auto;">
-			<form id="orderMemoRequestFrm">
-				<input type="hidden" name="ordNo" th:value="${ordNo}" />
-				<input type="hidden" name="seq" th:value="${seq}" />
-				<input type="hidden" name="mode" th:value="${mode}" />
-				
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:30%" />
-						<col />
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>등록자ID</th>
-							<td id="userNm"></td>
-						</tr>
-						<tr>
-							<th>관리자 메모</th>
-							<td>
-								<textarea th:if="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" th:text="${orderMemo.memo}"></textarea>
-								<textarea th:unless="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" text=""></textarea>
-							</td>
-						</tr>
-						<tr id="imageFileTr">
-							<th>파일</th>
-							<td><div class="uFile">
-								<input id="imageFile" name="imageFile" type="file" class="uFileInput"/>
-								<label for="imageFile" class="uFileLabel">파일선택</label>
-								<input type="hidden" name="orgFileNm"/>
-								<input type="hidden" name="sysFileNm"/>
-							</div>
-							</td>
-						</tr>
-						<th:block th:if="${mode == 'U' and orderMemo.sysFileNm != null and orderMemo.sysFileNm != ''}" th:with="uploadImageUrl=${@environment.getProperty('upload.image.view')}">
-							<tr>
-								<th>이미지</th>
-								<td>
-									<a href="javascript:void(0);" onclick="fnPreImgView()">
-										<img id="memoImg" th:src="|${uploadImageUrl}/memo/${orderMemo.sysFileNm}|" th:onerror="'this.src=\''+@{${@environment.getProperty('domain.uximage')}+ '/image/no.gif'}+'\';'" width="300px"/>
-									</a>
-								</td>
-							</tr>
-						</th:block>
-					</tbody>
-				</table>
-				<div>
-					<button type="button" class="btn btn-success btnRight marT10" id="btnOrderMemoRegistOk">저장</button>
-				</div>	
-				<br>
-			</form>
-		</div>
-	</div>
-</div>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-// 이벤트 바인딩 관련
-var orderMemo 	= [[${orderMemo}]];
-var userNo 		= [[${userNo}]];
-var userNm 		= [[${userNm}]];
-var mode 		= [[${mode}]];
-
-// 첨부파일 등록
-$('#orderMemoRequestFrm input[name=imageFile]').on('change', function() {
-	var file = this.files[0];
-	
-	if (typeof(file) == 'undefined'){
-		return;
-	}
-	
-	gagajf.ajaxFileUpload('/common/file/upload?subDir=/memo'
-		, file
-		, function(result) {
-			$('#orderMemoRequestFrm input[name=orgFileNm]').val(result.oldFileName);
-			$('#orderMemoRequestFrm input[name=sysFileNm]').val(result.newFileName);
-		}
-		, 'image'
-	);
-});
-
-// 주문메모저장
-$('#btnOrderMemoRegistOk').on('click', function() {
-	var memo = $('#orderMemoRequestFrm textarea[name=memo]').val();
-
-	if (gagajf.isNull(memo)) {
-		mcxDialog.alert('메모 입력해 주세요.');
-		$('#orderMemoRequestFrm textarea[name=memo]').focus();
-		return;
-	}
-
-	mcxDialog.confirm('저장하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function(){
-			var jsonData = JSON.stringify($('#orderMemoRequestFrm').serializeObject());
-			gagajf.ajaxJsonSubmit(
-				'/order/memo/save'
-				, jsonData
-				, function(){
-					fnBindOrderMemo();
-					uifnPopupClose('popupCreateOrderMemo');
-				}
-			);
-		}
-	});
-});
-	
-// 이미지 클릭 시 미리보기 팝업 이벤트
-var fnPreImgView = function(){
-	cfnOpenImagePreViewPopup('preImgView', $('#memoImg').attr('src'));
-}
-
-// 이미지 로드 시 사이즈 변경
-$('#imagePreView').bind('load', function(){
-	var windowWidth = $(window).width() * 0.95;
-	var windowHeight = $(window).height() * 0.95;
-	
-	var width = $('#imagePreView').width();
-	var height = $('#imagePreView').height();
-	
-	if (width > windowWidth) {
-		$('#preImgView >.videoPopup').css('width', windowWidth);
-		$('#imagePreView').css('width', windowWidth);
-		
-	}
-	if (height > windowHeight) {
-		$('#preImgView >.videoPopup').css('height', windowHeight);
-		$('#imagePreView').css('height', windowHeight);
-	}
-});
-	
-$(document).ready(function() {
-	var userText = '';
-	
-	if (mode == 'U') {
-		userText = orderMemo.userNm + ' ('+orderMemo.updNo+')';
-		$('#orderMemoRequestFrm input[name=orgFileNm]').val(orderMemo.orgFileNm);
-		$('#orderMemoRequestFrm input[name=sysFileNm]').val(orderMemo.sysFileNm);
-	} else {
-		if (!gagajf.isNull(userNm) && !gagajf.isNull(userNo)) {
-			userText = userNm + ' (' + userNo + ')';
-		} else {
-			if (gagajf.isNull(userNm)) userText = userNm;
-			if (gagajf.isNull(userNo)) userText = userNo;
-		}
-	}
-	
-	$('#userNm').text(userText);
-
-	// 등록자만 수정 가능하게 처리
-	if (mode == 'U' && userNo != orderMemo.updNo) {
-		$('#btnOrderMemoRegistOk').css('display', 'none');
-		$('#imageFileTr').css('display', 'none');
-		$('#orderMemoRequestFrm textarea[name=memo]').attr('readonly', true);
-	}
-});
-
-/*]]>*/
-</script>
-
-</html>

+ 0 - 437
src/main/webapp/WEB-INF/views/order/OrderSamplePopupForm.html

@@ -1,437 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderSamplePopupForm.html
- * @desc    : 주문 샘플 데이터 생성 팝업 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.01.30   card007     최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1200" id="popupOrderSample">
-	<div class="panelStyle">
-		<!-- TITLE -->
-		<div class="panelTitle">
-			<strong th:text="${'주문 샘플 데이터 생성'}"></strong>
-			<button type="button" class="close" onclick="uifnPopupClose('popupOrderSample');"><em class="fa fa-times"></em></button>
-		</div>
-		<!-- //TITLE -->
-		
-		<!-- CONTENT -->
-		<div class="panelContent">
-			<form id="orderSamplePopupForm" name="orderSamplePopupForm" action="#" th:action="@{'/order/sample/create'}" th:method="post">
-				<table class="frmStyle" aria-describedby="등록폼">
-					<colgroup>
-						<col style="width:7%;"/>
-						<col style="width:26%;"/>
-						<col style="width:7%;"/>
-						<col style="width:26%;"/>
-						<col style="width:7%;"/>
-						<col/>
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>회원번호</th>
-							<td>
-								<input class="w200" type="text" name="custNo" id="custNo"/>
-								<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch" onclick="fnApplyCustomerInfo()">적용</button>
-							</td>
-							<th>주문자명</th>
-							<td>
-								<input type="text" name="ordNm" id="ordNm"/>
-							</td>
-							<th>핸드폰번호</th>
-							<td>
-								<input type="text" name="ordPhnno" id="ordPhnno"/>
-							</td>
-						</tr>
-						<tr>
-							<th>전화번호</th>
-							<td>
-								<input type="text" name="ordTelno" id="ordTelno"/>
-							</td>
-							<th>이메일</th>
-							<td colspan="3">
-								<input type="text" name="ordEmail" id="ordEmail"/>
-							</td>
-						</tr>
-						<tr>
-							<th>배송지</th>
-							<td colspan="5">
-								<input type="text" name ="recipZipcode" id="recipZipcode" class="w100" readonly="readonly"/>
-								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delivery');">우편번호찾기</button>
-								<input type="text" name ="recipBaseAddr" id="recipBaseAddr" class="w300"/>
-								<input type="text" name ="recipDtlAddr" id="recipDtlAddr" class="w300"/>
-							</td>
-						</tr>
-					</tbody>
-				</table>
-			</form>
-		</div>
-		<!-- //CONTENT -->
-
-		<!-- Grid -->
-		<ul class="panelBar">
-			<li class="left">
-				<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsDeleteRow();">행삭제</button>
-			</li>
-			<li class="right">
-				<button type="button" class="btn btnRight btn-base btn-lg" onclick="fnOpenGoodsPopup();">주문상품추가</button>
-			</li>
-		</ul>
-		<div id="gridGoodsList" style="height: 390px;" class="ag-theme-balham lh60"></div>
-		<!-- //Grid -->
-
-		<!-- 버튼 배치 영역 -->
-		<ul class="panelBar">
-			<li class="right">
-				<button type="button" class="btn btn-info btn-lg" id="btnCreateOrderSample">저장</button>
-			</li>
-		</ul>
-		<!-- //버튼 배치 영역 -->
-	</div>
-</div>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-	var sessRoleCd = [[${sessionInfo.roleCd}]];
-	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
-	var formalGbList = gagajf.convertToArray([[${formalGbList}]]);
-	var seasonList = gagajf.convertToArray([[${seasonList}]]);
-	var columnDefs = [];
-	columnDefs = [
-		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-		{headerName: 'No', width: 60, cellClass: 'text-center',
-			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
-		},
-		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
-			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.gif\';"/>';
-			}
-		},
-		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
-		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'
-			,cellRenderer: function(params) {
-				return '<a href="javascript:void(0);">' + params.value + '</a>';
-			}
-		},
-		{headerName: "구성상품코드", field: "compsGoodsCd", width: 140, cellClass: 'text-center'},
-		{headerName: "판매가능재고", field: "stockQtySum", width: 120, cellClass: 'text-right',
-			valueFormatter: function(params) {	return params.value.addComma();},
-			cellStyle : function(params){
-				if ("00" == params.data.goodsStat  || "10" == params.data.goodsStat || "20" == params.data.goodsStat || "30" == params.data.goodsStat) {
-					return;
-				}
-				var color = "";
-				if (params.value <= 0){
-					color = '#ff96689c';
-				}
-				return { 'background-color': color};
-			}
-		},
-		{
-			headerName		: "주문옵션"
-			, field			: "optCd"
-			, width			: 100
-			, cellClass		: "text-center"
-			, cellRenderer	: function (params) {
-				var strVal			= '';
-				if (!gagajf.isNull(params.data.optCd2)) {
-					var optArr = params.data.optCd2.split(',');
-					strVal += '<select class="optCd2" name="optCd2" goodsCd="' + params.data.goodsCd + '" onchange="fnChangeOption(this)">';
-					if (gagajf.isNull(params.data.optCd)) {
-						strVal += '<option value="" selected>선택</option>';	
-					} else {
-						strVal += '<option value="">선택</option>'
-					}
-					
-					
-					$.each(optArr, function (idx, item) {
-						if (params.data.optCd == item) {
-							strVal += '<option value="' + item + '" selected>' + item + '</option>';
-						} else {
-							strVal += '<option value="' + item + '">' + item + '</option>';
-						}
-					});
-				}
-				
-				return strVal;
-			}
-		},
-		{headerName: "주문수량", field: "ordQty", width: 100, cellClass: 'text-center', editable : true},
-		{headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
-			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
-		},
-		{headerName: "년도", field: "styleYear" , width: 80, cellClass: 'text-center'},
-		{headerName: "시즌", field: "seasonCd" , width: 80, cellClass: 'text-center',
-			cellEditorParams: { values: gagaAgGrid.extractValues(seasonList) },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(seasonList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(seasonList, params.newValue); }
-		},
-		{headerName: "정상가", field: "listPrice" , width: 100, cellClass: 'text-right'
-			,valueFormatter: function(params) {return params.value.addComma();},
-			cellEditor: 'textCellEditor',
-			cellEditorParams: { maxlength: 14, validType: 'numeric'}
-		},
-		{headerName: "판매가", field: "currPrice" , width: 100, cellClass: 'text-right'
-			,valueFormatter: function(params) {return params.value.addComma();},
-			cellEditor: 'textCellEditor',
-			cellEditorParams: { maxlength: 14, validType: 'numeric'}
-		},
-		/*{headerName: "할인율", field: "dcRate" , width: 90, cellClass: 'text-right'},*/
-		{headerName: "가격변경일", field: "priceUpdDt", width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
-			}
-		},
-		{headerName: "ERP재고연동여부", field: "erpStockLinkYn", width: 120, cellClass: 'text-center'},
-		{headerName: "이월구분", field: "formalGb", width: 100, cellClass: 'text-center',
-			cellEditorParams: { values: gagaAgGrid.extractValues(formalGbList) },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(formalGbList, params.newValue); }
-		},
-		{headerName: "반품가능", field: "returnableYn" , width: 90, cellClass: 'text-center'},
-		{headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
-			}
-		},
-		{headerName: "등록자", field: "regNm" , width: 100, cellClass: 'text-center'},
-		{headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
-			}
-		},
-		{headerName: "수정자", field: "updNm" , width: 100, cellClass: 'text-center'}
-	];
-	
-	// Get GridOptions
-	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
-	
-	// 중복 선택 가능
-	gridOptions.rowSelection = 'multiple';
-	gridOptions.suppressRowClickSelection = true;
-	gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
-	
-	gridOptions.getRowStyle = function(params) {
-		if ("G008_00" == params.data.goodsStat  || "G008_10" == params.data.goodsStat || "G008_20" == params.data.goodsStat || "G008_30" == params.data.goodsStat) {
-			return { background: '#23c6c8' };
-		}
-	}
-
-	// 주문수량 변경 이벤트
-	gridOptions.onCellValueChanged = function(event) {
-		let ordQty = event.data.ordQty;
-		if (event.colDef.field == "ordQty" && event.data.ordQty > event.data.stockQtySum) {
-			ordQty = event.data.stockQtySum;
-			mcxDialog.alert('주문수량이 판매가능재고보다 클 수 없습니다.');
-		}
-		
-		gridOptions.api.forEachNode(function(rowNode, index) {
-			if (event.data.goodsCd == rowNode.data.goodsCd){
-				rowNode.data.ordQty = ordQty;
-				
-				gridOptions.api.updateRowData({update: [rowNode.data]});
-			}
-		});
-	}
-
-	//상품조회 팝업
-	var fnOpenGoodsPopup = function() {
-		cfnOpenGoodsPopup('fnFetchGoods');
-	}
-	
-	// 상품추가
-	var fnFetchGoods = function(goodsData) {
-		if (goodsData.length < 1) return;
-		
-		// 기존상품
-		var oldGoodsSetList = gagaAgGrid.getAllRowData(gridOptions);
-		var index = oldGoodsSetList.length+1;
-		
-		var arrGoodsCd = [];
-		$.each(goodsData, function(idx, item) {
-			arrGoodsCd.push(item.goodsCd);
-		})
-		
-		var isExist = false;
-		var jsonData = JSON.stringify(arrGoodsCd);
-		gagajf.ajaxJsonSubmit('/order/sample/goods/info', jsonData, function(result) {
-			$.each(result, function(idx, item) {
-				isExist = false;
-				gridOptions.api.forEachNode(function(rowNode, index) {
-					//중복상품 여부 확인
-					if (item.goodsCd == rowNode.data.goodsCd){
-						isExist = true;
-					}
-				});
-				
-				if(!isExist){
-					var data = {
-						no: index
-						, sysImgNm : item.sysImgNm
-						, goodsCd : item.goodsCd
-						, compsGoodsCd : item.repGoodsCd
-						, goodsNm : item.goodsNm
-						, ordQty : 1
-						, optCd2 : item.siteCd
-						, stockQtySum : item.stockQtySum
-						, goodsStat : item.goodsStat
-						, styleYear : item.styleYear
-						, seasonCd : item.seasonCd
-						, listPrice : item.listPrice
-						, currPrice : item.currPrice
-						, priceUpdDt : item.priceUpdDt
-						, erpStockLinkYn : item.erpStockLinkYn
-						, formalGb : item.formalGb
-						, returnableYn : item.returnableYn
-						, regDt : item.regDt
-						, regNm : item.regNm
-						, updDt : item.updDt
-						, updNm : item.updNm
-					};
-					
-					//그리드 마지막에 추가해야함
-					gridOptions.api.updateRowData({add: [data], addIndex: idx});
-					gridOptions.api.refreshCells();
-					index++;
-				}
-			});
-		});
-	}
-
-	//상품삭제
-	var fnGoodsDeleteRow = function() {
-		var selectedData = gagaAgGrid.selectedRowData(gridOptions);
-		
-		if (selectedData.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-		
-		//화면에서 삭제
-		gagaAgGrid.removeRowData(gridOptions, false);
-	}
-
-	// 저장
-	$('#btnCreateOrderSample').on('click', function() {
-		// 입력 값 체크
-		let selectedData = gagaAgGrid.selectedRowData(gridOptions);
-		
-		if (selectedData.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-		
-		let optChk = true;
-		let qtyChk = true;
-		$.each(selectedData, function(idx, item) {
-			if (gagajf.isNull(item.optCd)) {
-				optChk = false;
-			} else if (item.ordQty <= 0) {
-				qtyChk = false;
-			}
-		});
-		
-		if (!optChk) {
-			mcxDialog.alert('주문옵션이 없습니다.');
-			return false;
-		}
-		
-		if (!qtyChk) {
-			mcxDialog.alert('주문수량은 0보다 커야 됩니다.');
-			return false;
-		}
-		
-		mcxDialog.confirm("저장하시겠습니까?", {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				let params = {};
-				params.custNo = $('#custNo').val();
-				params.ordNm = $('#ordNm').val();
-				params.ordPhnno = $('#ordPhnno').val();
-				params.ordEmail = $('#ordEmail').val();
-				params.recipZipcode = $('#recipZipcode').val();
-				params.recipBaseAddr = $('#recipBaseAddr').val();
-				params.recipDtlAddr = $('#recipDtlAddr').val();
-				params.goods = selectedData;
-				
-				let jsonData = JSON.stringify(params);
-				
-				gagajf.ajaxJsonSubmit($('#orderSamplePopupForm').prop('action'), jsonData, function(result) {
-					uifnPopupClose('popupOrderSample');
-				});
-			}
-		});
-	});
-
-	// 회원정보 적용
-	var fnApplyCustomerInfo = function() {
-		var params = {};
-		params.searchGb = 'custNo';
-		params.searchTxt = $('#orderSamplePopupForm input[name=custNo]').val();
-		
-		var jsonData = JSON.stringify(params);
-		
-		gagajf.ajaxJsonSubmit('/customer/active/list', jsonData, function(result) {
-			let param = result[0];
-			
-			$('#ordNm').val(param.custNm);
-			$('#ordPhnno').val(param.cellPhnno);
-			$('#ordEmail').val(param.email);
-			$('#recipZipcode').val(param.homeZipcode);
-			$('#recipBaseAddr').val(param.homeBaseAddr);
-			$('#recipDtlAddr').val(param.homeDtlAddr);
-		});
-	}
-
-	var fnOpenDaumAddr = function() {
-		let daumZip = new daum.Postcode({
-			oncomplete: function(data) {
-				// 우편번호와 주소 정보를 해당 필드에 넣는다.
-				$('#orderSamplePopupForm input[name=recipZipcode]').val(data.zonecode);
-				$('#orderSamplePopupForm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
-				$('#orderSamplePopupForm input[name=recipDtlAddr]').focus();
-				
-				cfnCloseDaumAddr();
-			},
-			width: '100%'
-		});
-		
-		cfnOpenDaumAddr(daumZip);
-	}
-	
-	var fnChangeOption = function(param) {
-		var params = {};
-		params.goodsCd = $(param).attr('goodsCd');
-		params.siteCd = $(param).val();
-		
-		var jsonData = JSON.stringify(params);
-		gagajf.ajaxJsonSubmit('/order/sample/goods/stock', jsonData, function(result) {
-			gridOptions.api.forEachNode(function(rowNode, index) {
-				if (result.goodsCd == rowNode.data.compsGoodsCd){
-					rowNode.data.stockQtySum = result.minOrdQty;
-					console.log(result);
-					rowNode.data.optCd = result.siteCd;
-					gridOptions.api.updateRowData({update: [rowNode.data]});
-				}
-			});
-		});
-	}
-
-	$(document).ready(function() {
-		gagaAgGrid.createGrid('gridGoodsList', gridOptions);
-	});
-/*]]>*/
-</script>
-
-</html>

+ 0 - 370
src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

@@ -1,370 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderSellerListForm.html
- * @desc    : 입점업체미발주목록조회 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.11.16   jsh77b       최초 작성
- *******************************************************************************
- -->
- 
-<div id="main">
-	<!-- 메인타이틀 영역 -->
-	<div class="main-title">
-	</div>
-	<!-- //메인타이틀 영역 -->
-	
-	<!-- 메뉴 설명 -->
-	<div class="infoBox menu-desc">
-	</div>
-	
-	<form id="searchForm" name="searchForm" action="#" th:action="@{'/order/seller/unorder/list'}">
-		<input type="hidden" id="searchGb" name="searchGb" />
-		<input type="hidden" id="imageViewYn" name="imageViewYn" />
-		
-		<!-- 패널 영역1 -->
-		<div class="panelStyle" >
-			<!-- 검색조건 영역 -->
-			<!-- TITLE -->
-			<div class="panelTitle">
-				<h3>
-					<i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">주문번호</font> 또는 <font color="red">검색조건</font> 하나를 꼭 입력해 주세요.
-				</h3>
-				<span class="panelControl">
-					<i class="fa fa-chevron-up"></i>
-				</span>
-			</div>
-			
-			<div class="panelContent">
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-					</colgroup>
-					<tr>
-						<th>업체/브랜드<em class="required" title="필수"></em></th>
-						<td colspan="7">
-							<!-- <label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="N" />자사</label> -->
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="Y" checked/>입점</label>
-							<select name="supplyCompCd" id="supplyCompCd">
-								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-							<span id="multiBrand"></span>
-						</td>
-					</tr>
-					<tr>
-						<th>주문번호</th>
-						<td>
-							<input type="text" name="ordNo" placeholder="" maxlength="20"/>
-						</td>
-						<th>주문자명</th>
-						<td>
-							<input type="text" name="ordNm" placeholder="" maxlength="20"/>
-						</td>
-						<th>상품코드</th>
-						<td>
-							<input type="text" name="goodsCd" placeholder="" maxlength="20"/>
-						</td>
-						<th>주문상세상태</th>
-						<td>
-							<select name="ordDtlStat" id="ordDtlStat">
-								<option value="G013_20" selected>결제완료</option>
-								<option value="G013_30">상품준비중</option>
-								<!-- <option value="G013_26">교환출고처지정</option>
-								<option value="G013_35">입고확정</option> -->
-								<option value="G013_55">출고완료</option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>조회일자</th>
-						<td colspan="7">
-							<select name="searchDateGb">
-								<option value="ordDt">주문일자</option>
-							</select>
-							<span id="terms"></span>
-						</td>
-					</tr>
-				</table>
-				
-				<ul class="panelBar">
-					<li class="center">
-						<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch">조회</button>
-						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
-					</li>
-				</ul>
-				
-			</div>
-		</div>
-
-		<div class="panelStyle">
-			<ul class="panelBar">
-				<li>
-					<button type="button" class="btn btn-info btn-lg" onclick="cfnDownloadSampleFile('SF018');">입점송장번호등록다운로드</button>
-				</li>
-				<li class="aR">
-					<button type="button" id="btnExcelDown" class="btn btn-info btn-lg">엑셀다운로드</button>
-					<button type="button" id="btnInvoiceExcelUpLoad" class="btn btn-success btn-lg">송장엑셀업로드</button>
-					<button type="button" id="btnSave" class="btn btn-success btn-lg">저장</button>
-				</li>
-			</ul>
-			
-			<div class="panelContent" style="overflow: hidden;">
-				<div id="gridList" style="width: 100%; height: 600px;" class="ag-theme-balham lh30"></div>
-			</div>
-		</div>
-		
-		<!-- //리스트 영역 -->
-		<label class="off">
-			<a href="javascript:void(0);" id="excelList" style="display: none;">엑셀다운로드</a>
-		</label>
-
-	</form>
-</div>
-
-<label class="off">
-	<a href="javascript:void(0);" id="hdOrderExcelList" style="display: none;">엑셀다운로드</a>
-</label>
-	
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-var sessRoleCd 		= [[${sessionInfo.roleCd}]];
-var shipCompanyList = gagajf.convertToArray([[${shipCompanyList}]]);
-
-var columnDefs = [
-	{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-	{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
-	{headerName: "입점업체",			field:"supplyCompNm",		width:100, cellClass: 'text-center'},
-	{headerName: "입점업체코드",		field:"supplyCompCd",		width:100, cellClass: 'text-center', hide: true},
-	{headerName: "브랜드",			field:"brandKnm",			width:100, cellClass: 'text-center'},
-	{headerName: "상품타입",			field:"goodsTypeNm",		width:100, cellClass: 'text-center'},
-	{headerName: "상품코드",			field:"goodsCd",			width:100, cellClass: 'text-center'},
-	{headerName: "상품명",			field:"goodsNm",			width:100, cellClass: 'text-center'},
-	{headerName: "주문번호",			field:"ordNo",				width:100, cellClass: 'text-center'},
-	{headerName: "주문상세번호",		field:"ordDtlNo",			width:100, cellClass: 'text-center'},
-	{headerName: "주문상세상태",		field:"ordDtlStatNm", 		width:100, cellClass: 'text-center'},
-	{headerName: "주문자명",			field:"ordNm",				width:100, cellClass: 'text-center'},
-	{headerName: "주문일시",			field:"ordDt",				width:100, cellClass: 'text-center',
-		cellRenderer		: function (params) {
-			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
-		}
-	},
-	{headerName: "결제수단",			field:"payMeansNm",			width:100, cellClass: 'text-center'},
-	{headerName: "주문자휴대전화",		field:"ordPhnno",			width:100, cellClass: 'text-center'},
-	{headerName: "수령자명",			field:"recipNm",			width:100, cellClass: 'text-center'},
-	{headerName: "수령자휴대전화",		field:"recipPhnno",			width:120, cellClass: 'text-center'},
-	{headerName: "수령자우편번호",		field:"recipZipNo",			width:120, cellClass: 'text-center'},
-	{headerName: "수령자기본주소",		field:"recipBaseAddr",		width:120, cellClass: 'text-center'},
-	{headerName: "수령자상세주소",		field:"recipDtlAddr",		width:120, cellClass: 'text-center'},
-	{headerName: "업체상품코드",		field:"supplyGoodsCd",		width:100, cellClass: 'text-center'},
-	{headerName: "단품코드",			field:"itemCd",				width:100, cellClass: 'text-center'},
-	{headerName: "단품상품명",			field:"itemNm",				width:100, cellClass: 'text-center'},
-	{headerName: "칼라",				field:"optCd1",				width:100, cellClass: 'text-center'},
-	{headerName: "사이즈",			field:"optCd2",				width:100, cellClass: 'text-center'},
-	{headerName: "주문수량",			field:"itemOrdQty",			width:100, cellClass: 'text-center'},
-	{headerName: "주문금액",			field:"ordAmt",				width:100, cellClass: 'text-center'},
-	{headerName: "할인금액",			field:"totDcAmt",			width:100, cellClass: 'text-center'},
-	{headerName: "실결제금액",			field:"realOrdAmt",			width:100, cellClass: 'text-center'},
-	{headerName: "배송업체",			field:"shipCompCd",			width:150, cellClass: 'text-left'
-		, editable 			: true
-		, cellEditor		: 'agRichSelectCellEditor'
-		, cellEditorParams	: { 
-			values: gagaAgGrid.extractValues(shipCompanyList) 
-		}
-		, valueFormatter: function (params) { 
-			return gagaAgGrid.lookupValue(shipCompanyList, params.value); 
-		}
-		, valueParser: function (params) { 
-			return gagaAgGrid.lookupKey(shipCompanyList, params.newValue); 
-		}
-	},
-	{headerName: "송장",				field:"invoiceNo",			width:150, cellClass: 'text-left', editable : true}
-];
-
-var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
-gridOptions.suppressRowClickSelection = true;
-gridOptions.rowSelection = 'multiple';
-gridOptions.stopEditingWhenGridLosesFocus = true;
-
-// 조회버튼
-$('#btnOrderSearch').on('click', function() {
-	fnSearch();
-});
-
-// 검색
-var fnSearch = function() {
-	var formId = '#searchForm';
-	var ordNo = $('#searchForm input[name=ordNo]').val();
-	var stDate = $('#stDate').val();
-	var edDate = $('#edDate').val();
-	
-	if (gagajf.isNull(ordNo)) {
-		if (gagajf.isNull(stDate)) {
-			mcxDialog.alert('시작 기간을 입력하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(edDate)) {
-			mcxDialog.alert('종료 기간을 입력하세요.');
-			return;
-		}
-	}
-	
-	gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
-}
-
-// 엑셀다운로드 시 주문상태 변경
-$('#btnExcelDown').on('click', function () {
-	var selectedData = gridOptions.api.getSelectedRows();
-
-	if (selectedData.length == 0) {
-		mcxDialog.alert('선택된 행이 없습니다.');
-		return;
-	}
-	
-	mcxDialog.confirm('엑셀 다운로드 하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function(){
-			var jsonData = JSON.stringify(selectedData);
-			gagajf.ajaxJsonSubmit('/order/seller/unorder/status/save', jsonData, fnExcelDownCollback);
-		}
-	});
-});
-
-// 엑셀다운로드
-var fnExcelDownCollback = function(flag){
-	$('#excelList').attr({ href : '/order/seller/unorder/excel/list' }).get(0).click();
-}
-
-// 송장 엑셀 업로드
-$('#btnInvoiceExcelUpLoad').on('click', function() {
-	cfnExcelUploadPopup('invoiceExcelUpload', 'invoiceExcelUpload');
-});
-
-var invoiceExcelUpload = function(result){
-	mcxDialog.confirm('송장 변경을 진행하시겠습니까?', {
-		cancelBtnText	: "취소"
-		, sureBtnText	: "확인"
-		, sureBtnClick	: function(){
-			var data = {
-				procJob 		: result.procJob
-				, excelFileNm 	: result.excelFileNm
-			};
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit('/order/seller/unorder/invoice/excelupload/save', jsonData, fnInvoiceSaveCollback);
-		}
-	});	
-}
-
-// 송장번호 저장후 
-var fnInvoiceSaveCollback = function(result){
-	mcxDialog.alert(result.msg);
-	return;
-}
-
-// 송장번호 저장시
-$('#btnSave').on('click', function () {
-	var selectedData = gridOptions.api.getSelectedRows();
-
-	if (selectedData.length == 0) {
-		mcxDialog.alert('선택된 행이 없습니다.');
-		return;
-	}
-	
-	var checkFlag = false;
-	$.each(selectedData, function(idx, item) {
-		if (gagajf.isNull(item.shipCompCd)){
-			checkFlag = true;
-			mcxDialog.alert('배송업체를 선택하세요.');
-			return;
-		}
-		
-		if (gagajf.isNull(item.invoiceNo)){
-			checkFlag = true;
-			mcxDialog.alert('송장번호를 입력하세요.');
-			return;
-		}
-	});
-	
-	if (checkFlag){
-		return false;
-	}
-	
-	mcxDialog.confirm('저장 하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function(){
-			var jsonData = JSON.stringify(selectedData);
-			gagajf.ajaxJsonSubmit('/order/seller/unorder/invoice/save', jsonData, fnInvoiceSaveCollback);
-
-		}
-	});
-	
-});
-
-// 초기화 클릭시
-$('#btnInit').on('click', function() {
-	$('#searchForm')[0].reset();
-	$("#multiBrand").empty();
-});
-
-// 자사/입점 변경여부
-$("#searchForm input[name=selfYn]").bind('click change', function () {
-	var radioValue = $(this).val();
-	var selfGb = "S";	// 자사 공급 업체
-	
-	if (radioValue == "N"){
-		selfGb = "E";	//입점 공급업체
-	}
-	
-	var actionUrl = '/renderer/supply/company/list/'+ selfGb;	
-
-	$('#searchForm').find('#multiBrand').empty();
-
-	cfnCreateCombo(actionUrl, $('#searchForm select[name=supplyCompCd]'), "[전체]", "");
-});
-	
-// 업체변경시
-$('#searchForm select[name=supplyCompCd]').on('change', function() {
-	var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
-
-	if (sessRoleCd == "G001_B000") {
-		actionUrl = '/renderer/brand/AuthBrandlist';
-	}
-	
-	cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
-});
-
-//초기설정
-$(document).ready(function() {
-	// 달력기능 활성화
-	cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '주문');
-	gagaAgGrid.createGrid('gridList', gridOptions);
-	gridOptions.api.hideOverlay();
-});
-
-</script>
-
-</html>
-
-
-
-
-

+ 0 - 127
src/main/webapp/WEB-INF/views/order/RefundAccountRegistForm.html

@@ -1,127 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderListForm.html
- * @desc    : 주문목록 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.01.04   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="900">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>환불계좌정보</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupCreateRefundAccount');"><i class="fa fa-times"></i></button>
-		</div>
-
-		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="orderRefundAccontForm">
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:160px;" />
-						<col />
-						<col />
-						<col />
-						<col />
-						<col />
-						<col />
-					</colgroup>
-					<tbody>
-					<tr>
-						<th>은행</th>
-						<td>
-							<select name="bankCd">
-								<option value="">[선택하세요]</option>
-								<option th:if="${bankList}" th:each="oneData, status : ${bankList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th>계좌번호</th>
-						<td><input type="text" name="accountNo" data-valid-type="numeric"></td>
-						<th>예금주</th>
-						<td><input type="text" name="accountNm"></td>
-						</th:block>
-						<td>
-							<button type="button" class="btn btn-success" id="saveAccountBtn" onclick="fnSaveAccount();">저장</button>
-						</td>
-					</tr>
-					</tbody>
-				</table>
-			</form>
-		</div>
-	</div>
-</div>
-
-<script th:inline="javascript">
-	/*<![CDATA[*/
-	/* 이벤트 바인딩 관련 */
-	var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
-	var ordNo 					= orderInfoList[0].ordNo;
-	var custNo 					= orderInfoList[0].custNo;
-
-	/* 환불계좌번호 저장 */
-	var fnSaveAccount = function(){
-		var bankCd 		= $("#orderRefundAccontForm select[name=bankCd]").val();
-		var accountNo 	= $("#orderRefundAccontForm input[name=accountNo]").val();
-		var accountNm 	= $("#orderRefundAccontForm input[name=accountNm]").val();
-
-		if (gagajf.isNull(bankCd)) {
-			mcxDialog.alert('은행을 선택하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(accountNo)) {
-			mcxDialog.alert('계좌번호를 입력하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(accountNm)) {
-			mcxDialog.alert('예금주를 입력하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(ordNo) || gagajf.isNull(custNo)) {
-			mcxDialog.alert('주문정보를 다시 확인하시기 바랍니다..');
-			return;
-		}
-
-		mcxDialog.confirm("환불계좌를 저장하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function(){
-				var data = {};
-				data.ordNo 			= ordNo;
-				data.custNo 		= custNo;
-				data.bankCd 		= bankCd;
-				data.accountNo 		= accountNo;
-				data.accountNm 		= accountNm;
-
-				var jsonData = JSON.stringify(data);
-
-				gagajf.ajaxJsonSubmit('/order/account/save', jsonData, function(result){
-					uifnPopupClose('popupCreateRefundAccount');
-					fnBindOrderRfAccountInfo();
-				});
-			}
-		});
-	};
-
-	$(document).ready(function() {
-
-
-	});
-
-	/*]]>*/
-</script>
-
-</html>
-
-
-
-
-

+ 78 - 12
src/main/webapp/WEB-INF/views/order/RtnReqForm.html

@@ -44,6 +44,8 @@
 				
 				
 				<table class="frmStyle">
 				<table class="frmStyle">
 					<colgroup>
 					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
 						<col style="width:160px;" />
 						<col style="width:160px;" />
 						<col style="width:320px;" />
 						<col style="width:320px;" />
 						<col style="width:160px;" />
 						<col style="width:160px;" />
@@ -58,12 +60,17 @@
 									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|"></option>
 									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|"></option>
 								</select>
 								</select>
 							</td>
 							</td>
+							<th>회수방법</th>
+							<td>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="W" onclick="fnChangeWdGb(this)"/>회수요청<span></span></label>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="D" onclick="fnChangeWdGb(this)"/>직접발송<span></span></label>
+							</td>
 							<th>귀책사유</th>
 							<th>귀책사유</th>
 							<td><span id="imputeReason"></span></td>
 							<td><span id="imputeReason"></span></td>
 						</tr>
 						</tr>
 						<tr>
 						<tr>
 							<th>요청메모</th>
 							<th>요청메모</th>
-							<td colspan="3">
+							<td colspan="5">
 								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
 								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
 							</td>
 							</td>
 						</tr>
 						</tr>
@@ -145,7 +152,7 @@
 							<th>회수지주소 <i class="star"></i></th>
 							<th>회수지주소 <i class="star"></i></th>
 							<td colspan="3">
 							<td colspan="3">
 								<input type="text" name ="chgerZipcode" class="w100" readonly="readonly"/>
 								<input type="text" name ="chgerZipcode" class="w100" readonly="readonly"/>
-								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
+								<button type="button" class="btn btn-info" th:unless="${ordChgSq > 0}" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
 								<input type="text" name ="chgerBaseAddr" class="w300"/>
 								<input type="text" name ="chgerBaseAddr" class="w300"/>
 								<input type="text" name ="chgerDtlAddr" class="w300"/>
 								<input type="text" name ="chgerDtlAddr" class="w300"/>
 							</td>
 							</td>
@@ -157,8 +164,8 @@
 									<option value="">[선택하세요]</option>
 									<option value="">[선택하세요]</option>
 									<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 									<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 								</select>
 								</select>
-								- <input type="text" name ="chgerTelno2" class="w60" value="0000" />
-								- <input type="text" name ="chgerTelno3" class="w60" value="0000" />
+								- <input type="text" name ="chgerTelno2" class="w60"/>
+								- <input type="text" name ="chgerTelno3" class="w60"/>
 							</td>
 							</td>
 							<th>휴대전화 <i class="star"></i></th>
 							<th>휴대전화 <i class="star"></i></th>
 							<td>
 							<td>
@@ -166,8 +173,14 @@
 									<option value="">[선택하세요]</option>
 									<option value="">[선택하세요]</option>
 									<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 									<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
 								</select>
 								</select>
-								- <input type="text" name ="chgerPhnno2" class="w60" value="0000" />
-								- <input type="text" name ="chgerPhnno3" class="w60" value="0000" />
+								- <input type="text" name ="chgerPhnno2" class="w60"/>
+								- <input type="text" name ="chgerPhnno3" class="w60"/>
+							</td>
+						</tr>
+						<tr>
+							<th>반품메모</th>
+							<td colspan="3">
+								<textarea id="chgerRtnMemo" name="chgerRtnMemo" style="height:80px;" placeholder="반품메모(수거시요청사항)를 300자내외로 작성해 주세요"></textarea>
 							</td>
 							</td>
 						</tr>
 						</tr>
 					</tbody>
 					</tbody>
@@ -196,11 +209,13 @@ var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var chgReason				= "";											// 변경사유코드
 var chgReason				= "";											// 변경사유코드
 var chgMemo					= "";											// 변경사유메모
 var chgMemo					= "";											// 변경사유메모
+var wdGb;																	// 회수방법
 
 
 // 변경요청정보 승인, 철회
 // 변경요청정보 승인, 철회
 if (ordChgSq > 0) {
 if (ordChgSq > 0) {
 	chgReason				= orderChangeDetailList[0].chgReason;			// 변경사유코드
 	chgReason				= orderChangeDetailList[0].chgReason;			// 변경사유코드
 	chgMemo					= orderChangeDetailList[0].chgMemo;				// 변경사유메모
 	chgMemo					= orderChangeDetailList[0].chgMemo;				// 변경사유메모
+	wdGb					= orderChangeDetailList[0].wdGb;				// 회수방법
 }
 }
 
 
 var temp1 = true;
 var temp1 = true;
@@ -917,10 +932,16 @@ var fnCalculateRefundAmt = function (obj) {
 			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
 			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
 
 
 			if (result.spanRealCnclRtnAmt > 0) {
 			if (result.spanRealCnclRtnAmt > 0) {
-				// 고객사유 : 환불금액게산 = (취소금액 + 배송비) - 추가배송비 - 반품배송비
-				if (isCustomer) {
+				let wdGb = $('#wdGb:checked').val();
+
+				// 고객사유(회수요청) : 환불금액게산 = (취소금액 + 배송비) - 추가배송비 - 반품배송비
+				if (isCustomer && wdGb == 'W') {
 					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee - result.spanTotRtnDelvFee;
 					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee - result.spanTotRtnDelvFee;
 				} 
 				} 
+				// 고객사유(직접발송) : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+				else if (isCustomer && wdGb == 'D') {
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee;
+				}
 				// 회사사유 : 환불금액게산 = (취소금액 + 배송비)
 				// 회사사유 : 환불금액게산 = (취소금액 + 배송비)
 				else {
 				else {
 					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
 					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
@@ -984,6 +1005,7 @@ var fnCnclReq = function (reqGbn) {
 	var chgerPhnno 		= "";
 	var chgerPhnno 		= "";
 	var chgerTelno 		= "";
 	var chgerTelno 		= "";
 	var chgerEmail 		= "";
 	var chgerEmail 		= "";
+	var chgerRtnMemo	= "";
 	
 	
 	if (reqGbn == "rtnReq") {
 	if (reqGbn == "rtnReq") {
 		// 1. 취소수량 체크
 		// 1. 취소수량 체크
@@ -1066,9 +1088,15 @@ var fnCnclReq = function (reqGbn) {
 			mcxDialog.alert("휴대전화를 입력하세요."); return;
 			mcxDialog.alert("휴대전화를 입력하세요."); return;
 		}
 		}
 		
 		
-		chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
-		chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
+		chgerPhnno 		= chgerPhnno1 + '-' + chgerPhnno2 + '-' + chgerPhnno3;
 		chgerEmail 		= orderInfoList[0].ordEmail;
 		chgerEmail 		= orderInfoList[0].ordEmail;
+		chgerRtnMemo	= $("#cancelRequestFrm textarea[name=chgerRtnMemo]").val();
+		
+		if (gagajf.isNull(chgerTelno1) && gagajf.isNull(chgerTelno2) && gagajf.isNull(chgerTelno3)) {
+			chgerTelno 		= '';
+		} else {
+			chgerTelno = chgerTelno1 + '-' + chgerTelno2 + '-' + chgerTelno3;
+		}
 	} else {
 	} else {
 		
 		
 	}
 	}
@@ -1107,7 +1135,9 @@ var fnCnclReq = function (reqGbn) {
 		,"chgerDtlAddr"		: chgerDtlAddr
 		,"chgerDtlAddr"		: chgerDtlAddr
 		,"chgerPhnno"		: chgerPhnno
 		,"chgerPhnno"		: chgerPhnno
 		,"chgerTelno"		: chgerTelno
 		,"chgerTelno"		: chgerTelno
+		,"chgerRtnMemo"		: chgerRtnMemo
 		,"ordChgSq"			: ordChgSq
 		,"ordChgSq"			: ordChgSq
+		,"wdGb"				: $('#wdGb:checked').val()
 	}
 	}
 
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1174,6 +1204,7 @@ var fnSetChger = function(){
 	$("#cancelRequestFrm input[name=chgerZipcode]").val(data.recipZipcode);
 	$("#cancelRequestFrm input[name=chgerZipcode]").val(data.recipZipcode);
 	$("#cancelRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
 	$("#cancelRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
 	$("#cancelRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
 	$("#cancelRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
+	$("#cancelRequestFrm textarea[name=chgerRtnMemo]").val(data.chgerRtnmemo);
 	
 	
 	if (spRecipPhnno) {
 	if (spRecipPhnno) {
 		$("#cancelRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
 		$("#cancelRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
@@ -1186,6 +1217,34 @@ var fnSetChger = function(){
 		$("#cancelRequestFrm input[name=chgerTelno2]").val(spRecipTelno[1]);
 		$("#cancelRequestFrm input[name=chgerTelno2]").val(spRecipTelno[1]);
 		$("#cancelRequestFrm input[name=chgerTelno3]").val(spRecipTelno[2]);
 		$("#cancelRequestFrm input[name=chgerTelno3]").val(spRecipTelno[2]);
 	}
 	}
+	
+	if (ordChgSq > 0) {
+		$('input[name=chgerNm]').attr('readOnly', true);				// 회수지정보 > 보내는사람 비활성화
+		$('input[name=chgerBaseAddr]').attr('readOnly', true);			// 회수지정보 > 기본주소 비활성화
+		$('input[name=chgerDtlAddr]').attr('readOnly', true);			// 회수지정보 > 상세주소 비활성화
+		$('select[name=chgerTelno1]').attr('disabled', true);			// 회수지정보 > 일반전화 비활성화
+		$('input[name=chgerTelno2]').attr('readOnly', true);			// 회수지정보 > 일반전화 비활성화
+		$('input[name=chgerTelno3]').attr('readOnly', true);			// 회수지정보 > 일반전화 비활성화
+		$('select[name=chgerPhnno1]').attr('disabled', true);			// 회수지정보 > 휴대전화 비활성화
+		$('input[name=chgerPhnno2]').attr('readOnly', true);			// 회수지정보 > 휴대전화 비활성화
+		$('input[name=chgerPhnno3]').attr('readOnly', true);			// 회수지정보 > 휴대전화 비활성화
+		$('#chgerRtnMemo').attr('readOnly', true);						// 회수지정보 > 반품메모 비활성화
+	}
+}
+
+// 회수방법 라디오 클릭 이벤트
+var fnChangeWdGb = function(param) {
+	let wdGb = $(param).val();
+	
+	// 회수지정보 히든 처리
+	if (wdGb == 'D') {
+		$('.chger').css('display', 'none');
+	} else {
+		$('.chger').css('display', '');
+	}
+	
+	//환불예정금액 계산
+	fnCalculateRefundAmt();
 }
 }
 
 
 $(document).ready(function() {
 $(document).ready(function() {
@@ -1203,6 +1262,12 @@ $(document).ready(function() {
 	gagaAgGrid.hideStatusBar('gridDelvCdList');
 	gagaAgGrid.hideStatusBar('gridDelvCdList');
 	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
 	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
 	
 	
+	if (wdGb == 'D') {
+		$('input:radio[name="wdGb"]:radio[value="D"]').prop('checked', true);
+	} else {
+		$('input:radio[name="wdGb"]:radio[value="W"]').prop('checked', true);
+	}
+	
 	// 3. 환불정보계산
 	// 3. 환불정보계산
 	fnCalculateRefundAmt(null);
 	fnCalculateRefundAmt(null);
 	
 	
@@ -1226,10 +1291,11 @@ $(document).ready(function() {
 	// 7. 취소사유 선택
 	// 7. 취소사유 선택
 	if (ordChgSq > 0) {
 	if (ordChgSq > 0) {
 		$("select[name='selectChgReason']").val(chgReason);										// 변경사유코드
 		$("select[name='selectChgReason']").val(chgReason);										// 변경사유코드
-		$("select[name='selectChgReason']").attr("disabled", "true");							// 변경사유 비활성화
+		$("select[name='selectChgReason']").attr('disabled', true);								// 변경사유 비활성화
 		$("#chgMemo").text(chgMemo);															// 변경사유메모
 		$("#chgMemo").text(chgMemo);															// 변경사유메모
-		$("#chgMemo").attr("disabled", "true");													// 변경사유메모 비활성화
+		$("#chgMemo").attr('readOnly', true);													// 변경사유메모 비활성화
 		fnChangeChgReason(chgReason);															// 귀책사유
 		fnChangeChgReason(chgReason);															// 귀책사유
+		$('input:radio[name=wdGb]').attr('disabled', true);										// 회수방법 비활성화
 	}
 	}
 	
 	
 	// debug mode 해제
 	// debug mode 해제

+ 5 - 5
src/main/webapp/dx5/dextuploadx5-configuration.js

@@ -8,15 +8,15 @@
 
 
     var gAuthkey = '';
     var gAuthkey = '';
     if (location.host.indexOf("ld") > -1) {
     if (location.host.indexOf("ld") > -1) {
-    	gAuthkey = "wv0tVbqwjB3lq1Z7QxSK/RiA31WcFNDd45asJ8rF3Gnl28E5ZkW+9D+/zcDVVXq8yy1fkRjUK9EG41tLceWrPsCbmCOZqVGdr4/JOj11b2g4/DdhnPp7uaDtdL6lH/OLZmRi4aAhdBXhCRmCIsyAZ9qs6P0dpV3EoGFwTaFQqGA=";
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
     } else if (location.host.indexOf("lp") > -1) {
     } else if (location.host.indexOf("lp") > -1) {
-    	gAuthkey = "wv0tVbqwjB3lq1Z7QxSK/RiA31WcFNDd45asJ8rF3Gnl28E5ZkW+9D+/zcDVVXq8yy1fkRjUK9EG41tLceWrPsCbmCOZqVGdr4/JOj11b2g4/DdhnPp7uaDtdL6lH/OLZmRi4aAhdBXhCRmCIsyAZ9qs6P0dpV3EoGFwTaFQqGA=";
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
     } else if (location.host.indexOf("dev") > -1) {
     } else if (location.host.indexOf("dev") > -1) {
-    	gAuthkey = "wv0tVbqwjB3lq1Z7QxSK/RiA31WcFNDd45asJ8rF3Gnl28E5ZkW+9D+/zcDVVXq8yy1fkRjUK9EG41tLceWrPsCbmCOZqVGdr4/JOj11b2g4/DdhnPp7uaDtdL6lH/OLZmRi4aAhdBXhCRmCIsyAZ9qs6P0dpV3EoGFwTaFQqGA=";
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
     } else if (location.host.indexOf("qas") > -1) {
     } else if (location.host.indexOf("qas") > -1) {
-    	gAuthkey = "wv0tVbqwjB3lq1Z7QxSK/RiA31WcFNDd45asJ8rF3Gnl28E5ZkW+9D+/zcDVVXq8yy1fkRjUK9EG41tLceWrPsCbmCOZqVGdr4/JOj11b2g4/DdhnPp7uaDtdL6lH/OLZmRi4aAhdBXhCRmCIsyAZ9qs6P0dpV3EoGFwTaFQqGA=";
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
     } else {
     } else {
-    	gAuthkey = "wv0tVbqwjB3lq1Z7QxSK/RiA31WcFNDd45asJ8rF3Gnl28E5ZkW+9D+/zcDVVXq8yy1fkRjUK9EG41tLceWrPsCbmCOZqVGdr4/JOj11b2g4/DdhnPp7uaDtdL6lH/OLZmRi4aAhdBXhCRmCIsyAZ9qs6P0dpV3EoGFwTaFQqGA=";
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
     }
     }
 
 
     win.dextuploadx5Configuration = {
     win.dextuploadx5Configuration = {

+ 928 - 924
src/main/webapp/ux/css/admin.ui.css

@@ -1,925 +1,929 @@
-@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700"); @import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700"); html,body {position:relative; height:100%;}
-html, body, header, div, ul, ol, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, label, a, p, form, input, textarea, table, hr, span, em {margin:0; padding:0; box-sizing:border-box;}
-body {overflow-x:hidden; font-family:"open sans", "Roboto", "Malgun Gothic", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size:12px; background-color:#f3f3f4;}
-h1, h2, h3, h4, h5, h6 {display:inline-block;}
-ul, ol {list-style:none;}
-ul::after, ol::after {display:block; clear:both; content:'';}
-img {vertical-align:middle; border-style:none;}
-a {text-decoration:none;}
-em, i {font-style:normal;}
-table {border-collapse:collapse;}
-th {text-align:inherit;}
-label {position:relative; margin-right:20px; display:inline-block; -webkit-touch-callout:none; -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none;}
-label:last-child {margin-right:0 !important;}
-input,button,select,textarea {font-family:inherit; font-size:inherit;}
-input.btn-sm {padding:1px 6px;}
-input[type=text] {width:100%;}
-input[type=text], input[type=file], input[type=date], [type=password], textarea {padding:4px 3px 4px 5px; color:inherit; border-radius:1px; vertical-align:middle; margin:1px 3px 2px 0;}
-input[type=date],input[type=time],input[type=datetime-local],input[type=month] {-webkit-appearance:listbox;}
-input[readonly="readonly"], input[disabled="disabled"], input[readonly="readonly"]:before, input[disabled="disabled"]:before, select[readonly="readonly"], select[disabled="disabled"] {background-color:#eee !important;}
-button, select {text-transform:none;}
-button,[type=button],[type=reset],[type=submit] {margin:0; -webkit-appearance:button; border-radius:0; cursor:pointer; background-color:transparent; border-color:transparent;}
-button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner {padding:0; border-style:none;}
-textarea {overflow:auto; resize:vertical; width:100%; margin:4px 0; vertical-align:middle; line-height:22px; height:32px;}
-.textareaR2 {min-height:60px; line-height:26px;}
-.textareaR3 {min-height:96px; line-height:26px;}
-.textareaR4 {min-height:134px; line-height:26px;}
-.byteChk {line-height:20px; padding-left:20px; display:inline-block; vertical-align:middle;}
-select {margin:0 3px 1px 0; padding:3px 10px 3px 3px; color:inherit; border-radius:1px; vertical-align:middle;}
-select, input[type=text], input[type=file], input[type=date], input[type=password], textarea {border:1px solid #dbdbdb;}
-select:focus, input:focus, textarea:focus, button:focus, .outline {outline:2px auto #4D90FE;}
-.formControl {background:#eee;}
-.off {display:none !important;}
-.scrollOff {overflow:hidden;}
-.f25 {font-size:25px;}
-
-html,body,#wrapper,#container {min-height:100%; height:100%;}
-#wrapper {position:relative; min-width:1240px;}
-
-/* 로그인 --------------- */
-.loginBg {background:#f3f3f4;}
-.loginWrap {width:500px; box-shadow:0 7px 7px -5px rgba(0, 0, 0, 0.1);}
-.loginWrap .loginBox input[type=text],
-.loginWrap .loginBox input[type=password]{padding:10px; width:100%; border:1px solid #ced4da; border-radius:.25rem;}
-.loginWrap .loginBox li:nth-of-type(2), .loginBox li:nth-of-type(3) {padding-bottom:10px;}
-.loginWrap .loginBox li:nth-of-type(4) {padding:10px 0 50px 0; line-height:30px; text-align:left;}
-.loginWrap .loginBox li:nth-of-type(5) {margin-bottom:30px; text-align:center;}
-.loginWrap .loginBox a {display:inline-block; padding:10px;}
-.loginWrap .loginBox .dot {color:#ccc;}
-.loginWrap .btn-black {background-color:#555; color:#fff; font-weight:bold; float:right; margin:0 !important;}
-.loginWrap .btn-black:hover{background-color:#000; box-shadow:none;}
-.loginWrap .btn-purple {background-color:#667eea; color:#fff; font-weight:bold; float:right; margin:0 !important;}
-.loginWrap .btn-purple:hover{background-color:#2e38cb; box-shadow:none;}
-.loginWrap .loginInfo {color:#888; line-height:23px; text-align:left;}
-.loginWrap .loginInfo em i {margin-right:7px;}
-.loginWrap .loginInfo p:first-child{margin-bottom:15px;}
-.loginWrap .loginInfo p span {display:inline-block; margin-bottom:15px; line-height:40px; font-size:16px; font-weight:bold; border-bottom:1px solid #000;}
-
-/* 로그인 style :black */
-.login_black {position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); -ms-transform:translate(-50%, -50%); background:#fff;}
-.login_black .logo { padding:25px 0; text-align:center; background:#000;}
-.login_black .loginInfo em {color:#555; font-weight:bold;}
-.login_black .loginCont > ul {padding:60px 60px 70px;}
-.login_black .loginBox li:nth-of-type(5) {border-top:1px solid #e4e4e4; border-bottom:1px solid #e4e4e4;}
-.login_black .loginBox a {color:#555}
-
-/* 보안 인증 */
-.loginWrap .certiFrm {padding:40px 60px 70px;}
-.loginWrap .certiFrm h2{margin:10px 0 30px;}
-.loginWrap .certiFrm h2 i{margin-right:10px;}
-.loginWrap .certiFrm .alertBox{margin-bottom:15px}
-.loginWrap .certiFrm .input{height:45px; position:relative;}
-.loginWrap .certiFrm .input input[type=text]{position:relative; padding:10px; width:45px; height:45px; line-height:45px; font-size:16px; border:1px solid #ced4da; border-radius:.25rem; text-align:center;}
-.loginWrap .certiFrm .input input[type=text]:focus{color:#4D90FE;font-weight:bold;}
-.loginWrap .certiFrm .input .countdown{display:inline-block; position:relative; padding-left:20px; line-height:45px; height:45px;color:red; text-align:center;vertical-align:top; font-size:14px}
-.loginWrap .certiFrm .info{margin-top:20px; line-height:22px; color:#555;}
-.loginWrap .certiFrm .button{margin:25px 0 50px;}
-.loginWrap .certiFrm .button button{margin:0 5px !important; padding:5px 20px; height:32px; float:right}
-.loginWrap .certiFrm .button button:focus{outline:2px auto #4D90FE !important; }
-.loginWrap .certiFrm .button .btn-black{width:100px !important;}
-
-/* 로그인 :alert */
-.alertBox {position:relative; padding:10px 40px 10px 10px; margin-bottom:10px; border:1px solid; border-radius:.25rem; line-height:22px;}
-.alertBox .alertClose {position:absolute; top:0; right:5px; padding:0 10px; height:40px; text-indent:-9999px; background:url('/image/btn_sltClose.png') no-repeat 50% 50%;}
-.alertBox .alertClose:hover {background:url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
-.alert-success {color:#155724; background-color:#d4edda; border-color:#c3e6cb;}
-.alert-info {color:#0c5460; background-color:#d1ecf1; border-color:#bee5eb;}
-.alert-warning {color:#856404; background-color:#fff3cd; border-color:#ffeeba;}
-.alert-danger {color:#721c24; background-color:#f8d7da; border-color:#f5c6cb;}
-
-/* header--------------- */
-header {position:fixed; top:0; left:0; right:0; z-index:10; min-width:1240px; width:100%; height:60px; line-height:60px; color:#fff; background:linear-gradient(135deg,#667eea 0,#764ba2 100%);}
-header a, header button {color:#fff;}
-.header-logo {float:left; width:260px; line-height:60px; background:rgba(250, 251, 252, 0.1); overflow:hidden;}
-.header-logo a {display:inline-block; margin:0 10px 0 20px; width:184px; height:60px;}
-.header-logo .lnbClose {width:30px; line-height:30px; display:inline-block !important;}
-.header-logo .lnbClose:hover {color:rgba(255, 255, 255, 0.8);}
-.header-menu {position:absolute; left:260px; padding:0 0 0 30px; font-weight:bold;}
-.header-menu .menu {display:inline-block; -ms-user-select:none; -webkit-user-select:none; user-select:none;}
-.header-menu .menu a {display:inline-block; margin-right:7px; padding:0 14px; line-height:34px; border-radius:50px; background:rgba(0, 0, 0, 0.07);}
-.header-menu .menu a:hover {color:rgba(255, 255, 255, 0.8);}
-.header-menu .menu a.on {background:rgba(0, 0, 0, 0.3);}
-.header-info {display:inline-block; float:right; margin-right:20px;}
-.header-info a {color:rgba(255, 255, 255, 0.8);}
-.header-info a:hover {color:#fff;}
-.header-info i.heart {font-size:6px; color:rgba(255, 255, 255, 0.4); margin-right:3px;}
-.header-info i.dot {font-size:13px; color:rgba(255, 255, 255, 0.4); margin:0 3px;}
-.header-info-sm {display:none; float:right; margin-right:20px;}
-.header-info-sm a {display:inline-block; padding:0 7px; color:rgba(255, 255, 255, 0.8);}
-.header-info-sm a:hover {color:#fff;}
-
-/* GNB:툴팁--------------- */
-.tooltip .tooltiptext {visibility:hidden; position:absolute; top:48px; right:20px; z-index:1; padding:0 15px; line-height:30px; color:#fff; font-size:13px; text-align:center; background-color:#233646; border-radius:3px;}
-.tooltip .tooltiptext::after {content:""; position:absolute; bottom:100%; right:38px; border-width:5px; border-style:solid; border-color:transparent transparent #233646 transparent;}
-.tooltip .tooltiptext.logout::after {right:10px;}
-.tooltip:hover .tooltiptext {visibility:visible;}
-
-/* LNB--------------- */
-#lnb-wrapper {position:fixed; top:60px; left:-260px; width:260px; height:100%; vertical-align:top; overflow-y:auto; transition:left .3s; -webkit-transition:left .3s; background-color:#2f4050;}
-#lnb-wrapper:after{content:''; position:absolute; top:0; left:0; z-index:-1; width:100%; height:100%;}
-#lnb-wrapper.on {left:0;}
-#lnb {margin-bottom:100px; width:260px;}
-#lnb a {display:block; color:#a7b1c2;}
-#lnb a:hover {color:#fff;}
-#lnb a.on {color:#fff;}
-#lnb .dep2 {padding:14px 20px 14px 35px; background:url('/image/icon_dep2.png') 10px 50% no-repeat, url('/image/icon_depArr2.png') 222px 50% no-repeat; background-color:#233646; cursor:pointer;}
-#lnb .dep2.on {display:block; background:url('/image/icon_dep2On.png') 10px 50% no-repeat, url('/image/icon_depArr2On.png') 222px 50% no-repeat; background-color:#233646;}
-#lnb .dep3 {padding:5px 0 10px 10px; border-left:4px solid #8597eb; cursor:pointer;}
-#lnb .dep3 a {padding:10px; cursor:pointer;}
-#lnb .dep4 {padding:5px 0 10px 20px; cursor:pointer;}
-#lnb .dep4 a {padding:10px; cursor:pointer;}
-
-/* main--------------- */
-#main-wrapper {position:relative; left:0; top:0; margin-left:0; min-height:100%; padding-bottom:60px; vertical-align:top; color:#222; transition:margin-left .3s; -webkit-transition:margin-left .3s;}
-#main-wrapper.on {margin-left:260px;}
-#main {padding-top:60px; position:relative;}
-#main .main-title {height:60px; margin-left:20px; margin-right:20px;}
-#main .main-title h1 {padding-top:15px; font-size:20px; color:#333; font-weight:700;}
-#main .main-title ol {margin-top:25px; float:right; color:#666;}
-#main .main-title li {float:left;}
-#main .main-title li::before {padding:0 5px; content:"/"; color:#999;}
-#main .main-title li:nth-of-type(1)::before {content:none !important;}
-#main .main-title i {padding-right:3px; color:#999;}
-#main .sub-title {margin:0 20px 10px; font-size:14px; color:#6c7dda; font-weight:bold;}
-#main .sub-title i {margin-right:10px;}
-
-/* 패널영역 스타일--------------- */
-.panelStyle {position:relative; margin:0 20px 30px 20px; padding:15px 15px 0; background-color:#fff; border-top:2px solid #dfe2e3; box-shadow:0 7px 7px -5px rgba(0, 0, 0, 0.04);}
-.panelStyle::after, .frmStyle::after{position:relative; bottom:-5px; content:''; display:block; border:1px solid rgba(255,255,255,0);}
-.panelStyle .panelTitle {margin:-15px -15px 0; padding:0 20px; line-height:40px; border-bottom:1px solid #e7eaec;}
-.panelStyle .panelControl {position:absolute; top:0; right:15px; color:#c4c4c4;}
-.panelStyle .panelControl i {padding:10px 10px; cursor:pointer;}
-.panelStyle .panelContent {margin-top:10px;}
-.panelStyle h2 {margin-right:10px; font-size:14px; font-weight:bold;}
-.panelStyle h3 {margin-right:10px; font-size:12px; font-weight:normal; line-height:25px;}
-.panelStyle h3 i {padding-right:5px}
-.panelStyle h4 {padding-left:23px; height:31px; line-height:31px; background:url('/image/icon_h4.png') no-repeat 3px 50%; color:#666;}
-.panelStyle .panelBar {display:table; width:100%; padding-bottom:10px;}
-.panelStyle .panelBar h4 {margin-bottom:0;}
-.panelStyle .panelBar > li {display:table-cell;}
-.panelStyle .panelBar > .center {text-align:center;}
-.panelStyle .panelBar > .right {text-align:right;}
-
-/* 패널 내부 테이블 여러개 배치 */
-.panelStyle .division + .panelBar {padding-bottom:15px;}
-.panelStyle .division {display:table; width:100%;}
-.panelStyle .division > li, .panelStyle .division > div {display:table-cell; padding-right:40px;}
-.panelStyle .division > li:last-child, .panelStyle .division > div:last-child {padding-right:0;}
-/* table, grid, button 상하 여백 */
-.ag-theme-balham{margin-bottom:15px !important;}
-.frmStyle + .panelBar {padding-bottom:15px;}
-.ag-theme-balham {margin:10px 0 15px;}
-.ag-theme-balham + .panelBar{padding-bottom:15px;}
-.panelBar + .ag-theme-balham {margin:0 0 15px;}
-.panelBar + .frmStyle {margin-top:0;}
-
-/* TABS 영역 --------------- */
-.tabs {position:relative; margin-bottom:30px; margin-left:20px; margin-right:20px;}
-.tabs h2 {position:absolute; top:0; z-index:2; margin-left:10px; font-size:14px; line-height:34px;}
-.tabs h2 i {margin-right:12px;}
-.tabsNav {overflow:hidden; position:relative; top:0; z-index:2; padding:0 30px 0 20px; height:35px;}
-.tabsNav ul {display:inline-block;}
-.tabsNav li {float:left; position:relative;}
-.tabsNav li a {padding:0 20px; line-height:35px; height:35px; display:block; color:#888; font-weight:bold; background-color:#f9f9f9; border:1px solid #dfe2e3; border-bottom:2px solid #dfe2e3; border-top-left-radius:.25rem; border-top-right-radius:.25rem;}
-.tabsNav li.on a {background-color:#fff; color:#222; border:1px solid #ccc; border-bottom:2px solid #fff;}
-.tabsCont {position:relative; top:-2px; z-index:1;}
-.tabsCont::after {display:block}
-.tab {display:none;}
-.tab > .panelStyle{margin:0;}
-.tab.on {display:block;}
-.popupTabs {padding-top:10px;}
-.tabContArea {overflow-x:hidden; overflow-y:auto;}
-.tabBtnArea {padding:15px 0 20px 0;}
-.popup .tabsCont {box-shadow:none;}
-.popup .tabs {margin-bottom:0;}
-
-/* Add TABS 영역 --------------- */
-.btn-add-tab {position:absolute; top:5px; right:0; z-index:2; padding:0 10px;}
-.tabsNav .ui-tabs-active a {background-color:#fff; color:#222; border:1px solid #ccc; border-bottom:2px solid #fff;}
-.tab-del {position:absolute; top:1px; right:1px; padding:4px 6px; color:gray; cursor:pointer; border-top-right-radius:.25rem;}
-.tab-del:hover {color:#f40552;}
-a, button, .ui-state-active, .ui-state-focus, .ui-state-hover {outline:0 !important;}
-.tabsNav .ui-corner-top a {padding:0 35px 0 20px}
-
-/* tabsJr 영역 --------------- */
-.tabsJr {position:relative;}
-.tabsJrNav {overflow:hidden; position:relative; top:0; z-index:2; height:31px; margin:0 30px 0 20px;}
-.tabsJrNav > ul {display:inline-block;}
-.tabsJrNav li {float:left;}
-.tabsJrNav li a {padding:0 20px; line-height:30px; height:30px; display:block; color:#888; /*font-weight:bold; */ background-color:#f9f9f9; border:1px solid #ccc; border-top-left-radius:.25rem; border-top-right-radius:.25rem;}
-.tabsJrNav li.on a {padding-bottom:2px; font-weight:bold; color:#555; background-color:#fff; border-top:1px solid #ccc; border-right:1px solid #ccc; border-bottom:1px solid #fff;}
-.tabsJrCont {position:relative; top:-2px; z-index:1;}
-.tabsJrCont::after {display:block}
-.tabJr {display:none;}
-.tabJr .panelStyle{margin:0; border-top:1px solid #ddd; min-height:20px; padding:20px 15px 0; box-shadow:0 -5px 7px -5px rgba(0, 0, 0, 0.05);}
-.tabJr.on {display:block;}
-.tabJrContArea {vertical-align:middle;}
-
-/* modal, modeless popup --------------- */
-.modalPopup{display:none; position:fixed; left:0; top:0; z-index:11; width:100%; height:100%; background:rgba(0,0,0,0.5);}
-.modalPopup > .panelStyle{position:absolute; top:50%; left:50%; z-index:11; -ms-transform:translate(-50%, -50%); transform:translate(-50%, -50%); margin:0; border:1px solid #79797a; border-radius:3px;}
-.modalPopup > .panelStyle .close {position:absolute; top:0; right:0; font-size:18px; padding:5px 15px 8px;}
-.modalPopup .tabs{ margin:0;}
-.modalPopup .tabs .panelStyle{box-shadow:none}
-.modalPopup .tab > .panelStyle{overflow-y:auto;}
-
-/*MODELESS POPUP --------------- */
-.modelessPopup{display:none; position:absolute; z-index:11; top:50%; left:50%;}
-.modelessPopup.draggable {cursor:move;}
-.modelessPopup .panelStyle{margin:0; border:1px solid #ccc; border-radius:3px;}
-.modelessPopup .panelStyle .close {position:absolute; top:0; right:0; font-size:18px; padding:5px 15px 8px;}
-.modelessPopup .tabs{ margin:0;}
-.modelessPopup .tabs .panelStyle{box-shadow:none}
-.modelessPopup .tab > .panelStyle{overflow-y:auto;}
-
-/*VIDEO POPUP --------------- */
-.videoPopup {display:none; position:fixed; top:50%; left:50%; z-index:11; -ms-transform:translate(-50%, -50%); transform:translate(-50%, -50%); margin:0; border:1px solid #79797a; border-radius:3px;}
-.modalPopup::before{position:fixed; left:0; top:0; z-index:11; width:100%; height:100%; background:rgba(0,0,0,0.5);}
-.videoPopup .close {position:absolute; top:-20px; right:-20px; z-index:1; width:40px; height:40px; line-height:20px; font-size:20px; border:1px solid #666; border-radius:50px; background-color:#fff;}
-.videoPopup iframe{width:100%; height:100%}
-
-
-#btnTop {display:none; position:fixed; right:0; bottom:50px; width:40px; line-height:10px; font-size:10px; background:#fff; border:1px solid #ddd; border-right:none; padding:3px 0 5px 0; box-shadow:5px 5px 5px -4px rgba(0, 0, 0, 0.07); color:#1c84c6;}
-#btnTop i {width:100%; font-size:12px;}
-#btnTop:hover {padding-right:30px; width:70px; font-weight:bold;}
-
-
-/* 컨텐트 스크롤--------------- */
-.xScroll {overflow-x:auto;}
-.yScroll {overflow-y:auto;}
-
-/* 폼테이블 스타일 --------------- */
-.frmStyle {width:100%; margin-bottom:15px;}
-.frmStyle th {border-top:1px solid #dae0fd;}
-.frmStyle tr:last-child th {border-bottom:1px solid #dae0fd;}
-.frmStyle tr:last-child td {border-bottom:1px solid #eee;}
-.frmStyle th {padding:0 15px; height:36px; line-height:24px; white-space:nowrap; text-align:center; background:#e9ecfb;}
-.frmStyle td {padding:0 10px 0 10px; line-height:36px; position:relative; border-top:1px solid #eee; border-right:1px solid #eee;}
-
-/* 체크박스&라디오박스 공통--------------- */
-input[type=radio] {position:absolute; top:50%; left:0; width:18px; height:18px; transform:translate(0,-50%); -ms-transform:translate(0,-50%);}
-label.chkBox, label.rdoBtn {position:relative; display:inline-block; padding-left:26px; height:22px; line-height:22px; vertical-align:middle; cursor:pointer;}
-/* 체크박스 :전체선택 버튼--------------- */
-input[type=checkbox] {position:absolute; top:0; left:0; width:0; height:0;}
-input[type=button].chkBox {margin-left:-2px; padding-left:24px; height:22px; vertical-align:middle; background:url('/image/icon_checkN.png') no-repeat 0 50%;}
-
-/* 체크박스--------------- */
-label.chkBox::before {position:absolute; top:2px; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; background:#fff;}
-label.chkBox.checked::after {position:absolute; top:6px; left:3px; content:''; width:8px; height:4px; border-bottom:3px solid #676a6c; border-left:3px solid #676a6c; -webkit-transform:rotate(-45deg); transform:rotate(-45deg);}
-label.chkBox .formControl::before {background:#eee;}
-
-/* 라디오버튼--------------- */
-input[type=radio]::before {position:absolute; top:0; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; border-radius:50%; background:#fff;}
-input[type=radio]:checked::after {position:absolute; top:5px; left:5px; content:''; width:8px; height:8px; border-radius:50%; background:#676a6c;}
-input[type=radio].formControl::before {background:#eee;}
-
-/* 토글 스위치--------------- */
-.switchBox{ display:inline-block;position:relative; width:60px; height:28px; vertical-align:middle;border-radius:25px;overflow:hidden;}
-.switchBox input[type="checkbox"]{position:absolute;visibility:hidden;}
-.switchBox label{display:block;position:absolute;top:0;width:60px;height:28px;background-color:#aaa;transition-duration:0.2s;}
-.switchBox label span{position:absolute;left:0;top:50%;z-index:1;width:26px;height:23px;border-radius:25px;transform:translate(3px, -50%);transition-duration:0.2s;background-color:#fff;text-indent:-9999px;}
-.switchBox label:before,label:after{position:absolute;top:0;width:52%;font-size:11px;line-height:27px;color:#fff;text-align:center;}
-.switchBox label:before{left:0;content:'ON';}
-.switchBox label:after{right:0;content:'OFF';}
-.switchBox input:checked + label span{transform:translate(31px, -50%);}
-.switchBox input:checked::before, .switchBox input:checked::after{border:none}
-.switch-base input:checked + label{color:#fff; background-color:#8597eb;}
-.switch-primary input:checked + label{color:#fff; background-color:#1ab394;}
-.switch-success input:checked + label{color:#fff; background-color:#1c84c6;}
-.switch-info input:checked + label{color:#fff; background-color:#23c6c8; }
-.switch-warning input:checked + label{color:#fff; background-color:#f8ac59;}
-.switch-danger input:checked + label{color:#fff; background-color:#ed5565;}
-.switch-black input:checked + label{color:#fff; background-color:#222;}
-.switchBox + .switchBox {margin-left:6px;}
-
-/* 테이블 스타일--------------- */
-.tableStyle {width:100%; max-width:100%; margin-bottom:15px;}
-.tableStyle th {position:relative; padding:7px 0; color:#333; border-top:1px solid #dae0fd; border-bottom:1px solid #dae0fd; border-right:1px solid #dae0fd; background-color:#e9ecfb; text-align:center;}
-.tableStyle th:last-child {border-right:none;}
-.tableStyle td {position:relative; padding:7px 0; border-right:1px solid #ebebeb; border-bottom:1px solid #ebebeb; text-align:center;}
-.tableStyle td:last-child {border-right:none;}
-.tableStyle tbody tr:nth-of-type(2n) {background-color:rgba(0, 0, 0, 0.02);}
-.tableStyle tbody tr:hover {background-color:rgba(224,243,255,0.6);}
-.tableStyle + .panelBar {padding-bottom:15px;}
-/* 스캔 */
-.scanTbl th {font-size:25px; line-height:80px;}
-.scanTbl td {line-height:80px;}
-.scanTbl input[type=text] {line-height:50px; font-size:32px;}
-.scanTbl .btn {overflow-y:hidden; margin-bottom:1px; padding:12px 30px; font-size:25px;}
-table.noPad tr > td, td.noPad {padding:0 !important;}
-th[rowspan] {border-bottom:1px solid #dae0fd;}
-td[rowspan] {border-bottom:1px solid #eee;}
-.nowrap {white-space:nowrap;}
-.solidR {border-right:1px solid #eee; vertical-align:middle;}
-.solidL {border-left:1px solid #eee; vertical-align:middle;}
-.solidT {border-top:1px solid #eee;}
-.solidB {border-bottom:1px solid #eee;}
-.dashR {border-right:1px solid #dae0fd;}
-.dashL {border-left:1px solid #dae0fd;}
-.noPad table.frmStyle > tr:first-child th {border-top:0 !important;}
-.noPad table.frmStyle > tr:first-child td {border-top:0 !important;}
-.noPad table.frmStyle > tr:last-child th {border-bottom:0 !important;}
-.noPad table.frmStyle > tr:last-child td {border-bottom:0 !important;}
-
-
-/* Q&A 스타일--------------- */
-.qnaStyle {width:100%; max-width:100%;}
-.qnaStyle th {position:relative; padding:7px 0; color:#333; border-top:1px solid #dae0fd; border-bottom:1px solid #dae0fd; border-right:1px solid #dae0fd; background-color:#e9ecfb; text-align:center;}
-.qnaStyle th:last-child {border-right:none;}
-.qnaStyle td {position:relative; padding:7px 0; text-align:center;}
-.qnaStyle tr td {border-bottom:1px solid #ecf5f7;}
-.qnaStyle tbody tr:nth-of-type(3n+1) td {background-color:rgba(224,243,255,0.6);}
-.qnaStyle tbody tr:nth-of-type(3n) td {border-bottom:1px solid #ddd;}
-.qnaClaim { text-align:left !important; padding-left:10px !important;}
-.qnaClaim .goods {font-weight:bold; line-height:26px;}
-.qnaClaim .cont {line-height:22px; padding:10px 0; color:#1d3e9d;}
-.qnaClaim .email {line-height:26px;}
-.qnaClaim .email em {border-bottom:1px solid #aaa;}
-.lineRound {border:2px solid #ccc; border-radius:15px; padding:4px 14px; font-weight:bold;}
-
-/* 내부 테이블 디자인 */
-.subTable {display:table; width:100%;}
-.subTable dl {display:table; width:100%;}
-.subTable dt, .subTable dd {display:table-cell;}
-.subTable dt {vertical-align:middle; white-space:nowrap; width:8%; padding:0 15px; background:#e9ecfb; text-align:center; border-bottom:1px solid #dae0fd;}
-.subTable dl:last-child dt {border-bottom:none;}
-.subTable dd {border-bottom:1px solid #eee; padding:3px 20px 3px 10px;}
-.subTable dl:last-child dd {border-bottom:none;}
-
-/* button --------------- */
-.btn {border-radius:3px; vertical-align:middle; white-space:nowrap;font-size:12px;user-select:none;}
-.btn-lg {padding:4px 20px 5px; height:28px; overflow-y:hidden;}
-.btn-sm {margin-top:-2px; line-height:100%; height:28px; overflow-y:hidden;}
-.btn-ssm {margin-top:-2px; line-height:100%; height:22px; overflow-y:hidden;}
-.btn + .btn {margin-left:6px;}
-.btn:first-child {margin-left:0;}
-
-/* 버튼 색상 */
-.btn-white {color:#555 !important; background-color:#fff !important; border:1px solid #ccc !important;}
-.btn-default {color:#555; background-color:#eee; border:1px solid #dcdcdc;}
-.btn-gray {color:#fff; background-color:#aaa; border:1px solid #aaa;}
-.btn-base {color:#fff; background-color:#8597eb; border:1px solid #8597eb;}
-.btn-primary {color:#fff; background-color:#1ab394; border:1px solid #1ab394;}
-.btn-success {color:#fff; background-color:#1c84c6; border:1px solid #1c84c6;}
-.btn-info {color:#fff; background-color:#23c6c8; border:1px solid #23c6c8;}
-.btn-pink {color:#fff; background-color:#feada6; border:1px solid #feada6;}
-.btn-warning {color:#fff; background-color:#f8ac59; border:1px solid #f8ac59;}
-.btn-danger {color:#fff; background-color:#ed5565; border:1px solid #ed5565;}
-.btn-dark, .btn.active {color:#fff; background-color:#6c757d; border:1px solid #6c757d;}
-.btn.icn {line-height:28px; height:28px; padding:0 8px; background-color:#eee; border:1px solid #dbdbdb;}
-.btn.icn i {padding-top:6px; width:12px; vertical-align:top; font-size:14px; text-align:center;}
-.btnGroup{display:inline-block;}
-.btnGroup .btn + .btn{margin:0;}
-
-/* 페이징 --------------- */
-.tablePaging {position:relative; 	display:inline-block; vertical-align:middle;}
-.tablePaging a {display:inline-block; float:left; margin:0 5px; width:28px; height:28px; line-height:28px; text-align:center; border:1px solid #ccc; border-radius:50px; cursor:pointer;}
-.tablePaging a.arrow {background-color:rgba(0, 0, 0, 0.03); 	border-color:#ebebeb;}
-.tablePaging .num.on {background:#8597eb; color:#fff; border-color:#8597eb;}
-
-/* 다중 Select Box */
-.mSelectWrap select {display:none;}
-.mSelectBox {display:inline-block; position:relative; top:-1px; margin:2px 0 2px 0; padding:0 7px 0 0; width:100%; height:auto !important; min-height:29px; border:1px solid #e5e6e7; vertical-align:middle;}
-.mSelected {overflow:auto;}
-.mSelected li {float:left; margin:2px 5px 3px; line-height:24px; padding:0 7px; background:#dbedf9; -ms-user-select:none; -moz-user-select:-moz-none; -webkit-user-select:none; user-select:none;}
-.mSelected li.srchFld {margin:0; padding:0; background:none;}
-.mSelected .srchFld input {width:25px; margin:0; padding:0; border:none; outline:none;}
-.mSelected a {border:none !important; float:right; margin-left:3px; padding:0 3px; width:15px; line-height:22px; text-indent:-9999px; background:url('/image/btn_sltClose.png') no-repeat 100% 50%;}
-.mSelected a:hover {background:url('/image/btn_sltCloseOn.png') no-repeat 100% 50%;}
-.mSelecting {display:none; overflow-y:auto; overflow-x:hidden; position:absolute; top:100%; left:-1px; z-index:1; width:100%; max-height:156px; line-height:30px; border:1px solid #e5e6e7; background:#fff;}
-.mSelecting li {margin:0 10px; cursor:pointer;}
-
-/* 멀티 Select Box */
-.mSelWrap {display:inline-block;}
-.mSelWrap select {height:100px; padding:7px 0;}
-.mSelWrap .mSelBtn {margin:0 0 0 5px; float:right; width:33px; vertical-align:top;}
-.mSelWrap .mSelBtn .btn {margin:0; vertical-align:top;}
-.mSelWrap option {padding:4px 100px 4px 10px;}
-
-/* 파일첨부 --------------- */
-.uFile {overflow:hidden; position:relative; display:inline-block; margin:-2px 5px 0 0; width:80%; height:28px; vertical-align:middle; border:1px solid #dbdbdb;}
-.lrStyle .uFile {margin-top:2px;}
-.uFileInput {position:absolute; top:0; width:100%; margin:0 !important; padding:0 !important; line-height:28px; border:none !important;}
-.uFileLabel {position:absolute; top:0; right:0; left:0; z-index:1; margin:0; padding:0 7px; width:cals(100% - 7px); line-height:28px; height:28px; background-color:#fff; border-radius:1px; overflow:hidden; white-space:nowrap;}
-.uFileLabel::after {position:absolute; top:0; right:0; bottom:0; width:30px; z-index:3; line-height:28px; content:" "; border-left:1px solid #dbdbdb; background:#eee url('/image/icon_upload.png') no-repeat 50% 50%;}
-
-/* badge --------------- */
-.badge {float:right; margin-top:2px; padding:0 5px; min-width:9px; line-height:18px; color:#fff; font-size:12px; font-weight:600; border-radius:3px; text-align:center; text-shadow:1px 1px 1px rgba(0,0,0,0.4); letter-spacing:-0.5px;}
-.badge-warning {background-color:#ed7908;}
-.badge-primary {background-color:#1ab394;}
-.badge-danger {background-color:#ed5565;}
-.badge-success {background-color:#2fa4e7;}
-.badge-info {background-color:#23c6c8;}
-.badge.circle {border-radius:50px;}
-.dep3 .badge {position:relative; top:-28px; right:20px;}
-
-/* badge-등급 ------------*/
-.badgeLevel{overflow:hidden;display:inline-block;margin:5px 0 0;padding:0;width:50px;height:50px;line-height:46px;font-size:30px;font-weight:bold;border-radius:100%;text-align:center;vertical-align:top;box-sizing:border-box;}
-.badgeLevel.white{background-color:#fff;border:1px solid #333;color:#333;}
-.badgeLevel.dark1{background-color:#ccc;border:1px solid #ccc;color:#333;}
-.badgeLevel.dark2{background-color:#aaa;border:1px solid #aaa;color:#333;}
-.badgeLevel.dark3{background-color:#777;border:1px solid #777;color:#fff;}
-.badgeLevel.black{background-color:#333;border:1px solid #333;color:#fff;}
-
-/* tag */
-.tagNum {display:inline-block; margin-left:5px; padding:0 3px 0 2px; min-width:13px; line-height:16px; font-weight:normal; color:#fc5555; background:#fff; border-radius:5px;}
-
-/* footer --------------- */
-footer {position:absolute; bottom:0; left:0; width:100%; height:40px; background-color:#fff; border-top:1px solid #e7eaec; line-height:39px; font-size:13px;}
-footer .f-left {float:left; padding-left:20px; line-height:38px;}
-footer .f-right {float:right; padding-right:20px; line-height:38px;}
-
-/* 이미지 카드 */
-.dexterArea {min-width:350px; min-height:180px; padding:0 !important; vertical-align:top; background:#f1f1f1;vertical-align:top;}
-.dexterTable {display:table; width:100%; overflow-y:auto;}
-.dexterTable > li {display:table-cell; vertical-align:top; line-height:23px;}
-.dexterNo div {padding:0 10px; border-top:1px solid #ddd; border-right:1px solid #ddd; background:#fff;}
-.dexterNo div:first-child {margin-top:36px;}
-.dexterNo div:last-child {border-bottom:1px solid #ddd;}
-
-/* 수정용 이미지 카드 */
-.cardArea {width:100%; padding:0 0 20px; overflow-y:auto;}
-.imgCard {vertical-align:top; position:relative; display:inline-block; margin:20px 20px 0 0; padding:10px 10px 0 10px; border:1px solid #dbdbdb;}
-.imgCard ul {display:table;}
-.imgCard li {display:table-cell;}
-.imgCard img {margin-right:15px;}
-.imgCard li:nth-of-type(2) {padding-top:20px; max-width:150px; line-height:24px}
-.imgCard p {font-size:12px;}
-.imgCard .cardClose {position:absolute; top:0; right:0; width:24px; background:url('/image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
-.imgCard .cardClose:hover {background:#f1f1f1 url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
-.verticalTop {vertical-align:top;}
-
-/* 조회용 이미지 카드 */
-.cardArea2 {padding:10px 0;}
-.cardArea2 ul, .cardArea2 .box {vertical-align:top; position:relative; display:inline-block; margin:10px; border:1px solid #dbdbdb; max-width:300px;}
-.cardArea2 li {display:table-cell; line-height:26px; vertical-align:middle;}
-.cardArea2 li:nth-of-type(2) {padding:0 10px;}
-.cardArea2 .cardDel {position:absolute; top:0; right:0; background:url('/image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
-.cardArea2 .cardDel:hover {background:#f1f1f1 url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
-
-/* 테이블 외부 안내문구 */
-.panelStyle > .notice {margin:0 0 15px ;}
-.panelContent > .notice {margin:15px 0;}
-.notice em {color:red;}
-.notice li, p.dot {padding-left:20px; background:url('/image/dot_bk.png') no-repeat 5px 10px; line-height:24px;}
-p.dot .btn {margin-left:10px !important;}
-p.dot em {color:red;}
-
-/* 정렬 */
-.txt {line-height:36px;}
-.aC {text-align:center !important;}
-.aR {text-align:right !important;}
-.aL {text-align:left !important;}
-.vaT {vertical-align:top !important;}
-.vaM {vertical-align:middle !important;}
-.vaB {vertical-align:bottom !important;}
-
-/* 테이블 내부 안내문구 */
-.infoTxt {line-height:26px; padding:5px 0;}
-.infoTxt i {margin-right:7px;}
-.infoTxt em {color:red;}
-.infoTxtTh {display:inline-block; text-align:left; font-weight:normal; font-size:12px;}
-.infoTxtTh li {padding-top:3px;}
-.infoTxtTh i {padding-right:5px;}
-.srchOption {overflow:auto; padding:10px 0; line-height:36px;}
-
-/* 유의사항 안내 */
-.infoBox {margin:0 20px 20px; padding:7px 10px; border-top:2px solid #dfe2e3; border-bottom:2px solid #dfe2e3; background:#fff}
-.infoBox p {padding-left:25px; line-height:20px; font-size:12px; background:url('/image/dot_bk.png') no-repeat 10px 50%; background-size:3px auto;}
-
-/* 검색결과 안내문 */
-.srchNotice {padding-bottom:7px; font-weight:normal; font-size:14px;}
-.srchNotice em {color:red;}
-
-/* 필수입력항목 */
-.required {display:inline-block; position:relative; top:-3px; width:12px; height:7px; background:url('/image/icon_required.png') no-repeat 0 50%;}
-
-
-/* COLOR DESIGN -------------------------------------*/
-/*Color :Base ---*/
-.color-mPurple header,span.color-mPurple {background:linear-gradient(135deg,#667eea 0,#764ba2 100%) !important;}
-.color-purple header,span.color-purple {background:#667eea !important;}
-
-/*Color :Gray ---*/
-.color-mGray header,span.color-mGray {background:linear-gradient(to right,#6c757d 0%,#555 100%) !important;}
-.color-gray header,span.color-gray {background:#666 !important;}
-.color-mGray .frmStyle th,.color-mGray .tableStyle th,.color-gray .frmStyle th,.color-gray .tableStyle th {background:#eee !important; 	border-top:1px solid #ddd; 	border-bottom:1px solid #ddd;}
-.color-mGray .tablePaging .num.on,.color-gray .tablePaging .num.on {background:#888 !important; 	border-color:#888 !important;}
-.color-mGray #lnb .dep3,.color-gray #lnb .dep3 {border-color:#777 !important;}
-.color-mGray .tabsJrNav li.on a,.color-gray .tabsJrNav li.on a {color:#333;}
-
-/*Color :Blue ---*/
-.color-mBlue header,span.color-mBlue {background:linear-gradient(to right,#4481eb 0%,#04befe 100%) !important;}
-.color-blue header,span.color-blue {background:#0042a5 !important;}
-.color-mBlue .frmStyle th,.color-mBlue .tableStyle th,.color-blue .frmStyle th,.color-blue .tableStyle th {background:#d8eafc !important; 	border-top:1px solid #ddd; 	border-bottom:1px solid #ddd;}
-.color-mBlue .tablePaging .num.on,.color-blue .tablePaging .num.on {background:#3e91de !important; 	border-color:#3e91de !important;}
-.color-mBlue #lnb .dep3,.color-blue #lnb .dep3 {border-color:#3e91de !important;}
-.color-mBlue .tabsJrNav li.on a,.color-blue .tabsJrNav li.on a {background:#d8eafc;}
-.color-mBlue .tabJr.on,.color-blue .tabJr.on {border-top:4px solid #d8eafc;}
-.color-mBlue .tabsJrNav li.on a,.color-blue .tabsJrNav li.on a {color:#333;}
-
-/*Color :Green ---*/
-.color-mGreen header,span.color-mGreen {background:linear-gradient(135deg,#00b09b 0,#96c93d 100%) !important;}
-.color-green header,span.color-green {background:#00b09b !important;}
-.color-mGreen .frmStyle th,.color-mGreen .tableStyle th,.color-green .frmStyle th,.color-green .tableStyle th {background:#e5f7f5 !important; 	border-top:1px solid #ddd; 	border-bottom:1px solid #ddd;}
-.color-mGreen .tablePaging .num.on,.color-green .tablePaging .num.on {background:rgba(0,176,155,0.8); 	border-color:rgba(0,176,155,0.8) !important;}
-.color-mGreen #lnb .dep3,.color-green #lnb .dep3 {border-color:#00b09b !important;}
-.color-mGreen .tabsJrNav li.on a,.color-green .tabsJrNav li.on a {background:#e5f7f5;}
-.color-mGreen .tabJr.on,.color-green .tabJr.on {border-top:4px solid #e5f7f5;}
-.color-mGreen .tabsJrNav li.on a,.color-green .tabsJrNav li.on a {color:#333;}
-
-/*Color :Pink ---*/
-.color-mPink header,span.color-mPink {background:linear-gradient(to right, rgb(242, 112, 156), rgb(255, 148, 114)) !important;}
-.color-pink header,span.color-pink {background:#feada6 !important;}
-.color-mPink .frmStyle th,.color-mPink .tableStyle th,.color-pink .frmStyle th,.color-pink .tableStyle th {background:#fff7f6 !important; border-top:1px solid #ddd; border-bottom:1px solid #ddd;}
-.color-mPink .tablePaging .num.on,.color-pink .tablePaging .num.on {background:#feada6; 	border-color:#feada6 !important;}
-.color-mPink #lnb .dep3,.color-pink #lnb .dep3 {border-color:#feada6 !important;}
-.color-mPink .tabsJrNav li.on a,.color-pink .tabsJrNav li.on a {background:#fff7f6;}
-.color-mPink .tabJr.on,.color-pink .tabJr.on {border-top:4px solid #fff7f6;}
-.color-mPink .tabsJrNav li.on a,
-.color-pink .tabsJrNav li.on a {color:#333;}
-
-/*Color :black ---*/
-.color-black header, span.color-black{background:#3E3E3E !important;}
-.color-black .header-logo{background:#000 !important;}
-.color-black .header-menu .menu a{background:#000 !important;}
-.color-black .header-menu .menu a.on{background:#fff !important; color:#000 !important;}
-.color-black #lnb-wrapper{background-color:#b2b2b2 !important;}
-.color-black #lnb .dep2{background-color:#545454 !important;}
-.color-black #lnb .dep3{border-color:#000 !important;}
-.color-black #lnb .dep3{background:#fdfdfd !important;  }
-.color-black #lnb .dep3 a{color:#111111 !important;}
-.color-black #lnb a{color:#fff !important;}
-.color-black .frmStyle th, .color-black .tableStyle th, .color-black .frmStyle th, .color-black .tableStyle th{background:#eee !important; 	border-top:1px solid #ddd; border-bottom:1px solid #ddd;}
-.color-black .tablePaging .num.on, .color-black .tablePaging .num.on{background:#888 !important; 	border-color:#888 !important;}
-.color-black .tabsJrNav li.on a, .color-black .tabsJrNav li.on a{color:#333; background:#eee !important}
-.color-black .tabJr.on, .color-black .tabJr.on { border-top:4px solid #eee;}
-
-/* 폰트 컬러, 폰트 두께 */
-.cBlue {color:#127fdc !important;}
-.cGray {color:#666 !important;}
-.cRed {color:red !important;}
-.bold {font-weight:bold !important;}
-
-/* 배경 투명도 */
-.bgOp6 {opacity:0.6; color:#000 !important;}
-
-/* 여백 지정 */
-hr {border:0; padding-bottom:10px;}/* 기본 여백 :10px */
-.pad10 {padding:10px 0 !important;}
-.pad15 {padding:15px 0 !important;}
-.pad20 {padding:20px 0 !important;}
-.padT3 {padding-top:3px !important;}
-.padT5 {padding-top:5px !important;}
-.padT10 {padding-top:10px !important;}
-.padT15 {padding-top:15px !important;}
-.padT20 {padding-top:20px !important;}
-.padT30 {padding-top:30px !important;}
-.padT40 {padding-top:40px !important;}
-.padR20 {padding-right:20px !important;}
-.padL10 {padding-left:10px !important;}
-.padB5 {padding-bottom:5px !important;}
-.padB10 {padding-bottom:10px !important;}
-.padB15 {padding-bottom:15px !important;}
-.padB20 {padding-bottom:20px !important;}
-.padB30 {padding-bottom:30px !important;}
-.padB40 {padding-bottom:40px !important;}
-.marT5 {margin-top:5px !important;}
-.marT10 {margin-top:10px !important;}
-.marT15 {margin-top:15px !important;}
-.marT20 {margin-top:20px !important;}
-.marR3 {margin-right:3px !important;}
-.marL5 {margin-left:5px !important;}
-.marL10 {margin-left:10px !important;}
-.marL20 {margin-left:20px !important;}
-.marR10 {margin-right:10px !important;}
-.marR20 {margin-right:20px !important;}
-
-/* 넓이 지정 --------------- */
-.w20 {width:20px !important;}
-.w50 {width:50px !important;}
-.w60 {width:60px !important;}
-.w70 {width:70px !important;}
-.w80 {width:80px !important;}
-.w90 {width:80px !important;}
-.w100 {width:100px !important;}
-.w130 {width:130px !important;}
-.w150 {width:150px !important;}
-.w200 {width:200px !important;}
-.w300 {width:300px !important;}
-.w400 {width:400px !important;}
-.w500 {width:500px !important;}
-.w600 {width:600px !important;}
-.w800 {width:800px !important;}
-.w100p {width:100% !important;}
-.w90p {width:90% !important;}
-.w80p {width:80% !important;}
-.w70p {width:70% !important;}
-.w60p {width:60% !important;}
-.w50p {width:50% !important;}
-.w40p {width:40% !important;}
-.w30p {width:30% !important;}
-.w20p {width:20% !important;}
-.h100 {height:100px !important;} /*alert, confirm 컨텐츠 높이에 사용*/
-
-
-/*-- 캘린더 --------------*/
-#calendar {max-width:900px; margin:20px 0 50px 20px;}
-
-/*-- error page --------------*/
-#errPage {padding-top:40px; width:650px; background:#fff; position:relative; top:48%; left:50%; transform:translate(-50%,-50%); -ms-transform:translate(-50%,-50%); border-radius:9px; vertical-align:middle; overflow:hidden; box-shadow:0 0 2px 0 rgba(0,0,0,0.12), 0 2px 2px 0 rgba(0,0,0,0.24);}
-#errPage .errImg {padding-left:50px; display:table-cell; vertical-align:middle; padding-bottom:30px;}
-#errPage .errImg div {border-radius:50%; position:relative; display:inline-block; width:140px; height:140px; color:#fff; background:#d196e4; box-shadow:2px 2px 6px 0 rgba(0,0,0,0.2) inset;}
-#errPage .fa-television {position:absolute; top:30px; left:28px; font-weight:bold; font-size:80px;}
-#errPage .fa-info {position:absolute; top:49px; left:66px; font-size:34px;}
-#errPage .errTxt {padding:0 50px; display:table-cell; padding-bottom:40px;}
-#errPage .errTxt .ttl {font-size:16px; font-weight:bold; padding-bottom:20px;}
-#errPage .errTxt .cont { padding-bottom:20px; line-height:26px;}
-#errPage .errTxt .tel {color:#777;}
-#errPage .errBtn {width:100%; background:#f9f9fa; line-height:70px; text-align:right;}
-#errPage .errBtn .btn {margin-right:30px; border-radius:33px; background:#858b90; color:#fff; padding:5px 30px; line-height:24px; font-weight:bold; -webkit-transition:0.2s; transition:0.2s;}
-#errPage .errBtn .btn:hover {background:#555;}
-
-/*-- DEXTER --------------*/
-.dexterNo { width:43px;}
-.dexterNo div { padding:0 10px; border-top:1px solid #ddd; border-right:1px solid #ddd; background:#fff; text-align:right;}
-.dexterNo div:first-child {margin-top:28px;}
-
-/*-- 회원추가 --------------*/
-.memAddWrap {line-height:26px; padding:3px 0;}
-.memAdd {margin-right:15px; padding:2px 27px 2px 0; position:relative; line-height:24px; height:24px; white-space:nowrap;}
-.memAdd button {position:absolute; top:3px; right:0; bottom:0; width:18px; height:18px; border:1px solid #dbdbdb; border-radius:3px; text-indent:-9999px; background:#eee url('/image/btn_sltClose.png') no-repeat 50% 50%;}
-.memAdd button:hover {background:#eee url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
-
-/*-- Date Picker --------------*/ /* 20200521 수정 */
-table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
-.mtz-monthpicker-month {padding:7px; cursor:pointer;}
-.ui-datepicker-trigger {padding:0;}
-.ui-datepicker {z-index:800 !important; text-align:center; background:#fff;}
-.ui-datepicker .ui-datepicker-today,
-.ui-datepicker .ui-state-highlight {background:#fff7cf !important;}
-.ui-datepicker .ui-state-active {border:1px solid red !important;}
-.ui-datepicker .ui-datepicker-prev {position:absolute; top:3px; left:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('/image/icon_prev.png') no-repeat 50% 50%;}
-.ui-datepicker .ui-datepicker-next {position:absolute; top:3px; right:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('/image/icon_next.png') no-repeat 50% 50%;}
-.ui-datepicker .ui-datepicker-calendar {padding:5px; border:1px solid #ddd; border-top:none; text-align:center;}
-.ui-datepicker .ui-datepicker-calendar th{padding:5px 0}
-.ui-datepicker-week-end {text-align:center;}
-.ui-datepicker-calendar .ui-state-default {display:inline-block; text-align:center; width:32px; line-height:24px; border:none;}
-.ui-datepicker-header {position:relative; background:#d0e9ff; text-align:center; padding:5px; border:1px solid #ddd; border-bottom:none;}
-.ui-datepicker-buttonpane button {background-color:#eee; border:1px solid #dcdcdc; line-height:24px; border-radius:3px; margin:0 5px 5px 5px;}
-.ui-datepicker-current {float:left;}
-.ui-datepicker-close {float:right;}
-
-/* prograss bar */
-.prograssWrap {display:flex; flex-direction:row;}
-.prograssWrap > li {display:flex; align-items:center;}
-.prograssWrap > li:nth-of-type(1) {width:96%}
-.prograssWrap > li:nth-of-type(2) {margin-left:1.5rem !important}
-.prograss-lg {display:flex; width:100%; height:1rem; background-color:#f4f5fd; border-radius:.65rem; overflow:hidden; box-shadow:inset 0 1px 2px rgba(0,0,0,.1);}
-.prograss-sm {display:flex; width:100%; height:.5rem; background-color:#f4f5fd; border-radius:.65rem; overflow:hidden; box-shadow:inset 0 1px 2px rgba(0,0,0,.1);}
-.prograss-bar {display:flex; border-top-right-radius:.65rem; border-bottom-right-radius:.65rem; transition:width .6s ease;
-  background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
-  background-size: 1rem 1rem;
-  -webkit-animation: progress-bar-stripes 1s linear infinite; animation: progress-bar-stripes 1s linear infinite;}
-.prograss-bar.bg-info {background-color:#1c84c6;}
-.prograss-txt.bg-info {color:#1c84c6;}
-.prograss-bar.bg-success {background-color:#1ab394;}
-.prograss-txt.bg-success {color:#1ab394;}
-.prograss-bar.bg-danger {background-color:#f83245;}
-.prograss-txt.bg-danger {color:#f83245;}
-.prograss-bar.bg-base {background-color:#f8ac59;}
-.prograss-txt.bg-base {color:#ffa749;}
-
-/* Multi CheckBox */
-.multiCheckBox {position:relative; display:inline-block; width:auto; line-height:27px; margin:3px 3px 3px 0;}
-.multiCheckBox .sltBtn {padding-left:5px; width:100%; height:27px; color:#555; text-align:left; border:1px solid #dbdbdb; box-sizing:border-box; -webkit-touch-callout:none; -webkit-user-select:none; -ms-user-select:none; user-select:none;}
-.multiCheckBox .sltBtn::after {position:absolute; top:6px; right:10px; content:''; width:7px; height:7px; border-bottom:1px solid #555; border-left:1px solid #555; -webkit-transform:rotate(-45deg); transform:rotate(-45deg);}
-.multiCheckBox .sltBtn.on::after {top:10px; -webkit-transform:rotate(135deg); transform:rotate(135deg);}
-.multiCheckBox ul {display:none; position:absolute; top:26px; left:0; z-index:1; width:100%; height:auto; border:1px solid #dbdbdb; background:#fff;}
-.multiCheckBox li {padding:3px 10px;}
-.multiCheckBox li:hover {background-color:Highlight; color:HighlightText;}
-.multiCheckBox label {display:flex;}
-
-/* checkBox More */
-.checkBoxList {overflow:hidden; padding-right:36px; height:36px;}
-.checkBoxList.on {overflow:visible; height:auto;}
-.checkBoxList .more {position:absolute; top:-1px; right:0; width:36px; height:38px; border:1px solid #eee; background:#f7f7f7;}
-.checkBoxList ul {display:flex; flex-wrap:wrap;}
-.checkBoxList li {justify-content:flex-start; line-height:36px;}
-.checkBoxList[data-unit='1'] li {flex-basis:100%;}
-.checkBoxList[data-unit='2'] li {flex-basis:50%;}
-.checkBoxList[data-unit='3'] li {flex-basis:33%;}
-.checkBoxList[data-unit='4'] li {flex-basis:25%;}
-.checkBoxList[data-unit='5'] li {flex-basis:20%;}
-.checkBoxList[data-unit='6'] li {flex-basis:16.6%;}
-.checkBoxList[data-unit='7'] li {flex-basis:14.2%;}
-.checkBoxList[data-unit='8'] li {flex-basis:12.5%;}
-
-/* 아이콘 툴팁 버튼 */
-.iconTooltip {display:inline-block; position:relative; margin-right:10px;}
-.iconTooltip i {position:relative; color:#46a1ff; width:15px; height:15px; line-height:16px; border-radius:50%; border:1px solid #46a1ff; cursor:pointer; text-align:center;}
-.iconTooltip:hover i {box-shadow:0px 3px 7px 0px rgba(0,0,0,0.4);}
-.iconTooltip span {display:none; position:absolute; top:36px; z-index:5; padding:10px 15px; line-height:24px; color:#fff; background:#6d6d6d; box-shadow:0px 3px 7px 0px rgba(0,0,0,0.2); border-radius:5px;}
-.iconTooltip span:after {position:absolute; top:-4px; content:''; background:#6d6d6d; width:8px; height:8px; -ms-transform:rotate(-45deg); -webkit-transform:rotate(-45deg); transform:rotate(-45deg);}
-.iconTooltip span.left {left:-10px}
-.iconTooltip span.left:after {left:15px;}
-.iconTooltip span.right {right:-10px}
-.iconTooltip span.right:after {right:15px;}
-.iconTooltip span.center {left:50%;}
-.iconTooltip span.center:after {right:5px;}
-.iconTooltip:hover span{display:block;}
-
-/* 상품이동 */
-.itemMove {display:inline-block; width:800px; border:1px solid #eee;}
-.itemMove .item {float:left; display:table; margin:0 10px 20px 0; width:220px; border:1px solid #eee;}
-.itemMove .item li {display:table-cell; vertical-align:top;}
-.itemMove .item li:nth-of-type(1) {width:80px;}
-.itemMove .item li:nth-of-type(1) img {width:80px; height:80px;}
-.itemMove .item button {width:16px; height:16px; text-indent:-9999px;}
-.itemMove .item input {width:30px; height:14px !important; line-height:14px}
-.itemMove .item li:nth-of-type(2) div {line-height:20px}
-
-/* 상품 Dragable :20200129 */
-.sortableWrap #sortable { overflow-y:auto }
-.sortableWrap {margin:20px 0; width:100%; max-height:675px;}
-.sortableWrap .itemWrap {display:inline-block;}
-.sortableWrap .item {float:left; margin-right:12px; margin-bottom:12px; padding:5px 8px; line-height:20px; border:1px solid #ddd; vertical-align:top; background:#fff;}
-.sortableWrap .item > li {float:left; vertical-align:middle;}
-.sortableWrap .item .img {margin-top:3px; margin-right:10px; width:80px;}
-.sortableWrap .item .img img {width:80px; height:80px; cursor:move;}
-.sortableWrap .btnArea {text-align:center; margin-top:15px; padding:0 10px;}
-.sortableWrap button.icnSm {overflow:hidden; position:relative; width:24px; height:20px; background-color:#fff;}
-.sortableWrap button.icnSm i {position:absolute; top:-4px; left:-3px; width:24px; line-height:24px; font-size:15px; color:#888;}
-.sortableWrap button.icnSm:hover i {color:#111;}
-.sortableWrap button.icnSm:last-child {margin-right:0;}
-.sortableWrap .item .cont {width:114px;}
-.sortableWrap .item .cont li em {margin:0 3px 0 7px;}
-.sortableWrap .item .cont .no {font-weight:bold; padding-bottom:3px;}
-.sortableWrap .item .cont .title {padding-bottom:3px; border-bottom:1px solid #eee;}
-.sortableWrap .item .cont .price {padding-top:3px; padding-bottom:3px;}
-.sortableWrap .item .cont input {margin-left:5px; width:37px;}
-
-
-.ag-theme-balham.lh60 .ag-cell {line-height:56px !important; height:60px;}
-.ag-theme-balham.lh70 .ag-cell {line-height:66px !important; height:70px;}
-.ag-theme-balham.lh80 .ag-cell {line-height:76px !important; height:80px;}
-.ag-theme-balham.lh90 .ag-cell {line-height:86px !important; height:90px;}
-.ag-theme-balham.lh100 .ag-cell {line-height:96px !important; height:100px;}
-.ag-theme-balham.lh110 .ag-cell {line-height:106px !important; height:110px;}
-.ag-theme-balham.lh120 .ag-cell {line-height:116px !important; height:120px;}
-
-
-/* 테이블 상품명 클릭시 이미지 레이어 활성화 */
-.viewImg {position:relative; color:blue; cursor:pointer}
-.thumbLayer {display:inline-block; position:absolute; top:0; right:0; z-index:5; border:1px solid #ddd}
-.thumbLayer img {width:100%; height:auto;}
-
-/* dashboard */
-.flexWrap{display:-ms-flexbox; display:flex; -ms-flex-wrap:wrap; flex-wrap:wrap; color:#676a6c;}
-.flexWrap li{padding:0 20px 20px; width:calc(33.3%);}
-.flexWrap.unit4 li{width:calc(25%);}
-.flexWrap.unit5 li{width:calc(20%);}
-.flexWrap.unit6 li{width:calc(16.6%);}
-.flexWrap .title{padding:15px; font-weight:600; border:1px solid #e7eaec; border-top:2px solid #e7eaec;}
-.flexWrap .title h5{font-size:15px; font-weight:bold;}
-.flexWrap .title span{float:right; padding:1px 8px; font-size:10px; border-radius:0.25em;}
-.flexWrap .content{padding:15px; border:1px solid #e7eaec; border-top:none;}
-.flexWrap .content em{font-size:30px; font-weight:200;}
-.statText {margin-top:5px}
-.statText::after{display:block; clear:both; content:''}
-.statText span:nth-of-type(1){float:left; font-size:11px;}
-.statText span:nth-of-type(2){float:right; font-size:13px; font-weight:600;}
-.txt-success{color:#1c84c6;}
-.txt-info{color:#23c6c8;}
-.flexWrap .txt-danger{color:#ed5565;}
-.flexWrap .bg-success{background:#1c84c6;}
-.flexWrap .bg-info{background:#23c6c8;}
-.flexWrap .bg-danger{background:#ed5565;}
-.btn.on{-webkit-box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);}
-.dbChart .btn-group{float:right; line-height:37px;}
-.dbChart .btn-group button{margin:0; height:23px;}
-.dbChart .boxleft{float:left; margin:20px 15px 20px 15px; width:calc(100% - 490px);}
-.dbChart .boxRight{float:left; margin:20px 20px 20px 40px; width:400px;}
-.dbChart .boxRight em{font-size:24px; font-weight:200;}
-.dbChart .boxRight > div{margin-bottom:25px;}
-.dbChart .boxRight .statText .c1 {color:#FF7043}
-.dbChart .boxRight .progress .c1 {background:#FF7043}
-.dbChart .boxRight .statText .c2 {color:#48C9B0}
-.dbChart .boxRight .progress .c2 {background:#48C9B0}
-.dbChart .boxRight .statText .c3 {color:#ca9900}
-.dbChart .boxRight .progress .c3 {background:#FFD54F}
-.progress{display:-ms-flexbox; display:flex; margin-top:5px; height:1rem; overflow:hidden; font-size:.75rem; background-color:#e9ecef; border-radius:.25rem;}
-.progress-mini{height:5px; margin-bottom:0;}
-.progress > div{height:5px; margin-bottom:0; transition:width 0.3s;}
-
-
-/* 카테고리 Sort */
-.categoryOrder {margin-bottom:15px; background:#fcfcfc;}
-.categoryOrder li {clear:both; padding-left:15px; line-height:40px; cursor:move; border-top:1px dashed #ff0000; }
-.categoryOrder li button.on {background-image:url(/image/icon_cate_minus.png);}
-/* .categoryOrder li:after {content:''; position:absolute; top:8px; left:-10px; width:21px; height:21px; background:url(/image/line_cate.png)} */
-.categoryOrder li:before{position:relative; content:''; width:1px; height:100%; background:#ddd;}
-.categoryOrder li ol{display:none}
-/* .categoryOrder ol:last-child li {background-image:none !important} */
-.categoryOrder button{position:relative; z-index:200; padding:0 15px 0; margin:0; line-height:40px; cursor:pointer; background-image:url(/image/icon_cate_plus.png); background-repeat:no-repeat; background-position:0 0;}
-
-/* 메인 공지팝업 */
-.noticeWrap{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:800px;background-color:#fff;}
-.noticeWrap .swiper-container{overflow:hidden;position:relative;top:0;}
-.noticeWrap .swiper-wrapper{display:flex;width:100%;transition-property:transform;box-sizing:content-box;}
-.noticeWrap .swiper-slide{overflow-y:auto;max-height:500px;padding:20px 20px 40px;flex-shrink:0;position:relative;width:100%;height:100%;transition-property:transform;}
-.noticeWrap .swiper-slide img{max-width:100%;height:auto;}
-.noticeWrap .swipeControl{display:inline-block;position:absolute;top:-35px;right:0;/* transform:translate(-50%,0); */z-index:1;width:100px;}
-.noticeWrap .swipeControl button{text-indent:-9999px;}
-.noticeWrap .swipeControl button[aria-label]{position:absolute;width:30px;height:30px;}
-.noticeWrap .swipeControl button[aria-label]::after{top:6px;width:12px;height:12px;}
-.noticeWrap .swipeControl button[aria-label].arr{top:0;}
-.noticeWrap .swipeControl button[aria-label].arr.prev{left:0;}
-.noticeWrap .swipeControl button[aria-label].arr.next{right:0}
-.noticeWrap .swipeControl button[aria-label].arr::after{position:absolute;display:block;content:'';border-bottom:1px solid #fff;border-left:1px solid #fff}
-.noticeWrap .swipeControl button[aria-label].arr.prev::after{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}
-.noticeWrap .swipeControl button[aria-label].arr.next::after{-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}
-.noticeWrap .swipeControl .prev:after{left:8px;}
-.noticeWrap .swipeControl .next:after{right:8px;}
-.noticeWrap .swipeControl .swiper-button-disabled:after{border-color:#ddd;}
-.noticeWrap .swipeControl .swiper-pagination{line-height:28px;width:100%;text-align:center;}
-.noticeWrap .swipeControl .swiper-pagination-bullet{display:inline-block;margin:0 5px;width:10px;height:10px;background:#ddd;border-radius:50%;cursor:pointer;}
-.noticeWrap .swipeControl .swiper-pagination-fraction span{font-size:14px;}
-.noticeWrap .swipeControl .swiper-pagination-fraction i{color:#ccc;}
-.noticeWrap .swipeControl .swiper-pagination-current{color:#fff;font-weight:bold;}
-.noticeWrap .swipeControl .swiper-pagination-total{color:#ccc}
-.noticeWrap .btnArea{display:flex;background-color:#f0f0f0;}
-.noticeWrap .btnArea > span{flex:1;position:relative;}
-.noticeWrap .btnArea > span::after{content:'';position:absolute;top:50%;right:0;transform:translate(0, -50%);width:1px;height:15px;background-color:#ccc;}
-.noticeWrap .btnArea > span:last-child::after{background-color:unset;}
-.noticeWrap .btnArea button{width:100%;height:50px;color:#000}
-.noticeWrap .title{line-height:34px;padding:0 0 10px 0;font-size:18px;font-weight:bold;border-bottom:1px solid #ececec;}
-.noticeWrap .content{padding:20px 0 20px;line-height:26px;font-size:13px;}
-.noticeWrap .download li{line-height:26px;}
-.noticeWrap .download i{margin-right:15px;}
-.noticeWrap .download a{border-bottom:1px solid #337ab7;color:#337ab7;}
-.noticeWrap .download a:visited{border-bottom:1px solid #999;color:#333;}
-
-
-/* 반응형:GNB 유저명,등급,로그아웃 --------------- */
-@media ( max-width:1370px ) {
- .header-info { display:none;}
- .header-info-sm { display:inline-block;}
-}
-
-/* 반응형 :dashboard(20200522) --------------- */
-@media ( max-width:1023px ) {
- /* 대시보드 */
- #wrapper.dashboard{width:100%; min-width:100%;}
- .dashboard .header-logo{width:100%}
- .dashboard #lnb-wrapper{display:none;}
- .dashboard .header-menu{display:none;}
- .dashboard .tabs{margin-left:0; margin-right:0;}
- .dashboard .tabs h2{position:relative; margin:10px 15px}
- .dashboard .tabsNav li:first-child{margin-left:0}
- .dashboard .tabsNav li:last-child{margin-right:0}
- .dashboard .tabsNav li a{font-size:16px}
- .dashboard .flexWrap li{width:100%}
- .dashboard .flexWrap.unit4 li{width:100%}
- .dashboard .flexWrap.unit5 li{width:100%}
- .dashboard .flexWrap.unit6 li{width:100%}
- .dashboard .boxStyle{margin-left:0; margin-right:0;}
- .dashboard .dbChart .boxleft{clear:left; margin:30px 15px 0 0; width:100%;}
- .dashboard .dbChart .boxRight{clear:right; width:100%; margin:30px 20px 20px;}
-}
-
-/* Fix Input Zoom on devices older than iPhone 5:*/
-@media screen and (device-aspect-ratio:2/3) {
-  select, textarea, input[type="text"], input[type="password"],
-  input[type="datetime"], input[type="datetime-local"],
-  input[type="date"], input[type="month"], input[type="time"],
-  input[type="week"], input[type="number"], input[type="email"],
-  input[type="url"]{ font-size:16px;}
-}
-
-/* Fix Input Zoom on iPhone 5, 5C, 5S, iPod Touch 5g */
-@media screen and (device-aspect-ratio:40/71) {
-  select, textarea, input[type="text"], input[type="password"],
-  input[type="datetime"], input[type="datetime-local"],
-  input[type="date"], input[type="month"], input[type="time"],
-  input[type="week"], input[type="number"], input[type="email"],
-  input[type="url"]{ font-size:16px;}
-}
-
-/* Fix Input Zoom on iPhone 6, iPhone 6s, iPhone 7 */
-@media screen and (device-aspect-ratio:375/667) {
-  select, textarea, input[type="text"], input[type="password"],
-  input[type="datetime"], input[type="datetime-local"],
-  input[type="date"], input[type="month"], input[type="time"],
-  input[type="week"], input[type="number"], input[type="email"],
-  input[type="url"]{ font-size:16px;}
-}
-
-/* Fix Input Zoom on iPhone 6 Plus, iPhone 6s Plus, iPhone 7 Plus, iPhone 8, iPhone X, XS, XS Max */
-@media screen and (device-aspect-ratio:9/16) {
-  select, textarea, input[type="text"], input[type="password"],
-  input[type="datetime"], input[type="datetime-local"],
-  input[type="date"], input[type="month"], input[type="time"],
-  input[type="week"], input[type="number"], input[type="email"],
-  input[type="url"]{ font-size:16px;}
+@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700"); @import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700"); html,body {position:relative; height:100%;}
+html, body, header, div, ul, ol, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, label, a, p, form, input, textarea, table, hr, span, em {margin:0; padding:0; box-sizing:border-box;}
+body {overflow-x:hidden; font-family:"open sans", "Roboto", "Malgun Gothic", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size:12px; background-color:#f3f3f4;}
+h1, h2, h3, h4, h5, h6 {display:inline-block;}
+ul, ol {list-style:none;}
+ul::after, ol::after {display:block; clear:both; content:'';}
+img {vertical-align:middle; border-style:none;}
+a {text-decoration:none;}
+em, i {font-style:normal;}
+table {border-collapse:collapse;}
+th {text-align:inherit;}
+label {position:relative; margin-right:20px; display:inline-block; -webkit-touch-callout:none; -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none;}
+label:last-child {margin-right:0 !important;}
+input,button,select,textarea {font-family:inherit; font-size:inherit;}
+input.btn-sm {padding:1px 6px;}
+input[type=text] {width:100%;}
+input[type=text], input[type=file], input[type=date], [type=password], textarea {padding:4px 3px 4px 5px; color:inherit; border-radius:1px; vertical-align:middle; margin:1px 3px 2px 0;}
+input[type=date],input[type=time],input[type=datetime-local],input[type=month] {-webkit-appearance:listbox;}
+input[readonly="readonly"], input[disabled="disabled"], input[readonly="readonly"]:before, input[disabled="disabled"]:before, select[readonly="readonly"], select[disabled="disabled"],textarea[readonly="readonly"] ,textarea[disabled="disabled"] {background-color:#eee !important;}
+button, select {text-transform:none;}
+button,[type=button],[type=reset],[type=submit] {margin:0; -webkit-appearance:button; border-radius:0; cursor:pointer; background-color:transparent; border-color:transparent;}
+button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner {padding:0; border-style:none;}
+textarea {overflow:auto; resize:vertical; width:100%; margin:4px 0; vertical-align:middle; line-height:22px; height:32px;}
+.textareaR2 {min-height:60px; line-height:26px;}
+.textareaR3 {min-height:96px; line-height:26px;}
+.textareaR4 {min-height:134px; line-height:26px;}
+.byteChk {line-height:20px; padding-left:20px; display:inline-block; vertical-align:middle;}
+select {margin:0 3px 1px 0; padding:3px 10px 3px 3px; color:inherit; border-radius:1px; vertical-align:middle;}
+select, input[type=text], input[type=file], input[type=date], input[type=password], textarea {border:1px solid #dbdbdb;}
+select:focus, input:focus, textarea:focus, button:focus, .outline {outline:2px auto #4D90FE;}
+.formControl {background:#eee;}
+.off {display:none !important;}
+.scrollOff {overflow:hidden;}
+.f25 {font-size:25px;}
+
+html,body,#wrapper,#container {min-height:100%; height:100%;}
+#wrapper {position:relative; min-width:1240px;}
+
+/* 로그인 --------------- */
+.loginBg {background:#f3f3f4;}
+.loginWrap {width:500px; box-shadow:0 7px 7px -5px rgba(0, 0, 0, 0.1);}
+.loginWrap .loginBox input[type=text],
+.loginWrap .loginBox input[type=password]{padding:10px; width:100%; border:1px solid #ced4da; border-radius:.25rem;}
+.loginWrap .loginBox li:nth-of-type(2), .loginBox li:nth-of-type(3) {padding-bottom:10px;}
+.loginWrap .loginBox li:nth-of-type(4) {padding:10px 0 50px 0; line-height:30px; text-align:left;}
+.loginWrap .loginBox li:nth-of-type(5) {margin-bottom:30px; text-align:center;}
+.loginWrap .loginBox a {display:inline-block; padding:10px;}
+.loginWrap .loginBox .dot {color:#ccc;}
+.loginWrap .btn-black {background-color:#555; color:#fff; font-weight:bold; float:right; margin:0 !important;}
+.loginWrap .btn-black:hover{background-color:#000; box-shadow:none;}
+.loginWrap .btn-purple {background-color:#667eea; color:#fff; font-weight:bold; float:right; margin:0 !important;}
+.loginWrap .btn-purple:hover{background-color:#2e38cb; box-shadow:none;}
+.loginWrap .loginInfo {color:#888; line-height:23px; text-align:left;}
+.loginWrap .loginInfo em i {margin-right:7px;}
+.loginWrap .loginInfo p:first-child{margin-bottom:15px;}
+.loginWrap .loginInfo p span {display:inline-block; margin-bottom:15px; line-height:40px; font-size:16px; font-weight:bold; border-bottom:1px solid #000;}
+
+/* 로그인 style :black */
+.login_black {position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); -ms-transform:translate(-50%, -50%); background:#fff;}
+.login_black .logo { padding:25px 0; text-align:center; background:#000;}
+.login_black .loginInfo em {color:#555; font-weight:bold;}
+.login_black .loginCont > ul {padding:60px 60px 70px;}
+.login_black .loginBox li:nth-of-type(5) {border-top:1px solid #e4e4e4; border-bottom:1px solid #e4e4e4;}
+.login_black .loginBox a {color:#555}
+
+/* 보안 인증 */
+.loginWrap .certiFrm {padding:40px 60px 70px;}
+.loginWrap .certiFrm h2{margin:10px 0 30px;}
+.loginWrap .certiFrm h2 i{margin-right:10px;}
+.loginWrap .certiFrm .alertBox{margin-bottom:15px}
+.loginWrap .certiFrm .input{height:45px; position:relative;}
+.loginWrap .certiFrm .input input[type=text]{position:relative; padding:10px; width:45px; height:45px; line-height:45px; font-size:16px; border:1px solid #ced4da; border-radius:.25rem; text-align:center;}
+.loginWrap .certiFrm .input input[type=text]:focus{color:#4D90FE;font-weight:bold;}
+.loginWrap .certiFrm .input .countdown{display:inline-block; position:relative; padding-left:20px; line-height:45px; height:45px;color:red; text-align:center;vertical-align:top; font-size:14px}
+.loginWrap .certiFrm .info{margin-top:20px; line-height:22px; color:#555;}
+.loginWrap .certiFrm .button{margin:25px 0 50px;}
+.loginWrap .certiFrm .button button{margin:0 5px !important; padding:5px 20px; height:32px; float:right}
+.loginWrap .certiFrm .button button:focus{outline:2px auto #4D90FE !important; }
+.loginWrap .certiFrm .button .btn-black{width:100px !important;}
+
+/* 로그인 :alert */
+.alertBox {position:relative; padding:10px 40px 10px 10px; margin-bottom:10px; border:1px solid; border-radius:.25rem; line-height:22px;}
+.alertBox .alertClose {position:absolute; top:0; right:5px; padding:0 10px; height:40px; text-indent:-9999px; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%;}
+.alertBox .alertClose:hover {background:url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.alert-success {color:#155724; background-color:#d4edda; border-color:#c3e6cb;}
+.alert-info {color:#0c5460; background-color:#d1ecf1; border-color:#bee5eb;}
+.alert-warning {color:#856404; background-color:#fff3cd; border-color:#ffeeba;}
+.alert-danger {color:#721c24; background-color:#f8d7da; border-color:#f5c6cb;}
+
+/* header--------------- */
+header {position:fixed; top:0; left:0; right:0; z-index:10; min-width:1240px; width:100%; height:60px; line-height:60px; color:#fff; background:linear-gradient(135deg,#667eea 0,#764ba2 100%);}
+header a, header button {color:#fff;}
+.header-logo {float:left; width:260px; line-height:60px; background:rgba(250, 251, 252, 0.1); overflow:hidden;}
+.header-logo a {display:inline-block; margin:0 10px 0 20px; width:184px; height:60px;}
+.header-logo .lnbClose {width:30px; line-height:30px; display:inline-block !important;}
+.header-logo .lnbClose:hover {color:rgba(255, 255, 255, 0.8);}
+.header-menu {position:absolute; left:260px; padding:0 0 0 30px; font-weight:bold;}
+.header-menu .menu {display:inline-block; -ms-user-select:none; -webkit-user-select:none; user-select:none;}
+.header-menu .menu a {display:inline-block; margin-right:7px; padding:0 14px; line-height:34px; border-radius:50px; background:rgba(0, 0, 0, 0.07);}
+.header-menu .menu a:hover {color:rgba(255, 255, 255, 0.8);}
+.header-menu .menu a.on {background:rgba(0, 0, 0, 0.3);}
+.header-info {display:inline-block; float:right; margin-right:20px;}
+.header-info a {color:rgba(255, 255, 255, 0.8);}
+.header-info a:hover {color:#fff;}
+.header-info i.heart {font-size:6px; color:rgba(255, 255, 255, 0.4); margin-right:3px;}
+.header-info i.dot {font-size:13px; color:rgba(255, 255, 255, 0.4); margin:0 3px;}
+.header-info-sm {display:none; float:right; margin-right:20px;}
+.header-info-sm a {display:inline-block; padding:0 7px; color:rgba(255, 255, 255, 0.8);}
+.header-info-sm a:hover {color:#fff;}
+
+/* GNB:툴팁--------------- */
+.tooltip .tooltiptext {visibility:hidden; position:absolute; top:48px; right:20px; z-index:1; padding:0 15px; line-height:30px; color:#fff; font-size:13px; text-align:center; background-color:#233646; border-radius:3px;}
+.tooltip .tooltiptext::after {content:""; position:absolute; bottom:100%; right:38px; border-width:5px; border-style:solid; border-color:transparent transparent #233646 transparent;}
+.tooltip .tooltiptext.logout::after {right:10px;}
+.tooltip:hover .tooltiptext {visibility:visible;}
+
+/* LNB--------------- */
+#lnb-wrapper {position:fixed; top:60px; left:-260px; width:260px; height:100%; vertical-align:top; overflow-y:auto; transition:left .3s; -webkit-transition:left .3s; background-color:#2f4050;}
+#lnb-wrapper:after{content:''; position:absolute; top:0; left:0; z-index:-1; width:100%; height:100%;}
+#lnb-wrapper.on {left:0;}
+#lnb {margin-bottom:100px; width:260px;}
+#lnb a {display:block; color:#a7b1c2;}
+#lnb a:hover {color:#fff;}
+#lnb a.on {color:#fff;}
+#lnb .dep2 {padding:14px 20px 14px 35px; background:url('../../image/icon_dep2.png') 10px 50% no-repeat, url('../../image/icon_depArr2.png') 222px 50% no-repeat; background-color:#233646; cursor:pointer;}
+#lnb .dep2.on {display:block; background:url('../../image/icon_dep2On.png') 10px 50% no-repeat, url('../../image/icon_depArr2On.png') 222px 50% no-repeat; background-color:#233646;}
+#lnb .dep3 {padding:5px 0 10px 10px; border-left:4px solid #8597eb; cursor:pointer;}
+#lnb .dep3 a {padding:10px; cursor:pointer;}
+#lnb .dep4 {padding:5px 0 10px 20px; cursor:pointer;}
+#lnb .dep4 a {padding:10px; cursor:pointer;}
+
+/* main--------------- */
+#main-wrapper {position:relative; left:0; top:0; margin-left:0; min-height:100%; padding-bottom:60px; vertical-align:top; color:#222; transition:margin-left .3s; -webkit-transition:margin-left .3s;}
+#main-wrapper.on {margin-left:260px;}
+#main {padding-top:60px; position:relative;}
+#main .main-title {height:60px; margin-left:20px; margin-right:20px;}
+#main .main-title h1 {padding-top:15px; font-size:20px; color:#333; font-weight:700;}
+#main .main-title ol {margin-top:25px; float:right; color:#666;}
+#main .main-title li {float:left;}
+#main .main-title li::before {padding:0 5px; content:"/"; color:#999;}
+#main .main-title li:nth-of-type(1)::before {content:none !important;}
+#main .main-title i {padding-right:3px; color:#999;}
+#main .sub-title {margin:0 20px 10px; font-size:14px; color:#6c7dda; font-weight:bold;}
+#main .sub-title i {margin-right:10px;}
+
+/* 패널영역 스타일--------------- */
+.panelStyle {position:relative; margin:0 20px 30px 20px; padding:15px 15px 0; background-color:#fff; border-top:2px solid #dfe2e3; box-shadow:0 7px 7px -5px rgba(0, 0, 0, 0.04);}
+.panelStyle::after, .frmStyle::after{position:relative; bottom:-5px; content:''; display:block; border:1px solid rgba(255,255,255,0);}
+.panelStyle .panelTitle {margin:-15px -15px 0; padding:0 20px; line-height:40px; border-bottom:1px solid #e7eaec;}
+.panelStyle .panelControl {position:absolute; top:0; right:15px; color:#c4c4c4;}
+.panelStyle .panelControl i {padding:10px 10px; cursor:pointer;}
+.panelStyle .panelContent {margin-top:10px;}
+.panelStyle h2 {margin-right:10px; font-size:14px; font-weight:bold;}
+.panelStyle h3 {margin-right:10px; font-size:12px; font-weight:normal; line-height:25px;}
+.panelStyle h3 i {padding-right:5px}
+.panelStyle h4 {padding-left:23px; height:31px; line-height:31px; background:url('../../image/icon_h4.png') no-repeat 3px 50%; color:#666;}
+.panelStyle .panelBar {display:table; width:100%; padding-bottom:10px;}
+.panelStyle .panelBar h4 {margin-bottom:0;}
+.panelStyle .panelBar > li {display:table-cell;}
+.panelStyle .panelBar > .center {text-align:center;}
+.panelStyle .panelBar > .right {text-align:right;}
+
+/* 패널 내부 테이블 여러개 배치 */
+.panelStyle .division + .panelBar {padding-bottom:15px;}
+.panelStyle .division {display:table; width:100%;}
+.panelStyle .division > li, .panelStyle .division > div {display:table-cell; padding-right:40px;}
+.panelStyle .division > li:last-child, .panelStyle .division > div:last-child {padding-right:0;}
+/* table, grid, button 상하 여백 */
+.ag-theme-balham{margin-bottom:15px !important;}
+.frmStyle + .panelBar {padding-bottom:15px;}
+.ag-theme-balham {margin:10px 0 15px;}
+.ag-theme-balham + .panelBar{padding-bottom:15px;}
+.panelBar + .ag-theme-balham {margin:0 0 15px;}
+.panelBar + .frmStyle {margin-top:0;}
+
+/* TABS 영역 --------------- */
+.tabs {position:relative; margin-bottom:30px; margin-left:20px; margin-right:20px;}
+.tabs h2 {position:absolute; top:0; z-index:2; margin-left:10px; font-size:14px; line-height:34px;}
+.tabs h2 i {margin-right:12px;}
+.tabsNav {overflow:hidden; position:relative; top:0; z-index:2; padding:0 30px 0 20px; height:35px;}
+.tabsNav ul {display:inline-block;}
+.tabsNav li {float:left; position:relative;}
+.tabsNav li a {padding:0 20px; line-height:35px; height:35px; display:block; color:#888; font-weight:bold; background-color:#f9f9f9; border:1px solid #dfe2e3; border-bottom:2px solid #dfe2e3; border-top-left-radius:.25rem; border-top-right-radius:.25rem;}
+.tabsNav li.on a {background-color:#fff; color:#222; border:1px solid #ccc; border-bottom:2px solid #fff;}
+.tabsCont {position:relative; top:-2px; z-index:1;}
+.tabsCont::after {display:block}
+.tab {display:none;}
+.tab > .panelStyle{margin:0;}
+.tab.on {display:block;}
+.popupTabs {padding-top:10px;}
+.tabContArea {overflow-x:hidden; overflow-y:auto;}
+.tabBtnArea {padding:15px 0 20px 0;}
+.popup .tabsCont {box-shadow:none;}
+.popup .tabs {margin-bottom:0;}
+
+/* Add TABS 영역 --------------- */
+.btn-add-tab {position:absolute; top:5px; right:0; z-index:2; padding:0 10px;}
+.tabsNav .ui-tabs-active a {background-color:#fff; color:#222; border:1px solid #ccc; border-bottom:2px solid #fff;}
+.tab-del {position:absolute; top:1px; right:1px; padding:4px 6px; color:gray; cursor:pointer; border-top-right-radius:.25rem;}
+.tab-del:hover {color:#f40552;}
+a, button, .ui-state-active, .ui-state-focus, .ui-state-hover {outline:0 !important;}
+.tabsNav .ui-corner-top a {padding:0 35px 0 20px}
+
+/* tabsJr 영역 --------------- */
+.tabsJr {position:relative;}
+.tabsJrNav {overflow:hidden; position:relative; top:0; z-index:2; height:31px; margin:0 30px 0 20px;}
+.tabsJrNav > ul {display:inline-block;}
+.tabsJrNav li {float:left;}
+.tabsJrNav li a {padding:0 20px; line-height:30px; height:30px; display:block; color:#888; /*font-weight:bold; */ background-color:#f9f9f9; border:1px solid #ccc; border-top-left-radius:.25rem; border-top-right-radius:.25rem;}
+.tabsJrNav li.on a {padding-bottom:2px; font-weight:bold; color:#555; background-color:#fff; border-top:1px solid #ccc; border-right:1px solid #ccc; border-bottom:1px solid #fff;}
+.tabsJrCont {position:relative; top:-2px; z-index:1;}
+.tabsJrCont::after {display:block}
+.tabJr {display:none;}
+.tabJr .panelStyle{margin:0; border-top:1px solid #ddd; min-height:20px; padding:20px 15px 0; box-shadow:0 -5px 7px -5px rgba(0, 0, 0, 0.05);}
+.tabJr.on {display:block;}
+.tabJrContArea {vertical-align:middle;}
+
+/* modal, modeless popup --------------- */
+.modalPopup{display:none; position:fixed; left:0; top:0; z-index:11; width:100%; height:100%; background:rgba(0,0,0,0.5);}
+.modalPopup > .panelStyle{position:absolute; top:50%; left:50%; z-index:11; -ms-transform:translate(-50%, -50%); transform:translate(-50%, -50%); margin:0; border:1px solid #79797a; border-radius:3px;}
+.modalPopup > .panelStyle .close {position:absolute; top:0; right:0; font-size:18px; padding:5px 15px 8px;}
+.modalPopup .tabs{ margin:0;}
+.modalPopup .tabs .panelStyle{box-shadow:none}
+.modalPopup .tab > .panelStyle{overflow-y:auto;}
+
+/*MODELESS POPUP --------------- */
+.modelessPopup{display:none; position:absolute; z-index:11; top:50%; left:50%;}
+.modelessPopup.draggable {cursor:move;}
+.modelessPopup .panelStyle{margin:0; border:1px solid #ccc; border-radius:3px;}
+.modelessPopup .panelStyle .close {position:absolute; top:0; right:0; font-size:18px; padding:5px 15px 8px;}
+.modelessPopup .tabs{ margin:0;}
+.modelessPopup .tabs .panelStyle{box-shadow:none}
+.modelessPopup .tab > .panelStyle{overflow-y:auto;}
+
+/*VIDEO POPUP --------------- */
+.videoPopup {display:none; position:fixed; top:50%; left:50%; z-index:11; -ms-transform:translate(-50%, -50%); transform:translate(-50%, -50%); margin:0; border:1px solid #79797a; border-radius:3px;}
+.modalPopup::before{position:fixed; left:0; top:0; z-index:11; width:100%; height:100%; background:rgba(0,0,0,0.5);}
+.videoPopup .close {position:absolute; top:-20px; right:-20px; z-index:1; width:40px; height:40px; line-height:20px; font-size:20px; border:1px solid #666; border-radius:50px; background-color:#fff;}
+.videoPopup iframe{width:100%; height:100%}
+
+
+#btnTop {display:none; position:fixed; right:0; bottom:50px; width:40px; line-height:10px; font-size:10px; background:#fff; border:1px solid #ddd; border-right:none; padding:3px 0 5px 0; box-shadow:5px 5px 5px -4px rgba(0, 0, 0, 0.07); color:#1c84c6;}
+#btnTop i {width:100%; font-size:12px;}
+#btnTop:hover {padding-right:30px; width:70px; font-weight:bold;}
+
+
+/* 컨텐트 스크롤--------------- */
+.xScroll {overflow-x:auto;}
+.yScroll {overflow-y:auto;}
+
+/* 폼테이블 스타일 --------------- */
+.frmStyle {width:100%; margin-bottom:15px;}
+.frmStyle th {border-top:1px solid #dae0fd;}
+.frmStyle tr:last-child th {border-bottom:1px solid #dae0fd;}
+.frmStyle tr:last-child td {border-bottom:1px solid #eee;}
+.frmStyle th {padding:0 15px; height:36px; line-height:24px; white-space:nowrap; text-align:center; background:#e9ecfb;}
+.frmStyle td {padding:0 10px 0 10px; line-height:36px; position:relative; border-top:1px solid #eee; border-right:1px solid #eee;}
+
+/* 체크박스&라디오박스 공통--------------- */
+input[type=radio] {position:absolute; top:50%; left:0; width:18px; height:18px; transform:translate(0,-50%); -ms-transform:translate(0,-50%);}
+label.chkBox, label.rdoBtn {position:relative; display:inline-block; padding-left:26px; height:22px; line-height:22px; vertical-align:middle; cursor:pointer;}
+/* 체크박스 :전체선택 버튼--------------- */
+input[type=checkbox] {position:absolute; top:0; left:0; width:0; height:0;}
+input[type=button].chkBox {margin-left:-2px; padding-left:24px; height:22px; vertical-align:middle; background:url('../../image/icon_checkN.png') no-repeat 0 50%;}
+
+/* 체크박스--------------- */
+label.chkBox::before {position:absolute; top:2px; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; background:#fff;}
+label.chkBox.checked::after {position:absolute; top:6px; left:3px; content:''; width:8px; height:4px; border-bottom:3px solid #676a6c; border-left:3px solid #676a6c; -webkit-transform:rotate(-45deg); transform:rotate(-45deg);}
+label.chkBox .formControl::before {background:#eee;}
+
+/* 라디오버튼--------------- */
+input[type=radio]::before {position:absolute; top:0; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; border-radius:50%; background:#fff;}
+input[type=radio]:checked::after {position:absolute; top:5px; left:5px; content:''; width:8px; height:8px; border-radius:50%; background:#676a6c;}
+input[type=radio].formControl::before {background:#eee;}
+
+/* 토글 스위치--------------- */
+.switchBox{ display:inline-block;position:relative; width:60px; height:28px; vertical-align:middle;border-radius:25px;overflow:hidden;}
+.switchBox input[type="checkbox"]{position:absolute;visibility:hidden;}
+.switchBox label{display:block;position:absolute;top:0;width:60px;height:28px;background-color:#aaa;transition-duration:0.2s;}
+.switchBox label span{position:absolute;left:0;top:50%;z-index:1;width:26px;height:23px;border-radius:25px;transform:translate(3px, -50%);transition-duration:0.2s;background-color:#fff;text-indent:-9999px;}
+.switchBox label:before,label:after{position:absolute;top:0;width:52%;font-size:11px;line-height:27px;color:#fff;text-align:center;}
+.switchBox label:before{left:0;content:'ON';}
+.switchBox label:after{right:0;content:'OFF';}
+.switchBox input:checked + label span{transform:translate(31px, -50%);}
+.switchBox input:checked::before, .switchBox input:checked::after{border:none}
+.switch-base input:checked + label{color:#fff; background-color:#8597eb;}
+.switch-primary input:checked + label{color:#fff; background-color:#1ab394;}
+.switch-success input:checked + label{color:#fff; background-color:#1c84c6;}
+.switch-info input:checked + label{color:#fff; background-color:#23c6c8; }
+.switch-warning input:checked + label{color:#fff; background-color:#f8ac59;}
+.switch-danger input:checked + label{color:#fff; background-color:#ed5565;}
+.switch-black input:checked + label{color:#fff; background-color:#222;}
+.switchBox + .switchBox {margin-left:6px;}
+
+/* 테이블 스타일--------------- */
+.tableStyle {width:100%; max-width:100%; margin-bottom:15px;}
+.tableStyle th {position:relative; padding:7px 0; color:#333; border-top:1px solid #dae0fd; border-bottom:1px solid #dae0fd; border-right:1px solid #dae0fd; background-color:#e9ecfb; text-align:center;}
+.tableStyle th:last-child {border-right:none;}
+.tableStyle td {position:relative; padding:7px 0; border-right:1px solid #ebebeb; border-bottom:1px solid #ebebeb; text-align:center;}
+.tableStyle td:last-child {border-right:none;}
+.tableStyle tbody tr:nth-of-type(2n) {background-color:rgba(0, 0, 0, 0.02);}
+.tableStyle tbody tr:hover {background-color:rgba(224,243,255,0.6);}
+.tableStyle + .panelBar {padding-bottom:15px;}
+/* 스캔 */
+.scanTbl th {font-size:25px; line-height:80px;}
+.scanTbl td {line-height:80px;}
+.scanTbl input[type=text] {line-height:50px; font-size:32px;}
+.scanTbl .btn {overflow-y:hidden; margin-bottom:1px; padding:12px 30px; font-size:25px;}
+table.noPad tr > td, td.noPad {padding:0 !important;}
+th[rowspan] {border-bottom:1px solid #dae0fd;}
+td[rowspan] {border-bottom:1px solid #eee;}
+.nowrap {white-space:nowrap;}
+.solidR {border-right:1px solid #eee; vertical-align:middle;}
+.solidL {border-left:1px solid #eee; vertical-align:middle;}
+.solidT {border-top:1px solid #eee;}
+.solidB {border-bottom:1px solid #eee;}
+.dashR {border-right:1px solid #dae0fd;}
+.dashL {border-left:1px solid #dae0fd;}
+.noPad table.frmStyle > tr:first-child th {border-top:0 !important;}
+.noPad table.frmStyle > tr:first-child td {border-top:0 !important;}
+.noPad table.frmStyle > tr:last-child th {border-bottom:0 !important;}
+.noPad table.frmStyle > tr:last-child td {border-bottom:0 !important;}
+
+
+/* Q&A 스타일--------------- */
+.qnaStyle {width:100%; max-width:100%;}
+.qnaStyle th {position:relative; padding:7px 0; color:#333; border-top:1px solid #dae0fd; border-bottom:1px solid #dae0fd; border-right:1px solid #dae0fd; background-color:#e9ecfb; text-align:center;}
+.qnaStyle th:last-child {border-right:none;}
+.qnaStyle td {position:relative; padding:7px 0; text-align:center;}
+.qnaStyle tr td {border-bottom:1px solid #ecf5f7;}
+.qnaStyle tbody tr:nth-of-type(3n+1) td {background-color:rgba(224,243,255,0.6);}
+.qnaStyle tbody tr:nth-of-type(3n) td {border-bottom:1px solid #ddd;}
+.qnaClaim { text-align:left !important; padding-left:10px !important;}
+.qnaClaim .goods {font-weight:bold; line-height:26px;}
+.qnaClaim .cont {line-height:22px; padding:10px 0; color:#1d3e9d;}
+.qnaClaim .email {line-height:26px;}
+.qnaClaim .email em {border-bottom:1px solid #aaa;}
+.lineRound {border:2px solid #ccc; border-radius:15px; padding:4px 14px; font-weight:bold;}
+
+/* 내부 테이블 디자인 */
+.subTable {display:table; width:100%;}
+.subTable dl {display:table; width:100%;}
+.subTable dt, .subTable dd {display:table-cell;}
+.subTable dt {vertical-align:middle; white-space:nowrap; width:8%; padding:0 15px; background:#e9ecfb; text-align:center; border-bottom:1px solid #dae0fd;}
+.subTable dl:last-child dt {border-bottom:none;}
+.subTable dd {border-bottom:1px solid #eee; padding:3px 20px 3px 10px;}
+.subTable dl:last-child dd {border-bottom:none;}
+
+/* button --------------- */
+.btn {border-radius:3px; vertical-align:middle; white-space:nowrap;font-size:12px;user-select:none;}
+.btn-lg {padding:4px 20px 5px; height:28px; overflow-y:hidden;}
+.btn-sm {margin-top:-2px; line-height:100%; height:28px; overflow-y:hidden;}
+.btn-ssm {margin-top:-2px; line-height:100%; height:22px; overflow-y:hidden;}
+.btn + .btn {margin-left:6px;}
+.btn:first-child {margin-left:0;}
+
+/* 버튼 색상 */
+.btn-white {color:#555 !important; background-color:#fff !important; border:1px solid #ccc !important;}
+.btn-default {color:#555; background-color:#eee; border:1px solid #dcdcdc;}
+.btn-gray {color:#fff; background-color:#aaa; border:1px solid #aaa;}
+.btn-base {color:#fff; background-color:#8597eb; border:1px solid #8597eb;}
+.btn-primary {color:#fff; background-color:#1ab394; border:1px solid #1ab394;}
+.btn-success {color:#fff; background-color:#1c84c6; border:1px solid #1c84c6;}
+.btn-info {color:#fff; background-color:#23c6c8; border:1px solid #23c6c8;}
+.btn-pink {color:#fff; background-color:#feada6; border:1px solid #feada6;}
+.btn-warning {color:#fff; background-color:#f8ac59; border:1px solid #f8ac59;}
+.btn-danger {color:#fff; background-color:#ed5565; border:1px solid #ed5565;}
+.btn-dark, .btn.active {color:#fff; background-color:#6c757d; border:1px solid #6c757d;}
+.btn.icn {line-height:28px; height:28px; padding:0 8px; background-color:#eee; border:1px solid #dbdbdb;}
+.btn.icn i {padding-top:6px; width:12px; vertical-align:top; font-size:14px; text-align:center;}
+.btnGroup{display:inline-block;}
+.btnGroup .btn + .btn{margin:0;}
+
+/* 페이징 --------------- */
+.tablePaging {position:relative; 	display:inline-block; vertical-align:middle;}
+.tablePaging a {display:inline-block; float:left; margin:0 5px; width:28px; height:28px; line-height:28px; text-align:center; border:1px solid #ccc; border-radius:50px; cursor:pointer;}
+.tablePaging a.arrow {background-color:rgba(0, 0, 0, 0.03); 	border-color:#ebebeb;}
+.tablePaging .num.on {background:#8597eb; color:#fff; border-color:#8597eb;}
+
+/* 다중 Select Box */
+.mSelectWrap select {display:none;}
+.mSelectBox {display:inline-block; position:relative; top:-1px; margin:2px 0 2px 0; padding:0 7px 0 0; width:100%; height:auto !important; min-height:29px; border:1px solid #e5e6e7; vertical-align:middle;}
+.mSelected {overflow:auto;}
+.mSelected li {float:left; margin:2px 5px 3px; line-height:24px; padding:0 7px; background:#dbedf9; -ms-user-select:none; -moz-user-select:-moz-none; -webkit-user-select:none; user-select:none;}
+.mSelected li.srchFld {margin:0; padding:0; background:none;}
+.mSelected .srchFld input {width:25px; margin:0; padding:0; border:none; outline:none;}
+.mSelected a {border:none !important; float:right; margin-left:3px; padding:0 3px; width:15px; line-height:22px; text-indent:-9999px; background:url('../../image/btn_sltClose.png') no-repeat 100% 50%;}
+.mSelected a:hover {background:url('../../image/btn_sltCloseOn.png') no-repeat 100% 50%;}
+.mSelecting {display:none; overflow-y:auto; overflow-x:hidden; position:absolute; top:100%; left:-1px; z-index:1; width:100%; max-height:156px; line-height:30px; border:1px solid #e5e6e7; background:#fff;}
+.mSelecting li {margin:0 10px; cursor:pointer;}
+
+/* 멀티 Select Box */
+.mSelWrap {display:inline-block;}
+.mSelWrap select {height:100px; padding:7px 0;}
+.mSelWrap .mSelBtn {margin:0 0 0 5px; float:right; width:33px; vertical-align:top;}
+.mSelWrap .mSelBtn .btn {margin:0; vertical-align:top;}
+.mSelWrap option {padding:4px 100px 4px 10px;}
+
+/* 파일첨부 --------------- */
+.uFile {overflow:hidden; position:relative; display:inline-block; margin:-2px 5px 0 0; width:80%; height:28px; vertical-align:middle; border:1px solid #dbdbdb;}
+.lrStyle .uFile {margin-top:2px;}
+.uFileInput {position:absolute; top:0; width:100%; margin:0 !important; padding:0 !important; line-height:28px; border:none !important;}
+.uFileLabel {position:absolute; top:0; right:0; left:0; z-index:1; margin:0; padding:0 7px; width:cals(100% - 7px); line-height:28px; height:28px; background-color:#fff; border-radius:1px; overflow:hidden; white-space:nowrap;}
+.uFileLabel::after {position:absolute; top:0; right:0; bottom:0; width:30px; z-index:3; line-height:28px; content:" "; border-left:1px solid #dbdbdb; background:#eee url('../../image/icon_upload.png') no-repeat 50% 50%;}
+
+/* badge --------------- */
+.badge {float:right; margin-top:2px; padding:0 5px; min-width:9px; line-height:18px; color:#fff; font-size:12px; font-weight:600; border-radius:3px; text-align:center; text-shadow:1px 1px 1px rgba(0,0,0,0.4); letter-spacing:-0.5px;}
+.badge-warning {background-color:#ed7908;}
+.badge-primary {background-color:#1ab394;}
+.badge-danger {background-color:#ed5565;}
+.badge-success {background-color:#2fa4e7;}
+.badge-info {background-color:#23c6c8;}
+.badge.circle {border-radius:50px;}
+.dep3 .badge {position:relative; top:-28px; right:20px;}
+
+/* badge-등급 ------------*/
+.badgeLevel{overflow:hidden;display:inline-block;margin:5px 0 0;padding:0;width:50px;height:50px;line-height:46px;font-size:30px;font-weight:bold;border-radius:100%;text-align:center;vertical-align:top;box-sizing:border-box;}
+.badgeLevel.white{background-color:#fff;border:1px solid #333;color:#333;}
+.badgeLevel.dark1{background-color:#ccc;border:1px solid #ccc;color:#333;}
+.badgeLevel.dark2{background-color:#aaa;border:1px solid #aaa;color:#333;}
+.badgeLevel.dark3{background-color:#777;border:1px solid #777;color:#fff;}
+.badgeLevel.black{background-color:#333;border:1px solid #333;color:#fff;}
+
+/* tag */
+.tagNum {display:inline-block; margin-left:5px; padding:0 3px 0 2px; min-width:13px; line-height:16px; font-weight:normal; color:#fc5555; background:#fff; border-radius:5px;}
+
+/* footer --------------- */
+footer {position:absolute; bottom:0; left:0; width:100%; height:40px; background-color:#fff; border-top:1px solid #e7eaec; line-height:39px; font-size:13px;}
+footer .f-left {float:left; padding-left:20px; line-height:38px;}
+footer .f-right {float:right; padding-right:20px; line-height:38px;}
+
+/* 이미지 카드 */
+.dexterArea {min-width:350px; min-height:180px; padding:0 !important; vertical-align:top; background:#f1f1f1;vertical-align:top;}
+.dexterTable {display:table; width:100%; overflow-y:auto;}
+.dexterTable > li {display:table-cell; vertical-align:top; line-height:23px;}
+.dexterNo div {padding:0 10px; border-top:1px solid #ddd; border-right:1px solid #ddd; background:#fff;}
+.dexterNo div:first-child {margin-top:36px;}
+.dexterNo div:last-child {border-bottom:1px solid #ddd;}
+
+/* 수정용 이미지 카드 */
+.cardArea {width:100%; padding:0 0 20px; overflow-y:auto;}
+.imgCard {vertical-align:top; position:relative; display:inline-block; margin:20px 20px 0 0; padding:10px 10px 0 10px; border:1px solid #dbdbdb;}
+.imgCard ul {display:table;}
+.imgCard li {display:table-cell;}
+.imgCard img {margin-right:15px;}
+.imgCard li:nth-of-type(2) {padding-top:20px; max-width:150px; line-height:24px}
+.imgCard p {font-size:12px;}
+.imgCard .cardClose {position:absolute; top:0; right:0; width:24px; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
+.imgCard .cardClose:hover {background:#f1f1f1 url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.verticalTop {vertical-align:top;}
+
+/* 조회용 이미지 카드 */
+.cardArea2 {padding:10px 0;}
+.cardArea2 ul, .cardArea2 .box {vertical-align:top; position:relative; display:inline-block; margin:10px; border:1px solid #dbdbdb; max-width:300px;}
+.cardArea2 li {display:table-cell; line-height:26px; vertical-align:middle;}
+.cardArea2 li:nth-of-type(2) {padding:0 10px;}
+.cardArea2 .cardDel {position:absolute; top:0; right:0; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
+.cardArea2 .cardDel:hover {background:#f1f1f1 url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+
+/* 테이블 외부 안내문구 */
+.panelStyle > .notice {margin:0 0 15px ;}
+.panelContent > .notice {margin:15px 0;}
+.notice em {color:red;}
+.notice li, p.dot {padding-left:20px; background:url('../../image/dot_bk.png') no-repeat 5px 10px; line-height:24px;}
+p.dot .btn {margin-left:10px !important;}
+p.dot em {color:red;}
+
+/* 정렬 */
+.txt {line-height:36px;}
+.aC {text-align:center !important;}
+.aR {text-align:right !important;}
+.aL {text-align:left !important;}
+.vaT {vertical-align:top !important;}
+.vaM {vertical-align:middle !important;}
+.vaB {vertical-align:bottom !important;}
+
+/* 테이블 내부 안내문구 */
+.infoTxt {line-height:26px; padding:5px 0;}
+.infoTxt i {margin-right:7px;}
+.infoTxt em {color:red;}
+.infoTxtTh {display:inline-block; text-align:left; font-weight:normal; font-size:12px;}
+.infoTxtTh li {padding-top:3px;}
+.infoTxtTh i {padding-right:5px;}
+.srchOption {overflow:auto; padding:10px 0; line-height:36px;}
+
+/* 유의사항 안내 */
+.infoBox {margin:0 20px 20px; padding:7px 10px; border-top:2px solid #dfe2e3; border-bottom:2px solid #dfe2e3; background:#fff}
+.infoBox p {padding-left:25px; line-height:20px; font-size:12px; background:url('../../image/dot_bk.png') no-repeat 10px 50%; background-size:3px auto;}
+
+/* 검색결과 안내문 */
+.srchNotice {padding-bottom:7px; font-weight:normal; font-size:14px;}
+.srchNotice em {color:red;}
+
+/* 필수입력항목 */
+.required {display:inline-block; position:relative; top:-3px; width:12px; height:7px; background:url('../../image/icon_required.png') no-repeat 0 50%;}
+
+
+/* COLOR DESIGN -------------------------------------*/
+/*Color :Base ---*/
+.color-mPurple header,span.color-mPurple {background:linear-gradient(135deg,#667eea 0,#764ba2 100%) !important;}
+.color-purple header,span.color-purple {background:#667eea !important;}
+
+/*Color :Gray ---*/
+.color-mGray header,span.color-mGray {background:linear-gradient(to right,#6c757d 0%,#555 100%) !important;}
+.color-gray header,span.color-gray {background:#666 !important;}
+.color-mGray .frmStyle th,.color-mGray .tableStyle th,.color-gray .frmStyle th,.color-gray .tableStyle th {background:#eee !important; 	border-top:1px solid #ddd; 	border-bottom:1px solid #ddd;}
+.color-mGray .tablePaging .num.on,.color-gray .tablePaging .num.on {background:#888 !important; 	border-color:#888 !important;}
+.color-mGray #lnb .dep3,.color-gray #lnb .dep3 {border-color:#777 !important;}
+.color-mGray .tabsJrNav li.on a,.color-gray .tabsJrNav li.on a {color:#333;}
+
+/*Color :Blue ---*/
+.color-mBlue header,span.color-mBlue {background:linear-gradient(to right,#4481eb 0%,#04befe 100%) !important;}
+.color-blue header,span.color-blue {background:#0042a5 !important;}
+.color-mBlue .frmStyle th,.color-mBlue .tableStyle th,.color-blue .frmStyle th,.color-blue .tableStyle th {background:#d8eafc !important; 	border-top:1px solid #ddd; 	border-bottom:1px solid #ddd;}
+.color-mBlue .tablePaging .num.on,.color-blue .tablePaging .num.on {background:#3e91de !important; 	border-color:#3e91de !important;}
+.color-mBlue #lnb .dep3,.color-blue #lnb .dep3 {border-color:#3e91de !important;}
+.color-mBlue .tabsJrNav li.on a,.color-blue .tabsJrNav li.on a {background:#d8eafc;}
+.color-mBlue .tabJr.on,.color-blue .tabJr.on {border-top:4px solid #d8eafc;}
+.color-mBlue .tabsJrNav li.on a,.color-blue .tabsJrNav li.on a {color:#333;}
+
+/*Color :Green ---*/
+.color-mGreen header,span.color-mGreen {background:linear-gradient(135deg,#00b09b 0,#96c93d 100%) !important;}
+.color-green header,span.color-green {background:#00b09b !important;}
+.color-mGreen .frmStyle th,.color-mGreen .tableStyle th,.color-green .frmStyle th,.color-green .tableStyle th {background:#e5f7f5 !important; 	border-top:1px solid #ddd; 	border-bottom:1px solid #ddd;}
+.color-mGreen .tablePaging .num.on,.color-green .tablePaging .num.on {background:rgba(0,176,155,0.8); 	border-color:rgba(0,176,155,0.8) !important;}
+.color-mGreen #lnb .dep3,.color-green #lnb .dep3 {border-color:#00b09b !important;}
+.color-mGreen .tabsJrNav li.on a,.color-green .tabsJrNav li.on a {background:#e5f7f5;}
+.color-mGreen .tabJr.on,.color-green .tabJr.on {border-top:4px solid #e5f7f5;}
+.color-mGreen .tabsJrNav li.on a,.color-green .tabsJrNav li.on a {color:#333;}
+
+/*Color :Pink ---*/
+.color-mPink header,span.color-mPink {background:linear-gradient(to right, rgb(242, 112, 156), rgb(255, 148, 114)) !important;}
+.color-pink header,span.color-pink {background:#feada6 !important;}
+.color-mPink .frmStyle th,.color-mPink .tableStyle th,.color-pink .frmStyle th,.color-pink .tableStyle th {background:#fff7f6 !important; border-top:1px solid #ddd; border-bottom:1px solid #ddd;}
+.color-mPink .tablePaging .num.on,.color-pink .tablePaging .num.on {background:#feada6; 	border-color:#feada6 !important;}
+.color-mPink #lnb .dep3,.color-pink #lnb .dep3 {border-color:#feada6 !important;}
+.color-mPink .tabsJrNav li.on a,.color-pink .tabsJrNav li.on a {background:#fff7f6;}
+.color-mPink .tabJr.on,.color-pink .tabJr.on {border-top:4px solid #fff7f6;}
+.color-mPink .tabsJrNav li.on a,
+.color-pink .tabsJrNav li.on a {color:#333;}
+
+/*Color :black ---*/
+.color-black header, span.color-black{background:#3E3E3E !important;}
+.color-black .header-logo{background:#000 !important;}
+.color-black .header-menu .menu a{background:#000 !important;}
+.color-black .header-menu .menu a.on{background:#fff !important; color:#000 !important;}
+.color-black #lnb-wrapper{background-color:#b2b2b2 !important;}
+.color-black #lnb .dep2{background-color:#545454 !important;}
+.color-black #lnb .dep3{border-color:#000 !important;}
+.color-black #lnb .dep3{background:#fdfdfd !important;  }
+.color-black #lnb .dep3 a{color:#111111 !important;}
+.color-black #lnb a{color:#fff !important;}
+.color-black .frmStyle th, .color-black .tableStyle th, .color-black .frmStyle th, .color-black .tableStyle th{background:#eee !important; 	border-top:1px solid #ddd; border-bottom:1px solid #ddd;}
+.color-black .tablePaging .num.on, .color-black .tablePaging .num.on{background:#888 !important; 	border-color:#888 !important;}
+.color-black .tabsJrNav li.on a, .color-black .tabsJrNav li.on a{color:#333; background:#eee !important}
+.color-black .tabJr.on, .color-black .tabJr.on { border-top:4px solid #eee;}
+
+/* 폰트 컬러, 폰트 두께 */
+.cBlue {color:#127fdc !important;}
+.cGray {color:#666 !important;}
+.cRed {color:red !important;}
+.bold {font-weight:bold !important;}
+
+/* 배경 투명도 */
+.bgOp6 {opacity:0.6; color:#000 !important;}
+
+/* 여백 지정 */
+hr {border:0; padding-bottom:10px;}/* 기본 여백 :10px */
+.pad10 {padding:10px 0 !important;}
+.pad15 {padding:15px 0 !important;}
+.pad20 {padding:20px 0 !important;}
+.padT3 {padding-top:3px !important;}
+.padT5 {padding-top:5px !important;}
+.padT10 {padding-top:10px !important;}
+.padT15 {padding-top:15px !important;}
+.padT20 {padding-top:20px !important;}
+.padT30 {padding-top:30px !important;}
+.padT40 {padding-top:40px !important;}
+.padR20 {padding-right:20px !important;}
+.padL10 {padding-left:10px !important;}
+.padB5 {padding-bottom:5px !important;}
+.padB10 {padding-bottom:10px !important;}
+.padB15 {padding-bottom:15px !important;}
+.padB20 {padding-bottom:20px !important;}
+.padB30 {padding-bottom:30px !important;}
+.padB40 {padding-bottom:40px !important;}
+.marT5 {margin-top:5px !important;}
+.marT10 {margin-top:10px !important;}
+.marT15 {margin-top:15px !important;}
+.marT20 {margin-top:20px !important;}
+.marR3 {margin-right:3px !important;}
+.marL5 {margin-left:5px !important;}
+.marL10 {margin-left:10px !important;}
+.marL20 {margin-left:20px !important;}
+.marR10 {margin-right:10px !important;}
+.marR20 {margin-right:20px !important;}
+
+/* 넓이 지정 --------------- */
+.w20 {width:20px !important;}
+.w50 {width:50px !important;}
+.w60 {width:60px !important;}
+.w70 {width:60px !important;}
+.w80 {width:80px !important;}
+.w90 {width:80px !important;}
+.w100 {width:100px !important;}
+.w130 {width:130px !important;}
+.w150 {width:150px !important;}
+.w200 {width:200px !important;}
+.w300 {width:300px !important;}
+.w400 {width:400px !important;}
+.w500 {width:500px !important;}
+.w600 {width:600px !important;}
+.w800 {width:800px !important;}
+.w100p {width:100% !important;}
+.w90p {width:90% !important;}
+.w80p {width:80% !important;}
+.w70p {width:70% !important;}
+.w60p {width:60% !important;}
+.w50p {width:50% !important;}
+.w40p {width:40% !important;}
+.w30p {width:30% !important;}
+.w20p {width:20% !important;}
+.h100 {height:100px !important;} /*alert, confirm 컨텐츠 높이에 사용*/
+
+
+/*-- 캘린더 --------------*/
+#calendar {max-width:900px; margin:20px 0 50px 20px;}
+
+/*-- error page --------------*/
+#errPage {padding-top:40px; width:650px; background:#fff; position:relative; top:48%; left:50%; transform:translate(-50%,-50%); -ms-transform:translate(-50%,-50%); border-radius:9px; vertical-align:middle; overflow:hidden; box-shadow:0 0 2px 0 rgba(0,0,0,0.12), 0 2px 2px 0 rgba(0,0,0,0.24);}
+#errPage .errImg {padding-left:50px; display:table-cell; vertical-align:middle; padding-bottom:30px;}
+#errPage .errImg div {border-radius:50%; position:relative; display:inline-block; width:140px; height:140px; color:#fff; background:#d196e4; box-shadow:2px 2px 6px 0 rgba(0,0,0,0.2) inset;}
+#errPage .fa-television {position:absolute; top:30px; left:28px; font-weight:bold; font-size:80px;}
+#errPage .fa-info {position:absolute; top:49px; left:66px; font-size:34px;}
+#errPage .errTxt {padding:0 50px; display:table-cell; padding-bottom:40px;}
+#errPage .errTxt .ttl {font-size:16px; font-weight:bold; padding-bottom:20px;}
+#errPage .errTxt .cont { padding-bottom:20px; line-height:26px;}
+#errPage .errTxt .tel {color:#777;}
+#errPage .errBtn {width:100%; background:#f9f9fa; line-height:70px; text-align:right;}
+#errPage .errBtn .btn {margin-right:30px; border-radius:33px; background:#858b90; color:#fff; padding:5px 30px; line-height:24px; font-weight:bold; -webkit-transition:0.2s; transition:0.2s;}
+#errPage .errBtn .btn:hover {background:#555;}
+
+/*-- DEXTER --------------*/
+.dexterNo { width:43px;}
+.dexterNo div { padding:0 10px; border-top:1px solid #ddd; border-right:1px solid #ddd; background:#fff; text-align:right;}
+.dexterNo div:first-child {margin-top:28px;}
+
+/*-- 회원추가 --------------*/
+.memAddWrap {line-height:26px; padding:3px 0;}
+.memAdd {margin-right:15px; padding:2px 27px 2px 0; position:relative; line-height:24px; height:24px; white-space:nowrap;}
+.memAdd button {position:absolute; top:3px; right:0; bottom:0; width:18px; height:18px; border:1px solid #dbdbdb; border-radius:3px; text-indent:-9999px; background:#eee url('../../image/btn_sltClose.png') no-repeat 50% 50%;}
+.memAdd button:hover {background:#eee url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+
+/*-- Date Picker --------------*/ /* 20200521 수정 */
+table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
+.mtz-monthpicker-month {padding:7px; cursor:pointer;}
+.ui-datepicker-trigger {padding:0;}
+.ui-datepicker {z-index:800 !important; text-align:center; background:#fff;}
+.ui-datepicker .ui-datepicker-today,
+.ui-datepicker .ui-state-highlight {background:#fff7cf !important;}
+.ui-datepicker .ui-state-active {border:1px solid red !important;}
+.ui-datepicker .ui-datepicker-prev {position:absolute; top:3px; left:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('../../image/icon_prev.png') no-repeat 50% 50%;}
+.ui-datepicker .ui-datepicker-next {position:absolute; top:3px; right:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('../../image/icon_next.png') no-repeat 50% 50%;}
+.ui-datepicker .ui-datepicker-calendar {padding:5px; border:1px solid #ddd; border-top:none; text-align:center;}
+.ui-datepicker .ui-datepicker-calendar th{padding:5px 0}
+.ui-datepicker-week-end {text-align:center;}
+.ui-datepicker-calendar .ui-state-default {display:inline-block; text-align:center; width:32px; line-height:24px; border:none;}
+.ui-datepicker-header {position:relative; background:#d0e9ff; text-align:center; padding:5px; border:1px solid #ddd; border-bottom:none;}
+.ui-datepicker-buttonpane button {background-color:#eee; border:1px solid #dcdcdc; line-height:24px; border-radius:3px; margin:0 5px 5px 5px;}
+.ui-datepicker-current {float:left;}
+.ui-datepicker-close {float:right;}
+
+/* prograss bar */
+.prograssWrap {display:flex; flex-direction:row;}
+.prograssWrap > li {display:flex; align-items:center;}
+.prograssWrap > li:nth-of-type(1) {width:96%}
+.prograssWrap > li:nth-of-type(2) {margin-left:1.5rem !important}
+.prograss-lg {display:flex; width:100%; height:1rem; background-color:#f4f5fd; border-radius:.65rem; overflow:hidden; box-shadow:inset 0 1px 2px rgba(0,0,0,.1);}
+.prograss-sm {display:flex; width:100%; height:.5rem; background-color:#f4f5fd; border-radius:.65rem; overflow:hidden; box-shadow:inset 0 1px 2px rgba(0,0,0,.1);}
+.prograss-bar {display:flex; border-top-right-radius:.65rem; border-bottom-right-radius:.65rem; transition:width .6s ease;
+  background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+  background-size: 1rem 1rem;
+  -webkit-animation: progress-bar-stripes 1s linear infinite; animation: progress-bar-stripes 1s linear infinite;}
+.prograss-bar.bg-info {background-color:#1c84c6;}
+.prograss-txt.bg-info {color:#1c84c6;}
+.prograss-bar.bg-success {background-color:#1ab394;}
+.prograss-txt.bg-success {color:#1ab394;}
+.prograss-bar.bg-danger {background-color:#f83245;}
+.prograss-txt.bg-danger {color:#f83245;}
+.prograss-bar.bg-base {background-color:#f8ac59;}
+.prograss-txt.bg-base {color:#ffa749;}
+
+/* Multi CheckBox */
+.multiCheckBox {position:relative; display:inline-block; width:auto; line-height:27px; margin:3px 3px 3px 0;}
+.multiCheckBox .sltBtn {padding-left:5px; width:100%; height:27px; color:#555; text-align:left; border:1px solid #dbdbdb; box-sizing:border-box; -webkit-touch-callout:none; -webkit-user-select:none; -ms-user-select:none; user-select:none;}
+.multiCheckBox .sltBtn::after {position:absolute; top:6px; right:10px; content:''; width:7px; height:7px; border-bottom:1px solid #555; border-left:1px solid #555; -webkit-transform:rotate(-45deg); transform:rotate(-45deg);}
+.multiCheckBox .sltBtn.on::after {top:10px; -webkit-transform:rotate(135deg); transform:rotate(135deg);}
+.multiCheckBox ul {display:none; position:absolute; top:26px; left:0; z-index:1; width:100%; height:auto; border:1px solid #dbdbdb; background:#fff;}
+.multiCheckBox li {padding:3px 10px;}
+.multiCheckBox li:hover {background-color:Highlight; color:HighlightText;}
+.multiCheckBox label {display:flex;}
+
+/* checkBox More */
+.checkBoxList {overflow:hidden; padding-right:36px; height:36px;}
+.checkBoxList.on {overflow:visible; height:auto;}
+.checkBoxList .more {position:absolute; top:-1px; right:0; width:36px; height:38px; border:1px solid #eee; background:#f7f7f7;}
+.checkBoxList ul {display:flex; flex-wrap:wrap;}
+.checkBoxList li {justify-content:flex-start; line-height:36px;}
+.checkBoxList[data-unit='1'] li {flex-basis:100%;}
+.checkBoxList[data-unit='2'] li {flex-basis:50%;}
+.checkBoxList[data-unit='3'] li {flex-basis:33%;}
+.checkBoxList[data-unit='4'] li {flex-basis:25%;}
+.checkBoxList[data-unit='5'] li {flex-basis:20%;}
+.checkBoxList[data-unit='6'] li {flex-basis:16.6%;}
+.checkBoxList[data-unit='7'] li {flex-basis:14.2%;}
+.checkBoxList[data-unit='8'] li {flex-basis:12.5%;}
+
+/* 아이콘 툴팁 버튼 */
+.iconTooltip {display:inline-block; position:relative; margin-right:10px;}
+.iconTooltip i {position:relative; color:#46a1ff; width:15px; height:15px; line-height:16px; border-radius:50%; border:1px solid #46a1ff; cursor:pointer; text-align:center;}
+.iconTooltip:hover i {box-shadow:0px 3px 7px 0px rgba(0,0,0,0.4);}
+.iconTooltip span {display:none; position:absolute; top:36px; z-index:5; padding:10px 15px; line-height:24px; color:#fff; background:#6d6d6d; box-shadow:0px 3px 7px 0px rgba(0,0,0,0.2); border-radius:5px;}
+.iconTooltip span:after {position:absolute; top:-4px; content:''; background:#6d6d6d; width:8px; height:8px; -ms-transform:rotate(-45deg); -webkit-transform:rotate(-45deg); transform:rotate(-45deg);}
+.iconTooltip span.left {left:-10px}
+.iconTooltip span.left:after {left:15px;}
+.iconTooltip span.right {right:-10px}
+.iconTooltip span.right:after {right:15px;}
+.iconTooltip span.center {left:50%;}
+.iconTooltip span.center:after {right:5px;}
+.iconTooltip:hover span{display:block;}
+
+/* 상품이동 */
+.itemMove {display:inline-block; width:800px; border:1px solid #eee;}
+.itemMove .item {float:left; display:table; margin:0 10px 20px 0; width:220px; border:1px solid #eee;}
+.itemMove .item li {display:table-cell; vertical-align:top;}
+.itemMove .item li:nth-of-type(1) {width:80px;}
+.itemMove .item li:nth-of-type(1) img {width:80px; height:80px;}
+.itemMove .item button {width:16px; height:16px; text-indent:-9999px;}
+.itemMove .item input {width:30px; height:14px !important; line-height:14px}
+.itemMove .item li:nth-of-type(2) div {line-height:20px}
+
+/* 상품 Dragable :20200129 */
+.sortableWrap #sortable { overflow-y:auto }
+.sortableWrap {margin:20px 0; width:100%; max-height:675px;}
+.sortableWrap .itemWrap {display:inline-block;}
+.sortableWrap .item {float:left; margin-right:12px; margin-bottom:12px; padding:5px 8px; line-height:20px; border:1px solid #ddd; vertical-align:top; background:#fff;}
+.sortableWrap .item > li {float:left; vertical-align:middle;}
+.sortableWrap .item .img {margin-top:3px; margin-right:10px; width:80px;}
+.sortableWrap .item .img img {width:80px; height:80px; cursor:move;}
+.sortableWrap .btnArea {text-align:center; margin-top:15px; padding:0 10px;}
+.sortableWrap button.icnSm {overflow:hidden; position:relative; width:24px; height:20px; background-color:#fff;}
+.sortableWrap button.icnSm i {position:absolute; top:-4px; left:-3px; width:24px; line-height:24px; font-size:15px; color:#888;}
+.sortableWrap button.icnSm:hover i {color:#111;}
+.sortableWrap button.icnSm:last-child {margin-right:0;}
+.sortableWrap .item .cont {width:114px;}
+.sortableWrap .item .cont li em {margin:0 3px 0 7px;}
+.sortableWrap .item .cont .no {font-weight:bold; padding-bottom:3px;}
+.sortableWrap .item .cont .title {padding-bottom:3px; border-bottom:1px solid #eee;}
+.sortableWrap .item .cont .price {padding-top:3px; padding-bottom:3px;}
+.sortableWrap .item .cont input {margin-left:5px; width:37px;}
+
+
+.ag-theme-balham.lh60 .ag-cell {line-height:56px !important; height:60px;}
+.ag-theme-balham.lh70 .ag-cell {line-height:66px !important; height:70px;}
+.ag-theme-balham.lh80 .ag-cell {line-height:76px !important; height:80px;}
+.ag-theme-balham.lh90 .ag-cell {line-height:86px !important; height:90px;}
+.ag-theme-balham.lh100 .ag-cell {line-height:96px !important; height:100px;}
+.ag-theme-balham.lh110 .ag-cell {line-height:106px !important; height:110px;}
+.ag-theme-balham.lh120 .ag-cell {line-height:114px !important; height:120px;}
+
+
+/* 테이블 상품명 클릭시 이미지 레이어 활성화 */
+.viewImg {position:relative; color:blue; cursor:pointer}
+.thumbLayer {display:inline-block; position:absolute; top:0; right:0; z-index:5; border:1px solid #ddd}
+.thumbLayer img {width:100%; height:auto;}
+
+/* dashboard */
+.flexWrap{display:-ms-flexbox; display:flex; -ms-flex-wrap:wrap; flex-wrap:wrap; color:#676a6c;}
+.flexWrap li{padding:0 20px 20px; width:calc(33.3%);}
+.flexWrap.unit4 li{width:calc(25%);}
+.flexWrap.unit5 li{width:calc(20%);}
+.flexWrap.unit6 li{width:calc(16.6%);}
+.flexWrap .title{padding:15px; font-weight:600; border:1px solid #e7eaec; border-top:2px solid #e7eaec;}
+.flexWrap .title h5{font-size:15px; font-weight:bold;}
+.flexWrap .title span{float:right; padding:1px 8px; font-size:10px; border-radius:0.25em;}
+.flexWrap .content{padding:15px; border:1px solid #e7eaec; border-top:none;}
+.flexWrap .content em{font-size:30px; font-weight:200;}
+.statText {margin-top:5px}
+.statText::after{display:block; clear:both; content:''}
+.statText span:nth-of-type(1){float:left; font-size:11px;}
+.statText span:nth-of-type(2){float:right; font-size:13px; font-weight:600;}
+.txt-success{color:#1c84c6;}
+.txt-info{color:#23c6c8;}
+.flexWrap .txt-danger{color:#ed5565;}
+.flexWrap .bg-success{background:#1c84c6;}
+.flexWrap .bg-info{background:#23c6c8;}
+.flexWrap .bg-danger{background:#ed5565;}
+.btn.on{-webkit-box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);}
+.dbChart .btn-group{float:right; line-height:37px;}
+.dbChart .btn-group button{margin:0; height:23px;}
+.dbChart .boxleft{float:left; margin:20px 15px 20px 15px; width:calc(100% - 490px);}
+.dbChart .boxRight{float:left; margin:20px 20px 20px 40px; width:400px;}
+.dbChart .boxRight em{font-size:24px; font-weight:200;}
+.dbChart .boxRight > div{margin-bottom:25px;}
+.dbChart .boxRight .statText .c1 {color:#FF7043}
+.dbChart .boxRight .progress .c1 {background:#FF7043}
+.dbChart .boxRight .statText .c2 {color:#48C9B0}
+.dbChart .boxRight .progress .c2 {background:#48C9B0}
+.dbChart .boxRight .statText .c3 {color:#ca9900}
+.dbChart .boxRight .progress .c3 {background:#FFD54F}
+.progress{display:-ms-flexbox; display:flex; margin-top:5px; height:1rem; overflow:hidden; font-size:.75rem; background-color:#e9ecef; border-radius:.25rem;}
+.progress-mini{height:5px; margin-bottom:0;}
+.progress > div{height:5px; margin-bottom:0; transition:width 0.3s;}
+
+
+/* 카테고리 Sort */
+.categoryOrder {margin-bottom:15px; background:#fcfcfc;}
+.categoryOrder li {clear:both; padding-left:15px; line-height:40px; cursor:move; border-top:1px dashed red; }
+.categoryOrder li button.on {background-image:url(../../image/icon_cate_minus.png);}
+/* .categoryOrder li:after {content:''; position:absolute; top:8px; left:-10px; width:21px; height:21px; background:url(../../image/line_cate.png)} */
+.categoryOrder li:before{position:relative; content:''; width:1px; height:100%; background:#ddd;}
+.categoryOrder li ol{display:none}
+/* .categoryOrder ol:last-child li {background-image:none !important} */
+.categoryOrder button{position:relative; z-index:200; padding:0 15px 0; margin:0; line-height:40px; cursor:pointer; background-image:url(../../image/icon_cate_plus.png); background-repeat:no-repeat; background-position:0 0;}
+
+/* 메인 공지팝업 */
+.noticeWrap{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:800px;background-color:#fff;}
+.noticeWrap .swiper-container{overflow:hidden;position:relative;top:0;}
+.noticeWrap .swiper-wrapper{display:flex;width:100%;transition-property:transform;box-sizing:content-box;}
+.noticeWrap .swiper-slide{overflow-y:auto;max-height:500px;padding:20px 20px 40px;flex-shrink:0;position:relative;width:100%;height:100%;transition-property:transform;}
+.noticeWrap .swiper-slide img{max-width:100%;height:auto;}
+.noticeWrap .swipeControl{display:inline-block;position:absolute;top:-35px;right:0;/* transform:translate(-50%,0); */z-index:1;width:100px;}
+.noticeWrap .swipeControl button{text-indent:-9999px;}
+.noticeWrap .swipeControl button[aria-label]{position:absolute;width:30px;height:30px;}
+.noticeWrap .swipeControl button[aria-label]::after{top:6px;width:12px;height:12px;}
+.noticeWrap .swipeControl button[aria-label].arr{top:0;}
+.noticeWrap .swipeControl button[aria-label].arr.prev{left:0;}
+.noticeWrap .swipeControl button[aria-label].arr.next{right:0}
+.noticeWrap .swipeControl button[aria-label].arr::after{position:absolute;display:block;content:'';border-bottom:1px solid #fff;border-left:1px solid #fff}
+.noticeWrap .swipeControl button[aria-label].arr.prev::after{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}
+.noticeWrap .swipeControl button[aria-label].arr.next::after{-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}
+.noticeWrap .swipeControl .prev:after{left:8px;}
+.noticeWrap .swipeControl .next:after{right:8px;}
+.noticeWrap .swipeControl .swiper-button-disabled:after{border-color:#ddd;}
+.noticeWrap .swipeControl .swiper-pagination{line-height:28px;width:100%;text-align:center;}
+.noticeWrap .swipeControl .swiper-pagination-bullet{display:inline-block;margin:0 5px;width:10px;height:10px;background:#ddd;border-radius:50%;cursor:pointer;}
+.noticeWrap .swipeControl .swiper-pagination-fraction span{font-size:14px;}
+.noticeWrap .swipeControl .swiper-pagination-fraction i{color:#ccc;}
+.noticeWrap .swipeControl .swiper-pagination-current{color:#fff;font-weight:bold;}
+.noticeWrap .swipeControl .swiper-pagination-total{color:#ccc}
+.noticeWrap .btnArea{display:flex;background-color:#f0f0f0;}
+.noticeWrap .btnArea > span{flex:1;position:relative;}
+.noticeWrap .btnArea > span::after{content:'';position:absolute;top:50%;right:0;transform:translate(0, -50%);width:1px;height:15px;background-color:#ccc;}
+.noticeWrap .btnArea > span:last-child::after{background-color:unset;}
+.noticeWrap .btnArea button{width:100%;height:50px;color:#000}
+.noticeWrap .title{line-height:34px;padding:0 0 10px 0;font-size:18px;font-weight:bold;border-bottom:1px solid #ececec;}
+.noticeWrap .content{padding:20px 0 20px;line-height:26px;font-size:13px;}
+.noticeWrap .download li{line-height:26px;}
+.noticeWrap .download i{margin-right:15px;}
+.noticeWrap .download a{border-bottom:1px solid #337ab7;color:#337ab7;}
+.noticeWrap .download a:visited{border-bottom:1px solid #999;color:#333;}
+
+
+/* 반응형:GNB 유저명,등급,로그아웃 --------------- */
+@media ( max-width:1370px ) {
+ .header-info { display:none;}
+ .header-info-sm { display:inline-block;}
+}
+
+/* 반응형 :dashboard(20200522) --------------- */
+@media ( max-width:1023px ) {
+ /* 대시보드 */
+ #wrapper.dashboard{width:100%; min-width:100%;}
+ .dashboard .header-logo{width:100%}
+ .dashboard .lnbClose{display:none !important;}
+ .dashboard #lnb-wrapper{display:none;}
+ .dashboard .header-menu{display:none;}
+ .dashboard .tabs{margin-left:0; margin-right:0;}
+ .dashboard .tabs h2{position:relative; margin:10px 15px}
+ .dashboard .tabsNav li:first-child{margin-left:0}
+ .dashboard .tabsNav li:last-child{margin-right:0}
+ .dashboard .tabsNav li a{font-size:16px}
+ .dashboard .flexWrap li{width:100%}
+ .dashboard .flexWrap.unit4 li{width:100%}
+ .dashboard .flexWrap.unit5 li{width:100%}
+ .dashboard .flexWrap.unit6 li{width:100%}
+ .dashboard .boxStyle{margin-left:0; margin-right:0;}
+ .dashboard .panelStyle{margin: 0 0 30px;}
+ .dashboard .dbChart .boxleft{clear:left; margin:30px 15px 0 0; width:100%;}
+ .dashboard .dbChart .boxRight{clear:right; width:100%;margin:30px 0 20px; padding:0 20px;}
+ .dashboard footer{height:auto;}
+}
+
+/* Fix Input Zoom on devices older than iPhone 5:*/
+@media screen and (device-aspect-ratio:2/3) {
+  select, textarea, input[type="text"], input[type="password"],
+  input[type="datetime"], input[type="datetime-local"],
+  input[type="date"], input[type="month"], input[type="time"],
+  input[type="week"], input[type="number"], input[type="email"],
+  input[type="url"]{ font-size:16px;}
+}
+
+/* Fix Input Zoom on iPhone 5, 5C, 5S, iPod Touch 5g */
+@media screen and (device-aspect-ratio:40/71) {
+  select, textarea, input[type="text"], input[type="password"],
+  input[type="datetime"], input[type="datetime-local"],
+  input[type="date"], input[type="month"], input[type="time"],
+  input[type="week"], input[type="number"], input[type="email"],
+  input[type="url"]{ font-size:16px;}
+}
+
+/* Fix Input Zoom on iPhone 6, iPhone 6s, iPhone 7 */
+@media screen and (device-aspect-ratio:375/667) {
+  select, textarea, input[type="text"], input[type="password"],
+  input[type="datetime"], input[type="datetime-local"],
+  input[type="date"], input[type="month"], input[type="time"],
+  input[type="week"], input[type="number"], input[type="email"],
+  input[type="url"]{ font-size:16px; }
+  #main-wrapper{padding-bottom:97px;}
+}
+
+/* Fix Input Zoom on iPhone 6 Plus, iPhone 6s Plus, iPhone 7 Plus, iPhone 8, iPhone X, XS, XS Max */
+@media screen and (device-aspect-ratio:9/16) {
+  select, textarea, input[type="text"], input[type="password"],
+  input[type="datetime"], input[type="datetime-local"],
+  input[type="date"], input[type="month"], input[type="time"],
+  input[type="week"], input[type="number"], input[type="email"],
+  input[type="url"]{ font-size:16px;}
 }
 }

+ 742 - 736
src/main/webapp/ux/js/admin.ui.js

@@ -1,737 +1,743 @@
-//로그인 유효성체크 ALERT
-function uifnAlertClose(id){
-	$("#"+id).css({display:'none'});
-	return true;
-};
- 
-//차트 리사이징
-function chartResize(){
-	if ( $(document).find(".chartUnit").length > 0 ) {
-		let elLen = $(".chartUnit").length;
-		for (let i=0; i<elLen; i++){
-			let thisId = eval($(".chartUnit").eq(i).attr("id"));
-			let liW = Math.floor( $(".chartUnit").eq(i).parent("li").width());
-			thisId.resize({width:liW});
-			$(".c3-regions rect").attr("width",liW);
-		}
-	}
-};
-
-//MODAL & MODELESS POPUP 열기
-function uifnPopupOpen(id){
-	var $thisId = $(document).find("#"+id);
-	var popW = parseInt( $thisId.children().attr("data-width"));
-	var popH = parseInt( $thisId.children().attr("data-height"));
-
-	//팝업사이즈
-	if (!popW && !popH) { //가로&세로 미지정(풀사이즈 출력)
-		popW = $(window).width()-100;
-		popH = $(window).height()-100;
-		if (popW % 2 != 0 )	{popW = popW+1}; //짝수 변환(border 두께 영향)
-		if (popW < 1180)	{popW = 1180 };  //최소넓이
-		if (popH % 2 != 0 )	{popH = popH+1}; //짝수 변환(border 두께 영향)
-		if (popH < 488)	{ popH = 488 };  	//최소높이
-		$thisId.children().find(" > .panelStyle").css({width:popW, height:popH});
-	} else if (popW && popH) { 		//가로,세로 둘다 지정(지정된 사이즈로 출력)
-		$thisId.children().find(".panelStyle").css({width:popW, height:popH});
-	} else { 	//가로만 지정(세로는 auto)
-		$thisId.children().find("> .panelStyle").css({width:popW});
-	};
-
-	if ($thisId.children().hasClass("modelessPopup")){ //모덜리스 팝업의 경우
-		if (isNaN(popW)){popW = $thisId.children().width(); }
-		if (isNaN(popH)){popH = $thisId.children().height(); }
-		let popL = $(window).width()/2 - popW/2;
-		let popT = $(window).height()/2 - popH/2;
-		$thisId.children().css({left:popL, top:popT});
-	};
-
-	$thisId.children("div").css({display:"block"});
-	$("body").addClass("scrollOff");
-
-	//이미지카드가 있는 팝업일때 내부 컨텐츠 높이 지정
-	if ($thisId.children().find(".cardArea").length > 0) {
-		var popH=0, noticeH=0, btnAreaH=0;
-		if ($thisId.children().find(".notice").length > 0){
-			var noticeLen =  $thisId.children().find(".notice li").length;
-			noticeH = (noticeLen*24) + 30;
-		};
-		if ($thisId.children().hasClass("modelessPopup")){ //모덜리스 팝업의 경우
-			popH = $thisId.children().height();
-		} else {
-			popH = $thisId.children().find(".panelStyle").height();
-		};
-		if ($thisId.children().find(".panelBar").length > 0 ){ btnAreaH = 52 };
-
-		var cardAreaH = popH-42-noticeH-37-btnAreaH; //높이계산 : 팝업-타이틀-안내문-컬러명TR-기타버튼영역
-		$(".cardArea").css({height:cardAreaH});
-	};
-
-	//tab이 있는 팝업일때 내부 컨텐츠 높이 지정
-	if ($thisId.children().find(".tabsCont").length > 0) {
-		var mdConH=0, topTbl=0, popH=0, btnAreaH=0;
-		if ($thisId.children().hasClass("modelessPopup")){ //모덜리스 팝업의 경우
-			popH = $thisId.children().height();
-		} else {
-			popH = $thisId.children().find(".panelStyle").height();
-		};
-		if ($thisId.children().find(".panelContent > .frmStyle:eq(0)").length > 0 ){
-			topTbl = $thisId.children().find(".panelContent > .frmStyle:eq(0)").outerHeight() + 15;
-		};
-		if ($thisId.children().find(".panelBar").length > 0 ){ btnAreaH = 52 };
-
-		//console.log(topTbl);
-		var tabContH = popH-42-topTbl-35-btnAreaH; //높이계산 : 팝업높이-타이틀-상단테이블-탭스높이-버튼
-		$(".tab > .panelStyle").css({height:tabContH});
-	};
-
-};
-
-//MODAL POPUP CLOSE
-function uifnPopupClose(id) {
-	var $thisId = $("#"+id);
-	if ( $thisId.hasClass("popupWrap") ) { //모달,모덜리스  팝업
-		$thisId.children("div").css({display:"none"});
-		$thisId.children("div").remove();
-		var modalLen = $(".modalPopup[style='display:block;']").length;
-		var modalessLen = $(".modalPopup[style='display:block;']").length;
-		if ( modalLen == 0 && modalessLen ==0 ){
-			$("body").removeClass("scrollOff");
-		};
-	} else if ( $thisId.hasClass("videoPopup") ) {  //비디오팝업
-		$thisId.css({display:"none"});
-		$("#iframe_video").attr("src","");
-
-	};
-	$thisId.remove();
-};
-
-//비디오 팝업 열기
-function viewVideoPopup(id){
-	var $thisId = $("#"+id + ">.videoPopup");
-	var popW = parseInt( $thisId.children().attr("data-width") );
-	var popH = parseInt( $thisId.children().attr("data-height") );
-	var iframeSrc = 'https://www.youtube.com/embed/' + $("#video_url").val() + '?showinfo=0&rel=0&vp=hd1080&fs=0&wmode=opaque&enablejsapi=1';
-	$("#iframe_video").css({width:popW, height:popH});
-	$("#iframe_video").attr("src", iframeSrc+"?enablejsapi=1&version=3&playerapiid=ytplayer");
-	$("#"+id).css({display:"block"});
-};
-
-//SORTABLE LIST
-function unfnModeless(){
-	if ( $("#sortable").length > 0 ) {
-		var mainW = $("#main").width();
-		if ( $("#sortable").hasClass("sortable1") ) {
-			mainW =  ((mainW / 1) / mainW) * 100 ;
-		};
-		if ( $("#sortable").hasClass("sortable2") ) {
-			mainW =  ((mainW / 2) / mainW) * 100 ;
-		};
-		if ( $("#sortable").hasClass("sortable3") ) {
-			mainW =  ((mainW / 3) / mainW) * 100 ;
-		};
-		if ( $("#sortable").hasClass("sortable4") ) {
-			mainW =  ((mainW / 4) / mainW) * 100 ;
-		};
-		$(".secCell").css({"width":mainW +'%'});
-	};
-	$("#sortable").sortable();
-	$("#sortable").disableSelection();
-};
-
-//LNB 활성화&비활성화
-function lnbToggle(){
-	if ( $("#lnb-wrapper").hasClass("on") ){
-		$("#lnb-wrapper").removeClass("on");
-		$("#main-wrapper").removeClass("on");
-	} else {
-		$("#lnb-wrapper").addClass("on");
-		$("#main-wrapper").addClass("on");
-	};
-	setTimeout( chartResize, 300); //차트 리사이징
-};
-
-$(document).ready(function(){
-
-	//MODELESS POPUP : draggable
-	$(document).find(".draggable").draggable({containment:"#wrapper", scroll:false});
-
-
-	//chart resizing
-	$(window).resize(function(){
-		setTimeout( chartResize, 300);	//차트 리사이징
-	});
-
-	//체크박스(단일), 라디오버튼 : readOnly 처리
-	$(document).on("click", "[type=checkbox][readonly],[type=radio][readonly]", function(){
-		return false;
-	});
-
-	$(document).on("click", ".chkBox", function(e){
-		let cntId = $(this).parent().parent("ul").attr("data-count-id");
-		let cntLen;
-
-		if ( $(this).find("input").is('[id]') ){ // ---------------전체선택ID
-			let $id = $(this).find("input").attr("id");
-			if ( $(this).hasClass("checked") ) { //체크된 경우
-				$("input[id="+$id+"]").parent("label").removeClass("checked");
-				$("input[id="+$id+"]").prop("checked", false);
-				$("input[name="+$id+"]").parent("label").removeClass("checked");
-				$("input[name="+$id+"]").prop("checked", false);
-			} else {
-				$("input[id="+$id+"]").parent("label").addClass("checked");
-				$("input[id="+$id+"]").prop("checked", true);
-				$("input[name="+$id+"]").parent("label").addClass("checked");
-				$("input[name="+$id+"]").prop("checked", true);
-			};
-			//선택된 개수 출력 (checkBoxList)
-			if (cntId != undefined ) {
-				cntLen =  $("input[name="+$id+"]:checked").length; //체크된 개수
-				$("#"+cntId).text(cntLen);
-			};
-			return false;
-
-		} else {	// ---------------개별선택
-			let $name = $(this).find("input").attr("name");
-			let totLen = $("input[name="+$name+"]").length; //전체 개수
-			if ( $(this).hasClass("checked")) {
-				$(this).removeClass("checked");
-				$(this).find("input").prop("checked", false);
-				$("input[id="+$name+"]").prop("checked", false);
-				$("input[id="+$name+"]").parent("label").removeClass("checked");
-			} else {
-				$(this).addClass("checked");
-				$(this).find("input").prop("checked", true);
-				cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
-				if (totLen == cntLen ){
-					$("input[id="+$name+"]").prop("checked", true);
-					$("input[id="+$name+"]").parent("label").addClass("checked");
-				}
-			};
-			//선택된 개수 출력 (checkBoxList)
-			if (cntId != undefined ) {
-				cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
-				if (totLen > cntLen ) {
-					$("#"+cntId).text(cntLen);
-				} else if  (totLen == cntLen ) {
-					$("#"+cntId).text(totLen);
-				};
-			};
-			return false;
-		};
-	});
-
-
-	/* CheckBox List : More(+) 버튼 */
-	$(document).on("click", ".checkBoxList .more", function(){
-		var thisI = $(this).find("i");
-		if( $(thisI).hasClass("fa-plus") ){
-			$(this).parent().addClass("on");
-			$(thisI).removeClass("fa-plus").addClass("fa-minus");
-		} else {
-			$(this).parent().removeClass("on");
-			$(thisI).removeClass("fa-minus").addClass("fa-plus");
-		}
-	});
-
-	/* Multi CheckBox - 다중선택 체크박스 */
-	$(document).on("click", ".multiCheckBox .sltBtn", function(){
-		if($(this).hasClass("on")){
-			$(this).removeClass("on");
-			$(this).parent().find("ul").css({display:"none"});
-		}else{
-			$(".multiCheckBox .sltBtn").removeClass("on");
-			$(".multiCheckBox ul").css({display:"none"});
-			$(this).addClass("on");
-			$(this).parent().find("ul").css({display:"block"});
-		}
-	});
-
-	//햄버거버튼 : LNB 숨김(전체화면 보기)
-	$(document).on("click",".lnbClose",function(){
-		lnbToggle();
-	});
-
-	//GNB Memu
-	$(document).on("click",".header-menu .menu a",function(){
-		$(".header-menu .menu a").removeClass("on");
-		$(this).addClass("on");
-		var menuIdx = $(this).parent("span").index()+1;
-		$("#lnb"+menuIdx).addClass("on");
-		if( !$("#lnb-wrapper").hasClass("on") ){
-			lnbToggle(); // LNB Open
-		};
-	});
-
-	//LNB 서브메뉴 보기 : dep2
-	$(document).on("click",".dep2",function(){
-		if ($(this).hasClass("on")){	//활성화된 상태
-			$(this).removeClass("on");
-			$(this).next(".dep3").slideUp(200).removeClass("on");
-		} else {						//비활성화된 상태
-			$(this).addClass("on");
-			$(this).next(".dep3").slideDown(200).addClass("on");
-		};
-	});
-
-	//LNB 서브메뉴 보기 : dep3
-	$(document).on("click", ".dep3 > li > a", function(){
-		if ($(this).hasClass("on")==false){
-			$(".dep3 > li > a").removeClass("on");
-			$(this).addClass("on");
-		};
-	});
-
-	//다중셀렉박스 리스트 보이기,감추기
-	$(document).on("click", ".mSelected", function(){
-		$(this).find(".srchFld input").focus();
-	});
-	$(document).on("focusin", ".srchFld input", function(){
-		$(this).parents(".mSelected").next(".mSelecting").css({display:'block'});
-	});
-	$(document).on("focusout", ".mSelectBox", function(){
-		$(this).find(".mSelecting").slideUp(50);
-	});
-	//다중셀렉박스 리스트
-	$(document).on("mousedown", ".mSelectWrap .mSelecting ul li", function(){
-		if ( $(this).hasClass("deselect")==false ){
-			var dataIdx = $(this).attr("data-index");
-			var movePos = $(this).parents(".mSelecting").prev(".mSelected").find(".srchFld");
-			$(this).parents(".mSelecting").prev(".mSelected").find("li[data-index="+dataIdx+"]").removeClass("off").insertBefore(movePos);
-			$(this).parents(".mSelectWrap").find("select option[data-index="+dataIdx+"]").prop("selected", true);
-			$(".mSelecting").slideUp(50);
-			$(this).addClass("off");
-			return false;
-		};
-	});
-	//다중셀렉박스 닫기
-	$(document).on("click", ".mSelectWrap .mSelected li a", function(){
-		var dataIdx = $(this).parent("li").attr("data-index");
-		$(this).parents(".mSelected").next(".mSelecting").find("ul li[data-index="+dataIdx+"]").removeClass("off")
-		$(this).parents(".mSelectWrap").find("select option[data-index="+dataIdx+"]").prop("selected", false);
-		$(this).parent("li").addClass("off")
-		return false;
-	});
-
-	//TABS
-	$(document).on("click", ".tabs .tabsNav li", function(e){
-		e.preventDefault();
-		if ( !$(this).hasClass("on") ) {
-			let contIdx = $(this).index();
-			let pTab = $(this).parents(".tabs");
-			let thisTop = $(window).scrollTop();
-			pTab.find(".tabsNav li").removeClass("on");
-			pTab.find(".tabsCont > li").removeClass("on");
-			$(this).addClass("on");
-			pTab.find(".tabsCont > li").eq(contIdx).addClass("on");
-			$('html, body').animate({scrollTop:thisTop}, 'fast');
-		}
-	});
-
-	//TABSJR : 탭 하위 탭스
-	$(document).on("click", ".tabsJr .tabsJrNav li", function(e){
-		e.preventDefault();
-		if ( !$(this).hasClass("on") ) {
-			let contIdx = $(this).index();
-			let pTab = $(this).parents(".tabsJr");
-			let thisTop = $(window).scrollTop();
-			pTab.find(".tabsJrNav li").removeClass("on");
-			pTab.find(".tabsJrCont > li").removeClass("on");
-			$(this).addClass("on");
-			pTab.find(".tabsJrCont > li").eq(contIdx).addClass("on");
-			$('html, body').animate({scrollTop:thisTop}, 'fast');
-		}
-	});
-
-	//SORTABLE LIST
-	if ( $("#sortable").length > 0 ) {
-		var mainW = $("#main").width();
-		if ( $("#sortable").hasClass("sortable1") ) {
-			mainW =  ((mainW / 1) / mainW) * 100 ;
-		};
-		if ( $("#sortable").hasClass("sortable2") ) {
-			mainW =  ((mainW / 2) / mainW) * 100 ;
-		};
-		if ( $("#sortable").hasClass("sortable3") ) {
-			mainW =  ((mainW / 3) / mainW) * 100 ;
-		};
-		if ( $("#sortable").hasClass("sortable4") ) {
-			mainW =  ((mainW / 4) / mainW) * 100 ;
-		};
-		$(".secCell").css({"width":mainW +'%'});
-	};
-	$("#sortable").sortable();
-	$("#sortable").disableSelection();
-
-	//파일선택
-	$(document).on("change",".uFileInput", function() {
-		let fileName = $(this).val().split('\\').pop();
-		$(this).next('.uFileLabel').addClass("selected").html(fileName);
-	});
-
-	//베너 그룹 Up & Down
-	$(document).on("click",".groupBtn", function() {
-		var $gId = $(this).attr("id");
-		var $gIcn = $(this).find("i");
-		if ( $("table[data-child="+$gId+"]").hasClass("off") ){
-			$("table[data-child="+$gId+"]").removeClass("off");
-			$gIcn.attr("class","fa fa-chevron-down");
-		} else  {
-			$("table[data-child="+$gId+"]").addClass("off");
-			$gIcn.attr("class","fa fa-chevron-up");
-		};
-	});
-
-	//비디오팝업 배경 클릭시 닫기
-	$(document).on("click",".videoClose", function() {
-		var vId = $(this).attr("id");
-		$("#"+vId).css({display:"none"});
-		$("#"+vId).find("iframe").attr("src","");
-	});
-
-	//상단이동 버튼
-	$(document).on("click","#btnTop", function() {
-		$('html, body').animate({scrollTop:'0'}, 200);
-	});
-
-	//다중셀렉트박스 포커스인(접근성)
-	$(document).on("focusin",".srchFld", function() {
-		$(this).parents(".mSelectBox").addClass("outline");
-	});
-	//다중셀렉트박스 포커스아웃(접근성)
-	$(document).on("focusout",".srchFld", function() {
-		$(this).parents(".mSelectBox").removeClass("outline");
-	});
-
-	//패널영역 줄이기
-	$(document).on("click",".panelControl .fa-chevron-up", function() {
-		$(this).parents(".panelStyle").find(".panelContent").slideUp(100);
-		$(this).attr("class","fa fa-chevron-down");
-	});
-	//패널영역 펼치기
-	$(document).on("click",".panelControl .fa-chevron-down", function() {
-		$(this).parents(".panelStyle").find(".panelContent").slideDown(100);
-		$(this).attr("class","fa fa-chevron-up");
-	});
-
-	//패널영역 감추기
-	$(document).on("click",".panelControl .fa-times", function() {
-		$(this).parents(".panelStyle").fadeOut(100);
-	});
-
-
-	//Date Picker Start -----------------------------------------------------------
-	function initDatePickers() {
-		// datepicker Korean option
-		$.datepicker.regional['ko'] = {
-			monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
-			monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
-			dayNames: ['일', '월', '화', '수', '목', '금', '토'],
-			dayNamesShort: ['일', '월', '화', '수', '목', '금', '토'],
-			dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],
-			dateFormat: 'yy-mm-dd',
-			firstDay: 1,
-			//isRTL: false,
-			//duration: 200,
-			//showAnim: 'show',
-			showMonthAfterYear: true,
-			yearSuffix: '년 ',
-			prevText: '이전달',
-			nextText: '다음달',
-			//showButtonPanel: true,
-			//currentText: '오늘',
-			//closeText: '닫기',
-			showOn: 'both',
-			buttonImage:'image/btn_calendar.png'
-			//,buttonImageOnly: true
-		};
-		$.datepicker.setDefaults($.datepicker.regional['ko']);
-		$('.schDate').datepicker({
-			changeMonth: true,
-			changeYear: true,
-			defaultDate: $('.schDate').val()
-		});
-		// monthpicker and year selector start/end year (10 year ago)
-		var currentYear = (new Date()).getFullYear();
-		var startYear = currentYear - 10;
-		var finalYear = currentYear + 10;
-		var options = {
-			startYear: startYear,
-			finalYear: finalYear,
-			pattern: 'yyyy-mm',
-			monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']
-		};
-		$('.schMonth').monthpicker(options);
-		// make year selector
-		for (var i = finalYear; i >= startYear; i--) {
-			if (currentYear == i ) {
-				$(".schYear").append("<option value='" + i + "' selected class='ui-state-highlight'>" + i + "</option>");
-			} else {
-				$('.schYear').append("<option value='" + i + "'>" + i + "</option>");
-			}
-		}
-	};
-	$(function() {
-		(function($) {
-			var methods = {
-				init: function(options) {
-					return this.each(function() {
-						var $this = $(this),
-							data = $this.data('monthpicker'),
-							year = (options && options.year) ? options.year : (new Date()).getFullYear(),
-							settings = $.extend({
-								pattern: 'yyyy-mm',
-								selectedMonth: null,
-								selectedMonthName: '',
-								selectedYear: year,
-								startYear: year - 10,
-								finalYear: year + 10,
-								monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
-								id: "monthpicker_" + (Math.random() * Math.random()).toString().replace('.', ''),
-								openOnFocus: true,
-								disabledMonths: []
-							}, options);
-						settings.dateSeparator = settings.pattern.replace(/(mmm|mm|m|yyyy|yy|y)/ig, '');
-						// If the plugin hasn't been initialized yet for this element
-						if (!data) {
-							$(this).data('monthpicker', {
-								'target': $this,
-								'settings': settings
-							});
-							if (settings.openOnFocus === true) {
-								$this.on('focus', function() {
-									$this.monthpicker('show');
-								});
-							}
-							$this.monthpicker('parseInputValue', settings);
-							$this.monthpicker('mountWidget', settings);
-							$this.on('monthpicker-click-month', function(e, month, year) {
-								$this.monthpicker('setValue', settings);
-								$this.monthpicker('hide');
-							});
-							// hide widget when user clicks elsewhere on page
-							$this.addClass("mtz-monthpicker-widgetcontainer");
-							$(document).unbind("mousedown.mtzmonthpicker").on("mousedown.mtzmonthpicker", function(e) {
-								if (!e.target.className || e.target.className.toString().indexOf('mtz-monthpicker') < 0) {
-									$(this).monthpicker('hideAll');
-								}
-							});
-						}
-					});
-				},
-				show: function() {
-					$(this).monthpicker('hideAll');
-					var widget = $('#' + this.data('monthpicker').settings.id);
-					widget.css("top", this.offset().top + this.outerHeight());
-					if ($(window).width() > (widget.width() + this.offset().left)) {
-						widget.css("left", this.offset().left);
-					} else {
-						widget.css("left", this.offset().left - widget.width());
-					}
-					widget.show();
-					//widget.find('select').focus();
-					this.trigger('monthpicker-show');
-				},
-				hide: function() {
-					var widget = $('#' + this.data('monthpicker').settings.id);
-					if (widget.is(':visible')) {
-						widget.hide();
-						this.trigger('monthpicker-hide');
-					}
-				},
-				hideAll: function() {
-					$(".mtz-monthpicker-widgetcontainer").each(function() {
-						if (typeof($(this).data("monthpicker")) != "undefined") {
-							$(this).monthpicker('hide');
-						}
-					});
-				},
-				setValue: function(settings) {
-					var month = settings.selectedMonth,
-						year = settings.selectedYear;
-					if (settings.pattern.indexOf('mmm') >= 0) {
-						month = settings.selectedMonthName;
-					} else if (settings.pattern.indexOf('mm') >= 0 && settings.selectedMonth < 10) {
-						month = '0' + settings.selectedMonth;
-					};
-					if (settings.pattern.indexOf('yyyy') < 0) {
-						year = year.toString().substr(2, 2);
-					};
-					if (settings.pattern.indexOf('y') > settings.pattern.indexOf(settings.dateSeparator)) {
-						this.val(month + settings.dateSeparator + year);
-					} else {
-						this.val(year + settings.dateSeparator + month);
-					};
-					this.change();
-				},
-				disableMonths: function(months) {
-					var settings = this.data('monthpicker').settings,
-						container = $('#' + settings.id);
-					settings.disabledMonths = months;
-					container.find('.mtz-monthpicker-month').each(function() {
-						var m = parseInt($(this).data('month'));
-						if ($.inArray(m, months) >= 0) {
-							$(this).addClass('ui-state-disabled');
-						} else {
-							$(this).removeClass('ui-state-disabled');
-						}
-					});
-				},
-				mountWidget: function(settings) {
-					var monthpicker = this,
-						container = $('<div id="' + settings.id + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" />'),
-						header = $('<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all mtz-monthpicker" />'),
-						combo = $('<select class="mtz-monthpicker mtz-monthpicker-year" />'),
-						table = $('<table class="mtz-monthpicker" />'),
-						tbody = $('<tbody class="mtz-monthpicker" />'),
-						tr = $('<tr class="mtz-monthpicker" />'),
-						td = '',
-						selectedYear = settings.selectedYear,
-						option = null,
-						attrSelectedYear = $(this).data('selected-year'),
-						attrStartYear = $(this).data('start-year'),
-						attrFinalYear = $(this).data('final-year'),
-						currYear = date.getFullYear();
-						currMonth = date.getMonth()+1;
-					if (attrSelectedYear) {
-						settings.selectedYear = attrSelectedYear;
-					}
-					if (attrStartYear) {
-						settings.startYear = attrStartYear;
-					}
-					if (attrFinalYear) {
-						settings.finalYear = attrFinalYear;
-					}
-					container.css({
-						position: 'absolute',
-						//zIndex: 999999,
-						whiteSpace: 'nowrap',
-						//width: '250px',
-						overflow: 'hidden',
-						textAlign: 'center',
-						display: 'none',
-						top: monthpicker.offset().top + monthpicker.outerHeight(),
-						left: monthpicker.offset().left
-					});
-					combo.on('change', function() {
-						var months = $(this).parent().parent().find('td[data-month]');
-						months.removeClass('ui-state-highlight');
-						months.removeClass('ui-state-active');
-						if ($(this).val() == settings.selectedYear) {
-							months.filter('td[data-month=' + settings.selectedMonth + ']').addClass('ui-state-active');
-						}
-						//alert($(this).val() +','+ currYear);
-						if ($(this).val() == currYear)  {
-							months.filter('td[data-month=' + currMonth + ']').addClass('ui-state-highlight');
-						}
-						monthpicker.trigger('monthpicker-change-year', $(this).val());
-					});
-					// mount years combo
-					for (var i = settings.startYear; i <= settings.finalYear; i++) {
-						var option = $('<option class="mtz-monthpicker" />').attr('value', i).append(i);
-						if (settings.selectedYear == i) {
-							option.attr('selected', 'selected');
-						}
-						combo.append(option);
-					}
-					header.append(combo).appendTo(container);
-					header.append('년').appendTo(container);
-					// mount months table
-					for (var i = 1; i <= 12; i++) {
-						td = $('<td class="ui-state-default mtz-monthpicker mtz-monthpicker-month"/>').attr('data-month', i);
-						if (settings.selectedMonth == i) {
-							td.addClass('ui-state-active');
-						}
-						if (settings.selectedYear == currYear && settings.selectedMonth == i) {
-							td.addClass('ui-state-highlight');
-						}
-						td.append(settings.monthNames[i - 1]);
-						tr.append(td).appendTo(tbody);
-						if (i % 3 === 0) {
-							tr = $('<tr class="mtz-monthpicker" />');
-						}
-					}
-					tbody.find('.mtz-monthpicker-month').on('click', function() {
-						var m = parseInt($(this).data('month'));
-						if ($.inArray(m, settings.disabledMonths) < 0) {
-							settings.selectedYear = $(this).closest('.ui-datepicker').find('.mtz-monthpicker-year').first().val();
-							settings.selectedMonth = $(this).data('month');
-							settings.selectedMonthName = $(this).text();
-							monthpicker.trigger('monthpicker-click-month', $(this).data('month'));
-							$(this).closest('table').find('.ui-state-active').removeClass('ui-state-active');
-							$(this).addClass('ui-state-active');
-						}
-					});
-					table.append(tbody).appendTo(container);
-					container.appendTo('body');
-				},
-				destroy: function() {
-					return this.each(function() {
-						$(this).removeClass('mtz-monthpicker-widgetcontainer').unbind('focus').removeData('monthpicker');
-					});
-				},
-				getDate: function() {
-					var settings = this.data('monthpicker').settings;
-					if (settings.selectedMonth && settings.selectedYear) {
-						return new Date(settings.selectedYear, settings.selectedMonth - 1);
-					} else {
-						return null;
-					}
-				},
-				parseInputValue: function(settings) {
-					if (this.val()) {
-						if (settings.dateSeparator) {
-							var val = this.val().toString().split(settings.dateSeparator);
-							if (settings.pattern.indexOf('m') === 0) {
-								settings.selectedMonth = val[0];
-								settings.selectedYear = val[1];
-							} else {
-								settings.selectedMonth = val[1];
-								settings.selectedYear = val[0];
-							}
-						}
-					}
-				}
-			};
-			$.fn.monthpicker = function(method) {
-				if (methods[method]) {
-					return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
-				} else if (typeof method === 'object' || !method) {
-					return methods.init.apply(this, arguments);
-				} else {
-					$.error('Method ' + method + ' does not exist on jQuery.mtz.monthpicker');
-				}
-			};
-		})(jQuery);
-		Date.prototype.yyyymmdd = function() {
-			var mm = this.getMonth() + 1; // getMonth() is zero-based
-			var dd = this.getDate();
-
-			return [this.getFullYear(),
-							(mm>9 ? '' : '0') + mm,
-							(dd>9 ? '' : '0') + dd
-						 ].join('-');
-		};
-		var date = new Date();
-		var schDate = date.yyyymmdd();
-		$('.schDate').val(schDate);
-		$('.schMonth').val(schDate.substr(0,7));
-		initDatePickers();
-	});
-
-	//년-월
-	$(".schBtn").on('click', function () {
-		var thisId= $(this).attr("data-id");
-		$('#'+thisId).monthpicker('show');
-	});
-	//Date Picker End-----------------------------------------------------------
-
-
-
-
-
-
-
-
-
+//로그인 유효성체크 ALERT
+function uifnAlertClose(id){
+	$("#"+id).css({display:'none'});
+	return true;
+};
+
+//차트 리사이징
+function chartResize(){
+	if ( $(document).find(".chartUnit").length > 0 ) {
+		let elLen = $(".chartUnit").length;
+		for (let i=0; i<elLen; i++){
+			let thisId = eval($(".chartUnit").eq(i).attr("id"));
+			let liW = Math.floor( $(".chartUnit").eq(i).parent("li").width());
+			thisId.resize({width:liW});
+			$(".c3-regions rect").attr("width",liW);
+		}
+	}
+};
+
+//MODAL & MODELESS POPUP 열기
+function uifnPopupOpen(id){
+	let $thisId = $(document).find("#"+id); //팝업ID
+	let $fisrtChild = $thisId.children().first("div"); //modal or modeless
+	let $firstPanel = $fisrtChild.find(">.panelStyle"); //first Panel
+	let popW, popH;
+
+	//넓이
+	if ($fisrtChild.attr("data-width")) { //지정
+		popW = parseInt( $fisrtChild.attr("data-width"));
+		if ( isNaN(popW) ){ //full
+			popW = $(window).width()-100;
+		}
+		$firstPanel.css({width:popW});
+	} else { //auto
+		popW = $fisrtChild.width();
+		let maxW = $(window).width()-100;
+		$firstPanel.css({maxWidth:maxW});
+	};
+
+	//높이
+	if ( $fisrtChild.attr("data-height") ) { //지정
+		popH = parseInt( $fisrtChild.attr("data-height"));
+		if ( isNaN(popH) ){ //full
+			popH = $(window).height()-100;
+		}
+		$firstPanel.css({height:popH});
+	} else { //auto
+		popH = $fisrtChild.height();
+		let maxH = $(window).height()-100;
+		$firstPanel.css({maxHeight:maxH});
+	};
+
+	//팝업 Open
+	$thisId.children("div").css({display:"block"});
+	$("body").addClass("scrollOff");
+
+	//Modeless 위치
+	if ($fisrtChild.hasClass("modelessPopup")){
+		let popL = parseInt($fisrtChild.css("left")) - popW/2;
+		let popT = parseInt($fisrtChild.css("top")) - popH/2;
+		$fisrtChild.css({left:popL, top:popT});
+	};
+
+	//내부에 cardArea(이미지카드) 존재 : cardArea 컨텐츠 높이
+	if ($thisId.find(".cardArea").length > 0) {
+		let noticeH = 0;
+		//공지 높이
+		if ($firstPanel.find(".notice").length > 0){
+			let noticeLen =  $thisId.children(":first").find(".notice li").length;
+			noticeH = (noticeLen*24) + 30;
+		};
+		if ($thisId.children(":first").find(".panelBar").length > 0 ){ btnAreaH = 52 };
+		popH = $firstPanel.height();
+		let cardAreaH = popH-42-noticeH-37-43; //높이계산 : 팝업-타이틀 높이 - 안내문 높이 - 컬러명(테이블 첫행)높이 - 기타버튼영역
+		$(".cardArea").css({height:cardAreaH});
+	};
+
+	//내부에 Tabs 존재 : Tabs 컨텐츠 높이
+	if ( $firstPanel.find(".tabs").length > 0) {
+		let topTbl=0, btnAreaH=0;
+		if ( $fisrtChild.hasClass("modelessPopup") ){ //모덜리스팝업
+			popH = $fisrtChild.height();
+		} else { //모달팝업
+			popH = $firstPanel.height();
+		};
+		if ( $firstPanel.find(".panelContent > .frmStyle:eq(0)").length > 0 ){
+			topTbl = $firstPanel.find(".panelContent > .frmStyle:eq(0)").outerHeight() + 15;
+		};
+		if ( $firstPanel.find(".tabs > .panelBar").length > 0 ){
+			 btnAreaH = $firstPanel.find(".tabs > .panelBar").outerHeight();
+		};
+		let tabContH = popH - 42 - topTbl - 35 - 25 - btnAreaH; //높이계산 : 팝업높이-타이틀-상단테이블-탭스높이-하단여백-버튼영역높이
+		$firstPanel.find(".panelContent .tab > .panelStyle").css({height:tabContH});
+	};
+};
+
+//POPUP CLOSE
+function uifnPopupClose(id) {
+	var $thisId = $("#"+id);
+	if ( $thisId.hasClass("popupWrap") ) { //모달, 모덜리스  팝업
+		$thisId.children("div").css({display:"none"});
+		$thisId.children("div").remove();
+		var modalLen = $(".modalPopup[style='display:block;']").length;
+		var modalessLen = $(".modalPopup[style='display:block;']").length;
+		if ( modalLen == 0 && modalessLen ==0 ){
+			$("body").removeClass("scrollOff");
+		};
+	} else if ( $thisId.hasClass("videoPopup") ) {  //비디오팝업
+		$thisId.css({display:"none"});
+		$("#iframe_video").attr("src","");
+	};
+	$thisId.remove();
+};
+
+//비디오 팝업 열기
+function viewVideoPopup(id){
+	var $thisId = $("#"+id + ">.videoPopup");
+	var popW = parseInt( $thisId.children().attr("data-width") );
+	var popH = parseInt( $thisId.children().attr("data-height") );
+	var iframeSrc = 'https://www.youtube.com/embed/' + $("#video_url").val() + '?showinfo=0&rel=0&vp=hd1080&fs=0&wmode=opaque&enablejsapi=1';
+	$("#iframe_video").css({width:popW, height:popH});
+	$("#iframe_video").attr("src", iframeSrc+"?enablejsapi=1&version=3&playerapiid=ytplayer");
+	$("#"+id).css({display:"block"});
+};
+
+//SORTABLE LIST
+function unfnModeless(){
+	if ( $("#sortable").length > 0 ) {
+		var mainW = $("#main").width();
+		if ( $("#sortable").hasClass("sortable1") ) {
+			mainW =  ((mainW / 1) / mainW) * 100 ;
+		};
+		if ( $("#sortable").hasClass("sortable2") ) {
+			mainW =  ((mainW / 2) / mainW) * 100 ;
+		};
+		if ( $("#sortable").hasClass("sortable3") ) {
+			mainW =  ((mainW / 3) / mainW) * 100 ;
+		};
+		if ( $("#sortable").hasClass("sortable4") ) {
+			mainW =  ((mainW / 4) / mainW) * 100 ;
+		};
+		$(".secCell").css({"width":mainW +'%'});
+	};
+	$("#sortable").sortable();
+	$("#sortable").disableSelection();
+};
+
+//LNB 활성화&비활성화
+function lnbToggle(){
+	if ( $("#lnb-wrapper").hasClass("on") ){
+		$("#lnb-wrapper").removeClass("on");
+		$("#main-wrapper").removeClass("on");
+	} else {
+		$("#lnb-wrapper").addClass("on");
+		$("#main-wrapper").addClass("on");
+	};
+	setTimeout( chartResize, 300); //차트 리사이징
+};
+
+$(document).ready(function(){
+
+	//MODELESS POPUP : draggable
+	$(document).find(".draggable").draggable({containment:"#wrapper", scroll:false});
+
+
+	//chart resizing
+	$(window).resize(function(){
+		setTimeout( chartResize, 300);	//차트 리사이징
+	});
+
+	//체크박스(단일), 라디오버튼 : readOnly 처리
+	$(document).on("click", "[type=checkbox][readonly],[type=radio][readonly]", function(){
+		return false;
+	});
+
+	$(document).on("click", ".chkBox", function(e){
+		let cntId = $(this).parent().parent("ul").attr("data-count-id");
+		let cntLen;
+
+		if ( $(this).find("input").is('[id]') ){ // ---------------전체선택ID
+			let $id = $(this).find("input").attr("id");
+			if ( $(this).hasClass("checked") ) { //체크된 경우
+				$("input[id="+$id+"]").parent("label").removeClass("checked");
+				$("input[id="+$id+"]").prop("checked", false);
+				$("input[name="+$id+"]").parent("label").removeClass("checked");
+				$("input[name="+$id+"]").prop("checked", false);
+			} else {
+				$("input[id="+$id+"]").parent("label").addClass("checked");
+				$("input[id="+$id+"]").prop("checked", true);
+				$("input[name="+$id+"]").parent("label").addClass("checked");
+				$("input[name="+$id+"]").prop("checked", true);
+			};
+			//선택된 개수 출력 (checkBoxList)
+			if (cntId != undefined ) {
+				cntLen =  $("input[name="+$id+"]:checked").length; //체크된 개수
+				$("#"+cntId).text(cntLen);
+			};
+			return false;
+
+		} else {	// ---------------개별선택
+			let $name = $(this).find("input").attr("name");
+			let totLen = $("input[name="+$name+"]").length; //전체 개수
+			if ( $(this).hasClass("checked")) {
+				$(this).removeClass("checked");
+				$(this).find("input").prop("checked", false);
+				$("input[id="+$name+"]").prop("checked", false);
+				$("input[id="+$name+"]").parent("label").removeClass("checked");
+			} else {
+				$(this).addClass("checked");
+				$(this).find("input").prop("checked", true);
+				cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
+				if (totLen == cntLen ){
+					$("input[id="+$name+"]").prop("checked", true);
+					$("input[id="+$name+"]").parent("label").addClass("checked");
+				}
+			};
+			//선택된 개수 출력 (checkBoxList)
+			if (cntId != undefined ) {
+				cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
+				if (totLen > cntLen ) {
+					$("#"+cntId).text(cntLen);
+				} else if  (totLen == cntLen ) {
+					$("#"+cntId).text(totLen);
+				};
+			};
+			return false;
+		};
+	});
+
+
+	/* CheckBox List : More(+) 버튼 */
+	$(document).on("click", ".checkBoxList .more", function(){
+		var thisI = $(this).find("i");
+		if( $(thisI).hasClass("fa-plus") ){
+			$(this).parent().addClass("on");
+			$(thisI).removeClass("fa-plus").addClass("fa-minus");
+		} else {
+			$(this).parent().removeClass("on");
+			$(thisI).removeClass("fa-minus").addClass("fa-plus");
+		}
+	});
+
+	/* Multi CheckBox - 다중선택 체크박스 */
+	$(document).on("click", ".multiCheckBox .sltBtn", function(){
+		if($(this).hasClass("on")){
+			$(this).removeClass("on");
+			$(this).parent().find("ul").css({display:"none"});
+		}else{
+			$(".multiCheckBox .sltBtn").removeClass("on");
+			$(".multiCheckBox ul").css({display:"none"});
+			$(this).addClass("on");
+			$(this).parent().find("ul").css({display:"block"});
+		}
+	});
+
+	//햄버거버튼 : LNB 숨김(전체화면 보기)
+	$(document).on("click",".lnbClose",function(){
+		lnbToggle();
+	});
+
+	//GNB Memu
+	$(document).on("click",".header-menu .menu a",function(){
+		$(".header-menu .menu a").removeClass("on");
+		$(this).addClass("on");
+		var menuIdx = $(this).parent("span").index()+1;
+		$("#lnb"+menuIdx).addClass("on");
+		if( !$("#lnb-wrapper").hasClass("on") ){
+			lnbToggle(); // LNB Open
+		};
+	});
+
+	//LNB 서브메뉴 보기 : dep2
+	$(document).on("click",".dep2",function(){
+		if ($(this).hasClass("on")){	//활성화된 상태
+			$(this).removeClass("on");
+			$(this).next(".dep3").slideUp(200).removeClass("on");
+		} else {						//비활성화된 상태
+			$(this).addClass("on");
+			$(this).next(".dep3").slideDown(200).addClass("on");
+		};
+	});
+
+	//LNB 서브메뉴 보기 : dep3
+	$(document).on("click", ".dep3 > li > a", function(){
+		if ($(this).hasClass("on")==false){
+			$(".dep3 > li > a").removeClass("on");
+			$(this).addClass("on");
+		};
+	});
+
+	//다중셀렉박스 리스트 보이기,감추기
+	$(document).on("click", ".mSelected", function(){
+		$(this).find(".srchFld input").focus();
+	});
+	$(document).on("focusin", ".srchFld input", function(){
+		$(this).parents(".mSelected").next(".mSelecting").css({display:'block'});
+	});
+	$(document).on("focusout", ".mSelectBox", function(){
+		$(this).find(".mSelecting").slideUp(50);
+	});
+	//다중셀렉박스 리스트
+	$(document).on("mousedown", ".mSelectWrap .mSelecting ul li", function(){
+		if ( $(this).hasClass("deselect")==false ){
+			var dataIdx = $(this).attr("data-index");
+			var movePos = $(this).parents(".mSelecting").prev(".mSelected").find(".srchFld");
+			$(this).parents(".mSelecting").prev(".mSelected").find("li[data-index="+dataIdx+"]").removeClass("off").insertBefore(movePos);
+			$(this).parents(".mSelectWrap").find("select option[data-index="+dataIdx+"]").prop("selected", true);
+			$(".mSelecting").slideUp(50);
+			$(this).addClass("off");
+			return false;
+		};
+	});
+	//다중셀렉박스 닫기
+	$(document).on("click", ".mSelectWrap .mSelected li a", function(){
+		var dataIdx = $(this).parent("li").attr("data-index");
+		$(this).parents(".mSelected").next(".mSelecting").find("ul li[data-index="+dataIdx+"]").removeClass("off")
+		$(this).parents(".mSelectWrap").find("select option[data-index="+dataIdx+"]").prop("selected", false);
+		$(this).parent("li").addClass("off")
+		return false;
+	});
+
+	//TABS
+	$(document).on("click", ".tabs .tabsNav li", function(e){
+		e.preventDefault();
+		if ( !$(this).hasClass("on") ) {
+			let contIdx = $(this).index();
+			let pTab = $(this).parents(".tabs");
+			let thisTop = $(window).scrollTop();
+			pTab.find(".tabsNav li").removeClass("on");
+			pTab.find(".tabsCont > li").removeClass("on");
+			$(this).addClass("on");
+			pTab.find(".tabsCont > li").eq(contIdx).addClass("on");
+			$('html, body').animate({scrollTop:thisTop}, 'fast');
+		}
+	});
+
+	//TABSJR : 탭 하위 탭스
+	$(document).on("click", ".tabsJr .tabsJrNav li", function(e){
+		e.preventDefault();
+		if ( !$(this).hasClass("on") ) {
+			let contIdx = $(this).index();
+			let pTab = $(this).parents(".tabsJr");
+			let thisTop = $(window).scrollTop();
+			pTab.find(".tabsJrNav li").removeClass("on");
+			pTab.find(".tabsJrCont > li").removeClass("on");
+			$(this).addClass("on");
+			pTab.find(".tabsJrCont > li").eq(contIdx).addClass("on");
+			$('html, body').animate({scrollTop:thisTop}, 'fast');
+		}
+	});
+
+	//SORTABLE LIST
+	if ( $("#sortable").length > 0 ) {
+		var mainW = $("#main").width();
+		if ( $("#sortable").hasClass("sortable1") ) {
+			mainW =  ((mainW / 1) / mainW) * 100 ;
+		};
+		if ( $("#sortable").hasClass("sortable2") ) {
+			mainW =  ((mainW / 2) / mainW) * 100 ;
+		};
+		if ( $("#sortable").hasClass("sortable3") ) {
+			mainW =  ((mainW / 3) / mainW) * 100 ;
+		};
+		if ( $("#sortable").hasClass("sortable4") ) {
+			mainW =  ((mainW / 4) / mainW) * 100 ;
+		};
+		$(".secCell").css({"width":mainW +'%'});
+	};
+	$("#sortable").sortable();
+	$("#sortable").disableSelection();
+
+	//파일선택
+	$(document).on("change",".uFileInput", function() {
+		let fileName = $(this).val().split('\\').pop();
+		$(this).next('.uFileLabel').addClass("selected").html(fileName);
+	});
+
+	//베너 그룹 Up & Down
+	$(document).on("click",".groupBtn", function() {
+		var $gId = $(this).attr("id");
+		var $gIcn = $(this).find("i");
+		if ( $("table[data-child="+$gId+"]").hasClass("off") ){
+			$("table[data-child="+$gId+"]").removeClass("off");
+			$gIcn.attr("class","fa fa-chevron-down");
+		} else  {
+			$("table[data-child="+$gId+"]").addClass("off");
+			$gIcn.attr("class","fa fa-chevron-up");
+		};
+	});
+
+	//비디오팝업 배경 클릭시 닫기
+	$(document).on("click",".videoClose", function() {
+		var vId = $(this).attr("id");
+		$("#"+vId).css({display:"none"});
+		$("#"+vId).find("iframe").attr("src","");
+	});
+
+	//상단이동 버튼
+	$(document).on("click","#btnTop", function() {
+		$('html, body').animate({scrollTop:'0'}, 200);
+	});
+
+	//다중셀렉트박스 포커스인(접근성)
+	$(document).on("focusin",".srchFld", function() {
+		$(this).parents(".mSelectBox").addClass("outline");
+	});
+	//다중셀렉트박스 포커스아웃(접근성)
+	$(document).on("focusout",".srchFld", function() {
+		$(this).parents(".mSelectBox").removeClass("outline");
+	});
+
+	//패널영역 줄이기
+	$(document).on("click",".panelControl .fa-chevron-up", function() {
+		$(this).parents(".panelStyle").find(".panelContent").slideUp(100);
+		$(this).attr("class","fa fa-chevron-down");
+	});
+	//패널영역 펼치기
+	$(document).on("click",".panelControl .fa-chevron-down", function() {
+		$(this).parents(".panelStyle").find(".panelContent").slideDown(100);
+		$(this).attr("class","fa fa-chevron-up");
+	});
+
+	//패널영역 감추기
+	$(document).on("click",".panelControl .fa-times", function() {
+		$(this).parents(".panelStyle").fadeOut(100);
+	});
+
+
+	//Date Picker Start -----------------------------------------------------------
+	function initDatePickers() {
+		// datepicker Korean option
+		$.datepicker.regional['ko'] = {
+			monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
+			monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
+			dayNames: ['일', '월', '화', '수', '목', '금', '토'],
+			dayNamesShort: ['일', '월', '화', '수', '목', '금', '토'],
+			dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],
+			dateFormat: 'yy-mm-dd',
+			firstDay: 1,
+			//isRTL: false,
+			//duration: 200,
+			//showAnim: 'show',
+			showMonthAfterYear: true,
+			yearSuffix: '년 ',
+			prevText: '이전달',
+			nextText: '다음달',
+			//showButtonPanel: true,
+			//currentText: '오늘',
+			//closeText: '닫기',
+			showOn: 'both',
+			buttonImage:'image/btn_calendar.png'
+			//,buttonImageOnly: true
+		};
+		$.datepicker.setDefaults($.datepicker.regional['ko']);
+		$('.schDate').datepicker({
+			changeMonth: true,
+			changeYear: true,
+			defaultDate: $('.schDate').val()
+		});
+		// monthpicker and year selector start/end year (10 year ago)
+		var currentYear = (new Date()).getFullYear();
+		var startYear = currentYear - 10;
+		var finalYear = currentYear + 10;
+		var options = {
+			startYear: startYear,
+			finalYear: finalYear,
+			pattern: 'yyyy-mm',
+			monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']
+		};
+		$('.schMonth').monthpicker(options);
+		// make year selector
+		for (var i = finalYear; i >= startYear; i--) {
+			if (currentYear == i ) {
+				$(".schYear").append("<option value='" + i + "' selected class='ui-state-highlight'>" + i + "</option>");
+			} else {
+				$('.schYear').append("<option value='" + i + "'>" + i + "</option>");
+			}
+		}
+	};
+	$(function() {
+		(function($) {
+			var methods = {
+				init: function(options) {
+					return this.each(function() {
+						var $this = $(this),
+							data = $this.data('monthpicker'),
+							year = (options && options.year) ? options.year : (new Date()).getFullYear(),
+							settings = $.extend({
+								pattern: 'yyyy-mm',
+								selectedMonth: null,
+								selectedMonthName: '',
+								selectedYear: year,
+								startYear: year - 10,
+								finalYear: year + 10,
+								monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
+								id: "monthpicker_" + (Math.random() * Math.random()).toString().replace('.', ''),
+								openOnFocus: true,
+								disabledMonths: []
+							}, options);
+						settings.dateSeparator = settings.pattern.replace(/(mmm|mm|m|yyyy|yy|y)/ig, '');
+						// If the plugin hasn't been initialized yet for this element
+						if (!data) {
+							$(this).data('monthpicker', {
+								'target': $this,
+								'settings': settings
+							});
+							if (settings.openOnFocus === true) {
+								$this.on('focus', function() {
+									$this.monthpicker('show');
+								});
+							}
+							$this.monthpicker('parseInputValue', settings);
+							$this.monthpicker('mountWidget', settings);
+							$this.on('monthpicker-click-month', function(e, month, year) {
+								$this.monthpicker('setValue', settings);
+								$this.monthpicker('hide');
+							});
+							// hide widget when user clicks elsewhere on page
+							$this.addClass("mtz-monthpicker-widgetcontainer");
+							$(document).unbind("mousedown.mtzmonthpicker").on("mousedown.mtzmonthpicker", function(e) {
+								if (!e.target.className || e.target.className.toString().indexOf('mtz-monthpicker') < 0) {
+									$(this).monthpicker('hideAll');
+								}
+							});
+						}
+					});
+				},
+				show: function() {
+					$(this).monthpicker('hideAll');
+					var widget = $('#' + this.data('monthpicker').settings.id);
+					widget.css("top", this.offset().top + this.outerHeight());
+					if ($(window).width() > (widget.width() + this.offset().left)) {
+						widget.css("left", this.offset().left);
+					} else {
+						widget.css("left", this.offset().left - widget.width());
+					}
+					widget.show();
+					//widget.find('select').focus();
+					this.trigger('monthpicker-show');
+				},
+				hide: function() {
+					var widget = $('#' + this.data('monthpicker').settings.id);
+					if (widget.is(':visible')) {
+						widget.hide();
+						this.trigger('monthpicker-hide');
+					}
+				},
+				hideAll: function() {
+					$(".mtz-monthpicker-widgetcontainer").each(function() {
+						if (typeof($(this).data("monthpicker")) != "undefined") {
+							$(this).monthpicker('hide');
+						}
+					});
+				},
+				setValue: function(settings) {
+					var month = settings.selectedMonth,
+						year = settings.selectedYear;
+					if (settings.pattern.indexOf('mmm') >= 0) {
+						month = settings.selectedMonthName;
+					} else if (settings.pattern.indexOf('mm') >= 0 && settings.selectedMonth < 10) {
+						month = '0' + settings.selectedMonth;
+					};
+					if (settings.pattern.indexOf('yyyy') < 0) {
+						year = year.toString().substr(2, 2);
+					};
+					if (settings.pattern.indexOf('y') > settings.pattern.indexOf(settings.dateSeparator)) {
+						this.val(month + settings.dateSeparator + year);
+					} else {
+						this.val(year + settings.dateSeparator + month);
+					};
+					this.change();
+				},
+				disableMonths: function(months) {
+					var settings = this.data('monthpicker').settings,
+						container = $('#' + settings.id);
+					settings.disabledMonths = months;
+					container.find('.mtz-monthpicker-month').each(function() {
+						var m = parseInt($(this).data('month'));
+						if ($.inArray(m, months) >= 0) {
+							$(this).addClass('ui-state-disabled');
+						} else {
+							$(this).removeClass('ui-state-disabled');
+						}
+					});
+				},
+				mountWidget: function(settings) {
+					var monthpicker = this,
+						container = $('<div id="' + settings.id + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" />'),
+						header = $('<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all mtz-monthpicker" />'),
+						combo = $('<select class="mtz-monthpicker mtz-monthpicker-year" />'),
+						table = $('<table class="mtz-monthpicker" />'),
+						tbody = $('<tbody class="mtz-monthpicker" />'),
+						tr = $('<tr class="mtz-monthpicker" />'),
+						td = '',
+						selectedYear = settings.selectedYear,
+						option = null,
+						attrSelectedYear = $(this).data('selected-year'),
+						attrStartYear = $(this).data('start-year'),
+						attrFinalYear = $(this).data('final-year'),
+						currYear = date.getFullYear();
+						currMonth = date.getMonth()+1;
+					if (attrSelectedYear) {
+						settings.selectedYear = attrSelectedYear;
+					}
+					if (attrStartYear) {
+						settings.startYear = attrStartYear;
+					}
+					if (attrFinalYear) {
+						settings.finalYear = attrFinalYear;
+					}
+					container.css({
+						position: 'absolute',
+						//zIndex: 999999,
+						whiteSpace: 'nowrap',
+						//width: '250px',
+						overflow: 'hidden',
+						textAlign: 'center',
+						display: 'none',
+						top: monthpicker.offset().top + monthpicker.outerHeight(),
+						left: monthpicker.offset().left
+					});
+					combo.on('change', function() {
+						var months = $(this).parent().parent().find('td[data-month]');
+						months.removeClass('ui-state-highlight');
+						months.removeClass('ui-state-active');
+						if ($(this).val() == settings.selectedYear) {
+							months.filter('td[data-month=' + settings.selectedMonth + ']').addClass('ui-state-active');
+						}
+						//alert($(this).val() +','+ currYear);
+						if ($(this).val() == currYear)  {
+							months.filter('td[data-month=' + currMonth + ']').addClass('ui-state-highlight');
+						}
+						monthpicker.trigger('monthpicker-change-year', $(this).val());
+					});
+					// mount years combo
+					for (var i = settings.startYear; i <= settings.finalYear; i++) {
+						var option = $('<option class="mtz-monthpicker" />').attr('value', i).append(i);
+						if (settings.selectedYear == i) {
+							option.attr('selected', 'selected');
+						}
+						combo.append(option);
+					}
+					header.append(combo).appendTo(container);
+					header.append('년').appendTo(container);
+					// mount months table
+					for (var i = 1; i <= 12; i++) {
+						td = $('<td class="ui-state-default mtz-monthpicker mtz-monthpicker-month"/>').attr('data-month', i);
+						if (settings.selectedMonth == i) {
+							td.addClass('ui-state-active');
+						}
+						if (settings.selectedYear == currYear && settings.selectedMonth == i) {
+							td.addClass('ui-state-highlight');
+						}
+						td.append(settings.monthNames[i - 1]);
+						tr.append(td).appendTo(tbody);
+						if (i % 3 === 0) {
+							tr = $('<tr class="mtz-monthpicker" />');
+						}
+					}
+					tbody.find('.mtz-monthpicker-month').on('click', function() {
+						var m = parseInt($(this).data('month'));
+						if ($.inArray(m, settings.disabledMonths) < 0) {
+							settings.selectedYear = $(this).closest('.ui-datepicker').find('.mtz-monthpicker-year').first().val();
+							settings.selectedMonth = $(this).data('month');
+							settings.selectedMonthName = $(this).text();
+							monthpicker.trigger('monthpicker-click-month', $(this).data('month'));
+							$(this).closest('table').find('.ui-state-active').removeClass('ui-state-active');
+							$(this).addClass('ui-state-active');
+						}
+					});
+					table.append(tbody).appendTo(container);
+					container.appendTo('body');
+				},
+				destroy: function() {
+					return this.each(function() {
+						$(this).removeClass('mtz-monthpicker-widgetcontainer').unbind('focus').removeData('monthpicker');
+					});
+				},
+				getDate: function() {
+					var settings = this.data('monthpicker').settings;
+					if (settings.selectedMonth && settings.selectedYear) {
+						return new Date(settings.selectedYear, settings.selectedMonth - 1);
+					} else {
+						return null;
+					}
+				},
+				parseInputValue: function(settings) {
+					if (this.val()) {
+						if (settings.dateSeparator) {
+							var val = this.val().toString().split(settings.dateSeparator);
+							if (settings.pattern.indexOf('m') === 0) {
+								settings.selectedMonth = val[0];
+								settings.selectedYear = val[1];
+							} else {
+								settings.selectedMonth = val[1];
+								settings.selectedYear = val[0];
+							}
+						}
+					}
+				}
+			};
+			$.fn.monthpicker = function(method) {
+				if (methods[method]) {
+					return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+				} else if (typeof method === 'object' || !method) {
+					return methods.init.apply(this, arguments);
+				} else {
+					$.error('Method ' + method + ' does not exist on jQuery.mtz.monthpicker');
+				}
+			};
+		})(jQuery);
+		Date.prototype.yyyymmdd = function() {
+			var mm = this.getMonth() + 1; // getMonth() is zero-based
+			var dd = this.getDate();
+
+			return [this.getFullYear(),
+							(mm>9 ? '' : '0') + mm,
+							(dd>9 ? '' : '0') + dd
+						 ].join('-');
+		};
+		var date = new Date();
+		var schDate = date.yyyymmdd();
+		$('.schDate').val(schDate);
+		$('.schMonth').val(schDate.substr(0,7));
+		initDatePickers();
+	});
+
+	//년-월
+	$(".schBtn").on('click', function () {
+		var thisId= $(this).attr("data-id");
+		$('#'+thisId).monthpicker('show');
+	});
+	//Date Picker End-----------------------------------------------------------
+
+
+
+
+
+
+
+
+
 });
 });

Некоторые файлы не были показаны из-за большого количества измененных файлов