You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

583 lines
16 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*Echarts图表封装*/
//横向柱状图
const horizontalBarChart = (res, ids) => {
let mycharts = echarts.init(ids);
//参考https://www.makeapie.com/editor.html?c=xqjNqqjc_U
let datas = [
{ranking: 1, station: "SC227", value: 199999},
{ranking: 2, station: "SC228", value: 104970},
{ranking: 3, station: "SC229", value: 29034},
{ranking: 4, station: "SC223", value: 23489},
{ranking: 5, station: "SC224", value: 18203},
];
let seriesName = "产量";
function contains(arr, dst) {
var i = arr.length;
while ((i -= 1)) {
if (arr[i] == dst) {
return i;
}
}
return false;
}
let attackSourcesColor = [
new echarts.graphic.LinearGradient(0, 1, 1, 1, [
{offset: 0, color: "#EB3B5A"},
{offset: 1, color: "#FE9C5A"},
]),
new echarts.graphic.LinearGradient(0, 1, 1, 1, [
{offset: 0, color: "#FA8231"},
{offset: 1, color: "#FFD14C"},
]),
new echarts.graphic.LinearGradient(0, 1, 1, 1, [
{offset: 0, color: "#F7B731"},
{offset: 1, color: "#FFEE96"},
]),
new echarts.graphic.LinearGradient(0, 1, 1, 1, [
{offset: 0, color: "#395CFE"},
{offset: 1, color: "#2EC7CF"},
]),
];
let attackSourcesColor1 = [
"#EB3B5A",
"#FA8231",
"#F7B731",
"#3860FC",
"#1089E7",
"#F57474",
"#56D0E3",
"#1089E7",
"#F57474",
"#1089E7",
"#F57474",
"#F57474",
];
let stationData = [];
let values = [];
res.datas.forEach(function (it, index) {
stationData.push(it.station);
values.push(it.value);
});
function dataFormat(data) {
let arr = [];
data.forEach(function (item, i) {
let itemStyle = {
color: i > 3 ? attackSourcesColor[3] : attackSourcesColor[i],
};
arr.push({
value: item,
itemStyle: itemStyle,
});
});
return arr;
}
let option = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
},
grid: {
top: "9%",
left: "-9%",
right: "4%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "value",
splitLine: {
show: false,
},
axisLabel: {
show: false,
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
},
yAxis: [
{
type: "category",
inverse: true,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
data: stationData,
axisLabel: {
margin: 30,
fontSize: 10,
align: "left",
padding: [2, 0, 0, 0],
color: "#000",
formatter: function (value, index) {
},
},
},
{
type: "category",
inverse: true,
axisTick: "none",
axisLine: "none",
show: true,
axisLabel: {
textStyle: {
color: "#A8A6AB",
fontSize: "12",
},
},
data: dataFormat(values),
},
{
type: "category",
inverse: true,
offset: -10,
position: "left",
axisTick: "none",
axisLine: "none",
show: true,
axisLabel: {
interval: 0,
color: ["#A8A6AB"],
align: "left",
verticalAlign: "bottom",
lineHeight: 32,
fontSize: 12,
},
data: dataFormat(stationData),
},
],
series: [
{
zlevel: 1,
name: seriesName,
type: "bar",
barWidth: 15,
data: dataFormat(values),
align: "center",
itemStyle: {
normal: {
barBorderRadius: 10,
},
},
label: {
show: false,
fontSize: 12,
color: "#A8A6AB",
textBorderWidth: 2,
padding: [2, 0, 0, 0],
},
},
{
name: seriesName,
type: "bar",
barWidth: 15,
barGap: "-100%",
data: res.plan,
itemStyle: {
normal: {
color: "#05325F",
//width:"100%",
fontSize: 12,
barBorderRadius: 30,
},
},
},
],
};
mycharts.setOption(option);
$(window).resize(mycharts.resize);
}
//折线面积图
const brokenLineAreaDiagram = (res, ids) => {
let mycharts = echarts.init(ids);
let option = {
tooltip: {},
grid: {
top: "8%",
left: "1%",
right: "1%",
bottom: "8%",
containLabel: true,
},
legend: {
itemGap: 50,
data: ["人员出入总数"],
textStyle: {
color: "#f9f9f9",
borderColor: "#fff",
},
},
xAxis: [
{
type: "category",
boundaryGap: true,
axisLine: {
//坐标轴轴线相关设置。数学上的x轴
show: true,
lineStyle: {
color: "#2A3852",
},
},
axisLabel: {
//坐标轴刻度标签的相关设置
textStyle: {
color: "#A8A6AB",
margin: 15,
},
},
axisTick: {
show: false,
},
data: [
"07",
"08",
"09",
"10",
"11",
"12",
"13",
],
},
],
yAxis: [
{
type: "value",
min: 0,
// max: 140,
splitNumber: 7,
splitLine: {
show: false,
lineStyle: {
color: "#0a3256",
},
},
axisLine: {
show: false,
},
axisLabel: {
show: false,
margin: 20,
textStyle: {
color: "#A8A6AB",
},
},
axisTick: {
show: false,
},
},
],
series: [
{
name: "小时产量",
type: "line",
smooth: false, //是否平滑曲线显示
showAllSymbol: true,
symbol: "emptyCircle",
symbolSize: 6,
lineStyle: {
normal: {
color: "#13D064", // 线条颜色
},
borderColor: "#f0f",
},
label: {
show: true,
position: "top",
textStyle: {
color: "#28ffb3",
},
},
itemStyle: {
normal: {
color: "#28ffb3",
},
},
tooltip: {
show: false,
},
areaStyle: {
//区域填充样式
normal: {
//线性渐变前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是true则该四个值是绝对像素位置。
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "rgba(19,208,100,1)",
},
{
offset: 1,
color: "rgba(0,0,0, 0)",
},
],
false
),
shadowColor: "rgba(53,142,215, 0.9)", //阴影颜色
shadowBlur: 20, //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
},
},
data: [100, 120, 110, 60, 70, 130, 150],
}
],
};
mycharts.setOption(option);
$(window).resize(mycharts.resize);
}
//柱状图
const threeDimensionalCylindrical = (res, ids) => {
let mycharts = echarts.init(ids);
let xAxisData = [];
let seriesData1 = [];
let sum = 0;
let barTopColor = ["#02c3f1"];
let barBottomColor = [
"rgba(2,195,241,0.1)",
];
res.datas.forEach((item) => {
xAxisData.push(item.name);
seriesData1.push(item.value);
sum += item.value;
});
let option = {
grid: {
top: "15%",
bottom: "20%",
},
xAxis: {
data: xAxisData,
axisTick: {
show: false,
},
axisLine: {
show: false,
},
axisLabel: {
show: true,
margin: 25,
align: "center",
textStyle: {
fontSize: 14,
color: "#A8A6AB",
rich: {
a: {
fontSize: 12,
color: "#ffffff",
},
b: {
height: 20,
fontSize: 14,
color: "#ffffff",
},
},
},
},
interval: 0,
},
yAxis: {
splitLine: {
show: false,
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
axisLabel: {
show: false,
},
},
series: [
{
name: "柱顶部",
type: "pictorialBar",
symbolSize: [26, 10],
symbolOffset: [0, -5],
z: 12,
itemStyle: {
normal: {
color: function (params) {
return barTopColor[0];
},
},
},
label: {
show: true,
position: "top",
fontSize: 16,
},
symbolPosition: "end",
data: seriesData1,
},
{
name: "柱底部",
type: "pictorialBar",
symbolSize: [26, 10],
symbolOffset: [0, 5],
z: 12,
itemStyle: {
normal: {
color: function (params) {
return barTopColor[0];
},
},
},
data: seriesData1,
},
{
name: "第一圈",
type: "pictorialBar",
symbolSize: [47, 16],
symbolOffset: [0, 11],
z: 11,
itemStyle: {
normal: {
color: "transparent",
borderColor: barTopColor[0],
borderWidth: 4,
},
},
data: [seriesData1[0], "", ""],
},
{
name: "第一圈",
type: "pictorialBar",
symbolSize: [47, 16],
symbolOffset: [0, 11],
z: 11,
itemStyle: {
normal: {
color: "transparent",
borderColor: barTopColor[0],
borderWidth: 4,
},
},
data: ["", seriesData1[1], ""],
},
{
name: "第一圈",
type: "pictorialBar",
symbolSize: [47, 16],
symbolOffset: [0, 11],
z: 11,
itemStyle: {
normal: {
color: "transparent",
borderColor: barTopColor[0],
borderWidth: 4,
},
},
data: ["", "", seriesData1[2]],
},
{
name: "第二圈",
type: "pictorialBar",
symbolSize: [62, 22],
symbolOffset: [0, 17],
z: 10,
itemStyle: {
normal: {
color: "transparent",
borderColor: barTopColor[0],
borderWidth: 4,
},
},
data: [seriesData1[0], "", ""],
},
{
name: "第二圈",
type: "pictorialBar",
symbolSize: [62, 22],
symbolOffset: [0, 17],
z: 10,
itemStyle: {
normal: {
color: "transparent",
borderColor: barTopColor[0],
borderWidth: 4,
},
},
data: ["", seriesData1[1], ""],
},
{
name: "第二圈",
type: "pictorialBar",
symbolSize: [62, 22],
symbolOffset: [0, 17],
z: 10,
itemStyle: {
normal: {
color: "transparent",
borderColor: barTopColor[0],
borderWidth: 4,
},
},
data: ["", "", seriesData1[2]],
},
{
type: "bar",
itemStyle: {
normal: {
color: function (params) {
return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 1,
color: barTopColor[0],
},
{
offset: 0,
color: barBottomColor[0],
},
]);
},
opacity: 0.8,
},
},
z: 16,
silent: true,
barWidth: 26,
barGap: "-100%", // Make series be overlap
data: seriesData1,
},
],
};
mycharts.setOption(option);
$(window).resize(mycharts.resize);
}