基于vue的可视化大屏2

张謹礧 2024-10-01 10:03:01 阅读 79

这个可视化大屏分为四个部分

一个引入代码,引入全局 index.vue.

左边代码centerleft.vue

右边代码centerright.vue

中间代码center.vue

主代码:

这是一段 Vue 框架的代码。

在 <code><template> 部分:

定义了一个根 div 元素。其中包含一个名为 env_content 的 div 元素,它内部包含三个自定义组件 envLeft 、 envCenter 和 envRight 。

在 <script> 部分:

引入了三个组件:envLeft.vue 、 envCenter.vue 和 envRight.vue 。定义了默认的导出对象,其中 components 属性中注册了这三个引入的组件。

在 <style scoped> 部分:

为 env_content 类定义了样式,使用 flex 布局,并设置了元素之间的间距为 space-between ,实现了三个子元素在水平方向上两端对齐的布局效果。

总体来说,这段代码通过组件化的方式构建了一个页面结构,并使用样式进行了布局设置。

<template>

<div>

<div class="env_content">code>

<env-left />

<env-center />

<env-right />

</div>

</div>

</template>

<script>

import envLeft from "./components/envLeft.vue";

import envRight from "./components/envRight.vue";

import envCenter from "./components/envCenter.vue";

export default {

components: { envLeft, envCenter, envRight },

};

</script>

<style scoped>

.env_content {

display: flex;

justify-content: space-between;

}

</style>

左边代码

模板(<template>)部分

整体被一个具有 content 类的 div 包裹。

内部的第一个 div 中包含一个自定义组件 dv-border-box-8 ,其内部有一个 head 部分。

head 中又包含三个具有 head_content 类的 div ,每个内部都有一个 h1 和 h2 元素,分别展示不同的风力、风速和光照数据。第二个 div 具有 body 类,包含两个部分。

第一个部分是一个自定义组件 dv-border-box-6 ,内部使用 Echart 组件来展示风速监测图表,并通过 options1 对象配置了图表的各种属性,如颜色、标题、提示框、图例、工具框、网格、坐标轴和数据系列等。第二个部分是一个自定义组件 dv-border-box-10 ,内部通过 dv-scroll-board 组件展示城市空气污染物监测数据。

脚本(<script>)部分

引入了 Echart 组件和 echarts 库。定义了默认导出对象。

components 中注册了 Echart 组件。data 函数返回了两个数据对象:options1 用于配置风速监测图表,airData 用于提供城市空气污染物监测数据。

样式(<style scoped>)部分

content 类的 div 宽度设置为 30% 。head 类的 div 有内边距、高度,并使用 flex 布局实现元素之间的等间距排列。head_content 类的 div 使用 flex-direction: column 实现纵向布局,并通过 justify-content: space-between 和 align-items: center 来调整内部元素的垂直和水平对齐方式。body 类的 div 有上边距。

总体而言,这段代码构建了一个展示风力、风速、光照以及风速和城市空气污染物监测数据的页面组件,并通过配置数据和样式来呈现相应的内容和布局。

<template>

<div class="content">code>

<div>

<dv-border-box-8 :reverse="true">code>

<div class="head">code>

<div class="head_content">code>

<h1>2.5</h1>

<h2>风力(级)</h2>

</div>

<div class="head_content">code>

<h1>5</h1>

<h2>风速(m/s)</h2>

</div>

<div class="head_content">code>

<h1>45</h1>

<h2>光照(klm)</h2>

</div>

</div>

</dv-border-box-8>

</div>

<div class="body">code>

<!-- 风速监测表 -->

<dv-border-box-6

><Echart :options="options1" height="500px"code>

/></dv-border-box-6>

<!-- 城市空气污染物监测表 -->

<dv-border-box-10>

<div style="padding: 5px">code>

<dv-scroll-board :config="airData" style="height: 300px" />code>

</div>

</dv-border-box-10>

</div>

</div>

</template>

<script>

import Echart from "@/common/echart/index.vue";

import * as echarts from "echarts";

