feat(after-sale): 处理记录时间线改为「节点 + 状态 + 时间」同一行

原实现把状态与时间竖排在节点右侧的 88px 固定列里,状态文字一长就折行、
时间被挤到第三行,和右侧备注也对不齐。改为节点独占一列,状态与时间包在
head 里紧随其后,处理备注另起一行:

- [节点][处理状态][时间] 一行,状态色仍按工单状态走 --as-accent
- 竖线改挂到条目的 ::before(原来是 aside 的),top 从 12px 调到 14px,
  与加了 4px 上边距的节点底部对齐,绳子依旧穿过每个节且末项不收口
- head 用 flex + baseline + gap:8px,状态过长时时间自然换行而不重叠
- 售后详细弹窗与订单详情弹窗共用同一套标记,两侧同步改

验证:tests/widget-system/ 462 项、tests/admin/ 76 项通过;用 node 分别抽取
两个 JS 里的时间线构造函数跑样例载荷,确认输出为
[节点][状态][时间] + 另起一行的备注;重建 public.css / public.min.css,
diff 仅限时间线规则。未做浏览器视觉验收。
This commit is contained in:
kate522 committed 2026-10-09 18:01:16 +08:00
1 parent 26ce9a5904
commit 039fa6d863
6 files changed
+50 -38

No files matched your search

+8 -5
View File
@@ -192,14 +192,17 @@
var status = String((entry && entry.status) || '');
var note = String((entry && entry.note) || '');
html += '<li class="aksrt-after-sale-timeline__item is-' + escapeHtml(status) + '">';
html += '<div class="aksrt-after-sale-timeline__aside">' +
'<span class="aksrt-after-sale-timeline__knot"></span>' +
html += '<span class="aksrt-after-sale-timeline__knot"></span>';
html += '<div class="aksrt-after-sale-timeline__body">';
// [节点][处理状态][时间] 同一行,处理备注另起一行
html += '<div class="aksrt-after-sale-timeline__head">' +
'<span class="aksrt-after-sale-timeline__status">' + escapeHtml(handlingEntryTitle(entry)) + '</span>' +
'<time class="aksrt-after-sale-timeline__time">' + escapeHtml(String((entry && entry.created_at) || '')) + '</time>' +
'</div>';
html += '<div class="aksrt-after-sale-timeline__main">' +
(note !== '' ? '<p class="aksrt-after-sale-timeline__note">' + escapeHtml(note).replace(/\r\n|\r|\n/g, '<br>') + '</p>' : '') +
'</div>';
if (note !== '') {
html += '<p class="aksrt-after-sale-timeline__note">' + escapeHtml(note).replace(/\r\n|\r|\n/g, '<br>') + '</p>';
}
html += '</div>';
html += '</li>';
});
html += '</ol></div>';
+8 -5
View File
@@ -129,14 +129,17 @@
var status = String((entry && entry.status) || "");
var note = String((entry && entry.note) || "");
html += '<li class="aksrt-after-sale-timeline__item is-' + escapeHtml(status) + '">';
html += '<div class="aksrt-after-sale-timeline__aside">' +
'<span class="aksrt-after-sale-timeline__knot"></span>' +
html += '<span class="aksrt-after-sale-timeline__knot"></span>';
html += '<div class="aksrt-after-sale-timeline__body">';
// [节点][处理状态][时间] 同一行,处理备注另起一行
html += '<div class="aksrt-after-sale-timeline__head">' +
'<span class="aksrt-after-sale-timeline__status">' + escapeHtml(handlingEntryTitle(entry)) + '</span>' +
'<time class="aksrt-after-sale-timeline__time">' + escapeHtml(String((entry && entry.created_at) || "")) + '</time>' +
'</div>';
html += '<div class="aksrt-after-sale-timeline__main">' +
(note !== "" ? '<p class="aksrt-after-sale-timeline__note">' + escapeHtml(note).replace(/\r\n|\r|\n/g, "<br>") + '</p>' : "") +
'</div></li>';
if (note !== "") {
html += '<p class="aksrt-after-sale-timeline__note">' + escapeHtml(note).replace(/\r\n|\r|\n/g, "<br>") + '</p>';
}
html += '</div></li>';
});
return html + '</ol></div>';
}