Przeglądaj źródła

Merge branch 'develop' into card007

card007 5 lat temu
rodzic
commit
b3253f2ba6
49 zmienionych plików z 2364 dodań i 677 usunięć
  1. 18 0
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  2. 31 1
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  3. 246 1
      src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java
  4. 18 28
      src/main/java/com/style24/admin/biz/web/TsaBusinessController.java
  5. 65 1
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  6. 16 1
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  7. 9 9
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  8. 38 19
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  9. 66 18
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  10. 2 2
      src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  11. 0 1
      src/main/java/com/style24/admin/biz/web/TsaPgController.java
  12. 2 2
      src/main/java/com/style24/admin/biz/web/TsaStockController.java
  13. 0 123
      src/main/java/com/style24/persistence/TsaPageRequest.java
  14. 2 2
      src/main/java/com/style24/persistence/domain/Coupon.java
  15. 0 1
      src/main/java/com/style24/persistence/domain/Delivery.java
  16. 2 2
      src/main/java/com/style24/persistence/domain/FreeGoodsPromotion.java
  17. 2 5
      src/main/java/com/style24/persistence/domain/FreeGoodsSectionVal.java
  18. 2 2
      src/main/java/com/style24/persistence/domain/Goods.java
  19. 2 2
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  20. 2 2
      src/main/java/com/style24/persistence/domain/MoreBetter.java
  21. 0 2
      src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  22. 4 2
      src/main/java/com/style24/persistence/domain/Order.java
  23. 1 0
      src/main/java/com/style24/persistence/domain/SupplyCompany.java
  24. 2 2
      src/main/java/com/style24/persistence/domain/WmsGoods.java
  25. 12 7
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  26. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml
  27. 10 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  28. 7 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
  29. 7 8
      src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml
  30. 4 0
      src/main/webapp/WEB-INF/views/business/SupplyCompanyPopupForm.html
  31. 37 24
      src/main/webapp/WEB-INF/views/customer/CustomerActiveListForm.html
  32. 200 0
      src/main/webapp/WEB-INF/views/customer/CustomerDormantListForm.html
  33. 209 0
      src/main/webapp/WEB-INF/views/customer/CustomerSecedeListForm.html
  34. 93 21
      src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html
  35. 2 3
      src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html
  36. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsListForm.html
  37. 7 4
      src/main/webapp/WEB-INF/views/marketing/CouponRetrievePopupForm.html
  38. 0 1
      src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionForm.html
  39. 56 28
      src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html
  40. 43 59
      src/main/webapp/WEB-INF/views/order/CancelRequestForm.html
  41. 101 71
      src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  42. 5 100
      src/main/webapp/WEB-INF/views/order/OrderListForm.html
  43. 766 0
      src/main/webapp/WEB-INF/views/order/OrderListFormBack.html
  44. 114 69
      src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html
  45. 34 32
      src/main/webapp/ux/css/admin.ui.css
  46. 39 13
      src/main/webapp/ux/js/admin.popup.js
  47. 3 2
      src/main/webapp/ux/plugins/agGrid/ag-theme-balham.css
  48. 15 0
      src/main/webapp/ux/plugins/gaga/gaga.agGrid.js
  49. 68 3
      src/main/webapp/ux/plugins/gaga/gaga.paging.js

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

@@ -25,4 +25,22 @@ public interface TsaCustomerDao {
 	 * @since 2020. 01. 12
 	 */
 	Collection<Customer> getCustomerActiveList(CustomerSearch customerSearch);
+
+	/**
+	 * 탈퇴회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	Collection<Customer> getCustomerSecedeList(CustomerSearch customerSearch);
+
+	/**
+	 * 휴면회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	Collection<Customer> getCustomerDormantList(CustomerSearch customerSearch);
 }

+ 31 - 1
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -22,8 +22,38 @@ public class TsaCustomerService {
 	@Autowired
 	private TsaCustomerDao customerDao;
 
-
+	/**
+	 * 활동회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 12
+	 */
 	public Collection<Customer> getCustomerActiveList(CustomerSearch customerSearch) {
 		return customerDao.getCustomerActiveList(customerSearch);
 	}
+
+	/**
+	 * 탈퇴회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	public Collection<Customer> getCustomerSecedeList(CustomerSearch customerSearch) {
+		return customerDao.getCustomerSecedeList(customerSearch);
+	}
+
+	/**
+	 * 휴면회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	public Collection<Customer> getCustomerDormantList(CustomerSearch customerSearch) {
+		return customerDao.getCustomerDormantList(customerSearch);
+	}
+
+
 }

+ 246 - 1
src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -352,7 +352,7 @@ public class TsaOrderChangeService {
 		String chgMemo 		= mav.getString("chgMemo").toString();
 		String allCanYn		= mav.getString("allCanYn").toString();
 		String isCustomer	= mav.getString("isCustomer").toString();
-		String chgGb		= "G680_20";
+		String chgGb		= "G680_20"; // 취소요청
 		
 		// 4.1 주문변경 기본정보 등록
 		OrderChange orderChange = new OrderChange();
@@ -365,6 +365,19 @@ public class TsaOrderChangeService {
 		orderChange.setRegNo(userNo);
 		orderChange.setUpdNo(userNo);
 		
+		// 4.2 주문변경 추가정조 등록하기
+		// 4.2 반품회수지 정보 등록
+		String chgerNm 			= mav.getString("chgerNm").toString();
+		String chgerPhnno 		= mav.getString("chgerPhnno").toString();
+		String chgerTelno 		= mav.getString("chgerTelno").toString();
+		String chgerEmail 		= mav.getString("chgerEmail").toString();
+		
+		orderChange.setChgerNm(chgerNm);
+		orderChange.setChgerPhnno(chgerPhnno);
+		orderChange.setChgerTelno(chgerTelno);
+		orderChange.setChgerEmail(chgerEmail);
+		orderChange.setChgerRtnMemo("");
+		
 		orderChangeDao.createOrderChange(orderChange);
 		
 		List<Order> cancelOrderDetailList = new ArrayList<Order>();
@@ -542,6 +555,238 @@ public class TsaOrderChangeService {
 		//int a = 100/0;
 	}
 	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문반품신청
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 01. 14
+	 */
+	@Transactional("shopTxnManager")
+	public void orderReturn(GagaMap mav) {
+		
+		// 1. 세션회원조회
+		int userNo = TsaSession.getInfo().getUserNo();
+		
+		// 2. 취소요정정보목록
+		List<Order> cancelReqList		 	= (List<Order>) mav.get("cancelReqList");			//주문 취소 신청 목록
+		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");	//주문 환불 금액 목록
+		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");	//주문 환불 배송 금액 목록
+				
+		// 3. 취소신청정보
+		int ordNo 			= Integer.parseInt(mav.getString("ordNo").toString());
+		String chgReason 	= mav.getString("chgReason").toString();
+		String chgMemo 		= mav.getString("chgMemo").toString();
+		String allCanYn		= mav.getString("allCanYn").toString();
+		String isCustomer	= mav.getString("isCustomer").toString();
+		String chgGb		= "G680_30"; //반품요청
+		
+		// 4.1 주문변경 기본정보 등록
+		OrderChange orderChange = new OrderChange();
+		orderChange.setOrdNo(ordNo);
+		orderChange.setChgGb(chgGb);
+		orderChange.setChgReason(chgReason);
+		orderChange.setChgMemo(chgMemo);
+		orderChange.setAddPayCost(0);
+		orderChange.setAddPayAmt(0);
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+		
+		// 4.2 반품추가정보, 반품회수지 정보 등록
+		String chgerNm 			= mav.getString("chgerNm").toString();
+		String chgerPhnno 		= mav.getString("chgerPhnno").toString();
+		String chgerTelno 		= mav.getString("chgerTelno").toString();
+		String chgerEmail 		= mav.getString("chgerEmail").toString();
+		String chgerZipNo 		= mav.getString("chgerZipNo").toString();
+		String chgerBaseAddr 	= mav.getString("chgerBaseAddr").toString();
+		String chgerDtlAddr 	= mav.getString("chgerDtlAddr").toString();
+		
+		orderChange.setChgerNm(chgerNm);
+		orderChange.setChgerPhnno(chgerPhnno);
+		orderChange.setChgerTelno(chgerTelno);
+		orderChange.setChgerEmail(chgerEmail);
+		orderChange.setChgerZipNo(chgerZipNo);
+		orderChange.setChgerBaseAddr(chgerBaseAddr);
+		orderChange.setChgerDtlAddr(chgerDtlAddr);
+		orderChange.setChgerRtnMemo("");
+		
+		orderChangeDao.createOrderChange(orderChange);
+		
+		List<Order> cancelOrderDetailList = new ArrayList<Order>();
+		
+		// 4.2 주문변경 상세 단품 정보 등록 (단품단위)
+		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+			Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
+			cancelOrderRefundPo.setRegNo(userNo);
+			cancelOrderRefundPo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				cancelOrderRefundPo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				cancelOrderRefundPo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+
+			// 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
+			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+				// 4.2.3 주문상세단품정보 수정
+				//orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
+				
+				// 4.2.4 주문상세단품정보 이력 등록
+				//orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
+				
+				// 4.3 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
+				Boolean temp = false;
+				
+				if (cancelOrderDetailList.size() > 0) {
+					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+						if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
+							temp = true;
+						}
+					}
+				}
+				
+				// 4.4 주문상세단위 데이타 저장
+				if (!temp) {
+					cancelOrderDetailList.add(cancelOrderRefundPo);
+				}
+				
+				// 4.5 상품옵션 재고 원복
+				//orderChangeDao.updateOptionQty(cancelOrderRefundPo);
+			}
+		}
+		
+		// 5. 주문상세단위 취소 데이타 처리
+		for (int i=0 ; i<cancelOrderDetailList.size() ; i++) {			
+			Order vo = cancelOrderRefundList.get(i);
+			vo.setRegNo(userNo);
+			vo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				vo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				vo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+			
+			// 5.1 주문변경상세정보 이력 등록
+			orderChangeDao.createOrderDetailHstCnclRtn(vo);
+			
+			// 4.2 주문변경상세정보 수정
+			//orderChangeDao.updateOrderDetail(vo);
+			
+			// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음
+			// 5.3 주문변경상세정보 등록
+			OrderChange changeDetailPo = new OrderChange();
+			changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+			changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+			changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+			changeDetailPo.setChgStat("G685_40"); // 반품요청 : 공통코드로관리예정
+			changeDetailPo.setRegNo(userNo);
+			changeDetailPo.setUpdNo(userNo);
+			
+			orderChangeDao.createOrderChangeDetail(changeDetailPo);
+		}
+		
+		// To Do List
+		// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+		int spanRealCnclRtnAmt 		= Integer.parseInt(mav.get("spanRealCnclRtnAmt").toString());		// 취소금액합계
+		int sumDeliveryFee 			= Integer.parseInt(mav.get("sumDeliveryFee").toString());			// 배송비합계
+		int spanTotDeliveryFee 		= Integer.parseInt(mav.get("spanTotDeliveryFee").toString());		// 추가배송비합계
+		int spanTotRtnDelvFee 		= Integer.parseInt(mav.get("spanTotRtnDelvFee").toString());		// 반품배송비합계
+		int spanRefundAmt			= 0;
+		
+		// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+		if ("true".equals(isCustomer)) {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+			//Integer.parseInt(mav.get("spanRefundAmt").toString());
+		}
+		// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+		else {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+		}
+		mav.set("spanRefundAmt", spanRefundAmt);
+		
+		// 6. 환불결제 정보 등록
+		Order paymentOrder = new Order();
+		paymentOrder.setOrdNo(ordNo);
+		paymentOrder.setPayAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()) * -1);
+		paymentOrder.setPayStat("G016_99");
+		paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		paymentOrder.setRegNo(userNo);
+		paymentOrder.setUpdNo(userNo);
+		
+		//orderChangeDao.createPayment(paymentOrder);
+		
+		// 7. 환불금액 등록
+		Order refundOrder = new Order();
+		refundOrder.setOrdNo(ordNo);
+		refundOrder.setPaySq(paymentOrder.getPaySq());
+		refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		refundOrder.setRegNo(userNo);
+		
+		refundOrder.setRefundAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()));
+		refundOrder.setRfCpn1Amt(Integer.parseInt(mav.get("spanCpn1DcAmt").toString()));
+		refundOrder.setRfTmtb1Amt(Integer.parseInt(mav.get("spanTmtb1DcAmt").toString()));
+		refundOrder.setRfTmtb2Amt(Integer.parseInt(mav.get("spanTmtb2DcAmt").toString()));
+		refundOrder.setRfGoodsCpnAmt(Integer.parseInt(mav.get("spanGoodsCpnDcAmt").toString()));
+		refundOrder.setRfCartCpnAmt(Integer.parseInt(mav.get("spanCartCpnDcAmt").toString()));
+		refundOrder.setRfPntAmt(Integer.parseInt(mav.get("spanPntDcAmt").toString()));
+		refundOrder.setRfPrePntAmt(Integer.parseInt(mav.get("spanPrePntDcAmt").toString()));
+		refundOrder.setRfGfcdUseAmt(Integer.parseInt(mav.get("spanGfcdUseAmt").toString()));
+		
+		refundOrder.setRaNo(mav.get("accountNo").toString());
+		refundOrder.setRaNm(mav.get("accountNm").toString());
+		refundOrder.setRaBank(mav.get("bankCd").toString());
+		
+		//orderChangeDao.createRefund(refundOrder);
+		
+		// 8. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
+		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+			Order vo = cancelDelvRefundList.get(i);
+			
+			if (vo.getAddDelvFee() > 0) {
+				Order delvFeeOrder = new Order();
+				
+				delvFeeOrder.setPaySq(paymentOrder.getPaySq());
+				delvFeeOrder.setOrdNo(ordNo);
+				delvFeeOrder.setDelvFeeGb("G018_10");
+				delvFeeOrder.setDelvFeeCd(vo.getDelvFeeCd());
+				delvFeeOrder.setDelvFee(vo.getAddDelvFee());
+				delvFeeOrder.setRealDelvAmt(vo.getDelvFee());
+				delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
+				delvFeeOrder.setSupplyCompCd(vo.getSupplyCompCd());
+				delvFeeOrder.setRegNo(userNo);
+				delvFeeOrder.setUpdNo(userNo);
+				
+				//orderChangeDao.createDeliveryFee(delvFeeOrder);
+			}
+		}
+		
+		// To Do List
+		// 9. 포인트원복 (사용포인트, 주문상세단위)
+		
+		// To Do List
+		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
+		
+		// To Do List
+		// 11. 상품권원복
+		
+		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+		Order freegiftOrder = new Order();
+		freegiftOrder.setOrdNo(ordNo);
+		freegiftOrder.setUpdNo(userNo);
+		//orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+		
+		// To Do List
+		// 13. PG 연동
+		
+		// To Do List
+		// 14. 취소 완료 알림톡 발송 에정
+		
+		//int a = 100/0;
+	}
+	
 	
 	
 	

+ 18 - 28
src/main/java/com/style24/admin/biz/web/TsaBusinessController.java

@@ -1,18 +1,6 @@
 package com.style24.admin.biz.web;
 
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
-
+import com.gagaframework.web.rest.server.GagaResponse;
 import com.style24.admin.biz.service.TsaBusinessService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
@@ -20,20 +8,16 @@ import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.domain.Aflink;
-import com.style24.persistence.domain.Brand;
-import com.style24.persistence.domain.BrandMd;
-import com.style24.persistence.domain.DeliveryLoc;
-import com.style24.persistence.domain.DelvFeePolicy;
-import com.style24.persistence.domain.SellStore;
-import com.style24.persistence.domain.ShipCompany;
-import com.style24.persistence.domain.SiteBrand;
-import com.style24.persistence.domain.StockSyncBase;
-import com.style24.persistence.domain.SupplyCompany;
-
+import com.style24.persistence.domain.*;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
 
