From 7c37f066e8521e008531c6fbc308557aca7344c7 Mon Sep 17 00:00:00 2001 From: OoO Date: Sun, 17 May 2026 20:30:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B5=B1=E4=B8=80=E8=88=8A=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=E6=96=B0=E7=89=88=E8=A8=AD=E8=A8=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 6 +- config.py | 2 +- templates/403.html | 103 +- templates/base.html | 444 +--- .../components/_legacy_bridge_panel.html | 29 + templates/crawler_management.html | 442 +--- templates/dashboard.html | 1569 +------------- templates/edm_dashboard.html | 584 +----- templates/history.html | 92 +- templates/import.html | 369 +--- templates/maintenance.html | 257 +-- templates/send_email.html | 92 +- web/static/css/page-legacy-bridge.css | 118 ++ web/templates/vendor_stockout/history.html | 144 +- web/templates/vendor_stockout/import.html | 413 +--- web/templates/vendor_stockout/index.html | 335 +-- web/templates/vendor_stockout/list.html | 1815 +---------------- web/templates/vendor_stockout/send_email.html | 525 +---- .../vendor_stockout/vendor_management.html | 1056 +--------- 19 files changed, 439 insertions(+), 7956 deletions(-) create mode 100644 templates/components/_legacy_bridge_panel.html create mode 100644 web/static/css/page-legacy-bridge.css diff --git a/app.py b/app.py index c006dec..4c08258 100644 --- a/app.py +++ b/app.py @@ -129,9 +129,9 @@ else: TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates') STATIC_DIR = os.path.join(BASE_DIR, 'web/static') -# 檢查關鍵模板是否存在 -if not os.path.exists(os.path.join(TEMPLATE_DIR, 'dashboard.html')): - sys_log.warning(f"[Web] [Template] ⚠️ 警告: 找不到 dashboard.html | Path: {TEMPLATE_DIR}") +# 檢查關鍵模板是否存在。正式商品看板已遷移到 V3 shell。 +if not os.path.exists(os.path.join(TEMPLATE_DIR, 'dashboard_v2.html')): + sys_log.warning(f"[Web] [Template] ⚠️ 警告: 找不到 dashboard_v2.html | Path: {TEMPLATE_DIR}") app = Flask(__name__, template_folder=TEMPLATE_DIR, diff --git a/config.py b/config.py index 8a116db..f1a7cf4 100644 --- a/config.py +++ b/config.py @@ -320,7 +320,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '') # ========================================== # 系統版本與路徑 # ========================================== -SYSTEM_VERSION = "V10.151" +SYSTEM_VERSION = "V10.152" LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log') public_url = PUBLIC_URL # 用於模板顯示 diff --git a/templates/403.html b/templates/403.html index 5bb5127..a1382c6 100644 --- a/templates/403.html +++ b/templates/403.html @@ -1,87 +1,22 @@ - - - - - - 權限不足 - WOOO TECH - - - - - -
- -
403
-
權限不足
-

- 您沒有權限存取此頁面。
- 如需存取,請聯繫系統管理員。 -

