indexEcharts.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. //安全防范设施改造情况数据
  2. let aqsecurity = (
  3. chartData = [
  4. {
  5. value: 800,
  6. name: '主料'
  7. },
  8. {
  9. value: 200,
  10. name: '辅料'
  11. },
  12. {
  13. value: 300,
  14. name: '包装材料'
  15. }
  16. ]
  17. ) => {
  18. var color = ['#92cd76', '#5370c7', '#ee6666']
  19. const sum = chartData.reduce((per, cur) => per + cur.value, 0)
  20. let option = {
  21. background: '#fff',
  22. title: {
  23. show: true,
  24. text: ' ',
  25. subtext: sum + '家',
  26. x: '29%',
  27. y: '33%',
  28. textStyle: {
  29. color: '#778CA2',
  30. fontSize: 20,
  31. fontWeight: '400'
  32. },
  33. subtextStyle: {
  34. color: 'rgba(0,0,0,0.85)',
  35. fontSize: 20,
  36. fontWeight: '400'
  37. },
  38. textAlign: 'center'
  39. },
  40. legend: {
  41. orient: 'vertical',
  42. // icon: "diamond",
  43. left: '55%',
  44. icon: 'circle',
  45. textStyle: {
  46. color: '#373737',
  47. rich: {
  48. name: {
  49. color: 'rgba(0,0,0,0.65)'
  50. },
  51. symbol: {
  52. color: 'rgba(0,0,0,0.45)'
  53. },
  54. percent: {
  55. color: 'rgba(0,0,0,0.45)'
  56. },
  57. value: {
  58. color: 'rgba(0,0,0,0.65)'
  59. }
  60. }
  61. },
  62. top: 'center',
  63. right: '5%',
  64. itemGap: 14,
  65. itemHeight: 24,
  66. itemWidth: 24,
  67. data: chartData.name,
  68. formatter: function (name) {
  69. let obj = {}
  70. if (name) {
  71. obj = chartData.find(item => item.name === name)
  72. }
  73. return `{name|${name}}{symbol| }{value|${obj.value || 0}家}{percent|${
  74. obj.value && ((obj.value / sum) * 100).toFixed(0)
  75. }%}`
  76. }
  77. },
  78. series: [
  79. {
  80. name: '',
  81. type: 'pie',
  82. roundCap: true,
  83. radius: ['40%', '70%'],
  84. center: ['30%', '50%'],
  85. startAngle: 180, //起始角度
  86. data: chartData,
  87. itemStyle: {
  88. borderColor: '#fff',
  89. borderWidth: 1,
  90. color: function (params) {
  91. return color[params.dataIndex]
  92. }
  93. },
  94. labelLine: {
  95. length: 8,
  96. length2: 16,
  97. lineStyle: {
  98. width: 1
  99. }
  100. },
  101. label: {
  102. show: false,
  103. fontFamily: 'ysbth',
  104. position: 'outside',
  105. padding: [0, -4, 0, -4],
  106. formatter(params) {
  107. if (params.name === '') {
  108. return ''
  109. }
  110. return `${params.percent.toFixed(0)}%`
  111. },
  112. color: '#fff',
  113. fontSize: '14px',
  114. lineHeight: 10
  115. }
  116. }
  117. ]
  118. }
  119. return option
  120. }
  121. //柱状图堆叠
  122. let ddsecurity = (
  123. data = {
  124. bankingGa38: [1, 2, 3],
  125. offlineGa38: [1, 2, 3],
  126. onlineGa38: [1, 2, 3]
  127. }
  128. ) => {
  129. let option = {
  130. tooltip: {
  131. trigger: 'axis',
  132. axisPointer: {
  133. type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
  134. }
  135. },
  136. grid: {
  137. left: '3%',
  138. right: '4%',
  139. bottom: '3%',
  140. containLabel: true
  141. },
  142. xAxis: {
  143. type: 'value',
  144. axisLine: {
  145. lineStyle: {
  146. color: '#51688a'
  147. }
  148. }
  149. },
  150. yAxis: {
  151. type: 'category',
  152. data: ['在行式自助银行', '离行式自助银行', '营业网点']
  153. },
  154. series: [
  155. {
  156. name: 'GA38-2015',
  157. type: 'bar',
  158. color: '#5370c7',
  159. stack: 'total',
  160. label: {
  161. show: true
  162. },
  163. emphasis: {
  164. focus: 'series'
  165. },
  166. data: data.onlineGa38
  167. },
  168. {
  169. name: 'GA38-2021',
  170. type: 'bar',
  171. stack: 'total',
  172. color: '#92cd76',
  173. label: {
  174. show: true
  175. },
  176. emphasis: {
  177. focus: 'series'
  178. },
  179. data: data.offlineGa38
  180. },
  181. {
  182. name: '未达标',
  183. type: 'bar',
  184. stack: 'total',
  185. color: '#ee6666',
  186. label: {
  187. show: true
  188. },
  189. emphasis: {
  190. focus: 'series'
  191. },
  192. data: data.bankingGa38
  193. }
  194. ]
  195. }
  196. return option
  197. }
  198. let securityPrecautions = (data = []) => {
  199. var colors = ['#ee6666', '#5370c7']
  200. let option = {
  201. title: {
  202. text: '',
  203. left: 'left'
  204. },
  205. tooltip: {
  206. trigger: 'item'
  207. },
  208. legend: {
  209. orient: 'vertical',
  210. top: 'center',
  211. left: '58%',
  212. data: data,
  213. formatter: function (name) {
  214. var data = option.series[0].data
  215. var total = 0
  216. var tarValue
  217. for (var i = 0; i < data.length; i++) {
  218. total += data[i].value
  219. if (data[i].name == name) {
  220. tarValue = data[i].value
  221. }
  222. }
  223. var v = tarValue
  224. var p = Math.round((tarValue / total) * 100)
  225. return `${name} ${v}家 ${p}%`
  226. }
  227. },
  228. series: [
  229. {
  230. center: ['30%', '50%'],
  231. type: 'pie',
  232. radius: '70%',
  233. data: data,
  234. itemStyle: {
  235. normal: {
  236. shadowBlur: 1,
  237. color: function (param) {
  238. // console.log(param.dataIndex)
  239. return colors[param.dataIndex]
  240. }
  241. }
  242. },
  243. label: {
  244. position: 'inner',
  245. textStyle: {
  246. fontSize: 14,
  247. color: '#181818'
  248. },
  249. formatter: params => {
  250. return `${params.value}`
  251. }
  252. },
  253. labelLine: {
  254. show: false
  255. },
  256. emphasis: {
  257. itemStyle: {
  258. shadowBlur: 10,
  259. shadowOffsetX: 0
  260. }
  261. }
  262. }
  263. ]
  264. }
  265. return option
  266. }
  267. //网点业务总览
  268. // [
  269. // { value: 666, name: '巡查上报' },
  270. // { value: 193, name: '自行处置' },
  271. // { value: 300, name: '微信市民举报' },
  272. // { value: 200, name: '微治理上报' },
  273. // { value: 100, name: '视频抓拍' }
  274. // ]
  275. //保安情况
  276. let dotData = (
  277. title = '',
  278. data = [],
  279. num = 0,
  280. listNames = ['一类库', '二类库', '三类库', '四类库']
  281. ) => {
  282. var colors = ['#146de0', '#27ef5e', '#ffc140', '#d151d8', 'red']
  283. let option = {
  284. xAxis: {
  285. type: 'category',
  286. data: listNames
  287. },
  288. yAxis: {
  289. type: 'value'
  290. },
  291. series: [
  292. {
  293. show: true,
  294. data: data,
  295. type: 'bar',
  296. label: {
  297. show: true,
  298. //数值展示的位置
  299. textStyle: {
  300. color: 'black',
  301. fontSize: 12
  302. },
  303. position: 'top', // 顶部显示
  304. formatter: function (params) {
  305. return (
  306. data[params.dataIndex] +
  307. '(' +
  308. (data[params.dataIndex] ? (data[params.dataIndex] / num) * 100:0).toFixed(0) +
  309. '%)'
  310. )
  311. }
  312. },
  313. barWidth: 40,
  314. color: '#5370c7',
  315. backgroundStyle: {
  316. color: 'rgba(220, 220, 220, 0.8)'
  317. }
  318. }
  319. ]
  320. }
  321. return option
  322. }
  323. var get = function (e) {
  324. var newStr = ' '
  325. var start, end
  326. var name_len = e.name.length //每个内容名称的长度
  327. var max_name = 5 //每行最多显示的字数
  328. var new_row = Math.ceil(name_len / max_name) // 最多能显示几行,向上取整比如2.1就是3行
  329. if (name_len > max_name) {
  330. //如果长度大于每行最多显示的字数
  331. for (var i = 0; i < new_row; i++) {
  332. //循环次数就是行数
  333. var old = '' //每次截取的字符
  334. start = i * max_name //截取的起点
  335. end = start + max_name //截取的终点
  336. if (i == new_row - 1) {
  337. //最后一行就不换行了
  338. old = e.name.substring(start)
  339. } else {
  340. old = e.name.substring(start, end) + '\n'
  341. }
  342. newStr += old //拼接字符串
  343. }
  344. } else {
  345. //如果小于每行最多显示的字数就返回原来的字符串
  346. newStr = e.name
  347. }
  348. return newStr + `(${e.value})`
  349. }
  350. //在行式自助银行
  351. let ZHSData = (
  352. title = '在行式自助银行',
  353. data = [
  354. // { value: 666, name: '穿墙式设备' },
  355. // { value: 193, name: '大堂式设备' }
  356. ]
  357. ) => {
  358. let option = {
  359. series: [
  360. {
  361. color: ['#5470c6', '#91cc75', '#ee6666', '#73c0de'],
  362. name: '',
  363. type: 'pie',
  364. radius: '50%',
  365. center: ['50%', '50%'],
  366. data: data,
  367. label: {
  368. normal: {
  369. formatter: get,
  370. rich: {
  371. b: {
  372. width: 20,
  373. fontSize: 12
  374. }
  375. },
  376. textStyle: {
  377. color: '#656565' // 改变标示文字的颜色
  378. }
  379. }
  380. },
  381. emphasis: {
  382. itemStyle: {
  383. shadowBlur: 10,
  384. shadowOffsetX: 0,
  385. shadowColor: 'rgba(0, 0, 0, 0.5)'
  386. }
  387. }
  388. }
  389. ]
  390. }
  391. return option
  392. }
  393. //日常履职完成率
  394. let resumption = (data, type = 0) => {
  395. var getzszy = [] //数据点名称
  396. var getzswcl = [] //招生完成率
  397. var getzswcl2 = [] //招生完成率
  398. var getzswclzd = [] //招生完成率100%
  399. if (type == 0) {
  400. if (data && data.length > 0) {
  401. getzszy = data.map(item => item.orgName)
  402. getzswcl = data.map(item => parseInt(item.rate * 100))
  403. getzswcl2 = data.map(item => parseInt(item.rate * 100) + '%')
  404. }
  405. } else {
  406. if (data && data.length > 0) {
  407. getzszy = data.map(item => item.orgName)
  408. getzswcl = data.map(item => {
  409. if (item.isNo) {
  410. return parseInt(item.rate * 100)
  411. } else {
  412. return parseInt(item.rate)
  413. }
  414. })
  415. getzswcl2 = data.map(item => {
  416. if (item.isNo) {
  417. return parseInt(item.rate * 100) + '%'
  418. } else {
  419. return item.rate + '项'
  420. }
  421. })
  422. }
  423. }
  424. for (let i = 0; i < getzswcl.length; i++) {
  425. if (getzswcl[i] > 100) {
  426. getzswcl[i] = 100
  427. }
  428. getzswclzd.push(100)
  429. }
  430. var num = type == 0 ? '18%' : '25%'
  431. var numleft = type == 0 ? '35%' : '25%'
  432. let option = {
  433. grid: {
  434. right: num,
  435. bottom: '3%',
  436. left: numleft,
  437. top: '3%'
  438. },
  439. tooltip: {
  440. trigger: 'axis',
  441. axisPointer: {
  442. type: 'none'
  443. },
  444. formatter: function (params) {
  445. return getzszy[params[0].dataIndex] + '<br>完成率: ' + getzswcl2[params[0].dataIndex]
  446. }
  447. },
  448. xAxis: {
  449. show: false,
  450. type: 'value'
  451. },
  452. yAxis: [
  453. {
  454. type: 'category',
  455. inverse: true,
  456. axisLabel: {
  457. show: true,
  458. textStyle: {
  459. color: '#666666',
  460. fontSize: '13'
  461. }
  462. },
  463. splitLine: {
  464. show: false
  465. },
  466. axisTick: {
  467. show: false
  468. },
  469. axisLine: {
  470. show: false
  471. },
  472. data: getzszy
  473. },
  474. {
  475. type: 'category',
  476. inverse: true,
  477. axisTick: 'none',
  478. axisLine: 'none',
  479. show: true,
  480. axisLabel: {
  481. textStyle: {
  482. color: '#333333',
  483. fontSize: '13'
  484. },
  485. // formatter: '{value}%'
  486. formatter: function (value, index) {
  487. return value
  488. }
  489. },
  490. data: getzswcl2
  491. }
  492. ],
  493. series: [
  494. {
  495. name: '值',
  496. type: 'bar',
  497. zlevel: 1,
  498. itemStyle: {
  499. normal: {
  500. barBorderRadius: 5,
  501. color: '#4E7BFE'
  502. }
  503. },
  504. barWidth: 10,
  505. data: getzswcl
  506. },
  507. {
  508. name: '背景',
  509. type: 'bar',
  510. barWidth: 10,
  511. barGap: '-100%',
  512. data: getzswclzd,
  513. itemStyle: {
  514. normal: {
  515. color: 'rgba(103,150,253,0.3)',
  516. barBorderRadius: 5
  517. }
  518. }
  519. }
  520. ]
  521. }
  522. return option
  523. }
  524. export { securityPrecautions, resumption, dotData, ZHSData, aqsecurity, ddsecurity }