export default {

components: { Echart },

data() {

return {

options1: {

color: ["#80FFA5"],

title: {

text: "24小时风速监测",

},

tooltip: {

trigger: "axis",

axisPointer: {

type: "cross",

label: {

backgroundColor: "#6a7985",

},

},

},

legend: {

data: ["air spend"],

},

toolbox: {

feature: {

saveAsImage: {},

},

},

grid: {

left: "3%",

right: "4%",

bottom: "3%",

containLabel: true,

},

xAxis: [

{

name: "h",

type: "category",

boundaryGap: false,

data: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24],

},

],

yAxis: [

{

name: "风速m/s",

type: "value",

min: 0,

max: 6,

},

],

series: [

{

type: "line",

stack: "Total",

smooth: true,

lineStyle: {

width: 0,

},

showSymbol: false,

areaStyle: {

opacity: 0.8,

color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [

{

offset: 0,

color: "rgb(128, 255, 165)",

},

{

offset: 1,

color: "rgb(1, 191, 236)",

},

]),

},

emphasis: {

focus: "series",

},

data: [

1, 1.3, 1.1, 0.8, 2.4, 3.5, 3.1, 1.2, 2.5, 4.2, 3.2, 1.5, 0.9,

],

},

],

},

airData: {

header: ["城市", "首要污染物", "等级", "AQI"],

data: [

["平桥区区", "——", "优", 34],

["浉河区区", "——", "优", 31],

["罗山县", "O3", "轻度污染", 94],

["息县", "PM2.5", "良", 52],

["光山县", "——", "优", 34],

["新县", "——", "优", 31],

["潢川县", "O3", "轻度污染", 94],

["商城县", "PM2.5", "良", 52],

["淮滨县", "——", "优", 31],

["固始县", "O3", "轻度污染", 94]

],

},

};

},

};

</script>

<style scoped>

.content {

width: 30%;

}

.head {

padding: 10px;

height: 80px;

display: flex;

justify-content: space-around;

}

.head_content {

display: flex;

flex-direction: column;

justify-content: space-between;

align-items: center;

}

.body {

margin-top: 10px;

}

</style>

 效果:

右边代码

模板(<code><template>)部分

整体由一个具有 content 类的 div 包裹。

第一个 div 内包含一个自定义的 dv-border-box-8 组件,其内部有 head 部分,head 又包含三个具有 head_content 类的 div ,分别展示了 PM2.5、PM10 和 TSP 的数据及对应的单位。第二个 div 具有 body 类,包含两个主要部分。

第一个部分是 body_table1 类的 div,其中包含一个自定义的 dv-border-box-6 组件,展示了标题“主要污染物分布”和使用 Echart 组件绘制的饼图。第二个部分是另一个自定义的 dv-border-box-6 组件,展示了标题“空气污染物监测”和使用 Echart 组件绘制的不同污染物在不同月份的折线图。

脚本(<script>)部分

引入了 Echart 组件。定义了默认导出对象。

components 中注册了 Echart 组件。data 函数返回了两个 options 对象:options1 用于配置主要污染物分布的饼图,options2 用于配置空气污染物监测的折线图。

样式(<style scoped>)部分

content 类的 div 宽度设置为 30% 。head 类的 div 有内边距、高度,并使用 flex 布局实现元素之间的等间距排列。head_content 类的 div 使用纵向的 flex 布局,并调整内部元素的垂直和水平对齐方式。body 类的 div 有上边距。body_table1 类的 div 使用 flex 布局。

<template>

<div class="content">code>

<div>

<dv-border-box-8 :reverse="true">code>

<div class="head">code>

<div class="head_content">code>

<h1>35</h1>

<h2>PM2.5(μg/m³)</h2>

</div>

<div class="head_content">code>

<h1>75</h1>

<h2>PM10(mg/m³)</h2>

</div>

<div class="head_content">code>

<h1>125</h1>

<h2>TSP(mg/m³)</h2>

</div>

</div>

</dv-border-box-8>

</div>

<div class="body">code>

<!-- 城市空气污染物比例占比 -->

<div class="body_table1">code>

<dv-border-box-6 style="padding: 10px">code>

<h2>主要污染物分布</h2>

<Echart

:options="options1"code>

