index.js 23 KB

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