feat:接口联调

This commit is contained in:
2026-07-21 11:09:17 +08:00
parent eea6319c41
commit 538194d8a5
39 changed files with 3553 additions and 3386 deletions
+146 -151
View File
@@ -106,6 +106,20 @@ const advantages = [
}
]
const introSequenceIcons = {
'human-content': '/images/advantages/intro-human-content.png',
'media-network': '/images/advantages/intro-media-network.png',
'closed-loop': '/images/advantages/intro-closed-loop.png',
'custom-service': '/images/advantages/intro-custom-service.png'
}
const capabilityImages = {
'human-content': '/images/advantages/capability-human-content.png',
'media-network': '/images/advantages/capability-media-network.png',
'closed-loop': '/images/advantages/capability-closed-loop.png',
'custom-service': '/images/advantages/capability-custom-service.png'
}
const comparisonRows = [
['核心目标', '抢排名、买点击', '蹭热度、抓眼球', '让品牌在 AI 推荐中被选中'],
['内容逻辑', '迎合搜索规则', '什么火就写什么', '真实可信,适配 AI 搜索与用户决策'],
@@ -120,14 +134,14 @@ const valueAddedServices = [
title: '创始人 / 企业 IP 打造',
text: '结合品牌调性与创始人特质,搭建差异化人设定位、内容脚本体系与长期更新规划,形成高辨识度的专属 IP。',
items: ['人设定位', '选题与脚本', '内容生产', '长期运营'],
image: '/images/lanhu/slices/home-group96-image22@2x.png'
image: '/images/advantages/founder-ip-visual.png'
},
{
number: '02',
title: '短视频与直播获客',
text: '从短视频批量产出到直播间常态化运营,配置主播、运营、投流与中控团队,覆盖拍摄、剪辑、投放和转化。',
items: ['短视频生产', '直播运营', '投流优化', '成交承接'],
image: '/images/lanhu/slices/home-group97-image23@2x.png'
image: '/images/advantages/short-video-live-visual.png'
}
]
@@ -239,10 +253,19 @@ onBeforeUnmount(() => animationContext?.revert())
</p>
</header>
<div class="intro-sequence">
<article v-for="advantage in advantages" :key="`intro-${advantage.id}`">
<article
v-for="advantage in advantages"
:key="`intro-${advantage.id}`"
:class="`intro-card--${advantage.id}`"
>
<span>{{ advantage.number }}</span
><strong>{{ advantage.short }}</strong>
<p>{{ advantage.metric }}</p>
<img
class="intro-sequence-icon"
:src="introSequenceIcons[advantage.id]"
:alt="`${advantage.short}图标`"
/>
</article>
</div>
</div>
@@ -293,20 +316,10 @@ onBeforeUnmount(() => animationContext?.revert())
<span>{{ advantage.short }}能力模型</span><small>YUNTU CAPABILITY MAP</small>
</header>
<div class="capability-map">
<div class="capability-center">
<small>{{ advantage.number }}</small
><strong>{{ advantage.short }}</strong>
</div>
<div
v-for="(item, itemIndex) in advantage.visual"
:key="item"
class="capability-node"
:class="`capability-node-${itemIndex + 1}`"
>
<span>0{{ itemIndex + 1 }}</span
><strong>{{ item }}</strong>
</div>
<i v-for="line in 4" :key="line" :class="`capability-line line-${line}`"></i>
<img
:src="capabilityImages[advantage.id]"
:alt="`${advantage.short}核心能力图`"
/>
</div>
<div class="capability-metric">
<strong>{{ advantage.metric }}</strong
@@ -777,8 +790,10 @@ onBeforeUnmount(() => animationContext?.revert())
gap: 14px;
}
.intro-sequence article {
position: relative;
min-height: 165px;
padding: 26px;
overflow: hidden;
padding: 26px 118px 26px 26px;
border-radius: 14px 5px 14px 5px;
background: #f2f7fd;
transition: 0.24s;
@@ -799,12 +814,58 @@ onBeforeUnmount(() => animationContext?.revert())
font-size: 17px;
}
.intro-sequence p {
position: relative;
z-index: 2;
margin: 7px 0 0;
color: #277fec;
font-size: 20px;
font-weight: 700;
font-variant-numeric: tabular-nums;
}
.intro-sequence span,
.intro-sequence strong {
position: relative;
z-index: 2;
}
.intro-sequence-icon {
position: absolute;
right: 16px;
bottom: 12px;
z-index: 1;
width: 108px;
max-height: 128px;
object-fit: contain;
pointer-events: none;
filter: drop-shadow(0 18px 26px rgba(40, 126, 235, 0.18));
transition: transform 0.24s;
}
.intro-sequence article:hover .intro-sequence-icon {
transform: translate3d(0, -4px, 0) scale(1.03);
}
.intro-card--human-content .intro-sequence-icon {
right: 22px;
bottom: 24px;
width: 66px;
max-height: 86px;
}
.intro-card--media-network .intro-sequence-icon {
right: 16px;
bottom: 18px;
width: 106px;
max-height: 112px;
}
.intro-card--closed-loop .intro-sequence-icon {
right: 12px;
bottom: 41x;
width: 100px;
max-height: 128px;
}
.intro-card--custom-service .intro-sequence-icon {
right: 2px;
bottom: -4px;
width: 130px;
max-height: 132px;
}
.advantage-story {
scroll-margin-top: 80px;
padding: 116px 0 132px;
@@ -919,20 +980,25 @@ onBeforeUnmount(() => animationContext?.revert())
letter-spacing: 0.1em;
}
.story-action {
display: inline-flex;
min-width: 164px;
min-height: 46px;
margin-top: 24px;
padding: 0 0 5px;
border-bottom: 1px solid #8eb9e9;
color: #247be8;
background: transparent;
padding: 0 26px;
align-items: center;
justify-content: center;
gap: 9px;
white-space: nowrap;
font-size: 12px;
font-weight: 600;
}
.story-action b {
margin-left: 8px;
transition: margin 0.2s;
.story-action :deep(.app-icon) {
width: 1em;
height: 1em;
transition: transform 0.2s;
}
.story-action:hover b {
margin-left: 13px;
.story-action:hover :deep(.app-icon) {
transform: translateX(4px);
}
.advantage-story-visual {
position: relative;
@@ -978,110 +1044,14 @@ onBeforeUnmount(() => animationContext?.revert())
position: absolute;
top: 52%;
left: 50%;
width: 410px;
height: 360px;
width: min(88%, 460px);
height: 400px;
transform: translate(-50%, -50%);
}
.capability-map::before {
position: absolute;
top: 50%;
left: 50%;
width: 280px;
height: 280px;
content: '';
border: 1px dashed rgba(55, 137, 232, 0.34);
border-radius: 50%;
transform: translate(-50%, -50%);
}
.capability-center {
position: absolute;
z-index: 3;
top: 50%;
left: 50%;
width: 142px;
height: 142px;
display: grid;
place-content: center;
justify-items: center;
border: 11px solid rgba(255, 255, 255, 0.6);
border-radius: 50%;
color: #fff;
background: linear-gradient(145deg, #3185ee, #50bce7);
box-shadow: 0 22px 42px rgba(36, 123, 225, 0.28);
transform: translate(-50%, -50%);
}
.capability-center small {
font-size: 9px;
opacity: 0.7;
}
.capability-center strong {
margin-top: 5px;
font-size: 17px;
}
.capability-node {
position: absolute;
z-index: 3;
min-width: 110px;
padding: 12px 14px;
border: 1px solid rgba(255, 255, 255, 0.92);
border-radius: 7px;
color: #4e7198;
background: rgba(255, 255, 255, 0.84);
box-shadow: 0 12px 25px rgba(54, 113, 185, 0.11);
text-align: center;
backdrop-filter: blur(8px);
}
.capability-node span {
display: block;
color: #91a9c3;
font-size: 8px;
}
.capability-node strong {
display: block;
margin-top: 3px;
font-size: 10px;
}
.capability-node-1 {
top: 0;
left: 50%;
transform: translateX(-50%);
}
.capability-node-2 {
top: 50%;
right: 0;
transform: translateY(-50%);
}
.capability-node-3 {
bottom: 0;
left: 50%;
transform: translateX(-50%);
}
.capability-node-4 {
top: 50%;
left: 0;
transform: translateY(-50%);
}
.capability-line {
position: absolute;
z-index: 1;
top: 50%;
left: 50%;
width: 2px;
height: 135px;
background: linear-gradient(#5aa1ed, transparent);
transform-origin: top;
}
.line-1 {
transform: rotate(180deg);
}
.line-2 {
transform: rotate(90deg);
}
.line-3 {
transform: rotate(0);
}
.line-4 {
transform: rotate(-90deg);
.capability-map img {
width: 100%;
height: 100%;
object-fit: contain;
}
.capability-metric {
position: absolute;
@@ -1140,7 +1110,7 @@ onBeforeUnmount(() => animationContext?.revert())
font-size: 11px;
}
.comparison-table-wrap thead th:last-child {
color: #fff;
color: #fff !important;
background: #3187ee;
}
.comparison-table-wrap thead span {
@@ -1193,17 +1163,26 @@ onBeforeUnmount(() => animationContext?.revert())
}
.value-added-image {
position: relative;
display: grid;
place-items: center;
overflow: hidden;
background: #e5f1ff;
background:
radial-gradient(circle at 28% 20%, rgba(255, 255, 255, 0.86) 0, rgba(255, 255, 255, 0) 31%),
radial-gradient(circle at 72% 32%, rgba(96, 207, 255, 0.36) 0, rgba(96, 207, 255, 0) 34%),
linear-gradient(135deg, #edf7ff 0%, #d8efff 48%, #f2edff 100%);
}
.value-added-image img {
width: 100%;
height: 100%;
position: relative;
z-index: 1;
width: min(108%, 560px);
height: min(92%, 370px);
display: block;
object-fit: cover;
object-fit: contain;
filter: drop-shadow(0 24px 34px rgba(34, 122, 229, 0.18));
}
.value-added-image > span {
position: absolute;
z-index: 2;
top: 24px;
left: 24px;
display: grid;
@@ -1327,10 +1306,13 @@ onBeforeUnmount(() => animationContext?.revert())
url('/images/lanhu/slices/home-group105-image31@2x.png') center / cover no-repeat;
}
.advantages-cta-content {
display: grid;
justify-items: center;
padding: 75px 0;
text-align: center;
}
.advantages-cta-content > p {
width: 100%;
margin: 0;
color: #237df0;
font-size: 12px;
@@ -1442,6 +1424,31 @@ onBeforeUnmount(() => animationContext?.revert())
}
.intro-sequence article {
min-height: 140px;
padding-right: 118px;
}
.intro-sequence-icon {
right: 14px;
bottom: 10px;
width: 96px;
max-height: 106px;
}
.intro-card--human-content .intro-sequence-icon {
right: 20px;
bottom: 20px;
width: 68px;
}
.intro-card--media-network .intro-sequence-icon {
right: 14px;
bottom: 16px;
width: 94px;
max-height: 100px;
}
.intro-card--closed-loop .intro-sequence-icon,
.intro-card--custom-service .intro-sequence-icon {
right: 10px;
bottom: 0;
width: 108px;
max-height: 112px;
}
.advantage-story-copy h2 {
font-size: 31px;
@@ -1450,25 +1457,9 @@ onBeforeUnmount(() => animationContext?.revert())
min-height: 430px;
}
.capability-map {
width: 310px;
width: min(92%, 320px);
height: 280px;
}
.capability-map::before {
width: 205px;
height: 205px;
}
.capability-center {
width: 105px;
height: 105px;
border-width: 8px;
}
.capability-node {
min-width: 83px;
padding: 9px;
}
.capability-line {
height: 100px;
}
.capability-metric {
right: 18px;
bottom: 17px;
@@ -1486,6 +1477,10 @@ onBeforeUnmount(() => animationContext?.revert())
.value-added-image {
min-height: 260px;
}
.value-added-image img {
width: min(112%, 430px);
height: 230px;
}
.value-added-copy {
padding: 32px 23px;
}