fix: align edge tool pages with growth workflow
All checks were successful
CD Pipeline / deploy (push) Successful in 1m23s

This commit is contained in:
ogt
2026-06-25 11:42:11 +08:00
parent 399218cbe7
commit 890af82d8b
12 changed files with 54 additions and 19 deletions

View File

@@ -402,7 +402,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '')
# ==========================================
# 系統版本與路徑
# ==========================================
SYSTEM_VERSION = "V10.666"
SYSTEM_VERSION = "V10.667"
LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log')
public_url = PUBLIC_URL # 用於模板顯示

View File

@@ -743,3 +743,4 @@ POSTGRES_HOST=momo-db
| 2026-06-25 | 系統、舊入口與觀測台頁首不可用長篇工程說明取代決策用途 | V10.664 起舊入口、系統管理與 AI 觀測台頁首統一改為短句聚焦資料新鮮度、成本、品質、RAG 與自癒如何支援 PChome 業績判斷。 |
| 2026-06-25 | 說明、空狀態與登入頁不可停在教學口吻,必須提示下一個業績動作 | V10.665 起 AI 助手說明、業績空狀態、缺貨舊首頁、登入頁與 PPT 視覺 QA 空狀態改為行動導向短句,避免使用者在說明文字中迷路。 |
| 2026-06-25 | PPT 視覺 QA 頁首不可依 runtime 條件退回描述型長句 | V10.666 起 PPT 視覺 QA 主頁首固定顯示「先確認簡報可預覽、可審核,再把問題交給修復流程」,避免 runtime 已就緒時失去行動導向。 |
| 2026-06-25 | 邊角工具頁不可只描述功能,必須說明如何支援 PChome 業績判斷 | V10.667 起 AI 生成歷史、PChome 爬蟲、趨勢資料、用戶管理、外部工具狀態與市場情報停用頁都改為短句,聚焦資料新鮮度、文案回收、權限治理與正式比價流程。 |

View File

@@ -92,7 +92,7 @@
<span class="ppt-run-status is-planned"><i class="fas fa-wrench me-1" aria-hidden="true"></i>AiderHeal</span>
<div>
<strong data-ppt-aider-status-title>{% if aider_heal_active_count %}AiderHeal 執行中 · {{ aider_heal_active_count }}{% else %}AiderHeal 待命{% endif %}</strong>
<small data-ppt-aider-status-meta>{% if aider_heal_active_count %}修復完成後會由 Telegram/Gitea/CD 回報。{% else %}有問題的審核紀錄可直接一鍵派工。{% endif %}</small>
<small data-ppt-aider-status-meta>{% if aider_heal_active_count %}修復完成後回報處理結果。{% else %}有問題的審核紀錄可直接派工。{% endif %}</small>
</div>
</div>
<div class="ppt-aider-job-list" data-ppt-aider-job-list>

View File

