riku
2025-10-11 925b485e661682a2fcfc8b8a47a8148d16ec818e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
 * 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;
    }
};