echarts.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <template>
  2. <!-- 创业公司登记 -->
  3. <div class="firm" v-loading="loading">
  4. <div class="pAHeader">
  5. <div class="pAHeader1">数据监测</div>
  6. </div>
  7. <hr />
  8. <!-- 顶部展示信息区开始 -->
  9. <topData v-if="!loading" :data="HeaderData" />
  10. <!-- 顶部展示信息区结束 -->
  11. <!-- 中部大饼区开始 -->
  12. <div class="midBlock">
  13. <!-- 圆形图开始 -->
  14. <CircularChart v-if="!loading" :data="CircularData" />
  15. <!-- 圆形图结束 -->
  16. <!-- 横向柱状图开始 -->
  17. <HorizontalChart v-if="!loading" :data="HorizontalData" />
  18. <!-- 横向柱状图结束 -->
  19. </div>
  20. <!-- 中部大饼区结束 -->
  21. <!-- 柱状图区域开始 -->
  22. <ColumnarChart v-if="!loading" :data="ColumnarData" />
  23. <!-- 柱状图区域结束 -->
  24. <!-- 底部表格区域开始 -->
  25. <RankingTable v-if="!loading" :tableData="tableData" />
  26. <!-- 通知表格结束-->
  27. <!-- 底部表格区域结束 -->
  28. </div>
  29. </template>
  30. <script>
  31. //顶部数据
  32. import topData from "./components/topData.vue";
  33. //圆形图
  34. import CircularChart from "./components/CircularChart.vue";
  35. //横向柱状图
  36. import HorizontalChart from "./components/HorizontalChart.vue";
  37. //竖向柱状图
  38. import ColumnarChart from "./components/ColumnarChart.vue";
  39. //排名表格
  40. import RankingTable from "./components/RankingTable.vue";
  41. export default {
  42. components: {
  43. topData,
  44. CircularChart,
  45. HorizontalChart,
  46. ColumnarChart,
  47. RankingTable,
  48. },
  49. data() {
  50. return {
  51. loading: false,
  52. //头部区域数据
  53. HeaderData: {
  54. people: 0,
  55. project: 0,
  56. activity: 0,
  57. // budget:0,
  58. isPay: 0,
  59. },
  60. //圆形
  61. CircularData: [
  62. { value: 0, name: "创客空间" },
  63. { value: 0, name: "创客项目" },
  64. { value: 0, name: "创客活动" },
  65. ],
  66. //横行的柱状
  67. HorizontalData: [
  68. // [ '物联网激光切割器',0],
  69. // [ '人工智能领跑马拉松',1000, ],
  70. // [ '3D演奏智能工具', 2000],
  71. // [ '人工智能分链机器',3000],
  72. ],
  73. // 柱状
  74. ColumnarData: [
  75. // ['3D智能分链机器', 2000],
  76. // ['3D智能分链机器1',3000],
  77. // ['3D智能分链机器2', 2500],
  78. // ['3D智能分链机器3', 1000],
  79. // ['3D智能分链机器4', 2000],
  80. // ['3D智能分链机器5',3000],
  81. // ['3D智能分链机器6', 2500],
  82. // ['3D智能分链机器7', 1000],
  83. // ['3D智能分链机器8', 2000],
  84. // ['3D智能分链机器9',3000],
  85. // ['3D智能分链机器10', 2500],
  86. // ['3D智能分链机器11', 1000],
  87. // ['3D智能分链机器12', 2000],
  88. // ['3D智能分链机器13',3000],
  89. // ['3D智能分链机器14', 2500],
  90. // ['3D智能分链机器15', 1000],
  91. ],
  92. tableData: [
  93. // {title:"人工智能分链机器",pro_leader:"覃罡彤",TypeName:"个人创客",Activity:"286",ClassName:"信息与通讯学院"},
  94. // {title:"3D演奏智能工具",pro_leader:"袁一鸣",TypeName:"个人创客",Activity:"225",ClassName:"信息与通讯学院"},
  95. // {title:"物联网切割机器",pro_leader:"张晓分",TypeName:"个人创客",Activity:"169",ClassName:"中德制造"},
  96. // {title:"人工智能领航AI马拉松",pro_leader:"林子夏",TypeName:"创客活动",Activity:"121",ClassName:"中德制造"},
  97. ],
  98. };
  99. },
  100. methods: {
  101. getData() {
  102. this.loading = true;
  103. this.ajax
  104. .get(this.$store.state.api + "/getEchartsData", {
  105. uid: this.$store.state.userInfo.userid,
  106. })
  107. .then((result) => {
  108. let data = result["data"];
  109. // console.log(data)
  110. //创客项目人数
  111. this.HeaderData["people"] = data[0][0]["total"];
  112. //目前积累项目数量
  113. this.HeaderData["project"] =
  114. data[1][0]["student"] + data[1][0]["wordspace"];
  115. //目前积累活动数量
  116. this.HeaderData["activity"] =
  117. data[2][0]["Maker"] + data[2][0]["personal"];
  118. //已支出预算
  119. let num = 0;
  120. data[3].forEach((item) => {
  121. item["isUse"] = 0;
  122. let isUse = JSON.parse(item["actualuse"]);
  123. for (let i in isUse) item["isUse"] += Number(isUse[i]);
  124. num += item["isUse"];
  125. });
  126. // this.HeaderData['isPay'] = 9999999;
  127. // this.HeaderData['isPay'] = 10000000;
  128. this.HeaderData["isPay"] = num;
  129. //扇形图数据
  130. this.CircularData[0]["value"] = data[5][0]["tskj"];
  131. this.CircularData[1]["value"] = data[5][0]["ckxm"];
  132. this.CircularData[2]["value"] = data[2][0]["Maker"];
  133. //创客活动资金
  134. console.log(data[3]);
  135. let MakerData = data[3].filter((item) => item.type == 2);
  136. let GroupMakerData = [];
  137. MakerData.forEach((item) => {
  138. let addActivity = GroupMakerData.filter(
  139. (fItem) => fItem["acId"] == item["acId"]
  140. );
  141. if (addActivity.length != 0) {
  142. addActivity[0]["isUse"] += item["isUse"];
  143. } else {
  144. GroupMakerData.push(item);
  145. }
  146. });
  147. GroupMakerData.sort((item1, item2) => item2["isUse"] - item1["isUse"])
  148. .splice(0, 4)
  149. .sort((item1, item2) => item1["isUse"] - item2["isUse"])
  150. .forEach((item) =>
  151. this.HorizontalData.push([item["title"], item["isUse"]])
  152. );
  153. //项目资金
  154. let personalData = data[6].filter((item) => item.type != 2);
  155. let GroupPersonalData = [];
  156. personalData.forEach((item) => {
  157. let addActivity = GroupPersonalData.filter(
  158. (fItem) => fItem["acId"] == item["acId"]
  159. );
  160. if (addActivity.length != 0) {
  161. addActivity[0]["isUse"] += item["isUse"];
  162. } else {
  163. GroupPersonalData.push(item);
  164. }
  165. });
  166. for (var i = 0; i < GroupPersonalData.length; i++) {
  167. var obj = eval("(" + GroupPersonalData[i].actualuse + ")");
  168. var sum = 0;
  169. for (var key in obj) {
  170. if (obj.hasOwnProperty(key)) {
  171. sum += parseInt(obj[key]);
  172. }
  173. }
  174. GroupPersonalData[i].value = sum;
  175. }
  176. GroupPersonalData.sort(function (a, b) {
  177. return a.value - b.value;
  178. });
  179. GroupPersonalData.forEach((item) =>
  180. this.ColumnarData.push([item["title"], item["value"]])
  181. );
  182. //项目排名
  183. this.tableData = data[4];
  184. this.loading = false;
  185. })
  186. .catch((err) => {
  187. console.log(err);
  188. });
  189. },
  190. },
  191. mounted() {
  192. this.getData();
  193. },
  194. };
  195. </script>
  196. <style lang="less">
  197. .midBlock {
  198. //中部大饼
  199. max-width: 100%;
  200. min-width: 90%;
  201. height: 400px;
  202. margin-top: 20px;
  203. // background: #ce7070;
  204. display: flex;
  205. justify-content: space-between;
  206. align-items: center;
  207. .mid {
  208. height: 95%;
  209. width: 49%;
  210. padding: 20px;
  211. padding-left: 0;
  212. box-sizing: border-box;
  213. background: #f3f6f7;
  214. overflow: hidden;
  215. }
  216. }
  217. .histogram {
  218. //柱状图
  219. margin-top: 20px;
  220. padding-top: 20px;
  221. box-sizing: border-box;
  222. // padding: 20px;
  223. min-width: 90%;
  224. max-width: 100%;
  225. height: 400px;
  226. background: #f3f6f7;
  227. overflow: hidden;
  228. }
  229. </style>