仅桌面端保证样式
AuditTimeline 审计时间线
面向操作审计的时间线:操作者头像色按名字稳定取色,时间放轴对侧,字段级 diff 可展开查看变更前后值。
规则要点:
- 操作者名依次取
operator、user,都没有时显示系统;同名操作者永远得到同一节点色; - 仅当
expandable为真且该条diff非空时才显示展开按钮,按钮文案为展开变更(条数); before为 undefined 或空串时显示(空),适合新建类记录(无变更前值);- 展开键为
item.id(缺省用下标),因此受控/非受控都建议给每条记录配稳定id。
基础用法
张三更新了订单金额
李四创建了订单
来源:后台录入
受控展开
传 expanded-items(可配 v-model:expanded-items)即为受控模式,展开状态交给外部,便于默认展开某条或跨组件联动;未传时组件内部维护展开状态。本例默认展开 a1,其中备注字段的 before 为空串,渲染为(空)。
张三更新了订单金额
风控审核通过
金额100200
备注(空)加急处理
李四创建了订单
来源:后台录入
系统自动对账
当前展开 1 条变更明细
a2 没有 diff(不显示按钮),a3 没有 operator / user(显示为系统)。无论受控与否,每次切换都会 emit expand-change,携带展开键数组。
关闭展开
expandable: false 隐藏全部展开按钮,diff 内容不再可见,时间线退化为纯流水。
张三更新了订单金额
风控审核通过
李四创建了订单
来源:后台录入
系统自动对账
自定义格式化
formatTime 与 formatDiffValue 分别接管时间与 diff 值的展示,例如时间戳转本地格式、数值千分位。
王五调整了库存
常见问题
- 展开按钮不显示:确认
expandable未被关闭,且该条diff是非空数组; - 受控模式下点击无反应:需要监听
update:expandedItems(或用v-model:expanded-items)并回写,组件不会修改外部数组; - 记录很多时建议在组件外层自行分页或虚拟滚动,组件只负责渲染传入的
items; - 展开状态以
id为键,列表重排或追加记录时已展开项不会错位,因此务必保证id稳定唯一。
API
AuditTimeline Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| items | 审计记录 | Item[] | [] |
| expandable | 允许展开 diff | boolean | true |
| expandedItems | 受控展开项(item.id,未传则内部维护) | array | — |
| formatTime | 时间格式化 | (t) => string | (t) => String(t) |
| formatDiffValue | diff 值格式化 | (v) => string | (v) => String(v) |
Item
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| id | 唯一标识(展开状态键,缺省用下标) | string | number | — |
| operator / user | 操作者(取色与展示,依次取 operator、user) | string | 系统 |
| action | 操作描述 | string | |
| createdAt | 时间(显示在轴对侧) | string | number | — |
| detail | 补充说明 | string | — |
| diff | 字段变更数组,项为 { field, before, after };before 为空时显示(空) | array | — |
Events
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| expand-change | 展开项变化(受控/非受控都触发) | (keys: array) => void | — |
| update:expandedItems | 受控展开更新 | (keys: array) => void | — |
本组件无插槽与实例方法,纯展示。