Przeglądaj źródła

브랜드 그룹관리 개발중

eskim 5 lat temu
rodzic
commit
55d54ea4d3

+ 25 - 0
src/main/java/com/style24/admin/biz/dao/TsaBusinessDao.java

@@ -5,6 +5,7 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Aflink;
 import com.style24.persistence.domain.Brand;
+import com.style24.persistence.domain.BrandGroup;
 import com.style24.persistence.domain.BrandMd;
 import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.DelvFeePolicy;
@@ -297,5 +298,29 @@ public interface TsaBusinessDao {
 	 * @since 2020. 10. 20
 	 */
 	void deleteShipCompany(ShipCompany shipComp);
+	
+	/**
+	 * 브랜드 그룹 목록
+	 * @param brandGroup
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 19
+	 */
+	Collection<BrandGroup> getBrandGroupList(BrandGroup brandGroup);
+	
+	/**
+	 * 브랜드그룹 등록
+	 * @param brandGroup
+	 * @author geskim
+	 * @since 2021. 02. 19
+	 */
+	void createBrandGroup(BrandGroup brandGroup);
 
+	/**
+	 * 브랜드그룹 수정
+	 * @param brandGroup
+	 * @author eskim
+	 * @since 2021. 02. 19
+	 */
+	void updateBrandGroup(BrandGroup brandGroup);
 }

+ 54 - 26
src/main/java/com/style24/admin/biz/service/TsaBusinessService.java

@@ -17,6 +17,7 @@ import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Aflink;
 import com.style24.persistence.domain.Brand;
+import com.style24.persistence.domain.BrandGroup;
 import com.style24.persistence.domain.BrandMd;
 import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.DelvFeePolicy;
@@ -252,32 +253,6 @@ public class TsaBusinessService {
 	@Transactional("shopTxnManager")
 	public void saveBrand(Brand brand) {
 
-		if (brand.getNewSysFileNm() != null && !"".equals(brand.getNewSysFileNm())) {
-			String brandImgName = "BRAND_" + brand.getBrandCd() + "_" + GagaDateUtil.getTodayDateTime() + "." + StringUtils.getFilenameExtension(brand.getNewSysFileNm());
-
-			String brandUploadPath = env.getProperty("upload.default.target.path");
-			brandUploadPath = GagaFileUtil.getConcatenationPath(brandUploadPath, "display");
-
-			//기존이미지 삭제
-			try {
-				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(brandUploadPath, brand.getLogoFileNm()));
-			} catch (IOException e) {
-				//  nothing
-				log.info("[saveBanner 기존 이미지 삭제중 error]");
-				//e.printStackTrace();
-			}
-
-			File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(brandUploadPath, brandImgName)));
-
-			File file = new File(GagaFileUtil.getConcatenationPath(brandUploadPath, brand.getNewSysFileNm()));
-
-			// Rename a file
-			file.renameTo(uniqueFile);
-
-			brand.setLogoFileNm(brandImgName);
-
-		}
-
 		// eskim
 		Collection<Brand> brandSupplyList = null;
 		ObjectMapper mapper = new ObjectMapper();
@@ -450,4 +425,57 @@ public class TsaBusinessService {
 		}
 	}
 
+	/**
+	 * 브랜드 그룹 목록
+	 * @param brandGroup - 브랜드그룹 정보
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 19
+	 */
+	public Collection<BrandGroup> getBrandGroupList(BrandGroup brandGroup) {
+		return businessDao.getBrandGroupList(brandGroup);
+	}
+	
+	/**
+	 * 브랜드 그룹 등록/수정
+	 * @param brandGroup - 브랜드그룹 정보
+	 * @author gagamel
+	 * @since 2021. 02. 19
+	 */
+	@Transactional("shopTxnManager")
+	public void saveBrandGroup(BrandGroup brandGroup) {
+
+		if (brandGroup.getNewSysFileNm() != null && !"".equals(brandGroup.getNewSysFileNm())) {
+			String brandImgName = "BRAND_" + brandGroup.getBrandGroupNo() + "_" + GagaDateUtil.getTodayDateTime() + "." + StringUtils.getFilenameExtension(brandGroup.getNewSysFileNm());
+
+			String brandUploadPath = env.getProperty("upload.default.target.path");
+			brandUploadPath = GagaFileUtil.getConcatenationPath(brandUploadPath, "display");
+
+			//기존이미지 삭제
+			try {
+				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(brandUploadPath, brandGroup.getLogoFileNm()));
+			} catch (IOException e) {
+				//  nothing
+				log.info("[saveBanner 기존 이미지 삭제중 error]");
+				//e.printStackTrace();
+			}
+
+			File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(brandUploadPath, brandImgName)));
+
+			File file = new File(GagaFileUtil.getConcatenationPath(brandUploadPath, brandGroup.getNewSysFileNm()));
+
+			// Rename a file
+			file.renameTo(uniqueFile);
+
+			brandGroup.setLogoFileNm(brandImgName);
+
+		}
+
+		if (brandGroup.getMode().equals("N")) { // 신규
+			businessDao.createBrandGroup(brandGroup);
+		} else { // 수정
+			businessDao.updateBrandGroup(brandGroup);
+		}
+
+	}
 }

