adChart.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. app.controller('adChartCtrl', ['$scope', '$http', '$timeout', 'chartOptions', 'toaster', function ($scope, $http, $timeout, chartOptions, toaster) {
  2. moment.locale('zh-cn');
  3. $scope.startTimeOpen = false;
  4. $scope.endTimeOpen = false;
  5. $scope.timeChange = function (newDate, oldDate) {
  6. $scope.startTimeOpen = false;
  7. $scope.endTimeOpen = false;
  8. };
  9. var defaultValue = {
  10. agent: {id: "", nickname: "代理商"},
  11. dealer: {value: "", label: "经销商"},
  12. address: {value: "", label: "地址"},
  13. dev: {value: "", label: "设备"}
  14. }
  15. //下拉框数据
  16. $scope.condition = {
  17. agent: [defaultValue.agent],
  18. dealer: [defaultValue.dealer],
  19. address: [defaultValue.address],
  20. dev: [defaultValue.dev]
  21. };
  22. //查询条件
  23. $scope.query = {
  24. agent: defaultValue.agent,
  25. dealer: defaultValue.dealer,
  26. address: defaultValue.address,
  27. dev: defaultValue.dev,
  28. startTime: moment().format("YYYY-MM-DD"),
  29. endTime: moment().format("YYYY-MM-DD"),
  30. };
  31. //不传分页参数则获取全部代理商
  32. $http.get('/agent/getAgentsDetailList', {}).then(function (data) {
  33. data = data.data
  34. $scope.condition.agent = data.data.dataList;
  35. $scope.condition.agent.unshift({id: "", nickname: "-选择代理商-"});//可以选空
  36. });
  37. // angular 事件绑定
  38. $scope.ngEvent = {
  39. //初始化代理商
  40. changeAgent: function () {
  41. var id = $scope.query.agent.id;
  42. //无论是否选择了数据,都清空子级下拉框选中的项
  43. $scope.query.dealer = defaultValue.dealer;
  44. $scope.query.address = defaultValue.address;
  45. $scope.query.dev = defaultValue.dev;
  46. //无论怎么选择,都清空子下拉框的所有选项
  47. $scope.condition.dealer = [defaultValue.dealer];
  48. $scope.condition.address = [defaultValue.address];
  49. $scope.condition.dev = [defaultValue.dev];
  50. //如果选择了代理商,则加载经销商
  51. if (id) {
  52. $http.get('/ad/getDealerList', {params: {agentId: id}}).then(function (data) {
  53. data = data.data
  54. $scope.condition.dealer = data.data;
  55. $scope.condition.dealer.unshift(defaultValue.dealer);//可以选空
  56. });
  57. }
  58. },
  59. changeDealer: function () {
  60. var id = $scope.query.dealer.value;
  61. $scope.query.address = defaultValue.address;
  62. $scope.query.dev = defaultValue.dev;
  63. $scope.condition.address = [defaultValue.address];
  64. $scope.condition.dev = [defaultValue.dev];
  65. //加载地址下拉框
  66. id && $http.get('/ad/getAddressList', {params: {id: id}}).then(function (data) {
  67. data = data.data
  68. $scope.condition.address = data.data;
  69. $scope.condition.address.unshift(defaultValue.address);//可以选空
  70. });
  71. },
  72. changeAddress: function () {
  73. var id = $scope.query.address.value;
  74. $scope.query.dev = defaultValue.dev;
  75. $scope.condition.dev = [defaultValue.dev];
  76. //加载设备下拉框
  77. id && $http.get('/ad/getDevList', {params: {id: id}}).then(function (data) {
  78. data = data.data
  79. $scope.condition.dev = data.data;
  80. $scope.condition.dev.unshift(defaultValue.dev);//可以选空
  81. });
  82. },
  83. changeDev: function () {
  84. },
  85. quickTime: function (event, passDay) {
  86. $scope.query.startTime = moment().add("day", -(passDay - 1)).format("YYYY-MM-DD");
  87. $scope.query.endTime = moment().format("YYYY-MM-DD");
  88. },
  89. //查询
  90. query: function () {
  91. if ($scope.query.startTime > $scope.query.endTime) {
  92. toaster.pop("info", "提示", "开始时间必须小于结束时间!");
  93. return;
  94. }
  95. loadChartData($scope.query);
  96. }
  97. };
  98. /*******以下为echarts*********/
  99. var adChartPanelFans = echarts.init(document.getElementById('adChartPanelFans'));
  100. var adChartPanelMoney = echarts.init(document.getElementById('adChartPanelMoney'));
  101. //resize事件绑定
  102. $(window).off("resize.adChart").on("resize.adChart", function () {
  103. adChartPanelFans.resize();
  104. adChartPanelMoney.resize();
  105. });
  106. //按条件加载统计图
  107. function loadChartData(query) {
  108. var params = $.extend(true, {}, query);
  109. params.agentId = query.agent.id
  110. params.dealerId = query.dealer.value
  111. params.groupId = query.address.value
  112. params.devNo = query.dev.value
  113. delete params.address
  114. delete params.agent
  115. delete params.dealer
  116. delete params.dev
  117. //获取数据:加粉统计
  118. $http.get('/ad/getAdFansTrend', {params: params}).then(function (data) {
  119. data = data.data
  120. var transData = adapterFansData(data.data);
  121. var option = chartOptions.getLineOptions(transData.xData);
  122. customFansChart(option, transData);
  123. adChartPanelFans.setOption(option);
  124. });
  125. //获取数据:收益趋势统计
  126. $http.get('/ad/getAdMoneyTrend', {params: params}).then(function (data) {
  127. data = data.data
  128. var transData = adapterMoneyData(data.data);
  129. var option = chartOptions.getLineOptions(transData.xData);
  130. customMoneyChart(option, transData.yData);
  131. adChartPanelMoney.setOption(option);
  132. });
  133. }
  134. //初始化0条件加载一次
  135. loadChartData($scope.query);
  136. //数据适配
  137. function adapterFansData(data) {
  138. var fansCount = 0;
  139. var maleCount = 0;
  140. var femaleCount = 0;
  141. var xData = [];
  142. var yData = {show: [], click: [], fans: [], fansTotal: []};
  143. for (var i = 0; i < data.length; i++) {
  144. var item = data[i];
  145. xData.push(item.time);
  146. yData.show.push(item.show);
  147. yData.click.push(item.click);
  148. yData.fans.push(item.fans);
  149. yData.fansTotal.push(item.fansTotal);
  150. fansCount = fansCount + item.fans;
  151. maleCount = maleCount + item.maleFans;
  152. femaleCount = femaleCount + item.femaleFans;
  153. }
  154. return {
  155. xData: xData,
  156. yData: yData,
  157. fansCount: fansCount,
  158. maleCount: maleCount,
  159. femaleCount: femaleCount,
  160. }
  161. }
  162. //数据适配
  163. function adapterMoneyData(data) {
  164. var xData = [];
  165. var yData = [];
  166. for (var i = 0; i < data.length; i++) {
  167. var item = data[i];
  168. xData.push(item.time);
  169. yData.push(item.value);
  170. }
  171. return {
  172. xData: xData,
  173. yData: yData
  174. }
  175. }
  176. //粉丝趋势自定义样式
  177. function customFansChart(option, transData) {
  178. var yData = transData.yData;
  179. var fansCount = transData.fansCount;
  180. var maleCount = transData.maleCount;
  181. var femaleCount = transData.femaleCount;
  182. var unknownSexCount = fansCount - maleCount - femaleCount;
  183. option.grid.y = 80;
  184. option.title = {
  185. subtext: '吸粉总数:' + fansCount + ",男粉:" + maleCount + ",女粉:" + femaleCount + ", 未知: " + unknownSexCount,
  186. left: 'center',
  187. y: -30,
  188. textStyle: {},
  189. subtextStyle: {
  190. fontSize: 14,
  191. color: "#333"
  192. }
  193. };
  194. option.series = [
  195. {
  196. name: '展现',
  197. type: 'line',
  198. itemStyle: {normal: {color: "rgba(0,0,0,.2)"}},
  199. data: yData.show
  200. }, {
  201. name: '点击',
  202. type: 'line',
  203. itemStyle: {normal: {color: "#23B7E5"}},
  204. data: yData.click
  205. }, {
  206. name: '新粉',
  207. type: 'line',
  208. itemStyle: {normal: {color: "#27c24c"}},
  209. data: yData.fans
  210. },{
  211. name: '粉丝总数',
  212. type: 'line',
  213. itemStyle: {normal: {color: "#f05050"}},
  214. data: yData.fansTotal
  215. }
  216. ];
  217. option.legend = {
  218. data: ['粉丝总数', '新粉', '展现', '点击'],
  219. y: 50
  220. }
  221. }
  222. //收益趋势自定义样式
  223. function customMoneyChart(option, yData) {
  224. option.series = [
  225. {
  226. name: '收益',
  227. type: 'line',
  228. itemStyle: {normal: {color: "#23B7E5"}},
  229. data: yData
  230. }
  231. ];
  232. option.legend = {
  233. data: ['收益']
  234. }
  235. }
  236. }]);