Explorar o código

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.admin.git into develop

eskim %!s(int64=4) %!d(string=hai) anos
pai
achega
6496426936
Modificáronse 44 ficheiros con 767 adicións e 213 borrados
  1. 9 0
      src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java
  2. 3 0
      src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java
  3. 49 10
      src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  4. 11 2
      src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java
  5. 3 2
      src/main/java/com/style24/admin/biz/web/TsaDeliveryController.java
  6. 8 2
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  7. 16 2
      src/main/java/com/style24/admin/biz/web/TsaSystemController.java
  8. 22 3
      src/main/java/com/style24/persistence/domain/Delivery.java
  9. 4 0
      src/main/java/com/style24/persistence/domain/MoreBetter.java
  10. 5 0
      src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  11. 4 0
      src/main/java/com/style24/persistence/domain/User.java
  12. 13 6
      src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml
  13. 0 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaLogin.xml
  14. 61 23
      src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  15. 9 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaSystem.xml
  16. 1 1
      src/main/resources/config/application-locd.yml
  17. 1 1
      src/main/resources/config/application-locp.yml
  18. 1 1
      src/main/resources/config/application-run.yml
  19. 1 1
      src/main/resources/config/application-style.yml
  20. 1 1
      src/main/resources/config/application-tsit.yml
  21. 11 3
      src/main/webapp/WEB-INF/views/delivery/AssignListForm.html
  22. 6 5
      src/main/webapp/WEB-INF/views/delivery/BanGoodsRegistForm.html
  23. 3 3
      src/main/webapp/WEB-INF/views/delivery/BangoodsListForm.html
  24. 32 10
      src/main/webapp/WEB-INF/views/delivery/DeliveryListForm.html
  25. 2 2
      src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html
  26. 1 1
      src/main/webapp/WEB-INF/views/envset/AnswerPhaseForm.html
  27. 22 22
      src/main/webapp/WEB-INF/views/envset/BasicEnvsetForm.html
  28. 117 17
      src/main/webapp/WEB-INF/views/envset/BenefitEnvsetForm.html
  29. 4 4
      src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html
  30. 40 38
      src/main/webapp/WEB-INF/views/goods/FreeGoodsSearchForm.html
  31. 24 5
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  32. 10 6
      src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html
  33. 92 8
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html
  34. 11 4
      src/main/webapp/WEB-INF/views/ocm/ExtmallSearchForm.html
  35. 1 1
      src/main/webapp/WEB-INF/views/order/CnclReqForm.html
  36. 1 1
      src/main/webapp/WEB-INF/views/order/OrderListForm.html
  37. 3 3
      src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html
  38. 2 1
      src/main/webapp/WEB-INF/views/signin.html
  39. 4 4
      src/main/webapp/WEB-INF/views/system/MenuForm.html
  40. 36 3
      src/main/webapp/WEB-INF/views/system/UserDetailForm.html
  41. 56 7
      src/main/webapp/WEB-INF/views/system/UserForm.html
  42. 5 2
      src/main/webapp/WEB-INF/views/withdraw/WithdrawExceptionListForm.html
  43. BIN=BIN
      src/main/webapp/image/logo_STYLE24.png
  44. 62 6
      src/main/webapp/ux/plugins/gaga/gaga.validation.js

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

@@ -277,5 +277,14 @@ public interface TsaMorebetterDao {
      */
     void deleteMorebetterApplyGoodsTemp(MoreBetter moreBetter);
     void insertMorebetterApplyGoodsTemp(MoreBetter moreBetter);
+
+    /**
+     * 다다익선 기준상품 제외 한 적용상품 (TB_TMTB_GOODS) 저장
+     * @param moreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 7. 19
+     */
+    void insertTmtbApplyGoods(MoreBetterGoods moreBetterGoods);
     /* // CSB 진행 */
 }

+ 3 - 0
src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java

