knowledge.ftl 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <meta name="keywords"
  8. content="工时管理,工时统计,工时填报,项目成本统计,生产工时管理系统,工时成本管理,工时管理软件,研发工时管理系统,企业工时管理系统,项目工时统计,项目工时统计软件,项目工时统计系统,工时统计系统,工时统计表" />
  9. <meta name="description" content="工时管家提供专业的工时填报和统计报表。支持PC和手机端。可按项目,部门,岗位等多维度统计成本。" />
  10. <title>工时管家-专注工时管理,手机移动填报,核算项目投入人力成本,企业IPO利器!</title>
  11. <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
  12. <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700&display=swap&subset=latin-ext"
  13. rel="stylesheet">
  14. <link href="/css/bootstrap.css" rel="stylesheet">
  15. <link href="/css/font-awesome.css" rel="stylesheet">
  16. <link href="/css/swiper.css" rel="stylesheet">
  17. <link href="/css/magnific-popup.css" rel="stylesheet">
  18. <link href="/css/styles.css" rel="stylesheet">
  19. <link href="/css/reset.css" rel="stylesheet">
  20. <link href="/css/tongyong.css" rel="stylesheet" >
  21. <link href="/css/knowledgeField.css" rel="stylesheet" >
  22. </head>
  23. <body data-spy="scroll" data-target=".fixed-top" id="body">
  24. <div class="spinner-wrapper">
  25. <div class="spinner">
  26. <div class="bounce1"></div>
  27. <div class="bounce2"></div>
  28. <div class="bounce3"></div>
  29. </div>
  30. </div>
  31. <iframe id="headerIframe" src="/moduleView/header.html" class="iframeClass"></iframe>
  32. <div class="knowledgeFieldCon">
  33. <div v-loading="detailsSwitchingLoading" class="wh100 flex">
  34. <div class="knowledgeField">
  35. <div class="knowledgeField-header">
  36. <div class="knowledgeField-header-text">知识园地</div>
  37. <div class="flex">
  38. <input id="knowledgeInput" type="text" class="knowledgeInput" placeholder="请输入关键字搜索">
  39. <button class="searchButton" onclick="search()">搜索</button>
  40. </div>
  41. </div>
  42. <div class="knowledgeField-content">
  43. <#list knowledgeFieldTableList as item>
  44. <div>
  45. <div class="knowledgeField-content-item" onclick="triggerButtonClick(${item.id})">
  46. <div class="image"><img src="data:image;base64,${item.baseImage}" class="wh100" class="wh100"></img>
  47. </div>
  48. <div class="textContent">
  49. <div>${ item.title }</div>
  50. <p>${ item.profile }</p>
  51. <button class="linkButtonss" onclick="learnMore(${item.id})">了解详情></button>
  52. </div>
  53. </div>
  54. <div class="dividingLine"></div>
  55. </div>
  56. </#list>
  57. </div>
  58. <div class="knowledgeField-bottom flex-center">
  59. <div class="pagination">
  60. <button class="prev" onclick="goToPage(currentPage - 1)">上一页</button>
  61. <ul id="page-list">
  62. <!-- 动态生成页码 -->
  63. </ul>
  64. <button class="next" onclick="goToPage(currentPage + 1)">下一页</button>
  65. </div>
  66. <div class="flex-center">
  67. 到第
  68. <input type="number" class="paginationInput" min="0" id="paginationInput">
  69. </div>
  70. <button onClick="confirmJump()" class="paginationButton">确定</button>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </body>
  76. <script src="/js/js/jquery.min.js"></script> <!-- jQuery for Bootstrap's JavaScript plugins -->
  77. <script src="/js/js/popper.min.js"></script> <!-- Popper tooltip library for Bootstrap -->
  78. <script src="/js/js/bootstrap.min.js"></script> <!-- Bootstrap framework -->
  79. <script src="/js/js/jquery.easing.min.js"></script> <!-- jQuery Easing for smooth scrolling between anchors -->
  80. <script src="/js/js/swiper.min.js"></script> <!-- Swiper for image and text sliders -->
  81. <script src="/js/js/jquery.magnific-popup.js"></script> <!-- Magnific Popup for lightboxes -->
  82. <script src="/js/js/validator.min.js"></script> <!-- Validator.js - Bootstrap plugin that validates forms -->
  83. <script src="/js/js/scripts.js"></script>
  84. <script src="/js/iframe.js"></script>
  85. <script>
  86. // 获取当前页面的 URL 参数
  87. const params = new URLSearchParams(window.location.search);
  88. // 将参数转换为一个对象
  89. const paramObj = {};
  90. params.forEach((value, key) => {
  91. paramObj[key] = value;
  92. });
  93. // 获取当前页面地址的参数
  94. const { pageIndex = 1, pageSize = 10 } = params;
  95. let total = ${total}
  96. let totalPages = Math.ceil(total / pageSize); // 总页数
  97. let currentSize = pageSize;
  98. let currentPage = pageIndex; // 当前页
  99. const knowledgeUrl = '/articleTemplate/pageList'
  100. const knowledgeDetails = '/articleTemplate/articleDetail'
  101. const fixedParameters = '?pageIndex=' + currentPage + '&pageSize=' + currentSize + '&info=' // 分页固定参数
  102. function search() {
  103. const inputVal = document.getElementById("knowledgeInput").value;
  104. window.location.href = knowledgeUrl + fixedParameters + inputVal
  105. }
  106. function learnMore(id) {
  107. window.location.href = knowledgeDetails + `?id=` + id
  108. }
  109. function triggerButtonClick(itemId) {
  110. // 找到该 item 对应的按钮并触发点击事件
  111. const button = document.querySelector('button[onclick="learnMore('+itemId+')"]');
  112. if (button) {
  113. button.click();
  114. }
  115. }
  116. function confirmJump() {
  117. let inputVal = document.getElementById("paginationInput").value;
  118. if(inputVal <= 0) {
  119. inputVal = 1
  120. }
  121. if(inputVal > totalPages) {
  122. inputVal = totalPages
  123. }
  124. if(!inputVal) {
  125. return
  126. }
  127. window.location.href = knowledgeUrl + '?pageIndex=' + inputVal + '&pageSize=' + currentSize
  128. }
  129. // 初始化分页组件
  130. function initPagination() {
  131. const pageList = document.getElementById('page-list');
  132. pageList.innerHTML = ''; // 清空之前的页码
  133. for (let i = 1; i <= totalPages; i++) {
  134. const li = document.createElement('li');
  135. li.textContent = i;
  136. li.classList.toggle('active', i === currentPage); // 设置当前页的样式
  137. li.onclick = () => goToPage(i);
  138. pageList.appendChild(li);
  139. }
  140. // 更新按钮的禁用状态
  141. document.querySelector('.prev').disabled = currentPage === 1;
  142. document.querySelector('.next').disabled = currentPage === totalPages;
  143. }
  144. // 跳转到指定页面
  145. function goToPage(page) {
  146. window.location.href = knowledgeUrl + '?pageIndex=' + page + '&pageSize=' + currentSize
  147. }
  148. // 初始化分页
  149. initPagination();
  150. function reinitIframe() {
  151. const iframe = document.getElementById("headerIframe");
  152. let observer = null
  153. if (iframe) {
  154. const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
  155. const iframeBody = iframeDocument.body
  156. observer = new MutationObserver(function(mutationsList, observer) {
  157. const bodyHeight = iframeBody.clientHeight;
  158. iframe.style.height = (bodyHeight + 1) + 'px';
  159. });
  160. observer.observe(iframeBody, { attributes: true, childList: true, subtree: true });
  161. let imgElement = iframeDocument.getElementById('logo');
  162. let headerItems = iframeDocument.querySelectorAll('.header-item')
  163. let headerView = iframeDocument.querySelector('.headerView')
  164. headerView.style.background = '#fff'
  165. imgElement.src = './image/logos.jpg'
  166. headerView.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0)';
  167. headerItems.forEach(function(item) {
  168. item.style.color = '#000'; // 设置你想要的字体颜色
  169. });
  170. }
  171. }
  172. reinitIframe()
  173. </script>
  174. </html>