Procházet zdrojové kódy

룩북 배너 피커 개발중

bin2107 před 5 roky
rodič
revize
ee73f40011

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

@@ -746,7 +746,7 @@ public class TsaDisplayController extends TsaBaseController {
 	 * @since 2021. 3. 5
 	 */
 	@GetMapping("/lookbook/banner/popup/form")
-	public ModelAndView mainMultiContentsPopupForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "lookbookSq", required = false) Integer lookbookSq) {
+	public ModelAndView lookbookBannerPopupForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "lookbookSq", required = false) Integer lookbookSq) {
 		ModelAndView mav = new ModelAndView();
 		mav.addObject("mode", mode);
 		mav.addObject("lookbookSq", lookbookSq);
@@ -810,4 +810,44 @@ public class TsaDisplayController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0009"));
 	}
 
+	/**
+	 * 룩북 배너 피커 팝업
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 9
+	 */
+	@GetMapping("/lookbook/banner/picker/popup/form")
+	public ModelAndView lookbookBannerPickerForm(@RequestParam(value = "lookbookbSq") Integer lookbookbSq, @RequestParam(value = "imgNm") String imgNm) {
+		log.info("lookbookbSq>>{}",lookbookbSq);
+		log.info("imgNm>>{}",imgNm);
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("lookbookbSq", lookbookbSq);
+		mav.addObject("imgNm", imgNm);
+		mav.addObject("lookbookBannerPickerList", coreLookbookService.getLookbookBannerPickerList(lookbookbSq));
+
+		if(coreLookbookService.getLookbookBannerPickerList(lookbookbSq).size() > 0){
+			mav.addObject("mode", "U");
+		}else{
+			mav.addObject("mode", "N");
+		}
+
+		mav.setViewName("display/LookbookBannerPickerPopupForm");
+		return mav;
+	}
+
+	/**
+	 * 룩북 배너 피커 등록/수정
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 9
+	 */
+	@PostMapping("/lookbook/banner/picker/save")
+	@ResponseBody
+	public GagaResponse saveLookbookPicker(@RequestBody LookbookGoods lookbookGoods) {
+		lookbookGoods.setRegNo(TsaSession.getInfo().getUserNo());
+		lookbookGoods.setUpdNo(TsaSession.getInfo().getUserNo());
+		coreLookbookService.saveLookbookPicker(lookbookGoods);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 }

+ 201 - 0
src/main/webapp/WEB-INF/views/display/LookbookBannerPickerPopupForm.html