@@ -322,6 +322,9 @@ public class TsaDeliveryService {
 	 * @since 2020. 11. 05
 	 */
 	public Collection<Delivery> getBangoodsRegistList(Delivery delivery) {
+		if (StringUtils.isNotBlank(delivery.getCondition())) {
+			delivery.setConditions(delivery.getCondition().replaceAll("\r", "").split("\n"));
+		}
 		return deliveryDao.getBangoodsRegistList(delivery);
 	}
 	

+ 49 - 10
src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java

@@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
 import com.style24.admin.biz.dao.TsaMorebetterDao;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
@@ -105,10 +106,11 @@ public class TsaMorebetterService {
         return morebetterDao.getMorebetterBrandList(merebetterGoods);
     }
 
-    public Collection<MoreBetterGoods> getMorebetterApplyGoodsList(Integer tmtbSq, String targetGb) {
+    public Collection<MoreBetterGoods> getMorebetterApplyGoodsList(Integer tmtbSq, String targetGb, String goodsGb) {
         MoreBetterGoods merebetterGoods = new MoreBetterGoods();
         merebetterGoods.setTmtbSq(tmtbSq);
         merebetterGoods.setTargetGb(targetGb);
+        merebetterGoods.setGoodsGb(goodsGb);
         return morebetterDao.getMorebetterApplyGoodsList(merebetterGoods);
     }
 
@@ -177,8 +179,34 @@ public class TsaMorebetterService {
             morebetterDao.saveMorebetterGoods(regBrand);
         }
 
-        // 적용상품
-        for(MoreBetterGoods regApplyGoods : moreBetter.getGridApplyGoodsList()){
+        // 기준상품
+        for(MoreBetterGoods regDefaultGoods : moreBetter.getDefaultGoodsList()){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            regDefaultGoods.setTmtbSq(moreBetter.getTmtbSq());
+            regDefaultGoods.setTargetVal(regDefaultGoods.getGoodsCd());
+            regDefaultGoods.setRegNo(moreBetter.getRegNo());
+            regDefaultGoods.setUpdNo(moreBetter.getUpdNo());
+            regDefaultGoods.setMultiDuplicateGoods(moreBetter.getMultiDuplicateGoods());
+            morebetterDao.saveMorebetterGoods(regDefaultGoods);
+        }
+
+        // 기준상품+적용상품 중복제거
+        List<MoreBetterGoods> dgList = moreBetter.getDefaultGoodsList();
+        List<MoreBetterGoods> agList = moreBetter.getGridApplyGoodsList();
+        List<MoreBetterGoods> applyList = new ArrayList<>();
+        if(agList.size() > 0){
+            for(int i=0; i<agList.size(); i++){
+                for(int j=0; j<dgList.size(); j++){
+                    if(!agList.get(i).getGoodsCd().equals(dgList.get(j).getGoodsCd())){
+                        applyList.add(agList.get(i));
+                    }
+                }
+            }
+        }else{
+            applyList = dgList;
+        }
+
+        for(MoreBetterGoods regApplyGoods : applyList){
             // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
             regApplyGoods.setTmtbSq(moreBetter.getTmtbSq());
             regApplyGoods.setTargetVal(regApplyGoods.getGoodsCd());
@@ -227,19 +255,20 @@ public class TsaMorebetterService {
         StringBuilder sb3 = new StringBuilder();
         //int i = 1;
 
-        if(moreBetter.getGridApplyGoodsList().size()>0){    //getApplyGoodsList
-            for(int i=0; i<moreBetter.getGridApplyGoodsList().size(); i++){
-                sb.append("SELECT   '").append(moreBetter.getGridApplyGoodsList().get(i).getGoodsCd()).append("' AS GOODS_CD ");
-                if(i<moreBetter.getGridApplyGoodsList().size()-1){
+        if(applyList.size()>0){
+            for(int i=0; i<applyList.size(); i++){
+                sb.append("SELECT   '").append(applyList.get(i).getGoodsCd()).append("' AS GOODS_CD ");
+                if(i<applyList.size()-1){
                     sb.append("\n UNION ALL \n");
                 }
 
-                sb3.append("SELECT   '").append(moreBetter.getGridApplyGoodsList().get(i).getGoodsCd()).append("' AS GOODS_CD ").append(" , '").append(moreBetter.getGridApplyGoodsList().get(i).getGoodsGb()).append("' AS GOODS_GB ");
-                if(i<moreBetter.getGridApplyGoodsList().size()-1){
+                sb3.append("SELECT   '").append(applyList.get(i).getGoodsCd()).append("' AS GOODS_CD ").append(" , '").append(applyList.get(i).getGoodsGb()).append("' AS GOODS_GB ");
+                if(i<applyList.size()-1){
                     sb3.append("\n UNION ALL \n");
                 }
             }
         }
+
         moreBetterGoods.setApplySql(sb.toString());
         moreBetterGoods.setApplyGbSql(sb3.toString());
 
@@ -259,6 +288,7 @@ public class TsaMorebetterService {
         moreBetterGoods.setMultiSupplyCompCd(moreBetter.getMultiSupplyCompCd());
         moreBetterGoods.setMultiBrand(moreBetter.getMultiBrand());
         moreBetterGoods.setMultiApplyGoods(moreBetter.getMultiApplyGoods());
+        moreBetterGoods.setMultiDefaultGoods(moreBetter.getMultiDefaultGoods());
         moreBetterGoods.setMultiExceptGoods(moreBetter.getMultiExceptGoods());
         moreBetterGoods.setSectionGb(moreBetter.getSectionGb());
         morebetterDao.insertMorebetterApplyGoods(moreBetterGoods);
@@ -410,7 +440,16 @@ public class TsaMorebetterService {
     public void insertMorebetterApplyGoodsTemp(MoreBetter moreBetter) {
         moreBetter.setRegNo(TsaSession.getInfo().getUserNo());
         moreBetter.setUpdNo(TsaSession.getInfo().getUserNo());
-        if(moreBetter.getMultiApplyGoods().length > 0){
+
+        List<String> list1 = new ArrayList<>(Arrays.asList(moreBetter.getMultiDefaultGoods()));
+        List<String> list2 = new ArrayList<>(Arrays.asList(moreBetter.getMultiApplyGoods()));
+
+        list1.addAll(list2);
+        String[] applyArr = list1.toArray(new String[0]);
+
+        moreBetter.setMultiDefaultGoods(applyArr);
+
+        if(moreBetter.getMultiDefaultGoods().length > 0){
             morebetterDao.deleteMorebetterApplyGoodsTemp(moreBetter);
             morebetterDao.insertMorebetterApplyGoodsTemp(moreBetter);
         }

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

@@ -461,10 +461,19 @@ public class TsaShoplinkerService {
                 	htmlDesc += "<span class=\"st_tit_view\" style=\"display: block;color: #222;font-size: 32px;font-weight: 300;text-align: center;\">사이즈정보</span>";
                 	htmlDesc += "<div class=\"st_view\" style=\"margin-top: 40px;\">";
 
-                	String brandSizeImg = env.getProperty("upload.image.view") + "/Upload/brandSizeImg/";
+                	String brandSizeImg = env.getProperty("domain.image").replace("/Upload", "") + "/Upload/brandSizeImg/";
                 	if( "Y".equals(goodsMap.getKidsYn())){
                 		brandSizeImg += "kids/"+goodsMap.getBrandEnm() +".jpg";
-                		htmlDesc += "<img src=\""+ brandSizeImg +"\" alt=\"ANDEW 표준 사이즈\" style=\"display: block;margin: 10px auto 0;\">";
+
+                		// 나이키 조던/나이키 에스비/나이키 와이에이/컨버스/헐리 는 플레이키즈 사이즈표
+        	    		if( "S0003".equals(goodsMap.getBrandCd()) || "S0004".equals(goodsMap.getBrandCd()) || "S0007".equals(goodsMap.getBrandCd())
+        	    			|| "S0001".equals(goodsMap.getBrandCd()) || "S0006".equals(goodsMap.getBrandCd())){
+
+        	    			brandSizeImg += "kids/PLAYKIZ.jpg";
+        	    		}
+
+        	    		htmlDesc += "<img src=\""+ brandSizeImg +"\" alt=\"ANDEW 표준 사이즈\" style=\"display: block;margin: 10px auto 0;\">";
+
                 	}else {
                 		brandSizeImg += "casuals/"+goodsMap.getBrandEnm() +".jpg";
                 		htmlDesc += "<img src=\""+ brandSizeImg +"\" alt=\"ANDEW 표준 사이즈\" style=\"display: block;margin: 10px auto 0;\">";

+ 3 - 2
src/main/java/com/style24/admin/biz/web/TsaDeliveryController.java

@@ -20,10 +20,11 @@ import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.biz.service.TsaDeliveryService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.session.TscSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.Delivery;
-import com.style24.persistence.domain.DeliveryLoc;
+
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -113,7 +114,7 @@ public class TsaDeliveryController extends TsaBaseController {
 		GagaMap result = new GagaMap();
 		delivery.setPageable(new TscPageRequest(delivery.getPageNo() - 1, delivery.getPageSize()));
 		delivery.getPageable().setTotalCount(deliveryService.getDeliveryListCount(delivery));
-
+		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
 
 		if ("N".equals(delivery.getPageingYn())) {
 			delivery.setPageable(null);

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

@@ -813,7 +813,11 @@ public class TsaMarketingController extends TsaBaseController {
 		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
 
 		// 적용 상품구분 목록
-		String[] exceptGoodsCds = {"G800_30", "G800_40"};
+		String[] defaultGoodsCds = {"G800_20", "G800_30", "G800_40"};
+		mav.addObject("defaultGoodsGbList", rendererService.getCommonCodeList("G800", "Y", defaultGoodsCds));
+
+		// 적용 상품구분 목록
+		String[] exceptGoodsCds = {"G800_10", "G800_30", "G800_40"};
 		mav.addObject("applyGoodsGbList", rendererService.getCommonCodeList("G800", "Y", exceptGoodsCds));
 
 		// 제외 상품구분 목록
@@ -827,7 +831,8 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("tmtbMstInfo", morebetterService.getMorebetterMstInfo(tmtbSeq));
 			mav.addObject("tmtbSupplyCompList", morebetterService.getMorebetterSupplyCompList(tmtbSeq, "G260_13"));
 			mav.addObject("tmtbBrandList", morebetterService.getMorebetterBrandList(tmtbSeq, "G260_12"));
-			mav.addObject("tmtbApplyGoodsList", morebetterService.getMorebetterApplyGoodsList(tmtbSeq, "G260_10"));
+			mav.addObject("tmtbDefaultGoodsList", morebetterService.getMorebetterApplyGoodsList(tmtbSeq, "G260_10" , "G800_10"));
+			mav.addObject("tmtbApplyGoodsList", morebetterService.getMorebetterApplyGoodsList(tmtbSeq, "G260_10", "G800_20"));
 			mav.addObject("tmtbExceptGoodsList", morebetterService.getMorebetterExceptGoodsList(tmtbSeq, "G260_10"));
 			mav.addObject("tmtbSectionValList", morebetterService.getMorebetterSectionValList(tmtbSeq));
 			mav.addObject("tmtbBurdenList", morebetterService.getMorebetterBurdenList(tmtbSeq));
@@ -835,6 +840,7 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("tmtbMstInfo", new MoreBetter());
 			mav.addObject("tmtbSupplyCompList", new MoreBetterGoods());
 			mav.addObject("tmtbBrandList", new MoreBetterGoods());
+			mav.addObject("tmtbDefaultGoodsList", new MoreBetterGoods());
 			mav.addObject("tmtbApplyGoodsList", new MoreBetterGoods());
 			mav.addObject("tmtbExceptGoodsList", new MoreBetterGoods());
 			mav.addObject("tmtbSectionValList", new MoreBetterSection());

+ 16 - 2
src/main/java/com/style24/admin/biz/web/TsaSystemController.java

@@ -2,6 +2,7 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.env.Environment;
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.biz.service.TsaSystemService;
 import com.style24.admin.support.controller.TsaBaseController;
@@ -61,6 +63,9 @@ public class TsaSystemController extends TsaBaseController {
 	@Autowired
 	private GagaPasswordEncoder passwordEncoder;
 
+	@Autowired
+	private ObjectMapper mapper;
+
 	@Value("${upload.default.target.path}")
 	private String uploadTargetPath;
 
@@ -95,6 +100,15 @@ public class TsaSystemController extends TsaBaseController {
 	@PostMapping("/user/list")
 	@ResponseBody
 	public Collection<User> getUserList(@RequestBody User user) {
+		if (!StringUtils.isBlank(user.getSupplyCompList())) {
+			try {
+				String[] arrSupplyComp = mapper.readValue(user.getSupplyCompList(), String[].class);
+				user.setMultiSupplyComp(arrSupplyComp);
+			} catch (Exception e) {
+				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+
 		return systemService.getUserList(user);
 	}
 
@@ -113,7 +127,7 @@ public class TsaSystemController extends TsaBaseController {
 
 		systemService.deleteUserList(userList);
 
-		return super.ok(message.getMessage("SUCC_0003"));
+		return super.ok(message.getMessage("SUCC_0004"));
 	}
 
 	/**
@@ -241,7 +255,7 @@ public class TsaSystemController extends TsaBaseController {
 	@ResponseBody
 	public GagaResponse saveUserMenuList(@RequestBody Collection<UserMenu> menuList) {
 		systemService.saveUserMenuList(menuList);
-		return super.ok(message.getMessage("SUCC_0001"));
+		return super.ok(message.getMessage("SUCC_0004"));
 	}
 
 	/**

+ 22 - 3
src/main/java/com/style24/persistence/domain/Delivery.java

@@ -5,6 +5,9 @@ import java.util.Collection;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
+import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.CryptoUtils;
+import com.style24.core.support.util.MaskingUtils;
 
 import lombok.Data;
 
@@ -177,9 +180,25 @@ public class Delivery extends TscBaseDomain {
 	private String delvFeeCdGrp;
 	
 	
-	
-	
-	
+	// Masking
+
+	public String getMaskingOrdNm() {
+		return TscSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.name(this.ordNm) : this.ordNm;
+
+	}
+
+	public String getMaskingRecipNm() {
+		return TscSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.name(this.recipNm) : this.recipNm;
+
+	}
+
+	public String getMaskingOrdPhnno() {
+		return TscSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.phoneNo(this.ordPhnno) : this.ordPhnno;
+	}
+
+	public String getMaskingRecipDtlAddr() {
+		return TscSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.address(this.recipDtlAddr) : this.recipDtlAddr;
+	}
 
 	
 	

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

@@ -65,6 +65,7 @@ public class MoreBetter extends TscBaseDomain {
 	List<MoreBetterGoods> exceptGoodsList;
 	List<MoreBetterBurden> burdenList;
 	List<MoreBetterSection> sectionGbList;
+	List<MoreBetterGoods> defaultGoodsList;
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiSupplyCompCd;
@@ -81,6 +82,9 @@ public class MoreBetter extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiDuplicateGoods;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiDefaultGoods;
+
 	// 날짜+시간
 	private String eventStdt;				// 다다익선시작일시
 	private String eventStHH;				// 다다익선시작일시

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

@@ -36,6 +36,8 @@ public class MoreBetterGoods extends TscBaseDomain {
 	private String applySql;	// 적용 상품 쿼리문
 	private String exceptSql;	// 적용 상품 쿼리문
 	private String applyGbSql;	// 적용 상품&구분 쿼리문
+	private String defaultSql;	// 적용 상품 쿼리문
+	private String defaultGbSql;	// 적용 상품&구분 쿼리문
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrCompanySq;
@@ -65,6 +67,9 @@ public class MoreBetterGoods extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiDuplicateGoods;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiDefaultGoods;
+
 	List<MoreBetterGoods> applyGoodsList;
 	List<MoreBetterGoods> gridApplyGoodsList;
 

+ 4 - 0
src/main/java/com/style24/persistence/domain/User.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.style24.persistence.TscBaseDomain;
@@ -54,6 +55,9 @@ public class User extends TscBaseDomain {
 	private String searchGb;
 	private String searchTxt;
 	private String callBackFun;
+	private String supplyCompList;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyComp;
 
 	// 권한변경여부
 	private String roleChangeYn;

+ 13 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml

@@ -458,10 +458,10 @@
 		</if>
 		<if test='searchTxt != null and searchTxt != ""'>
 			<if test='goodsGb == "goodsCd"'>
-				AND G.GOODS_CD LIKE UPPER(#{searchTxt} || '%')
+				AND G.GOODS_CD LIKE  CONCAT(UPPER( #{searchTxt}), '%')
 			</if>
 			<if test='goodsGb == "goodsNm"'>
-				AND G.GOODS_NM LIKE #{searchTxt} || '%'
+				AND G.GOODS_NM LIKE CONCAT(UPPER( #{searchTxt}), '%')
 			</if>
 		</if>
 		<if test='delvLocCd != null and delvLocCd != ""'>
@@ -518,12 +518,19 @@
 		<if test='brandCd != null and brandCd != ""'>
 			AND G.BRAND_CD = #{brandCd}
 		</if>
-		<if test='searchTxt != null and searchTxt != ""'>
+		<if test='conditions != null and conditions != ""'>
 			<if test='goodsGb == "goodsCd"'>
-				AND G.GOODS_CD LIKE CONCAT(UPPER(#{searchTxt}),'%')
+		         AND G.GOODS_CD IN 
+		          <foreach collection="conditions" item="item" index="index"  open="(" close=")" separator=",">
+		      		#{item}
+		         </foreach>
+				
 			</if>
 			<if test='goodsGb == "goodsNm"'>
-				AND G.GOODS_NM LIKE #{searchTxt} || '%'
+		         AND G.GOODS_NM IN 
+		          <foreach collection="conditions" item="item" index="index"  open="(" close=")" separator=",">
+		      		#{item}
+		         </foreach>
 			</if>
 		</if>
 		<if test='goodsStat != null and goodsStat != ""'>
@@ -565,7 +572,7 @@
 			, #{optCd1}
 			, #{optCd2}
 			, replace(#{delvBanStdt},'-','')
-			, replace(#{delvBanEddt},'-','')
+			, STR_TO_DATE(CONCAT(#{delvBanEddt},' 235959'), '%Y-%m-%d %H%i%S')
 			, 'N'
 			, #{regNo}
 			, NOW()

+ 0 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsaLogin.xml

@@ -104,8 +104,6 @@
 		/* TsaLogin.updateLastLoginDate */
 		UPDATE TB_USER
 		SET    LOGIN_LDT = NOW()
-		     , UPD_NO = #{userNo}
-		     , UPD_DT = NOW()
 		WHERE  USER_NO = #{userNo}
 	</update>
 

+ 61 - 23
src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml

@@ -201,7 +201,7 @@
 		WHERE 1=1
 		  AND A.TMTB_SQ = #{tmtbSq}
 		  AND A.TARGET_GB = 'G260_10'
-		  AND A.GOODS_GB IN ('G800_10','G800_20')
+		  AND A.GOODS_GB = #{goodsGb}
  		  AND A.DEL_YN = 'N'
 		GROUP BY A.TMTB_GOODS_SQ, B.TMTB_APPLY_GOODS_SQ
 	</select>
@@ -648,7 +648,7 @@
 					<foreach collection="multiSupplyCompCd" item="item" open="(" separator="," close=")">
 						#{item}
 					</foreach>
-					<if test="multiApplyGoods != null and multiApplyGoods.length>0">
+					<if test="multiDefaultGoods != null and multiDefaultGoods.length>0">
 						AND GOODS_CD NOT IN ( ${applySql} )
 					</if>
 					UNION ALL
@@ -661,7 +661,7 @@
 					<foreach collection="multiBrand" item="item" open="(" separator="," close=")">
 						#{item}
 					</foreach>
-					<if test="multiApplyGoods != null and multiApplyGoods.length>0">
+					<if test="multiDefaultGoods != null and multiDefaultGoods.length>0">
 						AND GOODS_CD NOT IN ( ${applySql} )
 					</if>
 					UNION ALL
@@ -703,30 +703,68 @@
 		INSERT INTO TB_TMTB_APPLY_GOODS_TEMP
 		SELECT	T.*
 		FROM (
-			SELECT	#{regNo} AS REG_NO
-					, GOODS_CD
-					, GOODS_NM
-			FROM	TB_GOODS
-			WHERE	1=1
-			<if test="multiApplyGoods != null and multiApplyGoods.length>0">
-				AND GOODS_CD IN
-				<foreach collection="multiApplyGoods" item="item" open="(" separator="," close=")">
-					#{item}
-				</foreach>
-			</if>
+		    SELECT	#{regNo} AS REG_NO
+		          , GOODS_CD
+		          , GOODS_NM
+		    FROM    TB_GOODS
+		    WHERE   1=1
+		    <if test="multiDefaultGoods != null and multiDefaultGoods.length>0">
+		    AND GOODS_CD IN
+		        <foreach collection="multiDefaultGoods" item="item" open="(" separator="," close=")">
+		        #{item}
+		        </foreach>
+		    </if>
 		) T
 		WHERE	1=1
 		<if test="multiExceptGoods != null and multiExceptGoods.length>0">
-		AND 	T.GOODS_CD NOT IN (
-		    						SELECT	GOODS_CD
-		    						FROM	TB_GOODS
-		    						WHERE	1=1
-		    						AND 	GOODS_CD IN
-									<foreach collection="multiExceptGoods" item="item" open="(" separator="," close=")">
-										#{item}
-									</foreach>
-								)
+		AND  T.GOODS_CD NOT IN (
+		                  SELECT    GOODS_CD
+		                  FROM    TB_GOODS
+		                  WHERE    1=1
+		                  AND     GOODS_CD IN
+		                  <foreach collection="multiExceptGoods" item="item" open="(" separator="," close=")">
+		                      #{item}
+		                  </foreach>
+		                )
 		</if>
 	</insert>
+
+	<insert id="insertTmtbApplyGoods" parameterType="MoreBetterGoods">
+		/* TsaMarketing.insertTmtbApplyGoods */
+		<selectKey keyProperty="tmtbGoodsSq" resultType="int" order="AFTER">
+			SELECT LAST_INSERT_ID()
+		</selectKey>
+		INSERT INTO TB_TMTB_GOODS(
+		      TMTB_SQ
+		    , GOODS_GB
+		    , TARGET_GB
+		    , TARGET_VAL
+		    , DEL_YN
+		    , REG_NO
+		    , REG_DT
+		    , UPD_NO
+		    , UPD_DT
+		)
+		SELECT #{tmtbSq} AS TMTB_SQ
+		     , Z.GOODS_GB AS GOODS_GB
+		     , 'G260_10' AS TARGET_GB
+		     , Z.GOODS_CD AS TARGET_VAL
+		     , 'N' AS DEL_YN
+		     , #{regNo} AS REG_NO
+		     , NOW() AS REG_DT
+		     , #{updNo} AS UPD_NO
+		     , NOW() AS UPD_DT
+		FROM	(
+		    SELECT T.GOODS_CD
+		         , 'G800_10' AS GOODS_GB
+		    FROM (
+		         ${applyGbSql}
+		         ) T
+		    WHERE	1=1
+		    <if test="exceptSql!= null and exceptSql!=''">
+		    AND 	T.GOODS_CD NOT IN ( ${exceptSql} )
+		    </if>
+		) Z
+	</insert>
 	<!--// CSB 진행 -->
 </mapper>

+ 9 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaSystem.xml

@@ -55,6 +55,8 @@
 		     , DATE_FORMAT(A.PASSWD_CHG_DT,'%Y%m%d%H%i%S') AS PASSWD_CHG_DT  /*비밀번호변경일시*/
 		     , A.USE_YN                                                      /*사용여부*/
 		     , A.MASKING_YN                                                  /*마스킹여부*/
+		     , FN_GET_USER_NM(A.UPD_NO)                    AS UPD_NM         /*최종수정자*/
+		     , DATE_FORMAT(A.UPD_DT,'%Y%m%d%H%i%S')        AS UPD_DT         /*최종수정일시*/
 		FROM   TB_USER A
 		WHERE  1 = 1
 		<choose>
@@ -71,6 +73,12 @@
 		<if test="supplyCompCd != null and supplyCompCd != ''">
 		AND    A.ROLE_REF_VAL = #{supplyCompCd}
 		</if>
+		<if test="multiSupplyComp != null and multiSupplyComp != ''">
+		AND    A.ROLE_REF_VAL IN
+		    <foreach collection="multiSupplyComp" item="item" index="index"  open="(" close=")" separator=",">
+		    #{item}
+		    </foreach>
+		</if>
 		<if test="roleCd != null and roleCd != ''">
 		AND    A.ROLE_CD  = #{roleCd}
 		</if>
@@ -188,6 +196,7 @@
 		/* TsaSystem.updateUserPassword */
 		UPDATE TB_USER
 		SET    PASSWD = #{passwd}
+		     , PASSWD_CHG_DT = NOW()
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
 		WHERE  USER_NO = #{userNo}

+ 1 - 1
src/main/resources/config/application-locd.yml

@@ -28,7 +28,7 @@ upload:
     default:
         target.path: /WIDE/workspace/files/data/style24
         max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        allow.extension: jpg|gif|jpeg|png|bmp|ico|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
         view: //ldimage.style24.com
     goods:
         target.path: /WIDE/workspace/files/data/style24/Upload/ProductImage

+ 1 - 1
src/main/resources/config/application-locp.yml

@@ -28,7 +28,7 @@ upload:
     default:
         target.path: /WIDE/workspace/files/data/style24
         max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        allow.extension: jpg|gif|jpeg|png|bmp|ico|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
         view: //lpimage.style24.com
     goods:
         target.path: /WIDE/workspace/files/data/style24/Upload/ProductImage

+ 1 - 1
src/main/resources/config/application-run.yml

@@ -38,7 +38,7 @@ upload:
     default:
         target.path: /files/data/style24
         max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        allow.extension: jpg|gif|jpeg|png|bmp|ico|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
         view: //image.istyle24.com/Upload
     goods:
         target.path: /files/data/style24/ProductImage

+ 1 - 1
src/main/resources/config/application-style.yml

@@ -41,7 +41,7 @@ upload:
     default:
         target.path: /files/data/style24
         max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        allow.extension: jpg|gif|jpeg|png|bmp|ico|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
         view: //image.istyle24.com/Upload
     goods:
         target.path: /files/data/style24/ProductImage

+ 1 - 1
src/main/resources/config/application-tsit.yml

@@ -30,7 +30,7 @@ upload:
     default:
         target.path: /TSIT/servers/files/data/style24
         max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        allow.extension: jpg|gif|jpeg|png|bmp|ico|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
 #        view: //tdimage.style24.com
         view: //ts5000.ipdisk.co.kr:8999
     goods:

+ 11 - 3
src/main/webapp/WEB-INF/views/delivery/AssignListForm.html

@@ -55,15 +55,15 @@
 							</td>
 							<th>주문번호</th>
 							<td>
-								<input type="text" class="" name="ordNo" placeholder="" maxlength="20" />
+								<input type="text" class="" name="ordNo"  oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"  placeholder="" maxlength="9" />
 							</td>
 							<th>주문상세번호</th>
 							<td>
-								<input type="text" class="" name="ordDtlNo" placeholder="" maxlength="20" />
+								<input type="text" class="" name="ordDtlNo" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"  placeholder="" maxlength="9" />
 							</td>
 							<th>외부몰주문번호</th>
 							<td>
-								<input type="text" class="" name="extmallOrderId" placeholder="" maxlength="100" />
+								<input type="text" class="" name="extmallOrderId" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"  placeholder="" maxlength="20" />
 							</td>
 						</tr>
 						<tr>
@@ -263,6 +263,7 @@
 	* 조회 클릭
 	**************************************************************************/
 	$('#btnSearch').on('click', function() {
+		$("#searchForm input[name=pageNo]").val('1');
 		fnSearchList();
 	});
 	
@@ -289,6 +290,13 @@
 
 	}
 	
+	// 페이징
+	$('#searchForm select[name=pageSize]').on('change', function() {
+		$("#searchForm input[name=pageNo]").val('1');
+		fnSearchList($("#searchForm input[name=searchGb]").val());
+	});
+	
+	
 	/*************************************************************************
 	* 조회 콜백
 	**************************************************************************/	

+ 6 - 5
src/main/webapp/WEB-INF/views/delivery/BanGoodsRegistForm.html

@@ -45,13 +45,14 @@
 								<option value="">[전체]</option>
 							</select>
 						</td>
-						<th>구분</th>
-						<td>
+						<th rowspan="2">구분</th>
+						<td rowspan="2">
 								<select name="goodsGb" id="">
 									<option value="goodsCd">상품코드</option>
 									<option value="goodsNm">상품명</option>
 								</select>
-								<input type="text" class="w60p" name="searchTxt" placeholder="" maxlength="20" />
+								<textarea class="textareaR2 w60p"  name="condition" id="condition" />
+								
 						</td>
 					</tr>
 					<tr>
@@ -148,10 +149,10 @@
 	var fnPopSearch = function() {
 
 		var supplyCompcd = $('#bangoodsRegistForm select[name=supplyCompCd]').val();
-		var searchTxt    = $('#bangoodsRegistForm input[name=searchTxt]').val();
+		var condition    = $('#bangoodsRegistForm textarea[name=condition]').val();
 		
 		
-		if (gagajf.isNull(supplyCompcd) && gagajf.isNull(searchTxt)) {
+		if (gagajf.isNull(supplyCompcd) && gagajf.isNull(condition)) {
 			mcxDialog.alert("업체를 선택 또는 상풐코드(상품명)을 입력해주세요!");
 			 $("#bangoodsRegistForm select[name=supplyCompCd]").focus();
 			return;

+ 3 - 3
src/main/webapp/WEB-INF/views/delivery/BangoodsListForm.html

@@ -147,7 +147,6 @@
 			
 		},
 		{headerName: "출고금지상품번호",			field: "delvBanGoodsSq",width: 50,	cellClass: 'text-center', hide: true},
-		{headerName: "삭제",					field: "delYn",			width: 50,	cellClass: 'text-center'},
 		{headerName: "브랜드",				field: "brandKnm",		width: 150,	cellClass: 'text-center'},
 		{headerName: "출고처명",				field: "delvLocNm",		width: 150,	cellClass: 'text-center'},
 		{headerName: "이미지",				field: "sysImgNm",		width: 100,	height: 60, cellClass: 'text-center', 
@@ -171,10 +170,11 @@
 		},
 		{headerName: "옵션1",		    field: "optCd1",		width: 80,	cellClass: 'text-center'},
 		{headerName: "옵션2",			field: "optCd2",		width: 80,	cellClass: 'text-center'},
-		{headerName: "상품상태",		field: "goodsStat",		width: 80,	cellClass: 'text-center'},
+		{headerName: "상품상태",			field: "goodsStat",		width: 80,	cellClass: 'text-center'},
 		{headerName: "출고금지시작일자",	field: "delvBanStdt",	width: 150,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }},
 		{headerName: "출고금지종료일자",	field: "delvBanEddt",	width: 150,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }},
-		{headerName: "등록일자",		field: "regDt",			width: 100,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }}
+		{headerName: "등록일자",			field: "regDt",			width: 100,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }},
+		{headerName: "삭제여부",			field: "delYn",			width: 80,	cellClass: 'text-center'}
 		
 	];
 

+ 32 - 10
src/main/webapp/WEB-INF/views/delivery/DeliveryListForm.html

@@ -67,7 +67,7 @@
 							</select>
 						</td>
 
-						<th>업체/브랜드<em class="required" title="필수"></em></th>
+						<th>업체/브랜드</th>
 						<td colspan="3">
 								<select name="supplyCompCd" id="supplyCompCd">
 									<option value="">[전체]</option>
@@ -102,9 +102,9 @@
 						</td>
 						<th>주문상세번호</th>
 						<td>
-							<input type="text" class="" name="ordDtlNo" placeholder="" maxlength="20"/>
+							<input type="text" class="" name="ordDtlNo" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" placeholder="" maxlength="9"/>
 						</td>
-						<th rowspan="4">키워드<i class="star"></i></th>
+						<th rowspan="4">키워드<em class="required" title="필수"></em><i class="star"></i></th>
 						<td rowspan="4" colspan="5">
 							<select class="w130" name="search" id="search">
 								<option value="searchOrdNo">주문번호</option>
@@ -151,7 +151,7 @@
 						</td>
 					</tr>
 					<tr>
-						<th>기간</th>
+						<th>기간<em class="required" title="필수"></em></th>
 						<td colspan="8">
 							<select name="termGb" id="termGb">
 								<option value="ordDt">주문등록일</option>
@@ -262,17 +262,19 @@
 			}
 		},
 		{headerName: "몰구분", 		field: "mallGbNm", 		width: 70, cellClass: 'text-center'},
-		{headerName: "주문자", 		field: "ordNm", 		width: 100, cellClass: 'text-center',
+		{headerName: "주문자", 		field: "maskingOrdNm", 		width: 100, cellClass: 'text-center',
 			cellRenderer: function (params) {
 				if (roleCd.indexOf("C") < 0 && !gagajf.isNull(params.value) && params.data.mallGb === 'G011_10' && params.data.custNo > 0) {
-					return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.data.ordNm + '</a>';
+					return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.data.maskingOrdNm + '</a>';
 				} else {
-					return params.data.ordNm;
+					return params.data.maskingOrdNm;
 				}
 			}
 		},
-		{headerName: "휴대번호", 		field: "ordPhnno", 		width: 100, cellClass: 'text-center'},
-		{headerName: "수령인", 		field: "recipNm", 		width: 100, cellClass: 'text-center'},
+		{headerName: "휴대번호", 		field: "maskingOrdPhnno", 		width: 100, cellClass: 'text-center',
+			valueGetter: function (params) { return params.data.maskingOrdPhnno; }
+		},
+		{headerName: "수령인", 		field: "maskingRecipNm", 		width: 100, cellClass: 'text-center'},
 		{headerName: "공급업체", 		field: "supplyCompNm", 	width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드", 		field: "supplyCompNm", 	width: 150, cellClass: 'text-center'},
 		{headerName: "상품코드", 		field: "goodsCd", 		width: 120, cellClass: 'text-center',
@@ -352,7 +354,7 @@
 		{headerName: "배송메모", 		field: "delvMemo", 		width: 200, cellClass: 'text-left'},
 		{headerName: "우편번호", 		field: "recipZipcode", 		width: 80, cellClass: 'text-center'},
 		{headerName: "기본주소", 		field: "recipBaseAddr", 	width: 200, cellClass: 'text-left'},
-		{headerName: "상세주소", 		field: "recipDtlAddr", 		width: 200, cellClass: 'text-left'},
+		{headerName: "상세주소", 		field: "maskingRecipDtlAddr", 		width: 200, cellClass: 'text-left'},
 		{headerName: "product_no", 	field: "productNo", 	width: 100, cellClass: 'text-center'},
 		{headerName: "product_code",field: "productCode", 	width: 100, cellClass: 'text-center'}
 		
@@ -401,6 +403,7 @@
 	* 조회 클릭
 	**************************************************************************/
 	$('#btnSearch').on('click', function () {
+		$("#searchForm input[name=pageNo]").val('1');
 		fnSearchList();
 	});
 
@@ -420,12 +423,31 @@
 				return;
 			}
 		}
+		
+		if ($('#searchForm input[name=delvDelayDays]').val() != '') {
+			if ($('#stDate').val() == '') {
+				mcxDialog.alert('시작 기간을 입력하세요.');
+				return;
+			}
+
+			if ($('#edDate').val() == '') {
+				mcxDialog.alert('종료 기간을 입력하세요.');
+				return;
+			}
+		}
 
 		gagaPaging.init('searchForm', fnSearchCallBack, 'deliveryListPagination', $('#searchForm').find('#pageSize').val());
 	    gagaPaging.load($("#searchForm input[name=pageNo]").val());
 
 	}
 
+	// 페이징
+	$('#searchForm select[name=pageSize]').on('change', function() {
+		$("#searchForm input[name=pageNo]").val('1');
+		fnSearchList();
+	});
+	
+	
 	/*************************************************************************
 	* 조회 콜백
 	**************************************************************************/	

+ 2 - 2
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -1023,8 +1023,8 @@
 				$("#mcTable"+tableDataId).find('.pcImg').find("#bannerPreViewUrlPop_"+pcImgIdx).attr('src', $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[0].mainPimg);
 				$("#mcTable"+tableDataId).find('.pcImg').find("#imgViewPop_"+pcImgIdx).removeClass("off").addClass("on");
 			}
-			$("#mcTable"+tableDataId).find('.mobImg').find("#bannerPreViewUrlPop_"+tableDataId).attr('src', $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[0].mainPimg);
-			$("#mcTable"+tableDataId).find('.mobImg').find("#imgViewPop_"+tableDataId).removeClass("off").addClass("on");
+			$("#mcTable"+tableDataId).find('.mobImg').find("#bannerPreViewUrlPop_100"+tableDataId).attr('src', $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[0].mainPimg);
+			$("#mcTable"+tableDataId).find('.mobImg').find("#imgViewPop_100"+tableDataId).removeClass("off").addClass("on");
 		}
 
 		let stdt = result[0].dispStdt.split(" ");

+ 1 - 1
src/main/webapp/WEB-INF/views/envset/AnswerPhaseForm.html

@@ -109,7 +109,7 @@
 						<th>사이트<em class="required" title="필수"></em></th>
 						<td>
 							<select name="siteCd" required="required" data-valid-name="사이트">
-								<option>[선택]</option>
+<!-- 								<option>[선택]</option> -->
 								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>

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

@@ -122,19 +122,19 @@
 				<tbody>
 					<tr>
 						<th>탈퇴후재가입불가기간(일)</th>
-						<td><input name="c10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="탈퇴후재가입불가기간"/><span class="cRed">일</span> 동안 탈퇴 후 재가입 불가합니다.</td>
+						<td><input name="c10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="탈퇴후재가입불가기간"/><span class="cRed">일</span> 동안 탈퇴 후 재가입 불가합니다.</td>
 					</tr>
 					<tr>
 						<th>휴면회선정기간(일)</th>
-						<td><input name="c10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원선정기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 선정합니다.</td>
+						<td><input name="c10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="휴면회원선정기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 선정합니다.</td>
 					</tr>
 					<tr>
 						<th>휴면회원전환기간(일)</th>
-						<td><input name="c10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="휴면회원전환기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 전환합니다.</td>
+						<td><input name="c10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="휴면회원전환기간"/><span class="cRed">일</span> 동안 사이트에 로그인 하지 않은 회원을 휴면회원으로 전환합니다.</td>
 					</tr>
 					<tr>
 						<th>회원등급산정기간</th>
-						<td>전월 기준 최근 <input name="c10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="회원등급산정기간"/><span class="cRed">개월</span> 기간 동안의 구매금액(실결제금액)과 구매건수를 기준으로 월초에 산정합니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자세한 사항은 "<span class="cRed">운영관리 > 환경설정 > 회원등급정책관리</span>" 화면을 참조해 주세요.</span></td>
+						<td>전월 기준 최근 <input name="c10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="회원등급산정기간"/><span class="cRed">개월</span> 기간 동안의 구매금액(실결제금액)과 구매건수를 기준으로 월초에 산정합니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자세한 사항은 "<span class="cRed">운영관리 > 환경설정 > 회원등급정책관리</span>" 화면을 참조해 주세요.</span></td>
 					</tr>
 				</tbody>
 			</table>
@@ -167,7 +167,7 @@
 					<tr>
 						<th>베스트상품노출개수</th>
 						<td>
-							카테고리와 아울렛의 베스트 영역에 상품이 <input name="g10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer"/> 개 만큼만 노출됩니다.
+							카테고리와 아울렛의 베스트 영역에 상품이 <input name="g10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger"/> 개 만큼만 노출됩니다.
 						</td>
 					</tr>
 				</tbody>
@@ -187,20 +187,20 @@
 						<td>
 							<!-- 2021-06-08 장바구니 보관 기간 30일 고정 > 지하 1층 회의실B 에서 한수인리더 확인.
 							     장바구니 20일 경과 상품 구매 알림톡 보내기 위해 수정되지 않도록 변경 -xodud1202 -->
-							장바구니 보관기간은 <input name="g11StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" readonly disabled data-valid-name="장바구니보관기간"/><span class="cRed">일</span> 입니다. 보관기간 경과 시 자동 삭제됩니다. (보관기간 30일 고정)
+							장바구니 보관기간은 <input name="g11StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" readonly disabled data-valid-name="장바구니보관기간"/><span class="cRed">일</span> 입니다. 보관기간 경과 시 자동 삭제됩니다. (보관기간 30일 고정)
 							<span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 삭제 처리를 하지 않습니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>장바구니담기최대상품수</th>
 						<td>
-							장바구니에 담을 수 있는 최대 상품 개수는 <input name="g11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="장바구니보관기간"/><span class="cRed">개</span> 입니다.
+							장바구니에 담을 수 있는 최대 상품 개수는 <input name="g11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="장바구니보관기간"/><span class="cRed">개</span> 입니다.
 						</td>
 					</tr>
 					<tr>
 						<th>위시리스트보관기간(일)</th>
 						<td>
-							위시리스트 보관기간은 <input name="g11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="위시리스트보관기간"/><span class="cRed">일</span> 입니다. 보관기간 경과 시 자동 삭제됩니다.
+							위시리스트 보관기간은 <input name="g11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="위시리스트보관기간"/><span class="cRed">일</span> 입니다. 보관기간 경과 시 자동 삭제됩니다.
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>0으로 설정하면 자동으로 삭제 처리를 하지 않습니다.</span>
 						</td>
 					</tr>
@@ -219,14 +219,14 @@
 					<tr>
 						<th>미로그인 시작일(일)</th>
 						<td>
-							 <input name="g12StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
+							 <input name="g12StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
 							 <span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 발송되지 않습니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>미로그인 종료일(일)</th>
 						<td>
-							 <input name="g12StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="미로그인 종료일"/><span class="cRed">일</span> 입니다.
+							 <input name="g12StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="미로그인 종료일"/><span class="cRed">일</span> 입니다.
 							 <span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 발송되지 않습니다.</span>
 						</td>
 					</tr>
@@ -255,14 +255,14 @@
 					<tr>
 						<th>미로그인 시작일(일)</th>
 						<td>
-							 <input name="g13StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
+							 <input name="g13StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
 							 <span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 발송되지 않습니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>미로그인 종료일(일)</th>
 						<td>
-							 <input name="g13StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
+							 <input name="g13StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
 							 <span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 발송되지 않습니다.</span>
 						</td>
 					</tr>
@@ -291,14 +291,14 @@
 					<tr>
 						<th>미로그인 시작일(일)</th>
 						<td>
-							 <input name="g14StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
+							 <input name="g14StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
 							 <span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 발송되지 않습니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>미로그인 종료일(일)</th>
 						<td>
-							 <input name="g14StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
+							 <input name="g14StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="미로그인 시작일"/><span class="cRed">일</span> 입니다.
 							 <span class="infoTxt cBlue"><i class="fa fa-info-circle marL20" aria-hidden="true"></i>0으로 설정하면 자동으로 발송되지 않습니다.</span>
 						</td>
 					</tr>
@@ -339,17 +339,17 @@
 					<tr>
 						<th>최소결제금액</th>
 						<td>
-							한 번의 결제 시 상품의 실결제금액이 <input name="o10StrSetVal2" type="text" class="w100 aR" maxlength="7" data-valid-type="integer" data-valid-name="최소결제금액"/> <span class="cRed">원</span> 보다 적을 경우 결제가 불가합니다.
+							한 번의 결제 시 상품의 실결제금액이 <input name="o10StrSetVal2" type="text" class="w100 aR" maxlength="7" data-valid-type="pinteger" data-valid-name="최소결제금액"/> <span class="cRed">원</span> 보다 적을 경우 결제가 불가합니다.
 						</td>
 					</tr>
 					<tr>
 						<th>무료배송비최소주문금액</th>
-						<td>최소주문금액이 <input name="o10StrSetVal3" type="text" class="w100 aR" maxlength="6" data-valid-type="integer" data-valid-name="무료배송비최소주문금액"/> 원 이상이면 배송비가 무료입니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>이 값은 기본값이며 공급업체별로 다르게 설정할 수도 있습니다.</span></td>
+						<td>최소주문금액이 <input name="o10StrSetVal3" type="text" class="w100 aR" maxlength="6" data-valid-type="pinteger" data-valid-name="무료배송비최소주문금액"/> 원 이상이면 배송비가 무료입니다. <span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>이 값은 기본값이며 공급업체별로 다르게 설정할 수도 있습니다.</span></td>
 					</tr>
 					<tr>
 						<th>총알배송주문가능시간</th>
 						<td>
-							오전 <input name="o10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="총알배송주문가능시간"/> <span class="cRed">시</span> 까지 주문한 자사상품은 총알배송이 가능합니다.
+							오전 <input name="o10StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="총알배송주문가능시간"/> <span class="cRed">시</span> 까지 주문한 자사상품은 총알배송이 가능합니다.
 						</td>
 					</tr>
 				</tbody>
@@ -374,13 +374,13 @@
 					<tr>
 						<th>품절안내메시지자동발송기간(일)</th>
 						<td>
-							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="자동품절안내메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절안내 메시지를 자동으로 발송합니다.
+							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="자동품절안내메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절안내 메시지를 자동으로 발송합니다.
 						</td>
 					</tr>
 					<tr>
 						<th>품절메시지자동발송기간(일)</th>
 						<td>
-							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="자동품절메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절 메시지를 자동으로 발송합니다.
+							품절안내방법이 "자동"일 경우 결제완료 후 <input name="o11StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="자동품절메시지발송기간(일)"/><span class="cRed">일</span> 동안 출고되지 않으면 품절 메시지를 자동으로 발송합니다.
 						</td>
 					</tr>
 				</tbody>
@@ -398,19 +398,19 @@
 					<tr>
 						<th>배송완료자동처리기간(일)</th>
 						<td>
-							<span class="cRed">배송중</span> 상태를 기준으로 <input name="d10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="배송완료자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 배송완료로 처리합니다.
+							<span class="cRed">배송중</span> 상태를 기준으로 <input name="d10StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="배송완료자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 배송완료로 처리합니다.
 						</td>
 					</tr>
 					<tr>
 						<th>구매확정자동처리기간(일)</th>
 						<td>
-							배송완료일 기준으로 <input name="d10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="구매확정자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 구매확정 처리합니다.
+							배송완료일 기준으로 <input name="d10StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="구매확정자동처리일수"/><span class="cRed">일</span> 경과 시 자동으로 구매확정 처리합니다.
 						</td>
 					</tr>
 					<tr>
 						<th>반품가능기간(일)</th>
 						<td>
-							배송완료 후 <input name="d10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="반품가능기간"/><span class="cRed">일</span> 내에 반품 신청 및 접수가 가능합니다.
+							배송완료 후 <input name="d10StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="반품가능기간"/><span class="cRed">일</span> 내에 반품 신청 및 접수가 가능합니다.
 						</td>
 					</tr>
 				</tbody>

+ 117 - 17
src/main/webapp/WEB-INF/views/envset/BenefitEnvsetForm.html

@@ -60,13 +60,13 @@
 					<tr>
 						<th>구매포인트소멸기한(일)</th>
 						<td>
-							적립일로부터 <input name="c12StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="구매포인트소멸기한(년)"/><span class="cRed">일</span> 경과 시 소멸합니다.
+							적립일로부터 <input name="c12StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="구매포인트소멸기한(년)"/><span class="cRed">일</span> 경과 시 소멸합니다.
 						</td>
 					</tr>
 					<tr>
 						<th>상품평포인트소멸기한(일)</th>
 						<td>
-							적립일로부터 <input name="c12StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="상품평포인트소멸기한(년)"/><span class="cRed">일</span> 경과 시 소멸합니다.
+							적립일로부터 <input name="c12StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="상품평포인트소멸기한(년)"/><span class="cRed">일</span> 경과 시 소멸합니다.
 						</td>
 					</tr>
 				</tbody>
@@ -84,56 +84,56 @@
 					<tr>
 						<th>자사상품정상포인트적립율(PC)</th>
 						<td>
-							<input name="c14StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="자사상품정상포인트적립율(PC)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="자사상품정상포인트적립율(PC)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자사 정상상품을 PC웹에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>자사상품정상포인트적립율(모바일)</th>
 						<td>
-							<input name="c14StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="자사상품정상포인트적립율(모바일)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="자사상품정상포인트적립율(모바일)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자사 정상상품을 모바일에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>자사상품이월포인트적립율(PC)</th>
 						<td>
-							<input name="c14StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="자사상품이월포인트적립율(PC)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="자사상품이월포인트적립율(PC)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자사 이월상품을 PC웹에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>자사상품이월포인트적립율(모바일)</th>
 						<td>
-							<input name="c14StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="자사상품이월포인트적립율(모바일)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal4" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="자사상품이월포인트적립율(모바일)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>자사 이월상품을 모바일에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>입점상품정상포인트적립율(PC)</th>
 						<td>
-							<input name="c14StrSetVal5" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="입점상품정상포인트적립율(PC)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal5" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="입점상품정상포인트적립율(PC)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>입점 정상상품을 PC웹에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>입점상품정상포인트적립율(모바일)</th>
 						<td>
-							<input name="c14StrSetVal6" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="입점상품정상포인트적립율(모바일)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal6" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="입점상품정상포인트적립율(모바일)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>입점 정상상품을 모바일에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>입점상품이월포인트적립율(PC)</th>
 						<td>
-							<input name="c14StrSetVal7" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="입점상품이월포인트적립율(PC)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal7" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="입점상품이월포인트적립율(PC)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>입점 이월상품을 PC웹에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>입점상품이월포인트적립율(모바일)</th>
 						<td>
-							<input name="c14StrSetVal8" type="text" class="w50 aR" maxlength="3" data-valid-type="real" data-valid-name="입점상품이월포인트적립율(모바일)"/><span class="cRed">%</span>
+							<input name="c14StrSetVal8" type="text" class="w50 aR" maxlength="3" data-valid-type="preal" data-valid-name="입점상품이월포인트적립율(모바일)"/><span class="cRed">%</span>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>입점 이월상품을 모바일에서 구매 시 적립해 줄 포인트율입니다.</span>
 						</td>
 					</tr>
@@ -152,7 +152,7 @@
 					<tr>
 						<th>상품평등록가능기간(일)</th>
 						<td>
-							상품평 등록가능 기간은 <span class="cRed">구매일</span>로부터 <input name="c15StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="상품평등록가능기간(일)"/><span class="cRed">일</span> 입니다. 등록가능기간 경과 시 등록 불가합니다.
+							상품평 등록가능 기간은 <span class="cRed">구매일</span>로부터 <input name="c15StrSetVal1" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="상품평등록가능기간(일)"/><span class="cRed">일</span> 입니다. 등록가능기간 경과 시 등록 불가합니다.
 						</td>
 					</tr>
 					<tr>
@@ -166,21 +166,21 @@
 					<tr>
 						<th>텍스트상품평포인트</th>
 						<td>
-							<input name="c15StrSetVal3" type="text" class="w100 aR" maxlength="5" data-valid-type="integer" data-valid-name="텍스트상품평포인트"/>
+							<input name="c15StrSetVal3" type="text" class="w100 aR" maxlength="5" data-valid-type="pinteger" data-valid-name="텍스트상품평포인트"/>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>작성한 상품평이 텍스트일 경우 적립해 줄 포인트입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>포토상품평포인트</th>
 						<td>
-							<input name="c15StrSetVal4" type="text" class="w100 aR" maxlength="5" data-valid-type="integer" data-valid-name="포토상품평포인트"/>
+							<input name="c15StrSetVal4" type="text" class="w100 aR" maxlength="5" data-valid-type="pinteger" data-valid-name="포토상품평포인트"/>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>작성한 상품평이 포토일 경우 적립해 줄 포인트입니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>베스트상품평포인트</th>
 						<td>
-							<input name="c15StrSetVal5" type="text" class="w100 aR" maxlength="5" data-valid-type="integer" data-valid-name="베스트상품평포인트"/>
+							<input name="c15StrSetVal5" type="text" class="w100 aR" maxlength="5" data-valid-type="pinteger" data-valid-name="베스트상품평포인트"/>
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>작성한 상품평이 베스트로 선정될 경우 적립해 줄 포인트입니다.</span>
 						</td>
 					</tr>
@@ -199,20 +199,20 @@
 					<tr>
 						<th>포인트사용기준</th>
 						<td>
-							실결제액 기준 <input name="c17StrSetVal1" type="text" class="w100 aR" maxlength="7" data-valid-type="integer" data-valid-name="포인트사용기준"/> <span class="cRed">원</span> 이상일 때 포인트 사용이 가능합니다.
+							실결제액 기준 <input name="c17StrSetVal1" type="text" class="w100 aR" maxlength="7" data-valid-type="pinteger" data-valid-name="포인트사용기준"/> <span class="cRed">원</span> 이상일 때 포인트 사용이 가능합니다.
 						</td>
 					</tr>
 					<tr>
 						<th>최대사용가능포인트율(%)</th>
 						<td>
-							실결제액의 <input name="c17StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="최대사용가능포인트율"/> <span class="cRed">%</span> 까지 포인트 사용이 가능합니다.
+							실결제액의 <input name="c17StrSetVal2" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="최대사용가능포인트율"/> <span class="cRed">%</span> 까지 포인트 사용이 가능합니다.
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>한 번의 결제 시 <span class="cRed">실결제액 기준</span>으로 사용할 수 있는 최대 포인트율을 설정합니다.</span>
 						</td>
 					</tr>
 					<tr>
 						<th>최대즉시사용포인트율(%)</th>
 						<td>
-							포인트를 <input name="c17StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="integer" data-valid-name="최대즉시사용포인트율"/> <span class="cRed">%</span> 이하로 즉시 사용할 수 있습니다.
+							포인트를 <input name="c17StrSetVal3" type="text" class="w50 aR" maxlength="3" data-valid-type="pinteger" data-valid-name="최대즉시사용포인트율"/> <span class="cRed">%</span> 이하로 즉시 사용할 수 있습니다.
 							<span class="infoTxt cBlue marL20"><i class="fa fa-info-circle" aria-hidden="true"></i>한 번의 결제 시 <span class="cRed">적립금액 기준</span>으로 즉시 사용할 수 있는 최대 포인트율을 설정합니다.</span>
 						</td>
 					</tr>
@@ -299,6 +299,86 @@
 			params.strSetVal1 = $('input[name=c12StrSetVal1]').val();
 			params.strSetVal2 = $('input[name=c12StrSetVal2]').val();
 		} else if (envsetType == 'C14') { // 구매포인트
+			if ($('input[name=c14StrSetVal1]').val() > 100) {
+				mcxDialog.alertC('자사상품정상포인트적립율(PC)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal1]').focus();
+					}
+				});
+				return;
+			}
+		
+			if ($('input[name=c14StrSetVal2]').val() > 100) {
+				mcxDialog.alertC('자사상품정상포인트적립율(모바일)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal2]').focus();
+					}
+				});
+				return;
+			}
+			
+			if ($('input[name=c14StrSetVal3]').val() > 100) {
+				mcxDialog.alertC('자사상품이월포인트적립율(PC)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal3]').focus();
+					}
+				});
+				return;
+			}
+			
+			if ($('input[name=c14StrSetVal4]').val() > 100) {
+				mcxDialog.alertC('자사상품이월포인트적립율(모바일)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal4]').focus();
+					}
+				});
+				return;
+			}
+			
+			if ($('input[name=c14StrSetVal5]').val() > 100) {
+				mcxDialog.alertC('입점상품정상포인트적립율(PC)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal5]').focus();
+					}
+				});
+				return;
+			}
+		
+			if ($('input[name=c14StrSetVal6]').val() > 100) {
+				mcxDialog.alertC('입점상품정상포인트적립율(모바일)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal6]').focus();
+					}
+				});
+				return;
+			}
+			
+			if ($('input[name=c14StrSetVal7]').val() > 100) {
+				mcxDialog.alertC('입점상품이월포인트적립율(PC)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal7]').focus();
+					}
+				});
+				return;
+			}
+			
+			if ($('input[name=c14StrSetVal8]').val() > 100) {
+				mcxDialog.alertC('입점상품이월포인트적립율(모바일)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c14StrSetVal8]').focus();
+					}
+				});
+				return;
+			}
+		
 			params.envsetNm = '구매포인트';
 			params.strSetVal1 = $('input[name=c14StrSetVal1]').val();
 			params.strSetVal2 = $('input[name=c14StrSetVal2]').val();
