index.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  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. timeType: '2'
  34. }; //搜索参数
  35. _this.config = {};
  36. _this.where = obj.where;
  37. _this.config.dateTime = obj.dateTime;
  38. _this.dateTime = {
  39. year: 365 * 1 * 24 * 3600 * 1000,
  40. month: 30 * 1 * 24 * 3600 * 1000,
  41. day: 24 * 3600 * 1000,
  42. }
  43. _this.main();
  44. };
  45. //入口函数
  46. vm.prototype.main = function() {
  47. var _this = this;
  48. _this.initializationData();
  49. _this.lineChartShow();
  50. _this.totalShow();
  51. };
  52. //初始化表格
  53. vm.prototype.initializationData = function() {
  54. var _this = this;
  55. _this.dataListObj = table.render({
  56. id: _this.dataId,
  57. elem: _this.elem,
  58. toolbar: _this.toolbar,
  59. defaultToolbar: ['filter'],
  60. url: _this.url,
  61. page: _this.page,
  62. cols: _this.cols,
  63. done: _this.done,
  64. where: $.extend(_this.where, _this.searchParameter),
  65. limit: _this.limit,
  66. });
  67. };
  68. //重新加载数据表
  69. vm.prototype.reload = function() {
  70. var _this = this;
  71. _this.dataListObj = table.reload(_this.dataId, { //执行重载数据表
  72. where: _this.searchParameter,
  73. page: {
  74. curr: 1
  75. }
  76. });
  77. };
  78. //初始化组件
  79. vm.prototype.initializationModule = function(obj) {
  80. var _this = this;
  81. $.ajax({
  82. url: obj.url,
  83. data: obj.data,
  84. success: function(res) {
  85. var html = '<option value="">' + obj.prompt + '</option>';
  86. for (var i in res.data) {
  87. html += '<option value="' + res.data[i].id + '">' + res.data[i].name +
  88. '</option>';
  89. }
  90. $(obj.elem).html(html);
  91. form.render();
  92. }
  93. });
  94. };
  95. //初始化事件监听
  96. vm.prototype.eventMonitor = function(id) {
  97. var _this = this;
  98. //监听搜索表单事件
  99. if (typeof(_this.formEvent) == "object") {
  100. for (let i = 0; i < _this.formEvent.length; i++) {
  101. form.on('submit(' + _this.formEvent[i] + ')', function(obj) {
  102. _this.formInfoSearch(_this.formEvent[i], obj);
  103. return false;
  104. });
  105. }
  106. }
  107. //监听类别切换事件
  108. if (typeof(_this.tabEvent) == "object") {
  109. for (let i = 0; i < _this.tabEvent.length; i++) {
  110. form.on('submit(' + _this.tabEvent[i] + ')', function(obj) {
  111. _this.tabInfoSearch(_this.tabEvent[i], obj);
  112. return false;
  113. });
  114. }
  115. }
  116. return _this;
  117. };
  118. //jquer事件绑定
  119. vm.prototype.$event = function() {
  120. var _this = this;
  121. //监听头部工具栏
  122. table.on('toolbar(' + _this.dataId + ')', function(obj) {
  123. switch (obj.event) {
  124. case 'export':
  125. _this.dataExport();
  126. break;
  127. };
  128. });
  129. };
  130. vm.prototype.lineChartShow = function() {
  131. var _this = this;
  132. $.ajax({
  133. url: "singleOrderVolumeUrl",
  134. data: {
  135. timeType: _this.searchParameter.timeType
  136. },
  137. success: function(res) {
  138. console.log(res)
  139. if (res.code == 0) {
  140. let seriesData1 = [],
  141. seriesData2 = [],
  142. xAxisData = []
  143. for (let i = 0; i < res.data.length; i++) {
  144. xAxisData.push(res.data[i].time);
  145. seriesData1.push(res.data[i].orders);
  146. seriesData2.push(res.data[i].rateOfIncrease);
  147. }
  148. _this.lineChart = echarts.init(document.getElementById('goodsChart'));
  149. var option = {
  150. color: ['#1E9FFF', '#e34c4c'],
  151. tooltip: {
  152. trigger: 'axis',
  153. },
  154. color: ['#5FB878', '#1E9FFF'],
  155. legend: {
  156. data: ['下单量', '增长率']
  157. },
  158. grid: {
  159. left: '2%',
  160. right: '1%',
  161. bottom: '2%',
  162. top: '20%',
  163. containLabel: true
  164. },
  165. xAxis: [{
  166. type: 'category',
  167. data: xAxisData,
  168. axisPointer: {
  169. type: 'shadow'
  170. },
  171. axisLine: {
  172. show: false
  173. },
  174. axisTick: {
  175. show: false
  176. }
  177. }],
  178. yAxis: [{
  179. type: 'value',
  180. name: '下单量',
  181. axisLabel: {
  182. formatter: '{value}'
  183. },
  184. axisLine: {
  185. show: false
  186. },
  187. axisTick: {
  188. show: false
  189. }
  190. },
  191. {
  192. type: 'value',
  193. name: '增长率',
  194. axisLabel: {
  195. formatter: '{value}'
  196. },
  197. axisLine: {
  198. show: false
  199. },
  200. axisTick: {
  201. show: false
  202. }
  203. }
  204. ],
  205. series: [{
  206. name: '下单量',
  207. type: 'bar',
  208. barMaxWidth: 35,
  209. barGap: 0,
  210. data: seriesData1,
  211. itemStyle: {
  212. normal: {
  213. barBorderRadius: 20,
  214. },
  215. },
  216. },
  217. {
  218. name: '增长率',
  219. type: 'line',
  220. yAxisIndex: 1,
  221. data: seriesData2,
  222. smooth: true
  223. }
  224. ]
  225. };
  226. _this.lineChart.setOption(option);
  227. _this.lineChart.resize();
  228. window.addEventListener("resize", () => {
  229. _this.lineChart.resize();
  230. });
  231. }
  232. }
  233. });
  234. };
  235. vm.prototype.totalShow = function() {
  236. var _this = this;
  237. $.ajax({
  238. type: 'get',
  239. url: "singleGoodsTotalUrl",
  240. data: {
  241. timeType: _this.searchParameter.timeType
  242. },
  243. success: function(res) {
  244. console.log(res)
  245. typeTpl({
  246. elem: ".goodsTotal",
  247. tpl: totalTpl,
  248. data: res.data[0]
  249. });
  250. },
  251. })
  252. };
  253. //模板引擎
  254. function typeTpl(obj) {
  255. laytpl(obj.tpl.innerHTML).render(obj.data, function(html) {
  256. $(obj.elem).html(html);
  257. });
  258. }
  259. // 单品分析
  260. var singleGoodsTableVm = new vm({
  261. dataId: 'singleGoodsTableData',
  262. elem: '#singleGoodsTableData',
  263. url: 'singleGoodsTableUrl',
  264. page: true,
  265. where: {
  266. beginTime: '',
  267. endTime: '',
  268. timeType: 1,
  269. },
  270. cols: [
  271. [{
  272. field: 'productName',
  273. title: '农产品名称',
  274. align: 'center'
  275. }, {
  276. field: 'avgPrice',
  277. title: '成交价格(元)',
  278. align: 'center'
  279. }, {
  280. field: 'usersNumber',
  281. title: '支付人数',
  282. align: 'center'
  283. }, {
  284. field: 'ordersNumber',
  285. title: '支付订单数',
  286. align: 'center'
  287. }, {
  288. field: 'amount',
  289. title: '成交金额(元)',
  290. align: 'center'
  291. }]
  292. ]
  293. });
  294. //初始化事件监听
  295. singleGoodsTableVm.formEvent = ['day1', 'month1', 'week1', 'range1'];
  296. singleGoodsTableVm.eventMonitor();
  297. singleGoodsTableVm.$event();
  298. });