@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : LookbookBannerPickerPopupForm.html
+ * @desc    : 룩북 배너 피커 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.03.09   bin2107     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1600" data-height="850">
+	<div class="panelStyle" style="overflow-y:scroll;">
+		<form id="lbBannerPickerForm" name="lbBannerPickerForm" action="#" th:action="@{'/display/lookbook/banner/picker/save'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<input type="hidden" id="lookbookbSq" name="lookbookbSq" th:value="${lookbookbSq}"/>
+			<div class="panelTitle">
+				<h2 th:text="${'룩북 피커' + (mode == 'N' ? '등록' : '상세')}"></h2>
+				<button type="button" class="close" onclick="uifnPopupClose('popupLookbookBannerPicker');"><i class="fa fa-times"></i></button>
+			</div>
+			<ul class="panelBar">
+				<li  class="right">
+					<button type="button" class="btn btnRight btn-success btn-lg" id="btnSavePicker">피커저장</button>
+				</li>
+			</ul>
+			<div id="pickerDiv">
+				<input type="hidden" name="uploadBannerUrl" id="uploadBannerUrl" th:value="${@environment.getProperty('upload.image.view') + '/display/lookbook/banner/'}"/>
+				<!-- posistion picker -->
+				<ul class="panelBar" id="pictureOffset"> <!--style="border-color: #dbdbdb;border-style: solid;border-width: 1px;"-->
+					<li>
+						<div class="picWrap">
+							<img id="bannerPreViewUrl" src="" class="picture" style="width:100%;"/>
+						</div>
+					</li>
+					<li>
+						<ul class="notice padB15">
+							<li>이미지를 클릭시 해당 위치의 <em>절대 좌표 값</em>을 가져옵니다.</li>
+						</ul>
+						<table class="frmStyle dataWrap">
+							<colgroup>
+								<col width="10%"/>
+								<col/>
+							</colgroup>
+						</table>
+					</li>
+				</ul>
+				<!-- //posistion picker -->
+			</div>
+		</form>
+	</div>
+</div>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var lookbookbSq = [[${lookbookbSq}]];
+	var imgNm = [[${imgNm}]];
+	var lookbookBannerPickerList = [[${lookbookBannerPickerList}]];
+
+	var $pic = $("#pictureOffset .picWrap");
+	var absX = absY = 0; //위치 표시 단위(픽셀)
+	var relX = relY = 0; //위치 표시 단위(퍼센트)
+	var trIdx = 0;
+	var idx = 0; //원 안의 숫자 count
+	const picW = $pic.width(); //이미지 넓이
+	const picY = $pic.height(); //이미지 높이
+
+	$pic.on('click', function(e) {
+		absX = e.pageX - $(this).offset().left; //left(px)
+		absY = e.pageY - $(this).offset().top; //top(px)
+		relX = ((absX / picW) * 100).toFixed(2); //left(%) : 소수점 둘째자리까지 표현
+		relY = ((absY / picY) * 100).toFixed(2); //top(%) : 소수점 둘째자리까지 표현
+		trIdx = trIdx+1; //ID
+		idx = idx+1; //circle value
+
+		//원 안에 숫자 표현
+		let posTag = `<span data-id="${trIdx}" class="pos" style="left:${relX}%; top:${relY}%;"><i>${idx}</i></span>`;
+		$pic.append(posTag);
+
+		//테이블에 좌표정보 표현
+		let trTag = `<tr data-id="${trIdx}" class="pickerTr">
+						<th>${idx}</th>
+						<td>
+							<span>left <input type="text" name="xlim" value="${relX}" readonly="readonly"/><em class="per">%</em></span>
+							<span>top <input type="text" name="ylim" value="${relY}" readonly="readonly"/><em class="per">%</em></span>
+							<span>상품코드
+								<input type="text" name="goodsCd" readonly="readonly"/>
+								<button type="button" value="검색하기" class="btn btn-base btn-lg" onclick="fnSearchGoods(${idx});">상품조회</button>
+							</span>
+							<span class="btnDel"><button type="button" value="검색하기" class="btn btn-dark btn-lg" onclick="trDel(${trIdx}, ${idx})">삭제</button></span>
+						</td>
+					</tr>`;
+		$(".dataWrap").append(trTag);
+	});
+
+	/* 좌표 삭제 */
+	function trDel(trIdx, idx) {
+		mcxDialog.confirm( idx + " 번을 삭제하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "삭제",
+			sureBtnClick: function(){
+				$( "[data-id="+trIdx+"]").remove();
+			}
+		});
+	};
+
+	/**
+	 * 상품조회
+	 */
+	var addRowIdx;
+	var fnSearchGoods = function (obj){
+		addRowIdx = obj;
+		cfnOpenGoodsPopup('fnAddLookbookBannerPickerGoods');
+	}
+
+	var fnAddLookbookBannerPickerGoods = function (result){
+		//console.log('result.goodsCd::::::::::'+result[0].goodsCd);
+		$("[data-id="+addRowIdx+"]").find("input[name=readGoodsCd]").val(result[0].goodsCd);
+		$("[data-id="+addRowIdx+"]").find("input[name=goodsCd]").val(result[0].goodsCd);
+		uifnPopupClose('popupGoods');
+	}
+
+	/**
+	 * 저장
+	 */
+	$("#btnSavePicker").on('click', function(){
+		//데이터 validation 체크
+		if(!dataValidation()){
+			return false;
+		}
+
+		var pickerList = [];
+		var pIdx = 0;
+		$(".pickerTr").each(function(){
+			var pickerInfo = {
+				xlim : $(this).find("input[name=xlim]").val()
+				,ylim : $(this).find("input[name=ylim]").val()
+				,goodsCd : $(this).find("input[name=goodsCd]").val()
+			};
+			pickerList.push(pickerInfo);
+			pIdx++;
+		});
+
+		mcxDialog.confirm('저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {
+					lookbookbSq : $('#lbBannerPickerForm input[name=lookbookbSq]').val()
+					,pickerList : pickerList
+					,delYn : 'N'
+					,mode : mode
+				};
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit($('#lbBannerPickerForm').prop('action'), jsonData, fnPickerSaveCollback);
+			}
+		});
+	});
+
+	var fnPickerSaveCollback = function (){
+		uifnPopupClose('popupLookbookBannerPicker');
+	}
+
+	function dataValidation(){
+		$(".pickerTr").each(function (i){
+			if(gagajf.isNull($(this).find("input[name=xlim]").val())){
+				mcxDialog.alert((i+1)+'행의 left 값이 없습니다.');
+				return false;
+			}
+
+			if(gagajf.isNull($(this).find("input[name=ylim]").val())){
+				mcxDialog.alert((i+1)+'행의 top 값이 없습니다.');
+				return false;
+			}
+
+			if(gagajf.isNull($(this).find("input[name=goodsCd]").val())){
+				mcxDialog.alert((i+1)+'행의 상품코드 값이 없습니다.');
+				return false;
+			}
+		});
+		return true;
+	}
+
+	$(document).ready(function() {
+		var bannerImgPath = $("#lbBannerPickerForm input[name=uploadBannerUrl]").val().replace('/lookbook/banner/', '')+imgNm;
+		$("#lbBannerPickerForm #bannerPreViewUrl").attr('src', bannerImgPath);
+
+		//sortable Item List
+		/*$("#bannerDiv").sortable({
+			stop: function(event, ui) {
+				fnResetIdx();
+			}
+		});*/
+	});
+/*]]>*/
+</script>
+</html>

