diff --git a/.ua/backlog.json b/.ua/backlog.json index b7d5f1d..6eaf14a 100644 --- a/.ua/backlog.json +++ b/.ua/backlog.json @@ -2861,6 +2861,15 @@ "status": "done", "domain": "tooling", "notes": "配方 16 里特意写了「不要再套一层 overflow:auto」——layout 内容区自己就是滚动容器且已在细条名单内,两层滚动会让吸顶页头与滚动条重复出现,这类「两个都对、拼起来错」的坑只能靠配方说明。配方 17 强调 finally 收遮罩:只写 try 分支的示例会诱导出「异常时遮罩永远挂着」的实现" + }, + { + "id": "g275", + "title": "新增相对时间组件 relativeTime", + "motivation": "动态 / 评论 / 操作日志里最常出现的一列是「3 分钟前」。此前只能自己算差值再手拼文案,于是每个页面各写一套:有的不刷新(页面开着十分钟还显示「刚刚」)、有的把所有时间都渲染成「N 天前」(半年前的记录也这么写,读者还得自己换算)、有的遇到脏数据直接抛错让整列空白。这三件事都该由一个组件定死。", + "acceptance": "新增 relativeTime(props):value 接受 ISO 串 / 10 位秒戳 / 13 位毫秒戳 / Date;按 refresh(缺省 30s)自动刷新文案,超 threshold(缺省 7 天)改显示绝对日期;title 恒给精确到分钟的时间,datetime 属性给 ISO;非法时间显示 fallback(缺省 —)不抛错;计时器在节点脱离文档后自断;样式只消费 --ua-* 令牌(等宽数字 + nowrap),禁止新增硬编码阴影 / 时长 / 字号;十处落点全同步,npm run check 全绿", + "status": "done", + "domain": "new", + "notes": "10 位 / 13 位时间戳按数量级判秒与毫秒(<1e12 视为秒)——真按位数数会踩「2033 年以后的秒级戳突破 1e10」这类边界,用数量级更稳。计时器自断用的是 watch.ts 同款「isConnected 为假就 clearInterval」写法,列表反复挂载也不会累积。等宽数字(tabular-nums)是时间列不抖动的关键,肉眼很难描述但一排「3 分钟前 / 11 小时前」混排时立刻能看出来" } ] } \ No newline at end of file diff --git a/.ua/iterations.log b/.ua/iterations.log index 02f9a1f..a1b25ce 100644 --- a/.ua/iterations.log +++ b/.ua/iterations.log @@ -319,3 +319,4 @@ {"ts":"2026-10-26T22:58:03+08:00","id":"g272","result":"done","commit":"b6c2afb","summary":"视觉抽查清单扩到十一段(新增五类新组件抽查位),总数下限改为段数推导"} {"ts":"2026-10-26T22:59:07+08:00","id":"g273","result":"done","commit":"d6e4319","summary":"新增区域加载遮罩组件 loading(81→82):延迟出场 + 内容留位 + aria-busy"} {"ts":"2026-10-26T22:59:58+08:00","id":"g274","result":"done","commit":"b93e8b0","summary":"补三条组合配方:后台页骨架 / 表格刷新遮罩 / 变更审阅面板"} +{"ts":"2026-10-26T23:00:45+08:00","id":"g275","result":"done","commit":"b454d5f","summary":"新增相对时间组件 relativeTime(82→83):自动刷新 + 超阈值转绝对日期 + 脏数据兜底"}