Przeglądaj źródła

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

ChoiSooHwan 5 lat temu
rodzic
commit
87fc9a4c1e
43 zmienionych plików z 1944 dodań i 875 usunięć
  1. 1 0
      pom.xml
  2. 0 23
      src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java
  3. 13 3
      src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java
  4. 63 28
      src/main/java/com/style24/admin/biz/service/TsaDisplayService.java
  5. 2 2
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  6. 23 11
      src/main/java/com/style24/admin/biz/service/TsaPlanService.java
  7. 10 2
      src/main/java/com/style24/admin/biz/web/TsaBusinessController.java
  8. 2 1
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  9. 30 1
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  10. 102 22
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  11. 114 7
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  12. 30 7
      src/main/java/com/style24/admin/biz/web/TsaStockController.java
  13. 12 0
      src/main/java/com/style24/persistence/domain/Brand.java
  14. 5 0
      src/main/java/com/style24/persistence/domain/CategoryGoods.java
  15. 1 0
      src/main/java/com/style24/persistence/domain/Extmall.java
  16. 5 0
      src/main/java/com/style24/persistence/domain/GoodsCategory.java
  17. 8 0
      src/main/java/com/style24/persistence/domain/GoodsPriceRes.java
  18. 2 0
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  19. 1 1
      src/main/java/com/style24/persistence/domain/Plan.java
  20. 13 0
      src/main/java/com/style24/persistence/domain/SupplyCompany.java
  21. 34 10
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  22. 10 145
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  23. 15 3
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  24. 4 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaOcm.xml
  25. 50 13
      src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml
  26. 6 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaStock.xml
  27. 29 6
      src/main/webapp/WEB-INF/views/business/BrandPopupForm.html
  28. 29 8
      src/main/webapp/WEB-INF/views/business/SupplyCompanyPopupForm.html
  29. 5 4
      src/main/webapp/WEB-INF/views/common/fragments/gnb.html
  30. 2 2
      src/main/webapp/WEB-INF/views/display/CategoryForm.html
  31. 116 22
      src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html
  32. 12 46
      src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html
  33. 94 22
      src/main/webapp/WEB-INF/views/goods/GoodsEpSkipForm.html
  34. 80 26
      src/main/webapp/WEB-INF/views/goods/GoodsListForm.html
  35. 80 31
      src/main/webapp/WEB-INF/views/goods/GoodsPopupListForm.html
  36. 82 32
      src/main/webapp/WEB-INF/views/goods/GoodsSupplyPriceForm.html
  37. 523 0
      src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html
  38. 8 1
      src/main/webapp/WEB-INF/views/marketing/PlanListForm.html
  39. 89 57
      src/main/webapp/WEB-INF/views/marketing/PlanPopupForm.html
  40. 131 295
      src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html
  41. 19 2
      src/main/webapp/WEB-INF/views/ocm/ExtmallForm.html
  42. 87 40
      src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html
  43. 2 2
      src/main/webapp/ux/js/admin.common.js

+ 1 - 0
pom.xml

@@ -17,6 +17,7 @@
 		<dependency>
 			<groupId>com.style24.core</groupId>
 			<artifactId>style24-core</artifactId>
+			<version>0.0.1</version>
 		</dependency>
 		<!--// Maven module core -->
 		

+ 0 - 23
src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java

@@ -193,27 +193,4 @@ public interface TsaDisplayDao {
 	 */
 	Collection<CategoryGoods> getCategoryGoodsList(CategoryGoods categoryGoods);
 
-	/**
-	 * 카테고리별상품전시 상품이동
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 2. 15
-	 */
-	void moveCategoryGoods(CategoryGoods categoryGoods);
-
-	/**
-	 * 카테고리별상품전시 상품삭제
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 2. 15
-	 */
-	void deleteCategoryGoods(CategoryGoods categoryGoods);
-
-	/**
-	 * 카테고리별상품전시 상품이동시 전시순위 조회
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 2. 15
-	 */
-	int getCategoryGoodsDispOrd(CategoryGoods categoryGoods);
 }

+ 13 - 3
src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java

@@ -146,7 +146,7 @@ public interface TsaPlanDao {
 	 * @author sowon
 	 * @since 2021. 2. 15
 	 */
-	void createPlanCorner(Plan param);
+	void createPlanCate(Plan param);
 	
 	/**
 	 * 기획전 코너 목록
@@ -156,7 +156,7 @@ public interface TsaPlanDao {
 	 * @author sowon
 	 * @since 2021. 2. 15
 	 */
-	Collection<Plan> getPlanCornerList(Plan param);
+	Collection<Plan> getPlanCateList(Plan param);
 	
 	/**
 	 * 기획전 코너 복사
@@ -165,6 +165,16 @@ public interface TsaPlanDao {
 	 * @author sowon
 	 * @since 2021. 2. 15
 	 */
-	void createPlanCornerCopy(Plan param);
+	void createPlanCateCopy(Plan param);
+	
+	/**
+	 * 기획전 코너 시퀀스 조회 
+	 *
+	 * @param 기획전 일련번호
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 16
+	 */
+	Integer getPlanDtlSq(Plan param);
 
 }

+ 63 - 28
src/main/java/com/style24/admin/biz/service/TsaDisplayService.java

