From 19b3fcc0e36610cff1c34e5b483318bf752f59f7 Mon Sep 17 00:00:00 2001
From: Jafeng <2998840497@qq.com>
Date: Wed, 6 May 2026 16:27:46 +0800
Subject: [PATCH] =?UTF-8?q?style:=20=E6=B7=BB=E5=8A=A0=E6=A1=88=E4=BE=8B?=
=?UTF-8?q?=E9=83=A8=E5=88=86=E7=9A=84=E5=88=86=E7=B1=BB=E8=A1=8C=E6=98=A0?=
=?UTF-8?q?=E5=B0=84=E5=92=8C=E6=A0=B7=E5=BC=8F=EF=BC=8C=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E6=BB=9A=E5=8A=A8=E6=98=BE=E7=A4=BA=E6=95=88=E6=9E=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/CaseSection.vue | 12 +++++++-
src/styles/theme.css | 50 ++++++++++++++++++++++++++++++++--
2 files changed, 58 insertions(+), 4 deletions(-)
diff --git a/src/components/CaseSection.vue b/src/components/CaseSection.vue
index 18a83c1..5476ae9 100644
--- a/src/components/CaseSection.vue
+++ b/src/components/CaseSection.vue
@@ -6,6 +6,14 @@ import SectionTitle from './SectionTitle.vue'
const active = ref(caseCategories[0])
const filteredCases = computed(() => cases.filter(item => item.category === active.value))
const activeIndex = computed(() => caseCategories.findIndex(category => category === active.value))
+const categoryLineMap = {
+ 国家医学中心: ['国家医学', '中心'],
+ 公立医院: ['公立医院'],
+ 妇幼保健客户: ['妇幼保健', '客户'],
+ 医疗集团客户: ['医疗集团', '客户']
+}
+
+const getCategoryLines = (category) => categoryLineMap[category] ?? [category]
const selectCategory = (category) => {
active.value = category
@@ -56,7 +64,9 @@ const handleCategoryKeydown = (event, index) => {
@click="selectCategory(category)"
@keydown="handleCategoryKeydown($event, index)"
>
- {{ category }}
+
+ {{ line }}
+
diff --git a/src/styles/theme.css b/src/styles/theme.css
index 31e5eca..9b3e1a4 100644
--- a/src/styles/theme.css
+++ b/src/styles/theme.css
@@ -56,6 +56,21 @@ button {
overflow: hidden;
}
+.reveal-on-scroll {
+ opacity: 0;
+ transform: translateY(22px);
+ transition:
+ opacity 0.62s ease,
+ transform 0.62s cubic-bezier(0.22, 1, 0.36, 1),
+ box-shadow 0.2s ease;
+ transition-delay: var(--reveal-delay, 0ms);
+}
+
+.reveal-on-scroll.is-visible {
+ opacity: 1;
+ transform: translateY(0);
+}
+
.site-header {
position: sticky;
top: 0;
@@ -735,6 +750,12 @@ button {
display: none;
}
+.case-filter-text {
+ display: inline-grid;
+ place-items: center;
+ gap: 1px;
+}
+
.case-card {
height: 116px;
display: flex;
@@ -1090,14 +1111,15 @@ button {
position: relative;
z-index: 2;
min-width: 0;
- min-height: 40px;
- padding: 0 6px;
+ min-height: 42px;
+ padding: 0 2px;
border-color: transparent;
border-radius: 12px;
background: transparent;
font-size: 13px;
- line-height: 1.25;
+ line-height: 1.2;
white-space: normal;
+ word-break: keep-all;
box-shadow: none;
}
.case-filter-btn.active {
@@ -1212,6 +1234,7 @@ button {
min-height: 112px;
gap: 15px;
padding: 18px;
+ animation: case-card-in 0.32s ease both;
}
.case-logo-slot {
flex-basis: 88px;
@@ -1277,3 +1300,24 @@ button {
line-height: 1.25;
}
}
+
+@keyframes case-card-in {
+ from {
+ opacity: 0;
+ transform: translateY(10px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .reveal-on-scroll,
+ .case-card {
+ animation: none;
+ opacity: 1;
+ transform: none;
+ transition: none;
+ }
+}