+ 70 - 50
src/main/webapp/WEB-INF/views/display/LookbookBannerPopupForm.html

@@ -105,9 +105,9 @@
 							<div class="uFile w300">
 								<input id="file" name="file" type="file" class="uFileInput w300"/>
 								<label for="file" class="uFileLabel">파일선택</label>
-								<input type="hidden" name="orgTnfileNm"/>
-								<input type="hidden" name="sysTnfileNm"/>
-								<input type="hidden" name="newSysTnfileNm"/>
+								<input type="hidden" name="orgTnfileNm" value=""/>
+								<!--<input type="hidden" name="sysTnfileNm"/>-->
+								<input type="hidden" name="newSysTnfileNm" value=""/>
 							</div>
 							<input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.image.view') + '/display/lookbook/thumbnail/'}"/>
 							<div id="imgView" class="off">
@@ -128,6 +128,7 @@
 </div>
 <script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
 <script th:inline="javascript">
+/*<![CDATA[*/
 	var mode = [[${mode}]];
 	var lookbookMstInfo = [[${lookbookMstInfo}]];
 	var lookbookBannerList = [[${lookbookBannerList}]];
@@ -144,11 +145,12 @@
 		html += '		<col style="width:5%"/>';
 		html += '	</colgroup>';
 		html += '	<thead>';
-		html += '		<tr>';
+		html += fnAddBannerImgRow();
+		/*html += '		<tr>';
 		html += '			<th>배너이미지</th>';
 		html += '			<td>';
 		html += '				<div class="uFile w300">';
-		html += '					<input id="bannerFile'+bannerIdx+'" name="file" type="file" class="uFileInput w300" onchange="fnBannerImgFileUpload(this, ' + bannerIdx + ')"">';
+		html += '					<input id="bannerFile'+bannerIdx+'" name="file" type="file" class="uFileInput w300" onchange="fnBannerImgFileUpload(this, ' + bannerIdx + ');">';
 		html += '					<label for="bannerFile'+bannerIdx+'" class="uFileLabel">파일선택</label>';
 		html += '					<input type="hidden" name="bannerImgPath" value="">';
 		html += '					<input type="hidden" name="bannerNewImgFile" value="">';
@@ -162,7 +164,7 @@
 		html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
 		//html += '			<button type="button" class="btn btn-success btn-lg" onclick="fnAddPicker(this);">피커추가</button>';
 		html += '			<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBanner(this);">삭제</button></td>';
-		html += '		</tr>';
+		html += '		</tr>';*/
 		html += '	</thead>';
 		html += '</table>';
 
