Skip to content

指标卡(Metric Card) ​

以等宽表格网格渲染报告指标。每张卡包含标签、醒目的数值,以及可选单位和对比文字。

导入 ​

ts
import { metricCardPlugin, type MetricCardOptions, type MetricItem } from 'docx-kit'

独立包 @docxkit/plugin-metric-card 导出相同工厂函数与类型,调用名称为 metricCard。

选项 ​

选项类型默认值说明
itemsMetricItem[]必填按显示顺序排列的指标;空数组渲染 (no metrics)
columnsnumber3每行最多卡片数,必须为正安全整数

MetricItem ​

字段类型说明
labelstring指标名称
valuenumber | string显示值,包括零;不自动按地区格式化
unitstring在空格后追加的单位
changestring原样输出的对比文字,如 +12% vs last month
trend'up' | 'down' | 'neutral'可选箭头与颜色:↑ 成功色,↓ 危险色,→ 弱化色

change 和 trend 独立工作,不会根据数值或变化文字推断趋势。下降代表好转时,可以省略 trend 并提供自己的对比文字,或覆盖调用颜色。

示例 ​

ts
import { createDocx, metricCardPlugin } from 'docx-kit'

const doc = createDocx()
  .use(metricCardPlugin())
  .plugin('metricCard', {
    columns: 3,
    items: [
      { label: 'Revenue', value: '128,000', unit: 'USD', trend: 'up', change: '+12% vs last month' },
      { label: 'Active users', value: 4200, trend: 'down', change: '-3%' },
      { label: 'Uptime', value: 99.9, unit: '%', trend: 'neutral', change: 'Unchanged' },
      { label: 'Incidents', value: 0 },
    ],
  })

await doc.toBlob()

每行不会跨页拆分。最后一行补齐空单元格;条目少于 columns 时,现有卡片平分全部宽度。无效列数会抛出代码为 PLUGIN_RENDER_FAILED 的 DocxKitError,空输入也会检查列数。

网格使用主题的 surface、primary、muted、success 和 danger 颜色,并提供内置回退值。调用样式可覆盖文字、段落、单元格背景与边框。

样式定制 ​

工厂的 { styles } 设置实例默认值,options.styles 覆盖单次调用。插件包与 docx-kit 入口导出 MetricCardConfig 和 MetricCardStyles。优先级:内置/主题默认值 → 初始化 styles → 通用 style → 单次部位 styles。嵌套字段合并,数组整体替换,undefined 沿用默认,0 / false 生效;支持单位与 $colors.primary 等主题 token。

部位样式类型范围
change, emptyText, label, unit, valueTextStyleRule文字排版
changeParagraph, emptyParagraph, labelParagraph, paddingParagraph, valueParagraphParagraphStyleRule段落背景、边框、对齐、间距和分页
cellOmit<CellStyleRule, 'height'>单元格背景、边框、宽度和内边距
ts
metricCardPlugin({
  styles: { value: { color: '#2563EB', fontSize: 14 } },
})

单次调用在 options.styles 中使用相同部位名。JSON DSL、AI 工具 schema 与 MCP 校验共享这些契约;未知部位与放错部位的属性会被拒绝。

Released under the MIT License.