echarts.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. <template>
  2. <!-- 创业公司登记 -->
  3. <div class="firm">
  4. <div class="pAHeader">
  5. <div class="pAHeader1">数据监测</div>
  6. </div>
  7. <hr />
  8. <!-- 顶部展示信息区开始 -->
  9. <div class="topDataBlock">
  10. <div class="topData">
  11. <div class="DataTitle">创客项目人数</div>
  12. <div class="topData_value">
  13. <span>329</span>
  14. <span><img src="@/assets/img/upIcon.png"></span>
  15. </div>
  16. </div>
  17. <div class="topData">
  18. <div class="DataTitle">目前积累创客项目数量</div>
  19. <div class="topData_value">
  20. <span>40</span>
  21. </div>
  22. </div>
  23. <div class="topData">
  24. <div class="DataTitle">创客活动数量</div>
  25. <div class="topData_value">
  26. <span>25</span>
  27. </div>
  28. </div>
  29. <div class="topData">
  30. <div class="DataTitle">学院目前资金总预算</div>
  31. <div class="topData_value">
  32. <span>100</span>
  33. <span>(千万)</span>
  34. </div>
  35. </div>
  36. <div class="topData">
  37. <div class="DataTitle">已支出预算</div>
  38. <div class="topData_value">
  39. <span>25</span>
  40. <span>(千万)</span>
  41. </div>
  42. </div>
  43. </div>
  44. <!-- 顶部展示信息区结束 -->
  45. <!-- 中部大饼区开始 -->
  46. <div class="midBlock">
  47. <div ref="Circular" class="mid"></div>
  48. <div ref="Horizontal" class="mid"></div>
  49. </div>
  50. <!-- 中部大饼区结束 -->
  51. <!-- 柱状图区域开始 -->
  52. <div ref="Columnar" class="histogram"></div>
  53. <!-- 柱状图区域结束 -->
  54. <!-- 底部表格区域开始 -->
  55. <div class="tabTit">
  56. <div>
  57. <p>项目排名</p>
  58. </div>
  59. </div>
  60. <div class="projectBlock" style="padding-bottom: 60px;">
  61. <el-table
  62. :data="tableData"
  63. tooltip-effect="dark"
  64. stripe
  65. class="fontSize"
  66. :header-cell-style="{ background: '#3867d6',color:'#fff' }"
  67. >
  68. <el-table-column
  69. type="index"
  70. label="排名"
  71. align="center"
  72. width="100">
  73. </el-table-column>
  74. <el-table-column
  75. prop="title"
  76. label="项目名称"
  77. align="center">
  78. </el-table-column>
  79. <el-table-column
  80. prop="pro_leader"
  81. label="项目负责人"
  82. align="center">
  83. </el-table-column>
  84. <el-table-column
  85. prop="TypeName"
  86. label="创客类型"
  87. align="center">
  88. </el-table-column>
  89. <el-table-column
  90. prop="Activity"
  91. label="活跃度"
  92. align="center">
  93. </el-table-column>
  94. <el-table-column
  95. prop="ClassName"
  96. label="所属学院"
  97. align="center">
  98. </el-table-column>
  99. </el-table>
  100. </div>
  101. <!-- 通知表格结束-->
  102. <!-- 底部表格区域结束 -->
  103. </div>
  104. </template>
  105. <script>
  106. import * as echarts from 'echarts';
  107. export default {
  108. data() {
  109. return {
  110. //圆形
  111. CircularData:{
  112. title:{
  113. text:"创新创业项目类型"
  114. },
  115. legend: {
  116. data:[
  117. "创客活动",
  118. "个人创客"
  119. ],
  120. orient: 'vertical',
  121. top:"10%",
  122. left:"left"
  123. },
  124. series: [
  125. {
  126. type: 'pie',
  127. label: {
  128. show:true,
  129. position:"inner",
  130. formatter:'{d}%'
  131. },
  132. data: [
  133. {
  134. value: 30,
  135. name:"创客活动"
  136. },
  137. {
  138. value: 70,
  139. name:"个人创客"
  140. },
  141. ],
  142. }
  143. ]
  144. },
  145. //横行的柱状
  146. HorizontalData:{
  147. grid: {
  148. top: 80, // 设置网格顶部的边距为 50px
  149. left:10,
  150. bottom:0,
  151. right:"100px"
  152. // left:'-10px'
  153. },
  154. title:{
  155. text:"创客活动资金"
  156. },
  157. dataset: {
  158. source: [
  159. ['amount', 'product'],
  160. [ 0, '物联网激光切割器'],
  161. [ 1000, '人工智能领跑马拉松'],
  162. [ 2000, '3D演奏智能工具'],
  163. [ 3000, '人工智能分链机器'],
  164. ],
  165. },
  166. xAxis: {
  167. position:"top",
  168. name:"单位:万元",
  169. nameTextStyle:{
  170. fontSize:14,
  171. align:"left",
  172. verticalAlign:"bottom",
  173. padding:[0,0,7,10],
  174. }
  175. },
  176. yAxis: {
  177. type: 'category',
  178. zlevel:1,
  179. axisLabel:{
  180. inside:true,
  181. margin:4,
  182. formatter: function (value) {
  183. const vl = Math.floor(value.length/2);
  184. let newText = value.slice(0,vl)+'\n'+value.slice(vl)
  185. return newText;
  186. },
  187. color:(value,index)=>{
  188. const textWidth = this.HorizontalData['dataset']['source'][this.HorizontalData['dataset']['source'].length-1][0]/6/2;
  189. const vl = this.HorizontalData['dataset']['source'][index+1][0]
  190. return vl >= textWidth ? 'white' : '#3c4654';
  191. }
  192. },
  193. },
  194. series: [
  195. {
  196. type: 'bar',
  197. barWidth:55,
  198. label:{
  199. show:true,
  200. position:"right"
  201. },
  202. encode: {
  203. x: 'amount',
  204. y: 'product'
  205. },
  206. itemStyle:{
  207. color:"#3eb370"
  208. }
  209. }
  210. ]
  211. },
  212. // 柱状
  213. ColumnarData:{
  214. grid: {
  215. top: 80,
  216. },
  217. title:{
  218. text:"个人创客资金",
  219. top:0
  220. },
  221. dataset: {
  222. // 提供一份数据。
  223. source: [
  224. ['3D智能分链机器', 2000],
  225. ['3D智能分链机器1',3000],
  226. ['3D智能分链机器2', 2500],
  227. ['3D智能分链机器3', 1000],
  228. ['3D智能分链机器4', 2000],
  229. ['3D智能分链机器5',3000],
  230. ['3D智能分链机器6', 2500],
  231. ['3D智能分链机器7', 1000],
  232. ['3D智能分链机器8', 2000],
  233. ['3D智能分链机器9',3000],
  234. ['3D智能分链机器10', 2500],
  235. ['3D智能分链机器11', 1000],
  236. ['3D智能分链机器12', 2000],
  237. ['3D智能分链机器13',3000],
  238. ['3D智能分链机器14', 2500],
  239. ['3D智能分链机器15', 1000],
  240. ]
  241. },
  242. // 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。
  243. xAxis: {
  244. type: 'category',
  245. axisLabel: {
  246. formatter: function (value) {
  247. // 设置每行显示的最大字符数
  248. var maxLength = 4;
  249. // 计算文本需要换行的行数
  250. var rowNumber = Math.ceil(value.length / maxLength);
  251. // 拼接换行后的文本
  252. var newText = '';
  253. for (var i = 0; i < rowNumber; i++) {
  254. var start = i * maxLength;
  255. var end = start + maxLength;
  256. newText += value.slice(start, end) + '\n';
  257. }
  258. return newText;
  259. }
  260. }
  261. },
  262. // 声明一个 Y 轴,数值轴。
  263. yAxis: {
  264. name:"单位:万元",
  265. nameTextStyle:{
  266. fontSize:14,
  267. align:"center",
  268. }
  269. },
  270. // 声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。
  271. series: [{ type: 'bar' ,itemStyle:{color:"#5aaef3"}}]
  272. },
  273. tableData: [
  274. {title:"人工智能分链机器",pro_leader:"覃罡彤",TypeName:"个人创客",Activity:"286",ClassName:"信息与通讯学院"},
  275. {title:"3D演奏智能工具",pro_leader:"袁一鸣",TypeName:"个人创客",Activity:"225",ClassName:"信息与通讯学院"},
  276. {title:"物联网切割机器",pro_leader:"张晓分",TypeName:"个人创客",Activity:"169",ClassName:"中德制造"},
  277. {title:"人工智能领航AI马拉松",pro_leader:"林子夏",TypeName:"创客活动",Activity:"121",ClassName:"中德制造"},
  278. ]
  279. };
  280. },
  281. methods: {
  282. setCircularData(){
  283. const Circular = echarts.init(this.$refs['Circular']);
  284. Circular.setOption(this.CircularData)
  285. },
  286. setHorizontalData(){
  287. const Horizontal = echarts.init(this.$refs['Horizontal']);
  288. Horizontal.setOption(this.HorizontalData)
  289. },
  290. setColumnarData(){
  291. const Columnar = echarts.init(this.$refs['Columnar']);
  292. Columnar.setOption(this.ColumnarData)
  293. }
  294. },
  295. mounted() {
  296. this.setCircularData();
  297. this.setHorizontalData();
  298. this.setColumnarData();
  299. },
  300. };
  301. </script>
  302. <style lang="less">
  303. .topDataBlock{
  304. margin-top: 20px;
  305. width: 100%;
  306. height: 130px;
  307. // background: #b65f5f;
  308. display: flex;
  309. justify-content:space-between;
  310. align-items: center;
  311. .topData{
  312. width: 19%;
  313. height: 94%;
  314. border-radius: 5px;
  315. box-sizing: border-box;
  316. // padding: 15px 10px 10px 35px;
  317. .DataTitle{
  318. margin: 15px 10px 10px 35px;
  319. color: white;
  320. font-size: 18px;
  321. position: relative;
  322. &::after{
  323. content: '';
  324. display: block;
  325. position: absolute;
  326. width: 7px;
  327. height: 86%;
  328. top: 7%;
  329. left: -15px;
  330. background-color: white;
  331. }
  332. }
  333. .topData_value{
  334. width: auto;
  335. height: 40%;
  336. margin: 15px 20px 10px 20px;
  337. display: flex;
  338. align-items: center;
  339. color: white;
  340. span{
  341. height: 100%;
  342. display: flex;
  343. // align-items: flex-end;
  344. }
  345. span:nth-of-type(1){
  346. font-size: 2.8em;
  347. }
  348. span:nth-of-type(2){
  349. align-items: flex-end;
  350. img{
  351. height: 32px;
  352. margin-left: 5px;
  353. }
  354. }
  355. }
  356. }
  357. .topData:nth-child(1){
  358. background-image: linear-gradient(100deg, #3caef5 60%,#497df5);
  359. }
  360. .topData:nth-child(2){
  361. background-image: linear-gradient(100deg, #fcb871 60%,#f77c5f);
  362. }
  363. .topData:nth-child(3){
  364. background-image: linear-gradient(100deg, #3ce0ea 60%,#29bfa3);
  365. }
  366. .topData:nth-child(4){
  367. background-image: linear-gradient(100deg, #3caef5 60%,#497df5);
  368. }
  369. .topData:nth-child(5){
  370. background-image: linear-gradient(100deg, #fcb871 60%,#f77c5f);
  371. }
  372. }
  373. .midBlock{ //中部大饼
  374. width: 100%;
  375. height: 400px;
  376. margin-top: 20px;
  377. // background: #ce7070;
  378. display: flex;
  379. justify-content: space-between;
  380. align-items: center;
  381. .mid{
  382. height: 95%;
  383. width: 49%;
  384. padding: 20px;
  385. box-sizing: border-box;
  386. background: #f3f6f7;
  387. }
  388. }
  389. .histogram{ //柱状图
  390. margin-top: 20px;
  391. box-sizing: border-box;
  392. padding: 20px;
  393. width: 100%;
  394. height: 400px;
  395. background: #f3f6f7;
  396. }
  397. .el-table__header{
  398. height:60px;
  399. }
  400. .el-table__row{
  401. height: 60px;
  402. }
  403. </style>