loopPieChart.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <div shadow="never" class="homeBoxCard" v-loading="loading">
  3. <div class="height200" ref="pieChart" />
  4. </div>
  5. </template>
  6. <script lang="ts">
  7. import {
  8. computed,
  9. defineComponent,
  10. onMounted,
  11. Ref,
  12. ref,
  13. watch,
  14. ComputedRef,
  15. } from "vue";
  16. import { useStore } from "vuex";
  17. import { useI18n } from "vue-i18n";
  18. import { EChartOption } from "echarts";
  19. import useEcharts from "@/composables/useEcharts";
  20. import { StateType as HomeStateType } from "../../../home/store";
  21. // import { ChartDataType } from "../../data";
  22. var echartData=[
  23. {value:335, legendname:'优秀',name:"优秀",itemStyle:{color:"#40ABFE"}},
  24. {value:335, legendname:'合格',name:"合格",itemStyle:{color:"#EEAA3F"}},
  25. {value:335, legendname:'不合格',name:"不合格",itemStyle:{color:"#FF2222"}},
  26. ]
  27. var total_datas = 0;
  28. for (var i = 0; i < echartData.length; i++) {
  29. total_datas += Number(echartData[i].value)
  30. console.log(typeof(echartData[i].value))
  31. }
  32. const worksChartOption: EChartOption = {
  33. title: [
  34. {
  35. text:''+total_datas,
  36. subtext: '共计回路',
  37. textStyle:{
  38. fontSize:24,
  39. color:"black"
  40. },
  41. subtextStyle: {
  42. fontSize: 16,
  43. color: 'black'
  44. },
  45. textAlign:"center",
  46. left: '49%',
  47. top: '40%',
  48. }],
  49. tooltip: {
  50. trigger: 'item',
  51. formatter:function (parms:any){
  52. var str= parms.seriesName+"</br>"+
  53. parms.marker+""+parms.data.legendname+"</br>"+
  54. "数量:"+ parms.data.value+"</br>"+
  55. "占比:"+ parms.percent+"%";
  56. return str ;
  57. }
  58. },
  59. legend: {
  60. type:"scroll",
  61. orient: 'horizontal',
  62. bottom:'0%',
  63. align:'left',
  64. // top:'middle',
  65. textStyle: {
  66. color:'#8C8C8C'
  67. },
  68. height:250
  69. },
  70. series: [
  71. {
  72. name:'标题',
  73. type:'pie',
  74. center: ['50%', '50%'],
  75. radius: ['40%', '60%'],
  76. clockwise: false, //饼图的扇区是否是顺时针排布
  77. avoidLabelOverlap: false,
  78. label : {
  79. show : false
  80. },
  81. labelLine : {
  82. show : false
  83. },
  84. data:echartData
  85. }
  86. ]
  87. };
  88. interface WorksChartCardSetupData {
  89. t: (key: string | number) => string;
  90. loading: Ref<boolean>;
  91. pieChart: Ref;
  92. total: ComputedRef<number>;
  93. num: ComputedRef<number>;
  94. }
  95. export default defineComponent({
  96. name: "PieChart",
  97. setup(): WorksChartCardSetupData {
  98. const store = useStore<{ Home: HomeStateType }>();
  99. const { t } = useI18n();
  100. // 总数
  101. const total = computed<number>(() => store.state.Home.worksChartData.total);
  102. // num
  103. const num = computed<number>(() => store.state.Home.worksChartData.num);
  104. // chart Data
  105. // const chartData = computed<ChartDataType>(
  106. // () => store.state.Home.worksChartData.chart
  107. // );
  108. // echarts 图表
  109. const pieChart = ref<HTMLDivElement>();
  110. const echarts = useEcharts(pieChart, worksChartOption);
  111. // watch([echarts, chartData], () => {
  112. // if (echarts.value) {
  113. // const option: EChartOption = {
  114. // xAxis: {
  115. // // data: ["03-01", "03-01", "03-01", "03-01", "03-01", "03-01", "03-01"]
  116. // data: chartData.value.day,
  117. // },
  118. // series: [
  119. // {
  120. // name: "新增",
  121. // // data: [3, 1, 1, 2, 2, 2, 2]
  122. // data: chartData.value.num,
  123. // },
  124. // ],
  125. // };
  126. // echarts.value.setOption(option);
  127. // }
  128. // });
  129. // 读取数据 func
  130. const loading = ref<boolean>(true);
  131. const getData = async () => {
  132. loading.value = true;
  133. await store.dispatch("Home/queryWorksChartData");
  134. loading.value = false;
  135. };
  136. onMounted(() => {
  137. getData();
  138. });
  139. return {
  140. t,
  141. loading,
  142. pieChart,
  143. total,
  144. num,
  145. };
  146. },
  147. });
  148. </script>
  149. <style lang="scss" scoped>
  150. .homeBoxCard {
  151. margin-bottom: 24px;
  152. ::v-deep(.el-card__header) {
  153. padding-left: 12px;
  154. padding-right: 12px;
  155. }
  156. ::v-deep(.el-card__body) {
  157. padding: 12px;
  158. font-size: 14px;
  159. line-height: 1.5715;
  160. }
  161. ::v-deep(.el-divider) {
  162. margin: 8px 0;
  163. }
  164. .num {
  165. font-size: 30px;
  166. color: #515a6e;
  167. }
  168. .height200 {
  169. height: 200px;
  170. }
  171. }
  172. </style>