操作日志不是把“某人做了某事”堆成一串动态,而是让有权限的人在一段时间后仍能回答:谁在什么时间对哪个对象做了什么,结果是什么,证据是否完整。下面用供应商资料后台的操作日志练习这一任务,并在Pixso UI 设计协作流程中绘制列表与详情。

先区分审计日志和活动动态
审计日志强调按时间记录系统活动,通常需要稳定的事件编号和可追溯字段;活动动态可以只展示团队协作消息。两者混用会导致列表既不能检索,也不敢作为复核依据。本篇只讨论后台管理员定位一次资料变更的界面,不负责规定后端必须记录的全部事件。
| 字段 | 示例 | 为什么需要 |
|---|---|---|
| 发生时间 | 2026-10-12 14:36:08,UTC+8 | 明确时区,避免跨地区误读 |
| 操作者 | 陈宁 / cn-084 | 区分同名成员和服务账号 |
| 动作 | 修改结算周期 | 使用固定动作词,便于筛选 |
| 对象 | 供应商 S-018 / 资料页 | 让用户能回到被操作对象 |
| 结果 | 成功、拒绝、失败 | 区分“发起过”和“已生效” |
| 事件编号 | evt-20261012-00428 | 支持客服或安全团队引用同一条记录 |
失败事件也要保留。比如陈宁提交了结算周期变更,但因版本冲突被拒绝;只显示成功记录会让管理员误以为没有人尝试修改。错误详情可以分层:列表给结果和短原因,详情给错误码、请求编号和下一步。
列表先解决“找到哪一条”
案例中一小时产生 428 条记录。默认显示最近 24 小时,筛选区提供时间范围、操作者、动作、对象类型和结果;时间范围要标出“按 UTC+8 解释”。点击“修改结算周期”后,结果列表只保留该动作,并显示“已筛选 37 条”。筛选条件应可清除、复制和分享,不能把筛选状态藏在 URL 以外的不可见会话里。
排序按发生时间倒序,并提供事件编号和结果列。分页切换不清空筛选;若日志持续写入,页面给出“有 12 条新记录”提示,让用户决定是否刷新。刷新后仍保留当前时间范围和动作条件,避免正在核对的列表突然换成另一批。
详情要呈现前后值和证据链
点击事件 evt-20261012-00428 打开详情:对象“供应商 S-018”、操作者陈宁、动作“修改结算周期”、旧值“15天”、新值“30天”、结果“成功”、发生时间和事件编号。把旧值与新值放在同一行对照,空值显示“未设置”,不要用空白让人猜是缺失还是脱敏。
如果动作涉及多字段,按字段列出变化;如果只是查看或导出,不要伪造前后值。详情可提供“打开对象”入口,但打开对象时要再次按当前权限检查。日志详情的权限和业务对象权限可能不同:安全管理员能看事件存在,但普通成员只能看到被授权对象的摘要。
脱敏要有规则,导出要有边界
假设供应商资料包含联系人手机号和银行账号。列表不显示完整值;详情显示手机号前 3 后 2 位,账号只显示后 4 位,并在旁边说明“按角色脱敏”。不能把“无权限”做成空白,因为用户需要知道这是被遮蔽而非没有记录。高权限用户是否可以临时查看,需有明确的授权、原因和审计事件。
导出按钮应告诉用户导出的时间范围、当前筛选、字段范围和格式。普通成员只能导出脱敏字段;安全管理员导出完整字段时,系统还应记录一次“导出日志”。下载链接的有效期、文件加密和最大条数属于产品政策,不能在设计稿里擅自承诺。
缺失、重复和时区异常怎么处理
- 事件延迟:显示采集时间和发生时间,若两者不同,用提示解释排序依据。
- 重复回放:同一事件编号只展示一次;若系统重试造成重复,详情标记关联编号,不把它们合并成一条不可追溯记录。
- 字段缺失:显示“系统未提供”并保留事件编号,不用“未知”掩盖数据质量问题。
- 跨时区:允许切换显示时区,但详情保留原始时间和偏移量。
把一次变更画成可复核路径
在 Pixso 画布中把日志列表、筛选条件、单条详情和脱敏提示放在同一条“修改供应商结算周期”的路径上。

再用管理员和普通成员两种身份走一遍,确认详情与导出范围没有越权。验收清单至少包括:筛选条件可读且能清除;结果列区分成功、拒绝和失败;详情显示前后值与事件编号;敏感值按角色脱敏;新记录提示不会覆盖当前列表;焦点从列表进入详情后能返回原位置。最后把事件字段、时间口径、权限角色和导出审计规则写进交付说明。