height="400px"code>

width="400px"code>

style="margin: auto"code>

/>

</dv-border-box-6>

</div>

<!-- 城市空气污染物监测 -->

<div>

<dv-border-box-6 style="padding: 10px">code>

<h2>空气污染物监测</h2>

<Echart :options="options2" height="340px" width="500px" />code>

</dv-border-box-6>

</div>

</div>

</div>

</template>

<script>

import Echart from "@/common/echart/index.vue";

export default {

components: { Echart },

data() {

return {

options1: {

legend: {

top: "bottom",

},

toolbox: {

show: true,

feature: {

mark: { show: true },

dataView: { show: true, readOnly: false },

restore: { show: true },

saveAsImage: { show: true },

},

},

series: [

{

name: "Nightingale Chart",

type: "pie",

radius: [50, 180],

center: ["50%", "50%"],

roseType: "area",

itemStyle: {

borderRadius: 8,

},

data: [

{ value: 15, name: "SO2" },

{ value: 50, name: "PM2.5" },

{ value: 80, name: "PM10" },

{ value: 60, name: "NO2" },

{ value: 106, name: "O3" },

{ value: 90, name: "CO" },

],

},

],

},

options2: {

tooltip: {

trigger: "axis",

},

legend: {

data: ["PM2.5", "PM10", "SO2", "NO2", "O3"],

},

grid: {

left: "3%",

right: "4%",

bottom: "3%",

containLabel: true,

},

toolbox: {

feature: {

saveAsImage: {},

},

},

xAxis: {

type: "category",

boundaryGap: false,

data: ["1月", "3月", "5月", "7月", "9月", "11月"],

},

yAxis: {

type: "value",

},

series: [

{

name: "PM2.5",

type: "line",

data: [41, 60, 43, 46, 70, 50],

smooth: true,

},

{

name: "PM10",

type: "line",

data: [71, 78, 90, 70, 76, 80],

smooth: true,

},

{

name: "SO2",

type: "line",

data: [15, 23, 20, 15, 19, 10],

smooth: true,

},

{

name: "NO2",

type: "line",

data: [103, 90, 60, 70, 40, 35],

smooth: true,

},

{

name: "O3",

type: "line",

data: [60, 70, 85, 105, 120, 80],

smooth: true,

},

],

},

};

},

};

</script>

<style scoped>

.content {

width: 30%;

}

.head {

padding: 10px;

height: 80px;

display: flex;

justify-content: space-around;

}

.head_content {

display: flex;

flex-direction: column;

justify-content: space-between;

align-items: center;

}

.body {

margin-top: 10px;

}

.body_table1 {

display: flex;

}

</style>

 效果:

中间代码

模板(<code><template>)部分

整体被一个具有 content 类的 div 包裹。

第一个 div 内包含一个自定义的 dv-border-box-8 组件,其内部的 head 部分有三个 head_content 类的 div ,分别展示了温度、湿度和噪声的数据及单位。第二个 div 具有 body 类,包含两个主要部分。

第一个部分是一个自定义的 dv-border-box-6 组件,用于展示温度监测的图表。第二个部分是 body_table1 类的 div ,其中又包含两个子 div 。

第一个子 div 包含一个自定义的 dv-border-box-2 组件,展示噪音监测的相关内容。第二个子 div 包含一个自定义的 dv-border-box-2 组件,展示湿度的相关图表。

脚本(<script>)部分

引入了 Echart 组件和 echarts 库。定义了默认导出对象。

components 中注册了 Echart 组件。data 函数返回了多个数据对象:

options1 用于配置 24 小时温度监测的折线图。airData (似乎未被实际使用)。noiseData 用于噪音监测的数据。options2 用于配置湿度监测的仪表盘图表。

样式(<style scoped>)部分

content 类的 div 宽度设置为 38% 。head 类的 div 有内边距、高度,并使用 flex 布局实现元素之间的等间距排列。head_content 类的 div 使用纵向的 flex 布局,并调整内部元素的垂直和水平对齐方式。body 类的 div 有上边距。body_table1 类的 div 使用 flex 布局。

<template>

