/** * ProdProblemCountSummary 逻辑代理 */ import dayjs from 'dayjs'; import { barChartOption, downloadChartImage } from '@/utils/echart-util.js'; export default { /** * 合并数据 * @param {*} data1 * @param {*} data2 * @returns */ combineData(data1, data2) { return data1.map((item) => { const last = data2.find((item2) => item2.townCode === item.townCode); item.ratio = Math.round(item.ratio * 10) / 10 || 0; return { ...item, lastSceneCount: last?.sceneCount || 0, lastProblemCount: last?.problemCount || 0, lastRatio: Math.round((last?.ratio || 0) * 10) / 10 || 0 }; }); }, /** * 生成扬尘污染问题数对比柱状图配置 * @param {Object} opt1 - 第一个时间段的配置对象,包含startTime(开始时间)、districtName(区域名称)、sceneTypeName(场景类型名称) * @param {Object} opt2 - 第二个时间段的配置对象,包含startTime(开始时间) * @param {Array} data - 数据数组,每个元素包含townName(街道名称)、ratio(当前问题数均值)、lastRatio(对比问题数均值) * @returns {Object} ECharts图表配置对象 */ genChartOption(opt1, opt2, data) { // 从第一个时间配置中获取年份 const year = dayjs(opt1.startTime).year(); // 从第一个时间配置中获取月份(注意:JavaScript的月份是0-11,所以加1) const month1 = dayjs(opt1.startTime).month() + 1; // 从第二个时间配置中获取月份 const month2 = dayjs(opt2.startTime).month() + 1; // 格式化时间字符串,用于图表标题 const time = `${year}年${month2}月、${month1}月`; // 获取基础柱状图配置模板 const option = barChartOption(); // 设置图表标题,包含时间段、区域名称、场景类型等信息 option.title.text = `${time}${opt1.districtName}各街道(镇)${opt1.sceneTypeName}扬尘污染问题数均值对比`; // 设置X轴名称为街道(镇) option.xAxis.name = '街道(镇)'; // 设置X轴数据为各街道名称 option.xAxis.data = data.map((item) => item.townName); // 设置Y轴名称为问题数均值 option.yAxis.name = '问题数均值'; // 配置图表数据系列 option.series = [ { name: `${month1}月`, // 当前月份数据系列名称 type: 'bar', // 图表类型为柱状图 data: data.map((item) => item.ratio), // 当前月份各街道问题数均值 label: { show: true, // 显示数据标签 position: 'top', // 标签显示在柱子顶部 formatter: '{c}' // 标签格式:直接显示数值 } }, { name: `${month2}月`, // 对比月份数据系列名称 type: 'bar', // 图表类型为柱状图 data: data.map((item) => item.lastRatio), // 对比月份各街道问题数均值 label: { show: true, // 显示数据标签 position: 'top', // 标签显示在柱子顶部 formatter: '{c}' // 标签格式:直接显示数值 } } ]; // 返回完整的图表配置对象 return option; } };