怎么能取到createTime每个月有数据的那一天的日期显示在列名里啊?

怎么能取到createTime每个月有数据的那一天的日期显示在列名里啊
image.png

// 创建顶级列(月份列)
        const monthColumn = new TableColumn({
          title: monthName,
          type: "String",
          field: monthField,
          width: 100,
          children: [
            new TableColumn({
              title: this.dayTitle,
              type: "String",
              field: dayField,
              width: 100,
              options: { readOnlyCell: true },
              children: [
                new TableColumn({
                  title: "点检",
                  type: "String",
                  field: checkResultField,
                  options: {
                    selection: "checkResult",
                    itemProps: { code: "code", name: "label" },
                  },
                }),
                new TableColumn({
                  title: "处置",
                  type: "String",
                  field: checkHandleField,
                  classCode: "CHECK_HANDLE",
                  options: { multiple: true },
                }),
              ],
            }),
          ],
        });
        // 将月份列添加到表格列配置数组中
        tableColumns.push(monthColumn);
      }
      console.log("tableColumnssssssssss", tableColumns);
      return tableColumns;
},
sync fetchCurrentResult() {
      try {
        const result = await getCheckResultSummary({
          equipmentNumber: this.equipment.equipmentNumber,
          checkRange: this.currentYear,
        });
        console.log("result", result.data.data);
        // 使用 reduce 方法将结果数据转换为一个新的映射对象 summaryMap
        // 这个映射对象的键是设备项的名称(itemName),值是一个对象,该对象包含了检查时间和对应的检查结果
        // 检查结果按照月份进行组织,月份作为对象的键,检查结果作为值
        const summaryMap = result.data.data.reduce((result, item) => {
          if (item) {
            const { createTime, checkResult, checkHandle, itemName } = item;
            const record = result[itemName];
            if (!createTime) {
              return result;
            }
            if (record) {
              record["checkResult" + this.$moment(createTime).get("month")] =
                checkResult;
              record["checkHandle" + this.$moment(createTime).get("month")] =
                checkHandle;
              record[this.$moment(createTime).get("month")] =
                this.$moment(createTime).get("day");
            } else {
              result[itemName] = {
                ...item,
                ["checkResult" + this.$moment(createTime).get("month")]:
                  checkResult,
                ["checkHandle" + this.$moment(createTime).get("month")]:
                  checkHandle,
                [this.$moment(createTime).get("month")]:
                  this.$moment(createTime).get("day"),
              };
            }
          }
          return result;
        }, {});
        // 排序后更新表格数据
        console.log("summaryMap", summaryMap);
        this.tableData = Object.values(summaryMap).sort(
          (a, b) => a.seq - b.seq
        );
阅读 1.7k
avatarAI BotBETA

要将每个月有数据的日期显示在列名中,你需要动态地生成表格的列配置,而不是在代码中硬编码列名。基于你的需求,你需要从数据结果中提取每个月有数据的日期,并基于这些日期创建新的列。以下是一个可能的解决方案:

### 解决方案

1. **解析数据并收集日期**:
   首先,你需要遍历数据结果,并收集每个月中哪些日期有数据。你可以使用一个嵌套的对象来存储这些日期。

2. **动态生成列配置**:
   根据上一步收集到的日期信息,动态生成表格的列配置。

3. **更新表格数据**:
   将解析后的数据更新到表格中,确保数据的结构与动态生成的列配置相匹配。

### 示例代码

下面是一个简化的示例代码,展示了如何实现上述步骤:

async sync fetchCurrentResult() {
try {

const result = await getCheckResultSummary({
  equipmentNumber: this.equipment.equipmentNumber,
  checkRange: this.currentYear,
});
console.log("result", result.data.data);

// 用于存储每个月的日期
const dateMap = {};

// 解析数据并收集日期
result.data.data.forEach(item => {
  if (item.createTime) {
    const date = this.$moment(item.createTime).format('YYYY-MM-DD');
    const month = this.$moment(item.createTime).format('YYYY-MM');
    if (!dateMap[month]) {
      dateMap[month] = new Set();
    }
    dateMap[month].add(date);
  }
});

// 动态生成列配置
const tableColumns = [];
const months = Object.keys(dateMap).sort();
months.forEach(month => {
  const monthColumn = new TableColumn({
    title: month,
    type: "String",
    field: month,
    width: 100,
    children: dateMap[month].map(date => ({
      title: date,
      type: "String",
      field: `${month}_${date.replace(/-/g, '')}`, // 创建一个唯一的字段名
      width: 100,
      options: { readOnlyCell: true },
      children: [
        new TableColumn({
          title: "点检",
          type: "String",
          field: `${month}_${date.replace(/-/g, '')}_checkResult`,
          options: {
            selection: "checkResult",
            itemProps: { code: "code", name: "label" },
          },
        }),
        new TableColumn({
          title: "处置",
          type: "String",
          field: `${month}_${date.replace(/-/g, '')}_checkHandle`,
          classCode: "CHECK_HANDLE",
          options: { multiple: true },
        }),
      ],
    })),
  });
  tableColumns.push(monthColumn);
});

// 排序后更新表格数据
const summaryMap = result.data.data.reduce((result, item) => {
  if (item) {
    const { createTime, checkResult, checkHandle, itemName } = item;
    const date = this.$moment(createTime).format('YYYY-MM-DD');
    const month = this.$moment(createTime).format('YYYY-MM');
    const key = `${month}_${date.replace(/-/g, '')}`;
    if (!result[itemName]) {
      result[itemName] = {};
    }
    result[itemName][`${month}_${date.replace(/-/g, '')}_checkResult`] = checkResult;
    result[itemName][`${month}_${date.replace(/-/g, '')}_checkHandle`] = checkHandle;
  }
  return result;
}, {});

this.tableData = Object.values(summaryMap).sort((a, b) => a.seq - b.seq);
console.log("tableData", this.tableData);
console.log("tableColumns", tableColumns);
this.tableColumns = tableColumns;

} catch (error) {

console.error("Error fetching check result summary:", error);

}
}


### 说明

- **日期格式**:这里使用 `YYYY-MM-DD` 格式来存储和比较日期,你可以根据需要调整。
- **字段名**:为了避免字段名冲突,这里使用 `${month}_${date.replace(/-/g, '')}` 来创建唯一的字段名。你需要确保在数据处理和显示时都能正确解析这些字段名。
- **数据更新**:在 `summaryMap` 中,你需要根据动态生成的字段名来存储和更新数据。
2 个回答

主要区别:

1.新增了两个变量:month 和 day,分别用于存储月份和日期。
2.使用 format 方法:将月份和日期格式化为两位数的字符串。
3.新增了 day 字段:在 record 对象中添加了 day 字段,用于存储每个月有数据的那一天的日期。

// 创建顶级列(月份列)
const monthColumn = new TableColumn({
  title: monthName,
  type: "String",
  field: monthField,
  width: 100,
  children: [
    new TableColumn({
      title: this.dayTitle,
      type: "String",
      field: dayField,
      width: 100,
      options: { readOnlyCell: true },
      children: [
        new TableColumn({
          title: "点检",
          type: "String",
          field: checkResultField,
          options: {
            selection: "checkResult",
            itemProps: { code: "code", name: "label" },
          },
        }),
        new TableColumn({
          title: "处置",
          type: "String",
          field: checkHandleField,
          classCode: "CHECK_HANDLE",
          options: { multiple: true },
        }),
      ],
    }),
  ],
});
// 将月份列添加到表格列配置数组中
tableColumns.push(monthColumn);
console.log("tableColumnssssssssss", tableColumns);
return tableColumns;
}

async fetchCurrentResult() {
  try {
    const result = await getCheckResultSummary({
      equipmentNumber: this.equipment.equipmentNumber,
      checkRange: this.currentYear,
    });
    console.log("result", result.data.data);
    // 使用 reduce 方法将结果数据转换为一个新的映射对象 summaryMap
    // 这个映射对象的键是设备项的名称(itemName),值是一个对象,该对象包含了检查时间和对应的检查结果
    // 检查结果按照月份进行组织,月份作为对象的键,检查结果作为值
    const summaryMap = result.data.data.reduce((result, item) => {
      if (item) {
        const { createTime, checkResult, checkHandle, itemName } = item;
        const record = result[itemName];
        if (!createTime) {
          return result;
        }
        const month = this.$moment(createTime).format("MM");
        const day = this.$moment(createTime).format("DD");
        if (record) {
          record["checkResult" + month] = checkResult;
          record["checkHandle" + month] = checkHandle;
          record["day" + month] = day;
        } else {
          result[itemName] = {
            ...item,
            ["checkResult" + month]: checkResult,
            ["checkHandle" + month]: checkHandle,
            ["day" + month]: day,
          };
        }
      }
      return result;
    }, {});
    // 排序后更新表格数据
    console.log("summaryMap", summaryMap);
    this.tableData = Object.values(summaryMap).sort((a, b) => a.seq - b.seq);
  } catch (error) {
    console.error("Error fetching check results:", error);
  }
}
新手上路,请多包涵

async fetchCurrentResult() {
try {

const result = await getCheckResultSummary({
  equipmentNumber: this.equipment.equipmentNumber,
  checkRange: this.currentYear,
});
console.log("result", result.data.data);

// 使用 reduce 方法将结果数据转换为新的映射对象 summaryMap
const summaryMap = result.data.data.reduce((result, item) => {
  if (item) {
    const { createTime, checkResult, checkHandle, itemName } = item;
    const record = result[itemName];
    if (!createTime) {
      return result;
    }
    const month = this.$moment(createTime).get("month");
    const day = this.$moment(createTime).get("day");
    
    if (record) {
      record["checkResult" + month] = checkResult;
      record["checkHandle" + month] = checkHandle;
      record[month] = day;
    } else {
      result[itemName] = {
        ...item,
        ["checkResult" + month]: checkResult,
        ["checkHandle" + month]: checkHandle,
        [month]: day,
      };
    }
  }
  return result;
}, {});

console.log("summaryMap", summaryMap);

// 提取出所有有数据的月份和对应的日期
const monthsWithDays = Object.values(summaryMap).reduce((months, record) => {
  Object.keys(record).forEach(key => {
    if (key !== 'itemName' && key !== 'checkResult' && key !== 'checkHandle') {
      const month = parseInt(key, 10);
      if (!months.includes(month)) {
        months.push(month);
      }
    }
  });
  return months;
}, []);

// 创建表格列配置
const tableColumns = [];
monthsWithDays.forEach(month => {
  const monthName = this.$moment().month(month).format('MMMM'); // 获取月份名称
  const monthField = `month_${month}`; // 月份字段名
  const dayField = `day_${month}`; // 日期字段名
  const checkResultField = `checkResult${month}`;
  const checkHandleField = `checkHandle${month}`;

  // 创建顶级列(月份列)
  const monthColumn = new TableColumn({
    title: monthName,
    type: "String",
    field: monthField,
    width: 100,
    children: [
      new TableColumn({
        title: this.dayTitle,
        type: "String",
        field: dayField,
        width: 100,
        options: { readOnlyCell: true },
        children: [
          new TableColumn({
            title: "点检",
            type: "String",
            field: checkResultField,
            options: {
              selection: "checkResult",
              itemProps: { code: "code", name: "label" },
            },
          }),
          new TableColumn({
            title: "处置",
            type: "String",
            field: checkHandleField,
            classCode: "CHECK_HANDLE",
            options: { multiple: true },
          }),
        ],
      }),
    ],
  });

  // 将月份列添加到表格列配置数组中
  tableColumns.push(monthColumn);
});

// 打印最终的列配置
console.log("tableColumnssssssssss", tableColumns);
return tableColumns;

} catch (error) {

console.error("Error fetching data:", error);

}
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