diff --git a/CONSTITUTION.md b/CONSTITUTION.md
index 65e97b3..cdf5988 100644
--- a/CONSTITUTION.md
+++ b/CONSTITUTION.md
@@ -2,7 +2,7 @@
> 本文件定義專案開發的核心準則與不可違反的規範
> **建立日期**: 2026-01-12
-> **當前版本**: V10.39 (Vendor stockout import v2 feature flag)
+> **當前版本**: V10.40 (Frontend V2 production default)
> **最後更新**: 2026-05-01
---
diff --git a/app.py b/app.py
index a5241c9..e566a82 100644
--- a/app.py
+++ b/app.py
@@ -95,8 +95,8 @@ except Exception as e:
sys_log.error(f"無法檢測磁碟空間: {e}")
# 🚩 系統版本定義 (備份與顯示用)
-# 🚩 2026-05-01 V10.39: Vendor stockout import v2 feature flag
-SYSTEM_VERSION = "V10.39"
+# 🚩 2026-05-01 V10.40: Frontend V2 as production default
+SYSTEM_VERSION = "V10.40"
# ==========================================
# 🔒 SQL Injection 防護函數
diff --git a/routes/dashboard_routes.py b/routes/dashboard_routes.py
index 2f68bf2..cd5b891 100644
--- a/routes/dashboard_routes.py
+++ b/routes/dashboard_routes.py
@@ -619,7 +619,7 @@ def index():
category_name = item['record'].product.category
item['category_color'] = get_color_for_string(category_name)
- template_name = 'dashboard_v2.html' if request.args.get('ui') == 'v2' else 'dashboard.html'
+ template_name = 'dashboard.html' if request.args.get('ui') == 'legacy' else 'dashboard_v2.html'
return render_template(template_name,
total_products=total_products_history,
diff --git a/routes/edm_routes.py b/routes/edm_routes.py
index fed91d4..b6d903e 100644
--- a/routes/edm_routes.py
+++ b/routes/edm_routes.py
@@ -321,7 +321,7 @@ def edm_dashboard():
scheduler_stats = load_scheduler_stats()
now_taipei = datetime.now(TAIPEI_TZ)
- template_name = 'edm_dashboard_v2.html' if request.args.get('ui') == 'v2' else 'edm_dashboard.html'
+ template_name = 'edm_dashboard.html' if request.args.get('ui') == 'legacy' else 'edm_dashboard_v2.html'
return render_template(template_name,
promo_pages=promo_pages,
@@ -375,7 +375,7 @@ def festival_dashboard():
scheduler_stats = load_scheduler_stats()
- template_name = 'edm_dashboard_v2.html' if request.args.get('ui') == 'v2' else 'edm_dashboard.html'
+ template_name = 'edm_dashboard.html' if request.args.get('ui') == 'legacy' else 'edm_dashboard_v2.html'
return render_template(template_name,
promo_pages=promo_pages,
@@ -427,7 +427,7 @@ def mothers_day_dashboard():
scheduler_stats = load_scheduler_stats()
- template_name = 'edm_dashboard_v2.html' if request.args.get('ui') == 'v2' else 'edm_dashboard.html'
+ template_name = 'edm_dashboard.html' if request.args.get('ui') == 'legacy' else 'edm_dashboard_v2.html'
return render_template(template_name,
promo_pages=promo_pages,
@@ -479,7 +479,7 @@ def valentine_520_dashboard():
scheduler_stats = load_scheduler_stats()
- template_name = 'edm_dashboard_v2.html' if request.args.get('ui') == 'v2' else 'edm_dashboard.html'
+ template_name = 'edm_dashboard.html' if request.args.get('ui') == 'legacy' else 'edm_dashboard_v2.html'
return render_template(template_name,
promo_pages=promo_pages,
@@ -531,7 +531,7 @@ def labor_day_dashboard():
scheduler_stats = load_scheduler_stats()
- template_name = 'edm_dashboard_v2.html' if request.args.get('ui') == 'v2' else 'edm_dashboard.html'
+ template_name = 'edm_dashboard.html' if request.args.get('ui') == 'legacy' else 'edm_dashboard_v2.html'
return render_template(template_name,
promo_pages=promo_pages,
diff --git a/routes/vendor_routes.py b/routes/vendor_routes.py
index 88f3353..16a0d49 100644
--- a/routes/vendor_routes.py
+++ b/routes/vendor_routes.py
@@ -198,38 +198,38 @@ def _get_vendor_stockout_list_context():
def index():
"""廠商缺貨系統主頁"""
sys_log.info("[VendorStockout] 進入廠商缺貨系統主頁")
- if request.args.get('ui') == 'v2':
- return render_template(
- 'vendor_stockout_index_v2.html',
- active_page='vendor_stockout',
- stats=_get_vendor_dashboard_stats()
- )
- return render_template('vendor_stockout/index.html')
+ if request.args.get('ui') == 'legacy':
+ return render_template('vendor_stockout/index.html')
+ return render_template(
+ 'vendor_stockout_index_v2.html',
+ active_page='vendor_stockout',
+ stats=_get_vendor_dashboard_stats()
+ )
@vendor_bp.route('/import')
def import_page():
"""Excel 匯入頁面"""
sys_log.info("[VendorStockout] 進入匯入頁面")
- if request.args.get('ui') == 'v2':
- return render_template(
- 'vendor_stockout_import_v2.html',
- active_page='vendor_stockout'
- )
- return render_template('vendor_stockout/import.html')
+ if request.args.get('ui') == 'legacy':
+ return render_template('vendor_stockout/import.html')
+ return render_template(
+ 'vendor_stockout_import_v2.html',
+ active_page='vendor_stockout'
+ )
@vendor_bp.route('/list')
def list_page():
"""缺貨清單頁面"""
sys_log.info("[VendorStockout] 進入缺貨清單頁面")
- if request.args.get('ui') == 'v2':
- return render_template(
- 'vendor_stockout_list_v2.html',
- active_page='vendor_stockout',
- **_get_vendor_stockout_list_context()
- )
- return render_template('vendor_stockout/list.html')
+ if request.args.get('ui') == 'legacy':
+ return render_template('vendor_stockout/list.html')
+ return render_template(
+ 'vendor_stockout_list_v2.html',
+ active_page='vendor_stockout',
+ **_get_vendor_stockout_list_context()
+ )
@vendor_bp.route('/vendor-management')
diff --git a/templates/dashboard_v2.html b/templates/dashboard_v2.html
index 02122d4..279dde7 100644
--- a/templates/dashboard_v2.html
+++ b/templates/dashboard_v2.html
@@ -537,11 +537,11 @@