Vue + Echarts 实现科技感数据大屏

一、布局实现

1. flex进行"左中右"布局

html 复制代码
<div class="data-container">
    <div class="left">
    </div>
    <div class="right">
    </div>
    <div class="middle">
    </div>
</div>
//css部分
.data-container {
  background: linear-gradient(#0056b1, #248fd8);
  position: flex;
  display: flex;
  /* padding: 0px 10px 10px 10px; */
  height: 100%;
  width: 100%;
}

.left {
  width: 280px;
  background:rgb(147, 144, 238);
  padding: 20px 10px 20px 20px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.right{
  width:250px;
  padding: 20px 20px 20px 10px;
  background:lightgreen;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.middle {
  flex: 1;
  background:rgb(238, 219, 144);
  padding: 20px 10px 20px 10px;
  display: flex;
  flex-direction: column;
}

2. div划分模块,设计科技感配色

html 复制代码
<div class="data-container">
    <!-- 数据面板 -->
    <div class="left">
      <div class="card">
        
      </div>
      <!--  -->
      <div class="card ">
       
      </div>
    </div>
    <div class="middle">
      <!-- 地图 -->
      <div class="map-chart">
        
      </div>
      <!--  -->
      <div class="grid" >
        <div class="grid-content grid-con-1 card">
          
        </div>
        <div class="grid-content grid-con-2 card">
          
        </div>
        <div class="grid-content grid-con-3 card">
         
        </div>
      </div>
    </div>
    <div class="right">
      <div class="card right-top">
       
      </div>
      <div class="card right-mid">
      </div>

      <div class="card right-bottom">
        
      </div>
    </div>

  </div>

// css

.card {
  border-width: 1px;
  border-color:  rgba(25,25,112,0.4);
  background-color: rgba(25,25,112,0.2);
  box-shadow: 0 2px 12px 0 rgba(18, 45, 136, 0.7);
  padding: 10px;
  border-radius: 5px;
  justify-content: center;
  align-items: center;
  /* margin-top: 10px; */
}

二、echarts中的图表展示

  1. 地图:

https://blog.csdn.net/qq_44846654/article/details/147929138?spm=1011.2415.3001.5331

  1. 统一管理图表
html 复制代码
<!-- components/EchartsMap.vue -->
<template>
  <div ref="chartDom" :style="{'width':width, 'height': height}"></div>
</template>

<script>
// eslint-disable-next-line standard/object-curly-even-spacing
import { ref, onMounted, onBeforeUnmount, watch} from 'vue'
import {BAROPTION, MAPOPTION, RADAROPTION, GAUGEOPTIO} from './defaultOption'
import echarts from '../../plugins/echarts'

export default {
  name: 'MapEchart',
  props: {
    region: {type: String, default: 'china'},
    mapData: { type: Array, default: () => [] }, // 地图数据(如省份值)
    option: { type: Object, default: () => ({}) }, // 自定义配置覆盖
    echartsType: {type: String, default: 'map'}, // such as: map, bar, line...
    width: {type: String},
    height: {type: String}
  },
  setup (props) {
    const chartDom = ref(null)
    let chartInstance = null

    // 初始化图表
    const initChart = () => {
      console.log(props.echartsType)
      if (!chartInstance) {
        chartInstance = echarts.init(chartDom.value)
      }
      let baseOption = null
      if (props.echartsType === 'map') {
        const geoJson = require(`../../mapJson/${props.region}.json`)
        echarts.registerMap(props.region, geoJson)
        baseOption = MAPOPTION
      } else if (props.echartsType === 'bar') {
        baseOption = BAROPTION
      } else if (props.echartsType === 'radar') {
        baseOption = RADAROPTION
      } else if (props.echartsType === 'gauge') {
        baseOption = GAUGEOPTIO
      }
      // 合并外部配置
      chartInstance.setOption(baseOption)
      console.log(baseOption)
    }
    // 响应窗口变化
    const resizeChart = () => {
      if (chartDom.value) {
        chartInstance.resize()
      }
    }

    // 监听数据变化
    watch(() => props.mapData, (newVal) => {
      // chartInstance.setOption({ series: [{ data: newVal }] });
    })

    onMounted(() => {
      initChart()
      window.addEventListener('resize', resizeChart)
    })

    onBeforeUnmount(() => {
      window.removeEventListener('resize', resizeChart)
      // if(chartDom.value){
      //   chartInstance.dispose();
      // }
    })

    return { chartDom }
  }
}
</script>
  1. 可滚动的排行榜

https://blog.csdn.net/qq_44846654/article/details/148044424

相关推荐
Bs_MoneyMagnet2 小时前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
边境悍匪8 小时前
蜗牛学苑 Java 智能体学习 Day40|Vue 工程化与 ElementPlus 思维导图复盘
java·vue.js·学习
vx-Biye_Design9 小时前
springboot中国传统节日宣传平台49078-计算机课程设计、毕业设计
java·前端·vue.js·spring boot·后端·课程设计·idea
代码调试师11 小时前
【毕设分享】springboot攀枝花生鲜电商平台58990
java·vue.js·spring boot·后端·架构·eclipse·课程设计
web打印社区12 小时前
Vue3 发票静默打印,我这边能跑通的一版
前端·javascript·vue.js·chrome·electron
妖孽白小白13 小时前
el-select的内容续写实现
前端·vue.js·elementui
梨想橙汁13 小时前
Pinia 状态管理实战:定义 Store、修改数据、模块拆分
前端·vue.js
高申航13 小时前
Vue 3 + DYMO Connect Framework 实战:从标签模板到打印服务的完整实现
前端·javascript·vue.js
梨想橙汁13 小时前
Vue3 组件开发:生命周期钩子,组件之间通信全方案
前端·vue.js
雪芽蓝域zzs13 小时前
分页组件 + el-config-provider 中文国际化 + 靠右布局
前端·javascript·vue.js