@@ -188,6 +190,7 @@
 		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/lookbook/banner/'
 				, file
 				, function(result) {
+					$(obj).closest('div').find('input:hidden[name=bannerImgPath]').val(result.oldFileName);
 					$(obj).closest('div').find('input:hidden[name=bannerNewImgFile]').val(result.newFileName);
 					$("#lbBannerForm #bannerPreViewUrl_"+idx).attr('src', $("#lbBannerForm #uploadDefaultBannerUrlPop").val()+result.newFileName);
 					$("#lbBannerForm #bannerImgView_"+idx).removeClass("off").addClass("on");
@@ -196,13 +199,6 @@
 		);
 	}
 
-	var fnResetIdx = function (){
-		$(".bannerTableC").each(function (i){
-			$(this).attr('id','bannerTable'+i);
-			$(this).find("input[name=dispOrd]").val(i+1);
-		});
-	}
-
 	/**
 	 * 저장
 	 */
@@ -217,8 +213,7 @@
 			return false;
 		}
 
-		var orgTnfileNm = $('#lbBannerForm input[name=sysTnfileNm]').val();
-		var sysTnfileNm = $('#lbBannerForm input[name=sysTnfileNm]').val();
+		var orgTnfileNm = $('#lbBannerForm input[name=orgTnfileNm]').val();
 		var newSysTnfileNm = $('#lbBannerForm input[name=newSysTnfileNm]').val();
 
 		var fromDate = $('#lbBannerForm input[name=lbDispStdt]').val().replace(/[^0-9]/g, '')+$('#lbBannerForm #lbStTimeHour').val()+$('#lbBannerForm #lbStTimeMin').val()+'00';
@@ -252,7 +247,6 @@
 					,dispEddt : toDate
 					,dispYn : $('#lbBannerForm input[name=dispYn]:checked').val()
 					,orgTnfileNm : orgTnfileNm
-					,sysTnfileNm : sysTnfileNm
 					,newSysTnfileNm : newSysTnfileNm
 					,mainDispYn : 'N'
 					,dispOrd : 1
@@ -294,7 +288,7 @@
 		gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/lookbook/thumbnail'
 				, file
 				, function(result) {
-					$('#lbBannerForm input[name=sysTnfileNm]').val(result.oldFileName);
+					$('#lbBannerForm input[name=orgTnfileNm]').val(result.oldFileName);
 					$('#lbBannerForm input[name=newSysTnfileNm]').val(result.newFileName);
 					$("#lbBannerForm #bannerPreViewUrl").attr('src', $("#lbBannerForm #uploadDefaultUrl").val()+result.newFileName);
 					$("#lbBannerForm #imgView").removeClass("off").addClass("on");
@@ -310,34 +304,6 @@
 		}
 	});
 
-	// 컨텐츠 추가 날짜 설정
-	var fnCreateTimeOption = function(val, sel) {
-		var html = '';
-		for(var i=0; i<val; i++){
-			var time = 0;
-			if(i<10){
-				time = '0'+i;
-			}else {
-				time = i;
-			}
-			var select = false;
-			if(sel==time){
-				select = true;
-			}
-			if(val==24){
-				time += '시';
-			}else if(val==60){
-				time += '분';
-			}
-			html += '<option value="'+time+'"';
-			if(select){
-				html += 'selected="selected"';
-			}
-			html += '>'+time+'</option>';
-		}
-		return html;
-	}
-
 	/**
 	 * 배너 리스트
 	 */
@@ -360,8 +326,6 @@
 		var tnSrc = $("#uploadDefaultUrl").val().replace('/lookbook/thumbnail/', '');
 		tnSrc = tnSrc + tnImgPath;
 		$("#lbBannerForm input[name=orgTnfileNm]").val(tnImgPath);
-		$("#lbBannerForm input[name=sysTnfileNm]").val(tnImgPath);
-		$("#lbBannerForm input[name=newSysTnfileNm]").val(tnImgPath);
 		$("#lbBannerForm #bannerPreViewUrl").attr('src', tnSrc);
 		$("#lbBannerForm #imgView").removeClass("off").addClass("on");
 
@@ -381,11 +345,12 @@
 				html += '		<col style="width:5%"/>';
 				html += '	</colgroup>';
 				html += '	<thead>';
