From e50715e789f1ab328b08d034128703990ebeb8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AD=90=E7=90=A6?= <95332614+wangziqi0409@users.noreply.github.com> Date: Wed, 21 Jan 2026 11:45:59 +0800 Subject: [PATCH] upd --- frontend/src/App.vue | 57 ++++++++++++-- frontend/src/styles/base.css | 100 ++++++++++++++++++++----- frontend/src/views/ActivityDetail.vue | 18 ++++- frontend/src/views/ActivityList.vue | 42 +++++++++-- frontend/src/views/AdminActivities.vue | 41 +++++----- frontend/src/views/LoginView.vue | 6 +- frontend/src/views/RegisterView.vue | 6 +- 7 files changed, 213 insertions(+), 57 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index ef36bc1..9176737 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -65,18 +65,22 @@ const handleLogout = async () => { diff --git a/frontend/src/styles/base.css b/frontend/src/styles/base.css index ccdd6aa..6a8ab1e 100644 --- a/frontend/src/styles/base.css +++ b/frontend/src/styles/base.css @@ -1,12 +1,23 @@ -@import url('https://fonts.googleapis.com/css2?family=ZCOOL+XiaoWei&family=Noto+Serif+SC:wght@400;600;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;700&family=Noto+Serif+TC:wght@400;500;700&display=swap'); :root { color-scheme: light; - --brand-ink: #1a1b24; - --brand-ember: #e24a2d; - --brand-ocean: #0f4c5c; - --brand-sand: #f6efe6; - --brand-mist: #e5eff1; + --brand-ink: #2a0f45; + --brand-ink-soft: #4c1d95; + --brand-ember: #f97316; + --brand-ocean: #7c3aed; + --brand-sand: #faf5ff; + --brand-mist: #efe9ff; + --brand-surface: #ffffff; + --brand-line: rgba(124, 58, 237, 0.16); + --radius-lg: 20px; + --radius-md: 14px; + --shadow-soft: 0 24px 44px rgba(44, 16, 91, 0.16); + --shadow-card: 0 14px 32px rgba(44, 16, 91, 0.12); + --color-primary-4: #a78bfa; + --color-primary-5: #8b5cf6; + --color-primary-6: #7c3aed; + --color-primary-7: #6d28d9; } * { @@ -15,12 +26,14 @@ body { margin: 0; - font-family: 'Noto Serif SC', 'ZCOOL XiaoWei', serif; + font-family: 'Noto Sans TC', 'Noto Serif TC', sans-serif; color: var(--brand-ink); + line-height: 1.6; background: - radial-gradient(1200px circle at 10% 10%, rgba(226, 74, 45, 0.15), transparent 50%), - radial-gradient(900px circle at 90% 20%, rgba(15, 76, 92, 0.18), transparent 50%), - linear-gradient(180deg, #fffdfb 0%, #f6efe6 45%, #eef5f6 100%); + radial-gradient(900px circle at 6% 2%, rgba(124, 58, 237, 0.22), transparent 60%), + radial-gradient(900px circle at 92% 6%, rgba(249, 115, 22, 0.2), transparent 55%), + radial-gradient(1200px circle at 50% 110%, rgba(167, 139, 250, 0.25), transparent 60%), + linear-gradient(180deg, #faf5ff 0%, #fff7ed 50%, #fef3c7 100%); min-height: 100vh; } @@ -31,7 +44,7 @@ body { .page-shell { max-width: 1200px; margin: 0 auto; - padding: 32px 20px 64px; + padding: 40px 20px 72px; } .section-title { @@ -39,24 +52,45 @@ body { font-weight: 700; margin: 0 0 12px; letter-spacing: 1px; + font-family: 'Noto Serif TC', 'Noto Sans TC', serif; } .section-subtitle { margin: 0 0 24px; - color: rgba(26, 27, 36, 0.7); + color: rgba(42, 15, 69, 0.68); } .hero-panel { - background: linear-gradient(135deg, rgba(15, 76, 92, 0.9), rgba(226, 74, 45, 0.85)); + background: linear-gradient(135deg, rgba(124, 58, 237, 0.92), rgba(249, 115, 22, 0.85)); color: #fff; - border-radius: 20px; - padding: 28px; - box-shadow: 0 20px 40px rgba(26, 27, 36, 0.18); + border-radius: var(--radius-lg); + padding: 30px; + box-shadow: var(--shadow-soft); + position: relative; + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.2); +} + +.hero-panel::before { + content: ''; + position: absolute; + inset: 0; + background: + radial-gradient(380px circle at 18% 22%, rgba(255, 255, 255, 0.22), transparent 60%), + radial-gradient(320px circle at 82% 18%, rgba(255, 255, 255, 0.18), transparent 60%); + opacity: 0.9; + pointer-events: none; +} + +.hero-panel > * { + position: relative; + z-index: 1; } .hero-panel h1 { margin: 0 0 8px; font-size: 32px; + font-family: 'Noto Serif TC', 'Noto Sans TC', serif; } .hero-panel p { @@ -67,7 +101,7 @@ body { .card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 18px; + gap: 22px; } .fade-in { @@ -85,6 +119,38 @@ body { } } +a:focus-visible, +button:focus-visible, +.arco-btn:focus-visible, +.arco-input:focus-visible, +.arco-select-view:focus-visible { + outline: 2px solid rgba(124, 58, 237, 0.5); + outline-offset: 2px; +} +.arco-card { + border-radius: var(--radius-lg); +} +.arco-table { + border-radius: var(--radius-lg); + overflow: hidden; + background: rgba(255, 255, 255, 0.92); + box-shadow: var(--shadow-card); +} +.arco-table-th { + background: rgba(239, 233, 255, 0.7); +} + +@media (prefers-reduced-motion: reduce) { + .fade-in { + animation: none; + } +} + +@media (max-width: 600px) { + .page-shell { + padding: 28px 16px 60px; + } +} diff --git a/frontend/src/views/ActivityDetail.vue b/frontend/src/views/ActivityDetail.vue index 1209718..bb52791 100644 --- a/frontend/src/views/ActivityDetail.vue +++ b/frontend/src/views/ActivityDetail.vue @@ -101,8 +101,10 @@ onMounted(fetchDetail); diff --git a/frontend/src/views/ActivityList.vue b/frontend/src/views/ActivityList.vue index 473812c..ea989e6 100644 --- a/frontend/src/views/ActivityList.vue +++ b/frontend/src/views/ActivityList.vue @@ -19,7 +19,7 @@