MainListForm.html 35 KB

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