diff --git a/src/app/cases/[caseId]/page.tsx b/src/app/cases/[caseId]/page.tsx new file mode 100644 index 0000000..c84c983 --- /dev/null +++ b/src/app/cases/[caseId]/page.tsx @@ -0,0 +1,11 @@ +import { CaseDetail } from "../../../components/cases/case-detail"; + +export default async function CaseDetailPage({ + params, +}: { + params: Promise<{ caseId: string }>; +}) { + const { caseId } = await params; + return ; +} + diff --git a/src/app/cases/page.tsx b/src/app/cases/page.tsx new file mode 100644 index 0000000..792e7c0 --- /dev/null +++ b/src/app/cases/page.tsx @@ -0,0 +1,6 @@ +import { CaseList } from "../../components/cases/case-list"; + +export default function CasesPage() { + return ; +} + diff --git a/src/app/globals.css b/src/app/globals.css index d0546d3..1fcd297 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -116,10 +116,28 @@ h3 { color: #586174; } +.topbar-actions { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + justify-content: flex-end; +} + .api-key-field { min-width: min(16rem, 100%); } +.text-link { + color: #2f6fdd; + font-weight: 800; + text-decoration: none; +} + +.text-link:hover { + text-decoration: underline; +} + .app-tabs { display: flex; flex-wrap: wrap; @@ -574,15 +592,180 @@ h3 { white-space: pre-wrap; } +.case-toolbar { + align-items: end; + display: grid; + gap: 0.75rem; + grid-template-columns: minmax(16rem, 1fr) 12rem 12rem; +} + +.case-table { + border: 1px solid #dce2eb; + border-radius: 8px; + background: #ffffff; + overflow: hidden; +} + +.case-row { + align-items: center; + color: #172033; + display: grid; + gap: 0.75rem; + grid-template-columns: minmax(16rem, 1.45fr) 7rem minmax(8rem, 0.9fr) minmax(7rem, 0.75fr) minmax(7rem, 0.8fr) 6rem 7rem; + min-height: 4.25rem; + padding: 0.75rem 0.9rem; + text-decoration: none; +} + +.case-row + .case-row { + border-top: 1px solid #e5e9f0; +} + +.case-row:hover { + background: #f8fafc; +} + +.case-row-heading { + background: #f6f7f9; + color: #586174; + font-size: 0.76rem; + font-weight: 800; + min-height: auto; + text-transform: uppercase; +} + +.case-row span, +.case-row strong, +.case-row small { + min-width: 0; + overflow-wrap: anywhere; +} + +.case-row strong { + display: block; +} + +.case-row small { + color: #586174; + display: block; + font-size: 0.78rem; + margin-top: 0.2rem; +} + +.case-detail-grid { + align-items: start; + display: grid; + gap: 1rem; + grid-template-columns: minmax(17rem, 0.35fr) minmax(0, 1fr); +} + +.case-meta-grid { + display: grid; + gap: 0.55rem; + grid-template-columns: repeat(4, minmax(0, 1fr)); +} + +.case-meta-grid div { + background: #f6f7f9; + border: 1px solid #e5e9f0; + border-radius: 6px; + display: grid; + gap: 0.22rem; + min-width: 0; + padding: 0.55rem; +} + +.case-meta-grid span { + color: #667085; + font-size: 0.72rem; + font-weight: 800; + text-transform: uppercase; +} + +.case-meta-grid strong { + color: #172033; + font-size: 0.9rem; + overflow-wrap: anywhere; +} + +.case-version-list, +.case-publication-list, +.case-publication-form { + display: grid; + gap: 0.6rem; +} + +.case-version-item { + background: #ffffff; + border-color: #dce2eb; + color: #172033; + display: grid; + gap: 0.25rem; + min-height: 4rem; + padding: 0.65rem; + text-align: left; + white-space: normal; +} + +.case-version-item.selected { + border-color: #172033; + box-shadow: 0 0 0 2px rgba(23, 32, 51, 0.08); +} + +.case-version-item small { + color: #586174; +} + +.case-json-preview, +.case-markdown-preview { + background: #f6f7f9; + border: 1px solid #e5e9f0; + border-radius: 6px; + margin: 0; + overflow: auto; + padding: 0.8rem; + white-space: pre-wrap; +} + +.case-publication-list { + list-style: none; + margin: 0; + padding: 0; +} + +.case-publication-list li { + border: 1px solid #e5e9f0; + border-radius: 6px; + display: grid; + gap: 0.25rem; + padding: 0.65rem; +} + +.case-publication-list small { + color: #586174; +} + @media (max-width: 900px) { .workflow-grid, .copy-optimizer-grid, .two-col, .fact-summary-grid, - .calibration-metrics { + .calibration-metrics, + .case-toolbar, + .case-detail-grid, + .case-meta-grid { grid-template-columns: 1fr; } + .case-row, + .case-row-heading { + grid-template-columns: 1fr; + } + + .case-row-heading { + display: none; + } + .input-panel { grid-row: auto; } diff --git a/src/app/page.tsx b/src/app/page.tsx index 52079e5..5c48e55 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,5 +1,6 @@ "use client"; +import Link from "next/link"; import { useEffect, useState } from "react"; import { @@ -169,15 +170,20 @@ export default function Home() {

GEO 智能文章优化器

{message &&

{message}

} - +
+ + 案例库 + + +