dashboard.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902
  1. app.controller('dashboardCtrl', ['$scope', '$http', '$timeout', '$interval', 'toaster', 'chartOptions', function ($scope, $http, $timeout, $interval, toaster, chartOptions) {
  2. particlesJS.load('particles-js', '/1.0/vendor/libs/particles.json', function () {
  3. });
  4. //每4个字自动换行
  5. function autoBreak(str) {
  6. var lineNumber = 4;
  7. var w = $(window).width()
  8. if (w <= 1366) {
  9. lineNumber = 3
  10. } else if (w <= 1920) {
  11. lineNumber = 4
  12. } else if (w <= 4096) {
  13. lineNumber = 8
  14. }
  15. var newStr = '';
  16. for (var index = 0; index < str.length; index++) {
  17. var item = str[index]
  18. newStr = newStr + item
  19. if ((index + 1) % lineNumber === 0) {
  20. newStr = newStr + '\n'
  21. }
  22. }
  23. return newStr
  24. }
  25. /*******以下为echarts*********/
  26. var devChartPanelMap;
  27. var leftChart1;
  28. var leftChart2;
  29. var leftChart3;
  30. var rightChart1;
  31. var rightChart2;
  32. var rightChart3;
  33. var bottomChart;
  34. $timeout(function () {
  35. devChartPanelMap = echarts.init(document.getElementById('devChartPanelMap'));
  36. leftChart1 = echarts.init(document.getElementById('leftChart1'));
  37. leftChart2 = echarts.init(document.getElementById('leftChart2'));
  38. leftChart3 = echarts.init(document.getElementById('leftChart3'));
  39. rightChart1 = echarts.init(document.getElementById('rightChart1'));
  40. rightChart2 = echarts.init(document.getElementById('rightChart2'));
  41. rightChart3 = echarts.init(document.getElementById('rightChart3'));
  42. bottomChart = echarts.init(document.getElementById('bottomChart'));
  43. }, 1);
  44. $scope.chartHasLoad = false
  45. $scope.loadAllChart = function () {
  46. loadChartData();
  47. $scope.chartHasLoad = true
  48. }
  49. function resizeChart() {
  50. clearTimeout(timer);
  51. // resize有尺寸改变完后会有一定的延迟,会导致echarts提前渲染,依然是按照原来的尺寸渲染
  52. timer = setTimeout(function () {
  53. devChartPanelMap && devChartPanelMap.resize();
  54. leftChart1 && leftChart1.resize();
  55. leftChart2 && leftChart2.resize();
  56. leftChart3.resize();
  57. rightChart1.resize();
  58. rightChart2.resize();
  59. rightChart3.resize();
  60. bottomChart.resize();
  61. }, 300);
  62. }
  63. $scope.showData = {
  64. devBusy: 0,
  65. devOnline: 0,
  66. devOffline: 0,
  67. unregistered: 0
  68. };
  69. $interval(function () {
  70. setMapTime();
  71. }, 1000);
  72. function setMapTime() {
  73. $scope.showData.date = moment().format("YYYY年MM月DD日")
  74. $scope.showData.week = moment().format('dddd')
  75. $scope.showData.time = moment().format("HH:mm:ss")
  76. }
  77. setMapTime();
  78. var timer = null;
  79. //resize事件绑定
  80. $(window).off("resize.devChart").on("resize.devChart", function () {
  81. resizeChart();
  82. });
  83. var colorStopList = {
  84. blue: ['#57FFE0', '#3469E2'],
  85. red: ['#FF7671', '#A14AFF'],
  86. yellow: ['#FFEA4F', '#F89212'],
  87. green: ['#61E0B1', '#00B25E'],
  88. gray: ['#fff', '#cfcfcf'],
  89. purple: ['#D3B5DF', '#8865A5'],
  90. }
  91. function getColorStop(key) {
  92. return {
  93. colorStops: [{
  94. offset: 0,
  95. color: colorStopList[key][0] // 0% 处的颜色
  96. }, {
  97. offset: 1,
  98. color: colorStopList[key][1] // 100% 处的颜色
  99. }]
  100. }
  101. }
  102. $scope.optionConfig = {
  103. //坐标系的公共风格
  104. getLineOptionsForMap: function (xData, textBreak) {
  105. var option = {
  106. tooltip: {
  107. trigger: 'axis',
  108. axisPointer: {
  109. lineStyle: {
  110. color: '#108EE9',
  111. width: .3,
  112. }
  113. }
  114. },
  115. grid: {
  116. x: 52,
  117. x2: 15,
  118. y: 30,
  119. y2: textBreak ? 32 : 28,// 自动换行的X坐标需要展示2行,空间要多一点
  120. },
  121. xAxis: [
  122. {
  123. type: 'category',
  124. axisLabel: {
  125. textStyle: {
  126. color: "#fff",
  127. fontSize: "12px"
  128. }
  129. },
  130. axisTick: {
  131. show: false,
  132. },
  133. axisLine: {
  134. show: false,
  135. },
  136. data: xData.map(function (str) {
  137. if (textBreak) {
  138. return autoBreak(str)
  139. } else {
  140. return str
  141. }
  142. })
  143. }
  144. ],
  145. yAxis: [
  146. {
  147. type: 'value',
  148. axisLabel: {
  149. textStyle: {
  150. color: "#fff",
  151. fontSize: "12px"
  152. }
  153. },
  154. axisTick: {
  155. show: false,
  156. },
  157. axisLine: {
  158. show: false,
  159. },
  160. splitLine: {
  161. show: false,
  162. },
  163. },
  164. ],
  165. series: []
  166. };
  167. return option;
  168. },
  169. // pie的公共item风格
  170. getPieItemStyle: function () {
  171. var opt = {
  172. normal: {
  173. label: {
  174. show: true,
  175. position: 'outside',
  176. color: '#ddd',
  177. formatter: function (params) {
  178. return params.name + ':' + params.value;
  179. },
  180. rich: {
  181. white: {
  182. color: '#ddd',
  183. align: 'center',
  184. padding: [3, 0]
  185. }
  186. }
  187. },
  188. labelLine: {
  189. length: 8,
  190. length2: 12,
  191. show: true,
  192. }
  193. }
  194. };
  195. return opt
  196. },
  197. // 设置公告的 pictorialBar风格
  198. setPictorialBarStyle: function (option, yData, hasPercent) {
  199. var myColor = this.getColorList();
  200. if (!hasPercent) {
  201. myColor.reverse();
  202. }
  203. option.tooltip.formatter = function (params) {
  204. var param = params[0];
  205. var name = param.name.replace(/[\n]/g, '');//去掉换行符号
  206. var span = '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:' + param.color + ';"></span>';
  207. if (hasPercent) {
  208. return span + name + ":占比" + param.value + "%"
  209. } else {
  210. return span + name + ":" + param.value
  211. }
  212. };
  213. option.series.push({
  214. name: '消费次数',
  215. type: 'pictorialBar',
  216. barCategoryGap: '20%',
  217. // 可以在线测试 symbol,http://www.runoob.com/try/try.php?filename=trysvg_path2
  218. // 稍尖:M200 200 c20 -10,80 -40, 85 -180c5 140,65 170,85 180l-170 0Z
  219. // 很尖:M200 200 c50 -10,80 -40, 85 -180c5 140,35 170,85 180l-170 0Z
  220. symbol: 'path://M200 200 c20 -10,80 -40, 85 -180c5 140,65 170,85 180l-170 0Z',
  221. label: {
  222. normal: {
  223. show: true,
  224. position: 'top',
  225. formatter: function (param) {
  226. if (hasPercent) {
  227. return param.value + "%"
  228. } else {
  229. return param.value
  230. }
  231. },
  232. textStyle: {
  233. fontSize: '12',
  234. color: '#fff'
  235. }
  236. }
  237. },
  238. itemStyle: {
  239. normal: {
  240. color: function (params) {
  241. var num = myColor.length;
  242. return myColor[params.dataIndex % num]
  243. },
  244. }
  245. },
  246. data: yData,
  247. });
  248. },
  249. // 颜色列表
  250. getColorList: function () {
  251. var myColor = ['#f845f1', '#ad46f3', '#5045f6', '#4777f5', '#44aff0', '#45dbf7', '#f6d54a', '#f69846', '#ff4343'];
  252. return myColor;
  253. },
  254. // 由于早期的消费可能没有数据,需要给源数据,需要补齐 0,否则折现的时间轴和数据对应错误;
  255. fixData: function (list) {
  256. // 找到所有key
  257. var allConsumKey = {};
  258. for (var index in list) {
  259. var item = list[index];
  260. var list2 = item.items;
  261. for (var index2 in list2) {
  262. var item2 = list2[index2];
  263. var name = item2.name;
  264. allConsumKey[name] = name;
  265. }
  266. }
  267. //修复该条数据。 这里只是多循环一次,性能问题不大。
  268. for (var index in list) {
  269. var item = list[index];
  270. if (!item.items) {
  271. item.items = []
  272. }
  273. var list2 = item.items;
  274. for (var key in allConsumKey) {
  275. var hasKeyFlag = false;
  276. for (var index2 in list2) {
  277. var item2 = list2[index2];
  278. var name = item2.name;
  279. // 如果有 key的消费数据,则找下一个key
  280. if (key === name) {
  281. hasKeyFlag = true;
  282. break;
  283. }
  284. }
  285. // 如果list2循环结束后,找不到key,则补全数据;
  286. if (!hasKeyFlag) {
  287. item.items.push({
  288. name: key,
  289. value: 0,
  290. });
  291. }
  292. }
  293. }
  294. },
  295. // 大地图
  296. getStaticMapOption: function (chartEntity, dataIn) {
  297. var data = dataIn.dataList;
  298. var mapName = 'china'
  299. var geoCoordMap = {};
  300. /*获取地图数据*/
  301. chartEntity.showLoading();
  302. var mapFeatures = echarts.getMap(mapName).geoJson.features;
  303. chartEntity.hideLoading();
  304. mapFeatures.forEach(function (v) {
  305. // 地区名称
  306. var name = v.properties.name;
  307. // 地区经纬度
  308. geoCoordMap[name] = v.properties.cp;
  309. });
  310. var tempSort = data.sort(function (a, b) {
  311. return b.value - a.value;
  312. })
  313. var tempSortLen = tempSort.length;
  314. // 值的范围
  315. var max, min;
  316. if (tempSortLen > 0) {
  317. // 值的范围
  318. max = tempSort[0].value
  319. min = tempSort[tempSortLen - 1].value;
  320. }
  321. // 地图气泡的大小范围
  322. var maxSize4Pin = 72,
  323. minSize4Pin = 30;
  324. var convertData = function (data) {
  325. var res = [];
  326. for (var i = 0; i < data.length; i++) {
  327. var geoCoord = geoCoordMap[data[i].name];
  328. if (geoCoord) {
  329. res.push({
  330. name: data[i].name,
  331. value: geoCoord.concat(data[i].value),
  332. });
  333. }
  334. }
  335. return res;
  336. };
  337. var markData = convertData(data);
  338. // 底点的最大尺寸
  339. var pointMaxSize = 25;
  340. var option = {
  341. visualMap: {
  342. show: false,
  343. min: 0,
  344. max: 500,
  345. left: 'left',
  346. top: 'bottom',
  347. text: ['高', '低'], // 文本,默认为数值文本
  348. calculable: true,
  349. seriesIndex: [1],
  350. inRange: {
  351. color: ['#044161', '#2B91B7']
  352. }
  353. },
  354. geo: {
  355. show: true,
  356. map: mapName,
  357. label: {
  358. normal: {
  359. show: false
  360. },
  361. emphasis: {
  362. show: false,
  363. }
  364. },
  365. roam: true,
  366. itemStyle: {
  367. normal: {
  368. areaColor: '#031525',
  369. borderColor: '#3B5077',
  370. },
  371. emphasis: {
  372. areaColor: '#2B91B7',
  373. }
  374. }
  375. },
  376. series: [{
  377. name: '散点',// 蓝色的小点
  378. type: 'scatter',
  379. coordinateSystem: 'geo',
  380. data: markData,
  381. symbolSize: function (val) {
  382. var size = val[2] / 10
  383. if (size > pointMaxSize) {
  384. size = pointMaxSize
  385. }
  386. return size;
  387. },
  388. label: {
  389. normal: {
  390. formatter: '{b}',
  391. position: 'right',
  392. show: true
  393. },
  394. emphasis: {
  395. show: true
  396. }
  397. },
  398. itemStyle: {
  399. normal: {
  400. color: '#05C3F9'
  401. }
  402. }
  403. }, {
  404. type: 'map',
  405. map: mapName,
  406. geoIndex: 0,
  407. aspectScale: 0.75, //长宽比
  408. showLegendSymbol: false, // 存在legend时显示
  409. label: {
  410. normal: {
  411. show: true
  412. },
  413. emphasis: {
  414. show: false,
  415. textStyle: {
  416. color: '#fff'
  417. }
  418. }
  419. },
  420. roam: true,
  421. itemStyle: {
  422. normal: {
  423. areaColor: '#031525',
  424. borderColor: '#3B5077',
  425. },
  426. emphasis: {
  427. areaColor: '#2B91B7'
  428. }
  429. },
  430. animation: false,
  431. data: data
  432. }, {
  433. // 小点上的气泡
  434. name: '气泡',
  435. type: 'scatter',
  436. coordinateSystem: 'geo',
  437. symbol: 'pin', //气泡
  438. symbolSize: function (val) {
  439. var a = val[2] / (max - min);//当前值和最大值的比例
  440. var size = minSize4Pin + (maxSize4Pin - minSize4Pin) * a;// 实际大小
  441. if (size > maxSize4Pin) {
  442. size = maxSize4Pin
  443. }
  444. return size;
  445. },
  446. label: {
  447. normal: {
  448. show: true,
  449. formatter: function (params) {
  450. var size = params.value[2]
  451. return size
  452. },
  453. textStyle: {
  454. color: '#fff',
  455. fontSize: 9,
  456. }
  457. }
  458. },
  459. itemStyle: {
  460. normal: {
  461. color: '#108EE9', //标志颜色
  462. }
  463. },
  464. zlevel: 6,
  465. data: markData,
  466. }, {
  467. // 排名前5 底部的小点变成黄色 漪涟
  468. name: 'Top 5',
  469. type: 'effectScatter',
  470. coordinateSystem: 'geo',
  471. data: convertData(data.sort(function (a, b) {
  472. return b.value - a.value;
  473. }).slice(0, 5)),
  474. symbolSize: function (val) {
  475. var size = val[2] / 10
  476. if (size > pointMaxSize) {
  477. size = pointMaxSize
  478. }
  479. return size;
  480. },
  481. showEffectOn: 'render',
  482. rippleEffect: {
  483. brushType: 'stroke'
  484. },
  485. hoverAnimation: true,
  486. label: {
  487. normal: {
  488. formatter: '{b}',
  489. position: 'right',
  490. show: true
  491. }
  492. },
  493. itemStyle: {
  494. normal: {
  495. color: 'yellow',
  496. shadowBlur: 10,
  497. shadowColor: 'yellow'
  498. }
  499. },
  500. zlevel: 1
  501. },
  502. ]
  503. };
  504. return option
  505. },
  506. // 经销商营收TOP
  507. getDealerIncomeTopChartOption: function (data) {
  508. var xData = [];
  509. var yData = [];
  510. for (var i = 0; i < data.length; i++) {
  511. var item = data[i];
  512. xData.push(item.name);
  513. yData.push(item.payIncomeTotal);
  514. }
  515. var option = this.getLineOptionsForMap(xData, true);
  516. this.setPictorialBarStyle(option, yData);
  517. return option
  518. },
  519. // 全局营收趋势
  520. getIncomeLineOption: function (data) {
  521. var payIncomeCount = 0;
  522. var lineCoinsCount = 0;
  523. var xData = [];
  524. var yData = {payIncome: [], lineCoins: []};
  525. for (var i = 0; i < data.length; i++) {
  526. var item = data[data.length - i - 1];
  527. xData.push(item.dateStr);
  528. yData.payIncome.push(item.payIncome);
  529. yData.lineCoins.push(item.lineCoins);
  530. payIncomeCount = payIncomeCount + item.payIncome;
  531. lineCoinsCount = lineCoinsCount + item.lineCoins;
  532. }
  533. var option = this.getLineOptionsForMap(xData);
  534. option.series = [
  535. {
  536. name: '在线收入',
  537. stack: '收入',
  538. type: 'bar',
  539. itemStyle: {
  540. color: "rgba(16,142,233,.9)",
  541. },
  542. data: yData.payIncome
  543. }, {
  544. name: '线下投币',
  545. stack: '收入',
  546. type: 'bar',
  547. itemStyle: {
  548. color: "rgba(16,142,233,.6)",
  549. },
  550. data: yData.lineCoins
  551. }
  552. ];
  553. return option;
  554. },
  555. // 设备类型分布Top
  556. getDeviceTypeStatisticsOption: function (data) {
  557. var xData = [];
  558. var yData = [];
  559. for (var i = 0; i < data.length; i++) {
  560. var item = data[i];
  561. xData.push(item.name);
  562. yData.push(item.value);
  563. }
  564. var option = this.getLineOptionsForMap(xData, true);
  565. this.setPictorialBarStyle(option, yData);
  566. return option
  567. },
  568. getUserPieOption: function (payload) {
  569. },
  570. // 全网用户
  571. getAllUserOption: function (list) {
  572. //补齐数据结构
  573. this.fixData(list);
  574. var xData = [];
  575. var consumeSeriesMap = {};
  576. var length = list.length;
  577. for (var index in list) {
  578. // 正序时间排列
  579. var item = list[length - 1 - index];
  580. xData.push(item.dateStr);
  581. var list2 = item.items;
  582. for (var index2 in list2) {
  583. var item2 = list2[index2];
  584. var name = item2.name;
  585. var value = item2.value;
  586. if (!consumeSeriesMap[name]) {
  587. consumeSeriesMap[name] = [];
  588. }
  589. consumeSeriesMap[name].push(value);
  590. }
  591. }
  592. var myColor = this.getColorList();
  593. var option = this.getLineOptionsForMap(xData);
  594. var index = 0;
  595. for (var key in consumeSeriesMap) {
  596. var dataList = consumeSeriesMap[key];
  597. option.series.push({
  598. name: key,
  599. type: 'line',
  600. itemStyle: {
  601. normal: {
  602. color: myColor[index * 2],//相邻的颜色太相似了,所以间隔一个,越界不会异常,会使用默认色
  603. }
  604. },
  605. data: dataList
  606. });
  607. index++;
  608. }
  609. return option;
  610. },
  611. // 设备注册趋势
  612. getDeviceRegOption: function (data) {
  613. var xData = [];
  614. var yData = {regList: [] };
  615. for (var i = 0; i < data.length; i++) {
  616. var item = data[data.length - i - 1];
  617. xData.push(item.dateStr);
  618. yData.regList.push(item.reg);
  619. }
  620. var option = this.getLineOptionsForMap(xData);
  621. option.series = [
  622. {
  623. name: '注册设备',
  624. stack: '设备',
  625. type: 'bar',
  626. itemStyle: {
  627. color: "rgba(16,142,233,.9)",
  628. },
  629. data: yData.regList
  630. }
  631. ];
  632. return option;
  633. },
  634. // 用户反馈全网趋势
  635. getFeedbackOption: function (data) {
  636. var xData = [];
  637. var yData = {refund: [], upper: [], fault: []};
  638. for (var i = 0; i < data.length; i++) {
  639. var item = data[data.length - i - 1];
  640. xData.push(item.dateStr);
  641. yData.refund.push(item.refund);
  642. yData.upper.push(item.upper);
  643. yData.fault.push(item.fault);
  644. }
  645. var option = this.getLineOptionsForMap(xData);
  646. option.series = [
  647. {
  648. name: '退币',
  649. stack: '用户反馈',
  650. type: 'bar',
  651. itemStyle: {
  652. color: colorStopList.yellow[0],
  653. },
  654. data: yData.refund
  655. }, {
  656. name: '上分',
  657. stack: '用户反馈',
  658. type: 'bar',
  659. itemStyle: {
  660. color: colorStopList.green[0],
  661. },
  662. data: yData.upper
  663. }, {
  664. name: '报障',
  665. stack: '用户反馈',
  666. type: 'bar',
  667. itemStyle: {
  668. color: colorStopList.red[0],
  669. },
  670. data: yData.fault
  671. }
  672. ];
  673. return option;
  674. },
  675. // 提现趋势
  676. getWithdrawOption:function (list) {
  677. var xData = [];
  678. var seriesMap = {};
  679. var length = list.length;
  680. for (var index in list) {
  681. // 正序时间排列
  682. var item = list[length - 1 - index];
  683. xData.push(item.dateStr);
  684. var list2 = item.items;
  685. for (var index2 in list2) {
  686. var item2 = list2[index2];
  687. var name = item2.name;
  688. var value = item2.value;
  689. if (!seriesMap[name]) {
  690. seriesMap[name] = [];
  691. }
  692. seriesMap[name].push(value);
  693. }
  694. }
  695. var myColor = this.getColorList();
  696. var option = this.getLineOptionsForMap(xData);
  697. var index = 0;
  698. for (var key in seriesMap) {
  699. var dataList = seriesMap[key];
  700. option.series.push({
  701. name: key,
  702. type: 'line',
  703. itemStyle: {
  704. normal: {
  705. color: myColor[index * 2],//相邻的颜色太相似了,所以间隔一个,越界不会异常,会使用默认色
  706. }
  707. },
  708. data: dataList
  709. });
  710. index++;
  711. }
  712. return option;
  713. }
  714. };
  715. $scope.chartActive = {
  716. leftChart1: false,
  717. leftChart2: false,
  718. leftChart3: false,
  719. rightChart1: false,
  720. rightChart2: false,
  721. rightChart3: false,
  722. bottomChart: false,
  723. };
  724. //按条件加载统计图 因为有的接口太慢,避免等待,直接并发
  725. function loadChartData() {
  726. //获取数据:地图设备统计
  727. $http.get('/superadmin/getDevMapChart', {}).then(function (data) {
  728. data = data.data
  729. var payload = data.payload
  730. if (payload) {
  731. //地图拓展api地址:https://github.com/ecomfe/echarts/tree/master/extension/bmap
  732. var option = $scope.optionConfig.getStaticMapOption(devChartPanelMap, payload);
  733. $scope.showData.devBusy = payload.busy;
  734. $scope.showData.devOnline = payload.online;
  735. $scope.showData.devOffline = payload.offline;
  736. $scope.showData.unregistered = payload.unregistered;
  737. devChartPanelMap.setOption(option);
  738. devChartPanelMap.resize();// 确保地图居中
  739. }
  740. }).then(function () {
  741. $scope.chartActive.leftChart1 = true;
  742. $http.get('/superadmin/getDealerIncomeTotalTop', {}).then(function (data) {
  743. data = data.data
  744. if (data.payload) {
  745. var option = $scope.optionConfig.getDealerIncomeTopChartOption(data.payload.dataList);
  746. leftChart1.setOption(option);
  747. }
  748. });
  749. }).then(function () {
  750. $scope.chartActive.leftChart2 = true;
  751. $http.get('/superadmin/getIncomeTrend', {}).then(function (data) {
  752. data = data.data
  753. if (data.payload.dataList) {
  754. var option = $scope.optionConfig.getIncomeLineOption(data.payload.dataList);
  755. leftChart2.setOption(option);
  756. }
  757. });
  758. }).then(function () {
  759. $scope.chartActive.leftChart3 = true;
  760. $http.get('/superadmin/getDeviceTypeStatistics', {}).then(function (data) {
  761. data = data.data
  762. if (data.payload.dataList) {
  763. var option = $scope.optionConfig.getDeviceTypeStatisticsOption(data.payload.dataList);
  764. leftChart3.setOption(option);
  765. }
  766. });
  767. }).then(function () {
  768. $scope.chartActive.rightChart1 = true;
  769. $http.get('/superadmin/getAllUserTrend', {}).then(function (data) {
  770. data = data.data
  771. if (data.payload) {
  772. var option = $scope.optionConfig.getAllUserOption(data.payload.dataList);
  773. rightChart1.setOption(option);
  774. }
  775. });
  776. }).then(function () {
  777. $scope.chartActive.rightChart2 = true;
  778. $http.get('/superadmin/getDeviceRegTrend', {}).then(function (data) {
  779. data = data.data
  780. if (data.payload.dataList) {
  781. var option = $scope.optionConfig.getDeviceRegOption(data.payload.dataList);
  782. rightChart2.setOption(option);
  783. }
  784. });
  785. }).then(function () {
  786. $scope.chartActive.rightChart3 = true;
  787. $http.get('/superadmin/getAllFeedbackTrend', {}).then(function (data) {
  788. data = data.data
  789. if (data.payload) {
  790. var option = $scope.optionConfig.getFeedbackOption(data.payload.dataList);
  791. rightChart3.setOption(option);
  792. }
  793. });
  794. }).then(function () {
  795. $scope.chartActive.bottomChart = true;
  796. $http.get('/superadmin/getWithdrawTrend', {}).then(function (data) {
  797. data = data.data
  798. if (data.payload) {
  799. var option = $scope.optionConfig.getWithdrawOption(data.payload.dataList);
  800. bottomChart.setOption(option);
  801. }
  802. });
  803. })
  804. }
  805. // 全屏事件绑定
  806. $scope.isFullscreen = false;
  807. $scope.$on('fullscreenchange', function (evt, data) {
  808. $timeout(function () {
  809. $scope.isFullscreen = screenfull.isFullscreen;
  810. resizeChart()
  811. })
  812. });
  813. }]);