@@ -10,7 +10,7 @@
<i class="fas fa-history"></i>
AI 生成歷史
</h1>
<p class="ai-history-subtitle">查看、管理和複用資料庫內已生成的文案與操作紀錄</p>
<p class="ai-history-subtitle">回收有效文案,追蹤哪些銷售動作可再用</p>
</div>
<div class="ai-history-actions">
<a href="/ai_recommend" class="btn btn-primary ai-history-action-btn">
@@ -510,9 +510,9 @@ function renderHistory(items) {
container.innerHTML = `
<div class="text-center py-5">
<i class="fas fa-inbox fa-3x text-muted mb-3"></i>
<p class="text-muted">尚無生成記錄</p>
<p class="text-muted">尚無可回收文案</p>
<a href="/ai_recommend" class="btn btn-primary">
<i class="fas fa-magic me-1"></i>開始生成文案
<i class="fas fa-magic me-1"></i>產生銷售動作
</a>
</div>
`;

View File

@@ -31,8 +31,8 @@
<section class="external-tool-panel">
<div class="external-tool-panel__body">
<span class="external-tool-kicker">路由狀態</span>
<h2>入口已由 momo-pro 接管</h2>
<p>{{ tool.detail }}</p>
<h2>先回正式工作流</h2>
<p>目前先使用下方正式入口,避免決策資料分散。</p>
<dl class="external-tool-diagnostics">
<div>
<dt>正式導覽</dt>
@@ -71,7 +71,7 @@
<section class="external-tool-webcrumbs-preview" aria-label="Webcrumbs live preview">
<div class="external-tool-section-title">
<span class="external-tool-kicker">Live Plugin</span>
<h2>Shared UI Hub</h2>
<h2>共用 UI 預覽</h2>
</div>
<div class="external-tool-webcrumbs-grid">
{% for preview in tool.plugin_previews %}
@@ -86,7 +86,7 @@
<section class="external-tool-actions" aria-label="可用替代入口">
<div class="external-tool-section-title">
<span class="external-tool-kicker">可用入口</span>
<h2>先回到已上線的分析工作流</h2>
<h2>可用正式入口</h2>
</div>
<div class="external-tool-action-grid">
{% for action in tool.actions %}

View File

@@ -574,7 +574,7 @@
<p class="market-intel-kicker">MARKET INTEL</p>
<h1 class="market-intel-title">市場情報入口</h1>
<p class="market-intel-copy">
競品情報資料尚未入正式決策流程。請先從下方入口完成比價覆核、PChome 爬蟲檢查與 AI 觀測,讓商品決策維持在已驗證的資料來源上
市場情報尚未入正式決策;先用比價覆核、PChome 爬蟲與 AI 觀測台守住商品判斷
</p>
</div>
</header>
@@ -612,19 +612,19 @@
<section class="market-intel-panel" aria-labelledby="market-intel-flow-title">
<p class="market-intel-label">OPERATIONS</p>
<h2 id="market-intel-flow-title" class="market-intel-title">建議操作入口</h2>
<h2 id="market-intel-flow-title" class="market-intel-title">正式操作入口</h2>
<div class="market-intel-flow">
<article class="market-intel-flow-item">
<h3>PChome 比價覆核</h3>
<p>處理候選同款、單位價、既有保護與低信心候選,這是目前正式決策主入口</p>
<p>處理候選同款、單位價與低信心候選。</p>
</article>
<article class="market-intel-flow-item">
<h3>PChome 爬蟲</h3>
<p>檢查搜尋、候選取得與資料新鮮度,避免市場情報模組重複做同一件事</p>
<p>檢查搜尋、候選取得與資料新鮮度。</p>
</article>
<article class="market-intel-flow-item">
<h3>AI 觀測台</h3>
<p>監看 AI 呼叫、主機健康、RAG 命中與 PPT 產線,作為跨模組營運狀態來源</p>
<p>監看 AI 呼叫、主機健康、RAG 命中與 PPT 產線。</p>
</article>
</div>
<div class="market-intel-actions">

View File

@@ -127,7 +127,7 @@
<div class="container-fluid py-4 pchome-tool-page">
<header class="pchome-tool-head mb-4">
<h2><i class="fas fa-spider me-2"></i>PChome 24h 爬蟲</h2>
<p class="text-muted">爬取 PChome 24h 商品資料</p>
<p class="text-muted">補齊 PChome 商品資料,支援同款與價差判斷。</p>
</header>
<!-- 爬取方式選擇 -->

View File

@@ -397,7 +397,7 @@
</div>
<div class="alert alert-info sa-empty__tip">
<i class="fas fa-info-circle me-2" aria-hidden="true"></i>
<strong>提示:</strong>選擇任一條件後,系統將自動載入並顯示詳細的圖表與數據分析
<strong>提示:</strong>選擇條件後,直接看影響業績的圖表、分類與商品明細。
</div>
</div>
</section>

View File

@@ -153,7 +153,7 @@
<div class="mb-3">
<label for="categoryUrl" class="form-label"><i class="fas fa-link me-2"></i>分類 URL</label>
<input type="url" class="form-control" id="categoryUrl" name="url" required placeholder="https://www.momoshop.com.tw/...">
<div class="form-text">請輸入完整 MOMO 商城分類網址</div>
<div class="form-text">完整 MOMO 分類網址補齊比價來源。</div>
</div>
</form>
</div>

View File

@@ -45,7 +45,7 @@
<div class="container-fluid py-4 trends-page">
<div class="page-header">
<h1><i class="fas fa-chart-line me-2"></i>趨勢資料</h1>
<p>Google News、PTT、Dcard、YouTube 趨勢訊號</p>
<p>用外部趨勢挑選可主推商品與內容角度。</p>
</div>
<div class="row g-3 mb-3">

View File

@@ -231,7 +231,7 @@
<h2 class="mb-0">
<i class="fas fa-users-cog me-2"></i>用戶管理
</h2>
<p class="text-muted mb-0">管理系統用戶帳號權限</p>
<p class="text-muted mb-0">守住帳號權限,避免錯誤操作影響業績流程。</p>
</div>
<div class="col-auto">
<button class="btn btn-primary" onclick="showAddUserModal()">

View File

@@ -697,3 +697,37 @@ def test_help_empty_login_and_ppt_copy_are_action_oriented():
assert marker in text
for bad in forbidden:
assert bad not in text
def test_edge_tool_pages_keep_growth_decision_copy_concise():
from pathlib import Path
expected = {
"templates/ai_history.html": ["回收有效文案", "尚無可回收文案", "產生銷售動作"],
"templates/pchome_crawler.html": ["補齊 PChome 商品資料"],
"templates/trends.html": ["用外部趨勢挑選可主推商品"],
"templates/user_management.html": ["守住帳號權限"],
"templates/sales_analysis.html": ["直接看影響業績的圖表、分類與商品明細"],
"templates/settings.html": ["補齊比價來源"],
"templates/admin/ppt_audit_history.html": ["修復完成後回報處理結果", "可直接派工"],
"templates/external_tool_status.html": ["先回正式工作流", "避免決策資料分散", "可用正式入口"],
"templates/market_intel/disabled.html": ["市場情報尚未進入正式決策", "正式操作入口", "先處理候選同款"],
}
forbidden = [
"查看、管理和複用資料庫內已生成的文案與操作紀錄",
"尚無生成記錄",
"爬取 PChome 24h 商品資料",
"Google News、PTT、Dcard、YouTube 趨勢訊號",
"管理系統用戶帳號與權限",
"入口已由 momo-pro 接管",
"建議操作入口",
"請輸入完整的 MOMO 商城分類網址",
"選擇任一條件後,系統將自動載入並顯示詳細的圖表與數據分析",
]
for path, markers in expected.items():
text = Path(path).read_text(encoding="utf-8")
for marker in markers:
assert marker in text
for bad in forbidden:
assert bad not in text