workerDrak.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <script setup lang="ts">
  2. defineOptions({
  3. name: "workerDrak"
  4. });
  5. import { ref, reactive } from "vue";
  6. import { useRouter } from "vue-router";
  7. import radar from "@/components/echarts/radar.vue";
  8. import barEcharts from "@/components/echarts/bar.vue";
  9. import barDimEcharts from "@/components/echarts/barDim.vue";
  10. import rankTable from "@/components/rankTable/draw.vue";
  11. import personList from "@/components/personList/index.vue";
  12. import qvanping from "@/assets/rank/qvanping@2x.png";
  13. import seachData from "./componements/seach.vue";
  14. import {
  15. getPersonDimensionChartsList,
  16. getPersonDimensionChartsRanking
  17. } from "@/api/draw";
  18. import type { TabsPaneContext } from "element-plus";
  19. const router = useRouter();
  20. const value = ref("");
  21. const radarRef = ref();
  22. const rankTableRef = ref();
  23. const activeName = ref("1");
  24. const barEchartsRef = ref();
  25. const barDimEchartsRef = ref();
  26. const seachParams = ref();
  27. // 雷达图
  28. const dataList = reactive({
  29. dimName: []
  30. });
  31. const getPersonDimensionChartsListApi = async (
  32. dimensionName?: string,
  33. dimId?: number | string
  34. ) => {
  35. const { code, data } = await getPersonDimensionChartsList({
  36. ...seachParams.value,
  37. dimId,
  38. dimensionName,
  39. type: 0
  40. });
  41. if (code == 200) {
  42. if (data.length > 0) {
  43. data.dimensionList.map(item => {
  44. dataList.dimName.push({
  45. name: item.dimName,
  46. id: item.dimId
  47. });
  48. });
  49. if (dimensionName && dimId) {
  50. personListRef.value.init(data);
  51. } else {
  52. radarRef.value.initChart(data);
  53. rankTableRef.value.init(data, "科室", "姓名");
  54. }
  55. }
  56. }
  57. // console.log(res);
  58. };
  59. // 柱状图
  60. const getPersonDimensionChartsRankingApi = async (
  61. dimensionName?: string,
  62. dimId?: number | string
  63. ) => {
  64. const { code, data } = await getPersonDimensionChartsRanking({
  65. ...seachParams.value,
  66. dimId,
  67. dimensionName,
  68. type: 0
  69. });
  70. if (code == 200) {
  71. if (data.length > 0) {
  72. barEchartsRef.value.init(data);
  73. }
  74. }
  75. };
  76. const init = item => {
  77. seachParams.value = item;
  78. getPersonDimensionChartsListApi();
  79. getPersonDimensionChartsRankingApi();
  80. barDimEchartsRef.value.init(seachParams.value, 0);
  81. };
  82. // 维度表格
  83. const personListRef = ref();
  84. const handleClick = (tab: TabsPaneContext, event: Event) => {
  85. console.log(tab, event);
  86. if (tab.props.label == "总览") {
  87. getPersonDimensionChartsListApi();
  88. getPersonDimensionChartsRankingApi();
  89. } else {
  90. getPersonDimensionChartsListApi(tab.props.label, tab.props.name);
  91. getPersonDimensionChartsRankingApi(tab.props.label, tab.props.name);
  92. }
  93. barEchartsRef.value.init(tab.props);
  94. };
  95. const fullBig = (item: any) => {
  96. router.push({
  97. path: "/fullBig",
  98. query: { title: item, ...seachParams.value, type: 0 }
  99. });
  100. };
  101. </script>
  102. <template>
  103. <div class="w-[100%]">
  104. <div class="w-[100%]">
  105. <seachData @handClick="init" />
  106. <div v-if="dataList.dimName.length > 0">
  107. <div class="flex mr-2">
  108. <radar ref="radarRef" />
  109. </div>
  110. <el-tabs
  111. v-model="activeName"
  112. class="demo-tabs"
  113. :lazy="true"
  114. @tab-click="handleClick"
  115. >
  116. <el-tab-pane label="总览" name="1">
  117. <div class="flex mr-8">
  118. <rankTable ref="rankTableRef" />
  119. </div>
  120. <!-- 总得分 -->
  121. <div class="mt-5 pr-8 w-full h-60">
  122. <barEcharts ref="barEchartsRef" :title="'总得分'" />
  123. </div>
  124. <!-- 维度得分 -->
  125. <div
  126. v-for="(item, index) in dataList.dimName"
  127. :key="index"
  128. class="flex justify-between flex-wrap items-center"
  129. >
  130. <div class="mt-5 pr-8 w-1/2 h-60">
  131. <barDimEcharts ref="barDimEchartsRef" :title="item.name" />
  132. </div>
  133. </div>
  134. </el-tab-pane>
  135. <el-tab-pane
  136. v-for="(item, index) in dataList.dimName"
  137. :key="index"
  138. :label="item.name"
  139. :name="item.id"
  140. :lazy="true"
  141. >
  142. <div class="w-full">
  143. <div class="flex justify-between">
  144. <personList ref="personListRef" class="w-11/12" />
  145. <div
  146. class="w-[30px] h-[30px] mr-10 cursor-pointer"
  147. @click="fullBig(item.name)"
  148. >
  149. <img class="w-full h-full" :src="qvanping" alt="" />
  150. </div>
  151. </div>
  152. <div class="w-full h-60 mt-5 pr-8">
  153. <barEcharts ref="barEchartsRef" :title="item.name" />
  154. </div>
  155. </div>
  156. </el-tab-pane>
  157. </el-tabs>
  158. </div>
  159. </div>
  160. </div>
  161. </template>