widgetBarMap.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. <template>
  2. <div :style="styleObj">
  3. <v-chart ref="myVChart" :options="options" autoresize/>
  4. </div>
  5. </template>
  6. <script>
  7. import {targetWidgetLinkageLogic} from "@/views/bigScreenDesigner/designer/linkageLogic";
  8. import "../../../../../../node_modules/echarts/map/js/china.js";
  9. import "../../../../../../node_modules/echarts/map/js/world.js";
  10. import "../../../../../../node_modules/echarts/map/js/province/anhui";
  11. import "../../../../../../node_modules/echarts/map/js/province/aomen";
  12. import "../../../../../../node_modules/echarts/map/js/province/beijing";
  13. import "../../../../../../node_modules/echarts/map/js/province/chongqing";
  14. import "../../../../../../node_modules/echarts/map/js/province/fujian";
  15. import "../../../../../../node_modules/echarts/map/js/province/gansu";
  16. import "../../../../../../node_modules/echarts/map/js/province/guangxi";
  17. import "../../../../../../node_modules/echarts/map/js/province/guizhou";
  18. import "../../../../../../node_modules/echarts/map/js/province/hainan";
  19. import "../../../../../../node_modules/echarts/map/js/province/hebei";
  20. import "../../../../../../node_modules/echarts/map/js/province/heilongjiang";
  21. import "../../../../../../node_modules/echarts/map/js/province/henan";
  22. import "../../../../../../node_modules/echarts/map/js/province/hubei";
  23. import "../../../../../../node_modules/echarts/map/js/province/hunan";
  24. import "../../../../../../node_modules/echarts/map/js/province/jiangsu";
  25. import "../../../../../../node_modules/echarts/map/js/province/jiangxi";
  26. import "../../../../../../node_modules/echarts/map/js/province/jilin";
  27. import "../../../../../../node_modules/echarts/map/js/province/liaoning";
  28. import "../../../../../../node_modules/echarts/map/js/province/neimenggu";
  29. import "../../../../../../node_modules/echarts/map/js/province/ningxia";
  30. import "../../../../../../node_modules/echarts/map/js/province/qinghai";
  31. import "../../../../../../node_modules/echarts/map/js/province/shandong";
  32. import "../../../../../../node_modules/echarts/map/js/province/shanghai";
  33. import "../../../../../../node_modules/echarts/map/js/province/shanxi";
  34. import "../../../../../../node_modules/echarts/map/js/province/shanxi1";
  35. import "../../../../../../node_modules/echarts/map/js/province/sichuan";
  36. import "../../../../../../node_modules/echarts/map/js/province/taiwan";
  37. import "../../../../../../node_modules/echarts/map/js/province/tianjin";
  38. import "../../../../../../node_modules/echarts/map/js/province/xianggang";
  39. import "../../../../../../node_modules/echarts/map/js/province/xinjiang";
  40. import "../../../../../../node_modules/echarts/map/js/province/xizang";
  41. import "../../../../../../node_modules/echarts/map/js/province/yunnan";
  42. import "../../../../../../node_modules/echarts/map/js/province/zhejiang";
  43. import {conversionProvince} from "@/utils/china";
  44. import echarts from "echarts";
  45. let geoCoordMap = conversionProvince;
  46. export default {
  47. name: "widgetBarMap",
  48. props: {
  49. value: Object,
  50. ispreview: Boolean,
  51. },
  52. data() {
  53. return {
  54. options: {
  55. title: {
  56. show: true,
  57. },
  58. //backgroundColor: '#131C38',
  59. tooltip: {
  60. trigger: 'item',
  61. show: true,
  62. enterable: true,
  63. textStyle: {
  64. fontSize: 20,
  65. color: '#fff'
  66. },
  67. backgroundColor: 'rgba(0,2,89,0.8)',
  68. formatter: function (params, ticket, callback) {
  69. if (params.seriesType == "scatter") {
  70. return params.data.name + "" + params.data.value[2];
  71. } else {
  72. return params.name;
  73. }
  74. },
  75. },
  76. geo: {
  77. map: "china",
  78. show: true,
  79. roam: true,
  80. layoutSize: "80%",
  81. label: {
  82. emphasis: {
  83. show: false,
  84. color: "white",
  85. },
  86. },
  87. itemStyle: {
  88. normal: {
  89. borderColor: new echarts.graphic.LinearGradient(
  90. 0,
  91. 0,
  92. 0,
  93. 1,
  94. [
  95. {
  96. offset: 0,
  97. color: "#00F6FF",
  98. },
  99. {
  100. offset: 1,
  101. color: "#53D9FF",
  102. },
  103. ],
  104. false
  105. ),
  106. borderWidth: 1,
  107. shadowColor: "rgba(10,76,139,1)",
  108. shadowOffsetY: 0,
  109. shadowBlur: 60,
  110. },
  111. },
  112. },
  113. series: [
  114. // 柱状体的主干
  115. {
  116. type: 'lines',
  117. zlevel: 1,
  118. effect: {
  119. show: false,
  120. symbolSize: 5 // 图标大小
  121. },
  122. lineStyle: {
  123. width: 20, // 尾迹线条宽度
  124. color: 'rgb(22,255,255, .6)',
  125. opacity: 1, // 尾迹线条透明度
  126. curveness: 0 // 尾迹线条曲直度
  127. },
  128. silent: true,
  129. data: []
  130. },
  131. // 柱状体的顶部
  132. {
  133. type: 'scatter',
  134. coordinateSystem: 'geo',
  135. //geoIndex: 0,
  136. zlevel: 1,
  137. rippleEffect: {
  138. brushType: "stroke",
  139. },
  140. label: {
  141. show: true,
  142. formatter: function (params) {
  143. return "{cnNum|" + params.data[2] + "}";
  144. },
  145. rich: {
  146. cnNum: {
  147. // 数值字号
  148. fontSize: 13,
  149. color: "#D4EEFF",
  150. },
  151. },
  152. position: "top"
  153. },
  154. symbol: 'circle',
  155. symbolSize: [20, 10],
  156. itemStyle: {
  157. color: 'rgb(22,255,255, 1)',
  158. opacity: 1
  159. },
  160. silent: true,
  161. data: []
  162. },
  163. // 柱状体的底部
  164. {
  165. type: 'scatter',
  166. coordinateSystem: 'geo',
  167. rippleEffect: {
  168. brushType: "stroke",
  169. },
  170. //geoIndex: 0,
  171. zlevel: 1,
  172. label: {
  173. // 这儿是处理的
  174. formatter: '{b}',
  175. position: 'bottom',
  176. color: '#fff',
  177. fontSize: 12,
  178. distance: 10,
  179. show: true
  180. },
  181. symbol: 'circle',
  182. symbolSize: [20, 10],
  183. itemStyle: {
  184. // color: '#F7AF21',
  185. color: 'rgb(22,255,255, 1)',
  186. opacity: 1
  187. },
  188. silent: true,
  189. data: []
  190. },
  191. // 底部外框
  192. {
  193. type: 'scatter',
  194. coordinateSystem: 'geo',
  195. //geoIndex: 0,
  196. rippleEffect: {
  197. brushType: "stroke",
  198. },
  199. zlevel: 1,
  200. label: {
  201. show: false
  202. },
  203. symbol: 'circle',
  204. symbolSize: [40, 20],
  205. itemStyle: {
  206. color: {
  207. type: 'radial',
  208. x: 0.5,
  209. y: 0.5,
  210. r: 0.5,
  211. colorStops: [
  212. {
  213. offset: 0, color: 'rgb(22,255,255, 0)' // 0% 处的颜色
  214. },
  215. {
  216. offset: .75, color: 'rgb(22,255,255, 0)' // 100% 处的颜色
  217. },
  218. {
  219. offset: .751, color: 'rgb(22,255,255, 1)' // 100% 处的颜色
  220. },
  221. {
  222. offset: 1, color: 'rgb(22,255,255, 1)' // 100% 处的颜色
  223. }
  224. ],
  225. global: false // 缺省为 false
  226. },
  227. opacity: 1
  228. },
  229. silent: true,
  230. data: []
  231. }
  232. ]
  233. },
  234. optionsStyle: {}, // 样式
  235. optionsData: {}, // 数据
  236. optionsCollapse: {}, // 图标属性
  237. optionsSetup: {},
  238. flagInter: null,
  239. };
  240. },
  241. computed: {
  242. styleObj() {
  243. return {
  244. position: this.ispreview ? "absolute" : "static",
  245. width: this.optionsStyle.width + "px",
  246. height: this.optionsStyle.height + "px",
  247. left: this.optionsStyle.left + "px",
  248. top: this.optionsStyle.top + "px",
  249. background: this.optionsSetup.background,
  250. };
  251. },
  252. allComponentLinkage() {
  253. return this.$store.state.designer.allComponentLinkage;
  254. },
  255. },
  256. watch: {
  257. value: {
  258. handler(val) {
  259. this.optionsStyle = val.position;
  260. this.optionsData = val.data;
  261. this.optionsCollapse = val.setup;
  262. this.optionsSetup = val.setup;
  263. this.editorOptions();
  264. },
  265. deep: true,
  266. },
  267. },
  268. mounted() {
  269. this.optionsStyle = this.value.position;
  270. this.optionsData = this.value.data;
  271. this.optionsCollapse = this.value.setup;
  272. this.optionsSetup = this.value.setup;
  273. this.editorOptions();
  274. targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
  275. },
  276. methods: {
  277. // 修改图标options属性
  278. editorOptions() {
  279. this.setOptionsTitle();
  280. this.setOptionsGeo();
  281. this.setOptionsData();
  282. },
  283. // 标题设置
  284. setOptionsTitle() {
  285. const optionsSetup = this.optionsSetup;
  286. const title = {
  287. text: optionsSetup.text,
  288. show: optionsSetup.isShowTitle,
  289. left: optionsSetup.titleLeft,
  290. top: optionsSetup.titleTop + "%",
  291. itemGap: optionsSetup.titleItemGap,
  292. textStyle: {
  293. color: optionsSetup.textColor,
  294. fontSize: optionsSetup.textFontSize,
  295. fontWeight: optionsSetup.textFontWeight,
  296. fontStyle: optionsSetup.textFontStyle,
  297. fontFamily: optionsSetup.textFontFamily,
  298. },
  299. subtext: optionsSetup.subtext,
  300. subtextStyle: {
  301. color: optionsSetup.subtextColor,
  302. fontWeight: optionsSetup.subtextFontWeight,
  303. fontSize: optionsSetup.subtextFontSize,
  304. fontStyle: optionsSetup.subtextFontStyle,
  305. fontFamily: optionsSetup.subtextFontFamily
  306. },
  307. };
  308. this.options.title = title;
  309. },
  310. setOptionsGeo() {
  311. const optionsSetup = this.optionsSetup;
  312. const geo = {
  313. map: this.optionsSetup.mapName == '' ? "china" : this.optionsSetup.mapName,
  314. show: true,
  315. roam: true,
  316. layoutSize: "80%",
  317. label: {
  318. //调整数值
  319. // 地图省市区显隐
  320. show: optionsSetup.isShowMap,
  321. color: optionsSetup.fontColor,
  322. fontSize: optionsSetup.fontSize,
  323. fontWeight: optionsSetup.fontWeight,
  324. fontStyle: optionsSetup.fontStyle,
  325. fontFamily: optionsSetup.fontFamily,
  326. },
  327. itemStyle: {
  328. normal: {
  329. //地图块颜色
  330. areaColor: {
  331. x: 0,
  332. y: 0,
  333. x2: 0,
  334. y2: 1,
  335. colorStops: [
  336. {
  337. offset: 0,
  338. color: optionsSetup.fontColor0, // 0% 处的颜色
  339. },
  340. {
  341. offset: 1,
  342. color: optionsSetup.fontColor100, // 100% 处的颜色
  343. },
  344. ],
  345. },
  346. borderType: optionsSetup.borderType,
  347. borderColor: optionsSetup.borderColor,
  348. borderWidth: optionsSetup.borderWidth,
  349. shadowColor: optionsSetup.shadowColor,
  350. shadowBlur: optionsSetup.shadowBlur,
  351. opacity: optionsSetup.opacity / 100,
  352. },
  353. },
  354. //鼠标放置颜色加深
  355. emphasis: {
  356. label: {
  357. show: optionsSetup.isShowEmphasisLabel,
  358. color: optionsSetup.emphasisLabelFontColor,
  359. fontSize: optionsSetup.emphasisLabelFontSize,
  360. fontWeight: optionsSetup.emphasisLabelFontWeight,
  361. fontStyle: optionsSetup.emphasisLabelFontStyle,
  362. fontFamily: optionsSetup.emphasisLabelFontFamily,
  363. },
  364. itemStyle: {
  365. areaColor: {
  366. x: 0,
  367. y: 0,
  368. x2: 0,
  369. y2: 1,
  370. colorStops: [
  371. {
  372. offset: 0,
  373. color: optionsSetup.emphasisLabelFontColor0, // 0% 处的颜色
  374. },
  375. {
  376. offset: 1,
  377. color: optionsSetup.emphasisLabelFontColor100, // 100% 处的颜色
  378. },
  379. ],
  380. },
  381. },
  382. },
  383. }
  384. this.options.geo = geo;
  385. },
  386. // 计算柱图的高度比例
  387. calMaxHeight(val, heightRate) {
  388. const maxValue = Math.max.apply(null, val.map(item => item.value))
  389. return heightRate / maxValue;
  390. },
  391. // 计算柱体的主干
  392. calScatterTrunk(val, heightRate) {
  393. return val.map((item) => {
  394. return {
  395. coords: [geoCoordMap[item.name], [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * this.calMaxHeight(val, heightRate)]]
  396. }
  397. })
  398. },
  399. // 计算柱体顶部
  400. calScatterTop(val, heightRate) {
  401. return val.map((item) => {
  402. return [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * this.calMaxHeight(val, heightRate), item.value]
  403. })
  404. },
  405. // 计算柱体的底部
  406. calScatterBottom(val) {
  407. return val.map((item) => {
  408. return {
  409. name: item.name,
  410. value: geoCoordMap[item.name]
  411. }
  412. })
  413. },
  414. // 柱体主干
  415. getOptionsBarTrunk(optionsSetup, arrColor, allData, heightRate) {
  416. const barTrunk = {
  417. type: 'lines',
  418. zlevel: 1,
  419. effect: {
  420. show: false,
  421. symbolSize: 5 // 图标大小
  422. },
  423. lineStyle: {
  424. width: optionsSetup.barWidth, // 尾迹线条宽度
  425. color: (params) => {
  426. return arrColor[params.dataIndex];
  427. },
  428. opacity: 1, // 尾迹线条透明度
  429. curveness: 0 // 尾迹线条曲直度
  430. },
  431. silent: true,
  432. data: this.calScatterTrunk(allData, heightRate),
  433. };
  434. return barTrunk;
  435. },
  436. // 柱体顶
  437. getOptionsBarTop(optionsSetup, arrColor, allData, heightRate) {
  438. const barTop = {
  439. type: 'scatter',
  440. coordinateSystem: 'geo',
  441. //geoIndex: 0,
  442. zlevel: 1,
  443. rippleEffect: {
  444. brushType: "stroke",
  445. },
  446. label: {
  447. show: optionsSetup.isShowFontData,
  448. formatter: function (params) {
  449. return "{cnNum|" + params.data[2] + "}";
  450. },
  451. rich: {
  452. cnNum: {
  453. // 数值字号
  454. fontSize: optionsSetup.fontDataSize,
  455. color: (params) => {
  456. return arrColor[params.dataIndex];
  457. },
  458. fontWeight: optionsSetup.fontDataWeight,
  459. fontStyle: optionsSetup.fontDataStyle,
  460. fontFamily: optionsSetup.fontDataFamily,
  461. },
  462. },
  463. position: "top"
  464. },
  465. symbol: 'circle',
  466. symbolSize: [optionsSetup.barWidth, 10],
  467. itemStyle: {
  468. color: (params) => {
  469. return arrColor[params.dataIndex];
  470. },
  471. opacity: 1
  472. },
  473. silent: true,
  474. data: this.calScatterTop(allData, heightRate)
  475. }
  476. return barTop;
  477. },
  478. // 柱底
  479. getOptionsBarBottom(optionsSetup, arrColor, allData) {
  480. const batBottom = {
  481. type: 'scatter',
  482. coordinateSystem: 'geo',
  483. rippleEffect: {
  484. brushType: "stroke",
  485. },
  486. //geoIndex: 0,
  487. zlevel: 1,
  488. label: {
  489. // 这儿是处理的
  490. show: optionsSetup.isShowFontText,
  491. formatter: '{b}',
  492. position: 'bottom',
  493. fontSize: optionsSetup.fontTextSize,
  494. color: (params) => {
  495. return arrColor[params.dataIndex];
  496. },
  497. fontWeight: optionsSetup.fontTextWeight,
  498. fontStyle: optionsSetup.fontTextStyle,
  499. fontFamily: optionsSetup.fontTextFamily,
  500. distance: 10,
  501. },
  502. symbol: 'circle',
  503. symbolSize: [optionsSetup.barWidth, 10],
  504. itemStyle: {
  505. color: (params) => {
  506. return arrColor[params.dataIndex];
  507. },
  508. opacity: 1,
  509. },
  510. silent: true,
  511. data: this.calScatterBottom(allData),
  512. }
  513. return batBottom;
  514. },
  515. // 柱底外圆
  516. getOptionsBarBottomOut(optionsSetup, arrColor, allData) {
  517. const barBottomOut = {
  518. type: 'scatter',
  519. coordinateSystem: 'geo',
  520. //geoIndex: 0,
  521. rippleEffect: {
  522. brushType: "stroke",
  523. },
  524. zlevel: 1,
  525. label: {
  526. show: false
  527. },
  528. symbol: 'circle',
  529. symbolSize: [optionsSetup.barBottomOutSymbolSize, 10],
  530. // 渐变色
  531. itemStyle: {
  532. color: (params) => {
  533. return {
  534. type: 'radial',
  535. x: 0.5,
  536. y: 0.5,
  537. r: 0.5,
  538. colorStops: [
  539. {
  540. offset: 0, color: 'rgba(22,255,255, 0)' // 0% 处的颜色
  541. },
  542. {
  543. offset: .75, color: 'rgba(22,255,255, 0)' // 100% 处的颜色
  544. },
  545. {
  546. offset: .751, color: arrColor[params.dataIndex] // 100% 处的颜色
  547. },
  548. {
  549. offset: 1, color: arrColor[params.dataIndex] // 100% 处的颜色
  550. }
  551. ],
  552. global: false // 缺省为 false
  553. }
  554. },
  555. opacity: 1,
  556. },
  557. silent: true,
  558. data: this.calScatterBottom(allData),
  559. }
  560. return barBottomOut;
  561. },
  562. //数据解析
  563. setOptionsData(e, paramsConfig) {
  564. const optionsData = this.optionsData; // 数据类型 静态 or 动态
  565. // 联动接收者逻辑开始
  566. optionsData.dynamicData = optionsData.dynamicData || {}; // 兼容 dynamicData undefined
  567. const myDynamicData = optionsData.dynamicData;
  568. clearInterval(this.flagInter); // 不管咋,先干掉上一次的定时任务,避免多跑
  569. if (
  570. e &&
  571. optionsData.dataType !== "staticData" &&
  572. Object.keys(myDynamicData.contextData).length
  573. ) {
  574. const keyArr = Object.keys(myDynamicData.contextData);
  575. paramsConfig.forEach((conf) => {
  576. if (keyArr.includes(conf.targetKey)) {
  577. myDynamicData.contextData[conf.targetKey] = e[conf.originKey];
  578. }
  579. });
  580. }
  581. // 联动接收者逻辑结束
  582. optionsData.dataType == "staticData"
  583. ? this.staticDataFn(optionsData.staticData)
  584. : this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime);
  585. },
  586. staticDataFn(val) {
  587. let name = [];
  588. let latitude = [];
  589. let longitude = [];
  590. let value = [];
  591. for (const i in val) {
  592. name[i] = val[i].name;
  593. latitude[i] = val[i].latitude;
  594. longitude[i] = val[i].longitude;
  595. value[i] = val[i].value;
  596. }
  597. let allData = [];
  598. for (const i in name) {
  599. geoCoordMap[name[i]] = [latitude[i], longitude[i]]
  600. const obj = {
  601. name: name[i],
  602. value: value[i]
  603. }
  604. allData.push(obj)
  605. }
  606. const optionsSetup = this.optionsSetup;
  607. const heightRate = optionsSetup.heightRate;
  608. // 颜色设置
  609. const customColor = optionsSetup.customColor;
  610. if (!customColor) return;
  611. const arrColor = [];
  612. for (const i in val) {
  613. arrColor.push(customColor[i % customColor.length].color)
  614. }
  615. this.options.series[1] = this.getOptionsBarTrunk(optionsSetup, arrColor, allData, heightRate);
  616. this.options.series[2] = this.getOptionsBarTop(optionsSetup, arrColor, allData, heightRate);
  617. this.options.series[3] = this.getOptionsBarBottom(optionsSetup, arrColor, allData);
  618. this.options.series[4] = this.getOptionsBarBottomOut(optionsSetup, arrColor, allData);
  619. },
  620. dynamicDataFn(val, refreshTime) {
  621. if (!val) return;
  622. if (this.ispreview) {
  623. this.getEchartData(val);
  624. this.flagInter = setInterval(() => {
  625. this.getEchartData(val);
  626. }, refreshTime);
  627. } else {
  628. this.getEchartData(val);
  629. }
  630. },
  631. getEchartData(val) {
  632. const data = this.queryEchartsData(val);
  633. data.then((res) => {
  634. this.renderingFn(res);
  635. });
  636. },
  637. renderingFn(val) {
  638. let name = [];
  639. let latitude = [];
  640. let longitude = [];
  641. let value = [];
  642. for (const i in val) {
  643. name[i] = val[i].name;
  644. latitude[i] = val[i].latitude;
  645. longitude[i] = val[i].longitude;
  646. value[i] = val[i].value;
  647. }
  648. for (const i in val) {
  649. name[i] = val[i].name;
  650. latitude[i] = val[i].latitude;
  651. longitude[i] = val[i].longitude;
  652. value[i] = val[i].value;
  653. }
  654. let allData = [];
  655. for (const i in name) {
  656. geoCoordMap[name[i]] = [latitude[i], longitude[i]]
  657. const obj = {
  658. name: name[i],
  659. value: value[i]
  660. }
  661. allData.push(obj)
  662. }
  663. const optionsSetup = this.optionsSetup;
  664. const heightRate = optionsSetup.heightRate;
  665. // 颜色设置
  666. const customColor = optionsSetup.customColor;
  667. if (!customColor) return;
  668. const arrColor = [];
  669. for (const i in val) {
  670. arrColor.push(customColor[i % customColor.length].color)
  671. }
  672. this.$set(this.options.series, 1, this.getOptionsBarTrunk(optionsSetup, arrColor, allData, heightRate))
  673. this.$set(this.options.series, 2, this.getOptionsBarTop(optionsSetup, arrColor, allData, heightRate))
  674. this.$set(this.options.series, 3, this.getOptionsBarBottom(optionsSetup, arrColor, allData))
  675. this.$set(this.options.series, 4, this.getOptionsBarBottomOut(optionsSetup, arrColor, allData))
  676. },
  677. },
  678. };
  679. </script>
  680. <style lang="scss" scoped>
  681. .echartMap {
  682. width: 100%;
  683. height: 100%;
  684. }
  685. .echarts {
  686. width: 100%;
  687. height: 100%;
  688. overflow: hidden;
  689. }
  690. </style>