fix: align edge tool pages with growth workflow
All checks were successful
CD Pipeline / deploy (push) Successful in 1m23s
All checks were successful
CD Pipeline / deploy (push) Successful in 1m23s
This commit is contained in:
@@ -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 # 用於模板顯示
|
||||
|
||||
|
||||
@@ -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 爬蟲、趨勢資料、用戶管理、外部工具狀態與市場情報停用頁都改為短句,聚焦資料新鮮度、文案回收、權限治理與正式比價流程。 |
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
`;
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
<!-- 爬取方式選擇 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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()">
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user