|
|
@@ -85,7 +85,43 @@
|
|
|
: `共 ${counts.all} 个任务 · ${counts.running} 个进行中 · ${counts.failed} 个失败`;
|
|
|
}
|
|
|
|
|
|
+ function buildCrawlCard(task) {
|
|
|
+ const card = el('article', `task-card status-${task.status}`);
|
|
|
+ const main = el('div', 'task-main');
|
|
|
+
|
|
|
+ const titleRow = el('div', 'task-title-row');
|
|
|
+ const title = el('div', 'task-title');
|
|
|
+ title.textContent = task.name || '门店采集';
|
|
|
+ const badge = el('span', `badge task-badge ${task.status}`);
|
|
|
+ badge.textContent = { running: '进行中', success: '已完成', failed: '已停止/失败' }[task.status] || task.status;
|
|
|
+ titleRow.append(title, badge);
|
|
|
+
|
|
|
+ const progress = el('div', 'task-progress');
|
|
|
+ const bar = el('span', 'task-progress-bar');
|
|
|
+ bar.style.width = `${progressValue(task)}%`;
|
|
|
+ progress.appendChild(bar);
|
|
|
+
|
|
|
+ const meta = el('div', 'task-meta');
|
|
|
+ meta.textContent = [
|
|
|
+ task.detail || '',
|
|
|
+ task.createdAt ? `开始 ${formatTime(task.createdAt)}` : '',
|
|
|
+ task.finishedAt ? `结束 ${formatTime(task.finishedAt)}` : '',
|
|
|
+ ].filter(Boolean).join(' · ');
|
|
|
+
|
|
|
+ main.append(titleRow, progress, meta);
|
|
|
+ if (task.warning) main.appendChild(el('div', 'task-notice warning', task.warning));
|
|
|
+
|
|
|
+ const actions = el('div', 'task-actions');
|
|
|
+ const right = el('div', 'task-status-detail');
|
|
|
+ right.textContent = task.progress || '';
|
|
|
+ actions.appendChild(right);
|
|
|
+
|
|
|
+ card.append(main, actions);
|
|
|
+ return card;
|
|
|
+ }
|
|
|
+
|
|
|
function buildTaskCard(task) {
|
|
|
+ if (task.type === 'crawl') return buildCrawlCard(task);
|
|
|
const card = el('article', `task-card status-${task.status}`);
|
|
|
const main = el('div', 'task-main');
|
|
|
|
|
|
@@ -142,7 +178,7 @@
|
|
|
const icon = el('div', 'task-empty-icon');
|
|
|
icon.innerHTML = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 7h10M4 12h16M4 17h7"/><circle cx="18" cy="7" r="2"/><circle cx="15" cy="17" r="2"/></svg>';
|
|
|
const text = el('p', '', state.loading ? '正在加载任务' : '暂无匹配任务');
|
|
|
- const help = el('small', '', state.loading ? '请稍候' : '提交生成任务后会自动显示在这里');
|
|
|
+ const help = el('small', '', state.loading ? '请稍候' : '提交生成任务或开始门店采集后会自动显示在这里');
|
|
|
empty.append(icon, text, help);
|
|
|
list.appendChild(empty);
|
|
|
return;
|