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。