1 import React, { Component } from 'react'; 2 import axios from 'axios'; 3 import echarts from 'echarts/lib/echarts'; 4 import 'echarts/lib/chart/pie'; 5 import 'echarts/lib/component/tooltip'; 6 import 'echarts/lib/component/title'; 7 8 class ProjectBar extends Component { 9 constructor(props) { 10 super(props); 11 this.state = { 12 alldata: {}, 13 yeardata: {} 14 }; 15 this.refreshDate = this.refreshDate.bind(this); 16 this.initData = this.initData.bind(this); 17 } 18 async componentWillMount() { 19 const res = await axios.post('*******'); 20 if (res.data.success === 'success') { 21 this.setState({ 22 alldata: res.data.detailMsg.data.all, 23 yeardata: res.data.detailMsg.data.year 24 // totalcontract: res.data.detailMsg.data.totalcontract, 25 // hsytotalcontract: res.data.detailMsg.data.hsytotalcontract 26 }); 27 this.initData(this.state.yeardata, 'year'); 28 } 29 } 30 refreshDate(type) { 31 return () => { 32 if (type === 'all') { 33 document.getElementById('all1').style.backgroundColor = '#F6E1E0'; 34 document.getElementById('year1').style.backgroundColor = '#FFFFFF'; 35 document.getElementById('all1').style.color = '#C13837'; 36 document.getElementById('year1').style.color = '#595959'; 37 this.initData(this.state.alldata, type); 38 } else { 39 document.getElementById('year1').style.backgroundColor = '#F6E1E0'; 40 document.getElementById('all1').style.backgroundColor = '#FFFFFF'; 41 document.getElementById('all1').style.color = '#595959'; 42 document.getElementById('year1').style.color = '#C13837'; 43 this.initData(this.state.yeardata, type); 44 } 45 }; 46 } 47 initData(data, type) { 48 console.log(this); 49 const yallnumname = `公有云项目数${data.yallnum}`; 50 const yactnumname = `公有云激活数${data.yactnum}`; 51 const yusenumname = `公有云上线数${data.yusenum}`; 52 const sallnumname = `私有云项目数${data.sallnum}`; 53 const sactnumname = `私有云激活数${data.sactnum}`; 54 let legenddata = [yallnumname, yactnumname, sallnumname, sactnumname]; 55 if (type === 'all') { 56 legenddata = [yallnumname, yactnumname, yusenumname, sallnumname, sactnumname]; 57 } 58 const allnum = data.yallnum + data.sallnum; 59 const ProjectBarChart = echarts.init(document.getElementById('ProjectBar')); 60 // 绘制图表 61 ProjectBarChart.setOption({ 62 title: { 63 text: 'U8 cloud 项目', 64 x: 'center', 65 y: '10px', 66 itemGap: 20, 67 textStyle: { 68 color: '#333333', 69 fontFamily: '微软雅黑', 70 fontSize: 20 71 } 72 }, 73 tooltip: { 74 show: true, 75 formatter: '{b}' 76 }, 77 legend: { 78 orient: 'vertical', 79 // icon: 'rect', 80 // 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' 81 x: '65%', 82 y: '45%', 83 itemWidth: 10, 84 itemHeight: 7, 85 itemGap: 16, 86 textStyle: { 87 fontSize: 12 88 }, 89 data: legenddata 90 }, 91 series: [ 92 { 93 name: '公有云项目数', 94 type: 'pie', 95 clockWise: true, // 顺时针 96 radius: ['45%', '60%'], 97 center: ['35%', '55%'], 98 itemStyle: { 99 normal: { 100 label: { show: false }, 101 labelLine: { show: false } 102 } 103 }, 104 data: [ 105 { 106 value: data.yallnum, 107 name: yallnumname, 108 itemStyle: { 109 normal: { 110 color: '#2991E6', 111 label: { show: false }, 112 labelLine: { show: false } 113 }, 114 emphasis: { 115 color: '#2991E6' 116 } 117 } 118 }, 119 { 120 value: data.sallnum, 121 name: sallnumname, 122 itemStyle: { 123 normal: { 124 color: '#28BB63', 125 label: { show: false }, 126 labelLine: { show: false } 127 }, 128 emphasis: { 129 color: '#28BB63' 130 } 131 } 132 }, 133 ] 134 }, 135 { 136 name: '激活数', 137 type: 'pie', 138 clockWise: true, 139 radius: ['30%', '45%'], 140 center: ['35%', '55%'], 141 itemStyle: { 142 normal: { 143 label: { show: false }, 144 labelLine: { show: false } 145 } 146 }, 147 data: [ 148 { 149 value: data.yactnum, 150 name: yactnumname, 151 itemStyle: { 152 normal: { 153 color: '#82C0FB', 154 label: { show: false }, 155 labelLine: { show: false } 156 }, 157 emphasis: { 158 color: '#82C0FB' 159 } 160 } 161 }, 162 { 163 value: allnum - data.yactnum - data.sactnum, 164 name: '', 165 itemStyle: { 166 normal: { 167 color: 'rgba(0,0,0,0)', 168 label: { show: false }, 169 labelLine: { show: false } 170 }, 171 emphasis: { 172 color: 'rgba(0,0,0,0)' 173 } 174 } 175 }, 176 { 177 value: data.sactnum, 178 name: sactnumname, 179 itemStyle: { 180 normal: { 181 color: '#6BD094', 182 label: { show: false }, 183 labelLine: { show: false } 184 }, 185 emphasis: { 186 color: '#6BD094' 187 } 188 } 189 } 190 ] 191 }, 192 { 193 name: '上线数', 194 type: 'pie', 195 clockWise: true, 196 radius: ['15%', '30%'], 197 center: ['35%', '55%'], 198 itemStyle: { 199 normal: { 200 label: { show: false }, 201 labelLine: { show: false } 202 } 203 }, 204 data: [ 205 { 206 value: data.yusenum, 207 name: yusenumname, 208 itemStyle: { 209 normal: { 210 color: '#B7DBFB', 211 label: { show: false }, 212 labelLine: { show: false } 213 }, 214 emphasis: { 215 color: '#B7DBFB' 216 } 217 } 218 }, 219 { 220 value: allnum - data.yusenum, 221 name: '', 222 itemStyle: { 223 normal: { 224 color: 'rgba(0,0,0,0)', 225 label: { show: false }, 226 labelLine: { show: false } 227 }, 228 emphasis: { 229 color: 'rgba(0,0,0,0)' 230 } 231 } 232 } 233 ] 234 } 235 ] 236 }); 237 } 238 render() { 239 return ( 240 <div style={{ position: 'relative', width: '100%' }}> 241 <div style={{ zIndex: '1', width: '100px', height: '25px', float: 'right', left: '66%', top: '110px', position: 'absolute', fontSize: '14px', fontFamily: '微软雅黑' }}> 242 <button id="all1" style={{ float: 'left', width: '50px', height: '25px', borderRadius: '5px 0px 0px 5px', border: '1px solid #C9504F', borderRight: 'none', outline: 'none', backgroundColor: '#FFFFFF' }} onClick={this.refreshDate('all')}>累计</button> 243 <button id="year1" style={{ float: 'left', width: '50px', height: '25px', borderRadius: '0px 5px 5px 0px', border: '1px solid #C9504F', outline: 'none', backgroundColor: '#F6E1E0', color: '#C13837' }} onClick={this.refreshDate('year')} >本年</button> 244 </div> 245 <div id="ProjectBar" style={{ width: '100%', height: '350px', position: 'absolute' }} /> 246 </div> 247 ); 248 } 249 } 250 251 export default ProjectBar;