PopupListForm.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : PopupListForm.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.3.3 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. <!-- 검색조건 영역 -->
  27. <form id="searchForm" name="searchForm" action="#" th:action="@{'/display/popup/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
  28. <div class="panelStyle">
  29. <table class="frmStyle">
  30. <colgroup>
  31. <col style="width:10%;"/>
  32. <col style="width:15%;"/>
  33. <col style="width:10%;"/>
  34. <col style="width:15%;"/>
  35. <col style="width:10%;"/>
  36. <col style="width:40%;"/>
  37. </colgroup>
  38. <tr>
  39. <th>사이트</th>
  40. <td>
  41. <select name="siteCd">
  42. <option th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  43. </select>
  44. </td>
  45. <th>전시화면</th>
  46. <td>
  47. <select name="frontGb">
  48. <option value="A">전체</option>
  49. <option value="P">PC</option>
  50. <option value="M">모바일</option>
  51. </select>
  52. </td>
  53. <th>전시기간</th>
  54. <td colspan="5" id="sellTerms">
  55. <span class="nowrap">
  56. <input name="dispStdt" id="schStDate" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출기간 시작일" />
  57. <select id="schStTimeHour" required="required" data-valid-name="노출기간 시작시간">
  58. <th:block th:each="num, index : ${#numbers.sequence(0,23)}">
  59. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" >시간</option>
  60. </th:block>
  61. </select>
  62. <select id="schStTimeMin" required="required" data-valid-name="노출기간 시작시간">
  63. <th:block th:each="num: ${#numbers.sequence(0,59)}">
  64. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}분|" >분</option>
  65. </th:block>
  66. </select>
  67. <input name="dispStTime" id="schStTime" type="hidden" data-valid-name="노출기간 시작시간" value='000000' />
  68. ~
  69. <input name="dispEddt" id="schEdDate" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출기간 종료일" />
  70. <select id="schEdTimeHour" required="required" data-valid-name="노출기간 종료시간">
  71. <th:block th:each="num: ${#numbers.sequence(0,23)}">
  72. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${#numbers.formatInteger(num,2)}==23 ? 'true'">시간</option>
  73. </th:block>
  74. </select>
  75. <select id="schEdTimeMin" required="required" data-valid-name="노출기간 종료시간">
  76. <th:block th:each="num: ${#numbers.sequence(0,59)}">
  77. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="${#numbers.formatInteger(num,2)}==59 ? 'true'">분</option>
  78. </th:block>
  79. </select>
  80. <input name="dispEdTime" id="schEdTime" type="hidden" data-valid-name="노출기간 종료시간" value='235959' />
  81. </span>
  82. </td>
  83. </tr>
  84. </table>
  85. <ul class="panelBar">
  86. <li class="center">
  87. <button type="button" class="btn btn-default btn-lg" id="btnInit">초기화</button>
  88. <button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
  89. </li>
  90. </ul>
  91. </div>
  92. <!-- 검색조건 영역 -->
  93. <!-- 리스트 영역 -->
  94. <div class="panelStyle">
  95. <!-- 상단영역 START -->
  96. <ul class="panelBar">
  97. <li>
  98. <span style="padding:5.5px 15px; background:#e9ecfb !important; border-top:1px solid #ddd; border-bottom:0.5px solid #dae0fd; font-weight: bold;">미리보기위치</span>
  99. <select name="viewPage" id="viewPageView" onchange="fnChangeViewPage('View')" >
  100. <option th:if="${viewPageList}" th:each="oneData, status : ${viewPageList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  101. </select>
  102. <select name="cateNo" id="cateNoView" class='off' data-valid-name="대카테고리">
  103. <option value="">[선택]</option>
  104. <option th:if="${cateNoList}" th:each="oneData, status : ${cateNoList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  105. </select>
  106. <input type="text" class="off w80" name="brandCd" id="brandCdView" placeholder="브랜드그룹번호" required="required" data-valid-name="브랜드"/>
  107. <button type="button" class="off btn btn-base btn-lg" id="searchBrandGroupView" onclick="fnBrandGroupSearch('View')">브랜드 조회</button>
  108. <input type="text" class="off w80" name="planSq" id="planSqView" placeholder="기획전번호" required="required" data-valid-name="기획전번호"/>
  109. <button type="button" class="off btn btn-base btn-lg" id="btnSearchPlanView" onclick="fnPlanSearch('View')">기획전 조회</button>
  110. <span class="nowrap">
  111. <input name="viewDate" id="viewDate" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="미리보기일자" />
  112. <select id="viewTimeHour" name="viewTimeHour" required="required" data-valid-name="미리보기 시간">
  113. <option value="" >시간</option>
  114. <th:block th:each="num, index : ${#numbers.sequence(0,24)}">
  115. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${num == 9}">시간</option>
  116. </th:block>
  117. </select>
  118. <select id="viewTimeMin" name="viewTimeMin" required="required" data-valid-name="미리보기 시간">
  119. <option value="" >분</option>
  120. <th:block th:each="num: ${#numbers.sequence(0,59)}">
  121. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="${num == 0}">분</option>
  122. </th:block>
  123. </select>
  124. <input name="viewTime" id="viewTime" type="hidden" data-valid-name="미리보기 시간" />
  125. </span>
  126. <span>
  127. <button type="button" class="btn btn-info btn-lg" id="btnView">미리보기</button>
  128. </span>
  129. </li>
  130. <li class="right">
  131. <span class="btnRight">
  132. <button type="button" class="btn btn-success btn-lg" id="btnReg">적용</button>
  133. </span>
  134. <span class="btnRight">
  135. <button type="button" class="btn btn-danger btn-lg" id="btnDel">삭제</button>
  136. </span>
  137. 검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
  138. 쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
  139. <select id="pageSize" name="pageSize">
  140. <option value="50" selected="selected">50개씩 보기</option>
  141. <option value="100">100개씩 보기</option>
  142. <option value="500">500개씩 보기</option>
  143. <option value="1000">1000개씩 보기</option>
  144. </select>
  145. <input type="hidden" name="pageNo" id="pageNo" value ="1"/>
  146. </li>
  147. </ul>
  148. <!-- 상단영역 END -->
  149. <div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
  150. <ul class="panelBar">
  151. <li class="center">
  152. <div class="tablePaging" id="popupListPagination"></div>
  153. </li>
  154. </ul>
  155. </div>
  156. <!-- //리스트 영역 -->
  157. </form>
  158. <!-- 등록/수정 -->
  159. <div class="panelStyle">
  160. <form id="detailForm" name="detailForm" action="#" th:action="@{'/display/popup/save'}">
  161. <input type="hidden" name="popupGb" value="W"/> <!--팝업종류-->
  162. <table class="frmStyle">
  163. <colgroup>
  164. <col style="width:10%;"/>
  165. <col style="width:15%;"/>
  166. <col style="width:10%;"/>
  167. <col style="width:15%;"/>
  168. <col style="width:10%;"/>
  169. <col style="width:15%;"/>
  170. <col/>
  171. </colgroup>
  172. <tr>
  173. <th>팝업일련번호</th>
  174. <td>
  175. <input type="text" class="w90" name="popupSq" placeholder="자동생성" data-valid-name="팝업일련번호" disabled/>
  176. </td>
  177. <th>사이트코드<i class="required" title="필수"></i></th>
  178. <td class="infoTxt">
  179. <select name="siteCd">
  180. <option th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  181. </select>
  182. </td>
  183. <th>전시위치<i class="required" title="필수"></i></th>
  184. <td colspan="3">
  185. <select name="viewPage" id="viewPage" onchange="fnChangeViewPage('')" data-valid-name="전시위치">
  186. <option th:if="${viewPageList}" th:each="oneData, status : ${viewPageList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  187. </select>
  188. <select name="cateNo" id="cateNo" class='off' data-valid-name="대카테고리">
  189. <option value="">[선택]</option>
  190. <option th:if="${cateNoList}" th:each="oneData, status : ${cateNoList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  191. </select>
  192. <input type="text" class="off w80" name="brandCd" id="brandCd" placeholder="브랜드그룹번호" data-valid-name="브랜드그룹번호"/>
  193. <button type="button" class="off btn btn-base btn-lg" id="searchBrandGroup" onclick="fnBrandGroupSearch('')">브랜드 조회</button>
  194. <input type="text" class="off w80" name="planSq" id="planSq" placeholder="기획전번호" data-valid-name="기획전번호"/>
  195. <button type="button" class="off btn btn-base btn-lg" id="btnSearchPlan" onclick="fnPlanSearch('')">기획전 조회</button>
  196. </td>
  197. </tr>
  198. <tr>
  199. <th>PC/모바일 구분<i class="required" title="필수"></i></th>
  200. <td>
  201. <select name="frontGb" id="frontGb">
  202. <option value="A">[A] 전체</option>
  203. <option value="P">[P] PC</option>
  204. <option value="M">[M] 모바일</option>
  205. </select>
  206. </td>
  207. <!--<th>팝업종류<i class="required" title="필수"></i></th>
  208. <td>
  209. <select name="popupGb" id="popupGb">
  210. <option value="W">윈도우</option>
  211. <option value="L">고정레이어</option>
  212. <option value="M">이동레이어</option>
  213. </select>
  214. </td>-->
  215. <th>미노출일수<i class="required" title="필수"></i></th>
  216. <td>
  217. <input type="text" class="w90" name="unexpDays" id="unexpDays" required="required" data-valid-type=numeric data-valid-name="미노출일수" value="1"/>
  218. </td>
  219. <th>우선순위<i class="required" title="필수"></i></th>
  220. <td colspan="3">
  221. <input type="text" class="w90" name="dispOrd" id="dispOrd" required="required" data-valid-type=numeric data-valid-name="우선순위"/>
  222. </td>
  223. </tr>
  224. <tr>
  225. <th>노출시작일시<i class="required" title="필수"></i></th>
  226. <td colspan="3">
  227. <input name="dispStdt" id="stDate" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출시작일자" />
  228. <select id="stTimeHour" required="required" data-valid-name="노출기간 시작시간">
  229. <th:block th:each="num, index : ${#numbers.sequence(0,23)}">
  230. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" >시간</option>
  231. </th:block>
  232. </select>
  233. <select id="stTimeMin" required="required" data-valid-name="노출기간 시작시간">
  234. <th:block th:each="num: ${#numbers.sequence(0,59)}">
  235. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}분|" >분</option>
  236. </th:block>
  237. </select>
  238. <input name="dispStTime" id="stTime" type="hidden" data-valid-name="노출기간 시작시간" value='000000' />
  239. </td>
  240. <th>노출종료일시<i class="required" title="필수"></i></th>
  241. <td colspan="3">
  242. <input name="dispEddt" id="edDate" type="text" class="w80 schDate" maxlength="10" required="required" data-valid-name="노출종료일자" />
  243. <select id="edTimeHour" required="required" data-valid-name="노출기간 종료시간">
  244. <th:block th:each="num: ${#numbers.sequence(0,23)}">
  245. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}시|" th:selected="${#numbers.formatInteger(num,2)}==23 ? 'true'">시</option>
  246. </th:block>
  247. </select>
  248. <select id="edTimeMin" required="required" data-valid-name="노출기간 종료시간">
  249. <th:block th:each="num: ${#numbers.sequence(0,59)}">
  250. <option th:value="${#numbers.formatInteger(num,2)}" th:text="|${#numbers.formatInteger(num,2)}분|" th:selected="${#numbers.formatInteger(num,2)}==59 ? 'true'">분</option>
  251. </th:block>
  252. </select>
  253. <input name="dispEdTime" id="edTime" type="hidden" data-valid-name="노출기간 종료시간" value='235959' />
  254. </td>
  255. </tr>
  256. <tr>
  257. <th>이미지<i class="star"></i></th>
  258. <td colspan="7">
  259. <div id="ImageArea">
  260. 이미지파일 : <span class="uFile w300">
  261. <input id="file_1" name="file" type="file" class="uFileInput w300" data-valid-name="이미지파일" onchange="fnFileUpload(this);"/>
  262. <label for="file_1" class="uFileLabel">파일선택</label>
  263. <input type="hidden" name="orgFileNm"/>
  264. <input type="hidden" name="sysFileNm"/>
  265. <input type="hidden" name="newSysFileNm"/>
  266. </span>
  267. &nbsp;&nbsp;&nbsp;&nbsp;LINK : <input type="text" class="w400" name="linkUrl" maxlength="300" required="required" data-valid-name="LINK" value="#"/>
  268. <span class="memAdd off" id="imgFileNm1"></span>
  269. <div id="ImageAddArea">
  270. </div>
  271. </div>
  272. </td>
  273. </tr>
  274. </table>
  275. </form>
  276. <!-- 버튼 배치 영역 -->
  277. <ul class="panelBar">
  278. <li class="center">
  279. <button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
  280. <button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
  281. </li>
  282. </ul>
  283. <!-- //버튼 배치 영역 -->
  284. </div>
  285. <!-- 등록/수정 -->
  286. </div>
  287. <script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
  288. <script th:inline="javascript">
  289. /*<![CDATA[*/
  290. var siteCdList = [[${siteCdList}]];
  291. var viewPageList = [[${viewPageList}]];
  292. var cateNoList = [[${cateNoList}]];
  293. var imgDivLen = 1; //이미지 추가 액션수관리
  294. let columnDefs = [
  295. {width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
  296. {headerName: "팝업일련번호", field: "popupSq", width: 150, cellClass: 'text-center'
  297. ,cellRenderer: function(params) {
  298. return '<a href="javascript:void(0);">' + params.value + '</a>';
  299. }
  300. },
  301. {headerName: "적용여부", field: "displayYn", width: 150, cellClass: 'text-center'},
  302. {headerName: "전시위치", field: "viewPage", width: 150, cellClass: 'text-center'
  303. ,valueFormatter: function (params) { return !gagajf.isNull(params.value) ? "["+params.value+"] "+params.data.viewPageNm : '';}
  304. },
  305. {headerName: "카테고리", field: "cateNo", width: 150, cellClass: 'text-center'},
  306. {headerName: "브랜드", field: "brandCd", width: 150, cellClass: 'text-center'},
  307. {headerName: "기획전번호", field: "planSq", width: 150, cellClass: 'text-center'},
  308. {headerName: "PC/모바일", field: "frontGb", width: 150, cellClass: 'text-center'
  309. ,valueFormatter: function(params) {
  310. if (params.data.frontGb == 'A') {
  311. return '전체';
  312. }else if(params.data.frontGb == 'P'){
  313. return 'PC';
  314. }else{
  315. return '모바일';
  316. }
  317. }
  318. },
  319. {headerName: "우선순위", field: "dispOrd", width: 150, cellClass: 'text-center'},
  320. {headerName: "전시시작일", field: "dispStdt", width: 150, cellClass: 'text-center'},
  321. {headerName: "전시시작시간", field: "dispStTime", width: 150, cellClass: 'text-center'},
  322. {headerName: "전시종료일", field: "dispEddt", width: 150, cellClass: 'text-center'},
  323. {headerName: "전시종료시간", field: "dispEdTime", width: 150, cellClass: 'text-center'},
  324. {headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
  325. {headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center'}
  326. ];
  327. let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
  328. gridOptions.rowSelection = "multiple";
  329. // ROW Click
  330. gridOptions.onCellClicked = function(event) {
  331. var popupSq = event.data.popupSq;
  332. if (event.colDef.field == "popupSq"){
  333. $("#btnNew").click();
  334. var formId = '#detailForm';
  335. $(formId + " input[name=popupSq]").val(event.data.popupSq);
  336. $(formId + " select[name=siteCd]").val(event.data.siteCd);
  337. $(formId + " select[name=viewPage]").val(event.data.viewPage);
  338. fnChangeViewPage('');
  339. $(formId + " select[name=cateNo]").val(event.data.cateNo).attr("selected", true);
  340. $(formId + " input[name=brandCd]").val(event.data.brandCd);
  341. $(formId + " input[name=planSq]").val(event.data.planSq);
  342. $(formId + " select[name=frontGb]").val(event.data.frontGb);
  343. $(formId + " select[name=popupGb]").val(event.data.popupGb);
  344. $(formId + " input[name=unexpDays]").val(event.data.unexpDays);
  345. $(formId + " input[name=dispOrd]").val(event.data.dispOrd);
  346. var dispStdt = event.data.dispStdt.replace(/[^0-9]/g, '');
  347. $(formId + " input[name=dispStdt]").val(dispStdt.substr(0,4)+"-"+dispStdt.substr(4,2)+"-"+dispStdt.substr(6,2));
  348. var dispStTime = event.data.dispStTime.replace(/[^0-9]/g, '');
  349. $("#stTime").val(dispStTime);
  350. $("#stTimeHour").val(dispStTime.substr(0,2));
  351. $("#stTimeMin").val(dispStTime.substr(2,2));
  352. var dispEddt = event.data.dispEddt.replace(/[^0-9]/g, '');
  353. $(formId + " input[name=dispEddt]").val(dispEddt.substr(0,4)+"-"+dispEddt.substr(4,2)+"-"+dispEddt.substr(6,2));
  354. var dispEdTime = event.data.dispEdTime.replace(/[^0-9]/g, '');
  355. $("#edTime").val(dispEdTime);
  356. $("#edTimeHour").val(dispEdTime.substr(0,2));
  357. $("#edTimeMin").val(dispEdTime.substr(2,2));
  358. $(formId + " input[name=orgFileNm]").eq(0).val(event.data.imgUrl1);
  359. $(formId + " input[name=sysFileNm]").eq(0).val(event.data.imgUrl1);
  360. $(formId + " input[name=linkUrl]").eq(0).val(event.data.linkUrl1);
  361. $(formId + " #imgFileNm1").html(event.data.imgUrl1);
  362. $(formId + " #imgFileNm1").removeClass('off').addClass('on');
  363. $(".uFileLabel").text('');
  364. }
  365. }
  366. /**
  367. * 조회
  368. */
  369. $('#btnSearch').on('click', function (){
  370. $("#searchForm input[name=dispStTime]").val($('#searchForm #schStTimeHour').val()+$('#searchForm #schStTimeMin').val()+'00');
  371. $("#searchForm input[name=dispEdTime]").val($('#searchForm #schEdTimeHour').val()+$('#searchForm #schEdTimeMin').val()+'59');
  372. fnSearch();
  373. });
  374. var fnSearch = function(){
  375. gagaPaging.init('searchForm', fnSearchCallBack, 'popupListPagination', $('#searchForm').find('#pageSize').val());
  376. gagaPaging.load(1);
  377. };
  378. var fnSearchCallBack = function(result){
  379. $('#searchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
  380. $('#searchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
  381. $('#searchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
  382. $('#searchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
  383. gridOptions.api.setRowData(result.popupList);
  384. gagaPaging.createPagination(result.pageing.pageable);
  385. }
  386. // 미리보기위치 선택
  387. var fnChangeViewPage = function(sub){
  388. if($("#viewPage"+sub).val()=="G037_30"){
  389. $("#cateNo"+sub).removeClass("off").addClass("on");
  390. $("#brandCd"+sub).removeClass("on").addClass("off");
  391. $("#searchBrandGroup"+sub).removeClass("on").addClass("off");
  392. $("#planSq"+sub).removeClass("on").addClass("off");
  393. $("#btnSearchPlan"+sub).removeClass("on").addClass("off");
  394. }else if($("#viewPage"+sub).val()=="G037_31"){
  395. $("#cateNo"+sub).removeClass("on").addClass("off");
  396. $("#brandCd"+sub).removeClass("off").addClass("on");
  397. $("#searchBrandGroup"+sub).removeClass("off").addClass("on");
  398. $("#planSq"+sub).removeClass("on").addClass("off");
  399. $("#btnSearchPlan"+sub).removeClass("on").addClass("off");
  400. }else if($("#viewPage"+sub).val()=="G037_40"){
  401. $("#cateNo"+sub).removeClass("on").addClass("off");
  402. $("#brandCd"+sub).removeClass("on").addClass("off");
  403. $("#searchBrandGroup"+sub).removeClass("on").addClass("off");
  404. $("#planSq"+sub).removeClass("off").addClass("on");
  405. $("#btnSearchPlan"+sub).removeClass("off").addClass("on");
  406. }else{
  407. $("#cateNo"+sub).removeClass("on").addClass("off");
  408. $("#brandCd"+sub).removeClass("on").addClass("off");
  409. $("#searchBrandGroup"+sub).removeClass("on").addClass("off");
  410. $("#planSq"+sub).removeClass("on").addClass("off");
  411. $("#btnSearchPlan"+sub).removeClass("on").addClass("off");
  412. }
  413. $("#cateNo"+sub).val('');
  414. $("#brandCd"+sub).val('');
  415. $("#planSq"+sub).val('');
  416. };
  417. // 검색조건 초기화
  418. $('#btnInit').on('click', function() {
  419. $("#searchForm")[0].reset();
  420. gagajf.setDate('schStDate', 'schEdDate', 't');
  421. });
  422. // 신규 버튼 클릭
  423. $("#btnNew").on("click", function(){
  424. $("#detailForm")[0].reset();
  425. $("#ImageAddArea").empty();
  426. $("#linkUrl").val('#');
  427. $('#detailForm input[name=imgUrl]').val('');
  428. $('#detailForm input[name=imgUrl]').closest('div').find('label').text('파일선택');
  429. $('#detailForm #imgFileNm1').html('');
  430. $('#detailForm input[name=orgImgFileNm]').val('');
  431. $('#detailForm input[name=newImgFileNm]').val('');
  432. $("#cateNo").removeClass("on").addClass("off");
  433. $("#searchBrandGroup").removeClass("on").addClass("off");
  434. $('#detailForm input[name=brandCd]').removeClass("on").addClass("off");
  435. $("#btnSearchPlan").removeClass("on").addClass("off");
  436. $('#detailForm input[name=planSq]').removeClass("on").addClass("off");
  437. $(".uFileLabel").text('');
  438. imgDivLen = 1;
  439. });
  440. // 데이터 validation 체크
  441. function dataValidation(){
  442. // 날짜체크
  443. var fromDate = $('#detailForm input[name=dispStdt]').val().replace(/[^0-9]/g, '')+$('#detailForm #stTimeHour').val()+$('#detailForm #stTimeMin').val();
  444. var toDate = $('#detailForm input[name=dispEddt]').val().replace(/[^0-9]/g, '')+$('#detailForm #edTimeHour').val()+$('#detailForm #edTimeMin').val();
  445. if(fromDate > toDate){
  446. mcxDialog.alert('노출 시작일자는 종료일자 보다 클 수 없습니다.');
  447. return false;
  448. }
  449. //전시위치 체크(30,31,40)
  450. var selectViewPage = $('#detailForm select[name=viewPage]').val();
  451. if(selectViewPage=='G037_30'){
  452. if(gagajf.isNull($('#detailForm select[name=cateNo]').val())){
  453. mcxDialog.alert('카테고리를 선택해 주세요.');
  454. return false;
  455. }
  456. }else if(selectViewPage=='G037_31'){
  457. if(gagajf.isNull($('#detailForm input[name=brandCd]').val())){
  458. mcxDialog.alert('브랜드 코드를 입력해 주세요.');
  459. return false;
  460. }
  461. }else if(selectViewPage=='G037_40'){
  462. if(gagajf.isNull($('#detailForm input[name=planSq]').val())){
  463. mcxDialog.alert('기획전 번호를 입력해 주세요.');
  464. return false;
  465. }
  466. }
  467. var orgFileNm = $('#detailForm #imgFileNm1').html();
  468. var imgFileNm = $('#detailForm input[name=newSysFileNm]').val();
  469. if(gagajf.isNull(orgFileNm)){
  470. if(gagajf.isNull(imgFileNm)){
  471. mcxDialog.alert('이미지파일을 선택해 주세요.');
  472. return false;
  473. }
  474. }
  475. return true;
  476. }
  477. // 이미지 첨부
  478. var fnFileUpload = function (obj){
  479. var file = obj.files[0];
  480. file.name = 'test';
  481. if (typeof(file) == 'undefined'){
  482. return;
  483. }
  484. gagajf.ajaxFileUpload('/common/file/upload?subDir=/display/popup'
  485. , file
  486. , function(result) {
  487. $(obj).closest('div').find('input:hidden[name=sysFileNm]').val(result.oldFileName);
  488. $(obj).closest('div').find('input:hidden[name=newSysFileNm]').val(result.newFileName);
  489. }
  490. );
  491. };
  492. /**
  493. * 저장
  494. */
  495. $("#btnSave").on('click',function(){
  496. // 필수값 validation 체크
  497. if (!gagajf.validation('#detailForm')) {
  498. return false;
  499. }
  500. // 데이터 validation 체크
  501. if(!dataValidation()){
  502. return false;
  503. }
  504. // 이미지 파일 체크
  505. var imgUrl = '';
  506. var orgFileNm = $('#detailForm input[name=orgFileNm]').val();
  507. var sysFileNm = $('#detailForm input[name=sysFileNm]').val();
  508. var newSysFileNm = $('#detailForm input[name=newSysFileNm]').val();
  509. var fromDate = $('#detailForm input[name=dispStdt]').val().replace(/[^0-9]/g, '')+$('#detailForm #stTimeHour').val()+$('#detailForm #stTimeMin').val()+'00';
  510. var toDate = $('#detailForm input[name=dispEddt]').val().replace(/[^0-9]/g, '')+$('#detailForm #edTimeHour').val()+$('#detailForm #edTimeMin').val()+'59';
  511. var data = {
  512. popupSq : $('#detailForm input[name=popupSq]').val()
  513. ,siteCd : $('#detailForm select[name=siteCd]').val()
  514. ,viewPage : $('#detailForm select[name=viewPage]').val()
  515. ,cateNo : $('#detailForm select[name=cateNo]').val()
  516. ,brandCd : $('#detailForm input[name=brandCd]').val()
  517. ,planSq : $('#detailForm input[name=planSq]').val()
  518. ,frontGb : $('#detailForm select[name=frontGb]').val()
  519. ,unexpDays : $('#detailForm input[name=unexpDays]').val()
  520. ,dispOrd : $('#detailForm input[name=dispOrd]').val()
  521. ,dispStdt : fromDate
  522. ,dispEddt : toDate
  523. ,orgFileNm : orgFileNm
  524. ,sysFileNm : sysFileNm
  525. ,newSysFileNm : newSysFileNm
  526. ,linkUrl1 : $('#detailForm input[name=linkUrl]').val()
  527. ,useYn : 'Y'
  528. };
  529. var jsonData = JSON.stringify(data);
  530. gagajf.ajaxJsonSubmit($('#detailForm').prop('action'), jsonData, fnPopupSaveCollback);
  531. });
  532. var fnPopupSaveCollback = function (result){
  533. $("#btnNew").click();
  534. $('#btnSearch').trigger('click');
  535. }
  536. // 브랜드 조회
  537. var formNm = "";
  538. var fnBrandGroupSearch = function(sub){
  539. if(!gagajf.isNull(sub)){
  540. formNm = "searchForm";
  541. }else{
  542. formNm = "detailForm";
  543. }
  544. cfnOpenBrandGroupListPopup("callBackBrandGroup", "S", "S");
  545. }
  546. var callBackBrandGroup = function(result){
  547. $("#"+formNm+" input[name=brandCd]").val(result[0].brandGroupNo);
  548. }
  549. // 기획전 조회
  550. var planFormNm = "";
  551. var fnPlanSearch = function (sub){
  552. if(!gagajf.isNull(sub)){
  553. planFormNm = "searchForm";
  554. }else{
  555. planFormNm = "detailForm";
  556. }
  557. cfnOpenPlanPopup("callBackPlan");
  558. }
  559. var callBackPlan = function (result){
  560. $("#"+planFormNm+" input[name=planSq]").val(result[0].planSq);
  561. }
  562. /**
  563. * 삭제
  564. */
  565. $("#btnDel").on('click',function(){
  566. var selectRowData = gagaAgGrid.selectedRowData(gridOptions);
  567. if (selectRowData.length > 0) {
  568. mcxDialog.confirm('삭제하시겠습니까?', {
  569. cancelBtnText: "취소",
  570. sureBtnText: "확인",
  571. sureBtnClick: function(){
  572. var selectDataArr = [];
  573. $.each(selectRowData, function(idx, item) {
  574. selectDataArr.push(item.popupSq);
  575. });
  576. var data = {
  577. selectDataArr : selectDataArr
  578. };
  579. var jsonData = JSON.stringify(data);
  580. gagajf.ajaxJsonSubmit('/display/popup/delete', jsonData, fnPopupSaveCollback);
  581. }
  582. });
  583. }else{
  584. mcxDialog.alert('선택된 행이 없습니다.');
  585. return;
  586. }
  587. });
  588. /**
  589. * 적용
  590. */
  591. $("#btnReg").on('click',function(){
  592. var selectRowData = gagaAgGrid.selectedRowData(gridOptions);
  593. if (selectRowData.length > 0) {
  594. mcxDialog.confirm('적용하시겠습니까?', {
  595. cancelBtnText: "취소",
  596. sureBtnText: "확인",
  597. sureBtnClick: function(){
  598. var selectDataArr = [];
  599. $.each(selectRowData, function(idx, item) {
  600. selectDataArr.push(item.popupSq);
  601. });
  602. var data = {
  603. selectDataArr : selectDataArr
  604. };
  605. var jsonData = JSON.stringify(data);
  606. gagajf.ajaxJsonSubmit('/display/popupfront/save', jsonData, fnPopupSaveCollback);
  607. }
  608. });
  609. }else{
  610. mcxDialog.alert('프론트에 적용할 행을 선택해주세요.');
  611. return;
  612. }
  613. });
  614. $(document).ready(function() {
  615. // Create a agGrid
  616. gagaAgGrid.createGrid('gridList', gridOptions);
  617. });
  618. /*]]>*/
  619. </script>
  620. </html>