indexEcharts.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  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: '在行式自助银行',
  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: '离行式自助银行',
  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 data[params.dataIndex] + '(' + ((data[params
  306. .dataIndex] /num*100)).toFixed(0) + '%)'
  307. }
  308. },
  309. barWidth: 40,
  310. color: '#5370c7',
  311. backgroundStyle: {
  312. color: 'rgba(220, 220, 220, 0.8)'
  313. }
  314. }
  315. ]
  316. }
  317. return option
  318. }
  319. var get = function (e) {
  320. var newStr = ' '
  321. var start, end
  322. var name_len = e.name.length //每个内容名称的长度
  323. var max_name = 5 //每行最多显示的字数
  324. var new_row = Math.ceil(name_len / max_name) // 最多能显示几行,向上取整比如2.1就是3行
  325. if (name_len > max_name) {
  326. //如果长度大于每行最多显示的字数
  327. for (var i = 0; i < new_row; i++) {
  328. //循环次数就是行数
  329. var old = '' //每次截取的字符
  330. start = i * max_name //截取的起点
  331. end = start + max_name //截取的终点
  332. if (i == new_row - 1) {
  333. //最后一行就不换行了
  334. old = e.name.substring(start)
  335. } else {
  336. old = e.name.substring(start, end) + '\n'
  337. }
  338. newStr += old //拼接字符串
  339. }
  340. } else {
  341. //如果小于每行最多显示的字数就返回原来的字符串
  342. newStr = e.name
  343. }
  344. return newStr + `(${e.value})`
  345. }
  346. //在行式自助银行
  347. let ZHSData = (
  348. title = '在行式自助银行',
  349. data = [
  350. // { value: 666, name: '穿墙式设备' },
  351. // { value: 193, name: '大堂式设备' }
  352. ]
  353. ) => {
  354. let option = {
  355. series: [
  356. {
  357. color: ['#5470c6', '#91cc75', '#ee6666', '#73c0de'],
  358. name: '',
  359. type: 'pie',
  360. radius: '50%',
  361. center: ['50%', '50%'],
  362. data: data,
  363. label: {
  364. normal: {
  365. formatter: get,
  366. rich: {
  367. b: {
  368. width: 20,
  369. fontSize: 12
  370. }
  371. },
  372. textStyle: {
  373. color: '#656565' // 改变标示文字的颜色
  374. }
  375. }
  376. },
  377. emphasis: {
  378. itemStyle: {
  379. shadowBlur: 10,
  380. shadowOffsetX: 0,
  381. shadowColor: 'rgba(0, 0, 0, 0.5)'
  382. }
  383. }
  384. }
  385. ]
  386. }
  387. return option
  388. }
  389. //日常履职完成率
  390. let resumption = (data, type = 0) => {
  391. var getzszy = [] //数据点名称
  392. var getzswcl = [] //招生完成率
  393. var getzswcl2 = [] //招生完成率
  394. var getzswclzd = [] //招生完成率100%
  395. if (type == 0) {
  396. if (data && data.length > 0) {
  397. getzszy = data.map(item => item.orgName)
  398. getzswcl = data.map(item => parseInt(item.rate * 100))
  399. getzswcl2 = data.map(item => parseInt(item.rate * 100) + '%')
  400. }
  401. } else {
  402. if (data && data.length > 0) {
  403. getzszy = data.map(item => item.orgName)
  404. getzswcl = data.map(item => {
  405. if (item.isNo) {
  406. return parseInt(item.rate * 100)
  407. } else {
  408. return parseInt(item.rate)
  409. }
  410. })
  411. getzswcl2 = data.map(item => {
  412. if (item.isNo) {
  413. return parseInt(item.rate * 100) + '%'
  414. } else {
  415. return item.rate + '项'
  416. }
  417. })
  418. }
  419. }
  420. for (let i = 0; i < getzswcl.length; i++) {
  421. if (getzswcl[i] > 100) {
  422. getzswcl[i] = 100
  423. }
  424. getzswclzd.push(100)
  425. }
  426. var num = type == 0 ? '18%' : '25%'
  427. var numleft = type == 0 ? '35%' : '25%'
  428. let option = {
  429. grid: {
  430. right: num,
  431. bottom: '3%',
  432. left: numleft,
  433. top: '3%'
  434. },
  435. tooltip: {
  436. trigger: 'axis',
  437. axisPointer: {
  438. type: 'none'
  439. },
  440. formatter: function (params) {
  441. return getzszy[params[0].dataIndex] + '<br>完成率: ' + getzswcl2[params[0].dataIndex]
  442. }
  443. },
  444. xAxis: {
  445. show: false,
  446. type: 'value'
  447. },
  448. yAxis: [
  449. {
  450. type: 'category',
  451. inverse: true,
  452. axisLabel: {
  453. show: true,
  454. textStyle: {
  455. color: '#666666',
  456. fontSize: '13'
  457. }
  458. },
  459. splitLine: {
  460. show: false
  461. },
  462. axisTick: {
  463. show: false
  464. },
  465. axisLine: {
  466. show: false
  467. },
  468. data: getzszy
  469. },
  470. {
  471. type: 'category',
  472. inverse: true,
  473. axisTick: 'none',
  474. axisLine: 'none',
  475. show: true,
  476. axisLabel: {
  477. textStyle: {
  478. color: '#333333',
  479. fontSize: '13'
  480. },
  481. // formatter: '{value}%'
  482. formatter: function (value, index) {
  483. return value
  484. }
  485. },
  486. data: getzswcl2
  487. }
  488. ],
  489. series: [
  490. {
  491. name: '值',
  492. type: 'bar',
  493. zlevel: 1,
  494. itemStyle: {
  495. normal: {
  496. barBorderRadius: 5,
  497. color: '#4E7BFE'
  498. }
  499. },
  500. barWidth: 10,
  501. data: getzswcl
  502. },
  503. {
  504. name: '背景',
  505. type: 'bar',
  506. barWidth: 10,
  507. barGap: '-100%',
  508. data: getzswclzd,
  509. itemStyle: {
  510. normal: {
  511. color: 'rgba(103,150,253,0.3)',
  512. barBorderRadius: 5
  513. }
  514. }
  515. }
  516. ]
  517. }
  518. return option
  519. }
  520. export { securityPrecautions, resumption, dotData, ZHSData, aqsecurity, ddsecurity }