1
0
go-view-fetch/src/packages/components/Charts/MyComponents/AlarmTrend/index.vue
2025-08-20 12:18:11 +08:00

104 lines
2.5 KiB
Vue

<template>
<div class="go-alarm-trend">
<div class="header">
<div class="title">
<svg-icon icon-class="rocket" class="title-icon"></svg-icon>
<span :style="{ color: chartConfig.option.titleColor, fontSize: chartConfig.option.titleSize + 'px' }">{{ chartConfig.option.title }}</span>
</div>
<n-dropdown trigger="hover" :options="dropdownOptions" @select="handleSelect">
<n-button type="primary" size="small">
{{ selectedOption }}
<template #icon>
<n-icon>
<svg-icon icon-class="arrow-down" />
</n-icon>
</template>
</n-button>
</n-dropdown>
</div>
<v-chart
:key="chartConfig.key"
:option="option"
:autoresize="true"
></v-chart>
</div>
</template>
<script setup lang="ts">
import { ref, computed, PropType } from 'vue'
import VChart from 'vue-echarts'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { LineChart } from 'echarts/charts'
import { GridComponent, TooltipComponent } from 'echarts/components'
import { CreateComponentType } from '@/packages/index.d'
import { useChartDataFetch } from '@/hooks/useChartDataFetch.hook'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
use([
CanvasRenderer,
LineChart,
GridComponent,
TooltipComponent
])
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType>,
required: true
}
})
const { option } = useChartDataFetch(props.chartConfig, useChartEditStore)
const selectedOption = ref(props.chartConfig.option.dropdownDefault)
const dropdownOptions = computed(() => {
return props.chartConfig.option.dropdownOptions.map(opt => ({
label: opt,
key: opt
}))
})
const handleSelect = (key: string) => {
selectedOption.value = key
// You can add logic here to update chart data based on selection
}
</script>
<style lang="scss" scoped>
.go-alarm-trend {
width: 100%;
height: 100%;
background-color: #0F1C3D;
padding: 15px;
box-sizing: border-box;
display: flex;
flex-direction: column;
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
margin-bottom: 10px;
.title {
display: flex;
align-items: center;
.title-icon {
font-size: 24px;
margin-right: 10px;
color: #00E5FF;
}
}
}
.echarts {
flex: 1;
width: 100%;
height: 100%;
}
}
</style>