1519 lines
53 KiB
Vue
1519 lines
53 KiB
Vue
<template>
|
||
<div class="box">
|
||
<div class="title">
|
||
<img src="../assets/客户侧总体用能情况分析/图层 2.png" alt="" />
|
||
<p>客户侧总体用能情况分析</p>
|
||
<img src="../assets/客户侧总体用能情况分析/反白稿.png" alt="" />
|
||
</div>
|
||
<div class="containter">
|
||
<div class="left">
|
||
<div class="jrtj">
|
||
<p class="title">接入统计</p>
|
||
<div class="insides">
|
||
<div class="con" v-for="item in tjlist">
|
||
<img src="../assets/tan/组 3128.png" alt="">
|
||
<div class="r_con">
|
||
<p>{{ item.count }}</p>
|
||
<p>{{ item.name }}</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="centers">
|
||
<p>100</p>
|
||
<p>总接入数量</p>
|
||
<img src="../assets/tan/组 3129.png" alt="" class="center_img" />
|
||
</div>
|
||
</div>
|
||
<div class="ssfhzs">
|
||
<p class="title">实时负荷走势</p>
|
||
<ul class="typeBox">
|
||
<li :class="type == '总量' ? 'active' : ''" @click="type = '总量'">
|
||
总量
|
||
</li>
|
||
<li :class="type == '发电' ? 'active' : ''" @click="type = '发电'">
|
||
发电
|
||
</li>
|
||
<li :class="type == '石化' ? 'active' : ''" @click="type = '石化'">
|
||
石化
|
||
</li>
|
||
<li :class="type == '钢铁' ? 'active' : ''" @click="type = '钢铁'">
|
||
钢铁
|
||
</li>
|
||
<li :class="type == '有色' ? 'active' : ''" @click="type = '有色'">
|
||
有色
|
||
</li>
|
||
</ul>
|
||
<div id="ssfhzs"></div>
|
||
</div>
|
||
<div class="ynl">
|
||
<p class="title">用能量</p>
|
||
<!-- <ul class="typeBox">
|
||
<li :class="type == '电' ? 'active' : ''" @click="type = '电'">
|
||
电
|
||
</li>
|
||
<li :class="type == '水' ? 'active' : ''" @click="type = '水'">
|
||
水
|
||
</li>
|
||
<li :class="type == '蒸汽' ? 'active' : ''" @click="type = '蒸汽'">
|
||
蒸汽
|
||
</li>
|
||
</ul> -->
|
||
<div id="ynl"></div>
|
||
</div>
|
||
</div>
|
||
<div class="right">
|
||
<div class="tyjg">
|
||
<p class="title">碳源结构</p>
|
||
<div id="tyjg">
|
||
<div class="t_content">
|
||
<div v-for="(item, index) in controls" :key="index" class="t_con">
|
||
<p class="t_name">{{ item.name }}</p>
|
||
<p><span class="t_count">{{ item.count }}</span>
|
||
<span class="t_img1" v-if="item.isShow == true">
|
||
{{ item.percent }}
|
||
<img src="../assets/tan/325数值上升.png" alt="">
|
||
</span>
|
||
<span class="t_img2" v-else>
|
||
{{ item.percent }}%
|
||
<img src="../assets/tan/325数值上升 (2).png" alt="">
|
||
</span>
|
||
</p>
|
||
<p></p>
|
||
</div>
|
||
<div>
|
||
<img src="../assets/tan/组 3141.png" alt="">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="ynflzb">
|
||
<p class="title">用能分类占比</p>
|
||
<img src="../assets/客户侧总体用能情况分析/底盘.png" alt="" class="pic" />
|
||
<div id="ynflzb"></div>
|
||
</div>
|
||
<div class="qyydlpm">
|
||
<p class="title">企业用电量排名</p>
|
||
<ul class="list">
|
||
<li v-for="(item, index) in list" :style="listClass(index)">
|
||
<p>{{ index + 1 }}</p>
|
||
<p>{{ item.name }}</p>
|
||
<p>{{ item.value }}</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="map"></div>
|
||
<div class="footer"></div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
// import * as echarts from "echarts";
|
||
const fontSizeRem = (size) => {
|
||
const clientWidth =
|
||
window.innerWidth ||
|
||
document.documentElement.clientWidth ||
|
||
document.body.clientWidth;
|
||
if (!clientWidth) return;
|
||
let fontSize = clientWidth / 1920; //尺寸大小
|
||
return size * fontSize;
|
||
}
|
||
import * as echarts from "echarts";
|
||
// import { fontSizeRem } from "../assets/function";
|
||
export default {
|
||
data() {
|
||
return {
|
||
res: "日",
|
||
type: "总量",
|
||
tjlist: [
|
||
{
|
||
name: "工业生产",
|
||
count: "10",
|
||
},
|
||
{
|
||
name: "商业楼宇",
|
||
count: "22",
|
||
},
|
||
{
|
||
name: "公共建设",
|
||
count: "18",
|
||
},
|
||
{
|
||
name: "其他",
|
||
count: "50",
|
||
},
|
||
],
|
||
controls: [
|
||
{
|
||
name: "电(万度)",
|
||
count: "4566",
|
||
isShow: true,
|
||
percent: "10",
|
||
},
|
||
{
|
||
name: "汽油(万升)",
|
||
count: "2566",
|
||
isShow: true,
|
||
percent: "10",
|
||
},
|
||
{
|
||
name: "水(万吨)",
|
||
count: "5566",
|
||
isShow: false,
|
||
percent: "10",
|
||
},
|
||
{
|
||
name: "柴油(万升)",
|
||
count: "6566",
|
||
isShow: true,
|
||
percent: "10",
|
||
},
|
||
{
|
||
name: "燃气(立方)",
|
||
count: "7566",
|
||
isShow: true,
|
||
percent: "10",
|
||
},
|
||
{
|
||
name: "煤(吨)",
|
||
count: "4566",
|
||
isShow: true,
|
||
percent: "10",
|
||
},
|
||
],
|
||
list: [
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
{
|
||
name: "济南综合新能源服务有线公司",
|
||
value: "236",
|
||
},
|
||
],
|
||
option: {
|
||
// tooltip: {
|
||
// trigger: "axis",
|
||
// axisPointer: {
|
||
// type: "cross",
|
||
// label: {
|
||
// backgroundColor: "#6a7985",
|
||
// },
|
||
// },
|
||
// },
|
||
// legend: {
|
||
// left: "right",
|
||
// data: [
|
||
// { icon: "roundRect", name: "昨日" },
|
||
// { icon: "roundRect", name: "今日" },
|
||
// ],
|
||
// textStyle: {
|
||
// fontSize: 14,
|
||
// fontFamily: "AlibabaPuHuiTi",
|
||
// fontWeight: 400,
|
||
// color: "rgba(255,255,255,0.8)",
|
||
// },
|
||
// },
|
||
|
||
grid: {
|
||
left: "4%",
|
||
right: "4%",
|
||
bottom: "3%",
|
||
containLabel: true,
|
||
},
|
||
xAxis: [
|
||
{
|
||
type: "category",
|
||
boundaryGap: false,
|
||
data: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
|
||
axisLabel: {
|
||
show: true,
|
||
interval: 0,
|
||
textStyle: {
|
||
fontSize: fontSizeRem(12),
|
||
fontFamily: "AlibabaPuHuiTi",
|
||
fontWeight: 400,
|
||
color: "rgba(255,255,255,0.8)",
|
||
},
|
||
},
|
||
},
|
||
],
|
||
yAxis: [
|
||
{
|
||
type: "value",
|
||
name: "单位:万吨标煤",
|
||
nameTextStyle: {
|
||
color: "#fff",
|
||
fontSize: fontSizeRem(14),
|
||
padding: fontSizeRem(10),
|
||
},
|
||
axisLabel: {
|
||
show: true,
|
||
textStyle: {
|
||
fontSize: fontSizeRem(14),
|
||
fontFamily: "AlibabaPuHuiTi",
|
||
fontWeight: 400,
|
||
color: "rgba(255,255,255,0.8)",
|
||
},
|
||
},
|
||
},
|
||
],
|
||
series: [
|
||
{
|
||
name: "",
|
||
type: "line",
|
||
stack: "Total",
|
||
smooth: true,
|
||
lineStyle: {
|
||
width: fontSizeRem(2),
|
||
color: "#29F1FA",
|
||
},
|
||
showSymbol: false,
|
||
itemStyle: {
|
||
color: "#29F1FA",
|
||
},
|
||
areaStyle: {
|
||
opacity: 0.4,
|
||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||
{
|
||
offset: 0,
|
||
color: "rgb(7, 51, 99)",
|
||
},
|
||
{
|
||
offset: 1,
|
||
color: "rgb(7, 67, 103)",
|
||
},
|
||
]),
|
||
},
|
||
emphasis: {
|
||
focus: "series",
|
||
},
|
||
data: [220, 402, 231, 134, 190, 230, 120, 240, 360, 400, 397, 360, 300],
|
||
},
|
||
],
|
||
},
|
||
option1: {
|
||
// tooltip: {
|
||
// trigger: "axis",
|
||
// axisPointer: {
|
||
// type: "cross",
|
||
// label: {
|
||
// backgroundColor: "#6a7985",
|
||
// },
|
||
// },
|
||
// },
|
||
legend: {
|
||
left: "right",
|
||
data: [
|
||
{ icon: "circle", name: "2022" },
|
||
{ icon: "circle", name: "2023" },
|
||
],
|
||
textStyle: {
|
||
fontSize: fontSizeRem(14),
|
||
fontFamily: "AlibabaPuHuiTi",
|
||
fontWeight: 400,
|
||
color: "rgba(255,255,255,0.8)",
|
||
},
|
||
},
|
||
grid: {
|
||
left: "4%",
|
||
right: "4%",
|
||
bottom: "3%",
|
||
containLabel: true,
|
||
},
|
||
xAxis: [
|
||
{
|
||
type: "category",
|
||
boundaryGap: false,
|
||
data: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
|
||
axisLabel: {
|
||
show: true,
|
||
interval: 0,
|
||
textStyle: {
|
||
fontSize: fontSizeRem(12),
|
||
fontFamily: "AlibabaPuHuiTi",
|
||
fontWeight: 400,
|
||
color: "rgba(255,255,255,0.8)",
|
||
},
|
||
},
|
||
},
|
||
],
|
||
yAxis: [
|
||
{
|
||
type: "value",
|
||
name: "单位:万吨",
|
||
nameTextStyle: {
|
||
color: "#fff",
|
||
fontSize: fontSizeRem(14),
|
||
padding: 10,
|
||
},
|
||
axisLabel: {
|
||
show: true,
|
||
textStyle: {
|
||
fontSize: fontSizeRem(14),
|
||
fontFamily: "AlibabaPuHuiTi",
|
||
fontWeight: 400,
|
||
color: "rgba(255,255,255,0.8)",
|
||
},
|
||
},
|
||
},
|
||
],
|
||
series: [
|
||
{
|
||
name: "2022",
|
||
type: "line",
|
||
stack: "Total",
|
||
smooth: true,
|
||
lineStyle: {
|
||
width: fontSizeRem(2),
|
||
color: "#FDCC00",
|
||
},
|
||
showSymbol: false,
|
||
itemStyle: {
|
||
color: "#FDCC00",
|
||
},
|
||
areaStyle: {
|
||
opacity: 0.4,
|
||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||
{
|
||
offset: 0,
|
||
color: "rgb(7, 51, 99)",
|
||
},
|
||
{
|
||
offset: 1,
|
||
color: "rgb(7, 67, 103)",
|
||
},
|
||
]),
|
||
},
|
||
emphasis: {
|
||
focus: "series",
|
||
},
|
||
data: [220, 402, 231, 134, 190, 230, 120, 240, 360, 400, 397, 360, 300],
|
||
},
|
||
{
|
||
name: "2023",
|
||
type: "line",
|
||
// stack: "Total",
|
||
smooth: true,
|
||
lineStyle: {
|
||
width: 2,
|
||
color: "#1B7EF2",
|
||
},
|
||
showSymbol: false,
|
||
label: {
|
||
show: true,
|
||
position: "top",
|
||
},
|
||
itemStyle: {
|
||
color: "#1B7EF2",
|
||
},
|
||
areaStyle: {
|
||
opacity: 0.4,
|
||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||
{
|
||
offset: 0,
|
||
color: "rgb(7, 51, 96)",
|
||
},
|
||
{
|
||
offset: 1,
|
||
color: "rgb(9, 58, 117)",
|
||
},
|
||
]),
|
||
},
|
||
emphasis: {
|
||
focus: "series",
|
||
},
|
||
data: [220, 302, 181, 234, 210, 290, 150, 120, 160, 200, 221, 200, 175, 120, 150, 180],
|
||
},
|
||
],
|
||
},
|
||
};
|
||
},
|
||
methods: {
|
||
listClass(index) {
|
||
if (index == 0) {
|
||
return 'background: url("../assets/客户侧总体用能情况分析/矩形.png");color: #ffdd34;';
|
||
} else if (index == 1) {
|
||
return 'background: url("../assets/客户侧总体用能情况分析/矩形(1).png");color: #fdc;';
|
||
} else if (index == 2) {
|
||
return 'background: url("../assets/客户侧总体用能情况分析/矩形(2).png");color: #FF7734;';
|
||
}
|
||
},
|
||
defineEcharts(dom, option) {
|
||
var chartDom = document.getElementById(dom);
|
||
var myChart = this.$echarts.init(chartDom, null, {
|
||
devicePixelRatio: 10, // 设置为2或更高的值
|
||
});
|
||
myChart.setOption(option);
|
||
window.addEventListener("resize", function () {
|
||
myChart.resize();
|
||
});
|
||
},
|
||
|
||
//用能分类占比
|
||
initYnflzb() {
|
||
let getParametricEquation = function (
|
||
startRatio,
|
||
endRatio,
|
||
isSelected,
|
||
isHovered,
|
||
k,
|
||
height
|
||
) {
|
||
// 计算
|
||
let midRatio = (startRatio + endRatio) / 2;
|
||
|
||
let startRadian = startRatio * Math.PI * 2;
|
||
let endRadian = endRatio * Math.PI * 2;
|
||
let midRadian = midRatio * Math.PI * 2;
|
||
|
||
// 如果只有一个扇形,则不实现选中效果。
|
||
if (startRatio === 0 && endRatio === 1) {
|
||
isSelected = false;
|
||
}
|
||
|
||
// 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
|
||
k = typeof k !== "undefined" ? k : 1 / 3;
|
||
|
||
// 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
|
||
let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
|
||
let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
|
||
|
||
// 计算高亮效果的放大比例(未高亮,则比例为 1)
|
||
let hoverRate = isHovered ? 1.05 : 1;
|
||
|
||
// 返回曲面参数方程
|
||
return {
|
||
u: {
|
||
min: -Math.PI,
|
||
max: Math.PI * 3,
|
||
step: Math.PI / 32,
|
||
},
|
||
|
||
v: {
|
||
min: 0,
|
||
max: Math.PI * 2,
|
||
step: Math.PI / 20,
|
||
},
|
||
|
||
x: function (u, v) {
|
||
if (u < startRadian) {
|
||
return (
|
||
offsetX +
|
||
Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate
|
||
);
|
||
}
|
||
if (u > endRadian) {
|
||
return (
|
||
offsetX +
|
||
Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate
|
||
);
|
||
}
|
||
return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
|
||
},
|
||
|
||
y: function (u, v) {
|
||
if (u < startRadian) {
|
||
return (
|
||
offsetY +
|
||
Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate
|
||
);
|
||
}
|
||
if (u > endRadian) {
|
||
return (
|
||
offsetY +
|
||
Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate
|
||
);
|
||
}
|
||
return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
|
||
},
|
||
|
||
z: function (u, v) {
|
||
if (u < -Math.PI * 0.5) {
|
||
return Math.sin(u);
|
||
}
|
||
if (u > Math.PI * 2.5) {
|
||
return Math.sin(u);
|
||
}
|
||
return Math.sin(v) > 0 ? 1 * height : -1;
|
||
},
|
||
};
|
||
};
|
||
// 生成模拟 3D 饼图的配置项
|
||
let getPie3D = function (pieData, internalDiameterRatio) {
|
||
let series = [];
|
||
let sumValue = 0;
|
||
let startValue = 0;
|
||
let endValue = 0;
|
||
let legendData = [];
|
||
let k =
|
||
typeof internalDiameterRatio !== "undefined"
|
||
? (1 - internalDiameterRatio) / (1 + internalDiameterRatio)
|
||
: 1 / 3;
|
||
|
||
// 为每一个饼图数据,生成一个 series-surface 配置
|
||
for (let i = 0; i < pieData.length; i++) {
|
||
sumValue += pieData[i].value;
|
||
|
||
let seriesItem = {
|
||
name:
|
||
typeof pieData[i].name === "undefined"
|
||
? `series${i}`
|
||
: pieData[i].name,
|
||
type: "surface",
|
||
parametric: true,
|
||
wireframe: {
|
||
show: false,
|
||
},
|
||
pieData: pieData[i],
|
||
pieStatus: {
|
||
selected: false,
|
||
hovered: false,
|
||
k: k,
|
||
},
|
||
};
|
||
|
||
if (typeof pieData[i].itemStyle != "undefined") {
|
||
let itemStyle = {};
|
||
|
||
typeof pieData[i].itemStyle.color != "undefined"
|
||
? (itemStyle.color = pieData[i].itemStyle.color)
|
||
: null;
|
||
typeof pieData[i].itemStyle.opacity != "undefined"
|
||
? (itemStyle.opacity = pieData[i].itemStyle.opacity)
|
||
: null;
|
||
|
||
seriesItem.itemStyle = itemStyle;
|
||
}
|
||
series.push(seriesItem);
|
||
}
|
||
|
||
// 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
|
||
// 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
|
||
for (let i = 0; i < series.length; i++) {
|
||
endValue = startValue + series[i].pieData.value;
|
||
console.log(series[i]);
|
||
series[i].pieData.startRatio = startValue / sumValue;
|
||
series[i].pieData.endRatio = endValue / sumValue;
|
||
series[i].parametricEquation = getParametricEquation(
|
||
series[i].pieData.startRatio,
|
||
series[i].pieData.endRatio,
|
||
false,
|
||
false,
|
||
k,
|
||
series[i].pieData.value
|
||
);
|
||
|
||
startValue = endValue;
|
||
|
||
legendData.push(series[i].name);
|
||
}
|
||
return series;
|
||
};
|
||
// 传入数据生成 option
|
||
const optionsData = [
|
||
{
|
||
name: "楼宇",
|
||
value: 4256,
|
||
itemStyle: {
|
||
// opacity: 0.5,
|
||
color: "#2A71FF",
|
||
},
|
||
},
|
||
|
||
{
|
||
name: "工业",
|
||
value: 2356,
|
||
itemStyle: {
|
||
// opacity: 0.5,
|
||
color: "#00EDFE",
|
||
},
|
||
},
|
||
{
|
||
name: "其他",
|
||
value: 2018,
|
||
itemStyle: {
|
||
// opacity: 0.5,
|
||
color: "#FEDB4B",
|
||
},
|
||
},
|
||
];
|
||
const series = getPie3D(optionsData, 0.8, 240, 28, 26, 0.5);
|
||
series.push({
|
||
name: "pie2d",
|
||
type: "pie",
|
||
|
||
label: {
|
||
show: false,
|
||
opacity: 1,
|
||
fontSize: fontSizeRem(14),
|
||
lineHeight: 20,
|
||
textStyle: {
|
||
fontSize: fontSizeRem(14),
|
||
color: "#fff",
|
||
},
|
||
},
|
||
labelLine: {
|
||
length: 30,
|
||
length2: 30,
|
||
},
|
||
startAngle: -30, //起始角度,支持范围[0, 360]。
|
||
clockwise: false, //饼图的扇区是否是顺时针排布。上述这两项配置主要是为了对齐3d的样式
|
||
radius: ["40%", "60%"],
|
||
// center: ["30%", "50%"],
|
||
center: ["40%", "50%"],
|
||
data: optionsData,
|
||
itemStyle: {
|
||
opacity: 0,
|
||
},
|
||
});
|
||
let data = [
|
||
{
|
||
name: "楼宇",
|
||
value: "30%",
|
||
},
|
||
{
|
||
name: "工业",
|
||
value: "30%",
|
||
},
|
||
{
|
||
name: "其他",
|
||
value: "40%",
|
||
},
|
||
];
|
||
// 准备待返回的配置项,把准备好的 legendData、series 传入。
|
||
let option = {
|
||
legend: {
|
||
show: true,
|
||
tooltip: {
|
||
show: false,
|
||
},
|
||
orient: "vertical",
|
||
data: data,
|
||
top: "center",
|
||
itemGap: 14,
|
||
itemHeight: 8,
|
||
itemWidth: 17,
|
||
right: "2%",
|
||
textStyle: {
|
||
color: "#fff",
|
||
fontSize: fontSizeRem(12),
|
||
},
|
||
formatter: function (name) {
|
||
let res = data.filter((v) => v.name === name);
|
||
res = res[0] || {};
|
||
let unit = res.unit || "";
|
||
return name + " " + res.value + unit;
|
||
},
|
||
},
|
||
animation: false,
|
||
tooltip: {
|
||
show: false,
|
||
formatter: (params) => {
|
||
if (
|
||
params.seriesName !== "mouseoutSeries" &&
|
||
params.seriesName !== "pie2d"
|
||
) {
|
||
return `${params.seriesName
|
||
}<br/><span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color
|
||
};"></span>${option.series[params.seriesIndex].pieData.value + "%"
|
||
}`;
|
||
}
|
||
},
|
||
textStyle: {
|
||
fontSize: fontSizeRem(14),
|
||
},
|
||
},
|
||
title: {
|
||
x: "center",
|
||
top: "20",
|
||
textStyle: {
|
||
color: "#fff",
|
||
fontSize: fontSizeRem(22),
|
||
},
|
||
},
|
||
// backgroundColor: "#0E3567",
|
||
labelLine: {
|
||
show: false,
|
||
lineStyle: {
|
||
color: "#7BC0CB",
|
||
},
|
||
normal: {
|
||
show: true,
|
||
length: 10,
|
||
length2: 10,
|
||
},
|
||
},
|
||
label: {
|
||
show: false,
|
||
// position: "outside",
|
||
// formatter: "{b} \n{d}%",
|
||
// textStyle: {
|
||
// color: "#fff",
|
||
// fontSize: "14px",
|
||
// },
|
||
},
|
||
xAxis3D: {
|
||
min: -1,
|
||
max: 1,
|
||
},
|
||
yAxis3D: {
|
||
min: -1,
|
||
max: 1,
|
||
},
|
||
zAxis3D: {
|
||
min: -1,
|
||
max: 1,
|
||
},
|
||
grid3D: {
|
||
show: false,
|
||
boxHeight: 0.01,
|
||
//top: '30%',
|
||
bottom: "50%",
|
||
left: "-7%",
|
||
// environment: "rgba(255,255,255,0)",
|
||
viewControl: {
|
||
distance: 180,
|
||
alpha: 25,
|
||
beta: 60,
|
||
},
|
||
},
|
||
series: series,
|
||
};
|
||
this.defineEcharts("ynflzb", option);
|
||
},
|
||
},
|
||
mounted() {
|
||
this.defineEcharts("ssfhzs", this.option);
|
||
this.defineEcharts("ynl", this.option1);
|
||
this.initYhhyzb();
|
||
this.initYnflzb();
|
||
|
||
var data = [
|
||
{
|
||
name: "南京市",
|
||
value: 1,
|
||
},
|
||
{
|
||
name: "济南市",
|
||
value: 2,
|
||
},
|
||
{
|
||
name: "徐州市",
|
||
value: 3,
|
||
},
|
||
{
|
||
name: "常州市",
|
||
value: 4,
|
||
},
|
||
{
|
||
name: "苏州市",
|
||
value: 5,
|
||
},
|
||
{
|
||
name: "南通市",
|
||
value: 6,
|
||
},
|
||
{
|
||
name: "连云港市",
|
||
value: 7,
|
||
},
|
||
{
|
||
name: "淮安市",
|
||
value: 8,
|
||
},
|
||
{
|
||
name: "盐城市",
|
||
value: 9,
|
||
},
|
||
{
|
||
name: "扬州市",
|
||
value: 10,
|
||
},
|
||
{
|
||
name: "镇江市",
|
||
value: 11,
|
||
},
|
||
{
|
||
name: "泰州市",
|
||
value: 12,
|
||
},
|
||
{
|
||
name: "宿迁市",
|
||
value: 13,
|
||
},
|
||
];
|
||
var splitList = [
|
||
{
|
||
start: 1,
|
||
end: 1,
|
||
label: "济南市",
|
||
color: "#236da8",
|
||
},
|
||
{
|
||
start: 2,
|
||
end: 2,
|
||
label: "无锡市",
|
||
color: "#2884db",
|
||
},
|
||
{
|
||
start: 3,
|
||
end: 3,
|
||
label: "徐州市",
|
||
color: "#244779",
|
||
},
|
||
{
|
||
start: 4,
|
||
end: 4,
|
||
label: "常州市",
|
||
color: "#246198",
|
||
},
|
||
{
|
||
start: 5,
|
||
end: 5,
|
||
label: "苏州市",
|
||
color: "#2884db",
|
||
},
|
||
{
|
||
start: 6,
|
||
end: 6,
|
||
label: "南通市",
|
||
color: "#2884db",
|
||
},
|
||
{
|
||
start: 7,
|
||
end: 7,
|
||
label: "连云港市",
|
||
color: "#244779",
|
||
},
|
||
{
|
||
start: 8,
|
||
end: 8,
|
||
label: "淮安市",
|
||
color: "#244779",
|
||
},
|
||
{
|
||
start: 9,
|
||
end: 9,
|
||
label: "盐城市",
|
||
color: "#244779",
|
||
},
|
||
{
|
||
start: 10,
|
||
end: 10,
|
||
label: "扬州市",
|
||
color: "#246198",
|
||
},
|
||
{
|
||
start: 11,
|
||
end: 11,
|
||
label: "镇江市",
|
||
color: "#2884db",
|
||
},
|
||
{
|
||
start: 12,
|
||
end: 12,
|
||
label: "泰州市",
|
||
color: "#2884db",
|
||
},
|
||
{
|
||
start: 13,
|
||
end: 13,
|
||
label: "宿迁市",
|
||
color: "#244779",
|
||
},
|
||
];
|
||
var chartDom = document.getElementById("map");
|
||
var myChart = this.$echarts.init(chartDom, null, {
|
||
devicePixelRatio: 10, // 设置为2或更高的值
|
||
});
|
||
|
||
//获取山东地图数据。
|
||
$.get(
|
||
"https://geo.datav.aliyun.com/areas_v3/bound/370000_full.json",
|
||
function (geojson) {
|
||
echarts.registerMap("山东", geojson);
|
||
let option = {
|
||
series: [
|
||
{
|
||
tooltip: {
|
||
trigger: "item",
|
||
},
|
||
name: "山东",
|
||
type: "map3D",
|
||
map: "山东",
|
||
boxDepth: 60, //地图倾斜度
|
||
regionHeight: 6, //地图厚度
|
||
label: {
|
||
show: true, //是否显示市
|
||
textStyle: {
|
||
color: "#fff", //文字颜色
|
||
fontSize: 12, //文字大小
|
||
fontFamily: "微软雅黑",
|
||
backgroundColor: "rgba(0,0,0,0)", //透明度0清空文字背景
|
||
},
|
||
},
|
||
itemStyle: {
|
||
opacity: 1, // 透明度
|
||
borderWidth: 1.5, //分界线宽度
|
||
borderColor: "#0699E4", //分界线颜色
|
||
},
|
||
groundplane: {
|
||
show: true,
|
||
},
|
||
data: data,
|
||
//shading: 'realistic',
|
||
// 真实感材质相关配置 shading: 'realistic'时有效
|
||
realisticMaterial: {
|
||
detailTexture: "#093099", // 纹理贴图
|
||
textureTiling: 0, // 纹理平铺,1是拉伸,数字表示纹理平铺次数
|
||
roughness: 0, // 材质粗糙度,0完全光滑,1完全粗糙
|
||
metalness: 1, // 0材质是非金属 ,1金属
|
||
roughnessAdjust: 0,
|
||
},
|
||
viewControl: {
|
||
distance: 80, // 地图视角 控制初始大小
|
||
rotateSensitivity: 1, // 旋转
|
||
zoomSensitivity: 1, // 缩放
|
||
},
|
||
},
|
||
],
|
||
dataRange: {
|
||
show: false,
|
||
splitList: splitList,
|
||
},
|
||
animation: true,
|
||
};
|
||
myChart.setOption(option);
|
||
myChart.on("click", this.chartClick);
|
||
let chartClick = function (param) {
|
||
console.log(param);
|
||
myChart.setOption(option, false);
|
||
window.addEventListener("resize", function () {
|
||
myChart.resize();
|
||
});
|
||
var selectedPro = param.name;
|
||
if (!cityProper[selectedPro]) {
|
||
option.series.splice(1);
|
||
option.legend = null;
|
||
option.visualMap = null;
|
||
myChart.setOption(option, true);
|
||
return;
|
||
}
|
||
//获取点击区域数据
|
||
$.get(cityProper[selectedPro], function (geojson) {
|
||
echarts.registerMap(selectedPro, geojson);
|
||
//根据需求,如果要替换青岛地图,series参数为[0],不替换为[1],其中left、top自己设置。
|
||
option.series[0] = {
|
||
name: "",
|
||
type: "map",
|
||
map: selectedPro,
|
||
boxDepth: 80, //地图倾斜度
|
||
regionHeight: 5, //地图厚度
|
||
itemStyle: {
|
||
normal: {
|
||
label: {
|
||
show: true,
|
||
},
|
||
},
|
||
emphasis: {
|
||
label: {
|
||
show: true,
|
||
},
|
||
},
|
||
},
|
||
groundplane: {
|
||
show: false,
|
||
},
|
||
data: data,
|
||
shading: "realistic",
|
||
// 真实感材质相关配置 shading: 'realistic'时有效
|
||
realisticMaterial: {
|
||
detailTexture: "#fff", // 纹理贴图
|
||
textureTiling: 1, // 纹理平铺,1是拉伸,数字表示纹理平铺次数
|
||
roughness: 0, // 材质粗糙度,0完全光滑,1完全粗糙
|
||
metalness: 0, // 0材质是非金属 ,1金属
|
||
roughnessAdjust: 0,
|
||
},
|
||
viewControl: {
|
||
distance: 100, // 地图视角 控制初始大小
|
||
rotateSensitivity: 1, // 旋转
|
||
zoomSensitivity: 1, // 缩放
|
||
},
|
||
};
|
||
myChart.setOption(option);
|
||
});
|
||
};
|
||
}
|
||
);
|
||
},
|
||
beforeDestroy() {
|
||
//离开页面后,删除屏幕监听,防止监听事件一直存在
|
||
window.removeEventListener("resize", this.getResize);
|
||
},
|
||
};
|
||
</script>
|
||
<style scoped lang="less">
|
||
.box {
|
||
width: 100%;
|
||
height: 100%;
|
||
display: flex;
|
||
flex-direction: column;
|
||
color: #fff;
|
||
|
||
.title {
|
||
width: 100%;
|
||
height: 76px;
|
||
background: url(../assets/客户侧总体用能情况分析/标题背景.png);
|
||
background-position: center center;
|
||
background-repeat: no-repeat;
|
||
background-size: cover;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
margin-bottom: 10px;
|
||
|
||
p {
|
||
width: 527px;
|
||
height: 47px;
|
||
font-size: 44px;
|
||
// font-family: " Alibaba PuHuiTi" 2, " Alibaba PuHuiTi" 20;
|
||
font-weight: 600;
|
||
line-height: 47px;
|
||
letter-spacing: 3px;
|
||
color: #fff;
|
||
margin-left: -60px;
|
||
}
|
||
|
||
img:nth-of-type(1) {
|
||
width: 231px;
|
||
height: 59px;
|
||
}
|
||
|
||
img:nth-of-type(2) {
|
||
width: 158px;
|
||
height: 28px;
|
||
}
|
||
}
|
||
|
||
.containter {
|
||
width: 100%;
|
||
height: 967px;
|
||
display: flex;
|
||
position: relative;
|
||
justify-content: space-between;
|
||
|
||
.left {
|
||
width: 436px;
|
||
height: 100%;
|
||
|
||
.jrtj {
|
||
height: 294px;
|
||
width: 100%;
|
||
background: url("../assets/客户侧总体用能情况分析/组 3117.png");
|
||
background-size: cover;
|
||
position: relative;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
|
||
.title {
|
||
position: absolute;
|
||
left: 160px;
|
||
width: 144px;
|
||
height: 36px;
|
||
font-size: 18;
|
||
font-weight: 700;
|
||
color: rgba(255, 255, 255, 0.87);
|
||
line-height: 36px;
|
||
}
|
||
|
||
.centers {
|
||
width: 217px;
|
||
height: 126px;
|
||
position: absolute;
|
||
left: 50px;
|
||
top: 36px;
|
||
// text-align: center;
|
||
display: block;
|
||
|
||
p:nth-child(1) {
|
||
width: 81px;
|
||
height: 25px;
|
||
font-size: 24;
|
||
text-align: center;
|
||
font-weight: 500;
|
||
color: #29F1FA;
|
||
line-height: 22px;
|
||
position: absolute;
|
||
left: 50px;
|
||
}
|
||
|
||
p:nth-child(2) {
|
||
width: 71px;
|
||
height: 25px;
|
||
text-align: center;
|
||
font-size: 12;
|
||
font-weight: 250;
|
||
color: #FFFFFF;
|
||
line-height: 22px;
|
||
}
|
||
|
||
img {
|
||
width: 217px;
|
||
height: 126px;
|
||
}
|
||
}
|
||
|
||
.insides {
|
||
margin-top: 56px;
|
||
width: 436px;
|
||
height: 294px;
|
||
display: flex;
|
||
justify-content: space-around;
|
||
flex-wrap: wrap;
|
||
position: relative;
|
||
|
||
.con {
|
||
width: 156px;
|
||
display: flex;
|
||
|
||
img {
|
||
width: 50px;
|
||
height: 60px;
|
||
display: block;
|
||
}
|
||
|
||
p:nth-child(1) {
|
||
color: #fff;
|
||
}
|
||
|
||
p:nth-child(2) {
|
||
width: 56px;
|
||
height: 22px;
|
||
font-size: 14;
|
||
// font-family: Alibaba PuHuiTi 2.0, Alibaba PuHuiTi 20;
|
||
font-weight: 300;
|
||
color: #7DD9DD;
|
||
line-height: 22px;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.ssfhzs {
|
||
height: 315px;
|
||
background: url("../assets/客户侧总体用能情况分析/实时负荷走势-框.png");
|
||
background-size: cover;
|
||
margin-top: 6px;
|
||
position: relative;
|
||
|
||
.title {
|
||
position: absolute;
|
||
left: 160px;
|
||
width: 144px;
|
||
height: 36px;
|
||
font-size: 18px;
|
||
font-family: "Source Han Sans";
|
||
font-weight: 700;
|
||
color: rgba(255, 255, 255, 0.87);
|
||
line-height: 36px;
|
||
}
|
||
|
||
.typeBox {
|
||
list-style: none;
|
||
display: flex;
|
||
position: absolute;
|
||
top: 54px;
|
||
right: 20px;
|
||
// left: 50%;
|
||
// transform: translateX(-50%);
|
||
|
||
li {
|
||
width: 39px;
|
||
height: 21px;
|
||
background: rgba(29, 29, 29, 0.5);
|
||
border-radius: 2px 2px 2px 2px;
|
||
font-size: 14px;
|
||
border: 1px solid #666666;
|
||
text-align: center;
|
||
margin: 2.5px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.active {
|
||
background: rgba(10, 167, 255, 0.3);
|
||
border: 1px solid #0aa7ff;
|
||
}
|
||
}
|
||
|
||
#ssfhzs {
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 200px;
|
||
bottom: 10px;
|
||
}
|
||
}
|
||
|
||
.ynl {
|
||
height: 325px;
|
||
background: url("../assets/客户侧总体用能情况分析/用能量-框.png");
|
||
background-size: cover;
|
||
margin-top: 6px;
|
||
|
||
position: relative;
|
||
|
||
.title {
|
||
position: absolute;
|
||
left: 190px;
|
||
width: 144px;
|
||
height: 36px;
|
||
font-size: 18px;
|
||
// font-family: "Source Han Sans";
|
||
font-weight: 700;
|
||
color: rgba(255, 255, 255, 0.87);
|
||
line-height: 36px;
|
||
}
|
||
|
||
.typeBox {
|
||
list-style: none;
|
||
display: flex;
|
||
position: absolute;
|
||
top: 54px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
|
||
li {
|
||
width: 39px;
|
||
height: 21px;
|
||
background: rgba(29, 29, 29, 0.5);
|
||
border-radius: 2px 2px 2px 2px;
|
||
font-size: 14px;
|
||
border: 1px solid #666666;
|
||
text-align: center;
|
||
margin: 2.5px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.active {
|
||
background: rgba(10, 167, 255, 0.3);
|
||
border: 1px solid #0aa7ff;
|
||
}
|
||
}
|
||
|
||
#ynl {
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 200px;
|
||
bottom: 10px;
|
||
}
|
||
}
|
||
}
|
||
|
||
.right {
|
||
width: 436px;
|
||
height: 100%;
|
||
|
||
.tyjg {
|
||
height: 294px;
|
||
width: 100%;
|
||
background: url("../assets/tan/组\ 3142.png");
|
||
background-size: cover;
|
||
position: relative;
|
||
|
||
.title {
|
||
position: absolute;
|
||
left: 160px;
|
||
width: 144px;
|
||
height: 36px;
|
||
font-size: 18px;
|
||
font-family: "Source Han Sans";
|
||
font-weight: 700;
|
||
color: rgba(255, 255, 255, 0.87);
|
||
line-height: 36px;
|
||
}
|
||
|
||
#tyjg {
|
||
width: 100%;
|
||
height: 100%;
|
||
|
||
.t_content {
|
||
width: 100%;
|
||
display: flex;
|
||
justify-content: flex-start;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.t_con {
|
||
width: 106px;
|
||
height: 52px;
|
||
margin-left: 20px;
|
||
box-shadow: inset 16px 10px 39px 12px #6BFFFE;
|
||
border-radius: 4px 4px 4px 4px;
|
||
opacity: 1;
|
||
border: 1px solid #061A4D;
|
||
}
|
||
}
|
||
}
|
||
|
||
.ynflzb {
|
||
height: 294px;
|
||
width: 100%;
|
||
background: url("../assets/客户侧总体用能情况分析/组 3117.png");
|
||
background-size: cover;
|
||
position: relative;
|
||
margin-top: 6px;
|
||
|
||
.title {
|
||
position: absolute;
|
||
left: 160px;
|
||
width: 144px;
|
||
height: 36px;
|
||
font-size: 18px;
|
||
font-family: "Source Han Sans";
|
||
font-weight: 700;
|
||
color: rgba(255, 255, 255, 0.87);
|
||
line-height: 36px;
|
||
}
|
||
|
||
#ynflzb {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.pic {
|
||
width: 300px;
|
||
position: absolute;
|
||
height: 150px;
|
||
top: 100px;
|
||
left: 40px;
|
||
}
|
||
}
|
||
|
||
.qyydlpm {
|
||
height: 353px;
|
||
width: 100%;
|
||
background: url("../assets/客户侧总体用能情况分析/组 3119.png");
|
||
background-size: cover;
|
||
position: relative;
|
||
margin-top: 6px;
|
||
|
||
.title {
|
||
position: absolute;
|
||
left: 160px;
|
||
width: 144px;
|
||
height: 36px;
|
||
font-size: 18px;
|
||
font-family: "Source Han Sans";
|
||
font-weight: 700;
|
||
color: rgba(255, 255, 255, 0.87);
|
||
line-height: 36px;
|
||
}
|
||
|
||
.list {
|
||
list-style: none;
|
||
height: 300px;
|
||
width: 100%;
|
||
float: left;
|
||
margin-top: 50px;
|
||
|
||
li {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding: 0 30px 0 30px;
|
||
box-sizing: border-box;
|
||
margin: 9px;
|
||
|
||
p:nth-of-type(1) {
|
||
background: url("../assets/客户侧总体用能情况分析/矩形(3).png");
|
||
width: 24px;
|
||
height: 16px;
|
||
line-height: 16px;
|
||
background: rgba(34, 23, 23, 0.1);
|
||
border-radius: 0px 0px 0px 0px;
|
||
opacity: 1;
|
||
text-align: center;
|
||
border: 1px solid #b1b1b1;
|
||
background-size: cover;
|
||
}
|
||
|
||
p:nth-of-type(2) {
|
||
width: 190px;
|
||
height: 12px;
|
||
font-size: 14px;
|
||
font-family: "AlibabaPuHuiTi";
|
||
font-weight: 400;
|
||
color: rgba(255, 255, 255, 0.8);
|
||
line-height: 12px;
|
||
}
|
||
|
||
p:nth-of-type(3) {
|
||
width: 27px;
|
||
height: 12px;
|
||
font-size: 14px;
|
||
font-family: "AlibabaPuHuiTi";
|
||
font-weight: 500;
|
||
color: rgba(255, 255, 255, 0.8);
|
||
line-height: 12px;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.footer {
|
||
position: absolute;
|
||
width: 994px;
|
||
height: 325px;
|
||
background: url("../assets/客户侧总体用能情况分析/组 3120.png");
|
||
background-size: cover;
|
||
bottom: 10px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
}
|
||
|
||
#map {
|
||
width: 994px;
|
||
position: absolute;
|
||
height: 627px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
overflow: hidden;
|
||
}
|
||
}
|
||
}
|
||
</style>
|
||
|