MainListForm.html 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : MainListForm.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.22 bin2107 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div id="main">
  18. <!-- 메인타이틀 영역 -->
  19. <div class="main-title">
  20. </div>
  21. <!-- //메인타이틀 영역 -->
  22. <!-- 메뉴 설명 -->
  23. <div class="infoBox menu-desc">
  24. </div>
  25. <!-- //메뉴 설명 -->
  26. <!-- 검색조건 영역 START -->
  27. <div class="panelStyle">
  28. <form id="searchForm" name="searchForm" action="#">
  29. <table class="frmStyle">
  30. <!-- <colgroup>-->
  31. <!-- <col style="width: 25%;"/>-->
  32. <!-- <col style="width: 25%;"/>-->
  33. <!-- <col style="width: 25%;"/>-->
  34. <!-- <col style="width: 25%;"/>-->
  35. <!-- </colgroup>-->
  36. <tr>
  37. <th>대분류</th>
  38. <td>
  39. <select name="cate1No" id="cate1No" onchange="fnGetMainDisplayList('cate1');">
  40. <option value="">[선택]</option>
  41. <option th:if="${mainCategoryList}" th:each="oneData, status:${mainCategoryList}" th:value="${oneData.cateNo+','+oneData.leafYn}" th:text="${'['+oneData.cateNo+']'+oneData.cateNm}"></option>
  42. </select>
  43. </td>
  44. <th>중분류</th>
  45. <td name="cate2Select" style="display:block;">
  46. <select name="cate2No" id="cate2No" onchange="fnGetMainDisplayList('cate2');">
  47. <option value="">[선택]</option>
  48. </select>
  49. </td>
  50. <td name="cate2Search" style="display:none;">
  51. <input type="text" class="w200" name="brandGroupNo" value="" />
  52. <button type="button" class="btn btnRight btn-success btn-lg" onclick="fnSearchBrandGroup();">브랜드조회</button>
  53. </td>
  54. </tr>
  55. </table>
  56. </form>
  57. </div>
  58. <!-- 검색조건 영역 END -->
  59. <!-- 리스트 영역 START -->
  60. <div class="panelStyle">
  61. <div class="boxTitle"></div>
  62. <form id="mainDisplayForm">
  63. <ul class="boxContent">
  64. <li class="boxContentTop">
  65. <div class="panelContent" style="overflow: hidden;">
  66. <th:block th:if="${sessionInfo.roleCd == 'G001_0000'}">
  67. <ul class="panelBar">
  68. <li>
  69. <span class="btnLeft" style="">
  70. <span style="padding:5.5px 15px; background:#d8eafc !important; border-top:1px solid #ddd; border-bottom:0.5px solid #dae0fd; font-weight: bold;">추가 열</span>
  71. <select id="addColCnt" required="required">
  72. <th:block th:each="num: ${#numbers.sequence(1,10)}">
  73. <option th:value="${num}" th:text="${num}"></option>
  74. </th:block>
  75. </select>
  76. <button type="button" class="btn btn-base btn-lg" id="btnAddRow">행 추가</button>
  77. </span>
  78. </li>
  79. <li class="right">
  80. <span class="btnRight" style="">
  81. <span><button type="button" class="btn btn-success btn-lg" id="btnSave">레이아웃 저장</button></span>
  82. </span>
  83. </li>
  84. </ul>
  85. </th:block>
  86. <ul class="panelBar">
  87. <th:block th:if="${sessionInfo.roleCd == 'G001_0000'}">
  88. <li>
  89. <span class="cBlue">* 마우스 드래그&드랍으로 레이아웃 순서 변경 가능하며 X 버튼으로 삭제 가능합니다.</span>
  90. </li>
  91. </th:block>
  92. <li id="viewUl" class="off aC">
  93. <span>
  94. <input name="viewDate" id="viewDate" type="text" class="w80 schDate" maxlength="10" data-valid-name="미리보기일자" data-valid-type="calendar"/>
  95. <select id="viewTimeHour" name="viewTimeHour" data-valid-name="미리보기 시간">
  96. <th:block th:each="num, index : ${#numbers.sequence(0,24)}">
  97. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" >시간</option>
  98. </th:block>
  99. </select>
  100. <select id="viewTimeMin" name="viewTimeMin" data-valid-name="미리보기 시간">
  101. <th:block th:each="num: ${#numbers.sequence(0,59)}">
  102. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}분|">분</option>
  103. </th:block>
  104. </select>
  105. <input name="viewTime" id="viewTime" type="hidden" data-valid-name="미리보기 시간" />
  106. <input type="hidden" name="uploadDefaultUrl" id="uploadDefaultUrl" th:value="${@environment.getProperty('upload.image.view') + '/mainLayout/'}"/>
  107. </span>
  108. <span>
  109. <button type="button" class="btn btn-info btn-lg" id="btnView">미리보기</button>
  110. <button type="button" class="btn btn-default btn-lg" id="btnAllUpd">일괄적용</button>
  111. </span>
  112. </li>
  113. <th:block th:if="${sessionInfo.roleCd == 'G001_0000'}">
  114. <li class="right">
  115. <span class="cRed">* 레이아웃 저장 버튼 클릭 시 수정 및 삭제 된 레이아웃이 즉시 적용 됩니다.</span><br/>
  116. <span class="cRed">* 화면 캡처파일 관리는 SUPER관리자, 어드민관리자만 가능합니다.</span>
  117. </li>
  118. </th:block>
  119. </ul>
  120. </div>
  121. <table class="frmStyle" id="mainSortable">
  122. <tbody>
  123. <tr style="height:150px;">
  124. <td colspan="8" style="text-align: center">
  125. <span>카테고리를 선택해 주세요.</span>
  126. </td>
  127. </tr>
  128. </tbody>
  129. </table>
  130. </li>
  131. </ul>
  132. </form>
  133. </div>
  134. <!-- 리스트 영역 END -->
  135. </div>
  136. <script th:inline="javascript">
  137. /*<![CDATA[*/
  138. var roleCd = [[${sessionInfo.roleCd}]];
  139. var tdWidth = 800;
  140. //var mainCategoryList = [[${mainCategoryList}]];
  141. var brandCdList = [[${brandCdList}]];
  142. var contentsLocArr = gagajf.convertToArray([[${contentsLocList}]]);
  143. /**
  144. * 대분류/중분류 선택시
  145. */
  146. var fnGetMainDisplayList = function (cate){
  147. if(cate=='cate1'){
  148. var cate1Val = $("#searchForm select[name=cate1No] option:selected").val().split(',')[0]; //1700,Y
  149. if((!gagajf.isNull(cate1Val)&&cate1Val=='1711') || (!gagajf.isNull(cate1Val)&&cate1Val=='1721')){
  150. $("#searchForm").find("td[name=cate2Select]").css('display','none');
  151. $("#searchForm").find("td[name=cate2Search]").css('display','block');
  152. }else{
  153. $("#searchForm").find("td[name=cate2Select]").css('display','block');
  154. $("#searchForm").find("td[name=cate2Search]").css('display','none');
  155. $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val('');
  156. $("#searchForm select[name=cate2No]").html('<option value="">[선택]</option>');
  157. }
  158. }
  159. $("#viewUl").addClass("off");
  160. var val = $("#searchForm select[name=cate1No]").val();
  161. if(gagajf.isNull(val)||val.split(',')[0]=='0'){
  162. var html = '<tbody><tr style="height:170px;"><td colspan="8" style="text-align:center;"><span>카테고리를 선택해 주세요</span></td></tr></tbody>';
  163. $("#mainSortable").html(html);
  164. }else{
  165. $("#mainSortable").html('');
  166. if(val.split(',')[1]=='N' && gagajf.isNull($("#searchForm select[name=cate2No]").val())){
  167. $("#searchForm select[name=cate2No]").html('<option value="">[선택]</option>');
  168. var data = {
  169. cateNo : val.split(',')[0]
  170. ,clsLvl : 2
  171. };
  172. var jsonData = JSON.stringify(data);
  173. gagajf.ajaxJsonSubmit('/display/main/category/list', jsonData, fnCate2NoCallBack);
  174. }else{
  175. $("#viewUl").removeClass("off");
  176. var cateNo = "";
  177. var brandGroupNo = "";
  178. var cate1Val = $("#searchForm select[name=cate1No] option:selected").val().split(',')[0]; //1700,Y
  179. /*if((!gagajf.isNull(cate1Val)&&cate1Val=='1711') || (!gagajf.isNull(cate1Val)&&cate1Val=='1721')){
  180. cateNo = $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val();
  181. }else{
  182. cateNo = val.split(',')[0];
  183. if(!gagajf.isNull($("#searchForm select[name=cate2No]").val())){
  184. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  185. }
  186. }*/
  187. cateNo = val.split(',')[0];
  188. if(!gagajf.isNull($("#searchForm select[name=cate2No]").val())){
  189. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  190. }
  191. if((!gagajf.isNull(cate1Val)&&cate1Val=='1711') || (!gagajf.isNull(cate1Val)&&cate1Val=='1721')){
  192. cateNo = $("#searchForm select[name=cate1No] option:selected").val().split(',')[0];
  193. brandGroupNo = $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val();
  194. }
  195. /*else{
  196. var data = {
  197. cateNo : cateNo
  198. };
  199. }*/
  200. var data = {
  201. cateNo : cateNo
  202. , brandGroupNo : brandGroupNo
  203. };
  204. console.log('cateNo::'+cateNo);
  205. console.log('brandGroupNo::'+brandGroupNo);
  206. var jsonData = JSON.stringify(data);
  207. // 레이아웃 조회 로직
  208. gagajf.ajaxJsonSubmit('/display/main/layout/list', jsonData, fnLayoutCallBack);
  209. }
  210. }
  211. }
  212. var fnSearchBrandGroup = function (){
  213. cfnOpenBrandGroupListPopup("fnCallBackBrandGroup", "S", "S");
  214. }
  215. var fnCallBackBrandGroup = function (result){
  216. $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val(result[0].brandGroupNo);
  217. fnGetMainDisplayList('cate2');
  218. }
  219. /**
  220. * 레이아웃 조회
  221. */
  222. var fnLayoutCallBack = function (result){
  223. var html = '';
  224. var imgSrc = '';
  225. var orgFileNm = '';
  226. var sysFileNm = '';
  227. var onOff = 'off';
  228. var cate1No = $("#searchForm select[name=cate1No]").val().split(',')[0];
  229. for(var i=0; i<result.length; i++){
  230. var colCnt = result[i].colCnt;
  231. var colNo = result[i].colNo
  232. var colspan = parseInt(5/Number(colCnt), 10);
  233. var colspanAdd = 5 - (colspan * colCnt);
  234. var tdSize = 10;
  235. if(colCnt>5){
  236. tdSize = parseInt((colCnt/2), 10)+1;
  237. colspan = parseInt(5/(colCnt/2), 10);
  238. colspanAdd = 5 - (colspan * parseInt((colCnt/2), 10));
  239. }
  240. if(colCnt==1 || colNo==1){
  241. html += '<tbody><tr style="height:170px;">\n';
  242. }else if(colNo==tdSize){
  243. html += '<tr style="height:170px;">\n';
  244. }
  245. if(colNo>=tdSize){
  246. colspanAdd = (5 - (colspan * Math.round(colCnt/2))) + parseInt(colCnt/2, 10);
  247. }
  248. html += '<td colspan="';
  249. colspanAdd -= (colNo-1);
  250. if(colspanAdd>0){
  251. html += colspan + 1;
  252. }else{
  253. html += colspan;
  254. }
  255. let maxWidth = parseInt(tdWidth/Number(colCnt), 10);
  256. if(maxWidth == 0){
  257. maxWidth = 800;
  258. }
  259. // if(colCnt>5){
  260. // maxWidth = parseInt(tdWidth/(Number(colCnt)/tdSize), 10);
  261. // }
  262. html += '" style="text-align:center; max-width:'+maxWidth+'px;">\n';
  263. html += '<div><span style="font-weight:bold">'+result[i].contentsLoc+'</span></div><div><span>[ '+gagaAgGrid.lookupValue(contentsLocArr, result[i].contentsLoc)+' ]</span></div>\n';
  264. html += '<input type="text" class="w200" name="contentsTitle" placeholder="메인타이틀" value="'+result[i].contentsTitle+'"/>\n';
  265. html += '<br/>\n';
  266. if(result[i].contentsYn=='C' || result[i].contentsYn=='A'){
  267. html += '<button type="button" class="btn btn-success btn-lg" onclick="fnChangeContents(this);">수정</button>\n';
  268. html += '<button type="button" class="btn btn-default btn-lg" onclick="fnUpdateContents(\''+result[i].contentsLoc+'\');">적용</button>\n';
  269. }else if(result[i].contentsYn=='G'){
  270. // if(result[i].contentsYn=='A'){
  271. // html += '<button type="button" class="btn btn-success btn-lg" onclick="fnChangeContents(this);">수정</button>';
  272. // html += '<button type="button" class="btn btn-default btn-lg" onclick="fnUpdateContents(\''+result[i].contentsLoc+'\');">적용</button>';
  273. // html += '<br/>';
  274. // }
  275. html += '<button type="button" class="btn btn-success btn-lg" onclick="fnSearchCategory(\''+result[i].contentsLoc+'\');">상품관리</button>\n';
  276. }else{
  277. html += '<li>위치설정</li>\n';
  278. }
  279. html += '<input type="hidden" name="contentsLoc" value="'+result[i].contentsLoc+'"/>\n';
  280. html += '<input type="hidden" name="colCnt" value="'+result[i].colCnt+'"/>\n';
  281. html += '<input type="hidden" name="colNo" value="'+result[i].colNo+'"/>\n';
  282. html += '<input type="hidden" name="contentsYn" value="'+result[i].contentsYn+'"/>\n';
  283. html += '</td>\n';
  284. if(colNo=='1'){
  285. if(result[i].orgFileNm!=null && result[i].orgFileNm!='null' && result[i].orgFileNm!="" ){
  286. orgFileNm = result[i].orgFileNm;
  287. sysFileNm = result[i].sysFileNm;
  288. imgSrc = $("#uploadDefaultUrl").val()+orgFileNm;
  289. onOff = 'on';
  290. }else{
  291. orgFileNm = '';
  292. sysFileNm = '';
  293. imgSrc = '';
  294. onOff = 'off';
  295. }
  296. }
  297. if(tdSize==10){
  298. if(colCnt==1 || colNo==colCnt){
  299. html += '<td name="imgTd" style="width:300px;">\n';
  300. html += '<div id="imgView_'+i+'" class="'+onOff+'">\n';
  301. html += '<img id="bannerPreViewUrl_'+i+'" src="'+imgSrc+'" style="width:300px; height:120px" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',\''+imgSrc+'\');"/>\n';
  302. html += '</div>\n';
  303. // SUPER관리자,어드민관리자만 파일관리 가능
  304. if(roleCd=='G001_0000' || roleCd=='G001_A000'){
  305. html += '<div class="uFile w300">\n';
  306. html += '<input id="file_'+i+'" name="file" type="file" class="uFileInput w300" onchange="fnFileUpload(this, '+i+');"/>\n';
  307. html += '<label for="file_'+i+'" class="uFileLabel">파일선택</label>\n';
  308. html += '<input type="hidden" name="orgFileNm" value="'+orgFileNm+'"/>\n';
  309. html += '<input type="hidden" name="sysFileNm" value="'+sysFileNm+'"/>\n';
  310. html += '<input type="hidden" name="newSysFileNm" value=""/>\n';
  311. html += '</div>\n';
  312. }
  313. html += '</td>\n';
  314. html += '<td name="deleteTd" style="max-width:50px;">\n';
  315. if(roleCd=='G001_0000'){
  316. html += '<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>\n';
  317. }
  318. html += '</td></tr></tbody>\n';
  319. }
  320. }else{
  321. if(colNo==(tdSize-1)){
  322. html += '<td name="imgTd" rowspan="2" style="width:300px;">\n';
  323. html += '<div id="imgView_'+i+'" class="'+onOff+'">\n';
  324. html += '<img id="bannerPreViewUrl_'+i+'" src="'+imgSrc+'" style="width:300px; height:120px" onclick="cfnOpenImagePreViewPopup(\'bannerPreimgViewPop\',\''+imgSrc+'\');"/>\n';
  325. html += '</div>\n';
  326. // SUPER관리자,어드민관리자만 파일관리 가능
  327. if(roleCd=='G001_0000' || roleCd=='G001_A000'){
  328. html += '<div class="uFile w300">\n';
  329. html += '<input id="file_'+i+'" name="file" type="file" class="uFileInput w300" onchange="fnFileUpload(this, '+i+');"/>\n';
  330. html += '<label for="file_'+i+'" class="uFileLabel">파일선택</label>\n';
  331. html += '<input type="hidden" name="orgFileNm" value="'+orgFileNm+'"/>\n';
  332. html += '<input type="hidden" name="sysFileNm" value="'+sysFileNm+'"/>\n';
  333. html += '<input type="hidden" name="newSysFileNm" value=""/>\n';
  334. html += '</div>\n';
  335. }
  336. html += '</td>\n';
  337. html += '<td name="deleteTd" rowspan="2" style="max-width:50px;">\n';
  338. if(roleCd=='G001_0000'){
  339. html += '<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>\n';
  340. }
  341. html += '</td></tr>\n';
  342. }else if(colNo==colCnt){
  343. html += '</tr></tbody>\n';
  344. }
  345. }
  346. }
  347. $("#mainSortable").html(html);
  348. if(roleCd=='G001_0000'){
  349. $("#mainSortable").sortable();
  350. }
  351. }
  352. /**
  353. * 중분류 리스트
  354. */
  355. var fnCate2NoCallBack = function (result){
  356. var html = '<option value="">[선택]</option>\n';
  357. for (var i=0; i<result.length; i++){
  358. html += '<option value="'+result[i].cateNo+','+result[i].leafYn+'">['+result[i].cateNo+']'+result[i].cateNm+'</option>\n';
  359. }
  360. $("#searchForm select[name=cate2No]").html(html);
  361. // grid 높이 조절
  362. //uifnFitGrid();
  363. }
  364. var fnTest = function (obj,idx){
  365. var $obj = $(obj);
  366. var index = $("#contentsBox"+idx+" option").index($("#contentsBox"+idx+" option:selected"));
  367. var contentsType = $("#contentsBox"+idx+" option:eq("+index+")").attr('data-idx');
  368. console.log(index);
  369. console.log(contentsType);
  370. // var dataSelect = document.getElementsByName("contentsLocEdit");
  371. // var value = dataSelect.options[document.getElementsByName("contentsLocEdit").selectedIndex].value;
  372. // $("select[name=contentsLocEdit]").val();
  373. console.log($(obj).val());
  374. // $("#id").val("1").prop("selected", true);
  375. $("#contentsYn"+idx).val(contentsType).prop('selected',true);
  376. }
  377. /**
  378. * 레이아웃 행추가 버튼
  379. */
  380. let contentsIdx = 0;
  381. $("#btnAddRow").on("click", function (){
  382. var val = $("#searchForm select[name=cate1No]").val();
  383. var cate1No = val.split(',')[0];
  384. //console.log('val>>'+val);
  385. //console.log('cate1No>>'+cate1No);
  386. //console.log('leafYn>>>'+val.split(',')[1]);
  387. if(gagajf.isNull(val) || cate1No=='0' || val.split(',')[1]=='N' && gagajf.isNull($("#searchForm select[name=cate2No]").val())){
  388. mcxDialog.alert('카테고리를 선택해 주세요.');
  389. return;
  390. }
  391. var html = '';
  392. var colCnt = $("#addColCnt").val();
  393. var colspan = parseInt(5/Number(colCnt), 10);
  394. var tdSize = 10;
  395. if(colCnt>5){
  396. tdSize = parseInt(colCnt/2, 10) + 1;
  397. colspan = parseInt(5/parseInt(colCnt/2, 10), 10);
  398. }
  399. var contentsLocHtml = '<option value="">[선택]</option>';
  400. var contentsLocList = [[${contentsLocList}]];
  401. var clocPrefix ='';
  402. var mainCategoryList = [[${mainCategoryList}]];
  403. $.each(mainCategoryList, function(idx, data) {
  404. if(cate1No==data.cateNo){
  405. clocPrefix = data.clocPrefix;
  406. }
  407. });
  408. if(cate1No=='1700'){
  409. contentsLocHtml += '<option value="SGNB001" data-idx="C">[SGNB001] STYLE24MALL > GNB > TOP배너</option>';
  410. contentsLocHtml += '<option value="SGNB002" data-idx="C">[SGNB002] STYLE24MALL > GNB > TOP배너(모바일)</option>';
  411. contentsLocHtml += '<option value="STAB001" data-idx="C">[STAB001] STYLE24MALL > GNB > 브랜드</option>';
  412. contentsLocHtml += '<option value="STAB002" data-idx="C">[STAB002] STYLE24MALL > GNB > 카테고리</option>';
  413. contentsLocHtml += '<option value="SKEY001" data-idx="C">[SKEY001] STYLE24MALL > GNB > 검색어</option>';
  414. }
  415. if(cate1No=='1720'){
  416. contentsLocHtml += '<option value="SGNB002" data-idx="C">[SGNB002] STYLE24MALL > GNB > TOP배너(모바일)</option>';
  417. contentsLocHtml += '<option value="STAB001" data-idx="C">[STAB001] STYLE24MALL > GNB > 브랜드</option>';
  418. contentsLocHtml += '<option value="STAB002" data-idx="C">[STAB002] STYLE24MALL > GNB > 카테고리</option>';
  419. contentsLocHtml += '<option value="SKEY001" data-idx="C">[SKEY001] STYLE24MALL > GNB > 검색어</option>';
  420. }
  421. for(var i=0; i<contentsLocList.length; i++){
  422. var contentsLocCd = contentsLocList[i].cd;
  423. contentsLocCd = contentsLocCd.replace(/[0-9]/g, "");
  424. if(contentsLocCd==clocPrefix){
  425. if(cate1No=='1700'){
  426. if(contentsLocList[i].cd != 'SMM012'){
  427. contentsLocHtml += '<option value="'+contentsLocList[i].cd+'" data-idx="'+contentsLocList[i].cdDesc+'">['+contentsLocList[i].cd+'] '+contentsLocList[i].cdNm+'</option>';
  428. }
  429. }else if(cate1No=='1720'){
  430. if(contentsLocList[i].cd != 'SMM009'){
  431. contentsLocHtml += '<option value="'+contentsLocList[i].cd+'" data-idx="'+contentsLocList[i].cdDesc+'">['+contentsLocList[i].cd+'] '+contentsLocList[i].cdNm+'</option>';
  432. }
  433. }else{
  434. contentsLocHtml += '<option value="'+contentsLocList[i].cd+'" data-idx="'+contentsLocList[i].cdDesc+'">['+contentsLocList[i].cd+'] '+contentsLocList[i].cdNm+'</option>';
  435. }
  436. }
  437. }
  438. for(var j=0; j<colCnt; j++){
  439. var colNo = (j+1);
  440. var colspanAdd = 5 - (colspan * colCnt);
  441. var maxWidth = parseInt(tdWidth/Number(colCnt), 10);
  442. if(colCnt>5){
  443. maxWidth = parseInt(tdWidth/(Number(colCnt)/tdSize), 10);
  444. colspanAdd = 5 - (colspan * parseInt(colCnt/2, 10));
  445. }
  446. if(colCnt==1 || colNo==1){
  447. html += '<tbody><tr style="height:170px;">';
  448. }else if(colNo==tdSize){
  449. html += '<tr style="height:170px;">';
  450. }
  451. if(colNo>=tdSize){
  452. colspanAdd = (5 - (colspan * Math.round(colCnt/2))) + parseInt(colCnt/2, 10);
  453. }
  454. html += '<td colspan="';
  455. colspanAdd -= j;
  456. if(colspanAdd>0){
  457. html += colspan + 1;
  458. }else{
  459. html += colspan;
  460. }
  461. html += '" style="text-align:center; max-width:'+maxWidth+'px;">';
  462. html += '<div>';
  463. html += '<select name="contentsLocEdit" id="contentsBox'+contentsIdx+'" required="required" style="max-width:300px;" data-valid-name="컨텐츠 위치" onchange="fnTest(this,'+contentsIdx+');">'+contentsLocHtml+'</select>';
  464. html += '</div>';
  465. html += '<select name="contentsYn" id="contentsYn'+contentsIdx+'" required="required" style="max-width:160px;" data-valid-name="컨텐츠 타입" disabled="disabled"><option value="C">[C] 컨텐츠</option><option value="G">[G] 상품</option><option value="A">[A] 컨텐츠 + 상품</option><option value="E">[E] 위치설정</option></select>';
  466. html += '<input type="hidden" name="contentsLoc" value=""/>';
  467. html += '<input type="hidden" name="colCnt" value="'+colCnt+'"/>';
  468. html += '<input type="hidden" name="colNo" value="'+colNo+'"/>';
  469. html += '<input type="hidden" name="contentsYn" value=""/>';
  470. html += '<input type="text" class="w200" name="contentsTitle" placeholder="메인타이틀" value=""/>';
  471. html += '</td>';
  472. var i = $("#mainSortable tbody").length;
  473. if(tdSize==10){
  474. if(colCnt==1 || colNo==colCnt){
  475. html += '<td name="imgTd" style="width:300px;">';
  476. // SUPER관리자,어드민관리자만 파일관리 가능
  477. if(roleCd=='G001_0000' || roleCd=='G001_A000'){
  478. html += '<div class="uFile w300">';
  479. html += '<input id="file_'+i+'" name="file" type="file" class="uFileInput w300" onchange="fnFileUpload(this, '+i+');"/>';
  480. html += '<label for="file_'+i+'" class="uFileLabel">파일선택</label>';
  481. html += '<input type="hidden" name="orgFileNm"/>';
  482. html += '<input type="hidden" name="sysFileNm"/>';
  483. html += '<input type="hidden" name="newSysFileNm"/>';
  484. html += '</div>';
  485. }
  486. html += '<div id="imgView_'+i+'" class="off">';
  487. html += '<img id="bannerPreViewUrl_'+i+'" src="" style="width:300px; height:120px"/>';
  488. html += '</div>';
  489. html += '</td>';
  490. html += '<td name="deleteTd" style="max-width:50px;">';
  491. if(roleCd=='G001_0000'){
  492. html += '<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>';
  493. }
  494. html += '</td></tr><tbody>';
  495. }
  496. }else{
  497. if(colNo==(tdSize-1)){
  498. html += '<td name="imgTd" rowspan="2" style="width:300px;">';
  499. // SUPER관리자,어드민관리자만 파일관리 가능
  500. if(roleCd=='G001_0000' || roleCd=='G001_A000'){
  501. html += '<div class="uFile w300">';
  502. html += '<input id="file_'+i+'" name="file" type="file" class="uFileInput w300" onchange="fnFileUpload(this, '+i+');"/>';
  503. html += '<label for="file_'+i+'" class="uFileLabel">파일선택</label>';
  504. html += '<input type="hidden" name="orgFileNm"/>';
  505. html += '<input type="hidden" name="sysFileNm"/>';
  506. html += '<input type="hidden" name="newSysFileNm" value=""/>';
  507. html += '</div>';
  508. }
  509. html += '<div id="imgView_'+i+'" class="off">';
  510. html += '<img id="bannerPreViewUrl_'+i+'" src="" style="width:300px; height:120px"/>';
  511. html += '</div>';
  512. html += '</td>';
  513. html += '<td name="deleteTd" rowspan="2" style="max-width:50px;">';
  514. if(roleCd=='G001_0000'){
  515. html += '<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>';
  516. }
  517. html += '</td></tr>';
  518. }else if(colNo==colCnt){
  519. html += '</tr></tbody>';
  520. }
  521. }
  522. }
  523. $("#mainSortable").prepend(html);
  524. if(roleCd=='G001_0000'){
  525. $("#mainSortable").sortable();
  526. }
  527. //uifnFitGrid();
  528. contentsIdx ++;
  529. });
  530. /**
  531. * 레이아웃 행 삭제
  532. */
  533. var fnDeleteRow = function (obj){
  534. $(obj).closest("tbody").remove();
  535. }
  536. function fnCate2BrandCheck(){
  537. var cateBrand = $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val();
  538. if(gagajf.isNull(cateBrand)){
  539. mcxDialog.alert('브랜드코드를 조회해주세요.');
  540. return false;
  541. }
  542. return true;
  543. }
  544. /**
  545. * 레이아웃 저장
  546. */
  547. $("#btnSave").on("click",function(){
  548. var val = $("#searchForm select[name=cate1No]").val();
  549. if(gagajf.isNull(val) || (val.split(',')[1]=='N' && gagajf.isNull($("#searchForm select[name=cate2No]").val())) ){
  550. mcxDialog.alert('카테고리를 선택해 주세요.');
  551. return;
  552. }
  553. if(!gagajf.validation("#mainDisplayForm")){
  554. return;
  555. }
  556. var cateNo = '';
  557. var cateNm = '';
  558. var brandGroupNo = '';
  559. if(val.split(',')[1]=='Y'){
  560. cateNo = val.split(',')[0];
  561. }else{
  562. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  563. }
  564. if(cateNo == '1711' || cateNo == '1721'){
  565. if(!fnCate2BrandCheck()){
  566. return false;
  567. }
  568. brandGroupNo = $("#searchForm").find("td[name=cate2Search]").find("input[name=brandGroupNo]").val();
  569. }
  570. var dataArr = [];
  571. var contentLocArr = [];
  572. var contentLocCheck = true;
  573. $("#mainSortable tbody").each(function(ind){
  574. var orgFileNm = $(this).find('input:hidden[name="orgFileNm"]').val();
  575. var sysFileNm = $(this).find('input:hidden[name="sysFileNm"]').val();
  576. var newSysFileNm = $(this).find('input:hidden[name="newSysFileNm"]').val();
  577. $(this).find('td').each(function(index){
  578. if($(this).attr("name")!="imgTd" && $(this).attr("name")!="deleteTd"){
  579. if($(this).find('input:hidden[name="contentsLoc"]').val()==''){
  580. if(contentLocArr.indexOf($(this).find('select[name="contentsLocEdit"]').val())>-1){
  581. $(this).find('select[name="contentsLocEdit"]').focus();
  582. contentLocCheck = false;
  583. return;
  584. }else{
  585. $(this).find('input:hidden[name="contentsLoc"]').val($(this).find('select[name="contentsLocEdit"]').val());
  586. contentLocArr.push($(this).find('input:hidden[name="contentsLoc"]').val());
  587. }
  588. }else{
  589. if(contentLocArr.indexOf($(this).find('input:hidden[name="contentsLoc"]').val())>-1){
  590. contentLocCheck = false;
  591. return;
  592. }else{
  593. contentLocArr.push($(this).find('input:hidden[name="contentsLoc"]').val());
  594. }
  595. }
  596. if($(this).find('input:hidden[name="contentsYn"]').val()==''){
  597. $(this).find('input:hidden[name="contentsYn"]').val($(this).find('select[name="contentsYn"]').val());
  598. }
  599. var data = {cateNo : cateNo
  600. , contentsLoc : $(this).find('input:hidden[name="contentsLoc"]').val()
  601. , colCnt : $(this).find('input:hidden[name="colCnt"]').val()
  602. , colNo : $(this).find('input:hidden[name="colNo"]').val()
  603. , contentsYn : $(this).find('input:hidden[name="contentsYn"]').val()
  604. , dispOrd : (ind+1)
  605. , orgFileNm : orgFileNm
  606. , sysFileNm : sysFileNm
  607. , newSysFileNm : newSysFileNm
  608. , brandGroupNo : brandGroupNo
  609. , contentsTitle : $(this).find('input[name="contentsTitle"]').val()
  610. };
  611. dataArr.push(data);
  612. }
  613. });
  614. if(!contentLocCheck){
  615. return;
  616. }
  617. });
  618. if(!contentLocCheck){
  619. // mcxDialog.alert('위치코드가 중복 되었습니다.');
  620. mcxDialog.alert('이미 레이아웃 설정된 컨텐츠입니다.');
  621. return;
  622. }
  623. if(dataArr.length==0){
  624. mcxDialog.alert("저장할 데이터가 없습니다.");
  625. return;
  626. }
  627. //console.log(dataArr);
  628. var jsonData = JSON.stringify(dataArr);
  629. mcxDialog.confirm('레이아웃을 저장 하시겠습니까?', {
  630. cancelBtnText: "취소",
  631. sureBtnText: "확인",
  632. sureBtnClick: function(){
  633. gagajf.ajaxJsonSubmit('/display/main/layout/save', jsonData, fnGetMainDisplayList);
  634. }
  635. });
  636. });
  637. /**
  638. * 레이아웃 수정 버튼 > 팝업
  639. */
  640. var fnChangeContents = function (obj){
  641. var val = $("#searchForm select[name=cate1No]").val();
  642. var cateNo = '';
  643. var brandGroupNo = '';
  644. if(val.split(',')[1]=='Y'){
  645. cateNo = val.split(',')[0];
  646. }else{
  647. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  648. }
  649. if(cateNo=='1711' || cateNo=='1721'){
  650. brandGroupNo = $("#searchForm").find("input[name=brandGroupNo]").val();
  651. }
  652. var contentsLoc = $(obj).closest("td").find('input:hidden[name="contentsLoc"]').val();
  653. // 브랜드픽, MD추천 다른 팝업 사용
  654. if(contentsLoc=='SMM007'||contentsLoc=='SMM009'||contentsLoc=='SMM012'||contentsLoc=='SMM003'||contentsLoc=='SBM007'||contentsLoc=='SBM008'||contentsLoc=='SBM009'
  655. ||contentsLoc=='SBM017'||contentsLoc=='SBM018'||contentsLoc=='SBM019'||contentsLoc=='SOM003'||contentsLoc=='SCM002'||contentsLoc=='SCM003'){
  656. cfnOpenMainMultiContentsPopup(cateNo, contentsLoc, brandGroupNo);
  657. }else if(contentsLoc=='STAB001' || contentsLoc=='STAB002' || contentsLoc=='SBM002' || contentsLoc=='SBMM002'){
  658. cfnOpenMainGnbContentsPopup(cateNo, contentsLoc, brandGroupNo);
  659. }else{
  660. cfnOpenMainContentsPopup(cateNo, contentsLoc, brandGroupNo);
  661. }
  662. }
  663. /**
  664. * 첨부파일 등록
  665. */
  666. var fnFileUpload = function (obj, ind){
  667. var file = obj.files[0];
  668. file.name = 'test';
  669. if (typeof(file) == 'undefined'){
  670. return;
  671. }
  672. gagajf.ajaxFileUpload('/common/file/upload?subDir=/mainLayout'
  673. , file
  674. , function(result) {
  675. $(obj).closest('div').find('input:hidden[name=sysFileNm]').val(result.oldFileName);
  676. $(obj).closest('div').find('input:hidden[name=newSysFileNm]').val(result.newFileName);
  677. $("#bannerPreViewUrl_"+ind).attr('src', $("#uploadDefaultUrl").val()+result.newFileName);
  678. $("#imgView_"+ind).removeClass("off").addClass("on");
  679. //uifnFitGrid();
  680. }
  681. , 'image'
  682. );
  683. };
  684. /**
  685. * 개별 적용 버튼
  686. */
  687. var fnUpdateContents = function (contentsLoc){
  688. mcxDialog.confirm('컨텐츠를 적용 하시겠습니까?', {
  689. cancelBtnText: "취소",
  690. sureBtnText: "확인",
  691. sureBtnClick: function(){
  692. if(contentsLoc=='STAB002') {
  693. var data = {
  694. gtabGb: 'C'
  695. };
  696. var jsonData = JSON.stringify(data);
  697. gagajf.ajaxJsonSubmit('/display/contents/gnbtab/save', jsonData);
  698. }else if(contentsLoc=='SBM002'){
  699. var val = $("#searchForm select[name=cate1No]").val();
  700. var cateNo = '';
  701. var brandGroupNo = '';
  702. if(val.split(',')[1]=='Y'){
  703. cateNo = val.split(',')[0];
  704. }else{
  705. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  706. }
  707. if(cateNo=='1711' || cateNo=='1721'){
  708. brandGroupNo = $("#searchForm").find("input[name=brandGroupNo]").val();
  709. }
  710. var data = {
  711. gtabGb: 'B'
  712. ,brandGroupNo : brandGroupNo
  713. };
  714. var jsonData = JSON.stringify(data);
  715. gagajf.ajaxJsonSubmit('/display/contents/gnbtab/save', jsonData);
  716. }else{
  717. var val = $("#searchForm select[name=cate1No]").val();
  718. var cateNo = '';
  719. var brandGroupNo = '';
  720. if(val.split(',')[1]=='Y'){
  721. cateNo = val.split(',')[0];
  722. }else{
  723. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  724. }
  725. if(cateNo=='1711' || cateNo=='1721'){
  726. brandGroupNo = $("#searchForm").find("input[name=brandGroupNo]").val();
  727. }
  728. var data = { contentsLocArr : [contentsLoc]
  729. ,cateNo : cateNo
  730. ,brandGroupNo : brandGroupNo
  731. };
  732. var jsonData = JSON.stringify(data);
  733. gagajf.ajaxJsonSubmit('/display/contents/save', jsonData);
  734. }
  735. }
  736. });
  737. }
  738. /**
  739. * 일괄적용 버튼
  740. */
  741. $("#btnAllUpd").on("click", function(){
  742. mcxDialog.confirm('컨텐츠를 일괄적용 하시겠습니까?', {
  743. cancelBtnText: "취소",
  744. sureBtnText: "확인",
  745. sureBtnClick: function(){
  746. var val = $("#searchForm select[name=cate1No]").val();
  747. var cateNo = '';
  748. var brandGroupNo = '';
  749. if(val.split(',')[1]=='Y'){
  750. cateNo = val.split(',')[0];
  751. }else{
  752. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  753. }
  754. if(cateNo=='1711' || cateNo=='1721'){
  755. brandGroupNo = $("#searchForm").find("input[name=brandGroupNo]").val();
  756. }
  757. var contentsLocArr = [];
  758. $("input:hidden[name=contentsLoc]").each(function(){
  759. contentsLocArr.push($(this).val());
  760. });
  761. var data = { contentsLocArr : contentsLocArr
  762. ,cateNo : cateNo
  763. ,brandGroupNo : brandGroupNo
  764. };
  765. var jsonData = JSON.stringify(data);
  766. gagajf.ajaxJsonSubmit('/display/contents/save', jsonData);
  767. }
  768. });
  769. });
  770. /**
  771. * 상품관리
  772. */
  773. var fnSearchCategory = function (contentsLoc){
  774. var val = $("#searchForm select[name=cate1No]").val();
  775. var cate1No = '';
  776. /*if(val.split(',')[1]=='Y'){
  777. if(val.split(',')[0]=='1711' || val.split(',')[0]=='1721'){
  778. cate1No = '2100';
  779. }else if(val.split(',')[0]=='1713' || val.split(',')[0]=='1723'){
  780. cate1No = '3000';
  781. }else{
  782. cate1No = val.split(',')[0];
  783. }
  784. }else{
  785. cate1No = $("#searchForm select[name=cate2No]").val().split(',')[0];
  786. }*/
  787. if(val.split(',')[1]!='Y'){
  788. cate1No = $("#searchForm select[name=cate2No]").val().split(',')[0];
  789. }
  790. var data = {
  791. contentsLoc : contentsLoc
  792. ,cate1No : cate1No
  793. };
  794. var jsonData = JSON.stringify(data);
  795. gagajf.ajaxJsonSubmit('/display/category4srch/list', jsonData, fnGoodsMng);
  796. };
  797. var fnGoodsMng = function (result){
  798. var selLvl = 6;
  799. if(gagajf.isNull(result.cate4No)){
  800. selLvl = 5;
  801. }
  802. if(gagajf.isNull(result.cate3No)){
  803. selLvl = 4;
  804. }
  805. if(gagajf.isNull(result.cate2No)){
  806. selLvl = 3;
  807. }
  808. console.log('mainListForm result cateCd>>'+result.leafCateNo);
  809. var params = 'cateGb='+result.cateGb;
  810. params += '&cateType='+result.cateType;
  811. params += '&cate1No='+result.cate1No;
  812. params += '&cate2No='+result.cate2No;
  813. params += '&cate3No='+result.cate3No;
  814. params += '&cate4No='+result.cate4No;
  815. params += '&selLvl='+selLvl;
  816. params += '&cateCd='+result.leafCateNo;
  817. params += '&goodsAddYn=Y';
  818. params += '&contentsLoc='+result.contentsLoc;
  819. params += '&brandGroupNo='+$("#searchForm input[name=brandGroupNo]").val();
  820. cfnOpenGoodsDispOrdChangePopup('', params);
  821. };
  822. $("#btnView").on("click", function (){
  823. if(gagajf.isNull($("#viewDate").val())){
  824. mcxDialog.alert("미리보기 일시를 입력해 주세요")
  825. return;
  826. }
  827. var val = $("#searchForm select[name=cate1No]").val();
  828. var cateNo = '';
  829. var brandGroupNo = '';
  830. if(val.split(',')[1]=='Y'){
  831. cateNo = val.split(',')[0];
  832. }else{
  833. cateNo = $("#searchForm select[name=cate2No]").val().split(',')[0];
  834. }
  835. if(cateNo=='1711' || cateNo=='1721'){
  836. brandGroupNo = $("#searchForm").find("input[name=brandGroupNo]").val();
  837. }
  838. var uriMap = new Map();
  839. uriMap.set("1700", "/display/mall/main/form?mobileYn=N");
  840. uriMap.set("1720", "/display/mall/main/form?mobileYn=Y");
  841. uriMap.set("1712", "/display/category/main/form?mobileYn=N&cateGb=G032_101&cate1No="+cateNo);
  842. uriMap.set("1722", "/display/category/main/form?mobileYn=Y&cateGb=G032_101&cate1No="+cateNo);
  843. uriMap.set("1711", "/display/brand/main/form?mobileYn=N&brandGroupNo="+brandGroupNo);
  844. uriMap.set("1721", "/display/brand/main/form?mobileYn=Y&brandGroupNo="+brandGroupNo);
  845. //uriMap.set("22", "/display/brand/list/form?mobileYn=Y");
  846. uriMap.set("1713", "/display/outlet/main/form?mobileYn=N&cateGb=G032_103&cate1No="+cateNo);
  847. uriMap.set("1723", "/display/outlet/main/form?mobileYn=Y&cateGb=G032_103&cate1No="+cateNo);
  848. // uriMap.set("1714", "/goods/detail/form?mobileYn=N&goodsCd=HQM72NJ60G_MT&adminYn=Y");
  849. // uriMap.set("1724", "/goods/detail/form?mobileYn=Y&goodsCd=HQM72NJ60G_MT&adminYn=Y");
  850. // _front = [[${@environment.getProperty('domain.front')}]];
  851. window.open("about:blank").location.href= _frontUrl + uriMap.get(cateNo) + "&preview=Y&viewDt="+$("#viewDate").val().replace(/-/gi, '')+$("#viewTimeHour").val()+$("#viewTimeMin").val()+"00";
  852. });
  853. $(document).ready(function() {
  854. var today = new Date(_today);
  855. var yesterDay = new Date(today.getFullYear(), today.getMonth(), today.getDate()+1).format("YYYY-MM-DD");
  856. $("#viewDate").val(yesterDay);
  857. $("#viewTimeHour").val("09");
  858. // Create a agGrid
  859. $("#mainSortable").disableSelection();
  860. //uifnFitGrid();
  861. });
  862. /*]]>*/
  863. </script>
  864. </html>