-				html += '		<tr>';
+				html += fnAddBannerImgRow(imgPath,lookbookBannerList[i].imgDesc,lookbookBannerList[i].dispOrd);
+				/*html += '		<tr>';
 				html += '			<th>배너이미지</th>';
 				html += '			<td>';
 				html += '				<div class="uFile w300">';
-				html += '					<input id="bannerFile'+i+'" name="file" type="file" class="uFileInput w300" onchange="fnBannerImgFileUpload(this, '+i+')"">';
+				html += '					<input id="bannerFile'+i+'" name="file" type="file" class="uFileInput w300" onchange="fnBannerImgFileUpload(this, '+i+');">';
 				html += '					<label for="bannerFile'+i+'" class="uFileLabel">파일선택</label>';
 				html += '					<input type="hidden" name="bannerImgPath" value="'+imgPath+'">';
 				html += '					<input type="hidden" name="bannerNewImgFile" value="">';
@@ -399,7 +364,7 @@
 				html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+lookbookBannerList[i].dispOrd+'"/>';
 				html += '				<button type="button" class="btn btn-success btn-lg" onclick="fnAddPicker(this);">피커추가</button>';
 				html += '				<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBanner(this);">삭제</button></td>';
-				html += '		</tr>';
+				html += '		</tr>';*/
 				html += '	</thead>';
 				html += '</table>';
 
@@ -410,6 +375,60 @@
 		}
 	}
 
+	var bannerImgRow = 0;
+	var fnAddBannerImgRow = function (param, imgdesc, dispord){
+		var src = '';
+		var imgPath = '';
+		var desc = '';
+		if(!gagajf.isNull(imgdesc)){
+			desc = imgdesc;
+		}
+		if(!gagajf.isNull(param) && typeof param!='object'){
+			src = $("#uploadDefaultBannerUrlPop").val().replace('/lookbook/banner/', '')+param;
+			imgPath = param;
+		}
+		var html = '';
+		html += '		<tr class="bannerImgTr">';
+		html += '			<th>배너이미지</th>';
+		html += '			<td>';
+		html += '				<div class="uFile w300">';
+		html += '					<input id="bannerFile'+bannerImgRow+'" name="file" type="file" class="uFileInput w300" onchange="fnBannerImgFileUpload(this, '+bannerImgRow+');">';
+		html += '					<label for="bannerFile'+bannerImgRow+'" class="uFileLabel">파일선택</label>';
+		html += '					<input type="hidden" name="bannerImgPath" value="'+imgPath+'">';
+		html += '					<input type="hidden" name="bannerNewImgFile" value="">';
+		html += '				</div>';
+		html += '				<div id="bannerImgView_'+bannerImgRow+'">';
+		html += '					<img id="bannerPreViewUrl_'+bannerImgRow+'" src="'+src+'" style="height:100px; max-width:500px;"/>';
+		html += '				</div>';
+		html += '			</td>';
+		html += '			<th>이미지설명</th>';
+		html += '			<td><textarea class="textareaR4" name="imgDesc" id="imgDesc'+bannerImgRow+'">'+desc+'</textarea></td>';
+		html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+dispord+'"/>';
+		html += '				<button type="button" class="btn btn-success btn-lg" onclick="fnAddPicker(this,\''+imgPath+'\');">피커추가</button>';
+		html += '				<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBanner(this);">삭제</button></td>';
+		html += '		</tr>';
+		if(typeof param == 'object'){
+			bannerImgRow++;
+			$(param).closest("table").find("tbody").append(html);
+		}else{
+			bannerImgRow++;
+			return html;
+		}
+	}
+
+	var fnAddPicker = function (obj, imgpath){
+		var lookbookbSq = $(obj).closest("table").find("input[name=lookbookbSq]").val();
+		var imgNm = imgpath;
+		cfnOpenLookbookBannerPickerPopup(lookbookbSq,imgNm);
+	}
+
+	var fnResetIdx = function (){
+		$(".bannerTableC").each(function (i){
+			$(this).attr('id','bannerTable'+i);
+			$(this).find("input[name=dispOrd]").val(i+1);
+		});
+	}
+
 	$(document).ready(function() {
 		// 상세/수정일때
 		if(mode != 'N'){
@@ -422,5 +441,6 @@
 			}
 		});
 	});
+/*]]>*/
 </script>
 </html>

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

