chart.jsp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  2. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  3. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  4. <%@ page language="java" contentType="text/html; charset=UTF-8"
  5. pageEncoding="UTF-8"%>
  6. <jsp:include page="${data._INCLUDE}/header.jsp"></jsp:include>
  7. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.css">
  8. <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
  9. <script>
  10. var startDate = "<c:out value='${startDate}'/>";
  11. var endDate = "<c:out value='${endDate}'/>";
  12. $(function() {
  13. $("input[name=\"startDate\"]").daterangepicker({
  14. singleDatePicker : true,
  15. showDropdowns : true,
  16. // startDate : "<c:out value='${startDate}'/>",
  17. locale : {
  18. //format : "M/DD hh:mm A"
  19. format : "YYYY-MM-DD"
  20. },
  21. maxDate : new Date()
  22. });
  23. $("input[name=\"endDate\"]").daterangepicker({
  24. singleDatePicker : true,
  25. showDropdowns : true,
  26. // startDate : "<c:out value='${endDate}'/>",
  27. locale : {
  28. //format : "M/DD hh:mm A"
  29. format : "YYYY-MM-DD"
  30. },
  31. maxDate : new Date()
  32. });
  33. $("input[name=\"startDate\"]").val( startDate );
  34. $("input[name=\"endDate\"]").val( endDate );
  35. var options = {
  36. type: 'bar',
  37. data: {
  38. labels: [], //X축 제목
  39. datasets: [
  40. { // 1번째 선그래프의 값
  41. label: 'Api Request Total',
  42. backgroundColor: "#fcc100",
  43. data: [],
  44. borderWidth: 1
  45. }
  46. ]
  47. },
  48. options: {
  49. responsive: true,
  50. maintainAspectRatio: false,
  51. scales: {
  52. xAxes: [{
  53. barPercentage: 0.4
  54. }]
  55. },
  56. showDatapoints: true
  57. }
  58. };
  59. $( "#chart-data li" ).each( function(){
  60. var $this = $( this );
  61. var inDate = $this.find( "span.chart-date" ).text();
  62. var total = $this.find( "span.chart-total" ).text();
  63. options.data.labels.push( inDate );
  64. options.data.datasets[0].data.push( total );
  65. });
  66. Chart.plugins.register({
  67. afterDraw: function(chartInstance) {
  68. if (chartInstance.config.options.showDatapoints) {
  69. var helpers = Chart.helpers;
  70. var ctx = chartInstance.chart.ctx;
  71. var fontColor = helpers.getValueOrDefault(chartInstance.config.options.showDatapoints.fontColor, chartInstance.config.options.defaultFontColor);
  72. // render the value of the chart above the bar
  73. ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, 'normal', Chart.defaults.global.defaultFontFamily);
  74. ctx.textAlign = 'center';
  75. ctx.textBaseline = 'bottom';
  76. ctx.fillStyle = fontColor;
  77. chartInstance.data.datasets.forEach( function (dataset) {
  78. for (var i = 0; i < dataset.data.length; i++) {
  79. var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model;
  80. var scaleMax = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._yScale.maxHeight;
  81. var yPos = (scaleMax - model.y) / scaleMax >= 0.93 ? model.y + 20 : model.y - 5;
  82. ctx.fillText(dataset.data[i], model.x, yPos);
  83. }
  84. });
  85. }
  86. }
  87. });
  88. var ctx = document.getElementById('myChart').getContext('2d');
  89. new Chart(ctx, options);
  90. });
  91. function getExcel(){
  92. if( $.trim( $( "#downMemo" ).val() ) == "" ){
  93. alertBox({ txt : "사유를 입력해주세요" });
  94. $( ".modal-header>.modal-title h3" ).remove();
  95. return false;
  96. }
  97. var newForm = $( "#searchForm" ).clone();
  98. newForm.attr( "id", "excelForm" );
  99. newForm.attr( "method", "post" );
  100. newForm.attr( "action", "./excel" );
  101. newForm.attr( "target", "_blank" );
  102. newForm.hide();
  103. $( document.body ).append( newForm );
  104. newForm.submit();
  105. $( "button.close" ).click();
  106. $( "#downMemo" ).val( "" );
  107. $( "#excelForm" ).remove();
  108. }
  109. </script>
  110. </head>
  111. <body>
  112. <div class="modal fade" id="excelDownMemo" tabindex="-1" role="dialog" aria-hidden="true" data-memoid="">
  113. <div class="modal-dialog" role="document">
  114. <div class="modal-content">
  115. <div class="modal-header">
  116. <h5 class="modal-title">생활치료센터 리스트 Excel 다운로드</h5>
  117. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
  118. aria-hidden="true">&times;</span> </button>
  119. </div>
  120. <div class="modal-body m-3">
  121. <table class="table mobile-table">
  122. <colgroup>
  123. <col style="width: 20%">
  124. <col style="width: 80%">
  125. </colgroup>
  126. <tr>
  127. <th><span class="fix">*</span>다운로드 사유</th>
  128. <td>
  129. <div class="form-row">
  130. <textarea id="downMemo" name="downMemo" class="form-control" cols="" rows="6" placeholder="" maxlength="200"></textarea>
  131. </div>
  132. </td>
  133. </tr>
  134. </table>
  135. </div>
  136. <div class="addMemoTools modal-footer">
  137. <button type="button" class="btn btn-outline-primary" data-dismiss="modal">취소</button>
  138. <button type="button" class="btn btn-primary" onclick="getExcel();">제출 후 다운로드</button>
  139. </div>
  140. </div>
  141. </div>
  142. </div>
  143. <div class="wrapper">
  144. <jsp:include page="${data._INCLUDE}/sidebar.jsp"></jsp:include>
  145. <div class="main">
  146. <jsp:include page="${data._INCLUDE}/top.jsp"></jsp:include>
  147. <main class="content">
  148. <div class="container-fluid p-0">
  149. <!-- 환지관리 START -->
  150. <div class="row">
  151. <div class="col-12 col-lg-6">
  152. <h1 class="h3 mb-3">생활치료센터 오픈API 통계</h1>
  153. </div>
  154. <div class="col-12 col-lg-6 text-right">
  155. <nav aria-label="breadcrumb">
  156. <ol class="breadcrumb">
  157. <li class="breadcrumb-item"><a href="javscript:;">Home</a></li>
  158. <li class="breadcrumb-item active">생활치료센터 오픈API 통계</li>
  159. </ol>
  160. </nav>
  161. </div>
  162. </div>
  163. <div class="row">
  164. <div class="col-12">
  165. <div class="card">
  166. <form action="?" method="get" id="searchForm">
  167. <div class="card-body">
  168. <table class="table mobile-table">
  169. <colgroup>
  170. <col style="width:10%">
  171. <col style="width:40%">
  172. <col style="width:10%">
  173. <col style="width:40%">
  174. </colgroup>
  175. <tr>
  176. <th>지역</th>
  177. <td>
  178. <select class="custom-select form-control" name="locationCode">
  179. <option value="">전체</option>
  180. <c:forEach var="i" items="${locationList}">
  181. <option value="${i.locationCode}" <c:if test="${i.locationCode eq locationCode}"> selected="selected"</c:if>><c:out value="${i.locationName}"/></option>
  182. </c:forEach>
  183. </select>
  184. </td>
  185. <th>생활치료센터명</th>
  186. <td>
  187. <input type="text" class="form-control" name="centerName" placeholder="생활치료센터명" value="<c:out value="${centerName}" />">
  188. </td>
  189. </tr>
  190. <tr>
  191. <th>등록일</th>
  192. <td>
  193. <div class="row">
  194. <div class="col-lg-5 col-sm-5">
  195. <div class="form-group calendar-bar mb-xl-0">
  196. <input class="form-control" type="text" name="startDate" placeholder="검색 시작일자" autocomplete="off">
  197. <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
  198. </div>
  199. </div>
  200. <div class="col-lg-2 col-sm-2 text-center">
  201. ~
  202. </div>
  203. <div class="col-lg-5 col-sm-5">
  204. <div class="form-group calendar-bar mb-xl-0">
  205. <input class="form-control" type="text" name="endDate" placeholder="검색 종료일자" autocomplete="off">
  206. <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
  207. </div>
  208. </div>
  209. </div>
  210. </td>
  211. <td colspan="2">
  212. <button class="btn btn-primary">검색</button>
  213. </td>
  214. </tr>
  215. </table>
  216. </div>
  217. </form>
  218. </div>
  219. </div>
  220. </div>
  221. <div class="row">
  222. <div class="col-12">
  223. <div class="card">
  224. <div class="card-body">
  225. <div class="row mb-3">
  226. <div class="col-6">
  227. <!-- 전체 : -->
  228. <fmt:formatNumber value="${total}" pattern="#,###" />
  229. </div>
  230. <div class="col-6 text-right">
  231. <button class="btn btn-success" data-toggle="modal" data-target="#excelDownMemo">Excel 다운로드</button>
  232. <c:if test="${role._CREATE eq 'Y'}">
  233. <button class="btn btn-primary" onclick="location.href='./new';">생활치료센터 신규 등록</button>
  234. </c:if>
  235. </div>
  236. </div>
  237. <div id="chart-data" style="display:none;">
  238. <ul>
  239. <c:forEach var="c" items="${chart}">
  240. <li>
  241. <span class="chart-date">${c.inDate}</span>
  242. <span class="chart-total">${c.total}</span>
  243. </li>
  244. </c:forEach>
  245. </ul>
  246. </div>
  247. <div style="height:400px;">
  248. <canvas id="myChart"></canvas>
  249. </div>
  250. </div>
  251. </div>
  252. </div>
  253. </div>
  254. <!-- 환자관리 END -->
  255. </div>
  256. </main>
  257. <jsp:include page="${data._INCLUDE}/footer.jsp"></jsp:include>
  258. </div>
  259. </div>
  260. </body>
  261. </html>