ylj20011123 77aa9d2251 update
2025-06-11 19:18:32 +08:00

208 lines
5.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup lang="ts">
import './FestivalRevenue.less'
import * as echarts from 'echarts/core';
import { LineChart } from 'echarts/charts';
import {
GridComponent,
TitleComponent,
TooltipComponent,
LegendComponent
} from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';
import { onBeforeUnmount, onMounted, watch } from 'vue';
import { handleGetHolidayAnalysis, handleGetHolidayDailyAnalysis } from '../../service';
import moment from 'moment';
// 注册组件
echarts.use([
LineChart,
GridComponent,
TitleComponent,
TooltipComponent,
LegendComponent,
CanvasRenderer
]);
let myChart: echarts.ECharts;
onMounted(async () => {
await handleGoMounted()
})
// 传入的数据
const props = defineProps<{
currentService?: any;
FestivalValue?: number
}>();
// 监听传入的选中服务区
watch(
() => props.currentService,
(newVal, oldVal) => {
handleGoMounted()
},
{ deep: true }
);
// 初始运行的方法
const handleGoMounted = async () => {
const res: any = await handleGetData()
const chartDom = document.getElementById('FestivalRevenue');
if (!chartDom) return;
myChart = echarts.init(chartDom);
const option = {
legend: {
data: ['今年', '去年'], // 对应 series 中的 name
top: 0, // 距离容器底部距离
right: 0,
itemWidth: 20, // 图例标记的图形宽度
itemHeight: 10, // 图例标记的图形高度
textStyle: {
color: '#fff' // 图例文字颜色
}
},
xAxis: {
type: 'category',
data: res.category,
boundaryGap: true,
},
yAxis: {
type: 'value',
name: '万元',
splitLine: { show: false },
axisLine: {
show: true,
}
},
grid: {
left: '10', // 增加左侧空间
right: '10', // 增加右侧空间
bottom: '10',
top: '30',
containLabel: true
},
series: [
{
name: '今年',
data: res.currentYear,
type: 'line',
smooth: true,
lineStyle: {
width: 2,
color: '#00FFFF'
},
itemStyle: {
color: '#00FFFF'
}
},
{
name: '去年',
data: res.lastYear,
type: 'line',
smooth: true,
lineStyle: {
width: 2,
color: '#8A2656' // 改为橙色
},
itemStyle: {
color: '#8A2656' // 改为橙色
}
}
],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line' // 改为线条指示器
},
formatter: function (params: any) {
let str1: string = `${params[0].seriesName}(${res.currentDateList[params[0].dataIndex]})${res.currentYearReal[params[0].dataIndex].toLocaleString()}`
let str2: string = `${params[1].seriesName}(${res.lastYearDateList[params[0].dataIndex]})${res.lastYearReal[params[1].dataIndex].toLocaleString()}`
return `<div>
<div>${str1}</div>
<div>${str2}</div>
</div>`
}
}
};
myChart.setOption(option);
myChart.resize();
window.addEventListener('resize', resizeChart);
}
// 拿到数据
const handleGetData = async () => {
let category: any = []
// "4.29", "4.30", "5.01", "5.2", "5.3", "5.4"
// let currentYear: any = [50, 40, 36, 85, 46, 77]
// let lastYear: any = [33, 23, 56, 12, 45, 44]
let currentYear: any = []
let currentYearReal: any = []
let currentDateList: any = []
let lastYear: any = []
let lastYearReal: any = []
let lastYearDateList: any = []
const req: any = {
// pushProvinceCode: 530000,
pushProvinceCode: 340000,
curYear: moment().format('YYYY'),
compareYear: moment().subtract(1, 'y').format('YYYY'),
HolidayType: props?.FestivalValue || 5,
StatisticsDate: moment().subtract(1, 'd').format('YYYY-MM-DD'),
ServerpartId: props.currentService?.SERVERPART_ID || "",
}
const data = await handleGetHolidayDailyAnalysis(req)
console.log('dsijdasijdaiosd', data)
if (data && data.length > 0) {
data.forEach((item: any) => {
if (item.name !== '累计') {
category.push(`${item.name}`)
currentYear.push(Number(item.value) / 10000)
currentYearReal.push(Number(item.value))
lastYear.push(Number(item.data) / 10000)
lastYearReal.push(Number(item.data))
currentDateList.push(item.date.split(',')[0])
lastYearDateList.push(item.date.split(',')[1])
}
})
}
let res: any = {
category: category,// x轴的内容
currentYear: currentYear,// y轴的数据
lastYear: lastYear,
currentYearReal: currentYearReal,
lastYearReal: lastYearReal,
currentDateList: currentDateList,
lastYearDateList: lastYearDateList,
}
return res
}
const resizeChart = () => {
myChart?.resize();
};
onBeforeUnmount(() => {
window.removeEventListener('resize', resizeChart);
myChart?.dispose();
});
</script>
<template>
<div class="FestivalRevenueBox">
<div class="FestivalRevenue" id="FestivalRevenue"></div>
</div>
</template>