MainContentsPopupForm.html 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : MainContentsPopupForm.html
  7. * @desc : 메인전시 컨텐츠 수정 팝업 Page
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2021.2.23 bin2107 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div class="modalPopup" data-width="1500" >
  18. <div class="panelStyle">
  19. <div class="panelTitle">
  20. <h2 id="popTitle" th:text="${contentsLoc}"></h2>
  21. <button type="button" class="close" onclick="fnMainContentsPopupFormClose()"><i class="fa fa-times"></i></button>
  22. </div>
  23. <div class="panelContent">
  24. <ul class="panelBar">
  25. <li class="aL">
  26. <span class="cBlue">* 상단으로 드래그&amp;드랍하여 순서 변경 가능합니다.</span>
  27. </li>
  28. <li class="aR">
  29. <button type="button" class="btn btn btn-base btn-sm" id="btnPopAddRow">컨텐츠 추가</button>
  30. <button type="button" class="btn btn btn-dark btn-sm" id="btnPopSave">임시저장</button>
  31. <input type="hidden" name="uploadDefaultUrlPop" id="uploadDefaultUrlPop" th:value="${@environment.getProperty('upload.image.view') + '/contents/'}"/>
  32. </li>
  33. </ul>
  34. </div>
  35. <form style="height:600px; width:1470px; overflow:auto;" id="popSortable">
  36. </form>
  37. </div>
  38. </div>
  39. <script th:inline="javascript">
  40. /*<![CDATA[*/
  41. var cateNo = [[${cateNo}]];
  42. var contentsLoc = [[${contentsLoc}]];
  43. var brandGroupNo = [[${brandGroupNo}]];
  44. var contentsLocArr = gagajf.convertToArray([[${contentsLocList}]]);
  45. var tdWidth = $("#sortable").find("td").width();
  46. var tdDeleteWidth = parseInt(tdWidth/11, 10);
  47. tdWidth = tdWidth - tdDeleteWidth;
  48. var cate1List = [[${cate1List}]];
  49. var tableLen = 0; // 테이블 ID
  50. // 컨텐츠 미리보기 리스트
  51. var fnGetContentsPreviewList = function() {
  52. $("#popSortable").html('');
  53. var data = {cateNo : cateNo
  54. ,contentsLoc : contentsLoc
  55. ,brandGroupNo : brandGroupNo
  56. };
  57. var jsonData = JSON.stringify(data);
  58. gagajf.ajaxJsonSubmit('/display/contents/preview/list', jsonData, fnCreatePopLayout);
  59. }
  60. var createIdx = 0;
  61. var fnCreatePopLayout = function(result) {
  62. var html = '';
  63. for(var i=0; i<result.length; i++){
  64. var dispStdt = result[i].dispStdt.split(" ");
  65. var dispEddt = result[i].dispEddt.split(" ");
  66. var cate1No = result[i].contentsType;
  67. html += '<table class="frmStyle mcTable" style="margin-bottom:30px" id="mcTable'+i+'">';
  68. html += '<input type="hidden" name="tableIdx" value="'+i+'" data-id="'+i+'">';
  69. html += '<colgroup>';
  70. html += '<col style="width:10%;"/>';
  71. html += '<col style="width:55%;"/>';
  72. html += '<col/>';
  73. html += '</colgroup>';
  74. html += '<thead><tr><th>전시일시</th><td><input name="dispStdt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출시작일" data-valid-type="calendar" value="'+dispStdt[0]+'"/>';
  75. html += '<select name="stTimeHour" required="required" data-valid-name="노출기간 시작시간">';
  76. html += fnCreateTimeOption(24, dispStdt[1].split(":")[0]);
  77. html += '</select>';
  78. html += '<select name="stTimeMin" required="required" data-valid-name="노출기간 시작시간">';
  79. html += fnCreateTimeOption(60, dispStdt[1].split(":")[1]);
  80. html += '</select>';
  81. html += '<span> ~ </span>';
  82. html += '<input name="dispEddt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출종료일" data-valid-type="calendar" value="'+dispEddt[0]+'"/>';
  83. html += '<select name="edTimeHour" required="required" data-valid-name="노출기간 종료시간">';
  84. html += fnCreateTimeOption(24, dispEddt[1].split(":")[0]);
  85. html += '</select>';
  86. html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
  87. html += fnCreateTimeOption(60, dispEddt[1].split(":")[1]);
  88. html += '</select>';
  89. html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
  90. html += '</td>';
  91. if(contentsLoc!='SCM002' && contentsLoc!='SCM003'){
  92. html += '<td class="aL">';
  93. if(contentsLoc!='SMM005'){
  94. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
  95. }
  96. if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004' || contentsLoc=='SCM001'){
  97. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
  98. }
  99. if(contentsLoc=='SBM005' || contentsLoc=='SBMM005'){
  100. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddBrandDescRow(this);">브랜드소개추가</button>';
  101. }
  102. if(contentsLoc!='SMM005' && contentsLoc!='SBM005' && contentsLoc!='SBMM005' && contentsLoc!='SGNB001'){
  103. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddImgPopRow(this);">이미지추가</button>';
  104. }
  105. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddLinkPopRow(this);">링크추가</button>';
  106. html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
  107. }
  108. html += '</tr>';
  109. if(contentsLoc=='SGNB001'){
  110. html += '<tr class="cateTypeTr">';
  111. html += ' <th>유형선택</th>';
  112. html += ' <td colspan="3">';
  113. if(result[i].contentsType=='OPEN'){
  114. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+i+');" checked="checked"/>오픈배너</label>';
  115. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="IMG" onclick="fnChangeGnbCateType(this,'+i+');" />이미지배너</label>';
  116. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+i+');" />텍스트배너</label>';
  117. }else if(result[i].contentsType=='IMG'){
  118. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+i+');" />오픈배너</label>';
  119. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="IMG" onclick="fnChangeGnbCateType(this,'+i+');" checked="checked"/>이미지배너</label>';
  120. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+i+');" />텍스트배너</label>';
  121. }else{
  122. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+i+');" />오픈배너</label>';
  123. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="IMG" onclick="fnChangeGnbCateType(this,'+i+');" />이미지배너</label>';
  124. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+i+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+i+');" checked="checked"/>텍스트배너</label>';
  125. }
  126. html += ' </td>';
  127. html += '</tr>';
  128. if(result[i].contentsType=='OPEN'){
  129. var src = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath1;
  130. var src2 = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath2;
  131. html += '<tr name="imgPopRow" id="openBanner0">';
  132. html += ' <th>띠배너<br>이미지</th>';
  133. html += ' <td><div class="uFile w300">';
  134. html += ' <input id="filePop_0" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 0)"/>';
  135. html += ' <label for="filePop_0" class="uFileLabel">파일선택</label>';
  136. html += ' <input type="hidden" name="imgPath" value="'+result[i].imgPath1+'"/>';
  137. html += ' <input type="hidden" name="newImgFile" value="" />';
  138. html += ' </div>';
  139. html += ' <div id="imgViewPop_0" class=';
  140. if(src!=''){
  141. html += '"on">';
  142. }else{
  143. html += '"off">';
  144. }
  145. html += ' <img id="bannerPreViewUrlPop_0" src="'+src+'" style="height:100px; max-width:500px;" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
  146. html += ' </div></td>';
  147. html += '</tr>';
  148. html += '<tr name="imgPopRow" id="openBanner1">';
  149. html += ' <th>오픈배너<br>이미지</th>';
  150. html += ' <td><div class="uFile w300">';
  151. html += ' <input id="filePop_1" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 1)"/>';
  152. html += ' <label for="filePop_1" class="uFileLabel">파일선택</label>';
  153. html += ' <input type="hidden" name="imgPath" value="'+result[i].imgPath2+'"/>';
  154. html += ' <input type="hidden" name="newImgFile" value="" />';
  155. html += ' </div>';
  156. html += ' <div id="imgViewPop_1" class=';
  157. if(src!=''){
  158. html += '"on">';
  159. }else{
  160. html += '"off">';
  161. }
  162. html += ' <img id="bannerPreViewUrlPop_1" src="'+src2+'" style="height:100px; max-width:500px;" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src2\'));"/>';
  163. html += ' </div></td>';
  164. html += '</tr>';
  165. }
  166. if(result[i].contentsType=='IMG'){
  167. var src = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+result[i].imgPath1;
  168. html += '<tr name="imgPopRow" id="openBanner0">';
  169. html += ' <th>띠배너<br>이미지</th>';
  170. html += ' <td><div class="uFile w300">';
  171. html += ' <input id="filePop_0" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 0)"/>';
  172. html += ' <label for="filePop_0" class="uFileLabel">파일선택</label>';
  173. html += ' <input type="hidden" name="imgPath" value="'+result[i].imgPath1+'"/>';
  174. html += ' <input type="hidden" name="newImgFile" value="" />';
  175. html += ' </div>';
  176. html += ' <div id="imgViewPop_0" class=';
  177. if(src!=''){
  178. html += '"on">';
  179. }else{
  180. html += '"off">';
  181. }
  182. html += ' <img id="bannerPreViewUrlPop_0" src="'+src+'" style="height:100px; max-width:500px;" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
  183. html += ' </div></td>';
  184. html += '</tr>';
  185. }
  186. html += ' <tr name="tabBgColorRow'+i+'"';
  187. if(result[i].contentsType=='TEXT'){
  188. html += 'style="display:none;"';
  189. }
  190. html += ' >';
  191. html += ' <th>배경 RGB코드</th>';
  192. html += ' <td><input name="gnbBgColor' + i + '" type="text" maxlength="200" data-valid-name="배경 RGB코드" value="' + result[i].strVar5 + '"/></td>';
  193. html += ' </tr>';
  194. html += ' <tr name="tabShowYnRow'+i+'"';
  195. if(result[i].contentsType!='OPEN'){
  196. html += 'style="display:none;"';
  197. }
  198. html += ' >';
  199. html += ' <th>오늘하루 보지않기<br>노출여부</th>';
  200. html += ' <td>';
  201. if(result[i].strVar8=='Y'){
  202. html += ' <label class="rdoBtn"><input type="radio" name="todayYn'+i+'" value="Y" checked="checked"/>노출</label>';
  203. html += ' <label class="rdoBtn"><input type="radio" name="todayYn'+i+'" value="N" />비노출</label>';
  204. }else{
  205. html += ' <label class="rdoBtn"><input type="radio" name="todayYn'+i+'" value="Y" />노출</label>';
  206. html += ' <label class="rdoBtn"><input type="radio" name="todayYn'+i+'" value="N" checked="checked"/>비노출</label>';
  207. }
  208. html += ' </td>';
  209. html += ' </tr>';
  210. }
  211. if(contentsLoc=='SCM002' || contentsLoc=='SCM003'){
  212. html += ' <tr>';
  213. html += ' <th>전시 설정</th>';
  214. html += ' <td>';
  215. if(result[i].useYn=='Y'){
  216. html += ' <label class="rdoBtn"><input type="radio" name="dispYn" value="Y" checked="checked"/>노출</label>';
  217. html += ' <label class="rdoBtn"><input type="radio" name="dispYn" value="N"/>비노출</label>';
  218. }else{
  219. html += ' <label class="rdoBtn"><input type="radio" name="dispYn" value="Y"/>노출</label>';
  220. html += ' <label class="rdoBtn"><input type="radio" name="dispYn" value="N" checked="checked"/>비노출</label>';
  221. }
  222. html += ' </td>';
  223. if(result[i].contentsLoc=='SCM003'){
  224. html += ' <th>상품 노출 개수</th>';
  225. html += ' <td>';
  226. if(result[i].strVar1=='10'){
  227. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="10" checked="checked"/>10개</label>';
  228. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="20"/>20개</label>';
  229. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="30"/>30개</label>';
  230. }else if(result[i].strVar1=='20'){
  231. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="10"/>10개</label>';
  232. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="20" checked="checked"/>20개</label>';
  233. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="30"/>30개</label>';
  234. }else{
  235. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="10"/>10개</label>';
  236. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="20"/>20개</label>';
  237. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="30" checked="checked"/>30개</label>';
  238. }
  239. html += ' </td>';
  240. }
  241. html += ' </tr>';
  242. }
  243. if(contentsLoc=='SMM001'){
  244. html += '<tr>';
  245. html += ' <th>컨텐츠유형</th>';
  246. html += ' <td class="planArea" name="planArea" id="planArea'+i+'" colspan="3">';
  247. if(result[i].strVar5=='P'){
  248. html += ' <label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="P" onclick="fnChangeContentsType(this,'+i+');" checked="checked"/>기획전</label>';
  249. html += ' <label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="E" onclick="fnChangeContentsType(this,'+i+');"/>이벤트</label>';
  250. }else{
  251. html += ' <label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="P" onclick="fnChangeContentsType(this,'+i+');" />기획전</label>';
  252. html += ' <label class="rdoBtn"><input type="radio" name="contentsType'+i+'" value="E" onclick="fnChangeContentsType(this,'+i+');" checked="checked"/>이벤트</label>';
  253. }
  254. if(result[i].strVar5=='P') {
  255. html += ' <input type="text" class="w100 inputPlan" name="planSq' + i + '" value="' + result[i].strVar6 + '"/>';
  256. html += ' <button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan(' + i + ');">기획전검색</button>';
  257. }else{
  258. html += ' <input type="text" class="w100 inputPlan" name="planSq' + i + '" value="" style="display: none;"/>';
  259. html += ' <button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan(' + i + ');" style="display: none;">기획전검색</button>';
  260. }
  261. html += ' </td>';
  262. html += '</tr>';
  263. html += '<tr>';
  264. html += ' <th>썸네일 <br>글자 색상</th>';
  265. html += ' <td colspan="3">';
  266. if(result[i].strVar7=='BLACK'){
  267. html += ' <label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="BLACK" checked="checked"/>BLACK</label>';
  268. html += ' <label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="WHITE" />WHITE</label>';
  269. }else{
  270. html += ' <label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="BLACK" />BLACK</label>';
  271. html += ' <label class="rdoBtn"><input type="radio" name="thumTextColor'+i+'" value="WHITE" checked="checked"/>WHITE</label>';
  272. }
  273. html += ' </td>';
  274. html += '</tr>';
  275. }
  276. if(contentsLoc=='SMM005'){
  277. html += '<tr>';
  278. html += ' <th>배너유형</th>';
  279. html += ' <td class="bannerArea" id="bannerArea'+i+'">';
  280. if(result[i].contentsType=='1'){
  281. html += ' <label class="rdoBtn"><input type="radio" name="bannerType'+i+'" value="1" checked="checked">1단</label>';
  282. html += ' <label class="rdoBtn"><input type="radio" name="bannerType'+i+'" value="2" >2단</label>';
  283. }else{
  284. html += ' <label class="rdoBtn"><input type="radio" name="bannerType'+i+'" value="1" >1단</label>';
  285. html += ' <label class="rdoBtn"><input type="radio" name="bannerType'+i+'" value="2" checked="checked">2단</label>';
  286. }
  287. html += ' </td>';
  288. html += '</tr>';
  289. }
  290. if(contentsLoc=='STAB003'){
  291. html += ' <tr name="tabCateRow">';
  292. html += ' <th>카테고리</th>';
  293. html += ' <td colspan="3">카테고리선택';
  294. html += ' <select name="cate1List">';
  295. html += ' <option value="">[선택]</option>';
  296. for(let i=0; i<cate1List.length; i++){
  297. if(cate1No == cate1List[i].cd){
  298. html += '<option value="'+cate1List[i].cd+'" selected="selected">['+cate1List[i].cd+'] '+cate1List[i].cdNm+'</option>';
  299. }else{
  300. html += '<option value="'+cate1List[i].cd+'">['+cate1List[i].cd+'] '+cate1List[i].cdNm+'</option>';
  301. }
  302. }
  303. html += ' </select>';
  304. html += ' </td>';
  305. html += ' </tr>';
  306. }
  307. html += '</thead><tbody>';
  308. if(contentsLoc!='SCM002' && contentsLoc!='SCM003'){
  309. for(var j=1; j<5; j++){
  310. var strTitle = eval("result["+i+"].strTitle" + j);
  311. var imgPath = eval("result["+i+"].imgPath" + j);
  312. var strVar = eval("result["+i+"].strVar" + j);
  313. var subText = eval("result["+i+"].subText" + j);
  314. if(strTitle!=null && strTitle!='null' && strTitle!='' ){
  315. html += fnAddTitlePopRow(strTitle);
  316. }
  317. if(contentsLoc!='SGNB001'){
  318. if(imgPath!=null && imgPath!='null' && imgPath!='' ){
  319. html += fnAddImgPopRow(imgPath);
  320. }
  321. }
  322. if(strVar!=null && strVar!='null' && strVar!='' ){
  323. html += fnAddLinkPopRow(strVar);
  324. }
  325. if(subText!=null && subText!='null' && subText!='' ){
  326. html += fnAddSubTextPopRow(subText);
  327. }
  328. }
  329. }
  330. html += '</tbody></table>';
  331. }
  332. $("#popSortable").append(html);
  333. $("#popSortable").sortable();
  334. $('.schDate').datepicker("destroy");
  335. $('.schDate').datepicker({
  336. changeMonth: true,
  337. changeYear: true,
  338. defaultDate: $('.schDate').val()
  339. });
  340. tableLen = $(".mcTable").length;
  341. }
  342. var fnChangeGnbCateType = function (obj, idx){
  343. let cateType = $("#mcTable"+idx).find("input:radio[name=cateType"+idx+"]:checked").val();
  344. if(cateType=='OPEN'){
  345. $(obj).closest("table").find("[name=tabBgColorRow"+idx+"]").show();
  346. $(obj).closest("table").find("[name=tabShowYnRow"+idx+"]").show();
  347. $(obj).closest("table").find("[id=openBanner0]").show();
  348. $(obj).closest("table").find("[id=openBanner1]").show();
  349. $(obj).closest("table").find("[name=file]").closest('div').find('label').text('파일선택');
  350. $(obj).closest("table").find("[name=imgPath]").val('');
  351. $(obj).closest("table").find("[name=newImgFile]").val('');
  352. $("#bannerPreViewUrlPop_0").attr('src', '');
  353. $("#imgViewPop_0").removeClass("on").addClass("off");
  354. $("#bannerPreViewUrlPop_1").attr('src', '');
  355. $("#imgViewPop_1").removeClass("on").addClass("off");
  356. }else if(cateType=='IMG'){
  357. $(obj).closest("table").find("[name=tabBgColorRow"+idx+"]").show();
  358. $(obj).closest("table").find("[name=tabShowYnRow"+idx+"]").hide();
  359. $(obj).closest("table").find("[id=openBanner0]").show();
  360. $(obj).closest("table").find("[id=openBanner1]").hide();
  361. $(obj).closest("table").find("[name=file]").closest('div').find('label').text('파일선택');
  362. $(obj).closest("table").find("[name=imgPath]").val('');
  363. $(obj).closest("table").find("[name=newImgFile]").val('');
  364. $("#bannerPreViewUrlPop_0").attr('src', '');
  365. $("#imgViewPop_0").removeClass("on").addClass("off");
  366. $("#bannerPreViewUrlPop_1").attr('src', '');
  367. $("#imgViewPop_1").removeClass("on").addClass("off");
  368. }else if(cateType=='TEXT'){
  369. $(obj).closest("table").find("[name=tabBgColorRow"+idx+"]").hide();
  370. $(obj).closest("table").find("[name=tabShowYnRow"+idx+"]").hide();
  371. $(obj).closest("table").find("[id=openBanner0]").hide();
  372. $(obj).closest("table").find("[id=openBanner1]").hide();
  373. $(obj).closest("table").find("[name=file]").closest('div').find('label').text('파일선택');
  374. $(obj).closest("table").find("[name=imgPath]").val('');
  375. $(obj).closest("table").find("[name=newImgFile]").val('');
  376. $("#bannerPreViewUrlPop_0").attr('src', '');
  377. $("#imgViewPop_0").removeClass("on").addClass("off");
  378. $("#bannerPreViewUrlPop_1").attr('src', '');
  379. $("#imgViewPop_1").removeClass("on").addClass("off");
  380. }
  381. }
  382. /**
  383. * 컨텐츠 추가 버튼
  384. */
  385. var dataIdx=0;
  386. $("#btnPopAddRow").on("click", function (){
  387. dataIdx = tableLen;
  388. if(contentsLoc=='SCM002' || contentsLoc=='SCM003'){
  389. if($(".mcTable").length > 0){
  390. mcxDialog.alert('컨텐츠 추가를 1개 이상 할 수 없습니다.');
  391. return;
  392. }
  393. }
  394. var html = '<table class="frmStyle mcTable" style="margin-bottom:30px" id="mcTable'+dataIdx+'">';
  395. html += '<input type="hidden" name="tableIdx" value="'+dataIdx+'" data-id="'+dataIdx+'">';
  396. html += '<colgroup>';
  397. html += '<col style="width:10%;"/>';
  398. html += '<col style="width:55%;"/>';
  399. html += '<col/>';
  400. html += '</colgroup>';
  401. html += '<thead><tr><th>전시일시</th><td><input name="dispStdt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출시작일" data-valid-type="calendar"/>';
  402. html += '<select name="stTimeHour" required="required" data-valid-name="노출기간 시작시간">';
  403. html += fnCreateTimeOption(24);
  404. html += '</select>';
  405. html += '<select name="stTimeMin" required="required" data-valid-name="노출기간 시작시간">';
  406. html += fnCreateTimeOption(60);
  407. html += '</select>';
  408. html += '<span> ~ </span>';
  409. html += '<input name="dispEddt" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출종료일" data-valid-type="calendar"/>';
  410. html += '<select name="edTimeHour" required="required" data-valid-name="노출기간 종료시간">';
  411. html += fnCreateTimeOption(24,23);
  412. html += '</select>';
  413. html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
  414. html += fnCreateTimeOption(60,59);
  415. html += '</select>';
  416. html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
  417. html += '</td>';
  418. html += '<td class="aL">';
  419. if(contentsLoc!='SCM002' && contentsLoc!='SCM003'){
  420. if(contentsLoc!='SMM005'){
  421. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddTitlePopRow(this);">타이틀추가</button>';
  422. }
  423. if(contentsLoc=='SMM001' || contentsLoc=='SMM002' || contentsLoc=='SBM004' || contentsLoc=='SBMM004' || contentsLoc=='SCM001'){
  424. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddSubTextPopRow(this);">서브텍스트추가</button>';
  425. }
  426. if(contentsLoc=='SBM005' || contentsLoc=='SBMM005'){
  427. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddBrandDescRow(this);">브랜드소개추가</button>';
  428. }
  429. if(contentsLoc!='SBM005' && contentsLoc!='SBMM005' && contentsLoc!='SGNB001') {
  430. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddImgPopRow(this);">이미지추가</button>';
  431. }
  432. html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddLinkPopRow(this);">링크추가</button>';
  433. }
  434. html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
  435. html += '</tr>';
  436. if(contentsLoc=='SGNB001'){
  437. html += '<tr class="cateTypeTr">';
  438. html += ' <th>유형선택</th>';
  439. html += ' <td colspan="3">';
  440. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+dataIdx+'" value="OPEN" onclick="fnChangeGnbCateType(this,'+dataIdx+');" checked="checked"/>오픈배너</label>';
  441. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+dataIdx+'" value="IMG" onclick="fnChangeGnbCateType(this,'+dataIdx+');"/>이미지배너</label>';
  442. html += ' <label class="rdoBtn"><input type="radio" name="cateType'+dataIdx+'" value="TEXT" onclick="fnChangeGnbCateType(this,'+dataIdx+');"/>텍스트배너</label>';
  443. html += ' </td>';
  444. html += '</tr>';
  445. var src = '';
  446. html += '<tr name="imgPopRow" id="openBanner0">';
  447. html += ' <th>띠배너<br>이미지</th>';
  448. html += ' <td><div class="uFile w300">';
  449. html += ' <input id="filePop_0" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 0)"/>';
  450. html += ' <label for="filePop_0" class="uFileLabel">파일선택</label>';
  451. html += ' <input type="hidden" name="imgPath" value=""/>';
  452. html += ' <input type="hidden" name="newImgFile" value="" />';
  453. html += ' </div>';
  454. html += ' <div id="imgViewPop_0" class=';
  455. if(src!=''){
  456. html += '"on">';
  457. }else{
  458. html += '"off">';
  459. }
  460. html += ' <img id="bannerPreViewUrlPop_0" src="'+src+'" style="height:100px; max-width:500px;" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
  461. html += ' </div></td>';
  462. html += '</tr>';
  463. html += '<tr name="imgPopRow" id="openBanner1">';
  464. html += ' <th>오픈배너<br>이미지</th>';
  465. html += ' <td><div class="uFile w300">';
  466. html += ' <input id="filePop_1" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, 1)"/>';
  467. html += ' <label for="filePop_1" class="uFileLabel">파일선택</label>';
  468. html += ' <input type="hidden" name="imgPath" value=""/>';
  469. html += ' <input type="hidden" name="newImgFile" value="" />';
  470. html += ' </div>';
  471. html += ' <div id="imgViewPop_1" class=';
  472. if(src!=''){
  473. html += '"on">';
  474. }else{
  475. html += '"off">';
  476. }
  477. html += ' <img id="bannerPreViewUrlPop_1" src="'+src+'" style="height:100px; max-width:500px;" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
  478. html += ' </div></td>';
  479. html += '</tr>';
  480. html += ' <tr name="tabBgColorRow'+dataIdx+'">';
  481. html += ' <th>배경 RGB코드</th>';
  482. html += ' <td><input name="gnbBgColor'+dataIdx+'" type="text" maxlength="200" data-valid-name="배경 RGB코드" value=""/></td>';
  483. html += ' </tr>';
  484. html += ' <tr name="tabShowYnRow'+dataIdx+'">';
  485. html += ' <th>오늘하루 보지않기<br>노출여부</th>';
  486. html += ' <td>';
  487. html += ' <label class="rdoBtn"><input type="radio" name="todayYn'+dataIdx+'" value="Y" checked="checked"/>노출</label>';
  488. html += ' <label class="rdoBtn"><input type="radio" name="todayYn'+dataIdx+'" value="N" />비노출</label>';
  489. html += ' </td>';
  490. html += ' </tr>';
  491. }
  492. if(contentsLoc=='SCM002' || contentsLoc=='SCM003'){
  493. html += ' <tr>';
  494. html += ' <th>전시 설정</th>';
  495. html += ' <td>';
  496. html += ' <label class="rdoBtn"><input type="radio" name="dispYn" value="Y" checked="checked"/>노출</label>';
  497. html += ' <label class="rdoBtn"><input type="radio" name="dispYn" value="N"/>비노출</label>';
  498. html += ' </td>';
  499. if(contentsLoc=='SCM003'){
  500. html += ' <th>상품 노출 개수</th>';
  501. html += ' <td>';
  502. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="10" checked="checked"/>10개</label>';
  503. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="20"/>20개</label>';
  504. html += ' <label class="rdoBtn"><input type="radio" name="dispCnt" value="30"/>30개</label>';
  505. html += ' </td>';
  506. }
  507. html += ' </tr>';
  508. }
  509. if(contentsLoc=='SMM001'){
  510. html += '<tr>';
  511. html += ' <th>컨텐츠유형</th>';
  512. html += ' <td class="planArea" name="planArea" id="planArea'+dataIdx+'" colspan="3">';
  513. html += ' <label class="rdoBtn"><input type="radio" name="contentsType'+dataIdx+'" value="P" onclick="fnChangeContentsType(this,'+dataIdx+');" checked="checked"/>기획전</label>';
  514. html += ' <label class="rdoBtn"><input type="radio" name="contentsType'+dataIdx+'" value="E" onclick="fnChangeContentsType(this,'+dataIdx+');"/>이벤트</label>';
  515. html += ' <input type="text" class="w100 inputPlan" name="planSq'+dataIdx+'" value=""/>';
  516. html += ' <button type="button" class="btn btn btn-dark btn-sm btnPlan" onclick="fnSearchPlan('+dataIdx+');">기획전검색</button>';
  517. html += ' </td>';
  518. html += '</tr>';
  519. html += '<tr>';
  520. html += ' <th>썸네일 <br>글자 색상</th>';
  521. html += ' <td colspan="3">';
  522. html += ' <label class="rdoBtn"><input type="radio" name="thumTextColor'+dataIdx+'" value="BLACK" checked="checked"/>BLACK</label>';
  523. html += ' <label class="rdoBtn"><input type="radio" name="thumTextColor'+dataIdx+'" value="WHITE" />WHITE</label>';
  524. html += ' </td>';
  525. html += '</tr>';
  526. }
  527. if(contentsLoc=='SMM005'){
  528. html += '<tr>';
  529. html += ' <th>배너유형</th>';
  530. html += ' <td class="bannerArea" id="bannerArea'+dataIdx+'">';
  531. html += ' <label class="rdoBtn"><input type="radio" name="bannerType'+dataIdx+'" value="1" checked="checked">1단</label>'; /*onclick="fnChangeBannerType(this,1);"*/
  532. html += ' <label class="rdoBtn"><input type="radio" name="bannerType'+dataIdx+'" value="2" >2단</label>';
  533. html += ' </td>';
  534. html += '</tr>';
  535. }
  536. if(contentsLoc=='STAB003'){
  537. html += ' <tr name="tabCateRow">';
  538. html += ' <th>카테고리</th>';
  539. html += ' <td colspan="3">카테고리선택';
  540. html += ' <select name="cate1List">';
  541. html += ' <option value="">[선택]</option>';
  542. for(let i=0; i<cate1List.length; i++){
  543. html += '<option value="'+cate1List[i].cd+'">['+cate1List[i].cd+'] '+cate1List[i].cdNm+'</option>';
  544. }
  545. html += ' </select>';
  546. html += ' </td>';
  547. html += ' </tr>';
  548. }
  549. html += '</thead><tbody>';
  550. html += '</tbody></table>';
  551. $("#popSortable").prepend(html);
  552. $("#popSortable").sortable();
  553. $('.schDate').datepicker("destroy");
  554. $('.schDate').datepicker({
  555. changeMonth: true,
  556. changeYear: true,
  557. defaultDate: $('.schDate').val()
  558. });
  559. tableLen = tableLen+1;
  560. });
  561. var fnChangeBannerType = function (obj, idx){
  562. if(idx==1){
  563. $(obj).closest("table").find("[id=bannerImgTr1]").show();
  564. $(obj).closest("table").find("[id=bannerLinkTr1]").show();
  565. $(obj).closest("table").find("[id=bannerImgTr2]").hide();
  566. $(obj).closest("table").find("[id=bannerLinkTr2]").hide();
  567. }else{
  568. $(obj).closest("table").find("[id=bannerImgTr1]").show();
  569. $(obj).closest("table").find("[id=bannerLinkTr1]").show();
  570. $(obj).closest("table").find("[id=bannerImgTr2]").show();
  571. $(obj).closest("table").find("[id=bannerLinkTr2]").show();
  572. }
  573. }
  574. // 몰메인>메인롤링배너 컨텐츠유형 선택시
  575. var fnChangeContentsType = function (obj, idx){
  576. var radioVal = $(obj).closest("td").find("input[name=contentsType"+idx+"]:checked").val();
  577. if(radioVal=='P'){
  578. $("#planArea"+idx+" .inputPlan").show();
  579. $("#planArea"+idx+" .btnPlan").show();
  580. }else{
  581. $("#planArea"+idx).find("input[name=planSq"+idx+"]").val('');
  582. $("#planArea"+idx+" .inputPlan").hide();
  583. $("#planArea"+idx+" .btnPlan").hide();
  584. }
  585. }
  586. // 몰메인>메인롤링배너 기획전 조회
  587. var tableDataId = 0;
  588. var fnSearchPlan = function (idx){
  589. cfnOpenPlanPopup('callbackPlanPopup');
  590. tableDataId = idx;
  591. }
  592. var callbackPlanPopup = function (result){
  593. $("#mcTable"+tableDataId+" .planArea").find("input[name=planSq"+tableDataId+"]").val(result[0].planSq);
  594. }
  595. // SMM001 데이터 validation 체크
  596. function smm001DataValidation(){
  597. $(".mcTable").each(function(i){
  598. var thisIdx = $(this).find("input[name=tableIdx]").val();
  599. var contentsTypeVal = $(this).find("input:radio[name=contentsType"+thisIdx+"]:checked").val();
  600. var textColorVal = $(this).find("input:radio[name=thumTextColor"+thisIdx+"]:checked").val();
  601. if(gagajf.isNull(contentsTypeVal)){
  602. mcxDialog.alert('컨텐츠 유형을 선택해주세요.');
  603. return false;
  604. }
  605. if(contentsTypeVal=='P'){
  606. if(gagajf.isNull($(this).find("input[name=planSq"+thisIdx+"]").val())){
  607. mcxDialog.alert('기획전 번호를 입력해주세요.');
  608. return false;
  609. }
  610. }
  611. if(gagajf.isNull(textColorVal)){
  612. mcxDialog.alert('썸네일 글자 색상을 선택해주세요.');
  613. return false;
  614. }
  615. });
  616. return true;
  617. }
  618. // STAB003 데이터 validation 체크
  619. function stab003DataValidation(){
  620. $(".mcTable").each(function(i){
  621. var cateValue = $(this).find("tr[name=tabCateRow]").find("select[name=cate1List] option:selected").val();
  622. console.log('cateValue::'+cateValue);
  623. if(gagajf.isNull(cateValue)){
  624. mcxDialog.alert('적용할 카테고리를 선택해주세요.');
  625. return false;
  626. }
  627. });
  628. return true;
  629. }
  630. /**
  631. * 임시저장
  632. */
  633. var dataArr = [];
  634. $("#btnPopSave").on("click", function (){
  635. if (!gagajf.checkRequired("#popSortable")) {
  636. return;
  637. }
  638. if(contentsLoc=='SMM001'){
  639. if(!smm001DataValidation()){
  640. return false;
  641. }
  642. }
  643. if(contentsLoc=='STAB003'){
  644. if(!stab003DataValidation()){
  645. return false;
  646. }
  647. }
  648. var titleBool = true;
  649. $("#popSortable").find('input[name=title]').each(function(idx, title) {
  650. if ($(title).val()==''){
  651. titleBool = false;
  652. $(title).focus();
  653. gagajf.alertMessage($(title), 'input');
  654. return;
  655. }
  656. });
  657. if(!titleBool){
  658. return false;
  659. }
  660. dataArr = [];
  661. $("#popSortable table").each(function(){
  662. var newImgFileArr = [];
  663. var imgPath1 = '';
  664. var imgPath2 = '';
  665. var imgPath3 = '';
  666. var imgPath4 = '';
  667. var strVar1 = '';
  668. var strVar2 = '';
  669. var strVar3 = '';
  670. var strVar4 = '';
  671. var strVar5 = '';
  672. var strVar6 = '';
  673. var strVar7 = '';
  674. var strVar8 = '';
  675. var strTitle1 = '';
  676. var strTitle2 = '';
  677. var strTitle3 = '';
  678. var strTitle4 = '';
  679. var subText1 = '';
  680. var subText2 = '';
  681. var subText3 = '';
  682. var subText4 = '';
  683. var contentsType = '';
  684. var useYn = 'Y';
  685. var i = 1;
  686. $(this).find('input[name=imgPath]').each(function(){
  687. eval("imgPath" + i + "='"+$(this).val()+"'");
  688. i++;
  689. });
  690. $(this).find('input[name=newImgFile]').each(function(){
  691. newImgFileArr.push($(this).val());
  692. });
  693. i = 1;
  694. $(this).find('input[name=title]').each(function(){
  695. var title = $(this).val().replace(/[\']/gi, "\\'");
  696. eval("strTitle" + i + "='"+title+"'");
  697. i++;
  698. });
  699. i = 1;
  700. $(this).find('input[name=link]').each(function(){
  701. _mall = [[${@environment.getProperty('domain.front')}]];
  702. var val = $(this).val();
  703. val = val.replace('https:'+_mall, '');
  704. val = val.replace('http:'+_mall, '');
  705. val = val.replace(_mall, '');
  706. eval("strVar" + i + "='"+val+"'");
  707. i++;
  708. });
  709. i = 1;
  710. $(this).find('input[name=subText]').each(function(){
  711. var subText = $(this).val().replace(/[\']/gi, "\\'");
  712. eval("subText" + i + "='"+subText+"'");
  713. i++;
  714. });
  715. var dispStdt = $(this).find("[name=dispStdt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=stTimeHour]").val().replace('시', '') + "" +$(this).find("[name=stTimeMin]").val().replace('분', '') + "00";
  716. var dispEddt = $(this).find("[name=dispEddt]").val().replace(/[^0-9]/g, '') + "" +$(this).find("[name=edTimeHour]").val().replace('시', '') + "" +$(this).find("[name=edTimeMin]").val().replace('분', '') + "59";
  717. var dispOrd = $(this).find("[name=dispOrd]").val();
  718. if(contentsLoc=='SGNB001'){
  719. var thisIdx = $(this).find("input[name=tableIdx]").val();
  720. contentsType = $(this).find("input:radio[name=cateType"+thisIdx+"]:checked").val();
  721. strVar5 = $(this).find("input[name=gnbBgColor"+thisIdx+"]").val();
  722. strVar6 = $(this).find("input[name=gnbTextColor"+thisIdx+"]").val();
  723. strVar8 = $(this).find("input:radio[name=todayYn"+thisIdx+"]:checked").val();
  724. }
  725. if(contentsLoc=='SMM001'){
  726. var thisIdx = $(this).find("input[name=tableIdx]").val();
  727. strVar5 = $(this).find("input:radio[name=contentsType"+thisIdx+"]:checked").val();
  728. strVar6 = $(this).find("input[name=planSq"+thisIdx+"]").val();
  729. strVar7 = $(this).find("input:radio[name=thumTextColor"+thisIdx+"]:checked").val();
  730. }
  731. if(contentsLoc=='SMM005'){
  732. var thisIdx = $(this).find("input[name=tableIdx]").val();
  733. contentsType = $(this).find("input:radio[name=bannerType"+thisIdx+"]:checked").val();
  734. }
  735. if(contentsLoc=='SCM002' || contentsLoc=='SCM003'){
  736. useYn = $(this).find("input:radio[name=dispYn]:checked").val();
  737. }
  738. if(contentsLoc=='SCM003'){
  739. strVar1 = $(this).find("input:radio[name=dispCnt]:checked").val();
  740. }
  741. if(contentsLoc=='STAB003'){
  742. var cateValue = $(this).find("tr[name=tabCateRow]").find("select[name=cate1List] option:selected").val();
  743. contentsType = cateValue;
  744. }
  745. var data = {cateNo : cateNo
  746. , contentsLoc : contentsLoc
  747. , contentsType : contentsType
  748. , dispStdt : dispStdt
  749. , dispEddt : dispEddt
  750. , newImgFileArr : newImgFileArr
  751. , imgPath1 : imgPath1
  752. , imgPath2 : imgPath2
  753. , imgPath3 : imgPath3
  754. , imgPath4 : imgPath4
  755. , strVar1 : strVar1
  756. , strVar2 : strVar2
  757. , strVar3 : strVar3
  758. , strVar4 : strVar4
  759. , strVar5 : strVar5
  760. , strVar6 : strVar6
  761. , strVar7 : strVar7
  762. , strVar8 : strVar8
  763. , strTitle1 : strTitle1
  764. , strTitle2 : strTitle2
  765. , strTitle3 : strTitle3
  766. , strTitle4 : strTitle4
  767. , subText1 : subText1
  768. , subText2 : subText2
  769. , subText3 : subText3
  770. , subText4 : subText4
  771. , useYn : useYn
  772. , dispOrd : dispOrd
  773. , brandGroupNo : brandGroupNo
  774. };
  775. dataArr.push(data);
  776. });
  777. if(dataArr.length==0){
  778. var data = {cateNo : cateNo
  779. , contentsLoc : contentsLoc
  780. , brandGroupNo : brandGroupNo
  781. };
  782. dataArr.push(data);
  783. }else{
  784. var dataArrSort = [];
  785. dataArr.forEach(function(item, index){
  786. if(dataArr[index].dispOrd>0){
  787. for(var i=1; i<dataArr.length; i++){
  788. if(i>index){
  789. if(dataArr[index].dispOrd==dataArr[i].dispOrd){
  790. dataArr[i].dispOrd = Number(dataArr[i].dispOrd) + 1;
  791. }
  792. }
  793. }
  794. }
  795. });
  796. dataArr.forEach(function(item, index){
  797. if(dataArr[index].dispOrd != ''){
  798. dataArrSort[dataArr[index].dispOrd-1] = item;
  799. }
  800. });
  801. dataArr.forEach(function(item, index){
  802. if(dataArr[index].dispOrd == ''){
  803. var empty = false;
  804. for(var i=0; i<dataArrSort.length; i++){
  805. if(typeof dataArrSort[i] == 'undefined'){
  806. dataArrSort[i] = item;
  807. empty = true;
  808. break;
  809. }
  810. };
  811. if(!empty){
  812. dataArrSort.push(item);
  813. }
  814. }
  815. });
  816. dataArr = dataArrSort;
  817. }
  818. var jsonData = JSON.stringify(dataArr);
  819. mcxDialog.confirm('컨텐츠를 저장 하시겠습니까?', {
  820. cancelBtnText: "취소",
  821. sureBtnText: "확인",
  822. sureBtnClick: function(){
  823. gagajf.ajaxJsonSubmit('/display/contents/preview/save', jsonData, fnGetContentsPreviewList);
  824. }
  825. });
  826. });
  827. /**
  828. * 파일첨부
  829. */
  830. var fnPopFileUpload = function (obj, ind){
  831. var file = obj.files[0];
  832. file.name = 'test';
  833. if (typeof(file) == 'undefined'){
  834. return;
  835. }
  836. // 파일 업로드
  837. gagajf.ajaxFileUpload('/common/file/upload?subDir=/contents'
  838. , file
  839. , function(result) {
  840. $(obj).closest('div').find('input:hidden[name=newImgFile]').val(result.newFileName);
  841. $("#bannerPreViewUrlPop_"+ind).attr('src', $("#uploadDefaultUrlPop").val()+result.newFileName);
  842. $("#imgViewPop_"+ind).removeClass("off").addClass("on");
  843. }
  844. , 'image'
  845. );
  846. }
  847. /**
  848. * 링크추가
  849. */
  850. var fnAddLinkPopRow = function (param){
  851. var val = typeof param=='object'?'#':param;
  852. var html = '<tr name="linkPopRow">';
  853. html += '<th>링크 (없으면 #)</th>';
  854. html += '<td><input name="link" type="text" maxlength="200" required="required" data-valid-name="링크" value="'+val+'"/></td>';
  855. html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
  856. html += '</tr>';
  857. if(typeof param == 'object'){
  858. if(contentsLoc=='SMM005'){
  859. if($(param).closest("table").find("tbody").find("tr[name=linkPopRow]").length>1){
  860. mcxDialog.alert("링크는 최대 2개까지 등록 가능합니다");
  861. return;
  862. }
  863. }else{
  864. if($(param).closest("table").find("tbody").find("tr[name=linkPopRow]").length>3){
  865. mcxDialog.alert("링크는 4개까지 등록 가능합니다");
  866. return;
  867. }
  868. }
  869. $(param).closest("table").find("tbody").append(html);
  870. }else{
  871. return html;
  872. }
  873. }
  874. /**
  875. * 서브텍스트추가
  876. */
  877. var fnAddSubTextPopRow = function (param){
  878. var val = typeof param=='object'?'':param;
  879. var html = '<tr name="subTextPopRow">'
  880. html += '<th>서브텍스트</th>';
  881. html += '<td><input type="text" name="subText" maxlength="200" value="'+val+'"/></td>';
  882. html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
  883. html += '</tr>';
  884. if(typeof param == 'object'){
  885. if($(param).closest("table").find("tbody").find("tr[name=subTextPopRow]").length>3){
  886. mcxDialog.alert("서브텍스트는 4개까지 등록 가능합니다");
  887. return;
  888. }
  889. $(param).closest("table").find("tbody").append(html);
  890. }else{
  891. return html;
  892. }
  893. }
  894. /**
  895. * 브랜드 소개추가
  896. */
  897. var fnAddBrandDescRow = function (param){
  898. var val = typeof param=='object'?'':param;
  899. var html = '<tr name="subTextPopRow">'
  900. html += '<th>브랜드소개</th>';
  901. html += '<td><input type="text" name="subText" maxlength="200" value="'+val+'"/></td>';
  902. html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
  903. html += '</tr>';
  904. if(typeof param == 'object'){
  905. if($(param).closest("table").find("tbody").find("tr[name=subTextPopRow]").length>0){
  906. mcxDialog.alert("브랜드소개는 1개까지 등록 가능합니다");
  907. return;
  908. }
  909. $(param).closest("table").find("tbody").append(html);
  910. }else{
  911. return html;
  912. }
  913. }
  914. /**
  915. * 이미지 추가
  916. */
  917. var imgIndex = 0;
  918. var fnAddImgPopRow = function (param){
  919. var src = '';
  920. var imgPath = '';
  921. if(typeof param!='object'){
  922. src = $("#uploadDefaultUrlPop").val().replace('/contents/', '')+param;
  923. imgPath = param;
  924. }
  925. var html = '<tr name="imgPopRow">';
  926. html += '<th>이미지';
  927. html += '</th>';
  928. html += '<td><div class="uFile w300">';
  929. html += '<input id="filePop_'+imgIndex+'" name="file" type="file" class="uFileInput w300" onchange="fnPopFileUpload(this, '+imgIndex+')"/>';
  930. html += '<label for="filePop_'+imgIndex+'" class="uFileLabel">파일선택</label>';
  931. html += '<input type="hidden" name="imgPath" value="'+imgPath+'"/>';
  932. html += '<input type="hidden" name="newImgFile" value="" />';
  933. html += '</div>';
  934. html += '<div id="imgViewPop_'+imgIndex+'" class=';
  935. if(src!=''){
  936. html += '"on">';
  937. }else{
  938. html += '"off">';
  939. }
  940. html += '<img id="bannerPreViewUrlPop_'+imgIndex+'" src="'+src+'" style="height:100px; max-width:500px;" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',$(this).attr(\'src\'));"/>';
  941. html += '</div></td>';
  942. html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
  943. html += '</tr>';
  944. if(typeof param == 'object'){
  945. if(contentsLoc=='SMM005'){
  946. if($(param).closest("table").find("tbody").find("tr[name=imgPopRow]").length>1){
  947. mcxDialog.alert("이미지는 최대 2개까지 등록 가능합니다");
  948. return;
  949. }
  950. }else{
  951. if($(param).closest("table").find("tbody").find("tr[name=imgPopRow]").length>3){
  952. mcxDialog.alert("이미지는 4개까지 등록 가능합니다");
  953. return;
  954. }
  955. }
  956. imgIndex++;
  957. $(param).closest("table").find("tbody").append(html);
  958. }else{
  959. imgIndex++;
  960. return html;
  961. }
  962. }
  963. /**
  964. * 타이틀추가
  965. */
  966. var fnAddTitlePopRow = function (param){
  967. var val = typeof param=='object'?'':param;
  968. var html = '<tr name="titlePopRow">';
  969. html += '<th>타이틀</th>';
  970. html += '<td><input name="title" type="text" maxlength="200" data-valid-name="타이틀" value="'+val+'"/></td>';
  971. html += '<td class="aL"><button type="button" class="btn icn" onclick="fnDeleteTrRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button></td>';
  972. html += '</tr>';
  973. if(typeof param == 'object'){
  974. if($(param).closest("table").find("tbody").find("tr[name=titlePopRow]").length>3){
  975. mcxDialog.alert("타이틀은 4개까지 등록 가능합니다");
  976. return;
  977. }
  978. $(param).closest("table").find("tbody").append(html);
  979. }else{
  980. return html;
  981. }
  982. }
  983. // 컨텐츠 행삭제
  984. var fnDeleteContentsRow = function (obj){
  985. $(obj).closest("table").remove();
  986. }
  987. // 행삭제
  988. var fnDeleteTrRow = function (obj){
  989. $(obj).closest("tr").remove();
  990. }
  991. // 컨텐츠 추가 날짜 설정
  992. var fnCreateTimeOption = function(val, sel) {
  993. var html = '';
  994. for(var i=0; i<val; i++){
  995. var time = 0;
  996. if(i<10){
  997. time = '0'+i;
  998. }else {
  999. time = i;
  1000. }
  1001. var select = false;
  1002. if(sel==time){
  1003. select = true;
  1004. }
  1005. if(val==24){
  1006. time += '시';
  1007. }else if(val==60){
  1008. time += '분';
  1009. }
  1010. html += '<option value="'+time+'"';
  1011. if(select){
  1012. html += 'selected="selected"';
  1013. }
  1014. html += '>'+time+'</option>';
  1015. }
  1016. return html;
  1017. }
  1018. // 창닫기
  1019. var fnMainContentsPopupFormClose = function (){
  1020. uifnPopupClose('popupMainContents');
  1021. }
  1022. $(document).ready(function() {
  1023. $("#popTitle").text("["+contentsLoc+"] "+gagaAgGrid.lookupValue(contentsLocArr, contentsLoc));
  1024. $("#popSortable").disableSelection();
  1025. fnGetContentsPreviewList();
  1026. });
  1027. /*]]>*/
  1028. </script>
  1029. </html>