MainContentsPopupForm.html 46 KB

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