Quellcode durchsuchen

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

card007 vor 5 Jahren
Ursprung
Commit
8788ad2660
34 geänderte Dateien mit 671 neuen und 255 gelöschten Zeilen
  1. 20 0
      src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java
  2. 24 0
      src/main/java/com/style24/admin/biz/dao/TsaReviewDao.java
  3. 27 0
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  4. 5 4
      src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  5. 44 3
      src/main/java/com/style24/admin/biz/service/TsaReviewService.java
  6. 20 3
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  7. 27 6
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  8. 32 3
      src/main/java/com/style24/admin/biz/web/TsaStockController.java
  9. 2 2
      src/main/java/com/style24/persistence/domain/GoodsImg.java
  10. 1 0
      src/main/java/com/style24/persistence/domain/GoodsSafeNo.java
  11. 8 0
      src/main/java/com/style24/persistence/domain/Review.java
  12. 45 6
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  13. 93 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaReview.xml
  14. 4 4
      src/main/webapp/WEB-INF/views/business/SupplyCompanyPopupForm.html
  15. 6 3
      src/main/webapp/WEB-INF/views/display/LookbookBannerPickerPopupForm.html
  16. 125 163
      src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html
  17. 14 12
      src/main/webapp/WEB-INF/views/display/MainListForm.html
  18. 18 10
      src/main/webapp/WEB-INF/views/goods/GoodsImageForm.html
  19. 2 2
      src/main/webapp/WEB-INF/views/goods/GoodsVideoForm.html
  20. 14 0
      src/main/webapp/WEB-INF/views/marketing/CouponListForm.html
  21. 70 18
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  22. 2 8
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html
  23. 2 2
      src/main/webapp/WEB-INF/views/marketing/ReviewForm.html
  24. 1 1
      src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html
  25. 6 5
      src/main/webapp/ux/css/admin.ui.css
  26. 59 0
      src/main/webapp/ux/css/font.css
  27. BIN
      src/main/webapp/ux/font/opensans_300.woff2
  28. BIN
      src/main/webapp/ux/font/opensans_400.woff2
  29. BIN
      src/main/webapp/ux/font/opensans_600.woff2
  30. BIN
      src/main/webapp/ux/font/opensans_700.woff2
  31. BIN
      src/main/webapp/ux/font/roboto_300.woff2
  32. BIN
      src/main/webapp/ux/font/roboto_400.woff2
  33. BIN
      src/main/webapp/ux/font/roboto_500.woff2
  34. BIN
      src/main/webapp/ux/font/roboto_700.woff2

+ 20 - 0
src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -1190,4 +1190,24 @@ public interface TsaGoodsDao {
 	 */
 	void deleteGoodsQuikDeleverySkip(Goods goods);
 
+	/**
+	 * 상품 모델 정보
+	 *
+	 * @param goodsImg
+	 * @return
+	 * @author eskim
+	 * @since 2021. 04. 27
+	 */
+	GoodsImg getGoodsModelInfo(GoodsImg goodsImg);
+	
+	/**
+	 * 상품 모델 정보 저장
+	 *
+	 * @param goodsImg
+	 * @return
+	 * @author eskim
+	 * @since 2021. 04. 27
+	 */
+	void saveGoodsModelInfo(GoodsImg goodsImg);
+
 }

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