@@ -316,6 +396,26 @@
 			params.strSetVal4 = $('input[name=c15StrSetVal4]').val().removeComma();
 			params.strSetVal5 = $('input[name=c15StrSetVal5]').val().removeComma();
 		} else if (envsetType == 'C17') { // 포인트사용
+			if ($('input[name=c17StrSetVal2]').val() > 100) {
+				mcxDialog.alertC('최대사용가능포인트율(%)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c17StrSetVal2]').focus();
+					}
+				});
+				return;
+			}
+		
+			if ($('input[name=c17StrSetVal3]').val() > 100) {
+				mcxDialog.alertC('최대즉시사용포인트율(%)은 최대 100 이하로 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('input[name=c17StrSetVal3]').focus();
+					}
+				});
+				return;
+			}
+			
 			params.envsetNm = '포인트사용';
 			params.strSetVal1 = $('input[name=c17StrSetVal1]').val().removeComma();
 			params.strSetVal2 = $('input[name=c17StrSetVal2]').val();

+ 4 - 4
src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html

@@ -96,17 +96,17 @@
 					<tr>
 						<th>등급산정기간<em class="required" title="필수"></em></th>
 						<td colspan="5">
-							전월 기준 최근 <input type="text" name="calMonths" class="w50 aR" maxlength="2" value="3" required="required" data-valid-type="integer" data-valid-name="등급산정기간"/> 개월
+							전월 기준 최근 <input type="text" name="calMonths" class="w50 aR" maxlength="2" value="3" required="required" data-valid-type="pinteger" data-valid-name="등급산정기간"/> 개월
 						</td>
 					</tr>
 					<tr>
 						<th>승급조건<em class="required" title="필수"></em></th>
 						<td colspan="7">
 							구매금액(<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>쿠폰할인, 포인트할인, 배송비, 취소/반품내역을 반영한 실결제금액</span>)
