Repository navigation
灵桥 Linkora v0.6.2
一次前端专项:把散乱的视觉样式收敛到单一真源,并修掉一个源码正确、构建产物出错的隐蔽缺陷——它让两个列表页的过滤器「默认能加载、点了就清空」。
过滤器点了就清空:构建压缩把变量绑错了
草稿审阅页和死信队列页的过滤器标签(全部 / 待处理 / 已审批 / 已丢弃)是用字符串拼接生成 data-args 的:
'<button data-status="' + s + '" data-action="_xSwitchStatus" data-args=\'["' + s + '"]\'>'构建压缩时,这段拼接被重排成了模板字面量片段:
.map(function(H){ return `... data-args='["` + H + `"]' ...` })[" 和 "] 变成了模板字面量,+H+ 夹在中间,属性值因此被截断成 ["。于是事件分发时 JSON.parse 失败 → 过滤函数收到 undefined → 请求 /api/...?status=undefined → 后端按字面量 WHERE status='undefined' 查询 → 返回空列表。
这个缺陷最麻烦的地方在于:源码完全正确,只有压缩后的产物出错。直接读代码、单元测试调用函数都会「通过」,只有真正跑生产产物才会暴露。这也解释了为什么它能一路逃过审查。
已改为模板字符串插值(${},变量作用域绑定,压缩安全)。同时补上死信搜索框缺失的处理器——模板引用了它,代码里却没有,搜索框此前是个死按钮。
新增门禁:禁止用拼接生成 data-* 属性
针对上述根因加了静态门禁 scripts/check_data_args_concat.mjs,接进 verify:frontend 与 CI:任何用 + 变量 + 拼接生成 data-* 属性值的写法都会让构建失败。回归测试同样直接针对构建产物断言,而非源码。
界面样式收敛到设计 token
原先颜色、字体、间距散落着多套来源——Tailwind 灰阶与 Bootstrap / GitHub Primer / Ant 的色值混用,同一语义存在多个近似但不同的色值(如灰阶同时有 #6b7280 与 #64748b),等宽字体有 10+ 种手写栈,图标字号有 25+ 种散值。现已统一:
- 颜色:按色相折叠为
--brand-*/--gray-*token。 - 字体:等宽栈统一为
--font-mono。 - 图标:新增
--icon-xs至--icon-3xl七档刻度,仅对图标选择器做就近折叠。 - 间距:
--space-*token 此前已定义却零引用,现已实际启用。
均为保值映射,视觉零变化。
交互修复
- 弹窗背景可滚动:弹窗是全屏遮罩,但背后的内容区仍能滚动。已补背景滚动锁(锁定真正的滚动容器,而非
body)。 - 图片灯箱监听器泄漏:反复打开大图会重复绑定 Esc 监听;且直接访问节点无空值保护。现补空值守卫与防重复绑定标志。
- 错误提示不变红:知识库页 4 处引用了一个未在
:root定义的局部别名--danger,导致 CSS 声明失效、错误文字继承默认色。已改用规范的--brand-danger。
工程门禁
- 前端测试全量通过:132 项(含新增 4 项针对构建产物的回归)。
- ESLint、bundle 冒烟、运行时冒烟、依赖一致性全部通过。
- 新增门禁与回归测试均做过「注入故障 → 确认报错」验证,确保不是空跑。
升级注意
无破坏性变更、无新增配置、无数据迁移。纯前端改动,升级后建议强制刷新一次浏览器(缓存了旧 bundle 的话)。