resourceDangerComponent.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. <template>
  2. <div class="resourceDangerComponent">
  3. <title-page-img-components :propsData="propsData"></title-page-img-components>
  4. <div class="eCharts-max-big-box">
  5. <!--<div class="position-button-left">-->
  6. <!--<p @click="checkButton(1)" :class="buttonType == 1?'left-border-1':'left-border-2'">年度</p>-->
  7. <!--<p @click="checkButton(2)" :class="buttonType == 1?'center-border-2':(buttonType == 2?'center-border-1':(buttonType == 3?'center-border-3':''))">季度</p>-->
  8. <!--<p @click="checkButton(3)" :class="buttonType == 3?'right-border-1':'right-border-2'">月度</p>-->
  9. <!--</div>-->
  10. <div class="position-text-box">
  11. <p class="position-text">总数</p>
  12. <p class="position-num">{{dangerNum}}</p>
  13. <!--<div class="position-num-box" v-if="yearOverYear>0">-->
  14. <!--<p class="null-p"></p>-->
  15. <!--<p class="text-num-p">同比 {{yearOverYear}}% </p>-->
  16. <!--<img src="@/assets/ZDimages/icom_whpclph_sz@1x.png">-->
  17. <!--<p class="null-p"></p>-->
  18. <!--</div>-->
  19. </div>
  20. <p class="position-img-box rotate-animation"></p>
  21. <div id="resourceDangerComponentECharts">
  22. </div>
  23. </div>
  24. </div>
  25. </template>
  26. <script>
  27. import {
  28. reportReportBsResourceRateAnalysisList,
  29. } from "@/api/index";
  30. import titlePageImgComponents from '@/components/titlePageImgComponents.vue'
  31. export default {
  32. name: 'resourceDangerComponent',
  33. components: {
  34. titlePageImgComponents
  35. },
  36. data () {
  37. return {
  38. propsData:{
  39. title:'资源分类占比统计',
  40. // checkType:'resourceDangerComponent',//本次暂无
  41. },
  42. //eCharts定时器
  43. eChartsTimer:null,
  44. // buttonType:1,
  45. dangerNum:0,
  46. yearOverYear:0,
  47. }
  48. },
  49. created(){
  50. },
  51. mounted() {
  52. this.timedRefresh();
  53. },
  54. methods: {
  55. timedRefresh(){
  56. let self = this;
  57. self.getData();
  58. //定时动画
  59. window.clearInterval(self.eChartsTimer);
  60. self.eChartsTimer = setInterval(function(){
  61. self.getData();
  62. },1000*30);
  63. },
  64. getData(){
  65. reportReportBsResourceRateAnalysisList({}).then(response => {
  66. let dangerNum = 0;
  67. // this.$set(this,'dangerNum',response.data.dangerNum?response.data.dangerNum:0);
  68. // this.$set(this,'yearOverYear',response.data.yearOverYear?response.data.yearOverYear:0);
  69. let list = [];
  70. for(let i=0;i<response.data.length;i++){
  71. dangerNum = dangerNum + response.data[i].equNumber;
  72. list.push({
  73. name:response.data[i].equType,
  74. value:response.data[i].equNumber
  75. });
  76. }
  77. if(list[0]){
  78. this.$set(this,'dangerNum',dangerNum);
  79. this.eChartsMethod(list);
  80. }
  81. })
  82. },
  83. checkButton(type){
  84. if(this.buttonType != type){
  85. this.$set(this,'buttonType',type);
  86. this.getData();
  87. }
  88. },
  89. eChartsMethod(list) {
  90. let option = {
  91. legend: {
  92. orient: 'vertical',
  93. icon:'rect',
  94. itemWidth:20,
  95. itemHeight:10,
  96. itemGap: 30,
  97. left:343,
  98. top:50,
  99. textStyle:{
  100. // 个
  101. fontSize:18,
  102. color: '#fff',
  103. },
  104. formatter: (name, value) => {
  105. let num = null
  106. const item = list.find(i => {
  107. if (name == i.name) {
  108. num = i.value
  109. }
  110. })
  111. return name +' '+ num
  112. }
  113. },
  114. tooltip: {
  115. trigger: 'item',
  116. textStyle:{
  117. // 个
  118. fontSize:18,
  119. },
  120. },
  121. color: ['#00E6FF', '#FF912A', '#00A6FF', '#254DEB', '#06CA47'],
  122. series: [
  123. {
  124. name: '',
  125. type: 'pie',
  126. radius: ['40%', '50%'],
  127. center: ['30%', '57%'],
  128. label: {
  129. show: true,
  130. position: 'center',
  131. normal: {
  132. formatter: '{yy|{d} %}',
  133. rich: {
  134. xx: {
  135. fontSize: 16,
  136. lineHeight: 32,
  137. color: '#fff'
  138. },
  139. yy: {
  140. fontSize: 16,
  141. fontWeight: 600,
  142. lineHeight: 32,
  143. color: '#fff'
  144. }
  145. }
  146. }
  147. },
  148. data: list
  149. }
  150. ]
  151. };
  152. let echartsBox = this.$echarts.init(document.getElementById('resourceDangerComponentECharts'));
  153. echartsBox.clear();
  154. echartsBox.setOption(option);
  155. }
  156. },
  157. beforeDestroy() {
  158. //清除定时器
  159. window.clearInterval(this.eChartsTimer);
  160. },
  161. destroyed() {
  162. //清除定时器
  163. window.clearInterval(this.eChartsTimer);
  164. }
  165. }
  166. </script>
  167. <style scoped lang="scss">
  168. .resourceDangerComponent{
  169. height: 431px;
  170. width:587px;
  171. .eCharts-max-big-box {
  172. height:369px;
  173. background: linear-gradient(180deg, rgba(4, 117, 129, 0.2) 0%, rgba(0, 15, 22, 0) 100%);
  174. overflow: hidden;
  175. position: relative;
  176. .position-button-left {
  177. z-index:5;
  178. position: absolute;
  179. margin:21px 0 0 29px;
  180. display: flex;
  181. p{
  182. width:70px;
  183. line-height:36px;
  184. text-align: center;
  185. color:#fff;
  186. font-size:18px;
  187. background-color: #063D40;
  188. cursor: pointer;
  189. }
  190. p:nth-child(1){
  191. border-top-left-radius:4px;
  192. border-bottom-left-radius:4px;
  193. }
  194. p:nth-child(3){
  195. border-top-right-radius:4px;
  196. border-bottom-right-radius:4px;
  197. }
  198. .left-border-1{
  199. border: 1px solid #00E6FF;
  200. color:#00E6FF;
  201. }
  202. .left-border-2{
  203. border: 1px solid #15827C;
  204. border-right:none;
  205. }
  206. .center-border-1{
  207. border: 1px solid #00E6FF;
  208. color:#00E6FF;
  209. }
  210. .center-border-2{
  211. border: 1px solid #15827C;
  212. border-left:none;
  213. }
  214. .center-border-3{
  215. border: 1px solid #15827C;
  216. border-right:none;
  217. }
  218. .right-border-1{
  219. border: 1px solid #00E6FF;
  220. color:#00E6FF;
  221. }
  222. .right-border-2{
  223. border: 1px solid #15827C;
  224. border-left:none;
  225. }
  226. }
  227. .position-text-box{
  228. width:140px;
  229. z-index:5;
  230. position: absolute;
  231. top:160px;
  232. left:106px;
  233. .position-text{
  234. text-align: center;
  235. height:18px;
  236. line-height:18px;
  237. font-size:18px;
  238. color:#fff;
  239. }
  240. .position-num{
  241. margin:12px 0;
  242. text-align: center;
  243. height:36px;
  244. font-size:36px;
  245. line-height:36px;
  246. background: -webkit-linear-gradient(0deg, #FFFFFF, #FF912A); /* Chrome, Safari */
  247. background: linear-gradient(0deg, #FFFFFF, #FF912A); /* 标准语法 */
  248. -webkit-background-clip: text; /* Chrome, Safari */
  249. background-clip: text;
  250. -webkit-text-fill-color: transparent; /* Chrome, Safari */
  251. color: transparent; /* 其他浏览器 */
  252. font-family: 'ysFonts', sans-serif;
  253. }
  254. .position-num-box{
  255. text-align: center;
  256. display: flex;
  257. .null-p{
  258. flex:1;
  259. }
  260. .text-num-p{
  261. height:18px;
  262. line-height:18px;
  263. font-size:18px;
  264. color:#fff;
  265. }
  266. img{
  267. margin-left:5px;
  268. display: block;
  269. width:11px;
  270. height:14px;
  271. }
  272. }
  273. }
  274. .position-img-box{
  275. position: absolute;
  276. top:100px;
  277. left:65px;
  278. z-index:0;
  279. height:220px;
  280. width:220px;
  281. background: no-repeat;
  282. background-size: 100%;
  283. background-image: url("../../../assets/ZDimages/img_tzsb_wq@1x.png");
  284. }
  285. .rotate-animation {
  286. animation: rotate 10s infinite linear;
  287. }
  288. @keyframes rotate {
  289. from {
  290. transform: rotate(0deg);
  291. }
  292. to {
  293. transform: rotate(360deg);
  294. }
  295. }
  296. #resourceDangerComponentECharts{
  297. width:587px;
  298. height:369px;
  299. }
  300. }
  301. }
  302. </style>