@@ -58,4 +58,28 @@ public interface TsaReviewDao {
 	 */
 	void deleteReviewAttach(ReviewAttach reviewAttach);
 
+	/**
+	 * 베스트상품평포인트 생성
+	 * @param review - 상품평 정보
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	void createBestReviewPoint(Review review);
+
+	/**
+	 * 베스트상품평포인트이력 생성
+	 * @param review - 상품평 정보
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	void createBestReviewPointHistory(Review review);
+
+	/**
+	 * 베스트상품평 선정 처리
+	 * @param review - 상품평 정보
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	void updateBestReviewSelection(Review review);
+
 }

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

@@ -684,6 +684,7 @@ public class TsaGoodsService {
 						goodsSafeNo.setCertNum(result.get("certNum").toString());
 						goodsSafeNo.setCertState(result.get("certState").toString());
 						goodsSafeNo.setCertDiv(result.get("certDiv").toString());
+						goodsSafeNo.setCertOrganName(result.get("certOrganName").toString());
 						goodsSafeNo.setRegNo(TsaSession.getInfo().getUserNo());
 						goodsSafeNo.setUpdNo(TsaSession.getInfo().getUserNo());
 						goodsDao.saveGoodsSafeNo(goodsSafeNo);
@@ -3718,4 +3719,30 @@ public class TsaGoodsService {
 		}
 		
 	}
+	
+	/**
+	 * 상품 모델 정보
+	 *
+	 * @param goodsImg
+	 * @return
+	 * @author eskim
+	 * @since 2021. 04. 27
+	 */
+	public GoodsImg getGoodsModelInfo(GoodsImg goodsImg) {
+		return goodsDao.getGoodsModelInfo(goodsImg);
+	}
+	
+	/**
+	 * 상품 모델 정보 저장
+	 *
+	 * @param goodsImg
+	 * @return
+	 * @author eskim
+	 * @since 2020.04. 27
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGoodsModelInfo(GoodsImg goodsImg) {
+		goodsDao.saveGoodsModelInfo(goodsImg);
+	}
+	
 }

+ 5 - 4
src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java

@@ -225,10 +225,11 @@ public class TsaMorebetterService {
         MoreBetterGoods moreBetterGoods = new MoreBetterGoods();
         StringBuilder sb = new StringBuilder();
         //int i = 1;
-        if(moreBetter.getApplyGoodsList().size()>0){
-            for(int i=0; i<moreBetter.getApplyGoodsList().size(); i++){
-                sb.append("SELECT   '").append(moreBetter.getApplyGoodsList().get(i).getGoodsCd()).append("' AS GOODS_CD ");
-                if(i<moreBetter.getApplyGoodsList().size()-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){
                     sb.append("\n UNION ALL \n");
                 }
             }

+ 44 - 3
src/main/java/com/style24/admin/biz/service/TsaReviewService.java

@@ -7,7 +7,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.admin.biz.dao.TsaReviewDao;
-import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.ReviewAttach;
 
@@ -24,10 +26,10 @@ import lombok.extern.slf4j.Slf4j;
 public class TsaReviewService {
 
 	@Autowired
-	private TscMessageByLocale message;
+	private TsaReviewDao reviewDao;
 
 	@Autowired
-	private TsaReviewDao reviewDao;
+	private TscEnvsetService envsetService;
 
 	/**
 	 * 상품평 목록
@@ -79,4 +81,43 @@ public class TsaReviewService {
 		reviewDao.deleteReviewAttach(reviewAttach);
 	}
 
+	/**
+	 * 베스트상품평선정 처리
+	 * @param reviewList - 상품평 목록
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	@Transactional("shopTxnManager")
+	public void saveBestReviewList(Collection<Review> reviewList) {
+		// 1.베스트상품평포인트금액
+		int bestPntAmt = envsetService.getBestReviewPoint(TscConstants.Site.STYLE24.value());
+
+		for (Review review : reviewList) {
+			review.setGvPntAmt(bestPntAmt);
+			review.setRegNo(TsaSession.getInfo().getUserNo());
+			review.setUpdNo(TsaSession.getInfo().getUserNo());
+
+			// 2.베스트상품평포인트 생성
+			reviewDao.createBestReviewPoint(review);
+
+			// 고객포인트일련번호 설정
+			Integer custPntSq = review.getCustPntSq();
+			if (review.getCustPntSq() == null) {
+				review.setCustPntSq(custPntSq);
+			}
+
+			review.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
+			review.setOccurDtlDesc("베스트상품평포인트 지급");
+			review.setPntAmt(bestPntAmt);
+			review.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+
+			// 3.베스트상품평포인트이력 생성
+			reviewDao.createBestReviewPointHistory(review);
+
+			// 4.베스트상품평선정 처리
+			review.setGiveDueBpnt(bestPntAmt);
+			reviewDao.updateBestReviewSelection(review);
+		}
+	}
+
 }

+ 20 - 3
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -1021,7 +1021,16 @@ public class TsaGoodsController extends TsaBaseController {
 			mav.addObject("defaultImgOrd", "1");
 			mav.addObject("mouseoverImgOrd", "1");
 		}
-
+		
+		GoodsImg goodsModelInfo = goodsService.getGoodsModelInfo(goodsImg);
+		
+		if (goodsModelInfo != null) {
+			mav.addObject("modelInfo", goodsModelInfo.getModelInfo());	
+		}else {
+			mav.addObject("modelInfo", "");	
+		}
+		
+		
 		mav.addObject("goodsImg", goodsImg);
 		mav.setViewName("goods/GoodsImageForm");
 		return mav;
@@ -1047,6 +1056,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		int index = 1;
 		String strBrandNo = "";
+		GoodsImg goodsModelInfo = new GoodsImg();
 
 		// 오류 파일 목록
 		Collection<File> errorFileList = new ArrayList<File>();
@@ -1057,7 +1067,9 @@ public class TsaGoodsController extends TsaBaseController {
 			if (goodsImg.getMode().equals("D")) {
 				continue;
 			}
-
+			goodsModelInfo.setGoodsCd(goodsImg.getGoodsCd());
+			goodsModelInfo.setModelInfo(goodsImg.getModelInfo());
+			
 			// 상품의 브랜드 번호 추출
 			if (strBrandNo.isEmpty()) {
 				Goods goods = new Goods();
@@ -1131,9 +1143,14 @@ public class TsaGoodsController extends TsaBaseController {
 
 			}
 		}
-
+		
 		// 상품이미지 저장 처리
 		goodsService.saveGoodsImageList(goodsImgList);
+		
+		// 모델정보 처리
+		goodsModelInfo.setRegNo(TsaSession.getInfo().getUserNo());
+		goodsModelInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+		goodsService.saveGoodsModelInfo(goodsModelInfo);
 
 		return super.ok(message.getMessage("SUCC_0007"));
 	}

+ 27 - 6
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -262,6 +262,25 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0004"));
 	}
 
+	/**
+	 * 베스트상품평선정 처리
+	 * @param reviewList - 상품평 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	@PostMapping("/review/best/list/save")
+	@ResponseBody
+	public GagaResponse saveBestReviewList(@RequestBody Collection<Review> reviewList) {
+		if (reviewList == null || reviewList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		reviewService.saveBestReviewList(reviewList);
+
+		return super.ok(message.getMessage("SUCC_0004"));
+	}
+
 	/* xodud1202 진행 */
 	/**
 	 * 사은품 프로모션 관리 화면
@@ -415,6 +434,8 @@ public class TsaMarketingController extends TsaBaseController {
 	public ModelAndView couponListForm() {
 		ModelAndView mav = new ModelAndView();
 
+		// 쿠폰상태 목록
+		mav.addObject("cpnStatList", rendererService.getAvailCommonCodeList("G232"));
 		// 쿠폰 유형 조회
 		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230", "Y"));
 		// 할인 유형 조회
@@ -441,16 +462,16 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getCouponList(@RequestBody Coupon param) {
 		GagaMap result = new GagaMap();
 
-		ArrayList<Coupon> cpnList = coreCouponService.getCouponList(param);
-		int cpnTotCnt = coreCouponService.getCouponListCnt(param);
+//		ArrayList<Coupon> cpnList = coreCouponService.getCouponList(param);
+//		int cpnTotCnt = coreCouponService.getCouponListCnt(param);
 
-		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+//		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
-		param.getPageable().setTotalCount(cpnTotCnt);
+		param.getPageable().setTotalCount(coreCouponService.getCouponListCnt(param));
 
 		result.set("pageing", param);
-		result.set("cpnTotCnt", cpnTotCnt);
-		result.set("cpnList", cpnList);
+//		result.set("cpnTotCnt", cpnTotCnt);
+		result.set("cpnList", coreCouponService.getCouponList(param));
 
 		return result;
 	}

+ 32 - 3
src/main/java/com/style24/admin/biz/web/TsaStockController.java

@@ -129,6 +129,9 @@ public class TsaStockController extends TsaBaseController {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
+		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+		}
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
 			try {
@@ -149,6 +152,8 @@ public class TsaStockController extends TsaBaseController {
 				throw new IllegalStateException(message.getMessage("업체코드 검색중 오류로 인해 조회되지 않았습니다."));
 			}
 		}
+		
+		log.info("[goodsSearch] goodsSearch =>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(stockService.getGoodsSizeStockCount(goodsSearch));
@@ -179,6 +184,29 @@ public class TsaStockController extends TsaBaseController {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
+		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+		}
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
+			try {
+				String [] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
+				goodsSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException(message.getMessage("브랜드코드 검색중 오류로 인해 조회되지 않았습니다."));
+			}
+		}
+
+		if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
+			try {
+				String [] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
+				goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException(message.getMessage("업체코드 검색중 오류로 인해 조회되지 않았습니다."));
+			}
+		}
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 
 		// 대용량엑셀파일다운로드는 이런 식으로 ...
@@ -199,14 +227,15 @@ public class TsaStockController extends TsaBaseController {
 	@PostMapping("/sizeSoldout/excelupload/save")
 	@ResponseBody
 	public GagaResponse saveGoodsSizeSoldoutExcelupload(@RequestBody Goods goods) throws Exception {
-
+		log.info("[saveGoodsSizeSoldoutExcelupload]Goods = >{}", goods);
 		ObjectMapper mapper = new ObjectMapper();
 
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
 		// DB 처리 시 사용되는 파라미터명(셀명) 설정
 		String[] cellName = { "brandEnm", "goodsNm", "itemkindCd","goodsStat","goodsCd", "optCd", "optCd1", "optCd2",  "soldoutYn",
-			"currStockQty", "baseStockQty","saleStockQty", "ableStockQty"};
-
+								"currStockQty", "baseStockQty","saleStockQty", "ableStockQty"};
+		log.info("[saveGoodsSizeSoldoutExcelupload]targetPath = >{}", targetPath);
+		log.info("[saveGoodsSizeSoldoutExcelupload]getExcelFileNm = >{}", GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
 		Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()), 0, cellName, 0);
 
 		//건수

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

@@ -26,6 +26,7 @@ public class GoodsImg extends TscBaseDomain {
 	private int mouseoverImgOrd;
 	private String sysImgUrl;
 	private int brandNo;
+	private String modelInfo;
 
 	private String goodsImgPath;
 	private String col;
@@ -33,7 +34,6 @@ public class GoodsImg extends TscBaseDomain {
 	private String mainColorYn;
 	private String colorEnm;
 	private String optCd1;
-
-
+	
 
 }

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

@@ -19,6 +19,7 @@ public class GoodsSafeNo extends TscBaseDomain {
 	private String certNum;
 	private String certState;
 	private String certDiv;
+	private String certOrganName;
 	private String certDt;
 
 }

+ 8 - 0
src/main/java/com/style24/persistence/domain/Review.java

@@ -86,4 +86,12 @@ public class Review extends TscBaseDomain {
 		return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.name(getCustNm()) : getCustNm();
 	}
 
+	// 베스트상품평포인트 생성
+	private Integer custPntSq;		// 고객포인트일련번호
+	private int gvPntAmt;			// 지급포인트금액
+	private String occurGb;			// 포인트발생구분
+	private String occurDtlDesc;	// 포인트발생상세설명
+	private int pntAmt;				// 포인트금액
+	private String pntUploadStat;	// 포인트반영상태
+
 }

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

@@ -949,6 +949,7 @@
 		     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
 		     , E.CERT_NUM
 		     , E.CERT_DT
+		     , E.CERT_ORGAN_NAME
 		     , DATE_FORMAT(G.SELL_STDT, '%Y%m%d%H%i%S') AS SELL_STDT
 		     , DATE_FORMAT(G.SELL_EDDT, '%Y%m%d%H%i%S') AS SELL_EDDT
 		FROM TB_GOODS G
@@ -2841,7 +2842,7 @@
 		     , FN_GET_USER_NM(A.REG_NO) AS REG_NM
 		     , DATE_FORMAT(A.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
 		     , A.UPD_NO
-		     , FN_GET_USER_NM(A.UPD_NO) AS REG_NM
+		     , 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_GOODS_VIDEO A
 		INNER JOIN TB_GOODS C ON A.GOODS_CD = C.GOODS_CD
@@ -3104,6 +3105,7 @@
 		    GOODS_CD
 		  , CERT_NUM
 		  , CERT_DIV
+		  , CERT_ORGAN_NAME
 		  , CERT_STATE
 		  , CERT_DT
 		  , REG_NO
@@ -3115,6 +3117,7 @@
 		    #{goodsCd}
 		  , #{certNum}
 		  , #{certDiv}
+		  , #{certOrganName}
 		  , #{certState}
 		  , #{certDt}
 		  , #{regNo}
@@ -3125,6 +3128,7 @@
 		ON DUPLICATE KEY UPDATE
 		       CERT_NUM = #{certNum}
 		     , CERT_DIV = #{certDiv}
+		     , CERT_ORGAN_NAME = #{certOrganName}
 		     , CERT_STATE = #{certState}
 		     , CERT_DT = #{certDt}
 		     , UPD_NO = #{updNo}
@@ -3700,11 +3704,11 @@
 		/* TsaGoods.getGoodsWmsIncomelotListCount */
 		SELECT COUNT(*)
 		FROM TB_WMS_GOODS A
-		LEFT OUTER JOIN TB_BRAND B ON A.BRAND_NO = B.BRAND_NO 
+		INNER JOIN TB_BRAND B ON A.BRAND_NO = B.BRAND_NO 
 		                           AND B.SELF_YN  = 'Y'
 		                           AND B.USE_YN  = 'Y'
-		LEFT OUTER JOIN TB_SUPPLY_COMPANY S ON A.PROVIDER_NO = S.PROVIDER_NO
-		WHERE GOODS_REG_GB IS NULL   /* 온라인 미등록 상품 */
+		INNER JOIN TB_BRAND_SUPPLY S ON B.BRAND_CD = S.BRAND_CD
+		WHERE GOODS_REG_GB IS NULL                                     /* 온라인 미등록 상품 */
 		<if test="modelNo != null and modelNo != ''">
 		AND UPPER(A.MODEL_NO) LIKE CONCAT('%',UPPER(#{modelNo}),'%') 
 		</if>
@@ -3752,10 +3756,10 @@
 		     , DATE_FORMAT(A.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		FROM TB_WMS_GOODS A
 		JOIN ( SELECT @rownum := 0) R
-		LEFT OUTER JOIN TB_BRAND B ON A.BRAND_NO = B.BRAND_NO 
+		INNER JOIN TB_BRAND B ON A.BRAND_NO = B.BRAND_NO 
 		                           AND B.SELF_YN  = 'Y'
 		                           AND B.USE_YN  = 'Y'
-		LEFT OUTER JOIN TB_SUPPLY_COMPANY S ON A.PROVIDER_NO = S.PROVIDER_NO
+		INNER JOIN TB_BRAND_SUPPLY S ON B.BRAND_CD = S.BRAND_CD
 		WHERE GOODS_REG_GB IS NULL   /* 온라인 미등록 상품 */
 		<if test="modelNo != null and modelNo != ''">
 		AND UPPER(A.MODEL_NO) LIKE CONCAT('%',UPPER(#{modelNo}),'%') 
@@ -4580,4 +4584,39 @@
 		</choose>
 	</delete>
 	
+	<!-- 상품 모델 정보 -->
+	<select id="getGoodsModelInfo" parameterType="GoodsImg" resultType="GoodsImg">
+		/* TsaGoods.getGoodsModelInfo */
+		SELECT GOODS_CD
+		      , MODEL_INFO
+		FROM TB_GOODS_MODEL_INFO
+		WHERE GOODS_CD = #{goodsCd}
+	</select>	
+	
+	<!-- 상품 모델 정보 저장 -->
+	<insert id="saveGoodsModelInfo" parameterType="GoodsImg">
+		/* TsaGoods.saveGoodsModelInfo */
+		INSERT INTO TB_GOODS_MODEL_INFO
+		    (GOODS_CD
+		   , MODEL_INFO
+		   , REG_NO
+		   , REG_DT
+		   , UPD_NO
+		   , UPD_DT
+		    )
+		VALUES
+		    (
+		     #{goodsCd}
+		   , #{modelInfo}
+		   , #{regNo}
+		   , NOW()
+		   , #{updNo}
+		   , NOW()
+		    )
+		ON DUPLICATE KEY UPDATE
+		       MODEL_INFO = #{modelInfo}
+		      ,UPD_NO = #{updNo}
+		      ,UPD_DT = NOW()
+	</insert>	
+	
 </mapper>

+ 93 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaReview.xml

@@ -35,6 +35,9 @@
 		     , R.PNT_GIVE_STAT                                            /*포인트지급상태*/
 		     , R.DISP_YN                                                  /*표시여부*/
 		     , R.DEL_YN                                                   /*삭제여부*/
+		     , R.BEST_YN                                                  /*베스트여부*/
+		     , R.GIVE_DUE_BPNT                                            /*베스트지급에정포인트*/
+		     , R.BPNT_GIVE_YN                                             /*베스트포인트지급여부*/
 		     , R.CONFIRM_YN                                               /*확인여부*/
 		     , FN_GET_USER_NM(R.CONFIRM_UNO)            AS CONFIRM_UNM    /*확인자명*/
 		     , DATE_FORMAT(R.CONFIRM_DT,'%Y%m%d%H%i%S') AS CONFIRM_DT     /*확인일시*/ 
@@ -110,6 +113,9 @@
 		     , FN_GET_CODE_NM('G041',R.SCORE_BALL)           AS SCORE_BALL     /*볼넓이점수*/
 		     , R.GIVE_DUE_PNT                                                  /*지급예정포인트*/
 		     , FN_GET_CODE_NM('G043',R.PNT_GIVE_STAT)        AS PNT_GIVE_STAT  /*포인트지급상태*/
+		     , R.BEST_YN                                                       /*베스트여부*/
+		     , R.GIVE_DUE_BPNT                                                 /*베스트지급에정포인트*/
+		     , R.BPNT_GIVE_YN                                                  /*베스트포인트지급여부*/
 		     , R.CONFIRM_YN                                                    /*확인여부*/
 		     , FN_GET_USER_NM(R.CONFIRM_UNO)                 AS CONFIRM_UNM    /*확인자명*/
 		     , DATE_FORMAT(R.CONFIRM_DT,'%Y-%m-%d %H:%i:%S') AS CONFIRM_DT     /*확인일시*/ 
@@ -166,4 +172,91 @@
 		AND    DEL_YN = 'N' /*삭제안된넘*/
 	</update>
 	
+	<!-- 베스트상품평포인트 생성-->
+	<insert id="createBestReviewPoint" parameterType="Review" keyProperty="custPntSq">
+		/* TsaReview.createBestReviewPoint */
+		INSERT INTO TB_CUST_POINT (
+		       CUST_PNT_SQ
+		     , CUST_NO
+		     , GV_PNT_AMT
+		     , US_PNT_AMT
+		     , RM_PNT_AMT
+		     , EXP_BE_DT
+		     , EXP_CMP_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT NULL                             AS CUST_PNT_SQ
+		     , CUST_NO
+		     , #{gvPntAmt}                      AS GV_PNT_AMT
+		     , 0                                AS US_PNT_AMT
+		     , 0                                AS RM_PNT_AMT
+		     , DATE_ADD(NOW(), INTERVAL 1 YEAR) AS EXP_BE_DT
+		     , NULL                             AS EXP_CMP_DT
+		     , #{regNo}                         AS REG_NO
+		     , NOW()                            AS REG_DT
+		     , #{updNo}                         AS UPD_NO
+		     , NOW()                            AS UPD_DT
+		FROM   TB_REVIEW
+		WHERE  REVIEW_SQ = #{reviewSq}
+		AND    BEST_YN = 'N' /*베스트상품이아닌넘. 베스트여부 값이 변경될 수도 있으므로 체크로직 추가*/
+	</insert>
+
+	<!-- 베스트상품평포인트이력 생성-->
+	<insert id="createBestReviewPointHistory" parameterType="Review">
+		/* TsaReview.createBestReviewPointHistory */
+		INSERT INTO TB_CUST_POINT_HST (
+		       PNT_HST_SQ
+		     , CUST_NO
+		     , OCCUR_GB
+		     , OCCUR_DTL_DESC
+		     , PNT_AMT
+		     , CUST_PNT_SQ
+		     , ORD_NO
+		     , ORD_DTL_NO
+		     , REVIEW_SQ
+		     , SWITCH_DUE_DT
+		     , PNT_UPLOAD_STAT
+		     , PNT_UPLOAD_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT NULL            AS PNT_HST_SQ
+		     , CUST_NO
+		     , #{occurGb}      AS OCCUR_GB
+		     , #{occurDtlDesc} AS OCCUR_DTL_DESC
+		     , #{pntAmt}       AS PNT_AMT
+		     , #{custPntSq}    AS CUST_PNT_SQ
+		     , ORD_NO
+		     , ORD_DTL_NO
+		     , REVIEW_SQ
+		     , NOW()            AS SWITCH_DUE_DT
+		     , #{pntUploadStat} AS PNT_UPLOAD_STAT
+		     , NOW()            AS PNT_UPLOAD_DT
+		     , #{regNo}         AS REG_NO
+		     , NOW()            AS REG_DT
+		     , #{updNo}         AS UPD_NO
+		     , NOW()            AS UPD_DT
+		FROM   TB_REVIEW
+		WHERE  REVIEW_SQ = #{reviewSq}
+		AND    BEST_YN = 'N' /*베스트상품이아닌넘. 베스트여부 값이 변경될 수도 있으므로 체크로직 추가*/
+	</insert>
+	
+	<!-- 베스트상품평 선정 처리 -->
+	<update id="updateBestReviewSelection" parameterType="Review">
+		/* TsaReview.updateBestReviewSelection */
+		UPDATE TB_REVIEW
+		SET    BEST_YN = 'Y'
+		     , GIVE_DUE_BPNT = #{giveDueBpnt}
+		     , BPNT_GIVE_YN = 'Y'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		WHERE  REVIEW_SQ = #{reviewSq}
+		AND    BEST_YN = 'N' /*베스트상품이아닌넘. 베스트여부 값이 변경될 수도 있으므로 체크로직 추가*/
+	</update>
+	
 </mapper>

+ 4 - 4
src/main/webapp/WEB-INF/views/business/SupplyCompanyPopupForm.html

@@ -102,10 +102,10 @@
 		// 조회
 		$('#btnSearchCompanyList').on('click', function() {
 			
-			if (gagajf.isNull($('#searchCompanyListForm textarea[name=searchSupplyCompCd]').val())  && gagajf.isNull($('#searchCompanyListForm textarea[name=searchSupplyCompNm]').val())){
-				mcxDialog.alert('검색조건을 입력하세요.');
-				return false;
-			}
+			// if (gagajf.isNull($('#searchCompanyListForm textarea[name=searchSupplyCompCd]').val())  && gagajf.isNull($('#searchCompanyListForm textarea[name=searchSupplyCompNm]').val())){
+			// 	mcxDialog.alert('검색조건을 입력하세요.');
+			// 	return false;
+			// }
 			
 			// Fetch data
 			gagaAgGrid.fetch($('#searchCompanyListForm').prop('action'), gridOptionsCompanyPopupList, '#searchCompanyListForm');

+ 6 - 3
src/main/webapp/WEB-INF/views/display/LookbookBannerPickerPopupForm.html

@@ -33,7 +33,7 @@
 				<ul class="panelBar" id="pictureOffset"> <!--style="border-color: #dbdbdb;border-style: solid;border-width: 1px;"-->
 					<li>
 						<div class="picWrap">
-							<img id="bannerPreViewUrl" src="" class="picture" style="width:100%;"/>
+							<div id="pickerBannerPreViewUrl" class="thumb" style="background-image:url('');"></div>
 						</div>
 					</li>
 					<li>
@@ -219,9 +219,12 @@
 		}
 	}
 
-	$(document).ready(function() {
+	$(document).ready(function() {debugger;
 		var bannerImgPath = $("#lbBannerPickerForm input[name=uploadBannerUrl]").val().replace('/lookbook/banner/', '')+imgNm;
-		$("#lbBannerPickerForm #bannerPreViewUrl").attr('src', bannerImgPath);
+		$("#lbBannerPickerForm #pickerBannerPreViewUrl").css({"background-image":"url("+bannerImgPath+")"});
+		//var container = document.getElementById("pickerBannerPreViewUrl");
+		//container.style.backgroundImage = "url("+bannerImgPath+")";
+
 
 		// 상세/수정일때
 		if(mode != 'N'){

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

@@ -103,7 +103,7 @@
 				if(contentsLoc!='SMM005'  && contentsLoc!='SMM011' && contentsLoc!='SBM012'){
 					html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
 				}
-				if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004' || contentsLoc=='SCM001'){
+				if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004' || contentsLoc=='SCM001' || contentsLoc=='SOM001'){
 					html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 				}
 				if(contentsLoc=='SBM005' || contentsLoc=='SBMM005'){
@@ -166,109 +166,108 @@
 				}
 			}
 			if(contentsLoc=='SGNB001'){
+				var src = '';
+				var src2 = '';
 				html += '<tr class="cateTypeTr">';
 				html += '	<th>유형선택</th>';
 				html += '	<td colspan="3">';
+				html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+i+');"';
 				if(result[i].contentsType=='OPEN'){
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+i+');" checked="checked"/>오픈배너</label>';
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="IMG" onclick="fnChangeGnbCateType(this,'+i+');" />이미지배너</label>';
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+i+');" />텍스트배너</label>';
-				}else if(result[i].contentsType=='IMG'){
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+i+');" />오픈배너</label>';
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="IMG" onclick="fnChangeGnbCateType(this,'+i+');" checked="checked"/>이미지배너</label>';
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+i+');" />텍스트배너</label>';
-				}else{
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+i+');" />오픈배너</label>';
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="IMG" onclick="fnChangeGnbCateType(this,'+i+');" />이미지배너</label>';
-					html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+i+');" checked="checked"/>텍스트배너</label>';
+					html += ' checked="checked" ';
+				}
+				html += '/>오픈배너</label>';
+				html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="IMG" onclick="fnChangeGnbCateType(this,'+i+');" ';
+				if(result[i].contentsType=='IMG'){
+					html += ' checked="checked" ';
+				}
+				html += '/>이미지배너</label>';
+				html += '		<label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+i+');" ';
+				if(result[i].contentsType=='TEXT'){
+					html += ' checked="checked" ';
 				}
+				html += '/>텍스트배너</label>';
 				html += '	</td>';
 				html += '</tr>';
 
-				if(result[i].contentsType=='OPEN'){
-					var src = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath1;
-					var src2 = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath2;
-					html += '<tr name="imgPopRow" id="openBanner0">';
-					html += '	<th>띠배너<br>이미지</th>';
-					html += '	<td><div class="uFile w300">';
-					html += '			<input id="filePop_0" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 0)"/>';
-					html += '			<label for="filePop_0" class="uFileLabel">파일선택</label>';
-					html += '			<input type="hidden" name="imgPath" value="'+result[i].imgPath1+'"/>';
-					html += '			<input type="hidden" name="newImgFile" value="" />';
-					html += '		</div>';
-					html += '	<div id="imgViewPop_0" class=';
-					if(src!=''){
-						html += '"on">';
-					}else{
-						html += '"off">';
-					}
-					html += '		<img id="bannerPreViewUrlPop_0" src="'+src+'" style="height:100px; max-width:500px;"  onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
-					html += '	</div></td>';
-					html += '</tr>';
+				if(!gagajf.isNull(result[i].imgPath1)){
+					src = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath1;
+					src2 = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath2;
+				}
+				console.log('src::'+src);
 
-					html += '<tr class="cateTypeTr" name="openBannerTypeTr'+i+'" id="openBannerTypeTr">';
-					html += '	<th>확장형 배너<br>유형</th>';
-					html += '	<td colspan="3">';
-					if(result[i].strVar7=='IMG'){
-						html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="IMG" onclick="fnChangeOpenBannerType(this,'+i+');" checked="checked"/>이미지형</label>';
-						html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="HTML" onclick="fnChangeOpenBannerType(this,'+i+');"/>HTML형</label>';
-					}else{
-						html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="IMG" onclick="fnChangeOpenBannerType(this,'+i+');" />이미지형</label>';
-						html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="HTML" onclick="fnChangeOpenBannerType(this,'+i+');" checked="checked"/>HTML형</label>';
-					}
-					html += '	</td>';
-					html += '</tr>';
+				html += '<tr name="imgPopRow" id="openBanner0" ';
+				if(result[i].contentsType=='TEXT'){
+					html += '	style="display:none;"';
+				}
+				html += '>';
+				html += '	<th>띠배너<br>이미지</th>';
+				html += '	<td><div class="uFile w300">';
+				html += '			<input id="filePop_0" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 0)"/>';
+				html += '			<label for="filePop_0" class="uFileLabel">파일선택</label>';
+				html += '			<input type="hidden" name="imgPath" value="'+result[i].imgPath1+'"/>';
+				html += '			<input type="hidden" name="newImgFile" value="" />';
+				html += '		</div>';
+				html += '	<div id="imgViewPop_0" class=';
+				if(src!=''){
+					html += '"on">';
+				}else{
+					html += '"off">';
+				}
+				html += '		<img id="bannerPreViewUrlPop_0" src="'+src+'" style="height:100px; max-width:500px;"  onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
+				html += '	</div></td>';
+				html += '</tr>';
 
-					if(result[i].strVar7=='IMG'){
-						html += '<tr name="imgPopRow" id="openBanner1">';
-						html += '	<th>오픈배너<br>이미지</th>';
-						html += '	<td><div class="uFile w300">';
-						html += '			<input id="filePop_1" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 1)"/>';
-						html += '			<label for="filePop_1" class="uFileLabel">파일선택</label>';
-						html += '			<input type="hidden" name="imgPath" value="'+result[i].imgPath2+'"/>';
-						html += '			<input type="hidden" name="newImgFile" value="" />';
-						html += '		</div>';
-						html += '	<div id="imgViewPop_1" class=';
-						if(src!=''){
-							html += '"on">';
-						}else{
-							html += '"off">';
-						}
-						html += '		<img id="bannerPreViewUrlPop_1" src="'+src2+'" style="height:100px; max-width:500px;"  onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src2\'));"/>';
-						html += '	</div></td>';
-						html += '</tr>';
-					}else{
-						html += '<tr name="imgPopRow" id="openBanner2">';
-						html += '	<input type="hidden" name="htmlDesc'+i+'" id="htmlDesc'+i+'" value="'+result[i].html+'">';
-						html += '	<th>오픈배너<br>HTML</th>';
-						html += '	<td class="padT10"><div class="tabJrContArea">';
-						html += '		<textarea class="textareaR3 summernote" name="openBannerDesc'+i+'" id="openBannerDesc'+i+'" ></textarea>';
-						html += '	</div>';
-						html += '	</td>';
-						html += '</tr>';
-					}
+				html += '<tr class="cateTypeTr" name="openBannerTypeTr'+i+'" id="openBannerTypeTr" ';
+				if(result[i].contentsType!='OPEN'){
+					html += '	style="display:none;"';
+				}
+				html += '>';
+				html += '	<th>확장형 배너<br>유형</th>';
+				html += '	<td colspan="3">';
+				if(result[i].strVar7=='IMG'){
+					html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="IMG" onclick="fnChangeOpenBannerType(this,'+i+');" checked="checked"/>이미지형</label>';
+					html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="HTML" onclick="fnChangeOpenBannerType(this,'+i+');"/>HTML형</label>';
+				}else{
+					html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="IMG" onclick="fnChangeOpenBannerType(this,'+i+');" />이미지형</label>';
+					html += '		<label class="rdoBtn"><input type="radio" name="openBannerType'+i+'" value="HTML" onclick="fnChangeOpenBannerType(this,'+i+');" checked="checked"/>HTML형</label>';
 				}
+				html += '	</td>';
+				html += '</tr>';
 
-				if(result[i].contentsType=='IMG'){
-					var src = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath1;
-					html += '<tr name="imgPopRow" id="openBanner0">';
-					html += '	<th>띠배너<br>이미지</th>';
-					html += '	<td><div class="uFile w300">';
-					html += '			<input id="filePop_0" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 0)"/>';
-					html += '			<label for="filePop_0" class="uFileLabel">파일선택</label>';
-					html += '			<input type="hidden" name="imgPath" value="'+result[i].imgPath1+'"/>';
-					html += '			<input type="hidden" name="newImgFile" value="" />';
-					html += '		</div>';
-					html += '	<div id="imgViewPop_0" class=';
-					if(src!=''){
-						html += '"on">';
-					}else{
-						html += '"off">';
-					}
-					html += '		<img id="bannerPreViewUrlPop_0" src="'+src+'" style="height:100px; max-width:500px;"  onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
-					html += '	</div></td>';
-					html += '</tr>';
+				html += '<tr name="imgPopRow" id="openBanner1" ';
+				if(result[i].contentsType!='OPEN' && result[i].strVar7!='IMG'){
+					html += '	style="display:none;"';
+				}
+				html +='>';
+				html += '	<th>오픈배너<br>이미지</th>';
+				html += '	<td><div class="uFile w300">';
+				html += '			<input id="filePop_1" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 1)"/>';
+				html += '			<label for="filePop_1" class="uFileLabel">파일선택</label>';
+				html += '			<input type="hidden" name="imgPath" value="'+result[i].imgPath2+'"/>';
+				html += '			<input type="hidden" name="newImgFile" value="" />';
+				html += '		</div>';
+				html += '	<div id="imgViewPop_1" class=';
+				if(src!=''){
+					html += '"on">';
+				}else{
+					html += '"off">';
 				}
+				html += '		<img id="bannerPreViewUrlPop_1" src="'+src2+'" style="height:100px; max-width:500px;"  onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src2\'));"/>';
+				html += '	</div></td>';
+				html += '</tr>';
+
+				html += '<tr name="imgPopRow" id="openBanner2" ';
+				if(result[i].contentsType!='OPEN' || result[i].strVar7!='HTML'){
+					html += '	style="display:none;"';
+				}
+				html += '>';
+				html += '	<input type="hidden" name="htmlDesc'+i+'" id="htmlDesc'+i+'" value="'+result[i].html+'">';
+				html += '	<th>오픈배너<br>HTML</th>';
+				html += '	<td class="padT10"><div class="tabJrContArea">';
+				html += '		<textarea class="textareaR3 summernote" name="openBannerDesc'+i+'" id="openBannerDesc'+i+'" ></textarea>';
+				html += '	</div>';
+				html += '	</td>';
+				html += '</tr>';
 
 				html += '	<tr name="tabBgColorRow'+i+'"';
 				if(result[i].contentsType=='TEXT'){
@@ -329,7 +328,7 @@
 				}
 				html += '		</tr>';
 			}
-			if(contentsLoc=='SMM001'){
+			if(contentsLoc=='SMM001' || contentsLoc=='SOM001'){
 				html += '<tr>';
 				html += '	<th>컨텐츠유형</th>';
 				html += '	<td class="planArea" name="planArea" id="planArea'+i+'" colspan="3">';
@@ -376,24 +375,6 @@
 					html += '	</td>';
 					html += '</tr>';
 			}
-			if(contentsLoc=='STAB003'){
-				html += '	<tr name="tabCateRow">';
-				html += '		<th>카테고리</th>';
-				html += '		<td colspan="3">카테고리선택';
-				html += '			<select name="cate1List">';
-				html += '				<option value="">[선택]</option>';
-				for(let i=0; i<cate1List.length; i++){
-					if(cate1No == cate1List[i].cd){
-						html += '<option value="'+cate1List[i].cd+'" selected="selected">['+cate1List[i].cd+'] '+cate1List[i].cdNm+'</option>';
-					}else{
-						html += '<option value="'+cate1List[i].cd+'">['+cate1List[i].cd+'] '+cate1List[i].cdNm+'</option>';
-					}
-				}
-				html += '				<option value="3000">[3000] 아울렛</option>';
-				html += '			</select>';
-				html += '		</td>';
-				html += '	</tr>';
-			}
 			html += '</thead><tbody>';
 			if(contentsLoc!='SCM002' && contentsLoc!='SCM003' && contentsLoc!='SMM011' && contentsLoc!='SBM012'){
 				for(var j=1; j<5; j++){
@@ -442,14 +423,17 @@
 			let idx = $(this).find('[name=tableIdx]').val();
 			let bannerCateType = $("#mcTable"+idx).find('input:radio[name=cateType'+idx+']:checked').val();
 
-			if(bannerCateType=='OPEN'){
-				let bannerType = $("#mcTable"+idx).find('input:radio[name=openBannerType'+idx+']:checked').val();
-				if(bannerType=='HTML'){
-					let htmlDesc = $("#mcTable"+idx).find('input[name=htmlDesc'+idx+']').val();
-					gagaSn.setContents('#openBannerDesc'+idx, '');
-					$('#openBannerDesc'+idx).summernote('code', htmlDesc);
-				}
-			}
+			// if(bannerCateType=='OPEN'){
+			// 	let bannerType = $("#mcTable"+idx).find('input:radio[name=openBannerType'+idx+']:checked').val();
+			// 	if(bannerType=='HTML'){
+			// 		let htmlDesc = $("#mcTable"+idx).find('input[name=htmlDesc'+idx+']').val();
+			// 		gagaSn.setContents('#openBannerDesc'+idx, '');
+			// 		$('#openBannerDesc'+idx).summernote('code', htmlDesc);
+			// 	}
+			// }
+			let htmlDesc = $("#mcTable"+idx).find('input[name=htmlDesc'+idx+']').val();
+			gagaSn.setContents('#openBannerDesc'+idx, '');
+			$('#openBannerDesc'+idx).summernote('code', htmlDesc);
 		});
 	}
 
@@ -515,7 +499,7 @@
 			$(obj).closest("table").find("[name=tabShowYnRow"+idx+"]").hide();
 			$(obj).closest("table").find("[name=openBannerTypeTr"+idx+"]").hide();
 			$(obj).closest("table").find("input:radio[name=openBannerType"+idx+"]:input[value=IMG]").prop('checked',true);
-			$(obj).closest("table").find("[id=openBanner0]").show();
+			$(obj).closest("table").find("[id=openBanner0]").hide();
 			$(obj).closest("table").find("[id=openBanner1]").hide();
 			$(obj).closest("table").find("[id=openBanner2]").hide();
 			$(obj).closest("table").find("[name=file]").closest('div').find('label').text('파일선택');
@@ -570,7 +554,7 @@
 			if(contentsLoc!='SMM005'){
 				html += '<button type="button" class="btn btn-base btn-lg" id="addTitle'+dataIdx+'" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
 			}
-			if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004' || contentsLoc=='SCM001'){
+			if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004' || contentsLoc=='SCM001' || contentsLoc=='SOM001'){
 				html += '<button type="button" class="btn btn-base btn-lg" id="addSubText'+dataIdx+'" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
 			}
 			if(contentsLoc=='SBM005' || contentsLoc=='SBMM005'){
@@ -711,7 +695,7 @@
 			}
 			html += '		</tr>';
 		}
-		if(contentsLoc=='SMM001'){
+		if(contentsLoc=='SMM001' || contentsLoc=='SOM001'){
 			html += '<tr>';
 			html += '	<th>컨텐츠유형</th>';
 			html += '	<td class="planArea" name="planArea" id="planArea'+dataIdx+'" colspan="3">';
@@ -738,20 +722,6 @@
 			html += '	</td>';
 			html += '</tr>';
 		}
-		if(contentsLoc=='STAB003'){
-			html += '	<tr name="tabCateRow">';
-			html += '		<th>카테고리</th>';
-			html += '		<td colspan="3">카테고리선택';
-			html += '			<select name="cate1List">';
-			html += '				<option value="">[선택]</option>';
-			for(let i=0; i<cate1List.length; i++){
-				html += '<option value="'+cate1List[i].cd+'">['+cate1List[i].cd+'] '+cate1List[i].cdNm+'</option>';
-			}
-			html += '				<option value="3000">[3000] 아울렛</option>';
-			html += '			</select>';
-			html += '		</td>';
-			html += '	</tr>';
-		}
 		html += '</thead><tbody>';
 		html += '</tbody></table>';
 
@@ -763,7 +733,7 @@
 			changeYear: true,
 			defaultDate: $('.schDate').val()
 		});
-		if(contentsLoc=='SMM001'){
+		if(contentsLoc=='SMM001' || contentsLoc=='SOM001'){
 			$("#addTitle"+dataIdx).click();
 			$("#addSubText"+dataIdx).click();
 			$("#addLink"+dataIdx).click();
@@ -820,6 +790,23 @@
 		$("#mcTable"+tableDataId).find("tr[name=titlePopRow]").find("input[name=title]").val(result[0].planNm);
 		$("#mcTable"+tableDataId).find("tr[name=subTextPopRow]").find("input[name=subText]").val(result[0].dtlTitle1);
 		$("#mcTable"+tableDataId).find("tr[name=linkPopRow]").find("input[name=link]").val('/planning/detail/form?planSq='+result[0].planSq);
+		let stdt = result[0].dispStdt.split(" ");
+		let eddt = result[0].dispEddt.split(" ");
+		let stdtTime;
+		let eddtTime;
+
+		$("#mcTable"+tableDataId).find("[name=dispStdt]").val(stdt[0]);
+		$("#mcTable"+tableDataId).find("[name=dispEddt]").val(eddt[0]);
+		if(!gagajf.isNull(stdt[1])){
+			stdtTime = stdt[1].split(":");
+		}
+		if(!gagajf.isNull(eddt[1])){
+			eddtTime = eddt[1].split(":");
+		}
+		$("#mcTable"+tableDataId).find("[name=stTimeHour]").val(stdtTime[0]+'시').prop("selected", true);
+		$("#mcTable"+tableDataId).find("[name=stTimeMin]").val(stdtTime[1]+'분').prop("selected", true);
+		$("#mcTable"+tableDataId).find("[name=edTimeHour]").val(eddtTime[0]+'시').prop("selected", true);
+		$("#mcTable"+tableDataId).find("[name=edTimeMin]").val(eddtTime[1]+'분').prop("selected", true);
 	}
 
 	// SMM001 데이터 validation 체크
@@ -848,20 +835,6 @@
 		return true;
 	}
 
-	// STAB003 데이터 validation 체크
-	function stab003DataValidation(){
-		$(".mcTable").each(function(i){
-			var cateValue = $(this).find("tr[name=tabCateRow]").find("select[name=cate1List] option:selected").val();
-			console.log('cateValue::'+cateValue);
-			if(gagajf.isNull(cateValue)){
-				mcxDialog.alert('적용할 카테고리를 선택해주세요.');
-				return false;
-			}
-		});
-
-		return true;
-	}
-
 	/**
 	 * 임시저장
 	 */
@@ -871,18 +844,12 @@
 			return;
 		}
 
-		if(contentsLoc=='SMM001'){
+		if(contentsLoc=='SMM001' || contentsLoc=='SOM001'){
 			if(!smm001DataValidation()){
 				return false;
 			}
 		}
 
-		if(contentsLoc=='STAB003'){
-			if(!stab003DataValidation()){
-				return false;
-			}
-		}
-
 		var titleBool = true;
 		$("#popSortable").find('input[name=title]').each(function(idx, title) {
 			if ($(title).val()==''){
@@ -980,7 +947,7 @@
 				}
 			}
 
-			if(contentsLoc=='SMM001'){
+			if(contentsLoc=='SMM001' || contentsLoc=='SOM001'){
 				var thisIdx = $(this).find("input[name=tableIdx]").val();
 				strVar5 = $(this).find("input:radio[name=contentsType"+thisIdx+"]:checked").val();
 				strVar6 = $(this).find("input[name=planSq"+thisIdx+"]").val();
@@ -999,11 +966,6 @@
 				strVar1 = $(this).find("input:radio[name=dispCnt]:checked").val();
 			}
 
-			if(contentsLoc=='STAB003'){
-				var cateValue = $(this).find("tr[name=tabCateRow]").find("select[name=cate1List] option:selected").val();
-				contentsType = cateValue;
-			}
-
 			var data = {cateNo : cateNo
 				, contentsLoc : contentsLoc
 				, contentsType : contentsType

+ 14 - 12
src/main/webapp/WEB-INF/views/display/MainListForm.html

@@ -29,12 +29,12 @@
 		<div class="panelStyle">
 			<form id="searchForm" name="searchForm" action="#">
 				<table class="frmStyle">
-					<colgroup>
-						<col style="width: 25%;"/>
-						<col style="width: 25%;"/>
-						<col style="width: 25%;"/>
-						<col style="width: 25%;"/>
-					</colgroup>
+<!--					<colgroup>-->
+<!--						<col style="width: 25%;"/>-->
+<!--						<col style="width: 25%;"/>-->
+<!--						<col style="width: 25%;"/>-->
+<!--						<col style="width: 25%;"/>-->
+<!--					</colgroup>-->
 					<tr>
 						<th>대분류</th>
 						<td>
@@ -266,10 +266,13 @@
 				html += colspan;
 			}
 
-			var maxWidth = parseInt(tdWidth/Number(colCnt), 10);
-			if(colCnt>5){
-				maxWidth = parseInt(tdWidth/(Number(colCnt)/tdSize), 10);
+			let maxWidth = parseInt(tdWidth/Number(colCnt), 10);
+			if(maxWidth == 0){
+				maxWidth = 800;
 			}
+			// if(colCnt>5){
+			// 	maxWidth = parseInt(tdWidth/(Number(colCnt)/tdSize), 10);
+			// }
 			html += '" style="text-align:center; max-width:'+maxWidth+'px;">';
 			html += '<div><span style="font-weight:bold">'+result[i].contentsLoc+'</span></div><div><span>[ '+gagaAgGrid.lookupValue(contentsLocArr, result[i].contentsLoc)+' ]</span></div>';
 			html += '<input type="text" class="w200" name="contentsTitle" placeholder="메인타이틀" value="'+result[i].contentsTitle+'"/>';
@@ -406,14 +409,12 @@
 			contentsLocHtml += '<option value="SGNB001">[SGNB001] STYLE24MALL > GNB > TOP배너</option>';
 			contentsLocHtml += '<option value="STAB001">[STAB001] STYLE24MALL > GNB > 브랜드</option>';
 			contentsLocHtml += '<option value="STAB002">[STAB002] STYLE24MALL > GNB > 카테고리</option>';
-			contentsLocHtml += '<option value="STAB003">[STAB003] STYLE24MALL > GNB > 기획전배너</option>';
 			contentsLocHtml += '<option value="SKEY001">[SKEY001] STYLE24MALL > GNB > 검색어</option>';
 		}
 		if(cate1No=='1720'){
 			contentsLocHtml += '<option value="SGNB002">[SGNB001] STYLE24MALL > GNB > TOP배너(모바일)</option>';
 			contentsLocHtml += '<option value="STAB001">[STAB001] STYLE24MALL > GNB > 브랜드</option>';
 			contentsLocHtml += '<option value="STAB002">[STAB002] STYLE24MALL > GNB > 카테고리</option>';
-			contentsLocHtml += '<option value="STAB003">[STAB003] STYLE24MALL > GNB > 기획전배너</option>';
 			contentsLocHtml += '<option value="SKEY001">[SKEY001] STYLE24MALL > GNB > 검색어</option>';
 		}
 		for(var i=0; i<contentsLocList.length; i++){
@@ -776,7 +777,7 @@
 		if(val.split(',')[1]=='Y'){
 			if(val.split(',')[0]=='1711' || val.split(',')[0]=='1721'){
 				cate1No = '2100';
-			}if(val.split(',')[0]=='1713' || val.split(',')[0]=='1723'){
+			}else if(val.split(',')[0]=='1713' || val.split(',')[0]=='1723'){
 				cate1No = '3000';
 			}else{
 				cate1No = val.split(',')[0];
@@ -784,6 +785,7 @@
 		}else{
 			cate1No = $("#searchForm select[name=cate2No]").val().split(',')[0];
 		}
+
 		var data = {
 			contentsLoc : contentsLoc
 			,cate1No : cate1No

+ 18 - 10
src/main/webapp/WEB-INF/views/goods/GoodsImageForm.html

@@ -28,24 +28,22 @@
 				<form id="goodsImgForm" name="goodsImgForm" action="#" th:method="post">
 				<input type="hidden" name="goodsCd" th:value="${goodsImg.goodsCd}"/>
 				<input type="hidden" name="colorCd" th:value="${goodsImg.colorCd}"/>
-<!-- 				<input type="hidden" name="goodsCd" th:value="14373767"/>
-				<input type="hidden" name="colorCd" th:value="IV"/>
- -->				
 					<ul class="notice">
-						<li>[업로드/수정] 버튼 클릭 하면 프론트에 바로 적용되므로 최종 확인 후 전송을 권장합니다.</li>
+						<li>[업로드/수정] 버튼 클릭 하면 프론트에 바로 적용되므로 최종 확인 후 업로드를 권장합니다.</li>
 						<li>이미지 미리보기 리스트는 <em>업로드 후</em> 확인 할 수 있습니다.</li>
-						<li>이미지보기 버튼은 이미지 파일 <em>등록 후</em> 확인 할 수 있습니다. 이미 <em>업로드 된</em> 파일은 확인 할 수 없습니다.(파일 크기 옆 화살표로 구분 가능합니다.)</li>
 					</ul>
 					<table class="frmStyle">
 						<colgroup>
 							<col width="7%"/>
 							<col/>
+							<col width="7%"/>
 							<col width="10%"/>
 							<col width="10%"/>
+							<col width="5%"/>
 							<col width="10%"/>
-							<col width="10%"/>
-							<col width="10%"/>
-							<col width="10%"/>
+							<col width="5%"/>
+							<col width="7%"/>
+							<col width="18%"/>
 						</colgroup>
 						<tr>
 							<th>상품코드</th>
@@ -56,10 +54,12 @@
 							<td><input type="text" class="text-right" name="defaultImgOrd" maxlength="3" th:value="${defaultImgOrd}" required="required" data-valid-type="numeric" data-valid-name="대표이미지순번"/></td>
 							<th>마우스오버 이미지순번</th>
 							<td><input type="text" class="text-right" name="mouseoverImgOrd" maxlength="3" th:value="${mouseoverImgOrd}" required="required" data-valid-type="numeric" data-valid-name="마우스오버 이미지순번"/></td>
+							<th>모델정보</th>
+							<td><input type="text"  name="modelInfo" maxlength="50" th:value="${modelInfo}" required="required" /></td>
 						</tr>
 						<tr>
 							<th>이미지등록</th>
-							<td class="dexterArea">
+							<td class="dexterArea" colspan="3">
 
 								<!-- 덱스터 테이블 영역 -->
 								<ul class="dexterTable">
@@ -176,7 +176,7 @@
 		}
 
 		// 업로드한 파일 및 순서 변경한 파일 설정
-		var totCnt = dx.getTotalItemCount();
+		var totCnt = dx.getTotalItemCount();debugger;
 		if (totCnt > 0) {
 			for (var i = 0; i < totCnt; i++) {
 				var item = dx.getItemByIndex(i);
@@ -191,6 +191,7 @@
 				params.sysImgUrl = item.url;
 				params.defaultImgYn = ($('#goodsImgForm input[name=defaultImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
 				params.mouseoverImgYn = ($('#goodsImgForm input[name=mouseoverImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
+				params.modelInfo = $('#goodsImgForm input[name=modelInfo]').val();
 				updatedData.push(params);
 			}
 		}
@@ -254,6 +255,13 @@
 		str = str + '<div class="panelTitle"><button type="button" class="close" onclick="uifnPopupClose(\''+id+'\')"><i class="fa fa-times"></i></button></div>';
 		str = str + '<div class="panelContent">';
 		str = str + '<ul class="notice ">';
+		str = str + '<em><b>* 자사 상품 이미지 파일명</b></em>';
+		str = str + '<li><b>상품메인컷</b> : 상품코드_색상코드_<b>01</b>.jpg<em>(앞)</em>,상품코드_색상코드_<b>02</b>.jpg<em>(뒤)</em></li>';
+		str = str + '<li><b>상품모델컷</b> : 상품코드_색상코드_<b>M1</b>.jpg ~ 상품코드_색상코드_<b>M5</b>.jpg</li>';
+		str = str + '<li><b>상품상세컷</b> : 상품코드_색상코드_<b>D1</b>.jpg ~ 상품코드_색상코드_<b>D5</b>.jpg</li>';
+		str = str + '<li><b>상품소재컷</b> : 상품코드_색상코드_<b>S1</b>.jpg</li>';
+		str = str + '<li><b>상품라벨컷</b> : 상품코드_색상코드_<b>L1</b>.jpg, (상품코드_색상코드_<b>L2</b>.jpg)</li>';
+		str = str + '<br/>';
 		str = str + '<em><b>* 상품 이미지 파일명</b></em>';
 		str = str + '<li><b>상품메인컷</b> : 상품코드_색상코드_<b>01</b>.jpg<em>(앞)</em>,상품코드_색상코드_<b>02</b>.jpg<em>(뒤)</em></li>';
 		str = str + '<li><b>상품모델컷</b> : 상품코드_색상코드_<b>M1</b>.jpg ~ 상품코드_색상코드_<b>M5</b>.jpg</li>';

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

@@ -184,13 +184,13 @@
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 		},
-		{headerName: "등록자", field: "regNo", width: 150, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
 		{headerName: "수정일자", field: "updDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) {
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 		},
-		{headerName: "수정자", field: "updNo", width: 150, cellClass: 'text-center'},
+		{headerName: "수정자", field: "updNm", width: 150, cellClass: 'text-center'},
 	];
 	
 	// Get GridOptions

+ 14 - 0
src/main/webapp/WEB-INF/views/marketing/CouponListForm.html

@@ -134,12 +134,18 @@
 
 			<!-- 검색결과 영역 -->
 			<div id="gridList" style="width: 100%; height: 570px;" class="ag-theme-balham"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="couponListPagination"></div>
+				</li>
+			</ul>
 		</div>
 	</form>
 	<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
 	<script th:inline="javascript">
 		/*<![CDATA[*/
 		var cpnTypeList = gagajf.convertToArray([[${cpnTypeList}]]);
+		var cpnStatList = gagajf.convertToArray([[${cpnStatList}]]);
 		var siteCdList = gagajf.convertToArray([[${siteCdList}]]);
 		var dcWayList = gagajf.convertToArray([[${dcWayList}]]);
 		//var usableCustGbList = gagajf.convertToArray([[${usableCustGbList}]]);
@@ -163,6 +169,12 @@
 				valueFormatter: function (params) { return gagaAgGrid.lookupValue(usableCustGbList, params.value); },
 				valueParser: function (params) { return gagaAgGrid.lookupKey(usableCustGbList, params.newValue);}
 			},*/
+			{headerName: "쿠폰상태", field: "cpnStat", width: 140, cellClass: 'text-center' ,
+				cellEditor: 'agRichSelectCellEditor',
+				cellEditorParams: { values: gagaAgGrid.extractValues(cpnStatList) },
+				valueFormatter: function (params) { return gagaAgGrid.lookupValue(cpnStatList, params.value); },
+				valueParser: function (params) { return gagaAgGrid.lookupKey(cpnStatList, params.newValue); }
+			},
 			{headerName: "쿠폰유형", field: "cpnType", width: 140, cellClass: 'text-center' ,
 				cellEditor: 'agRichSelectCellEditor',
 				cellEditorParams: { values: gagaAgGrid.extractValues(cpnTypeList) },
@@ -240,6 +252,7 @@
 
 		// 조회클릭시
 		$('#btnSearch').on('click', function() {
+			// if(!fnConditionCheck()) return;
 			$("#cpnSearchForm input[name=pageNo]").val('1');
 			fnCouponListSearch();
 		});
@@ -249,6 +262,7 @@
 			if(!fnConditionCheck()) return;
 
 			gagaPaging.init('cpnSearchForm', fnSearchCallBack, 'couponListPagination', $('#cpnSearchForm').find('#pageSize').val());
+			// gagaPaging.load(1);
 			gagaPaging.load($("#cpnSearchForm input[name=pageNo]").val());
 		}
 

+ 70 - 18
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -107,7 +107,7 @@
 											<th>사용가능고객구분<em class="required" title="필수"></em></th>
 											<td>
 												<label class="chkBox" th:if="${usableCustGbList}" th:each="oneData, status : ${usableCustGbList}">
-													<input type="checkbox" name="usableCustGbArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+													<input type="checkbox" name="usableCustGbArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}" checked="checked"/>
 												</label>
 											</td>
 											<th>사이트<em class="required" title="필수"></em></th>
@@ -121,7 +121,7 @@
 											<th>사용고객등급구분<em class="required" title="필수"></em></th>
 											<td>
 												<label class="chkBox" th:if="${usableCustGradeList}" th:each="oneData, status : ${usableCustGradeList}">
-													<input type="checkbox" name="usableCustGradeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+													<input type="checkbox" name="usableCustGradeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}" checked="checked"/>
 												</label>
 											</td>
 											<th>만료알림여부<em class="required" title="필수"></em></th>
@@ -483,13 +483,32 @@
 						<!-- 입점업체분담율-->
 						<li class="tab" id="coupontab3">
 							<div class="panelStyle">
-								<ul class="panelBar">
-									<li class="left">
-										<button type="button" class="btn btn-warning btn-lg" id="btnAddRow">행추가</button>
-										<button type="button" class="btn btn-danger btn-lg" id="btnDelRow">행삭제</button>
-									</li>
-								</ul>
-								<div id="inComGridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+								<div class="inner-panelContent">
+									<div class="panelContent">
+										<div class="panelBar">
+											<h4>업체 분담율</h4>
+										</div>
+										<table class="frmStyle">
+											<colgroup>
+												<col style="width:15%;">
+												<col style="width:85%;">
+											</colgroup>
+											<tbody>
+											<tr>
+												<th>업체 분담율</th>
+												<td>
+													<div class="padding10 inner-tb-solid">
+														<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyBurden">업체추가</button>
+														<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelApplyBurden">선택삭제</button>
+														<br/>
+														<div id="inComGridList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+													</div>
+												</td>
+											</tr>
+											</tbody>
+										</table>
+									</div>
+								</div>
 							</div>
 						</li>
 						<!-- 입점업체분담끝-->
@@ -519,7 +538,7 @@
 				<div class="mdPopBtnB aR">
 					<button type="button" class="btn btn-info btn-lg" onclick="fnPubCustListPopUp();" th:if="${mode == 'U'}">발급받은회원</button>
 					<button type="button" class="btn btn-info btn-lg" onclick="fnCustomerIssuePopUp();" th:if="${mode == 'U' && cpnDetail.dcCdGb == 'G233_00'}">쿠폰발행</button>  <!-- 난수유형과 시리얼 유형에서는 쿠폰발행기능 X -->
-					<button type="button" class="btn btnRight btn-success btn-lg couponButton" id="btnCouponSave" onclick="fnCouponCreate();">등록</button>
+					<button type="button" class="btn btnRight btn-success btn-lg couponButton" id="btnCouponSave" onclick="fnCouponCreate();" th:text="${mode == 'N' ? '등록' : '수정'}"></button>
 					<button type="button" class="btn btnRight btn-success btn-lg couponButton" id="btnChangeStatIng" style="display: none;">진행</button>
 					<button type="button" class="btn btnRight btn-success btn-lg couponButton" id="btnCouponDelete" style="display: none;">삭제</button>
 					<button type="button" class="btn btnRight btn-success btn-lg couponButton" id="btnCouponStop" style="display: none;">중지</button>
@@ -561,12 +580,13 @@
 
 	// ag-grid 입점업체분담율 컬럼
 	var columnDefs = [
-		{ headerName: "입점업체" , field:"supplyCompCd" , width:150, cellClass:"text-center" ,
-			cellEditor: 'agRichSelectCellEditor',
-			cellEditorParams: { values: gagaAgGrid.extractValues(ibSupplyComList) },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(ibSupplyComList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(ibSupplyComList, params.newValue);}
+		{ headerName: "입점업체코드" , field:"supplyCompCd" , width:150, cellClass:"text-center"
+			// cellEditor: 'agRichSelectCellEditor',
+			// cellEditorParams: { values: gagaAgGrid.extractValues(ibSupplyComList) },
+			// valueFormatter: function (params) { return gagaAgGrid.lookupValue(ibSupplyComList, params.value); },
+			// valueParser: function (params) { return gagaAgGrid.lookupKey(ibSupplyComList, params.newValue);}
 		} ,
+		{ headerName: "입점업체명"  , field: "supplyCompNm" , width: 120 , cellClass: 'text-center'},
 		{ headerName: "쿠폰분담율(%)", field:"burdenRate" , width:150, cellClass: "text-center" ,
 		  cellEditorParams: { maxlength: 10, required: true }
 		} ,
@@ -760,8 +780,8 @@
 	$('#btnExcepGoodsDel').on('click', function() {
 		excepGoodsGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(excepGoodsGridOptions)});
 	});
-	// 6.입점업체
-	$('#btnDelRow').on('click', function() {
+	// 업체분담율 선택삭제 버튼 클릭시
+	$('#CouponForm #btnDelApplyBurden').on('click', function() {
 		inComGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(inComGridOptions)});
 	});
 	// 7.선착순
@@ -779,6 +799,10 @@
 		var data = { cpnId: 1 ,limitCpnNm: null, downStDate: _today, downStTime: '00:00:00', downEdDate: _today, downEdTime: '23:59:59', downLimitQty: null, limitCpnId: null  };
 		gagaAgGrid.addRowData(limitedTimeCpnGridOptions, data, "limitCpnNm");
 	});
+	// 업체분담율 추가 버튼 클릭시
+	$('#CouponForm #btnAddApplyBurden').on('click', function() {
+		cfnOpenCompanyListPopup("fnSetPopupApplyBurdenInfo" ,"M");
+	});
 
 	// 선착순 쿠폰 행삭제
 	/*$('#btnDelLimitedTimeCpnRow').on('click', function() {
@@ -811,6 +835,25 @@
 	});
 	*/
 
+	// 분담업체율 설정 / 업체 추가 콜백함수
+	var fnSetPopupApplyBurdenInfo = function(result) {
+		// 기존 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(inComGridOptions);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(inComGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "delYn" : result[i].delYn});
+			}
+		}
+	};
+
 	// 선착순 쿠폰 체크박스 클릭시
 	$("#CouponForm #limitedTimeCpnBox").bind('click', function (){
 		var chkBox= document.getElementById('limitedTimeCpnYn').checked;
@@ -1597,19 +1640,27 @@ console.log('jsonData::'+jsonData);
 			goodsGbVal = "G800_30";
 		}
 
+		let addCnt = 0;
+		let failCnt = 0;
+		let dupliCnt = 0;
+
 		for(let i = 0 ; i < result.length ; i++) {
 			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(OriginGridListOption);		// 받아온 모든 데이터
 
 			// 받아온 data for
 			for(let j = 0 ; j < gridListValue.length ; j++) {
-				if(gridListValue[j].goodsCd == result[i].goodsCd) {	addChk = false;	}				// 중복체크
+				if(gridListValue[j].goodsCd == result[i].goodsCd) {	addChk = false;	dupliCnt++;}				// 중복체크
 			}
 
 			// 중복되지 않은 데이터 리스트에 추가
 			if(addChk) {
 				gagaAgGrid.addRowData(OriginGridListOption, {"goodsGb": goodsGbVal, "goodsCd" : result[i].goodsCd, "goodsNm" : result[i].goodsNm});
+				addCnt++;
 			}
 		}
+		uifnPopupClose('popupGoods');
+		failCnt = result.length - addCnt - dupliCnt;
+		mcxDialog.alert("데이터가 적용되었습니다.<br/>" + addCnt + "건 성공, "+ dupliCnt + "건 중복, " + failCnt + "건 실패");
 	}
 
 	// 기간 일수 변경시
@@ -1964,6 +2015,7 @@ console.log('jsonData::'+jsonData);
 			randomCouponGridOptions.api.setRowData(randomCpnList);
 			limitedTimeCpnGridOptions.api.setRowData(limitedTimeCpnList);
 			afLinkOptions.api.setRowData(afChannelList);
+
 			// 기본정보 세팅
 			$("#CouponForm input:radio[name='rdoDcWay']:radio[value=" + cpnDetail.dcWay + "]").prop('checked', true);
 			$("#CouponForm input:radio[name='rdoCpnType']:radio[value=" + cpnDetail.cpnType + "]").prop('checked', true);

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

@@ -620,8 +620,8 @@
 		return true;
 	};
 
-	var fnCheckData = function (){
-		console.log('[fnCheckData]');
+	// 저장
+	$('#btnMorebetterSave').on('click', function() {
 		// validation
 		if (!gagajf.validation('#moreBetterForm'))
 			return false;
@@ -664,12 +664,6 @@
 			return false;
 		}
 
-	};
-
-	// 저장
-	$('#btnMorebetterSave').on('click', function() {
-		fnCheckData();
-
 		// 각 ag-grid list 수량
 		let allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
 		let allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);

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

@@ -281,7 +281,7 @@
 			return;
 		}
 		
-		mcxDialog.confirm("베스트상품평으로 선정하시겠습니까?", {
+		mcxDialog.confirm("베스트 상품평으로 선정하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
@@ -295,7 +295,7 @@
 				});
 				
 				var jsonData = JSON.stringify(updatedData);
-				gagajf.ajaxJsonSubmit('/marketing/review/best/save'
+				gagajf.ajaxJsonSubmit('/marketing/review/best/list/save'
 						, jsonData
 						, function() {
 							$('#btnSearch').trigger('click');

+ 1 - 1
src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html

@@ -176,7 +176,7 @@
 					<!-- 아이콘 툴팁 -->
 					&nbsp;<div class="iconTooltip">
 						<i class="fa fa-info" aria-hidden="true"></i>
-						<span class="left" style="width:300px;">
+						<span class="left" style="width:500px;">
 						<!-- class="left" 또는 class="right" -->
 							* 매체별판매가능재고 = WMS가용재고 - 안전재고 - 출고대기
 						</span>

+ 6 - 5
src/main/webapp/ux/css/admin.ui.css

@@ -1,8 +1,9 @@
-@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700");
-@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700");
+@charset "UTF-8";
+@import url("font.css");
+
 html,body {position:relative; height:100%;}
 html, body, header, div, ul, ol, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, label, a, p, form, input, textarea, table, hr, span, em {margin:0; padding:0; box-sizing:border-box;}
-body {overflow-x:hidden; font-family:"Open Sans", "Roboto", "Malgun Gothic", sans-serif; font-size:12px; background-color:#f3f3f4;}
+body {overflow-x:hidden; font-family:"Open Sans","Roboto","Malgun Gothic","맑은 고딕",Dotum,"돋움",sans-serif; font-size:12px; background-color:#f3f3f4;}
 h1, h2, h3, h4, h5, h6 {display:inline-block;}
 ul, ol {list-style:none;}
 ul::after, ol::after {display:block; clear:both; content:'';}
@@ -863,8 +864,8 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 /* 이미지 좌표값 가져오기 */
 #pictureOffset > li{vertical-align:top;}
 #pictureOffset > li:nth-of-type(1){width:700px;padding-right:20px;-webkit-user-select:none;user-select:none;}
-#pictureOffset .picWrap{overflow:hidden;position:relative;width:700px;height:700px;background-color:#ddd;}
-#pictureOffset .picWrap .picture{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:auto;height:auto;max-height:100%;max-width:100%;}
+#pictureOffset .picWrap{overflow:hidden;position:relative;width:700px;height:700px;background-color:#ddd;text-align:center;}
+#pictureOffset .picWrap .thumb{height:0;padding-top:100%;background-color:#f5f5f5;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;}
 #pictureOffset .dataWrap{min-width:727px;}
 #pictureOffset .dataWrap th{background:#e9f7ff;}
 #pictureOffset .dataWrap td{padding-left:20px;}

+ 59 - 0
src/main/webapp/ux/css/font.css

@@ -0,0 +1,59 @@
+/* Open Sans --------------------------------------------  */
+@font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: 300;
+    src: url(../../ux/font/opensans_300.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: normal;
+    src: url(../../ux/font/opensans_400.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: 600;
+    src: url(../../ux/font/opensans_600.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: 700;
+    src: url(../../ux/font/opensans_700.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+
+  /* Roboto --------------------------------------------  */
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: 300;
+    src: url(../../ux/font/roboto_300.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: normal;
+    src: url(../../ux/font/roboto_400.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: 500;
+    src: url(../../ux/font/roboto_500.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: 700;
+    src: url(../../ux/font/roboto_700.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }

BIN
src/main/webapp/ux/font/opensans_300.woff2


BIN
src/main/webapp/ux/font/opensans_400.woff2


BIN
src/main/webapp/ux/font/opensans_600.woff2


BIN
src/main/webapp/ux/font/opensans_700.woff2


BIN
src/main/webapp/ux/font/roboto_300.woff2


BIN
src/main/webapp/ux/font/roboto_400.woff2


BIN
src/main/webapp/ux/font/roboto_500.woff2


BIN
src/main/webapp/ux/font/roboto_700.woff2