index.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. $(function () {
  2. echart_1();
  3. echart_2();
  4. echart_3();
  5. echart_4();
  6. function echart_1() {
  7. // 基于准备好的dom,初始化echarts实例
  8. var myChart = echarts.init(document.getElementById('chart_1'));
  9. option = {
  10. title: {
  11. text: '本月设备状态统计',
  12. top: 35,
  13. left: 20,
  14. textStyle: {
  15. fontSize: 18,
  16. color: '#fff'
  17. }
  18. },
  19. tooltip: {
  20. trigger: 'item',
  21. formatter: "{a} <br/>{b}: {c} ({d}%)",
  22. },
  23. legend: {
  24. right: 20,
  25. top: 35,
  26. data: ['故障', '正常'],
  27. textStyle: {
  28. color: '#fff'
  29. }
  30. },
  31. series: [{
  32. name: '设备状态',
  33. type: 'pie',
  34. radius: ['0', '60%'],
  35. center: ['50%', '60%'],
  36. color: ['#e72325', '#98e002', '#2ca3fd'],
  37. label: {
  38. normal: {
  39. formatter: '{b}\n{d}%'
  40. },
  41. },
  42. data: [{
  43. value: 6,
  44. name: '故障'
  45. },
  46. {
  47. value: 50,
  48. name: '正常',
  49. selected: true
  50. }
  51. ]
  52. }]
  53. };
  54. // 使用刚指定的配置项和数据显示图表。
  55. myChart.setOption(option);
  56. window.addEventListener("resize", function () {
  57. myChart.resize();
  58. });
  59. }
  60. function echart_2() {
  61. // 基于准备好的dom,初始化echarts实例
  62. var myChart = echarts.init(document.getElementById('chart_2'));
  63. var data = {
  64. id: 'multipleBarsLines',
  65. title: '2018年前半年检测统计',
  66. legendBar: ['正面占比', '中立占比', '负面占比'],
  67. symbol: '', //数值是否带百分号 --默认为空 ''
  68. legendLine: ['同期对比'],
  69. xAxis: ['一月', '二月', '三月', '四月', '五月', '六月'],
  70. yAxis: [
  71. [8, 10, 10, 11, 4, 13]
  72. ],
  73. lines: [
  74. [10, 10, 9, 11, 7, 4]
  75. ],
  76. barColor: ['#3FA7DC', '#7091C4', '#5170A2'], //柱子颜色 必填参数
  77. lineColor: ['#D9523F'], // 折线颜色
  78. };
  79. /////////////end/////////
  80. var myData = (function test() {
  81. var yAxis = data.yAxis || [];
  82. var lines = data.lines || [];
  83. var legendBar = data.legendBar || [];
  84. var legendLine = data.legendLine || [];
  85. var symbol = data.symbol || ' ';
  86. var seriesArr = [];
  87. var legendArr = [];
  88. yAxis && yAxis.forEach((item, index) => {
  89. legendArr.push({
  90. name: legendBar && legendBar.length > 0 && legendBar[index]
  91. });
  92. seriesArr.push({
  93. name: legendBar && legendBar.length > 0 && legendBar[index],
  94. type: 'bar',
  95. barGap: '0.5px',
  96. data: item,
  97. barWidth: data.barWidth || 12,
  98. label: {
  99. normal: {
  100. show: true,
  101. formatter: '{c}' + symbol,
  102. position: 'top',
  103. textStyle: {
  104. color: '#fff',
  105. fontStyle: 'normal',
  106. fontFamily: '微软雅黑',
  107. textAlign: 'left',
  108. fontSize: 11,
  109. },
  110. },
  111. },
  112. itemStyle: { //图形样式
  113. normal: {
  114. barBorderRadius: 4,
  115. color: data.barColor[index]
  116. },
  117. }
  118. });
  119. });
  120. lines && lines.forEach((item, index) => {
  121. legendArr.push({
  122. name: legendLine && legendLine.length > 0 && legendLine[index]
  123. })
  124. seriesArr.push({
  125. name: legendLine && legendLine.length > 0 && legendLine[index],
  126. type: 'line',
  127. data: item,
  128. itemStyle: {
  129. normal: {
  130. color: data.lineColor[index],
  131. lineStyle: {
  132. width: 3,
  133. type: 'solid',
  134. }
  135. }
  136. },
  137. label: {
  138. normal: {
  139. show: false, //折线上方label控制显示隐藏
  140. position: 'top',
  141. }
  142. },
  143. symbol: 'circle',
  144. symbolSize: 10
  145. });
  146. });
  147. return {
  148. seriesArr,
  149. legendArr
  150. };
  151. })();
  152. option = {
  153. title: {
  154. show: true,
  155. top: '10%',
  156. left: '3%',
  157. text: data.title,
  158. textStyle: {
  159. fontSize: 18,
  160. color: '#fff'
  161. },
  162. subtext: data.subTitle,
  163. link: ''
  164. },
  165. tooltip: {
  166. trigger: 'axis',
  167. formatter: function (params) {
  168. var time = '';
  169. var str = '';
  170. for (var i of params) {
  171. time = i.name.replace(/\n/g, '') + '<br/>';
  172. if (i.data == 'null' || i.data == null) {
  173. str += i.seriesName + ':无数据' + '<br/>'
  174. } else {
  175. str += i.seriesName + ':' + i.data + symbol + '%<br/>'
  176. }
  177. }
  178. return time + str;
  179. },
  180. axisPointer: {
  181. type: 'none'
  182. },
  183. },
  184. legend: {
  185. right: data.legendRight || '30%',
  186. top: '12%',
  187. right: '5%',
  188. itemGap: 16,
  189. itemWidth: 10,
  190. itemHeight: 10,
  191. data: myData.legendArr,
  192. textStyle: {
  193. color: '#fff',
  194. fontStyle: 'normal',
  195. fontFamily: '微软雅黑',
  196. fontSize: 12,
  197. }
  198. },
  199. grid: {
  200. x: 30,
  201. y: 80,
  202. x2: 30,
  203. y2: 60,
  204. },
  205. xAxis: {
  206. type: 'category',
  207. data: data.xAxis,
  208. axisTick: {
  209. show: false,
  210. },
  211. axisLine: {
  212. show: true,
  213. lineStyle: {
  214. color: '#1AA1FD',
  215. },
  216. symbol: ['none', 'arrow']
  217. },
  218. axisLabel: {
  219. show: true,
  220. interval: '0',
  221. textStyle: {
  222. lineHeight: 16,
  223. padding: [2, 2, 0, 2],
  224. height: 50,
  225. fontSize: 12,
  226. },
  227. rich: {
  228. Sunny: {
  229. height: 50,
  230. // width: 60,
  231. padding: [0, 5, 0, 5],
  232. align: 'center',
  233. },
  234. },
  235. formatter: function (params, index) {
  236. var newParamsName = "";
  237. var splitNumber = 5;
  238. var paramsNameNumber = params && params.length;
  239. if (paramsNameNumber && paramsNameNumber <= 4) {
  240. splitNumber = 4;
  241. } else if (paramsNameNumber >= 5 && paramsNameNumber <= 7) {
  242. splitNumber = 4;
  243. } else if (paramsNameNumber >= 8 && paramsNameNumber <= 9) {
  244. splitNumber = 5;
  245. } else if (paramsNameNumber >= 10 && paramsNameNumber <= 14) {
  246. splitNumber = 5;
  247. } else {
  248. params = params && params.slice(0, 15);
  249. }
  250. var provideNumber = splitNumber; //一行显示几个字
  251. var rowNumber = Math.ceil(paramsNameNumber / provideNumber) || 0;
  252. if (paramsNameNumber > provideNumber) {
  253. for (var p = 0; p < rowNumber; p++) {
  254. var tempStr = "";
  255. var start = p * provideNumber;
  256. var end = start + provideNumber;
  257. if (p == rowNumber - 1) {
  258. tempStr = params.substring(start, paramsNameNumber);
  259. } else {
  260. tempStr = params.substring(start, end) + "\n";
  261. }
  262. newParamsName += tempStr;
  263. }
  264. } else {
  265. newParamsName = params;
  266. }
  267. params = newParamsName;
  268. return '{Sunny|' + params + '}';
  269. },
  270. color: '#1AA1FD',
  271. },
  272. },
  273. yAxis: {
  274. axisLine: {
  275. show: true,
  276. lineStyle: {
  277. color: '#1AA1FD',
  278. },
  279. symbol: ['none', 'arrow']
  280. },
  281. type: 'value',
  282. axisTick: {
  283. show: false
  284. },
  285. axisLabel: {
  286. show: false
  287. },
  288. splitLine: {
  289. show: false,
  290. lineStyle: {
  291. color: '#1AA1FD',
  292. type: 'solid'
  293. },
  294. }
  295. },
  296. series: myData.seriesArr
  297. }
  298. // 使用刚指定的配置项和数据显示图表。
  299. myChart.setOption(option);
  300. window.addEventListener("resize", function () {
  301. myChart.resize();
  302. });
  303. }
  304. function echart_3() {
  305. // 基于准备好的dom,初始化echarts实例
  306. var myChart = echarts.init(document.getElementById('chart_3'));
  307. function showProvince() {
  308. var geoCoordMap = {
  309. '河池': [108.085179,24.700488],
  310. '柳州': [109.412578,24.354875],
  311. '梧州': [111.323462,23.478238],
  312. '南宁': [108.359656,22.81328],
  313. '北海': [109.171374,21.477419],
  314. '崇左': [107.347374,22.377503]
  315. };
  316. var data = [{
  317. name: '河池',
  318. value: 100
  319. },
  320. {
  321. name: '柳州',
  322. value: 100
  323. },
  324. {
  325. name: '梧州',
  326. value: 100
  327. },
  328. {
  329. name: '北海',
  330. value: 100
  331. },
  332. {
  333. name: '崇左',
  334. value: 100
  335. }
  336. ];
  337. var max = 480,
  338. min = 9; // todo
  339. var maxSize4Pin = 100,
  340. minSize4Pin = 20;
  341. var convertData = function (data) {
  342. var res = [];
  343. for (var i = 0; i < data.length; i++) {
  344. var geoCoord = geoCoordMap[data[i].name];
  345. if (geoCoord) {
  346. res.push({
  347. name: data[i].name,
  348. value: geoCoord.concat(data[i].value)
  349. });
  350. }
  351. }
  352. return res;
  353. };
  354. myChart.setOption(option = {
  355. title: {
  356. text: '设备分布',
  357. subtext: '',
  358. x: 'center',
  359. textStyle: {
  360. color: '#FFF'
  361. },
  362. left: '6%',
  363. top: '10%'
  364. },
  365. legend: {
  366. orient: 'vertical',
  367. y: 'bottom',
  368. x: 'right',
  369. data: ['pm2.5'],
  370. textStyle: {
  371. color: '#fff'
  372. }
  373. },
  374. visualMap: {
  375. show: false,
  376. min: 0,
  377. max: 500,
  378. left: 'left',
  379. top: 'bottom',
  380. text: ['高', '低'], // 文本,默认为数值文本
  381. calculable: true,
  382. seriesIndex: [1],
  383. inRange: {}
  384. },
  385. geo: {
  386. show: true,
  387. map: 'guangxi',
  388. mapType: 'guangxi',
  389. label: {
  390. normal: {},
  391. //鼠标移入后查看效果
  392. emphasis: {
  393. textStyle: {
  394. color: '#fff'
  395. }
  396. }
  397. },
  398. //鼠标缩放和平移
  399. roam: true,
  400. itemStyle: {
  401. normal: {
  402. // color: '#ddd',
  403. borderColor: 'rgba(147, 235, 248, 1)',
  404. borderWidth: 1,
  405. areaColor: {
  406. type: 'radial',
  407. x: 0.5,
  408. y: 0.5,
  409. r: 0.8,
  410. colorStops: [{
  411. offset: 0,
  412. color: 'rgba(175,238,238, 0)' // 0% 处的颜色
  413. }, {
  414. offset: 1,
  415. color: 'rgba( 47,79,79, .1)' // 100% 处的颜色
  416. }],
  417. globalCoord: false // 缺省为 false
  418. },
  419. shadowColor: 'rgba(128, 217, 248, 1)',
  420. shadowOffsetX: -2,
  421. shadowOffsetY: 2,
  422. shadowBlur: 10
  423. },
  424. emphasis: {
  425. areaColor: '#389BB7',
  426. borderWidth: 0
  427. }
  428. }
  429. },
  430. series: [{
  431. name: 'light',
  432. type: 'map',
  433. coordinateSystem: 'geo',
  434. data: convertData(data),
  435. itemStyle: {
  436. normal: {
  437. color: '#F4E925'
  438. }
  439. }
  440. },
  441. {
  442. name: '点',
  443. type: 'scatter',
  444. coordinateSystem: 'geo',
  445. symbol: 'pin',
  446. symbolSize: function (val) {
  447. var a = (maxSize4Pin - minSize4Pin) / (max - min);
  448. var b = minSize4Pin - a * min;
  449. b = maxSize4Pin - a * max;
  450. return a * val[2] + b;
  451. },
  452. label: {
  453. normal: {
  454. // show: true,
  455. // textStyle: {
  456. // color: '#fff',
  457. // fontSize: 9,
  458. // }
  459. }
  460. },
  461. itemStyle: {
  462. normal: {
  463. color: '#F62157', //标志颜色
  464. }
  465. },
  466. zlevel: 6,
  467. data: convertData(data),
  468. },
  469. {
  470. name: 'light',
  471. type: 'map',
  472. mapType: 'hunan',
  473. geoIndex: 0,
  474. aspectScale: 0.75, //长宽比
  475. showLegendSymbol: false, // 存在legend时显示
  476. label: {
  477. normal: {
  478. show: false
  479. },
  480. emphasis: {
  481. show: false,
  482. textStyle: {
  483. color: '#fff'
  484. }
  485. }
  486. },
  487. roam: true,
  488. itemStyle: {
  489. normal: {
  490. areaColor: '#031525',
  491. borderColor: '#FFFFFF',
  492. },
  493. emphasis: {
  494. areaColor: '#2B91B7'
  495. }
  496. },
  497. animation: false,
  498. data: data
  499. },
  500. {
  501. name: ' ',
  502. type: 'effectScatter',
  503. coordinateSystem: 'geo',
  504. data: convertData(data.sort(function (a, b) {
  505. return b.value - a.value;
  506. }).slice(0, 5)),
  507. symbolSize: function (val) {
  508. return val[2] / 10;
  509. },
  510. showEffectOn: 'render',
  511. rippleEffect: {
  512. brushType: 'stroke'
  513. },
  514. hoverAnimation: true,
  515. label: {
  516. normal: {
  517. formatter: '{b}',
  518. position: 'right',
  519. show: true
  520. }
  521. },
  522. itemStyle: {
  523. normal: {
  524. color: '#05C3F9',
  525. shadowBlur: 10,
  526. shadowColor: '#05C3F9'
  527. }
  528. },
  529. zlevel: 1
  530. },
  531. ]
  532. });
  533. }
  534. showProvince();
  535. // 使用刚指定的配置项和数据显示图表。
  536. // myChart.setOption(option);
  537. window.addEventListener("resize", function () {
  538. myChart.resize();
  539. });
  540. }
  541. function echart_4() {
  542. // 基于准备好的dom,初始化echarts实例
  543. var myChart = echarts.init(document.getElementById('chart_4'));
  544. var data = [70, 34, 60, 78, 69];
  545. var titlename = ['1号机', '2号机', '3号机', '4号机', '5号机'];
  546. var valdata = [702, 406, 664, 793, 505];
  547. var myColor = ['#1089E7', '#F57474', '#56D0E3', '#F8B448', '#8B78F6'];
  548. option = {
  549. title: {
  550. text: '设备使用频率',
  551. x: 'center',
  552. textStyle: {
  553. color: '#FFF'
  554. },
  555. left: '6%',
  556. top: '10%'
  557. },
  558. //图标位置
  559. grid: {
  560. top: '20%',
  561. left: '32%'
  562. },
  563. xAxis: {
  564. show: false
  565. },
  566. yAxis: [{
  567. show: true,
  568. data: titlename,
  569. inverse: true,
  570. axisLine: {
  571. show: false
  572. },
  573. splitLine: {
  574. show: false
  575. },
  576. axisTick: {
  577. show: false
  578. },
  579. axisLabel: {
  580. color: '#fff',
  581. formatter: (value, index) => {
  582. return [
  583. `{lg|${index+1}} ` + '{title|' + value + '} '
  584. ].join('\n')
  585. },
  586. rich: {
  587. lg: {
  588. backgroundColor: '#339911',
  589. color: '#fff',
  590. borderRadius: 15,
  591. // padding: 5,
  592. align: 'center',
  593. width: 15,
  594. height: 15
  595. },
  596. }
  597. },
  598. }, {
  599. show: true,
  600. inverse: true,
  601. data: valdata,
  602. axisLabel: {
  603. textStyle: {
  604. fontSize: 12,
  605. color: '#fff',
  606. },
  607. },
  608. axisLine: {
  609. show: false
  610. },
  611. splitLine: {
  612. show: false
  613. },
  614. axisTick: {
  615. show: false
  616. },
  617. }],
  618. series: [{
  619. name: '条',
  620. type: 'bar',
  621. yAxisIndex: 0,
  622. data: data,
  623. barWidth: 10,
  624. itemStyle: {
  625. normal: {
  626. barBorderRadius: 20,
  627. color: function(params) {
  628. var num = myColor.length;
  629. return myColor[params.dataIndex % num]
  630. },
  631. }
  632. },
  633. label: {
  634. normal: {
  635. show: true,
  636. position: 'inside',
  637. formatter: '{c}%'
  638. }
  639. },
  640. }, {
  641. name: '框',
  642. type: 'bar',
  643. yAxisIndex: 1,
  644. barGap: '-100%',
  645. data: [100, 100, 100, 100, 100],
  646. barWidth: 15,
  647. itemStyle: {
  648. normal: {
  649. color: 'none',
  650. borderColor: '#00c1de',
  651. borderWidth: 3,
  652. barBorderRadius: 15,
  653. }
  654. }
  655. }, ]
  656. };
  657. // 使用刚指定的配置项和数据显示图表。
  658. myChart.setOption(option);
  659. // window.addEventListener("resize", function () {
  660. // myChart.resize();
  661. // });
  662. }
  663. });