@@ -861,22 +861,22 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 .noticeWrap .download a:visited{border-bottom:1px solid #999;color:#333;}
 
 /* 이미지 좌표값 가져오기 */
-.pictureOffset > li{vertical-align:top;}
-.pictureOffset > li:nth-of-type(1){width:700px;padding-right:20px;-webkit-user-select:none;user-select:none;}
-.pictureOffset .picWrap{overflow:hidden;position:relative;width:700px;height:700px;background-color:#ddd;}
-.pictureOffset .picWrap .picture{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:auto;height:auto;max-height:100%;max-width:100%;}
-.pictureOffset .dataWrap{min-width:727px;}
-.pictureOffset .dataWrap th{background:#e9f7ff;}
-.pictureOffset .dataWrap td{padding-left:20px;}
-.pictureOffset .dataWrap td input{margin:0 0 0 10px;}
-.pictureOffset .dataWrap td span{margin-right:30px;}
-.pictureOffset .dataWrap td span:nth-of-type(1) input{width:70px;}
-.pictureOffset .dataWrap td span .per{display:inline-block;padding-left:5px;line-height:30px;color:#777;font-size:13px;}
-.pictureOffset .dataWrap td span:nth-of-type(2) input{width:70px;}
-.pictureOffset .dataWrap td span:nth-of-type(3) input{width:120px;}
-.pictureOffset .dataWrap .btnDel{position:absolute;right:4px;margin-right:0;}
-.pictureOffset .pos{position:absolute;width:0px;height:0px;}
-.pictureOffset .pos i{overflow:hidden;position:absolute;left:0;top:0;transform:translate(-50%,-50%);width:40px;height:40px;line-height:1;color:#fff;font-size:20px;text-align:center;background-color:#fd4802;border-radius:100%;box-sizing:border-box;padding-top:10px;}
+#pictureOffset > li{vertical-align:top;}
+#pictureOffset > li:nth-of-type(1){width:700px;padding-right:20px;-webkit-user-select:none;user-select:none;}
+#pictureOffset .picWrap{overflow:hidden;position:relative;width:700px;height:700px;background-color:#ddd;}
+#pictureOffset .picWrap .picture{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:auto;height:auto;max-height:100%;max-width:100%;}
+#pictureOffset .dataWrap{min-width:727px;}
+#pictureOffset .dataWrap th{background:#e9f7ff;}
+#pictureOffset .dataWrap td{padding-left:20px;}
+#pictureOffset .dataWrap td input{margin:0 0 0 10px;}
+#pictureOffset .dataWrap td span{margin-right:30px;}
+#pictureOffset .dataWrap td span:nth-of-type(1) input{width:70px;}
+#pictureOffset .dataWrap td span .per{display:inline-block;padding-left:5px;line-height:30px;color:#777;font-size:13px;}
+#pictureOffset .dataWrap td span:nth-of-type(2) input{width:70px;}
+#pictureOffset .dataWrap td span:nth-of-type(3) input{width:120px;}
+#pictureOffset .dataWrap .btnDel{position:absolute;right:4px;margin-right:0;}
+#pictureOffset .pos{position:absolute;width:0px;height:0px;}
+#pictureOffset .pos i{overflow:hidden;position:absolute;left:0;top:0;transform:translate(-50%,-50%);width:40px;height:40px;line-height:1;color:#fff;font-size:20px;text-align:center;background-color:#fd4802;border-radius:100%;box-sizing:border-box;padding-top:10px;}
 
 /* 반응형:GNB 유저명,등급,로그아웃 --------------- */
 @media ( max-width:1370px ) {

+ 16 - 0
src/main/webapp/ux/js/admin.popup.js

@@ -915,4 +915,20 @@ var cfnOpenAfChannelPopup = function(callbackfun) {
 	} 
 		
 	cfnOpenModalPopup(actionUrl,'popupAfChannel');
+}
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 룩북 배너 피커 팝업 오픈
+ * <pre>
+ *     cfnOpenLookbookBannerPickerPopup(lookbookbSq,imgNm);
+ * </pre>
+ * @param  : lookbookbSq - 룩북 배너 일련번호 , imgNm - 이미지파일
+ * @since  : 2021/03/09
+ * @author : bin2107
+ */
+var cfnOpenLookbookBannerPickerPopup = function(lookbookbSq, imgNm) {
+	var actionUrl = "/display/lookbook/banner/picker/popup/form?lookbookbSq="+lookbookbSq+"&imgNm="+imgNm;
+	cfnOpenModalPopup(actionUrl, 'popupLookbookBannerPicker');
 }