fix: 监控进度显示优化 - 通用任务改为"已执行操作数",操作计数紧凑展示
- 通用步骤任务进度语义:done=累计执行操作次数,不再配固定 total(原来显示 33/2 步骤 无意义) - 前端操作计数徽章按数量降序、最多显示6个,超出折叠为 +N - 移除无意义的百分比进度条(无固定总数时不显示)
This commit is contained in:
@@ -88,7 +88,7 @@ class GenericStepsWorker(BaseWorker):
|
|||||||
"""按 steps 顺序执行。loop 步骤递归执行其 children。"""
|
"""按 steps 顺序执行。loop 步骤递归执行其 children。"""
|
||||||
self._start_timer()
|
self._start_timer()
|
||||||
self.set_action("开始执行步骤链")
|
self.set_action("开始执行步骤链")
|
||||||
self.set_progress(done=0, total=len(self.steps), unit="步骤",
|
self.set_progress(done=0, total=0, unit="操作",
|
||||||
action_counts=dict(self._action_counts))
|
action_counts=dict(self._action_counts))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -131,8 +131,9 @@ class GenericStepsWorker(BaseWorker):
|
|||||||
_log.warning(f"[{self.serial}] 未知步骤类型: {stype}")
|
_log.warning(f"[{self.serial}] 未知步骤类型: {stype}")
|
||||||
self._action_counts[label] = self._action_counts.get(label, 0) + 1
|
self._action_counts[label] = self._action_counts.get(label, 0) + 1
|
||||||
elapsed = self.elapsed()
|
elapsed = self.elapsed()
|
||||||
|
# done=累计执行的操作次数(无固定总数),前端显示"已执行 N 次操作"
|
||||||
self.set_progress(done=sum(self._action_counts.values()),
|
self.set_progress(done=sum(self._action_counts.values()),
|
||||||
total=len(self.steps), unit="步骤",
|
total=0, unit="操作",
|
||||||
action_counts=dict(self._action_counts), elapsed=elapsed)
|
action_counts=dict(self._action_counts), elapsed=elapsed)
|
||||||
|
|
||||||
# ================== 步骤执行器 ==================
|
# ================== 步骤执行器 ==================
|
||||||
|
|||||||
@@ -953,10 +953,17 @@ function fmtProgress(progress, workerStatus){
|
|||||||
const m=Math.floor(elapsed/60), s=elapsed%60;
|
const m=Math.floor(elapsed/60), s=elapsed%60;
|
||||||
timeHtml=' <span style="font-size:11px;color:#94a3b8">'+m+'m'+s+'s</span>';
|
timeHtml=' <span style="font-size:11px;color:#94a3b8">'+m+'m'+s+'s</span>';
|
||||||
}
|
}
|
||||||
// 操作计数徽章(仅显示 >0 的)
|
// 操作计数徽章(按数量降序,最多显示6个,超出的折叠为 +N)
|
||||||
const countParts=Object.entries(counts).filter(([_,v])=>v>0).map(([k,v])=>
|
const countEntries=Object.entries(counts).filter(([_,v])=>v>0).sort((a,b)=>b[1]-a[1]);
|
||||||
'<span class="label label-info" style="margin-left:4px">'+(ACTION_LABELS[k]||esc(k))+' '+v+'</span>');
|
const MAX_COUNTS=6;
|
||||||
const countsHtml=countParts.length?'<div style="margin-top:2px">'+countParts.join('')+'</div>':'';
|
const shown=countEntries.slice(0,MAX_COUNTS);
|
||||||
|
const more=countEntries.length-MAX_COUNTS;
|
||||||
|
let countsHtml='';
|
||||||
|
if(shown.length){
|
||||||
|
countsHtml='<div style="margin-top:2px">'+shown.map(([k,v])=>
|
||||||
|
'<span class="label label-info" style="margin-left:4px;font-size:11px">'+(ACTION_LABELS[k]||esc(k))+' '+v+'</span>'
|
||||||
|
).join('')+(more>0?' <span style="font-size:11px;color:#94a3b8">+'+more+'</span>':'')+'</div>';
|
||||||
|
}
|
||||||
// 空闲/完成但无进度数据 → 灰显
|
// 空闲/完成但无进度数据 → 灰显
|
||||||
if(done===0&&total===0&&elapsed===0&&!countParts.length){
|
if(done===0&&total===0&&elapsed===0&&!countParts.length){
|
||||||
return '<span class="text-muted">-</span>';
|
return '<span class="text-muted">-</span>';
|
||||||
|
|||||||
Reference in New Issue
Block a user