stat.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. {extend name="app/shop/view/base.html" /}
  2. {block name="resources"}
  3. <link rel="stylesheet" href="WECHAT_CSS/wx_access_statistics.css">
  4. <script src="WECHAT_JS/echarts.min.js"></script>
  5. {/block}
  6. {block name="main"}
  7. <div class="layui-card card-common card-brief">
  8. <div class="layui-card-header">
  9. <span class="card-title">用户分析/昨日</span>
  10. </div>
  11. <div class="layui-card-body access-statistics">
  12. <ul class="access-api-list ">
  13. <li class="access-api-item">
  14. <div class="access-api-item-title">
  15. <h3>新关注人数</h3>
  16. </div>
  17. <p class="access-api-itme-content">{if !empty($yesterday_user_data.new_user)}{$yesterday_user_data.new_user}{else/}0{/if}</p>
  18. </li>
  19. <li class="access-api-item">
  20. <div class="access-api-item-title">
  21. <h3>取消关注人数</h3>
  22. </div>
  23. <p class="access-api-itme-content">{if !empty($yesterday_user_data.cancel_user)}{$yesterday_user_data.cancel_user}{else/}0{/if}</p>
  24. </li>
  25. <li class="access-api-item">
  26. <div class="access-api-item-title">
  27. <h3>净增关注人数</h3>
  28. </div>
  29. <p class="access-api-itme-content">{if !empty($yesterday_user_data.net_growth_user)}{$yesterday_user_data.net_growth_user}{else/}0{/if}</p>
  30. </li>
  31. <li class="access-api-item">
  32. <div class="access-api-item-title">
  33. <h3>累积关注人数</h3>
  34. </div>
  35. <p class="access-api-itme-content">{if !empty($yesterday_user_data.cumulate_user)}{$yesterday_user_data.cumulate_user}{else/}0{/if}</p>
  36. </li>
  37. </ul>
  38. </div>
  39. </div>
  40. <div class="layui-card card-common card-brief">
  41. <div class="layui-card-header">
  42. <span class="card-title">接口分析/昨日</span>
  43. </div>
  44. <div class="layui-card-body access-statistics">
  45. <ul class="access-api-list">
  46. <li class="access-api-item">
  47. <div class="access-api-item-title">
  48. <h3>调用次数</h3>
  49. </div>
  50. <p class="access-api-itme-content">{if !empty($yesterday_interface_data.callback_count)}{$yesterday_interface_data.callback_count}{else/}--{/if}</p>
  51. </li>
  52. <li class="access-api-item">
  53. <div class="access-api-item-title">
  54. <h3>失败率</h3>
  55. </div>
  56. <p class="access-api-itme-content">{if !empty($yesterday_interface_data.fail_count)}{$yesterday_interface_data.fail_count}{else/}--{/if}</p>
  57. </li>
  58. <li class="access-api-item">
  59. <div class="access-api-item-title">
  60. <h3>平均耗时(毫秒)</h3>
  61. </div>
  62. <p class="access-api-itme-content">{if !empty($yesterday_interface_data.callback_count) && !empty($yesterday_interface_data.total_time_cost)}{php}echo round($yesterday_interface_data['total_time_cost']/$yesterday_interface_data['callback_count'],2);{/php}{else/}--{/if}</p>
  63. </li>
  64. <li class="access-api-item">
  65. <div class="access-api-item-title">
  66. <h3>最大耗时(毫秒)</h3>
  67. </div>
  68. <p class="access-api-itme-content">{if !empty($yesterday_interface_data.max_time_cost)}{$yesterday_interface_data.max_time_cost}{else/}--{/if}</p>
  69. </li>
  70. </ul>
  71. </div>
  72. </div>
  73. <div class="layui-card card-common card-brief">
  74. <div class="layui-card-header">
  75. <span class="card-title">趋势图</span>
  76. </div>
  77. <div class="layui-card-body access-statistics">
  78. <div class="layui-tab layui-tab-brief" lay-filter="chart_tab">
  79. <ul class="layui-tab-title">
  80. <li class="layui-this" lay-id="user">用户分析</li>
  81. <li lay-id="interface">接口分析</li>
  82. </ul>
  83. <blockquote class="layui-elem-quote" style="margin-top:10px;" >
  84. <span class="layui-breadcrumb" lay-separator="|" >
  85. <a href="javascript:void(0)" class="layui-breadcrumb-item layui-breadcrumb-active" lay-util="week">最近7天</a>
  86. <a href="javascript:void(0)" class="layui-breadcrumb-item" lay-util="month">最近30天</a>
  87. </span>
  88. </blockquote>
  89. <div class="layui-tab-content">
  90. <div class="layui-tab-item layui-show">
  91. <div id="user_chart" style="width: 100%;height:400px;"></div>
  92. </div>
  93. <div class="layui-tab-item" id="interface_main">
  94. <div id="interface_chart" style="width: 100%;height:400px;"></div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. {/block}
  101. {block name="script"}
  102. <script>
  103. var is_render = true;
  104. var date_type = "week";
  105. layui.use(['element', 'util'], function(){
  106. var element = layui.element,
  107. util = layui.util;
  108. usersummarystatistics();
  109. //监听Tab切换,以改变地址hash值
  110. element.on('tab(chart_tab)', function(){
  111. if(this.getAttribute('lay-id') == "interface" && is_render){
  112. is_render = false;
  113. interfaceSummaryStatistics();
  114. }
  115. });
  116. //按钮事件
  117. util.event('lay-util', {
  118. week: function(othis){
  119. $(".layui-breadcrumb-item").removeClass("layui-breadcrumb-active");
  120. $(othis).addClass("layui-breadcrumb-active");
  121. date_type = "week";
  122. usersummarystatistics();
  123. if(is_render == false){
  124. interfaceSummaryStatistics();
  125. }
  126. }
  127. ,month: function(othis){
  128. $(".layui-breadcrumb-item").removeClass("layui-breadcrumb-active");
  129. $(othis).addClass("layui-breadcrumb-active");
  130. date_type = "month";
  131. usersummarystatistics();
  132. if(is_render == false){
  133. interfaceSummaryStatistics();
  134. }
  135. }
  136. });
  137. });
  138. //折线图
  139. var user_chart = echarts.init(document.getElementById('user_chart'));
  140. //获取微信公众号用户分析统计数据(按日)
  141. function usersummarystatistics(){
  142. user_chart.showLoading();//加载视图
  143. $.ajax({
  144. type: "post",
  145. url: "{:addon_url('wechat://shop/stat/usersummarystatistics')}",
  146. dataType: "JSON",
  147. data: {date_type : date_type},
  148. success: function (result) {
  149. var chart_data = result.data;
  150. var option = {
  151. legend: {
  152. data:['新关注人数','取消关注人数','净增关注人数','累积关注人数'],
  153. x: 'right',
  154. right: '20',
  155. },
  156. tooltip: {
  157. trigger: 'axis'
  158. },
  159. grid: {
  160. left: '20',
  161. right: '20',
  162. bottom: '20',
  163. containLabel: true
  164. },
  165. xAxis: {
  166. type: 'category',
  167. data: chart_data.date
  168. },
  169. yAxis: {
  170. type: 'value'
  171. },
  172. series: [
  173. {
  174. data: chart_data.data.new_user_data,
  175. type: 'line',
  176. smooth: true,
  177. name: "新关注人数"
  178. },
  179. {
  180. data: chart_data.data.cancel_user_data,
  181. type: 'line',
  182. smooth: true,
  183. name: "取消关注人数"
  184. },
  185. {
  186. data: chart_data.data.net_growth_user_data,
  187. type: 'line',
  188. smooth: true,
  189. name: "净增关注人数"
  190. },
  191. {
  192. data: chart_data.data.cumulate_user_data,
  193. type: 'line',
  194. smooth: true,
  195. name: "累积关注人数"
  196. }
  197. ]
  198. };
  199. user_chart.setOption(option);
  200. user_chart.hideLoading();
  201. }
  202. });
  203. }
  204. //获取微信公众号接口调用统计数据(按日)
  205. function interfaceSummaryStatistics(){
  206. var interface_chart = echarts.init(document.getElementById('interface_chart'));
  207. interface_chart.showLoading();//加载视图
  208. $.ajax({
  209. type: "post",
  210. url: "{:addon_url('wechat://shop/stat/interfaceSummaryStatistics')}",
  211. dataType: "JSON",
  212. data: {date_type : date_type},
  213. success: function (result) {
  214. var chart_data = result.data;
  215. var option = {
  216. legend: {
  217. data:['调用次数','失败率','平均耗时','最大耗时'],
  218. x: 'right',
  219. right: '20',
  220. },
  221. tooltip: {
  222. trigger: 'axis'
  223. },
  224. grid: {
  225. left: '20',
  226. right: '20',
  227. bottom: '20',
  228. containLabel: true
  229. },
  230. xAxis: {
  231. type: 'category',
  232. data: chart_data.date
  233. },
  234. yAxis: {
  235. type: 'value'
  236. },
  237. series: [
  238. {
  239. data: chart_data.data.callback_count_data,
  240. type: 'line',
  241. smooth: true,
  242. name: "调用次数"
  243. },
  244. {
  245. data: chart_data.data.fail_count_data,
  246. type: 'line',
  247. smooth: true,
  248. name: "失败率"
  249. },
  250. {
  251. data: chart_data.data.average_time_cost_data,
  252. type: 'line',
  253. smooth: true,
  254. name: "平均耗时"
  255. },
  256. {
  257. data: chart_data.data.max_time_cost_data,
  258. type: 'line',
  259. smooth: true,
  260. name: "最大耗时"
  261. }
  262. ]
  263. };
  264. interface_chart.setOption(option);
  265. interface_chart.hideLoading();
  266. }
  267. });
  268. }
  269. </script>
  270. {/block}