-							<input type="text" name="minBuyAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="integer" data-valid-name="구매금액"/>원 <span class="cRed">이상</span>
+							<input type="text" name="minBuyAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="pinteger" data-valid-name="구매금액"/>원 <span class="cRed">이상</span>
 							<span class="infoTxt cRed"><strong>또는</strong></span>
-							주문당 <input type="text" name="buyExceptAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="integer" data-valid-name="구매건수제외조건"/>원 <span class="cRed">미만 구매건을 제외</span>한 구매건수(<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>취소를 반영한 주문건수</span>)
-							<input type="text" name="minBuyCnt" class="w50 aR" maxlength="2" value="0" required="required" data-valid-type="integer" data-valid-name="구매건수"/>건 <span class="cRed">이상</span>
+							주문당 <input type="text" name="buyExceptAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="pinteger" data-valid-name="구매건수제외조건"/>원 <span class="cRed">미만 구매건을 제외</span>한 구매건수(<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>취소를 반영한 주문건수</span>)
+							<input type="text" name="minBuyCnt" class="w50 aR" maxlength="2" value="0" required="required" data-valid-type="pinteger" data-valid-name="구매건수"/>건 <span class="cRed">이상</span>
 						</td>
 					</tr>
 					<tr>

+ 40 - 38
src/main/webapp/WEB-INF/views/goods/FreeGoodsSearchForm.html

