indexEcharts.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. //安全防范设施改造情况数据
  2. let securityPrecautions = (
  3. data = [
  4. { value: 1048, name: 'GA38-2021' },
  5. { value: 735, name: 'GA38-2015' },
  6. { value: 580, name: '未达标' }
  7. ]
  8. ) => {
  9. var colors = ['#146de0', '#27ef5e', '#ffc140']
  10. let option = {
  11. title: {
  12. text: '安全防范改造情况',
  13. left: 'left'
  14. },
  15. tooltip: {
  16. trigger: 'item'
  17. },
  18. legend: {
  19. orient: 'vertical',
  20. top: 'center',
  21. left: '50%',
  22. data: data,
  23. formatter: function (name) {
  24. var data = option.series[0].data
  25. var total = 0
  26. var tarValue
  27. for (var i = 0; i < data.length; i++) {
  28. total += data[i].value
  29. if (data[i].name == name) {
  30. tarValue = data[i].value
  31. }
  32. }
  33. var v = tarValue
  34. var p = Math.round((tarValue / total) * 100)
  35. return `${name} ${v}家 ${p}%`
  36. }
  37. },
  38. series: [
  39. {
  40. center: ['25%', '60%'],
  41. name: '生命周期统计',
  42. type: 'pie',
  43. radius: '50%',
  44. data: data,
  45. itemStyle: {
  46. normal: {
  47. shadowColor: 'rgba(0, 0, 0, 0.8)',
  48. shadowBlur: 5,
  49. color: function (param) {
  50. // console.log(param.dataIndex)
  51. return colors[param.dataIndex]
  52. }
  53. },
  54. },
  55. label: {
  56. position: 'inner',
  57. textStyle: {
  58. fontSize: 14,
  59. color: '#181818'
  60. },
  61. formatter: params => {
  62. return `${params.value}`
  63. }
  64. },
  65. labelLine: {
  66. show: false
  67. },
  68. emphasis: {
  69. itemStyle: {
  70. shadowBlur: 10,
  71. shadowOffsetX: 0,
  72. shadowColor: 'rgba(0, 0, 0, 0.5)'
  73. }
  74. }
  75. }
  76. ],
  77. itemStyle: {
  78. normal: {
  79. shadowColor: 'rgba(0, 0, 0, 0.8)',
  80. shadowBlur: 5
  81. }
  82. },
  83. }
  84. return option
  85. }
  86. //GA38-2021标准
  87. let pieGaData = (
  88. title = '暂无设置标题',
  89. data = [
  90. {
  91. value: 55,
  92. name: '203',
  93. label: {
  94. normal: {
  95. show: true
  96. }
  97. }
  98. },
  99. {
  100. value: 45,
  101. name: '正常1',
  102. label: {
  103. normal: {
  104. show: false
  105. }
  106. }
  107. }
  108. ]
  109. ) => {
  110. let option = {
  111. tooltip: {
  112. trigger: 'item',
  113. formatter: '{a} <br/>{b}: {c} ({d}%)'
  114. },
  115. title: [
  116. {
  117. bottom: 1,
  118. width: '100%',
  119. left: 'center',
  120. text: title
  121. }
  122. ],
  123. color: ['#169bd5', '#ccc'],
  124. series: [
  125. {
  126. name: '',
  127. type: 'pie',
  128. center: ['50%', '50%'], // 饼图的圆心坐标
  129. radius: ['50%', '60%'],
  130. avoidLabelOverlap: false,
  131. hoverAnimation: false,
  132. label: {
  133. // 饼图图形上的文本标签
  134. normal: {
  135. // normal 是图形在默认状态下的样式
  136. show: true,
  137. position: 'center',
  138. color: '#169bd5',
  139. fontSize: 18,
  140. fontWeight: 'bold',
  141. formatter: '{b}\n{d}%' // {b}:数据名; {c}:数据值; {d}:百分比,可以自定义显示内容,
  142. }
  143. },
  144. labelLine: {
  145. normal: {
  146. show: false
  147. }
  148. },
  149. data: data
  150. }
  151. ]
  152. }
  153. return option
  154. }
  155. //网点业务总览
  156. let dotData = (
  157. title = '网点业务库总览',
  158. data = [
  159. { value: 666, name: '巡查上报' },
  160. { value: 193, name: '自行处置' },
  161. { value: 300, name: '微信市民举报' },
  162. { value: 200, name: '微治理上报' },
  163. { value: 100, name: '视频抓拍' }
  164. ]
  165. ) => {
  166. console.log(data, 'sss')
  167. var color = ['#146de0', '#27ef5e', '#ffc140', '#d151d8', 'red']
  168. let option = {
  169. color: color,
  170. title: {
  171. text: title,
  172. left: 'left'
  173. },
  174. tooltip: {
  175. trigger: 'item',
  176. backgroundColor: 'rgba(0,0,0,0.5)',
  177. color: '#fff',
  178. formatter: function (params) {
  179. return (
  180. params.name +
  181. '<br/>' +
  182. params.marker +
  183. '<span style="color:' +
  184. params.color +
  185. '">' +
  186. params.data['name'] +
  187. '\n' +
  188. params.data['value'] +
  189. '</span>'
  190. )
  191. }
  192. },
  193. legend: {
  194. orient: 'vertical',
  195. icon: 'circle',
  196. left: '2%',
  197. top: '32%',
  198. itemWidth: 14,
  199. itemGap: 20,
  200. textStyle: {
  201. rich: {
  202. a: {
  203. color: '#1f1f1f',
  204. fontSize: 16,
  205. padding: [0, 10, 0, 0]
  206. },
  207. b: {
  208. color: '#1f1f1f',
  209. fontSize: 16,
  210. padding: [0, 10, 0, 10]
  211. }
  212. }
  213. },
  214. formatter: function (name) {
  215. var target, unit
  216. for (var i = 0, l = data.length; i < l; i++) {
  217. if (data[i].name == name) {
  218. target = data[i].value
  219. unit = data[i].unit
  220. }
  221. }
  222. return `{a| ${name}}{b|${target}}`
  223. }
  224. },
  225. series: [
  226. {
  227. name: '',
  228. type: 'pie',
  229. radius: ['20%', '65%'],
  230. center: ['65%', '50%'],
  231. avoidLabelOverlap: true,
  232. label: {
  233. normal: {
  234. show: true,
  235. position: 'inside',
  236. formatter: '{d}%',
  237. textStyle: {
  238. align: 'center',
  239. baseline: 'middle',
  240. fontSize: 16,
  241. fontWeight: '100',
  242. color: '#fff'
  243. }
  244. }
  245. },
  246. labelLine: {
  247. show: false
  248. },
  249. itemStyle: {
  250. normal: {
  251. shadowColor: 'rgba(0, 0, 0, 0.8)',
  252. shadowBlur: 5
  253. }
  254. },
  255. data: data
  256. }
  257. ]
  258. }
  259. return option
  260. }
  261. //保安情况
  262. let securityData = (
  263. title = '保安配备情况',
  264. data = [
  265. { value: 666, name: '已配备' },
  266. { value: 193, name: '未配备' }
  267. ]
  268. ) => {
  269. var color = ['#146de0', '#27ef5e', '#ffc140', '#d151d8', 'red']
  270. let option = {
  271. color: color,
  272. title: {
  273. text: title,
  274. left: 'left'
  275. },
  276. tooltip: {
  277. trigger: 'item',
  278. backgroundColor: 'rgba(0,0,0,0.5)',
  279. color: '#fff',
  280. formatter: function (params) {
  281. return (
  282. params.name +
  283. '<br/>' +
  284. params.marker +
  285. '<span style="color:' +
  286. params.color +
  287. '">' +
  288. params.data['name'] +
  289. '\n' +
  290. params.data['value'] +
  291. '</span>'
  292. )
  293. }
  294. },
  295. legend: {
  296. orient: 'vertical',
  297. icon: 'circle',
  298. left: '2%',
  299. top: '32%',
  300. itemWidth: 14,
  301. itemGap: 20,
  302. textStyle: {
  303. rich: {
  304. a: {
  305. color: '#1f1f1f',
  306. fontSize: 16,
  307. padding: [0, 10, 0, 0]
  308. },
  309. b: {
  310. color: '#1f1f1f',
  311. fontSize: 16,
  312. padding: [0, 10, 0, 10]
  313. }
  314. }
  315. },
  316. formatter: function (name) {
  317. var target, unit
  318. for (var i = 0, l = data.length; i < l; i++) {
  319. if (data[i].name == name) {
  320. target = data[i].value
  321. unit = data[i].unit
  322. }
  323. }
  324. return `{a| ${name}}{b|${target}}`
  325. }
  326. },
  327. series: [
  328. {
  329. name: '',
  330. type: 'pie',
  331. radius: ['20%', '65%'],
  332. center: ['65%', '50%'],
  333. avoidLabelOverlap: true,
  334. label: {
  335. normal: {
  336. show: true,
  337. position: 'inside',
  338. formatter: '{d}%',
  339. textStyle: {
  340. align: 'center',
  341. baseline: 'middle',
  342. fontSize: 16,
  343. fontWeight: '100',
  344. color: '#fff'
  345. }
  346. }
  347. },
  348. labelLine: {
  349. show: false
  350. },
  351. itemStyle: {
  352. normal: {
  353. shadowColor: 'rgba(0, 0, 0, 0.8)',
  354. shadowBlur: 5
  355. }
  356. },
  357. data: data
  358. }
  359. ]
  360. }
  361. return option
  362. }
  363. //离行式自助银行
  364. let LHSData = (
  365. title = '',
  366. data = [
  367. { value: 666, name: '已配备' },
  368. { value: 193, name: '未配备' }
  369. ]
  370. ) => {
  371. var color = ['#146de0', '#27ef5e', '#ffc140', '#d151d8', 'red']
  372. let option = {
  373. color: color,
  374. title: {
  375. text: title,
  376. left: 'left'
  377. },
  378. tooltip: {
  379. trigger: 'item',
  380. backgroundColor: 'rgba(0,0,0,0.5)',
  381. color: '#fff',
  382. formatter: function (params) {
  383. return (
  384. params.name +
  385. '<br/>' +
  386. params.marker +
  387. '<span style="color:' +
  388. params.color +
  389. '">' +
  390. params.data['name'] +
  391. '\n' +
  392. params.data['value'] +
  393. '</span>'
  394. )
  395. }
  396. },
  397. legend: {
  398. orient: 'vertical',
  399. icon: 'circle',
  400. left: '2%',
  401. top: '32%',
  402. itemWidth: 14,
  403. itemGap: 20,
  404. textStyle: {
  405. rich: {
  406. a: {
  407. color: '#1f1f1f',
  408. fontSize: 16,
  409. padding: [0, 10, 0, 0]
  410. },
  411. b: {
  412. color: '#1f1f1f',
  413. fontSize: 16,
  414. padding: [0, 10, 0, 10]
  415. }
  416. }
  417. },
  418. formatter: function (name) {
  419. var target, unit
  420. for (var i = 0, l = data.length; i < l; i++) {
  421. if (data[i].name == name) {
  422. target = data[i].value
  423. unit = data[i].unit
  424. }
  425. }
  426. return `{a| ${name}}{b|${target}}`
  427. }
  428. },
  429. series: [
  430. {
  431. name: '',
  432. type: 'pie',
  433. radius: ['20%', '65%'],
  434. center: ['75%', '50%'],
  435. avoidLabelOverlap: true,
  436. label: {
  437. normal: {
  438. show: true,
  439. position: 'inside',
  440. formatter: '{d}%',
  441. textStyle: {
  442. align: 'center',
  443. baseline: 'middle',
  444. fontSize: 16,
  445. fontWeight: '100',
  446. color: '#fff'
  447. }
  448. }
  449. },
  450. labelLine: {
  451. show: false
  452. },
  453. data: data
  454. }
  455. ]
  456. }
  457. return option
  458. }
  459. //在行式自助银行
  460. let ZHSData = (
  461. title = '在行式自助银行',
  462. data = [
  463. { value: 666, name: '穿墙式设备' },
  464. { value: 193, name: '大堂式设备' }
  465. ]
  466. ) => {
  467. let color = ['#146de0', '#27ef5e', '#ffc140', '#d151d8', 'red']
  468. const handleData = {}
  469. let sum = 0
  470. // 求和
  471. data.map(item => {
  472. sum += item.value
  473. })
  474. // 数据处理
  475. data.map(item => {
  476. handleData[item.name] = item
  477. handleData[item.name].percentage = ((item.value / sum) * 100).toFixed(1) + '%'
  478. })
  479. let option = {
  480. title: {
  481. text: title,
  482. left: 'center'
  483. },
  484. legend: {
  485. show: true,
  486. icon: 'circle',
  487. right: '3%',
  488. left: 'center',
  489. bottom: '10%',
  490. itemWidth: 10,
  491. itemStyle: {
  492. borderColor: 'none'
  493. },
  494. textStyle: {
  495. rich: {
  496. name: {
  497. color: '#606266',
  498. fontSize: 14
  499. },
  500. percentage: {
  501. color: '#606266',
  502. fontSize: 16,
  503. padding: [0, 0, 0, 30],
  504. align: 'right'
  505. }
  506. }
  507. }
  508. },
  509. tooltip: {
  510. trigger: 'item'
  511. },
  512. series: [
  513. {
  514. type: 'pie',
  515. color: ['#4D88FE', '#50CCCB', '#FFBF3C'],
  516. radius: '130%',
  517. left: 'center',
  518. label: {
  519. normal: {
  520. position: 'inside', // 在内部显示,outseide 是在外部显示
  521. show: true,
  522. formatter: '{c}'
  523. }
  524. },
  525. data: data,
  526. emphasis: {
  527. itemStyle: {
  528. shadowBlur: 10,
  529. shadowOffsetX: 0,
  530. shadowColor: 'rgba(0, 0, 0, 0.5)'
  531. }
  532. },
  533. labelLine: {
  534. normal: {
  535. show: false
  536. }
  537. },
  538. itemStyle: {
  539. normal: {
  540. shadowColor: 'rgba(0, 0, 0, 0.8)',
  541. shadowBlur: 5,
  542. borderColor: '#fff'
  543. }
  544. },
  545. // itemStyle: {
  546. // borderColor: '#fff'
  547. // }
  548. }
  549. ]
  550. }
  551. return option
  552. }
  553. //日常履职完成率
  554. let resumption = (data, type = 0) => {
  555. var getzszy = ['每日履职', '报警测试', 'UPS维护', '夜间值守', '离行巡检'] //数据点名称
  556. var getzswcl = [101, 100, 100, 98.65, 98.3] //招生完成率
  557. var getzswcl2 = [101, 100, 100, 98.65, 98.3] //招生完成率
  558. var getzswclzd = [] //招生完成率100%
  559. if (type == 0) {
  560. if (data && data.length > 0) {
  561. getzszy = data.map(item => item.orgName)
  562. getzswcl = data.map(item => parseInt(item.rate * 100))
  563. getzswcl2 = data.map(item => parseInt(item.rate * 100) + '%')
  564. }
  565. } else {
  566. if (data && data.length > 0) {
  567. getzszy = data.map(item => item.orgName)
  568. getzswcl = data.map(item => {
  569. if (item.isNo) {
  570. return parseInt(item.rate * 100)
  571. } else {
  572. return parseInt(item.rate)
  573. }
  574. })
  575. getzswcl2 = data.map(item => {
  576. if (item.isNo) {
  577. return parseInt(item.rate * 100) + '%'
  578. } else {
  579. return item.rate + '项'
  580. }
  581. })
  582. }
  583. }
  584. for (let i = 0; i < getzswcl.length; i++) {
  585. if (getzswcl[i] > 100) {
  586. getzswcl[i] = 100
  587. }
  588. getzswclzd.push(100)
  589. }
  590. let option = {
  591. grid: {
  592. right: '25%',
  593. bottom: '3%',
  594. left: '25%',
  595. top: '3%'
  596. },
  597. tooltip: {
  598. trigger: 'axis',
  599. axisPointer: {
  600. type: 'none'
  601. },
  602. formatter: function (params) {
  603. return getzszy[params[0].dataIndex] + '<br>完成率: ' + getzswcl2[params[0].dataIndex]
  604. }
  605. },
  606. xAxis: {
  607. show: false,
  608. type: 'value'
  609. },
  610. yAxis: [
  611. {
  612. type: 'category',
  613. inverse: true,
  614. axisLabel: {
  615. show: true,
  616. textStyle: {
  617. color: '#666666',
  618. fontSize: '13'
  619. }
  620. },
  621. splitLine: {
  622. show: false
  623. },
  624. axisTick: {
  625. show: false
  626. },
  627. axisLine: {
  628. show: false
  629. },
  630. data: getzszy
  631. },
  632. {
  633. type: 'category',
  634. inverse: true,
  635. axisTick: 'none',
  636. axisLine: 'none',
  637. show: true,
  638. axisLabel: {
  639. textStyle: {
  640. color: '#333333',
  641. fontSize: '13'
  642. },
  643. // formatter: '{value}%'
  644. formatter: function (value, index) {
  645. return value
  646. }
  647. },
  648. data: getzswcl2
  649. }
  650. ],
  651. series: [
  652. {
  653. name: '值',
  654. type: 'bar',
  655. zlevel: 1,
  656. itemStyle: {
  657. normal: {
  658. barBorderRadius: 5,
  659. color: '#4E7BFE'
  660. }
  661. },
  662. barWidth: 10,
  663. data: getzswcl
  664. },
  665. {
  666. name: '背景',
  667. type: 'bar',
  668. barWidth: 10,
  669. barGap: '-100%',
  670. data: getzswclzd,
  671. itemStyle: {
  672. normal: {
  673. color: 'rgba(103,150,253,0.3)',
  674. barBorderRadius: 5
  675. }
  676. }
  677. }
  678. ]
  679. }
  680. return option
  681. }
  682. export { securityPrecautions, resumption, dotData, securityData, ZHSData, LHSData, pieGaData }