v0.1.9

Statistic 统计数值

引入import { Statistic } from '@apollo-design/ui';

展示统计数值;Timer按目标时间计时。内容通过Vue插槽表达,数值与计时由调用者传入,没有v-model或内置数字动画。

代码演示

加载中…

基本 #

简单展示数值。

加载中…

前后缀 #

通过 prefix / suffix 设置前后缀。

加载中…

卡片内使用 #

在卡片内展示统计数值。

加载中…

数值格式 #

通过原生#value="{ value, text }"插槽展示格式化数值。数值仍来自响应式value,模板不需要包装内部VNode。

加载中…

倒计时 / 正计时 #

通过Statistic.Timer展示倒计时或正计时;重启短周期、切换方向,检查原生输入在计时中保留,完成次数每周期只增加一次。

加载中…

语义化样式 #

classNames / styles 支持对象与函数两种形态。

加载中…

组件 Token #

源主题components.Statistic控制两种字号;切换主题可移除/恢复,滑块更新当前字号,原生CSS变量覆盖优先。观察原生输入在配置切换中保持。

原7个示例包含基本值/骨架、单位、卡片布局、原生值格式化、可重启/切换方向的计时、语义样式和当前组件Token。animated保留原链接,实际演示自定义数值格式;不声称内置动画。

Statistic Props

参数 说明 类型 默认值
prefixCls 当前类名前缀;任意自定义前缀需自行提供对应静态CSS string Provider前缀+-statistic
value 原始数值;非数字文本原样显示 number | string 0
title / prefix / suffix 文本后备;同名槽存在时优先,空槽也压制后备 string —
precision 截取/补零的小数位,负数取0,小数向零取整,非有限数忽略;不执行四舍五入 number 保留原小数
decimalSeparator 小数点文本 string '.'
groupSeparator 字面分组文本(包括$),不解释替换转义 string ','
loading 骨架代替数值正文;根为aria-busy,装饰性骨架不进可访问树;正文恢复时重建 boolean false
valueStyle 既有废弃别名;styles.content优先,初始化传入时保留既有开发警告 CSSProperties —
classNames / styles 七语义落点的对象或({ props }) => 对象;读取当前props与Provider 见导出类型 —
onMouseenter / onMouseleave 根元素原生鼠标监听,也可写@mouseenter/@mouseleave (event: MouseEvent) => void —

Slots

插槽 作用域 说明
title / prefix / suffix 无 完整Vue内容;有意为空不会回退文本prop
value { value: number | string, text: string } 原始值和按当前精度/分隔符格式化的文本;直接使用模板/原生控件,不传内部VNode
<Statistic :value="balance" :precision="2">
  <template #value="{ value, text }">
    <strong>{{ text }}</strong><small>{{ currency }}</small>
  </template>
</Statistic>

数值槽保留value语义容器及其class/style;空槽得到空容器。变化的value、格式和相邻槽不替换槽内原生输入;切换loading会卸载正文。

Statistic.Timer / StatisticTimer

共用上述展示字段、三个文本槽和七语义落点;不接受数值专属的precision/decimalSeparator/groupSeparator。计时文本使用format,自定义内容使用#value。

参数 说明 类型 默认值
type 必填方向,可动态切换 'countdown' | 'countup' —
value 目标时间戳或Date可解析字符串;倒计时传未来、正计时传过去 number | string 0
format Y/M/D/H/m/s/S单位、重复字母补零、[字面文本]转义;年/月按固定365/30天计算 string 'HH:mm:ss'
事件 载荷 时机
change 非负毫秒number 挂载后立即及每帧(约1000/60ms)更新;无效目标和SSR不触发
finish 无 countdown到0时每周期一次,在change(0)之后停止;修改目标或方向开启新周期

Timer的#value作用域为{ value, text, duration, type }。value为目标原值,duration为当前非负毫秒;挂载前或日期无效时为null,text为'-'。其它三个槽直接转发。

SSR与客户端水合首帧均为'-',挂载后使用当前Date.now启动定时器;无效日期不调度,恢复有效目标后重新启动,卸载清理。format变化不重新触发已结束周期。后台标签页可能降低回调频率,每次读实际时间,不累计帧误差。

Statistic.Countdown / StatisticCountdown

既有固定倒计时导出,支持相同的展示字段、format、槽、事件及ref;无需传type。保留既有开发废弃提示,不新增兼容函数通道。具名导出和静态子组件引用相同实现,均有真实类型。

Attrs、Ref、Provider与主题

三个组件的class/style、id/tabindex、ARIA/data及普通原生监听均落实际根div;style支持字符串、数组和对象。Timer的change/finish是业务事件,内部原生输入的change不会冒充时长通知。nativeElement: HTMLDivElement | null返回实际根,卸载后为null。

七落点为root/header/title/content/value/prefix/suffix。Provider使用components.statistic的className/style/classNames/styles;当前配置替换或删除即时生效,局部语义配置优先,原生attrs样式最后覆盖。源主题使用theme.components.Statistic;最近Provider、RTL与相邻实例保持隔离。

Component Token 默认值 CSS变量
titleFontSize 当前fontSize(默认14) --apollo-statistic-title-font-size
contentFontSize 当前fontSizeHeading3(默认24) --apollo-statistic-content-font-size

两Token接受非负有限数字,动态删除后恢复当前Alias。原生CSS变量优先,源主题变化不替换编辑器。自定义色值的对比度由调用者负责;没有默认60Hz aria-live播报,调用者可按业务选择通知方式。

Powered by Vue 3 + ViteApollo Design · Vue NativeGitHub