@@ -23,46 +23,48 @@
 		</div>
 		<!-- //TITLE -->
 
-		<!-- 검색 조건 -->
-		<div class="panelContent">
-			<form id="searchCompanyListForm" name="searchCompanyListForm" action="#" th:action="@{'/goods/freeGoods/list'}" onsubmit="$('#btnSearchFreeGoodsList').trigger('click'); return false;">
-				<table class="frmStyle" aria-describedby="검색조건">
-					<colgroup>
-						<col style="width:15%;"/>
-						<col/>
-					</colgroup>
-					<tbody>
-					<tr>
-						<th>검색어 지정</th>
-						<td>
-							<label class="rdoBtn"><input type="radio" name="search" value="searchProductNo" checked/>사은품코드</label>
-							<label class="rdoBtn"><input type="radio" name="search" value="searchGoodsNm"/>품번</label>
-							<textarea name="condition" style="height:75px;"></textarea>
-						</td>
-					</tr>
-					</tbody>
-				</table>
-				<ul class="panelBar">
-					<li class="center">
-						<button type="button" class="btn btn-base btn-lg" id="btnSearchFreeGoodsList">조회</button>
-					</li>
-				</ul>
-			</form>
-		</div>
-		<!-- //검색 조건 -->
+		<div style="overflow-y:auto;height:34vw;margin:10px 0px;padding:0px 10px;">
+			<!-- 검색 조건 -->
+			<div class="panelContent">
+				<form id="searchCompanyListForm" name="searchCompanyListForm" action="#" th:action="@{'/goods/freeGoods/list'}" onsubmit="$('#btnSearchFreeGoodsList').trigger('click'); return false;">
+					<table class="frmStyle" aria-describedby="검색조건">
+						<colgroup>
+							<col style="width:15%;"/>
+							<col/>
+						</colgroup>
+						<tbody>
+						<tr>
+							<th>검색어 지정</th>
+							<td>
+								<label class="rdoBtn"><input type="radio" name="search" value="searchProductNo" checked/>사은품코드</label>
+								<label class="rdoBtn"><input type="radio" name="search" value="searchGoodsNm"/>품번</label>
+								<textarea name="condition" style="height:75px;"></textarea>
+							</td>
+						</tr>
+						</tbody>
+					</table>
+					<ul class="panelBar">
+						<li class="center">
+							<button type="button" class="btn btn-base btn-lg" id="btnSearchFreeGoodsList">조회</button>
+						</li>
+					</ul>
+				</form>
+			</div>
+			<!-- //검색 조건 -->
 
-		<!-- 리스트 영역 -->
-		<div class="panelContent">
-			<div id="freeGoodsSearchList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
-		</div>
-		<!-- //리스트 영역 -->
+			<!-- 리스트 영역 -->
+			<div class="panelContent">
+				<div id="freeGoodsSearchList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+			</div>
+			<!-- //리스트 영역 -->
 
