report_pie.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. <!-- -->
  2. <template>
  3. <div
  4. class="chart-template map-template"
  5. style="display: flex; flex-direction: row"
  6. >
  7. <div>机构统计</div>
  8. <!-- <div>
  9. <div>
  10. <span>营业网点</span>
  11. <span>
  12. <span>总数:</span>
  13. <span>3020</span>
  14. </span>
  15. <span>
  16. <span>达标数:</span>
  17. <span>500</span>
  18. </span>
  19. <span>
  20. <span>自有产权数:</span>
  21. <span>1500</span>
  22. </span>
  23. <span>
  24. <span>区域外网数:</span>
  25. <span>80</span>
  26. </span>
  27. </div>
  28. <div>
  29. <span>自助设备</span>
  30. <span>
  31. <span>总数:</span>
  32. <span>4000</span>
  33. </span>
  34. <span>
  35. <span>在行式穿墙机具:</span>
  36. <span>2000</span>
  37. </span>
  38. <span>
  39. <span>在行式堂式机具:</span>
  40. <span>1500</span>
  41. </span>
  42. <span>
  43. <span>离行式穿墙机具:</span>
  44. <span>2000</span>
  45. </span>
  46. <span>
  47. <span>离行式堂式机具:</span>
  48. <span>1500</span>
  49. </span>
  50. </div>
  51. <div>
  52. <span>自助银行</span>
  53. <span>
  54. <span>总数:</span>
  55. <span>4000</span>
  56. </span>
  57. <span>
  58. <span>在行式自助银行:</span>
  59. <span>2000</span>
  60. </span>
  61. <span>
  62. <span>离行式自助银行:</span>
  63. <span>1500</span>
  64. </span>
  65. </div>
  66. <div>
  67. <span>业务库</span>
  68. <span>
  69. <span>总数:</span>
  70. <span>3020</span>
  71. </span>
  72. <span>
  73. <span>一类库:</span>
  74. <span>2000</span>
  75. </span>
  76. <span>
  77. <span>二类库:</span>
  78. <span>1500</span>
  79. </span>
  80. <span>
  81. <span>三类库:80</span>
  82. <span>80</span>
  83. </span>
  84. <span>
  85. <span>四类库</span>
  86. <span>80</span>
  87. </span>
  88. </div>
  89. </div> -->
  90. <div id="org_Chart"></div>
  91. </div>
  92. </template>
  93. <script>
  94. import "./../../board.scss";
  95. import * as echarts from "echarts";
  96. import {
  97. findMaxIndex,
  98. getChartDOMSize,
  99. getNextPeriod,
  100. getPeriodText,
  101. } from "../../utils.js";
  102. export default {
  103. props: ["orgId"],
  104. data() {
  105. return {
  106. data: {
  107. all: [],
  108. completed: [],
  109. name: [],
  110. },
  111. };
  112. },
  113. components: {},
  114. computed: {},
  115. watch: {
  116. orgId: {
  117. deep: true,
  118. handler(val) {
  119. // this.resetTimer();
  120. this.getData();
  121. },
  122. },
  123. data: {
  124. deep: true,
  125. handler() {
  126. this.initMap();
  127. },
  128. },
  129. },
  130. created() {
  131. // this.types = types;
  132. this.maxDisplay = 16;
  133. // this.refreshTime = 1 * 10 * 1000;
  134. // this.isMouseOver = false;
  135. },
  136. async mounted() {
  137. window.addEventListener("resize", this.windowResize);
  138. },
  139. beforeDestroy() {
  140. this.timer && clearInterval(this.timer);
  141. this.timer = null;
  142. window.removeEventListener("resize", this.windowResize);
  143. },
  144. methods: {
  145. handleClick() {
  146. this.resetTimer();
  147. this.getData();
  148. },
  149. handleMouseEnter() {
  150. this.isMouseOver = true;
  151. },
  152. handleMouseLeave() {
  153. this.isMouseOver = false;
  154. },
  155. async getData() {
  156. // let bs = parseInt(this.activeName) + 1;
  157. this.data = {
  158. all: 500,
  159. unconfirm: 112, //未确认
  160. auditing: 20, //异议审批中
  161. unreform: 50, //待整改
  162. notQuestion: 4,
  163. reformed: 500 - 112 - 20 - 50 - 4,
  164. };
  165. },
  166. windowResize() {
  167. this.myChart && this.myChart.resize();
  168. },
  169. initMap() {
  170. this.myChart && this.myChart.dispose();
  171. // 基于准备好的dom,初始化echarts实例
  172. this.myChart = echarts.init(document.getElementById("org_Chart"));
  173. let t = this;
  174. // 指定图表的配置项和数据
  175. var option = {
  176. backgroundColor: "rgba(0,0,0,0)",
  177. // color: ["#C0FBB5", "#46557B"],
  178. legend: {
  179. show: false,
  180. icon: "circle",
  181. // data: ["达标数", "自有产权数","区域外网数"],
  182. textStyle: {
  183. color: "#fff",
  184. // fontSize:18
  185. },
  186. left: "center",
  187. top: "5%",
  188. },
  189. tooltip: {
  190. trigger: "item",
  191. },
  192. series: [
  193. {
  194. name: "营业网点",
  195. type: "pie",
  196. radius: ["65%", "85%"],
  197. center: [`12.5%`, "50%"],
  198. data: [
  199. {
  200. name: "达标数",
  201. value: 2000,
  202. },
  203. {
  204. name: "自有产权数",
  205. value: 1500,
  206. },
  207. {
  208. name: "区域外网数",
  209. value: 80,
  210. },
  211. ],
  212. label: {
  213. show: true,
  214. position: "center",
  215. color: "#fff",
  216. fontSize: 14,
  217. formatter: function (value) {
  218. return "3020\n" + "\n营业网点";
  219. },
  220. },
  221. tooltip: {
  222. show: true,
  223. trigger: "item",
  224. backgroundColor: "#b8bdc0",
  225. textStyle: {
  226. color: "#000",
  227. },
  228. confine:true,
  229. formatter: function (value) {
  230. let html=`<div style="z-index:999;">
  231. <div>营业网点</div>
  232. <div>总数:3020</div>
  233. <div>达标数:2000</div>
  234. <div>自有产权数:1500</div>
  235. <div>区域外网数:80</div>
  236. </div>`
  237. return html;
  238. },
  239. },
  240. // alignTo: 'none',
  241. // bleedMargin: 5,
  242. // left: 0,
  243. // right: 0,
  244. // top: 0,
  245. // bottom: 0,
  246. },
  247. {
  248. name: "业务库",
  249. type: "pie",
  250. radius: ["65%", "85%"],
  251. center: [`37.5%`, "50%"],
  252. data: [
  253. {
  254. name: "一类库",
  255. value: 2000,
  256. },
  257. {
  258. name: "二类库",
  259. value: 1500,
  260. },
  261. {
  262. name: "三类库",
  263. value: 80,
  264. },
  265. {
  266. name: "四类库",
  267. value: 80,
  268. },
  269. ],
  270. label: {
  271. show: true,
  272. position: "center",
  273. color: "#fff",
  274. fontSize: 14,
  275. formatter: function (value) {
  276. return "2000\n" + "\n业务库";
  277. },
  278. },
  279. tooltip: {
  280. show: true,
  281. trigger: "item",
  282. backgroundColor: "#b8bdc0",
  283. textStyle: {
  284. color: "#000",
  285. },
  286. confine: true,
  287. formatter: function (value) {
  288. let html = `<div style="z-index:999;">
  289. <div>业务库</div>
  290. <div>总数:3020</div>
  291. <div>一类库:2000</div>
  292. <div>二类库:1500</div>
  293. <div>三类库:80</div>
  294. <div>四类库:80</div>
  295. </div>`;
  296. return html;
  297. },
  298. },
  299. // alignTo: 'none',
  300. // bleedMargin: 5,
  301. // left: 0,
  302. // right: 0,
  303. // top: 0,
  304. // bottom: 0,
  305. },
  306. {
  307. name: "自助银行",
  308. type: "pie",
  309. radius: ["62%", "85%"],
  310. center: [`62.5%`, "50%"],
  311. data: [
  312. {
  313. name: "在行式自助银行",
  314. value: 2000,
  315. },
  316. {
  317. name: "离行式自助银行",
  318. value: 1500,
  319. },
  320. ],
  321. label: {
  322. show: true,
  323. position: "center",
  324. color: "#fff",
  325. fontSize: 14,
  326. formatter: function (value) {
  327. return "4000\n" + "\n自助银行";
  328. },
  329. },
  330. tooltip: {
  331. show: true,
  332. trigger: "item",
  333. backgroundColor: "#b8bdc0",
  334. textStyle: {
  335. color: "#000",
  336. },
  337. confine: true,
  338. formatter: function (value) {
  339. let html = `<div style="z-index:999;">
  340. <div>自助银行</div>
  341. <div>总数:4000</div>
  342. <div>在行式自助银行:2000</div>
  343. <div>离行式自助银行:1500</div>
  344. </div>`;
  345. return html;
  346. },
  347. },
  348. },
  349. {
  350. name: "自助设备",
  351. type: "pie",
  352. radius: ["62%", "85%"],
  353. center: [`87.5%`, "50%"],
  354. data: [
  355. {
  356. name: "在行式穿墙机具",
  357. value: 2000,
  358. },
  359. {
  360. name: "在行式堂式机具",
  361. value: 1500,
  362. },
  363. {
  364. name: "离行式穿墙机具",
  365. value: 2000,
  366. },
  367. {
  368. name: "离行式堂式机具",
  369. value: 1500,
  370. },
  371. ],
  372. label: {
  373. show: true,
  374. position: "center",
  375. color: "#fff",
  376. fontSize: 14,
  377. formatter: function (value) {
  378. return "10000\n" + "\n自助设备";
  379. },
  380. },
  381. tooltip: {
  382. show: true,
  383. trigger: "item",
  384. backgroundColor: "#b8bdc0",
  385. textStyle: {
  386. color: "#000",
  387. },
  388. confine: true,
  389. formatter: function (value) {
  390. let html = `<div style="z-index:999;">
  391. <div>自助设备</div>
  392. <div>总数:4000</div>
  393. <div>在行式穿墙机具:2000</div>
  394. <div>在行式堂式机具:1500</div>
  395. <div>离行式穿墙机具:2000</div>
  396. <div>离行式堂式机具:1500</div>
  397. </div>`;
  398. return html;
  399. },
  400. },
  401. },
  402. ],
  403. };
  404. if (option && typeof option === "object") {
  405. this.myChart.setOption(option);
  406. }
  407. },
  408. resetTimer() {
  409. // this.timer && clearInterval(this.timer);
  410. // this.timer = setInterval(() => {
  411. // if (this.isMouseOver) {
  412. // return;
  413. // }
  414. // this.activeName = getNextPeriod(this.types, this.activeName);
  415. // this.getData();
  416. // }, this.refreshTime);
  417. },
  418. },
  419. };
  420. </script>
  421. <style lang="scss" scoped>
  422. .map-template {
  423. & > div {
  424. margin: 0px;
  425. padding: 0px;
  426. }
  427. & > div:first-child {
  428. // display: none;
  429. width: 30px;
  430. height: 100%;
  431. color: rgb(245, 245, 245);
  432. background-color: #b8bdc088;
  433. text-align: center;
  434. font-size: 14px;
  435. writing-mode: vertical-lr;
  436. padding-left: 5px;
  437. padding-right: 5px;
  438. }
  439. // & > div:nth-child(2) {
  440. // height: 100%;
  441. // width: calc(100% - 30px);
  442. // font-size: 14px;
  443. // line-height: 23px;
  444. // display: flex;
  445. // flex-direction: row;
  446. // & > div {
  447. // border: solid 1px #b8bdc088;
  448. // background-color: #b8bdc055;
  449. // display: flex;
  450. // flex-direction: column;
  451. // width:calc(25% - 20px);
  452. // margin: 10px;
  453. // & > span:first-child {
  454. // background-color: #b8bdc088;
  455. // text-align: center;
  456. // }
  457. // & > span:not(:nth-child(1)) {
  458. // & > span {
  459. // display: inline-block;
  460. // }
  461. // & > span:first-child {
  462. // width: calc(100% - 60px);
  463. // text-align: right;
  464. // }
  465. // & > span:last-child {
  466. // width: 60px;
  467. // }
  468. // }
  469. // }
  470. // }
  471. & > div:last-child {
  472. height: 100%;
  473. width: calc(100% - 30px);
  474. }
  475. }
  476. </style>