|
@@ -1,43 +1,256 @@
|
|
|
<template>
|
|
|
<div class="echartScene">
|
|
|
- <div class="scene" ref="scene"></div>
|
|
|
- <div class="pic">
|
|
|
- <img src="../../assets/images/echart-zu.png" alt="" />
|
|
|
+ <div class="scene" ref="scene"></div>
|
|
|
+ <div class="pic">
|
|
|
+ <img src="../../../../../assets/images/company/echart-zu.png" alt="" />
|
|
|
+ </div>
|
|
|
+ <div class="percent">
|
|
|
+ <div class="percent-box">{{ `${percent.jf}%` }}</div>
|
|
|
+ <div class="percent-box">{{ `${percent.yf}%` }}</div>
|
|
|
+ <div class="percent-box">{{ `${percent.hf}%` }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="percent">
|
|
|
- <div class="percent-box">{{ `${percent.jf}%` }}</div>
|
|
|
- <div class="percent-box">{{ `${percent.yf}%` }}</div>
|
|
|
- <div class="percent-box">{{ `${percent.hf}%` }}</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
-
|
|
|
- <script lang="ts" setup>
|
|
|
- import {defineProps, ref, nextTick, reactive, watch, } from 'vue';
|
|
|
- import * as echarts from 'echarts';
|
|
|
- //获取dom元素节点
|
|
|
- let scene = ref<any>();
|
|
|
+</template>
|
|
|
|
|
|
- function getOption() {
|
|
|
- nextTick(() => {
|
|
|
+<script lang="ts" setup>
|
|
|
+import { defineProps, ref, nextTick, reactive, watch,onMounted } from 'vue';
|
|
|
+import * as echarts from 'echarts';
|
|
|
+//获取dom元素节点
|
|
|
+let scene = ref<any>();
|
|
|
+
|
|
|
+let percent = reactive({
|
|
|
+ jf: 0,
|
|
|
+ yf: 0,
|
|
|
+ hf: 0,
|
|
|
+})
|
|
|
+let echartData = reactive([
|
|
|
+ { name: '进风区', value: 854 },
|
|
|
+ { name: '用风区', value: 495 },
|
|
|
+ { name: '回风区', value: 896 }
|
|
|
+])
|
|
|
+let xData = reactive([])
|
|
|
+let yData = reactive([])
|
|
|
+
|
|
|
+function deepCopy(obj) {
|
|
|
+ if (typeof obj !== 'object') {
|
|
|
+ return obj
|
|
|
+ }
|
|
|
+ let newobj = {}
|
|
|
+ for (var attr in obj) {
|
|
|
+ newobj[attr] = obj[attr]
|
|
|
+ }
|
|
|
+ return newobj
|
|
|
+}
|
|
|
+
|
|
|
+function getOption() {
|
|
|
+ nextTick(() => {
|
|
|
+ xData.length = 0
|
|
|
+ yData.length = 0
|
|
|
+ echartData.forEach((a, b) => {
|
|
|
+ xData.push(a.name)
|
|
|
+ yData.push(a.value)
|
|
|
+ })
|
|
|
+ let startColor = ['rgba(27, 164, 255,.6)', 'rgba(31, 248, 251,.6)', 'rgba(154, 225, 255,.6)']
|
|
|
+ let borderStartColor = ['#1ba4ff', '#1ff8fb', '#9ae1ff']
|
|
|
+ let RealData = []
|
|
|
+ let borderData = []
|
|
|
+ echartData.forEach((item, index) => {
|
|
|
+ let newobj = deepCopy(item)
|
|
|
+ let newobj1 = deepCopy(item)
|
|
|
+ RealData.push(newobj)
|
|
|
+ borderData.push(newobj1)
|
|
|
+ })
|
|
|
+ RealData.forEach((item, index) => {
|
|
|
+ item.itemStyle = {
|
|
|
+ normal: {
|
|
|
+ color: startColor[index]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ borderData.forEach((item, index) => {
|
|
|
+ item.itemStyle = {
|
|
|
+ normal: {
|
|
|
+ color: borderStartColor[index]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ console.log(scene.value,'scene')
|
|
|
const myChart = echarts.init(scene.value);
|
|
|
- let option =
|
|
|
+ let option = {
|
|
|
+ legend: [
|
|
|
+ {
|
|
|
+ // orient: 'vertical',
|
|
|
+ x: '65%',
|
|
|
+ y: '12%',
|
|
|
+ itemWidth: 10,
|
|
|
+ itemHeight: 10,
|
|
|
+ align: 'left',
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 14,
|
|
|
+ color: '#1ba4ff'
|
|
|
+ },
|
|
|
+ data: ['进风区']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ // orient: 'vertical',
|
|
|
+ x: '65%',
|
|
|
+ y: '45%',
|
|
|
+ itemWidth: 10,
|
|
|
+ itemHeight: 10,
|
|
|
+ align: 'left',
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 14,
|
|
|
+ color: '#1ff8fb'
|
|
|
+ },
|
|
|
+ data: ['用风区']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ // orient: 'vertical',
|
|
|
+ x: '65%',
|
|
|
+ y: '76%',
|
|
|
+ itemWidth: 10,
|
|
|
+ itemHeight: 10,
|
|
|
+ align: 'left',
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 14,
|
|
|
+ color: '#9ae1ff'
|
|
|
+ },
|
|
|
+ data: ['回风区']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ tooltip: {
|
|
|
+ formatter: '{b}:{c}'
|
|
|
+ },
|
|
|
+ series: [
|
|
|
+ // 主要展示层的
|
|
|
+ {
|
|
|
+ radius: ['35%', '70%'],
|
|
|
+ center: ['30%', '50%'],
|
|
|
+ type: 'pie',
|
|
|
+ z: 10,
|
|
|
+ label: {
|
|
|
+ normal: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ emphasis: {
|
|
|
+ show: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ labelLine: {
|
|
|
+ normal: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ emphasis: {
|
|
|
+ show: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ itemStyle: {
|
|
|
+ normal: {
|
|
|
+ borderWidth: 5,
|
|
|
+ borderColor: 'rgba(7, 45, 84,.9)'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data: RealData
|
|
|
+ },
|
|
|
+ // 边框的设置
|
|
|
+ {
|
|
|
+ radius: ['35%', '42%'],
|
|
|
+ center: ['30%', '50%'],
|
|
|
+ type: 'pie',
|
|
|
+ z: 5,
|
|
|
+ label: {
|
|
|
+ normal: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ emphasis: {
|
|
|
+ show: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ labelLine: {
|
|
|
+ normal: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ emphasis: {
|
|
|
+ show: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ animation: false,
|
|
|
+ tooltip: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ data: borderData
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
myChart.setOption(option);
|
|
|
window.onresize = function () {
|
|
|
- myChart.resize();
|
|
|
+ myChart.resize();
|
|
|
};
|
|
|
- });
|
|
|
- }
|
|
|
- </script>
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(()=>{
|
|
|
+ getOption()
|
|
|
+})
|
|
|
+</script>
|
|
|
|
|
|
- <style scoped lang="less">
|
|
|
- .echartScene {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- .scene{
|
|
|
+<style scoped lang="less">
|
|
|
+.echartScene {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ .scene {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
- }
|
|
|
}
|
|
|
- </style>
|
|
|
+
|
|
|
+ .pic {
|
|
|
+ height: 100%;
|
|
|
+ position: absolute;
|
|
|
+ left: 55%;
|
|
|
+ top: 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ img {
|
|
|
+ height: 60%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .percent {
|
|
|
+ position: absolute;
|
|
|
+ left: 85%;
|
|
|
+ top: 0;
|
|
|
+ width: 45px;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ // justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ .percent-box {
|
|
|
+ font-size: 14px;
|
|
|
+
|
|
|
+ &:nth-child(1) {
|
|
|
+ position: absolute;
|
|
|
+ top: 12%;
|
|
|
+ color: #1ba4ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(2) {
|
|
|
+ position: absolute;
|
|
|
+ top: 45%;
|
|
|
+ color: #1ff8fb;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(3) {
|
|
|
+ position: absolute;
|
|
|
+ top: 76%;
|
|
|
+ color: #9ae1ff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}</style>
|
|
|
|