<div class="content">code>

<div>

<dv-border-box-8 :reverse="true">code>

<div class="head">code>

<div class="head_content">code>

<h1>25</h1>

<h2>温度(℃)</h2>

</div>

<div class="head_content">code>

<h1>40</h1>

<h2>湿度(%rh)</h2>

</div>

<div class="head_content">code>

<h1>65</h1>

<h2>噪声(dB)</h2>

</div>

</div>

</dv-border-box-8>

</div>

<div class="body">code>

<!-- 温度监测表 -->

<dv-border-box-6

><Echart :options="options1" height="400px"code>

/></dv-border-box-6>

<!-- 城市噪音监测表与城市湿度 -->

<div class="body_table1">code>

<div>

<dv-border-box-2 style="padding: 10px">code>

<h2>噪音监测</h2>

<dv-capsule-chart

:config="noiseData"code>

style="width: 370px; height: 380px"code>

/>

</dv-border-box-2>

</div>

<div>

<dv-border-box-2 style="padding: 10px">code>

<h2>湿度</h2>

<Echart :options="options2" height="380px" width="300px" />code>

</dv-border-box-2>

</div>

</div>

</div>

</div>

</template>

<script>

import Echart from "@/common/echart/index.vue";

import * as echarts from "echarts";

export default {

components: { Echart },

data() {

return {

options1: {

color: ["#005fa2"],

title: {

text: "24小时温度监测",

},

tooltip: {

trigger: "axis",

axisPointer: {

type: "cross",

label: {

backgroundColor: "#6a7985",

},

},

},

legend: {

data: ["air spend"],

},

toolbox: {

feature: {

saveAsImage: {},

},

},

grid: {

left: "3%",

right: "4%",

bottom: "3%",

containLabel: true,

},

xAxis: [

{

name: "h",

type: "category",

boundaryGap: false,

data: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22],

},

],

yAxis: [

{

name: "摄氏度",

type: "value",

},

],

series: [

{

type: "line",

stack: "Total",

smooth: true,

lineStyle: {

width: 0,

},

showSymbol: false,

areaStyle: {

opacity: 0.8,

color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [

{

offset: 0,

color: "rgb(35, 67, 234)",

},

{

offset: 1,

color: "rgb(121, 185, 235)",

},

]),

},

emphasis: {

focus: "series",

},

data: [14, 14, 14, 14, 18, 20, 21, 20, 19, 18, 16, 15],

},

],

},

airData: {

header: ["城市", "首要污染物", "等级", "AQI"],

data: [

["平桥区区", "——", "优", 34],

["浉河区区", "——", "优", 31],

["罗山县", "O3", "轻度污染", 94],

["息县", "PM2.5", "良", 52],

["光山县", "——", "优", 34],

["新县", "——", "优", 31],

["潢川县", "O3", "轻度污染", 94],

["商城县", "PM2.5", "良", 52],

["淮滨县", "——", "优", 31],

["固始县", "O3", "轻度污染", 94]

],

},

noiseData: {

data: [

{

name: "平桥区",

value: 167,

},

{

name: "浉河区",

value: 67,

},

{

name: "罗山县",

value: 123,

},

{

name: "光山县",

value: 55,

},

{

name: "息县",

value: 98,

},

{

name: "新县",

value: 57,

},

{

name: "潢川县",

value: 98,

},

{

name: "商城县",

value: 57,

},

{

name: "固始县",

value: 98,

},

{

name: "淮滨县",

value: 57,

},

],

},

options2: {

tooltip: {

formatter: "{a} <br/>{b} : {c}%",

},

series: [

{

name: "Pressure",

type: "gauge",

detail: {

formatter: "{value}",

},

data: [

{

value: 50,

name: "%rh",

},

],

},

],

},

};

},

};

</script>

<style scoped>

.content {

width: 38%;

}

.head {

padding: 10px;

height: 80px;

display: flex;

justify-content: space-around;

}

.head_content {

display: flex;

flex-direction: column;

justify-content: space-between;

align-items: center;

}

.body {

margin-top: 10px;

}

.body_table1 {

display: flex;

}

</style>

效果:



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。