Преглед изворни кода

Merge branch 'eskim' into develop

eskim пре 5 година
родитељ
комит
8f334f6e6b

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

@@ -271,7 +271,7 @@ public class TsaBusinessService {
 		} else { // 수정
 			businessDao.updateBrand(brand);
 		}
-
+		log.info("brand ={}", brand);
 		if (brandSupplyList != null && !brandSupplyList.isEmpty()) {
 			for(Brand brandSupply: brandSupplyList){
 				brandSupply.setRegNo(TsaSession.getInfo().getUserNo());

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

@@ -23,6 +23,7 @@ public class Brand extends TscBaseDomain {
 	private String brandKnm;		// 브랜드한글명
 	//private String dispNmLang;		// 노출명언어
 	//private String rgbCd;			// RGB코드(front 브랜드메인 GNB 색상)
+	private int brandGroupNo;		// 브랜드그룹번호
 	private String brandGroupNm;	// 브랜드그룹명
 	private String supplyCompCd;	// 공급업체코드
 	private String supplyCompNm;	// 공급업체명

+ 36 - 30
src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -496,9 +496,9 @@
 		     , A.PNT_MRATE20                 /*포인트적립율(모바일)*/
 		     , 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
+		     , A.BRAND_GROUP_NO
 		FROM   TB_BRAND A
-		INNER JOIN TB_BRAND_GROUP D ON A.BRAND_NO = D.BRAND_GROUP_NO
+		INNER JOIN TB_BRAND_GROUP D ON A.BRAND_GROUP_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
@@ -517,6 +517,19 @@
 		<if test='brandCd != null and brandCd != ""'>
 		AND    A.BRAND_CD = #{brandCd}
 		</if>
+		<if test="searchTxt != null and searchTxt != ''">
+		AND    (
+		        UPPER(A.BRAND_ENM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+		        OR
+		        UPPER(A.BRAND_KNM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+		        OR
+		        UPPER(A.BRAND_CD) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+		        OR
+		        UPPER(D.BRAND_GROUP_KNM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+		        OR
+		        UPPER(D.BRAND_GROUP_ENM) LIKE CONCAT('%',UPPER(#{searchTxt}),'%')
+		       )
+		</if>
 		<if test="multiBrandCd != null and multiBrandCd.length > 0">
 		AND    A.BRAND_CD IN
 		    <foreach collection="multiBrandCd" item="item" index="index"  open="(" close=")" separator=",">
@@ -662,15 +675,19 @@
 	</select>
 	
 	<!-- 브랜드 등록 -->
-	<insert id="createBrand" parameterType="Brand" keyProperty="brandCd">
+	<insert id="createBrand" parameterType="Brand" >
 		/* TsaBusiness.createBrand */
+		<selectKey keyProperty="brandCd" resultType="String" order="BEFORE">
+			 (SELECT CONCAT(#{brandGb},IFNULL(LPAD(CAST(SUBSTRING(MAX(BRAND_CD),2) AS UNSIGNED) + 1,4,'0'),'0000'))
+		        FROM   TB_BRAND Z
+		        WHERE  BRAND_CD LIKE CONCAT(#{brandGb},'%')
+		       )
+		</selectKey>
+		
 		INSERT INTO TB_BRAND (
 		       BRAND_CD
 		     , BRAND_ENM
 		     , BRAND_KNM
-		     , BRAND_GRP_NM
-		     , DISP_NM_LANG
-		     , RGB_CD
 		     , DISTRIBUTION_GB
 		     , SELF_YN
 		     , ERP_BRAND_CD
@@ -678,25 +695,19 @@
 		     , PNT_MRATE10
 		     , PNT_PRATE20
 		     , PNT_MRATE20
-		     , LOGO_FILE_NM
 		     , DISP_ORD
 		     , USE_YN
 		     , BRAND_NO
+		     , BRAND_GROUP_NO
 		     , REG_NO
 		     , REG_DT
 		     , UPD_NO
 		     , UPD_DT
 		)
 		VALUES (
-		       (SELECT CONCAT(#{brandGb},IFNULL(LPAD(CAST(SUBSTRING(MAX(BRAND_CD),2) AS UNSIGNED) + 1,4,'0'),'0000'))
-		        FROM   TB_BRAND Z
-		        WHERE  BRAND_CD LIKE CONCAT(#{brandGb},'%')
-		       )
+		       #{brandCd}
 		     , #{brandEnm}
 		     , #{brandKnm}
-		     , #{brandGrpNm}
-		     , #{dispNmLang}
-		     , #{rgbCd}
 		     , #{distributionGb}
 		     , CASE WHEN #{distributionGb} IN ('G065_10','G065_11','G065_12') THEN 'Y'
 		            ELSE 'N'
@@ -706,15 +717,15 @@
 		     , IFNULL(#{pntMrate10},0)
 		     , IFNULL(#{pntPrate20},0)
 		     , IFNULL(#{pntMrate20},0)
-		     , #{logoFileNm}
 		     , #{dispOrd}
 		     , #{useYn}
-		     , (SELECT CASE WHEN MAX(BRAND_NO) IS NULL THEN 40000   /* AS-IS 최대 수보다 크게 설정해야 함 */
+		     , (SELECT CASE WHEN MAX(BRAND_NO) IS NULL THEN 30000   /* AS-IS 최대 수보다 크게 설정해야 함 */
 		               ELSE (MAX(BRAND_NO) + 1) END
 		        FROM   TB_BRAND Z
 		        WHERE  1 = 1
-		        AND BRAND_NO > 40000                  /* AS-IS 최대 수보다 크게 크게 설정해야 함*/
+		        AND BRAND_NO > 29999                  /* AS-IS 최대 수보다 크게 크게 설정해야 함*/
 		       ) 
+		     , #{brandGroupNo}
 		     , #{regNo}
 		     , NOW()
 		     , #{updNo}
@@ -728,9 +739,6 @@
 		UPDATE TB_BRAND
 		SET    BRAND_ENM = #{brandEnm}
 		     , BRAND_KNM = #{brandKnm}
-		     , BRAND_GRP_NM = #{brandGrpNm}
-		     , DISP_NM_LANG = #{dispNmLang}
-		     , RGB_CD = #{rgbCd}
 		     , DISTRIBUTION_GB = #{distributionGb}
 		     , SELF_YN = CASE WHEN #{distributionGb} IN ('G065_10','G065_11','G065_12') THEN 'Y'
 		                      ELSE 'N'
@@ -740,9 +748,9 @@
 		     , PNT_MRATE10 = IFNULL(#{pntMrate10},0)
 		     , PNT_PRATE20 = IFNULL(#{pntPrate20},0)
 		     , PNT_MRATE20 = IFNULL(#{pntMrate20},0)
-		     , LOGO_FILE_NM = #{logoFileNm}
 		     , DISP_ORD = #{dispOrd}
 		     , USE_YN = #{useYn}
+		     , BRAND_GROUP_NO = #{brandGroupNo}
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
 		WHERE  BRAND_CD = #{brandCd}
@@ -1052,7 +1060,7 @@
 	</select>
 	
 	<!-- 브랜드 그룹 등록 -->
-	<insert id="createBrandGroup" parameterType="BrandGroup" keyProperty="BrandGroup">
+	<insert id="createBrandGroup" parameterType="BrandGroup" >
 		/* TsaBusiness.createBrandGroup */
 		INSERT INTO TB_BRAND_GROUP (
 		       BRAND_GROUP_NO
@@ -1061,23 +1069,23 @@
 		     , 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)
+		       (SELECT CASE WHEN MAX(BRAND_GROUP_NO) IS NULL THEN 30000
+		               ELSE (MAX(BRAND_GROUP_NO) + 1) END
+		        FROM   TB_BRAND_GROUP Z
+		        WHERE  1 = 1
+		        AND BRAND_GROUP_NO > 29999
+		       ) 
 		     , #{brandGroupEnm}
 		     , #{brandGroupKnm}
 		     , #{dispNmLang}
 		     , #{rgbCd}
 		     , #{logoFileNm}
-		     , #{dispOrd}
-		     , #{useYn}
-		     , (SELECT MAX(BRAND_GROUP_NO) + 1 FROM TB_BRAND_GROUP)
 		     , #{regNo}
 		     , NOW()
 		     , #{updNo}
@@ -1094,8 +1102,6 @@
 		     , 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}

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

@@ -3352,7 +3352,7 @@
 	</select>
 	
 	<!-- 광고 키워드 저장 -->
-	<insert id="saveAdKeyword" parameterType="AdKeyword">
+	<insert id="saveAdKeyword" parameterType="AdKeyword"   keyProperty="adKeywordSq">
 		/* TsaGoods.saveAdKeyword */
 		INSERT INTO TB_AD_KEYWORD (
 		       AD_KEYWORD_SQ

+ 0 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml

@@ -158,9 +158,6 @@
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
 		AND    C.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
-		<if test='brandGrpNm != null and brandGrpNm != ""'>
-		AND    A.BRAND_GRP_NM = #{brandGrpNm}
-		</if>
 		<if test='useYn != null and useYn != ""'>
 		AND    A.USE_YN = #{useYn}
 		</if>

+ 12 - 27
src/main/webapp/WEB-INF/views/business/BrandForm.html

@@ -279,6 +279,7 @@
 		},
 		{headerName: "브랜드영문명", field: "brandEnm", width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드국문명", field: "brandKnm", width: 150, cellClass: 'text-center'},
+		{headerName: "브랜드그룹번호", field: "brandGroupNo", width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드그룹명", field: "brandGroupNm", width: 150, cellClass: 'text-center'},
 		/*{
 			headerName: "공급업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
@@ -320,7 +321,7 @@
 	let columnDefs2 = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "공급업체코드", field: "supplyCompCd", width: 150, cellClass: 'text-center'},
-		{headerName: "공급업체명", field: "supplyCompNm", width: 150}
+		{headerName: "공급업체명", field: "supplyCompNm", width: 300}
 	];
 	
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
@@ -342,7 +343,8 @@
 		//$("#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=brandGroupNm]").val(event.data.brandGroupNm);
+		$("#detailForm input[name=brandGroupNo]").val(event.data.brandGroupNo);
 		$("#detailForm input[name=erpBrandCd]").val(event.data.erpBrandCd);
 		$("#detailForm select[name=distributionGb]").val(event.data.distributionGb);
 		//$("#detailForm input[name=supplyCompCd]").val(event.data.supplyCompCd);
@@ -568,6 +570,10 @@
 		var actionUrl = "/business/brand/group/popup/form?callbackFn=callBackBrandGroup";
 		cfnOpenModalPopup(actionUrl, 'popupBrandGroup'); 
 	});
+	var callBackBrandGroup = function(result) {
+		$("#detailForm input[name=brandGroupNm]").val(result[0].brandGroupNm);
+		$("#detailForm input[name=brandGroupNo]").val(result[0].brandGroupNo);
+	}
 	
 	// 브랜드담당MD 수정
 	$("#btnUpdateBrandMd").on("click", function() {
@@ -675,7 +681,7 @@
 		$("#detailForm select[name=brandGb]").removeAttr("disabled");
 		//$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
 		//$('#detailForm select[name=delvFeeCd]').empty().append('<option value="">[선택]</option>');
-		
+		$("#detailForm input[name=brandGroupNo]").val("");
 		$("#detailForm input[type=checkbox]").removeClass("checked");
 		$("#detailForm input[type=checkbox]").parent("label").removeClass("checked");
 		
@@ -730,30 +736,9 @@
 		if (!gagajf.validation('#detailForm'))
 			return false;
 		
-		// RGB 체크
-		if (!gagajf.isNull($('#detailForm input[name=rgbCd]')) ){
-			
-			var rgbCd = $('#detailForm input[name=rgbCd]').val();
-			if (rgbCd.indexOf('#') >= 0){
-				
-				mcxDialog.alertC("'#은 입력하지 마세요.", {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						$("#detailForm input[name=rgbCd]").focus();
-					}
-				});
-				return false;
-			}
-			
-			if (rgbCd.length != 6){
-				mcxDialog.alertC("6자리로 입력해 주세요", {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						$("#detailForm input[name=rgbCd]").focus();
-					}
-				});
-				return false;
-			}
+		if (gagajf.isNull($('#detailForm input[name=brandGroupNo]').val())){
+			mcxDialog.alert("브랜드그룹을 선택해 주세요.");
+			return false;
 		}
 		
 		//공급업체

+ 131 - 20
src/main/webapp/WEB-INF/views/business/BrandGroupPopupForm.html

@@ -14,7 +14,7 @@
  * 1.0  2021.02.19   eskim       최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="800" id="popupBrandGroup">
+<div class="modalPopup" data-width="900" data-height="full" id="popupBrandGroup">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
@@ -24,8 +24,9 @@
 		<!-- //TITLE -->
 		
 		<!-- 검색 조건 -->
-		<div class="panelContent">
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
 			<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%;"/>
@@ -52,12 +53,10 @@
 					</li>
 				</ul>
 			</form>
-		</div>
+
 		<!-- //검색 조건 -->
 		<!-- 리스트 영역 -->
-		<div class="panelContent">
-			<div id="gridBrandGroupList" style="width: 100%; height: 300px" class="ag-theme-balham"></div>
-		</div>
+		<div id="gridBrandGroupList" style="width: 100%; height: 300px" class="ag-theme-balham"></div>
 		<!-- 버튼 배치 영역 -->
 		<ul class="panelBar">
 			<li class="right">
@@ -66,7 +65,8 @@
 		</ul>
 		<!-- //리스트 영역 -->
 		<div class="panelContent">
-			<form id="brandGroupForm" name="detailForm" action="#" th:action="@{'/business/brand/group/save'}">
+			<form id="brandGroupForm" name="searchBrandGroupForm" action="#" th:action="@{'/business/brand/group/save'}">
+			<input type="hidden" name="mode" value="N"/>
 			<table class="frmStyle" aria-describedby="등록/수정 폼">
 				<colgroup>
 					<col style="width:10%;"/>
@@ -77,7 +77,7 @@
 				<tr>
 					<th>브랜드그룹코드</th>
 					<td>
-						<input type="text" class="w100" name="brandGroupCd" placeholder="자동생성" maxlength="5" readonly="readonly"/>
+						<input type="text" class="w100" name="brandGroupNo" placeholder="자동생성" maxlength="5" readonly="readonly"/>
 					</td>
 					<th>브랜드 그룹명노출언어<i class="required" title="필수"></i></th>
 						<td>
@@ -96,13 +96,13 @@
 					</td>
 				</tr>
 				<tr>
-					<th>RGB코드</th>
+					<th>RGB코드<i class="required" title="필수"></i></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>
+						<!-- <span class="marL10 cRed"><i class="fa fa-info-circle" aria-hidden="true"></i> 브랜드메인 GBN 배경색으로 적용, 미 입력시 기본색상으로 설정됩니다.</span> -->
 					</td>
 				</tr>
-				<tr id="brandImgArea" class="on">
+				<tr style="height:100px">
 					<th>브랜드이미지</th>
 					<td colspan="3">
 						<div class="uFile w300">
@@ -113,29 +113,34 @@
 							<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">
+						<span id="imgView" class="off">
 							<img id="bannerPreViewUrl" src="" style="height:100px"/>
-						</div>
+						</span>
 					</td>
 				</tr>
-				
 			</table>
 			</form>
-		</div>
+		</div>	
 		<!-- 버튼 배치 영역 -->
 		<ul class="panelBar">
 			<li class="right">
+				<button type="button" class="btn btn-info btn-lg" id="btnBrandGroupNew">신규</button>
 				<button type="button" class="btn btn-success btn-lg" id="btnBrandGroupSave">저장</button>
 			</li>
 		</ul>
+		</div>
 	</div>
-
+</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: "brandGroupNo", width: 120, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
 		{headerName: "브랜드그룹국문명", field: "brandGroupKnm", width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드그룹영문명", field: "brandGroupEnm", width: 150, cellClass: 'text-center'},
 		{headerName: "전시브랜드그룹명", field: "brandGroupNm", width: 150, cellClass: 'text-center'}
@@ -146,9 +151,37 @@
 
 	// Row double click
 	gridOptionsBrandGroupList.onRowDoubleClicked = function(event) {
-		$('#btnConfirmBrand').trigger('click');
+		$('#btnConfirmBrandGroup').trigger('click');
 	}
 
+	// Cell click
+	gridOptionsBrandGroupList.onCellClicked = function(event) {
+		if (event.colDef.field != 'brandGroupNo')
+			return;
+		
+		$("#brandGroupForm input[name=mode]").val("U");
+		$("#brandGroupForm input[name=brandGroupNo]").val(event.data.brandGroupNo);
+		$("#brandGroupForm input[name=brandGroupEnm]").val(event.data.brandGroupEnm);
+		$("#brandGroupForm input[name=brandGroupKnm]").val(event.data.brandGroupKnm);
+		$("#brandGroupForm input:radio[name=dispNmLang]:input[value=" + event.data.dispNmLang + "]").click();
+		$("#brandGroupForm input[name=rgbCd]").val(event.data.rgbCd);
+		//$("#brandGroupForm input:radio[name=useYn]:input[value=" + event.data.useYn + "]").click();
+		//$("#brandGroupForm input[name=dispOrd]").val(event.data.dispOrd);
+		
+		 var brandImg = event.data.logoFileNm;
+		if(!gagajf.isNull(brandImg)){
+			$("#logoFileNm").val(brandImg);
+			$("#bannerPreViewUrl").attr('src', $("#uploadDefaultUrl").val()+brandImg);
+			$("#imgView").removeClass("off").addClass("on");
+		}else {
+			$("#logoFileNm").val('');
+			$("#orgFileNm").val('');
+			$("#bannerPreViewUrl").attr('src', '');
+		}
+		$('#brandGroupForm input[name=file]').closest('div').find('label').text('파일선택'); 
+		
+	}
+	
 	// 조회
 	$('#btnSearchBrandGroup').on('click', function() {
 		
@@ -166,7 +199,7 @@
 		var selectedData = gagaAgGrid.selectedRowData(gridOptionsBrandGroupList);
 		
 		if (selectedData.length == 0) {
-			mcxDialog.alert('선택된 브랜드가 없습니다.');
+			mcxDialog.alert('선택된 그룹브랜드가 없습니다.');
 			return false;
 		}
 		
@@ -190,6 +223,84 @@
 		}
 	});
 	
+	//이미지 클릭시 미리보기
+	$("#bannerPreViewUrl").click(function(){
+		cfnOpenImagePreViewPopup('bannerPreimgView',$('#bannerPreViewUrl').attr('src'));
+	});
+	
+	//첨부파일 등록
+	$('#brandGroupForm input[name=file]').on('change', function() {
+		var file = this.files[0];
+		file.name = 'test';
+		if (typeof(file) == 'undefined'){
+			return;
+		}
+		
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display'
+				, file
+				, function(result) {
+					$('#brandGroupForm input[name=newSysFileNm]').val(result.newFileName);
+					$('#brandGroupForm input[name=sysFileNm]').val(result.newFileName);
+					$("#bannerPreViewUrl").attr('src', $("#uploadDefaultUrl").val()+result.newFileName);
+					$("#imgView").removeClass("off").addClass("on");
+				}
+				, 'image'
+		);
+	});
+	
+	// 저장
+	$("#btnBrandGroupSave").on("click", function() {
+		// 입력 값 체크
+		if (!gagajf.validation('#brandGroupForm'))
+			return false;
+		
+		// RGB 체크
+		if (!gagajf.isNull($('#brandGroupForm input[name=rgbCd]')) ){
+			
+			var rgbCd = $('#brandGroupForm input[name=rgbCd]').val();
+			if (rgbCd.indexOf('#') >= 0){
+				
+				mcxDialog.alertC("'#은 입력하지 마세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#brandGroupForm input[name=rgbCd]").focus();
+					}
+				});
+				return false;
+			}
+			
+			if (rgbCd.length != 6){
+				mcxDialog.alertC("6자리로 입력해 주세요", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#brandGroupForm input[name=rgbCd]").focus();
+					}
+				});
+				return false;
+			}
+		}
+		
+		
+		mcxDialog.confirm('저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxFormSubmit($('#brandGroupForm').prop('action'), '#brandGroupForm', function() {
+				});
+			}
+		});
+	});
+	
+	
+	// 신규 버튼 클릭
+	$("#btnBrandGroupNew").on("click", function() {
+		$("#brandGroupForm")[0].reset();
+		$("#brandGroupForm input[name=mode]").val("N");
+		$("#orgFileNm").val('');
+		$("#bannerPreViewUrl").attr('src', '');
+		$("#logoFileNm").val('');
+	});
+	
 	$(document).ready(function() {
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridBrandGroupList', gridOptionsBrandGroupList);
@@ -197,6 +308,6 @@
 /*]]>*/
 </script>
 
-</div>
+
 
 </html>

+ 1 - 1
src/main/webapp/WEB-INF/views/business/BrandPopupForm.html

@@ -88,7 +88,7 @@
 		{headerName: "브랜드번호", field: "brandCd", width: 120, cellClass: 'text-center'},
 		{headerName: "브랜드국문명", field: "brandEnm", width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드영문명", field: "brandKnm", width: 150, cellClass: 'text-center'},
-		{headerName: "브랜드그룹명", field: "brandGrpNm", width: 150, cellClass: 'text-center'}
+		{headerName: "브랜드그룹명", field: "brandGroupNm", width: 150, cellClass: 'text-center'}
 	];
 
 	let gridOptionsBrandList = gagaAgGrid.getGridOptions(columnDefsMdList);

+ 4 - 3
src/main/webapp/WEB-INF/views/goods/GoodsNaverPriceForm.html

@@ -25,6 +25,7 @@
 		</div>
 		<form id="searchForm" name="searchForm" action="#" th:action="@{'/goods/naver/price/list'}">
 		<input type="hidden" id="searchGb" name="searchGb" />
+		<input type="hidden" id="search" name="search" value="searchGoodsCd"/>
  		<!-- 패널 영역1 -->
 		<div class="panelStyle" >
 			<!-- TITLE -->
@@ -56,9 +57,9 @@
 						</td>
 						<th rowspan="3">키워드</th>
 						<td rowspan="3">
-							<select name="search" id="search">
+							<!-- <select name="search" id="search">
 								<option value="searchGoodsCd">상품코드</option>
-							</select>
+							</select> -->
 							<textarea class="textareaR3 w150" name="condition" id="condition"></textarea>
 						</td>
 					</tr>
@@ -251,7 +252,7 @@
 		for (i = 0; i < form.elements.length; i++ ) {
 			var el = form.elements[i];
 
-			if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize")) {
+			if ($(el).prop("type") == "text"  || $(el).prop("type") == "textarea"  || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize")) {
 				if (!(el.value == null || el.value == "")) {
 					cnt++;
 				}

BIN
src/main/webapp/image/icon_checkN.png


BIN
src/main/webapp/image/icon_checkND.png


BIN
src/main/webapp/image/icon_checkY.png


BIN
src/main/webapp/image/icon_checkYD.png


BIN
src/main/webapp/image/icon_radioND.png


BIN
src/main/webapp/image/icon_radioY.png


BIN
src/main/webapp/image/icon_radioYD.png


+ 47 - 47
src/main/webapp/ux/css/admin.ui.css

@@ -1,4 +1,6 @@
-@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700"); @import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700"); html,body {position:relative; height:100%;}
+@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700");
+@import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700");
+html,body {position:relative; height:100%;}
 html, body, header, div, ul, ol, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, label, a, p, form, input, textarea, table, hr, span, em {margin:0; padding:0; box-sizing:border-box;}
 body {overflow-x:hidden; font-family:"open sans", "Roboto", "Malgun Gothic", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size:12px; background-color:#f3f3f4;}
 h1, h2, h3, h4, h5, h6 {display:inline-block;}
@@ -16,7 +18,7 @@ input.btn-sm {padding:1px 6px;}
 input[type=text] {width:100%;}
 input[type=text], input[type=file], input[type=date], [type=password], textarea {padding:4px 3px 4px 5px; color:inherit; border-radius:1px; vertical-align:middle; margin:1px 3px 2px 0;}
 input[type=date],input[type=time],input[type=datetime-local],input[type=month] {-webkit-appearance:listbox;}
-input[readonly="readonly"], input[disabled="disabled"], input[readonly="readonly"]:before, input[disabled="disabled"]:before, select[readonly="readonly"], select[disabled="disabled"],textarea[readonly="readonly"] ,textarea[disabled="disabled"] {background-color:#eee !important;}
+input[readonly="readonly"], input[disabled="disabled"], select[readonly="readonly"], select[disabled="disabled"],textarea[readonly="readonly"] ,textarea[disabled="disabled"] {background-color:#eee !important;}
 button, select {text-transform:none;}
 button,[type=button],[type=reset],[type=submit] {margin:0; -webkit-appearance:button; border-radius:0; cursor:pointer; background-color:transparent; border-color:transparent;}
 button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner {padding:0; border-style:none;}
@@ -80,11 +82,11 @@ 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; width:30px; 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;}
+.alert-warning {color:#856404; background-color:#fff3cd; border-color:#f8e7b4;}
 .alert-danger {color:#721c24; background-color:#f8d7da; border-color:#f5c6cb;}
 
 /* header--------------- */
@@ -118,12 +120,13 @@ header a, header button {color:#fff;}
 #lnb-wrapper {position:fixed; top:60px; left:-260px; width:260px; height:100%; vertical-align:top; overflow-y:auto; transition:left .3s; -webkit-transition:left .3s; background-color:#2f4050;}
 #lnb-wrapper:after{content:''; position:absolute; top:0; left:0; z-index:-1; width:100%; height:100%;}
 #lnb-wrapper.on {left:0;}
-#lnb {margin-bottom:100px; width:260px;}
+#lnb {margin-bottom:100px;}
 #lnb a {display:block; color:#a7b1c2;}
+#lnb a::selection {background:none;}
 #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') right 15px top 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') right 15px top 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 +156,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;}
@@ -198,7 +201,7 @@ header a, header button {color:#fff;}
 .tabsNav .ui-tabs-active a {background-color:#fff; color:#222; border:1px solid #ccc; border-bottom:2px solid #fff;}
 .tab-del {position:absolute; top:1px; right:1px; padding:4px 6px; color:gray; cursor:pointer; border-top-right-radius:.25rem;}
 .tab-del:hover {color:#f40552;}
-a, button, .ui-state-active, .ui-state-focus, .ui-state-hover {outline:0 !important;}
+a, button, .ui-state-active, .ui-state-focus, .ui-state-hover, input[type=range] {outline:0 !important;}
 .tabsNav .ui-corner-top a {padding:0 35px 0 20px}
 
 /* tabsJr 영역 --------------- */
@@ -215,7 +218,7 @@ a, button, .ui-state-active, .ui-state-focus, .ui-state-hover {outline:0 !import
 .tabJr.on {display:block;}
 .tabJrContArea {vertical-align:middle;}
 
-/* modal, modeless popup --------------- */
+/* MODAL, MODELESS POPUP --------------- */
 .modalPopup{display:none; position:fixed; left:0; top:0; z-index:11; width:100%; height:100%; background:rgba(0,0,0,0.5);}
 .modalPopup > .panelStyle{position:absolute; top:50%; left:50%; z-index:11; -ms-transform:translate(-50%, -50%); transform:translate(-50%, -50%); margin:0; border:1px solid #79797a; border-radius:3px;}
 .modalPopup > .panelStyle .close {position:absolute; top:0; right:0; font-size:18px; padding:5px 15px 8px;}
@@ -238,12 +241,10 @@ a, button, .ui-state-active, .ui-state-focus, .ui-state-hover {outline:0 !import
 .videoPopup .close {position:absolute; top:-20px; right:-20px; z-index:1; width:40px; height:40px; line-height:20px; font-size:20px; border:1px solid #666; border-radius:50px; background-color:#fff;}
 .videoPopup iframe{width:100%; height:100%}
 
-
 #btnTop {display:none; position:fixed; right:0; bottom:50px; width:40px; line-height:10px; font-size:10px; background:#fff; border:1px solid #ddd; border-right:none; padding:3px 0 5px 0; box-shadow:5px 5px 5px -4px rgba(0, 0, 0, 0.07); color:#1c84c6;}
 #btnTop i {width:100%; font-size:12px;}
 #btnTop:hover {padding-right:30px; width:70px; font-weight:bold;}
 
-
 /* 컨텐트 스크롤--------------- */
 .xScroll {overflow-x:auto;}
 .yScroll {overflow-y:auto;}
@@ -256,22 +257,21 @@ a, button, .ui-state-active, .ui-state-focus, .ui-state-hover {outline:0 !import
 .frmStyle th {padding:0 15px; height:36px; line-height:24px; white-space:nowrap; text-align:center; background:#e9ecfb;}
 .frmStyle td {padding:0 10px 0 10px; line-height:36px; position:relative; border-top:1px solid #eee; border-right:1px solid #eee;}
 
-/* 체크박스&라디오박스 공통--------------- */
-input[type=radio] {position:absolute; top:50%; left:0; width:18px; height:18px; transform:translate(0,-50%); -ms-transform:translate(0,-50%);}
+/* 체크박스 & 라디오버튼 : 공통--------------- */
 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%;}
-
-/* 체크박스--------------- */
-label.chkBox::before {position:absolute; top:2px; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; background:#fff;}
-label.chkBox.checked::after {position:absolute; top:6px; left:3px; content:''; width:8px; height:4px; border-bottom:3px solid #676a6c; border-left:3px solid #676a6c; -webkit-transform:rotate(-45deg); transform:rotate(-45deg);}
-label.chkBox .formControl::before {background:#eee;}
-
-/* 라디오버튼--------------- */
-input[type=radio]::before {position:absolute; top:0; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; border-radius:50%; background:#fff;}
-input[type=radio]:checked::after {position:absolute; top:5px; left:5px; content:''; width:8px; height:8px; border-radius:50%; background:#676a6c;}
-input[type=radio].formControl::before {background:#eee;}
+label.chkBox input, label.rdoBtn input{position:absolute; top:2px; left:0; width:0; height:0; border:none;}
+/* 체크박스 */
+label.chkBox::after {content:''; position:absolute;top:0; left:0;width:22px; height:22px;}
+label.chkBox input::after{content:''; position:absolute; top:0; left:0; width:18px; height:18px;background:url('/image/icon_checkN.png') no-repeat 0 0;}
+label.chkBox input:checked::after{background:url('/image/icon_checkY.png') no-repeat 0 0;}
+label.chkBox input[disabled='disabled']::after, label.chkBox input[readonly='readonly']::after{background:url('/image/icon_checkND.png') no-repeat 0 0;}
+label.chkBox input[disabled='disabled']:checked::after, label.chkBox input[readonly='readonly']:checked::after{background:url('/image/icon_checkYD.png') no-repeat 0 0;}
+/* 라디오버튼 */
+label.rdoBtn::after {content:''; position:absolute;top:0; left:0;width:22px; height:22px;}
+label.rdoBtn input::after{content:''; position:absolute; top:0; left:0; width:18px; height:18px;background:url('/image/icon_radioN.png') no-repeat 0 0;}
+label.rdoBtn input:checked::after{background:url('/image/icon_radioY.png') no-repeat 0 0;}
+label.rdoBtn input[disabled='disabled']::after, label.rdoBtn input[readonly='readonly']::after{background:url('/image/icon_radioND.png') no-repeat 0 0;}
+label.rdoBtn input[disabled='disabled']:checked::after, label.rdoBtn input[readonly='readonly']:checked::after{background:url('/image/icon_radioYD.png') no-repeat 0 0;}
 
 /* 토글 스위치--------------- */
 .switchBox{ display:inline-block;position:relative; width:60px; height:28px; vertical-align:middle;border-radius:25px;overflow:hidden;}
@@ -384,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;}
 
@@ -401,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;}
@@ -411,7 +411,7 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .badge-success {background-color:#2fa4e7;}
 .badge-info {background-color:#23c6c8;}
 .badge.circle {border-radius:50px;}
-.dep3 .badge {position:relative; top:-28px; right:20px;}
+.dep3 .badge {position:relative; top:-28px; right:15px;}
 
 /* badge-등급 ------------*/
 .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;}
@@ -422,7 +422,7 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .badgeLevel.black{background-color:#333;border:1px solid #333;color:#fff;}
 
 /* tag */
-.tagNum {display:inline-block; margin-left:5px; padding:0 3px 0 2px; min-width:13px; line-height:16px; font-weight:normal; color:#fc5555; background:#fff; border-radius:5px;}
+.tagNum {display:inline-block; margin-left:5px; padding:0 3px; min-width:16px; line-height:16px; font-weight:normal; color:#fc5555; background:#fff; border-radius:5px;}
 
 /* footer --------------- */
 footer {position:absolute; bottom:0; left:0; width:100%; height:40px; background-color:#fff; border-top:1px solid #e7eaec; line-height:39px; font-size:13px;}
@@ -445,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;}
 
 /* 조회용 이미지 카드 */
@@ -454,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;}
 
@@ -485,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:0; width:12px; height:7px; background:url('/image/icon_required.png') no-repeat 0 50%;}
 
 
 /* COLOR DESIGN -------------------------------------*/
@@ -648,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;}
@@ -659,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;}
@@ -816,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;}

+ 397 - 0
src/main/webapp/ux/css/dropzone.css

@@ -0,0 +1,397 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Matias Meno <m@tias.me>
+ */
+@-webkit-keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@-moz-keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@-webkit-keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@-moz-keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@-webkit-keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+@-moz-keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+@keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+.dropzone, .dropzone * {
+  box-sizing: border-box; }
+
+.dropzoneWrap{margin:7px 0} /*추가*/
+.dropzone {
+  min-height: 150px;
+  border: 1px dashed #bbbbbb;
+  background: white;
+  /*padding: 10px;*/ }
+  .dropzone.dz-clickable {
+    cursor: pointer; }
+    .dropzone.dz-clickable * {
+      cursor: default; }
+    .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {
+      cursor: pointer; }
+  .dropzone.dz-started .dz-message {
+    display: none; }
+  .dropzone.dz-drag-hover {
+    border-style: solid; }
+    .dropzone.dz-drag-hover .dz-message {
+      opacity: 0.5; }
+  .dropzone .dz-message {
+    text-align: center;
+    line-height:150px;}
+    .dropzone .dz-message .dz-button {
+      background: none;
+      color: inherit;
+      border: none;
+      padding: 0;
+      font: inherit;
+      cursor: pointer;
+      outline: inherit; }
+  .dropzone .dz-preview {
+    position: relative;
+    display: inline-block;
+    vertical-align: top;
+    margin: 16px;
+    min-height: 100px; }
+    .dropzone .dz-preview:hover {
+      z-index: 1000; }
+      .dropzone .dz-preview:hover .dz-details {
+        opacity: 1; }
+    .dropzone .dz-preview.dz-file-preview .dz-image {
+      border-radius: 20px;
+      background: #999;
+      background: linear-gradient(to bottom, #eee, #ddd); }
+    .dropzone .dz-preview.dz-file-preview .dz-details {
+      opacity: 1; }
+    .dropzone .dz-preview.dz-image-preview {
+      background: white; }
+      .dropzone .dz-preview.dz-image-preview .dz-details {
+        -webkit-transition: opacity 0.2s linear;
+        -moz-transition: opacity 0.2s linear;
+        -ms-transition: opacity 0.2s linear;
+        -o-transition: opacity 0.2s linear;
+        transition: opacity 0.2s linear; }
+    .dropzone .dz-preview .dz-remove {
+      font-size: 14px;
+      text-align: center;
+      display: block;
+      cursor: pointer;
+      border: none; }
+      .dropzone .dz-preview .dz-remove:hover {
+        text-decoration: underline; }
+    .dropzone .dz-preview:hover .dz-details {
+      opacity: 1; }
+    .dropzone .dz-preview .dz-details {
+      z-index: 20;
+      position: absolute;
+      top: 0;
+      left: 0;
+      opacity: 0;
+      font-size: 13px;
+      min-width: 100%;
+      max-width: 100%;
+      padding: 2em 1em;
+      text-align: center;
+      color: rgba(0, 0, 0, 0.9);
+      line-height: 150%; }
+      .dropzone .dz-preview .dz-details .dz-size {
+        margin-bottom: 1em;
+        font-size: 16px; }
+      .dropzone .dz-preview .dz-details .dz-filename {
+        white-space: nowrap; }
+        .dropzone .dz-preview .dz-details .dz-filename:hover span {
+          border: 1px solid rgba(200, 200, 200, 0.8);
+          background-color: rgba(255, 255, 255, 0.8); }
+        .dropzone .dz-preview .dz-details .dz-filename:not(:hover) {
+          overflow: hidden;
+          text-overflow: ellipsis; }
+          .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
+            border: 1px solid transparent; }
+      .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
+        background-color: rgba(255, 255, 255, 0.4);
+        padding: 0 0.4em;
+        border-radius: 3px; }
+    .dropzone .dz-preview:hover .dz-image img {
+      -webkit-transform: scale(1.05, 1.05);
+      -moz-transform: scale(1.05, 1.05);
+      -ms-transform: scale(1.05, 1.05);
+      -o-transform: scale(1.05, 1.05);
+      transform: scale(1.05, 1.05);
+      -webkit-filter: blur(8px);
+      filter: blur(8px); }
+    .dropzone .dz-preview .dz-image {
+      border-radius: 20px;
+      overflow: hidden;
+      width: 120px;
+      height: 120px;
+      position: relative;
+      display: block;
+      z-index: 10; }
+      .dropzone .dz-preview .dz-image img {
+        display: block; }
+    .dropzone .dz-preview.dz-success .dz-success-mark {
+      -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }
+    .dropzone .dz-preview.dz-error .dz-error-mark {
+      opacity: 1;
+      -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }
+    .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
+      pointer-events: none;
+      opacity: 0;
+      z-index: 500;
+      position: absolute;
+      display: block;
+      top: 50%;
+      left: 50%;
+      margin-left: -27px;
+      margin-top: -27px; }
+      .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
+        display: block;
+        width: 54px;
+        height: 54px; }
+    .dropzone .dz-preview.dz-processing .dz-progress {
+      opacity: 1;
+      -webkit-transition: all 0.2s linear;
+      -moz-transition: all 0.2s linear;
+      -ms-transition: all 0.2s linear;
+      -o-transition: all 0.2s linear;
+      transition: all 0.2s linear; }
+    .dropzone .dz-preview.dz-complete .dz-progress {
+      opacity: 0;
+      -webkit-transition: opacity 0.4s ease-in;
+      -moz-transition: opacity 0.4s ease-in;
+      -ms-transition: opacity 0.4s ease-in;
+      -o-transition: opacity 0.4s ease-in;
+      transition: opacity 0.4s ease-in; }
+    .dropzone .dz-preview:not(.dz-processing) .dz-progress {
+      -webkit-animation: pulse 6s ease infinite;
+      -moz-animation: pulse 6s ease infinite;
+      -ms-animation: pulse 6s ease infinite;
+      -o-animation: pulse 6s ease infinite;
+      animation: pulse 6s ease infinite; }
+    .dropzone .dz-preview .dz-progress {
+      opacity: 1;
+      z-index: 1000;
+      pointer-events: none;
+      position: absolute;
+      height: 16px;
+      left: 50%;
+      top: 50%;
+      margin-top: -8px;
+      width: 80px;
+      margin-left: -40px;
+      background: rgba(255, 255, 255, 0.9);
+      -webkit-transform: scale(1);
+      border-radius: 8px;
+      overflow: hidden; }
+      .dropzone .dz-preview .dz-progress .dz-upload {
+        background: #333;
+        background: linear-gradient(to bottom, #666, #444);
+        position: absolute;
+        top: 0;
+        left: 0;
+        bottom: 0;
+        width: 0;
+        -webkit-transition: width 300ms ease-in-out;
+        -moz-transition: width 300ms ease-in-out;
+        -ms-transition: width 300ms ease-in-out;
+        -o-transition: width 300ms ease-in-out;
+        transition: width 300ms ease-in-out; }
+    .dropzone .dz-preview.dz-error .dz-error-message {
+      display: block; }
+    .dropzone .dz-preview.dz-error:hover .dz-error-message {
+      opacity: 1;
+      pointer-events: auto; }
+    .dropzone .dz-preview .dz-error-message {
+      pointer-events: none;
+      z-index: 1000;
+      position: absolute;
+      display: block;
+      display: none;
+      opacity: 0;
+      -webkit-transition: opacity 0.3s ease;
+      -moz-transition: opacity 0.3s ease;
+      -ms-transition: opacity 0.3s ease;
+      -o-transition: opacity 0.3s ease;
+      transition: opacity 0.3s ease;
+      border-radius: 8px;
+      font-size: 13px;
+      top: 130px;
+      left: -10px;
+      width: 140px;
+      background: #be2626;
+      background: linear-gradient(to bottom, #be2626, #a92222);
+      padding: 0.5em 1.2em;
+      color: white; }
+      .dropzone .dz-preview .dz-error-message:after {
+        content: '';
+        position: absolute;
+        top: -6px;
+        left: 64px;
+        width: 0;
+        height: 0;
+        border-left: 6px solid transparent;
+        border-right: 6px solid transparent;
+        border-bottom: 6px solid #be2626; }

+ 43 - 48
src/main/webapp/ux/js/admin.ui.js

@@ -174,60 +174,55 @@ $(document).ready(function(){
 	});
 
 	$(document).on("click", ".chkBox", function(e){
-		let cntId = $(this).parent().parent("ul").attr("data-count-id");
-		let cntLen;
-
-		if ( $(this).find("input").is('[id]') ){ // ---------------전체선택ID
-			let $id = $(this).find("input").attr("id");
-			if ( $(this).hasClass("checked") ) { //체크된 경우
-				$("input[id="+$id+"]").parent("label").removeClass("checked");
-				$("input[id="+$id+"]").prop("checked", false);
-				$("input[name="+$id+"]").parent("label").removeClass("checked");
-				$("input[name="+$id+"]").prop("checked", false);
-			} else {
-				$("input[id="+$id+"]").parent("label").addClass("checked");
-				$("input[id="+$id+"]").prop("checked", true);
-				$("input[name="+$id+"]").parent("label").addClass("checked");
-				$("input[name="+$id+"]").prop("checked", true);
-			};
-			//선택된 개수 출력 (checkBoxList)
-			if (cntId != undefined ) {
-				cntLen =  $("input[name="+$id+"]:checked").length; //체크된 개수
-				$("#"+cntId).text(cntLen);
-			};
-			return false;
+		if (  !$(this).children("input").is("[disabled]")  && !$(this).children("input").is("[readonly]") ) {
 
-		} else {	// ---------------개별선택
-			let $name = $(this).find("input").attr("name");
-			let totLen = $("input[name="+$name+"]").length; //전체 개수
-			if ( $(this).hasClass("checked")) {
-				$(this).removeClass("checked");
-				$(this).find("input").prop("checked", false);
-				$("input[id="+$name+"]").prop("checked", false);
-				$("input[id="+$name+"]").parent("label").removeClass("checked");
-			} else {
-				$(this).addClass("checked");
-				$(this).find("input").prop("checked", true);
-				cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
-				if (totLen == cntLen ){
-					$("input[id="+$name+"]").prop("checked", true);
-					$("input[id="+$name+"]").parent("label").addClass("checked");
-				}
-			};
-			//선택된 개수 출력 (checkBoxList)
-			if (cntId != undefined ) {
-				cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
-				if (totLen > cntLen ) {
+			let cntId = $(this).parent().parent("ul").attr("data-count-id");
+			let cntLen;
+
+			if ( $(this).children("input").is('[id]') ){ // ---------------전체선택ID
+				let $id = $(this).children("input").attr("id");
+				if ( $(this).children("input").is(":checked") ) { //체크된 경우
+					$("input[id="+$id+"]").prop("checked", false);
+					$("input[name="+$id+"]").prop("checked", false);
+				} else {
+					$("input[id="+$id+"]").prop("checked", true);
+					$("input[name="+$id+"]").prop("checked", true);
+				};
+				//선택된 개수 출력 (checkBoxList)
+				if (cntId != undefined ) {
+					cntLen =  $("input[name="+$id+"]:checked").length; //체크된 개수
 					$("#"+cntId).text(cntLen);
-				} else if  (totLen == cntLen ) {
-					$("#"+cntId).text(totLen);
 				};
+				return false;
+
+			} else {	// ---------------개별선택
+				let $name = $(this).find("input").attr("name");
+				let totLen = $("input[name="+$name+"]").length; //전체 개수
+				if ( $(this).children("input").is(":checked") ) {
+					$(this).find("input").prop("checked", false);
+					$("input[id="+$name+"]").prop("checked", false); //전체선택 체크 해제
+				} else {
+					//$(this).addClass("checked");
+					$(this).find("input").prop("checked", true);
+					cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
+					if (totLen == cntLen ){
+						$("input[id="+$name+"]").prop("checked", true); //전체선택 체크
+					}
+				};
+				//선택된 개수 출력 (checkBoxList)
+				if (cntId != undefined ) {
+					cntLen =  $("input[name="+$name+"]:checked").length; //체크된 개수
+					if (totLen > cntLen ) {
+						$("#"+cntId).text(cntLen);
+					} else if  (totLen == cntLen ) {
+						$("#"+cntId).text(totLen);
+					};
+				};
+				return false;
 			};
-			return false;
-		};
+		}
 	});
 
-
 	/* CheckBox List : More(+) 버튼 */
 	$(document).on("click", ".checkBoxList .more", function(){
 		var thisI = $(this).find("i");