深色
操作日志

这一页是整套系统的「行车记录器(黑盒子)」:谁、在什么时间、改了什么(从什么值改成什么值)、用哪个网路位址(IP),全部一笔一笔自动记下来。它只能「看」和「导出」,不能在这里改任何东西、不能删、不能撤销——纯粹是出事时回头查「是谁动的」的查帐视窗。
谁会用到:只有「管理员(admin)」帐号能打开看到内容。后端写死挡在 requireRole('admin'),一般操作员帐号登入根本看不到这一页(所以操作员说「我看不到操作日志」是正常的,不是坏掉)。日志里有 IP、改价、改库存等敏感轨迹,限管理员是刻意的。
🧠 这一页的原理(白话)
原理分三段:①写入——系统里任何「会改资料」的地方(上传库存、改价、推送、改设定、删映射、登录…)都呼叫同一个函式留下一行日志,固定记七格:谁、做了什么动作代号、改了哪个对象、改之前长怎样、改之后长怎样、来源 IP、自动盖的时间。②储存——存在一张只进不出的资料表 audit_log,凭程式里根本没有删改这些纪录的路径(连停用员工帐号,他过去的日志也完整保留),这是稽核底线。③读出显示——这一页把纪录捞出来,再把给机器看的英文代号(例 update_safety_buffer、状态值 new/shipped)翻成中文人话(例「修改 Safety Buffer」「物理库存 21 → 20」)。核心保证:只要某动作真的改了资料,就一定有一行日志;这一页能不能查到,等于「当初那段程式有没有去记」,页面本身不产生纪录、只忠实显示。这是系统五大铁则第 2 条「所有写入动作都要进 audit_log,无一例外」的落地(ADR-032:库存数字一旦出问题,没有日志就查不出是谁何时改的)。
🖱️ 画面上的东西(分页 / 按钮 / 栏位)
| 类型 | 名称 | 是什么 | 点了 / 用了会怎样 | ⚠️ 注意 |
|---|---|---|---|---|
| badge | 标题:操作日志 | 页面名称,永远显示。 | 无互动,纯标题。 | |
| badge | 详细日志 · 共 N 条 | N = 目前这套筛选条件下符合的纪录总笔数(后端 COUNT 算的真实总数,不是只算当前页)。一改筛选条件这个数字就跟着变。 | 无互动,纯显示。 | |
| button | 导出 CSV | 右上角带下载图示的按钮。 | 把『目前画面上看到的这一页纪录』打包成 Excel 可开的 CSV 档,浏览器直接下载,档名像『操作日志_2026-06-16.csv』。CSV 含 10 栏:时间、用户、动作(中文)、动作代号(英文原代号)、类型、对象 ID、变更内容、变更前、变更后、IP;前面塞了 BOM 让 Excel 正确显示中文不乱码。 | 无风险,只把画面资料存成档、不改任何东西。但重要:它只导『当前这一页』(最多 100 笔),不是导出全部符合条件的纪录——要导第 2 页得先翻到第 2 页再按一次。 |
| field | 搜索框(提示字:搜索动作 / 对象…) | 左边一个放大镜图示的输入框。 | 打字后只比对三个栏位——动作代号(action)、对象 ID(entity_id)、对象类型(entity_type),含这串字就显示。注意:它比对的是英文原代号(例 wms_import、sku),不是表格上的中文,且搜不到『用户名』也搜不到『变更前/后的内容值』。一改内容自动跳回第 1 页。 | |
| field | 用户 (全部) 下拉 | 第一项固定『用户 (全部)』;其余是系统里所有曾留下纪录的操作者名单(后端自动捞、最多 500 个)。 | 选某人后,表格只显示那个人做过的纪录。要找某人的操作请用这个下拉,别打在搜索框(搜索框搜不到名字)。 | |
| field | 动作 (全部) 下拉 | 第一项『动作 (全部)』;其余是写死在程式里的 51 种动作清单(每种已翻成中文),例如:登录/登出、WMS 库存上传、FBA 扣减 CSV 上传、单品库存调整、强制同步、手动重算库存、对账数据重置、拉取平台订单、忽略待匹配订单、遇到未知订单状态、批次导出出货单、收到 Amazon 实时通知、订阅 Amazon 订单通知、库存推送到平台、价格推送到平台、库存推送(影子模式 仅记录未推)、价格推送(影子模式 仅记录未推)、手动推送单个 SKU、手动批量推送、切换推送模式、修改 Safety Buffer、冻结/解冻 SKU、新增/修改/删除/启用停用 SKU 映射、批量导入/停用映射、同步 Takealot 映射、自动匹配 Amazon/Makro 待匹配单、上传 Listing CSV、确认 Listing SKU 变更、保留原 SKU、新增/修改/删除覆写规则、新增更新/停用平台连接、平台连接异常、切换全局只读模式、修改系统参数、新增/修改/停用启用用户。 | 选某一项后表格只显示那一种动作的纪录。注意:清单是人工维护的翻译表;万一系统记下一种清单里没有的新动作,那一笔照样被记录,只是在表格显示成『代号(未翻译)』,且不会出现在这个下拉里。 | |
| field | 日期范围下拉 | 三个选项:近 7 天(预设)、今日、近 30 天。 | 选了之后表格只显示那个时间区间内的纪录(后端用资料库时间过滤)。没有自订起讫日期、也没有『全部时间』——最长只能选近 30 天。 | |
| badge | 加载中… | 表格区中央在资料还没回来时显示的一行灰字。 | 无互动,载完就消失。 | |
| column | 时间 栏 | 这笔动作发生的日期时间(等宽小字)。 | 重要:时间是按『登入者所在地』换算的——南非帐号看到 UTC+2、中国帐号看到 UTC+8。同一件事南非同事和中国同事看到的钟点会差 6 小时,这不是 bug,是同一个真实时刻的两地时间。后端一律存 UTC、依登入者地区渲染。 | |
| column | 用户 栏 | 一个小圆形头像(蓝底)里面是该操作者名字的第一个字母大写(例 admin→A),右边显示操作者名字。 | 那个圆圈只是用名字自动生成的色块,不是上传的照片。无互动。 | |
| column | 动作 栏 | 翻成中文的动作名称(例『WMS 库存上传』『价格推送到平台』)。 | 滑鼠移上去会显示这笔的英文原代号当提示。若遇到清单里没有的代号,显示成『代号(未翻译)』——刻意设计:宁可摊出原始代号也不静默吞掉,看到『(未翻译)』代表系统忠实记了一个还没翻成中文的动作,别慌。 | |
| column | 对象 栏 | 这笔动作改的是『哪一类东西+它的编号』,格式 类型#编号(例 sku#150310、order#12345),等宽小灰字。 | 无互动,纯显示。 | |
| column | 变更内容 栏 | 把『变更前』『变更后』两包资料比对后,拼成人看得懂的短语,多个用『;』隔开(例『物理库存 21 → 20』『状态 待处理 → 已出库』『Safety Buffer 0 → 1』『冻结:是』)。英文栏位名、英文状态值都翻成中文(new→待处理、shipped→已出库、true→是),没变的栏位不显示。 | 点该列的『详情』小连结会展开一段等宽小字的原始资料(JSON),再点一次收合——只有程式不认得的栏位才收进这里,预设收起。若这笔完全没有可显示的变更内容则显示一个破折号『—』(有些动作如登入、拉取订单本来就没有前→后的值可比,显示『—』很正常,不代表漏记)。 | |
| column | IP 栏 | 这笔动作来自哪个网路位址(IP,等宽小灰字)。 | IP ≈ 操作来源的网路门牌号码,用来追是从哪里发出的。无互动。 | |
| badge | 无日志记录 | 若当前筛选下一笔都没有,表格中央显示这行字。 | 无互动,代表这组条件没有符合的纪录。 | |
| button | 上一页 / 下一页(翻页) | 只有当总笔数超过一页(100 笔)时,表格最底部才会出现这一排:上一页钮、『N / M』(目前第几页/共几页)、下一页钮。不到 100 笔整排不显示。 | 每页固定 100 笔,翻页只是换显示哪 100 笔、不改任何资料。已在第 1 页时『上一页』变灰不能点,已在最后一页时『下一页』变灰不能点。一改任何筛选会自动跳回第 1 页。 |
⚠️ 注意事项 / 别踩的坑
- 搜索框不是万能搜:它只搜得到三样——动作代号、对象类型、对象 ID(且比对的是英文原代号)。搜『用户名』、搜『改了什么内容(变更前/后的值)』『中文动作名』都搜不到。要找某人的操作请用旁边的『用户(全部)』下拉,不要把『搜索框搜不到』当成『系统没记这件事』。
- 时间是按登入者所在地换算:南非帐号看 UTC+2、中国帐号看 UTC+8,同一件事两地看到的钟点差 6 小时——这是同一个真实时刻的两地时间,不是 bug。对时间前先确认『我现在是用哪个地区登入』。
- 不是『往下拉就看得完全部』:预设只显示近 7 天,下拉只有今日/近 7 天/近 30 天三个选项,没有『全部』、也不能自订日期范围,目前最远只能查近 30 天。
- 动作下拉里没有的动作 ≠ 系统没记:下拉清单是人工维护的翻译表;真有新动作但还没加进翻译表时,它照样被记录、只是显示成『代号(未翻译)』(原始英文代号+未翻译字样)且不会出现在下拉里。看到『(未翻译)』别慌。
- 『变更内容』显示『—』≠ 没做事:有些动作本来就没有前→后的值可比(例如登入、拉取订单),显示『—』很正常,不代表漏记。
- 这页纯唯读,不能在这里『撤销/还原/反悔』任何改动,也没有任何这类按钮。要改回去得去对应的功能页重新操作(那次操作又会被记一笔新日志)。
- 日志删不掉,这是刻意的:纪录只进不出,连停用某员工帐号时他过去的日志也完整保留(规格 E27)。能被删的日志等于没用——这是稽核底线。
- 别把『操作日志』当待办清单或现况看板:它是历史纪录、不是即时状态。要看现在库存多少、订单卡在哪,请去仪表板/订单页,不要在这里判断现况。
- 导出的 CSV 只含『你当下筛出来的那一页』(最多 100 笔),不是整个资料库。要完整存证先把筛选调好、必要时翻页分批导出。
- 资料不会无限堆积:背后有每天凌晨自动清理机制(ADR-053),营运纪录含本日志最长保留 18 个月、逾期自动删除(满足 Amazon 资料保护对 audit log 至少留 12 个月的承诺),所以 12 个月内一定查得到、太久以前的会被清掉。连『系统自己清了多少』也会留一笔日志(user=system:retention)。
✅ 怎么操作(步骤)
- 任务 A:查『某个时段、某个人做了哪些事』——① 左侧选单进入『操作日志』。② 顶部『用户 (全部)』下拉选要查的人(别用搜索框打名字,搜不到)。③ 右边日期下拉选『今日 / 近 7 天 / 近 30 天』。④ 表格即时刷新,由新到旧列出:时间·用户·动作·对象·变更内容·IP。⑤ 笔数多就用底部『上一页/下一页』翻(每页 100 笔,只有超过 1 页时才出现翻页钮)。
- 任务 B:查『某个东西(某 SKU / 某订单)被动过什么』——① 在搜索框输入对象 ID(例如 WMS code 150310、或订单号)。记得:搜索框只对『动作代号 / 对象类型 / 对象 ID』生效。② (可选)再用『动作 (全部)』下拉缩小,例如只看『修改 Safety Buffer』。③ 表格列出该对象相关的每一笔改动,『变更内容』会显示前→后(例『Safety Buffer 0 → 2』)。
- 任务 C:导出存证(CSV)——① 先把筛选(日期/用户/动作/搜索)调到你要的范围。② 点右上『导出 CSV』。③ 浏览器会下载一个档名像『操作日志_2026-06-16.csv』的档(可用 Excel 打开)。④ 注意它只导『当前这一页』(最多 100 笔);要更完整就翻页分批导,或先把日期拉到『近 30 天』再导。(CSV 是最通用的表格档,Excel / Google 试算表都能直接打开。)
- 小技巧:找某员工今天做了什么→用户下拉选他+日期选今日;只看真正会动到平台的事→动作下拉选『库存推送到平台』或『价格推送到平台』;看不懂变更内容里的一坨文字→点该列『详情』展开看大概即可(里面通常是较底层、少见的资料)。
与 6/21 上线测试有关
6/21 上线测试要做两件『第一次真写线上平台』的事:推送虚拟库存 + 线上比价改价。这一页就是当天的『黑盒子』——做完之后来这里把『动作』筛成『库存推送到平台』『价格推送到平台』,就能确认到底推了哪些 SKU、推之前→之后的值、IP 对不对得上、每笔都有留痕。关键安全点:如果还在『影子模式』(演练、只记录不真送),推送会记成『库存推送(影子模式,仅记录未推)』『价格推送(影子模式,仅记录未推)』——看到『影子模式』字样就代表那笔只是演练、没有真的送出去,是安全的;没有『影子模式』字样的『库存推送到平台/价格推送到平台』才是真的写了线上平台。如果出事要回溯『是谁、几点、把哪个 SKU 的价格/库存改成什么』,答案全在这页(且这页时间按登入者所在地显示,跨南非/中国对时间时注意时差)。