mirror of
https://github.com/cft0808/edict.git
synced 2026-09-03 07:17:16 +08:00
fix(dashboard): 统一所有时间字段为本地时区展示 (#277)
将流转日志、会话详情、奏章时间线、巡检报告中的原始 substring 时间提取替换为 parseDateFlexible + 本地格式化,消除 UTC/本地混用。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1382,7 +1382,7 @@ function openTask(id){
|
||||
const isOk = (fl.remark||'').includes('✅')||fl.to==='皇上';
|
||||
const dotCls = isOk ? 'fl-ok' : (fl.from==='皇上'||fl.to==='皇上') ? 'fl-purple' : 'fl-blue';
|
||||
return `<div class="fl-item">
|
||||
<div class="fl-time">${fl.at?fl.at.substring(11,16):''}</div>
|
||||
<div class="fl-time">${fl.at?fmtLocalHM(fl.at):''}</div>
|
||||
<div class="fl-dot" style="background:${col}"></div>
|
||||
<div class="fl-content">
|
||||
<div class="fl-who">
|
||||
@@ -1772,6 +1772,18 @@ function fmtActivityTime(ts){
|
||||
if(!d) return '';
|
||||
return `${String(d.getHours()).padStart(2,'0')}:${String(d.getMinutes()).padStart(2,'0')}:${String(d.getSeconds()).padStart(2,'0')}`;
|
||||
}
|
||||
function fmtLocalHM(ts){
|
||||
const d = parseDateFlexible(ts);
|
||||
if(!d) return '';
|
||||
return `${String(d.getHours()).padStart(2,'0')}:${String(d.getMinutes()).padStart(2,'0')}`;
|
||||
}
|
||||
function fmtLocalFull(ts){
|
||||
const d = parseDateFlexible(ts);
|
||||
if(!d) return '';
|
||||
const Y=d.getFullYear(), M=String(d.getMonth()+1).padStart(2,'0'), D=String(d.getDate()).padStart(2,'0');
|
||||
const h=String(d.getHours()).padStart(2,'0'), m=String(d.getMinutes()).padStart(2,'0'), s=String(d.getSeconds()).padStart(2,'0');
|
||||
return `${Y}-${M}-${D} ${h}:${m}:${s}`;
|
||||
}
|
||||
|
||||
/* ══ MODEL CONFIG ══ */
|
||||
// Fallback 硬编码列表,优先从后端 knownModels 动态获取
|
||||
@@ -2163,7 +2175,7 @@ function openSessionDetail(jsonStr){
|
||||
const kLabel = kind==='assistant'?'回复':kind==='tool'?'工具':kind==='user'?'用户':'事件';
|
||||
let txt = (a.text||'').replace(/\[\[.*?\]\]/g,'').replace(/\*\*/g,'').trim();
|
||||
if(txt.length>200) txt=txt.substring(0,200)+'…';
|
||||
const time = (a.at||'').substring(11,19);
|
||||
const time = fmtActivityTime(a.at);
|
||||
return `<div style="padding:8px 12px;border-bottom:1px solid var(--line);font-size:12px;line-height:1.5">
|
||||
<div style="display:flex;align-items:center;gap:6px;margin-bottom:3px">
|
||||
<span>${kIcon}</span>
|
||||
@@ -2768,7 +2780,7 @@ function renderGlobalScanDetails(){
|
||||
}
|
||||
|
||||
function buildGlobalScanReport(){
|
||||
const checked = globalScanCheckedAt ? globalScanCheckedAt.replace('T',' ').replace('Z','') : '未知时间';
|
||||
const checked = globalScanCheckedAt ? fmtLocalFull(globalScanCheckedAt) || globalScanCheckedAt.replace('T',' ').replace('Z','') : '未知时间';
|
||||
const count = Number(globalScanCount || globalScanActions.length || 0);
|
||||
const lines = [
|
||||
'【太子巡检报告】',
|
||||
@@ -2934,7 +2946,7 @@ function openMemorial(jsonStr){
|
||||
<span class="md-tl-to">→ ${esc(f.to||'')}</span>
|
||||
</div>
|
||||
<div class="md-tl-remark">${esc(f.remark||'')}</div>
|
||||
<div class="md-tl-time">${esc((f.at||'').substring(0,19).replace('T',' '))}</div>
|
||||
<div class="md-tl-time">${esc(fmtLocalFull(f.at))}</div>
|
||||
</div>`;
|
||||
}).join('')}</div>
|
||||
</div>`;
|
||||
|
||||
Reference in New Issue
Block a user