+ 54 - 1
src/main/java/com/style24/admin/biz/web/TsaBusinessController.java

@@ -23,6 +23,7 @@ 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.BrandGroup;
 import com.style24.persistence.domain.BrandMd;
 import com.style24.persistence.domain.DeliveryLoc;
 import com.style24.persistence.domain.DelvFeePolicy;
@@ -167,7 +168,7 @@ public class TsaBusinessController extends TsaBaseController {
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(supplyComp.getSearchSupplyCompCd())) supplyComp.setMultiSupplyCompCd(supplyComp.getSearchSupplyCompCd().replaceAll("\r", "").split("\n"));
 		if (!StringUtils.isBlank(supplyComp.getSearchSupplyCompNm())) supplyComp.setMultiSupplyCompNm(supplyComp.getSearchSupplyCompNm().replaceAll("\r", "").split("\n"));
-		log.info("supplyComp  {}", supplyComp);
+		//log.info("supplyComp  {}", supplyComp);
 		return businessService.getSupplyCompanyList(supplyComp);
 	}
 
@@ -725,4 +726,56 @@ public class TsaBusinessController extends TsaBaseController {
 		mav.setViewName("business/SupplyCompanyPopupForm");
 		return mav;
 	}
+	
+	/**
+	 * 브랜드 그룹 목록 화면(팝업)
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 19
+	 */
+	@GetMapping("/brand/group/popup/form")
+	@ResponseBody
+	public ModelAndView brandGroupForm(BrandGroup brandGroup) {
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("params",  brandGroup);
+		mav.setViewName("business/BrandGroupPopupForm");
+		return mav;
+	}
+	
+	/**
+	 * 브랜드 그룹 목록
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 19
+	 */
+	@PostMapping("/brand/group/list")
+	@ResponseBody
+	public Collection<BrandGroup> getBrandGroupList(@RequestBody BrandGroup brandGroup) {
+		// multi row 검색관련 처리
+			if (!StringUtils.isBlank(brandGroup.getSearchBrandGroupNo())) brandGroup.setMultiBrandGroupNo(brandGroup.getSearchBrandGroupNo().replaceAll("\r", "").split("\n"));
+			if (!StringUtils.isBlank(brandGroup.getSearchBrandGroupNm())) brandGroup.setMultiBrandGroupNm(brandGroup.getSearchBrandGroupNm().replaceAll("\r", "").split("\n"));
+		return businessService.getBrandGroupList(brandGroup); 
+	}
+
+	/**
+	 * 브랜드 그룹 저장
+	 * @param brandGroup
+	 * @return
+	 * @author eskim
+	 * @since 2021. 02. 19
+	 */
+	@PostMapping("/brand/group/save")
+	@ResponseBody
+	public GagaResponse saveBrandGroupList(@RequestBody BrandGroup brandGroup) {
+		if (brandGroup == null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		brandGroup.setRegNo(TsaSession.getInfo().getUserNo());
+		brandGroup.setUpdNo(TsaSession.getInfo().getUserNo());
+		businessService.saveBrandGroup(brandGroup);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+		
 }

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

@@ -21,9 +21,9 @@ public class Brand extends TscBaseDomain {
 	private String brandCd;			// 브랜드코드
 	private String brandEnm;		// 브랜드영문명
 	private String brandKnm;		// 브랜드한글명
-	private String dispNmLang;		// 노출명언어
-	private String rgbCd;			// RGB코드(front 브랜드메인 GNB 색상)
-	private String brandGrpNm;		// 브랜드그룹명
+	//private String dispNmLang;		// 노출명언어
+	//private String rgbCd;			// RGB코드(front 브랜드메인 GNB 색상)
+	private String brandGroupNm;	// 브랜드그룹명
 	private String supplyCompCd;	// 공급업체코드
 	private String supplyCompNm;	// 공급업체명
 	private String delvLocCd;		// 출고처코드(출고처)
@@ -38,13 +38,13 @@ public class Brand extends TscBaseDomain {
 	private float pntMrate10;		// 포인트적립율(모바일정상)
 	private float pntPrate20;		// 포인트적립율(PC이월)
 	private float pntMrate20;		// 포인트적립율(모바일이월)
-	private String logoFileNm;		// 로고파일명
+	//private String logoFileNm;		// 로고파일명
 	private String distributionGb;	// 유통구분(공통코드 G065)
 	private int dispOrd;			// 표시순서
 	private String useYn;			// 사용여부(Y:사용)
-	private int brandNo;			// 브랜드번호(WMS 연동용)
+	private int brandNo;			// 브랜드번호(WMS 연동용, 브랜드그룹)
 
-	private String newSysFileNm;	//신규이미지파일명
+	//private String newSysFileNm;	//신규이미지파일명
 
 	private String brandSupplyListInfo;	//브래드의 업체정보
 	private Collection<Brand> brandSupplyList; // 고시항목

+ 44 - 0
src/main/java/com/style24/persistence/domain/BrandGroup.java

@@ -0,0 +1,44 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 브랜드 그룹 Domain
+ *
+ * @author eskim
+ * @since 2021. 02. 19
+ */
+@SuppressWarnings("serial")
+@Data
+public class BrandGroup extends TscBaseDomain {
+
+	private String brandGroupNo;	// 브랜드그룹코드
+	private String brandGroupEnm;	// 브랜드그룹영문명
+	private String brandGroupKnm;	// 브랜드그룹한글명
+	private String brandGroupNm;	// 전시브랜드그룹명
+	private String dispNmLang;		// 노출명언어
+	private String rgbCd;			// RGB코드(front 브랜드메인 GNB 색상)
+	private String logoFileNm;		// 로고파일명
+	private int dispOrd;			// 표시순서
+	private String useYn;			// 사용여부(Y:사용)
+
+	private String newSysFileNm;	//신규이미지파일명
+
+	// 검색조건
+	private String callbackFn;		// 콜백함수
+	private String multiGb;			// 멀티 셀렉트 구분
+	private String searchBrandGroupNo;
+	private String searchBrandGroupNm;
+
+	/* 브랜드검색 Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrandGroupNo;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrandGroupNm;
+	/* 브랜드검색 Multi CheckBox 항목*/
+
+}

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

@@ -486,11 +486,7 @@
 		     , A.BRAND_CD                    /*브랜드코드*/
 		     , A.BRAND_ENM                   /*브랜드영문명*/
 		     , A.BRAND_KNM                   /*브랜드한글명*/
-		     , A.BRAND_GRP_NM                /*브랜드그룹명*/
-		     , A.DISP_NM_LANG                /*노출명언어*/
-		     , A.RGB_CD                      /*RGB코드*/
 		     , A.DISTRIBUTION_GB             /*유통구분*/
-		     -- , B.SUPPLY_COMP_NM              /*업체명*/
 		     , A.ERP_BRAND_CD                /*ERP브랜드코드*/
 		     , A.SELF_YN                     /*자사여부*/
 		     , A.USE_YN                      /*사용여부*/
@@ -498,9 +494,12 @@
 		     , A.PNT_MRATE10                 /*포인트적립율(모바일)*/
 		     , A.PNT_PRATE20                 /*포인트적립율(PC)*/
 		     , A.PNT_MRATE20                 /*포인트적립율(모바일)*/
-		     , A.LOGO_FILE_NM                 /*로고파일명*/
 		     , A.DISP_ORD                    /*표시순서*/
+		     , (CASE WHEN D.DISP_NM_LANG = 'EN' THEN D.BRAND_GROUP_ENM ELSE D.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
+		     , A.BRAND_NO
 		FROM   TB_BRAND A
+		INNER JOIN TB_BRAND_GROUP D ON A.BRAND_NO = D.BRAND_GROUP_NO
+		                            AND D.USE_YN = 'Y'
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
 		INNER JOIN TB_BRAND_SUPPLY C ON A.BRAND_CD = C.BRAND_CD
 		INNER JOIN TB_SUPPLY_COMPANY B ON C.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD
@@ -531,8 +530,6 @@
 		    UPPER(A.BRAND_ENM) LIKE CONCAT('%',UPPER(#{item}),'%')
 		    OR
 		    UPPER(A.BRAND_KNM) LIKE CONCAT('%',UPPER(#{item}),'%')
-		    OR
-		    UPPER(A.BRAND_GRP_NM) LIKE CONCAT('%',UPPER(#{item}),'%')
 		    )
 		  </foreach>
 		 )
@@ -1021,4 +1018,87 @@
 		WHERE  SHIP_COMP_CD=  #{shipCompCd}
 	</update>
 	
+	<!-- 브랜드 그룹 목록 -->
+	<select id="getBrandGroupList" parameterType="String" resultType="BrandGroup">
+		/* TsaBusiness.getBrandGroupList */
+		SELECT A.BRAND_GROUP_NO
+		     , A.BRAND_GROUP_ENM
+		     , A.BRAND_GROUP_KNM
+		     , A.DISP_NM_LANG
+		     , A.LOGO_FILE_NM
+		     , A.RGB_CD
+		     , A.DISP_ORD
+		     , (CASE WHEN DISP_NM_LANG = 'EN' THEN BRAND_GROUP_ENM ELSE BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
+		FROM   TB_BRAND_GROUP A
+		WHERE 1 = 1
+		<if test="multiBrandGroupNo != null and multiBrandGroupNo.length > 0">
+		AND    A.BRAND_GROUP_NO IN
+		    <foreach collection="multiBrandGroupNo" item="item" index="index"  open="(" close=")" separator=",">
+		UPPER(#{item})
+		    </foreach>
+		</if>
+		<if test="multiBrandGroupNm != null and multiBrandGroupNm.length > 0">
+		AND (
+		    <foreach collection="multiBrandGroupNm" item="item" index="index" separator="or">
+		    (
+		    UPPER(A.BRAND_GROUP_ENM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		    OR
+		    UPPER(A.BRAND_GROUP_KNM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		    )
+		  </foreach>
+		 )
+		</if>
+		ORDER  BY A.BRAND_GROUP_KNM
+	</select>
+	
+	<!-- 브랜드 그룹 등록 -->
+	<insert id="createBrandGroup" parameterType="BrandGroup" keyProperty="BrandGroup">
+		/* TsaBusiness.createBrandGroup */
+		INSERT INTO TB_BRAND_GROUP (
+		       BRAND_GROUP_NO
+		     , BRAND_GROUP_ENM
+		     , BRAND_GROUP_KNM
+		     , DISP_NM_LANG
+		     , RGB_CD
+		     , LOGO_FILE_NM
+		     , DISP_ORD
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       (SELECT MAX(BRAND_GROUP_NO) + 1 FROM TB_BRAND_GROUP)
+		     , #{brandGroupEnm}
+		     , #{brandGroupKnm}
+		     , #{dispNmLang}
+		     , #{rgbCd}
+		     , #{logoFileNm}
+		     , #{dispOrd}
+		     , #{useYn}
+		     , (SELECT MAX(BRAND_GROUP_NO) + 1 FROM TB_BRAND_GROUP)
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+	</insert>
+	
+	<!-- 브랜드 그룹 수정 -->
+	<update id="updateBrandGroup" parameterType="BrandGroup">
+		/* TsaBusiness.updateBrandGroup */
+		UPDATE TB_BRAND_GROUP
+		SET    BRAND_GROUP_ENM = #{brandGroupEnm}
+		     , BRAND_GROUP_KNM = #{brandGroupKnm}
+		     , DISP_NM_LANG = #{dispNmLang}
+		     , RGB_CD = #{rgbCd}
+		     , LOGO_FILE_NM = #{logoFileNm}
+		     , DISP_ORD = #{dispOrd}
+		     , USE_YN = #{useYn}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		WHERE  BRAND_GROUP_NO = #{brandGroupNo}
+	</update>
+	
 </mapper>

+ 41 - 91
src/main/webapp/WEB-INF/views/business/BrandForm.html

@@ -122,15 +122,21 @@
 						</td>
 					</tr>
 					<tr>
-						<th>브랜드그룹<i class="required" title="필수"></i></th>
+						<th>브랜드그룹<i class="required" title="필수"></i></th>
 						<td>
-							<input type="text" class="w200" name="brandGrpNm" maxlength="50" required="required" data-valid-name="브랜드그룹명"/>
+							<input type="text" class="w200" name="brandGroupNm" maxlength="50" readOnly="readOnly"/>
+							<input type="hidden" name="brandGroupNo" readOnly/>
+							<button type="button" class="btn btn-success btn-lg" id="btnBrandGroup">브랜드그룹</button>
 						</td>
-						<th>브랜드명노출언어<i class="required" title="필수"></i></th>
+						<th>노출순서<i class="required" title="필수"></i></th>
+						<td class="infoTxt">
+							<input type="text" class="w100 aR" name="dispOrd" maxlength="5" required="required" data-valid-name="노출순서" data-valid-type="numeric"/>
+						</td>
+						<!-- <th>브랜드명노출언어<i class="required" title="필수"></i></th>
 						<td>
 							<label class="rdoBtn"><input type="radio" name="dispNmLang" value="EN" checked="checked">영문</label>
 							<label class="rdoBtn"><input type="radio" name="dispNmLang" value="KR">국문</label>
-						</td>
+						</td> -->
 					</tr>
 					<tr>
 					<!--	
@@ -196,33 +202,22 @@
 							<input type="text" class="w100 aR" name="pntMrate20" maxlength="3" required="required" data-valid-name="포인트적립율(모바일이월)" data-valid-type="real"/>%
 						</td>
 					</tr>
-					<tr>
-						<th>노출순서<i class="required" title="필수"></i></th>
-						<td class="infoTxt">
-							<input type="text" class="w100 aR" name="dispOrd" maxlength="5" required="required" data-valid-name="노출순서" data-valid-type="numeric"/>
-						</td>
-						<th>RGB코드</th>
-						<td  colspan="3">
-							<input type="text" class="w100 aR" name="rgbCd" maxlength="6" data-valid-name="REG코드" />
-							<span class="marL10 cRed"><i class="fa fa-info-circle" aria-hidden="true"></i> 브랜드메인 GBN 배경색으로 적용, 미 입력시 기본색상으로 설정됩니다.</span>
-						</td>
-					</tr>
-					<tr id="brandImgArea" class="off">
-						<th>브랜드이미지</th>
-						<td colspan="3">
-							<div class="uFile w300">
-								<input id="file" name="file" type="file" class="uFileInput w300"/>
-								<label for="file" class="uFileLabel">파일선택</label>
-								<input type="hidden" name="logoFileNm" id="logoFileNm"/>
-								<input type="hidden" name="sysFileNm" id="sysFileNm"/>
-								<input type="hidden" name="newSysFileNm" id="newSysFileNm"/>
-							</div>
-							<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.default.view') + '/display/'}"/>
-							<div id="imgView" class="off">
-								<img id="bannerPreViewUrl" src="" style="height:100px"/>
-							</div>
-						</td>
-					</tr>
+				<!-- <tr id="brandImgArea" class="off">
+					<th>브랜드이미지</th>
+					<td colspan="3">
+						<div class="uFile w300">
+							<input id="file" name="file" type="file" class="uFileInput w300"/>
+							<label for="file" class="uFileLabel">파일선택</label>
+							<input type="hidden" name="logoFileNm" id="logoFileNm"/>
+							<input type="hidden" name="sysFileNm" id="sysFileNm"/>
+							<input type="hidden" name="newSysFileNm" id="newSysFileNm"/>
+						</div>
+						<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.default.view') + '/display/'}"/>
+						<div id="imgView" class="off">
+							<img id="bannerPreViewUrl" src="" style="height:100px"/>
+						</div>
+					</td>
+				</tr> -->
 					<tr id="brandMdArea" class="off">
 						<th>담당MD</th>
 						<td colspan="3" id="tdBrandMd">
@@ -284,7 +279,7 @@
 		},
 		{headerName: "브랜드영문명", field: "brandEnm", width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드국문명", field: "brandKnm", width: 150, cellClass: 'text-center'},
-		{headerName: "브랜드그룹명", field: "brandGrpNm", width: 150, cellClass: 'text-center'},
+		{headerName: "브랜드그룹명", field: "brandGroupNm", width: 150, cellClass: 'text-center'},
 		/*{
 			headerName: "공급업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
 			valueGetter: function (params) {
@@ -317,7 +312,7 @@
 				{headerName: "모바일이월", field: "pntMrate20", width: 100, cellClass: 'text-center'}
 			]
 		},
-		{headerName: "브랜드이미지", field: "brandImg", width: 150, cellClass: 'text-center', hide: true},
+		/*{headerName: "브랜드이미지", field: "brandImg", width: 150, cellClass: 'text-center', hide: true},*/
 		{headerName: "노출순서", field: "dispOrd", width: 150, cellClass: 'text-center', hide: true},
 		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'}
 	];
@@ -344,10 +339,10 @@
 		$("#detailForm input[name=brandCd]").val(event.data.brandCd);
 		$("#detailForm input[name=brandEnm]").val(event.data.brandEnm);
 		$("#detailForm input[name=brandKnm]").val(event.data.brandKnm);
-		$("#detailForm input:radio[name=dispNmLang]:input[value=" + event.data.dispNmLang + "]").click();
-		$("#detailForm input[name=rgbCd]").val(event.data.rgbCd);
+		//$("#detailForm input:radio[name=dispNmLang]:input[value=" + event.data.dispNmLang + "]").click();
+		//$("#detailForm input[name=rgbCd]").val(event.data.rgbCd);
 		$("#detailForm input[name=brandKnm]").val(event.data.brandKnm);
-		$("#detailForm input[name=brandGrpNm]").val(event.data.brandGrpNm);
+		//$("#detailForm input[name=brandGrpNm]").val(event.data.brandGrpNm);
 		$("#detailForm input[name=erpBrandCd]").val(event.data.erpBrandCd);
 		$("#detailForm select[name=distributionGb]").val(event.data.distributionGb);
 		//$("#detailForm input[name=supplyCompCd]").val(event.data.supplyCompCd);
@@ -380,7 +375,7 @@
 		$("#detailForm input:radio[name=useYn]:input[value=" + event.data.useYn + "]").click();
 		$("#detailForm input[name=dispOrd]").val(event.data.dispOrd);
 		
-		var brandImg = event.data.logoFileNm;
+		/* var brandImg = event.data.logoFileNm;
 		if(!gagajf.isNull(brandImg)){
 			$("#logoFileNm").val(brandImg);
 			$("#bannerPreViewUrl").attr('src', $("#uploadDefaultUrl").val()+brandImg);
@@ -388,7 +383,7 @@
 		}else {
 			$("#orgFileNm").val('');
 		}
-		$('#detailForm input[name=file]').closest('div').find('label').text('파일선택');
+		$('#detailForm input[name=file]').closest('div').find('label').text('파일선택'); */
 		
 		// 담당MD 영역 노출
 		$("#brandMdArea").removeClass("off").addClass("on");
@@ -399,7 +394,7 @@
 		fnGetBrandSiteList(event.data.brandCd);
 		
 		// 로고이미지 영역 노출
-		$("#brandImgArea").removeClass("off").addClass("on");
+		//$("#brandImgArea").removeClass("off").addClass("on");
 		
 		// 공급업체정보 조회
 		gagaAgGrid.fetch("/business/brand/supply/list/" + $('#detailForm input[name=brandCd]').val() , gridOptions2);
@@ -447,58 +442,7 @@
 */			
 	});
 	
-	// 공급업체 변경 시
-/*	$('#detailForm select[name=supplyCompCd]').on('change', function() {
-		if (gagajf.isNull($(this).val())) {
-			$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
-			return;
-		}
-		
-		var data = { supplyCompCd : $(this).val() };
-		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/business/supply/company/list', jsonData, function(result) {
-			if (result.length == 0) {
-				$("#detailForm input[name=delvFee]").val(0);
-				$("#detailForm input[name=minOrdAmt]").val(0);
-				$("#detailForm input[name=sellFeeRate]").val(0);
-				return;
-			}
-			
-			$("#detailForm input[name=delvFee]").val(Number(result[0].delvFee).addComma());
-			$("#detailForm input[name=minOrdAmt]").val(Number(result[0].minOrdAmt).addComma());
-			$("#detailForm input[name=sellFeeRate]").val(result[0].sellFeeRate);
-			
-			// 출고처 정보
-			$.getJSON('/renderer/delvloc/list/' + result[0].supplyCompCd
-				, function(delvLocList, status) {
-					$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
-					$.each(delvLocList, function(idx, item) {
-						var optionHtml = '<option value="' + item.cd + '">[' + item.cd + '] '+ item.cdNm + '</option>\n';
-						$('#detailForm select[name=delvLocCd]').append(optionHtml);
-					});
-				}
-			);
-			
-			cfnCreateCombo('/renderer/delvFee/list/' + result[0].supplyCompCd, $('#detailForm select[name=delvFeeCd]'), "[선택]");
-			
-		});
-	});
-*/	
-	// 해당공급업체 조회
-/*	var fnGetSupplyCompCdList = function(supplyCompCd, delvFeeCd){
-		$.getJSON('/renderer/supply/company/list/' + $('#detailForm select[name=brandGb]').val()
-			, function(result, status) {
-				$('#detailForm select[name=supplyCompCd]').empty().append('<option value="">[선택]</option>');
-				$.each(result, function(idx, item) {
-					var optionHtml = '<option value="' + item.cd + '">[' + item.cd + '] '+ item.cdNm + '</option>\n';
-					$('#detailForm select[name=supplyCompCd]').append(optionHtml);
-				});
-				$("#detailForm select[name=supplyCompCd]").val(supplyCompCd);
-		});
-		
-		cfnCreateCombo('/renderer/delvFee/list/' + supplyCompCd, $('#detailForm select[name=delvFeeCd]'), "[선택]", delvFeeCd);
-	}
-*/	
+	
 	// 공급업체 선택시
 	$('#btnSearchSupplyComp').on('click', function() {
 		var selfYn = "";
@@ -619,6 +563,12 @@
 		$("#tdBrandMd input[name=mdNm]").eq(ind).val(result[0].mdNm);
 	}
 	
+	//브랜드그룹 등록및 선택
+	$("#btnBrandGroup").on("click", function() {
+		var actionUrl = "/business/brand/group/popup/form?callbackFn=callBackBrandGroup";
+		cfnOpenModalPopup(actionUrl, 'popupBrandGroup'); 
+	});
+	
 	// 브랜드담당MD 수정
 	$("#btnUpdateBrandMd").on("click", function() {
 		var arrData = [];

+ 202 - 0
src/main/webapp/WEB-INF/views/business/BrandGroupPopupForm.html

@@ -0,0 +1,202 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : BrandGroupPopupForm.html
+ * @desc    : 브랜드 그룹 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.19   eskim       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="800" id="popupBrandGroup">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong>브랜드 그룹 목록</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupBrandGroup');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		
+		<!-- 검색 조건 -->
+		<div class="panelContent">
+			<form id="searchBrandGroupForm" name="searchBrandGroupForm" action="#" th:action="@{'/business/brand/group/list'}" onsubmit="$('#btnSearchBrandGroup').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:15%;"/>
+						<col style="width:35%;"/>
+						<col style="width:15%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>브랜드그룹코드<i class="required" title="필수"></i></th>
+							<td>
+								<textarea class="textareaR3" name="searchBrandGroupNo" id="searchBrandGroupNo"></textarea>
+							</td>
+							<th>브랜드그룹명<i class="required" title="필수"></i></th>
+							<td>
+								<textarea class="textareaR3" name="searchBrandGroupNm" id="searchBrandGroupNm"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearchBrandGroup">조회</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- //검색 조건 -->
+		<!-- 리스트 영역 -->
+		<div class="panelContent">
+			<div id="gridBrandGroupList" style="width: 100%; height: 300px" class="ag-theme-balham"></div>
+		</div>
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-info btn-lg" id="btnConfirmBrandGroup">확인</button>
+			</li>
+		</ul>
+		<!-- //리스트 영역 -->
+		<div class="panelContent">
+			<form id="brandGroupForm" name="detailForm" action="#" th:action="@{'/business/brand/group/save'}">
+			<table class="frmStyle" aria-describedby="등록/수정 폼">
+				<colgroup>
+					<col style="width:10%;"/>
+					<col style="width:40%;"/>
+					<col style="width:10%;"/>
+					<col/>
+				</colgroup>
+				<tr>
+					<th>브랜드그룹코드</th>
+					<td>
+						<input type="text" class="w100" name="brandGroupCd" placeholder="자동생성" maxlength="5" readonly="readonly"/>
+					</td>
+					<th>브랜드 그룹명노출언어<i class="required" title="필수"></i></th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="dispNmLang" value="KR" checked="checked">국문</label>
+							<label class="rdoBtn"><input type="radio" name="dispNmLang" value="EN">영문</label>
+						</td>
+				</tr>
+				<tr>	
+					<th>브랜드그룹 국문명<i class="required" title="필수"></i></th>
+					<td>
+						<input type="text" class="w200" name="brandGroupKnm" placeholder="브랜드그룹국문명" maxlength="50" required="required" data-valid-name="브랜드그룹국문명"/>
+					</td>
+					<th>브랜드그룹 영문명</th>
+					<td>
+						<input type="text" class="w200" name="brandGroupEnm" placeholder="브랜드그룹영문명" maxlength="50" required="required" data-valid-name="브랜드그룹영문명"/> 
+					</td>
+				</tr>
+				<tr>
+					<th>RGB코드</th>
+					<td  colspan="3">
+						<input type="text" class="w100 aR" name="rgbCd" maxlength="6" data-valid-name="REG코드" />
+						<span class="marL10 cRed"><i class="fa fa-info-circle" aria-hidden="true"></i> 브랜드메인 GBN 배경색으로 적용, 미 입력시 기본색상으로 설정됩니다.</span>
+					</td>
+				</tr>
+				<tr id="brandImgArea" class="on">
+					<th>브랜드이미지</th>
+					<td colspan="3">
+						<div class="uFile w300">
+							<input id="file" name="file" type="file" class="uFileInput w300"/>
+							<label for="file" class="uFileLabel">파일선택</label>
+							<input type="hidden" name="logoFileNm" id="logoFileNm"/>
+							<input type="hidden" name="sysFileNm" id="sysFileNm"/>
+							<input type="hidden" name="newSysFileNm" id="newSysFileNm"/>
+						</div>
+						<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.default.view') + '/display/'}"/>
+						<div id="imgView" class="off">
+							<img id="bannerPreViewUrl" src="" style="height:100px"/>
+						</div>
+					</td>
+				</tr>
+				
+			</table>
+			</form>
+		</div>
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-success btn-lg" id="btnBrandGroupSave">저장</button>
+			</li>
+		</ul>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let headerSelection = false;
+	let columnDefsMdList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: headerSelection, checkboxSelection: true, filter: false},
+		{headerName: "브랜드그룹번호", field: "brandGroupNo", width: 120, cellClass: 'text-center'},
+		{headerName: "브랜드그룹국문명", field: "brandGroupKnm", width: 150, cellClass: 'text-center'},
+		{headerName: "브랜드그룹영문명", field: "brandGroupEnm", width: 150, cellClass: 'text-center'},
+		{headerName: "전시브랜드그룹명", field: "brandGroupNm", width: 150, cellClass: 'text-center'}
+	];
+
+	let gridOptionsBrandGroupList = gagaAgGrid.getGridOptions(columnDefsMdList);
+	if(headerSelection) {	gridOptionsBrandGroupList.rowSelection = "multiple";	}
+
+	// Row double click
+	gridOptionsBrandGroupList.onRowDoubleClicked = function(event) {
+		$('#btnConfirmBrand').trigger('click');
+	}
+
+	// 조회
+	$('#btnSearchBrandGroup').on('click', function() {
+		
+		if (gagajf.isNull($('#searchBrandGroupForm textarea[name=searchBrandGroupNo]').val())  && gagajf.isNull($('#searchBrandGroupForm textarea[name=searchBrandGroupNm]').val())){
+			mcxDialog.alert('검색조건을 입력하세요.');
+			return false;
+		}
+		
+		// Fetch data
+		gagaAgGrid.fetch($('#searchBrandGroupForm').prop('action'), gridOptionsBrandGroupList, '#searchBrandGroupForm');
+	});
+	
+	// 확인
+	$('#btnConfirmBrandGroup').on('click', function() {
+		var selectedData = gagaAgGrid.selectedRowData(gridOptionsBrandGroupList);
+		
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 브랜드가 없습니다.');
+			return false;
+		}
+		
+		var callbackFn = [[${params.callbackFn}]];
+
+		var jsonData = JSON.stringify(selectedData);
+
+		if (typeof callbackFn != 'undefined' && callbackFn) {
+			if (typeof callbackFn == 'function') {
+				callbackFn(jsonData);
+			} else {
+				if (callbackFn) {
+					if (callbackFn.indexOf("(") == -1) {
+						eval(callbackFn + "(" + jsonData + ")");
+					} else {
+						eval(callbackFn(jsonData));
+					}
+				}
+			}
+			uifnPopupClose('popupBrandGroup');
+		}
+	});
+	
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridBrandGroupList', gridOptionsBrandGroupList);
+	});
+/*]]>*/
+</script>
+
+</div>
+
+</html>