echarts.vue 9.3 KB

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