2025-08-20 10:28:23 +08:00
|
|
|
|
import * as echarts from 'echarts/core';
|
2025-08-21 18:45:51 +08:00
|
|
|
|
import { text } from 'stream/consumers';
|
2025-08-20 10:28:23 +08:00
|
|
|
|
// import { PictorialBarChart } from 'echarts/charts'
|
|
|
|
|
// 客流量图
|
|
|
|
|
export const getOption = (xData: any, yData: any) => {
|
|
|
|
|
const data = {
|
|
|
|
|
xData,
|
|
|
|
|
yData
|
|
|
|
|
};
|
|
|
|
|
const maxData = Math.ceil(Math.max(...data.yData));
|
|
|
|
|
const barData = data.yData.map((item) => {
|
|
|
|
|
return maxData;
|
|
|
|
|
});
|
|
|
|
|
const option = {
|
|
|
|
|
grid: {
|
|
|
|
|
top: '10%',
|
|
|
|
|
left: '8%',
|
|
|
|
|
right: '5%',
|
|
|
|
|
bottom: '20%'
|
|
|
|
|
// containLabel: true
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'category',
|
|
|
|
|
data: data.xData,
|
|
|
|
|
axisLine: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: true
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#fff'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
show: true,
|
|
|
|
|
type: 'value',
|
|
|
|
|
max: maxData,
|
|
|
|
|
splitLine: {
|
|
|
|
|
show: true,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
type: 'solid',
|
|
|
|
|
color: 'rgba(73, 169, 191, 0.2)'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'axis',
|
|
|
|
|
backgroundColor: '',
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#fff'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
dataZoom: [
|
|
|
|
|
{
|
|
|
|
|
// show: true,
|
|
|
|
|
start: 0,
|
|
|
|
|
end: 30,
|
|
|
|
|
bottom: 2, // 下滑块距离x轴底部的距离
|
|
|
|
|
height: 23
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: 'inside'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
name: '柱图',
|
|
|
|
|
type: 'bar',
|
|
|
|
|
// barWidth: '10%',
|
|
|
|
|
data: barData,
|
|
|
|
|
tooltip: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
barGap: '-50%',
|
|
|
|
|
itemStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
color: 'rgba(73, 169, 191, 0.2)'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: '客单价',
|
|
|
|
|
type: 'line',
|
|
|
|
|
showAllSymbol: true,
|
|
|
|
|
symbol: 'circle',
|
|
|
|
|
symbolSize: 8,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
color: 'rgba(217, 231, 255, 0.3)',
|
|
|
|
|
shadowColor: 'rgba(0, 0, 0, .3)',
|
|
|
|
|
shadowBlur: 0
|
|
|
|
|
// shadowOffsetY: 5,
|
|
|
|
|
// shadowOffsetX: 5,
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
color: 'rgba(224, 194, 22, 1)',
|
|
|
|
|
borderWidth: 0,
|
|
|
|
|
shadowBlur: 0
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
show: false, // 显示数据标签
|
|
|
|
|
color: 'rgba(255, 208, 59, 1)'
|
|
|
|
|
},
|
|
|
|
|
data: data.yData
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
return option;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 上菜分析图
|
|
|
|
|
export const getOption2 = (data: any) => {
|
|
|
|
|
const maxData = Math.max(...data.yData);
|
|
|
|
|
const option = {
|
|
|
|
|
// backgroundColor: "#38445E",
|
|
|
|
|
grid: {
|
|
|
|
|
left: '10%',
|
|
|
|
|
top: '13%',
|
|
|
|
|
bottom: '16%',
|
|
|
|
|
right: '10%'
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
data: data.xData,
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLine: {
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: 'rgba(255, 129, 109, 0.1)',
|
|
|
|
|
width: 1 //这里是为了突出显示加上的
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#999',
|
|
|
|
|
fontSize: 12
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yAxis: [
|
|
|
|
|
{
|
|
|
|
|
splitNumber: 2,
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLine: {
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: 'rgba(255, 129, 109, 0.1)',
|
|
|
|
|
width: 1 //这里是为了突出显示加上的
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#999'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
splitArea: {
|
|
|
|
|
areaStyle: {
|
|
|
|
|
color: 'rgba(255,255,255,.5)'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
splitLine: {
|
|
|
|
|
show: true,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: 'rgba(255,255,255,.5)',
|
|
|
|
|
width: 0.5,
|
|
|
|
|
type: 'dashed'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
dataZoom: [
|
|
|
|
|
{
|
|
|
|
|
// show: true,
|
|
|
|
|
|
|
|
|
|
start: 0,
|
|
|
|
|
end: 30,
|
|
|
|
|
bottom: 2, // 下滑块距离x轴底部的距离
|
|
|
|
|
height: 23
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: 'inside'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'axis', // 设置为 'item',表示鼠标悬浮在图形上时显示 tooltip
|
|
|
|
|
// formatter: function (params) {
|
|
|
|
|
// return `订单数: ${params.data}` // 显示鼠标悬浮项的数量
|
|
|
|
|
// },
|
|
|
|
|
backgroundColor: '', // 设置提示框的背景颜色
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#fff' // 设置文字颜色
|
|
|
|
|
// fontSize: 14 // 设置文字大小
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
name: '订单数',
|
|
|
|
|
type: 'pictorialBar',
|
|
|
|
|
barCategoryGap: '0%',
|
|
|
|
|
symbol: 'path://M0,10 L10,10 C5.5,10 5.5,5 5,0 C4.5,5 4.5,10 0,10 z',
|
|
|
|
|
label: {
|
|
|
|
|
show: false,
|
|
|
|
|
position: 'top',
|
|
|
|
|
distance: 15,
|
|
|
|
|
color: 'rgba(255, 235, 59, 1)',
|
|
|
|
|
// fontWeight: "bolder",
|
|
|
|
|
fontSize: 16
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
// color: {
|
|
|
|
|
// type: "linear",
|
|
|
|
|
// x: 0,
|
|
|
|
|
// y: 0,
|
|
|
|
|
// x2: 0,
|
|
|
|
|
// y2: 1,
|
|
|
|
|
// colorStops: [
|
|
|
|
|
// {
|
|
|
|
|
// offset: 0,
|
|
|
|
|
// color: "rgba(232, 94, 106, .8)", // 0% 处的颜色
|
|
|
|
|
// },
|
|
|
|
|
// {
|
|
|
|
|
// offset: 1,
|
|
|
|
|
// color: "rgba(232, 94, 106, .1)", // 100% 处的颜色
|
|
|
|
|
// },
|
|
|
|
|
// ],
|
|
|
|
|
// global: false, // 缺省为 false
|
|
|
|
|
// },
|
|
|
|
|
color: function (params: any) {
|
|
|
|
|
if (params.data === maxData) {
|
|
|
|
|
return 'rgba(255, 219, 103, 0.6)';
|
|
|
|
|
} else {
|
|
|
|
|
return 'rgba(239, 244, 255, 0.45)';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
emphasis: {
|
|
|
|
|
opacity: 1
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
data: data.yData,
|
|
|
|
|
z: 10
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
return option;
|
|
|
|
|
};
|
2025-08-21 17:32:10 +08:00
|
|
|
|
//z折线
|
2025-08-20 10:28:23 +08:00
|
|
|
|
export const getLineOption = (lineData: any) => {
|
2025-08-21 17:32:10 +08:00
|
|
|
|
const maxData = Math.max(...lineData.line1.flat());
|
|
|
|
|
|
2025-08-20 10:28:23 +08:00
|
|
|
|
const option = {
|
|
|
|
|
backgroundColor: '',
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'axis',
|
|
|
|
|
backgroundColor: 'transparent',
|
|
|
|
|
color: '#7ec7ff',
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#fff'
|
|
|
|
|
},
|
|
|
|
|
borderColor: '#7ec7ff'
|
|
|
|
|
},
|
2025-08-21 17:32:10 +08:00
|
|
|
|
legend: {
|
|
|
|
|
align: 'left',
|
|
|
|
|
right: '5%',
|
|
|
|
|
top: '1%',
|
|
|
|
|
type: 'plain',
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#fff',
|
|
|
|
|
fontSize: 12
|
|
|
|
|
},
|
|
|
|
|
// icon:'rect',
|
|
|
|
|
itemGap: 15,
|
|
|
|
|
itemWidth: 18,
|
|
|
|
|
data: [
|
|
|
|
|
{
|
|
|
|
|
name: '收款金额'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: '付款金额'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: '净现金流'
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
2025-08-20 10:28:23 +08:00
|
|
|
|
grid: {
|
|
|
|
|
top: '12%',
|
|
|
|
|
left: '1%',
|
|
|
|
|
right: '3%',
|
2025-08-21 17:32:10 +08:00
|
|
|
|
bottom: '5%',
|
2025-08-20 10:28:23 +08:00
|
|
|
|
containLabel: true
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'category',
|
|
|
|
|
data: lineData.xLabel,
|
2025-08-21 17:32:10 +08:00
|
|
|
|
boundaryGap: false,
|
2025-08-20 10:28:23 +08:00
|
|
|
|
axisLine: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisTick: {
|
2025-08-21 20:03:15 +08:00
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
splitLine: {
|
|
|
|
|
show: false
|
2025-08-20 10:28:23 +08:00
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#fff'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
show: true,
|
|
|
|
|
type: 'value',
|
|
|
|
|
max: maxData,
|
|
|
|
|
splitLine: {
|
2025-08-21 20:03:15 +08:00
|
|
|
|
show: false,
|
2025-08-20 10:28:23 +08:00
|
|
|
|
lineStyle: {
|
|
|
|
|
type: 'solid',
|
|
|
|
|
color: 'rgba(73, 169, 191, 0.2)'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-08-21 17:32:10 +08:00
|
|
|
|
// dataZoom: [
|
|
|
|
|
// {
|
|
|
|
|
// // show: true,
|
|
|
|
|
// start: 0,
|
|
|
|
|
// end: 30,
|
|
|
|
|
// bottom: 2, // 下滑块距离x轴底部的距离
|
|
|
|
|
// height: 23
|
|
|
|
|
// },
|
|
|
|
|
// {
|
|
|
|
|
// type: 'inside'
|
|
|
|
|
// }
|
|
|
|
|
// ],
|
2025-08-20 10:28:23 +08:00
|
|
|
|
series: [
|
|
|
|
|
{
|
2025-08-21 17:32:10 +08:00
|
|
|
|
name: '收款金额',
|
2025-08-20 10:28:23 +08:00
|
|
|
|
type: 'line',
|
|
|
|
|
symbol: 'circle', // 默认是空心圆(中间是白色的),改成实心圆
|
|
|
|
|
showAllSymbol: false,
|
|
|
|
|
symbolSize: 0,
|
|
|
|
|
smooth: true,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
width: 1,
|
|
|
|
|
color: 'rgba(80, 164, 225, 1)', // 线条颜色
|
|
|
|
|
borderColor: 'rgba(0,0,0,.4)'
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
color: 'rgba(80, 164, 225, 1)',
|
|
|
|
|
borderWidth: 2,
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
show: true
|
|
|
|
|
},
|
|
|
|
|
areaStyle: {
|
|
|
|
|
//线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
|
|
|
|
|
color: new echarts.graphic.LinearGradient(
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
1,
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: 'rgba(80, 164, 225, 0.4)'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: 'rgba(80, 164, 225, 0)'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
false
|
|
|
|
|
),
|
|
|
|
|
shadowColor: 'rgba(25,163,223, 0.5)', //阴影颜色
|
|
|
|
|
shadowBlur: 20 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
|
|
|
|
|
},
|
2025-08-21 17:32:10 +08:00
|
|
|
|
data: lineData.line1[0]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: '付款金额',
|
|
|
|
|
type: 'line',
|
|
|
|
|
symbol: 'none', // 默认是空心圆(中间是白色的),改成实心圆
|
|
|
|
|
showAllSymbol: false,
|
|
|
|
|
symbolSize: 0,
|
|
|
|
|
smooth: true,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
width: 1,
|
|
|
|
|
color: 'rgba(255, 224, 179, 1)', // 线条颜色
|
|
|
|
|
borderColor: 'rgba(0,0,0,.4)'
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
color: 'rgba(255, 224, 179, 1)',
|
|
|
|
|
borderWidth: 2,
|
|
|
|
|
show: true
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
show: true
|
|
|
|
|
},
|
|
|
|
|
areaStyle: {
|
|
|
|
|
//线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
|
|
|
|
|
color: new echarts.graphic.LinearGradient(
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
1,
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: 'rgba(255, 224, 179, 0.4)'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: 'rgba(255, 224, 179, 0)'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
false
|
|
|
|
|
),
|
|
|
|
|
shadowColor: 'rgba(255, 224, 179, 0.6)', //阴影颜色
|
|
|
|
|
shadowBlur: 20 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
|
|
|
|
|
},
|
|
|
|
|
data: lineData.line1[1]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: '净现金流',
|
|
|
|
|
type: 'line',
|
|
|
|
|
symbol: 'none', // 默认是空心圆(中间是白色的),改成实心圆
|
|
|
|
|
showAllSymbol: false,
|
|
|
|
|
symbolSize: 0,
|
|
|
|
|
smooth: true,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
width: 1,
|
|
|
|
|
color: 'rgba(39, 255, 252, 1)', // 线条颜色
|
|
|
|
|
borderColor: 'rgba(0,0,0,.4)'
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
color: 'rgba(39, 255, 252, 1)',
|
|
|
|
|
borderWidth: 2,
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
show: true
|
|
|
|
|
},
|
|
|
|
|
areaStyle: {
|
|
|
|
|
//线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
|
|
|
|
|
color: new echarts.graphic.LinearGradient(
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
1,
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: 'rgba(39, 255, 252, 0.4)'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: 'rgba(39, 255, 252, 0)'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
false
|
|
|
|
|
),
|
|
|
|
|
shadowColor: 'rgba(39, 255, 252, 0.5)', //阴影颜色
|
|
|
|
|
shadowBlur: 20 //shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
|
|
|
|
|
},
|
|
|
|
|
data: lineData.line1[2]
|
2025-08-20 10:28:23 +08:00
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
return option;
|
|
|
|
|
};
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
// 菜品销售图
|
|
|
|
|
export const getDishesOption = (data?: any) => {
|
|
|
|
|
const res = data;
|
|
|
|
|
const dataIndex = 1;
|
|
|
|
|
const option = {
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'value',
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
splitLine: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
show: false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
type: 'category',
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
margin: 10 // 增大标签与轴线间距
|
|
|
|
|
},
|
|
|
|
|
width: 60, // 增大Y轴宽度
|
|
|
|
|
data: res.name,
|
|
|
|
|
axisLine: {
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: '#93C9C3'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
grid: {
|
|
|
|
|
top: '5%', // 设置网格区域与容器之间的边距
|
|
|
|
|
bottom: '5%', // 同理
|
|
|
|
|
left: '5%',
|
|
|
|
|
containLabel: true
|
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
type: 'bar',
|
|
|
|
|
data: res.ratio,
|
|
|
|
|
barMaxWidth: 25,
|
|
|
|
|
itemStyle: {
|
|
|
|
|
barBorderRadius: 3,
|
|
|
|
|
color: 'rgba(12, 242, 216, 0.2)'
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
show: false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: 'bar',
|
|
|
|
|
data: res.data,
|
|
|
|
|
barGap: '-100%',
|
|
|
|
|
barMaxWidth: 25,
|
|
|
|
|
itemStyle: {
|
|
|
|
|
barBorderRadius: 3,
|
|
|
|
|
color: function (params: any) {
|
|
|
|
|
if (params.data <= 300) {
|
|
|
|
|
return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
|
|
|
|
{ color: 'rgba(252, 105, 0, 1)', offset: 0 },
|
|
|
|
|
{ color: 'rgba(250, 42, 42, 1)', offset: 1 }
|
|
|
|
|
]);
|
|
|
|
|
} else {
|
|
|
|
|
return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
|
|
|
|
{ color: 'rgba(73, 169, 191, 1)', offset: 0 },
|
|
|
|
|
{ color: 'rgba(108, 248, 236, 1)', offset: 1 }
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
position: [200, -15],
|
|
|
|
|
formatter: function (params: any) {
|
|
|
|
|
if (params.data <= 300) {
|
|
|
|
|
return `{a| ${params.value}g/${res.ratio[params.dataIndex]}g}`;
|
|
|
|
|
} else {
|
|
|
|
|
return `{b| ${params.value}g/${res.ratio[params.dataIndex]}g}`;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
rich: {
|
|
|
|
|
a: {
|
|
|
|
|
color: 'rgba(255, 78, 51, 1)'
|
|
|
|
|
},
|
|
|
|
|
b: {
|
|
|
|
|
color: 'rgba(255, 235, 59, 1)'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
return option;
|
|
|
|
|
};
|
|
|
|
|
// 菜品库存图
|
|
|
|
|
export const getInventoryOption = () => {
|
|
|
|
|
const res = {
|
2025-08-21 18:45:51 +08:00
|
|
|
|
data: [2800, 300, 3900, 3000, 2450, 2670, 3320],
|
|
|
|
|
name: ['麻辣牛肉', '水煮肉片', '酸菜鱼', '辣子鸡丁', '烧白', '冬瓜排骨汤', '清炒油麦菜'],
|
|
|
|
|
ratio: [4000, 4000, 4000, 4000, 4000, 4000, 4000]
|
|
|
|
|
},
|
2025-08-20 10:28:23 +08:00
|
|
|
|
dataIndex = 1;
|
|
|
|
|
const option = {
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'value',
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
splitLine: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
show: false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
type: 'category',
|
|
|
|
|
show: false,
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
margin: 10 // 增大标签与轴线间距
|
|
|
|
|
},
|
|
|
|
|
width: 20, // 增大Y轴宽度
|
|
|
|
|
data: res.name,
|
|
|
|
|
axisLine: {
|
|
|
|
|
show: false,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: '#93C9C3'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
grid: {
|
|
|
|
|
top: '5%', // 设置网格区域与容器之间的边距
|
|
|
|
|
bottom: '5%', // 同理
|
|
|
|
|
left: '5%',
|
|
|
|
|
containLabel: true
|
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
type: 'bar',
|
|
|
|
|
data: res.ratio,
|
|
|
|
|
barMaxWidth: 6,
|
|
|
|
|
itemStyle: {
|
|
|
|
|
barBorderRadius: 3,
|
|
|
|
|
color: 'rgba(12, 242, 216, 0.2)'
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
position: [0, -15],
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
color: '#fff',
|
|
|
|
|
formatter: function (params: any) {
|
|
|
|
|
return params.name;
|
|
|
|
|
}
|
|
|
|
|
// rich: {
|
|
|
|
|
// a: {
|
|
|
|
|
// color: "rgba(255, 78, 51, 1)",
|
|
|
|
|
// },
|
|
|
|
|
// b: {
|
|
|
|
|
// color: "rgba(255, 235, 59, 1)",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: 'bar',
|
|
|
|
|
data: res.data,
|
|
|
|
|
barGap: '-100%',
|
|
|
|
|
barMaxWidth: 6,
|
|
|
|
|
itemStyle: {
|
|
|
|
|
barBorderRadius: 0,
|
|
|
|
|
color: function (params: any) {
|
|
|
|
|
if (params.dataIndex === dataIndex) {
|
|
|
|
|
return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
|
|
|
|
{ color: 'rgba(255, 78, 51, 1)', offset: 0 },
|
|
|
|
|
{ color: 'rgba(252, 105, 0, 0)', offset: 1 }
|
|
|
|
|
]);
|
|
|
|
|
} else {
|
|
|
|
|
return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
|
|
|
|
{ color: 'rgba(242, 224, 27, 1)', offset: 0 },
|
|
|
|
|
{ color: 'rgba(236, 227, 127, 0.55)', offset: 0.5 },
|
|
|
|
|
{ color: 'rgba(230, 229, 227, 0.1)', offset: 1 }
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
position: [200, -15],
|
|
|
|
|
formatter: function (params: any) {
|
|
|
|
|
if (params.dataIndex === dataIndex) {
|
|
|
|
|
return `{a| ${params.value}g}`;
|
|
|
|
|
} else {
|
|
|
|
|
return `{b| ${params.value}g}`;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
rich: {
|
|
|
|
|
a: {
|
|
|
|
|
color: 'rgba(255, 78, 51, 1)'
|
|
|
|
|
},
|
|
|
|
|
b: {
|
|
|
|
|
color: 'rgba(255, 235, 59, 1)'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
return option;
|
|
|
|
|
};
|
|
|
|
|
export const getBarOptions = (data: any) => {
|
|
|
|
|
const option = {
|
|
|
|
|
backgroundColor: '',
|
|
|
|
|
grid: {
|
2025-08-21 20:03:15 +08:00
|
|
|
|
left: '8%',
|
2025-08-20 10:28:23 +08:00
|
|
|
|
top: '4%',
|
2025-08-21 20:03:15 +08:00
|
|
|
|
bottom: '8%',
|
2025-08-20 10:28:23 +08:00
|
|
|
|
right: '2%'
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
show: true,
|
|
|
|
|
backgroundColor: '',
|
|
|
|
|
trigger: 'axis',
|
2025-08-21 20:03:15 +08:00
|
|
|
|
formatter: '{b0}:{c0}万元',
|
2025-08-20 10:28:23 +08:00
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#fff'
|
|
|
|
|
}
|
|
|
|
|
// borderColor: 'rgba(252, 217, 18, 1)'
|
|
|
|
|
},
|
|
|
|
|
xAxis: [
|
|
|
|
|
{
|
|
|
|
|
type: 'category',
|
|
|
|
|
data: data.name,
|
|
|
|
|
axisLine: {
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: 'rgba(108, 128, 151, 0.3)'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#999',
|
|
|
|
|
fontSize: 12
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
axisTick: {
|
|
|
|
|
// show: true,
|
|
|
|
|
},
|
|
|
|
|
splitLine: {
|
2025-08-21 20:03:15 +08:00
|
|
|
|
show: false,
|
2025-08-20 10:28:23 +08:00
|
|
|
|
lineStyle: {
|
|
|
|
|
color: 'rgba(108, 128, 151, 0.3)',
|
|
|
|
|
type: 'dashed'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
yAxis: [
|
|
|
|
|
{
|
|
|
|
|
axisLabel: {
|
|
|
|
|
formatter: function (value) {
|
2025-08-21 20:03:15 +08:00
|
|
|
|
value = value + '万';
|
2025-08-20 10:28:23 +08:00
|
|
|
|
return value;
|
|
|
|
|
},
|
|
|
|
|
color: 'rgba(255, 255, 255, 0.8)'
|
|
|
|
|
},
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLine: {
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: 'rgba(108, 128, 151, 0.3)'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
splitLine: {
|
2025-08-21 20:03:15 +08:00
|
|
|
|
show: false,
|
2025-08-20 10:28:23 +08:00
|
|
|
|
lineStyle: {
|
|
|
|
|
color: 'rgba(108, 128, 151, 0.3)',
|
|
|
|
|
type: 'dashed'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
2025-08-21 20:03:15 +08:00
|
|
|
|
// dataZoom: [
|
|
|
|
|
// {
|
|
|
|
|
// // show: true,
|
|
|
|
|
// start: 0,
|
|
|
|
|
// end: 30,
|
|
|
|
|
// bottom: 2, // 下滑块距离x轴底部的距离
|
|
|
|
|
// height: 23
|
|
|
|
|
// },
|
|
|
|
|
// {
|
|
|
|
|
// type: 'inside'
|
|
|
|
|
// }
|
|
|
|
|
// ],
|
|
|
|
|
series: [
|
2025-08-20 10:28:23 +08:00
|
|
|
|
{
|
2025-08-21 20:03:15 +08:00
|
|
|
|
type: 'bar',
|
|
|
|
|
data: data.value[0],
|
|
|
|
|
// stack: '合并',
|
|
|
|
|
barWidth: '5',
|
|
|
|
|
barGap: '100%',
|
|
|
|
|
itemStyle: {
|
|
|
|
|
color: new echarts.graphic.LinearGradient(
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
1,
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: ' rgba(29, 214, 255, 1)' // 0% 处的颜色
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 0.7,
|
|
|
|
|
color: ' rgba(29, 214, 255, 0.5)' // 0% 处的颜色
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: ' rgba(29, 214, 255, 0.1)' // 100% 处的颜色
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
false
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
show: false,
|
|
|
|
|
formatter: '{c}',
|
|
|
|
|
position: 'top',
|
|
|
|
|
color: '#fff',
|
|
|
|
|
fontSize: 10
|
|
|
|
|
// padding: 5
|
|
|
|
|
}
|
2025-08-20 10:28:23 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: 'bar',
|
2025-08-21 20:03:15 +08:00
|
|
|
|
data: data.value[1],
|
|
|
|
|
// stack: '合并',
|
|
|
|
|
barWidth: '5',
|
|
|
|
|
barGap: '100%',
|
2025-08-20 10:28:23 +08:00
|
|
|
|
itemStyle: {
|
|
|
|
|
color: new echarts.graphic.LinearGradient(
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
1,
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
2025-08-21 20:03:15 +08:00
|
|
|
|
color: ' rgba(255, 77, 79, 1)' // 0% 处的颜色
|
2025-08-20 10:28:23 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 0.7,
|
2025-08-21 20:03:15 +08:00
|
|
|
|
color: ' rgba(255, 77, 79, 0.5)' // 0% 处的颜色
|
2025-08-20 10:28:23 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
2025-08-21 20:03:15 +08:00
|
|
|
|
color: ' rgba(255, 77, 79, 0.1)' // 100% 处的颜色
|
2025-08-20 10:28:23 +08:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
false
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
label: {
|
2025-08-21 20:03:15 +08:00
|
|
|
|
show: false,
|
2025-08-20 10:28:23 +08:00
|
|
|
|
formatter: '{c}',
|
|
|
|
|
position: 'top',
|
|
|
|
|
color: '#fff',
|
|
|
|
|
fontSize: 10
|
|
|
|
|
// padding: 5
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
return option;
|
|
|
|
|
};
|
2025-08-21 18:45:51 +08:00
|
|
|
|
|
|
|
|
|
// 收支合同分析
|
|
|
|
|
export const getBarOptions2 = (data: any) => {
|
|
|
|
|
const option = {
|
|
|
|
|
color:['#FF932A', '#678FE6', '#1DD6FF', '#00E396'],
|
|
|
|
|
title: {
|
|
|
|
|
text: '数量(个)',
|
|
|
|
|
subtext: '16',
|
|
|
|
|
bottom: 'center',
|
|
|
|
|
left: 'center',
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: '#9DADB7',
|
|
|
|
|
fontSize: 16
|
|
|
|
|
},
|
|
|
|
|
subtextStyle:{
|
|
|
|
|
color: '#707070',
|
|
|
|
|
fontSize: 32,
|
|
|
|
|
fontWeight: 'bold'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'item'
|
|
|
|
|
},
|
|
|
|
|
legend: {
|
|
|
|
|
top: '5%',
|
|
|
|
|
left: 'center'
|
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
name: 'Access From',
|
|
|
|
|
type: 'pie',
|
|
|
|
|
radius: ['50%', '60%'],
|
|
|
|
|
avoidLabelOverlap: false,
|
|
|
|
|
padAngle: 5,
|
|
|
|
|
label: {
|
|
|
|
|
show: false,
|
|
|
|
|
position: 'center'
|
|
|
|
|
},
|
|
|
|
|
emphasis: {
|
|
|
|
|
label: {
|
|
|
|
|
show: false,
|
|
|
|
|
fontSize: 40,
|
|
|
|
|
fontWeight: 'bold'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
labelLine: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
data: [
|
|
|
|
|
{ value: 3, name: '100万一下' },
|
|
|
|
|
{ value: 4, name: '100-500万' },
|
|
|
|
|
{ value: 5, name: '500-1000万' },
|
|
|
|
|
{ value: 4, name: '1000万以上' },
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
return option;
|
|
|
|
|
}
|