-import com.gagaframework.web.rest.server.GagaResponse;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 영업관리 Controller
@@ -93,8 +77,14 @@ public class TsaBusinessController extends TsaBaseController {
 	 */
 	@PostMapping("/supply/company/list")
 	@ResponseBody
-	public Collection<SupplyCompany> getCompanyList(@RequestBody SupplyCompany supplyComp) {
-		return businessService.getSupplyCompanyList(supplyComp);
+	public List<SupplyCompany> getCompanyList(@RequestBody SupplyCompany supplyComp) {
+		List<SupplyCompany> result = (ArrayList<SupplyCompany>) businessService.getSupplyCompanyList(supplyComp);
+
+		for (SupplyCompany supplyCompany : result) {
+			log.info("CHECK supplyCompNm >> " + supplyCompany.getSupplyCompNm());
+		}
+
+		return result;
 	}
 
 	/**
@@ -628,7 +618,7 @@ public class TsaBusinessController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		mav.addObject("params", company);
-		mav.setViewName("business/SupplyCompanySearchForm");
+		mav.setViewName("business/SupplyCompanyPopupForm");
 		return mav;
 	}
 }

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

@@ -273,7 +273,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 12. 24
+	 * @since 2020. 01. 12
 	 */
 	@PostMapping("/active/list")
 	@ResponseBody
@@ -281,5 +281,69 @@ public class TsaCustomerController extends TsaBaseController {
 		return customerService.getCustomerActiveList(customerSearch);
 	}
 
+	/**
+	 * 탈퇴회원
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	@GetMapping("/secede/list/form")
+	public ModelAndView customerSecedeListForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getCommonCodeList("G000", "Y"));
+
+		// 탈퇴 구분
+		mav.addObject("secedeGbList", rendererService.getCommonCodeList("G111", "Y"));
+
+		mav.setViewName("customer/CustomerSecedeListForm");
+
+		return mav;
+	}
+
+	/**
+	 * 탈퇴회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	@PostMapping("/secede/list")
+	@ResponseBody
+	public Collection<Customer> getCustomerSecedeList(@RequestBody CustomerSearch customerSearch) {
+		return customerService.getCustomerSecedeList(customerSearch);
+	}
+
+	/**
+	 * 휴면회원
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	@GetMapping("/dormant/list/form")
+	public ModelAndView customerDormantListForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getCommonCodeList("G000", "Y"));
+
+		mav.setViewName("customer/CustomerDormantListForm");
+
+		return mav;
+	}
+
+	/**
+	 * 휴면회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	@PostMapping("/dormant/list")
+	@ResponseBody
+	public Collection<Customer>getCustomerDormantList(@RequestBody CustomerSearch customerSearch) {
+		return customerService.getCustomerDormantList(customerSearch);
+	}
 
 }

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

@@ -2,6 +2,7 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
+import com.gagaframework.web.util.GagaDateUtil;
 import com.style24.persistence.domain.Brand;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -219,7 +220,21 @@ public class TsaDisplayController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 상품상태
-		mav.addObject("goodsStatList", rendererService.getAvailCommonCodeList("G032"));
+		String[] exceptCds = {"G008_00"};
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
+		// MD
+		mav.addObject("mdIdList", rendererService.getBrandMdList());
+		// 정상이월
+		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
+		// 품목
+		mav.addObject("itemkindList", rendererService.getAllItemkindList());
+		// 년도
+		int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
+		mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
+		// 시즌
+		mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
 
 		mav.setViewName("display/GoodsCategoryForm");
 

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

@@ -7,6 +7,7 @@ import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.style24.persistence.TscPageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.InputStreamResource;
@@ -31,7 +32,6 @@ import com.style24.admin.biz.service.TsaSystemService;
 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.TsaPageRequest;
 import com.style24.persistence.domain.AdKeyword;
 import com.style24.persistence.domain.AdKeywordGoods;
 import com.style24.persistence.domain.Color;
@@ -509,7 +509,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 		log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1275,7 +1275,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		GagaMap result = new GagaMap();
 
-		wmsGoods.setPageable(new TsaPageRequest(wmsGoods.getPageNo() - 1, wmsGoods.getPageSize()));
+		wmsGoods.setPageable(new TscPageRequest(wmsGoods.getPageNo() - 1, wmsGoods.getPageSize()));
 		wmsGoods.getPageable().setTotalCount(goodsService.getGoodsWmsIncomelotListCount(wmsGoods));
 
 		result.set("pageing", wmsGoods);
@@ -1482,7 +1482,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsTitleReserveCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1683,7 +1683,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsEpSkipCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1776,7 +1776,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		GagaMap result = new GagaMap();
 
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getReinboundInformCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1857,7 +1857,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsResSellCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -2084,7 +2084,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 		log.info("[getPopupGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -2150,7 +2150,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsPriceResCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);

+ 38 - 19
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -3,10 +3,8 @@ package com.style24.admin.biz.web;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.io.InputStream;
-import java.lang.reflect.Array;
-import java.lang.reflect.Type;
 
+import com.style24.persistence.TscPageRequest;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -19,22 +17,29 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.style24.admin.biz.service.*;
+import com.style24.admin.biz.service.TsaBusinessService;
+import com.style24.admin.biz.service.TsaCommonService;
+import com.style24.admin.biz.service.TsaCouponService;
+import com.style24.admin.biz.service.TsaMarketingService;
+import com.style24.admin.biz.service.TsaMorebetterService;
+import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.biz.service.TsaSystemService;
 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.TsaPageRequest;
-import com.style24.persistence.domain.*;
+import com.style24.persistence.domain.CommonCode;
+import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.FreeGoodsPromotion;
+import com.style24.persistence.domain.MoreBetter;
+import com.style24.persistence.domain.MoreBetterBurden;
+import com.style24.persistence.domain.MoreBetterGoods;
+import com.style24.persistence.domain.MoreBetterSection;
 
 import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.reflect.TypeToken;
+
 /**
  * 마케팅 Controller
  * @author xodud1202
@@ -98,7 +103,7 @@ public class TsaMarketingController extends TsaBaseController {
 		List<FreeGoodsPromotion> marketingList = (ArrayList<FreeGoodsPromotion>)marketingService.getFreeGoodsPromotionList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
+		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(marketingList.size());
 
 		result.set("pageing", param);
@@ -107,7 +112,6 @@ public class TsaMarketingController extends TsaBaseController {
 		return result;
 	}
 
-
 	/**
 	 * 사은품 프로모션 등록 팝업창
 	 * @param param
@@ -128,6 +132,20 @@ public class TsaMarketingController extends TsaBaseController {
 		return mav;
 	}
 
+	/**
+	 * 사은품 프로모션 등록
+	 * @param param
+	 * @return ModelAndView
+	 * @author xodud1202
+	 * @since 2021. 01. 14
+	 */
+	@ResponseBody
+	@GetMapping("/freeGoodsPromotion/save")
+	public GagaResponse freeGoodsPromotionSave(FreeGoodsPromotion param) {
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 
 	/* // xodud1202 진행 */
 
@@ -171,7 +189,7 @@ public class TsaMarketingController extends TsaBaseController {
 		int cpnTotCnt = couponService.getCouponListCnt(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
+		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(cpnTotCnt);
 
 		result.set("pageing", param);
@@ -303,7 +321,7 @@ public class TsaMarketingController extends TsaBaseController {
 		List<MoreBetter> tmtbList = (ArrayList<MoreBetter>)morebetterService.getMorebetterList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
+		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(tmtbList.size());
 
 		result.set("pageing", param);
@@ -322,7 +340,7 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@ResponseBody
 	@GetMapping("/morebetterPopup/form")
-	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq,MoreBetter moreBetter) {
+	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq, MoreBetter moreBetter) {
 		ModelAndView mav = new ModelAndView();
 
 		// 상품상태 : 등록일때는 '대기'
@@ -347,8 +365,8 @@ public class TsaMarketingController extends TsaBaseController {
 
 		//tmtb sq 자동생성
 		Integer tmtbSq;
-		if("N".equals(mode)){
-			tmtbSq =  commonService.getNextSequence("SEQ_TMTB");
+		if ("N".equals(mode)) {
+			tmtbSq = commonService.getNextSequence("SEQ_TMTB");
 			moreBetter.setTmtbSq(tmtbSq);
 		}
 
@@ -393,6 +411,7 @@ public class TsaMarketingController extends TsaBaseController {
 		morebetterService.saveMoreBetterDetail(moreBetter);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
+
 	/**
 	 * 다다익선 공급업체 삭제
 	 *
@@ -514,7 +533,7 @@ public class TsaMarketingController extends TsaBaseController {
 		// 할인방식 목록
 		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
 
-		mav.setViewName("marketing/CouponRetrieveForm");
+		mav.setViewName("marketing/CouponRetrievePopupForm");
 
 		return mav;
 	}

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

@@ -77,15 +77,12 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[1] = "G013_20";
 		ordDtlStatArr[2] = "G013_30";
 		ordDtlStatArr[3] = "G013_40";
-		
-		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
-
-		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
+		order.setOrdDtlStatArr(ordDtlStatArr);
 
-		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 취소사유
-		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 취소요청대상 목록
-		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
-		mav.addObject("ordNo"						, ordNo);
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));			// 취소사유
+		mav.addObject("cancelRequestTargetList"		, orderChangeService.getCancelRequestTargetList(order));	// 취소요청대상 목록
+		mav.addObject("orderInfoList"				, orderService.getOrderInfoList(order));					// 주문정보
+		mav.addObject("ordNo"						, ordNo);													// 주문번호
 
 		mav.setViewName("order/CancelRequestForm");
 		
@@ -184,21 +181,73 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[2] = "G013_60";
 		order.setOrdDtlStatArr(ordDtlStatArr);
 		
-		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
-
-		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
-
-		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 반품사유
-		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 반품요청대상 목록
-		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
-		mav.addObject("ordNo"						, ordNo);
-		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));			// 배송정보
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G688"));			// 취소사유
+		mav.addObject("cancelRequestTargetList"		, orderChangeService.getCancelRequestTargetList(order));	// 취소요청대상 목록
+		mav.addObject("orderInfoList"				, orderService.getOrderInfoList(order));					// 주문정보
+		mav.addObject("ordNo"						, ordNo);													// 주문번호
+		
+		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));					// 배송정보
+		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));			// 전화번호국번
+		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));			// (휴대전화)번호국번
 
 		mav.setViewName("order/ReturnRequestForm");
 		
 		return mav;
 	}
 	
+	/**
+	 * 주문반품신청
+	 * @param Collection<Order> - 주문취소신청목록
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 29
+	 */
+	@PostMapping("/returnRequest")
+	@ResponseBody
+	public GagaResponse orderReturnRequest(@RequestBody OrderChange cancelReq) {
+		
+		GagaMap mav = new GagaMap();
+		
+		if (cancelReq== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		List<Order> cancelReqList = cancelReq.getCancelReqList(); // 취소요청정보
+		
+		// To Do List
+		// @ 결품취소로직 현재는 일반취소로직만존재
+		// @ 주문취소 취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 
+		
+		// 1. 환불금액정보 계산 & 조회
+		mav = orderChangeService.orderCancelRefundAmt(cancelReqList);
+		
+		// 2. 주문변경기본정보 설정
+		mav.set("ordNo"			, cancelReq.getOrdNo());
+		mav.set("chgReason"		, cancelReq.getChgReason());
+		mav.set("chgMemo"		, cancelReq.getChgMemo());
+		
+		mav.set("accountNo"		, cancelReq.getAccountNo());
+		mav.set("accountNm"		, cancelReq.getAccountNm());
+		mav.set("bankCd"		, cancelReq.getBankCd());
+		
+		mav.set("allCanYn"		, cancelReq.getAllCanYn());
+		mav.set("isCustomer"	, cancelReq.getIsCustomer());
+		
+		//3. 회수지정보추가
+		mav.set("chgerNm"		, cancelReq.getChgerNm());
+		mav.set("chgerZipNo"	, cancelReq.getChgerZipNo());
+		mav.set("chgerBaseAddr"	, cancelReq.getChgerBaseAddr());
+		mav.set("chgerDtlAddr"	, cancelReq.getChgerDtlAddr());
+		mav.set("chgerPhnno"	, cancelReq.getChgerPhnno());
+		mav.set("chgerTelno"	, cancelReq.getChgerTelno());
+		
+		// 4. 주문변경 DB 등록 (주문정보, 배송정보)
+		orderChangeService.orderReturn(mav);
+		
+		return super.ok("성공");
+	}
+	
 	
 	
 	/**
@@ -269,7 +318,6 @@ public class TsaOrderChangeController extends TsaBaseController {
 		// To Do List
 		// @ 환불계좌인증
 		
-		
 		if ("Y".equals(accountCheck)) {
 			orderChangeService.saveRefundAccount(order);
 		} else {

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

@@ -7,6 +7,7 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.style24.persistence.TscPageRequest;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -33,7 +34,6 @@ import com.style24.admin.biz.service.TsaRendererService;
 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.TsaPageRequest;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 
@@ -104,7 +104,7 @@ public class TsaOrderController extends TsaBaseController {
 		GagaMap result = new GagaMap();
 
 		order.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		order.setPageable(new TsaPageRequest(order.getPageNo() - 1, order.getPageSize()));
+		order.setPageable(new TscPageRequest(order.getPageNo() - 1, order.getPageSize()));
 
 		// 주문상태 CD_GB 변경
 		if (order.getMultiOrdStat() != null) {

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

@@ -33,7 +33,6 @@ import com.style24.admin.biz.service.TsaRendererService;
 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.TsaPageRequest;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 

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

@@ -5,6 +5,7 @@ import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.style24.persistence.TscPageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.InputStreamResource;
@@ -23,7 +24,6 @@ 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.TsaPageRequest;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsSearch;
@@ -125,7 +125,7 @@ public class TsaStockController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(stockService.getGoodsSizeStockCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);

+ 0 - 123
src/main/java/com/style24/persistence/TsaPageRequest.java

@@ -1,123 +0,0 @@
-package com.style24.persistence;
-
-import java.io.Serializable;
-
-import lombok.Data;
-
-/**
- * Paging
- *
- * @author gagamel
- * @since 2020. 10. 5
- */
-@SuppressWarnings("serial")
-@Data
-public class TsaPageRequest implements Serializable {
-
-	private final int pageNo;   // 페이지번호
-	private final int pageSize; // 조회할 row수
-	private final int pageUnit; // 그룹핑 페이지 단위
-	private int totalCount = 0; // 전체 row 건수
-
-	public TsaPageRequest(int pageNo, int pageSize) {
-		this(pageNo, pageSize, 10);
-	}
-
-	public TsaPageRequest(int pageNo, int pageSize, int pageUnit) {
-		if (pageNo < 0) {
-			throw new IllegalArgumentException("Current page index must not be less than zero!");
-		}
-
-		if (pageSize < 1) {
-			throw new IllegalArgumentException("Page size must not be less than one!");
-		}
-
-		if (pageUnit < 1) {
-			throw new IllegalArgumentException("Page unit must not be less than one!");
-		}
-
-		this.pageNo = pageNo;
-		this.pageSize = pageSize;
-		this.pageUnit = pageUnit;
-	}
-
-	public int getPageNo() {
-		return pageNo + 1;
-	}
-
-	public int getOffset() {
-		return pageNo * pageSize;
-	}
-
-	public int getStartRow() {
-		return pageNo * pageSize + 1;
-	}
-
-	public int getEndRow() {
-		return getOffset() + pageSize;
-	}
-
-	public int getPageGroup() {
-		return pageNo / pageUnit + 1;
-	}
-
-	public void setTotalCount(int totalCount) {
-		this.totalCount = totalCount;
-	}
-
-	public int getTotalPage() {
-		int totalPage = totalCount / pageSize;
-		if (totalCount % pageSize > 0) {
-			totalPage++;
-		}
-		return totalPage;
-	}
-
-	public String getGeneratedPagination() {
-		int firstCount = (getPageGroup() - 1) * pageUnit + 1;
-		int loopCount = firstCount + pageUnit;
-		if (loopCount > getTotalPage()) {
-			loopCount = getTotalPage() + 1;
-		}
-
-		StringBuffer pageTag = new StringBuffer();
-		if (!(firstCount == 1 && loopCount == 1)) {
-			if (getPageNo() == 1) {
-				pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n");
-			} else {
-				pageTag.append("<a class=\"arrow\" href=\"#pageNo=1\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n");
-			}
-
-			if (getPageGroup() == 1) {
-				pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n");
-			} else {
-				pageTag.append("<a class=\"arrow\" href=\"#pageNo=").append((getPageGroup() - 1) * pageUnit).append("\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n");
-			}
-
-			for (int i = firstCount; i < loopCount; i++) {
-				if (getPageNo() == i) {
-					pageTag.append("<a class=\"num on\" href=\"#\">").append(i).append("</a>\n");
-				} else {
-					pageTag.append("<a class=\"num\" href=\"#pageNo=").append(i).append("\">").append(i).append("</a>\n");
-				}
-			}
-
-			if (loopCount <= (getTotalPage() + 1)) {
-				if (getPageNo() == getTotalPage()) {
-					pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n");
-					pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n");
-				} else {
-					pageTag.append("<a class=\"arrow\" href=\"#pageNo=").append(getPageGroup() * pageUnit + 1).append("\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n");
-					pageTag.append("<a class=\"arrow\" href=\"#pageNo=").append(getTotalPage()).append("\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n");
-				}
-			}
-		}
-		return pageTag.toString();
-	}
-
-	@Override
-	public String toString() {
-		return String.format("Page request [pageNo: %d, pageSize %d, pageUnit %d]", getPageNo(), pageSize, pageUnit);
-	}
-
-}

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

@@ -1,7 +1,7 @@
 package com.style24.persistence.domain;
 
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 import java.util.ArrayList;
@@ -78,7 +78,7 @@ public class Coupon extends TscBaseDomain {
     private String  cateList;                // 카테고리 리스트
 
     // Pagination
-    private TsaPageRequest pageable;
+    private TscPageRequest pageable;
     private int pageNo = 1;
     private int pageSize = 50;
     private int pageUnit = 10;

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

@@ -3,7 +3,6 @@ package com.style24.persistence.domain;
 import java.util.Collection;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;

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

@@ -1,8 +1,8 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 import java.util.List;
@@ -46,7 +46,7 @@ public class FreeGoodsPromotion extends TscBaseDomain {
 	private String gbn;					// 팝업 구분 : C=등록, U=수정
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

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

@@ -1,11 +1,7 @@
 package com.style24.persistence.domain;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
-import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
-import java.util.Collection;
 
 /**
  * 품목 Domain
@@ -24,7 +20,8 @@ public class FreeGoodsSectionVal {
 	private int limitQty;				// 한정 수량
 	private int leftQty;				// 잔여 수량
 	private String sectionGb;			// 사은품 조건 구분(G810_10|수량, G810_11|금액)
-	private String sectionVal;			// 구간 설정 값 | 구간 할인 시작 (수량이상, 금액이상)
+	private String sectionVal;				// 구간 설정 값 | 구간 할인 시작 (수량이상, 금액이상)
+	private String productCd;			// 사은품 코드
 	private String itemCd;				// 사은품ID
 	private String itemOptCd1;			// ??
 	private String itemOptCd2;			// ??

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

@@ -3,9 +3,9 @@ package com.style24.persistence.domain;
 import java.util.Collection;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -178,7 +178,7 @@ public class Goods extends TscBaseDomain {
 	private String goodsComposeList; // 상품 구성상품
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

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

@@ -1,9 +1,9 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -107,7 +107,7 @@ public class GoodsSearch extends TscBaseDomain {
 	private String[] conditionList;
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

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

@@ -1,7 +1,7 @@
 package com.style24.persistence.domain;
 
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 import java.util.Collection;
@@ -67,7 +67,7 @@ public class MoreBetter extends TscBaseDomain {
 	private String sectionGbList;
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

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

@@ -1,11 +1,9 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
-import java.util.Collection;
 
 /**
  * 품목 Domain

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

@@ -1,9 +1,9 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -26,9 +26,11 @@ public class Order extends TscBaseDomain {
 	private String ordNm;
 	private String ordTelno;
 	private String siteCd;
+	private String siteCdNm;
 	private int npayOrdNo;
 	private String frontGb;
 	private String frontGbNm;
+	private String extmallNm;
 
 	// 주문상세
 	private int ordDtlNo;
@@ -222,7 +224,7 @@ public class Order extends TscBaseDomain {
 	private int gfcdUseAmt;
 	
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

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

@@ -16,6 +16,7 @@ public class SupplyCompany extends TscBaseDomain {
 
 	private String supplyCompCd;		// 공급업체코드
 	private String supplyCompNm;		// 공급업체명
+	private String supplyCompUcd;		// 상위공급업체코드
 	private int provierNo;				// ProvierNo(WMS)
 	private String bizGb;				// 사업자구분
 	private String bizNo;				// 사업자번호

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

@@ -1,8 +1,8 @@
 package com.style24.persistence.domain;
 
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -36,7 +36,7 @@ public class WmsGoods extends TscBaseDomain {
 	private int endRow;
 	private String goodsPriceYn;
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

+ 12 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -7,6 +7,7 @@
 		/* TsaBusiness.getSupplyCompanyList */
 		SELECT SC.SUPPLY_COMP_CD       /*공급업체코드*/
 		     , SC.SUPPLY_COMP_NM       /*공급업체명*/
+		     , SC.SUPPLY_COMP_UCD      /*상위공급업체코드*/
 		     , SC.BIZ_GB               /*사업자구분*/
 		     , SC.BIZ_NO               /*사업자등록번호*/
 		     , SC.BIZ_KIND             /*업종*/
@@ -65,7 +66,8 @@
 		INSERT INTO TB_SUPPLY_COMPANY (
 		       SUPPLY_COMP_CD
 		     , SUPPLY_COMP_NM
-		     , PROVIER_NO
+		     , SUPPLY_COMP_UCD
+		     , PROVIDER_NO
 		     , BIZ_GB
 		     , BIZ_NO
 		     , BIZ_KIND
@@ -102,16 +104,18 @@
 		     , UPD_DT
 		)
 		VALUES (
-		       (SELECT CONCAT('S',IFNULL(LPAD(SUBSTRING(MAX(SUPPLY_COMP_CD),2) + 1,4,'0'),'0000'))
+		       (SELECT IFNULL(MAX(SUPPLY_COMP_CD),0) + 1
 		        FROM   TB_SUPPLY_COMPANY Z
-		        WHERE  SUPPLY_COMP_CD LIKE 'S%'
 		       )
 		     , #{supplyCompNm}
-		     , (SELECT CASE WHEN MAX(PROVIER_NO) IS NULL THEN 40000   /* AS-IS 최대 수보다 크게 수정해야함*/
-		               ELSE (MAX(PROVIER_NO) + 1) END
+		     , #{supplyCompUcd}
+		     , (SELECT CASE WHEN MAX(PROVIDER_NO) IS NULL THEN
+		                        40000 /* AS-IS 최대 수보다 크게 수정해야함*/
+		                    ELSE
+		                        MAX(PROVIER_NO) + 1
+		               END
 		        FROM   TB_SUPPLY_COMPANY Z
-		        WHERE  1 = 1
-		        AND PROVIER_NO > 40000                  /* AS-IS 최대 수보다 크게 크게 수정해야함*/
+		        WHERE  PROVIDER_NO > 40000 /* AS-IS 최대 수보다 크게 크게 수정해야함*/
 		       )
 		     , #{bizGb}
 		     , #{bizNo}
@@ -155,6 +159,7 @@
 		/* TsaBusiness.updateSupplyCompany */
 		UPDATE TB_SUPPLY_COMPANY
 		SET    SUPPLY_COMP_NM = #{supplyCompNm}
+		     , SUPPLY_COMP_UCD = #{supplyCompUcd}
 		     , BIZ_GB = #{bizGb}
 		     , BIZ_NO = #{bizNo}
 		     , BIZ_KIND = #{bizKind}

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

@@ -247,7 +247,7 @@
 			AND	   A.CPN_ID = #{cpnId}
 		</if>
 		<if test="cpnNm !=null and cpnNm !=''">
-			AND	   A.CPN_NM LIKE '%'||#{cpnNm}||'%'
+			AND	   A.CPN_NM LIKE CONCAT('%',#{cpnNm},'%')
 		</if>
 		<if test="cpnType !=null and cpnType !=''">
 			AND	   A.CPN_TYPE = #{cpnType}

+ 10 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -105,4 +105,14 @@
 		</if>
 	</select>
 
+	<!-- 탈퇴회원목록 -->
+	<select id="getCustomerSecedeList" parameterType="CustomerSearch" resultType="Customer">
+		SELECT '1111'
+	</select>
+
+	<!-- 휴면회원목록 -->
+	<select id="getCustomerDormantList" parameterType="CustomerSearch" resultType="Customer">
+		SELECT '1111'
+	</select>
+
 </mapper>

+ 7 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -390,6 +390,7 @@
 	<select id="getOrderInfoList" parameterType="Order" resultType="Order">
 		/* order.getOrderInfoList */
 		SELECT O.SITE_CD
+		     , FN_GET_CODE_NM('G000', O.SITE_CD) AS SITE_CD_NM
 		     , O.MALL_GB
 		     , FN_GET_CODE_NM('G011', O.MALL_GB) AS MALL_GB_NM
 		     , O.FRONT_GB
@@ -397,13 +398,17 @@
 		            THEN 'PC'
 		            ELSE 'MOBILE'
 		             END FRONT_GB_NM
-		     , OD.EXTMALL_ID 
-		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , OD.EXTMALL_ID
+		     , (SELECT X.EXTMALL_NM
+		        FROM   TB_EXTMALL X
+		        WHERE  X.EXTMALL_ID = OD.EXTMALL_ID) AS EXTMALL_NM 
+		     , O.ORD_DT
 		     , O.ORD_NM
 		     , O.CUST_NO
 		     , O.ORD_NO
 		     , O.ORD_EMAIL
 		     , O.ORD_PHNNO
+		     , O.ORD_TELNO
 		     , C.CUST_GB 
 		     , CASE WHEN C.CUST_GB IS NULL 
 		            THEN '비회원'

+ 7 - 8
src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml

@@ -125,14 +125,14 @@
 			, REG_DT
 			, UPD_NO
 			, UPD_DT
-		) 
-		SELECT #{chgGb}
+		) values (
+			#{chgGb}
 			 , #{chgReason}
 			 , #{chgMemo}
-			 , ORD_NM
-			 , ORD_PHNNO
-			 , ORD_TELNO
-			 , ORD_EMAIL
+			 , #{chgerNm}
+			 , #{chgerPhnno}
+			 , #{chgerTelno}
+			 , #{chgerEmail}
 			 , #{chgerZipNo}
 			 , #{chgerBaseAddr}
 			 , #{chgerDtlAddr}
@@ -143,8 +143,7 @@
 			 , SYSDATE()
 			 , #{updNo}
 			 , SYSDATE()
-		FROM   TB_ORDER  
-		WHERE  ORD_NO = #{ordNo}
+		)
 	</insert>
 
 	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->

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

@@ -26,6 +26,7 @@
 		<!-- 검색 조건 -->
 		<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" />		<!-- 공급업체 목록 검색 조건은 업체명으로만 -->
 
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
@@ -119,6 +120,9 @@
 		$(document).ready(function() {
 			// Create a agGrid
 			gagaAgGrid.createGrid('gridComapanyPopupList', gridOptionsCompanyPopupList);
+
+			//  조회
+			$('#btnSearchCompanyList').trigger('click');
 		});
 		/*]]>*/
 	</script>

+ 37 - 24
src/main/webapp/WEB-INF/views/customer/CustomerActiveListForm.html

@@ -54,7 +54,7 @@
 
 					<th class="dashR">사이트</th>
 					<td class="dashR">
-						<select name="siteCd"> <!-- 회원구분(공통코드G100) -->
+						<select name="siteCd">
 							<option value="">전체</option>
 							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 						</select>
@@ -72,7 +72,7 @@
 				<tr>
 					<th class="dashR">회원구분</th>
 					<td class="dashR">
-						<select name="custGb"> <!-- 회원구분(공통코드G100) -->
+						<select name="custGb">
 							<option value="">전체</option>
 							<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 						</select>
@@ -80,7 +80,7 @@
 
 					<th class="dashR">회원등급</th>
 					<td class="dashR">
-						<select name="custGrade"> <!-- 회원등급(공통코드G110) -->
+						<select name="custGrade">
 							<option value="">전체</option>
 							<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 						</select>
@@ -88,7 +88,7 @@
 
 					<th class="dashR">관리대상</th>
 					<td class="dashR">
-						<select name="managedRsn"> <!-- 관리대상지정사유(공통코드G120) -->
+						<select name="managedRsn">
 							<option value="">전체</option>
 							<option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 						</select>
@@ -125,7 +125,7 @@
 
 	<!-- 리스트 영역 -->
 	<div class="panelStyle">
-		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham lh60"></div>
+		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
 	</div>
 	<!-- //리스트 영역 -->
 </div>
@@ -141,7 +141,7 @@
 	// 관리대상
 	const managedRsnList = gagajf.convertToArray([[${managedRsnList}]]);
 	// 성별
-	const genderGb = {"F":"여성", "M":"남성"};
+	const genderGb = {"G007_F":"여성", "G007_M":"남성"};
 
 	// specify the columns
 	const columnDefs = [
@@ -181,10 +181,6 @@
 			headerName: "성별", field:'sexGb', width:50, cellClass: 'text-center',
 			valueGetter: function (params) { return gagaAgGrid.lookupValue(genderGb, params.data.sexGb); }
 		},
-		{
-			headerName: "생년월일", field:'birthYmd', width:90, cellClass: 'text-center', hide:true,
-			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.birthYmd); }
-		},
 		{headerName: "기본주소", field:'homeBaseAddr', width:350, cellClass: 'text-center'},
 		{headerName: "상세주소", field:'homeDtlAddr', width:250, cellClass: 'text-center'},
 		{headerName: "수신동의(SMS)", field:'smsAgreeYn', width:110, cellClass: 'text-center'},
@@ -194,9 +190,6 @@
 	// Get GridOptions
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
 
-	// 이미지가 있을 경우 높이 지정
-	gridOptions.rowHeight = 60;
-
 	// 셀 클릭 이벤트
 	gridOptions.onCellClicked = function(event) {
 		 if (event.colDef.field == 'custNm') {
@@ -207,42 +200,50 @@
 
 	// 조회
 	$('#btnSearch').on('click', function() {
-		// 유효성 체크
-		let validation = fnValidationCheck();
-		if (!validation) {
-			return;
+		fnSearch();
+	});
+
+	//엔터키 조회
+	$('#searchForm input[name=cellPhnno], #searchForm input[name=searchNm]').on('keypress' ,function (event) {
+		if (event.which === 13) {
+			fnSearch();
 		}
-		// Fetch data
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
 	});
-	
+
+	// 휴대폰 자동 하이픈
+	$('#searchForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
+		cfnCellPhonnHypen(this);
+	});
+
+	// 유효성 확인
 	var fnValidationCheck = function () {
 		// 입력 값 체크
 		const $searchGb = $('#searchForm select[name=searchGb]');	// 검색구분
-		const $searchNm = $('#searchForm input[name=searchNm]');	// 검색내용
+		const $searchTxt = $('#searchForm input[name=searchTxt]');	// 검색내용
 		let isSearchVaild = true;
 		let validationMessage;
 
 		// 검색구분: O / 검색내용: X
 		if (!gagajf.isNull($searchGb.val())) {
-			if (gagajf.isNull($searchNm.val())) {
+			if (gagajf.isNull($searchTxt.val())) {
 				validationMessage = '내용을 입력해주세요';
 				isSearchVaild = false;
 			}
 		}
 
 		// 검색구분: X / 검색내용: O
-		if (!gagajf.isNull($searchNm.val())) {
+		if (!gagajf.isNull($searchTxt.val())) {
 			if (gagajf.isNull($searchGb.val())) {
 				validationMessage = '검색구분을 선택해주세요';
 				isSearchVaild = false;
 			}
+
 		}
 		if (!isSearchVaild) {
 			mcxDialog.alertC(validationMessage, {
 				sureBtnText: "확인",
 				sureBtnClick: function() {
-					$searchNm.focus();
+					$searchTxt.focus();
 				}
 			});
 		}
@@ -251,6 +252,17 @@
 
 	}
 
+	// 검색
+	var fnSearch = function() {
+		// 유효성 체크
+		let validation = fnValidationCheck();
+		if (!validation) {
+			return;
+		}
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	};
+
+
 	$(document).ready(function() {
 		// 공통 달력 생성
 		cfnCreateCalendar('#terms', 'stDate', 'edDate', true);
@@ -259,6 +271,7 @@
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
 	});
+
 	/*]]>*/
 </script>
 

+ 200 - 0
src/main/webapp/WEB-INF/views/customer/CustomerDormantListForm.html

@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CustomerDormantListForm.html
+ * @desc    : 휴면회원목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.14   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	<!-- //메뉴 설명 -->
+
+	<!-- 검색조건 영역 -->
+	<div class="panelStyle">
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/customer/dormant/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<table class="frmStyle" aria-describedby="검색조건">
+				<colgroup>
+					<col style="width:10%;"/>
+					<col style="width:20%;"/>
+					<col style="width:10%;"/>
+					<col style="width:15%;"/>
+					<col style="width:10%;"/>
+					<col style="width:20%;"/>
+					<col/>
+				</colgroup>
+				<tbody>
+				<tr>
+					<th class="dashR">검색구분</th>
+					<td class="dashR">
+						<select name="searchGb">
+							<option value="">선택</option>
+							<option value="custNo">회원번호 </option>
+							<option value="custNm">회원명 </option>
+							<option value="email">이메일</option>
+							<option value="custId">아이디</option>
+						</select>
+						<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
+					</td>
+					<th class="dashR">사이트</th>
+					<td class="dashR">
+						<select name="siteCd">
+							<option value="">전체</option>
+							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+						</select>
+					</td>
+					<th class="dashR">휴대폰번호(숫자만)</th>
+					<td class="dashR">
+						<input type="text" class="w200" name="cellPhnno" id="cellPhnno" maxlength="13"/>
+					</td>
+				</tr>
+				<tr>
+					<th class="dashR">휴면일</th>
+					<td class="dashR" colspan="5" id="terms">
+					</td>
+				</tr>
+				</tbody>
+			</table>
+
+			<ul class="panelBar">
+				<li class="center">
+					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+					<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+				</li>
+			</ul>
+		</form>
+	</div>
+	<!-- //검색조건 영역 -->
+
+	<!-- 리스트 영역 -->
+	<div class="panelStyle">
+		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+	</div>
+	<!-- //리스트 영역 -->
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	// 사이트목록
+	const siteList = gagajf.convertToArray([[${siteList}]]);
+
+	// specify the columns
+	const columnDefs = [
+		{
+			headerName: "사이트", field:'siteCd', width:100, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(siteList, params.data.siteCd); }
+		},
+		{headerName: "회원ID", field:'custId', width:120, cellClass: 'text-center'},
+		{headerName: "회원명", field:'custNm', width:100, cellClass: 'text-center'},
+		{headerName: "핸드폰", field:'cellPhnno', width:140, cellClass: 'text-center'},
+		{
+			headerName: "생년월일", field:'birthYmd', width:90, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.birthYmd); }
+		},
+		{
+			headerName: "휴면일자", field:'dormantDt', width:120, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.dormantDt); }
+		},
+		{headerName: "이메일", field:'email', width:220, cellClass: 'text-center'}
+	];
+
+	// Get GridOptions
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+
+	}
+
+	// 조회
+	$('#btnSearch').on('click', function() {
+		fnSearch();
+	});
+
+	//엔터키 조회
+	$('#searchForm input[name=cellPhnno], #searchForm input[name=searchNm]').on('keypress', function (event) {
+		if (event.which === 13) {
+			fnSearch();
+		}
+	});
+
+	// 휴대폰 자동 하이픈
+	$('#searchForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
+		cfnCellPhonnHypen(this);
+	});
+
+	// 유효성 확인
+	var fnValidationCheck = function () {
+		// 입력 값 체크
+		const $searchGb = $('#searchForm select[name=searchGb]');	// 검색구분
+		const $searchTxt = $('#searchForm input[name=searchTxt]');	// 검색내용
+		let isSearchVaild = true;
+		let validationMessage;
+
+		// 검색구분: O / 검색내용: X
+		if (!gagajf.isNull($searchGb.val())) {
+			if (gagajf.isNull($searchTxt.val())) {
+				validationMessage = '내용을 입력해주세요';
+				isSearchVaild = false;
+			}
+		}
+
+		// 검색구분: X / 검색내용: O
+		if (!gagajf.isNull($searchTxt.val())) {
+			if (gagajf.isNull($searchGb.val())) {
+				validationMessage = '검색구분을 선택해주세요';
+				isSearchVaild = false;
+			}
+
+		}
+		if (!isSearchVaild) {
+			mcxDialog.alertC(validationMessage, {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$searchTxt.focus();
+				}
+			});
+		}
+
+		return isSearchVaild;
+
+	}
+
+	// 검색
+	var fnSearch = function() {
+		// 유효성 체크
+		let validation = fnValidationCheck();
+		if (!validation) {
+			return;
+		}
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	};
+
+	$(document).ready(function() {
+		// 공통 달력 생성
+		cfnCreateCalendar('#terms', 'stDate', 'edDate', true);
+		$('.btnToday').trigger('click');
+
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+
+	/*]]>*/
+</script>
+
+</html>

+ 209 - 0
src/main/webapp/WEB-INF/views/customer/CustomerSecedeListForm.html

@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CustomerSecedeListForm.html
+ * @desc    : 탈퇴회원목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.14   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	<!-- //메뉴 설명 -->
+
+	<!-- 검색조건 영역 -->
+	<div class="panelStyle">
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/customer/secede/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<table class="frmStyle" aria-describedby="검색조건">
+				<colgroup>
+					<col style="width:10%;"/>
+					<col style="width:20%;"/>
+					<col style="width:10%;"/>
+					<col style="width:15%;"/>
+					<col style="width:10%;"/>
+					<col style="width:20%;"/>
+					<col/>
+				</colgroup>
+				<tbody>
+				<tr>
+					<th class="dashR">검색구분</th>
+					<td class="dashR">
+						<select name="searchGb">
+							<option value="">선택</option>
+							<option value="custNo">회원번호 </option>
+							<option value="custNm">회원명 </option>
+							<option value="email">이메일</option>
+							<option value="custId">아이디</option>
+						</select>
+						<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
+					</td>
+					<th class="dashR">사이트</th>
+					<td class="dashR">
+						<select name="siteCd">
+							<option value="">전체</option>
+							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+						</select>
+					</td>
+				</tr>
+				<tr>
+					<th class="dashR">탈퇴사유</th>
+					<td class="dashR">
+						<select name="secedeGb" class="w200">
+							<option value="">전체</option>
+							<option th:if="${secedeGbList}" th:each="oneData, status : ${secedeGbList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+						</select>
+					</td>
+					<th class="dashR">휴대폰번호(숫자만)</th>
+					<td class="dashR">
+						<input type="text" class="w200" name="cellPhnno" id="cellPhnno" maxlength="13"/>
+					</td>
+				</tr>
+				<tr>
+					<th class="dashR">탈퇴일</th>
+					<td class="dashR" colspan="3" id="terms">
+					</td>
+				</tr>
+				</tbody>
+			</table>
+
+			<ul class="panelBar">
+				<li class="center">
+					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+					<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+				</li>
+			</ul>
+		</form>
+	</div>
+	<!-- //검색조건 영역 -->
+
+	<!-- 리스트 영역 -->
+	<div class="panelStyle">
+		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+	</div>
+	<!-- //리스트 영역 -->
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	// 사이트목록
+	const siteList = gagajf.convertToArray([[${siteList}]]);
+
+	// specify the columns
+	const columnDefs = [
+		{
+			headerName: "사이트", field:'siteCd', width:100, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(siteList, params.data.siteCd); }
+		},
+		{headerName: "회원ID", field:'custId', width:120, cellClass: 'text-center'},
+		{headerName: "회원명", field:'custNm', width:100, cellClass: 'text-center'},
+		{headerName: "핸드폰", field:'cellPhnno', width:140, cellClass: 'text-center'},
+		{
+			headerName: "생년월일", field:'birthYmd', width:90, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.birthYmd); }
+		},
+		{
+			headerName: "탈퇴일자", field:'secedeDt', width:120, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.secedeDt); }
+		},
+		{headerName: "이메일", field:'email', width:220, cellClass: 'text-center'}
+	];
+
+	// Get GridOptions
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+
+	}
+
+	// 조회
+	$('#btnSearch').on('click', function() {
+		fnSearch();
+	});
+
+	//엔터키 조회
+	$('#searchForm input[name=cellPhnno], #searchForm input[name=searchNm]').on('keypress', function (event) {
+		if (event.which === 13) {
+			fnSearch();
+		}
+	});
+
+	// 휴대폰 자동 하이픈
+	$('#searchForm input[name=cellPhnno]').on('input keyup keydown paste change', function () {
+		cfnCellPhonnHypen(this);
+	});
+
+	// 유효성 확인
+	var fnValidationCheck = function () {
+		// 입력 값 체크
+		const $searchGb = $('#searchForm select[name=searchGb]');	// 검색구분
+		const $searchTxt = $('#searchForm input[name=searchTxt]');	// 검색내용
+		let isSearchVaild = true;
+		let validationMessage;
+
+		// 검색구분: O / 검색내용: X
+		if (!gagajf.isNull($searchGb.val())) {
+			if (gagajf.isNull($searchTxt.val())) {
+				validationMessage = '내용을 입력해주세요';
+				isSearchVaild = false;
+			}
+		}
+
+		// 검색구분: X / 검색내용: O
+		if (!gagajf.isNull($searchTxt.val())) {
+			if (gagajf.isNull($searchGb.val())) {
+				validationMessage = '검색구분을 선택해주세요';
+				isSearchVaild = false;
+			}
+
+		}
+		if (!isSearchVaild) {
+			mcxDialog.alertC(validationMessage, {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$searchTxt.focus();
+				}
+			});
+		}
+
+		return isSearchVaild;
+
+	}
+
+	// 검색
+	var fnSearch = function() {
+		// 유효성 체크
+		let validation = fnValidationCheck();
+		if (!validation) {
+			return;
+		}
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	};
+
+	$(document).ready(function() {
+		// 공통 달력 생성
+		cfnCreateCalendar('#terms', 'stDate', 'edDate', true);
+		$('.btnToday').trigger('click');
+
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+
+	/*]]>*/
+</script>
+
+</html>

+ 93 - 21
src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html

@@ -56,7 +56,7 @@
 						<td>
 							<select name="goodsStat">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 					</tr>
@@ -65,14 +65,14 @@
 						<td>
 							<select name="supplyCompCd">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>담당MD</th>
 						<td>
 							<select name="mdId">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${mdIdList}" th:each="oneData, status : ${mdIdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${mdIdList}" th:each="oneData, status : ${mdIdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>브랜드/품목</th>
@@ -83,7 +83,7 @@
 							</select>
 							<select name="itemkindCd">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 					</tr>
@@ -92,7 +92,7 @@
 						<td>
 							<select name="formalGb">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${formalList}" th:each="oneData, status : ${formalList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></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>
@@ -103,11 +103,11 @@
 						<td>
 							<select name="styleYear">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${styleYearList}" th:each="oneData, status : ${styleYearList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${styleYearList}" th:each="oneData, status : ${styleYearList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 							<select name="seasonCd">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${seasonCdList}" th:each="oneData, status : ${seasonCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${seasonList}" th:each="oneData, status : ${seasonList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>판매가</th>
@@ -127,14 +127,10 @@
 						</td>
 						<th>반품/교환</th>
 						<td colspan='3'>
-							<label><input type="checkbox" id="changeableYn">반품불가</label>
-							<input type="hidden" name="changeableYn" class="formControl">
-							<label><input type="checkbox" id="returnableYn">교환불가</label>
-							<input type="hidden" name="returnableYn" class="formControl">
-							<label><input type="checkbox" id="returnFeeFreeYn">무료반품</label>
-							<input type="hidden" name="returnFeeFreeYn" class="formControl">
-							<label><input type="checkbox" id="changeFeeFreeYn">무료교환</label>
-							<input type="hidden" name="changeFeeFreeYn" class="formControl">
+							<label class="chkBox"><input type="checkbox" name="changeableYn"/>반품불가</label>
+							<label class="chkBox"><input type="checkbox" name="returnableYn"/>교환불가</label>
+							<label class="chkBox"><input type="checkbox" name="returnFeeFreeYn"/>무료반품</label>
+							<label class="chkBox"><input type="checkbox" name="changeFeeFreeYn"/>무료교환</label>
 						</td>
 						<th>할인율(%)</th>
 						<td>
@@ -144,11 +140,9 @@
 					</tr>
 					<tr>
 						<th>기간</th>
-						<td id="sellTerms" colspan='7'></td>
-					</tr>
-					<tr>
+						<td id="sellTerms" colspan='5'></td>
 						<th>전시여부</th>
-						<td colspan='7'>
+						<td>
 							<select name="useYn">
 								<option value=''>[전체]</option>
 								<option value='Y'>[Y] Yes</option>
@@ -157,13 +151,43 @@
 						</td>
 					</tr>
 				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#goodsCateForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
 			</form>
 		</div>
 		<!-- 검색조건 영역 -->
 
 		<!-- 리스트 영역 -->
 		<div class="panelStyle">
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">상품엑셀조회 양식 다운로드</button>
+					<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelUpLoad">엑셀조회</button>
+				</li>
+				<li class="aR">
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<!-- //상단버튼 영역  -->
+			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham lh60"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="goodsListPagination"></div>
+				</li>
+			</ul>
 		</div>
 		<!-- //리스트 영역 -->
 		
@@ -198,14 +222,62 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	var columnDefs = [];
+	columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: 'No', width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
+		},
+		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+			}
+		},
+		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
+		{headerName: "품목명", field: "itemkindNm", width: 250, cellClass: 'text-left'},
+		{headerName: "기존품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center' },
+		{headerName: "변경품목코드", field: "itemkindCdNew", width: 150, cellClass: 'text-center', editable : true,
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 5, required: true, onblur: '$(this).val($(this).val().toUpperCase())' }
+		}
+	];
+
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복 선택 가능
+	gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+	gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+
+	gridOptions.stopEditingWhenGridLosesFocus = true;
+
+	// 업체변경시
+	$('#goodsCateForm select[name=supplyCompCd]').on('change', function() {
+		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+		if(sessRoleCd == "G001_B000"){
+			actionUrl = '/renderer/brand/AuthBrandlist';
+		}
+		$("#goodsCateForm select[name=brandCd] option:gt(0)").remove();
+
+		cfnCreateCombo(actionUrl, $('#goodsCateForm select[name=brandCd]'), "[전체]", "");
+	});
+
 $(document).ready(function() {
 
 	cfnCreateCalendar('#sellTerms', 'searchStdt', 'searchEddt', true, '기간', 'X');
 
 	// Create a agGrid
-	//gagaAgGrid.createGrid('gridList', gridOptions);
+	gagaAgGrid.createGrid('gridList', gridOptions);
 
 });
+
 /*]]>*/
 </script>
 

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

@@ -54,7 +54,7 @@
 		
 		<!-- 리스트 영역 -->
 		<div class="panelStyle">
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham lh70"></div>
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham lh60"></div>
 		</div>
 		
 		<!-- 등록/수정 -->
@@ -215,7 +215,7 @@
 	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
 
 	// 이미지가 있을 경우 높이 지정
-	gridOptions.rowHeight = 70;
+	gridOptions.rowHeight = 60;
 	
 	// 셀 클릭 이벤트
 	gridOptions.onCellClicked = function(event) {
@@ -293,5 +293,4 @@
 /*]]>*/
 </script>
 
->>>>>>> develop
 </html>

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

@@ -416,7 +416,7 @@
 		</div>
 		</form>
 		<!-- //패널 영역2 -->
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	var sessRoleCd = [[${sessionInfo.roleCd}]];

+ 7 - 4
src/main/webapp/WEB-INF/views/marketing/CouponRetrieveForm.html → src/main/webapp/WEB-INF/views/marketing/CouponRetrievePopupForm.html

@@ -3,7 +3,7 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : CouponRetrieveForm.html
+ * @source  : CouponRetrievePopupForm.html
  * @desc    : 쿠폰조회 팝업 Page
  *============================================================================
  * STYLE24
@@ -98,7 +98,7 @@
 	let dcWayList = gagajf.convertToArray([[${dcWayList}]]);
 	
 	let columnDefsCouponList = [
-		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+// 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{
 			headerName: "사이트", field: "siteCd", width: 80, cellClass: "text-center", pinned: 'left',
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
@@ -167,7 +167,10 @@
 	];
 
 	let gridOptionsCouponList = gagaAgGrid.getGridOptions(columnDefsCouponList);
-
+	
+	gridOptionsCouponList.rowSelection = 'single';
+	gridOptionsCouponList.rowMultiSelectWithClick = true; // 클릭으로 선택 가능
+	
 	// Row double click
 	gridOptionsCouponList.onRowDoubleClicked = function(event) {
 		$('#btnConfirmCoupon').trigger('click');
@@ -190,7 +193,7 @@
 	// 확인
 	$('#btnConfirmCoupon').on('click', function() {
 		var selectedData = gagaAgGrid.selectedRowData(gridOptionsCouponList);
-		
+		console.log('selectedData.length: ' + selectedData.length);
 		if (selectedData.length == 0) {
 			mcxDialog.alert('선택된 쿠폰이 없습니다.');
 			return false;

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

@@ -137,7 +137,6 @@
 
 	// 초기화 클릭시
 	$('#btnInit').on('click', function() {
-
 		$('#searchForm')[0].reset();
 		//$("#searchForm input[type=radio]").removeClass("checked");
 		$("#searchForm input[type=checkbox]").removeClass("checked");

+ 56 - 28
src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html

@@ -68,8 +68,8 @@
 					<tr>
 						<th>적용 몰 구분<em class="required" title="필수"></em></th>
 						<td colspan="3">
-							<label class="chkBox"><input type="checkbox" name="mallCds" value="G011_10"/>자사몰</label>
-							<label class="chkBox" id="G011_20"><input type="checkbox" name="mallCds" value="G011_20"/>제휴몰</label>
+							<label class="chkBox"><input type="checkbox" id="selfYn" name="selfYn" value="Y"/>자사몰</label>
+							<label class="chkBox" id="G011_20"><input type="checkbox" id="extmallYn" name="extmallYn" value="Y"/>제휴몰</label>
 							<button type="button" class="btn btnRight btn-success btn-lg" id="btnExtmallPopup">선택</button><span id="extmallCntArea"> 선택 : <span id="extmallCnt">00</span>개</span>
 						</td>
 					</tr>
@@ -201,7 +201,7 @@
 										<div><i class="fa fa-info-circle"></i> 사은품은 최대 <font color="red">5</font>개까지 설정하실 수 있습니다.</div>
 										<div><i class="fa fa-info-circle"></i> 구매 금액 조건을 추가하시면 구매 금액 충족 조건에 맞는 것으로 지급됩니다. 구매금액 조건은 최대 2개까지만등록 하실 수 있습니다.</div>
 										<div><i class="fa fa-info-circle"></i> 장바구니에 담았을 때의 가격 기준으로 적용됩니다.(주문상품쿠폰(다운로드쿠폰)/장바구니 쿠폰 할인 적용 전 판매가)</div>
-										<label for="saleAmt">구매금액</label><input type="text" class="w300" id="saleAmt" /> <br/>
+										<label for="saleAmt">구매금액</label><input type="text" class="w300" id="saleAmt" name="sectionVal"/> <br/>
 										<span>사은품 목록</span>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddFreeGoods1">+ 사은품 선택</button>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteFreeGoods1">선택삭제</button>
@@ -214,7 +214,7 @@
 								<th>사은품 조건2<br/>(최대 2개)</th>
 								<td>
 									<div>
-										<label for="saleAmt2">구매금액</label><input type="text" class="w300" id="saleAmt2" /> <br/>
+										<label for="saleAmt2">구매금액</label><input type="text" class="w300" id="saleAmt2"  name="sectionVal2"/> <br/>
 										<span>사은품 목록</span>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddFreeGoods2">+ 사은품 선택</button>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteFreeGoods2">선택삭제</button>
@@ -269,6 +269,7 @@
 </div>
 
 <script th:inline="javascript">
+	let formId = "freeGoodsPromotionForm";
 	let FGAddGoodsStatList = gagajf.convertToArray([[${goodsStatList}]]);		// 상품 상태 리스트
 	// 공급업체 리스트 설정
 	let columnFGCompanyList = [
@@ -347,7 +348,7 @@
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "사은품 코드", field: "productNo", width: 120, cellClass: 'text-center'},
 		{headerName: "사은품명", field: "goodsNm", width: 150, cellClass: 'text-center'},
-		{headerName: "포인트액", field: "pointAmt" , width: 100, cellClass: 'text-center'
+		{headerName: "포인트액", field: "usePoint" , width: 100, cellClass: 'text-center'
 			,editable: true
 			,valueFormatter: function(params) {
 				if(params.value && params.value > 0) {
@@ -358,7 +359,7 @@
 			},
 			cellEditorParams: { maxlength: 14, validType: 'numeric'}
 		},
-		{headerName: "지급수량", field: "sendQty" , width: 100, cellClass: 'text-center'
+		{headerName: "지급수량", field: "itemQty" , width: 100, cellClass: 'text-center'
 			,editable: true
 			,valueFormatter: function(params) {
 				if(params.value && params.value > 0) {
@@ -388,45 +389,38 @@
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "사은품 코드", field: "productNo", width: 120, cellClass: 'text-center'},
 		{headerName: "사은품명", field: "goodsNm", width: 150, cellClass: 'text-center'},
-		{headerName: "포인트액", field: "pointAmt" , width: 100, cellClass: 'text-center'
+		{headerName: "포인트액", field: "usePoint" , width: 100, cellClass: 'text-center'
 			,editable: true
 			,valueFormatter: function(params) {
 				if(params.value && params.value > 0) {
 					return params.value.addComma();
 				} else {
-					return '0';
+					return 0;
 				}
-			}
-			,cellEditorParams: { maxlength: 14, validType: 'numeric'}
+			},
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
 		},
-		{headerName: "지급수량", field: "sendQty" , width: 100, cellClass: 'text-center'
+		{headerName: "지급수량", field: "itemQty" , width: 100, cellClass: 'text-center'
 			,editable: true
 			,valueFormatter: function(params) {
 				if(params.value && params.value > 0) {
 					return params.value.addComma();
 				} else {
-					return '1';
+					return 1;
 				}
 			},
 			cellEditorParams: { maxlength: 14, validType: 'numeric'}
 		},
 		{headerName: "한정수량", field: "limitQty" , width: 100, cellClass: 'text-center'
 			,editable: true
-			,valueFormatter: function(params) {
-				if(params.value && params.value > 0) {
-					return params.value.addComma();
-				} else {
-					return '0';
-				}
-			},
-			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+			,cellEditorParams: { maxlength: 14, validType: 'numeric'}
 		},
 		{headerName: "잔여수량", field: "leftQty", width: 120, cellClass: 'text-center'
 			,valueFormatter: function(params) {
 				if(params.value && params.value > 0) {
 					return params.value.addComma();
 				} else {
-					return '0';
+					return 0;
 				}
 			}
 		}
@@ -493,7 +487,7 @@
 	function fnSetSendGridListVal(gridListOption, key, inputId) {
 		let list = gagaAgGrid.getAllRowData(gridListOption);
 		let cds = [];
-		alert("aa / " + key);
+
 		for(let k = 0 ; k < list.length ; k++) {
 			cds.push(eval("list[k]." + key));
 		}
@@ -537,7 +531,7 @@
 	}
 
 	// 저장 버튼 클릭시
-	$('#freeGoodsPromotionForm #btnFreegoodsPromotionSave').on('click', function() {
+	$('#btnFreegoodsPromotionSave').on('click', function() {
 		// 각 ag-grid list 수량
 		let supplyCompCnt = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList).length;
 		let brandCnt = gagaAgGrid.getAllRowData(gridOptionsFGBrandList).length;
@@ -573,7 +567,12 @@
 
 		// 사은품조건1 필수 체크
 		if(freeGoods1Cnt < 1) {
-			mcxDialog.alert("사은품 조건1의 사은품을 등록해주세요.");
+			mcxDialog.alert("사은품 조건을 입력하세요.");
+			return false;
+		}
+
+		if($("#freeGoodsPromotionForm #saleAmt").val() != "" && $("#freeGoodsPromotionForm #saleAmt").val() < 1) {
+			mcxDialog.alert("사은품 조건1의 구매금액 조건을 설정해주세요.");
 			return false;
 		}
 
@@ -585,19 +584,48 @@
 
 		// 사은품조건2의 수량 체크
 		if(freeGoods2Cnt > 5) {
-			mcxDialog.alert("사은품 조건2의 사은품은 최대 2개까지 등록가능합니다.");
+			mcxDialog.alert("사은품 조건2의 사은품은 최대 5개까지 등록가능합니다.");
 			return false;
 		}
 
 		// 각 리스트 데이터 세팅
+		let freeGoods1Datas;
 		if(supplyCompCnt > 0) { fnSetSendGridListVal(gridOptionsFGCompanyList, "supplyCompCd", "supplyCompCds"); }		// 공급업체 설정 데이터
 		if(brandCnt > 0) { fnSetSendGridListVal(gridOptionsFGBrandList, "brandCd", "brandCds"); }						// 브랜드 설정 데이터
 		if(applyGoodsCnt > 0) { fnSetSendGridListVal(gridOptionsFGApplyGoodsList, "goodsCd", "applyGoodsCds"); }		// 적용 상품 설정 데이터
 		if(exceptGoodsCnt > 0) { fnSetSendGridListVal(gridOptionsFGExceptGoodsList, "goodsCd", "exceptGoodsCds"); }		// 제외 상품 설정 데이터
-		if(freeGoods1Cnt > 0) { fnSetSendGridListVal(gridOptionsFreeGoods1List, "productNo", "freeGoods1Cds"); }			// 사은품 조건 1
+		if(freeGoods1Cnt > 0) {
+			let gridListValue = gagaAgGrid.getAllRowData(gridOptionsFreeGoods1List);	// 기존 리스트
+			freeGoods1Datas = JSON.stringify(gridListValue);
+			//$("#freeGoodsPromotionForm #freeGoods1Cds").val(jsonData);
+		}
+		//if(freeGoods1Cnt > 0) { fnSetSendGridListVal(gridOptionsFreeGoods1List, "productNo", "freeGoods1Cds"); }			// 사은품 조건 1
 		if(freeGoods2Cnt > 0) { fnSetSendGridListVal(gridOptionsFreeGoods1List, "productNo", "freeGoods2Cds"); }			// 사은품 조건 2
+
+
+		// var params =  $(formId).serialize();
+		var data = {  freegiftNm : $("#freeGoodsPromotionForm input[name=freegiftNm]").val()
+					, freegiftStdt : $("#freeGoodsPromotionForm input[name=freegiftStdt]").val()
+					, freegiftEddt : $("#freeGoodsPromotionForm input[name=freegiftEddt]").val()
+					, selfYn : $("#freeGoodsPromotionForm input[name=selfYn]").val()
+					, extmallYn : $("#freeGoodsPromotionForm input[name=extmallYn]").val()
+					, extmallIds : $("#freeGoodsPromotionForm input[name=extmallIds]").val()
+					, supplyCompCds : $("#freeGoodsPromotionForm input[name=supplyCompCds]").val()
+					, brandCds : $("#freeGoodsPromotionForm input[name=brandCds]").val()
+					, applyGoodsCds : $("#freeGoodsPromotionForm input[name=applyGoodsCds]").val()
+					, exceptGoodsCds : $("#freeGoodsPromotionForm input[name=exceptGoodsCds]").val()
+					, freeGoods1 : freeGoods1Datas
+					, freeGoods2 : $("#freeGoodsPromotionForm input[name=freeGoods2Cds]").val()
+		};
+
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/goods/search/excelupload/save', jsonData, fnGoodsExcelUploadCallBack);
 	});
 
+	var fnFreeGoodsPromotionSaveFin = function(result) {
+
+	}
+
 	// 공급업체 설정 / 업체 추가 콜백함수
 	var fnSetPopupComapnyInfo = function(result) {
 		fnSetListInfo(result, gridOptionsFGCompanyList, "supplyCompCd");
@@ -636,7 +664,7 @@
 				if(result[i].extmallId == extmallIds[j]) {	addChk = false;	}
 			}
 
-			if(addChk) {	extmallIds.push(result[i].extmallId)	};
+			if(addChk) {	extmallIds.push(result[i].extmallId)	}
 		}
 
 		var jsonData = JSON.stringify(extmallIds);
@@ -650,7 +678,7 @@
 	});
 	// 공급업체 설정 업체 추가 버튼 클릭시
 	$('#freeGoodsPromotionForm #btnAddCompany').on('click', function() {
-		cfnOpenCompanyListPopup("fnSetPopupComapnyInfo");
+		cfnOpenCompanyListPopup("fnSetPopupComapnyInfo", "M");
 	});
 	// 브랜드 추가 버튼 클릭시 (복수 브랜드때 수정 필요)
 	$('#freeGoodsPromotionForm #btnAddBrand').on('click', function() {

+ 43 - 59
src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -404,7 +404,7 @@ var columnCancelReqList = [
 		]
 	}
 ];
-var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
+var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
 
 // Add on options
 gridOptionsCancelReqList.suppressRowClickSelection = true;
@@ -657,7 +657,7 @@ var columnCancelReqToBeList = [
 		]
 	}
 ];
-var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
 
 // 3. 배송비정보(환불정보)
 var columnDelvCdList = [
@@ -763,7 +763,7 @@ var columnDelvCdList = [
 		]
 	}
 ];
-var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 
 // 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
@@ -775,45 +775,7 @@ var columnDefsRefundAccountInfo = [
 	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
 ];
 
-var gridOptionsRefundAccountInfo = orderAgGrid.getGridOptions(columnDefsRefundAccountInfo);
-</script>
-
-<!-- AgGrid 컬럼 세팅 -->
-<script>
-// 공통1. 주문상세 그리드 옵션 정보 적용
-var orderAgGrid = {
-	getGridOptions : function(colDefs) {
-		return {
-			columnDefs					: colDefs
-			, detailCellRendererParams	: {
-				detailGridOptions	: {
-					columnDefs				: []
-					, defaultColDef			: {
-						resizable: true
-					}
-					, suppressLoadingOverlay: false
-					, onGridReady			: function (params) {
-						params.api.setDomLayout('autoHeight');
-					}
-					, onFirstDataRendered	: function (params) {
-						params.api.sizeColumnsToFit();
-					}
-				}
-				, getDetailRowData: function (params) {
-					params.successCallback(params.data.orderDetailList);
-				}
-			}
-			, defaultColDef: {
-				resizable: true
-			}
-			, isRowMaster: function (dataItem) {
-				return dataItem ? dataItem.orderDetailList.length > 1 : false;
-			}
-			, suppressRowTransform: true
-			, enableRangeSelection: true
-		};
-	}
-}
+var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
 </script>
 
 <script>
@@ -899,19 +861,27 @@ var fnCalculateRefundAmt = function (obj) {
 
 //  사유
 var fnChangeChgReason = function(reasonCd){
-	var arrREasonCd = reasonCd.split(":");
+	var arrReasonCd = reasonCd.split(":");
+	var customerReasonArr = ['G686_10'];
+
+	isCustomer = false;
 	
 	// 취소, 반품, 교환 사유 판단
-	if (arrREasonCd[0] == 'G686_10') {
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == arrReasonCd[0]) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유설정 회사, 고객
+	if (isCustomer) {
 		$("#imputeReason").text("고객");
-		isCustomer = true;
 	} else {
 		$("#imputeReason").text("회사");
-		isCustomer = false;
 	}
 
-	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
 
 	fnCalculateRefundAmt();			//환불예정금액 계산.
 }
@@ -971,6 +941,12 @@ var fnCancelRequestPartOk = function () {
 		bankCd 		= refundAccount[0].bankCd;
 	}
 	
+	// 5. 추가정보설정
+	var chgerNm 	= orderInfoList[0].ordNm;
+	var chgerEmail 	= orderInfoList[0].ordEmail;
+	var chgerPhnno 	= orderInfoList[0].ordPhnno;
+	var chgerTelno 	= orderInfoList[0].ordTelno;
+	
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
 		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
@@ -981,6 +957,13 @@ var fnCancelRequestPartOk = function () {
 		,"bankCd" 			: bankCd
 		,"allCanYn" 		: allCanYn
 		,"isCustomer" 		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipNo"		: ""
+		,"chgerBaseAddr"	: ""
+		,"chgerDtlAddr"		: ""
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1021,26 +1004,27 @@ var fnBindOrderRfAccountInfo = function () {
 };
 
 $(document).ready(function() {
-	// 1. Create a agGrid
+	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
-	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	
 	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
+	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
 	
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
+	// 2. 그리드 데이타 싱크작업
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);								// 주문정보
 	
-	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
+	gagaAgGrid.hideStatusBar('gridDelvCdList');
+	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
 	
-	// 취소정보계산
+	// 3. 환불정보계산
 	fnCalculateRefundAmt(null);
 	
-	// 그리드 숨김처리
+	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
 	if (payMeans !== 'G014_20') {
 		$('#wrapRefundAccount').addClass("off");
-	}
-	
-	if (payMeans === 'G014_20' && mallGb === 'G011_10' ) {
-		// 환불계좌정보
 		fnBindOrderRfAccountInfo();
 	}
 });

+ 101 - 71
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -28,7 +28,61 @@
 				<input type="hidden" name="orderEmail"/>
 				
 				<h4>기본정보</h4>
-				<div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				<!-- <div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div> -->
+
+				<!-- TABLE -->
+				<table class="tableStyle">
+					<colgroup>
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+					</colgroup>
+					<thead>
+						<tr>
+							<th>사이트</th>
+							<th>몰구분</th>
+							<th>웹구분</th>
+							<th>외부몰</th>
+							<th>주문일시</th>
+							<th>주문자</th>
+							<th>고객번호</th>
+							<th>주문번호</th>
+							<th>이메일</th>
+							<th>핸드폰번호</th>
+							<th>회원구분</th>
+							<th>관리대상</th>
+							<th>등급</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td th:text="${orderInfo[0].siteCdNm}"></td>
+							<td th:text="${orderInfo[0].mallGbNm}"></td>
+							<td th:text="${orderInfo[0].frontGbNm}"></td>
+							<td th:text="${orderInfo[0].extmallNm}"></td>
+							<td th:text="${orderInfo[0].ordDt}"></td>
+							<td th:text="${orderInfo[0].ordNm}"></td>
+							<td th:text="${orderInfo[0].custNo}"></td>
+							<td th:text="${orderInfo[0].ordNo}"></td>
+							<td th:text="${orderInfo[0].ordEmail}"></td>
+							<td th:text="${orderInfo[0].ordPhnno}"></td>
+							<td th:text="${orderInfo[0].custGbNm}"></td>
+							<td th:text="${orderInfo[0].managedRsnNm}"></td>
+							<td th:text="${orderInfo[0].custGradeNm}"></td>
+						</tr>
+					</tbody>
+				</table>
+				<!-- //TABLE -->
 									
 				<h4>주문상품정보</h4>
 				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnExchange" style="margin-left:10px;" >교환요청</button>
@@ -128,41 +182,6 @@ var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
 
 <!-- AgGrid 컬럼 세팅 -->
 <script>
-// 공통1. 주문상세 그리드 옵션 정보 적용
-var orderAgGrid = {
-	getGridOptions : function(colDefs) {
-		return {
-			columnDefs					: colDefs
-			, detailCellRendererParams	: {
-				detailGridOptions	: {
-					columnDefs				: []
-					, defaultColDef			: {
-						resizable: true
-					}
-					, suppressLoadingOverlay: false
-					, onGridReady			: function (params) {
-						params.api.setDomLayout('autoHeight');
-					}
-					, onFirstDataRendered	: function (params) {
-						params.api.sizeColumnsToFit();
-					}
-				}
-				, getDetailRowData: function (params) {
-					params.successCallback(params.data.orderDetailList);
-				}
-			}
-			, defaultColDef: {
-				resizable: true
-			}
-			, isRowMaster: function (dataItem) {
-				return dataItem ? dataItem.orderDetailList.length > 1 : false;
-			}
-			, suppressRowTransform: true
-			, enableRangeSelection: true
-		};
-	}
-}
-
 // 1.주문기본정보 그리드 바인딩
 var columnDefsOrderInfo = [
 	{
@@ -219,7 +238,7 @@ var columnDefsOrderInfo = [
 	{headerName: "관리대상"	, field: "managedRsnNm"	, width: 80		, cellClass: 'text-center'},
 	{headerName: "등급"		, field: "custGradeNm"	, width: 80		, cellClass: 'text-center'}
 ];
-var gridOptionsOrderInfo = orderAgGrid.getGridOptions(columnDefsOrderInfo);
+var gridOptionsOrderInfo = gagaAgGrid.getGridOptions(columnDefsOrderInfo);
 
 // 2.상품별 상세정보
 var columnDefsGoodsInfo = [
@@ -515,14 +534,14 @@ var columnDefsGoodsInfo = [
 		]
 	}
 ];
-var gridOptionsGoodsInfo = orderAgGrid.getGridOptions(columnDefsGoodsInfo);
+var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
 
 // 2.5 주문사은품정보
 var columnDefsOrderFreeGiftInfo = [
-	{headerName: "주문사은품번호"	, field: "ordFreegiftSq"	, width: 100, cellClass: 'text-center', hide: true},
-	{headerName: "주문번호"		, field: "ordNo"			, width: 100, cellClass: 'text-center'},
+	{headerName: "주문사은품번호"	, field: "ordFreegiftSq"	, width: 120, cellClass: 'text-center', hide: true},
+	{headerName: "주문번호"		, field: "ordNo"			, width: 120, cellClass: 'text-center'},
 	{headerName: "사은품프로모션"	, field: "freegiftSq"		, width: 100, cellClass: 'text-center', hide: true},
-	{headerName: "사은품프로모션명"	, field: "freegiftNm"		, width: 200, cellClass: 'text-center'},
+	{headerName: "사은품프로모션명"	, field: "freegiftNm"		, width: 250, cellClass: 'text-center'},
 	{headerName: "사은품혜택번호"	, field: "freegiftValSq"	, width: 100, cellClass: 'text-center', hide: true},
 	{
 		headerName			: "사용포인트"		
@@ -541,11 +560,11 @@ var columnDefsOrderFreeGiftInfo = [
 	{headerName: "옵션코드2"		, field: "optCd2"			, width: 100, cellClass: 'text-center'},
 	{headerName: "삭제여부"		, field: "delYn"			, width: 100, cellClass: 'text-center'}
 ];
-var gridOptionsOrderFreeGiftInfo = orderAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
+var gridOptionsOrderFreeGiftInfo = gagaAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
 
 // 3.배송정보
 var columnDefsDeliveryInfo = [
-	{headerName: "배송지번호"		, field: "delvAddrSq"	, width: 100, cellClass: 'text-center'},
+	{headerName: "배송지번호"		, field: "delvAddrSq"	, width: 80, cellClass: 'text-center'},
 	{headerName: "받는분"			, field: "recipNm"		, width: 80, cellClass: 'text-left', editable: true},
 	{headerName: "핸드폰번호"		, field: "recipPhnno"	, width: 120, cellClass: 'text-left', editable: true},
 	{headerName: "전화번호"		, field: "recipTelno"	, width: 120, cellClass: 'text-left', editable: true},
@@ -555,18 +574,22 @@ var columnDefsDeliveryInfo = [
 		, width			: 200
 		, cellClass		: 'text-left'
 		, cellRenderer	: function (params) {
-			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('grid');\">우편번호찾기</button>";
+			var rtnStr = ""
+			
+			rtnStr += params.value;
+			rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('"+params.data.delvAddrSq+"');\">우편번호찾기</button>";
+			
+			return rtnStr;
 		}
 	},
-	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 350, cellClass: 'text-left'},
+	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 300, cellClass: 'text-left'},
 	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 200, cellClass: 'text-left', editable: true},
 	{headerName: "배송메모"		, field: "delvMemo"			, width: 280, cellClass: 'text-left', editable: true}
 ];
-var gridOptionsDeliveryInfo = orderAgGrid.getGridOptions(columnDefsDeliveryInfo);
+var gridOptionsDeliveryInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryInfo);
 
 // 4.결제정보
 var columnDefsPaymentInfo = [
-	{headerName: "에스크로여부"		, field: "escrowYn"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "결제수단"		, field: "payMeansNm"	, width: 100	, cellClass: 'text-center'},
 	{headerName: "카드(은행)"		, field: "cardNm"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "할부(입금계좌)"	, field: "cardMips"		, width: 150	, cellClass: 'text-center'},
@@ -610,7 +633,7 @@ var columnDefsPaymentInfo = [
 	},
 	{headerName: "계좌만료일"	, field: "vaDeadline"	, width: 150	, cellClass: 'text-center'}
 ];
-var gridOptionsPaymentInfo = orderAgGrid.getGridOptions(columnDefsPaymentInfo);
+var gridOptionsPaymentInfo = gagaAgGrid.getGridOptions(columnDefsPaymentInfo);
 
 // 5.배송비
 var columnDefsDeliveryFeeInfo = [
@@ -628,14 +651,14 @@ var columnDefsDeliveryFeeInfo = [
 	{
 		headerName			: "배송비정산일시"	
 		, field				: "delvUsacDt"
-		, width				: 180
+		, width				: 140
 		, cellClass			: 'text-center' 
 		, cellRenderer: function(params) {
 			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
 		}
 	}
 ];
-var gridOptionsDeliveryFeeInfo = orderAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
+var gridOptionsDeliveryFeeInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
 
 // 6. 반품/교환 정보
 var columnDefsOrderChangeInfo = [
@@ -717,7 +740,7 @@ var columnDefsOrderChangeInfo = [
 	},
 	{headerName: "회수송장번호", field: "wdInvoiceNo", width: 90, cellClass: 'text-center'}
 ];
-var gridOptionsOrderChangeInfo = orderAgGrid.getGridOptions(columnDefsOrderChangeInfo);
+var gridOptionsOrderChangeInfo = gagaAgGrid.getGridOptions(columnDefsOrderChangeInfo);
 
 // 7.환불정보
 var columnDefsRefundInfo = [
@@ -745,7 +768,7 @@ var columnDefsRefundInfo = [
 	},
 	{headerName: "환불처리자"		, field: "updNm"		, width: 120		, cellClass: 'text-center'}
 ];
-var gridOptionsRefundInfo = orderAgGrid.getGridOptions(columnDefsRefundInfo);
+var gridOptionsRefundInfo = gagaAgGrid.getGridOptions(columnDefsRefundInfo);
 
 // 8.상담내역
 var columnDefsOrderCounselInfo = [
@@ -754,7 +777,7 @@ var columnDefsOrderCounselInfo = [
 	{
 		headerName		: "질문제목"
 		, field			: "questTitle"
-		, width			: 400
+		, width			: 250
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
 			return '<a href="javascript:void(0);" onclick="cfnOpenOneToOneAskDetailPopup(\'' + params.data.counselSq + '\')">' + params.value + '</a>';
@@ -781,7 +804,7 @@ var columnDefsOrderCounselInfo = [
 	{headerName: "답변자"			, field: "ansNm"	, width: 80		, cellClass: 'text-center'},
 	{headerName: "삭제여부"		, field: "delYn"	, width: 80		, cellClass: 'text-center'}
 ];
-var gridOptionsOrderCounselInfo = orderAgGrid.getGridOptions(columnDefsOrderCounselInfo);
+var gridOptionsOrderCounselInfo = gagaAgGrid.getGridOptions(columnDefsOrderCounselInfo);
 
 // 9.주문메모
 var columnDefsOrderMemoInfo = [
@@ -789,13 +812,13 @@ var columnDefsOrderMemoInfo = [
 	{
 		headerName		: "등록자"
 		, field			: "regNm"
-		, width			: 130
+		, width			: 100
 		, cellClass		: 'text-center'
 	},
 	{
 		headerName		: "관리메모"
 		, field			: "memo"
-		, width			: 250
+		, width			: 150
 		, cellClass		: 'text-left'
 		, cellRenderer	: function (params) {
 			var retStr = '';
@@ -821,7 +844,7 @@ var columnDefsOrderMemoInfo = [
 		}
 	},
 ];
-var gridOptionsOrderMemoInfo = orderAgGrid.getGridOptions(columnDefsOrderMemoInfo);
+var gridOptionsOrderMemoInfo = gagaAgGrid.getGridOptions(columnDefsOrderMemoInfo);
 </script>
 
 <script>
@@ -833,17 +856,6 @@ var fnSetGridHeightInit = function () {
 		_girdRowH1 = 33
 		_girdRowH2 = 80;
 	}
-	
-	//$('#gridOrderInfo').css('height', _girdRowH1 + _girdRowH);					//기본정보
-	//$('#gridDeliveryInfo').css('height', _girdRowH1 + _girdRowH);					//배송정보
-	//if (orderGoodsInfo != null && orderGoodsInfo.length > 0) $('#gridOrderGoodsInfo').css('height', _girdRowH2 + _girdRowH * orderGoodsInfo.length);
-	//if (orderPaymentInfo != null && orderPaymentInfo.length > 0) $('#gridPaymentInfo').css('height', _girdRowH1 + _girdRowH * orderPaymentInfo.length);
-	//if (orderDeliveryFeeInfo != null && orderDeliveryFeeInfo.length > 0) $('#gridDeliveryFeeInfo').css('height', _girdRowH1 + _girdRowH * orderDeliveryFeeInfo.length);
-	//if (orderChangeInfo != null && orderChangeInfo.length > 0) $('#gridOrderChangeInfo').css('height', _girdRowH1 + _girdRowH * orderChangeInfo.length);
-	//if (orderRefundInfo != null && orderRefundInfo.length > 0) $('#gridOrderRefundInfo').css('height', _girdRowH1 + _girdRowH * orderRefundInfo.length);
-	//if (orderCounselInfo != null && orderCounselInfo.length > 0) $('#gridOrderCounselInfo').css('height', _girdRowH1 + _girdRowH * orderCounselInfo.length);
-	//if (orderAdminMemoInfo != null && orderAdminMemoInfo.length > 0) $('#gridOrderMemoInfo').css('height', _girdRowH1 + _girdRowH * orderAdminMemoInfo.length);
-	//if (orderRfAccountInfo != null && orderRfAccountInfo.length > 0) $('#gridOptionsRefundAccountInfo').css('height', _girdRowH1 + _girdRowH * orderRfAccountInfo.length);
 }
 </script>
 
@@ -871,7 +883,7 @@ var fnOrderDetailClose = function(){
 $(document).ready(function () {
 	
 	// 1. 그리드 그리기
-	gagaAgGrid.createGrid('gridOrderInfo'					, gridOptionsOrderInfo);			// 기본정보
+	//gagaAgGrid.createGrid('gridOrderInfo'					, gridOptionsOrderInfo);			// 기본정보
 	gagaAgGrid.createGrid('gridOrderGoodsInfo'				, gridOptionsGoodsInfo);			// 상품정보
 	gagaAgGrid.createGrid('gridOrderFreeGiftInfo'			, gridOptionsOrderFreeGiftInfo);	// 사은품정보
 	gagaAgGrid.createGrid('gridDeliveryAddrInfo'			, gridOptionsDeliveryInfo);			// 배송정보
@@ -883,7 +895,7 @@ $(document).ready(function () {
 	gagaAgGrid.createGrid('gridOrderMemoInfo'				, gridOptionsOrderMemoInfo);		// 관리자메모
 	
 	// 2. 그리드 데이터 바인딩
-	gridOptionsOrderInfo.api.setRowData(orderInfo);									// 기본정보
+	//gridOptionsOrderInfo.api.setRowData(orderInfo);								// 기본정보
 	gridOptionsGoodsInfo.api.setRowData(orderGoodsInfo);							// 상품정보
 	gridOptionsOrderFreeGiftInfo.api.setRowData(orderFreeGiftInfo);					// 사은품품정보
 	gridOptionsDeliveryInfo.api.setRowData(orderDeliveryAddrInfo);					// 배송정보
@@ -894,6 +906,17 @@ $(document).ready(function () {
 	gridOptionsOrderCounselInfo.api.setRowData(orderCounselInfo);					// 상담내역
 	gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);					// 관리자메모
 	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderGoodsInfo');
+	gagaAgGrid.hideStatusBar('gridOrderFreeGiftInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryAddrInfo');
+	gagaAgGrid.hideStatusBar('gridPaymentInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryFeeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderChangeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderRefundInfo');
+	gagaAgGrid.hideStatusBar('gridOrderCounselInfo');
+	gagaAgGrid.hideStatusBar('gridOrderMemoInfo');
+	
 	// 3. 그리드 높이 설정
 	fnSetGridHeightInit();
 	
@@ -1423,13 +1446,20 @@ var fnChangOrdDtlStat = function (obj) {
 };
 
 // DAUM을 이용한 우편번호 팝업 레이어
-var fnOpenDaumAddr = function() {
+var fnOpenDaumAddr = function(idx) {
+	alert(idx);
+	
 	let daumZip = new daum.Postcode({
 		oncomplete: function(data) {
 			// 우편번호와 주소 정보를 해당 필드에 넣는다.
 			$('#detailForm input[name=bizZipcode]').val(data.zonecode);
 			$('#detailForm input[name=bizBaseAddr]').val(cfnGetDaumRoadAddr(data));
 			$('#detailForm input[name=bizDtlAddr]').focus();
+
+			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerPostNo = zipNo;
+			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerBaseAddr = baseRoadAddr1;
+			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerDtlAddr = baseRoadAddr2;
+			gridOptionsOrderChangeInfo.api.refreshCells();
 			
 			cfnCloseDaumAddr();
 		},

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

@@ -90,21 +90,8 @@
 						</td>
 					</tr>
 					<tr>
-						<th>주문상태</th>
-						<td>
-							<div class="multiCheckBox" style="width:270px">
-								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
-								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
-									<li th:if="${ordStatList}" th:each="oneData, status : ${ordStatList}">
-										<label class="chkBox">
-											<input type="checkbox" name="multiOrdStat" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|">
-										</label>
-									</li>
-								</ul>
-							</div>
-						</td>
 						<th>주문상세상태</th>
-						<td colspan="3">
+						<td colspan="5">
 							<div class="multiCheckBox" style="width:270px">
 								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
 								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
@@ -246,7 +233,7 @@
 			<div class="panelContent" style="overflow: hidden;">
 				<div id="gridOrderList" style="width: 100%; height: 600px;" class="ag-theme-balham lh60"></div>
 			</div>
-			
+
 			<ul class="panelBar">
 				<li class="center">
 					<div class="tablePaging" id="orderListPagination"></div>
@@ -261,7 +248,7 @@
 	<a href="javascript:void(0);" id="hdOrderExcelList" style="display: none;">엑셀다운로드</a>
 </label>
 
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
 
 <script th:inline="javascript">
 /*<![CDATA[*/
@@ -630,53 +617,9 @@ var columnDefsOrderList = [
 	}
 ];
 
-var gridOptionsOrderList = {
-	columnDefs					: columnDefsOrderList
-	, detailCellRendererParams	: {
-		detailGridOptions	: {
-			columnDefs				: []
-			, defaultColDef			: {
-				resizable: true
-			}
-			, suppressLoadingOverlay: false
-			, onGridReady			: function (params) {
-				params.api.setDomLayout('autoHeight');
-			}
-			, onFirstDataRendered	: function (params) {
-				params.api.sizeColumnsToFit();
-			}
-		}
-		, getDetailRowData: function (params) {
-			params.successCallback(params.data.orderDetailList);
-		}
-	}
-	, defaultColDef: {
-		resizable: true
-	}
-	, isRowMaster: function (dataItem) {
-		return dataItem ? dataItem.orderDetailList.length > 1 : false;
-	}
-	, suppressRowTransform: true
-	, enableRangeSelection: true
-};
-
-// 상품이미지 노출을 위해 높이 조정
-gridOptionsOrderList.rowHeight 					= 60;
-gridOptionsOrderList.rowSelection 				= 'multiple';
-gridOptionsOrderList.suppressRowClickSelection 	= true;
-gridOptionsOrderList.getRowStyle = function (params) {
-	if (params.data.ordExchGb === 'E') {
-		return {background: 'orange'}
-	}
-}
-
-//Rowspan
-gridOptionsOrderList.defaultColDef.resizable = true;
-gridOptionsOrderList.suppressRowTransform = true;
+var gridOptionsOrderList = gagaAgGrid.getGridOptions(columnDefsOrderList);
 
-function onFirstDataRendered(params) {
-	
-}
+gridOptionsOrderList.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
 
 // 최근상세보기한 주문번호
 var currOrdNo = '';
@@ -724,44 +667,6 @@ var fnSearchCallBack = function(result){
 	gagaPaging.createPagination(result.pageing.pageable);
 }
 
-// 주문리스트 합계 정보
-var fnOrderListSumInfoCallback = function(result) {
-	if (!gagajf.isNull(result)) {
-		var sumOrdAmt 		= 0;
-		var sumOrdCnclAmt 	= 0;
-		var sumRealPayAmt 	= 0;
-		var ordNoCnt 		= 0;
-		var sumOrdQty 		= 0;
-		var sumOrdCnclQty 	= 0;
-
-		if (!gagajf.isNull(result.sumOrdAmt)) {
-			sumOrdAmt = result.sumOrdAmt.addComma();
-		}
-		if (!gagajf.isNull(result.sumOrdCnclAmt)) {
-			sumOrdCnclAmt = result.sumOrdCnclAmt.addComma();
-		}
-		if (!gagajf.isNull(result.sumRealPayAmt)) {
-			sumRealPayAmt = result.sumRealPayAmt.addComma();
-		}
-		if (!gagajf.isNull(result.ordNoCnt)) {
-			ordNoCnt = result.ordNoCnt.addComma();
-		}
-		if (!gagajf.isNull(result.sumOrdQty)) {
-			sumOrdQty = result.sumOrdQty.addComma();
-		}
-		if (!gagajf.isNull(result.sumOrdCnclQty)) {
-			sumOrdCnclQty = result.sumOrdCnclQty.addComma();
-		}
-
-		$('#sumOrdAmt').text(sumOrdAmt);
-		$('#sumOrdCnclAmt').text(sumOrdCnclAmt);
-		$('#sumRealPayAmt').text(sumRealPayAmt);
-		$('#ordNoCnt').text(ordNoCnt);
-		$('#sumOrdQty').text(sumOrdQty);
-		$('#sumOrdCnclQty').text(sumOrdCnclQty);
-	}
-};
-
 // 엑셀조회
 $("#btnSearchExcel").on('click', function () {
 	cfnExcelUploadPopup('', 'fnExcelUpoadCallback');

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

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

+ 114 - 69
src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html

@@ -136,15 +136,15 @@
 					<tbody>
 						<tr>
 							<th>보내는사람 <i class="star"></i></th>
-							<td colspan="3"><input type="text" name ="chgerNm" class="" /></td>
+							<td colspan="3"><input type="text" name ="chgerNm" class=""/></td>
 						</tr>
 						<tr>
 							<th>회수지주소 <i class="star"></i></th>
 							<td colspan="3">
-								<input type="text" name ="chgerZipNo" class="w100" readonly="readonly" />
+								<input type="text" name ="chgerZipNo" class="w100" readonly="readonly"/>
 								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
-								<input type="text" name ="chgerBaseAddr" class="w300" />
-								<input type="text" name ="chgerDtlAddr" class="w300" />
+								<input type="text" name ="chgerBaseAddr" class="w300"/>
+								<input type="text" name ="chgerDtlAddr" class="w300"/>
 							</td>
 						</tr>
 						<tr>
@@ -188,6 +188,7 @@ var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상
 var ordNo 					= [[${ordNo}]];									// 주문번호
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var orderDelvRtnAddrInfo	= [[${orderDelvRtnAddrInfo}]];					// 회수지정보
 
 var temp1 = true;
 var temp2 = false;
@@ -456,7 +457,7 @@ var columnCancelReqList = [
 		]
 	}
 ];
-var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
+var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
 
 // Add on options
 gridOptionsCancelReqList.suppressRowClickSelection = true;
@@ -709,7 +710,7 @@ var columnCancelReqToBeList = [
 		]
 	}
 ];
-var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
 
 // 3. 배송비정보(환불정보)
 var columnDelvCdList = [
@@ -815,7 +816,7 @@ var columnDelvCdList = [
 		]
 	}
 ];
-var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 
 // 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
@@ -827,45 +828,7 @@ var columnDefsRefundAccountInfo = [
 	{headerName: "기본"		, field: "defaultYn"	, width: 100	, cellClass: 'text-center'}
 ];
 
-var gridOptionsRefundAccountInfo = orderAgGrid.getGridOptions(columnDefsRefundAccountInfo);
-</script>
-
-<!-- AgGrid 컬럼 세팅 -->
-<script>
-// 공통1. 주문상세 그리드 옵션 정보 적용
-var orderAgGrid = {
-	getGridOptions : function(colDefs) {
-		return {
-			columnDefs					: colDefs
-			, detailCellRendererParams	: {
-				detailGridOptions	: {
-					columnDefs				: []
-					, defaultColDef			: {
-						resizable: true
-					}
-					, suppressLoadingOverlay: false
-					, onGridReady			: function (params) {
-						params.api.setDomLayout('autoHeight');
-					}
-					, onFirstDataRendered	: function (params) {
-						params.api.sizeColumnsToFit();
-					}
-				}
-				, getDetailRowData: function (params) {
-					params.successCallback(params.data.orderDetailList);
-				}
-			}
-			, defaultColDef: {
-				resizable: true
-			}
-			, isRowMaster: function (dataItem) {
-				return dataItem ? dataItem.orderDetailList.length > 1 : false;
-			}
-			, suppressRowTransform: true
-			, enableRangeSelection: true
-		};
-	}
-}
+var gridOptionsRefundAccountInfo = gagaAgGrid.getGridOptions(columnDefsRefundAccountInfo);
 </script>
 
 <script>
@@ -951,19 +914,27 @@ var fnCalculateRefundAmt = function (obj) {
 
 //  사유
 var fnChangeChgReason = function(reasonCd){
-	var arrREasonCd = reasonCd.split(":");
+	var arrReasonCd = reasonCd.split(":");
+	var customerReasonArr = ['G688_10', 'G688_11', 'G688_12', 'G688_13', 'G688_15' , 'G688_21', 'G688_30'];
+
+	isCustomer = false;
 	
 	// 취소, 반품, 교환 사유 판단
-	if (arrREasonCd[0] == 'G686_10') {
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == arrReasonCd[0]) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유설정 회사, 고객
+	if (isCustomer) {
 		$("#imputeReason").text("고객");
-		isCustomer = true;
 	} else {
 		$("#imputeReason").text("회사");
-		isCustomer = false;
 	}
 
-	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
 	
 	//환불예정금액 계산.
 	fnCalculateRefundAmt();			
@@ -1002,7 +973,8 @@ var fnCancelRequestPartOk = function () {
 	var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
 	
 	if (gagajf.isNull(chgReason)) {
-		mcxDialog.alert("취소사유를 입력하세요."); return ;
+		mcxDialog.alert("취소사유를 입력하세요."); 
+		return ;
 	}
 	
 	// 4. 환불계좌 체크
@@ -1010,6 +982,7 @@ var fnCancelRequestPartOk = function () {
 	var accountNm 	= "";
 	var bankCd 		= "";
 	
+	// 결제타입이 무통장 입금일때 사용
 	if (payMeans == 'G014_20') {
 		var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
 		
@@ -1023,6 +996,44 @@ var fnCancelRequestPartOk = function () {
 		bankCd 		= refundAccount[0].bankCd;
 	}
 	
+	// 5. 회수지정보설정
+	var chgerNm			= $("#cancelRequestFrm input[name=chgerNm]").val();
+	var chgerZipNo		= $("#cancelRequestFrm input[name=chgerZipNo]").val();
+	var chgerBaseAddr	= $("#cancelRequestFrm input[name=chgerBaseAddr]").val();
+	var chgerDtlAddr	= $("#cancelRequestFrm input[name=chgerDtlAddr]").val();
+	
+	var chgerPhnno1		= $("#cancelRequestFrm select[name=chgerPhnno1]").val();
+	var chgerPhnno2		= $("#cancelRequestFrm input[name=chgerPhnno2]").val();
+	var chgerPhnno3		= $("#cancelRequestFrm input[name=chgerPhnno3]").val();
+	
+	var chgerTelno1		= $("#cancelRequestFrm select[name=chgerTelno1]").val();
+	var chgerTelno2		= $("#cancelRequestFrm input[name=chgerTelno2]").val();
+	var chgerTelno3		= $("#cancelRequestFrm input[name=chgerTelno3]").val();
+
+	if (gagajf.isNull(chgerZipNo)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerBaseAddr)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerDtlAddr)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	
+	if (gagajf.isNull(chgerPhnno1)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerPhnno2)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerPhnno3)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	
+	var chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
+	var chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
+	var chgerEmail 		= orderInfoList[0].ordEmail;
+	
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
 		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
@@ -1033,6 +1044,13 @@ var fnCancelRequestPartOk = function () {
 		,"bankCd" 			: bankCd
 		,"allCanYn" 		: allCanYn
 		,"isCustomer"		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipNo"		: chgerZipNo
+		,"chgerBaseAddr"	: chgerBaseAddr
+		,"chgerDtlAddr"		: chgerDtlAddr
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1043,7 +1061,7 @@ var fnCancelRequestPartOk = function () {
 		sureBtnClick		: function(){
 			// 취소 실행
 			gagajf.ajaxJsonSubmit(
-				'/orderChange/return/'
+				'/orderChange/returnRequest/'
 				, jsonData
 				, function() {
 					uifnPopupClose('popupOrderDetail');
@@ -1075,11 +1093,11 @@ var fnBindOrderRfAccountInfo = function () {
 // 우편번호 DAUM을 이용한 우편번호 팝업 레이어
 var fnOpenDaumAddr = function() {
 	let daumZip = new daum.Postcode({
-		oncomplete: function(data) {
+		oncomplete: function(data) {			
 			// 우편번호와 주소 정보를 해당 필드에 넣는다.
-			$('#detailForm input[name=chgerZipNo]').val(data.zonecode);
-			$('#detailForm input[name=chgerBaseAddr]').val(cfnGetDaumRoadAddr(data));
-			$('#detailForm input[name=chgerDtlAddr]').focus();
+			$('#cancelRequestFrm input[name=chgerZipNo]').val(data.zonecode);
+			$('#cancelRequestFrm input[name=chgerBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#cancelRequestFrm input[name=chgerDtlAddr]').focus();
 			
 			cfnCloseDaumAddr();
 		},
@@ -1089,29 +1107,56 @@ var fnOpenDaumAddr = function() {
 	cfnOpenDaumAddr(daumZip);
 }
 
+// 회수지정보 셋팅
+var fnSetChger = function(){
+	var data = orderDelvRtnAddrInfo[0];
+	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
+	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
+	
+	$("#cancelRequestFrm input[name=chgerNm]").val(data.recipNm);
+	$("#cancelRequestFrm input[name=chgerZipNo]").val(data.recipZipNo);
+	$("#cancelRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
+	$("#cancelRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
+	
+	if (spRecipPhnno) {
+		$("#cancelRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
+		$("#cancelRequestFrm input[name=chgerPhnno2]").val(spRecipPhnno[1]);
+		$("#cancelRequestFrm input[name=chgerPhnno3]").val(spRecipPhnno[2]);
+	}
+	
+	if (spRecipTelno) {
+		$("#cancelRequestFrm select[name=chgerTelno1]").val(spRecipTelno[0]);
+		$("#cancelRequestFrm input[name=chgerTelno2]").val(spRecipTelno[1]);
+		$("#cancelRequestFrm input[name=chgerTelno3]").val(spRecipTelno[2]);
+	}
+}
+
 $(document).ready(function() {
-	// 1. Create a agGrid
+	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
-	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
-	
 	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
+	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
 	
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	
-	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
+	gagaAgGrid.hideStatusBar('gridDelvCdList');
+	gagaAgGrid.hideStatusBar('gridRefundAccountInfo');
 	
-	// 취소정보계산
+	// 3. 환불정보계산
 	fnCalculateRefundAmt(null);
 	
-	// 그리드 숨김처리
+	// 4. 무통장입금아일때 환불계좌 그리드 숨김처리
 	if (payMeans !== 'G014_20') {
 		$('#wrapRefundAccount').addClass("off");
-	}
-	
-	if (payMeans === 'G014_20' && mallGb === 'G011_10' ) {
-		// 환불계좌정보
 		fnBindOrderRfAccountInfo();
 	}
+	
+	// 5. 회수지정보설정
+	fnSetChger();
 });
 </script>
 </html>

+ 34 - 32
src/main/webapp/ux/css/admin.ui.css

@@ -80,8 +80,8 @@ html,body,#wrapper,#container {min-height:100%; height:100%;}
 
 /* 로그인 :alert */
 .alertBox {position:relative; padding:10px 40px 10px 10px; margin-bottom:10px; border:1px solid; border-radius:.25rem; line-height:22px;}
-.alertBox .alertClose {position:absolute; top:0; right:5px; padding:0 10px; height:40px; text-indent:-9999px; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%;}
-.alertBox .alertClose:hover {background:url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.alertBox .alertClose {position:absolute; top:0; right:5px; padding:0 10px; height:40px; text-indent:-9999px; background:url('/image/btn_sltClose.png') no-repeat 50% 50%;}
+.alertBox .alertClose:hover {background:url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 .alert-success {color:#155724; background-color:#d4edda; border-color:#c3e6cb;}
 .alert-info {color:#0c5460; background-color:#d1ecf1; border-color:#bee5eb;}
 .alert-warning {color:#856404; background-color:#fff3cd; border-color:#ffeeba;}
@@ -122,8 +122,8 @@ header a, header button {color:#fff;}
 #lnb a {display:block; color:#a7b1c2;}
 #lnb a:hover {color:#fff;}
 #lnb a.on {color:#fff;}
-#lnb .dep2 {padding:14px 20px 14px 35px; background:url('../../image/icon_dep2.png') 10px 50% no-repeat, url('../../image/icon_depArr2.png') 222px 50% no-repeat; background-color:#233646; cursor:pointer;}
-#lnb .dep2.on {display:block; background:url('../../image/icon_dep2On.png') 10px 50% no-repeat, url('../../image/icon_depArr2On.png') 222px 50% no-repeat; background-color:#233646;}
+#lnb .dep2 {padding:14px 20px 14px 35px; background:url('/image/icon_dep2.png') 10px 50% no-repeat, url('/image/icon_depArr2.png') 222px 50% no-repeat; background-color:#233646; cursor:pointer;}
+#lnb .dep2.on {display:block; background:url('/image/icon_dep2On.png') 10px 50% no-repeat, url('/image/icon_depArr2On.png') 222px 50% no-repeat; background-color:#233646;}
 #lnb .dep3 {padding:5px 0 10px 10px; border-left:4px solid #8597eb; cursor:pointer;}
 #lnb .dep3 a {padding:10px; cursor:pointer;}
 #lnb .dep4 {padding:5px 0 10px 20px; cursor:pointer;}
@@ -153,7 +153,7 @@ header a, header button {color:#fff;}
 .panelStyle h2 {margin-right:10px; font-size:14px; font-weight:bold;}
 .panelStyle h3 {margin-right:10px; font-size:12px; font-weight:normal; line-height:25px;}
 .panelStyle h3 i {padding-right:5px}
-.panelStyle h4 {padding-left:23px; height:31px; line-height:31px; background:url('../../image/icon_h4.png') no-repeat 3px 50%; color:#666;}
+.panelStyle h4 {padding-left:23px; height:31px; line-height:31px; background:url('/image/icon_h4.png') no-repeat 3px 50%; color:#666;}
 .panelStyle .panelBar {display:table; width:100%; padding-bottom:10px;}
 .panelStyle .panelBar h4 {margin-bottom:0;}
 .panelStyle .panelBar > li {display:table-cell;}
@@ -261,7 +261,7 @@ input[type=radio] {position:absolute; top:50%; left:0; width:18px; height:18px;
 label.chkBox, label.rdoBtn {position:relative; display:inline-block; padding-left:26px; height:22px; line-height:22px; vertical-align:middle; cursor:pointer;}
 /* 체크박스 :전체선택 버튼--------------- */
 input[type=checkbox] {position:absolute; top:0; left:0; width:0; height:0;}
-input[type=button].chkBox {margin-left:-2px; padding-left:24px; height:22px; vertical-align:middle; background:url('../../image/icon_checkN.png') no-repeat 0 50%;}
+input[type=button].chkBox {margin-left:-2px; padding-left:24px; height:22px; vertical-align:middle; background:url('/image/icon_checkN.png') no-repeat 0 50%;}
 
 /* 체크박스--------------- */
 label.chkBox::before {position:absolute; top:2px; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; background:#fff;}
@@ -365,9 +365,11 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .btn-pink {color:#fff; background-color:#feada6; border:1px solid #feada6;}
 .btn-warning {color:#fff; background-color:#f8ac59; border:1px solid #f8ac59;}
 .btn-danger {color:#fff; background-color:#ed5565; border:1px solid #ed5565;}
-.btn-dark {color:#fff; background-color:#6c757d; border:1px solid #6c757d;}
+.btn-dark, .btn.active {color:#fff; background-color:#6c757d; border:1px solid #6c757d;}
 .btn.icn {line-height:28px; height:28px; padding:0 8px; background-color:#eee; border:1px solid #dbdbdb;}
 .btn.icn i {padding-top:6px; width:12px; vertical-align:top; font-size:14px; text-align:center;}
+.btnGroup{display:inline-block;}
+.btnGroup .btn + .btn{margin:0;}
 
 /* 페이징 --------------- */
 .tablePaging {position:relative; 	display:inline-block; vertical-align:middle;}
@@ -382,8 +384,8 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .mSelected li {float:left; margin:2px 5px 3px; line-height:24px; padding:0 7px; background:#dbedf9; -ms-user-select:none; -moz-user-select:-moz-none; -webkit-user-select:none; user-select:none;}
 .mSelected li.srchFld {margin:0; padding:0; background:none;}
 .mSelected .srchFld input {width:25px; margin:0; padding:0; border:none; outline:none;}
-.mSelected a {border:none !important; float:right; margin-left:3px; padding:0 3px; width:15px; line-height:22px; text-indent:-9999px; background:url('../../image/btn_sltClose.png') no-repeat 100% 50%;}
-.mSelected a:hover {background:url('../../image/btn_sltCloseOn.png') no-repeat 100% 50%;}
+.mSelected a {border:none !important; float:right; margin-left:3px; padding:0 3px; width:15px; line-height:22px; text-indent:-9999px; background:url('/image/btn_sltClose.png') no-repeat 100% 50%;}
+.mSelected a:hover {background:url('/image/btn_sltCloseOn.png') no-repeat 100% 50%;}
 .mSelecting {display:none; overflow-y:auto; overflow-x:hidden; position:absolute; top:100%; left:-1px; z-index:1; width:100%; max-height:156px; line-height:30px; border:1px solid #e5e6e7; background:#fff;}
 .mSelecting li {margin:0 10px; cursor:pointer;}
 
@@ -399,7 +401,7 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .lrStyle .uFile {margin-top:2px;}
 .uFileInput {position:absolute; top:0; width:100%; margin:0 !important; padding:0 !important; line-height:28px; border:none !important;}
 .uFileLabel {position:absolute; top:0; right:0; left:0; z-index:1; margin:0; padding:0 7px; width:cals(100% - 7px); line-height:28px; height:28px; background-color:#fff; border-radius:1px; overflow:hidden; white-space:nowrap;}
-.uFileLabel::after {position:absolute; top:0; right:0; bottom:0; width:30px; z-index:3; line-height:28px; content:" "; border-left:1px solid #dbdbdb; background:#eee url('../../image/icon_upload.png') no-repeat 50% 50%;}
+.uFileLabel::after {position:absolute; top:0; right:0; bottom:0; width:30px; z-index:3; line-height:28px; content:" "; border-left:1px solid #dbdbdb; background:#eee url('/image/icon_upload.png') no-repeat 50% 50%;}
 
 /* badge --------------- */
 .badge {float:right; margin-top:2px; padding:0 5px; min-width:9px; line-height:18px; color:#fff; font-size:12px; font-weight:600; border-radius:3px; text-align:center; text-shadow:1px 1px 1px rgba(0,0,0,0.4); letter-spacing:-0.5px;}
@@ -412,7 +414,7 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .dep3 .badge {position:relative; top:-28px; right:20px;}
 
 /* badge-등급 ------------*/
-.badgeLevel{overflow:hidden;display:inline-block;margin:4px 0;padding:0;width:60px;height:60px;line-height:56px;font-size:30px;font-weight:bold;border-radius:100%;text-align:center;vertical-align:top;box-sizing:border-box;}
+.badgeLevel{overflow:hidden;display:inline-block;margin:5px 0 0;padding:0;width:50px;height:50px;line-height:46px;font-size:30px;font-weight:bold;border-radius:100%;text-align:center;vertical-align:top;box-sizing:border-box;}
 .badgeLevel.white{background-color:#fff;border:1px solid #333;color:#333;}
 .badgeLevel.dark1{background-color:#ccc;border:1px solid #ccc;color:#333;}
 .badgeLevel.dark2{background-color:#aaa;border:1px solid #aaa;color:#333;}
@@ -443,8 +445,8 @@ footer .f-right {float:right; padding-right:20px; line-height:38px;}
 .imgCard img {margin-right:15px;}
 .imgCard li:nth-of-type(2) {padding-top:20px; max-width:150px; line-height:24px}
 .imgCard p {font-size:12px;}
-.imgCard .cardClose {position:absolute; top:0; right:0; width:24px; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
-.imgCard .cardClose:hover {background:#f1f1f1 url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.imgCard .cardClose {position:absolute; top:0; right:0; width:24px; background:url('/image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
+.imgCard .cardClose:hover {background:#f1f1f1 url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 .verticalTop {vertical-align:top;}
 
 /* 조회용 이미지 카드 */
@@ -452,14 +454,14 @@ footer .f-right {float:right; padding-right:20px; line-height:38px;}
 .cardArea2 ul, .cardArea2 .box {vertical-align:top; position:relative; display:inline-block; margin:10px; border:1px solid #dbdbdb; max-width:300px;}
 .cardArea2 li {display:table-cell; line-height:26px; vertical-align:middle;}
 .cardArea2 li:nth-of-type(2) {padding:0 10px;}
-.cardArea2 .cardDel {position:absolute; top:0; right:0; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
-.cardArea2 .cardDel:hover {background:#f1f1f1 url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.cardArea2 .cardDel {position:absolute; top:0; right:0; background:url('/image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
+.cardArea2 .cardDel:hover {background:#f1f1f1 url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 
 /* 테이블 외부 안내문구 */
 .panelStyle > .notice {margin:0 0 15px ;}
 .panelContent > .notice {margin:15px 0;}
 .notice em {color:red;}
-.notice li, p.dot {padding-left:20px; background:url('../../image/dot_bk.png') no-repeat 5px 10px; line-height:24px;}
+.notice li, p.dot {padding-left:20px; background:url('/image/dot_bk.png') no-repeat 5px 10px; line-height:24px;}
 p.dot .btn {margin-left:10px !important;}
 p.dot em {color:red;}
 
@@ -483,14 +485,14 @@ p.dot em {color:red;}
 
 /* 유의사항 안내 */
 .infoBox {margin:0 20px 20px; padding:7px 10px; border-top:2px solid #dfe2e3; border-bottom:2px solid #dfe2e3; background:#fff}
-.infoBox p {padding-left:25px; line-height:20px; font-size:12px; background:url('../../image/dot_bk.png') no-repeat 10px 50%; background-size:3px auto;}
+.infoBox p {padding-left:25px; line-height:20px; font-size:12px; background:url('/image/dot_bk.png') no-repeat 10px 50%; background-size:3px auto;}
 
 /* 검색결과 안내문 */
 .srchNotice {padding-bottom:7px; font-weight:normal; font-size:14px;}
 .srchNotice em {color:red;}
 
 /* 필수입력항목 */
-.required {display:inline-block; position:relative; top:-3px; width:12px; height:7px; background:url('../../image/icon_required.png') no-repeat 0 50%;}
+.required {display:inline-block; position:relative; top:-3px; width:12px; height:7px; background:url('/image/icon_required.png') no-repeat 0 50%;}
 
 
 /* COLOR DESIGN -------------------------------------*/
@@ -646,8 +648,8 @@ hr {border:0; padding-bottom:10px;}/* 기본 여백 :10px */
 /*-- 회원추가 --------------*/
 .memAddWrap {line-height:26px; padding:3px 0;}
 .memAdd {margin-right:15px; padding:2px 27px 2px 0; position:relative; line-height:24px; height:24px; white-space:nowrap;}
-.memAdd button {position:absolute; top:3px; right:0; bottom:0; width:18px; height:18px; border:1px solid #dbdbdb; border-radius:3px; text-indent:-9999px; background:#eee url('../../image/btn_sltClose.png') no-repeat 50% 50%;}
-.memAdd button:hover {background:#eee url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.memAdd button {position:absolute; top:3px; right:0; bottom:0; width:18px; height:18px; border:1px solid #dbdbdb; border-radius:3px; text-indent:-9999px; background:#eee url('/image/btn_sltClose.png') no-repeat 50% 50%;}
+.memAdd button:hover {background:#eee url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 
 /*-- Date Picker --------------*/ /* 20200521 수정 */
 table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
@@ -657,8 +659,8 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 .ui-datepicker .ui-datepicker-today,
 .ui-datepicker .ui-state-highlight {background:#fff7cf !important;}
 .ui-datepicker .ui-state-active {border:1px solid red !important;}
-.ui-datepicker .ui-datepicker-prev {position:absolute; top:3px; left:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('../../image/icon_prev.png') no-repeat 50% 50%;}
-.ui-datepicker .ui-datepicker-next {position:absolute; top:3px; right:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('../../image/icon_next.png') no-repeat 50% 50%;}
+.ui-datepicker .ui-datepicker-prev {position:absolute; top:3px; left:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('/image/icon_prev.png') no-repeat 50% 50%;}
+.ui-datepicker .ui-datepicker-next {position:absolute; top:3px; right:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('/image/icon_next.png') no-repeat 50% 50%;}
 .ui-datepicker .ui-datepicker-calendar {padding:5px; border:1px solid #ddd; border-top:none; text-align:center;}
 .ui-datepicker .ui-datepicker-calendar th{padding:5px 0}
 .ui-datepicker-week-end {text-align:center;}
@@ -758,13 +760,13 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 .sortableWrap .item .cont input {margin-left:5px; width:37px;}
 
 
-.ag-theme-balham.lh60 .ag-cell {line-height:60px !important; height:60px;}
-.ag-theme-balham.lh70 .ag-cell {line-height:70px !important; height:70px;}
-.ag-theme-balham.lh80 .ag-cell {line-height:80px !important; height:80px;}
-.ag-theme-balham.lh90 .ag-cell {line-height:90px !important; height:90px;}
-.ag-theme-balham.lh100 .ag-cell {line-height:100px !important; height:100px;}
-.ag-theme-balham.lh110 .ag-cell {line-height:110px !important; height:110px;}
-.ag-theme-balham.lh120 .ag-cell {line-height:120px !important; height:120px;}
+.ag-theme-balham.lh60 .ag-cell {line-height:56px !important; height:60px;}
+.ag-theme-balham.lh70 .ag-cell {line-height:66px !important; height:70px;}
+.ag-theme-balham.lh80 .ag-cell {line-height:76px !important; height:80px;}
+.ag-theme-balham.lh90 .ag-cell {line-height:86px !important; height:90px;}
+.ag-theme-balham.lh100 .ag-cell {line-height:96px !important; height:100px;}
+.ag-theme-balham.lh110 .ag-cell {line-height:106px !important; height:110px;}
+.ag-theme-balham.lh120 .ag-cell {line-height:116px !important; height:120px;}
 
 
 /* 테이블 상품명 클릭시 이미지 레이어 활성화 */
@@ -814,12 +816,12 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 /* 카테고리 Sort */
 .categoryOrder {margin-bottom:15px; background:#fcfcfc;}
 .categoryOrder li {clear:both; padding-left:15px; line-height:40px; cursor:move; border-top:1px dashed red; }
-.categoryOrder li button.on {background-image:url(../../image/icon_cate_minus.png);}
-/* .categoryOrder li:after {content:''; position:absolute; top:8px; left:-10px; width:21px; height:21px; background:url(../../image/line_cate.png)} */
+.categoryOrder li button.on {background-image:url(/image/icon_cate_minus.png);}
+/* .categoryOrder li:after {content:''; position:absolute; top:8px; left:-10px; width:21px; height:21px; background:url(/image/line_cate.png)} */
 .categoryOrder li:before{position:relative; content:''; width:1px; height:100%; background:#ddd;}
 .categoryOrder li ol{display:none}
 /* .categoryOrder ol:last-child li {background-image:none !important} */
-.categoryOrder button{position:relative; z-index:200; padding:0 15px 0; margin:0; line-height:40px; cursor:pointer; background-image:url(../../image/icon_cate_plus.png); background-repeat:no-repeat; background-position:0 0;}
+.categoryOrder button{position:relative; z-index:200; padding:0 15px 0; margin:0; line-height:40px; cursor:pointer; background-image:url(/image/icon_cate_plus.png); background-repeat:no-repeat; background-position:0 0;}
 
 /* 메인 공지팝업 */
 .noticeWrap{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:800px;background-color:#fff;}

+ 39 - 13
src/main/webapp/ux/js/admin.popup.js

@@ -689,20 +689,19 @@ var cfnOpenFrontGoodsPopup = function(goodsCd, siteCd) {
  * @access : public
  * @desc   : 브랜드 목록 팝업
  * <pre>
- *     cfnOpenBrandListPopup();
- *     or
  *     cfnOpenBrandListPopup('fnResult');
  *     or
- *     cfnOpenBrandListPopup('fnResult', 'TBJ');
+ *     cfnOpenBrandListPopup('fnResult', 'S');
+ *     or
+ *     cfnOpenBrandListPopup('fnResult', 'S', 'TBJ');
  * </pre>
  * @since  : 2020/12/15
  * @author : eskim
  */
 var cfnOpenBrandListPopup = function(callbackfn, multiGb, searchTxt) {
-	var actionUrl = '/business/brand/search/form';
-	if (typeof(callbackfn) != 'undefined') actionUrl += "?callbackFn=" + callbackfn;
-	if (typeof(searchTxt) != 'undefined') actionUrl += "&searchTxt=" + encodeURIComponent(searchTxt);
+	var actionUrl = '/business/brand/search/form?callbackFn=' + callbackfn;
 	if (typeof(multiGb) != 'undefined' && multiGb != null && multiGb == "M") actionUrl += "&multiGb=" + multiGb; else actionUrl += "&multiGb=S";
+	if (typeof(searchTxt) != 'undefined') actionUrl += "&searchTxt=" + encodeURIComponent(searchTxt);
 	cfnOpenModalPopup(actionUrl, "popupBrandList");
 }
 
@@ -711,7 +710,7 @@ var cfnOpenBrandListPopup = function(callbackfn, multiGb, searchTxt) {
  * @access : public
  * @desc   : 프로모션 등록 팝업
  * <pre>
- *     cfnOpenFreeGoodsPromotionSetPopup();
+ *     cfnOpenFreeGoodsPromotionSetPopup('C');
  * </pre>
  * @since  : 2020/12/21
  * @author : xodud1202
@@ -728,16 +727,43 @@ var cfnOpenFreeGoodsPromotionSetPopup = function(gbn) {
  * @access : public
  * @desc   : 공급업체 조회 팝업
  * <pre>
- *     cfnOpenCompanyListPopup('callbackfn');
+ *     cfnOpenCompanyListPopup('fnResult');										// callBack 함수만 나타내고, 싱글 선택 팝업
+ *     or
+ *     cfnOpenCompanyListPopup('fnResult', 'S');								// 1번 파라미터 : callBack 함수, 2번 파라미터 : S면 싱글 선택 팝업, M이면 멀티 선택 팝업
+ *     or
+ *     cfnOpenCompanyListPopup('fnResult', 'S', 'TBJ');							// 1번 파라미터 : callBack 함수, 2번 파라미터 : 선택구분, 3번 파라미터 : 팝업 default 검색어
+ *     or
+ *     cfnOpenCompanyListPopup('fnResult', 'S', 'TBJ', 'inputId');				// 마지막 문자열은 멀티구분 S이고, 결과가 하나일때 supplyCompCd값을 넣어줄 html tag id, S가 아니고, inputId가 존재하지 않으면 무조건 팝업이 열림.
  * </pre>
  * @since  : 2020/12/23
  * @author : xodud1202
  */
-var cfnOpenCompanyListPopup = function(callbackfn) {
-	var actionUrl = "/business/comapny/search/form";
-	if (typeof(callbackfn) != 'undefined') actionUrl += "?callbackFn=" + callbackfn;
-	uifnPopupClose('popupCompanyList');
-	cfnOpenModalPopup(actionUrl, 'popupCompanyList');
+var cfnOpenCompanyListPopup = function(callbackfn, multiGb, searchTxt, inputId) {
+	var actionUrl = "/business/comapny/search/form?callbackFn=" + callbackfn;
+	if (typeof(multiGb) != 'undefined' && multiGb != null && multiGb == "M") actionUrl += "&multiGb=" + multiGb; else actionUrl += "&multiGb=S";
+	if (typeof(searchTxt) != 'undefined') actionUrl += "&searchTxt=" + encodeURIComponent(searchTxt);
+
+	if(multiGb == "S") {
+		if(searchTxt && searchTxt != "" && inputId && inputId != "") {
+			var data = {  searchTxt : searchTxt, searchGb : "NAME"	};
+			var jsonData = JSON.stringify(data);
+
+			gagajf.ajaxJsonSubmit('/business/supply/company/list', jsonData, function(result) {
+				if(result && result.length == 1) {
+					$("#" + inputId).val(result[0].supplyCompCd);
+				} else {
+					uifnPopupClose('popupCompanyList');
+					cfnOpenModalPopup(actionUrl, 'popupCompanyList');
+				}
+			});
+		} else {
+			uifnPopupClose('popupCompanyList');
+			cfnOpenModalPopup(actionUrl, 'popupCompanyList');
+		}
+	} else {
+		uifnPopupClose('popupCompanyList');
+		cfnOpenModalPopup(actionUrl, 'popupCompanyList');
+	}
 }
 
 /**

+ 3 - 2
src/main/webapp/ux/plugins/agGrid/ag-theme-balham.css

@@ -463,7 +463,7 @@
 .ag-theme-balham .ag-row:not(.ag-row-first) {
   border-width: 1px 0 0; }
 .ag-theme-balham .ag-row.ag-row-last {
-  border-bottom-width: 1px; }
+  border-bottom-width: 1px; } 
 .ag-theme-balham .ag-row-odd {
   background-color: #fcfdfe; }
 .ag-theme-balham .ag-row-even {
@@ -1875,7 +1875,8 @@
 .ag-theme-balham .ag-rtl .ag-column-drop-horizontal.ag-column-drop.ag-width-half:first-child {
   border-left: 0; }
 .ag-theme-balham .ag-row {
-  border-color: #d9dcde; }
+  border-color: #d9dcde; 
+  }
 .ag-theme-balham .ag-row-selected {
   border-color: #b7e4ff; }
 .ag-theme-balham .ag-icon-row-drag {

+ 15 - 0
src/main/webapp/ux/plugins/gaga/gaga.agGrid.js

@@ -950,6 +950,21 @@ var gagaAgGrid = {
 			$('#load_AjaxSubmit').remove();
 		}
 	},
+	
+	/**
+	 * Hide the status bar of bottom
+	 * gagaAgGrid.createGrid() 함수 사용 후 호출한다.
+	 * <pre>
+	 *     gagaAgGrid.createGrid('gridList', gridOptions);
+	 *     gagaAgGrid.hideStatusBar('gridList');
+	 * </pre>
+	 * @param gridId - ag-Grid ID
+	 * @author gagamel
+	 * @since 2021. 1. 14
+	 */
+	hideStatusBar : function(gridId) {
+		$('#' + gridId + ' .ag-status-bar').hide();
+	},
 
 	/**
 	 * Fetch data using json format.

+ 68 - 3
src/main/webapp/ux/plugins/gaga/gaga.paging.js

@@ -71,8 +71,13 @@ var gagaPaging = {
 	 */
 	createPagination : function(pageable) {
 		// Generate pagination
-		$('#' + oPaginationId).html(pageable.generatedPagination);
-		
+		var html;
+		if (gagajf.isNull(pageable.generatedPagination)) {
+			html = gagaPaging.generatedPagination(pageable);
+		} else {
+			html = pageable.generatedPagination;
+		}
+		$('#' + oPaginationId).html(html);
 		// Bind event
 		gagaPaging.bind();
 	},
@@ -154,6 +159,66 @@ var gagaPaging = {
 				mcxDialog.alert('오류로 인해 처리되지 않았습니다.');
 			}
 		});
+	} ,
+	generatedPagination : function (pageable) {
+		let pageNo = pageable.pageNo;
+		let pageSize = pageable.pageSize;
+		let pageUnit = pageable.pageUnit;
+		let totalCount = pageable.totalCount;
+
+		let firstCount = (getPageGroup() - 1) * pageable.pageUnit + 1;
+		let loopCount = firstCount + pageUnit;
+		if (loopCount > getTotalPage()) {
+			loopCount = getTotalPage() + 1;
+		}
+
+		var pageTag = '';
+		if (!(firstCount == 1 && loopCount == 1)) {
+			if (pageNo == 1) {
+				pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n";
+			} else {
+				pageTag += "<a class=\"arrow\" href=\"#pageNo=1\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n";
+			}
+
+			if (getPageGroup() == 1) {
+				pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n";
+			} else {
+				pageTag += "<a class=\"arrow\" href=\"#pageNo="+ (getPageGroup()-1) * pageUnit + "\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n"
+			}
+
+			for (let i = firstCount; i < loopCount; i++) {
+				if (pageNo == i) {
+					pageTag += "<a class=\"num on\" href=\"#\">"+ i + "</a>\n";
+				} else {
+					pageTag += "<a class=\"num\" href=\"#pageNo=" + i + "\">" + i +"</a>\n"
+				}
+			}
+
+			if (loopCount <= (getTotalPage() + 1)) {
+				if (pageNo == getTotalPage()) {
+					pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
+					pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n";
+				} else {
+					pageTag += "<a class=\"arrow\" href=\"#pageNo=" + (getPageGroup() * pageUnit + 1) + "\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
+					pageTag += "<a class=\"arrow\" href=\"#pageNo=" + getTotalPage() + "\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n";
+				}
+			}
+		}
+
+		function getPageGroup() {
+			return parseInt(pageNo / pageUnit + 1 );
+		}
+
+		function getTotalPage() {
+			let totalPage = parseInt(totalCount / pageSize);
+			if (totalCount % pageSize > 0) {
+				totalPage++;
+			}
+			return totalPage;
+		}
+
+		return pageTag;
 	}
-	
+
 }
+