businessStats.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. app.controller('businessStatsCtrl', ['$scope', '$http', '$timeout', '$state', '$interval', 'uiGridConstants', 'i18nService', 'toaster', function ($scope, $http, $timeout, $state, $interval, uiGridConstants, i18nService, toaster) {
  2. i18nService.setCurrentLang("zh-cn");
  3. moment.locale('zh-cn');
  4. $scope.startTimeOpen = false;
  5. $scope.endTimeOpen = false;
  6. $scope.timeChange = function (newDate, oldDate) {
  7. $scope.startTimeOpen = false;
  8. $scope.endTimeOpen = false;
  9. };
  10. var defaultValue = {
  11. agent: {id: "", nickname: "-选择代理商-"},
  12. dealer: {value: "", label: "-选择经销商-"},
  13. };
  14. //下拉框数据
  15. $scope.condition = {
  16. agent: [defaultValue.agent],
  17. dealer: [defaultValue.dealer],
  18. };
  19. //查询条件
  20. $scope.query = {
  21. agent: defaultValue.agent,
  22. dealer: defaultValue.dealer,
  23. startTime: moment().format("YYYY-MM-DD"),
  24. endTime: moment().format("YYYY-MM-DD"),
  25. };
  26. //不传分页参数则获取全部代理商
  27. $http.get('/agent/getAgentsDetailList', {}).then(function (data) {
  28. $scope.condition.agent = data.data.payload.dataList;
  29. $scope.condition.agent.unshift(defaultValue.agent);//可以选空
  30. });
  31. function getCurrentTab() {
  32. var currentType = ""
  33. if ($state.current.url === "/charge") {
  34. currentType = "charge"
  35. }
  36. if ($state.current.url === "/chargeCard") {
  37. currentType = "chargeCard"
  38. }
  39. if ($state.current.url === "/consumption") {
  40. currentType = "consumption"
  41. }
  42. return currentType
  43. }
  44. // 路由状态监听有问题,暂时用定时器
  45. var timer1 = null
  46. $scope.getCurrentTabTimer = function () {
  47. if (timer1) {
  48. return
  49. }
  50. timer1 = $interval(function () {
  51. $scope.currentType = getCurrentTab()
  52. }, 1000)
  53. };
  54. $scope.$on("$destroy", function () {
  55. $interval.cancel(timer1)
  56. timer1 = null
  57. });
  58. $scope.getCurrentTabTimer()
  59. // angular 事件绑定
  60. $scope.ngEvent = {
  61. //初始化代理商
  62. changeAgent: function () {
  63. var id = $scope.query.agent.id;
  64. //无论是否选择了数据,都清空子级下拉框选中的项
  65. $scope.query.dealer = defaultValue.dealer;
  66. //无论怎么选择,都清空子下拉框的所有选项
  67. $scope.condition.dealer = [defaultValue.dealer];
  68. //如果选择了代理商,则加载经销商
  69. if (id) {
  70. $http.get('/ad/getDealerList', {params: {agentId: id}}).then(function (data) {
  71. $scope.condition.dealer = data.data.payload;
  72. $scope.condition.dealer.unshift(defaultValue.dealer);//可以选空
  73. });
  74. }
  75. },
  76. changeDealer: function () {
  77. },
  78. quickTime: function (event, passDay) {
  79. $scope.query.startTime = moment().add(-(passDay - 1), "day").format("YYYY-MM-DD");
  80. $scope.query.endTime = moment().format("YYYY-MM-DD");
  81. },
  82. //查询
  83. query: function () {
  84. if ($scope.query.startTime > $scope.query.endTime) {
  85. toaster.pop("info", "提示", "开始时间必须小于结束时间!");
  86. return;
  87. }
  88. $scope.refreshTableData();
  89. },
  90. exportExcelOpen: false,
  91. //导出
  92. exportExcel: function () {
  93. var params = {
  94. type: getCurrentTab()
  95. };
  96. var query = $scope.query;
  97. params.agentId = query.agent.id
  98. params.dealerId = query.dealer.value
  99. params.startTime = query.startTime
  100. params.endTime = query.endTime
  101. if ($scope.ngEvent.exportExcelOpen) {
  102. toaster.pop("info", "提示", "有一份报表正在生成,请稍候!");
  103. return;
  104. } else {
  105. $scope.ngEvent.exportExcelOpen = true;
  106. }
  107. $http.get('/manager/exportExcel', {params: params}).then(function (data) {
  108. data = data.data
  109. $scope.ngEvent.exportExcelOpen = false;
  110. if (data.result == 1) {
  111. var payload = data.payload;
  112. toaster.pop("success", data.description);
  113. $state.go('app.tool.offlineTask', {
  114. searchKey: payload
  115. });
  116. }
  117. }).catch(function (data) {
  118. $scope.ngEvent.exportExcelOpen = false;
  119. if (data.status == 504) {
  120. toaster.pop("error", "计算超时,请前往任务->执行离线生成报表");
  121. } else {
  122. toaster.pop("error", "系统错误,请重试");
  123. }
  124. });
  125. }
  126. };
  127. // 通知刷新子页面数据
  128. $scope.refreshTableData = function () {
  129. $scope.$broadcast("refreshTableData");
  130. };
  131. // 订单统计
  132. var businessChartPanel;
  133. $scope.showChart = function (apiType) {
  134. $("#chartInfoPanel").modal();
  135. apiType === 'order' ? $scope.dialogName = '用户订单统计' : $scope.dialogName = '用户活跃度统计'
  136. //展示趋势图
  137. businessChartPanel = echarts.init(document.getElementById('businessChartPanel')); //resize事件绑定
  138. $(window).off("resize.businessChartPanel").on("resize.businessChartPanel", function () {
  139. businessChartPanel.resize();
  140. });
  141. loadChartData(apiType);
  142. $(window).trigger('resize')
  143. };
  144. $scope.closeChart = function () {
  145. $("#chartInfoPanel").modal('hide');
  146. };
  147. //按条件加载统计图
  148. var loadChartData = $scope.loadChartData = function (apiType) {
  149. var params = {type: getCurrentTab()};
  150. var query = $scope.query;
  151. params.agentId = query.agent.id
  152. params.dealerId = query.dealer.value
  153. params.startTime = query.startTime
  154. params.endTime = query.endTime
  155. var mask = new Mask("正在统计,请稍候...");
  156. mask.show(true).dom.css({'z-index': 1060});
  157. var url = '/manager/getBusinessTrend';
  158. if (apiType === 'userActivity') {
  159. url = '/manager/getUserActivityTrend';
  160. }
  161. //获取数据
  162. $http.get(url, {
  163. params: params
  164. }).then(function (data) {
  165. mask.remove();
  166. var payload = data.data.payload
  167. var option = setChartOption(payload.dataList, apiType);
  168. businessChartPanel.setOption(option);
  169. });
  170. };
  171. //趋势自定义样式
  172. function setChartOption(dataList, apiType) {
  173. var xData = [];
  174. var seriesData = [];
  175. for (var index in dataList) {
  176. var item = dataList[index]
  177. xData.push(moment(item.date).format("MM-DD"));
  178. seriesData.push(parseFloat(item.value));
  179. }
  180. var option = {
  181. legend: {
  182. show: false
  183. },
  184. tooltip: {
  185. trigger: 'axis',
  186. axisPointer: {
  187. lineStyle: {
  188. color: '#108EE9',
  189. width: .3,
  190. }
  191. }
  192. },
  193. grid: {
  194. x: 40,
  195. x2: 15,
  196. y: 45,
  197. y2: 40,
  198. },
  199. xAxis: [
  200. {
  201. type: 'category',
  202. axisLabel: {
  203. textStyle: {
  204. color: "#aaa",
  205. fontSize: "12px"
  206. }
  207. },
  208. axisTick: {
  209. show: false,
  210. },
  211. axisLine: {
  212. show: false,
  213. },
  214. data: xData
  215. }
  216. ],
  217. yAxis: [
  218. {
  219. type: 'value',
  220. axisLabel: {
  221. textStyle: {
  222. color: "#aaa",
  223. fontSize: "12px"
  224. }
  225. },
  226. axisTick: {
  227. show: false,
  228. },
  229. axisLine: {
  230. show: false,
  231. },
  232. splitLine: {
  233. lineStyle: {
  234. color: '#ccc',
  235. width: 0.3,
  236. type: 'dotted'
  237. }
  238. },
  239. },
  240. ],
  241. series: []
  242. };
  243. var name = apiType === 'order' ? '总额' : '总数'
  244. var color = apiType === 'order' ? '#ED6066' : '#07C160'
  245. option.series.push({
  246. name: name,
  247. type: 'bar',
  248. symbolSize: 0,
  249. itemStyle: {
  250. normal: {
  251. color: color,
  252. }
  253. },
  254. data: seriesData,
  255. });
  256. return option
  257. }
  258. }]);