소스 검색

상품 이미지 등록

eskim 5 년 전
부모
커밋
ba471482e0

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

@@ -963,7 +963,7 @@ public class TsaGoodsController extends TsaBaseController {
 	 * @author eskim
 	 * @since 2020. 11. 09
 	 */
-	@GetMapping("/image/mass/form")
+	@GetMapping("/image/form")
 	@ResponseBody
 	public ModelAndView imageMassForm(GoodsImg goodsImg) {
 		ModelAndView mav = new ModelAndView();
@@ -985,7 +985,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		mav.addObject("goodsImg", goodsImg);
-		mav.setViewName("goods/GoodsImageMassForm");
+		mav.setViewName("goods/GoodsImageForm");
 		return mav;
 	}
 
@@ -1004,12 +1004,10 @@ public class TsaGoodsController extends TsaBaseController {
 			throw new IllegalStateException(message.getMessage("FAIL_1001"));
 
 		String dextUploadPath = env.getProperty("upload.dext.target.path");
-		String goodsUploadPath = env.getProperty("upload.goods.target.path");
+		String goodsTargetPath = env.getProperty("upload.goods.target.path");
 
 		int index = 1;
-
 		String strBrandNo = "";
-		log.info("[saveGoodsThumbnailImageList] goodsImgList = {}", goodsImgList);
 
 		// 오류 파일 목록
 		Collection<File> errorFileList = new ArrayList<File>();
@@ -1025,12 +1023,10 @@ public class TsaGoodsController extends TsaBaseController {
 			if (strBrandNo.isEmpty()) {
 				Goods goods = new Goods();
 				goods.setGoodsCd(goodsImg.getGoodsCd());
-				log.info("[saveGoodsThumbnailImageList] goods = {}", goods);
 				Goods goodsInfo = goodsService.getGoods(goods);
 				if (goodsInfo == null || goodsInfo.getGoodsCd().isEmpty())
 					throw new IllegalStateException(message.getMessage("FAIL_1001"));
 
-				log.info("[saveGoodsThumbnailImageList] goodsInfo = {}", goodsInfo);
 				strBrandNo = String.valueOf(goodsInfo.getBrandNo());
 			}
 
@@ -1043,16 +1039,23 @@ public class TsaGoodsController extends TsaBaseController {
 				String newFilename = goodsImg.getSysImgNm();
 
 				String brandDir = GagaFileUtil.getConcatenationPath(GagaStringUtil.getLPadding(strBrandNo, 10, "0"),GagaDateUtil.getToday()); // 브랜드/UPLOAD 일 YYYYMMDD
+				String goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsTargetPath, brandDir);		//저장경로 생성
 
-				File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, brandDir, newFilename)));
-				File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, brandDir, uniqueFile.getName()));
-				log.info("newFile.getPath(): {}", newFile.getPath());
+				File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, newFilename)));
+				File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath,  uniqueFile.getName()));
+				//log.info("newFile.getPath(): {}", newFile.getPath());
 
 				// resizing 처리 시 오류가 발생할 경우 삭제하기 위해 설정
 				errorFileList.add(newFile);
 
 				File oldFile = new File(GagaFileUtil.getConcatenationPath(dextUploadPath, goodsImg.getSysImgNm()));
-				log.info("oldFile.getPath(): {}", oldFile.getPath());
+				//log.info("oldFile.getPath(): {}", oldFile.getPath());
+
+				File path = new File(goodsUploadPath);
+				if (!path.exists()) {
+					//log.info("mkdir ={}", goodsUploadPath);
+					path.mkdir();
+				}
 
 				boolean copyFlag = GagaFileUtil.copyFile(oldFile, newFile);
 				if (copyFlag) {
@@ -1060,46 +1063,6 @@ public class TsaGoodsController extends TsaBaseController {
 					GagaFileUtil.deleteFile(oldFile.getPath());
 				}
 
-//				// 1.1.Rename a file
-//				oldFile.renameTo(newFile);
-//
-//				Image srcImg = StyleImageUtils.getImageObject(newFile);
-//				int width = srcImg.getWidth(null);
-//				int height = srcImg.getHeight(null);
-//
-//				if ((width == 1079 && height == 1499) || (width == 750 && height == 1041)) {
-//					// 1.2.Resizing
-//					Collection<File> resizeFileList = StyleImageUtils.resizeGoodsImage(goodsUploadPath, newFile.getName());
-//
-//					// resizing 처리 시 오류가 발생할 경우 삭제하기 위해 설정
-//					errorFileList.addAll(resizeFileList);
-//				} else if (width == 1000 && height == 1000) {
-//					// 외부몰연동용 이미지로 설정
-//					goodsImg.setExtmallImgYn("Y");
-//
-//					// 1.3.외부몰용 대표이미지 type5 폴더에 등록
-//					File resizeFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, "type5", newFile.getName()));
-//					//resizeFile.createNewFile();
-//					boolean copyFlag = GagaFileUtil.copyFile(newFile, resizeFile);
-//					//삭제해야하나?
-//					if (copyFlag) {
-//						//기존이미지 삭제
-//						GagaFileUtil.deleteFile(newFile.getPath());
-//					}
-//
-//					// resizing 처리 시 오류가 발생할 경우 삭제하기 위해 설정
-//					errorFileList.add(resizeFile);
-//				} else {
-//					// 오류가 발생했으므로 rename된 파일과 resizing된 파일을 삭제
-//					if (errorFileList != null && !errorFileList.isEmpty()) {
-//						for (File errorFile : errorFileList) {
-//							//GagaFileUtil.deleteFile(errorFile.getPath());
-//						}
-//					}
-//
-//					throw new IllegalStateException("상품이미지 파일의 크기(" + width + "*" + height + ")가 맞지 않습니다. (올바른 크기: 1079*1499, 750*1041, 1000*1000)");
-//				}
-
 				goodsImg.setDispOrd(index++);
 				goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(brandDir,newFile.getName()));
 				goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(brandDir,newFile.getName()));
