yanghao hace 1 mes
padre
commit
b682ac3c3f

BIN
src/assets/images/banner.jpg


BIN
src/assets/images/newbg.jpg


BIN
src/assets/images/pbg.png


+ 76 - 8
src/components/layout/SideButtons.vue

@@ -1,17 +1,17 @@
 <script setup>
 import { ref } from "vue";
 import { Icon } from "@iconify/vue";
+import { useRouter } from "vue-router";
+const router = useRouter();
 const showSideButtons = ref(true);
 
 const handleFreeExperience = () => {
   // 免费体验按钮点击事件处理
-  console.log("免费体验点击");
-};
 
-const handleOnlineConsultation = () => {
-  // 在线咨询按钮点击事件处理
-  console.log("在线咨询点击");
+  router.push("/contact");
 };
+
+const showPhoneTooltip = ref(false);
 </script>
 
 <template>
@@ -27,16 +27,83 @@ const handleOnlineConsultation = () => {
 
     <button
       class="button-item online-consultation"
-      @click="handleOnlineConsultation"
-      aria-label="在线咨询"
+      @mouseenter="showPhoneTooltip = true"
+      @mouseleave="showPhoneTooltip = false"
+      aria-label="咨询热线"
     >
       <Icon icon="mynaui:headphones" width="24" height="24" />
-      <span>在线咨询</span>
+      <span>咨询热线</span>
     </button>
+
+    <Transition name="tooltip-fade">
+      <div v-if="showPhoneTooltip" class="phone-tooltip">
+        <div class="phone-tooltip-arrow"></div>
+        <div class="phone-tooltip-content">
+          <span style="color: #737373; font-size: 12px; font-weight: 400"
+            >咨询热线</span
+          >
+          <span class="phone-number">0546-608-1888</span>
+        </div>
+      </div>
+    </Transition>
   </div>
 </template>
 
 <style scoped>
+.phone-tooltip {
+  position: absolute;
+  right: 100%;
+  top: 50%;
+  transform: translateY(-50%);
+  margin-right: 12px;
+  z-index: 1001;
+}
+
+.phone-tooltip-arrow {
+  position: absolute;
+  right: -6px;
+  top: 50%;
+  transform: translateY(-50%);
+  width: 0;
+  height: 0;
+  border-left: 6px solid #ffffff;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+}
+
+.phone-tooltip-content {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  padding: 10px 16px;
+  background: #ffffff;
+
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.phone-tooltip-content .phone-number {
+  font-size: 16px;
+  color: #014198;
+  font-weight: 700;
+}
+
+.tooltip-fade-enter-active,
+.tooltip-fade-leave-active {
+  transition: all 0.3s ease;
+}
+
+.tooltip-fade-enter-from {
+  opacity: 0;
+  transform: translateY(-50%) translateX(10px);
+}
+
+.tooltip-fade-leave-to {
+  opacity: 0;
+  transform: translateY(-50%) translateX(10px);
+}
 .side-buttons {
   position: fixed;
   right: 10px;
@@ -55,6 +122,7 @@ const handleOnlineConsultation = () => {
   align-items: center;
   flex-direction: column;
   gap: 8px;
+  line-height: 15px;
   padding: 12px 12px;
   /* border-radius: 8px; */
   background: white;

+ 1 - 6
src/router/index.js

@@ -70,12 +70,7 @@ const router = createRouter({
       component: () => import('../views/cases/case3.vue'),
       meta: { title: '客户案例' },
     },
-    {
-      path: '/about',
-      name: 'about',
-      component: () => import('../views/AboutView.vue'),
-      meta: { title: '关于我们' },
-    },
+    
     {
       path: '/contact',
       name: 'contact',

+ 0 - 210
src/views/AboutView.vue

@@ -1,210 +0,0 @@
-<script setup>
-import PageHero from '../components/PageHero.vue'
-import jiaohuIconUrl from '../assets/images/jiaohu.png?url'
-import planIconUrl from '../assets/images/方案.png?url'
-import caseIconUrl from '../assets/images/案例.png?url'
-import Reveal from '../components/motion/Reveal.vue'
-
-const values = [
-  { title: '专业', desc: '以工业现场为第一原则,强调稳定、可控与可落地。' },
-  { title: '开放', desc: '开放接口与生态合作,让能力可复用、可扩展、可持续。' },
-  { title: '可信', desc: '安全合规、可审计、可追溯,构建企业级信任体系。' },
-  { title: '高效', desc: '通过组件化与模板化交付,加速试点与规模化复制。' },
-]
-
-const milestones = [
-  { year: '2024', title: '平台底座完善', desc: '完成 IIoT、数据治理与权限体系建设。' },
-  { year: '2025', title: '行业方案沉淀', desc: '形成离散、流程、园区等可复制交付模板。' },
-  { year: '2026', title: '门户能力升级', desc: '统一产品、方案与案例展示,提升对外服务效率。' },
-]
-
-const honors = [
-  { id: 1, title: '生态伙伴合作', src: jiaohuIconUrl },
-  { id: 2, title: '行业方案沉淀', src: planIconUrl },
-  { id: 3, title: '客户案例实践', src: caseIconUrl },
-  { id: 4, title: '安全与合规', src: planIconUrl },
-  { id: 5, title: '开放接口能力', src: jiaohuIconUrl },
-  { id: 6, title: '交付体系认证', src: caseIconUrl },
-]
-</script>
-
-<template>
-  <div>
-    <PageHero
-      kicker="关于我们"
-      title="以工业级能力,服务产业数字化升级"
-      subtitle="我们致力于打造专业、稳定、开放的工业互联网门户与平台能力,帮助企业把数据变成可持续运营的生产力。"
-    >
-      <template #actions>
-        <RouterLink class="btn btn-primary" to="/contact">联系咨询</RouterLink>
-        <RouterLink class="btn btn-ghost" to="/cases">查看案例</RouterLink>
-      </template>
-    </PageHero>
-
-    <section class="section">
-      <div class="container">
-        <div class="grid aboutGrid">
-          <Reveal as="div" class="card card-pad aboutCard hover-lift" :delay="0">
-            <div class="aboutTitle">我们做什么</div>
-            <div class="muted">
-              通过工业互联网平台能力,打通设备、数据与业务流程,提供从连接、治理到应用运营的全链路服务,覆盖制造、能源、园区与供应链等场景。
-            </div>
-          </Reveal>
-          <Reveal as="div" class="card card-pad aboutCard hover-lift" :delay="80">
-            <div class="aboutTitle">我们如何交付</div>
-            <div class="muted">
-              以“快速接入 + 数据治理 + 应用闭环”为方法论,先试点、再复制;以组件化与模板化交付,保障周期、质量与可运营性。
-            </div>
-          </Reveal>
-        </div>
-      </div>
-    </section>
-
-    <section class="section section--soft">
-      <div class="container">
-        <Reveal as="div" class="sectionHead" :delay="0">
-          <div>
-            <div class="section-kicker">价值观</div>
-            <h2 class="h2">专业、开放、可信、高效</h2>
-          </div>
-        </Reveal>
-
-        <div class="grid grid-4">
-          <Reveal
-            v-for="(v, idx) in values"
-            :key="v.title"
-            as="div"
-            class="card card-pad hover-lift"
-            :delay="60 + idx * 70"
-          >
-            <div class="valueTitle">{{ v.title }}</div>
-            <div class="muted">{{ v.desc }}</div>
-          </Reveal>
-        </div>
-      </div>
-    </section>
-
-    <section class="section">
-      <div class="container">
-        <Reveal as="div" class="sectionHead" :delay="0">
-          <div>
-            <div class="section-kicker">里程碑</div>
-            <h2 class="h2">持续演进的产品与能力</h2>
-          </div>
-        </Reveal>
-
-        <div class="grid grid-3">
-          <Reveal
-            v-for="(m, idx) in milestones"
-            :key="m.year"
-            as="div"
-            class="card card-pad milestone hover-lift"
-            :delay="60 + idx * 80"
-          >
-            <div class="year">{{ m.year }}</div>
-            <div class="milestoneTitle">{{ m.title }}</div>
-            <div class="muted">{{ m.desc }}</div>
-          </Reveal>
-        </div>
-      </div>
-    </section>
-
-    <section class="section section--soft">
-      <div class="container">
-        <Reveal as="div" class="sectionHead" :delay="0">
-          <div>
-            <div class="section-kicker">资质与生态</div>
-            <h2 class="h2">能力认证与合作伙伴</h2>
-            <div class="muted">示例占位图,可替换为你的真实资质证书与合作 Logo。</div>
-          </div>
-        </Reveal>
-
-        <div class="grid honorGrid">
-          <Reveal v-for="(h, idx) in honors" :key="h.id" as="div" class="honor hover-lift" :delay="60 + idx * 60">
-            <img :src="h.src" :alt="h.title" loading="lazy" />
-            <div class="honorTitle">{{ h.title }}</div>
-          </Reveal>
-        </div>
-      </div>
-    </section>
-  </div>
-</template>
-
-<style scoped>
-.sectionHead {
-  display: flex;
-  align-items: flex-end;
-  justify-content: space-between;
-  gap: 18px;
-  margin-bottom: 16px;
-}
-
-.aboutGrid {
-  grid-template-columns: repeat(2, minmax(0, 1fr));
-}
-
-.aboutTitle {
-  font-weight: 900;
-  letter-spacing: -0.02em;
-  margin-bottom: 8px;
-}
-
-.valueTitle {
-  font-weight: 900;
-  margin-bottom: 6px;
-}
-
-.milestone .year {
-  font-weight: 900;
-  color: var(--brand-700);
-  letter-spacing: -0.02em;
-}
-
-.milestoneTitle {
-  font-weight: 900;
-  margin-top: 6px;
-  margin-bottom: 6px;
-}
-
-.honorGrid {
-  grid-template-columns: repeat(3, minmax(0, 1fr));
-  gap: 14px;
-}
-
-.honor {
-  border: 1px solid var(--border);
-  border-radius: 18px;
-  background: #fff;
-  padding: 12px;
-  display: grid;
-  gap: 10px;
-}
-
-.honor img {
-  width: 100%;
-  display: block;
-  border-radius: 14px;
-  border: 1px solid var(--border);
-}
-
-.honorTitle {
-  font-weight: 850;
-  color: var(--slate-700);
-}
-
-@media (max-width: 960px) {
-  .aboutGrid {
-    grid-template-columns: 1fr;
-  }
-
-  .honorGrid {
-    grid-template-columns: repeat(2, minmax(0, 1fr));
-  }
-}
-
-@media (max-width: 520px) {
-  .honorGrid {
-    grid-template-columns: 1fr;
-  }
-}
-</style>

+ 1 - 0
src/views/HomeView.vue

@@ -107,6 +107,7 @@ const heroBottomTiles = [
   {
     icon: "lucide:compass",
     title: "设备运维",
+    desc: "设备全生命周期管理",
     url: b5,
   },
 ];

+ 153 - 57
src/views/ProductsView.vue

@@ -2,6 +2,10 @@
 import PageHero from "../components/PageHero.vue";
 import { Icon } from "@iconify/vue";
 import { onBeforeUnmount, onMounted, ref } from "vue";
+import platformCover from "../assets/images/pbg.png?url";
+import equipmentCover from "../assets/images/case2.png?url";
+import productionCover from "../assets/images/sence2.jpg?url";
+import qhseCover from "../assets/images/sence3.png?url";
 
 const activeTab = ref("platform");
 const tabBarRef = ref(null);
@@ -14,8 +18,9 @@ const pillars = [
   {
     key: "platform",
     title: "工业互联网平台",
-    lead: "油气专属底座,打通数采—数据—系统—AI,为全场景应用落地提供稳定支撑。",
+    lead: "油气专属底座,打通数采—数据—系统—AI,为全场景应用落地提供稳定支撑。",
     icon: "lucide:layers-3",
+    cover: platformCover,
     items: [
       {
         title: "油气专属底座 · 适配全场景需求",
@@ -36,6 +41,7 @@ const pillars = [
     title: "设备管理",
     lead: "围绕设备全生命周期,实现台账、巡检维保、预测维护与实时监控预警的闭环管理。",
     icon: "lucide:cpu",
+    cover: equipmentCover,
     items: [
       {
         title: "全维度设备管理 · 筑牢管控基础",
@@ -60,6 +66,7 @@ const pillars = [
     title: "生产管理",
     lead: "面向油气生产项目,贯通任务、计划、数据与报表,提升协同效率与过程可控性。",
     icon: "lucide:clipboard-check",
+    cover: productionCover,
     items: [
       {
         title: "项目任务管理 · 联动平台高效统筹",
@@ -84,14 +91,15 @@ const pillars = [
     title: "QHSE",
     lead: "以合规为底线,以数据为驱动,实现风险隐患闭环与作业全过程可控,助力管理升级。",
     icon: "lucide:shield-check",
+    cover: qhseCover,
     items: [
       {
-        title: "合规适配QHSE体系 · 筑牢安全底线",
-        desc: "全面贴合QHSE管理体系标准,覆盖风险隐患、作业许可、环境管理等核心模块,确保管理流程合规达标,契合油气行业安全环保监管要求,规避合规风险。",
+        title: "合规适配 QHSE 体系 · 筑牢安全底线",
+        desc: "全面贴合 QHSE 管理体系标准,覆盖风险隐患、作业许可、环境管理等核心模块,确保管理流程合规达标,契合油气行业安全环保监管要求,规避合规风险。",
       },
       {
         title: "多系统集成联动 · 实现协同管控",
-        desc: "深度集成设备管理、生产管理等系统,实现数据互通、流程联动,同步设备状态、作业计划等数据,打破系统壁垒,构建安全+生产+设备一体化管控体系。",
+        desc: "深度集成设备管理、生产管理等系统,实现数据互通、流程联动,同步设备状态、作业计划等数据,打破系统壁垒,构建安全 + 生产 + 设备一体化管控体系。",
       },
       {
         title: "全维度风险防控 · 保障作业安全",
@@ -169,7 +177,7 @@ onBeforeUnmount(() => {
     <PageHero
       kicker=""
       title="油气行业数智产品矩阵"
-      subtitle="以工业互联网平台为底座,覆盖设备管理、生产管理与QHSE,贯通数采、数据、流程与AI,支撑从勘探开发到生产运营的全场景数字化。"
+      subtitle="以工业互联网平台为底座,覆盖设备管理、生产管理与 QHSE,贯通数采、数据、流程与 AI,支撑从勘探开发到生产运营的全场景数字化。"
     >
       <template #actions>
         <RouterLink
@@ -222,12 +230,39 @@ onBeforeUnmount(() => {
               <p class="productLead">{{ p.lead }}</p>
             </header>
 
-            <div class="productBody">
-              <div v-for="it in p.items" :key="it.title" class="featureRow">
-                <div class="featureDot" aria-hidden="true"></div>
-                <div class="featureMain">
-                  <div class="featureTitle">{{ it.title }}</div>
-                  <div class="muted featureDesc">{{ it.desc }}</div>
+            <div v-if="p.key === 'platform'" class="platformLayout">
+              <div class="platformImage">
+                <img :src="p.cover" :alt="p.title" />
+              </div>
+              <div class="platformFeatures">
+                <div
+                  v-for="it in p.items"
+                  :key="it.title"
+                  class="platformFeature"
+                >
+                  <div class="featureDot" aria-hidden="true"></div>
+                  <div class="featureMain">
+                    <div class="featureTitle">{{ it.title }}</div>
+                    <div class="muted featureDesc">{{ it.desc }}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+
+            <div v-else class="tabContentLayout">
+              <div class="tabContentImage">
+                <img :src="p.cover" :alt="p.title" />
+              </div>
+              <div class="tabContentFeatures">
+                <div
+                  v-for="(it, idx) in p.items"
+                  :key="it.title"
+                  class="tabFeatureRow"
+                >
+                  <div class="tabFeatureMain">
+                    <div class="featureTitle">{{ it.title }}</div>
+                    <div class="muted featureDesc">{{ it.desc }}</div>
+                  </div>
                 </div>
               </div>
             </div>
@@ -240,8 +275,7 @@ onBeforeUnmount(() => {
       <div class="container">
         <div class="sectionHead">
           <div>
-            <!-- <div class="section-kicker">交付方式</div> -->
-            <h2 class="h2">灵活适配企业IT与合规边界</h2>
+            <h2 class="h2">灵活适配企业 IT 与合规边界</h2>
             <div class="muted">
               支持试点快速落地,也支持规模化推广与安全合规的长期运行。
             </div>
@@ -265,8 +299,6 @@ onBeforeUnmount(() => {
 </template>
 
 <style scoped>
-/* 在 <style scoped> 内部添加以下内容 */
-
 .productsView {
   --ink: rgba(2, 6, 23, 0.92);
   --tab-bg: rgba(255, 255, 255, 0.92);
@@ -288,10 +320,8 @@ onBeforeUnmount(() => {
   flex-direction: column;
 }
 
-/* Remove PageHero gradients for this page */
 :deep(.pageHero) {
   background-image: url("../assets/images/bg3.png");
-
   background-size: cover, cover;
   background-position: center, center;
   background-repeat: no-repeat, no-repeat;
@@ -300,6 +330,7 @@ onBeforeUnmount(() => {
   border-bottom: none;
   padding: 80px 0;
 }
+
 :deep(.pageHero__subtitle) {
   color: #4f5055;
 }
@@ -331,7 +362,6 @@ onBeforeUnmount(() => {
   justify-content: center;
   gap: 10px;
   color: var(--slate-700);
-
   letter-spacing: 0.01em;
   cursor: pointer;
   transition:
@@ -367,11 +397,6 @@ onBeforeUnmount(() => {
   background-size: 100% 2px;
 }
 
-.productStack {
-  display: grid;
-  gap: 26px;
-}
-
 .productSection {
   scroll-margin-top: calc(var(--header-h) + 84px);
   border: 0;
@@ -383,7 +408,6 @@ onBeforeUnmount(() => {
 
 .productHead {
   padding: 18px 18px 14px;
-
   text-align: center;
 }
 
@@ -394,18 +418,6 @@ onBeforeUnmount(() => {
   gap: 12px;
 }
 
-.productBadge {
-  font-size: 12px;
-  font-weight: 900;
-  letter-spacing: 0.08em;
-  color: rgba(2, 6, 23, 0.65);
-  background: rgba(15, 23, 42, 0.04);
-  border: 1px solid rgba(15, 23, 42, 0.08);
-  padding: 6px 10px;
-  border-radius: 999px;
-  flex: 0 0 auto;
-}
-
 .productTitle {
   letter-spacing: -0.02em;
   color: var(--ink);
@@ -417,38 +429,100 @@ onBeforeUnmount(() => {
 .productLead {
   margin-top: 10px;
   max-width: 92ch;
-
   text-align: center;
   margin-left: auto;
   margin-right: auto;
 }
 
-.productBody {
-  padding: 10px 2px 6px;
+.platformLayout {
+  margin-top: 40px;
   display: grid;
-  grid-template-columns: repeat(3, minmax(0, 1fr));
-  gap: 18px;
+  grid-template-columns: 1fr 1fr;
+  gap: 50px;
+  align-items: start;
+}
+
+.platformImage {
+  /* border-radius: 16px; */
+  overflow: hidden;
+  box-shadow: 0 12px 40px rgba(2, 6, 23, 0.12);
+}
+
+.platformImage img {
+  width: 100%;
+  height: auto;
+  object-fit: contain;
+  display: block;
+}
+
+.platformFeatures {
+  display: grid;
+  gap: 24px;
 }
 
-.featureRow {
+.platformFeature {
   display: grid;
   grid-template-columns: 22px 1fr;
   align-items: start;
-  gap: 16px;
-  padding: 22px 22px;
-  border: 0;
-  /* border-radius: 18px; */
+  gap: 10px;
+  padding: 22px;
+  padding-bottom: 0;
   background: #fff;
-  box-shadow: 0 16px 42px rgba(2, 6, 23, 0.12);
-  min-height: 178px;
+  /* border-radius: 16px; */
+  box-shadow: 0 8px 24px rgba(2, 6, 23, 0.08);
+  min-height: 160px;
   transition:
     transform 180ms ease,
     box-shadow 180ms ease;
 }
 
-.featureRow:hover {
+.platformFeature:hover {
   transform: translateY(-2px);
-  box-shadow: 0 22px 58px rgba(2, 6, 23, 0.16);
+  box-shadow: 0 12px 32px rgba(2, 6, 23, 0.12);
+}
+
+.tabContentLayout {
+  margin-top: 40px;
+  display: grid;
+  grid-template-columns: 1fr 1.2fr;
+  gap: 50px;
+  align-items: start;
+}
+
+.tabContentImage {
+  /* border-radius: 16px; */
+  overflow: hidden;
+  box-shadow: 0 12px 40px rgba(2, 6, 23, 0.12);
+  position: sticky;
+  top: calc(var(--header-h) + 100px);
+}
+
+.tabContentImage img {
+  width: 100%;
+  height: 500px;
+  object-fit: cover;
+  display: block;
+}
+
+.tabContentFeatures {
+  display: grid;
+  gap: 20px;
+}
+
+.tabFeatureRow {
+  padding: 28px;
+  background: #fff;
+  /* border-radius: 16px; */
+  box-shadow: 0 8px 24px rgba(2, 6, 23, 0.08);
+  min-height: 140px;
+  transition:
+    transform 180ms ease,
+    box-shadow 180ms ease;
+}
+
+.tabFeatureRow:hover {
+  transform: translateY(-2px);
+  box-shadow: 0 12px 32px rgba(2, 6, 23, 0.12);
 }
 
 .featureDot {
@@ -462,7 +536,8 @@ onBeforeUnmount(() => {
   margin-top: 4px;
 }
 
-.featureMain {
+.featureMain,
+.tabFeatureMain {
   min-width: 0;
 }
 
@@ -482,7 +557,7 @@ onBeforeUnmount(() => {
 }
 
 .deliverTitle {
-  font-weight: 900;
+  /* font-weight: 900; */
   margin-bottom: 6px;
 }
 
@@ -497,14 +572,34 @@ onBeforeUnmount(() => {
     grid-template-columns: repeat(2, minmax(0, 1fr));
   }
 
-  .productBody {
-    grid-template-columns: repeat(2, minmax(0, 1fr));
+  .platformLayout,
+  .tabContentLayout {
+    grid-template-columns: 1fr;
+    gap: 30px;
+  }
+
+  .tabContentImage {
+    position: static;
+  }
+
+  .tabContentImage img {
+    height: 300px;
   }
 }
 
 @media (max-width: 560px) {
-  .productBody {
-    grid-template-columns: 1fr;
+  .platformFeature,
+  .tabFeatureRow {
+    padding: 20px;
+    min-height: auto;
+  }
+
+  .featureTitle {
+    font-size: 18px;
+  }
+
+  .featureDesc {
+    font-size: 14px;
   }
 }
 
@@ -518,7 +613,8 @@ onBeforeUnmount(() => {
     transition: none !important;
   }
 
-  .featureRow {
+  .platformFeature,
+  .tabFeatureRow {
     transition: none !important;
     transform: none !important;
   }

+ 187 - 45
src/views/SolutionsView.vue

@@ -2,9 +2,11 @@
 import PageHero from "../components/PageHero.vue";
 import solutionsBgUrl from "../assets/images/bg.jpg?url";
 import Reveal from "../components/motion/Reveal.vue";
-
 import { Icon } from "@iconify/vue";
 import { onBeforeUnmount, onMounted, ref } from "vue";
+import platformCover from "../assets/images/p1.png?url";
+import equipmentCover from "../assets/images/sence3.png?url";
+import productionCover from "../assets/images/sence2.jpg?url";
 
 const activeTab = ref("platform");
 const tabBarRef = ref(null);
@@ -19,18 +21,19 @@ const pillars = [
     title: "设备升级改造能力",
     lead: "油气专属底座,打通“数采—数据—系统—AI”,为全场景应用落地提供稳定支撑。",
     icon: "lucide:layers-3",
+    cover: platformCover,
     items: [
       {
         title: "全景设备升级 适配平台接入",
-        desc: "依托工业互联网平台底座,提供油气领域全类型设备升级改造服务,针对老旧设备、传统设备,完成仪器仪表升级、PLC控制系统改造或加装,确保改造后设备可无缝接入平台,打通设备与平台的数据联通通道,为后续智能管控奠定基础",
+        desc: "依托工业互联网平台底座,提供油气领域全类型设备升级改造服务,针对老旧设备、传统设备,完成仪器仪表升级、PLC 控制系统改造或加装,确保改造后设备可无缝接入平台,打通设备与平台的数据联通通道,为后续智能管控奠定基础",
       },
       {
         title: "实时数采远程管控 提升作业便捷度",
         desc: "通过设备升级改造,结合平台数采能力,实现现场设备运行数据实时采集、同步上传,打破现场操作局限,支持远程对设备进行控制、参数调试,无需现场值守,降低人工成本,提升设备运维与操作的便捷性、高效性。",
       },
       {
-        title: "AI大模型赋能  智能动态调参",
-        desc: "升级后的设备联动工业互联网平台AI大模型算法,基于实时采集的设备运行数据,进行智能分析、精准研判,自动输出动态调参建议或完成自动调参,优化设备运行状态,确保设备始终处于最佳运行工况,提升运行效率。",
+        title: "AI 大模型赋能  智能动态调参",
+        desc: "升级后的设备联动工业互联网平台 AI 大模型算法,基于实时采集的设备运行数据,进行智能分析、精准研判,自动输出动态调参建议或完成自动调参,优化设备运行状态,确保设备始终处于最佳运行工况,提升运行效率。",
       },
       {
         title: "设备专项赋能 预测性维护",
@@ -43,6 +46,7 @@ const pillars = [
     title: "智慧注气",
     lead: "围绕设备全生命周期,实现台账、巡检维保、预测维护与实时监控预警的闭环管理。",
     icon: "lucide:cpu",
+    cover: equipmentCover,
     items: [
       {
         title: "老旧设备升级 筑牢无人值守基础",
@@ -58,7 +62,7 @@ const pillars = [
       },
       {
         title: "降本增效保安全 赋能场景升级",
-        desc: "通过无人值守模式,大幅减少现场值守人员,降低人力成本;智能动态调参优化注气效率,提升作业产能;减少人员现场作业频次,规避现场安全风险,实现降本、增效、保安全三重价值,推动注气场景数字化、智能化转型。",
+        desc: "通过无人值守模式,大幅减少现场值守人员,降低人力成本;智能动态调参优化注气效率,提升作业产能;减少人员现场作业频次,规避现场安全风险,实现降本、增效、保安全三重价值,推动注气场景数字化、智能化转型。",
       },
     ],
   },
@@ -67,22 +71,23 @@ const pillars = [
     title: "智慧钻井",
     lead: "面向油气生产项目,贯通任务、计划、数据与报表,提升协同效率与过程可控性。",
     icon: "lucide:clipboard-check",
+    cover: productionCover,
     items: [
       {
         title: "数据精准采集  筑牢钻井分析基础",
-        desc: "依托工业互联网平台数采能力,深度联动录井仪设备,实时采集钻井全流程工况数据,全面记录钻井过程中的各项核心参数,实现数据精准捕捉、实时上传、规范存储,为后续AI分析、钻井优化及完井报告生成,提供完整、可靠的数据支撑。",
+        desc: "依托工业互联网平台数采能力,深度联动录井仪设备,实时采集钻井全流程工况数据,全面记录钻井过程中的各项核心参数,实现数据精准捕捉、实时上传、规范存储,为后续 AI 分析、钻井优化及完井报告生成,提供完整、可靠的数据支撑。",
       },
       {
-        title: "AI大模型深度赋能 精准分析钻井工况",
-        desc: "基于工业互联网平台AI大模型能力,对采集的录井数据进行深度挖掘、智能分析,精准识别钻井过程中的工况异常、参数偏差等问题,快速研判钻井态势,为钻井作业优化提供科学、精准的数据分析支撑,规避盲目操作风险。",
+        title: "AI 大模型深度赋能 精准分析钻井工况",
+        desc: "基于工业互联网平台 AI 大模型能力,对采集的录井数据进行深度挖掘、智能分析,精准识别钻井过程中的工况异常、参数偏差等问题,快速研判钻井态势,为钻井作业优化提供科学、精准的数据分析支撑,规避盲目操作风险。",
       },
       {
         title: "钻井参数智能优化 提升钻井作业交通",
-        desc: "结合AI大模型的工况分析结果,联动工业互联网平台管控能力,为钻井现场提供精准的参数优化建议,指导现场调整钻井参数,优化钻井工艺,有效提升钻速、降低钻井损耗,助力钻井作业提质增效,契合油气勘探开发高效化需求。",
+        desc: "结合 AI 大模型的工况分析结果,联动工业互联网平台管控能力,为钻井现场提供精准的参数优化建议,指导现场调整钻井参数,优化钻井工艺,有效提升钻速、降低钻井损耗,助力钻井作业提质增效,契合油气勘探开发高效化需求。",
       },
       {
         title: "智能生成完井报告 提升报告编制效率",
-        desc: "依托平台数据沉淀与AI处理能力,自动汇总钻井全流程录井数据、工况分析结果及优化记录,一键生成标准化完井报告,无需人工繁琐录入,大幅缩短报告编制周期,确保报告数据精准、内容规范,为钻井成果复盘、后续作业提供有力支撑。",
+        desc: "依托平台数据沉淀与 AI 处理能力,自动汇总钻井全流程录井数据、工况分析结果及优化记录,一键生成标准化完井报告,无需人工繁琐录入,大幅缩短报告编制周期,确保报告数据精准、内容规范,为钻井成果复盘、后续作业提供有力支撑。",
       },
     ],
   },
@@ -94,6 +99,13 @@ const deliver = [
   { title: "混合云", desc: "核心数据本地,弹性算力上云,兼顾成本与性能。" },
 ];
 
+const approach = [
+  { step: "01", title: "数据采集", desc: "实时采集设备、生产等现场数据" },
+  { step: "02", title: "数据传输", desc: "通过边缘网关传输至平台" },
+  { step: "03", title: "数据分析", desc: "基于 AI 大模型进行智能分析" },
+  { step: "04", title: "决策优化", desc: "输出优化建议并持续改进" },
+];
+
 function headerOffsetPx() {
   const rootStyle = getComputedStyle(document.documentElement);
   const headerVar = rootStyle.getPropertyValue("--header-h")?.trim();
@@ -152,7 +164,7 @@ onBeforeUnmount(() => {
     <PageHero
       kicker=""
       title="油气行业数智产品矩阵"
-      subtitle="以工业互联网平台为底座,覆盖设备管理、生产管理与QHSE,贯通数采、数据、流程与AI,支撑从勘探开发到生产运营的全场景数字化。"
+      subtitle="以工业互联网平台为底座,覆盖设备管理、生产管理与 QHSE,贯通数采、数据、流程与 AI,支撑从勘探开发到生产运营的全场景数字化。"
     >
       <template #actions>
         <RouterLink
@@ -191,12 +203,16 @@ onBeforeUnmount(() => {
           </button>
         </div>
 
-        <div class="productStac container">
+        <div class="productStac">
           <section
             v-for="p in pillars"
             :id="`product-${p.key}`"
             :key="p.key"
-            class="productSection"
+            :class="{
+              'section--soft': p.title === '智慧注气',
+              productSection: true,
+            }"
+            style="padding: 0 100px"
           >
             <header class="productHead">
               <div class="productHeadTop">
@@ -205,12 +221,39 @@ onBeforeUnmount(() => {
               <p class="productLead">{{ p.lead }}</p>
             </header>
 
-            <div class="productBody">
-              <div v-for="it in p.items" :key="it.title" class="featureRow">
-                <div class="featureDot" aria-hidden="true"></div>
-                <div class="featureMain">
-                  <div class="featureTitle">{{ it.title }}</div>
-                  <div class="muted featureDesc">{{ it.desc }}</div>
+            <div v-if="p.key === 'platform'" class="platformLayout">
+              <div class="platformImage">
+                <img :src="p.cover" :alt="p.title" />
+              </div>
+              <div class="platformFeatures">
+                <div
+                  v-for="it in p.items"
+                  :key="it.title"
+                  class="platformFeature"
+                >
+                  <div class="featureDot" aria-hidden="true"></div>
+                  <div class="featureMain">
+                    <div class="featureTitle">{{ it.title }}</div>
+                    <div class="muted featureDesc">{{ it.desc }}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+
+            <div v-else class="tabContentLayout" style="padding-bottom: 20px">
+              <div class="tabContentImage">
+                <img :src="p.cover" :alt="p.title" />
+              </div>
+              <div class="tabContentFeatures">
+                <div
+                  v-for="(it, idx) in p.items"
+                  :key="it.title"
+                  class="tabFeatureRow"
+                >
+                  <div class="tabFeatureMain">
+                    <div class="featureTitle">{{ it.title }}</div>
+                    <div class="muted featureDesc">{{ it.desc }}</div>
+                  </div>
                 </div>
               </div>
             </div>
@@ -226,7 +269,7 @@ onBeforeUnmount(() => {
       <div class="container">
         <Reveal as="div" class="sectionHead" :delay="0">
           <div>
-            <div class="section-kicker">落地方法</div>
+            <!-- <div class="section-kicker">落地方法</div> -->
             <h2 class="h2">以数据闭环驱动持续改进</h2>
           </div>
         </Reveal>
@@ -237,6 +280,7 @@ onBeforeUnmount(() => {
             :key="a.step"
             as="div"
             class="card card-pad approachCard hover-lift"
+            style="border: none"
             :delay="60 + idx * 70"
           >
             <div class="approachStep">{{ a.step }}</div>
@@ -293,7 +337,7 @@ onBeforeUnmount(() => {
 
 .approachTitle {
   margin-top: 4px;
-  font-weight: 900;
+  /* font-weight: 900; */
   margin-bottom: 6px;
 }
 
@@ -350,7 +394,6 @@ onBeforeUnmount(() => {
   flex-direction: column;
 }
 
-/* Remove PageHero gradients for this page */
 :deep(.pageHero) {
   border-bottom: none;
 }
@@ -382,7 +425,6 @@ onBeforeUnmount(() => {
   justify-content: center;
   gap: 10px;
   color: var(--slate-700);
-
   letter-spacing: 0.01em;
   cursor: pointer;
   transition:
@@ -427,14 +469,31 @@ onBeforeUnmount(() => {
   scroll-margin-top: calc(var(--header-h) + 84px);
   border: 0;
   border-radius: 0;
-  background: transparent;
+  /* background: transparent; */
   box-shadow: none;
   margin-top: 50px;
 }
 
+.productSection.hasGrayBg {
+  position: relative;
+  background: #f5f7fa;
+  padding: 40px 0;
+}
+
+.productSection.hasGrayBg::before {
+  content: "";
+  position: absolute;
+  top: 0;
+  left: 50%;
+  transform: translateX(-50%);
+  width: 100vw;
+  height: 100%;
+  background: #f5f7fa;
+  z-index: -1;
+}
+
 .productHead {
   padding: 18px 18px 14px;
-
   text-align: center;
 }
 
@@ -468,38 +527,99 @@ onBeforeUnmount(() => {
 .productLead {
   margin-top: 10px;
   max-width: 92ch;
-
   text-align: center;
   margin-left: auto;
   margin-right: auto;
 }
 
-.productBody {
-  padding: 10px 2px 6px;
+.platformLayout {
+  margin-top: 40px;
   display: grid;
-  grid-template-columns: repeat(3, minmax(0, 1fr));
-  gap: 18px;
+  grid-template-columns: 1fr 1fr;
+  gap: 50px;
+  align-items: start;
 }
 
-.featureRow {
+.platformImage {
+  /* border-radius: 16px; */
+  overflow: hidden;
+  box-shadow: 0 12px 40px rgba(2, 6, 23, 0.12);
+}
+
+.platformImage img {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+  display: block;
+}
+
+.platformFeatures {
+  display: grid;
+  gap: 24px;
+}
+
+.platformFeature {
   display: grid;
   grid-template-columns: 22px 1fr;
   align-items: start;
   gap: 16px;
-  padding: 22px 22px;
-  border: 0;
-  /* border-radius: 18px; */
+  padding: 22px;
+  background: #fff;
+  /* border-radius: 16px; */
+  box-shadow: 0 8px 24px rgba(2, 6, 23, 0.08);
+  min-height: 160px;
+  transition:
+    transform 180ms ease,
+    box-shadow 180ms ease;
+}
+
+.platformFeature:hover {
+  transform: translateY(-2px);
+  box-shadow: 0 12px 32px rgba(2, 6, 23, 0.12);
+}
+
+.tabContentLayout {
+  margin-top: 40px;
+  display: grid;
+  grid-template-columns: 1fr 1.2fr;
+  gap: 50px;
+  align-items: start;
+}
+
+.tabContentImage {
+  /* border-radius: 16px; */
+  overflow: hidden;
+  box-shadow: 0 12px 40px rgba(2, 6, 23, 0.12);
+  position: sticky;
+  top: calc(var(--header-h) + 100px);
+}
+
+.tabContentImage img {
+  width: 100%;
+  height: 500px;
+  object-fit: cover;
+  display: block;
+}
+
+.tabContentFeatures {
+  display: grid;
+  gap: 20px;
+}
+
+.tabFeatureRow {
+  padding: 28px;
   background: #fff;
-  box-shadow: 0 16px 42px rgba(2, 6, 23, 0.12);
-  min-height: 178px;
+  /* border-radius: 16px; */
+  box-shadow: 0 8px 24px rgba(2, 6, 23, 0.08);
+  min-height: 140px;
   transition:
     transform 180ms ease,
     box-shadow 180ms ease;
 }
 
-.featureRow:hover {
+.tabFeatureRow:hover {
   transform: translateY(-2px);
-  box-shadow: 0 22px 58px rgba(2, 6, 23, 0.16);
+  box-shadow: 0 12px 32px rgba(2, 6, 23, 0.12);
 }
 
 .featureDot {
@@ -513,7 +633,8 @@ onBeforeUnmount(() => {
   margin-top: 4px;
 }
 
-.featureMain {
+.featureMain,
+.tabFeatureMain {
   min-width: 0;
 }
 
@@ -548,14 +669,34 @@ onBeforeUnmount(() => {
     grid-template-columns: repeat(2, minmax(0, 1fr));
   }
 
-  .productBody {
-    grid-template-columns: repeat(2, minmax(0, 1fr));
+  .platformLayout,
+  .tabContentLayout {
+    grid-template-columns: 1fr;
+    gap: 30px;
+  }
+
+  .tabContentImage {
+    position: static;
+  }
+
+  .tabContentImage img {
+    height: 300px;
   }
 }
 
 @media (max-width: 560px) {
-  .productBody {
-    grid-template-columns: 1fr;
+  .platformFeature,
+  .tabFeatureRow {
+    padding: 20px;
+    min-height: auto;
+  }
+
+  .featureTitle {
+    font-size: 18px;
+  }
+
+  .featureDesc {
+    font-size: 14px;
   }
 }
 
@@ -569,7 +710,8 @@ onBeforeUnmount(() => {
     transition: none !important;
   }
 
-  .featureRow {
+  .platformFeature,
+  .tabFeatureRow {
     transition: none !important;
     transform: none !important;
   }
@@ -577,7 +719,6 @@ onBeforeUnmount(() => {
 
 :deep(.pageHero) {
   background-image: url("../assets/images/bg4.png");
-
   background-size: cover, cover;
   background-position: center, center;
   background-repeat: no-repeat, no-repeat;
@@ -585,6 +726,7 @@ onBeforeUnmount(() => {
   color: #111;
   padding: 80px 0;
 }
+
 :deep(.pageHero__subtitle) {
   color: #4f5055;
 }

+ 2 - 2
src/views/cases/case1.vue

@@ -135,7 +135,7 @@ import { Icon } from "@iconify/vue";
 const steps = [
   { key: "background", title: "项目背景", sub: "问题识别与痛点分析" },
   { key: "delivery", title: "落地成果", sub: "系统上线与流程闭环" },
-  { key: "predictive", title: "预测性维护", sub: "AI预警与主动防控" },
+  { key: "predictive", title: "预测性维护", sub: "AI 预警与主动防控" },
   { key: "kpi", title: "量化成效", sub: "指标提升与降本增效" },
 ];
 
@@ -145,7 +145,7 @@ const stepEls = ref({});
 
 const setStepEl = (key) => (el) => {
   if (!el) return;
-  stepEls.value = { ...stepEls.value, [key]: el };
+  stepEls.value[key] = el;
 };
 
 const prefersReducedMotion = () =>

+ 2 - 2
src/views/cases/case2.vue

@@ -135,7 +135,7 @@ import { Icon } from "@iconify/vue";
 const steps = [
   { key: "background", title: "项目背景", sub: "问题识别与痛点分析" },
   { key: "delivery", title: "落地成果", sub: "系统上线与流程闭环" },
-  { key: "predictive", title: "安全赋能", sub: "风险精准识别、隐患闭环治理" },
+  { key: "predictive", title: "预测性维护", sub: "AI 预警与主动防控" },
   { key: "kpi", title: "量化成效", sub: "指标提升与降本增效" },
 ];
 
@@ -145,7 +145,7 @@ const stepEls = ref({});
 
 const setStepEl = (key) => (el) => {
   if (!el) return;
-  stepEls.value = { ...stepEls.value, [key]: el };
+  stepEls.value[key] = el;
 };
 
 const prefersReducedMotion = () =>

+ 2 - 2
src/views/cases/case3.vue

@@ -135,7 +135,7 @@ import { Icon } from "@iconify/vue";
 const steps = [
   { key: "background", title: "项目背景", sub: "问题识别与痛点分析" },
   { key: "delivery", title: "落地成果", sub: "系统上线与流程闭环" },
-  { key: "predictive", title: "提质增效", sub: "提升设备管理水平" },
+  { key: "predictive", title: "预测性维护", sub: "AI 预警与主动防控" },
   { key: "kpi", title: "量化成效", sub: "指标提升与降本增效" },
 ];
 
@@ -145,7 +145,7 @@ const stepEls = ref({});
 
 const setStepEl = (key) => (el) => {
   if (!el) return;
-  stepEls.value = { ...stepEls.value, [key]: el };
+  stepEls.value[key] = el;
 };
 
 const prefersReducedMotion = () =>