@@ -197,32 +197,40 @@ public class TsaDisplayService {
 				int cnt = 0;
 				for (String cateCd : goodsCategory.getCateCdArr()) {
 					if(StringUtils.isNotEmpty(cateCd)){
-						goodsCategory.setCateCd(cateCd);
-						goodsCategory.setCateGb(goodsCategory.getCateGbArr()[cnt]);
-						goodsCategory.setCateType(goodsCategory.getCateTypeArr()[cnt]);
-						displayDao.saveGoodsCategory(goodsCategory);
+						//goodsCategory.setCateCd(cateCd);
+						//goodsCategory.setCateGb(goodsCategory.getCateGbArr()[cnt]);
+						//goodsCategory.setCateType(goodsCategory.getCateTypeArr()[cnt]);
+						//displayDao.saveGoodsCategory(goodsCategory);
 
 						if(!"G031_20".equals(goodsCategory.getCateType())){
-							if(StringUtils.isNotEmpty(goodsCategory.getCateCd3Arr()[cnt])){
-								String[] cate3Array = goodsCategory.getCateCd3Arr()[cnt].split(",");
-								if(cate3Array[1].equals("N")){
-									goodsCategory.setCateCd(cate3Array[0]);
+							if(StringUtils.isNotEmpty(goodsCategory.getCateCd1Arr()[cnt])){
+								String[] cate1Array = goodsCategory.getCateCd1Arr()[cnt] .split(",");
+								if(cate1Array[1].equals("Y")){
+									goodsCategory.setCateCd(cate1Array[0]);
 									displayDao.saveGoodsCategory(goodsCategory);
 								}
 							}
 
 							if(StringUtils.isNotEmpty(goodsCategory.getCateCd2Arr()[cnt])){
 								String[] cate2Array = goodsCategory.getCateCd2Arr()[cnt] .split(",");
-								if(cate2Array[1].equals("N")){
+								if(cate2Array[1].equals("Y")){
 									goodsCategory.setCateCd(cate2Array[0]);
 									displayDao.saveGoodsCategory(goodsCategory);
 								}
 							}
 
-							if(StringUtils.isNotEmpty(goodsCategory.getCateCd1Arr()[cnt])){
-								String[] cate1Array = goodsCategory.getCateCd1Arr()[cnt] .split(",");
-								if(cate1Array[1].equals("N")){
-									goodsCategory.setCateCd(cate1Array[0]);
+							if(StringUtils.isNotEmpty(goodsCategory.getCateCd3Arr()[cnt])){
+								String[] cate3Array = goodsCategory.getCateCd3Arr()[cnt].split(",");
+								if(cate3Array[1].equals("Y")){
+									goodsCategory.setCateCd(cate3Array[0]);
+									displayDao.saveGoodsCategory(goodsCategory);
+								}
+							}
+
+							if(StringUtils.isNotEmpty(goodsCategory.getCateCd4Arr()[cnt])){
+								String[] cate4Array = goodsCategory.getCateCd4Arr()[cnt].split(",");
+								if(cate4Array[1].equals("Y")){
+									goodsCategory.setCateCd(cate4Array[0]);
 									displayDao.saveGoodsCategory(goodsCategory);
 								}
 							}
@@ -252,16 +260,10 @@ public class TsaDisplayService {
 	 */
 	@Transactional("shopTxnManager")
 	public void deleteGoodsCategoryList(GoodsCategory goodsCategory) {
-		for (int i=0; i<goodsCategory.getCateCdArr().length; i++){
-			GoodsCategory goodsCategoryData = new GoodsCategory();
-			goodsCategoryData.setGoodsCd(goodsCategory.getGoodsCd());
-			goodsCategoryData.setCateCd(goodsCategory.getCateCdArr()[i]);
-			goodsCategoryData.setCateCd1(goodsCategory.getCateCd1Arr()[i]);
-			goodsCategoryData.setCateCd2(goodsCategory.getCateCd2Arr()[i]);
-			goodsCategoryData.setCateCd3(goodsCategory.getCateCd3Arr()[i]);
-			goodsCategoryData.setCateCd4(goodsCategory.getCateCd4Arr()[i]);
-			goodsCategoryData.setCateType(goodsCategory.getCateTypeArr()[i]);
-			this.deleteGoodsCategory(goodsCategoryData);
+		for(int i=0; i<goodsCategory.getGoodsList().size(); i++){
+			goodsCategory.setGoodsCd(goodsCategory.getGoodsList().get(i).getGoodsCd());
+			goodsCategory.setCateNo(goodsCategory.getGoodsList().get(i).getCateCd());
+			this.deleteGoodsCategory(goodsCategory);
 		}
 	}
 
@@ -297,15 +299,48 @@ public class TsaDisplayService {
 	 * @since 2021. 2. 15
 	 */
 	public void moveCategoryGoods(CategoryGoods categoryGoods){
+		GoodsCategory goodsCategory = new GoodsCategory();
+		goodsCategory.setRegNo(categoryGoods.getRegNo());
 		for(int i=0; i<categoryGoods.getGoodsList().size(); i++){
-			categoryGoods.setGoodsCd(categoryGoods.getGoodsList().get(i).getGoodsCd());
-			int dispOrd = displayDao.getCategoryGoodsDispOrd(categoryGoods);
-			categoryGoods.setDispOrd(dispOrd);
-			displayDao.moveCategoryGoods(categoryGoods);
+			goodsCategory.setGoodsCd(categoryGoods.getGoodsList().get(i).getGoodsCd());
+			goodsCategory.setCateCd(categoryGoods.getAddCateNo());
+			displayDao.saveGoodsCategory(goodsCategory);
 			if("move".equals(categoryGoods.getMode())){
-				displayDao.deleteCategoryGoods(categoryGoods);
+				goodsCategory.setCateNo(categoryGoods.getCateNo());
+				displayDao.deleteGoodsCategory(goodsCategory);
 			}
 		}
 	}
 
+	/**
+	 * 카테고리별상품전시 상품삭제
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 15
+	 */
+	public void deleteCategoryGoods(CategoryGoods categoryGoods){
+		GoodsCategory goodsCategory = new GoodsCategory();
+		for(int i=0; i<categoryGoods.getGoodsList().size(); i++){
+			goodsCategory.setGoodsCd(categoryGoods.getGoodsList().get(i).getGoodsCd());
+			goodsCategory.setCateNo(categoryGoods.getGoodsList().get(i).getCateNo());
+			displayDao.deleteGoodsCategory(goodsCategory);
+		}
+	}
+
+	/**
+	 * 카테고리별상품전시 상품추가
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 15
+	 */
+	public void insertCategoryGoods(CategoryGoods categoryGoods){
+		GoodsCategory goodsCategory = new GoodsCategory();
+		goodsCategory.setRegNo(categoryGoods.getRegNo());
+		for(int i=0; i<categoryGoods.getMultiGoods().length; i++){
+			goodsCategory.setGoodsCd(categoryGoods.getMultiGoods()[i]);
+			goodsCategory.setCateCd((categoryGoods.getCateNo()).toString());
+			displayDao.saveGoodsCategory(goodsCategory);
+		}
+	}
+
 }

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

@@ -2375,8 +2375,8 @@ public class TsaGoodsService {
 				//log.info("saveGoodsNaverLowestPrice  22 =  {}", GagaDateUtil.getTodayDateTime());
 				NaverLowestPrice naverLowestPrice = naverLowestPriceApi.getLowestPrice(goodsCd);
 
-				//log.info("[saveGoodsNaverLowestPrice] naverLowestPrice= {}", naverLowestPrice);
-				if (naverLowestPrice != null) {
+				log.info("[saveGoodsNaverLowestPrice] naverLowestPrice= {}", naverLowestPrice);
+				if (naverLowestPrice != null && naverLowestPrice.getTotal() > 0) {
 					GoodsNaverLowestPrice goodsNaverLowestPrice = new GoodsNaverLowestPrice();
 					goodsNaverLowestPrice.setReqYmd(GagaDateUtil.getToday());
 					goodsNaverLowestPrice.setGoodsCd(goodsCd);

+ 23 - 11
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -73,14 +73,14 @@ public class TsaPlanService {
 			planDao.createPlanBrand(plan);
 		}
 		    
-		String[] corner = param.getMultiCorner();
-		// 기획전 코너insert
-		for (int j = 0; j < corner.length; j++) {
-			plan.setCateNo(corner[j]);
+		String[] cate = param.getMultiCate();
+		// 기획전 카테고리insert
+		for (int j = 0; j < cate.length; j++) {
+			plan.setCateNo(cate[j]);
 			plan.setPlanSq(param.getPlanSq());
 			plan.setRegNo(TsaSession.getInfo().getUserNo());
 			plan.setUpdNo(TsaSession.getInfo().getUserNo());
-			planDao.createPlanCorner(plan);
+			planDao.createPlanCate(plan);
 		}
 
 		log.debug("planSq : {}", param.getPlanSq());
@@ -435,13 +435,13 @@ public class TsaPlanService {
 		
 		// 02. 기획전 브랜드 복사
 		plan.setPlanSq(param.getCopyPlanSq());
-		Collection <Plan> cornerList = planDao.getPlanCornerList(plan);
+		Collection <Plan> cateList = planDao.getPlanCateList(plan);
 		
-		for(Plan cateNo : cornerList){
+		for(Plan cateNo : cateList){
 			plan.setPlanSq(param.getPlanSq());
 			plan.setCateNo(cateNo.getCateNo());
 			plan.setCopyPlanSq(param.getCopyPlanSq()); 
-			planDao.createPlanCornerCopy(plan);
+			planDao.createPlanCateCopy(plan);
 		}
 		
 		
@@ -507,15 +507,27 @@ public class TsaPlanService {
 	}
 	
 	/**
-	 * 기획전 코너 목록
+	 * 기획전 카테고리 목록
 	 *
 	 * @param 
 	 * @return
 	 * @author sowon
 	 * @since 2021. 2. 15
 	 */
-	public Collection<Plan> getPlanCornerList(Plan param){
-		return planDao.getPlanCornerList(param);
+	public Collection<Plan> getPlanCateList(Plan param){
+		return planDao.getPlanCateList(param);
+	}
+	
+	/**
+	 * 기획전 코너 시퀀스 조회
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 15
+	 */
+	public Integer getPlanDtlSq(Plan param) {
+		return planDao.getPlanDtlSq(param);
 	}
 
 }

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

@@ -164,7 +164,10 @@ public class TsaBusinessController extends TsaBaseController {
 	@PostMapping("/supply/company/list")
 	@ResponseBody
 	public Collection<SupplyCompany> getSupplyCompanyList(@RequestBody SupplyCompany supplyComp) {
-		log.info("supplyComp={}", supplyComp);
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(supplyComp.getSearchSupplyCompCd())) supplyComp.setMultiSupplyCompCd(supplyComp.getSearchSupplyCompCd().replaceAll("\r", "").split("\n"));
+		if (!StringUtils.isBlank(supplyComp.getSearchSupplyCompNm())) supplyComp.setMultiSupplyCompNm(supplyComp.getSearchSupplyCompNm().replaceAll("\r", "").split("\n"));
+		log.info("supplyComp  {}", supplyComp);
 		return businessService.getSupplyCompanyList(supplyComp);
 	}
 
@@ -309,6 +312,11 @@ public class TsaBusinessController extends TsaBaseController {
 	@PostMapping("/brand/list")
 	@ResponseBody
 	public Collection<Brand> getBrandList(@RequestBody Brand brand) {
+
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(brand.getSearchBrandCd())) brand.setMultiBrandCd(brand.getSearchBrandCd().replaceAll("\r", "").split("\n"));
+		if (!StringUtils.isBlank(brand.getSearchBrandNm())) brand.setMultiBrandNm(brand.getSearchBrandNm().replaceAll("\r", "").split("\n"));
+
 		return businessService.getBrandList(brand);
 	}
 
@@ -698,7 +706,7 @@ public class TsaBusinessController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		mav.addObject("params", brand);
-		mav.setViewName("business/BrandSearchPopupForm");
+		mav.setViewName("business/BrandPopupForm");
 		return mav;
 	}
 

+ 2 - 1
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -442,9 +442,10 @@ public class TsaCustomerController extends TsaBaseController {
 	public GagaResponse resetCustomerPassword(@RequestBody Customer customer) throws Exception {
 		String tempPasswd = customerService.getTemporaryPassword(10);
 		log.info("tempPasswd  ====> {}", tempPasswd);
+
 		customer.setTempPasswdYn("Y"); // 임시비밀번호여부
 		customer.setPasswd(tempPasswd);
-		customer.setEncodedPasswd(passwordEncoder.encodeSha256(tempPasswd));
+		customer.setEncodedPasswd(passwordEncoder.encode(tempPasswd));
 
 		// 비밀번호 수정
 		customerService.saveCustomerPassword(customer);

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

@@ -55,7 +55,7 @@ public class TsaDisplayController extends TsaBaseController {
 		mav.addObject("cateGbList", rendererService.getAvailCommonCodeList("G032"));
 		mav.addObject("cateTypeList", rendererService.getAvailCommonCodeList("G031"));
 		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
-		mav.addObject("conentsLocList", rendererService.getAvailCommonCodeList("G028"));
+		mav.addObject("contentsLocList", rendererService.getAvailCommonCodeList("G028"));
 
 		mav.setViewName("display/CategoryForm");
 
@@ -270,6 +270,7 @@ public class TsaDisplayController extends TsaBaseController {
 	@PostMapping("/goods/category/save")
 	@ResponseBody
 	public GagaResponse saveGoodsCategory(@RequestBody GoodsCategory goodsCategory) {
+		log.info("saveGoodsCategory goodsCategory::::::::{}",goodsCategory);
 		displayService.saveGoodsCategory(goodsCategory);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
@@ -358,4 +359,32 @@ public class TsaDisplayController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
+	/**
+	 * 카테고리별상품전시 상품삭제
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 15
+	 */
+	@PostMapping("/category/goods/delete")
+	@ResponseBody
+	public GagaResponse deleteCategoryGoods(@RequestBody CategoryGoods categoryGoods){
+		categoryGoods.setRegNo(TsaSession.getInfo().getUserNo());
+		displayService.deleteCategoryGoods(categoryGoods);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+
+	/**
+	 * 카테고리별상품전시 상품추가
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 2. 15
+	 */
+	@PostMapping("/category/goods/save")
+	@ResponseBody
+	public GagaResponse insertCategoryGoods(@RequestBody CategoryGoods categoryGoods){
+		categoryGoods.setRegNo(TsaSession.getInfo().getUserNo());
+		displayService.insertCategoryGoods(categoryGoods);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 }

+ 102 - 22
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -103,6 +103,9 @@ public class TsaGoodsController extends TsaBaseController {
 	@Autowired
 	private TsaSystemService systemService;
 
+	@Autowired
+	private ObjectMapper mapper;
+
 	/**
 	 * 품목관리 화면
 	 *
@@ -445,13 +448,13 @@ public class TsaGoodsController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 공급업체
-		String supplyCompCd = "";
-		String selfYn = "Y";
-		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
-			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
-			selfYn = "N";
-		}
-		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
+//		String supplyCompCd = "";
+//		String selfYn = "Y";
+//		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
+//			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
+//			selfYn = "N";
+//		}
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
 		// 상품상태
 		String[] exceptCds = {"G008_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
@@ -510,7 +513,26 @@ public class TsaGoodsController extends TsaBaseController {
 				goodsSearch.setSearchGb("MASTER");
 			}
 		}
-		//log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
+		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()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
@@ -1373,11 +1395,11 @@ public class TsaGoodsController extends TsaBaseController {
 	public ModelAndView priceForm() {
 		ModelAndView mav = new ModelAndView();
 		// 공급업체
-		String supplyCompCd = "";
-		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
-			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
-		}
-		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "N"));
+//		String supplyCompCd = "";
+//		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
+//			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
+//		}
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "N"));
 		// 사용여부
 		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
 		// 상품상태
@@ -1401,6 +1423,26 @@ public class TsaGoodsController extends TsaBaseController {
 	@ResponseBody
 	public Collection<GoodsPriceRes> getGoodsSupplyPriceList(@RequestBody GoodsPriceRes goodsPriceRes) {
 
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(goodsPriceRes.getBrandList())) {
+			try {
+				String [] arrBrandCd = mapper.readValue(goodsPriceRes.getBrandList(), String[].class);
+				goodsPriceRes.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException(message.getMessage("브랜드코드 검색중 오류로 인해 조회되지 않았습니다."));
+			}
+		}
+
+		if (!StringUtils.isBlank(goodsPriceRes.getSupplyCompList())) {
+			try {
+				String [] arrSupplyComp = mapper.readValue(goodsPriceRes.getSupplyCompList(), String[].class);
+				goodsPriceRes.setMultiSupplyComp(arrSupplyComp);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException(message.getMessage("업체코드 검색중 오류로 인해 조회되지 않았습니다."));
+			}
+		}
 		return goodsService.getGoodsSupplyPriceList(goodsPriceRes);
 	}
 
@@ -1644,8 +1686,8 @@ public class TsaGoodsController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 공급업체
-		String supplyCompCd = "";
-		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
+//		String supplyCompCd = "";
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
 		// 상품상태
 		String[] exceptCds = {"G001_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
@@ -1691,6 +1733,25 @@ public class TsaGoodsController extends TsaBaseController {
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
 			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
 		}
+		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()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
@@ -2025,13 +2086,13 @@ public class TsaGoodsController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 공급업체
-		String supplyCompCd = "";
-		String selfYn = "Y";
-		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
-			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
-			selfYn = "N";
-		}
-		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
+//		String supplyCompCd = "";
+//		String selfYn = "Y";
+//		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
+//			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
+//			selfYn = "N";
+//		}
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
 		//mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
 		// 상품상태
 		String[] exceptCds = {"G008_00"};
@@ -2092,6 +2153,25 @@ public class TsaGoodsController extends TsaBaseController {
 				goodsSearch.setSearchGb("MASTER");
 			}
 		}
+		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("업체코드 검색중 오류로 인해 조회되지 않았습니다."));
+			}
+		}
 		//log.info("[getPopupGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));

+ 114 - 7
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1572,6 +1572,12 @@ public class TsaMarketingController extends TsaBaseController {
 			
 			// 브랜드 목록
 			mav.addObject("brandList", rendererService.getSupplyCompanyBrandList(""));
+			
+			// 사용가능고객구분 목록
+			mav.addObject("usableCustGbList", rendererService.getAvailCommonCodeList("G100"));
+			
+			// 상위제휴채널 조회
+			mav.addObject("upperAfLinkCdList", rendererService.getCommonCodeList("G053"));
 
 		} else if(param.getMode().equals("U")){ // 상세 일 때
 			mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
@@ -1583,10 +1589,16 @@ public class TsaMarketingController extends TsaBaseController {
 			// 등록했던 브랜드
 			mav.addObject("planBrandList", planService.getPlanBrandList(param));
 			
-			// 등록했던 코너
-			mav.addObject("planCornerList", planService.getPlanCornerList(param));
+			// 등록했던 카테고리
+			mav.addObject("planCateList", planService.getPlanCateList(param));
 			
 			mav.addObject("brandList", rendererService.getSupplyCompanyBrandList(""));
+			
+			// 사용가능고객구분 목록
+			mav.addObject("usableCustGbList", rendererService.getAvailCommonCodeList("G100"));
+						
+			// 상위제휴채널 조회
+			mav.addObject("upperAfLinkCdList", rendererService.getCommonCodeList("G053"));
 
 			//mav.addObject("planQuestionList", planService.getPlanQuestionList(param));
 
@@ -1645,20 +1657,38 @@ public class TsaMarketingController extends TsaBaseController {
 			param.setConditionList(param.getCondition().replaceAll("\r", "").split("\n"));
 		}
 		
-		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+//		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(planService.getPlanListCnt(param));
 		
+		
 		Collection<Plan> planList = planService.getPlanList(param);
 		
 		result.set("pageing", param);
 		result.set("planList", planList);
 
-		//log.debug("dataList: {}", planList);
+		log.debug("dataList: {}", planList);
+		
 
 		return result;
 	}
 	
+	/**
+	 * 기획전관리 목록
+	 *
+	 * @param
+	 * @return 기획전 팝업 목록
+	 * @author sowon
+	 * @since 2021. 2. 16
+	 */
+	@PostMapping("/planning/listPop")
+	@ResponseBody
+	public Collection<Plan> getPlanListPop(@RequestBody Plan param) {
+		//param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		Collection<Plan> planList = planService.getPlanList(param);
+		return planList;
+	}
+	
 	/**
 	 * 기획전관리 목록
 	 *
@@ -1708,10 +1738,87 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author sowon
 	 * @since 2021. 2. 15
 	 */
-	@GetMapping("/planning/list/popup/form")
-	public ModelAndView planPopup() {
-		ModelAndView mav = new ModelAndView("marketing/PlanPopupForm");
+	@GetMapping("/planning/list/popup")
+	public ModelAndView planPopup(Plan plan) {
+		ModelAndView mav = new ModelAndView();
+		
+		// 웹/모바일 구분
+		mav.addObject("wmGbList", rendererService.getCommonCodeList("G093", "Y"));
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getCommonCodeList("G000", "Y"));
+
+		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+
+		// 파라메터
+		mav.addObject("params", plan);
+		
+		mav.setViewName("marketing/PlanPopupForm");
+		
+		return mav;
+	}
+	
+	/**
+	 * 기획전 코너 팝업 화면
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 16
+	 */
+	@GetMapping("/planning/corner/list/form")
+	public ModelAndView planCornerListForm(Plan param) {
+		ModelAndView mav = new ModelAndView();
+
+		// 코너유형목록
+		mav.addObject("cornerDispTypeList", rendererService.getCommonCodeList("G045", "Y"));
+
+		// 코너유형
+		mav.addObject("planDtlStatList", rendererService.getCommonCodeList("G044", "Y"));
+
+		// 상품상태
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y"));
+
+		// 기획전 상세 정보
+		mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
+
+		mav.setViewName("marketing/PlanCornerListForm");
+
 		return mav;
 	}
+	
+	/**
+	 * 기획전 코너 상품 조회
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 16
+	 */
+//	@PostMapping("/planning/corner/goods/list")
+//	@ResponseBody
+//	public GagaMap getPlanGoodsList(@RequestBody Plan plan) {
+//		GagaMap result = new GagaMap();
+//		if ("Y".equals(plan.getPageYn())) {
+//			plan.setPageable(new TscPageRequest(plan.getPageNo() - 1, plan.getPageSize()));
+//			plan.getPageable().setTotalCount(planService.getPlanGoodsListCount(plan));
+//		}
+//		result.set("pageing", plan);
+//		result.set("planGoodsList", planService.getPlanGoodsList(plan));
+//		return result;
+//	}
+	
+	/**
+	 * 기획전 코너 시퀀스 번호
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 16
+	 */
+	@GetMapping("/planning/corner/plandtlsq")
+	@ResponseBody
+	public long getPlanDtlSq(Plan param) {
+		return planService.getPlanDtlSq(param);
+	}
+
 
 }

+ 30 - 7
src/main/java/com/style24/admin/biz/web/TsaStockController.java

@@ -5,7 +5,7 @@ import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
 
-import com.style24.persistence.TscPageRequest;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.InputStreamResource;
@@ -24,6 +24,7 @@ import com.style24.admin.biz.service.TsaStockService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsSearch;
@@ -60,6 +61,9 @@ public class TsaStockController extends TsaBaseController {
 	@Autowired
 	private TsaRendererService rendererService;
 
+	@Autowired
+	private ObjectMapper mapper;
+
 	/**
 	 * 사이즈별재고현황 화면
 	 *
@@ -73,12 +77,12 @@ public class TsaStockController extends TsaBaseController {
 
 		ModelAndView mav = new ModelAndView();
 
-		String supplyCompCd = "";
-		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
-			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
-		}
-		// 공급업체
-		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
+//		String supplyCompCd = "";
+//		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
+//			supplyCompCd = TsaSession.getInfo().getSupplyCompCd();
+//		}
+//		// 공급업체
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
 		// 상품상태
 		String[] exceptCds = {"G008_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
@@ -123,7 +127,26 @@ public class TsaStockController extends TsaBaseController {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
+		// 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());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(stockService.getGoodsSizeStockCount(goodsSearch));

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

@@ -2,6 +2,7 @@ package com.style24.persistence.domain;
 
 import java.util.Collection;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -52,4 +53,15 @@ public class Brand extends TscBaseDomain {
 	private String searchTxt;		// 검색어
 	private String callbackFn;		// 콜백함수
 	private String multiGb;			// 멀티 셀렉트 구분
+	private String searchBrandCd;
+	private String searchBrandNm;
+
+	/* 브랜드검색 Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrandCd;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrandNm;
+	/* 브랜드검색 Multi CheckBox 항목*/
+
 }

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
@@ -46,8 +47,12 @@ public class CategoryGoods extends TscBaseDomain {
 
 	private String mode;
 	private String addCateNo;
+	private Integer cateCd;
 	List<CategoryGoods> goodsList;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiGoods;
+
 	// Pagination
 	private TscPageRequest pageable;
 	private int pageNo = 1;

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

@@ -23,6 +23,7 @@ public class Extmall extends TscBaseDomain {
 	private float stockSellRate;	// 재고판매비율
 	private float priceAcceptRate;	// 가격허용율
 	private String dwdpYn;			// 직접회수여부(Y:제휴몰에서회수, N:자사몰에서회수)
+	private String cnclsmsSendYn;	// 취소문자발송여부(Y:제휴몰에서발송, N:자사몰에서발송)
 	private String useYn;			// 사용여부
 
 	// 검색조건

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

@@ -6,6 +6,8 @@ import com.style24.persistence.TscPageRequest;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * 상품별 카테고리 Domain
  * @author eskim
@@ -69,6 +71,7 @@ public class GoodsCategory extends TscBaseDomain {
 	private String cateCd3;
 	private String cateCd4;
 	private String cateCd5;
+	private Integer cateNo;
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] cateCdArr;
@@ -92,6 +95,8 @@ public class GoodsCategory extends TscBaseDomain {
 
 	private String goodsCds;
 
+	List<CategoryGoods> goodsList;
+
 	// Pagination
 	private TscPageRequest pageable;
 	private int pageNo = 1;

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

@@ -43,6 +43,8 @@ public class GoodsPriceRes extends TscBaseDomain {
 	private String confirmY;
 	private Float goodsSellFeeRate;
 	private String searchBrandCd;
+	private String brandList;
+	private String supplyCompList;
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrGoodsCd;
@@ -53,4 +55,10 @@ public class GoodsPriceRes extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private int[] arrGoodsPriceResSq;
 
+	/* Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyComp;
 }

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

@@ -86,6 +86,8 @@ public class GoodsSearch extends TscBaseDomain {
 	private String noticeTitle;
 	private Integer rinbdInfoSq;
 	private String callbackFn;
+	private String brandList;
+	private String supplyCompList;
 
 	//@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	//private String[] siteCd;

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

@@ -92,7 +92,7 @@ public class Plan extends TscBaseDomain{
 		/* Multi CheckBox 항목*/
 		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 		private String[] multiBrand;
-		private String[] multiCorner;
+		private String[] multiCate;
 		
 		// 코너
 		private String cateGb;		// 카테고리구분

+ 13 - 0
src/main/java/com/style24/persistence/domain/SupplyCompany.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -60,4 +61,16 @@ public class SupplyCompany extends TscBaseDomain {
 	private String searchTxt;			// 검색어
 	private String callbackFn;			// 콜백함수
 	private String multiGb;
+	private String searchSupplyCompCd;
+	private String searchSupplyCompNm;
+
+	/* 업체검색 Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyCompCd;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyCompNm;
+	/* 업체검색 Multi CheckBox 항목*/
+
+
 }

+ 34 - 10
src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -163,6 +163,19 @@
 		<if test="supplyCompCd != null and supplyCompCd != ''"> <!-- 브랜드관리 화면에서 사용 -->
 		AND    SC.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
+		<if test="multiSupplyCompCd != null and multiSupplyCompCd.length > 0">
+		AND    SC.SUPPLY_COMP_CD IN
+		    <foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
+		UPPER(#{item})
+		    </foreach>
+		</if>
+		<if test="multiSupplyCompNm != null and multiSupplyCompNm.length > 0">
+		AND (
+		    <foreach collection="multiSupplyCompNm" item="item" index="index" separator="or">
+		    UPPER(SC.SUPPLY_COMP_NM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		    </foreach>
+		 )
+		</if>
 		<if test='selfYn != null and (selfYn == "Y" or selfYn == "N")'>
 		<choose>
 		    <when test='selfYn  == "Y"'>
@@ -505,20 +518,31 @@
 		<if test='brandCd != null and brandCd != ""'>
 		AND    A.BRAND_CD = #{brandCd}
 		</if>
-		<if test='searchTxt != null and searchTxt != ""'>
-		AND    (
-		        A.BRAND_CD LIKE CONCAT('%',#{searchTxt},'%')
-		        OR
-		        UPPER(A.BRAND_ENM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
-		        OR
-		        UPPER(A.BRAND_KNM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
-		        OR
-		        UPPER(A.BRAND_GRP_NM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
-		       )
+		<if test="multiBrandCd != null and multiBrandCd.length > 0">
+		AND    A.BRAND_CD IN
+		    <foreach collection="multiBrandCd" item="item" index="index"  open="(" close=")" separator=",">
+		UPPER(#{item})
+		    </foreach>
+		</if>
+		<if test="multiBrandNm != null and multiBrandNm.length > 0">
+		AND (
+		    <foreach collection="multiBrandNm" item="item" index="index" separator="or">
+		    (
+		    UPPER(A.BRAND_ENM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		    OR
+		    UPPER(A.BRAND_KNM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		    OR
+		    UPPER(A.BRAND_GRP_NM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		    )
+		  </foreach>
+		 )
 		</if>
 		<if test='useYn != null and useYn != ""'>
 		AND    A.USE_YN = #{useYn}
 		</if>
+		<if test='selfYn != null and selfYn != ""'>
+		AND    A.SELF_YN = #{selfYn}
+		</if>
 		ORDER  BY A.SELF_YN DESC,  A.DISP_ORD
 	</select>
 	

+ 10 - 145
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -821,120 +821,10 @@
 	<delete id="deleteGoodsCategory" parameterType="GoodsCategory">
 		/* TsaDisplay.deleteGoodsCategory */
 		DELETE
-		FROM TB_CATE_GOODS
-		WHERE GOODS_CD = #{goodsCd}
-		<choose>
-		<when test="cateType == 'G031_20' and cateCd != null and cateCd != ''">
-		AND CATE_NO = #{cateCd}
-		</when>
-		<otherwise>
-		AND CATE_NO IN (
-			SELECT CATE_CD FROM
-			(
-				SELECT CATE1_NO AS CATE_CD
-				, CATE1_NO
-				, CATE2_NO
-				, CATE3_NO
-				, CATE4_NO
-				, CATE_TYPE
-				FROM TB_CATE_4SRCH
-				<if test="cateCd != null and cateCd1 != cateCd">
-				WHERE EXISTS (
-					SELECT 1 FROM (
-						SELECT COUNT(*) AS CATE_CNT
-						 FROM (
-							SELECT CATE_NO
-							FROM TB_CATE_GOODS
-							WHERE GOODS_CD = #{goodsCd}
-							AND CATE_NO IN (
-							    	SELECT LEAF_CATE_NO
-									FROM TB_CATE_4SRCH
-									WHERE CATE1_NO  = #{cateCd1}
-								)
-							) ALIAS_FOR_SUBQUERY
-						) ALIAS_FOR_SUBQUERY
-					<![CDATA[WHERE CATE_CNT < 2 ]]>
-				)
-				</if>
-				UNION ALL
-				SELECT CATE2_NO AS CATE_CD
-					, CATE1_NO
-					, CATE2_NO
-					, CATE3_NO
-					, CATE4_NO
-					, CATE_TYPE
-				FROM TB_CATE_4SRCH
-				<if test="cateCd != null and cateCd1 != cateCd and cateCd2 != cateCd">
-				WHERE EXISTS (
-					SELECT 1 FROM (
-						SELECT COUNT(*) AS CATE_CNT
-						FROM (
-							SELECT CATE_NO
-							FROM TB_CATE_GOODS
-							WHERE GOODS_CD = #{goodsCd}
-							AND CATE_NO IN (
-							    SELECT LEAF_CATE_NO
-								FROM TB_CATE_4SRCH
-								WHERE CATE2_NO = #{cateCd2}
-							)
-						) ALIAS_FOR_SUBQUERY
-					) ALIAS_FOR_SUBQUERY
-					<![CDATA[WHERE CATE_CNT < 2 ]]>
-				)
-				</if>
-				UNION ALL
-				SELECT CATE3_NO AS CATE_CD
-					, CATE1_NO
-					, CATE2_NO
-					, CATE3_NO
-					, CATE4_NO
-					, CATE_TYPE
-				FROM TB_CATE_4SRCH
-				<if test="cateCd != null and cateCd == cateCd4">
-				WHERE EXISTS (
-					SELECT 1 FROM (
-						SELECT COUNT(*) AS CATE_CNT
-						FROM (
-							SELECT CATE_NO
-							FROM TB_CATE_GOODS
-							WHERE GOODS_CD = #{goodsCd}
-							AND CATE_NO IN (
-							    	SELECT LEAF_CATE_NO
-									FROM TB_CATE_4SRCH
-									WHERE CATE3_NO = #{cateCd3}
-							)
-						) ALIAS_FOR_SUBQUERY
-					) ALIAS_FOR_SUBQUERY
-					<![CDATA[WHERE CATE_CNT < 2 ]]>
-				)
-				</if>
-				UNION ALL
-				SELECT CATE4_NO AS CATE_CD
-				, CATE1_NO
-				, CATE2_NO
-				, CATE3_NO
-				, CATE4_NO
-				, CATE_TYPE
-				FROM TB_CATE_4SRCH
-			) ALIAS_FOR_SUBQUERY
-			<if test="cateCd != null and cateCd1 == cateCd">
-				WHERE CATE1_NO = #{cateCd}
-			</if>
-			<if test="cateCd != null and cateCd2 == cateCd">
-				WHERE CATE2_NO = #{cateCd}
-			</if>
-			<if test="cateCd != null and cateCd3 == cateCd">
-				WHERE CATE3_NO = #{cateCd}
-			</if>
-			<if test="cateCd != null and cateCd4 == cateCd">
-				WHERE CATE4_NO = #{cateCd}
-			</if>
-			<if test="cateCd == null or cateCd == ''">
-				WHERE CATE_TYPE = 'G031_10'
-			</if>
-		)
-		</otherwise>
-		</choose>
+		FROM 	TB_CATE_GOODS
+		WHERE 	1=1
+		AND		GOODS_CD = #{goodsCd}
+		AND 	CATE_NO = #{cateNo}
 	</delete>
 
 	<select id="getCategoryGoodsListCount" parameterType="CategoryGoods" resultType="int">
@@ -982,6 +872,9 @@
 			) G
 		</if>
 		WHERE A.GOODS_CD = G.GOODS_CD
+		<if test="goodsCd != null and goodsCd !='' and searchGb !='EXCEL'">
+			AND G.GOODS_CD = #{goodsCd}
+		</if>
 	</select>
 
 	<select id="getCategoryGoodsList" parameterType="CategoryGoods" resultType="CategoryGoods">
@@ -1048,6 +941,9 @@
 				</if>
 				JOIN ( SELECT @rownum := 0) R
 				WHERE A.GOODS_CD = G.GOODS_CD
+				<if test="goodsCd != null and goodsCd !='' and searchGb !='EXCEL'">
+					AND G.GOODS_CD = #{goodsCd}
+				</if>
 				ORDER BY A.DISP_ORD ASC, G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC
 		<include refid="getListPagingCondition_sql"/>
 	</select>
@@ -1192,35 +1088,4 @@
 			<include refid="getListPagingCondition_sql"/>
 	</select>
 
-	<select id="getCategoryGoodsDispOrd" parameterType="CategoryGoods" resultType="int">
-		SELECT IFNULL((MAX(DISP_ORD)+1),1) AS DISP_ORD
-		FROM TB_CATE_GOODS
-		WHERE CATE_NO = #{addCateNo}
-	</select>
-
-	<insert id="moveCategoryGoods" parameterType="CategoryGoods">
-		INSERT INTO TB_CATE_GOODS(
-			CATE_NO
-			,GOODS_CD
-			,DISP_ORD
-			,REG_NO
-			,REG_DT
-		)VALUES (
-			#{addCateNo}
-			,#{goodsCd}
-			,#{dispOrd}
-			,#{regNo}
-			,NOW()
-		)
-		ON DUPLICATE KEY UPDATE
-		REG_NO = #{regNo}
-		,REG_DT = NOW()
-	</insert>
-
-	<delete id="deleteCategoryGoods" parameterType="CategoryGoods">
-		DELETE FROM TB_CATE_GOODS
-		WHERE 1=1
-		AND CATE_NO = #{cateNo}
-		AND GOODS_CD = #{goodsCd}
-	</delete>
 </mapper>

+ 15 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -556,9 +556,9 @@
 		        AND G.SUPPLY_COMP_CD = #{supplyCompCd}
 		        </if>
 		        <if test="multiSupplyCompCd != null and multiSupplyCompCd != ''">
-		            AND G.SUPPLY_COMP_CD IN
+		        AND G.SUPPLY_COMP_CD IN
 		            <foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
-		                #{item}
+		        #{item}
 		            </foreach>
 		        </if>
 		        <if test="brandCd != null and brandCd != ''">
@@ -3014,7 +3014,7 @@
 		    INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		    WHERE 1 = 1
 		    <if test="goodsCd != null and goodsCd != ''">
-		    AND UPPER(G.GOODS_CD) = LIKE UPPER('%' || #{goodsCd} || '%')
+		    AND UPPER(G.GOODS_CD) LIKE CONCAT('%',UPPER(#{goodsCd}),'%') 
 		    </if>
 		    <if test="supplyCompCd != null and supplyCompCd != ''">
 		    AND G.SUPPLY_COMP_CD = #{supplyCompCd}
@@ -3025,6 +3025,18 @@
 		    <if test="searchBrandCd != null and searchBrandCd != ''">
 		    AND G.BRAND_CD = #{searchBrandCd}
 		    </if>
+		    <if test="multiSupplyComp != null and multiSupplyComp != ''">
+		    AND G.SUPPLY_COMP_CD IN
+		        <foreach collection="multiSupplyComp" item="item" index="index"  open="(" close=")" separator=",">
+		        #{item}
+		        </foreach>
+		    </if>
+		    <if test="multiBrand != null and multiBrand != ''">
+		    AND G.BRAND_CD IN
+		        <foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+		        #{item}
+		        </foreach>
+		    </if>
 		    <if test="cfrmYn != null and cfrmYn != ''">
 		    AND A.CFRM_YN = #{cfrmYn}
 		    </if>

+ 4 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaOcm.xml

@@ -14,6 +14,7 @@
 		     , STOCK_SELL_RATE   /*재고판매비율*/
 		     , PRICE_ACCEPT_RATE /*가격차이허용율*/
 		     , DWDP_YN           /*직접회수처리여부*/
+		     , CNCLSMS_SEND_YN   /*취소문자발송여부*/
 		     , USE_YN            /*사용여부*/
 		FROM   TB_EXTMALL A
 		WHERE  1 = 1
@@ -39,6 +40,7 @@
 		     , STOCK_SELL_RATE
 		     , PRICE_ACCEPT_RATE
 		     , DWDP_YN
+		     , CNCLSMS_SEND_YN
 		     , USE_YN
 		     , REG_NO
 		     , REG_DT
@@ -55,6 +57,7 @@
 		     , IFNULL(#{stockSellRate},0)
 		     , IFNULL(#{priceAcceptRate},0)
 		     , #{dwdpYn}
+		     , #{cnclsmsSendYn}
 		     , #{useYn}
 		     , #{regNo}
 		     , NOW()
@@ -69,6 +72,7 @@
 		     , STOCK_SELL_RATE = IFNULL(#{stockSellRate},0)
 		     , PRICE_ACCEPT_RATE = IFNULL(#{priceAcceptRate},0)
 		     , DWDP_YN = #{dwdpYn}
+		     , CNCLSMS_SEND_YN = #{cnclsmsSendYn}
 		     , USE_YN = #{useYn}
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()

+ 50 - 13
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -170,17 +170,16 @@
 		AND    PLAN_SQ = #{planSq}
 		</if>
 		<if test="planNm != null and planNm != ''">
-		AND    PLAN_NM LIKE UPPER('%' || #{planNm} || '%')
+		AND    UPPER(PLAN_NM) LIKE CONCAT('%', #{planNm},'%') 
 		</if>
 		
 		<if test="condition != null and condition != ''">
 		<choose>
 			     <when test="search != null and search == 'searchPlanNm'">
-		AND    (
+		AND  
 		        <foreach collection="conditionList" item="item" index="index" separator="or">
 		        UPPER(PLAN_NM) LIKE CONCAT('%',UPPER(#{item}),'%') 
 		        </foreach>
-		       )
 	         </when>
 	          <when test="search != null and search == 'searchPlanSq'">
  		AND 		 
@@ -206,16 +205,16 @@
 		AND    TEMPLATE_TYPE = #{templateType}
 		</if>
 		<if test="dispStdt != null and dispStdt != ''">
-		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{dispStdt}, 'YYYY-MM-DD')
+		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{dispStdt}, '%Y-%m-%d %H:%i:%S')
 		</if>
 		<if test="dispEddt != null and dispEddt != ''">
-		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{dispEddt}, 'YYYY-MM-DD') + 0.99999
+		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{dispEddt}, '%Y-%m-%d %H:%i:%S')
 		</if>
 		<if test="popupDispStdt != null and popupDispStdt != ''">
-		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{popupDispStdt}, 'YYYY-MM-DD')
+		AND    DISP_EDDT <![CDATA[>=]]> DATE_FORMAT(#{popupDispStdt}, '%Y-%m-%d %H:%i:%S')
 		</if>
 		<if test="popupDispEddt != null and popupDispEddt != ''">
-		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{popupDispEddt}, 'YYYY-MM-DD') + 0.99999
+		AND    DISP_STDT <![CDATA[<=]]> DATE_FORMAT(#{popupDispEddt}, '%Y-%m-%d %H:%i:%S')
 		</if>
 	</sql>
 	
@@ -521,8 +520,8 @@
 	        	     AND BRAND_CD = #{brandCd}
 	</insert>
 	
-	<insert id="createPlanCorner" parameterType="Plan">
-		/* TsaMarketing.createPlanCorner */
+	<insert id="createPlanCate" parameterType="Plan">
+		/* TsaMarketing.createPlanCate */
 		INSERT INTO TB_PLAN_CATE
 		(
 			CATE_NO
@@ -545,8 +544,8 @@
 	
 	</insert>
 	
-	<select id="getPlanCornerList" parameterType="Plan" resultType="Plan">
-		/* TsaMarketing.getPlanCornerList */
+	<select id="getPlanCateList" parameterType="Plan" resultType="Plan">
+		/* TsaMarketing.getPlanCateList */
 		 SELECT TP.PLAN_NM AS PLAN_NM
 				     , TP.PLAN_SQ AS PLAN_SQ
 				     , TC.CATE1_NM AS CATE_NM
@@ -563,8 +562,8 @@
 		AND TP.DEL_YN = 'N'
 	</select>
 	
-	<insert id="createPlanCornerCopy" parameterType="Plan">
-		/* TsaMarketing.createPlanCornerCopy */
+	<insert id="createPlanCateCopy" parameterType="Plan">
+		/* TsaMarketing.createPlanCateCopy */
 			INSERT INTO
 					 TB_PLAN_CATE
 					 (
@@ -588,6 +587,44 @@
 					 AND PLAN_SQ = #{copyPlanSq}
 	        	     AND CATE_NO = #{cateNo}
 	</insert>
+	
+	<!-- 기획전 코너 상품 목록 조회 건수 -->
+	<select id="getPlanGoodsListCount" parameterType="Plan" resultType="int">
+		/* TsaMarketing.getPlanGoodsListCount */
+		SELECT COUNT(*) AS TOTCNT
+		FROM ( SELECT A.PLAN_DTL_SQ     
+		            , A.GOODS_CD        
+		            , B.GOODS_NM        
+		            , B.DC_RATE         
+		            , B.LIST_PRICE      
+		            , B.CURR_PRICE      
+		            , B.SUPPLY_COMP_CD  
+		            , DECODE(B.FORMAL_GB, 10, '정상', 20, '이월') AS FORMAL_GB  
+		            , C.IMG_TYPE        
+		            , C.IMG_PATH1       
+		            , A.DISP_ORD        
+		            , A.DEL_YN          
+		            , B.GOODS_STAT      
+		            , A.REG_ID          
+		            , A.REG_DT          
+		            , A.UPD_ID          
+		            , A.UPD_DT          
+		       FROM   TB_PLAN_GOODS A
+		            , TB_GOODS B
+		            , TB_GOODS_IMG C
+		       WHERE  A.GOODS_CD = B.GOODS_CD
+		       AND    A.GOODS_CD = C.GOODS_CD(+)
+		       AND    A.PLAN_DTL_SQ = #{planDtlSq}
+		       AND    A.DEL_YN = 'N'
+		       ORDER  BY DISP_ORD
+		)
+	</select>
+	
+	<!-- 기획전 코너 시퀀스 조회 -->
+	<select id="getPlanDtlSq" parameterType="Plan" resultType="Integer">
+		/* TsaMarketing.getPlanDtlSq */
+		SELECT LAST_INSERT_ID()	
+	</select>
 </mapper>
 
 

+ 6 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaStock.xml

@@ -50,6 +50,12 @@
 		        <if test="supplyCompCd != null and supplyCompCd != ''">
 		        AND G.SUPPLY_COMP_CD = #{supplyCompCd}
 		        </if>
+		        <if test="multiSupplyCompCd != null and multiSupplyCompCd != ''">
+		        AND G.SUPPLY_COMP_CD IN
+		            <foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
+		        #{item}
+		            </foreach>
+		        </if>
 		        <if test="brandCd != null and brandCd != ''">
 		        AND G.BRAND_CD = #{brandCd}
 		        </if>

+ 29 - 6
src/main/webapp/WEB-INF/views/business/BrandSearchPopupForm.html → src/main/webapp/WEB-INF/views/business/BrandPopupForm.html

@@ -3,7 +3,7 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : BrandSearchPopupForm.html
+ * @source  : BrandPopupForm.html
  * @desc    : 브랜드 팝업 Page
  *============================================================================
  * STYLE24
@@ -14,7 +14,7 @@
  * 1.0  2020.12.15   eskim       최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="500" id="popupBrandList">
+<div class="modalPopup" data-width="650" id="popupBrandList">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
@@ -28,14 +28,30 @@
 			<form id="searchBrandListForm" name="searchBrandListForm" action="#" th:action="@{'/business/brand/list'}" onsubmit="$('#btnSearchBrandList').trigger('click'); return false;">
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
+						<col style="width:15%;"/>
+						<col style="width:35%;"/>
 						<col style="width:15%;"/>
 						<col/>
 					</colgroup>
 					<tbody>
 						<tr>
-							<th>브랜드명</th>
+							<th>자사/입점</th>
+							<td colspan="3">
+								<select name="selfYn" id="selfYn">
+									<option value="">전체</option>
+									<option value="Y">자사</option>
+									<option value="N">입점</option>
+								</select>
+							</td>
+						</tr>
+						<tr>
+							<th>브랜드코드<i class="required" title="필수"></i></th>
+							<td>
+								<textarea class="textareaR3" name="searchBrandCd" id="searchBrandCd"></textarea>
+							</td>
+							<th>브랜드명<i class="required" title="필수"></i></th>
 							<td>
-								<input type="text" name="searchTxt" th:value="${params.searchTxt}" maxlength="20" onkeypress="if (event.keyCode == 13) { $('#btnSearchBrandList').trigger('click'); }"/>
+								<textarea class="textareaR3" name="searchBrandNm" id="searchBrandNm"></textarea>
 							</td>
 						</tr>
 					</tbody>
@@ -71,7 +87,8 @@
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: headerSelection, checkboxSelection: true, filter: false},
 		{headerName: "브랜드번호", field: "brandCd", width: 120, cellClass: 'text-center'},
 		{headerName: "브랜드국문명", field: "brandEnm", width: 150, cellClass: 'text-center'},
-		{headerName: "브랜드영문명", field: "brandKnm", width: 150, cellClass: 'text-center'}
+		{headerName: "브랜드영문명", field: "brandKnm", width: 150, cellClass: 'text-center'},
+		{headerName: "브랜드그룹명", field: "brandGrpNm", width: 150, cellClass: 'text-center'}
 	];
 
 	let gridOptionsBrandList = gagaAgGrid.getGridOptions(columnDefsMdList);
@@ -84,6 +101,12 @@
 
 	// 조회
 	$('#btnSearchBrandList').on('click', function() {
+		
+		if (gagajf.isNull($('#searchBrandListForm textarea[name=searchBrandCd]').val())  && gagajf.isNull($('#searchBrandListForm textarea[name=searchBrandNm]').val())){
+			mcxDialog.alert('검색조건을 입력하세요.');
+			return false;
+		}
+		
 		// Fetch data
 		gagaAgGrid.fetch($('#searchBrandListForm').prop('action'), gridOptionsBrandList, '#searchBrandListForm');
 	});
@@ -121,7 +144,7 @@
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridBrandList', gridOptionsBrandList);
 		
-		$('#btnSearchBrandList').trigger('click');
+		//$('#btnSearchBrandList').trigger('click');
 	});
 /*]]>*/
 </script>

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

@@ -27,19 +27,34 @@
 		<div class="panelContent">
 			<form id="searchCompanyListForm" name="searchCompanyListForm" action="#" th:action="@{'/business/supply/company/list'}" onsubmit="$('#btnSearchCompanyList').trigger('click'); return false;">
 				<input type="hidden" name="searchGb" value="NAME" />		<!-- 공급업체 목록 검색 조건은 업체명으로만 -->
-				<input type="hidden" name="selfYn" th:value="${params.selfYn}" />
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
+						<col style="width:15%;"/>
+						<col style="width:35%;"/>
 						<col style="width:15%;"/>
 						<col/>
 					</colgroup>
 					<tbody>
-					<tr>
-						<th>공급업체명</th>
-						<td>
-							<input type="text" name="searchTxt" th:value="${params.searchTxt}" maxlength="20" onkeypress="if (event.keyCode == 13) { $('#btnSearchCompanyList').trigger('click'); }"/>
-						</td>
-					</tr>
+						<tr>
+							<th>자사/입점</th>
+							<td colspan="3">
+								<select name="selfYn" id="selfYn">
+									<option value="">전체</option>
+									<option value="Y">자사</option>
+									<option value="N">입점</option>
+								</select>
+							</td>
+						</tr>
+						<tr>
+							<th>업체코드<i class="required" title="필수"></i></th>
+							<td>
+								<textarea class="textareaR3" name="searchSupplyCompCd" id="searchSupplyCompCd"></textarea>
+							</td>
+							<th>업체명<i class="required" title="필수"></i></th>
+							<td>
+								<textarea class="textareaR3" name="searchSupplyCompNm" id="searchSupplyCompNm"></textarea>
+							</td>
+						</tr>
 					</tbody>
 				</table>
 				<ul class="panelBar">
@@ -86,6 +101,12 @@
 
 		// 조회
 		$('#btnSearchCompanyList').on('click', function() {
+			
+			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');
 		});
@@ -124,7 +145,7 @@
 			gagaAgGrid.createGrid('gridComapanyPopupList', gridOptionsCompanyPopupList);
 
 			//  조회
-			$('#btnSearchCompanyList').trigger('click');
+			//$('#btnSearchCompanyList').trigger('click');
 		});
 		/*]]>*/
 	</script>

+ 5 - 4
src/main/webapp/WEB-INF/views/common/fragments/gnb.html

@@ -14,9 +14,9 @@
  * 1.0  2020.10.06   gagamel     최초 작성
  *******************************************************************************
  -->
-<div th:fragment="gnb">
+<header th:fragment="gnb">
 	<!-- HEADER AREA -->
-	<header>
+	<!-- <header> -->
 		<!-- 로고, 전체화면 버튼 -->
 		<div class="header-logo">
 			<a href="/">
@@ -61,7 +61,7 @@
 			</a>
 		</div>
 		<!-- //반응형 : 사용자,권한,로그아웃-->
-	</header>
+	<!-- </header> -->
 	<!-- //HEADER AREA -->
 	
 <script th:inline="javascript">
@@ -79,6 +79,7 @@
 		});
 		$(a).addClass('on');
 		
+		$('#wrapper').removeClass('dashboard');
 		cfnDrawLnbMenu($(a).data('menuId'));
 	});
 	
@@ -94,6 +95,6 @@
 /*]]>*/
 </script>
 
-</div>
+</header>
 
 </html>

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

@@ -180,7 +180,7 @@
 	let cateGbList = gagajf.convertToArray([[${cateGbList}]]);
 	let cateTypeList = gagajf.convertToArray([[${cateTypeList}]]);
 	let formalGbList = gagajf.convertToArray([[${formalGbList}]]);
-	let conentsLocList = gagajf.convertToArray([[${conentsLocList}]]);
+	let contentsLocList = gagajf.convertToArray([[${contentsLocList}]]);
 
 	let columnDefs = [
 		{
@@ -210,7 +210,7 @@
 		},
 		{
 			headerName: "컨텐츠위치", field: "contentsLoc", width: 200, cellClass: 'text-center',
-			cellRenderer: function (params) { return gagaAgGrid.lookupValue(conentsLocList, params.value); }
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(contentsLocList, params.value); }
 		},
 		{headerName: "노출여부", field: "dispYn", width: 80, cellClass: 'text-center'},
 		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'}

+ 116 - 22
src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html

@@ -102,8 +102,8 @@
 		<ul class="panelBar">
 			<li class="aR" id="btnGoodsEdit" style="display:none">
 				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnAddGoods" style="display:none">상품추가</button>
-				<button type="button" class="btn btn-primary btn-lg" id="btnDispChange">순서변경</button>
-                <button type="button" class="btn btn-primary btn-lg" id="btnSelectTop">선택최상위로</button>
+				<!--<button type="button" class="btn btn-primary btn-lg" id="btnDispChange">순서변경</button>
+                <button type="button" class="btn btn-primary btn-lg" id="btnSelectTop">선택최상위로</button>-->
 				<button type="button" class="btn btn-danger btn-lg" id="btnSelectDel">선택삭제</button>
 			</li>
 		</ul>
@@ -186,9 +186,6 @@
 
 	let columnDefs1 = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-		/*{headerName: 'No', width: 60, cellClass: 'text-center',
-			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
-		},*/
 		{headerName: "상품코드", field: "goodsCd", width: 150, cellClass: 'text-center'},
 		{headerName: "상품타이틀명", field: "goodsTnm", width: 150, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-center'},
@@ -211,6 +208,89 @@
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs1);
 	gridOptions.rowSelection = "multiple";
 
+	/**
+	 * 엑셀 상품 조회
+	 */
+	$("#btnExcelSearch").on('click', function(){
+		cfnExcelUploadPopup('goodsExcelUpload', 'goodsExcelUpload');
+	});
+
+	var goodsExcelUpload = function(result){
+		var data = {procJob : result.procJob
+			,excelFileNm : result.excelFileNm
+		};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/goods/search/excelupload/save', jsonData, fnGoodsExcelUploadCallBack);
+	}
+
+	var fnGoodsExcelUploadCallBack = function(result){
+		$("#searchForm input[name=searchGb]").val("EXCEL");
+		fnCategoryGoodsListSearch();
+	}
+
+	/**
+	 * 상품조회 버튼 클릭시
+	 */
+	$("#btnSearch").on('click', function(){
+		$("#searchForm input[name=searchGb]").val("BASIC");
+		gagaPaging.load(1);
+	});
+
+	/**
+	 * 상품추가 버튼 클릭 시
+	 */
+	$("#btnAddGoods").bind('click', function(){
+		cfnOpenGoodsPopup("fnCategoryGoodsAdd");
+	});
+
+	var fnCategoryGoodsAdd = function (result){
+		mcxDialog.confirm('상품을 추가하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function () {
+				var multiGoods = [];
+				$.each(result, function(idx, item) {
+					multiGoods.push(item.goodsCd);
+				});
+
+				var data = {
+					mode : 'add'
+					,cateNo : $("#cateCd").val()
+					,multiGoods : multiGoods
+				}
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/display/category/goods/save', jsonData, fnCategoryGoodsListSearch);
+				uifnPopupClose('popupGoods');
+			}
+		});
+	}
+
+	/**
+	 * 상품삭제 버튼 클릭 시
+	 */
+	$("#btnSelectDel").bind('click', function(){
+		var selectData = gridOptions.api.getSelectedRows();
+		if(selectData<1){
+			mcxDialog.alert("상품을 선택하세요.");
+			return false;
+		}
+
+		mcxDialog.confirm('삭제 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function () {
+				var data = {
+					mode : 'delete'
+					,goodsList : selectData
+				};
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/display/category/goods/delete', jsonData, fnCategoryGoodsListSearch);
+			}
+		});
+	});
+
 	/**
 	 * 상품복사 버튼 클릭 시
 	 */
@@ -231,15 +311,21 @@
 			return false;
 		}
 
-		var data = {
-			mode : 'copy'
-			,cateNo : $("#cateCd").val()
-			,addCateNo : $("#addCateCd").val()
-			,goodsList : selectData
-		};
-
-		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/display/category/goods/move', jsonData, fnCategoryGoodsListSearch);
+		mcxDialog.confirm('복사 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function () {
+				var data = {
+					mode : 'copy'
+					,cateNo : $("#cateCd").val()
+					,addCateNo : $("#addCateCd").val()
+					,goodsList : selectData
+				};
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/display/category/goods/move', jsonData, fnCategoryGoodsListSearch);
+			}
+		});
 	});
 
 	/**
@@ -261,15 +347,23 @@
 			mcxDialog.alert("상품을 이동할 카테고리가 동일합니다.");
 			return false;
 		}
-		var data = {
-			mode : 'move'
-			,cateNo : $("#cateCd").val()
-			,addCateNo : $("#addCateCd").val()
-			,goodsList : selectData
-		};
 
-		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/display/category/goods/move', jsonData, fnCategoryGoodsListSearch);
+		mcxDialog.confirm('이동 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function () {
+				var data = {
+					mode : 'move'
+					,cateNo : $("#cateCd").val()
+					,addCateNo : $("#addCateCd").val()
+					,goodsList : selectData
+				};
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/display/category/goods/move', jsonData, fnCategoryGoodsListSearch);
+			}
+		});
+
 	});
 
 	/**

+ 12 - 46
src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html

@@ -332,7 +332,8 @@
 			{headerName: "카테고리1", field: "cateCd1", width: 150, cellClass: 'text-left', hide: true},
 			{headerName: "카테고리2", field: "cateCd2", width: 150, cellClass: 'text-left', hide: true},
 			{headerName: "카테고리3", field: "cateCd3", width: 150, cellClass: 'text-left', hide: true},
-			{headerName: "카테고리4", field: "cateCd4", width: 150, cellClass: 'text-left', hide: true}
+			{headerName: "카테고리4", field: "cateCd4", width: 150, cellClass: 'text-left', hide: true},
+			{headerName: "상품코드", field: "goodsCd", width: 150, cellClass: 'text-left', hide: true}
 		];
 
 		// Get GridOptions
@@ -527,21 +528,16 @@
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function(){ //debugger;
-					gagajf.ajaxFormSubmit($('#goodsCateForm').prop('action'), "#goodsCateForm", fnGoodsCateSaveCallBack);
+					gagajf.ajaxFormSubmit($('#goodsCateForm').prop('action'), "#goodsCateForm", fnGoodsCateCallBack);
 				}
 			});
 		});
 
-		var fnGoodsCateSaveCallBack = function(){
-			console.log('save success@');
-			$('#btnCateInit').click();
-		};
-
 		// 검색조건 초기화
 		$('#btnCateInit').on('click', function() {
 			$("#goodsCateForm")[0].reset();
 			var html = '<option value="">[선택]</option>';
-			for(var i=2; i<5; i++){
+			for(var i=2; i<6; i++){
 				for(var j=1; j<5; j++){
 					$("#selCate"+j+''+i).html(html);
 				}
@@ -555,58 +551,28 @@
 
 		// 전시카테고리 삭제
 		$("#btnCateDelete").on("click", function(){
-			var data = gridCategoryOptions.api.getSelectedRows();
-			if(data.length == 0){
+			var selectData = gridCategoryOptions.api.getSelectedRows();
+			if(selectData.length == 0){
 				mcxDialog.alert('삭제할 카테고리를 선택하세요.');
 				return false;
 			}
 
-			var goodsCd = '';
-			var cateCdArr = [];
-			var cateCd1Arr = [];
-			var cateCd2Arr = [];
-			var cateCd3Arr = [];
-			var cateCd4Arr = [];
-			var cateTypeArr = [];
-			data.forEach(function(row){
-				console.log('goodsCd:'+row.goodsCd);
-				console.log('cateType:'+row.cateType);
-				console.log('cateCd:'+row.cateCd);
-
-				console.log('catecd1:'+row.cateCd1);
-				console.log('catecd2:'+row.cateCd2);
-				console.log('catecd3:'+row.cateCd3);
-				console.log('catecd4:'+row.cateCd4);
-
-				cateCdArr.push(row.cateCd);
-				cateCd1Arr.push(row.cateCd1);
-				cateCd2Arr.push(row.cateCd2);
-				cateCd3Arr.push(row.cateCd3);
-				cateCd4Arr.push(row.cateCd4);
-				goodsCd = row.goodsCd;
-				cateTypeArr.push(row.cateType);
-			});
-
-			applyData = {cateCdArr : cateCdArr
-				, cateCd1Arr : cateCd1Arr
-				, cateCd2Arr : cateCd2Arr
-				, cateCd3Arr : cateCd3Arr
-				, cateCd4Arr : cateCd4Arr
-				, goodsCd : goodsCd
-				, cateTypeArr : cateTypeArr
+			var data = {
+				goodsList : selectData
 			};
 
-			var jsonData = JSON.stringify(applyData);
+			var jsonData = JSON.stringify(data);
 			mcxDialog.confirm('삭제하시겠습니까?', {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function(){
-					gagajf.ajaxJsonSubmit($('#deleteForm').prop('action'), jsonData, fnGoodsCateDeleteCallBack);
+					gagajf.ajaxJsonSubmit($('#deleteForm').prop('action'), jsonData, fnGoodsCateCallBack);
 				}
 			});
 		});
 
-		var fnGoodsCateDeleteCallBack = function(){
+		// 저장,삭제 콜백
+		var fnGoodsCateCallBack = function(){
 			$('#btnCateInit').click();
 			fnDisplayCategorySearch();
 		};

+ 94 - 22
src/main/webapp/WEB-INF/views/goods/GoodsEpSkipForm.html

@@ -36,22 +36,29 @@
 				<table class="frmStyle">
 					<colgroup>
 						<col width="8%"/>
-						<col/>
+						<col width="17%"/>
 						<col width="8%"/>
-						<col width="25%"/>
+						<col width="17%"/>
 						<col width="8%"/>
-						<col width="20%"/>
+						<col width="17%"/>
+						<col width="8%"/>
+						<col />
 					</colgroup>
 					<tr>
-						<th>업체/브랜드</th>
+						<th>업체</th>
 						<td>
-							<select name="supplyCompCd" id="supplyCompCd">
-								<option value="" th:if="${sessionInfo.roleCd} != 'B000'">[전체]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-							<select name="brandCd" id="brandCd">
-								<option value="">[전체]</option>
-							</select>
+							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
+							<span id="supplyCompText"></span>
+							<input type="hidden" name="supplyCompList"/>
+						</td>
+						<th>브랜드</th>
+						<td>
+							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchBrand"><i class="fa fa-search"></i></button>
+							<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
+							<span id="brandText"></span>
+							<input type="hidden" name="brandList"/>
 						</td>
 						<th>키워드</th>
 						<td>
@@ -77,7 +84,7 @@
 					</tr>
 					<tr>
 						<th>비노출예약일</th>
-						<td colspan="5" id="sellTerms"></td>
+						<td colspan="7" id="sellTerms"></td>
 					</tr>
 				</table>
 				<ul class="panelBar">
@@ -137,7 +144,7 @@
 		},
 		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
 		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
-		{headerName: "상품명", field: "goodsNm", width: 180, cellClass: 'text-left'
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'
 			,cellRenderer: function(params) {
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
@@ -198,6 +205,10 @@
 		$("#goodsEpSkipListForm input[type=checkbox]").removeClass("checked");
 		$("#goodsEpSkipListForm input[type=checkbox]").parent("label").removeClass("checked");
 		$("#goodsEpSkipListForm input[type=radio][checked]").parent("label").addClass("checked");
+		$('#goodsEpSkipListForm input[name=brandList]').val('');
+		$('#goodsEpSkipListForm input[name=supplyCompList]').val('');
+		$('#goodsEpSkipListForm').find('#brandText').html('');
+		$('#goodsEpSkipListForm').find('#supplyCompText').html('');
 	}
 	
 	// 조회클릭시
@@ -244,17 +255,22 @@
 		var searchFlag = false;
 		var cnt = 0;
 
-		for (i = 0; i < form.elements.length; i++ ) {
-			var el = form.elements[i];
-
-			if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize")) {
-				if (!(el.value == null || el.value == "")) {
-					cnt++;
+		if( !gagajf.isNull($("#goodsEpSkipListForm input[name=supplyCompList]").val())
+				|| !gagajf.isNull($("#goodsEpSkipListForm input[name=brandList]").val())
+			){
+			searchFlag = true;
+		}else{
+			for (i = 0; i < form.elements.length; i++ ) {
+				var el = form.elements[i];
+	
+				if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize")) {
+					if (!(el.value == null || el.value == "")) {
+						cnt++;
+					}
 				}
 			}
+			if(cnt > 0) searchFlag = true;
 		}
-			
-		if(cnt > 0) searchFlag = true;
 
 		if(searchFlag == false){
 			mcxDialog.alert("검색조건을 입력하세요.");
@@ -307,7 +323,7 @@
 	});
 	
 	//업체변경시
-	$('#goodsEpSkipListForm select[name=supplyCompCd]').on('change', function() {
+	/* $('#goodsEpSkipListForm select[name=supplyCompCd]').on('change', function() {
 		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
 
 		if(sessRoleCd == "G001_B000"){
@@ -317,6 +333,62 @@
 
 		cfnCreateCombo(actionUrl, $('#goodsEpSkipListForm select[name=brandCd]'), "[전체]", "");
 	});
+	 */
+	// 업체 조회 선택시
+	$('#btnSearchSupplyComp').on('click', function() {
+		cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');
+	});
+	
+	// 업체 조회 팝업에서 호출
+	var fnSetSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompText = "";
+		var sIndex = 0;
+		$('#goodsEpSkipListForm').find('#supplyCompText').html('');
+		$('#goodsEpSkipListForm input[name=supplyCompSearchTxt]').val('');
+		result.forEach(function(supplyComp){
+			sIndex++; 
+			arrSupplyComp.push(supplyComp.supplyCompCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#goodsEpSkipListForm input[name=supplyCompSearchTxt]').val(arrSupplyComp[0]);
+		}else{
+			supplyCompText = sIndex + " 개";
+			$('#goodsEpSkipListForm').find('#supplyCompText').html(supplyCompText);	
+		}
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#goodsEpSkipListForm input[name=supplyCompList]").val(jsonData);
+	}
+	
+	// 브랜드 조회 선택시
+	$('#btnSearchBrand').on('click', function() {
+		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
+	});
+	
+	// 브랜드 조회 팝업에서 호출
+	var fnSetBrandInfo = function(result) {
+		var arrbrandCd = [];
+		var brandText = "";
+		var bIndex = 0;
+		$('#goodsEpSkipListForm').find('#brandText').html('');
+		$('#goodsEpSkipListForm input[name=searchTxt]').val('');
+		result.forEach(function(brand){
+			bIndex++; 
+			arrbrandCd.push(brand.brandCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (bIndex == 1) {
+			$('#goodsEpSkipListForm input[name=searchTxt]').val(arrbrandCd[0]);
+		}else{
+			brandText = bIndex + " 개";
+			$('#goodsEpSkipListForm').find('#brandText').html(brandText);	
+		}
+		var jsonData = JSON.stringify(arrbrandCd);
+		$("#goodsEpSkipListForm input[name=brandList]").val(jsonData);
+	}
 	
 	//엑셀 상품 조회
 	$('#btnGoodsExcelUpLoad').on('click', function() {

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

@@ -23,17 +23,17 @@
 		<!-- 메뉴 설명 -->
 		<div class="infoBox menu-desc">
 		</div>
-		<form id="searchForm" name="searchForm" action="#" th:action="@{'/goods/list'}">
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/goods/list'}" >
 		<input type="hidden" id="searchGb" name="searchGb" />
 		<input type="hidden" id="imageViewYn" name="imageViewYn" />
 		<input type="hidden" id="goodsPriceYn" name="goodsPriceYn" value="Y"/> <!-- 즉시할인판매가 조회 -->
 		
-	 		<!-- 패널 영역1 -->
+			<!-- 패널 영역1 -->
 		<div class="panelStyle" >
 			<!-- 검색조건 영역 -->
 			<!-- TITLE -->
 			<div class="panelTitle">
-				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">업체, 키워드, 발생일</font>중 하나를 꼭 입력해 주세요.</h3>
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">업체, 브랜드, 키워드, 발생일</font>중 하나를 꼭 입력해 주세요.</h3>
 				<span class="panelControl">
 					<i class="fa fa-chevron-up"></i>
 				</span>
@@ -52,21 +52,34 @@
 						<col style="width: 16%;"/>
 					</colgroup>
 					<tr>
-						<th>업체/브랜드<em class="required" title="필수"></em></th>
-						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
+						<th>업체<em class="required" title="필수"></em></th>
+						<td>
+							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
+							<span id="supplyCompText"></span>
+							<input type="hidden" name="supplyCompList"/>
+							<!-- <label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
 							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
 							<select name="supplyCompCd" id="supplyCompCd">
 								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
-							<span id="multiBrand"></span>
+							<span id="multiBrand"></span> -->
 						</td>
 						<th>브랜드<em class="required" title="필수"></em></th>
 						<td>
 							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
 							<button type="button" class="btn icn" id="btnSearchBrand"><i class="fa fa-search"></i></button>
-							<input type="text" class="w100" name="brandCd" readonly="readonly"/>
+							<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
+							<span id="brandText"></span>
+							<input type="hidden" name="brandList"/>
+						</td>
+						<th>상품타입</th>
+						<td>
+							<select name="goodsType" id="goodsType">
+								<option value="">[전체]</option>
+								<option th:if="${goodsTypeList}" th:each="oneData, status : ${goodsTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
 						</td>
 						<th rowspan="4">키워드<em class="required" title="필수"></em></th>
 						<td rowspan="4">
@@ -76,7 +89,6 @@
 								<option value="searchGoodsNum">품번</option>
 								<option value="searchSupplyGoodsCd">업체상품코드</option>
 							</select>
-							<!-- <input type="text" class="w40p" name="condition" id="condition" maxlength="50"/> -->
 							<textarea class="textareaR3 w70p" name="condition" id="condition"></textarea>
 						</td>
 					</tr>
@@ -203,14 +215,7 @@
 					</tr>
 					<tr>
 						<th>발생일<em class="required" title="필수"></em></th>
-						<td colspan="5" id="sellTerms"></td>
-						<th>상품타입</th>
-						<td>
-							<select name="goodsType" id="goodsType">
-								<option value="">[전체]</option>
-								<option th:if="${goodsTypeList}" th:each="oneData, status : ${goodsTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
+						<td colspan="7" id="sellTerms"></td>
 					</tr>
 				</table>
 				<ul class="panelBar">
@@ -550,6 +555,10 @@
 		$("#searchForm input[type=checkbox]").parent("label").removeClass("checked");
 		$("#searchForm input[type=radio][checked]").parent("label").addClass("checked");
 		$("#multiBrand").empty();
+		$('#searchForm input[name=brandList]').val('');
+		$('#searchForm input[name=supplyCompList]').val('');
+		$('#searchForm').find('#brandText').html('');
+		$('#searchForm').find('#supplyCompText').html('');
 	});
 
 	// 조회클릭시
@@ -577,17 +586,18 @@
 	var fnConditionCheck = function(){
 		var formId = '#searchForm';
 		var form = document.searchForm;
+		
+		if (event.keyCode === 13) return false;
 
 		if($("#searchForm input[name=searchGb]").val() == "EXCEL") return true;
 
 		var searchFlag = false;
 		var cnt = 0;
 
-		if( !gagajf.isNull($("#searchForm select[name=supplyCompCd]").val()) 
-				|| !gagajf.isNull($("#searchForm select[name=statSupplyCompCd]").val()) 
+		if( !gagajf.isNull($("#searchForm input[name=supplyCompList]").val()) 
 				|| !gagajf.isNull($("#searchForm textarea[name=condition]").val())
 				|| (!gagajf.isNull($("#searchForm input[name=stDate]").val()) && !gagajf.isNull($("#searchForm input[name=edDate]").val()))
-				|| !gagajf.isNull($("#searchForm input[name=brandCd]").val())
+				|| !gagajf.isNull($("#searchForm input[name=brandList]").val())
 			){
 			searchFlag = true;
 		}else{
@@ -1073,23 +1083,68 @@
 		cfnCreateCombo('/renderer/delvFee/list/' + $('#searchForm select[name=statSupplyCompCd]').val(), $('#searchForm select[name=delvFeeCdC]'), "[선택]");
 	});
 	
+	// 업체 조회 선택시
+	$('#btnSearchSupplyComp').on('click', function() {
+		cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');
+	});
+	
+	// 업체 조회 팝업에서 호출
+	var fnSetSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompText = "";
+		var sIndex = 0;
+		$('#searchForm').find('#supplyCompText').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{
+			supplyCompText = sIndex + " 개";
+			$('#searchForm').find('#supplyCompText').html(supplyCompText);	
+		}
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#searchForm input[name=supplyCompList]").val(jsonData);
+	}
+	
 	// 브랜드 조회 팝업에서 호출
 	var fnSetBrandInfo = function(result) {
-		$("#searchForm input[name=brandCd]").val(result[0].brandCd);
+		var arrbrandCd = [];
+		var brandText = "";
+		var bIndex = 0;
+		$('#searchForm').find('#brandText').html('');
+		$('#searchForm input[name=searchTxt]').val('');
+		result.forEach(function(brand){
+			bIndex++; 
+			arrbrandCd.push(brand.brandCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (bIndex == 1) {
+			$('#searchForm input[name=searchTxt]').val(arrbrandCd[0]);
+		}else{
+			brandText = bIndex + " 개";
+			$('#searchForm').find('#brandText').html(brandText);	
+		}
+		var jsonData = JSON.stringify(arrbrandCd);
+		$("#searchForm input[name=brandList]").val(jsonData);
 	}
 	
 	// 브랜드 조회 선택시
 	$('#btnSearchBrand').on('click', function() {
-
 		/* if (gagajf.isNull($("#searchForm input[name=searchTxt]").val())){
 			mcxDialog.alert('브랜드 검색어를 입력하세요.');
 			return false;
 		} */
-		
-		cfnOpenBrandListPopup('fnSetBrandInfo', 'S', $("#searchForm input[name=searchTxt]").val());
-		
+		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
 	});
 	
+	
+	
 	// 상품이미지 미리보기 레이어에서 창 종료 이벤트
 	$(document).on("mouseleave","#goodsImgView",function(){
 		$("#goodsImgView").remove();
@@ -1115,5 +1170,4 @@
 /*]]>*/
 </script>
 	</div>
-
 </html>

+ 80 - 31
src/main/webapp/WEB-INF/views/goods/GoodsPopupListForm.html

@@ -14,7 +14,7 @@
  * 1.0  2020.10.26   eskim       최초 작성
  *******************************************************************************
  -->
-	<div class="modalPopup" data-width="1700">
+	<div class="modalPopup" data-width="full" data-height="870">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
@@ -27,7 +27,7 @@
 		<input type="hidden" id="goodsPriceYn" name="goodsPriceYn" value="Y"/> <!-- 즉시할인판매가 조회 -->
 		<div class="panelContent">
 			<ul class="notice">
-				<li>아래 검색조건 중 <font color="red">업체, 키워드, 발생일</font>중 하나를 꼭 입력해 주세요.</li>
+				<li>아래 검색조건 중 <font color="red">업체, 브랜드, 키워드, 발생일</font>중 하나를 꼭 입력해 주세요.</li>
 			</ul>
 			<table class="frmStyle">
 				<colgroup>
@@ -41,22 +41,28 @@
 					<col/>
 				</colgroup>
 				<tr>
-					<th>업체/브랜드<em class="required" title="필수"></em></th>
-					<td colspan="3">
-						<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
-						<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
-						<select name="supplyCompCd" id="supplyCompCd">
-							<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
-							<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-						</select>
-						<span id="multiBrand"></span>
+					<th>업체<em class="required" title="필수"></em></th>
+					<td>
+						<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20" />
+						<button type="button" class="btn icn" id="btnPopupSearchSupplyComp"><i class="fa fa-search"></i></button>
+						<span id="supplyCompText"></span>
+						<input type="hidden" name="supplyCompList"/>
 					</td>
 					<th>브랜드<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
-							<button type="button" class="btn icn" id="btnPopupSearchBrand"><i class="fa fa-search"></i></button>
-							<input type="text" class="w100" name="brandCd" readonly="readonly"/>
-						</td>
+					<td>
+						<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
+						<button type="button" class="btn icn" id="btnPopupSearchBrand"><i class="fa fa-search"></i></button>
+						<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
+						<span id="brandText"></span>
+						<input type="hidden" name="brandList"/>
+					</td>
+					<th>상품타입</th>
+					<td>
+						<select name="goodsType" id="goodsType">
+							<option value="">[전체]</option>
+							<option th:if="${goodsTypeList}" th:each="oneData, status : ${goodsTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+						</select>
+					</td>	
 					<th rowspan="4">키워드<em class="required" title="필수"></em></th>
 					<td rowspan="4">
 						<select name="search" id="search">
@@ -193,14 +199,7 @@
 				</tr>
 				<tr>
 					<th>발생일<em class="required" title="필수"></em></th>
-					<td colspan="5" id="sellTermsP"></td>
-					<th>상품타입</th>
-					<td>
-						<select name="goodsType" id="goodsType">
-							<option value="">[전체]</option>
-							<option th:if="${goodsTypeList}" th:each="oneData, status : ${goodsTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-						</select>
-					</td>
+					<td colspan="7" id="sellTermsP"></td>
 				</tr>
 			</table>
 			<ul class="panelBar">
@@ -224,7 +223,7 @@
 					<span class="btnRight" style="margin-top: 4px;">쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;</span>
 				</li>
 			</ul>
-			<div id="gridPopupGoodsList" style="width: 100%; height: 400px;" class="ag-theme-balham lh60"></div>
+			<div id="gridPopupGoodsList" style="width: 100%; height: 350px;" class="ag-theme-balham lh60"></div>
 			<!-- 버튼 배치 영역 -->
 			<ul class="panelBar">
 				<li class="center">
@@ -342,6 +341,10 @@
 		//$("#goodsPopupForm input[type=radio]").parent("label").removeClass("checked");
 		$("#goodsPopupForm input[type=checkbox]").parent("label").removeClass("checked");
 		$("#goodsPopupForm input[type=radio][checked]").parent("label").addClass("checked");
+		$('#goodsPopupForm input[name=brandList]').val('');
+		$('#goodsPopupForm input[name=supplyCompList]').val('');
+		$('#goodsPopupForm').find('#brandText').html('');
+		$('#goodsPopupForm').find('#supplyCompText').html('');
 	});
 
 	// 조회클릭시
@@ -381,10 +384,10 @@
 		var searchFlag = false;
 		var cnt = 0;
 
-		if( !gagajf.isNull($("#goodsPopupForm select[name=supplyCompCd]").val())
+		if( !gagajf.isNull($("#goodsPopupForm input[name=supplyCompList]").val())
 				|| !gagajf.isNull($("#goodsPopupForm textarea[name=condition]").val())
 				|| (!gagajf.isNull($("#goodsPopupForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsPopupForm input[name=edDate]").val())
-				|| !gagajf.isNull($("#goodsPopupForm input[name=brandCd]").val())
+				|| !gagajf.isNull($("#goodsPopupForm input[name=brandList]").val())
 
 				)
 			){
@@ -532,20 +535,66 @@
 		
 	});
 	
+	// 업체 조회 선택시
+	$('#btnPopupSearchSupplyComp').on('click', function() {
+		cfnOpenCompanyListPopup('fnSetPopupSupplyCompInfo', 'M');
+	});
+	
+	// 업체 조회 팝업에서 호출
+	var fnSetPopupSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompText = "";
+		var sIndex = 0;
+		$('#goodsPopupForm').find('#supplyCompText').html('');
+		$('#goodsPopupForm input[name=supplyCompSearchTxt]').val('');
+		result.forEach(function(supplyComp){
+			sIndex++; 
+			arrSupplyComp.push(supplyComp.supplyCompCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#goodsPopupForm input[name=supplyCompSearchTxt]').val(arrSupplyComp[0]);
+		}else{
+			supplyCompText = sIndex + " 개";
+			$('#goodsPopupForm').find('#supplyCompText').html(supplyCompText);	
+		}
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#goodsPopupForm input[name=supplyCompList]").val(jsonData);
+	}
+	
 	// 브랜드 조회 팝업에서 호출
 	var fnSetPopupBrandInfo = function(result) {
-		$("#goodsPopupForm input[name=brandCd]").val(result[0].brandCd);
+		var arrbrandCd = [];
+		var brandText = "";
+		var bIndex = 0;
+		$('#goodsPopupForm').find('#brandText').html('');
+		$('#goodsPopupForm input[name=searchTxt]').val('');
+		result.forEach(function(brand){
+			bIndex++; 
+			arrbrandCd.push(brand.brandCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (bIndex == 1) {
+			$('#goodsPopupForm input[name=searchTxt]').val(arrbrandCd[0]);
+		}else{
+			brandText = bIndex + " 개";
+			$('#goodsPopupForm').find('#brandText').html(brandText);	
+		}
+		var jsonData = JSON.stringify(arrbrandCd);
+		$("#goodsPopupForm input[name=brandList]").val(jsonData);
 	}
 	
 	// 브랜드 조회 선택시
 	$('#btnPopupSearchBrand').on('click', function() {
 
-		if (gagajf.isNull($("#goodsPopupForm input[name=searchTxt]").val())){
+		/* if (gagajf.isNull($("#goodsPopupForm input[name=searchTxt]").val())){
 			mcxDialog.alert('브랜드 검색어를 입력하세요.');
 			return false;
 		}
-		
-		cfnOpenBrandListPopup('fnSetPopupBrandInfo', $("#goodsPopupForm input[name=searchTxt]").val());
+		 */
+		cfnOpenBrandListPopup('fnSetPopupBrandInfo', 'M');
 		
 	});
 

+ 82 - 32
src/main/webapp/WEB-INF/views/goods/GoodsSupplyPriceForm.html

@@ -32,31 +32,37 @@
 			<div class="panelContent">
 				<table class="frmStyle">
 					<colgroup>
-						<col width="7%"/>
-						<col/>
-						<col width="7%"/>
-						<col width="18%"/>
-						<col width="7%"/>
 						<col width="10%"/>
-						<col width="7%"/>
+						<col width="15%"/>
 						<col width="10%"/>
+						<col width="15%"/>
+						<col width="10%"/>
+						<col width="15%"/>
+						<col width="10%"/>
+						<col />
 					</colgroup>
 					<tr>
-						<th>업체/브랜드<em class="required" title="필수"></em></th>
+						<th>업체<em class="required" title="필수"></em></th>
 						<td>
-							<select name="supplyCompCd" id="supplyCompCd">
+							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
+							<span id="supplyCompText"></span>
+							<input type="hidden" name="supplyCompList"/>
+							<!-- <select name="supplyCompCd" id="supplyCompCd">
 								<option 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="brandCd" id="brandCd">
 								<option value="">[전체]</option>
-							</select>
+							</select> -->
 						</td>
 						<th>브랜드<em class="required" title="필수"></em></th>
 						<td>
 							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
 							<button type="button" class="btn icn" id="btnSearchBrand"><i class="fa fa-search"></i></button>
-							<input type="text" class="w100" name="searchBrandCd" readonly="readonly"/>
+							<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
+							<span id="brandText"></span>
+							<input type="hidden" name="brandList"/>
 						</td>
 						<th>상품코드<em class="required" title="필수"></em></th>
 						<td>
@@ -220,6 +226,10 @@
 		//$("#goodsPriceHstForm input[type=radio]").parent("label").removeClass("checked");
 		$("#goodsPriceHstForm input[type=checkbox]").parent("label").removeClass("checked");
 		$("#goodsPriceHstForm input[type=radio][checked]").parent("label").addClass("checked");
+		$('#goodsPriceHstForm input[name=brandList]').val('');
+		$('#goodsPriceHstForm input[name=supplyCompList]').val('');
+		$('#goodsPriceHstForm').find('#brandText').html('');
+		$('#goodsPriceHstForm').find('#supplyCompText').html('');
 	}
 	
 	// 조회클릭시
@@ -253,10 +263,10 @@
 		var searchFlag = false;
 		var cnt = 0;
 
-		 if( !gagajf.isNull($("#goodsPriceHstForm select[name=supplyCompCd]").val())
+		 if( !gagajf.isNull($("#goodsPriceHstForm input[name=supplyCompList]").val())
 				|| !gagajf.isNull($("#goodsPriceHstForm input[name=goodsCd]").val())
 				|| (!gagajf.isNull($("#goodsPriceHstForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsPriceHstForm input[name=edDate]").val()))
-				|| !gagajf.isNull($("#goodsPriceHstForm input[name=searchBrandCd]").val())
+				|| !gagajf.isNull($("#goodsPriceHstForm input[name=brandList]").val())
 			){
 			searchFlag = true;
 		}else{ 
@@ -283,7 +293,7 @@
 	}
 	
 	//업체변경시
-	$('#goodsPriceHstForm select[name=supplyCompCd]').on('change', function() {
+/* 	$('#goodsPriceHstForm select[name=supplyCompCd]').on('change', function() {
 		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
 
 		if(sessRoleCd == "G001_A1001"){
@@ -293,10 +303,10 @@
 
 		cfnCreateCombo(actionUrl, $('#goodsPriceHstForm select[name=brandCd]'), "[전체]", "");
 		
-	});
+	}); */
 	
 	//브랜드 변경시
-	$('#goodsPriceHstForm select[name=brandCd]').on('change', function() {
+/* 	$('#goodsPriceHstForm select[name=brandCd]').on('change', function() {
 		
 		var supplyCompCd = $('#goodsPriceHstForm select[name=supplyCompCd]').val();
 		var brandCd = $('#goodsPriceHstForm select[name=brandCd]').val();
@@ -306,8 +316,65 @@
 			cfnCreateCombo(url, $('#goodsPriceHstForm select[name=sellStoreCd]'), "[전체]", "");	
 		}
 		
+	});
+	 */
+	// 업체 조회 선택시
+	$('#btnSearchSupplyComp').on('click', function() {
+		cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');
+	});
+	
+	// 업체 조회 팝업에서 호출
+	var fnSetSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompText = "";
+		var sIndex = 0;
+		$('#goodsPriceHstForm').find('#supplyCompText').html('');
+		$('#goodsPriceHstForm input[name=supplyCompSearchTxt]').val('');
+		result.forEach(function(supplyComp){
+			sIndex++; 
+			arrSupplyComp.push(supplyComp.supplyCompCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#goodsPriceHstForm input[name=supplyCompSearchTxt]').val(arrSupplyComp[0]);
+		}else{
+			supplyCompText = sIndex + " 개";
+			$('#goodsPriceHstForm').find('#supplyCompText').html(supplyCompText);	
+		}
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#goodsPriceHstForm input[name=supplyCompList]").val(jsonData);
+	}
+	
+	// 브랜드 조회 선택시
+	$('#btnSearchBrand').on('click', function() {
+		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
 	});
 	
+	// 브랜드 조회 팝업에서 호출
+	var fnSetBrandInfo = function(result) {
+		var arrbrandCd = [];
+		var brandText = "";
+		var bIndex = 0;
+		$('#goodsPriceHstForm').find('#brandText').html('');
+		$('#goodsPriceHstForm input[name=searchTxt]').val('');
+		result.forEach(function(brand){
+			bIndex++; 
+			arrbrandCd.push(brand.brandCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (bIndex == 1) {
+			$('#goodsPriceHstForm input[name=searchTxt]').val(arrbrandCd[0]);
+		}else{
+			brandText = bIndex + " 개";
+			$('#goodsPriceHstForm').find('#brandText').html(brandText);	
+		}
+		var jsonData = JSON.stringify(arrbrandCd);
+		$("#goodsPriceHstForm input[name=brandList]").val(jsonData);
+	}
+	
+	
 	// 승인 클릭 시
 	$('#btnSaveGoodsPriceConfirm').on('click', function() {
 		
@@ -355,23 +422,6 @@
 		fnGoodsPriceHstListSearch('N');
 	}
 	
-	// 브랜드 조회 팝업에서 호출
-	var fnSetBrandInfo = function(result) {
-		$("#goodsPriceHstForm input[name=searchBrandCd]").val(result[0].brandCd);
-	}
-	
-	// 브랜드 조회 선택시
-	$('#btnSearchBrand').on('click', function() {
-
-		if (gagajf.isNull($("#goodsPriceHstForm input[name=searchTxt]").val())){
-			mcxDialog.alert('브랜드 검색어를 입력하세요.');
-			return false;
-		}
-		
-		cfnOpenBrandListPopup('fnSetBrandInfo', $("#goodsPriceHstForm input[name=searchTxt]").val());
-		
-	});
-	
 	$(document).ready(function() {
 		
 		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일', 'X');

+ 523 - 0
src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html

@@ -0,0 +1,523 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PlanCornerListForm.html
+ * @desc    : 기획전 코너 관리 화면 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2019.12.30   rladbwnd5   최초 작성
+ *******************************************************************************
+ -->
+
+<div class="modalPopup" data-width="1200" data-height="800" id="popupPlanCorner">
+
+	<div class="panelStyle" style="height: 750px;">
+		<div class="panelTitle">
+			<strong>기획전 관리</strong>
+			<button type="button" class="close"	onclick="uifnPopupClose('popupPlanCorner')">
+				<i class="fa fa-times"></i>
+			</button>
+		</div>
+
+		<div class="panelContent">
+			<form th:object="${planInfo}" id="planCornerListForm"
+				name="planCornerListForm" action="#"
+				th:action="@{'/marketing/planning/corner/list'}" th:method="post">
+				<input type="hidden" th:field="*{planSq}" />
+				<table class="frmStyle" style="margin-bottom: 10px;">
+					<colgroup>
+						<col style="width: 10%;" />
+						<col style="width: 10%;" />
+						<col style="width: 10%;" />
+						<col style="width: 20%;" />
+						<col style="width: 10%;" />
+						<col style="width: 15%;" />
+						<col style="width: 10%;" />
+						<col style="width: 15%;" />
+					</colgroup>
+					<tr>
+						<th>기획전번호</th>
+						<td><label th:text="*{planSq}" id="planSq"></label></td>
+						<th>기획전명</th>
+						<td><label th:text="*{planNm}" id="planNm"></label></td>
+						<th>기획전시작일</th>
+						<td><label th:text="*{dispStdt}" id="dispStdt"></label></td>
+						<th>기획전종료일</th>
+						<td><label th:text="*{dispEddt}" id="dispEddt"></label></td>
+					</tr>
+				</table>
+
+				<div class="panelContent">
+					<ul class="panelBar">
+						<li class="boxContentBtnT" style="margin-left: -20px; margin-right: -23px;">
+							<span class="btnLeft">
+								<button type="button" class="btn btn-warning btn-sm" id="btnAddRow">행추가</button>
+								<button type="button" class="btn btn-danger btn-sm" id="btnDeleteRow">행삭제</button>
+							</span> 
+						</li>
+						<li class="right">
+							<span class="btnRight"> 
+								<button type="button" class="btn btn-default btn-lg" onclick="fnCornerCopyPopup();">코너복사</button>
+								<button type="button" class="btn btn-success btn-lg" onclick="fnPlanCornerSave();">저장</button>
+						   </span>
+					   </li>
+					</ul>
+					<div id="gridListCorner" style="width: 100%; max-height: 230px; height: 230px;" 	class="ag-theme-balham"></div>
+				</div>
+			</form>
+		</div>
+
+		<div class="panelContent">
+			<div>
+				<h4>
+					코너명 : <label id="cornerNm"></label>
+				</h4>
+				<div class="aR" style="float: right; margin-top: 10px;">
+					<button type="button" class="btn btn-Right btn-default btn-lg"onclick="fnGoodsExcelUpload();">엑셀상품추가</button>
+					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF012');">엑셀상품추가 양식 다운로드</button>
+					<button type="button" class="btn btn-default btn-lg" onclick="fnOpenGoodsPopup();">상품추가</button>
+					<!-- 상품조회 팝업 -->
+					<button type="button" class="btn btn-default btn-lg"onclick="fnDispOrdChange();">순서변경</button>
+					<!-- 전시후관리 순서변경 -->
+					<button type="button" class="btn btn-danger btn-lg"	onclick="fnDeleteGoods();">선택삭제</button>
+				</div>
+			</div>
+
+			<div id="gridListGoods"	style="width: 100%; max-height: 350px; height: 350px;" class="ag-theme-balham lh60"></div>
+		</div>
+
+	</div>
+</div>
+
+	<script th:inline="javascript">
+/*<![CDATA[*/
+
+	var planInfo = [[${planInfo}]];
+	var cornerDispTypeList = gagajf.convertToArray([[${cornerDispTypeList}]]);
+	var planDtlStatList = gagajf.convertToArray([[${planDtlStatList}]]);
+	var goodsStatList =gagajf.convertToArray([[${goodsStatList}]]);
+	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
+
+	var columnDefsCorner = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "코너번호"		, field:'planDtlSq'			, width:120, cellClass: 'text-center', editable: false },
+		{headerName: "코너명"			, field:'cornerNm'			, width:400, cellClass: 'text-left',
+			cellRenderer: function(params) {return '<a href="javascript:void(0);">' + params.value + '</a>'; },
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 50, required: true }
+		},
+		{headerName: "코너유형"		, field:'cornerDispType'		, width:180, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(cornerDispTypeList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(cornerDispTypeList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(cornerDispTypeList, params.newValue); }
+		},
+		{headerName: "전시순서"		, field:'dispOrd'				, width:100, cellClass: 'text-right',
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 3, required: true }
+		},
+		{headerName: "기획전 일련번호"	, field:'planSq'	, width:90, cellClass: 'text-left', hide: true},
+		{headerName: "시작일"			, field:'startSearchDate'	, width:110, cellClass: 'text-center',
+			cellEditor: 'datePicker',
+			cellEditorParams: { maxlength: 10, required: true },
+		},
+		{headerName: "시작시간"		, field:'startSearchTime'	, width:150, cellClass: 'text-center',
+			cellEditor: 'dateTimer',
+			cellEditorParams: { maxlength: 8, required: true },
+		},
+		{headerName: "종료일"			, field:'endSearchDate'		, width:110, cellClass: 'text-center',
+			cellEditor: 'datePicker',
+			cellEditorParams: { maxlength: 10, required: true }
+		},
+		{headerName: "종료시간"		, field:'endSearchTime'		, width:150, cellClass: 'text-center',
+			cellEditor: 'dateTimer',
+			cellEditorParams: { maxlength: 8, required: true },
+		},
+		{headerName: "등록자"			, field:'regId'				, width:120, cellClass: 'text-center', editable: false },
+		{headerName: "수정자"			, field:'updId'				, width:120, cellClass: 'text-center', editable: false }
+	];
+
+	var gridOptionsCorner = gagaAgGrid.getGridOptions(columnDefsCorner);
+	gridOptionsCorner.suppressRowClickSelection = true;
+	gridOptionsCorner.stopEditingWhenGridLosesFocus = true;
+	gridOptionsCorner.defaultColDef.editable = true;
+	gridOptionsCorner.rowSelection = 'multiple';
+
+	
+	// 코너 셀 클릭 이벤트
+	gridOptionsCorner.onCellClicked = function(event) {
+		var field = event.colDef.field;
+		if (field != 'cornerNm') return;
+
+		fnBindSearch(event.data);
+	}
+
+	// 코너 상품 조회 바인딩
+	var fnBindSearch = function(data) {
+		if (!gagajf.isNull(data.cornerNm)) {
+
+			$('#cornerNm').html(data.cornerNm);
+			_planDtlSq = data.planDtlSq;
+
+			fnConnerGoodsSearch();
+		}
+	}
+
+	// 코너 상품 조회
+	var fnConnerGoodsSearch = function() {
+		var actionUrl = '/marketing/planning/corner/goods/list';
+		var data = {planDtlSq:_planDtlSq};
+		var jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(actionUrl, jsonData, function(data) {
+			gridOptionsGoods.api.setRowData(data.planGoodsList);
+		});
+	}
+
+	// 코너 조회
+	var fnCornerSearch = function() {
+		var formId = '#planCornerListForm';
+		gagaAgGrid.fetch($(formId).prop('action'), gridOptionsCorner, formId
+						, function() {
+								$('#gridListGoods').html('');
+								$('#cornerNm').html('');
+								gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
+				});
+	}
+	// 행추가
+	$('#btnAddRow').on('click', function() {
+		var allData = gagaAgGrid.getAllRowData(gridOptionsCorner);
+		var planSq = $('#planCornerListForm input[name=planSq]').val();
+		var stdt = planInfo.dispStdt.split(" ");
+		var eddt = planInfo.dispEddt.split(" ");
+
+		if (allData.length > 0 && typeof allData[0].crud != 'undefined') {
+			mcxDialog.alert('추가 된 코너를 저장 후 코너를 추가하세요.');
+			return;
+		} else {
+			var actionUrl = '/marketing/planning/corner/plandtlsq?planSq=' + planSq;
+			$.get(actionUrl
+						, function(planDtlSq) {
+								var data = { planDtlSq: planDtlSq, planSq:planSq, cornerNm:'',cornerDispType: 4, startSearchDate: _today, startSearchTime: stdt[1], endSearchDate: eddt[0], endSearchTime: eddt[1]};
+								gagaAgGrid.addRowData(gridOptionsCorner, data, "planDtlSq");
+					});
+		}
+
+	});
+
+	// 행삭제
+	$('#btnDeleteRow').on('click', function() {
+		var selectData = gagaAgGrid.selectedRowData(gridOptionsCorner);
+
+		if (selectData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+
+		mcxDialog.confirm('선택된 코너를 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(selectData);
+
+				gagajf.ajaxJsonSubmit('/marketing/plan/corner/delete', jsonData, fnCornerSearch);
+			}
+		});
+	});
+
+	// 코너승인
+	var fnCornerConfirm = function() {
+		var selectData = gagaAgGrid.selectedRowData(gridOptionsCorner);
+		if (selectData.length < 1) {
+			mcxDialog.alert('승인 할 코너가 없습니다.');
+			return;
+		}
+
+		if (selectData.length == 1) {
+			if (gagajf.isNull(selectData[0].planDtlStat)) {
+				mcxDialog.alert('승인할 코너가 없습니다.');
+				return;
+			}
+		}
+
+		var Msg = '';
+		$(selectData).each(function(idx, data) {
+			if (data.planDtlStat == '90') {
+				Msg = '승인상태가 삭제인 코너가 존재합니다.<br/>선택한 코너를 승인 하시겠습니까?';
+			}
+			if (data.planDtlStat != '20') {
+				data.planDtlStat = '20'; // 승인
+			}
+		});
+
+		Msg = !gagajf.isNull(Msg) ? Msg : '선택 된 코너를 승인 하시겠습니까?';
+		mcxDialog.confirm(Msg, {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(selectData);
+				gagajf.ajaxJsonSubmit('/marketing/plan/corner/confirm', jsonData, fnCornerSearch);
+			}
+		});
+	}
+
+	// 코너 저장
+	var fnPlanCornerSave = function() {
+		var changeData = gagaAgGrid.getChangedData(gridOptionsCorner);
+
+		if (changeData.length < 1) {
+			mcxDialog.alert('변경 된 코너가 없습니다.');
+			return;
+		}
+
+		// Validation
+		if (!gagaAgGrid.validation(gridOptionsCorner, changeData))
+			return;
+
+		var result = true;
+		$(changeData).each(function(idx, data) {
+			var stdt = planInfo.dispStdt.split(" ");
+			var eddt = planInfo.dispEddt.split(" ");
+
+			// 날짜 유효성 체크
+			if (Number(stdt[0]) > Number(data.startSearchDate)) {
+				mcxDialog.alert('코너의 시작일이 유효하지 않습니다.');
+				result = false;
+			}
+
+			if (Number(eddt[0]) < Number(data.endSearchDate)) {
+				mcxDialog.alert('코너의 종료일이 유효하지 않습니다.');
+				result = false;
+			}
+
+			if (Number(data.startSearchDate.replaceAll("-", "")) > Number(data.endSearchDate.replaceAll("-", ""))) {
+				mcxDialog.alert('진행기간 시작일자는 종료일자보다 클 수 없습니다.');
+				result = false;
+			}
+
+			if (Number(data.startSearchDate.replaceAll("-", "")) < Number(_today.replaceAll("-", "")) && data.crud == 'C') {
+				mcxDialog.alert('시작일자는 오늘포함 이후로 등록해주세요.');
+				result = false;
+			}
+
+			if (Number(data.endSearchDate.replaceAll("-", "")) < Number(_today.replaceAll("-", "")) && data.crud == 'C') {
+				mcxDialog.alert('종료일자는 오늘포함 이후로 등록해주세요.');
+				result = false;
+			}
+
+			// 기획전 시작종료일과 코너 시작종료일 체크
+			if (stdt[0].replaceAll("-", "") > data.startSearchDate.replaceAll("-", "")) {
+				mcxDialog.alert("기획전 시작일보다 코너시작일이 작을 수 없습니다.");
+				result = false;
+			}
+
+			if (eddt[0].replaceAll("-", "") < data.endSearchDate.replaceAll("-", "")) {
+				mcxDialog.alert("기획전 종료일보다 코너종료일이 클 수 없습니다.");
+				result = false;
+			}
+
+			if (result) {
+				data.dispStdt = data.startSearchDate + ' ' + data.startSearchTime;
+				data.dispEddt = data.endSearchDate + ' ' + data.endSearchTime;
+			}
+		});
+
+		if (!result) return;
+
+		mcxDialog.confirm('저장 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(changeData);
+				gagajf.ajaxJsonSubmit('/marketing/plan/corner/save', jsonData, fnCornerSearch);
+			}
+		});
+	}
+
+	var fnCornerCopyPopup = function() {
+		var actionUrl = '/marketing/plan/corner/copy/list/form?planSq=' + planInfo.planSq;
+		actionUrl += '&copyMode=CORNER';
+		cfnOpenModalPopup(actionUrl,'popupCornerCopy');
+	}
+	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
+	var columnDefsGoods = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "상품코드"	, field:'goodsCd'		, width:150, cellClass: 'text-left'
+			, cellRenderer: function(params) {return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "상품명"		, field:'goodsNm'		, width:300, cellClass: 'text-left'},
+		{headerName: "이미지"		, field:'imgPath6'		, width:100 , height:60, cellClass: 'text-right'
+			, cellRenderer: function(params) {
+				var imgPath = '';
+				if (params.data.imgType == "A"){
+					imgPath = uploadGoodsUrl;
+				}
+				if(typeof params.value!='undefined' && params.value!='' && params.value!=null){
+					imgPath = imgPath + params.value;
+				}else{
+					imgPath = imgPath + params.data.imgPath1;
+				}
+				return '<img width="60" src="'+imgPath.replace('1000', '100')+'" onerror="this.src=\''+_uximgUrl+'/image/no.gif\';">';
+			}
+		},
+		{headerName: "전시순서"	, field:'dispOrd'		, width:80 , cellClass: 'text-center'
+			, editable : true, cellEditor: 'numericCellEditor'
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "재고"		, field:'currStockQty'			, width:80 , cellClass: 'text-center'
+			, cellRenderer: function(params) {return !gagajf.isNull(params.value) ? params.value : '0'; }
+		},
+		{headerName: "할인율(%)"		, field:'dcRate'		, width:80 , cellClass: 'text-center'},
+		{headerName: "TAG가"		, field:'tagPrice'		, width:100, cellClass: 'text-right'
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "정상가"		, field:'listPrice'		, width:100, cellClass: 'text-right' , hide : true
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "판매가"		, field:'currPrice'		, width:100, cellClass: 'text-right'
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "정상/이월여부", field:'formalGb'		, width:120, cellClass: 'text-center'},
+		{headerName: "상품상태"	, field:'goodsStat'		, width:100, cellClass: 'text-center'
+			, valueFormatter: function(params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); }
+		},
+		{headerName: "업체"		, field:'supplyCompNm'	, width:150, cellClass: 'text-left'},
+		{headerName: "기획전상세"	, field:'planDtlSq'		, width:200, cellClass: 'text-left', hide: true},
+		{headerName: "등록일"		, field:'regDt'			, width:100,  cellClass: 'text-left'
+			, cellRenderer: function(params) { return !gagajf.isNull(params.value) ? params.value.toDate("YYYY-MM-DD HH:MM:SS").format("YYYY-MM-DD") : ''; }
+		},
+	];
+
+	var gridOptionsGoods = gagaAgGrid.getGridOptions(columnDefsGoods);
+	gridOptionsGoods.rowSelection = 'multiple';
+	gridOptionsGoods.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+	gridOptionsGoods.suppressRowClickSelection = true;
+
+	gridOptionsGoods.onCellClicked = function(event) {
+		if (event.colDef.field == 'goodsCd') {
+			// 상품 상세 팝업
+			cfnOpenGoodsDetailPopup('U',event.data.goodsCd);
+		}
+
+// 		if (event.colDef.field == 'imgPath1') {
+// 			// 이미지 팝업
+// 			cfnOpenImagePreViewPopup('planGoodsDetail', event.data.imgPath1);
+// 		}
+	}
+
+	// 상품 선택삭제
+	var fnDeleteGoods = function() {
+		var removedData = gagaAgGrid.removeRowData(gridOptionsGoods);
+// 		var data = new Object();
+		_planDtlSq = removedData[0].planDtlSq;
+
+		if (removedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+
+		mcxDialog.confirm('선택된 상품을 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(removedData);
+
+				gagajf.ajaxJsonSubmit('/marketing/plan/corner/goods/delete', jsonData, function() {
+					fnCornerSearch();
+//	 				fnCornerGoodsSearch(data);
+				});
+			}
+		});
+	}
+
+	// 기획전 상세일련번호 전역 변수
+	var _planDtlSq = '';
+
+	// 엑셀상품추가
+	var fnGoodsExcelUpload = function() {
+		cfnExcelUploadPopup('createGoods', 'fnCreatePlanGoodsExcel');
+	}
+
+	var fnCreatePlanGoodsExcel = function(result) {
+		var data = {planSq : planInfo.planSq
+					,excelFileNm : result.excelFileNm
+					};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/marketing/plan/corner/goods/excelupload', jsonData, fnCornerSearch);
+	}
+
+	var fnOpenGoodsPopup = function() {
+		if (gagaAgGrid.getAllRowData(gridOptionsCorner).length < 1 ) {
+			mcxDialog.alert('기획전 코너가 존재 하지 않습니다.');
+			return;
+		}
+		cfnOpenGoodsPopup('fnCreateGoods');
+	}
+
+	// 상품추가
+	var fnCreateGoods = function(result) {
+		if (result.length < 1) return;
+
+		// 기존상품
+		var oldGoodsList = gagaAgGrid.getAllRowData(gridOptionsGoods);
+
+		// 중복체크
+		var check = true;
+		var checkData = [];
+		$(oldGoodsList).each(function(idx) {
+
+			$(result).each(function(newIdx) {
+
+				if (oldGoodsList[idx].goodsCd == result[newIdx].goodsCd) {
+					check = false;
+					checkData.push(result[newIdx].goodsCd);
+				}
+			});
+		});
+
+		if (!check) {
+			mcxDialog.alert('아래 중복상품이 존재 합니다.<br/>' + checkData.join(","));
+			return;
+
+		} else {
+			for (var disp = 0; disp < result.length; disp++) {
+				var goods = { planDtlSq : _planDtlSq ,
+							  goodsCd : result[disp].goodsCd };
+				oldGoodsList.unshift(goods);
+			}
+		}
+
+		mcxDialog.confirm('선택하신 상품을 추가 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(oldGoodsList);
+				gagajf.ajaxJsonSubmit('/marketing/plan/corner/goods/save', jsonData, fnCornerSearch);
+			}
+		});
+	}
+
+	// 순셔 변경 팝업
+	var fnDispOrdChange = function(result) {
+		var selectData = gagaAgGrid.selectedRowData(gridOptionsCorner);
+		var params = 'planDtlSq='+ _planDtlSq;
+
+		cfnOpenGoodsDispOrdChangePopup('fnConnerGoodsSearch', params);
+	}
+	
+	$(document).ready(function() {
+		gagaAgGrid.createGrid('gridListCorner', gridOptionsCorner);
+		gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
+
+		//fnCornerSearch();
+	});
+
+
+/*]]>*/
+</script>
+</html>

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

@@ -236,7 +236,7 @@
 	var fnPlanWebRegisterPopup = function() {
 		var actionUrl = "/marketing/planning/webdetail/form?mode=N";
 		cfnOpenModalPopup(actionUrl,'popupPlanWebDetail');
-	}
+	} 
 
 	// 웹 수정 팝업
 	var fnEventWebDetailPopup = function(planSq) {
@@ -257,6 +257,7 @@
  		//document.location.href = _PAGE_CUSTOMER_INFO;
 	}
 
+		
 	// 초기화 클릭시
 	$('#btnInit').on('click', function() {
 		fnInit();
@@ -271,6 +272,12 @@
 		$("#planListSearchForm input[name=pageNo]").val('1');
 		fnPlanListSearch();
 	});
+	
+	// 이벤트 코너 관리 팝업
+	var fnEventCornerPopup = function(planSq) {
+		var actionUrl = "/marketing/planning/corner/list/form?planSq=" + planSq;
+		cfnOpenModalPopup(actionUrl, 'popupCorner');
+	}
 
 	// 조회
 	var fnPlanListSearch = function() {

+ 89 - 57
src/main/webapp/WEB-INF/views/marketing/PlanPopupForm.html

@@ -14,7 +14,7 @@
  *******************************************************************************
  -->
 
-<div class="modalPopup" data-width="1200">
+<div class="modalPopup" data-width="1200" id="popupPlan">
 
 	<div class="panelStyle" style="height: 750px;">
 		<div class="panelTitle">
@@ -27,7 +27,7 @@
 
 		<div class="panelContent">
 			<form id="popupPlanSearchForm" name="popupPlanSearchForm" action="#"
-				th:action="@{'/marketing/planning/list'}"
+				th:action="@{'/marketing/planning/listPop'}"
 				onsubmit="$('#btnPlanPopupSearch').trigger('click'); return false;">
 				<table class="frmStyle">
 					<colgroup>
@@ -44,11 +44,11 @@
 					<tbody>
 						<tr>
 							<th>사이트</th>
-						<!-- 	<td><label th:if="${siteList}"
+						 	<td><label th:if="${siteList}"
 								th:each="oneData, status : ${siteList}"> <input
 									type="checkbox" name="siteCds" th:value="${oneData.cd}"
 									th:text="${oneData.cdNm}" />
-							</label></td> -->
+							</label></td>
 
 							<th>기획전명</th>
 							<td><input type="text" name="planNm" id="planNm" /></td>
@@ -72,46 +72,47 @@
 									<option value="P">기획전</option>
 									<option value="E">이벤트</option>
 							</select></td>
+							
+							<th>오픈여부</th>
+							<td><select name="openYn">
+									<option value="">전체</option>
+									<option th:if="${useYnList}"
+										th:each="oneData, status : ${useYnList}"
+										th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select></td>
 
-							<th>기획전템플릿유형</th>
+							<!-- <th>기획전템플릿유형</th>
 							<td colspan="3"><select name="templateType">
 									<option value="">전체</option>
 									<option value="H">HTML</option>
 									<option value="T">TEXT</option>
-							</select></td>
+							</select></td> -->
 						</tr>
 
 						<tr>
 							<th>진행기간</th>
 							<td colspan="3" id="popupPlanTerms"></td>
 
-							<th>오픈여부</th>
-							<!-- <td><select name="openYn">
-									<option value="">전체</option>
-									<option th:if="${useYnList}"
-										th:each="oneData, status : ${useYnList}"
-										th:value="${oneData.cd}"
-										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select></td> -->
+							
 
-							<th class="dashR">등록자</th>
-							<td class="dashR"><input type="text" name="regId" id="regId" />
+							<th>등록자</th>
+							<td><input type="text" name="regId" id="regId" />
 							</td>
 						</tr>
 					</tbody>
 				</table>
 				<ul class="panelBar">
-					<li class="center"><input type="button" value="초기화"
-						class="btn btn-gray btn-lg" id="btnReset" onclick="fnReset();" />
-						<input type="button" value="조회" class="btn btn-base btn-lg"
-						id="btnPlanPopupSearch" /></li>
+					<li class="center">
+						<input type="button" value="초기화" class="btn btn-gray btn-lg" id="btnInitPop"/>
+						<input type="button" value="조회" class="btn btn-base btn-lg"	 id="btnPlanPopupSearch" />
+					</li>
 				</ul>
 			</form>
 		</div>
 		<!-- 리스트 영역 -->
 		<div class="panelContent">
-			<div id="gridPlanList" style="width: 100%; height: 470px"
-				class="ag-theme-balham"></div>
+			<div id="gridListPop" style="width: 100%; height: 400px;" class="ag-theme-balham"></div>
 		</div>
 		<!-- //리스트 영역 -->
 
@@ -119,52 +120,56 @@
 		<ul class="panelBar">
 			<li class="right">
 				<button type="button" class="btn btn-info btn-lg"
-					id="btnConfirmPlan">확인</button>
+					id="btnPlanPopupApply">적용</button>
 			</li>
 		</ul>
 
 	</div>
 </div>
-<!-- <script th:inline="javascript">
+<script th:inline="javascript">
 /*<![CDATA[*/
 
-	var siteList = cfnConvertToArray([[${siteList}]]);
+	var siteCdList = gagajf.convertToArray([[${siteList}]]);
 	var wmGbList = {"A":"ALL", "P":"웹", "M":"모바일"};
 	var templateTypeList = {"H":"HTML", "T":"TEXT"};
 	var planGbList = {"P":"기획전", "E":"이벤트"};
+	var planList = ([[${planList}]]);
+	
+	// 초기화 클릭시
+	$('#btnInitPop').on('click', function() {
+		fnInit();
+	});
+	
+	var fnInit = function(){
+		$('#popupPlanSearchForm')[0].reset();
+	}
 
-	var columnDefsPopupPlan = [
-// 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-// 		{headerName: "미리보기"		, field:'plan'		, width:100, cellClass: 'text-center',
-// 			cellRenderer: function(params) { return '<a href="javascript:void(0);" onclick="fnPreview(\'' + params.data.planSq + '\');">' + '미리보기' + '</a>'; }
-// 		},
-		{headerName: "기획전번호"		, field:'planSq'	, width:100, cellClass: 'text-center',
-// 			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
-		},
+	var columnDefs = [
+ 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+ 		{headerName: "미리보기"		, field:'plan'		, width:100, cellClass: 'text-center',
+ 			cellRenderer: function(params) { return '<a href="javascript:void(0);" onclick="fnPreview(\'' + params.data.planSq + '\');">' + '미리보기' + '</a>'; }
+ 		},
+ 		{headerName: "기획전번호"		, field:'planSq'	, width:100, cellClass: 'text-center'},
+ 		{headerName: "기획전명"		, field:'planNm'	, width:300, cellClass: 'text-left'},
+ 		{headerName: "서브제목"		, field:'dtlTitle1'	, width:300 , cellClass: 'text-center'},
 		{headerName: "사이트"			, field:'siteCd'	, width:100, cellClass: 'text-center',
-			 valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
+ 			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(siteCdList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteCdList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(siteCdList, params.newValue); }
 		},
-		{headerName: "기획전명"		, field:'planNm'	, width:300, cellClass: 'text-left',
-// 			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
-		},
-		{headerName: "기획전구분"		, field:'planGb'	, width:100, cellClass: 'text-center',
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(planGbList, params.value); }
-		},
-		{headerName: "기획전템플릿유형"	, field:'templateType'	, width:100, cellClass: 'text-center',
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(templateTypeList, params.value); }
-		},
-		{headerName: "전시순서"		, field:'dispOrd'	, width:100, cellClass: 'text-right' },
+		{headerName: "기획전구분"		, field:'planGb'	, width:100, cellClass: 'text-center'},
+		{headerName: "기획전템플릿유형"	, field:'templateType'	, width:100, cellClass: 'text-center'},
+		/* {headerName: "전시순서"		, field:'dispOrd'	, width:100, cellClass: 'text-right' }, */
 		{headerName: "진행시작일시"		, field:'dispStdt'	, width:150, cellClass: 'text-center'},
 		{headerName: "진행종료일시"		, field:'dispEddt'	, width:150, cellClass: 'text-center'},
-		{headerName: "프론트구분"	, field:'frontGb'	, width:120, cellClass: 'text-center',
-			 valueFormatter: function (params) { return gagaAgGrid.lookupValue(wmGbList, params.value); }
-		},
+		{headerName: "프론트구분"	, field:'frontGb'	, width:120, cellClass: 'text-center'	},
 		{headerName: "오픈여부"		, field:'openYn'	, width:80 , cellClass: 'text-center'},
-		{headerName: "등록자"			, field:'regId'		, width:100, cellClass: 'text-center'},
+		{headerName: "등록자"			, field:'regNm'		, width:100, cellClass: 'text-center'},
 		{headerName: "등록일"			, field:'regDt'		, width:150, cellClass: 'text-center'},
 	];
 
-	var gridOptionsPopupPlan = gagaAgGrid.getGridOptions(columnDefsPopupPlan);
+	var gridOptionsPopupPlan = gagaAgGrid.getGridOptions(columnDefs);
 	gridOptionsPopupPlan.rowSelection = 'single';
 	
 	// 셀 클릭 이벤트
@@ -175,15 +180,21 @@
 		
 	}
 	
+	// 미리보기
+	var fnPreview = function(planSq) {
+		var _wmall = [[${@environment.getProperty('domain.pastel')}]];
+		window.open(_wmall + '/planning/detail/form?planSq=' + planSq + '&adminPreview=Y', '_blank');
+ 		//document.location.href = _PAGE_CUSTOMER_INFO;
+	}
+	
 	// 조회 버튼 클릭 시
 	$('#btnPlanPopupSearch').on('click', function() {
 		var formId = '#popupPlanSearchForm';
 		gagaAgGrid.fetch($(formId).prop('action'), gridOptionsPopupPlan, formId);
 	});
-	
+		
 	// 적용 버튼 클릭 시
 	$('#btnPlanPopupApply').on('click', function() {
-		var callback = [[${params.callBackFun}]];
 		
 		var selectedData = gagaAgGrid.selectedRowData(gridOptionsPopupPlan);
 		
@@ -192,6 +203,8 @@
 			return
 		}
 		
+		var callback = [[${params.callBackFun}]];
+		
 		var jsonData = JSON.stringify(selectedData);
 
 		if ( typeof callback != 'undefined' && callback) {
@@ -205,20 +218,39 @@
 				}
 			}
 			
-			uifnPopClose('popupPlan'); //20191105
+			uifnPopupClose('popupPlan');
 		}
 	});
 	
 	$(document).ready(function() {
+		gagaAgGrid.createGrid('gridListPop', gridOptionsPopupPlan);
 		cfnCreateCalendar('#popupPlanTerms', 'popupDispStdt', 'popupDispEddt', false);
 		gagajf.setDate('popupDispStdt', 'popupDispEddt', '7d');
-		
-		gagaAgGrid.createGrid('gridListPopupPlan', gridOptionsPopupPlan);
-
-		uifnFitGrid('auto');
 	});
 	
+	
+	// 기획전 리스트 팝업============================================================================
+	/* var fnPlanSearch = function(sub){
+		if (sub == "View"){
+			cfnOpenPlanPopup('fnSetPlanSqView');
+		}else{
+			cfnOpenPlanPopup('fnSetPlanSq');
+		}
+	}
+
+	// 팝업 등록 기획전
+	var fnSetPlanSq = function(result) {
+		$('#planListSearchForm input[name=planSq]').val(result[0].planSq);
+	}
+
+	//미리보기 기획전
+	var fnSetPlanSqView = function(result) {
+		$('#planSqView').val(result[0].planSq);
+	}
+ */
+	
+	//=========================================================================================
 /*]]>*/
-</script> -->
+</script>
 
 </html>

+ 131 - 295
src/main/webapp/WEB-INF/views/marketing/PlanWebDetailPopupForm.html

@@ -37,53 +37,38 @@
 						<col/>
 					</colgroup>
 					<tr>
-						<th class="dashR">기획전구분<i class="star"></i></th>
-						<td class="dashR">
+						<th>기획전구분<i class="star"></i></th>
+						<td>
 							<select name="planGb" id="planGb" th:field="*{planGb}" onchange="fnChangePlanGb(this);">
 								<option value="P">기획전</option>
 								<option value="E">이벤트</option>
 							</select>
 						</td>
-						<th class="dashR">기획전탬플릿유형<i class="star"></i></th>
-						<td class="dashR" colspan="3">
+						<th>기획전탬플릿유형<i class="star"></i></th>
+						<td colspan="3">
 							<select name="templateType" th:field="*{templateType}">
 								<option value="H">HTML</option>
 								<option value="T">TEXT</option>
 							</select>
 						</td>
 					</tr>
-					<!-- <tr>
-						<th class="dashR">회원구분<i class="star"></i></th>
-						<td class="dashR">
-							<select name="custGb" required="required" data-valid-name="회원구분" th:field="*{custGb}">
-								<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th class="dashR">회원등급<i class="star"></i></th>
-						<td class="dashR" colspan="3">
-							<select name="custGrade" required="required" data-valid-name="회원등급" th:field="*{custGrade}">
-								<option value="0">전체</option>
-								<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td>
-					</tr> -->
 					<tr>
-						<th class="dashR">프론트 구분<i class="star"></i></th>
-						<td class="dashR">
+						<th>프론트 구분<i class="star"></i></th>
+						<td>
 							<select name="frontGb" id="frontGb" th:field="*{frontGb}">
 								<option value="A">전체</option>
 								<option value="P">웹</option>
 								<option value="M">모바일</option>
 							</select>
 						</td>
-						<th class="dashR">기획전명<i class="star"></i></th>
-						<td class="dashR" colspan="3">
+						<th>기획전명<i class="star"></i></th>
+						<td colspan="3">
 							<input type="text" name="planNm" id="planNm" th:field="*{planNm}"/>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">진행기간<i class="star"></i></th>
-						<td class="dashR">
+						<th>진행기간<i class="star"></i></th>
+						<td>
 							<input type="text" class="schDate w100" name="startSearchDate" maxlength="10" required="required" data-valid-name="노출기간" th:field="*{startSearchDate}"/>
 							<select name="startSearchHour" required="required" data-valid-name="진행기간 시작시간">
 								<th:block th:each="num, index  : ${#numbers.sequence(0,23)}">
@@ -110,81 +95,75 @@
 							<input type="hidden" name="dispStdt" id="dispStdt"/>
 							<input type="hidden" name="dispEddt" id="dispEddt"/>
 						</td>
-						<th class="dashR">서브제목</th>
-						<td class="dashR" colspan="3">
+						<th>서브제목</th>
+						<td colspan="3">
 							<input type="text" name="dtlTitle1" id="dtlTitle1" th:value="*{dtlTitle1}"/>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">코너명노출 여부<i class="star"></i></th>
-						<td class="dashR">
+						<th>코너명노출 여부<i class="star"></i></th>
+						<td>
 							<select name="cornerNmDispYn" th:field="*{cornerNmDispYn}">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
-						<th class="dashR">오픈여부<i class="star"></i></th>
-						<td class="dashR">
+						<th>오픈여부<i class="star"></i></th>
+						<td>
 							<select name="openYn" th:field="*{openYn}">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">사이트<i class="star"></i></th>
-						<td class="dashR">
+						<th>사이트<i class="star"></i></th>
+						<td>
 							<select name="siteCd" th:field="*{siteCd}">
 								<option value="">선택</option>
 								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
-						<th class="dashR">전시순서</th>
-						<td class="dashR">
+						<th>전시순서</th>
+						<td>
 							<input type="text" name="dispOrd" class="w100 aR" th:value="*{dispOrd}"/>
 						</td>
-						<!-- <th class="dashR">삭제여부<i class="star"></i></th>
-						<td class="dashR">
-							<select name="delYn" th:field="*{delYn}" required="required" data-valid-name="삭제여부">
-								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'N'" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td> -->
 					</tr>
 					<tr>
-						<th class="dashR">사용고객등급구분<em class="required" title="필수"></em></th>
-						<td class="dashR">
+						<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}"/>
 							</label>
 						</td>
-						<th class="dashR">댓글여부</th>
-						<td class="dashR">
+						<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}"/>
+							</label>
+  						</td>
+					</tr>
+					<tr>
+						<th>제휴채널<em class="required" title="필수"></em></th>
+						<td>
+							<label class="chkBox" th:if="${upperAfLinkCdList}" th:each="oneData, status : ${upperAfLinkCdList}">
+								<input type="checkbox" name="upperAfLinkCdArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+							</label>
+  						</td>
+						<th>댓글여부</th>
+						<td>
 							<select name="replyYn" th:field="*{replyYn}">
 								<option value="">선택</option>
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 					</tr>
-					<!-- <tr>
-						<th class="dashR">뱃지 타이틀</th>
-						<td class="dashR" colspan="3">
-							<input type="text" name="badgeNm" th:value="*{badgeNm}"/>
-						</td>
-						<th class="dashR">뱃지 배경색상</th>
-						<td class="dashR">
-							<input type="text" name="badgeBcolor" th:value="*{badgeBcolor}"/>
-						</td>
-						<th class="dashR">뱃지 글자색상</th>
-						<td class="dashR" colspan="3">
-							<input type="text" name="badgeFcolor" th:value="*{badgeFcolor}"/>
-						</td>
-					</tr> -->
 					<tr>
-						<th class="dashR">PC 메인 이미지<i id="pMimgStar"></i><br/>[삭제여부<label class="chkBox"><input type="checkbox" name="orgMainPimgDelYn" value="Y"/></label>]</th>
-						<td class="dashR">
+						<th>PC 메인 이미지<i id="pMimgStar"></i><br/>[삭제여부<label class="chkBox"><input type="checkbox" name="orgMainPimgDelYn" value="Y"/></label>]</th>
+						<td>
 							<div th:if=*{mainPimg} id="mainPimgView" style="float:left;">
 								<img id="PreMainPimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/planning/'} + *{mainPimg}" style="max-width:720px;"/>
 							</div>
 						</td>
-						<td class="dashR" colspan="4">
+						<td colspan="4">
 							<div class="uFile w400">
 								<input id="registerMainPimg" name="registerMainPimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainPimg" class="uFileLabel w400">파일선택</label>
@@ -194,13 +173,13 @@
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일 메인 이미지<i id="mMimgStar"></i><br/>[삭제여부<label class="chkBox"><input type="checkbox" name="orgMainMimgDelYn" value="Y"/></label>]</th>
-						<td class="dashR">
+						<th>모바일 메인 이미지<i id="mMimgStar"></i><br/>[삭제여부<label class="chkBox"><input type="checkbox" name="orgMainMimgDelYn" value="Y"/></label>]</th>
+						<td>
 							<div th:if=*{mainMimg} id="imgFileView" style="float:left;">
 								<img id="PreMainMimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/planning/'} + *{mainMimg}" style="max-width:720px;"/>
 							</div>
 						</td>
-						<td class="dashR" colspan="4">
+						<td colspan="4">
 							<div class="uFile w400">
 								<input id="registerMainMimg" name="registerMainMimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainMimg" class="uFileLabel w400">파일선택</label>
@@ -209,105 +188,26 @@
 							</div>
 						</td>
 					</tr>
-					<!-- <tr>
-						<th class="dashR">웹 상세 이미지<br/>[삭제여부<label><input type="checkbox" name="orgDtlPimgDelYn" value="Y"/></label>]</th>
-						<td class="dashR">
-							<div th:if=*{dtlPimg} id="DtlPimgView" style="float:left;">
-								<img id="PreDtlPimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{dtlPimg}" style="width:100%;"/>
-							</div>
-						</td>
-						<td class="dashR" colspan="4">
-							<div class="uFile w400">
-								<input id="registerDtlPimg" name="registerDtlPimg" type="file" accept="image/*" class="uFileInput w400"/>
-								<label for="registerDtlPimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="orgDtlPimg" id="orgDtlPimg" th:value="*{dtlPimg}"/>
-								<input type="hidden" name="dtlPimg" id="dtlPimg"/>
-							</div>
-						</td>
-					</tr>
-					<tr>
-						<th class="dashR">모바일 상세 이미지<br/>[삭제여부<label><input type="checkbox" name="orgDtlMimgDelYn" value="Y"/></label>]</th>
-						<td class="dashR">
-							<div th:if=*{dtlMimg} id="DtlMimgView" style="float:left;">
-								<img id="PredtlMimgUrl" th:src="${@environment.getProperty('upload.image.view') + '/plan/'} + *{dtlMimg}" style="width:100%;"/>
-							</div>
-						</td>
-						<td class="dashR" colspan="4">
-							<div class="uFile w400">
-								<input id="registerDtlMimg" name="registerDtlMimg" type="file" accept="image/*" class="uFileInput w400"/>
-								<label for="registerDtlMimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="orgDtlMimg" id="orgDtlMimg" th:value="*{dtlMimg}"/>
-								<input type="hidden" name="dtlMimg" id="dtlMimg"/>
-							</div>
-						</td>
-					</tr> -->
 				</tbody>
-				<!-- <tbody id="questionEventUpdate">
-					<tr>
-						<th class="dashR">개인정보 수집동의</th>
-						<td class="dashR">
-							<div style="margin-top:5px;">
-								<textarea name="privacyPolicy" id="privacyPolicyDetail" style="width:720px;">[[*{privacyPolicy}]]</textarea>
-							</div>
-						</td>
-						<th class="dashR">입력항목<div><button type="button" class="btn btn-primary btn-lg" th:onclick="'cfnOpenPlanAnswerPopup('+*{planSq}+');'">참여자</button></div></th>
-						<td class="dashR">
-							<th:bock th:if="${planQuestionList != null and !planQuestionList.empty}" th:each="oneData, status : ${planQuestionList}">
-								<div>
-									<input type="text" class="w200" name="planQtitle" th:value="${oneData.planQtitle}"/>
-									<label class="chkBox"><input type="checkbox" th:checked="${oneData.attachYn}=='Y'" onclick="fnAttachYnClick(this);" />첨부파일</label>
-									<th:block th:if="${status.first}">
-										<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
-									</th:block>
-									<th:block th:unless="${status.first}">
-										<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>
-									</th:block>
-									<input type="hidden" name="attachYn" th:value="${oneData.attachYn}"/>
-								</div>
-							</th:bock>
-							<th:block th:unless="${planQuestionList != null and !planQuestionList.empty}">
-								<div>
-									<input type="text" class="w200" name="planQtitle" />
-									<label><input type="checkbox" onclick="fnAttachYnClick(this);" />첨부파일</label>
-									<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
-									<input type="hidden" name="attachYn" th:value="N"/>
-								</div>
-							</th:block>
-						</td>
-					</tr>
-				</tbody> -->
 				<tbody>
 					<!-- <tr>
-						<th class="dashR">댓글여부</th>
-						<td class="dashR" colspan="5">
-							<select name="replyYn" th:field="*{replyYn}">
-								<option value="">선택</option>
-								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th class="dashR">DEV URL</th>
-						<td class="dashR" colspan="4">
-							<input type="text" name="devUrl" id="devUrl" th:value="*{devUrl}"/>
-						</td>
-					</tr> -->
-					<tr>
-						<th class="dashR">웹용소스</th>
-						<td class="dashR" colspan="5">
+						<th>웹용소스</th>
+						<td colspan="5">
 							<div style="margin-top:5px;">
 								<textarea name="fsrcPc" id="fsrcPcDetail" rows="15" cols="95" style="width:1280px;"></textarea>
 							</div>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일용소스</th>
-						<td class="dashR" colspan="5">
+						<th>모바일용소스</th>
+						<td colspan="5">
 							<div style="margin-top:5px;">
 								<textarea name="fsrcMobile" id="fsrcMobileDetail" rows="15" cols="95" style="width:1280px;"></textarea>
 							</div>
 						</td>
-					</tr>
+					</tr> -->
 				</table>
-									<div class="panelStyle" style="margin: unset;">
+				<div class="panelStyle" style="margin: unset;">
 						<!-- TITLE -->
 						<div class="panelTitle">
 							<h2>카테고리 / 브랜드 등록</h2>
@@ -334,12 +234,12 @@
 													<span class="buttonSpan">
 														<button type="button"
 															class="btn btnRight btn-success btn-lg"
-															id="btnAddCorner">업체 추가</button>
+															id="btnAddCate">카테고리 추가</button>
 														<button type="button"
 															class="btn btnRight btn-success btn-lg"
-															id="btnDeleteCorner">선택삭제</button>
+															id="btnDeleteCate">선택삭제</button>
 													</span> <br />
-													<div id="gridFGCornerList"
+													<div id="gridFGCateList"
 														style="width: 100%; height: 200px;"
 														class="ag-theme-balham"></div>
 												</div>
@@ -390,8 +290,8 @@
 						<col/>
 					</colgroup>
 					<tr>
-						<th class="dashR">기존 기획전</th>
-						<td class="dashR">
+						<th>기존 기획전</th>
+						<td>
 							<select name="planSq" id="planSq">
 								<option value="">선택</option>
 								<option th:if="${planList}" th:each="oneData, status : ${planList}" th:value="${oneData.planSq}" th:text="|[${oneData.planSq}]  ${oneData.planNm}|"></option>
@@ -411,53 +311,38 @@
 						<col/>
 					</colgroup>
 					<tr>
-						<th class="dashR">기획전구분<i class="star"></i></th>
-						<td class="dashR">
+						<th>기획전구분<i class="star"></i></th>
+						<td>
 							<select name="planGb" required="required" data-valid-name="기획전구분" onchange="fnChangePlanGb(this);">
 								<option value="P">기획전</option>
 								<option value="E">이벤트</option>
 							</select>
 						</td>
-						<th class="dashR">기획전탬플릿유형<i class="star"></i></th>
-						<td class="dashR" colspan="3">
+						<th>기획전탬플릿유형<i class="star"></i></th>
+						<td colspan="3">
 							<select name="templateType" required="required" data-valid-name="기획전탬플릿유형">
 								<option value="H">HTML</option>
 								<option value="T">TEXT</option>
 							</select>
 						</td>
 					</tr>
-				<!-- 	<tr>
-						<th class="dashR">회원구분<i class="star"></i></th>
-						<td class="dashR">
-							<select name="custGb" required="required" data-valid-name="회원구분">
-								<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td>
-						<th class="dashR">회원등급<i class="star"></i></th>
-						<td class="dashR" colspan="3">
-							<select name="custGrade" required="required" data-valid-name="회원등급">
-								<option value="0">전체</option>
-								<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
-							</select>
-						</td>
-					</tr> -->
 					<tr>
-						<th class="dashR">프론트 구분<i class="star"></i></th>
-						<td class="dashR">
+						<th>프론트 구분<i class="star"></i></th>
+						<td>
 							<select name="frontGb" id="frontGb" required="required" data-valid-name="프론트 구분">
 								<option value="A">전체</option>
 								<option value="P">웹</option>
 								<option value="M">모바일</option>
 							</select>
 						</td>
-						<th class="dashR">기획전명<i class="star"></i></th>
-						<td class="dashR" colspan="3">
+						<th>기획전명<i class="star"></i></th>
+						<td colspan="3">
 							<input type="text" name="planNm" id="planNm" maxlength="50" required="required" data-valid-name="기획전명"/>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">진행기간<i class="star"></i></th>
-						<td class="dashR">
+						<th>진행기간<i class="star"></i></th>
+						<td>
 							<input type="text" class="schDate w100" id="viewStartDtNew" name="startSearchDate" maxlength="10" required="required" data-valid-name="노출기간" />
 							<select name="startSearchHour" required="required" data-valid-name="진행기간 시작시간">
 								<th:block th:each="num, index  : ${#numbers.sequence(0,23)}">
@@ -484,78 +369,68 @@
 							<input type="hidden" name="dispStdt" id="dispStdt"/>
 							<input type="hidden" name="dispEddt" id="dispEddt"/>
 						</td>
-						<th class="dashR">서브제목</th>
-						<td class="dashR" colspan="3">
+						<th>서브제목</th>
+						<td colspan="3">
 							<input type="text" name="dtlTitle1" id="dtlTitle1"/>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">코너명노출 여부<i class="star"></i></th>
-						<td class="dashR">
+						<th>코너명노출 여부<i class="star"></i></th>
+						<td>
 							<select name="cornerNmDispYn" required="required" data-valid-name="코너명노출 여부">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
-						<th class="dashR">오픈여부<i class="star"></i></th>
-						<td class="dashR" colspan="3">
+						<th>오픈여부<i class="star"></i></th>
+						<td colspan="3">
 							<select name="openYn" required="required" data-valid-name="오픈여부">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'Y'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">사이트<i class="star"></i></th>
-						<td class="dashR">
+						<th>사이트<i class="star"></i></th>
+						<td>
 							<select name="siteCd" required="required" data-valid-name="사이트">
-								<option value="">선택</option>
 								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
-						<th class="dashR">전시순서</th>
-						<td class="dashR" colspan="3">
+						<th>전시순서</th>
+						<td colspan="3">
 							<input type="text" class="w100 aR" name="dispOrd"/>
 						</td>
 					</tr>
-					<!-- <tr>
-						<th class="dashR">뱃지 타이틀</th>
-						<td class="dashR">
-							<input type="text" class="w500" name="badgeNm"/>
-						</td>
-
-						<th class="dashR">뱃지 배경색상</th>
-						<td class="dashR">
-							<input type="text" class="w100" name="badgeBcolor"/>
-						</td>
-
-						<th class="dashR">뱃지 글자색상</th>
-						<td class="dashR">
-							<input type="text" class="w100" name="badgeFcolor"/>
-						</td>
-					</tr> -->
 					<tr>
-						<th class="dashR">사용고객등급구분<em class="required" title="필수"></em></th>
-						<td class="dashR">
+						<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}"/>
 							</label>
 						</td>
-						<th class="dashR">댓글여부</th>
-						<td class="dashR" colspan="5">
+						<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}"/>
+							</label>
+  						</td>
+					</tr>
+					<tr>
+						<th>제휴채널<em class="required" title="필수"></em></th>
+						<td>
+							<label class="chkBox" th:if="${upperAfLinkCdList}" th:each="oneData, status : ${upperAfLinkCdList}">
+								<input type="checkbox" name="upperAfLinkCdArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+							</label>
+  						</td>
+						<th>댓글여부</th>
+						<td colspan="5">
 							<select name="replyYn">
 								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:selected="${oneData.cd} == 'N'" th:text="|${oneData.cdNm}|"></option>
 							</select>
 						</td>
 					</tr>
-					<!--<tr>
-					
-						 <th class="dashR">DEV URL</th>
-						<td class="dashR" colspan="3">
-							<input type="text" name="devUrl" id="devUrl"/>
-						</td> 
-					</tr>-->
 					<tr>
-						<th class="dashR">PC 메인 이미지<i id="pMimgStar"></i></th>
-						<td class="dashR" colspan="5">
+						<th>PC 메인 이미지<i id="pMimgStar"></i></th>
+						<td colspan="5">
 							<div class="uFile w400">
 								<input id="registerMainPimg" name="registerMainPimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainPimg" class="uFileLabel w400">파일선택</label>
@@ -564,8 +439,8 @@
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일 메인 이미지<i id="mMimgStar"></i></th>
-						<td class="dashR" colspan="5">
+						<th>모바일 메인 이미지<i id="mMimgStar"></i></th>
+						<td colspan="5">
 							<div class="uFile w400">
 								<input id="registerMainMimg" name="registerMainMimg" type="file" accept="image/*" class="uFileInput w400"/>
 								<label for="registerMainMimg" class="uFileLabel w400">파일선택</label>
@@ -573,65 +448,26 @@
 							</div>
 						</td>
 					</tr>
-					<!-- <tr>
-						<th class="dashR">PC 상세 이미지</th>
-						<td class="dashR" colspan="5">
-							<div class="uFile w400">
-								<input id="registerDtlPimg" name="registerDtlPimg" type="file" accept="image/*" class="uFileInput w400"/>
-								<label for="registerDtlPimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="dtlPimg" value=""/>
-							</div>
-						</td>
-					</tr>
-					<tr>
-						<th class="dashR">모바일 상세 이미지</th>
-						<td class="dashR" colspan="5">
-							<div class="uFile w400">
-								<input id="registerDtlMimg" name="registerDtlMimg" type="file" accept="image/*" class="uFileInput w400"/>
-								<label for="registerDtlMimg" class="uFileLabel w400">파일선택</label>
-								<input type="hidden" name="dtlMimg" value=""/>
-							</div>
-						</td>
-					</tr> -->
 				</tbody>
-				<!-- <tbody id="questionEventInsert">
-					<tr>
-						<th class="dashR">개인정보 수집동의</th>
-						<td class="dashR" >
-							<div style="margin-top:5px;">
-								<textarea name="textareaR4" id="privacyPolicyRegister" style="width:720px;"></textarea>
-							</div>
-						</td>
-						<th class="dashR">입력항목</th>
-						<td class="dashR" colspan="5">
-							<div>
-								<input type="text" class="w200" name="planQtitle"/>
-								<label><input type="checkbox" onclick="fnAttachYnClick(this);" />첨부파일</label>
-								<button type="button" class="btn btn-base btn-lg" onclick="fnAddRow(this);">추가</button>
-								<input type="hidden" name="attachYn" value="N"/>
-							</div>
-						</td>
-					</tr>
-				</tbody> -->
 				<tbody>
-					<tr>
-						<th class="dashR">웹용소스</th>
-						<td class="dashR" colspan="5">
+					<!-- <tr>
+						<th>웹용소스</th>
+						<td colspan="5">
 							<div style="margin-top:5px;">
-								<!-- <textarea name="fsrcPc" id="fsrcPcRegister" rows="15" cols="95" style="width:1280px;"></textarea> -->
+								<textarea name="fsrcPc" id="fsrcPcRegister" rows="15" cols="95" style="width:1280px;"></textarea>
 								<textarea class="textareaR4" id="fsrcPcDetail" name="fsrcPc"></textarea>
 							</div>
 						</td>
 					</tr>
 					<tr>
-						<th class="dashR">모바일용소스</th>
-						<td class="dashR" colspan="5">
+						<th>모바일용소스</th>
+						<td colspan="5">
 							<div style="margin-top:5px;">
-								<!-- <textarea name="fsrcMobile" id="fsrcMobileRegister" rows="15" cols="95" style="width:1280px;"></textarea> -->
+								<textarea name="fsrcMobile" id="fsrcMobileRegister" rows="15" cols="95" style="width:1280px;"></textarea>
 								<textarea class="textareaR4" id="fsrcMobileDetail" name="fsrcMobile"></textarea>
 							</div>
 						</td>
-					</tr>
+					</tr> -->
 				</table>
 					<div class="panelStyle" style="margin: unset;">
 						<!-- TITLE -->
@@ -660,12 +496,12 @@
 													<span class="buttonSpan">
 														<button type="button"
 															class="btn btnRight btn-success btn-lg"
-															id="btnAddCorner">코너 추가</button>
+															id="btnAddCate">카테고리 추가</button>
 														<button type="button"
 															class="btn btnRight btn-success btn-lg"
-															id="btnDeleteCorner">선택삭제</button>
+															id="btnDeleteCate">선택삭제</button>
 													</span> <br />
-													<div id="gridFGCornerList"
+													<div id="gridFGCateList"
 														style="width: 100%; height: 200px;"
 														class="ag-theme-balham"></div>
 												</div>
@@ -715,7 +551,7 @@
 	var fsrcPc = [[${fsrcPc}]];
 	var fsrcMobile = [[${fsrcMobile}]];
 	var planBrandList = [[${planBrandList}]];
-	var planCornerList = [[${planCornerList}]];
+	var planCateList = [[${planCateList}]];
 	var snOptions;
 
 	// 카테고리 전시 여부
@@ -875,18 +711,18 @@
 			multiBrand.push(item.brandCd);
 		});
 		
-		let allCornerData = gagaAgGrid.getAllRowData(gridOptionsFGCornerList);
-		var multiCorner = [];
-		$.each(allCornerData, function(idx, item) {
-			multiCorner.push(item.cateNo);
+		let allCateData = gagaAgGrid.getAllRowData(gridOptionsFGCateList);
+		var multiCate = [];
+		$.each(allCateData, function(idx, item) {
+			multiCate.push(item.cateNo);
 		});
 		
 		
 		let data = {
 				 multiBrand : multiBrand
 				,brandList : allBrandData
-				,multiCorner : multiCorner
-				,CornerList : allCornerData
+				,multiCate : multiCate
+				,CateList : allCateData
 			    ,mode : $('#planWebRegisterForm input[name=mode]').val()
 			    ,planSq : $('#planWebRegisterForm input[name=planSq]').val()
 				,planGb	: $('#planWebRegisterForm select[name=planGb]').val()
@@ -1062,31 +898,31 @@
 		}
 	};
 	
-	// 코너 리스트 설정
-	var columnCornerList = [
+	// 카테고리 리스트 설정
+	var columnCateList = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "사이트", field: "siteCd", width: 120, cellClass: 'text-center'},
-		{headerName: "코너 구분", field: "cateGb", width: 110, cellClass: 'text-center'},
-		{headerName: "코너", field: "cateNm", width: 120, cellClass: 'text-center'},
-		{headerName: "코너", field: "cateNo", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "카테고리 구분", field: "cateGb", width: 110, cellClass: 'text-center'},
+		{headerName: "카테고리 이름", field: "cateNm", width: 120, cellClass: 'text-center'},
+		{headerName: "번호", field: "cateNo", width: 150, cellClass: 'text-center', hide: true},
 		/* {headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "삭제여부", field: "delYn", width: 150, cellClass: 'text-center', hide: true}  */
 	];
 	
 	// 카테고리 그리드 설정
-	var gridOptionsFGCornerList = gagaAgGrid.getGridOptions(columnCornerList);
-	gridOptionsFGCornerList.rowSelection = "multiple";
-	gridOptionsFGCornerList.suppressRowClickSelection = true;
+	var gridOptionsFGCateList = gagaAgGrid.getGridOptions(columnCateList);
+	gridOptionsFGCateList.rowSelection = "multiple";
+	gridOptionsFGCateList.suppressRowClickSelection = true;
 	
 	// 브랜드 설정 선택삭제 버튼 클릭시
-    $('#btnDeleteCorner').on('click', function() {
-    	gridOptionsFGCornerList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGCornerList)});
+    $('#btnDeleteCate').on('click', function() {
+    	gridOptionsFGCateList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGCateList)});
     });
 	
 	
 	
-	// 코너추가(카테고리 추가)
-	$('#btnAddCorner').on('click' , function () {
+	// 카테고리 추가
+	$('#btnAddCate').on('click' , function () {
 		cfnOpenCategoryPopup("fnSetPopupCategoryInfo");
 	});
 	
@@ -1094,7 +930,7 @@
 	var fnSetPopupCategoryInfo = function (result) {
 		// 기존 리스트 데이터 for
 		for(let i = 0 ; i < result.length ; i++) {
-			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGCornerList);		// 받아온 모든 데이터
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGCateList);		// 받아온 모든 데이터
 
 			// 받아온 data for
 			for(let j = 0 ; j < gridListValue.length ; j++) {
@@ -1109,7 +945,7 @@
 					mcxDialog.alert('카테고리1에서 선택하세요.');
 					return;
 				}
-				gagaAgGrid.addRowData(gridOptionsFGCornerList, {"siteCd":result[i].siteCd , "cateGb":result[i].cateGb, "cateNm":result[i].cateNm, "cateNo":result[i].cateNo});
+				gagaAgGrid.addRowData(gridOptionsFGCateList, {"siteCd":result[i].siteCd , "cateGb":result[i].cateGb, "cateNm":result[i].cateNm, "cateNo":result[i].cateNo});
 			}
 		}
 	}
@@ -1126,7 +962,7 @@
 		
 		// 그리드 그리기
 		gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
-		gagaAgGrid.createGrid("gridFGCornerList", gridOptionsFGCornerList);
+		gagaAgGrid.createGrid("gridFGCateList", gridOptionsFGCateList);
 		
 		 if (mode =='U') {
 			/* $('#planWebDetailForm input[name=badgeFcolor]').spectrum({
@@ -1142,7 +978,7 @@
 			}); */
 			
 			gridOptionsFGBrandList.api.setRowData(planBrandList);
-			gridOptionsFGCornerList.api.setRowData(planCornerList);
+			gridOptionsFGCateList.api.setRowData(planCateList);
 
 			if (planInfo.goodsLimitYn == 'N') {
 				$('#planWebDetailForm input[name=goodsLimitQty]').hide();

+ 19 - 2
src/main/webapp/WEB-INF/views/ocm/ExtmallForm.html

@@ -127,12 +127,17 @@
 					</tr>
 					<tr>
 						<th>직접회수여부</th>
-						<td colspan="3">
+						<td>
 							<label class="rdoBtn"><input type="radio" name="dwdpYn" value="Y" checked="checked">제휴몰에서 회수<span></span></label>
 							<label class="rdoBtn"><input type="radio" name="dwdpYn" value="N">자사몰에서 회수<span></span></label>
 						</td>
-						<th>사용여부<i class="required" title="필수"></i></th>
+						<th>취소문자발송여부</th>
 						<td colspan="3">
+							<label class="rdoBtn"><input type="radio" name="cnclsmsSendYn" value="Y" checked="checked">제휴몰에서 발송<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="cnclsmsSendYn" value="N">자사몰에서 발송<span></span></label>
+						</td>
+						<th>사용여부<i class="required" title="필수"></i></th>
+						<td>
 							<label class="rdoBtn"><input type="radio" name="useYn" value="Y" checked="checked">Yes<span></span></label>
 							<label class="rdoBtn"><input type="radio" name="useYn" value="N">No<span></span></label>
 						</td>
@@ -185,6 +190,12 @@
 				return params.value == 'Y' ? '제휴몰에서회수' : '자사몰에서회수';
 			}
 		},
+		{
+			headerName: "취소문자발송여부", field: "cnclsmsSendYn", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) {
+				return params.value == 'Y' ? '제휴몰에서발송' : '자사몰에서발송';
+			}
+		},
 		{
 			headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
 			cellRenderer: function (params) {
@@ -215,6 +226,12 @@
 			$('#detailForm input:radio[name=dwdpYn]').eq(1).trigger('click');
 		}
 		
+		if (event.data.cnclsmsSendYn == 'Y') {
+			$('#detailForm input:radio[name=cnclsmsSendYn]').eq(0).trigger('click');
+		} else {
+			$('#detailForm input:radio[name=cnclsmsSendYn]').eq(1).trigger('click');
+		}
+		
 		if (event.data.useYn == 'Y') {
 			$('#detailForm input:radio[name=useYn]').eq(0).trigger('click');
 		} else {

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

@@ -37,19 +37,21 @@
 			<div class="panelContent">
 				<table class="frmStyle">
 					<colgroup>
-						<col width="9%"/>
-						<col width="16%"/>
-						<col width="9%"/>
-						<col width="16%"/>
-						<col width="9%"/>
-						<col width="16%"/>
-						<col width="9%"/>
+						<col width="10%"/>
+						<col width="23%"/>
+						<col width="10%"/>
+						<col width="23%"/>
+						<col width="10%"/>
 						<col/>
 					</colgroup>
 					<tr>
 						<th>업체/브랜드<em class="required" title="필수"></em></th>
-						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
+						<td>
+							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
+							<span id="supplyCompText"></span>
+							<input type="hidden" name="supplyCompList"/>
+							<!-- <label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
 							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
 							<select name="supplyCompCd" id="supplyCompCd">
 								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
@@ -57,18 +59,18 @@
 							</select>
 							<select name="brandCd" id="brandCd">
 								<option value="">[전체]</option>
-							</select>
+							</select> -->
 						</td>
 						<th>브랜드<em class="required" title="필수"></em></th>
-						<td colspan="3">
+						<td>
 							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
 							<button type="button" class="btn icn" id="btnSearchBrand"><i class="fa fa-search"></i></button>
-							<input type="text" class="w100" name="searchBrandCd" readonly="readonly"/>
+							<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
+							<span id="brandText"></span>
+							<input type="hidden" name="brandList"/>
 						</td>
-					</tr>
-					<tr>
 						<th>키워드<em class="required" title="필수"></em></th>
-						<td>
+						<td colspan="3">
 							<select name="search" id="search">
 								<option value="searchGoodsCd">상품코드</option>
 								<option value="searchGoodsNm">상품명</option>
@@ -77,6 +79,15 @@
 							</select>
 							<input type="text" class="w100" name="condition" id="condition" maxlength="50"/>
 						</td>
+					</tr>
+					<tr>
+						<th>정상/이월 구분</th>
+						<td>
+							<select  name="formalGb" id="formalGb">
+								<option value="">[전체]</option>
+								<option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
 						<th>상품상태</th>
 						<td>
 							<select  name="goodsStat" id="goodsStat">
@@ -93,11 +104,11 @@
 						</td>
 					</tr>
 					<tr>
-						<th>정상/이월 구분</th>
+						<th>품절여부</th>
 						<td>
-							<select  name="formalGb" id="formalGb">
+							<select  name="soldOutYn" id="soldOutYn">
 								<option value="">[전체]</option>
-								<option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>색상</th>
@@ -120,13 +131,6 @@
 						</td>
 					</tr>
 					<tr>
-						<th>품절여부</th>
-						<td>
-							<select  name="soldOutYn" id="soldOutYn">
-								<option value="">[전체]</option>
-								<option th:if="${useYnList}" th:each="oneData, status : ${useYnList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
 						<th>담당MD</th>
 						<td>
 							<select  name="mdNo" id="mdNo">
@@ -305,6 +309,10 @@
 		//$("#goodsSizeStockForm input[type=radio][checked]").parent("label").addClass("checked");
 		
 		$("#goodsSizeStockForm input[name=selfYn]:input[value='Y']").trigger('click');
+		$('#goodsSizeStockForm input[name=brandList]').val('');
+		$('#goodsSizeStockForm input[name=supplyCompList]').val('');
+		$('#goodsSizeStockForm').find('#brandText').html('');
+		$('#goodsSizeStockForm').find('#supplyCompText').html('');
 		
 	}
 	
@@ -343,10 +351,10 @@
 		var searchFlag = false;
 		var cnt = 0;
 
-		if( !gagajf.isNull($("#goodsSizeStockForm select[name=supplyCompCd]").val())
+		if( !gagajf.isNull($("#goodsSizeStockForm input[name=supplyCompList]").val())
 				|| !gagajf.isNull($("#goodsSizeStockForm input[name=condition]").val())
 				|| (!gagajf.isNull($("#goodsSizeStockForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsSizeStockForm input[name=edDate]").val()))
-				|| !gagajf.isNull($("#goodsSizeStockForm input[name=searchBrandCd]").val())
+				|| !gagajf.isNull($("#goodsSizeStockForm input[name=brandList]").val())
 				
 			){
 			searchFlag = true;
@@ -441,7 +449,7 @@
 
 	
 	//업체변경시
-	$('#goodsSizeStockForm select[name=supplyCompCd]').on('change', function() {
+	/* $('#goodsSizeStockForm select[name=supplyCompCd]').on('change', function() {
 		var supplyCompCd = $(this).val();
 		
 		var actionUrl = '/renderer/supplyCompany/brand/list/' + supplyCompCd;
@@ -453,7 +461,7 @@
 
 		cfnCreateCombo(actionUrl, $('#goodsSizeStockForm select[name=brandCd]'), "[전체]", "");
 
-	});
+	}); */
 	
 	//엑셀양식 다운로드
 	$('#btnExcelSampleDownLoad').on('click', function (){
@@ -530,7 +538,7 @@
 	}
 	
 	// 자사/입점 변경여부
-	$("#goodsSizeStockForm input[name=selfYn]").bind('click change', function () {
+	/* $("#goodsSizeStockForm input[name=selfYn]").bind('click change', function () {
 	//$('#goodsSizeStockForm input[name=selfYn]').on('change', function() {
 		var radioValue = $(this).val();
 		var selfGb = "S";	// 자사 공급 업체
@@ -544,24 +552,63 @@
 
 		cfnCreateCombo(actionUrl, $('#goodsSizeStockForm select[name=supplyCompCd]'), "[전체]", "");
 		
+	}); */
+	
+	// 업체 조회 선택시
+	$('#btnSearchSupplyComp').on('click', function() {
+		cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');
 	});
 	
-	// 브랜드 조회 팝업에서 호출
-	var fnSetBrandInfo = function(result) {
-		$("#goodsSizeStockForm input[name=searchBrandCd]").val(result[0].brandCd);
+	// 업체 조회 팝업에서 호출
+	var fnSetSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompText = "";
+		var sIndex = 0;
+		$('#goodsSizeStockForm').find('#supplyCompText').html('');
+		$('#goodsSizeStockForm input[name=supplyCompSearchTxt]').val('');
+		result.forEach(function(supplyComp){
+			sIndex++; 
+			arrSupplyComp.push(supplyComp.supplyCompCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#goodsSizeStockForm input[name=supplyCompSearchTxt]').val(arrSupplyComp[0]);
+		}else{
+			supplyCompText = sIndex + " 개";
+			$('#goodsSizeStockForm').find('#supplyCompText').html(supplyCompText);	
+		}
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#goodsSizeStockForm input[name=supplyCompList]").val(jsonData);
 	}
 	
 	// 브랜드 조회 선택시
 	$('#btnSearchBrand').on('click', function() {
+		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
+	});
+	
+	// 브랜드 조회 팝업에서 호출
+	var fnSetBrandInfo = function(result) {
+		var arrbrandCd = [];
+		var brandText = "";
+		var bIndex = 0;
+		$('#goodsSizeStockForm').find('#brandText').html('');
+		$('#goodsSizeStockForm input[name=searchTxt]').val('');
+		result.forEach(function(brand){
+			bIndex++; 
+			arrbrandCd.push(brand.brandCd);
+		});
 
-		if (gagajf.isNull($("#goodsSizeStockForm input[name=searchTxt]").val())){
-			mcxDialog.alert('브랜드 검색어를 입력하세요.');
-			return false;
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (bIndex == 1) {
+			$('#goodsSizeStockForm input[name=searchTxt]').val(arrbrandCd[0]);
+		}else{
+			brandText = bIndex + " 개";
+			$('#goodsSizeStockForm').find('#brandText').html(brandText);	
 		}
-		
-		cfnOpenBrandListPopup('fnSetBrandInfo', $("#goodsSizeStockForm input[name=searchTxt]").val());
-		
-	});
+		var jsonData = JSON.stringify(arrbrandCd);
+		$("#goodsSizeStockForm input[name=brandList]").val(jsonData);
+	}
 	
 	$(document).ready(function() {
 		

+ 2 - 2
src/main/webapp/ux/js/admin.common.js

@@ -45,9 +45,9 @@ let cfnDrawLnbMenu = function(gnbMenuId) {
 		if (gnbMenuId == item1.pmenuId) {
 			if (item1.leafLvl == 0) {
 				//lnbTag += '	<a class="dep2" attr="data-url=' + item1.menuUrl + '">\n';
-				lnbTag += '	<a class="dep2" href="javascript:void(0);" onclick="fnClickLnb(\'' + item1.menuId + '\');">\n';
+				lnbTag += '	<a class="dep2 on" href="javascript:void(0);" onclick="fnClickLnb(\'' + item1.menuId + '\');">\n';
 			} else {
-				lnbTag += '	<a class="dep2">\n';
+				lnbTag += '	<a class="dep2 on">\n';
 			}
 			
 			/* lnbTag += '		<i class="fa fa-shopping-cart"></i>\n';