Skip to content

n-timeline 时间轴 ​

按时间顺序展示物流、审批和日程记录。list 是唯一数据源;model-value 只标记当前节点,点击不会改写它。不传当前节点时为纯记录型。

默认使用圆点;item.icon 指定内置图标,错误节点缺省使用错误图标。#node 可绘制任意节点,节点自然撑高,不受 icon-size 限制。axis-width 独立控制轴列宽度,较宽节点应预留相应轴宽。 自定义节点可用 var(--n-timeline-node-color) 读取该行已解析的节点色,自动遵循 errorColor、item.color、activeColor 与主题默认色的优先级。

平台兼容性 ​

面向 App、Web、微信小程序。支持范围和本次实际验收结果分别记录,编译结果不等同设备运行结果。支付宝、百度、头条和 QQ 小程序未纳入支持范围。

API ​

属性 ​

参数 说明 类型 默认值 可选值
list 节点数据;见 NTimelineItem Array [] -
model-value 当前节点下标,-1 为纯记录;组件不回写 Number -1 -
icon-size 内置图标边长 px;下限 8,非有限值按 16 Number 16 -
axis-width 独立轴列宽度;非法值按 24px Number / String 24 数字、px、rpx
left-width 左列宽;0 隐藏并保留插槽状态,非法值按 0 Number / String 0 数字、px、rpx
gap 相邻内容下方留白 px;负值按 0,非有限值按 16;末项不带 Number 16 -
line-width 实际连线宽度,0 隐藏,非法值按 1px Number / String 1 数字、px、rpx
line-color 未到达线色,空串使用主题边框色 String "" CSS 颜色、变量
active-color 当前节点及已到达线色,不改变标题正文色 String "" CSS 颜色、变量
error-color 错误节点及已到达错误线色,不改变标题正文色 String "" CSS 颜色、变量
title-style 内置标题行内样式,支持字号和行高 String "" -
content-style 内置说明行内样式 String "" -
time-style 内置时间行内样式 String "" -
left-style 内置左列文字行内样式,支持字号和行高 String "" -
custom-class 根节点附加类,类须定义在组件样式表中 String "" -
custom-style 根节点行内样式 String "" -

数字及纯数字字符串按 px 解释。轴宽、左列宽、线宽只接受非负有限长度;不支持百分比或视口单位。

NTimelineItem 字段 ​

字段 说明 类型 默认值
title 标题;空串不显示 String ""
content 说明;#content 可替代 String ""
time 尾部时间文字 String ""
left 左列文字;#left 可替代 String ""
icon 图标名,优先于默认圆点/错误图标 String ""
color 节点显式颜色,优先级低于 error String ""
error 错误状态,缺省使用错误图标与加粗标题 Boolean false
hideLine 隐藏该项到下一项的连线 Boolean false
lineColor 该项下方整段线色,优先于进度色与全局线色 String ""

事件 ​

事件名 说明 回调参数
click 点击节点行;不修改当前节点。内嵌独立操作可在业务 view 上使用 @tap.stop

插槽 ​

插槽名 说明
node 每项节点;参数 item/index/status,替代内置圆点或图标,内容自然撑高
left 每项左列;参数 item/index,leftWidth 大于 0 时显示
content 每项说明;参数 item/index,替代 content,保留 title/time
right 每项完整右列;参数 item/index/status,替代内置 title/content/time,优先于 content 插槽

status 为 error/current/plain。每项内容使用作用域插槽声明,例如 #node="{ index }"、#right="{ item, index }";即使只绘制固定图形,也保留参数声明。微信端不带参数的普通具名插槽是单份投影,不能用于逐项重复业务内容。

插槽存在性在组件创建时确定;需要增删具名插槽时使用完整组件分支,不要用条件插槽声明。隐藏左列不会销毁其业务内容。

实现说明 ​

参考做法 本组件做法 取舍理由
容器与节点组合,节点文字与图标属性分离 单一类型化 list + 字段内置渲染 保持已有数据 API,字段覆盖常用内容,作用域插槽承接自由组合
独立左列宽、轴列宽与线宽 leftWidth/axisWidth/lineWidth 独立 不再用图标大小代替轴列宽度;线宽为实际渲染宽度,需要细线直接设置 0.5
每个节点独立 lined/lineColor item.hideLine/item.lineColor,末项自动断线 保留逐项控制,避免调用方重复处理末项;同段上下两部分共用起点颜色
默认节点插槽、left/right 完整内容插槽 node/left/right;保留原有 content 兼容通道 自定义节点自然撑高;right 可完整替代右列,不强制插入标题和时间
图标、标题、内容、时间的样式定制 node 插槽、主题令牌和各文字 xxxStyle 不恢复废弃的对象样式通道,隔离环境下保持可直接定制
节点内容先占据自然高度,余下空间由连线伸展 节点与内置标题共用自然高度头部;自由 right 内容按顶部排布 不猜测插槽尺寸,不使用延迟测量、负位移或隐藏测量副本
业务内容随数据更新 稳定行、常驻文字与左列;仅切换内置节点种类时重建装饰部分 current/color/文字更新保留业务插槽;左列通过 v-show 隐藏,避免原生端动态插拔
容器背景与内边距 根 customStyle 普通容器样式无需增加重复属性

本库已有的 modelValue/error/click 保持兼容;不引入额外进度模式或实例方法。Web 节点行支持 Tab 聚焦、Enter/空格激活,焦点有可见轮廓;内嵌控件键盘事件不会再次触发行事件。节点行默认最小高度 40px,相邻行按自然布局排列,无覆盖点击层。插入/删除或重排 list 后,插槽 index 始终为当前源下标;行按源下标复用,业务有跨位置身份要求时应在自己的插槽组件上绑定业务 key。

记录 · 思考 · 创作