当前位置:首页 > VUE

vue实现数据大屏

2026-02-25 03:25:49VUE

vue实现数据大屏

使用 Vue 实现数据大屏

技术选型

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

安装依赖

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
分享给朋友:

相关文章

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓…

vue列表实现

vue列表实现

Vue 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 Tree…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas…

vue拖动实现

vue拖动实现

实现 Vue 拖动功能的方法 使用 HTML5 拖放 API 在 Vue 中可以利用 HTML5 的原生拖放 API 实现拖动功能。通过 draggable 属性标记可拖动元素,结合 @dragsta…