1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| <template> <div ref="chartRef" class="chart"></div> </template>
<script setup> import { ref, onMounted, onUnmounted } from 'vue' import * as echarts from 'echarts'
const chartRef = ref(null) let chartInstance = null
const initChart = () => { if (!chartRef.value) return chartInstance = echarts.init(chartRef.value) const option = { tooltip: { trigger: 'axis', backgroundColor: 'rgba(50, 50, 50, 0.9)', borderColor: '#333', textStyle: { color: '#fff' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: { type: 'category', boundaryGap: false, data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], axisLine: { lineStyle: { color: '#e0e0e0' } }, axisLabel: { color: '#666' } }, yAxis: { type: 'value', axisLine: { show: false }, axisTick: { show: false }, splitLine: { lineStyle: { color: '#f0f0f0' } }, axisLabel: { color: '#666', formatter: '¥{value}' } }, series: [{ name: '销售额', type: 'line', smooth: true, symbol: 'circle', symbolSize: 8, lineStyle: { width: 3, color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ { offset: 0, color: '#667eea' }, { offset: 1, color: '#764ba2' } ]) }, itemStyle: { color: '#667eea', borderWidth: 3, borderColor: '#fff' }, areaStyle: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: 'rgba(102, 126, 234, 0.3)' }, { offset: 1, color: 'rgba(102, 126, 234, 0.05)' } ]) }, data: [8200, 9320, 9010, 9340, 12900, 13300, 13200] }] } chartInstance.setOption(option) }
const handleResize = () => { chartInstance?.resize() }
onMounted(() => { initChart() window.addEventListener('resize', handleResize) })
onUnmounted(() => { window.removeEventListener('resize', handleResize) chartInstance?.dispose() }) </script>
<style scoped> .chart { width: 100%; height: 300px; } </style>
|