-		<!-- 버튼 배치 영역 -->
-		<ul class="panelBar">
-			<li class="right">
-				<button type="button" class="btn btn-info btn-lg" id="btnConfirmFreeGoods">확인</button>
-			</li>
-		</ul>
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnConfirmFreeGoods">확인</button>
+				</li>
+			</ul>
+		</div>
 	</div>
 
 	<script th:inline="javascript">

+ 24 - 5
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -336,7 +336,7 @@
 											</td>
 										</tr>-->
 										<tr class="payTypeTr" style="display: none;">
-											<th>결제수단<em class="required" title="필수"></em></th>
+											<th>결제수단</th>
 											<td colspan="5">
 												<label class="chkBox" th:if="${payTypeList}" th:each="oneData, status : ${payTypeList}">
 													<input type="checkbox" name="payTypeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}" checked="checked"/>
@@ -1011,6 +1011,15 @@
 			return false;
 		}
 
+		// 할인방식 할인율 일때, 최대할인금액 0 보다 큰지 체크
+		if($('#CouponForm input:radio[name="rdoDcWay"]:checked').val() == 'G240_11'){
+			if($('#CouponForm').find('input[name=maxDcAmt]').val() < 1){
+				mcxDialog.alert("최대 할인 금액을 입력해주세요.");
+				$('#CouponForm input[name=maxDcAmt]').focus();
+				return false;
+			}
+		}
+
 		if($('#CouponForm input:radio[name="rdoApplyScope"]:checked').val() == 'I'){
 			// 적용대상 체크
 			let targetCnt = 0;
@@ -1065,6 +1074,8 @@
 			return false;
 		}
 
