userDataAnalysis.blade.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. @extends('admin.layouts')
  2. @section('content')
  3. <div class="page-content container-fluid">
  4. <div class="card card-shadow">
  5. <div class="card-block p-30">
  6. <form class="form-row">
  7. <div class="form-group col-xxl-1 col-lg-1 col-md-1 col-sm-4">
  8. <input type="number" class="form-control" name="uid" value="{{Request::query('uid')}}" placeholder="{{ trans('model.user.id') }}"/>
  9. </div>
  10. <div class="form-group col-xxl-2 col-lg-3 col-md-3 col-sm-4">
  11. <input type="text" class="form-control" name="username" value="{{Request::query('username')}}" placeholder="{{ trans('model.user.username') }}"/>
  12. </div>
  13. <div class="form-group col-xxl-1 col-lg-3 col-md-3 col-4 btn-group">
  14. <button type="submit" class="btn btn-primary">{{ trans('common.search') }}</button>
  15. <a href="{{route('admin.report.userAnalysis')}}" class="btn btn-danger">{{ trans('common.reset') }}</a>
  16. </div>
  17. </form>
  18. </div>
  19. </div>
  20. @isset($data)
  21. <div class="card card-shadow">
  22. <div class="card-block p-30">
  23. <div class="row pb-20">
  24. <div class="col-md-8 col-sm-6">
  25. <div class="blue-grey-700 font-size-26 font-weight-500">{{ trans('admin.report.hourly_traffic') }}</div>
  26. </div>
  27. </div>
  28. <canvas id="hourlyBar"></canvas>
  29. <canvas id="hourlyDoughnut"></canvas>
  30. </div>
  31. </div>
  32. <div class="card card-shadow">
  33. <div class="card-block p-30">
  34. <div class="row pb-20">
  35. <div class="col-md-8 col-sm-6">
  36. <div class="blue-grey-700 font-size-26 font-weight-500">{{ trans('admin.report.daily_traffic') }}</div>
  37. </div>
  38. </div>
  39. <canvas id="dailyBar"></canvas>
  40. <canvas id="dailyDoughnut"></canvas>
  41. </div>
  42. </div>
  43. @endisset
  44. </div>
  45. @endsection
  46. @section('javascript')
  47. @isset($data)
  48. <script src="/assets/global/vendor/chart-js/chart.min.js"></script>
  49. <script type="text/javascript">
  50. function label_callbacks(tail) {
  51. return {
  52. mode: 'index',
  53. intersect: false,
  54. callbacks: {
  55. title: function(context) {
  56. return context[0].label + tail;
  57. },
  58. label: function(context) {
  59. let label = context.dataset.label || '';
  60. if (label) {
  61. label += ': ';
  62. }
  63. if (context.parsed.y !== null) {
  64. label += context.parsed.y + ' GB';
  65. }
  66. return label;
  67. },
  68. },
  69. };
  70. }
  71. function area_a(label, data) {
  72. return {
  73. label: label,
  74. backgroundColor: 'rgba(184, 215, 255)',
  75. borderColor: 'rgba(184, 215, 255)',
  76. data: data,
  77. fill: {
  78. target: 'origin',
  79. above: 'rgba(184, 215, 255, 0.5)',
  80. },
  81. tension: 0.4,
  82. };
  83. }
  84. new Chart(document.getElementById('hourlyBar'), {
  85. type: 'bar',
  86. data: {
  87. labels: @json($data['hours']),
  88. datasets: [area_a('{{ trans('admin.report.today') }}',@json($data['hourlyFlow']))],
  89. },
  90. options: {
  91. // stack: 'node_id',
  92. parsing: {
  93. xAxisKey: 'date',
  94. yAxisKey: 'total',
  95. },
  96. scales: {
  97. x: {
  98. stacked: true
  99. },
  100. y: {
  101. stacked: true
  102. }
  103. },
  104. responsive: true,
  105. plugins: {
  106. legend: {
  107. labels: {
  108. padding: 20,
  109. usePointStyle: true,
  110. pointStyle: 'circle',
  111. font: {size: 14},
  112. },
  113. },
  114. tooltip: label_callbacks(' {{ trans_choice('common.hour', 2) }}'),
  115. },
  116. },
  117. });
  118. new Chart(document.getElementById('dailyBar'), {
  119. type: 'bar',
  120. data: {
  121. labels: @json($data['days']),
  122. datasets: [area_a('{{ trans('admin.report.current_month') }}',@json($data['dailyFlow']))],
  123. },
  124. options: {
  125. // stack: 'node_id',
  126. parsing: {
  127. xAxisKey: 'date',
  128. yAxisKey: 'total',
  129. },
  130. scales: {
  131. x: {
  132. stacked: true
  133. },
  134. y: {
  135. stacked: true
  136. }
  137. },
  138. responsive: true,
  139. plugins: {
  140. legend: {
  141. labels: {
  142. padding: 20,
  143. usePointStyle: true,
  144. pointStyle: 'circle',
  145. font: {size: 14},
  146. },
  147. },
  148. tooltip: label_callbacks(' {{ trans_choice('common.days.attribute', 1) }}'),
  149. },
  150. },
  151. });
  152. </script>
  153. @endisset
  154. @endsection