wangrong
2026-09-26 22c5f37a587bfb3363534fed05647faf5f93c8fe
src/modules/report/service/screen.ts
@@ -371,17 +371,19 @@
    return (await qb.getRawOne()) || {};
  }
  /** 名称取全部种类;codes 仍只含启用项,供 KPI/趋势沿用原口径。分类图不再用 codes 过滤。 */
  private async enabledWaste() {
    const list = await this.wasteTypeRepo.find({
      where: { status: 1 },
      select: ['code', 'name'],
      select: ['code', 'name', 'status'],
    });
    const names = new Map<string, string>();
    const codes = new Set<string>();
    list.forEach(e => {
      const code = String(e.code).toUpperCase();
      codes.add(code);
      names.set(code, e.name);
      if (Number(e.status) === 1) {
        codes.add(code);
      }
    });
    return { names, codes };
  }
@@ -412,6 +414,7 @@
    return cols.map(col => `IFNULL(a.${col},0)`).join(' + ');
  }
  /** 首页分类全量返回,不按种类启用状态裁剪;0 值由前端图表隐藏。 */
  private buildWasteMix(row: any, waste: { names: Map<string, string>; codes: Set<string> }) {
    const items = [
      { code: 'SW62', key: 'Sw62' },
@@ -419,7 +422,7 @@
      { code: 'SW63', key: 'Sw63' },
      { code: 'SW61', key: 'Sw61' },
      { code: 'SW60', key: 'Sw60' },
    ].filter(e => waste.codes.has(e.code));
    ];
    return items.map(e => ({
      name: waste.names.get(e.code) || this.defaultWasteName(e.code),
      code: e.code,
@@ -442,11 +445,11 @@
    );
  }
  /** 可回收 7 子类全量返回;碳值保留符号(减排可为负),图表侧取绝对值展示。 */
  private buildRecycleItems(row: any, waste: { names: Map<string, string>; codes: Set<string> }) {
    const fallback = ['废纸', '塑料', '金属', '织物', '玻璃', '电子产品', '其他可回收'];
    return ['001', '002', '003', '004', '005', '006', '007']
      .map((idx, i) => ({ idx, i, code: `SW62${idx}` }))
      .filter(e => waste.codes.has(e.code))
      .map(e => ({
        name: waste.names.get(e.code) || fallback[e.i],
        code: e.code,