开发预览 更新于 2026-05-10

CalendarHeatmap 活跃度热力图

一年 52 周 × 7 天的方格热力图,按数值强度显示密度颜色,常用于活跃度 / 提交统计。

基础用法

data[{ date: 'YYYY-MM-DD', value: number }]thresholds 默认 [1, 3, 6, 10],对应 5 档颜色(含 0)。

背景
5月6月7月8月9月10月11月12月1月2月3月4月5月
<script setup lang="ts">
import { CfCalendarHeatmap, type HeatmapDay } from '@chufix-design/vue';

function genYearOfData(): HeatmapDay[] {
  const out: HeatmapDay[] = [];
  const today = new Date();
  for (let i = 0; i < 365; i++) {
    const d = new Date(today);
    d.setDate(d.getDate() - i);
    const seed = (d.getFullYear() * 137 + d.getMonth() * 31 + d.getDate()) % 100;
    let v = 0;
    if (seed > 30) v = Math.floor((seed - 30) / 12);
    out.push({
      date: `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`,
      value: v,
    });
  }
  return out;
}

const data = genYearOfData();
</script>

<template>
  <CfCalendarHeatmap :data="data" />
</template>
<script setup>
import { CfCalendarHeatmap } from '@chufix-design/vue';

function genYearOfData(): HeatmapDay[] {
  const out= [];
  const today = new Date();
  for (let i = 0; i < 365; i++) {
    const d = new Date(today);
    d.setDate(d.getDate() - i);
    const seed = (d.getFullYear() * 137 + d.getMonth() * 31 + d.getDate()) % 100;
    let v = 0;
    if (seed > 30) v = Math.floor((seed - 30) / 12);
    out.push({
      date: `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`,
      value,
    });
  }
  return out;
}

const data = genYearOfData();
</script>

<template>
  <CfCalendarHeatmap :data="data" />
</template>
<CfCalendarHeatmap data={data} />
<CfCalendarHeatmap data={data} />

API

属性类型默认值说明
dataHeatmapDay[]日期 + 数值列表,缺失日期视为 0
startDatestring | Date今天 - 1 年范围起点
endDatestring | Date今天范围终点
thresholdsnumber[][1, 3, 6, 10]升序的强度分档;档位数 = 长度 + 1

HeatmapDay

字段类型说明
datestringYYYY-MM-DD 日期
valuenumber当日数值

反馈与讨论

CalendarHeatmap 活跃度热力图 的讨论

0
0 / 600
一键发送
正在加载评论...