From 31ebe0431e9817400322b0e4e63dd1cd7a83efac Mon Sep 17 00:00:00 2001 From: kris Date: Mon, 30 Mar 2026 01:52:01 +0800 Subject: [PATCH] feat: refine mobile-native discovery and sheets --- web/storyforge-web-v4/assets/app.js | 26 ++++++++++++++++--- .../tests/workbench-pages.test.mjs | 8 ++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/web/storyforge-web-v4/assets/app.js b/web/storyforge-web-v4/assets/app.js index d2f178a..cb5aea0 100644 --- a/web/storyforge-web-v4/assets/app.js +++ b/web/storyforge-web-v4/assets/app.js @@ -5486,6 +5486,26 @@ function renderDiscoveryScreen() { +
+
+
+ 下一步先做 + ${escapeHtml(getAccountName(selected) || "未选中")} +
+

${escapeHtml(selected ? `先围绕 ${getAccountName(selected)} 做导入、分析和相似扩展。` : "先从账号池里选一个对象,再继续导入和分析。")}

+
+ ${actionTag("导入当前对标", "open-import-selected-account")} + ${actionTag("账号分析", "analyze-selected-account")} + ${actionTag("查相似", "open-similar-search")} +
+
+
+ 当前对标 ${escapeHtml(getAccountName(selected) || "未选中")} + ${escapeHtml(importedSources.length ? `已接入 ${importedSources.length}` : "未接入项目")} + ${escapeHtml(tracked ? "已加入跟踪" : "未加入跟踪")} + ${escapeHtml(reports.length ? `报告 ${reports.length}` : "暂无报告")} +
+
${accounts.map((account) => { const active = account.id === appState.selectedAccountId; @@ -5553,19 +5573,19 @@ function renderDiscoveryScreen() {
${escapeHtml(getAccountName(selected) || "未选中")} -
+
下一步先做 ${escapeHtml(detailTabs.find((tab) => tab.value === activeTab)?.label || "账号概览")}
-

${escapeHtml(selected ? `先围绕 ${getAccountName(selected)} 做导入、分析和相似扩展。` : "先从账号池里选一个对象,再继续导入和分析。")}

+

${escapeHtml(selected ? `先围绕 ${getAccountName(selected)} 做导入、分析和相似扩展。` : "先从账号池里选一个对象,再继续导入和分析。")}

${actionTag("导入当前对标", "open-import-selected-account")} ${actionTag("账号分析", "analyze-selected-account")} ${actionTag("查相似", "open-similar-search")}
-
+
当前对标 ${escapeHtml(getAccountName(selected) || "未选中")} ${escapeHtml(importedSources.length ? `已接入 ${importedSources.length}` : "未接入项目")} ${escapeHtml(tracked ? "已加入跟踪" : "未加入跟踪")} diff --git a/web/storyforge-web-v4/tests/workbench-pages.test.mjs b/web/storyforge-web-v4/tests/workbench-pages.test.mjs index 62dc455..0922380 100644 --- a/web/storyforge-web-v4/tests/workbench-pages.test.mjs +++ b/web/storyforge-web-v4/tests/workbench-pages.test.mjs @@ -224,6 +224,14 @@ test("discovery and production screens expose mobile focus cards with next-step assert.match(cssMobile, /\.production-mobile-task-deck/); }); +test("mobile discovery prioritizes the selected-account task flow before the scrollable account list", () => { + const discovery = extractBetween(APP, "function renderDiscoveryScreen()", "function renderTrackingScreen()"); + assert.match(discovery, /mobile-discovery-priority/); + assert.match(discovery, /mobile-discovery-selected-summary/); + assert.match(discovery, /mobile-account-list/); + assert.match(discovery, /mobile-discovery-priority[\s\S]*mobile-account-list/); +}); + test("mobile heavy screens mark redundant desktop metric blocks for compact hiding", () => { const discovery = extractBetween(APP, "function renderDiscoveryScreen()", "function renderTrackingScreen()"); const tracking = extractBetween(APP, "function renderTrackingScreen()", "function renderAutomationScreen()");