index.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. ;
  2. layui.config({
  3. base: "../../../admin/js/layuiPlugins/"
  4. }).use(['form', 'layer', 'jquery', 'laypage', 'element', 'table', 'laydate', 'laytpl', 'cascade'], function() {
  5. var form = layui.form,
  6. layer = layui.layer,
  7. laytpl = layui.laytpl,
  8. laypage = layui.laypage,
  9. $ = layui.jquery,
  10. table = layui.table,
  11. element = layui.element,
  12. laydate = layui.laydate,
  13. cascade = layui.cascade;
  14. //自定义验证
  15. form.verify({
  16. namelength: [
  17. /^.{0,18}$/,
  18. "长度限制在0-18个字符噢"
  19. ]
  20. });
  21. var vm = function(obj) {
  22. var _this = this;
  23. _this.dataId = obj.dataId || 'dataListId'; //数据表ID
  24. _this.elem = obj.elem || 'dataListBox'; //数据表容器
  25. _this.toolbar = obj.toolbar || '';
  26. _this.url = obj.url || ''; //数据表接口URL
  27. _this.page = obj.page; //分页
  28. _this.limit = obj.limit;
  29. _this.cols = obj.cols || []; //表头
  30. _this.done = obj.done || ''; //表头
  31. _this.formObj = {}; //当前表单对象
  32. _this.searchParameter = {}; //搜索参数
  33. _this.config = {};
  34. _this.where = obj.where;
  35. _this.config.dateTime = obj.dateTime;
  36. _this.dateTime = {
  37. year: 365 * 1 * 24 * 3600 * 1000,
  38. month: 30 * 1 * 24 * 3600 * 1000,
  39. day: 24 * 3600 * 1000,
  40. }
  41. _this.main();
  42. };
  43. //入口函数
  44. vm.prototype.main = function() {
  45. var _this = this;
  46. laydate.render({
  47. elem: '#test6',
  48. range: true,
  49. btns: ['now','confirm'],
  50. done: function(value, date, endDate) {
  51. if (date.month < 10) {
  52. date.month = '0' + date.month
  53. }
  54. if (date.date < 10) {
  55. date.date = '0' + date.date
  56. }
  57. if (endDate.month < 10) {
  58. endDate.month = '0' + endDate.month
  59. }
  60. if (endDate.date < 10) {
  61. endDate.date = '0' + endDate.date
  62. }
  63. rankTableVm.searchParameter.timeType = '';
  64. rankTableVm.searchParameter.beginTime = date.year + '-' + date.month + '-' + date.date;
  65. rankTableVm.searchParameter.endTime = endDate.year + '-' + endDate.month + '-' + endDate.date;
  66. rankTableVm.reload();
  67. }
  68. });
  69. laydate.render({
  70. elem: '#test7',
  71. range: true,
  72. btns: ['now','confirm'],
  73. done: function(value, date, endDate) {
  74. if (date.month < 10) {
  75. date.month = '0' + date.month
  76. }
  77. if (date.date < 10) {
  78. date.date = '0' + date.date
  79. }
  80. if (endDate.month < 10) {
  81. endDate.month = '0' + endDate.month
  82. }
  83. if (endDate.date < 10) {
  84. endDate.date = '0' + endDate.date
  85. }
  86. singleGoodsTableVm.searchParameter.timeType = '';
  87. singleGoodsTableVm.searchParameter.beginTime = date.year + '-' + date.month + '-' + date.date;
  88. singleGoodsTableVm.searchParameter.endTime = endDate.year + '-' + endDate.month + '-' + endDate.date;
  89. _this.lineChartShow();
  90. _this.totalShow();
  91. singleGoodsTableVm.reload();
  92. }
  93. });
  94. //监听一级Tab切换
  95. element.on('tab(tabBrief)', function(obj) {
  96. console.log('12', obj)
  97. switch (obj.index) {
  98. case 0:
  99. $('#rankBtn button').eq(0).removeClass('layui-btn-primary').siblings().addClass('layui-btn-primary');
  100. rankTableVm.reload();
  101. break;
  102. case 1:
  103. $('#singleGoodsBtn button').eq(0).removeClass('layui-btn-primary').siblings().addClass('layui-btn-primary');
  104. singleGoodsTableVm.searchParameter.timeType = 1
  105. _this.lineChartShow();
  106. _this.totalShow();
  107. singleGoodsTableVm.reload();
  108. break;
  109. }
  110. });
  111. _this.initializationData();
  112. };
  113. //初始化表格
  114. vm.prototype.initializationData = function() {
  115. var _this = this;
  116. _this.dataListObj = table.render({
  117. id: _this.dataId,
  118. elem: _this.elem,
  119. toolbar: _this.toolbar,
  120. defaultToolbar: ['filter'],
  121. url: _this.url,
  122. page: _this.page,
  123. cols: _this.cols,
  124. done: _this.done,
  125. where: $.extend(_this.where, _this.searchParameter),
  126. limit: _this.limit,
  127. });
  128. };
  129. //重新加载数据表
  130. vm.prototype.reload = function() {
  131. var _this = this;
  132. _this.dataListObj = table.reload(_this.dataId, { //执行重载数据表
  133. where: _this.searchParameter,
  134. page: {
  135. curr: 1
  136. }
  137. });
  138. };
  139. //初始化组件
  140. vm.prototype.initializationModule = function(obj) {
  141. var _this = this;
  142. $.ajax({
  143. url: obj.url,
  144. data: obj.data,
  145. success: function(res) {
  146. var html = '<option value="">' + obj.prompt + '</option>';
  147. for (var i in res.data) {
  148. html += '<option value="' + res.data[i].id + '">' + res.data[i].name +
  149. '</option>';
  150. }
  151. $(obj.elem).html(html);
  152. form.render();
  153. }
  154. });
  155. };
  156. //初始化事件监听
  157. vm.prototype.eventMonitor = function(id) {
  158. var _this = this;
  159. //监听搜索表单事件
  160. if (typeof(_this.formEvent) == "object") {
  161. for (let i = 0; i < _this.formEvent.length; i++) {
  162. form.on('submit(' + _this.formEvent[i] + ')', function(obj) {
  163. _this.formInfoSearch(_this.formEvent[i], obj);
  164. return false;
  165. });
  166. }
  167. }
  168. //监听类别切换事件
  169. if (typeof(_this.tabEvent) == "object") {
  170. for (let i = 0; i < _this.tabEvent.length; i++) {
  171. form.on('submit(' + _this.tabEvent[i] + ')', function(obj) {
  172. _this.tabInfoSearch(_this.tabEvent[i], obj);
  173. return false;
  174. });
  175. }
  176. }
  177. return _this;
  178. };
  179. //搜索处理函数
  180. vm.prototype.formInfoSearch = function(id, obj) {
  181. var _this = this;
  182. $(obj.elem).removeClass('layui-btn-primary').siblings().addClass('layui-btn-primary');
  183. if (obj.elem.name == 4) {
  184. return false
  185. }
  186. obj.field.timeType = obj.elem.name || 1;
  187. _this.searchParameter = obj.field;
  188. if (_this.dataId == "singleGoodsTableData") {
  189. _this.lineChartShow();
  190. _this.totalShow();
  191. }
  192. _this.reload();
  193. };
  194. vm.prototype.tabInfoSearch = function(id, obj) {
  195. var _this = this;
  196. console.log(_this)
  197. $(obj.elem).removeClass('layui-btn-primary').siblings().addClass('layui-btn-primary');
  198. obj.field.timeType = 1;
  199. _this.searchParameter = obj.field;
  200. if (id == 'goods') {
  201. table.reload(tableId, {
  202. url: 'goodsTableUrl',
  203. cols: [
  204. [{
  205. type: 'numbers',
  206. title: '排名',
  207. width: 80
  208. }, {
  209. field: 'name',
  210. title: '商品名称'
  211. }, {
  212. field: 'buyers',
  213. title: '支付买家数',
  214. align: 'center'
  215. }, {
  216. field: 'orders',
  217. title: '支付订单数',
  218. align: 'center'
  219. }, {
  220. field: 'dealAmount',
  221. title: '成交金额(元)',
  222. align: 'center'
  223. }]
  224. ]
  225. })
  226. } else if (id == 'seller') {
  227. table.reload(tableId, {
  228. url: 'sellerTableUrl',
  229. cols: [
  230. [{
  231. type: 'numbers',
  232. title: '排名',
  233. width: 80
  234. }, {
  235. field: 'name',
  236. title: '商户名称'
  237. }, {
  238. field: 'buyers',
  239. title: '支付买家数',
  240. align: 'center'
  241. }, {
  242. field: 'orders',
  243. title: '支付订单数',
  244. align: 'center'
  245. }, {
  246. field: 'dealAmount',
  247. title: '成交金额(元)',
  248. align: 'center'
  249. }]
  250. ]
  251. });
  252. }
  253. };
  254. //jquer事件绑定
  255. vm.prototype.$event = function() {
  256. var _this = this;
  257. //监听头部工具栏
  258. table.on('toolbar(' + _this.dataId + ')', function(obj) {
  259. switch (obj.event) {
  260. case 'export':
  261. _this.dataExport();
  262. break;
  263. };
  264. });
  265. };
  266. //数据导出处理函数
  267. vm.prototype.dataExport = function() {
  268. var _this = this;
  269. _this.downloadParameter = '?';
  270. for (var i in _this.dataListObj.config.where) {
  271. _this.downloadParameter += "&" + i + '=' + _this.dataListObj.config.where[i];
  272. }
  273. _this.startDownload();
  274. };
  275. //启动下载
  276. vm.prototype.startDownload = function() {
  277. var _this = this;
  278. window.open(window.hywa.config.href + window.hywa.config.port[_this.dataDownload] + _this.downloadParameter);
  279. };
  280. vm.prototype.lineChartShow = function() {
  281. var _this = this;
  282. $.ajax({
  283. url: "singleOrderVolumeUrl",
  284. data: {
  285. timeType: singleGoodsTableVm.searchParameter.timeType,
  286. beginTime: singleGoodsTableVm.searchParameter.beginTime,
  287. endTime: singleGoodsTableVm.searchParameter.endTime,
  288. },
  289. success: function(res) {
  290. console.log(res)
  291. if (res.code == 0) {
  292. let seriesData1 = [],
  293. seriesData2 = [],
  294. xAxisData = []
  295. for (let i = 0; i < res.data.length; i++) {
  296. xAxisData.push(res.data[i].time);
  297. seriesData1.push(res.data[i].orders);
  298. seriesData2.push(res.data[i].rateOfIncrease);
  299. }
  300. _this.lineChart = echarts.init(document.getElementById('goodsChart'));
  301. var option = {
  302. color: ['#1E9FFF', '#e34c4c'],
  303. tooltip: {
  304. trigger: 'axis',
  305. },
  306. color: ['#5FB878', '#1E9FFF'],
  307. legend: {
  308. data: ['下单量', '增长率']
  309. },
  310. grid: {
  311. left: '2%',
  312. right: '1%',
  313. bottom: '2%',
  314. top: '20%',
  315. containLabel: true
  316. },
  317. xAxis: [{
  318. type: 'category',
  319. data: xAxisData,
  320. axisPointer: {
  321. type: 'shadow'
  322. },
  323. axisLine: {
  324. show: false
  325. },
  326. axisTick: {
  327. show: false
  328. }
  329. }],
  330. yAxis: [{
  331. type: 'value',
  332. name: '下单量',
  333. axisLabel: {
  334. formatter: '{value}'
  335. },
  336. axisLine: {
  337. show: false
  338. },
  339. axisTick: {
  340. show: false
  341. }
  342. },
  343. {
  344. type: 'value',
  345. name: '增长率',
  346. axisLabel: {
  347. formatter: '{value}'
  348. },
  349. axisLine: {
  350. show: false
  351. },
  352. axisTick: {
  353. show: false
  354. }
  355. }
  356. ],
  357. series: [{
  358. name: '下单量',
  359. type: 'bar',
  360. barMaxWidth: 35,
  361. barGap: 0,
  362. data: seriesData1,
  363. itemStyle: {
  364. normal: {
  365. barBorderRadius: 20,
  366. },
  367. },
  368. },
  369. {
  370. name: '增长率',
  371. type: 'line',
  372. yAxisIndex: 1,
  373. data: seriesData2,
  374. smooth: true
  375. }
  376. ]
  377. };
  378. _this.lineChart.setOption(option);
  379. window.addEventListener("resize", () => {
  380. _this.lineChart.resize();
  381. });
  382. }
  383. }
  384. });
  385. };
  386. vm.prototype.totalShow = function() {
  387. var _this = this;
  388. $.ajax({
  389. type: 'get',
  390. url: "singleGoodsTotalUrl",
  391. data: {
  392. timeType: singleGoodsTableVm.searchParameter.timeType,
  393. beginTime: singleGoodsTableVm.searchParameter.beginTime,
  394. endTime: singleGoodsTableVm.searchParameter.endTime,
  395. },
  396. success: function(res) {
  397. console.log(res)
  398. typeTpl({
  399. elem: ".goodsTotal",
  400. tpl: totalTpl,
  401. data: res.data[0]
  402. });
  403. },
  404. })
  405. };
  406. //模板引擎
  407. function typeTpl(obj) {
  408. laytpl(obj.tpl.innerHTML).render(obj.data, function(html) {
  409. $(obj.elem).html(html);
  410. });
  411. }
  412. // 排行榜
  413. let tableId = "rankTableData"
  414. var rankTableVm = new vm({
  415. dataId: 'rankTableData',
  416. elem: '#rankTableData',
  417. url: 'goodsTableUrl',
  418. page: true,
  419. where: {
  420. beginTime: '',
  421. endTime: '',
  422. timeType: 1,
  423. },
  424. cols: [
  425. [{
  426. type: 'numbers',
  427. title: '排名',
  428. width: 80
  429. }, {
  430. field: 'name',
  431. title: '商品名称'
  432. }, {
  433. field: 'buyers',
  434. title: '支付买家数',
  435. align: 'center'
  436. }, {
  437. field: 'orders',
  438. title: '支付订单数',
  439. align: 'center'
  440. }, {
  441. field: 'dealAmount',
  442. title: '成交金额(元)',
  443. align: 'center'
  444. }]
  445. ]
  446. });
  447. //初始化事件监听
  448. rankTableVm.formEvent = ['day', 'month', 'week', 'range'];
  449. rankTableVm.tabEvent = ['goods', 'seller'];
  450. rankTableVm.eventMonitor();
  451. rankTableVm.$event();
  452. // 单品分析
  453. var singleGoodsTableVm = new vm({
  454. dataId: 'singleGoodsTableData',
  455. elem: '#singleGoodsTableData',
  456. url: 'singleGoodsTableUrl',
  457. page: true,
  458. where: {
  459. beginTime: '',
  460. endTime: '',
  461. timeType: 1,
  462. },
  463. cols: [
  464. [{
  465. field: 'productName',
  466. title: '农产品名称',
  467. align: 'center'
  468. }, {
  469. field: 'avgPrice',
  470. title: '成交价格(元)',
  471. align: 'center'
  472. }, {
  473. field: 'usersNumber',
  474. title: '支付人数',
  475. align: 'center'
  476. }, {
  477. field: 'ordersNumber',
  478. title: '支付订单数',
  479. align: 'center'
  480. }, {
  481. field: 'amount',
  482. title: '成交金额(元)',
  483. align: 'center'
  484. }]
  485. ]
  486. });
  487. //初始化事件监听
  488. singleGoodsTableVm.formEvent = ['day1', 'month1', 'week1', 'range1'];
  489. singleGoodsTableVm.eventMonitor();
  490. singleGoodsTableVm.$event();
  491. });