ChartPool.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <ul class="chart-pool" :style="{width: lang.lang === 'en' ? '365px' : '240px'}">
  3. <li class="chart-item" v-for="(chart, index) in chartList" :key="index">
  4. <div class="chart-content" @click="selectChart(chart)">
  5. <IconChartLine size="24" v-if="chart === 'line'" />
  6. <IconChartHistogram size="24" v-else-if="chart === 'bar'" />
  7. <IconChartPie size="24" v-else-if="chart === 'pie'" />
  8. <IconChartHistogramOne size="24" v-else-if="chart === 'column'" />
  9. <IconChartLineArea size="24" v-else-if="chart === 'area'" />
  10. <IconChartRing size="24" v-else-if="chart === 'ring'" />
  11. <IconChartScatter size="24" v-else-if="chart === 'scatter'" />
  12. <IconRadarChart size="23" v-else-if="chart === 'radar'" />
  13. <div class="name">{{ CHART_TYPE_MAP[chart] }}</div>
  14. </div>
  15. </li>
  16. </ul>
  17. </template>
  18. <script lang="ts" setup>
  19. import type { ChartType } from '@/types/slides'
  20. import { getChartTypeMap } from '@/configs/chart'
  21. import { lang } from '@/main'
  22. const CHART_TYPE_MAP = getChartTypeMap()
  23. const emit = defineEmits<{
  24. (event: 'select', payload: ChartType): void
  25. }>()
  26. const chartList: ChartType[] = ['bar', 'column', 'line', 'area', 'scatter', 'pie', 'ring', 'radar']
  27. const selectChart = (chart: ChartType) => {
  28. emit('select', chart)
  29. }
  30. </script>
  31. <style lang="scss" scoped>
  32. .chart-pool {
  33. width: 240px;
  34. margin-bottom: -5px;
  35. @include flex-grid-layout();
  36. }
  37. .chart-item {
  38. @include flex-grid-layout-children(4, 24%);
  39. height: 0;
  40. padding-bottom: 25%;
  41. flex-shrink: 0;
  42. position: relative;
  43. cursor: pointer;
  44. }
  45. .chart-content {
  46. @include absolute-0();
  47. display: flex;
  48. flex-direction: column;
  49. justify-content: center;
  50. align-items: center;
  51. color: #999;
  52. &:hover {
  53. color: $themeColor;
  54. }
  55. .name {
  56. margin-top: 4px;
  57. }
  58. }
  59. </style>