擴大全站響應式守門範圍
All checks were successful
CD Pipeline / deploy (push) Successful in 57s

This commit is contained in:
OoO
2026-05-13 23:17:57 +08:00
parent 83bcf49592
commit 42de2e4d3f
5 changed files with 190 additions and 5 deletions

View File

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

View File

@@ -16,17 +16,43 @@ const DEFAULT_BASE_URL = 'http://127.0.0.1:5003';
const DEFAULT_ROUTES = [
'/',
'/edm',
'/festival',
'/mothers_day',
'/valentine_520',
'/labor_day',
'/sales_analysis',
'/daily_sales',
'/monthly_summary_analysis',
'/growth_analysis',
'/ai_recommend',
'/ai_history',
'/ai_intelligence',
'/auto_import',
'/vendor-stockout/',
'/vendor-stockout/import',
'/vendor-stockout/list',
'/vendor-stockout/vendor-management',
'/vendor-stockout/send-email',
'/vendor-stockout/history',
'/settings',
'/system_settings',
'/ai_automation_smoke',
'/logs',
'/user_management',
'/change_password',
'/login_history',
'/pchome_crawler',
'/price_comparison',
'/trends',
'/notification_templates',
'/brand_assets',
'/market_intel',
'/market_intel/campaigns',
'/market_intel/products',
'/market_intel/matches',
'/market_intel/opportunities',
'/code-review/',
'/cicd',
'/observability/overview',
'/observability/agent_orchestration',
'/observability/business_intel',
@@ -264,7 +290,8 @@ async function main() {
let metrics = null;
try {
const response = await page.goto(url, { waitUntil: 'networkidle', timeout: options.timeoutMs });
const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: options.timeoutMs });
await page.waitForLoadState('networkidle', { timeout: Math.min(options.timeoutMs, 5000) }).catch(() => {});
status = response ? response.status() : 0;
metrics = await collectMetrics(page, options.maxOverflow);
if (new URL(metrics.finalUrl).pathname === '/login') {

View File

@@ -253,6 +253,95 @@
width: 100%;
}
}
@media (max-width: 768px) {
.ai-panel .card-header {
align-items: flex-start !important;
flex-direction: column;
gap: 10px;
}
.ai-panel .card-header > .d-flex {
display: grid !important;
grid-template-columns: 1fr;
width: 100%;
}
.ai-panel .card-header .form-select,
.ai-panel .card-header .form-control {
width: 100% !important;
}
.ai-table-scroll {
max-height: none;
overflow: visible;
}
#competitorTable,
#competitorTable tbody,
#competitorTable tr,
#competitorTable td {
display: block;
width: 100% !important;
}
#competitorTable thead {
display: none;
}
#competitorTable tr {
padding: 0.85rem 0.95rem;
border-top: 1px solid rgba(42, 37, 32, 0.08);
}
#competitorTable tr:first-child {
border-top: 0;
}
#competitorTable td {
display: grid;
grid-template-columns: 5.8rem minmax(0, 1fr);
gap: 0.65rem;
align-items: start;
padding: 0.36rem 0 !important;
border: 0 !important;
text-align: left !important;
overflow-wrap: anywhere;
white-space: normal;
}
#competitorTable td::before {
color: var(--momo-text-muted);
font-family: var(--momo-font-mono);
font-size: 0.68rem;
font-weight: 800;
letter-spacing: 0.06em;
text-transform: uppercase;
}
#competitorTable td[colspan] {
display: block;
}
#competitorTable td[colspan]::before {
content: none;
display: none;
}
#competitorTable td:nth-child(1)::before { content: "商品"; }
#competitorTable td:nth-child(2)::before { content: "MOMO"; }
#competitorTable td:nth-child(3)::before { content: "PChome"; }
#competitorTable td:nth-child(4)::before { content: "價差"; }
#competitorTable td:nth-child(5)::before { content: "標籤"; }
#competitorTable td:nth-child(6)::before { content: "分數"; }
#competitorTable td:nth-child(7)::before { content: "更新"; }
.ai-panel .card-footer {
align-items: flex-start;
flex-direction: column;
gap: 4px;
}
}
</style>
{% endblock %}

