chartView.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <script setup lang="ts">
  2. import { ref, onMounted } from 'vue'
  3. import * as Home from '@/api/home'
  4. import type { Ref } from 'vue'
  5. interface LoanItem {
  6. day: string
  7. loanCount: number
  8. returnCount: number
  9. }
  10. const chartOptions: Ref<any> = ref({})
  11. const colors = ['#5793f3', '#d14a61'] // 蓝色表示借出,红色表示归还
  12. const setChartOptions = (data: LoanItem[]) => {
  13. const days = data.map(item => item.day)
  14. const loanCounts = data.map(item => item.loanCount)
  15. const returnCounts = data.map(item => item.returnCount)
  16. chartOptions.value = {
  17. color: colors,
  18. tooltip: {
  19. trigger: 'axis',
  20. axisPointer: { type: 'shadow' }
  21. },
  22. legend: {
  23. data: ['借出数量', '归还数量']
  24. },
  25. grid: {
  26. left: '10%',
  27. right: '10%',
  28. bottom: '15%'
  29. },
  30. xAxis: {
  31. type: 'category',
  32. data: days,
  33. axisTick: { alignWithLabel: true },
  34. axisLabel: {
  35. interval: 0, // 显示每个日期
  36. rotate: 45 // 如果日期太密,可以旋转防止重叠
  37. },
  38. axisLine: {
  39. lineStyle: {
  40. color: '#5793f3' // 蓝色
  41. }
  42. }
  43. },
  44. yAxis: {
  45. type: 'value',
  46. min: 0,
  47. max: 100,
  48. name: '数量',
  49. axisLine: {
  50. lineStyle: {
  51. color: '#5793f3' // 蓝色
  52. }
  53. }
  54. },
  55. series: [
  56. {
  57. name: '借出数量',
  58. type: 'bar',
  59. data: loanCounts
  60. },
  61. {
  62. name: '归还数量',
  63. type: 'bar',
  64. data: returnCounts
  65. }
  66. ]
  67. }
  68. }
  69. const fetchChartData = async () => {
  70. try {
  71. const now = new Date()
  72. const endTime = now.toISOString()
  73. const start = new Date()
  74. start.setMonth(start.getMonth() - 1)
  75. const startTime = start.toISOString()
  76. const chartData = await Home.getHomePage({ startTime, endTime })
  77. const loanList: LoanItem[] = chartData.loanList || []
  78. console.log(loanList,'图表数据有值吗')
  79. // 按日期排序,保证图表从旧到新
  80. loanList.sort((a, b) => new Date(a.day).getTime() - new Date(b.day).getTime())
  81. setChartOptions(loanList)
  82. } catch (error) {
  83. console.error('获取图表数据失败', error)
  84. }
  85. }
  86. onMounted(() => {
  87. fetchChartData()
  88. })
  89. </script>
  90. <template>
  91. <Echart :options="chartOptions" />
  92. </template>