FaqFormMob.html 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org"
  4. xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  5. layout:decorator="mob/common/layout/CallcenterLayoutMob">
  6. <!--
  7. *******************************************************************************
  8. * @source : FaqFormMob.html
  9. * @desc : FAQ Page
  10. *============================================================================
  11. * STYLE24
  12. * Copyright(C) 2020 TSIT, All rights reserved.
  13. *============================================================================
  14. * VER DATE AUTHOR DESCRIPTION
  15. * === =========== ========== =============================================
  16. * 1.0 2021.03.09 gagamel 최초 작성
  17. *******************************************************************************
  18. -->
  19. <body>
  20. <th:block layout:fragment="content">
  21. <main role="" id="" class="container cs">
  22. <!-- 고객센터 Gnb -->
  23. <nav class="pnb" id="callcenterGnb">
  24. </nav>
  25. <!-- //고객센터 Gnb -->
  26. <!-- ★ 컨텐츠 시작 -->
  27. <section class="cs_faq_1">
  28. <div class="inner sr-only"><h2 class="title">FAQ 리스트</h2></div>
  29. <div class="inner">
  30. <!-- 탭 -->
  31. <div class="search_wrap">
  32. <form id="faqForm" name="faqForm" action="#" th:action="@{'/callcenter/faq/list'}" th:method="post" onsubmit="fnSearchFaq(); return false;">
  33. <input type="hidden" name="faqType"/>
  34. <input type="hidden" name="pageNo" value ="1"/>
  35. <input type="hidden" name="pageSize" value ="10"/>
  36. <input type="text" class="form_control cs_search_input" name="searchTxt" placeholder="검색어를 입력해주세요" maxlength="50"/>
  37. <button class="btn_x" type="button" onclick="fnRemoveFaq()"><span>검색어 지우기</span></button> <!-- 210514_ 추가 : 검색어 지우기 버튼 [.btn_x] 추가. -->
  38. <button class="btn_sch" type="button" onclick="fnSearchFaq(); return false;">search</button> <!-- 210514_ 추가 : .btn_sch 클래스 추가. -->
  39. <p>찾으시는 문의 내용이 없으시면 1:1 문의를 이용해 주세요.</p>
  40. </form>
  41. </div>
  42. <div class="fold_nav">
  43. <ul id="ulFaqType">
  44. <li><a href="#none;" onclick="fnGetList(this, '', true);" class="on">전체</a></li>
  45. <li th:if="${faqTypeList != null and !faqTypeList.empty}" th:each="oneData, status : ${faqTypeList}">
  46. <a href="javascript:void(0);" th:onclick='fnGetList(this, [[${oneData.cd}]], true);' th:text="${oneData.cdNm}">상품문의</a>
  47. </li>
  48. </ul>
  49. </div>
  50. <!-- //탭 -->
  51. </div>
  52. <div class="inner wide">
  53. <!-- 폴딩리스트 -->
  54. <div class="ui_row" id="divFaq"> <!-- 데이터 없을시 클래스 nodata 추가 -->
  55. <div class="foldGroup case1">
  56. <!-- 리스트1 -->
  57. <ul id="ulFaq">
  58. </ul>
  59. <!-- //리스트1 -->
  60. </div>
  61. </div>
  62. <div class="ui_foot">
  63. <button class="btn btnM btnIcon_more" id="btnFaqMore">더보기</button>
  64. </div>
  65. <!-- //폴딩리스트 -->
  66. </div>
  67. </section>
  68. <!-- ★ 컨텐츠 종료 -->
  69. </main>
  70. <script th:inline="javascript">
  71. /*<![CDATA[*/
  72. $(document).ready(function() {
  73. // 타이틀명
  74. $('#htopTitle').text('고객센터');
  75. // 고객센터 GNB 설정
  76. fnSetCallcenterGnb(1);
  77. $('#btnFaqMore').trigger('click');
  78. });
  79. // 더보기
  80. $('#btnFaqMore').on('click', function() {
  81. gagajf.ajaxFormSubmit($('#faqForm').prop('action'), '#faqForm', fnGetListCallback);
  82. });
  83. // FAQ 목록
  84. var fnGetList = function(obj, faqType, isCallTab) {
  85. if (typeof(obj) != 'undefined') {
  86. $li = $(obj).parent('li').parent('ul').find('li>a');
  87. $li.each(function(i) {
  88. $(this).removeClass('on');
  89. });
  90. $(obj).addClass('on');
  91. }
  92. if (!gagajf.isNull(faqType)) {
  93. $('#faqForm input[name=faqType]').val(faqType);
  94. } else {
  95. $('#faqForm input[name=faqType]').val('');
  96. }
  97. if (isCallTab) {
  98. $('#faqForm input[name=searchTxt]').val('');
  99. }
  100. $('#faqForm input[name=pageNo]').val(1);
  101. $('#ulFaq').html('');
  102. $('#btnFaqMore').trigger('click');
  103. }
  104. String.prototype.unescapeHtml = function(){ //XSS변환
  105. return this.replace(/&lt;/g, "<").replace(/&gt;/g, ">");
  106. };
  107. // FAQ 목록 콜백함수
  108. var fnGetListCallback = function(result) {
  109. if (result.dataList != null && result.dataList.length > 0) {
  110. $.each(result.dataList, function(idx, item) {
  111. let tag = '<li>\n';
  112. tag += ' <div class="fold_head">\n';
  113. tag += ' <a href="javascript:void(0)" onclick="fnUpdateFaqReadCount(' + item.faqSq + ', this);">\n';
  114. tag += ' <div>\n';
  115. tag += ' <div class="fold_tit">\n';
  116. tag += ' <div class="lap1">\n';
  117. tag += ' <span class="prod">' + item.faqTypeNm + '</span>\n';
  118. tag += ' </div>\n';
  119. tag += ' <div class="lap2"><span>' + item.question + '</span></div>\n';
  120. tag += ' </div>\n';
  121. tag += ' </div>\n';
  122. tag += ' </a>\n';
  123. tag += ' </div>\n';
  124. tag += ' <div class="fold_cont">\n';
  125. tag += ' <div class="fold_answer">\n';
  126. tag += ' <div class="answer_body">' + item.answer.unescapeHtml().replace(/\n/g,'<br/>') + '</div>\n';
  127. tag += ' </div>\n';
  128. tag += ' </div>\n';
  129. tag += '</li>\n';
  130. $('#ulFaq').append(tag);
  131. });
  132. $('#divFaq').removeClass('nodata');
  133. } else {
  134. // 퍼블로 처리함으로 아래 2줄 주석 처리
  135. // let tag = '<li>검색어 조건에 맞는 항목이 없습니다.</li>\n';
  136. // $('#ulFaq').append(tag);
  137. $('#divFaq').addClass('nodata');
  138. }
  139. if (result.paging.pageable.totalPage > result.paging.pageable.pageNo) {
  140. $('#btnFaqMore').parent().show();
  141. $('#faqForm input[name=pageNo]').val(result.paging.pageable.pageNo + 1);
  142. } else {
  143. $('#btnFaqMore').parent().hide();
  144. }
  145. }
  146. // 검색어 입력
  147. let fnSearchFaq = function() {
  148. if (gagajf.isNull($('#faqForm input[name=searchTxt]').val())) {
  149. mcxDialog.alert('검색어를 입력해 주세요.');
  150. return;
  151. }
  152. $('#faqForm input[name=faqType]').val('');
  153. // $('#btnFaqMore').trigger('click');
  154. fnGetList($('#ulFaqType>li').eq(0).find('a'));
  155. }
  156. // 검색어 삭제
  157. let fnRemoveFaq = function() {
  158. $("#faqForm input[name=searchTxt]").val('');
  159. }
  160. // FAQ 조회수 갱신
  161. let fnUpdateFaqReadCount = function(faqSq, obj) {
  162. if (!($(obj).parents('.fold_head').hasClass('on'))) {
  163. $.post('/callcenter/faq/readcount/update/' + faqSq
  164. , null
  165. , function() {
  166. // Do nothing
  167. }
  168. , 'json');
  169. }
  170. }
  171. /*]]>*/
  172. </script>
  173. </th:block>
  174. </body>
  175. </html>