@@ -1113,18 +1076,14 @@ public class TsaGoodsController extends TsaBaseController {
 		// 2.dx5에서 삭제한 파일 실제 삭제 처리
 		for (GoodsImg goodsImg : goodsImgList) {
 			if (goodsImg.getMode().equals("D")) {
-				log.info("Original file to delete: {}", GagaFileUtil.getConcatenationPath(goodsUploadPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
+				log.info("Original file to delete: {}", GagaFileUtil.getConcatenationPath(goodsTargetPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
 
 				// 상품이미지 삭제
-				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(goodsUploadPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
+				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(goodsTargetPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
 
-				// 리사이징된 상품이미지 삭제
-//				StyleImageUtils.deleteResizedGoodsImage(goodsUploadPath, goodsImg.getSysImgNm());
 			}
 		}
 
-		log.info("[saveGoodsThumbnailImageList] goodsImgList222 = {}", goodsImgList);
-
 		// 상품이미지 저장 처리
 		goodsService.saveGoodsImageList(goodsImgList);
 

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html

@@ -152,7 +152,7 @@
 			mode = "C";
 		}
 		
-		cfnOpenGoodsImageMassPopup(goodsCd, colorCd, colorNm, mode);
+		cfnOpenGoodsImagePopup(goodsCd, colorCd, colorNm, mode);
 		
 	}
 	$(document).ready(function() {

+ 226 - 150
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsImageForm.html

@@ -3,8 +3,8 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : GoodsImageForm.html
- * @desc    : 상품 이미지 관리 화면(입점)
+ * @source  : GoodsImageMassForm.html
+ * @desc    : 상품 이미지 보기 화면(대량등록)
  *============================================================================
  * SISUN
  * Copyright(C) 2019 TSIT, All rights reserved.
@@ -12,186 +12,262 @@
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
  * 1.0  2020.11.27   eskim       최초 작성
-  *******************************************************************************
+ *******************************************************************************
  -->
-	<div class="modalPopup"  data-width="650">
+	<div class="modalPopup" data-width="1280">
 		<!-- PANELSTYLE -->
-		<div class="panelStyle">
-			<div class="panelTitle">
-				<strong>상품 이미지 보기&nbsp;<button type="button" class="btn icn" onclick="fnOpenCommentPopup('comment')" ><i class="fa fa-cog" aria-hidden="true"></i></button></strong>
-				<button type="button" class="close" onclick="fnGoodsImgFormClose()"><i class="fa fa-times"></i></button>
-			</div>
-			<div class="panelContent">
-			<form id="goodsImgForm" name="goodsImgForm" th:method="post">
-			<input type="hidden" id="goodsCd" name="goodsCd" th:value="${params.goodsCd}"/>
-				<table class="frmStyle" th:with="uploadGoodsUrl=${@environment.getProperty('upload.goods.view')},uxImgUrl=${@environment.getProperty('domain.uximage')}">
-					<colgroup>
-						<col width="75%"/>
-						<col width="25%"/>
-					</colgroup>
-					<tbody id="goodsImgList">
+			<div class="panelStyle">
+				<!-- TITLE -->
+				<div class="panelTitle">
+					<h2>상품 이미지 <th:block th:text="${goodsImg.mode =='U'}? '상세':'등록'"></th:block>&nbsp;<button type="button" class="btn icn" onclick="fnOpenCommentPopup('comment')" ><i class="fa fa-cog" aria-hidden="true"></i></button></h2>
+					<button type="button" class="close" onclick="fnGoodsImgFormClose()"><i class="fa fa-times"></i></button>
+				</div>
+				<!-- //TITLE -->
+				<!-- CONTENT -->
+				<div class="panelContent">
+				<form id="goodsImgForm" name="goodsImgForm" action="#" th:method="post">
+				<input type="hidden" name="goodsCd" th:value="${goodsImg.goodsCd}"/>
+				<input type="hidden" name="colorCd" th:value="${goodsImg.colorCd}"/>
+<!-- 				<input type="hidden" name="goodsCd" th:value="14373767"/>
+				<input type="hidden" name="colorCd" th:value="IV"/>
+ -->				
+					<ul class="notice">
+						<li>[업로드/수정] 버튼 클릭 하면 프론트에 바로 적용되므로 최종 확인 후 전송을 권장합니다.</li>
+						<li>이미지 미리보기 리스트는 <em>업로드 후</em> 확인 할 수 있습니다.</li>
+						<li>이미지보기 버튼은 이미지 파일 <em>등록 후</em> 확인 할 수 있습니다. 이미 <em>업로드 된</em> 파일은 확인 할 수 없습니다.(파일 크기 옆 화살표로 구분 가능합니다.)</li>
+					</ul>
+					<table class="frmStyle">
+						<colgroup>
+							<col width="7%"/>
+							<col width="25%"/>
+							<col width="8%"/>
+							<col width="10%"/>
+							<col width="8%"/>
+							<col width="10%"/>
+							<col width="8%"/>
+							<col/>
+						</colgroup>
 						<tr>
-							<th class="aL vaT">imgPath1 : <th:block th:utext="${'필수: 상품코드_01.jpg<i class=star></i>'}"></th:block>
-								<hr/>
-								<input type="text" class="w100p" id="imgPath1" name="imgPath1" />
-							</th>
-							<td>
-								<img  src="http://image.istyle24.com/Upload/ProductImage/0000004766/20200826/14505664_L.jpg?RS=560" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/image/no.gif'}+'\';'" width="200px"/>
+							<th>상품코드</th>
+							<td th:text="${goodsImg.goodsCd}">14373767</td>
+							<th>컬러명</th>
+							<td th:text="${goodsImg.colorNm}">PINK</td>
+							<th>대표 이미지순번</th>
+							<td><input type="text" class="text-right" name="defaultImgOrd" maxlength="3" th:value="${defaultImgOrd}" required="required" data-valid-type="number" data-valid-name="대표이미지순번"/></td>
+							<td colspan="2"></td>
+						</tr>
+						<tr>
+							<th>이미지등록</th>
+							<td class="dexterArea">
+
+								<!-- 덱스터 테이블 영역 -->
+								<ul class="dexterTable">
+									<li class="dexterNo" id="dx5Index">
+										<!-- 덱스터 테이블 번호 -->
+										<!-- //덱스터 테이블 번호 -->
+									</li>
+									<li>
+									<!-- 덱스터 테이블 삽입 -->
+										<!-- 덱스터 테이블 삽입<br/>공간은 테이블 넓이에 따라 자동으로 넓어집니다.<br/>
+										(최소 넓이 : 350px로 설정됨)<br/> -->
+										<div id="dext5-container" style="width: 100%; height: 450px;"></div>
+									<!-- //덱스터 테이블 -->
+									<li>
+								</ul>
+								<!-- //덱스터 테이블 영역 -->
+
+							</td>
+							<td colspan="6" class="verticalTop">
+
+								<!-- 이미지 카드 영역 -->
+								<div class="cardArea" id="dx5CardArea">
+									<!-- 이미지 카드 -->
+								</div>
+								<!-- //이미지 카드 영역 -->
 							</td>
 						</tr>
-					</tbody>
-				</table>
-			</form>
+					</table>
+				</form>	
+				</div>
+				<!-- 버튼 배치 영역 -->
+				<ul class="panelBar marT10">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-sm" id="btnAddFiles">파일 추가</button>
+						<button type="button" class="btn btn-default btn-sm" onclick="gagaDx5.deleteChooseFile();">선택 삭제</button>
+						<button type="button" class="btn btn-default btn-sm" onclick="gagaDx5.deleteAllFiles();">전체 삭제</button>
+						<button type="button" class="btn btn-info btn-sm" onclick="gagaDx5.moveFile(true);">위로 이동</button>
+						<button type="button" class="btn btn-info btn-sm" onclick="gagaDx5.moveFile(false);">아래로 이동</button>
+						<!-- <button type="button" class="btn btn-base btn-sm" onclick="gagaDx5.previewImage();">이미지 보기</button> -->
+						<button type="button" class="btn btn-base btn-sm" onclick="gagaDx5.uploadFiles();">업로드/수정</button>
+					</li>
+				</ul>
+				<!-- //버튼 배치 영역 -->
 			</div>
-			<ul class="panelBar">
-				<li class="right">
-				<th:block th:if="${sessionInfo.roleCd == 'G001_B000'}">
-				<button type="button" class="btn btnRight btn-success btn-lg" id="btnGoodsDetailImgSave">저장</button>
-				</th:block>
-				</li>
-			</ul>
-		</div>
 	</div>
+<script type="text/javascript" src="/dx5/dextuploadx5-configuration.js?v=2020122101"></script>
+<script type="text/javascript" src="/dx5/dextuploadx5.js?v=2020122101"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.dx5.js?2020122101"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
-	var fileExtension = [[${@environment.getProperty('upload.goods.allow.extension')}]];
+	
+	var goodsImgList = [[${goodsImgList}]];
+	
+	//--------------------------------------------------------------------------
+	// Dextupload X5 이벤트 Start
+	//--------------------------------------------------------------------------
+	// Dextupload X5 생성
+	gagaDx5.createDX5("dext5", "btnAddFiles", _goodsUrl, "goods");
+
+	// Dextupload X5 생성 후 호출되는 이벤트
+	var onDX5Created = function(id) {
+		var actionUrl = '/dext/files/upload/goods';
+		gagaDx5.onDX5Created(actionUrl, goodsImgList);
+	}
+
+	// Dextupload X5 에러 시 호출되는 이벤트
+	var onDX5Error = function(id, code, msg) {
+		mcxDialog.alert(id + " => " +  code + "\n" + msg);
+	}
+
+	// Dextupload X5 업로드 성공 시 호출되는 이벤트
+	var onDX5UploadCompleted = function(id) {
+		gagaDx5.uploadAfterProcess();
+	}
+
+	// Dextupload X5 이미지 등록이 완료된 후 호출되는 이벤트
+	var onDX5ItemsAdded = function(id, count) {
+		gagaDx5.resortDX5FileList();
+	}
+	//--------------------------------------------------------------------------
+	// Dextupload X5 이벤트 End
+	//--------------------------------------------------------------------------
+	
+	// 업로드 후처리. 반드시 구현해야 함. (gaga.dx5.js 파일에서 호출됨)
+	var fnUploadAfterProcess = function(id, result) {
+// 		if (typeof(result) != 'undefined') {
+// 			if (!gagajf.isNull(result.error.message)) {
+// 				gagaAlert.alert(result.error.message);
+// 				return;
+// 			}
+// 		}
+
+		console.log(result);
+
+		var dx = dx5.get(id);
 
-	//상품이미지 저정버튼 클릭 시
-	$('#btnGoodsDetailImgSave').click(function(e) {
-		if ($("#goodsImgForm").find("#goodsImgList tr").length == 0){
-			/* mcxDialog.alert('', function(){
+		var updatedData = [];
 
+		// 삭제한 파일 설정
+		var deleteFiles = dx.getRemovedFiles();
+		if (deleteFiles.length > 0) {
+			$.each(deleteFiles, function(idx, item) {
+				var params = new Object();
+				params.mode = 'D';
+				params.goodsCd = $('#goodsImgForm input[name=goodsCd]').val();
+				params.colorCd = $('#goodsImgForm input[name=colorCd]').val();
+				params.dispOrd = idx + 1;
+				params.orgImgNm = item.name;
+				params.sysImgNm = item.name;
+				params.sysImgUrl = item.url;
+				params.defaultImgYn = 'N';
+				updatedData.push(params);
 			});
-			return false; */
 		}
-		var optCheck = false;
-		var imgType = $('#goodsImgForm input[name=imgType]').val();
-		
-		$("#goodsImgForm").find("#goodsImgList tr").each(function() {
-			var size = 30;
-
-			for(i=0;i<size;i++){
-				var imgVal = $("#goodsImgForm").find("#goodsImgList tr").find("input[name=imgPath"+ (i+1) +"]").val();
-				
-				if(!gagajf.isNull(imgVal)){
-					var reg = "\.("+fileExtension+")$";
-					if(!(new RegExp(reg, "i")).test(imgVal)) {
-						optCheck = true;
-						mcxDialog.alertC('이미지는 ['+ fileExtension + '] 파일만 가능합니다.', {
-							sureBtnText: "확인",
-							sureBtnClick: function() {
-								$("#goodsImgForm").find("#goodsImgList tr").find("input[name=imgPath"+ (i+1)+"]").focus();
-							}
-						});
-						return false;
-					}
-
-					if (imgVal.indexOf('\\"') > -1){
-							optCheck = true;
-							mcxDialog.alertC('["]는 입력할 수 없습니다.', {
-								sureBtnText: "확인",
-								sureBtnClick: function() {
-									$("#goodsImgForm").find("#goodsImgList tr").find("input[name=imgPath"+ (i+1)+"]").focus();
-								}
-							});
-							return false;
-					}
-					if (imgVal.indexOf("\\'") > -1){
-							optCheck = true;
-							mcxDialog.alertC("[\\']는 입력할 수 없습니다.", {
-								sureBtnText: "확인",
-								sureBtnClick: function() {
-									$("#goodsImgForm").find("#goodsImgList tr").find("input[name=imgPath"+ (i+1)+"]").focus();
-								}
-
-							});
-							return false;
-					}
-					if (imgType == "A"){
-						if (imgVal.indexOf("http") > -1){
-							optCheck = true;
-							mcxDialog.alertC("이미지 도메인은 입력할 수 없습니다.", {
-								sureBtnText: "확인",
-								sureBtnClick: function() {
-									$("#goodsImgForm").find("#goodsImgList tr").find("input[name=imgPath"+ (i+1)+"]").focus();
-								}
-
-							});
-							return false;
-						}
-					}else{
-						if (imgVal.indexOf("https") <= -1){
-							optCheck = true;
-							mcxDialog.alertC("이미지 도메인을 입력해 주세요.", {
-								sureBtnText: "확인",
-								sureBtnClick: function() {
-									$("#goodsImgForm").find("#goodsImgList tr").find("input[name=imgPath"+ (i+1)+"]").focus();
-								}
-
-							});
-							return false;
-						}
-					}
-				}else{
-					if(i == 0){
-						optCheck = true;
-						mcxDialog.alertC("필수 상품이미지 입니다.", {
-							sureBtnText: "확인",
-							sureBtnClick: function() {
-								$("#goodsImgForm").find("#goodsImgList tr").find("input[name=imgPath"+ (i+1)+"]").focus();
-							}
-
-						});
-						return false;
-					}
-				}
-			}
-		});
 
-		if(optCheck) {
-			return false;
-		}
+		// 업로드한 파일 및 순서 변경한 파일 설정
+		var totCnt = dx.getTotalItemCount();
+		if (totCnt > 0) {
+			for (var i = 0; i < totCnt; i++) {
+				var item = dx.getItemByIndex(i);
 
-		mcxDialog.confirm('저장하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				gagajf.ajaxFormSubmit("/goods/img/save", "#goodsImgForm", fnGoodsImgFormClose);
+				var params = new Object();
+				params.mode = (item.type == 'FILE') ? 'C' : '';
+				params.goodsCd = $('#goodsImgForm input[name=goodsCd]').val();
+				params.colorCd = $('#goodsImgForm input[name=colorCd]').val();
+				params.dispOrd = i + 1;
+				params.orgImgNm = item.name;
+				params.sysImgNm = item.name;
+				params.sysImgUrl = item.url;
+				params.defaultImgYn = ($('#goodsImgForm input[name=defaultImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
+				updatedData.push(params);
 			}
+		}
+
+		var jsonData = JSON.stringify(updatedData);
+		console.log(jsonData);
+
+		gagajf.ajaxJsonSubmit('/goods/thumbnail/image/save', jsonData, fnUploadCallback);
+	}
+
+	// 콜백함수
+	var fnUploadCallback = function(result) {
+		// 기본이미지명 조회
+		//var actionUrl = '/goods/default/image/url'
+		//		+ '?goodsCd=' + $('#goodsImgForm input[name=goodsCd]').val()
+		//		+ '&colorCd=' + $('#goodsImgForm input[name=colorCd]').val();
+
+		//$.get(actionUrl
+		//	, function(url) {
+		//		console.log(url);
+		//		//opener.setImg($('#goodsImgForm input[name=defaultImgOrd]').val(), result.defaultImgNm);
+		//		fnGoodsImgFormClose();
+		//	});
+		fnGoodsImgFormClose();
+	}
+
+	// 더블클릭시 썸네일 지정 후 첫번째로 이동
+	function onDX5ItemDoubleClick(id, itemIndex, itemId, itemType) {
+		var dx = dx5.get(id);
+		var gubun = $("#gubun").val();
+
+		gagaAlert.confirm('선택하신 이미지를 대표이미지로 선택하시겠습니까?', function() {
+			firstMoveUp(itemIndex);
+			return false;
 		});
-	});
+	}
+
+	// 선택 항목을 첫번째로 이동
+	function firstMoveUp(selIndex){
+		ti = parseInt(selIndex, 10);
+		for(var i = ti; i > 0; i--) {
+			dx5.get("dext5").moveItemUp(i);
+		}
+	}
 
 	//창종료
 	var fnGoodsImgFormClose = function(){
+		$('.dx5-pop-up').remove();
+		$('.dx5-pop-dn').remove();
+		$('.dx5-pop-pv').remove();
+		$('.dx5-pop-cp').remove();
+		$('.dx5-pop-ud').remove();
 		uifnPopupClose('popupGoodsImage');
 	}
 
 	//안내팝업
 	var fnOpenCommentPopup = function(id) {
-		var str = '<div class="popupWrap" id="'+id+'" style="z-index:30">';
-		str = str + '<div class="popup modeless ui-widget-content ui-draggable ui-draggable-handle" style="display: block;  position: relative;">';
-		str = str + '<button type="button" class="close" onclick="uifnPopClose(\''+id+'\')"><i class="fa fa-times"></i></button>';
-		str = str + '<div class="mdPopContent">';
+		var str = '<div class="popupWrap"  id="'+id+'" style="z-index:30">';
+		str = str + '<div class="modalPopup" data-width="500">';
+		str = str + '<div class="panelStyle">';
+		str = str + '<div class="panelTitle"><button type="button" class="close" onclick="uifnPopupClose(\''+id+'\')"><i class="fa fa-times"></i></button></div>';
+		str = str + '<div class="panelContent">';
 		str = str + '<ul class="notice ">';
-		str = str + '<em><b>* 이미지 타입</b></em>';
-		str = str + '<li> <b>A</b> : <b>자사전용</b>(이미지 도메인명 없음)</li>';
-		str = str + '  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex) /P/PQS/PQS11TM24M_BU/1000/PQS11TM24M_BU_01.jpg';
-		str = str + '<li> <b>B</b> : <b>입점전용</b>(https를 포함한 이미지 전체 경로)</li>';
-		str = str + '  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex) <em>https:</em>//pastel.jpg2.kr/goods/LCCAJ334_IV_1.jpg';
-		str = str + '<li><b>IMG_PATH1 (<em>필수</em>)</b> : 상품코드_<b>01.jpg</li>';
-		str = str + '<li><b>IMG_PATH2 ~ IMG_PATH5</b> (선택) : 상품코드_<b>02</b>.jpg ~ 상품코드_<b>05</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH6 ~ IMG_PATH10</b> (선택, 화보컷) : 상품코드_<b>M1</b>.jpg ~ 상품코드_<b>M5</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH11 ~ IMG_PATH25</b> (선택, 상세컷) : 상품코드_<b>D1</b>.jpg ~ 상품코드_<b>D15</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH26 ~ IMG_PATH27</b> (선택, 라벨컷) : 상품코드_<b>R1</b>.jpg ~ 상품코드_<b>R2</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH28 ~ IMG_PATH30</b> (선택, 기타컷) : 상품코드_<b>E1</b>.jpg ~ 상품코드_<b>E3</b>.jpg</li>';
+		str = str + '<em><b>* 상품 이미지 파일명</b></em>';
+		str = str + '<li><b>상품메인컷</b> : 상품코드_<b>01</b>.jpg<em>(앞)</em>,상품코드_<b>02</b>.jpg<em>(뒤)</em></li>';
+		str = str + '<li><b>상품모델컷</b> : 상품코드_<b>M1</b>.jpg ~ 상품코드_<b>M5</b>.jpg</li>';
+		str = str + '<li><b>상품상세컷</b> : 상품코드_<b>D1</b>.jpg ~ 상품코드_<b>D5</b>.jpg</li>';
+		str = str + '<li><b>상품소재컷</b> : 상품코드_<b>S1</b>.jpg</li>';
+		str = str + '<li><b>상품라벨컷</b> : 상품코드_<b>L1</b>.jpg, (상품코드_<b>L2</b>.jpg)</li>';
 		str = str + '</ul>';
-		str = str + '</div></div></div>';
+		str = str + '</div></div></div></div>';
 
 		if ($('#'+ id).length == 0) {
 			$('body').append(str);
 		}
-		$("#"+id).css({display:"block"});
+		uifnPopupOpen(id);
+		//$("#"+id).css({display:"block"});
 	}
+	
 /*]]>*/
 </script>
 </html>

+ 0 - 278
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsImageMassForm.html

@@ -1,278 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : GoodsImageMassForm.html
- * @desc    : 상품 이미지 보기 화면(대량등록)
- *============================================================================
- * SISUN
- * Copyright(C) 2019 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.11.27   eskim       최초 작성
- *******************************************************************************
- -->
-	<div class="modalPopup" data-width="1280">
-		<!-- PANELSTYLE -->
-			<div class="panelStyle">
-				<!-- TITLE -->
-				<div class="panelTitle">
-					<h2>상품 이미지 <th:block th:text="${goodsImg.mode =='U'}? '상세':'등록'"></th:block>&nbsp;<button type="button" class="btn icn" onclick="fnOpenCommentPopup('comment')" ><i class="fa fa-cog" aria-hidden="true"></i></button></h2>
-					<button type="button" class="close" onclick="fnGoodsImgFormClose()"><i class="fa fa-times"></i></button>
-				</div>
-				<!-- //TITLE -->
-				<!-- CONTENT -->
-				<div class="panelContent">
-				<form id="goodsImgForm" name="goodsImgForm" action="#" th:method="post">
-				<input type="hidden" name="goodsCd" th:value="${goodsImg.goodsCd}"/>
-				<input type="hidden" name="colorCd" th:value="${goodsImg.colorCd}"/>
-<!-- 				<input type="hidden" name="goodsCd" th:value="14373767"/>
-				<input type="hidden" name="colorCd" th:value="IV"/>
- -->				
-					<ul class="notice">
-						<li>[업로드/수정] 버튼 클릭 하면 프론트에 바로 적용되므로 최종 확인 후 전송을 권장합니다.</li>
-						<li>이미지 미리보기 리스트는 <em>업로드 후</em> 확인 할 수 있습니다.</li>
-						<li>이미지보기 버튼은 이미지 파일 <em>등록 후</em> 확인 할 수 있습니다. 이미 <em>업로드 된</em> 파일은 확인 할 수 없습니다.(파일 크기 옆 화살표로 구분 가능합니다.)</li>
-					</ul>
-					<table class="frmStyle">
-						<colgroup>
-							<col width="7%"/>
-							<col width="25%"/>
-							<col width="8%"/>
-							<col width="10%"/>
-							<col width="8%"/>
-							<col width="10%"/>
-							<col width="8%"/>
-							<col/>
-						</colgroup>
-						<tr>
-							<th>상품코드</th>
-							<td th:text="${goodsImg.goodsCd}">14373767</td>
-							<th>컬러명</th>
-							<td th:text="${goodsImg.colorNm}">PINK</td>
-							<th>대표 이미지순번</th>
-							<td><input type="text" class="text-right" name="defaultImgOrd" maxlength="3" th:value="${defaultImgOrd}" required="required" data-valid-type="number" data-valid-name="대표이미지순번"/></td>
-							<td colspan="2"></td>
-						</tr>
-						<tr>
-							<th>이미지등록</th>
-							<td class="dexterArea">
-
-								<!-- 덱스터 테이블 영역 -->
-								<ul class="dexterTable">
-									<li class="dexterNo" id="dx5Index">
-										<!-- 덱스터 테이블 번호 -->
-										<!-- //덱스터 테이블 번호 -->
-									</li>
-									<li>
-									<!-- 덱스터 테이블 삽입 -->
-										<!-- 덱스터 테이블 삽입<br/>공간은 테이블 넓이에 따라 자동으로 넓어집니다.<br/>
-										(최소 넓이 : 350px로 설정됨)<br/> -->
-										<div id="dext5-container" style="width: 100%; height: 450px;"></div>
-									<!-- //덱스터 테이블 -->
-									<li>
-								</ul>
-								<!-- //덱스터 테이블 영역 -->
-
-							</td>
-							<td colspan="6" class="verticalTop">
-
-								<!-- 이미지 카드 영역 -->
-								<div class="cardArea" id="dx5CardArea">
-									<!-- 이미지 카드 -->
-								</div>
-								<!-- //이미지 카드 영역 -->
-							</td>
-						</tr>
-					</table>
-				</form>	
-				</div>
-				<!-- 버튼 배치 영역 -->
-				<ul class="panelBar marT10">
-					<li class="center">
-						<button type="button" class="btn btn-base btn-sm" id="btnAddFiles">파일 추가</button>
-						<button type="button" class="btn btn-default btn-sm" onclick="gagaDx5.deleteChooseFile();">선택 삭제</button>
-						<button type="button" class="btn btn-default btn-sm" onclick="gagaDx5.deleteAllFiles();">전체 삭제</button>
-						<button type="button" class="btn btn-info btn-sm" onclick="gagaDx5.moveFile(true);">위로 이동</button>
-						<button type="button" class="btn btn-info btn-sm" onclick="gagaDx5.moveFile(false);">아래로 이동</button>
-						<!-- <button type="button" class="btn btn-base btn-sm" onclick="gagaDx5.previewImage();">이미지 보기</button> -->
-						<button type="button" class="btn btn-base btn-sm" onclick="gagaDx5.uploadFiles();">업로드/수정</button>
-					</li>
-				</ul>
-				<!-- //버튼 배치 영역 -->
-			</div>
-	</div>
-<script type="text/javascript" src="/dx5/dextuploadx5-configuration.js?v=2020122101"></script>
-<script type="text/javascript" src="/dx5/dextuploadx5.js?v=2020122101"></script>
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.dx5.js?2020122101"></script>
-<script th:inline="javascript">
-/*<![CDATA[*/
-	
-	var goodsImgList = [[${goodsImgList}]];
-	
-	//--------------------------------------------------------------------------
-	// Dextupload X5 이벤트 Start
-	//--------------------------------------------------------------------------
-	// Dextupload X5 생성
-	gagaDx5.createDX5("dext5", "btnAddFiles", _goodsUrl, "goods");
-
-	// Dextupload X5 생성 후 호출되는 이벤트
-	var onDX5Created = function(id) {
-		var actionUrl = '/dext/files/upload/goods';
-		gagaDx5.onDX5Created(actionUrl, goodsImgList);
-	}
-
-	// Dextupload X5 에러 시 호출되는 이벤트
-	var onDX5Error = function(id, code, msg) {
-		mcxDialog.alert(id + " => " +  code + "\n" + msg);
-	}
-
-	// Dextupload X5 업로드 성공 시 호출되는 이벤트
-	var onDX5UploadCompleted = function(id) {
-		gagaDx5.uploadAfterProcess();
-	}
-
-	// Dextupload X5 이미지 등록이 완료된 후 호출되는 이벤트
-	var onDX5ItemsAdded = function(id, count) {
-		gagaDx5.resortDX5FileList();
-	}
-	//--------------------------------------------------------------------------
-	// Dextupload X5 이벤트 End
-	//--------------------------------------------------------------------------
-	
-	// 업로드 후처리. 반드시 구현해야 함. (gaga.dx5.js 파일에서 호출됨)
-	var fnUploadAfterProcess = function(id, result) {
-// 		if (typeof(result) != 'undefined') {
-// 			if (!gagajf.isNull(result.error.message)) {
-// 				gagaAlert.alert(result.error.message);
-// 				return;
-// 			}
-// 		}
-
-		console.log(result);
-
-		var dx = dx5.get(id);
-
-		var updatedData = [];
-
-		// 삭제한 파일 설정
-		var deleteFiles = dx.getRemovedFiles();
-		if (deleteFiles.length > 0) {
-			$.each(deleteFiles, function(idx, item) {
-				var params = new Object();
-				params.mode = 'D';
-				params.goodsCd = $('#goodsImgForm input[name=goodsCd]').val();
-				params.colorCd = $('#goodsImgForm input[name=colorCd]').val();
-				params.dispOrd = idx + 1;
-				params.orgImgNm = item.name;
-				params.sysImgNm = item.name;
-				params.sysImgUrl = item.url;
-				params.defaultImgYn = 'N';
-				updatedData.push(params);
-			});
-		}
-
-		// 업로드한 파일 및 순서 변경한 파일 설정
-		var totCnt = dx.getTotalItemCount();
-		if (totCnt > 0) {
-			for (var i = 0; i < totCnt; i++) {
-				var item = dx.getItemByIndex(i);
-
-				var params = new Object();
-				params.mode = (item.type == 'FILE') ? 'C' : '';
-				params.goodsCd = $('#goodsImgForm input[name=goodsCd]').val();
-				params.colorCd = $('#goodsImgForm input[name=colorCd]').val();
-				params.dispOrd = i + 1;
-				params.orgImgNm = item.name;
-				params.sysImgNm = item.name;
-				params.sysImgUrl = item.url;
-				params.defaultImgYn = ($('#goodsImgForm input[name=defaultImgOrd]').val() == (i + 1)) ? 'Y' : 'N';
-				updatedData.push(params);
-			}
-		}
-
-		var jsonData = JSON.stringify(updatedData);
-		console.log(jsonData);
-
-		gagajf.ajaxJsonSubmit('/goods/thumbnail/image/save', jsonData, fnUploadCallback);
-	}
-
-	// 콜백함수
-	var fnUploadCallback = function(result) {
-		// 기본이미지명 조회
-		//var actionUrl = '/goods/default/image/url'
-		//		+ '?goodsCd=' + $('#goodsImgForm input[name=goodsCd]').val()
-		//		+ '&colorCd=' + $('#goodsImgForm input[name=colorCd]').val();
-
-		//$.get(actionUrl
-		//	, function(url) {
-		//		console.log(url);
-		//		//opener.setImg($('#goodsImgForm input[name=defaultImgOrd]').val(), result.defaultImgNm);
-		//		fnGoodsImgFormClose();
-		//	});
-		fnGoodsImgFormClose();
-	}
-
-	// 더블클릭시 썸네일 지정 후 첫번째로 이동
-	function onDX5ItemDoubleClick(id, itemIndex, itemId, itemType) {
-		var dx = dx5.get(id);
-		var gubun = $("#gubun").val();
-
-		gagaAlert.confirm('선택하신 이미지를 대표이미지로 선택하시겠습니까?', function() {
-			firstMoveUp(itemIndex);
-			return false;
-		});
-	}
-
-	// 선택 항목을 첫번째로 이동
-	function firstMoveUp(selIndex){
-		ti = parseInt(selIndex, 10);
-		for(var i = ti; i > 0; i--) {
-			dx5.get("dext5").moveItemUp(i);
-		}
-	}
-
-	//창종료
-	var fnGoodsImgFormClose = function(){
-		$('.dx5-pop-up').remove();
-		$('.dx5-pop-dn').remove();
-		$('.dx5-pop-pv').remove();
-		$('.dx5-pop-cp').remove();
-		$('.dx5-pop-ud').remove();
-		uifnPopupClose('popupGoodsImageMass');
-	}
-
-	//안내팝업
-	var fnOpenCommentPopup = function(id) {
-		var str = '<div class="popupWrap"  id="'+id+'" style="z-index:30">';
-		str = str + '<div class="modalPopup" data-width="500">';
-		str = str + '<div class="panelStyle">';
-		str = str + '<div class="panelTitle"><button type="button" class="close" onclick="uifnPopupClose(\''+id+'\')"><i class="fa fa-times"></i></button></div>';
-		str = str + '<div class="panelContent">';
-		str = str + '<ul class="notice ">';
-		str = str + '<em><b>* 이미지 타입</b></em>';
-		str = str + '<li> <b>A</b> : <b>자사전용</b>(이미지 도메인명 없음)</li>';
-		str = str + '  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex) /P/PQS/PQS11TM24M_BU/1000/PQS11TM24M_BU_01.jpg';
-		str = str + '<li> <b>B</b> : <b>입점전용</b>(https를 포함한 이미지 전체 경로)</li>';
-		str = str + '  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex) <em>https:</em>//pastel.jpg2.kr/goods/LCCAJ334_IV_1.jpg';
-		str = str + '<li><b>IMG_PATH1 (<em>필수</em>)</b> : 상품코드_<b>01.jpg</li>';
-		str = str + '<li><b>IMG_PATH2 ~ IMG_PATH5</b> (선택) : 상품코드_<b>02</b>.jpg ~ 상품코드_<b>05</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH6 ~ IMG_PATH10</b> (선택, 화보컷) : 상품코드_<b>M1</b>.jpg ~ 상품코드_<b>M5</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH11 ~ IMG_PATH25</b> (선택, 상세컷) : 상품코드_<b>D1</b>.jpg ~ 상품코드_<b>D15</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH26 ~ IMG_PATH27</b> (선택, 라벨컷) : 상품코드_<b>R1</b>.jpg ~ 상품코드_<b>R2</b>.jpg</li>';
-		str = str + '<li><b>IMG_PATH28 ~ IMG_PATH30</b> (선택, 기타컷) : 상품코드_<b>E1</b>.jpg ~ 상품코드_<b>E3</b>.jpg</li>';
-		str = str + '</ul>';
-		str = str + '</div></div></div></div>';
-
-		if ($('#'+ id).length == 0) {
-			$('body').append(str);
-		}
-		uifnPopupOpen(id);
-		//$("#"+id).css({display:"block"});
-	}
-	
-/*]]>*/
-</script>
-</html>

+ 1 - 1
style24.admin/src/main/webapp/dx5/module/dextuploadx5-application-api.js

@@ -1,4 +1,4 @@
-/*
+/*
  * DEXTUploadX5 - Application
  * http://www.dextsolution.com
  *

+ 1 - 1
style24.admin/src/main/webapp/dx5/module/dextuploadx5-application-common.js

@@ -4,7 +4,7 @@
  *
  * Copyright ⓒ DEXTSolution Inc.
  */
-var gfileEngine = null; var gselectedList = []; var gsortedList = []; var gdx5Parameter = {}; var gDEF_HEADER_HEIGHT = 36, gMIN_HEADER_HEIGHT = 24, gMAX_HEADER_HEIGHT = 40; var gDEF_LSTITEM_HEIGHT = 31, gMIN_LSTITEM_HEIGHT = 31, gMAX_LSTITEM_HEIGHT = 40; var gDEF_FOOTER_HEIGHT = 36; var gDEF_CHECKER_WIDTH = 30; var gDEF_SIZECOL_WIDTH = 64; var gDEF_OPCOL_WIDTH = 30; var gvector = { version: "3.2.0.0",   uitype: "LIST", tileColumnCount: 2, maxFileCount: -1, maxFileCountWithVF: false, minFileSize: -1, maxFileSize: -1,
+var gfileEngine = null; var gselectedList = []; var gsortedList = []; var gdx5Parameter = {}; var gDEF_HEADER_HEIGHT = 36, gMIN_HEADER_HEIGHT = 24, gMAX_HEADER_HEIGHT = 40; var gDEF_LSTITEM_HEIGHT = 24, gMIN_LSTITEM_HEIGHT = 24, gMAX_LSTITEM_HEIGHT = 40; var gDEF_FOOTER_HEIGHT = 36; var gDEF_CHECKER_WIDTH = 30; var gDEF_SIZECOL_WIDTH = 64; var gDEF_OPCOL_WIDTH = 30; var gvector = { version: "3.2.0.0",   uitype: "LIST", tileColumnCount: 2, maxFileCount: -1, maxFileCountWithVF: false, minFileSize: -1, maxFileSize: -1,
 maxTotalSize: -1, maxTotalSizeWithVF: false, filterSilence: false, downloadLimitSize: -1, filters: [], reversedFilters: [], allowedNoExtension: true, uploadMode: "ORAF",   duplicable: false, useProgressDialog: true,   enableColumnSorting: false,   autoSortingType: 0,   sortPriorityVF: false, headerHeight: gDEF_HEADER_HEIGHT, savedHeaderHeight: gDEF_HEADER_HEIGHT, fileItemHeight: gDEF_LSTITEM_HEIGHT, footerHeight: gDEF_FOOTER_HEIGHT, headerTextBaseline: Math.floor(gDEF_HEADER_HEIGHT / 2) + 5, itemTextBaseline: Math.floor(gDEF_LSTITEM_HEIGHT / 2) + 5, footerTextBaseline: Math.floor(gDEF_FOOTER_HEIGHT / 2) + 5,
 checkerWidth: gDEF_CHECKER_WIDTH, vscrollbarWidth: 0, downloadButtonVisible: true, openButtonVisible: true, fileFormats: { image: ["jpg", "jpeg", "gif", "bmp", "tif", "tiff", "png", "rif", "ppm", "pgm", "pbm", "pnm", "svg", "webp", "pcx", "tga", "wmf", "raf", "orf", "crw", "raw", "scr", "nef", "srf", "cr2", "erf", "nrw", "pef", "dng", "ico", "jp2", "psp", "tgf", "cdr", "pic", "eps"], video: ["webm", "mkv", "flv", "vob", "avi", "wmv", "rm", "asf", "mp4", "m4p", "m4v", "mpg", "mpeg", "mov"], audio: ["aac", "au", "flac", "m4a", "mmf", "mp3", "ra", "ogg", "wma", "wav", "cda", "asx", "m3u"], msdoc: ["doc", "docx"],
 msxls: ["xls", "xlsx"], msppt: ["ppt", "pptx"], archv: ["zip", "arj", "7z", "alz", "gz", "rar", "cab", "tar", "lzh", "egg"], exec: ["exe", "sh", "msi", "com"], html: ["html", "htm", "xml", "css"], flash: ["fla", "swf", "air", "swz", "as"], outlook: ["pst", "eml", "dbx"], document: ["txt", "ps", "hlp", "rtf", "gul", "lwd"], clang: ["c", "hrc", "h"], cpplang: ["cpp", "hpp"], rubylang: ["rb", "rbw"], objclang: ["m", "mm"], javalang: ["java", "jsp", "jar", "war", "class"], etclang: ["bas", "pas", "por", "cgi", "rc"], font: ["ttf", "hft", "otf", "fnt", "fot", "eot", "woff"],

+ 1 - 1
style24.admin/src/main/webapp/ux/css/admin.ui.css

@@ -423,7 +423,7 @@ footer .f-right {float:right; padding-right:20px; line-height:38px;}
 /* 이미지 카드 */
 .dexterArea {min-width:350px; min-height:180px; padding:0 !important; vertical-align:top; background:#f1f1f1; vertical-align:top;}
 .dexterTable {display:table; width:100%; overflow-y:auto;}
-.dexterTable > li {display:table-cell; vertical-align:top; line-height:30px;}
+.dexterTable > li {display:table-cell; vertical-align:top; line-height:23px;}
 .dexterNo div {padding:0 10px; border-top:1px solid #ddd; border-right:1px solid #ddd; background:#fff;}
 .dexterNo div:first-child {margin-top:36px;}
 .dexterNo div:last-child {border-bottom:1px solid #ddd;}

+ 9 - 9
style24.admin/src/main/webapp/ux/js/admin.popup.js

@@ -217,14 +217,14 @@ var cfnOpenGoodsVideoPopup = function(id, objId, formid, type, fullUrl) {
  * @access : public
  * @desc   : 상품 이미지 보기
  * <pre>
- *     cfnOpenGoodsImagePopup('G2014120100098');
+ *     cfnOpenGoodsImagePopup('G2014120100098','BK','BLACK','U');
  * </pre>
  * @param  : goodsCd - 상품코드. 옵션
- * @since  : 2019/12/23
+ * @since  : 2020/12/22
  * @author : eskim
  */
-var cfnOpenGoodsImagePopup = function(goodsCd) {
-	var actionUrl = "/goods/image/form?goodsCd=" + goodsCd;
+var cfnOpenGoodsImagePopup = function(goodsCd, colorCd, colorNm, mode) {
+	var actionUrl = "/goods/image/form?goodsCd=" + goodsCd +"&colorCd=" + colorCd +"&colorNm=" + encodeURIComponent(colorNm)  +"&mode=" + mode;
 
 	uifnPopupClose('popupGoodsImage');
 	cfnOpenModalPopup(actionUrl, 'popupGoodsImage');
@@ -242,12 +242,12 @@ var cfnOpenGoodsImagePopup = function(goodsCd) {
  * @since  : 2020/11/27
  * @author : eskim
  */
-var cfnOpenGoodsImageMassPopup = function(goodsCd, colorCd, colorNm, mode) {
-	var actionUrl = "/goods/image/mass/form?goodsCd=" + goodsCd +"&colorCd=" + colorCd +"&colorNm=" + encodeURIComponent(colorNm)  +"&mode=" + mode;
+//var cfnOpenGoodsImageMassPopup = function(goodsCd, colorCd, colorNm, mode) {
+//	var actionUrl = "/goods/image/mass/form?goodsCd=" + goodsCd +"&colorCd=" + colorCd +"&colorNm=" + encodeURIComponent(colorNm)  +"&mode=" + mode;
 
-	uifnPopupClose('popupGoodsImageMass');
-	cfnOpenModalPopup(actionUrl, 'popupGoodsImageMass');
-}
+//	uifnPopupClose('popupGoodsImageMass');
+//	cfnOpenModalPopup(actionUrl, 'popupGoodsImageMass');
+//}
 
 /**
  * @type   : function

+ 1 - 1
style24.scm/src/main/webapp/ux/css/admin.ui.css

@@ -423,7 +423,7 @@ footer .f-right {float:right; padding-right:20px; line-height:38px;}
 /* 이미지 카드 */
 .dexterArea {min-width:350px; min-height:180px; padding:0 !important; vertical-align:top; background:#f1f1f1; vertical-align:top;}
 .dexterTable {display:table; width:100%; overflow-y:auto;}
-.dexterTable > li {display:table-cell; vertical-align:top; line-height:30px;}
+.dexterTable > li {display:table-cell; vertical-align:top; line-height:23px;}
 .dexterNo div {padding:0 10px; border-top:1px solid #ddd; border-right:1px solid #ddd; background:#fff;}
 .dexterNo div:first-child {margin-top:36px;}
 .dexterNo div:last-child {border-bottom:1px solid #ddd;}