+		/*
+		21-07-19 결제수단 필수조건 아니여서 주석처리
 		if(cpnType == 'G230_20'){
 			// 결제수단 체크박스 체크
 			var payTypeCnt = $('#CouponForm input:checkbox[name=payTypeArr]:checked').length;
@@ -1074,6 +1085,7 @@
 				return false;
 			}
 		}
+		*/
 
 		if($('#CouponForm select[name="pdGb"] option:selected').val() == 'D'){
 			if(gagajf.isNull($("#availDays").val()) || $("#availDays").val() < 1){
@@ -1475,12 +1487,13 @@
 			return false;
 		}
 		// 결제수단 체크박스 체크
+		/* 21-07-19 결제수단 필수조건 아니여서 주석처리
 		var payTypeCnt = $('#CouponForm input:checkbox[name=payTypeArr]').length;
 		if(payTypeCnt<1){
-			mcxDialog.alert("사용가능고객등급을 체크해주세요.");
+			mcxDialog.alert("결제수단을 체크해주세요.");
 			$('#CouponForm input:checkbox[name=payTypeArr]').focus();
 			return false;
-		}
+		}*/
 
 		//신규가입 지급한다면 validation 체크
 		if( $('#newCustYn option:selected').val() == "Y" ){
@@ -2109,10 +2122,16 @@
 		let addCnt = 0;
 		let failCnt = 0;
 		let dupliCnt = 0;
+		let goodsDCnt = 0;
 
 		for(let i = 0 ; i < result.length ; i++) {
 			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(OriginGridListOption);		// 받아온 모든 데이터
 
+			if(result[i].goodsType == 'G056_D'){ //딜상품 제외
+				addChk = false;
+				goodsDCnt++;
+			}
+
 			// 받아온 data for
 			for(let j = 0 ; j < gridListValue.length ; j++) {
 				if(gridListValue[j].goodsCd == result[i].goodsCd) {	addChk = false;	dupliCnt++;}				// 중복체크
@@ -2125,8 +2144,8 @@
 			}
 		}
 		uifnPopupClose('popupGoods');
-		failCnt = result.length - addCnt - dupliCnt;
-		mcxDialog.alert("데이터가 적용되었습니다.<br/>" + addCnt + "건 성공, "+ dupliCnt + "건 중복, " + failCnt + "건 실패");
+		failCnt = result.length - addCnt - dupliCnt - goodsDCnt;
+		mcxDialog.alert("데이터가 적용되었습니다.<br/>" + addCnt + "건 성공, "+ dupliCnt + "건 중복, "+ goodsDCnt + "건 딜상품 제외, " + failCnt + "건 실패");
 	}
 
 	// 기간 일수 변경시

+ 10 - 6
src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html

@@ -20,7 +20,7 @@
 			<h2>사은품 프로모션 관리</h2>
 			<button type="button" class="close" onclick="fnFreeGoodsPromotionFormClose()"><i class="fa fa-times"></i></button>
 		</div>
-		<div class="marT10" style="height:650px;overflow-y:auto;padding:0 10px;">
+		<div class="marT10" style="height:650px;overflow-y:auto;padding:0 10px;margin-top:0px !important;">
 			<form id="freeGoodsPromotionForm" name="freeGoodsPromotionForm" th:method="post">
 				<input type="hidden" name="gbn" th:value="${param.gbn}" />				<!-- 신규/수정 구분 -->
 				<input type="hidden" id="freegiftSq" name="freegiftSq" th:value="${param.freegiftSq}"/>	<!-- 사은품 프로모션 번호 -->
@@ -78,6 +78,7 @@
 								<label class="chkBox disabledPoint" id="G011_20"><input type="checkbox" id="extmallYn" name="extmallYn" value="Y" class="disabledPoint"/>제휴몰</label>
 								<button type="button" class="btn btnRight btn-success btn-lg" id="btnExtmallPopup">선택</button><span id="extmallCntArea"> 선택 : <span id="extmallCnt">00</span>개</span>
 								<div id="gridFGExtmallList" style="display:none;"></div>
+								<div id="gridExtmallIdList" style="display:none;"></div>
 							</td>
 						</tr>
 					</table>
@@ -275,7 +276,7 @@
 </div>
 
 <script th:inline="javascript">
-	let confirmBtnText = ["확인", "취소"];
+	let confirmBtnText = ["취소", "확인"];
 	let formId = "freeGoodsPromotionForm";
 	let FGAddGoodsStatList = gagajf.convertToArray([[${goodsStatList}]]);		// 상품 상태 리스트
 	// 제휴몰 리스트 설정 (데이터 송부용 리스트 > 리스트 노출X)
@@ -942,7 +943,7 @@
 		mcxDialog.confirmC("프로모션을 진행하시겠습니까?<br/>진행 후에는 수정이 제한될 수 있습니다.", {
 			btn: confirmBtnText,
 			btnClick: function(index) {
-				if(index == 1) {
+				if(index == 2) {
 					let data = { freegiftStat : "G232_11"				// 진행
 						, freegiftSq : $("#freeGoodsPromotionForm input[name=freegiftSq]").val()
 					}
@@ -958,7 +959,7 @@
 		mcxDialog.confirmC("프로모션을 삭제하시겠습니까?<br/>삭제한 프로모션은 복원하실 수 없습니다.", {
 			btn: confirmBtnText,
 			btnClick: function(index) {
-				if(index == 1) {
+				if(index == 2) {
 					let data = {
 						freegiftStat: "G232_14"			// 삭제
 						, freegiftSq: $("#freeGoodsPromotionForm input[name=freegiftSq]").val()
@@ -977,7 +978,7 @@
 		mcxDialog.confirmC("프로모션을 중지하시겠습니까?<br/>중지 후에는 진행으로 복원하실 수 없습니다.", {
 			btn: confirmBtnText,
 			btnClick: function(index) {
-				if(index == 1) {
+				if(index == 2) {
 					let data = {
 						freegiftStat: "G232_12"			// 중지
 						, freegiftSq: $("#freeGoodsPromotionForm input[name=freegiftSq]").val()
@@ -1032,12 +1033,15 @@
 			}
 
 			// 추가된 데이터 중 중복되지 않은 데이터 리스트에 추가
-			if(addChk) {	resultList.push(result[i]);	}
+			if(addChk) {
+				resultList.push(result[i]);
+			}
 		}
 
 		// 추가된 정보 그리드에 추가
 		for(let i = 0 ; i < resultList.length ; i++) {
 			gagaAgGrid.addRowData(gridOptionsFGExtmallList, resultList[i], "extmallId");
+			$("#freeGoodsPromotionForm #gridExtmallIdList").append('<input type="hidden" class="extmallIdList" name="extmallIdList" value="' + resultList[i].extmallId + '" />');
 		}
 
 		// 수정된 수량 갯수 수정

+ 92 - 8
src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html

@@ -147,6 +147,39 @@
 					</div>
 				</div>
 			</div>
+			<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>
+									<div class="padding10">
+										<span class="buttonSpan">
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddDefaultGoods">상품 추가</button>
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteDefaultGoods">선택삭제</button>
+										</span>
+										<br/>
+										<div id="gridTmtbDefaultList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+									</div>
+								</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</div>
 			<div class="panelStyle" style="margin:unset;">
 				<!-- TITLE -->
 				<div class="panelTitle">
@@ -338,6 +371,7 @@
 	var tmtbSectionValList = [[${tmtbSectionValList}]];
 	var tmtbSupplyCompList = [[${tmtbSupplyCompList}]];
 	var tmtbBrandList = [[${tmtbBrandList}]];
+	var tmtbDefaultGoodsList = [[${tmtbDefaultGoodsList}]];
 	var tmtbApplyGoodsList = [[${tmtbApplyGoodsList}]];
 	var tmtbExceptGoodsList = [[${tmtbExceptGoodsList}]];
 	var tmtbBurdenList = [[${tmtbBurdenList}]];
@@ -346,6 +380,7 @@
 	var FGAddGoodsStatList = gagajf.convertToArray([[${goodsStatList}]]);		// 상품 상태 리스트
 	var sectionGbList = gagajf.convertToArray([[${sectionGbList}]]);	// 할인구간 리스트
 	var dcWayList = gagajf.convertToArray([[${dcWayList}]]);	// 할인구분 리스트
+	var defaultGoodsGbList = gagajf.convertToArray([[${defaultGoodsGbList}]]);	// 기준 상품구분 목록
 	var applyGoodsGbList = gagajf.convertToArray([[${applyGoodsGbList}]]);	// 적용 상품구분 목록
 	var exceptGoodsGbList = gagajf.convertToArray([[${exceptGoodsGbList}]]);	// 제외 상품구분 목록
 
@@ -368,6 +403,22 @@
 		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}
 	];
+	// 기준상품 리스트 설정
+	var columnDefaultGoodsList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "상품구분", field: "goodsGb", width: 100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(defaultGoodsGbList), required: true },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(defaultGoodsGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(defaultGoodsGbList, params.newValue); }
+		},
+		{headerName: "상품코드", field: "goodsCd", 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: "tmtbGoodsSq", 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 columnApplyGoodsList = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
@@ -491,10 +542,13 @@
 	// 브랜드 리스트 설정
 	var gridOptionsFGBrandList = gagaAgGrid.getGridOptions(columnBrandList);
 	gridOptionsFGBrandList.rowSelection = "multiple";
+	// 기준 상품 리스트 설정
+	var gridOptionsDefaultGoodsList = gagaAgGrid.getGridOptions(columnDefaultGoodsList);
+	gridOptionsDefaultGoodsList.rowSelection = "multiple";
 	// 적용상품 리스트 설정
 	var gridOptionsFGApplyGoodsList = gagaAgGrid.getGridOptions(columnApplyGoodsList);
 	// Grid editable
-	gridOptionsFGApplyGoodsList.defaultColDef.editable = true;
+	// gridOptionsFGApplyGoodsList.defaultColDef.editable = true;
 	gridOptionsFGApplyGoodsList.rowSelection = "multiple";
 	// 제외상품 리스트 설정
 	var gridOptionsFGExceptGoodsList = gagaAgGrid.getGridOptions(columnExceptGoodsList);
@@ -520,6 +574,7 @@
 		// 1.그리드 그리기
 		gagaAgGrid.createGrid("gridFGPromotionCompanyList", gridOptionsFGCompanyList);
 		gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
+		gagaAgGrid.createGrid("gridTmtbDefaultList", gridOptionsDefaultGoodsList);
 		gagaAgGrid.createGrid("gridFGApplyGoodsList", gridOptionsFGApplyGoodsList);
 		gagaAgGrid.createGrid("gridFGExceptGoodsList", gridOptionsFGExceptGoodsList);
 		gagaAgGrid.createGrid("gridApplyBurdenList", gridOptionsApplyBurdenList);
@@ -533,6 +588,7 @@
 		if(mode == "U"){
 			gridOptionsFGCompanyList.api.setRowData(tmtbSupplyCompList);
 			gridOptionsFGBrandList.api.setRowData(tmtbBrandList);
+			gridOptionsDefaultGoodsList.api.setRowData(tmtbDefaultGoodsList);
 			gridOptionsFGApplyGoodsList.api.setRowData(tmtbApplyGoodsList);
 			gridOptionsFGExceptGoodsList.api.setRowData(tmtbExceptGoodsList);
 			gridOptionsSectionGbList.api.setRowData(tmtbSectionValList)
@@ -598,7 +654,7 @@
 	});
 
 	var fnGoodsGbCheck = function (){
-		let applyGoodsData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
+		let applyGoodsData = gagaAgGrid.getAllRowData(gridOptionsDefaultGoodsList);
 		var checkCnt = 0;
 		$.each(applyGoodsData, function(idx, item) {
 			if(item.goodsGb == 'G800_10'){
@@ -607,7 +663,7 @@
 		});
 
 		if(checkCnt < 1){
-			mcxDialog.alert("기상품을 1개 이상 지정해주세요.");
+			mcxDialog.alert("기상품을 1개 이상 지정해주세요.");
 			return false;
 		}
 
@@ -692,6 +748,7 @@
 		// 각 ag-grid list 수량
 		let allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
 		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
+		let allDefaultGoodsData = gagaAgGrid.getAllRowData(gridOptionsDefaultGoodsList);
 		let allApplyGoodsData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
 		let allExceptGoodsData = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList);
 		let allApplyBurdenData = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);
@@ -713,9 +770,18 @@
 			multiBrand.push(item.brandCd);
 		});
 
+		var multiDefaultGoods = [];
+		$.each(allDefaultGoodsData, function(idx, item) {
+			multiDefaultGoods.push(item.goodsCd);
+		});
+
 		var multiApplyGoods = [];
-		$.each(allApplyGoodsData, function(idx, item) {
-			multiApplyGoods.push(item.goodsCd);
+		$.each(allApplyGoodsData, function(agIdx, agItem) {
+			$.each(allDefaultGoodsData, function(idx, item) {
+				if(agItem.goodsCd != item.goodsCd){
+					multiApplyGoods.push(agItem.goodsCd);
+				}
+			});
 		});
 
 		var multiExceptGoods = [];
@@ -740,14 +806,16 @@
 			, exceptGoodsList : allExceptGoodsData
 			, burdenList : allApplyBurdenData
 			, sectionGbList : allSectionGbData
+			, defaultGoodsList : allDefaultGoodsData
 			, multiSupplyCompCd : multiSupplyCompCd
 			, multiBrand : multiBrand
 			, multiApplyGoods : multiApplyGoods
 			, multiExceptGoods : multiExceptGoods
+			, multiDefaultGoods : multiDefaultGoods
 		};
 
 		var jsonData = JSON.stringify(data);
-
+console.log(jsonData);
 		gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, fnMorebetterSaveCollback);
 	});
 
@@ -843,6 +911,11 @@
 		}
 	};
 
+	// 기준 상품 리스트 콜백함수
+	var fnSetPopupDefaultGoodsInfo = function(result) {
+		gridAddGoodsList(gridOptionsDefaultGoodsList, result , "default");
+	};
+
 	// 적용 상품 리스트 콜백함수
 	var fnSetPopupApplyGoodsInfo = function(result) {
 		gridAddGoodsList(gridOptionsFGApplyGoodsList, result , "apply");
@@ -856,7 +929,11 @@
 	// ag-grid 상품관련 list 콜백함수
 	function gridAddGoodsList(OriginGridListOption, result, gubun) {
 		var goodsGbVal = "G800_10";
-		if(gubun == 'except'){
+		if(gubun == 'default'){
+			goodsGbVal = "G800_10";
+		}else if(gubun == 'apply'){
+			goodsGbVal = "G800_20";
+		}else{
 			goodsGbVal = "G800_30";
 		}
 
@@ -900,7 +977,10 @@
 	$('#moreBetterForm #btnAddBrand').on('click', function() {
 		cfnOpenBrandListPopup("fnSetPopupBrandInfo", "M");
 	});
-
+	// 기준 상품 추가 버튼 클릭시
+	$('#moreBetterForm #btnAddDefaultGoods').on('click', function() {
+		cfnOpenGoodsPopup("fnSetPopupDefaultGoodsInfo");
+	});
 	// 적용 상품 추가 버튼 클릭시
 	$('#moreBetterForm #btnAddApplyGoods').on('click', function() {
 		cfnOpenGoodsPopup("fnSetPopupApplyGoodsInfo");
@@ -927,6 +1007,10 @@
     $('#moreBetterForm #btnDeleteBrand').on('click', function() {
         gridOptionsFGBrandList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGBrandList)});
     });
+	// 기준상품 선택삭제 버튼 클릭시
+	$('#moreBetterForm #btnAddDefaultGoods').on('click', function() {
+		gridOptionsDefaultGoodsList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsDefaultGoodsList)});
+	});
     // 적용상품 선택삭제 버튼 클릭시
     $('#moreBetterForm #btnDeleteApplyGoods').on('click', function() {
         gridOptionsFGApplyGoodsList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList)});

+ 11 - 4
src/main/webapp/WEB-INF/views/ocm/ExtmallSearchForm.html

@@ -67,7 +67,7 @@
 		/*<![CDATA[*/
 		let extmallGbList = gagajf.convertToArray([[${extmallGbList}]]);		// 상품 상태 리스트
 		let columnExtmallPopupDefList = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+			{width: 40, minWidth: 40, field: "extmallCheck", cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 			{headerName: "제휴몰구분", field: "vendorId" , width: 120, cellClass: 'text-center',
 				cellEditorParams: { values: gagaAgGrid.extractValues(extmallGbList) },
 				valueFormatter: function (params) { return gagaAgGrid.lookupValue(extmallGbList, params.value); },
@@ -88,8 +88,15 @@
 		// 조회
 		$('#btnSearchExtmallList').on('click', function() {
 			// Fetch data
-			gagaAgGrid.fetch($('#searchExtmallListForm').prop('action'), gridOptionsExtmallPopupList, '#searchExtmallListForm');
-			gridOptions.api.setRowData(result.morebetterList);
+			gagaAgGrid.fetch($('#searchExtmallListForm').prop('action'), gridOptionsExtmallPopupList, '#searchExtmallListForm', function() {
+				gridOptionsExtmallPopupList.api.forEachNode(function(rowNode, index) {
+					$("#freeGoodsPromotionForm #gridExtmallIdList input[name=extmallIdList]").each(function(i, e){
+						if(rowNode.data.extmallId == $(this).val()) {
+							rowNode.setSelected(true);
+						}
+					});
+				});
+			});
 		});
 
 		// 확인
@@ -97,7 +104,7 @@
 			var selectedData = gagaAgGrid.selectedRowData(gridOptionsExtmallPopupList);
 
 			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 공급업체가 없습니다.');
+				mcxDialog.alert('선택된 외부몰이 없습니다.');
 				return false;
 			}
 

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

@@ -25,7 +25,7 @@
 				<input type="hidden" name="ordNo" 			th:value="${ordNo}"/>
 				<input type="hidden" name="ordChgSq" 		th:value="${ordChgSq}"/>
 				<input type="hidden" name="delvFeeCd" 		th:value="${delvFeeCd}"/>
-				<input type="hidden" name="chgReason" 		th:value="${orderChangeDetailList[0].chgReason}"/>
+				<input type="hidden" name="chgReason" 		th:value="${ordChgSq > 0 && chgStat != 'G685_40' ? orderChangeDetailList[0].chgReason : ''}"/>
 				<input type="hidden" name="chgReasonDesc" 	value=""/>
 				
 				<div id="orderInfoList" style="display:none;">

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

@@ -532,7 +532,7 @@ var fnSearchList = function () {
 };
 
 var fnSearchCallBack = function(result){
-	$('#searchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+	$('#searchForm').find('#rowCntOrderList').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());

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

@@ -37,10 +37,10 @@
 							<td id="userNm"></td>
 						</tr>
 						<tr>
-							<th>관리자 메모</th>
+							<th>관리자 메모<br/><span id="dpLocAnsContent">0</span>/4,000Byte</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>
+								<textarea th:if="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" th:text="${orderMemo.memo}" onkeyup="cfnGetTextLength(this, 4000, $('#dpLocAnsContent'));"></textarea>
+								<textarea th:unless="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" text="" onkeyup="cfnGetTextLength(this, 4000, $('#dpLocAnsContent'));"></textarea>
 							</td>
 						</tr>
 						<tr id="imageFileTr">

+ 2 - 1
src/main/webapp/WEB-INF/views/signin.html

@@ -25,7 +25,8 @@
 <th:block layout:fragment="content">
 	<form name="loginForm" id="loginForm" th:action="@{/login}" method="post">
 		<div class="loginCont">
-			<div class="logo"><img src="/image/login_logo.png" alt="logo"/></div>
+<!-- 			<div class="logo"><img src="/image/login_logo.png" alt="logo"/></div> -->
+			<div class="logo"><img src="/image/logo_STYLE24.png" alt="logo"/></div>
 			<ul>
 				<li>
 					<ul class="loginBox">

+ 4 - 4
src/main/webapp/WEB-INF/views/system/MenuForm.html

@@ -68,7 +68,7 @@
 						<!-- 버튼 배치 영역 -->
 						<ul class="panelBar">
 							<li class="right">
-								<button type="button" class="btn btn-danger btn-lg btnDelete">삭제</button>
+								<button type="button" class="btn btn-danger btn-lg btnDelete">사용안함</button>
 							</li>
 						</ul>
 						<!-- //버튼 배치 영역 -->
@@ -265,7 +265,7 @@
 						<!-- 버튼 배치 영역 -->
 						<ul class="panelBar">
 							<li class="right">
-								<input type="button" value="초기화" class="btn btn-gray btn-lg" onclick="$('#detailForm')[0].reset();"/>
+<!-- 								<input type="button" value="초기화" class="btn btn-gray btn-lg" onclick="$('#detailForm')[0].reset();"/> -->
 								<input type="button" value="저장" class="btn btn-base btn-lg" onclick="fnSave('#detailForm');"/>
 							</li>
 						</ul>
@@ -475,11 +475,11 @@
 		var removedData = gagaAgGrid.removeRowData(gridOptions);
 		
 		if (removedData.length == 0) {
-			alert('선택된 행이 없습니다.');
+			mcxDialog.alert('선택된 행이 없습니다.');
 			return;
 		}
 		
-		mcxDialog.confirm("정말 삭제하시겠습니까?", {
+		mcxDialog.confirm("사용안함으로 처리하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {

+ 36 - 3
src/main/webapp/WEB-INF/views/system/UserDetailForm.html

@@ -94,7 +94,7 @@
 					<tr>
 						<th>포인트부여가능금액</th>
 						<td>
-							<input type="text" name="pntAssignAmt" class="aR" placeholder="" maxlength="6" data-valid-type="integer" data-valid-name="포인트부여가능금액"/>
+							<input type="text" name="pntAssignAmt" class="aR" placeholder="" maxlength="6" data-valid-type="pinteger" data-valid-name="포인트부여가능금액"/>
 						</td>
 						<th>IP주소</th>
 						<td>
@@ -180,6 +180,7 @@
 							<span id="detailRoleRefVal" th:if="${userInfo.roleCd == 'G001_B000'}">업체</span>
 							<span id="detailRoleRefVal" th:if="${userInfo.roleCd == 'G001_C000'}">외부몰벤더</span>
 							<span id="detailRoleRefVal" th:if="${userInfo.roleCd == 'G001_D000'}">제휴채널</span>
+							<span id="detailRoleRefVal" th:if="${userInfo.roleCd != 'G001_B000' and userInfo.roleCd != 'G001_C000' and userInfo.roleCd != 'G001_D000'}"></span>
 						</th>
 						<td>
 							<input type="hidden" name="roleRefVal" th:value="${userInfo.roleRefVal}"/>
@@ -211,7 +212,7 @@
 						</td>
 						<th>포인트부여가능금액</th>
 						<td>
-							<input type="text" class="aR" name="pntAssignAmt" placeholder="" maxlength="6" data-valid-type="integer" data-valid-name="포인트부여가능금액" th:field="*{pntAssignAmt}"/>
+							<input type="text" class="aR" name="pntAssignAmt" placeholder="" maxlength="6" data-valid-type="pinteger" data-valid-name="포인트부여가능금액" th:field="*{pntAssignAmt}"/>
 						</td>
 					</tr>
 					<tr>
@@ -461,6 +462,39 @@
 			}
 		}
 		
+		var abRoleCd = $(formId + ' select[name=roleCd]').val().substring(0,6);
+		if (abRoleCd == 'G001_B') { // 입점업체
+			if (gagajf.isNull($(formId + ' select[name=supplyCompCd]').val())) {
+				mcxDialog.alertC('업체를 선택해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$(formId + ' select[name=supplyCompCd]').focus();
+					}
+				});
+				return;
+			}
+		} else if (abRoleCd == 'G001_C') { // 외부몰벤더
+			if (gagajf.isNull($(formId + ' select[name=vendorId]').val())) {
+				mcxDialog.alertC('외부몰벤더를 선택해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$(formId + ' select[name=vendorId]').focus();
+					}
+				});
+				return;
+			}
+		} else if (abRoleCd == 'G001_D') { // 제휴채널
+			if (gagajf.isNull($(formId + ' select[name=afLinkCd]').val())) {
+				mcxDialog.alertC('제휴채널을 선택해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$(formId + ' select[name=afLinkCd]').focus();
+					}
+				});
+				return;
+			}
+		}
+		
 		if ($(formId + ' input:checkbox[name=chkIpChkYn]').is(":checked")) {
 			if (gagajf.isNull($(formId + ' input[name=ipAddr]').val())) {
 				mcxDialog.alertC('IP주소를 입력해 주세요.', {
@@ -481,7 +515,6 @@
 				$(formId + ' input[name=maskingYn]').val($(formId + ' input:checkbox[name=chkMaskingYn]').is(":checked") ? 'Y' : 'N');
 				$(formId + ' input[name=useYn]').val($(formId + ' input:checkbox[name=chkUseYn]').is(":checked") ? 'Y' : 'N');
 				
-				var abRoleCd = $(formId + ' select[name=roleCd]').val().substring(0,6);
 				if (abRoleCd == 'G001_A' || abRoleCd == 'G001_B' || abRoleCd == 'G001_E') { // 자사,입점,촬영업체
 					$(formId + ' input[name=roleRefVal]').val($(formId + ' select[name=supplyCompCd]').val());
 				} else if (abRoleCd == 'G001_C') { // 외부몰벤더

+ 56 - 7
src/main/webapp/WEB-INF/views/system/UserForm.html

@@ -42,10 +42,14 @@
 					<tr>
 						<th>업체</th>
 						<td>
-							<select name="supplyCompCd">
-								<option th:if="${sessionInfo.supplyCompCd == null}" value="">[전체]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
+<!-- 							<select name="supplyCompCd"> -->
+<!-- 								<option th:if="${sessionInfo.supplyCompCd == null}" value="">[전체]</option> -->
+<!-- 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option> -->
+<!-- 							</select> -->
+							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20"/>
+							<button type="button" class="btn icn" onclick="cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');"><i class="fa fa-search"></i></button>
+							<span id="supplyCompTxt"></span>
+							<input type="hidden" name="supplyCompList"/>
 						</td>
 						<th>권한</th>
 						<td>
@@ -77,7 +81,7 @@
 				<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>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
 					</li>
 				</ul>
 			</form>
@@ -90,7 +94,7 @@
 			<ul class="panelBar">
 				<li class="right">
 					<button type="button" class="btn btn-info btn-lg" onclick="fnOpenUserDetailPopup('N');">등록</button>
-					<button type="button" class="btn btn-danger btn-lg" id="btnDelete">삭제</button>
+					<button type="button" class="btn btn-danger btn-lg" id="btnDelete">사용안함</button>
 				</li>
 			</ul>
 			<!-- //버튼 배치 영역 -->
@@ -142,11 +146,24 @@
 		{headerName: "IP체크여부", field: "ipChkYn", width: 100, cellClass: 'text-center'},
 		{headerName: "마스킹여부", field: "maskingYn", width: 100, cellClass: 'text-center'},
 		{headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center'},
+		{
+			headerName: '비밀번호변경일시', field: 'passwdChgDt', 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: 'loginLdt', 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: '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") : '';
+			}
 		}
 	];
 	
@@ -155,6 +172,38 @@
 	
 	gridOptions.rowSelection = 'multiple';
 	
+	// 업체 조회 팝업에서 호출
+	var fnSetSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompTxt = "";
+		var sIndex = 0;
+		$('#supplyCompTxt').html('');
+		$('#searchForm input[name=supplyCompSearchTxt]').val('');
+		
+		result.forEach(function(supplyComp) {
+			sIndex++; 
+			arrSupplyComp.push(supplyComp.supplyCompCd);
+		});
+
+		// 조회 값이 하나일 경우 화면에 코드 노출. 그 외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#searchForm input[name=supplyCompSearchTxt]').val(arrSupplyComp[0]);
+		} else {
+			supplyCompTxt = sIndex + " 개";
+			$('#supplyCompTxt').html(supplyCompTxt);
+		}
+		
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#searchForm input[name=supplyCompList]").val(jsonData);
+	}
+	
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		$('#searchForm')[0].reset();
+		$('#searchForm input[name=supplyCompList]').val('');
+		$('#supplyCompTxt').html('');
+	});
+	
 	// 조회
 	$('#btnSearch').on('click', function() {
 		// Fetch data
@@ -170,7 +219,7 @@
 			return;
 		}
 		
-		mcxDialog.confirm("정말 삭제하시겠습니까?", {
+		mcxDialog.confirm("사용안함으로 처리하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {

+ 5 - 2
src/main/webapp/WEB-INF/views/withdraw/WithdrawExceptionListForm.html

@@ -494,7 +494,7 @@
 						cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
 					}
 				*/
-
+				
 					
 				} else if (event.data.reasonCode == '02' || event.data.reasonCode == '03') { // 미착 , 과착 
 					param += "&ordNo=" 			+ event.data.orderNo;
@@ -563,7 +563,7 @@
 				param += "&ordNo=" 			+ event.data.orderNo;
 				param += "&ordDtlNo=" 		+ event.data.orderDtlNo;
 				param += "&delvFeeCd="		+ event.data.delvFeeCd;
-				param += "&ordChgGb="		+ "G681_50"";
+				param += "&ordChgGb="		+ "G681_50";
 				param += "&delvFeeCdGrp="	+ "WMS";
 				param += "&ordChgSq=" 		+ ordChgSq;
 				param += "&ordDtlNoArr=" 	+ ordDtlNoList.split(",");
@@ -572,7 +572,10 @@
 				
 				var actionUrl = "/orderChange/rtn/req/form?" + param;
 				cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+				
 			}
+			
+			
 		}
 	}
 

BIN=BIN
src/main/webapp/image/logo_STYLE24.png


+ 62 - 6
src/main/webapp/ux/plugins/gaga/gaga.validation.js

@@ -107,7 +107,7 @@ var gagajf = {
 	testRegexp : function(el, regexp, type) {
 		var val = $(el).val();
 
-		if (type == 'integer' || type == 'real') {
+		if (type == 'integer' || type == 'pinteger' || type == 'real' || type == 'preal') {
 			// 콤마(,) 제거
 			val = val.removeComma();
 		}
@@ -307,12 +307,24 @@ var gagajf = {
 					if (gagajf.testRegexp($(el), /(^-?[0-9]+\d*$)|(^-$)/, 'integer'))
 						return true;
 
+					isInvalid = false;
+					return false;
+				case 'pinteger': // 양의정수
+					if (gagajf.testRegexp($(el), /(^[0-9]+\d*$)/, 'pinteger'))
+						return true;
+
 					isInvalid = false;
 					return false;
 				case 'real': // 실수
 					if (gagajf.testRegexp($(el), /^-?(([0-9]+\.?)|(\.?))\d*$/, 'real'))
 						return true;
 
+					isInvalid = false;
+					return false;
+				case 'preal': // 실수
+					if (gagajf.testRegexp($(el), /^(([0-9]+\.?)|(\.?))\d*$/, 'preal'))
+						return true;
+
 					isInvalid = false;
 					return false;
 				case 'alphaNumeric': // 알파벳+숫자
@@ -396,8 +408,8 @@ var gagajf = {
 							return false;
 						}
 					}
-
 				case 'integer': // 정수
+				case 'pinteger': // 양의정수
 					//최대값
 					if ($(el).attr("max")) {
 						if ($(el).val() > $(el).attr("max")) {
@@ -425,6 +437,7 @@ var gagajf = {
 						}
 					}
 				case 'real': // 실수
+				case 'preal': // 양의실수
 					//최대값
 					if ($(el).attr("max")) {
 						if ($(el).val() > $(el).attr("max")) {
@@ -478,24 +491,24 @@ var gagajf = {
 	},
 
 	/**
-	 * formId의 input의 data-valid-type이 integer, real인 경우에 값에 comma(,)를 자동으로 붙여 표시한다.
+	 * formId의 input의 data-valid-type이 integer, pinteger, real, preal인 경우에 값에 comma(,)를 자동으로 붙여 표시한다.
 	 * 사용) gagajf.addCommaAtNumberFormattedInput('#registerForm');
 	 */
 	addCommaAtNumberFormattedInput : function(formId) {
 		$(formId).find('input').each(function(idx, el) {
-			if ($(el).data('validType') == 'integer' || $(el).data('validType') == 'real') {
+			if ($(el).data('validType') == 'integer' || $(el).data('validType') == 'pinteger' || $(el).data('validType') == 'real' || $(el).data('validType') == 'preal') {
 				$(el).val($(el).val().removeComma().addComma());
 			}
 		});
 	},
 
 	/**
-	 * formId의 input의 data-valid-type이 integer, real, numeric 인 경우에 값에 comma(,)를 자동으로 제거한다.
+	 * formId의 input의 data-valid-type이 integer, pinteger, real, preal, numeric 인 경우에 값에 comma(,)를 자동으로 제거한다.
 	 * 사용) gagajf.removeCommaAtNumberFormattedInput('#registerForm');
 	 */
 	removeCommaAtNumberFormattedInput : function(formId) {
 		$(formId).find('input').each(function(idx, el) {
-			if ($(el).data('validType') == 'integer' || $(el).data('validType') == 'real' || $(el).data('validType') == 'numeric') {
+			if ($(el).data('validType') == 'integer' || $(el).data('validType') == 'pinteger' || $(el).data('validType') == 'real' || $(el).data('validType') == 'preal' || $(el).data('validType') == 'numeric') {
 				$(el).val($(el).val().removeComma());
 			}
 		});
@@ -1076,7 +1089,9 @@ var gagajf = {
  * @desc   : <input> 태그에 대한 키눌림에 대해 validation을 체크한다.
  *           data-valid-type="numeric" : 숫자. 속성 지정시 숫자만 입력 가능
  *           data-valid-type="integer" : 정수. 속성 지정시 숫자와 +, - 만 입력 가능
+ *           data-valid-type="pinteger" : 양의정수. 속성 지정시 숫자와 +만 입력 가능
  *           data-valid-type="real" : 실수. 속성 지정시 숫자와 +, -, . 만 입력 가능
+ *           data-valid-type="preal" : 양의실수. 속성 지정시 숫자와 +, .만 입력 가능
  *           data-valid-type="alphaNumeric" : 알파벳과 숫자. 속성 지정 시 영문과 숫자만 형식에 맞게 입력 가능
  *           data-valid-type="date" : 숫자와 / 만 입력 가능
  *           data-valid-type="korean" : 한글. 속성 지정 시 한글만 형식에 맞게 입력 가능
@@ -1089,7 +1104,9 @@ var gagajf = {
  * <pre>
  *     <input type="text" data-valid-type="numeric" />
  *     <input type="text" data-valid-type="integer" />
+ *     <input type="text" data-valid-type="pinteger" />
  *     <input type="text" data-valid-type="real" />
+ *     <input type="text" data-valid-type="preal" />
  *     <input type="text" data-valid-type="alphaNumeric" />
  *     <input type="text" data-valid-type="date" />
  *     <input type="text" data-valid-type="korean" />
@@ -1139,6 +1156,25 @@ $(document).on("keydown", "[data-valid-type=integer]", function() {
 		event.returnValue = false;
 	}
 });
+$(document).on("blur", "[data-valid-type=pinteger]", function() { $(this).val($(this).val().removeComma().addComma()); });
+$(document).on("click", "[data-valid-type=pinteger]", function() { $(this).val($(this).val().removeComma()); });
+$(document).on("keyup", "[data-valid-type=pinteger]", function() { $(this).val($(this).val().replace(/[^0-9-\+]/gi,"")); });
+$(document).on("keydown", "[data-valid-type=pinteger]", function() {
+	var value = $(this).val();
+
+	var keyCode = gagajf.getKeyCode();
+	if (keyCode == -1)
+		return true;
+
+	if (!((keyCode >= 48 && keyCode <= 57 && !event.shiftKey) // 0 ~ 9
+		|| (keyCode >= 96 && keyCode <= 105) // 0 ~ 9 (Num Lock)
+		|| (keyCode == 187 && event.shiftKey) // Shift 하고 +
+		|| (keyCode == 107) // + (Num Lock)
+		)) {
+		$(this).val(value);
+		event.returnValue = false;
+	}
+});
 $(document).on("blur", "[data-valid-type=real]", function() { $(this).val($(this).val().removeComma().addComma()); });
 $(document).on("click", "[data-valid-type=real]", function() { $(this).val($(this).val().removeComma()); });
 $(document).on("keyup", "[data-valid-type=real]", function() { $(this).val($(this).val().replace(/[^0-9-\+\.]/gi,"")); });
@@ -1161,6 +1197,26 @@ $(document).on("keydown", "[data-valid-type=real]", function() {
 		event.returnValue = false;
 	}
 });
+$(document).on("blur", "[data-valid-type=preal]", function() { $(this).val($(this).val().removeComma().addComma()); });
+$(document).on("click", "[data-valid-type=preal]", function() { $(this).val($(this).val().removeComma()); });
+$(document).on("keyup", "[data-valid-type=preal]", function() { $(this).val($(this).val().replace(/[^0-9\+\.]/gi,"")); });
+$(document).on("keydown", "[data-valid-type=preal]", function() {
+	var value = $(this).val();
+
+	var keyCode = gagajf.getKeyCode();
+	if (keyCode == -1)
+		return true;
+
+	if (!((keyCode >= 48 && keyCode <= 57 && !event.shiftKey) // 0 ~ 9
+		|| (keyCode >= 96 && keyCode <= 105) // 0 ~ 9 (Num Lock)
+		|| (keyCode == 187 && event.shiftKey) // Shift 하고 +
+		|| (keyCode == 107) // + (Num Lock)
+		|| (keyCode == 190 && !event.shiftKey) // .
+		)) {
+		$(this).val(value);
+		event.returnValue = false;
+	}
+});
 $(document).on("keyup", "[data-valid-type=alphaNumeric]", function() { $(this).val($(this).val().replace(/[^a-zA-Z0-9]/gi, "")); });
 $(document).on("keyup", "[data-valid-type=date]", function() { $(this).val($(this).val().replace(/[^0-9\/]/gi,"")); });
 $(document).on("keyup", "[data-valid-type=calendar]", function() { $(this).val($(this).val().replace(/[^0-9\/]/gi,"")); });