AnswerPhaseForm.html 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : AnswerPhaseForm.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 2020.10.29 gagamel 최초 작성
  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. <div class="panelStyle">
  28. <form id="searchForm" name="searchForm" action="#" th:action="@{'/envset/answer/phase/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
  29. <table class="frmStyle" aria-describedby="검색조건">
  30. <colgroup>
  31. <col style="width:10%;"/>
  32. <col style="width:20%;"/>
  33. <col style="width:10%;"/>
  34. <col style="width:20%;"/>
  35. <col style="width:10%;"/>
  36. <col style="width:20%;"/>
  37. <col/>
  38. </colgroup>
  39. <tr>
  40. <th>사이트</th>
  41. <td>
  42. <select name="siteCd">
  43. <option value="">[전체]</option>
  44. <option th:if="${siteList}" th:each="oneData, status : ${siteList}"th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  45. </select>
  46. </td>
  47. <th>답변종류</th>
  48. <td>
  49. <select name="ansClsf">
  50. <option value="">[전체]</option>
  51. <option th:if="${ansClsfList}" th:each="oneData, status : ${ansClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  52. </select>
  53. </td>
  54. <th>답변제목</th>
  55. <td>
  56. <input type="text" name="ansTitle" class="w200"/>
  57. </td>
  58. <th>사용여부</th>
  59. <td>
  60. <select name="useYn">
  61. <option value="">[전체]</option>
  62. <option value="Y">[Y] Yes</option>
  63. <option value="N">[N] No</option>
  64. </select>
  65. </td>
  66. </tr>
  67. </table>
  68. <ul class="panelBar">
  69. <li class="center">
  70. <button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
  71. <button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
  72. </li>
  73. </ul>
  74. </form>
  75. </div>
  76. <!-- 검색조건 영역 -->
  77. <!-- 리스트 영역 -->
  78. <div class="panelStyle">
  79. <!-- 버튼 배치 영역 -->
  80. <ul class="panelBar">
  81. <li class="right">
  82. <button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
  83. </li>
  84. </ul>
  85. <!-- //버튼 배치 영역 -->
  86. <div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
  87. </div>
  88. <!-- 등록/수정 -->
  89. <div class="panelStyle">
  90. <form id="detailForm" name="detailForm" action="#" th:action="@{'/envset/answer/phase/save'}">
  91. <input type="hidden" name="ansSq" value=""/>
  92. <table class="frmStyle" aria-describedby="등록폼">
  93. <colgroup>
  94. <col style="width:10%;"/>
  95. <col style="width:20%;"/>
  96. <col style="width:10%;"/>
  97. <col style="width:20%;"/>
  98. <col style="width:10%;"/>
  99. <col style="width:20%;"/>
  100. <col/>
  101. </colgroup>
  102. <tr>
  103. <th>사이트<em class="required" title="필수"></em></th>
  104. <td>
  105. <select name="siteCd" required="required" data-valid-name="사이트">
  106. <!-- <option>[선택]</option> -->
  107. <option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  108. </select>
  109. </td>
  110. <th>답변종류<em class="required" title="필수"></em></th>
  111. <td>
  112. <select name="ansClsf" required="required" data-valid-name="답변종류">
  113. <option value="">[선택]</option>
  114. <option th:if="${ansClsfList}" th:each="oneData, status : ${ansClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
  115. </select>
  116. </td>
  117. <th>사용여부</th>
  118. <td>
  119. <input type="hidden" name="useYn" value="Y"/>
  120. <label class="chkBox checked"><input type="checkbox" name="chkUseYn" checked="checked"/>사용</label>
  121. </td>
  122. </tr>
  123. <tr>
  124. <th>답변제목<em class="required" title="필수"></em></th>
  125. <td colspan="5">
  126. <input type="text" name="ansTitle" maxlength="100" required="required" data-valid-name="답변제목"/>
  127. </td>
  128. </tr>
  129. <tr>
  130. <th>답변내용<em class="required" title="필수"></em></th>
  131. <td colspan="5">
  132. <textarea name="ansContent" class="textareaR4" required="required" data-valid-name="답변내용"></textarea>
  133. </td>
  134. </tr>
  135. <tr>
  136. <th>카카오템플릿코드</th>
  137. <td>
  138. <input type="text" name="kakaoCd" maxlength="20"/>
  139. </td>
  140. <th>카카오버튼명</th>
  141. <td>
  142. <input type="text" name="buttonNm" maxlength="50"/>
  143. </td>
  144. <th>카카오버튼URL</th>
  145. <td>
  146. <input type="text" name="buttonUrl" maxlength="100"/>
  147. </td>
  148. </tr>
  149. </table>
  150. </form>
  151. <!-- 버튼 배치 영역 -->
  152. <ul class="panelBar">
  153. <li class="right">
  154. <button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
  155. <button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
  156. </li>
  157. </ul>
  158. <!-- //버튼 배치 영역 -->
  159. </div>
  160. <!-- 등록/수정 -->
  161. </div>
  162. <script th:inline="javascript">
  163. /*<![CDATA[*/
  164. var siteList = gagajf.convertToArray([[${siteList}]]);
  165. var ansClsfList = gagajf.convertToArray([[${ansClsfList}]]);
  166. var columnDefs = [
  167. {headerName: "답변번호", field: "ansSq", width: 100, cellClass: 'text-center'},
  168. {
  169. headerName: "사이트", field: "siteCd", width: 100, cellClass: 'text-center',
  170. valueGetter: function (params) { return gagaAgGrid.lookupValue(siteList, params.data.siteCd); }
  171. },
  172. {
  173. headerName: "답변종류", field: "ansClsf", width: 100, cellClass: 'text-center',
  174. valueGetter: function (params) { return gagaAgGrid.lookupValue(ansClsfList, params.data.ansClsf); }
  175. },
  176. {
  177. headerName: "답변제목", field: "ansTitle", width: 350,
  178. cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
  179. },
  180. {headerName: "카카오템플릿코드", field: "kakaoCd", width: 150, cellClass: 'text-center'},
  181. {headerName: "카카오버튼명", field: "buttonNm", width: 150, cellClass: 'text-center'},
  182. {headerName: "카카오버튼URL", field: "buttonUrl", width: 300},
  183. {headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'},
  184. {headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
  185. {
  186. headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
  187. cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  188. },
  189. {headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
  190. {
  191. headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
  192. cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  193. }
  194. ];
  195. var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
  196. // 셀 클릭 이벤트
  197. gridOptions.onCellClicked = function(event) {
  198. if (event.colDef.field != 'ansTitle')
  199. return;
  200. $('#detailForm input[name=ansSq]').val(event.data.ansSq); // 답변일련번호
  201. $('#detailForm select[name=siteCd]').val(event.data.siteCd); // 사이트
  202. $('#detailForm select[name=ansClsf]').val(event.data.ansClsf); // 답변종류
  203. if (event.data.useYn == 'Y') {
  204. $("#detailForm input:checkbox[name=chkUseYn]").prop('checked', true);
  205. $("#detailForm input:checkbox[name=chkUseYn]").parent().addClass('checked');
  206. } else {
  207. $("#detailForm input:checkbox[name=chkUseYn]").prop('checked', false);
  208. $("#detailForm input:checkbox[name=chkUseYn]").parent().removeClass('checked');
  209. }
  210. $('#detailForm input[name=ansTitle]').val(event.data.ansTitle.replaceAll('&gt;','>')); // 답변제목
  211. $('#detailForm textarea[name=ansContent]').val(event.data.ansContent); // 답변내용
  212. $('#detailForm input[name=kakaoCd]').val(event.data.kakaoCd); // 카카오템플릿코드
  213. $('#detailForm input[name=buttonNm]').val(event.data.buttonNm); // 카카오버튼명
  214. $('#detailForm input[name=buttonUrl]').val(event.data.buttonUrl); // 카카오버튼URL
  215. }
  216. // 검색
  217. $('#btnSearch').on('click', function() {
  218. gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
  219. });
  220. // 신규
  221. $('#btnNew').on('click', function() {
  222. $('#detailForm')[0].reset();
  223. $('#detailForm input[name=ansSq]').val('');
  224. $('#detailForm input[name=ansTitle]').focus();
  225. });
  226. // 저장/수정
  227. $("#btnSave").on("click", function() {
  228. // 필수값 체크
  229. if (!gagajf.validation('#detailForm'))
  230. return false;
  231. mcxDialog.confirm('저장하시겠습니까?', {
  232. cancelBtnText: "취소",
  233. sureBtnText: "확인",
  234. sureBtnClick: function() {
  235. $('#detailForm input[name=useYn]').val($('#detailForm input:checkbox[name=chkUseYn]').is(':checked') ? 'Y' : 'N');
  236. gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
  237. $('btnNew').click();
  238. $('#btnSearch').trigger('click');
  239. });
  240. }
  241. });
  242. });
  243. // 엑셀다운로드
  244. $('#btnExcel').on('click', function() {
  245. gagaAgGrid.exportToExcel('답변문구 목록', gridOptions);
  246. });
  247. $(document).ready(function() {
  248. gagaAgGrid.createGrid('gridList', gridOptions);
  249. });
  250. /*]]>*/
  251. </script>
  252. </html>