123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <script setup lang="ts">
- defineOptions({
- name: "headDrank"
- });
- import { ref, reactive, nextTick } from "vue";
- import { useRouter } from "vue-router";
- import radar from "@/components/echarts/radar.vue";
- import barEcharts from "@/components/echarts/bar.vue";
- import barDimEcharts from "@/components/echarts/barDim.vue";
- import rankTable from "@/components/rankTable/draw.vue";
- import personList from "@/components/personList/index.vue";
- import qvanping from "@/assets/rank/qvanping@2x.png";
- import seachData from "./componements/seach.vue";
- import {
- getPersonDimensionChartsList,
- getPersonDimensionChartsRanking,
- getChartsList
- } from "@/api/draw";
- import type { TabsPaneContext } from "element-plus";
- const router = useRouter();
- const value = ref("");
- const radarRef = ref();
- const rankTableRef = ref();
- const activeName = ref("1");
- const barEchartsRef = ref();
- const barDimEchartsRef = ref();
- const seachParams = ref();
- // 排行榜
- const showLength = ref(0);
- const rankTableRefList = reactive({
- data: [],
- dept: "",
- name: ""
- });
- const chartList = ref([]);
- const getChartsListApi = async () => {
- const { code, data } = await getChartsList({
- ...seachParams.value,
- type: 2
- });
- if (code == 200) {
- // showLength.value = data.length;
- setTimeout(() => {
- nextTick(() => {
- if (data && data.length > 0) {
- showLength.value = data.length;
- if (rankTableRef.value) {
- rankTableRef.value.init(data, "医疗组");
- }
- // rankTableRefList.data = data;
- // rankTableRefList.dept = "医疗组";
- // rankTableRef.value.init(data, "医疗组");
- }
- });
- }, 500);
- }
- };
- // 雷达图
- const dataList = reactive({
- dimName: []
- });
- const getPersonDimensionChartsListApiDimList = async () => {
- const { code, data } = await getPersonDimensionChartsList({
- ...seachParams.value,
- type: 2
- });
- if (code == 200) {
- dataList.dimName = [];
- if (data && data.length > 0) {
- data.map(it => {
- it.dimensionList.map(item => {
- dataList.dimName.push({
- name: item.dimName,
- id: item.dimId
- });
- });
- });
- }
- }
- };
- const radarRefList = ref([]);
- const getPersonDimensionChartsListApi = async (
- dimensionName?: string,
- dimId?: number | string,
- index?: any
- ) => {
- let tabIndex = Number(index);
- const { code, data } = await getPersonDimensionChartsList({
- ...seachParams.value,
- dimId,
- dimensionName,
- type: 2
- });
- if (code == 200) {
- if (data && data.length > 0) {
- if (dimensionName && dimId) {
- setTimeout(() => {
- nextTick(() => {
- // personListRef?.value[tabIndex - 1]?.init(data);
- });
- }, 500);
- } else {
- setTimeout(() => {
- nextTick(() => {
- // radarRefList.value = data;
- // radarRef.value.initChart(data);
- });
- }, 500);
- // rankTableRef.value.init(data, "医疗组");
- }
- }
- }
- // console.log(res);
- };
- // 柱状图
- const getPersonDimensionChartsRankingApi = async (
- dimensionName?: string,
- dimId?: number | string
- ) => {
- // const { code, data } = await getPersonDimensionChartsRanking({
- // ...seachParams.value,
- // dimId,
- // dimensionName,
- // type: 2
- // });
- // if (code == 200) {
- // if (data.length > 0) {
- // }
- // }
- };
- const barDimEchartsList = reactive({
- data: null,
- type: null
- });
- const init = (item, type) => {
- seachParams.value = item;
- if (Number(type)) {
- nextTick(() => {
- radarRefList.value = { ...seachParams.value, type: 2 };
- barDimEchartsList.data = item;
- barDimEchartsList.type = 2;
- });
- getPersonDimensionChartsListApi();
- getPersonDimensionChartsRankingApi();
- getPersonDimensionChartsListApiDimList();
- getChartsListApi();
- activeName.value = "1";
- }
- setTimeout(() => {
- nextTick(() => {
- if (barDimEchartsRef.value) {
- // barDimEchartsRef.value[0].init(seachParams.value, 0);
- if (Array.isArray(barDimEchartsRef.value)) {
- dataList.dimName.map((it, id) => {
- barDimEchartsRef?.value[id - 1]?.init(seachParams.value, 0);
- });
- } else {
- barDimEchartsRef.value.init(seachParams.value, 0);
- }
- }
- });
- }, 500);
- };
- // 维度表格
- const paramsIndex = ref({});
- const personListRef = ref();
- const handleClick = (tab: TabsPaneContext, event: Event) => {
- loading.value = true;
- if (tab.props.label == "总览") {
- getPersonDimensionChartsListApi();
- getPersonDimensionChartsRankingApi();
- getChartsListApi();
- } else {
- getPersonDimensionChartsListApi(tab.props.label, tab.props.name, tab.index);
- getPersonDimensionChartsRankingApi(tab.props.label, tab.props.name);
- }
- nextTick(() => {
- Object.assign(paramsIndex.value, {
- ...seachParams.value,
- dimId: tab.props.name,
- dimensionName: tab.props.label,
- type: 2
- });
- });
- setTimeout(() => {
- loading.value = false;
- }, 1000);
- // barEchartsRef.value.init(tab.props);
- };
- const fullBig = (item: any) => {
- router.push({
- path: "/fullBig",
- query: {
- ...item,
- ...seachParams.value,
- type: 2
- }
- });
- };
- const loading = ref(false);
- </script>
- <template>
- <div class="w-[100%]">
- <div class="w-[100%]">
- <seachData @handClick="init" />
- <div v-if="showLength > 0">
- <div class="flex mr-2">
- <radar ref="radarRef" :radarRefList="radarRefList" />
- </div>
- <el-tabs
- v-model="activeName"
- v-loading="loading"
- class="demo-tabs"
- :lazy="true"
- @tab-click="handleClick"
- >
- <el-tab-pane label="总览" name="1">
- <div class="flex mr-8">
- <rankTable
- ref="rankTableRef"
- :rankTableRefList="rankTableRefList"
- />
- </div>
- <!-- 总得分 -->
- <div class="mt-5 pr-8 w-full h-60">
- <barEcharts
- ref="barEchartsRef"
- :title="'总得分'"
- :barDimEchartsList="barDimEchartsList"
- />
- </div>
- <!-- 维度得分 -->
- <!-- <div
- v-for="(item, index) in dataList.dimName"
- :key="index"
- class="flex justify-between flex-wrap items-center"
- >
- <div class="mt-5 pr-8 w-1/2 h-60">
- <barDimEcharts ref="barDimEchartsRef" :title="item.name" />
- </div>
- </div> -->
- <div class="flex justify-between flex-wrap items-center">
- <div v-for="(item, index) in dataList.dimName" :key="index">
- <div class="mt-5 pr-8 h-60 w-[600px]">
- <barDimEcharts
- ref="barDimEchartsRef"
- :title="item.name"
- :barDimEchartsList="barDimEchartsList"
- :itemDim="item"
- />
- </div>
- </div>
- </div>
- </el-tab-pane>
- <el-tab-pane
- v-for="(item, index) in dataList.dimName"
- :key="index"
- :label="item.name"
- :name="item.id"
- :lazy="true"
- >
- <div class="w-full">
- <div class="flex justify-between">
- <personList
- ref="personListRef"
- class="w-11/12"
- :paramsIndex="paramsIndex"
- />
- <div
- class="w-[30px] h-[30px] mr-10 cursor-pointer"
- @click="fullBig(item)"
- >
- <img class="w-full h-full" :src="qvanping" alt="" />
- </div>
- </div>
- <div class="w-full h-60 mt-5 pr-8">
- <barEcharts
- ref="barEchartsRef"
- :title="item.name"
- :barDimEchartsList="barDimEchartsList"
- :itemDim="item"
- />
- </div>
- </div>
- </el-tab-pane>
- </el-tabs>
- </div>
- </div>
- </div>
- </template>
|