天天看点

基于VUE + Echarts 实现可视化数据大屏消防大数据

前言

🚀 基于 vue、datav、Echart 框架的大数据可视化(大屏展示)源码,基于VUE+Echarts 制作,实现大数据可视化。通过 vue 组件实现数据动态刷新渲染,内部图表可自由替换。部分图表使用 DataV 自带组件,可自由进行更改, 可以在此基础上重新开发。

本项目中使用的是echarts图表库,ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。

文章目录

  • 前言
  • 一、Echart是什么
  • 二、ECharts入门教程
  • 三、作品演示
  • 四、代码实现
  • router.js
  • main.js
  • App.vue
  • 五、更多干货

一、Echart是什么

ECharts是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

二、ECharts入门教程

5 分钟上手ECharts

三、作品演示

基于VUE + Echarts 实现可视化数据大屏消防大数据

四、代码实现

router.js

import Vue from 'vue';
import Router from 'vue-router';
import Index from '@/components/index/Index';

Vue.use(Router);
// Copyright ©  
export default new Router({
  routes: [{
    path: '/index',
    name: 'index',
    component: Index
  },
  {
    path: '*',
    redirect: '/index'
  }]
});      

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
import App from './App';
import router from './router';
import store from './store/';
import {
  Container,
  Row,
  Col,
  Header,
  Progress,
  Aside,
  Main,
  menu,
  Submenu,
  MenuItem,
  MenuItemGroup,
  Message,
  Tooltip,
  MessageBox,
  Footer,
  Tabs,
  TabPane,
  Button,
  Input,
  Select,
  Option,
  Form,
  FormItem,
  Dialog,
  Dropdown,
  DropdownMenu,
  DropdownItem,
  Radio,
  DatePicker,
  Table,
  TableColumn,
  Pagination,
  Loading,
  Card,
  Notification
} from 'element-ui';
import BaiduMap from 'vue-baidu-map';
import './assets/common/css/common.css';
import './assets/common/css/animate.css';
import vuescroll from 'vuescroll';
import ApiPath from '@/api';
import * as filters from '@/assets/common/js/filter';
import Request from '@/http';
import common from '@/assets/common/js/common.js';
import Bus from './bus.js';
// eslint-disable-next-line
import focus from '@/assets/common/js/directives';

process.env.MOCK && require('@/mock');
// Copyright © , All Rights Reserved
Vue.use(BaiduMap, {
  ak: 'zwVpEq7Soe6T65PiCynLj5qeGfnSFcjU'
});
Vue.use(vuescroll);
Vue.use(Container);
Vue.use(Row);
Vue.use(Col);
Vue.use(Header);
Vue.use(Progress);
Vue.use(Aside);
Vue.use(Main);
Vue.use(Footer);
Vue.use(menu);
Vue.use(Submenu);
Vue.use(MenuItem);
Vue.use(MenuItemGroup);
Vue.use(Tabs);
Vue.use(TabPane);
Vue.use(Button);
Vue.use(Input);
Vue.use(Select);
Vue.use(Option);
Vue.use(Form);
Vue.use(FormItem);
Vue.use(DatePicker);
Vue.use(Dialog);
Vue.use(Dropdown);
Vue.use(DropdownMenu);
Vue.use(DropdownItem);
Vue.use(Radio);
Vue.use(Table);
Vue.use(TableColumn);
Vue.use(Pagination);
Vue.use(Tooltip);
Vue.use(Loading);
Vue.use(Card);

Vue.config.productionTip = false;

Vue.prototype.$request = Request;
Vue.prototype.$api = ApiPath;
Vue.prototype.$message = Message;
Vue.prototype.$msgbox = MessageBox;
Vue.prototype.$alert = MessageBox.alert;
Vue.prototype.$confirm = MessageBox.confirm;
Vue.prototype.$notify = Notification;
Vue.prototype.$common = common;

window.Event = Bus;

Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key]);
});
// Copyright © , All Rights Reserved
/* eslint-disable no-new */
/* eslint-disable no-unused-vars */
window.vm = new Vue({
  el: '#app',
  store,
  router,
  components: { App },
  template: '<App/>'
});      

App.vue

<template>
  <div id="Container">
    <transition mode="out-in" enter-active-class="animated zoomIn">
      <keep-alive>
        <router-view />
      </keep-alive>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'App'
};
</script>

<style scoped>
#Container {
  width: 100%;
  height: 100%;
  background: #efefef;
}
</style>      

五、更多干货

继续阅读