index.html 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. <link rel="stylesheet" href="SUPERMEMBER_CSS/supermember.css">
  4. <style>
  5. .layui-card-body{display: flex;padding-bottom: 0 !important;padding-right: 50px !important;padding-left: 50px !important;flex-wrap: wrap;}
  6. .layui-card-body .content{width: 25%;display: flex;flex-direction: column;margin-bottom: 30px;justify-content: center;padding-top: 15px}
  7. .layui-card-body .content .title{color: #909399;font-size: 14px;}
  8. .layui-card-body .money{color: #303133;font-size: 26px;margin-top: 10px;max-width: 250px;}
  9. .layui-card-body .bottom-title{color: #909399;font-size: 14px;margin-top: 5px;}
  10. </style>
  11. {/block}
  12. {block name="main"}
  13. <div class="nav">
  14. <div class="nav-screen">
  15. <div class="screen-tab">
  16. <div class="tab-item bgcolorse activeTab" onclick="datePick(1, this);return false;">今日</div>
  17. <div class="tab-item" onclick="datePick(2, this);return false;">昨日</div>
  18. <div class="tab-item" onclick="datePick(7, this);return false;">近七天</div>
  19. </div>
  20. <form class="layui-form layui-show" lay-filter="order_list">
  21. <div class="screen-time layui-form-item">
  22. <div class="layui-inline">
  23. <div class="layui-input-inline">
  24. <input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
  25. <i class=" iconrili iconfont calendar"></i>
  26. </div>
  27. <div class="layui-form-mid">-</div>
  28. <div class="layui-input-inline">
  29. <input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
  30. <i class=" iconrili iconfont calendar"></i>
  31. </div>
  32. </div>
  33. </div>
  34. </form>
  35. </div>
  36. <div class="layui-card-body">
  37. <div class="content">
  38. <p class="title">售卡数</p>
  39. <p class="money" id="sale_num">{$data.today_num}</p>
  40. </div>
  41. <div class="content">
  42. <p class="title">售卡金额</p>
  43. <p class="money" id="sale_money">{$data.today_money}</p>
  44. </div>
  45. <div class="content">
  46. <p class="title">累计售卡数</p>
  47. <p class="money">{$data.total_num}</p>
  48. </div>
  49. <div class="content">
  50. <p class="title">累计售卡金额</p>
  51. <p class="money">{$data.total_money}</p>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="section">
  56. <div class="section-left">
  57. <div class="membership">
  58. <div>会员持卡总数量</div>
  59. <div>{$data.has_card_member}</div>
  60. </div>
  61. <div class="member-detail">
  62. {notempty name="$data.card_list"}
  63. {foreach data.card_list as $key => $value}
  64. <div class="member-detail-item vip-list" data-level-id="{$value.level_id}">
  65. <div class="base-data-name">
  66. {if condition='$key == 0'}
  67. <span><img src="SUPERMEMBER_IMG/one.png"></span>
  68. {elseif condition='$key == 1'}
  69. <span><img src="SUPERMEMBER_IMG/two.png"></span>
  70. {elseif condition='$key == 2'}
  71. <span><img src="SUPERMEMBER_IMG/three.png"></span>
  72. {else}
  73. <span>{$key+1}</span>
  74. {/if}
  75. {$value.level_name}
  76. </div>
  77. <div class="base-data-name">{$value.member_num}</div>
  78. </div>
  79. {/foreach}
  80. {else/}
  81. <div class="no-data">暂无数据</div>
  82. {/notempty}
  83. </div>
  84. </div>
  85. <div class="section-right">
  86. <div class="membership">
  87. <div>普通会员与会员卡用户占比</div>
  88. </div>
  89. <!-- <div class="has-data">暂无数据</div> -->
  90. <div id="main" style="width:600px;height:600px;margin-top: 100px;margin-left: 100px;"></div>
  91. </div>
  92. {/block}
  93. {block name="script"}
  94. <script src="SHOP_JS/echarts.min.js"></script>
  95. <script type="text/javascript">
  96. var form;
  97. //初始化时间
  98. var startTime = new Date(new Date().setHours(0, 0, 0, 0));
  99. var endTime = new Date();
  100. //开始时间转换为时间戳
  101. var start_times = $('input[name="start_time"]').val()
  102. var start_time = new Date(start_times ? start_times : startTime).getTime()
  103. //结束时间转换为时间戳
  104. var end_times = $('input[name="end_time"]').val()
  105. var end_time = new Date(end_times ? end_times : endTime).getTime()
  106. $('.screen-tab .tab-item').click(function() {
  107. $(this).addClass("bgcolorse activeTab").siblings().removeClass('bgcolorse activeTab');
  108. start_times = $('input[name="start_time"]').val()
  109. end_times = $('input[name="end_time"]').val()
  110. sendAjax(start_times,end_times)
  111. });
  112. $('.vip-list').click(function(data){
  113. let levelId = $(this).attr('data-level-id')
  114. location.href = ns.url("shop/member/memberlist",{levelId:levelId});
  115. })
  116. function sendAjax(starTimes,enTimes){
  117. if(starTimes){start_times = starTimes}else{start_times = $('input[name="start_time"]').val()}
  118. if(enTimes){end_times = enTimes}else{end_times = $('input[name="end_time"]').val()}
  119. $.ajax({
  120. url: ns.url("supermember://shop/membercard/salesStatistics"),
  121. data: {
  122. start_time: start_times,
  123. end_time: end_times
  124. },
  125. dataType: 'JSON', //服务器返回json格式数据
  126. type: 'POST', //http请求类型
  127. success: function(res) {
  128. if (res.code == 0) {
  129. $('#sale_num').html(res.data.sale_num);
  130. $('#sale_money').html(res.data.sale_money);
  131. } else {
  132. layer.msg(res.message);
  133. }
  134. }
  135. });
  136. }
  137. layui.use(['form', 'laydate'], function() {
  138. var laydate = layui.laydate;
  139. form = layui.form;
  140. form.render();
  141. //渲染时间
  142. laydate.render({
  143. elem: '#start_time',
  144. type: 'datetime',
  145. value: startTime,
  146. done: function(value, date, endDate) {
  147. $(".screen-tab .tab-item").removeClass("bgcolorse activeTab");
  148. start_times = value
  149. let start_time = ns.date_to_time(value);
  150. let end_time = ns.date_to_time($('#end_time').val());
  151. if(end_time > start_time){
  152. sendAjax(start_times,'')
  153. }else {
  154. $('#end_time').val('');
  155. }
  156. }
  157. });
  158. laydate.render({
  159. elem: '#end_time',
  160. type: 'datetime',
  161. value: endTime,
  162. done: function(value, date, endDate) {
  163. $(".screen-tab .tab-item").removeClass("bgcolorse activeTab");
  164. end_times = value
  165. let start_time = ns.date_to_time($('#start_time').val());
  166. let end_time = ns.date_to_time(value);
  167. if(end_time > start_time){
  168. sendAjax('',end_times)
  169. }else {
  170. $('#start_time').val('');
  171. }
  172. }
  173. });
  174. });
  175. /**
  176. * 七天时间
  177. */
  178. function datePick(date_num, event_obj) {
  179. $(".date-picker-btn").removeClass("selected");
  180. $(event_obj).addClass('selected');
  181. var now_date = new Date();
  182. Date.prototype.Format = function(fmt, date_num) { //author: meizz
  183. this.setDate(this.getDate() - date_num);
  184. var o = {
  185. "M+": this.getMonth() + 1, //月份
  186. "d+": this.getDate(), //日
  187. "H+": this.getHours(), //小时
  188. "m+": this.getMinutes(), //分
  189. "s+": this.getSeconds(), //秒
  190. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  191. "S": this.getMilliseconds() //毫秒
  192. };
  193. if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1
  194. .length));
  195. for (var k in o)
  196. if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[
  197. k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  198. return fmt;
  199. };
  200. if (date_num == 2) {
  201. var now_time = new Date().Format("yyyy-MM-dd 23:59:59", date_num - 1); //当前日期
  202. } else {
  203. // var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
  204. var now_time = new Date().Format("yyyy-MM-dd HH:mm:ss", 0); //当前日期
  205. }
  206. var before_time = new Date().Format("yyyy-MM-dd 00:00:00", date_num - 1); //前几天日期
  207. $("input[name=start_time]").val(before_time, 0);
  208. $("input[name=end_time]").val(now_time, date_num - 1);
  209. }
  210. </script>
  211. <script type="text/javascript">
  212. var vipData = '{:json_encode($data)}';
  213. var listData = JSON.parse(vipData).card_list;
  214. var names = [];
  215. var nums = [];
  216. names.push('普通会员')
  217. nums.push({
  218. value: JSON.parse(vipData).no_has_card_member,
  219. name: '普通会员'
  220. });
  221. for(var i=0;i<listData.length;i++){
  222. names.push(listData[i].level_name)
  223. nums.push({
  224. value: listData[i].member_num,
  225. name: listData[i].level_name
  226. });
  227. }
  228. var myChart = echarts.init(document.getElementById('main'));
  229. option = {
  230. color: ['#ff7a14', '#47b73d', '#fcc36e', '#448ffd', "#228b22","#00adac","#000086","#a963a1","#cf675a","#607e82"],//饼图颜色
  231. tooltip: {
  232. trigger: 'item',
  233. formatter: '{a} <br/>{b}: {c} ({d}%)'
  234. },
  235. legend: {
  236. orient: 'horizontal',
  237. left: 'center',
  238. bottom: 260,
  239. itemGap: 50,
  240. data: names
  241. },
  242. series: [{
  243. width: 265,
  244. height: 265,
  245. top: 0,
  246. x: "center",
  247. name: '会员比例',
  248. type: 'pie',
  249. radius: ['50%', '70%'],
  250. avoidLabelOverlap: false,
  251. label: {
  252. show: false,
  253. position: 'center'
  254. },
  255. emphasis: {
  256. label: {
  257. show: true,
  258. fontSize: '12',
  259. color: '#333'
  260. }
  261. },
  262. labelLine: {
  263. show: false
  264. },
  265. data: nums
  266. }]
  267. };
  268. myChart.setOption(option);
  269. </script>
  270. {/block}