From e40076ff25f5270c2110544665ffc44547d69424 Mon Sep 17 00:00:00 2001 From: liulong <18539103286> Date: Thu, 28 May 2026 17:20:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=B8=8D=E5=90=8C=E5=88=86=E8=BE=A8?= =?UTF-8?q?=E7=8E=87=E4=B8=8B=E7=9A=84=E8=87=AA=E9=80=82=E5=BA=94,?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=A1=B5=E9=9D=A2=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- txw-mhzc-web/src/pages/index/router/routes.js | 5 + .../index/styles/home-figma-variables.less | 40 +++- .../src/pages/index/styles/page-layout.less | 20 ++ .../index/styles/portal-landing-cards.less | 62 +++++ .../src/pages/index/views/fwsc/index.vue | 56 ++--- .../src/pages/index/views/home2/index.vue | 221 +++++++++++++++--- .../src/pages/index/views/hyzt/index.vue | 44 ++-- txw-mhzc-web/src/pages/index/views/main.vue | 36 ++- .../src/pages/index/views/qych/index.vue | 42 +--- txw-mhzc/graphify-out/.graphify_detect.json | 1 + txw-mhzc/graphify-out/.graphify_python | 1 + txw-mhzc/graphify-out/.graphify_uncached.txt | 154 ++++++++++++ txw-mhzc/graphify-out/cache/stat-index.json | 1 + 13 files changed, 535 insertions(+), 148 deletions(-) create mode 100644 txw-mhzc-web/src/pages/index/styles/portal-landing-cards.less create mode 100644 txw-mhzc/graphify-out/.graphify_detect.json create mode 100644 txw-mhzc/graphify-out/.graphify_python create mode 100644 txw-mhzc/graphify-out/.graphify_uncached.txt create mode 100644 txw-mhzc/graphify-out/cache/stat-index.json diff --git a/txw-mhzc-web/src/pages/index/router/routes.js b/txw-mhzc-web/src/pages/index/router/routes.js index 390e519..95d2c7a 100644 --- a/txw-mhzc-web/src/pages/index/router/routes.js +++ b/txw-mhzc-web/src/pages/index/router/routes.js @@ -240,6 +240,10 @@ export default [ name: 'hyzt', path: '/hyzt', component: hyzt, + meta: { + title: '行业专题', + landingHubScrollFooter: true, + }, }, { name: 'hydt', @@ -324,6 +328,7 @@ export default [ hasHome: true, breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '/fwsc' }], disableBack: true, + landingHubScrollFooter: true, }, }, { diff --git a/txw-mhzc-web/src/pages/index/styles/home-figma-variables.less b/txw-mhzc-web/src/pages/index/styles/home-figma-variables.less index f88d563..c757c29 100644 --- a/txw-mhzc-web/src/pages/index/styles/home-figma-variables.less +++ b/txw-mhzc-web/src/pages/index/styles/home-figma-variables.less @@ -518,12 +518,19 @@ --home-section-px: var(--page-content-align-x, 46px); --home-section-pt: @home-section-padding-top; --home-section-pb: @home-section-padding-bottom; - --home-news-section-min-h: @home-news-height; + /* + * 首页滚动容器 .content-wrap 已是整屏高,导航 fixed 叠在上方; + * section 须等于滚动区高度,不能再减 nav,否则底部会固定露出一条空白。 + * --portal-viewport-height 由 main.vue 注入,与 content-wrap.clientHeight 一致。 + */ + --home-vh: 100vh; + --home-vh: 100dvh; --home-news-section-pb: @home-news-content-bottom-gap; - --home-cta-section-min-h: @home-cta-height; - --home-section-min-h: 741px; - --home-section-pad-top: calc(var(--page-nav-height, @home-nav-height) + var(--home-section-pt)); - --home-hero-pad-top: calc(var(--page-nav-height, @home-nav-height) + @home-hero-content-padding-top); + --home-section-min-h: var(--portal-viewport-height, var(--home-vh)); + --home-news-section-min-h: var(--home-section-min-h); + --home-cta-section-min-h: var(--home-section-min-h); + --home-section-pad-top: calc(var(--page-nav-height, @home-nav-height) + clamp(32px, 5vh, @home-section-padding-top)); + --home-hero-pad-top: calc(var(--page-nav-height, @home-nav-height) + clamp(32px, 6vh, @home-hero-content-padding-top)); --home-hero-pad-bottom: @home-space-64; --home-title-color: @home-color-primary-dark; --home-body-color: @home-color-text-body; @@ -572,7 +579,7 @@ // ----------------------------------------------------------------------------- // 行业专题页首屏(Figma 150581:4100 / banner-bg 4101 / hyzt_banner 150679:365 / hyzt_content 4199) // ----------------------------------------------------------------------------- -@hyzt-landing-banner-height: 350px; +@hyzt-landing-banner-height: @portal-landing-banner-height; @hyzt-landing-bg-design-width: 1280px; @hyzt-landing-bg-height: 548px; @hyzt-landing-bg-offset-top: -34px; @@ -586,17 +593,27 @@ @hyzt-landing-title-accent: @home-color-secondary-green; @hyzt-landing-title-sub: @home-color-primary-dark; @hyzt-landing-title-border: 4px solid @home-color-secondary-green; -@hyzt-landing-cards-overlap: 93px; -@hyzt-landing-cards-pt: 60px; +/* 与服务中心 fwsc 首屏卡片区一致:Banner 350px + overlap 120 + padding-top 60 */ +@portal-landing-banner-height: 350px; +@portal-landing-cards-overlap: 120px; +@portal-landing-cards-overlap-md: 72px; +@portal-landing-cards-overlap-sm: 32px; +@portal-landing-cards-pt: 60px; +@portal-landing-cards-pb: 80px; +@hyzt-landing-cards-overlap: @portal-landing-cards-overlap; +@hyzt-landing-cards-pt: @portal-landing-cards-pt; @hyzt-landing-cards-px: 30px; -@hyzt-landing-cards-pb: 80px; +@hyzt-landing-cards-pb: @portal-landing-cards-pb; @hyzt-landing-cards-gap: 24px; @hyzt-landing-card-radius: 16px; @hyzt-landing-card-padding: 28px; @hyzt-landing-card-col-gap: 20px; +/* 与服务中心四宫格卡片同高(page-layout --portal-service-card-min-height) */ +@portal-landing-card-min-height: 268px; +@hyzt-landing-card-min-height: @portal-landing-card-min-height; @hyzt-landing-card-title-size: 22px; -@hyzt-landing-card-desc-size: 16px; -@hyzt-landing-card-desc-min-h: 63px; +@hyzt-landing-card-desc-size: 14px; +@hyzt-landing-card-desc-min-h: 0; @hyzt-landing-card-desc-color: @home-color-text-secondary; @hyzt-landing-card-desc-pt: 14px; @hyzt-landing-card-header-pb: 20px; @@ -635,6 +652,7 @@ @qych-landing-card-title-size: @hyzt-landing-card-title-size; @qych-landing-card-desc-size: @hyzt-landing-card-desc-size; @qych-landing-card-desc-min-h: @hyzt-landing-card-desc-min-h; +@qych-landing-card-min-height: @hyzt-landing-card-min-height; @qych-landing-card-desc-color: @hyzt-landing-card-desc-color; @qych-landing-card-desc-pt: @hyzt-landing-card-desc-pt; @qych-landing-card-header-pb: @hyzt-landing-card-header-pb; diff --git a/txw-mhzc-web/src/pages/index/styles/page-layout.less b/txw-mhzc-web/src/pages/index/styles/page-layout.less index c56cb7b..c66e6b9 100644 --- a/txw-mhzc-web/src/pages/index/styles/page-layout.less +++ b/txw-mhzc-web/src/pages/index/styles/page-layout.less @@ -161,6 +161,26 @@ background: #f6f7fa; } +/* 首屏落地页:首屏占满滚动区,页脚在下滑后出现(勿用 flex:1 把页脚吸到首屏底) */ +.content-wrap--landing-hub { + background: #f6f7fa; +} + +.content-wrap--landing-hub .portal-page-stack--landing-hub { + min-height: auto; +} + +.content-wrap--landing-hub .portal-page-stack--landing-hub .portal-route-outlet { + flex: 0 0 auto; + min-height: var(--portal-scroll-height, 100%); +} + +.content-wrap--landing-hub .portal-page-stack--landing-hub .portal-page-shell { + box-sizing: border-box; + min-height: var(--portal-scroll-height, 100%); + background: #f6f7fa; +} + /* 短页:栈高度至少铺满滚动区,页脚贴底;长页:随内容增高,不在页脚后留白 */ .portal-page-stack { display: flex; diff --git a/txw-mhzc-web/src/pages/index/styles/portal-landing-cards.less b/txw-mhzc-web/src/pages/index/styles/portal-landing-cards.less new file mode 100644 index 0000000..7672078 --- /dev/null +++ b/txw-mhzc-web/src/pages/index/styles/portal-landing-cards.less @@ -0,0 +1,62 @@ +// ============================================================================= +// 落地页服务卡片 — 与服务中心四宫格同高、同内部结构 +// 用法:在 .services-section 内 @import 后调用 .portal-landing-card-shell(); +// ============================================================================= + +.portal-landing-card-shell() { + .service-card { + display: flex; + flex-direction: column; + box-sizing: border-box; + min-height: var(--portal-service-card-min-height, @portal-landing-card-min-height); + height: var(--portal-service-card-min-height, @portal-landing-card-min-height); + } + + .service-card-inner { + display: flex; + flex: 1 1 auto; + flex-direction: column; + width: 100%; + height: 100%; + min-height: 0; + padding: @hyzt-landing-card-padding; + box-sizing: border-box; + } + + .service-card-header { + flex-shrink: 0; + padding-bottom: @hyzt-landing-card-header-pb; + margin-bottom: @hyzt-landing-card-header-pb; + border-bottom: 1px solid #f0f0f0; + } + + .service-card-desc { + flex: 1 1 auto; + min-height: 0; + margin: 0 0 24px; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + line-clamp: 3; + } + + .service-card-buttons { + flex-shrink: 0; + } +} + +.portal-landing-card-shell-reset() { + .service-card, + .service-card-inner { + min-height: auto; + height: auto; + } + + .service-card-desc { + display: block; + overflow: visible; + -webkit-line-clamp: unset; + line-clamp: unset; + } +} diff --git a/txw-mhzc-web/src/pages/index/views/fwsc/index.vue b/txw-mhzc-web/src/pages/index/views/fwsc/index.vue index 0209eb7..b7cb449 100644 --- a/txw-mhzc-web/src/pages/index/views/fwsc/index.vue +++ b/txw-mhzc-web/src/pages/index/views/fwsc/index.vue @@ -116,11 +116,19 @@ export default { diff --git a/txw-mhzc-web/src/pages/index/views/main.vue b/txw-mhzc-web/src/pages/index/views/main.vue index ebe241e..643b598 100644 --- a/txw-mhzc-web/src/pages/index/views/main.vue +++ b/txw-mhzc-web/src/pages/index/views/main.vue @@ -2,7 +2,12 @@