- - 返回首頁 - -
- - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/templates/base.html b/templates/base.html index e48c829..6c9b474 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,432 +1,14 @@ - - - - - - - {% block title %}EwoooC{% endblock %} +{# + Compatibility base. + Older internal test templates used `base.html`; the production design system now + lives in `ewoooc_base.html`, so this file forwards legacy block names into the + V3 shell instead of carrying a second visual language. +#} +{% extends "ewoooc_base.html" %} - - - - - - - - - {% block extra_css %}{% endblock %} - - - - {% include 'components/_navbar.html' %} - - - {% block loading_overlay %} - {% include 'components/_loading.html' %} - {% endblock %} - - -
- {% block content %}{% endblock %} -
- - - {% block footer %}{% endblock %} - - - - - - - - - - - {% block extra_js %}{% endblock %} - - +{% block title %}{% block legacy_title %}EwoooC{% endblock %}{% endblock %} +{% block extra_css %}{% block legacy_extra_css %}{% endblock %}{% endblock %} +{% block extra_head %}{% block legacy_extra_head %}{% endblock %}{% endblock %} +{% block content %}{% block legacy_content %}{% endblock %}{% endblock %} +{% block extra_js %}{% block legacy_extra_js %}{% endblock %}{% endblock %} +{% block extra_scripts %}{% block legacy_extra_scripts %}{% endblock %}{% endblock %} diff --git a/templates/components/_legacy_bridge_panel.html b/templates/components/_legacy_bridge_panel.html new file mode 100644 index 0000000..fc9fb74 --- /dev/null +++ b/templates/components/_legacy_bridge_panel.html @@ -0,0 +1,29 @@ +
+
+
+
+ + {{ legacy_bridge_kicker|default('MIGRATED PAGE') }} +
+

{{ legacy_bridge_heading|default(legacy_bridge_title|default('頁面已升級')) }}

+

{{ legacy_bridge_body|default('這個舊入口已接到新版 EwoooC V3 設計系統。') }}

+ + +
+ +
+
diff --git a/templates/crawler_management.html b/templates/crawler_management.html index 9db3177..e3abc1c 100644 --- a/templates/crawler_management.html +++ b/templates/crawler_management.html @@ -1,426 +1,22 @@ - - - - - - 爬蟲管理 - MOMO Pro System - - - - -
-
-

🔧 爬蟲管理

-

管理系統爬蟲的啟用狀態和執行頻率

-
- -
- -
-
-
0
-
啟用中
-
-
-
0
-
已暫停
-
-
-
0
-
爬蟲總數
-
-
- -
- -
- -
-

💡 使用說明

-
    -
  • 切換開關可以啟用或停用爬蟲
  • -
  • 停用的爬蟲程式碼和資料會保留,隨時可以重新啟用
  • -
  • 變更執行頻率後,需要重啟排程器服務才會生效
  • -
  • 重啟排程器:sudo systemctl restart momo-scheduler
  • -
-
-
- - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/templates/dashboard.html b/templates/dashboard.html index d2ccb94..ebc24ad 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -1,1547 +1,22 @@ - - - - - - - - MOMO 價格監控系統 - - - - - - - - - - {% include 'components/_navbar.html' %} - -
- -
- -
-
-
-
- 商品監控概況 -
-
-
-
-
監控總數
-

{{ total_products | number_format }}

-
-
-
-
-
-
今日新增
-

{{ today_new_products }}

-
-
-
-
-
-
週增長
-

{{ week_new_products }}

-
-
-
-
-
-
穩定商品
-

{{ stable_count }}

-
7天未變價
-
-
-
- -
-
-
- - -
-
-
-
- 今日價格動態 -
- - -
-
-
漲價
-
{{ cnt_increase }}
-
件商品
-
-
-
降價
-
{{ cnt_decrease }}
-
件商品
-
-
-
下架
-
{{ today_delisted_count }}
-
件商品
-
- - -
-
平均漲幅
-
+${{ avg_increase | abs | int | number_format }}
-
{{ cnt_increase }} 件平均
-
-
-
平均跌幅
-
-${{ avg_decrease | abs | int | number_format }}
-
{{ cnt_decrease }} 件平均
-
-
-
活躍度
-
{{ activity_rate | round(1) }}%
-
{{ active_count }} 件有變動
-
- - - {% if most_active_category %} -
-
最活躍分類
-
{{ most_active_category }}
-
{{ most_active_count }} 件商品變動
-
- {% endif %} - - {% if max_change_item %} -
-
最大變動
-
- {% if max_change_value > 0 %}+{% endif %}${{ max_change_value | abs | int | - number_format }} -
-
- {{ max_change_item.record.product.name[:20] }}{% if - max_change_item.record.product.name|length > 20 %}...{% endif %} -
-
- {% endif %} -
-
-
-
-
- - -
-
-
-
-
- - -
-
-
- -
-
-
- - - -
-
-
-
-
- - -
-
-
-
-
商品列表 ({{ total_items }}筆)
- {% set momo_stats_list = scheduler_stats.get('momo_task', []) %} - {% if momo_stats_list %} - {% set latest_run = momo_stats_list[0] %} - {% set prev_run = momo_stats_list[1] if momo_stats_list|length > 1 else None %} -
- - 上次排程 ({{ latest_run.last_run.split(' ')[1] }}): - {% if latest_run.status == 'Success' %} - 掃描 {{ latest_run.scraped_count | default(0) }} 筆 - 新增 {{ latest_run.new_products | default(0) }} 項 - 成功 - {% else %} - 失敗 - {% endif %} - {% endif %} -
-
- -
-
- -
- - - - - - - - - - - - - - {% for item in items %} - - {% set badge_attr = 'style="background-color: ' ~ item.category_color ~ '; color: #333;"' %} - - - {% set tooltip_content %} -
- {% if item.today_changes %} - 📅 今日變價歷程:
- {% for change in item.today_changes|reverse %} - {% if change.diff > 0 %} - {% set color_class = 'text-danger' %} - {% set arrow = '▲' %} - {% else %} - {% set color_class = 'text-success' %} - {% set arrow = '▼' %} - {% endif %} - {% set diff_val = change.diff|abs %} - {{ change.time }}   ${{ change.price | number_format }} ({{ arrow }}{{ diff_val }})
- {% endfor %} - {% else %} - 今日價格無波動 - {% endif %} -
- {% endset %} - - - - - - - {% else %} - - - - {% endfor %} - -
- 分類 {% if - current_sort == 'category' %}{% else - %}{% endif %} - - 商品名稱 {% if - current_sort == 'name' %}{% else - %}{% endif %} - - 當天價格 {% if - current_sort == 'price' %}{% else - %}{% endif %} - - 昨日漲跌 - {% if current_sort == 'yesterday_change' %}{% else - %}{% endif %} - - 週漲跌 {% if - current_sort == 'week_change' %}{% else - %}{% endif %} - - 更新時間 {% if - current_sort == 'timestamp' %}{% else - %}{% endif %} - - 上架時間 -
{{ item.record.product.category }} - -
-
- {% if item.record.product.image_url %} - 商品圖 - {% else %} -
- 無圖
- {% endif %} -
-
- {% set safe_product_url = item.safe_momo_url or '#' %} - - {{ item.record.product.name }} - -
- - ID: {{ item.record.product.i_code }} - - {% if item.status == 'PRICE_UP' %} - 漲價 - {% elif item.status == 'PRICE_DOWN' %} - 降價 - {% elif item.status == 'DELISTED' %} - 下架 - {% endif %} -
-
-
-
- ${{ item.record.price | number_format }} - - {% if item.yesterday_diff != 0 %} - {% set old_price = item.record.price - item.yesterday_diff %} - {% set percent_change = (item.yesterday_diff / old_price * 100) | round(1) if old_price - > 0 else 0 %} -
- {{ '▲' if item.yesterday_diff > 0 else '▼' }} {{ - item.yesterday_diff | abs | number_format }} - ({{ percent_change }}%) -
- {% else %} - - - {% endif %} -
- {% if item.stats['7d_diff'] > 0 %} - +{{ item.stats['7d_diff'] | number_format }} - {% elif item.stats['7d_diff'] < 0 %} {{ item.stats['7d_diff'] | - number_format }} - {% else %} - - - {% endif %} - {{ item.record.timestamp.strftime('%m-%d %H:%M') }} - - {% if item.safe_created_at %} - {{ item.safe_created_at.strftime('%m-%d %H:%M') }} - {% else %} - - - {% endif %} -
- {% if search_query %} - 找不到與「{{ search_query }}」相關的商品 - {% else %} - 沒有符合條件的商品 - {% endif %} -
-
- - - {% if total_pages > 1 %} - - {% endif %} -
-
- - - - - - - - - - - - +{% set active_page = 'dashboard' %} +{% set legacy_bridge_title = '商品看板已升級' %} +{% set legacy_bridge_kicker = 'MIGRATED DASHBOARD' %} +{% set legacy_bridge_icon = 'fas fa-border-all' %} +{% set legacy_bridge_heading = '請使用新版商品看板' %} +{% set legacy_bridge_body = '舊版 dashboard.html 已停用,正式入口現在由 dashboard_v2.html 與 EwoooC V3 shell 負責。' %} +{% set legacy_bridge_target = '/' %} +{% set legacy_bridge_cta = '開啟商品看板' %} +{% set legacy_bridge_secondary_target = '/observability/overview' %} +{% set legacy_bridge_secondary_cta = 'AI 觀測台' %} +{% set legacy_bridge_meta = 'Legacy guard / dashboard.html' %} +{% extends "ewoooc_base.html" %} + +{% block title %}商品看板已升級 - EwoooC{% endblock %} + +{% block extra_css %} + +{% endblock %} + +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/templates/edm_dashboard.html b/templates/edm_dashboard.html index 427e12f..869c6e3 100644 --- a/templates/edm_dashboard.html +++ b/templates/edm_dashboard.html @@ -1,568 +1,22 @@ - - - - - - - MOMO 限時搶購 - - - - - - - {% include 'components/_navbar.html' %} - -
- - - -
-
- {# V-New: 使用動態頁面標題 #} -

🔥 {{ page_title }}

-

- 活動時間: {{ activity_time }} | - 最後更新: {{ last_update }} | - 商品總數: {{ total_edm_products }} -

-
-
- {# V-New: 根據不同頁面顯示不同按鈕 #} - {% if current_promo_page == 'edm' %} - - - {% elif current_promo_page == 'festival' %} - - {% endif %} -
-
- - {# V-New: 根據頁面類型讀取對應的排程統計 #} - {% set task_key = 'festival_task' if current_promo_page == 'festival' else 'edm_task' %} - {% set edm_stats_list = scheduler_stats.get(task_key, []) %} - {% if edm_stats_list %} - {% set latest_run = edm_stats_list[0] %} -
- - 排程統計: - 上次執行於 {{ latest_run.last_run }}, - 共記錄 {{ latest_run.get('changed_records', 0) }} 筆異動。 - 狀態: - {% if latest_run.status == 'Success' %} - 成功 - {% else %} - 失敗 - {% endif %} -
- {% endif %} - - - - -
- {% for slot, stats in slot_stats.items() %} - {% set slot_id = slugify(slot) %} - {% set pane_id = "pills-" ~ slot_id %} - {% set items = grouped_items.get(slot, []) %} -
- -
- -
-
商品列表 ({{ items|length }}筆)
-
- 新品: {{ stats['new'] }} - 漲價: {{ stats['up'] }} - 降價: {{ stats['down'] }} - 下架: {{ stats.get('delisted_last_run', 0) }} -
-
- - {% set current_endpoint = 'edm.' ~ current_promo_page ~ '_dashboard' %} -
- - - - - - - - - - - {% for item in items %} - - - - - - - {% endfor %} - -
分類 - {% set next_order_name = 'asc' if current_sort == 'name' and current_order == 'desc' else ('default' if current_sort == 'name' and current_order == 'asc' else 'desc') %} - - 商品資訊 {% if current_sort == 'name' %}{% else %}{% endif %} - - - {% set next_order_price = 'asc' if current_sort == 'price' and current_order == 'desc' else ('default' if current_sort == 'price' and current_order == 'asc' else 'desc') %} - - 價格 {% if current_sort == 'price' %}{% else %}{% endif %} - - - {% if current_promo_page == 'edm' %} - {% set next_order_qty = 'asc' if current_sort == 'remain_qty' and current_order == 'desc' else ('default' if current_sort == 'remain_qty' and current_order == 'asc' else 'desc') %} - - 倒數組數 {% if current_sort == 'remain_qty' %}{% else %}{% endif %} - - {% else %} - 狀態 - {% endif %} -
- {% if item.main_category %} - {% set badge_attr = 'style="background-color: ' ~ item.category_color ~ '; color: #333;"' %} - {{ item.main_category }} - {% else %} - 未分類 - {% endif %} - -
-
- {% if item.image_url %} - 商品圖 - {% else %} -
無圖
- {% endif %} -
-
- - {{ item.name }} - -
- - ID: {{ item.i_code }} - - {% if item.status_change == 'NEW' %} - NEW - {% elif item.status_change == 'PRICE_DOWN' %} - 降價 - {% elif item.status_change == 'PRICE_UP' %} - 漲價 - {% elif item.status_change == 'DELISTED' or item.status_change == 'SLOT_END' %} - 下架 - {% endif %} - - {% if item.discount_text %} - {{ item.discount_text }} - {% endif %} -
-
-
-
- {% if item.previous_price and item.price and item.previous_price != item.price %} - {% set diff = item.price - item.previous_price %} - {% set percent = ((diff|abs) / item.previous_price * 100) | round | int %} - - {% if diff < 0 %} -
- ▼ {{ (diff|abs) | number_format }} ({{ percent }}%)
- ${{ item.previous_price | number_format }} - ${{ item.price | number_format }} -
- {% else %} -
- ▲ {{ diff | number_format }} ({{ percent }}%)
- ${{ item.previous_price | number_format }} - ${{ item.price | number_format }} -
- {% endif %} - {% else %} - ${{ (item.price | number_format) if item.price is not none else 'N/A' }} - {% endif %} -
- {% if current_promo_page == 'edm' %} - {% set tooltip_content %} -
- 📈 當日銷售歷程:
- {% for h in item.qty_history %} - {{ h.time }}   剩 {{ h.qty }} 組
- {% endfor %} -
- {% endset %} -
1 %} - data-bs-toggle="tooltip" - data-bs-html="true" - title="{{ tooltip_content }}" - {% endif %}> - {% if item.remain_qty is not none %} - 🔥 {{ item.remain_qty | number_format }}組 - {% else %} - - - {% endif %} -
- {% else %} - 活動中 - {% endif %} -
-
-
-
- {% endfor %} -
-
- - - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/templates/history.html b/templates/history.html index 18a7bbb..5474101 100644 --- a/templates/history.html +++ b/templates/history.html @@ -1,76 +1,22 @@ - - - - - - - 發送歷史 - 廠商缺貨系統 - - - - - - {% include 'components/_navbar.html' %} - -
-
-
-

- 發送歷史 -

-
- - 此頁面功能將在 Phase 6 實作 (記錄查詢、統計圖表、重試機制) -
-
-
-
- - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/templates/import.html b/templates/import.html index aebf677..816c7e8 100644 --- a/templates/import.html +++ b/templates/import.html @@ -1,353 +1,22 @@ - - - - - - - Excel 匯入 - 廠商缺貨系統 - - - - - - - {% include 'components/_navbar.html' %} - -
- -
-
-

- Excel 匯入 -

-

上傳包含缺貨商品資料的 Excel 檔案,系統會自動檢測並匯入

-
-
- - -
-
-
- -
- -
-

拖曳檔案到此處或點擊選擇檔案

-

支援格式: Excel (.xlsx, .xls)

- -
- - - - - - - - -
-
- - - - - - -
- - - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/templates/maintenance.html b/templates/maintenance.html index 33431c7..c4aaf2f 100644 --- a/templates/maintenance.html +++ b/templates/maintenance.html @@ -1,241 +1,22 @@ - - +{% set active_page = 'settings' %} +{% set legacy_bridge_title = '系統維護中' %} +{% set legacy_bridge_kicker = 'SYSTEM MAINTENANCE' %} +{% set legacy_bridge_icon = 'fas fa-screwdriver-wrench' %} +{% set legacy_bridge_heading = '正在進行系統升級' %} +{% set legacy_bridge_body = '服務正在短暫維護與優化,完成後會恢復正常入口。這個頁面已套用新版字型、色彩與點陣規範。' %} +{% set legacy_bridge_target = '/health' %} +{% set legacy_bridge_cta = '檢查健康狀態' %} +{% set legacy_bridge_secondary_target = '/' %} +{% set legacy_bridge_secondary_cta = '回首頁' %} +{% set legacy_bridge_meta = '維護模式 / Asia Taipei' %} +{% extends "ewoooc_base.html" %} - - - - 系統維護中 - WOOO TECH - - - - - - -
-
-
- -
-
- WOOO TECH -
-

正在進行系統升級

-

為了提供更穩定的網站服務

-

系統正在進行必要的維護與優化

-

造成不便,敬請見諒

- -
- - 維護升級中 -
- - -
- - - - - \ No newline at end of file +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/templates/send_email.html b/templates/send_email.html index 4f2409e..895faba 100644 --- a/templates/send_email.html +++ b/templates/send_email.html @@ -1,76 +1,22 @@ - - - - - - - 郵件發送 - 廠商缺貨系統 - - - - - - {% include 'components/_navbar.html' %} - -
-
-
-

- 郵件發送 -

-
- - 此頁面功能將在 Phase 6 實作 (依廠商分組、郵件預覽、附件產生、SMTP 發送) -
-
-
-
- - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/web/static/css/page-legacy-bridge.css b/web/static/css/page-legacy-bridge.css new file mode 100644 index 0000000..ce58c92 --- /dev/null +++ b/web/static/css/page-legacy-bridge.css @@ -0,0 +1,118 @@ +.legacy-bridge { + min-height: calc(100vh - var(--momo-topbar-height) - 48px); + display: grid; + align-items: center; + color: var(--momo-text-primary); +} + +.legacy-bridge__panel { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(180px, 260px); + gap: var(--momo-space-5); + padding: clamp(var(--momo-space-5), 4vw, var(--momo-space-7)); + border: 1px solid var(--momo-border-strong); + border-radius: var(--momo-radius-lg); + background: + radial-gradient(circle at 10px 10px, rgba(42, 37, 32, 0.12) 1px, transparent 1.4px) 0 0 / 16px 16px, + var(--momo-bg-surface); +} + +.legacy-bridge__kicker { + display: inline-flex; + align-items: center; + gap: 8px; + margin-bottom: var(--momo-space-3); + color: var(--momo-page-accent-dark); + font-family: var(--momo-font-mono); + font-size: var(--momo-text-label); + font-weight: 800; + letter-spacing: 0.04em; +} + +.legacy-bridge h1 { + max-width: 820px; + margin: 0; + color: var(--momo-text-primary); + font-family: var(--momo-font-display); + font-size: clamp(1.8rem, 4vw, 3rem); + font-weight: 800; + line-height: 1.12; + letter-spacing: 0; +} + +.legacy-bridge p { + max-width: 760px; + margin: var(--momo-space-4) 0; + color: var(--momo-text-secondary); + font-size: clamp(1rem, 1.6vw, 1.16rem); + line-height: 1.8; +} + +.legacy-bridge__actions { + display: flex; + flex-wrap: wrap; + gap: var(--momo-space-3); + margin-top: var(--momo-space-5); +} + +.legacy-bridge__actions .btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + min-height: 40px; + padding-inline: var(--momo-space-4); +} + +.legacy-bridge__status { + align-self: stretch; + display: grid; + align-content: end; + gap: var(--momo-space-2); + min-height: 180px; + padding: var(--momo-space-4); + border: 1px solid var(--momo-border-light); + border-radius: var(--momo-radius-md); + background: var(--momo-bg-elevated); +} + +.legacy-bridge__status-label { + color: var(--momo-text-tertiary); + font-family: var(--momo-font-mono); + font-size: var(--momo-text-label-tiny); + font-weight: 800; + letter-spacing: 0.08em; +} + +.legacy-bridge__status strong { + color: var(--momo-text-primary); + font-family: var(--momo-font-mono); + font-size: var(--momo-text-headline); + font-weight: 800; + letter-spacing: 0; +} + +.legacy-bridge__status span:last-child { + color: var(--momo-text-secondary); + font-size: var(--momo-text-body-sm); +} + +@media (max-width: 760px) { + .legacy-bridge { + min-height: 0; + align-items: start; + } + + .legacy-bridge__panel { + grid-template-columns: 1fr; + padding: var(--momo-space-5); + } + + .legacy-bridge__status { + min-height: 120px; + } + + .legacy-bridge__actions .btn { + width: 100%; + } +} diff --git a/web/templates/vendor_stockout/history.html b/web/templates/vendor_stockout/history.html index d5f10d0..040ef8d 100644 --- a/web/templates/vendor_stockout/history.html +++ b/web/templates/vendor_stockout/history.html @@ -1,128 +1,22 @@ - - - - - - - 發送歷史 - 廠商缺貨系統 - - - - - - - {% include 'components/_navbar.html' %} - -
-
-

- 發送歷史 -

- - 返回主頁 - -
- -
-
-
- - 此頁面功能將在 Phase 6 實作 (記錄查詢、統計圖表、重試機制) -
-
-
-
- - - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/web/templates/vendor_stockout/import.html b/web/templates/vendor_stockout/import.html index d748386..39694cf 100644 --- a/web/templates/vendor_stockout/import.html +++ b/web/templates/vendor_stockout/import.html @@ -1,397 +1,22 @@ - - - - - - - Excel 匯入 - 廠商缺貨系統 - - - - - - - {% include 'components/_navbar.html' %} - -
- -
-
-

- Excel 匯入 -

-

上傳包含缺貨商品資料的 Excel 檔案,系統會自動檢測並匯入

-
- - 返回主頁 - -
- - -
-
-
- -
- -
-

拖曳檔案到此處或點擊選擇檔案

-

支援格式: Excel (.xlsx, .xls)

- -
- - - - - - - - -
-
- - - - - - -
- - - - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/web/templates/vendor_stockout/index.html b/web/templates/vendor_stockout/index.html index 2aa7a2e..e5b0dca 100644 --- a/web/templates/vendor_stockout/index.html +++ b/web/templates/vendor_stockout/index.html @@ -1,319 +1,22 @@ - - - - - - - 廠商缺貨通知系統 - WOOO TECH - - - - - - - {% include 'components/_navbar.html' %} - - -
- - - - -
- -
-
-
-
- -
-

缺貨清單

-

- 查看、編輯、篩選已匯入的缺貨商品,支援批次操作、發送郵件與排序 -

- - 查看清單 - -
-
-
- - -
-
-
-
- -
-

廠商管理

-

- 管理廠商基本資料與聯絡郵件,支援多個郵件地址設定 -

- - 管理廠商 - -
-
-
- - -
-
-
-
- -
-

發送歷史

-

- 查看郵件發送記錄、成功率統計,以及失敗項目的錯誤訊息 -

- - 查看記錄 - -
-
-
-
- - -
-
-
- 系統使用說明 -
-
-
-
基本流程
-
    -
  1. 下載 Excel 範本,填入缺貨商品資料
  2. -
  3. 在「缺貨清單」使用 Excel 匯入功能上傳檔案
  4. -
  5. 在「缺貨清單」中檢視並編輯資料
  6. -
  7. 在「廠商管理」中設定廠商郵件
  8. -
  9. 在「缺貨清單」勾選商品後發送郵件通知廠商
  10. -
  11. 在「發送歷史」中查看執行結果
  12. -
-
-
-
功能特色
-
    -
  • 自動偵測重複資料並標記
  • -
  • 支援一次匯入多筆缺貨記錄
  • -
  • 依廠商分組自動產生郵件附件
  • -
  • 郵件發送前可預覽內容
  • -
  • 完整的操作記錄與錯誤追蹤
  • -
  • 支援失敗郵件重新發送
  • -
-
-
-
-
-
- - - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/web/templates/vendor_stockout/list.html b/web/templates/vendor_stockout/list.html index 4657da0..7460c0a 100644 --- a/web/templates/vendor_stockout/list.html +++ b/web/templates/vendor_stockout/list.html @@ -1,1793 +1,22 @@ - - - - - - - 缺貨管理 - 廠商缺貨系統 - - - - - - - {% include 'components/_navbar.html' %} - -
-
-

- 缺貨管理 -

- - 返回主頁 - -
- - -
-
操作流程
-
-
-
-
1. 匯入 Excel
-
-
-
-
-
2. 勾選待發送
-
-
-
-
-
3. 發送郵件
-
-
-
-
-
4. 查看記錄
-
-
-
- - -
- -
- -
- -
- -
-
-
-
0
-
總缺貨筆數
-
-
-
-
-
0
-
待發送
-
-
-
-
-
0
-
已發送
-
-
-
-
-
0
-
涉及廠商數
-
-
-
- - -
- -
- - -
-
篩選條件
-
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
-
-
- - -
-
- - - - - -
-
-
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
批次廠商代碼廠商名稱商品ID商品名稱缺貨天數日均銷量可賣量狀態匯入時間操作
- -

載入中...

-
-
-
- - -
-
- 顯示 0-0 / 0 筆 -
- -
-
- - -
-
-
- -
-
-

- Excel 匯入 -

-

上傳包含缺貨商品資料的 Excel 檔案,系統會自動檢測並匯入

-
-
- - -
-
-
- -
- -
-

拖曳檔案到此處或點擊選擇檔案

-

支援格式: Excel (.xlsx, .xls)

- -
- - - - - - -
-
- - - - - - -
-
-
-
-
- - - - - - - - - - - - - - - +{% set active_page = 'vendor_stockout' %} +{% set legacy_bridge_title = '缺貨清單已升級' %} +{% set legacy_bridge_kicker = 'VENDOR OPERATIONS' %} +{% set legacy_bridge_icon = 'fas fa-list-check' %} +{% set legacy_bridge_heading = '請使用新版缺貨清單' %} +{% set legacy_bridge_body = '舊版 web vendor list 已停用,正式清單已改用新版桌手機響應式排版與新版 token。' %} +{% set legacy_bridge_target = '/vendor-stockout/list' %} +{% set legacy_bridge_cta = '開啟缺貨清單' %} +{% set legacy_bridge_secondary_target = '/vendor-stockout' %} +{% set legacy_bridge_secondary_cta = '廠商缺貨首頁' %} +{% set legacy_bridge_meta = 'Legacy guard / vendor_stockout/list.html' %} +{% extends "ewoooc_base.html" %} + +{% block title %}缺貨清單已升級 - EwoooC{% endblock %} + +{% block extra_css %} + +{% endblock %} + +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/web/templates/vendor_stockout/send_email.html b/web/templates/vendor_stockout/send_email.html index f8dee67..58aac71 100644 --- a/web/templates/vendor_stockout/send_email.html +++ b/web/templates/vendor_stockout/send_email.html @@ -1,509 +1,22 @@ - - - - - - - 郵件發送記錄 - 廠商缺貨系統 - - - - - - - {% include 'components/_navbar.html' %} - -
- -
-

- 郵件發送記錄 -

- - 返回主頁 - -
- - -
-
-
-
-
-
-
總發送數
-

0

-
-
- -
-
-
-
-
-
-
-
-
-
-
成功
-

0

-
-
- -
-
-
-
-
-
-
-
-
-
-
失敗
-

0

-
-
- -
-
-
-
-
-
-
-
-
-
-
成功率
-

0%

-
-
- -
-
-
-
-
-
- - -
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
-
-
- - -
-
- - - - - - - - - - - - - - - - - - -
ID批次編號廠商收件者主旨商品數狀態發送時間
- 載入中... -
-
- - -
-
- 共 0 筆記錄 -
- -
-
-
- - - - - - +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %} diff --git a/web/templates/vendor_stockout/vendor_management.html b/web/templates/vendor_stockout/vendor_management.html index f6d1deb..83b4a0b 100644 --- a/web/templates/vendor_stockout/vendor_management.html +++ b/web/templates/vendor_stockout/vendor_management.html @@ -1,1034 +1,22 @@ - - - - - - - 廠商管理 - 廠商缺貨系統 - - - - - - {% include 'components/_navbar.html' %} - -
-

- 廠商管理 -

- - -
- -
- -
- -
- -
-
-
-
0
-
總廠商數
-
-
-
-
-
0
-
郵件地址總數
-
-
-
-
-
0
-
平均每廠商郵件數
-
-
-
- - -
-
-
-
- - -
-
- - -
-
- -
-
-
-
- - -
-
- - - - - - - - - - - - - - - -
廠商代碼廠商名稱郵件地址郵件數量操作
- -

載入中...

-
-
-
- - -
-
- 顯示 0-0 / 0 筆 -
- -
-
- - -
-
-
- -
-
-
- -
- -
-

拖曳檔案到此處或點擊選擇檔案

-

支援格式: Excel (.xlsx, .xls)

-

- 必要欄位:來源供應商編號、來源供應商名稱
- 選填欄位:Mail(支援多個郵件用逗號或分號分隔) -

- -
- - - - - - - - -
-
- - - - - - -
-
-
-
-
- - - - - - - - - - - +{% set active_page = 'vendor_stockout' %} +{% set legacy_bridge_title = '廠商管理已升級' %} +{% set legacy_bridge_kicker = 'VENDOR OPERATIONS' %} +{% set legacy_bridge_icon = 'fas fa-address-book' %} +{% set legacy_bridge_heading = '請使用新版廠商管理' %} +{% set legacy_bridge_body = '舊版 web vendor management 已停用,正式入口已接到新版廠商工具頁與手機版友善表格。' %} +{% set legacy_bridge_target = '/vendor-stockout/vendor-management' %} +{% set legacy_bridge_cta = '開啟廠商管理' %} +{% set legacy_bridge_secondary_target = '/vendor-stockout/list' %} +{% set legacy_bridge_secondary_cta = '缺貨清單' %} +{% set legacy_bridge_meta = 'Legacy guard / vendor_stockout/vendor_management.html' %} +{% extends "ewoooc_base.html" %} + +{% block title %}廠商管理已升級 - EwoooC{% endblock %} + +{% block extra_css %} + +{% endblock %} + +{% block content %} +{% include 'components/_legacy_bridge_panel.html' %} +{% endblock %}