View File

@@ -120,6 +120,50 @@
.tab.active { background: #21262d; color: var(--text); border-color: var(--border); }
.tab-pane { display: none; }
.tab-pane.active { display: block; }
@media (max-width: 760px) {
.topbar {
flex-wrap: wrap;
padding: 10px 14px;
}
.topbar h1 {
font-size: 16px;
}
.layout {
grid-template-columns: 1fr;
height: auto;
min-height: calc(100vh - 49px);
overflow: visible;
}
.sidebar,
.main {
overflow: visible;
}
.sidebar {
border-right: 0;
border-bottom: 1px solid var(--border);
}
.tabs {
flex-wrap: wrap;
}
.tab {
flex: 1 1 150px;
min-width: 0;
text-align: center;
overflow-wrap: anywhere;
}
.empty {
padding: 28px 16px;
overflow-wrap: anywhere;
}
}
</style>
</head>
<body>

View File

@@ -7,9 +7,15 @@
.market-intel-status {
display: grid;
gap: 1rem;
min-width: 0;
max-width: 100%;
}
.market-intel-panel {
box-sizing: border-box;
min-width: 0;
max-width: 100%;
overflow: hidden;
border: 1px solid var(--momo-border, #d8c8aa);
border-radius: 8px;
background:
@@ -30,16 +36,19 @@
.market-intel-muted {
color: var(--momo-muted, #756a5b);
margin: 0;
overflow-wrap: anywhere;
}
.market-intel-flags {
display: grid;
gap: 0.75rem;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
grid-template-columns: repeat(auto-fit, minmax(min(180px, 100%), 1fr));
margin-top: 1rem;
min-width: 0;
}
.market-intel-flag {
min-width: 0;
border-left: 3px solid var(--momo-accent, #c8752d);
background: rgba(255, 250, 241, 0.84);
padding: 0.8rem 0.9rem;
@@ -99,6 +108,7 @@
}
.market-intel-pill {
min-width: 0;
background: rgba(255, 250, 241, 0.82);
border: 1px solid rgba(120, 83, 44, 0.14);
border-radius: 8px;
@@ -106,6 +116,7 @@
font-family: "JetBrains Mono", monospace;
font-size: 0.78rem;
font-weight: 700;
overflow-wrap: anywhere;
padding: 0.35rem 0.5rem;
}
@@ -120,9 +131,11 @@
.market-intel-candidate-list {
display: grid;
gap: 0.75rem;
min-width: 0;
}
.market-intel-candidate {
min-width: 0;
background: rgba(255, 250, 241, 0.82);
border: 1px solid rgba(120, 83, 44, 0.14);
border-left: 3px solid var(--momo-accent, #c8752d);
@@ -146,9 +159,11 @@
.market-intel-operation-list {
display: grid;
gap: 0.75rem;
min-width: 0;
}
.market-intel-operation {
min-width: 0;
background: rgba(255, 250, 241, 0.82);
border: 1px solid rgba(120, 83, 44, 0.14);
border-left: 3px solid var(--momo-accent, #c8752d);
@@ -173,13 +188,15 @@
.market-intel-check-list {
display: grid;
gap: 0.6rem;
min-width: 0;
}
.market-intel-deploy-grid {
display: grid;
gap: 0.9rem;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
margin-top: 1rem;
min-width: 0;
}
.market-intel-deploy-section-title {
@@ -199,6 +216,7 @@
display: flex;
gap: 0.65rem;
justify-content: space-between;
min-width: 0;
padding: 0.65rem 0.75rem;
}
@@ -218,6 +236,7 @@
display: block;
line-height: 1.45;
margin-top: 0.25rem;
overflow-wrap: anywhere;
}
.market-intel-check span {
@@ -228,14 +247,20 @@
white-space: nowrap;
}
@media (max-width: 520px) {
@media (max-width: 760px) {
.market-intel-preview-head,
.market-intel-check {
align-items: flex-start;
flex-direction: column;
}
.market-intel-panel {
padding: 1rem;
}
.market-intel-check span {
max-width: 100%;
overflow-wrap: anywhere;
white-space: normal;
}
}