main.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. {extend name="public/container"}
  2. {block name="head_top"}
  3. <!-- 全局js -->
  4. <script src="{__PLUG_PATH}echarts/echarts.common.min.js"></script>
  5. <script src="{__PLUG_PATH}echarts/theme/macarons.js"></script>
  6. <script src="{__PLUG_PATH}echarts/theme/westeros.js"></script>
  7. <style scoped>
  8. .box{width:0px;}
  9. .mask{ background-color: rgba(0,0,0,0.5);
  10. position: fixed;
  11. top: 0;
  12. left: 0;
  13. bottom: 0;
  14. right: 0;
  15. z-index: 55;
  16. }
  17. .mask img{
  18. width: 70%;
  19. position: fixed;
  20. top: 50%;
  21. left: 50%;
  22. -webkit-transform: translate(-50%, -50%);
  23. transform: translate(-50%, -50%);
  24. }
  25. .mask span{
  26. position: fixed;
  27. top: 70%;
  28. left: 35%;
  29. color: #fff;
  30. font-size: 36px;
  31. }
  32. .layui-layer-page .layui-layer-content {
  33. padding: 15px;
  34. font-size: 14px;
  35. line-height: 1.6;
  36. color: #ed5565;
  37. }
  38. .normal{
  39. background-color: #0092DC;
  40. color: #fff;
  41. }
  42. .layui-btn-group .layui-btn-normal {
  43. border: 1px solid #0092DC;
  44. border-left: none;
  45. }
  46. .layui-btn-group .layui-btn-normal:first-child {
  47. border-left: 1px solid #0092DC;
  48. }
  49. </style>
  50. {/block}
  51. {block name="content"}
  52. <div id="app" v-cloak>
  53. <div class="layui-fluid">
  54. <div class="layui-row layui-col-space15">
  55. <div class="layui-col-md3">
  56. <div class="layui-card">
  57. <div class="layui-card-header">课程订单<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  58. <div class="layui-card-body layuiadmin-card-list">
  59. <p class="layuiadmin-big-font">{$first_line.d_num.data}</p>
  60. <p>
  61. 今日课程订单
  62. <span class="layuiadmin-span-color">
  63. {$first_line.d_num.percent}%
  64. {if condition='$first_line.d_num.is_plus egt 0'}<i class="fa {if condition='$first_line.d_num.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  65. </span>
  66. </p>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="layui-col-md3">
  71. <div class="layui-card">
  72. <div class="layui-card-header">课程收入<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  73. <div class="layui-card-body layuiadmin-card-list">
  74. <p class="layuiadmin-big-font">{$first_line.d_price.data}</p>
  75. <p>
  76. 今日课程交易额
  77. <span class="layuiadmin-span-color">
  78. {$first_line.d_price.percent}%
  79. {if condition='$first_line.d_price.is_plus egt 0'}<i class="fa {if condition='$first_line.d_price.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  80. </span>
  81. </p>
  82. </div>
  83. </div>
  84. </div>
  85. <div class="layui-col-md3">
  86. <div class="layui-card">
  87. <div class="layui-card-header">商品订单<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  88. <div class="layui-card-body layuiadmin-card-list">
  89. <p class="layuiadmin-big-font">{$first_line.d_store_num.data}</p>
  90. <p>
  91. 今日商品订单
  92. <span class="layuiadmin-span-color">
  93. {$first_line.d_store_num.percent}%
  94. {if condition='$first_line.d_store_num.is_plus egt 0'}<i class="fa {if condition='$first_line.d_store_num.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  95. </span>
  96. </p>
  97. </div>
  98. </div>
  99. </div>
  100. <div class="layui-col-md3">
  101. <div class="layui-card">
  102. <div class="layui-card-header">商品收入<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  103. <div class="layui-card-body layuiadmin-card-list">
  104. <p class="layuiadmin-big-font">{$first_line.d_store_price.data}</p>
  105. <p>
  106. 今日商品交易额
  107. <span class="layuiadmin-span-color">
  108. {$first_line.d_store_price.percent}%
  109. {if condition='$first_line.d_store_price.is_plus egt 0'}<i class="fa {if condition='$first_line.d_store_price.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  110. </span>
  111. </p>
  112. </div>
  113. </div>
  114. </div>
  115. <div class="layui-col-md3">
  116. <div class="layui-card">
  117. <div class="layui-card-header">资料订单<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  118. <div class="layui-card-body layuiadmin-card-list">
  119. <p class="layuiadmin-big-font">{$first_line.d_store_num.data}</p>
  120. <p>
  121. 今日资料订单
  122. <span class="layuiadmin-span-color">
  123. {$first_line.d_store_num.percent}%
  124. {if condition='$first_line.d_store_num.is_plus egt 0'}<i class="fa {if condition='$first_line.d_store_num.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  125. </span>
  126. </p>
  127. </div>
  128. </div>
  129. </div>
  130. <div class="layui-col-md3">
  131. <div class="layui-card">
  132. <div class="layui-card-header">资料收入<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  133. <div class="layui-card-body layuiadmin-card-list">
  134. <p class="layuiadmin-big-font">{$first_line.d_store_price.data}</p>
  135. <p>
  136. 今日资料交易额
  137. <span class="layuiadmin-span-color">
  138. {$first_line.d_store_price.percent}%
  139. {if condition='$first_line.d_store_price.is_plus egt 0'}<i class="fa {if condition='$first_line.d_store_price.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  140. </span>
  141. </p>
  142. </div>
  143. </div>
  144. </div>
  145. <div class="layui-col-md3">
  146. <div class="layui-card">
  147. <div class="layui-card-header">活动订单<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  148. <div class="layui-card-body layuiadmin-card-list">
  149. <p class="layuiadmin-big-font">{$first_line.d_store_num.data}</p>
  150. <p>
  151. 今日活动订单
  152. <span class="layuiadmin-span-color">
  153. {$first_line.d_store_num.percent}%
  154. {if condition='$first_line.d_store_num.is_plus egt 0'}<i class="fa {if condition='$first_line.d_store_num.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  155. </span>
  156. </p>
  157. </div>
  158. </div>
  159. </div>
  160. <div class="layui-col-md3">
  161. <div class="layui-card">
  162. <div class="layui-card-header">活动收入<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  163. <div class="layui-card-body layuiadmin-card-list">
  164. <p class="layuiadmin-big-font">{$first_line.d_store_price.data}</p>
  165. <p>
  166. 今日活动交易额
  167. <span class="layuiadmin-span-color">
  168. {$first_line.d_store_price.percent}%
  169. {if condition='$first_line.d_store_price.is_plus egt 0'}<i class="fa {if condition='$first_line.d_store_price.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  170. </span>
  171. </p>
  172. </div>
  173. </div>
  174. </div>
  175. <div class="layui-col-md3">
  176. <div class="layui-card">
  177. <div class="layui-card-header">考试订单<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  178. <div class="layui-card-body layuiadmin-card-list">
  179. <p class="layuiadmin-big-font">{$first_line.d_test_num.data}</p>
  180. <p>
  181. 今日考试订单
  182. <span class="layuiadmin-span-color">
  183. {$first_line.d_test_num.percent}%
  184. {if condition='$first_line.d_test_num.is_plus egt 0'}<i class="fa {if condition='$first_line.d_test_num.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  185. </span>
  186. </p>
  187. </div>
  188. </div>
  189. </div>
  190. <div class="layui-col-md3">
  191. <div class="layui-card">
  192. <div class="layui-card-header">考试收入<span class="layui-badge layui-bg-blue layuiadmin-badge">今</span></div>
  193. <div class="layui-card-body layuiadmin-card-list">
  194. <p class="layuiadmin-big-font">{$first_line.d_test_price.data}</p>
  195. <p>
  196. 今日考试交易额
  197. <span class="layuiadmin-span-color">
  198. {$first_line.d_test_price.percent}%
  199. {if condition='$first_line.d_test_price.is_plus egt 0'}<i class="fa {if condition='$first_line.d_test_price.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
  200. </span>
  201. </p>
  202. </div>
  203. </div>
  204. </div>
  205. <div class="layui-col-md12">
  206. <div class="layui-card">
  207. <div class="layui-card-body">
  208. <div class="layui-row">
  209. <div class="layui-col-md9">
  210. <div class="layui-card">
  211. <div class="layui-card-header">
  212. <div class="layui-btn-group">
  213. <button type="button" :class="[type == '0' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-sm']" @click="getlisttype('0')">课程</button>
  214. <button type="button" :class="[type == '2' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-sm']" @click="getlisttype('2')">商城</button>
  215. <button type="button" :class="[type == '3' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-sm']" @click="getlisttype('3')">资料</button>
  216. <button type="button" :class="[type == '4' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-sm']" @click="getlisttype('4')">考试</button>
  217. <button type="button" :class="[type == '5' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-sm']" @click="getlisttype('5')">报名</button>
  218. </div>
  219. </div>
  220. <div class="layui-card-body">
  221. <div class="flot-chart-content echarts" ref="order_echart"></div>
  222. </div>
  223. </div>
  224. </div>
  225. <div class="layui-col-md3">
  226. <div class="layui-card">
  227. <div class="layui-card-header">
  228. {{typename}}订单--{{cyclename}}
  229. <div class="layui-btn-group layuiadmin-btn-group">
  230. <button type="button" :class="[active == 'thirtyday' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-xs']" @click="getlist('thirtyday')">30天</button>
  231. <button type="button" :class="[active == 'week' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-xs']" @click="getlist('week')">周</button>
  232. <button type="button" :class="[active == 'month' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-xs']" @click="getlist('month')">月</button>
  233. <button type="button" :class="[active == 'year' ? 'layui-btn-normal' : 'layui-btn-primary', 'layui-btn layui-btn-xs']" @click="getlist('year')">年</button>
  234. </div>
  235. </div>
  236. <div class="layui-card-body">
  237. <ul class="stat-list" style="height: 280px;">
  238. <li>
  239. <h2 class="no-margins ">{{pre_cycleprice}}</h2>
  240. <small>{{precyclename}}销售额</small>
  241. </li>
  242. <li>
  243. <h2 class="no-margins ">{{cycleprice}}</h2>
  244. <small>{{cyclename}}销售额</small>
  245. <div class="stat-percent text-navy" v-if='cycleprice_is_plus ===1'>
  246. {{cycleprice_percent}}%
  247. <i class="fa fa-level-up"></i>
  248. </div>
  249. <div class="stat-percent text-danger" v-else-if='cycleprice_is_plus === -1'>
  250. {{cycleprice_percent}}%
  251. <i class="fa fa-level-down"></i>
  252. </div>
  253. <div class="stat-percent" v-else>
  254. {{cycleprice_percent}}%
  255. </div>
  256. <div class="progress progress-mini">
  257. <div :style="{width:cycleprice_percent+'%'}" class="progress-bar box"></div>
  258. </div>
  259. </li>
  260. <li>
  261. <h2 class="no-margins ">{{pre_cyclecount}}</h2>
  262. <small>{{precyclename}}订单总数</small>
  263. </li>
  264. <li>
  265. <h2 class="no-margins">{{cyclecount}}</h2>
  266. <small>{{cyclename}}订单总数</small>
  267. <div class="stat-percent text-navy" v-if='cyclecount_is_plus ===1'>
  268. {{cyclecount_percent}}%
  269. <i class="fa fa-level-up"></i>
  270. </div>
  271. <div class="stat-percent text-danger" v-else-if='cyclecount_is_plus === -1'>
  272. {{cyclecount_percent}}%
  273. <i class="fa fa-level-down"></i>
  274. </div>
  275. <div class="stat-percent " v-else>
  276. {{cyclecount_percent}}%
  277. </div>
  278. <div class="progress progress-mini">
  279. <div :style="{width:cyclecount_percent+'%'}" class="progress-bar box"></div>
  280. </div>
  281. </li>
  282. </ul>
  283. </div>
  284. </div>
  285. </div>
  286. </div>
  287. </div>
  288. </div>
  289. </div>
  290. </div>
  291. </div>
  292. </div>
  293. {/block}
  294. {block name="script"}
  295. <script>
  296. require(['vue','axios','layer'],function(Vue,axios,layer){
  297. new Vue({
  298. el:"#app",
  299. data:{
  300. option:{},
  301. myChart:{},
  302. active:'thirtyday',
  303. cyclename:'最近30天',
  304. precyclename:'上个30天',
  305. cyclecount:0,
  306. cycleprice:0,
  307. cyclecount_percent:0,
  308. cycleprice_percent:0,
  309. cyclecount_is_plus:0,
  310. cycleprice_is_plus:0,
  311. pre_cyclecount:0,
  312. pre_cycleprice:0,
  313. type:0,//0:课程 1:会员 2:商城 3:资料 4:考试 5:报名 6:充值
  314. typename:'课程',
  315. cycle:'week',
  316. masks:false
  317. },
  318. methods:{
  319. getlisttype:function(type)
  320. {
  321. var that=this;
  322. that.type=type;
  323. switch (type) {
  324. case '0':
  325. that.typename='课程';
  326. break;
  327. case '1':
  328. that.typename='会员';
  329. break;
  330. case '2':
  331. that.typename='商城';
  332. break;
  333. case '3':
  334. that.typename='资料';
  335. break;
  336. case '4':
  337. that.typename='考试';
  338. break;
  339. case '5':
  340. that.typename='报名';
  341. break;
  342. case '6':
  343. that.typename='充值';
  344. break;
  345. }
  346. that.getlist(that.cycle);
  347. },
  348. getlist:function (e) {
  349. var that=this;
  350. var cycle = e!=null ? e :'week';
  351. that.cycle=cycle;
  352. axios.get("{:Url('orderchart')}?cycle="+cycle+'&type='+this.type).then(function(res){
  353. that.myChart.order_echart.clear();
  354. that.myChart.order_echart.setOption(that.orderchartsetoption(res.data.data));
  355. that.active = cycle;
  356. switch (cycle){
  357. case 'thirtyday':
  358. that.cyclename = '最近30天';
  359. that.precyclename = '上个30天';
  360. break;
  361. case 'week':
  362. that.cyclename = '本周';
  363. that.precyclename = '上周';
  364. break;
  365. case 'month':
  366. that.cyclename = '本月';
  367. that.precyclename = '上月';
  368. break;
  369. case 'year':
  370. that.cyclename = '今年';
  371. that.precyclename = '去年';
  372. break;
  373. default:
  374. break;
  375. }
  376. var data = res.data.data || {cycle:{count:{},price:{}},pre_cycle:{price:{},count:{}}};
  377. if(!Array.isArray(data)){
  378. that.cyclecount = data.cycle.count.data;
  379. that.cyclecount_percent = data.cycle.count.percent;
  380. that.cyclecount_is_plus = data.cycle.count.is_plus;
  381. that.cycleprice = data.cycle.price.data;
  382. that.cycleprice_percent = data.cycle.price.percent;
  383. that.cycleprice_is_plus = data.cycle.price.is_plus;
  384. that.pre_cyclecount = data.pre_cycle.count.data;
  385. that.pre_cycleprice = data.pre_cycle.price.data;
  386. }else{
  387. that.cyclecount = 0;
  388. that.cyclecount_percent = 0;
  389. that.cyclecount_is_plus = 0;
  390. that.cycleprice = 0;
  391. that.cycleprice_percent = 0;
  392. that.cycleprice_is_plus = 0;
  393. that.pre_cyclecount = 0;
  394. that.pre_cycleprice = 0;
  395. }
  396. });
  397. },
  398. orderchartsetoption:function(data){
  399. if(data === undefined){
  400. data = {} ;
  401. }
  402. this.option = {
  403. tooltip: {
  404. trigger: 'axis',
  405. axisPointer: {
  406. type: 'cross',
  407. crossStyle: {
  408. color: '#999'
  409. }
  410. }
  411. },
  412. toolbox: {
  413. feature: {
  414. dataView: {show: true, readOnly: false},
  415. magicType: {show: true, type: ['line', 'bar']},
  416. restore: {show: false},
  417. saveAsImage: {show: true}
  418. }
  419. },
  420. legend: {
  421. data: data.legend !== undefined ? data.legend : []
  422. },
  423. grid: {
  424. x: 70,
  425. x2: 50,
  426. y: 60,
  427. y2: 50
  428. },
  429. xAxis: [
  430. {
  431. type: 'category',
  432. data: data.xAxis,
  433. axisPointer: {
  434. type: 'shadow'
  435. },
  436. axisLabel:{
  437. interval: 0,
  438. rotate:40
  439. }
  440. }
  441. ],
  442. yAxis:[{type : 'value',interval: 1000}],
  443. series: data.series
  444. };
  445. return this.option;
  446. },
  447. setChart:function(name,myChartname){
  448. this.myChart[myChartname] = echarts.init(name,'macarons');//初始化echart
  449. }
  450. },
  451. mounted:function () {
  452. var self = this;
  453. this.setChart(self.$refs.order_echart,'order_echart');//订单图表
  454. this.getlist();
  455. window.onresize = function() {
  456. self.myChart.order_echart.resize();
  457. };
  458. }
  459. });
  460. });
  461. </script>
  462. {/block}