当前位置:首页 > VUE

vue实现数据大屏

2026-02-25 03:25:49VUE

使用 Vue 实现数据大屏

技术选型

Vue 3 + ECharts + Element Plus(可选)
核心依赖:echartsvue-echarts(封装组件)、axios(数据请求)

vue实现数据大屏

安装依赖

npm install echarts vue-echarts axios

基础布局结构

<template>
  <div class="dashboard-container">
    <!-- 标题区 -->
    <header class="dashboard-header">
      <h1>数据大屏</h1>
    </header>

    <!-- 图表区 -->
    <div class="chart-grid">
      <div class="chart-item">
        <v-chart :option="lineChartOption" autoresize />
      </div>
      <div class="chart-item">
        <v-chart :option="barChartOption" autoresize />
      </div>
    </div>
  </div>
</template>

样式配置

.dashboard-container {
  width: 100vw;
  height: 100vh;
  background: #0f1c3f;
  color: #fff;
  overflow: hidden;
}

.dashboard-header {
  text-align: center;
  padding: 20px 0;
}

.chart-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 20px;
  padding: 0 20px;
}

.chart-item {
  height: 400px;
  background: rgba(25, 61, 107, 0.5);
  border-radius: 8px;
  padding: 15px;
}

图表配置示例

import { ref } from 'vue';
import { use } from 'echarts/core';
import { CanvasRenderer } from 'echarts/renderers';
import { LineChart, BarChart } from 'echarts/charts';
import {
  GridComponent,
  TooltipComponent,
  TitleComponent,
  LegendComponent
} from 'echarts/components';

use([
  CanvasRenderer,
  LineChart,
  BarChart,
  GridComponent,
  TooltipComponent,
  TitleComponent,
  LegendComponent
]);

const lineChartOption = ref({
  title: { text: '趋势分析' },
  tooltip: { trigger: 'axis' },
  xAxis: { data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] },
  yAxis: {},
  series: [{
    name: '销量',
    type: 'line',
    data: [150, 230, 224, 218, 135]
  }]
});

const barChartOption = ref({
  title: { text: '对比分析' },
  tooltip: { trigger: 'axis' },
  xAxis: { data: ['产品A', '产品B', '产品C'] },
  yAxis: {},
  series: [{
    name: '销售额',
    type: 'bar',
    data: [1200, 2000, 1500]
  }]
});

数据动态更新

import { onMounted } from 'vue';
import axios from 'axios';

const fetchData = async () => {
  const res = await axios.get('/api/dashboard');
  lineChartOption.value.series[0].data = res.data.trend;
  barChartOption.value.series[0].data = res.data.comparison;
};

onMounted(() => {
  fetchData();
  setInterval(fetchData, 30000); // 30秒刷新一次
});

响应式适配

import { onMounted, onBeforeUnmount } from 'vue';

const handleResize = () => {
  const scale = window.innerWidth / 1920; // 基于设计稿宽度
  document.documentElement.style.fontSize = `${scale * 16}px`;
};

onMounted(() => {
  handleResize();
  window.addEventListener('resize', handleResize);
});

onBeforeUnmount(() => {
  window.removeEventListener('resize', handleResize);
});

性能优化建议

  1. 使用lodash.throttle限制resize事件频率
  2. 大数据量时启用ECharts的large模式
  3. 静态数据使用dataset方式管理
  4. 避免频繁调用setOption,优先使用appendData方法

扩展功能

  • 全屏切换:使用screenfull.js
  • 主题切换:通过echarts.registerTheme注册多套主题
  • 动画效果:利用animationDuration配置项
  • 地图集成:加载百度/高德地图插件

部署注意事项

  1. 生产环境需配置Nginx路径代理解决跨域
  2. 静态资源建议使用CDN加速
  3. 大屏项目通常需要禁用浏览器默认缩放
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

标签: 数据vue
分享给朋友:

相关文章

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

实现vue框架

实现vue框架

Vue框架的基本实现 Vue是一个渐进式JavaScript框架,用于构建用户界面。以下是实现Vue框架的基本步骤: 安装Vue 通过CDN引入Vue是最简单的方式: <script src…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactive…

vue实现增加

vue实现增加

实现 Vue 中的新增功能 在 Vue 中实现新增功能通常涉及数据绑定、表单处理和状态管理。以下是几种常见的实现方式: 数据绑定与列表渲染 通过 v-model 绑定表单输入,使用数组的 push…

vue 实现路径

vue 实现路径

在 Vue 中实现路径管理通常涉及路由配置、动态路由、嵌套路由等场景,以下是具体实现方法: 基础路由配置 安装 Vue Router 并创建路由实例: npm install vue-router…