tj
2025-03-17 0b058116985f0b3415f01c69c1735e1f6a7b51ea
假数据造
已修改4个文件
已添加4个文件
2339 ■■■■ 文件已修改
src/components/Footer.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/HeaderMenu.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/models/portalModels copy.ts 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/models/portalModels.ts 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/Home copy.vue 621 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/Home.vue 1195 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/MainLayout.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/Product.vue 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Footer.vue
对比新文件
@@ -0,0 +1,26 @@
<template>
    <div class="footer">
        <div class="footer-content">
            版权所有© Copyright 1999-2024 &nbsp;&nbsp;&nbsp;&nbsp; 云游四方软件股份有限公司 浙ICP备11024936号-1
        </div>
    </div>
</template>
<script setup>
import { ref } from 'vue';
</script>
<style scoped>
.footer {
    width: 100%;
    text-align: center;
    padding: 15px 0;
    background-color: #f8f8f8;
}
.footer-content {
    font-size: 12px;
    color: #333;
}
</style>
src/components/HeaderMenu.vue
@@ -2,7 +2,7 @@
    <div class="header">
        <div style="width: 600px;">
            <el-menu :default-active="menuIndex" class="main-menu" mode="horizontal" @select="handleSelect">
                <el-menu-item index="/">
                <el-menu-item index="/logo">
                    <img src="@/assets/logo/logo.png" alt="云游四方" class="logo" />
                    <span class="logo-text">云游四方</span>
                </el-menu-item>
@@ -16,7 +16,7 @@
            <el-icon>
                <Phone />
            </el-icon>
            <span>400-102-8686</span>
            <span>18913206309</span>
        </div>
    </div>
</template>
@@ -35,7 +35,12 @@
// 处理菜单点击事件
const handleSelect = (index) => {
    // console.log('选中菜单:', index);
    router.push(index);
    if(index === '/logo'){
        router.push('/');
    }else{
        router.push(index);
    }
};
</script>
<style scoped>
src/models/portalModels copy.ts
对比新文件
@@ -0,0 +1,83 @@
import { timeSelectProps } from "element-plus";
// 首页轮播图
export class CarouselItem {
    url: string;
    title: string;
    content: string;
    constructor(url: string, title: string, content: string) {
      this.url = url;
      this.title = title;
      this.content = content;
    }
  }
//   合作过的客户
export class CooperativeClient {
    url: string;
    name: string;
    desc: string;
    constructor(url: string, name: string, desc: string) {
      this.url = url;
      this.name = name;
      this.desc = desc;
    }
  }
  //   产品中心
export class ProductCenter {
    url: string;
    name: string;
    desc: string;
    constructor(url: string, name: string, desc: string) {
      this.url = url;
      this.name = name;
      this.desc = desc;
    }
  }
  export class CompanyInfo {
    logo: string; // logo
    name: string; // 公司名称
    desc: string; // 公司描述
    address: string; // 公司地址
    wechat: string;
    phoneHotList: Array<string>; // 热线
    phoneSaleAfterList: Array<string>; // 售后电话
    qrCodeList: Array<CompanyQrCodeInfo>; // 二维码
    constructor(logo: string, name: string, desc: string,address: string,wechat:string,phoneHotList: Array<string>,phoneSaleAfterList: Array<string>,qrCodeList: Array<CompanyQrCodeInfo>) {
        this.logo = logo;
        this.name = name;
        this.desc = desc;
        this.address = address;
        this.phoneHotList = phoneHotList;
        this.phoneSaleAfterList = phoneSaleAfterList;
        this.qrCodeList = qrCodeList;
      }
  }
  export class CompanyQrCodeInfo {
    url: string; // logo
    name: string; // 公司名称
    constructor(url: string, name: string) {
        this.url=url
        this.name=name
      }
  }
  // 产品中心-菜单
  export interface MenuItem {
    index: string;
    title: string;
    icon?: any;
    subMenu?: MenuItem[];
  }
src/models/portalModels.ts
对比新文件
@@ -0,0 +1,65 @@
// 首页轮播图
export interface CarouselItem {
  url: string;
  title: string;
  content: string;
}
//   我们的产品
export interface Products {
  imgUrl: string;
  title: string;
  desc: string;
}
// 新增接口来表示产品组
export interface ProductGroup {
  products: Products[];
}
//   合作过的客户
export interface CooperativeClient {
  url: string;
  name: string;
  desc: string;
}
//   产品中心
export interface ProductCenter {
  url: string;
  name: string;
  desc: string;
}
// 公司基本信息
export interface CompanyInfo {
  logo: string; // logo
  name: string; // 公司名称
  desc: string; // 公司描述
  address: string; // 公司地址
  wechat: string;
  phoneHotList: Array<string>; // 热线
  phoneSaleAfterList: Array<string>; // 售后电话
  qrCodeList: Array<CompanyQrCodeInfo>; // 二维码
}
// 公司二维码信息
export interface CompanyQrCodeInfo {
  url: string; // logo
  name: string; // 公司名称
}
// 产品中心-菜单
export interface MenuItem {
  index: string;
  title: string;
  imgUrl: string;
  pdfUrl: string;
  icon?: any;
  subMenu?: MenuItem[];
}
src/pages/Home copy.vue
对比新文件
@@ -0,0 +1,621 @@
<template>
  <div class="home-container">
    <div class="carousel-container" style="margin-top:60px;">
      <!-- 上方主要轮播 -->
      <el-carousel ref="mainCarousel" indicator-position="none" trigger="click" height="100vh" :pause-on-hover="false"
        @change="handleMainChange">
        <el-carousel-item v-for="(item, index) in items" :key="index" style="display: flex; justify-content: center;">
          <div class="carousel-content-main" :style="{
            backgroundImage: `url(${item.url})`,
            backgroundSize: 'cover',
            backgroundPosition: 'center',
            width: '100%',
            height: '100%'
          }">
            <!-- {{ item.content }} -->
          </div>
        </el-carousel-item>
      </el-carousel>
      <!-- 下方卡片模式轮播 -->
      <el-carousel ref="cardCarousel" :interval="5000" arrow="always" indicator-position="none" trigger="click"
        type="card" height="100px" class="overlay-carousel" @change="handleCardChange">
        <el-carousel-item v-for="(item, index) in items" :key="index">
          <div class="carousel-content">
            <div class="title">{{ item.title }}</div>
            <div class="content">{{ item.content }}</div>
          </div>
        </el-carousel-item>
      </el-carousel>
    </div>
    <div class="our-products">
      <div class="our-products-title">
        <h1>我们的产品</h1>
      </div>
      <div class="our-products-carousel">
        <el-carousel :interval="3000" arrow="always">
          <el-carousel-item v-for="item in 4" :key="item">
            <!-- 这里是存放产品信息 -->
            <el-row>
              <el-col :span="6" v-for="o in 4" :key="o">
                <div class="our-products-carousel-product">
                  <el-card>
                    <div class="card-content-div"><span class="card-content-div-title">智慧校园门户网站</span></div>
                    <div class="card-content-div"><span
                        class="card-content-div-content">提供全流程、一体化的数据治理与数据服务提供全流程、一体化的数据治理与数据服务</span></div>
                    <img src="http://192.168.1.201:9000/portal/bg.png"
                      style="width: 100%; height: 100px;object-fit: cover;" />
                  </el-card>
                </div>
              </el-col>
            </el-row>
          </el-carousel-item>
        </el-carousel>
      </div>
    </div>
    <div class="third-other">
      <el-row>
        <el-col :span="8">
          <div class="third-other-title">产品中心</div>
          <ul class="footer-list footer-list-menus">
            <li v-for="(item, index) in ProductCenters"><el-link :underline="false" :href="item.url" target="_blank"><span class="f12">{{item.name}}</span></el-link></li>
          </ul>
        </el-col>
        <el-col :span="8">
          <div class="third-other-title">合作过的客户</div>
          <div>
            <img v-for="(item, index) in cooperativeClients" :src="item.url" class="cooperation-img" />
          </div>
        </el-col>
        <el-col :span="8">
          <div class="third-other-title">公司信息</div>
          <div class="contact-us">
            <div class="j-a-c">
              <div class="j-a-c">
                <img :src="companyInfo.logo" alt="云游四方" class="logo-l" />
                <span class="logo-l-text">{{ companyInfo.name }}</span>
              </div>
              <div class="f12 m-10"> {{ companyInfo.desc }}</div>
            </div>
            <!-- <div class="j-a-c">
              <p><span class="f12 m-10">全国热线电话:</span>
                <el-link v-for="(item, index) in companyInfo.phoneHotList" :underline="false" href="tel:400-102-8686"><span class="f12 m-10">{{ item }}</span></el-link>
              </p>
            </div>
            <div class="j-a-c">
              <p><span class="f12 m-10">全国售后电话:</span>
                <el-link v-for="(item, index) in companyInfo.phoneSaleAfterList" :underline="false" href="tel:400-102-8686"><span class="f12 m-10">{{ item }}</span></el-link>
              </p>
            </div> -->
            <div class="j-a-c">
              <p><span class="f12 m-10">地址:{{ companyInfo.address }}</span></p>
            </div>
            <div class="footer-QR-code">
              <div class="j-a-c-column" v-for="(item, index) in companyInfo.qrCodeList"><img :src="item.url" alt="云游四方" class="qr-code-img" /><span>{{ item.name }}</span></div>
            </div>
          </div>
        </el-col>
      </el-row>
    </div>
    <el-backtop :right="20" :bottom="50" style="width: 30px; height: 30px;" />
    <!-- 右侧悬浮按钮 -->
    <div class="float-buttons">
      <el-popover placement="left" trigger="hover">
        <div class="j-a-c">
            <img :src="companyInfo.wechat" alt="微信二维码" class="popover-img" style="width: 100px; height: 100px;" />
        </div>
        <template #reference>
          <div class="j-a-c">
            <img src="http://192.168.1.201:9000/portal/wechat.png" alt="微信" class="xuanfu" />
          </div>
        </template>
      </el-popover>
      <el-popover placement="left" trigger="hover">
        <p>18913206309</p>
        <template #reference>
          <img src="http://192.168.1.201:9000/portal/phone.png" alt="电话" class="xuanfu" />
        </template>
      </el-popover>
    </div>
  </div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import type { ElCarousel } from "element-plus";
// import { CarouselItem } from '@/models/carouselItem';
// import { CooperativeClient } from '@/models/cooperativeClient';
import { CarouselItem,CooperativeClient,ProductCenter,CompanyInfo, CompanyQrCodeInfo } from '@/models/portalModels';
// const items = ref([0, 1, 2, 3]); // 轮播项
const mainCarousel = ref<InstanceType<typeof ElCarousel> | null>(null);
const cardCarousel = ref<InstanceType<typeof ElCarousel> | null>(null);
 // 创建数据列表
const items = ref<CarouselItem[]>([
  new CarouselItem('http://192.168.1.201:9000/portal/bg.png', '智慧校园', '智慧校园信息门户'),
  new CarouselItem('http://192.168.1.201:9000/portal/bg.png', '统一认证', '统一身份认证平台'),
  new CarouselItem('http://192.168.1.201:9000/portal/bg.png', '数据管理', '数据管理中心平台')
]);
const handleMainChange = (index: number) => {
  if (cardCarousel.value) {
    cardCarousel.value.setActiveItem(index); // 同步下方轮播
  }
};
const handleCardChange = (index: number) => {
  if (mainCarousel.value) {
    mainCarousel.value.setActiveItem(index); // 同步上方轮播
  }
};
const cooperativeClients = ref<CooperativeClient[]>([
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c29.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c34.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c1.png', '图片1', '图片1'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c22.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c23.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c24.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c25.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c26.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c27.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c28.png', '图片2', '图片2'),
  // new CooperativeClient('http://192.168.1.201:9000/portal/customers/c29.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c30.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c31.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c32.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c33.png', '图片2', '图片2'),
  // new CooperativeClient('http://192.168.1.201:9000/portal/customers/c34.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c35.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c36.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c37.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c38.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c39.png', '图片2', '图片2'),
  new CooperativeClient('http://192.168.1.201:9000/portal/customers/c40.png', '图片2', '图片2'),
])
const ProductCenters = ref<ProductCenter[]>([
  new ProductCenter('http://192.168.1.201:9000/portal/product-center/LIMS系统介绍方案.pdf', 'LIMS实验室管理系统', 'LIMS实验室管理系统'),
  new ProductCenter('http://192.168.1.201:9000/portal/product-center/外部供应商管理系统介绍.pdf', '供应商管理系统', '供应商管理系统'),
  new ProductCenter('', 'TQS企业培训系统', 'TQS企业培训系统'),
  new ProductCenter('http://192.168.1.201:9000/portal/product-center/花满芫小程序产品介绍.pdf', 'S2B2B小程序平台', 'S2B2B小程序平台'),
  new ProductCenter('http://192.168.1.201:9000/portal/product-center/FJIT系统介绍.pdf', 'JIT系统', 'JIT系统'),
  new ProductCenter('http://192.168.1.201:9000/portal/product-center/CPTM软件产品介绍.pdf', 'CPTM企业能力管理系统', 'CPTM企业能力管理系统'),
])
const companyInfo = ref<CompanyInfo>({
  logo: "http://192.168.1.201:9000/portal/logo.png",
  name: "云游四方",
  desc: "专注于智能化解决方案",
  address: "江苏省苏州市虎丘区华云路1号桑田岛科创园",
  wechat:"http://192.168.1.201:9000/portal/company-info/联系微信.png",
  phoneHotList: ["400-123-4567", "010-88889999"],
  phoneSaleAfterList: ["400-987-6543", "010-66667777"],
  qrCodeList: [
    new CompanyQrCodeInfo("http://192.168.1.201:9000/portal/company-info/服务号.jpg", "服务号"),
    new CompanyQrCodeInfo("http://192.168.1.201:9000/portal/company-info/联系微信.png", "联系微信"),
  ]
});
</script>
<style scoped>
.home-container {
  position: relative;
  width: 100%;
  min-height: 100vh;
  margin: 0;
  padding: 0;
}
.el-menu--horizontal {
  --el-menu-horizontal-height: 40px;
}
.logo-container {
  display: flex;
  align-items: center;
}
.logo {
  height: 40px;
  margin-right: 10px;
}
.logo-text {
  font-size: 18px;
  font-weight: bold;
  color: #333;
}
.main-content {
  width: 100%;
  margin-top: 60px;
  /* 为固定的header留出空间 */
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0px;
  /* height: 600px; */
  width: 100%;
}
.banner {
  position: relative;
  width: 100%;
  min-height: calc(100vh - 60px);
  /* 减去header高度 */
  background: linear-gradient(to bottom, #1a237e, #3949ab);
  color: white;
  /* padding: 40px 0; */
  display: flex;
  flex-direction: column;
  align-items: center;
  box-sizing: border-box;
}
.logos-container {
  display: flex;
  justify-content: center;
  gap: 40px;
  margin: 30px 0;
}
.cert-logo,
.company-logo {
  height: 80px;
}
.main-title {
  font-size: 36px;
  text-align: center;
  margin: 40px 0;
}
.organizers {
  display: flex;
  justify-content: center;
  gap: 20px;
  margin: 20px 0;
}
.org-item {
  display: flex;
  align-items: center;
}
.org-label {
  color: #ccc;
  margin-right: 5px;
}
.org-name {
  color: white;
}
.location {
  margin: 40px 0;
}
.location h2 {
  font-size: 32px;
  text-align: center;
}
.info-cards {
  display: flex;
  justify-content: center;
  gap: 20px;
  width: 80%;
  margin-top: 40px;
  margin-bottom: 40px;
  /* 添加底部间距 */
  flex-wrap: wrap;
  /* 在小屏幕上允许换行 */
}
.info-card {
  background-color: rgba(255, 255, 255, 0.1);
  padding: 20px;
  border-radius: 5px;
  flex: 1;
  min-width: 250px;
  /* 确保在小屏幕上有最小宽度 */
}
.card-title {
  font-size: 18px;
  margin-bottom: 10px;
  color: white;
}
.card-desc {
  color: #ddd;
  font-size: 14px;
}
.float-buttons {
  position: fixed;
  right: 20px;
  bottom: 100px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.float-btn {
  width: 60px;
  height: 60px;
  display: flex;
  justify-content: center;
  align-items: center;
}
.btn-content {
  display: flex;
  flex-direction: column;
  align-items: center;
  font-size: 12px;
}
.product-btn {
  background-color: #fff;
  color: #333;
}
.service-btn {
  background-color: #fff;
  color: #333;
}
.top-btn {
  background-color: #fff;
  color: #333;
}
/* 添加响应式设计 */
@media (max-width: 768px) {
  .organizers {
    flex-direction: column;
    align-items: center;
  }
  .info-cards {
    width: 90%;
  }
  .main-title {
    font-size: 28px;
    padding: 0 15px;
  }
}
</style>
<style scoped>
.demonstration {
  color: var(--el-text-color-secondary);
}
.el-carousel__item h3 {
  color: #475669;
  opacity: 0.75;
  line-height: 150px;
  margin: 0;
  text-align: center;
}
.el-carousel__item:nth-child(2n) {
  /* background-color: #FFFFFF; */
}
.el-carousel__item:nth-child(2n + 1) {
  /* background-color: #FFFFFF; */
}
</style>
<style scoped>
.carousel-container {
  position: relative;
  margin-top: 30px;
  min-height: calc(100vh - 60px);
}
.carousel-content-main{
  height: 100%;
}
.overlay-carousel {
  position: absolute;
  top: 500px;
  /* 调整此值控制重叠程度 */
  left: 50%;
  transform: translateX(-50%);
  width: 80%;
  /* 适当调整宽度 */
}
.our-products {
  margin-top: 50px;
  width: 100%;
  display: flex;
  flex-direction: column;
  /* 设置子元素垂直排列 */
  align-items: center;
  /* 可选:将子元素水平居中 */
  padding: 0 50px;
}
.our-products-title {
  width: 100%;
  height: 50px;
  text-align: center;
}
.our-products-carousel {
  margin-top: 30px;
  width: 80%;
  /* height: 300px; */
}
.our-products-carousel-product {
  width: 100%;
  display: flex;
  flex-direction: column;
  /* 设置子元素垂直排列 */
  align-items: center;
  /* 可选:将子元素水平居中 */
  padding: 0 5px;
}
.card-content-div {
  text-align: center;
  margin: 10px;
}
.card-content-div-title {
  font-weight: 500;
}
.card-content-div-content {
  color: gray;
  font-size: 14px;
}
.third-other {
  width: 100%;
  text-align: center;
  margin-top: 30px;
  background-color: #F2F5FA;
  padding: 20px;
}
.third-other-title {
  margin: 0 20px;
}
.footer-list {
  display: flex;
  flex-wrap: wrap;
  /* Allow wrapping to new lines */
}
.footer-list li {
  width: 48%;
  /* Adjust this value to control the width of each item */
  margin-bottom: 5px;
  /* Optional: Adds space between rows */
  text-align: left;
}
.f12 {
  font-size: 12px;
  color: #2B2B2B;
}
ul,
ol,
li {
  list-style: none;
}
ul {
  margin: 0;
}
ol,
ul {
  margin-top: 0;
  margin-bottom: 10px;
}
.cooperation-img {
  width: 50px;
  height: 50px;
  object-fit: cover;
  margin: 5px;
}
.contact-us {
  margin: 10px;
}
.j-a-c {
  display: flex;
  /* justify-content: center; */
  align-items: center;
}
.j-a-c-column{
  display: flex;
  align-items: center;
  flex-direction: column;
}
.logo-l {
  height: 20px;
}
.logo-l-text {
  font-size: 12px;
  font-weight: bold;
  color: #333;
}
.m-10 {
  margin-left: 10px;
}
.footer-QR-code {
  display: flex;
  justify-content: flex-start;
  margin-top: 10px;
}
.qr-code-img {
  width: 60px;
  height: 60px;
}
.xuanfu {
  width: 30px;
  height: 30px;
}
/*
::v-deep .el-carousel__mask {
  height: 100%;
  left: 0;
  opacity: .24;
  position: absolute;
  top: 0;
  transition: var(--el-transition-duration-fast);
  width: 100%;
} */
.carousel-content {
  /* width: 50%;
    background-color: #FFFFFF; */
  text-align: center;
}
</style>
src/pages/Home.vue
@@ -1,583 +1,632 @@
<template>
    <div class="home-container">
      <div class="carousel-container" style="margin-top:60px;">
        <!-- 上方主要轮播 -->
        <el-carousel  ref="mainCarousel"
        indicator-position="none" trigger="click" height="550px" :pause-on-hover="false"
          @change="handleMainChange">
          <el-carousel-item v-for="(item, index) in items" :key="index"
            style="display: flex; justify-content: center;">
            <div class="carousel-content-main" :style="{
              backgroundImage: `url(http://192.168.1.201:9000/portal/bg.png)`,
              backgroundSize: 'cover',
              backgroundPosition: 'center',
              width: '100%',
              height: '100%'
            }">
              aaaaaaaaaaa{{ item }}
            </div>
          </el-carousel-item>
        </el-carousel>
        <!-- 下方卡片模式轮播 -->
        <el-carousel  ref="cardCarousel" :interval="3000" arrow="always" indicator-position="none" trigger="click" type="card" height="100px"
          class="overlay-carousel" @change="handleCardChange">
          <el-carousel-item v-for="(item, index) in items" :key="index">
            <div class="carousel-content">
              <div class="title">aaaaaaaaaaa{{ item }}</div>
              <div class="content">我是内容我是内容我是内容我是内容我是内容</div>
            </div>
          </el-carousel-item>
        </el-carousel>
      </div>
      <div class="our-products">
        <div class="our-products-title">
          <h1>我们的产品</h1>
        </div>
        <div class="our-products-carousel">
          <el-carousel :interval="3000" arrow="always">
            <el-carousel-item v-for="item in 4" :key="item">
              <!-- 这里是存放产品信息 -->
              <el-row>
                <el-col :span="6" v-for="o in 4" :key="o">
                  <div class="our-products-carousel-product">
                    <el-card>
                      <div class="card-content-div"><span class="card-content-div-title">智慧校园门户网站</span></div>
                      <div class="card-content-div"><span
                          class="card-content-div-content">提供全流程、一体化的数据治理与数据服务提供全流程、一体化的数据治理与数据服务</span></div>
                      <img src="http://192.168.1.201:9000/portal/bg.png"
                        style="width: 100%; height: 100px;object-fit: cover;" />
                    </el-card>
                  </div>
                </el-col>
              </el-row>
            </el-carousel-item>
          </el-carousel>
        </div>
      </div>
      <div class="third-other">
        <el-row>
          <el-col :span="8">
            <div>产品中心</div>
            <ul class="footer-list footer-list-menus">
              <li><el-link :underline="false" href="./product/tymhxt.html"><span class="f12">智慧校园信息服务门户</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/tyrzxt.html"><span class="f12">统一身份认证服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/ydglxt.html"><span class="f12">移动智慧校园平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/sjglxt.html"><span class="f12">数据管理中心平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/jcpt.html"><span class="f12">集成平台</span></el-link> </li>
              <li><el-link :underline="false" href="./product/jxglxt.html"><span class="f12">教学管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/zsglxt.html"><span class="f12">招生管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/yxglxt.html"><span class="f12">迎新管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/xgmhxt.html"><span class="f12">学生工作管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/lxglxt.html"><span class="f12">离校管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/jyglxt.html"><span class="f12">就业管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/kyglxt.html"><span class="f12">科研管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/zyglxt.html"><span class="f12">人力资源管理服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/zhbgpt.html"><span class="f12">智慧办公服务平台</span></el-link>
              </li>
              <li><el-link :underline="false" href="./product/wsbs.html"><span class="f12">网上办事大厅</span></el-link> </li>
              <li><el-link :underline="false" href="./product/yjsxxfwxt.html"><span
                    class="f12">研究生信息管理与服务平台</span></el-link> </li>
              <li><el-link :underline="false" href="./product/zzcxdyytj.html"><span class="f12">自助查询打印一体机</span></el-link>
              </li>
            </ul>
          </el-col>
          <el-col :span="8">
            <div>合作过的客户</div>
            <div>
              <img v-for="(item, index) in 28" src="http://192.168.1.201:9000/portal/bg.png" class="cooperation-img" />
            </div>
          </el-col>
          <el-col :span="8">
            <div>公司信息</div>
            <div class="contact-us">
              <div class="j-a-c">
                <div class="j-a-c">
                  <img src="@/assets/logo/logo.png" alt="云游四方" class="logo-l" />
                  <span class="logo-l-text">云游四方</span>
                </div>
                <div class="f12 m-10"> 科技创新 服务教育</div>
              </div>
              <div class="j-a-c">
                <p><span class="f12 m-10">全国热线电话:</span>
                  <el-link :underline="false" href="tel:400-102-8686"><span class="f12 m-10">400-102-8686</span></el-link>
                  <el-link :underline="false" href="tel:400-102-8686"><span class="f12 m-10">400-102-8686</span></el-link>
                </p>
              </div>
              <div class="j-a-c">
                <p><span class="f12 m-10">全国售后电话:</span>
                  <el-link :underline="false" href="tel:400-102-8686"><span class="f12 m-10">400-102-8686</span></el-link>
                  <el-link :underline="false" href="tel:400-102-8686"><span class="f12 m-10">400-102-8686</span></el-link>
                </p>
              </div>
              <div class="j-a-c">
                <p><span class="f12 m-10">地址:浙江省杭州市西湖区紫霞街176号杭州互联网创新创业园2-301</span></p>
              </div>
              <div class="footer-QR-code">
                <div class="j-a-c"><img src="@/assets/logo/logo.png" alt="云游四方" class="qr-code-img" /></div>
                <div class="j-a-c"><img src="@/assets/logo/logo.png" alt="云游四方" class="qr-code-img" /></div>
              </div>
            </div>
          </el-col>
        </el-row>
      </div>
      <el-backtop :right="20" :bottom="50" style="width: 30px; height: 30px;" />
      <!-- 右侧悬浮按钮 -->
      <div class="float-buttons">
        <el-popover placement="left" trigger="hover">
          <img src="http://192.168.1.201:9000/portal/wechat.png" alt="微信二维码" class="popover-img" />
          <template #reference>
            <img src="http://192.168.1.201:9000/portal/wechat.png" alt="微信" class="xuanfu" />
          </template>
        </el-popover>
        <el-popover placement="left" trigger="hover">
          <p>123-456-789</p>
          <template #reference>
            <img src="http://192.168.1.201:9000/portal/phone.png" alt="电话" class="xuanfu" />
          </template>
        </el-popover>
      </div>
  <div class="home-container">
    <div class="carousel-container" style="margin-top:60px;">
      <!-- 上方主要轮播 -->
      <el-carousel ref="mainCarousel" indicator-position="none" trigger="click" height="100vh" :pause-on-hover="false"
        @change="handleMainChange">
        <el-carousel-item v-for="(item, index) in items" :key="index" style="display: flex; justify-content: center;">
          <div class="carousel-content-main" :style="{
            backgroundImage: `url(${item.url})`,
            backgroundSize: 'cover',
            backgroundPosition: 'center',
            width: '100%',
            height: '100%'
          }">
            <!-- {{ item.content }} -->
          </div>
        </el-carousel-item>
      </el-carousel>
      <!-- 下方卡片模式轮播 -->
      <el-carousel ref="cardCarousel" :interval="5000" arrow="always" indicator-position="none" trigger="click"
        type="card" height="100px" class="overlay-carousel" @change="handleCardChange">
        <el-carousel-item v-for="(item, index) in items" :key="index">
          <div class="carousel-content">
            <div class="title">{{ item.title }}</div>
            <div class="content">{{ item.content }}</div>
          </div>
        </el-carousel-item>
      </el-carousel>
    </div>
  </template>
  <script lang="ts" setup>
  import { ref } from 'vue'
  import { Phone, Monitor, Service, Top } from '@element-plus/icons-vue'
  import type { ElCarousel } from "element-plus";
  import HeaderMenu from '@/components/HeaderMenu.vue';
  const handleSelect = (key: string, keyPath: string[]) => {
    console.log(key, keyPath)
    <div class="our-products">
      <div class="our-products-title">
        <h1>我们的产品</h1>
      </div>
      <div class="our-products-carousel">
        <el-carousel :interval="3000" arrow="always" height="400px" >
          <el-carousel-item v-for="(group, groupIndex) in productGroups" :key="groupIndex">
            <el-row>
              <el-col :span="6" v-for="(product, productIndex) in group.products" :key="productIndex">
                <div class="our-products-carousel-product">
                  <el-card>
                    <div class="card-content-div"><span class="card-content-div-title">{{ product.title }}</span></div>
                    <div class="card-content-div">
                      <span class="card-content-div-content">{{ product.desc }}</span>
                    </div>
                    <img :src="product.imgUrl" style="width: 100%; height: 100px; object-fit: cover;" />
                  </el-card>
                </div>
              </el-col>
            </el-row>
          </el-carousel-item>
        </el-carousel>
      </div>
    </div>
    <div class="third-other">
      <el-row>
        <el-col :span="8">
          <div class="third-other-title">产品中心</div>
          <ul class="footer-list footer-list-menus">
            <li v-for="(item, index) in ProductCenters"><el-link :underline="false" :href="item.url" target="_blank"><span class="f12">{{item.name}}</span></el-link></li>
          </ul>
        </el-col>
        <el-col :span="8">
          <div class="third-other-title">合作过的客户</div>
          <div>
            <img v-for="(item, index) in cooperativeClients" :src="item.url" class="cooperation-img" />
          </div>
        </el-col>
        <el-col :span="8">
          <div class="third-other-title">公司信息</div>
          <div class="contact-us">
            <div class="j-a-c">
              <div class="j-a-c">
                <img :src="companyInfo.logo" alt="云游四方" class="logo-l" />
                <span class="logo-l-text">{{ companyInfo.name }}</span>
              </div>
              <div class="f12 m-10"> {{ companyInfo.desc }}</div>
            </div>
            <!-- <div class="j-a-c">
              <p><span class="f12 m-10">全国热线电话:</span>
                <el-link v-for="(item, index) in companyInfo.phoneHotList" :underline="false" href="tel:400-102-8686"><span class="f12 m-10">{{ item }}</span></el-link>
              </p>
            </div>
            <div class="j-a-c">
              <p><span class="f12 m-10">全国售后电话:</span>
                <el-link v-for="(item, index) in companyInfo.phoneSaleAfterList" :underline="false" href="tel:400-102-8686"><span class="f12 m-10">{{ item }}</span></el-link>
              </p>
            </div> -->
            <div class="j-a-c">
              <p><span class="f12 m-10">地址:{{ companyInfo.address }}</span></p>
            </div>
            <div class="footer-QR-code">
              <div class="j-a-c-column" v-for="(item, index) in companyInfo.qrCodeList"><img :src="item.url" alt="云游四方" class="qr-code-img" /><span>{{ item.name }}</span></div>
            </div>
          </div>
        </el-col>
      </el-row>
    </div>
    <el-backtop :right="20" :bottom="50" style="width: 30px; height: 30px;" />
    <!-- 右侧悬浮按钮 -->
    <div class="float-buttons">
      <el-popover placement="left" trigger="hover">
        <div class="j-a-c">
            <img :src="companyInfo.wechat" alt="微信二维码" class="popover-img" style="width: 100px; height: 100px;" />
        </div>
        <template #reference>
          <div class="j-a-c">
            <img src="http://192.168.1.201:9000/portal/wechat.png" alt="微信" class="xuanfu" />
          </div>
        </template>
      </el-popover>
      <el-popover placement="left" trigger="hover">
        <p>18913206309</p>
        <template #reference>
          <img src="http://192.168.1.201:9000/portal/phone.png" alt="电话" class="xuanfu" />
        </template>
      </el-popover>
    </div>
  </div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import type { ElCarousel } from "element-plus";
import { CarouselItem, CooperativeClient, ProductCenter, CompanyInfo, Products, ProductGroup } from '@/models/portalModels';
const mainCarousel = ref<InstanceType<typeof ElCarousel> | null>(null);
const cardCarousel = ref<InstanceType<typeof ElCarousel> | null>(null);
 // 创建数据列表
const items = ref<CarouselItem[]>([
  {url:'http://192.168.1.201:9000/portal/bg.png', title:'', content:''},
  // {url:'http://192.168.1.201:9000/portal/bg.png', title:'统一认证', content:'统一身份认证平台'},
  // {url:'http://192.168.1.201:9000/portal/bg.png', title:'数据管理', content:'数据管理中心平台'}
]);
const handleMainChange = (index: number) => {
  if (cardCarousel.value) {
    cardCarousel.value.setActiveItem(index); // 同步下方轮播
  }
  const menuIndex = ref<String>("index"); // 共享当前索引
  const items = ref([0, 1, 2, 3]); // 轮播项
  const mainCarousel = ref<InstanceType<typeof ElCarousel> | null>(null);
  const cardCarousel = ref<InstanceType<typeof ElCarousel> | null>(null);
  const handleMainChange = (index: number) => {
    if (cardCarousel.value) {
      cardCarousel.value.setActiveItem(index); // 同步下方轮播
    }
  };
  const handleCardChange = (index: number) => {
    if (mainCarousel.value) {
      mainCarousel.value.setActiveItem(index); // 同步上方轮播
    }
  };
  </script>
  <style scoped>
  .home-container {
    position: relative;
    width: 100%;
    min-height: 100vh;
    margin: 0;
    padding: 0;
};
const handleCardChange = (index: number) => {
  if (mainCarousel.value) {
    mainCarousel.value.setActiveItem(index); // 同步上方轮播
  }
  .el-menu--horizontal {
    --el-menu-horizontal-height: 40px;
  }
  .logo-container {
    display: flex;
    align-items: center;
  }
  .logo {
    height: 40px;
    margin-right: 10px;
  }
  .logo-text {
    font-size: 18px;
    font-weight: bold;
    color: #333;
  }
  .main-content {
    width: 100%;
    margin-top: 60px;
    /* 为固定的header留出空间 */
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0px;
    /* height: 600px; */
    width: 100%;
  }
  .banner {
    position: relative;
    width: 100%;
    min-height: calc(100vh - 60px);
    /* 减去header高度 */
    background: linear-gradient(to bottom, #1a237e, #3949ab);
    color: white;
    /* padding: 40px 0; */
    display: flex;
    flex-direction: column;
    align-items: center;
    box-sizing: border-box;
  }
  .logos-container {
    display: flex;
    justify-content: center;
    gap: 40px;
    margin: 30px 0;
  }
  .cert-logo,
  .company-logo {
    height: 80px;
  }
  .main-title {
    font-size: 36px;
    text-align: center;
    margin: 40px 0;
  }
};
const cooperativeClients = ref<CooperativeClient[]>([
  {url:'http://192.168.1.201:9000/portal/customers/c29.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c34.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c1.png',  name:'图片1', desc:'图片1'},
  {url:'http://192.168.1.201:9000/portal/customers/c22.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c23.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c24.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c25.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c26.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c27.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c28.png', name:'图片2', desc:'图片2'},
  // {url:'http://192.168.1.201:9000/portal/customers/c29.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c30.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c31.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c32.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c33.png', name:'图片2', desc:'图片2'},
  // {url:'http://192.168.1.201:9000/portal/customers/c34.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c35.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c36.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c37.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c38.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c39.png', name:'图片2', desc:'图片2'},
  {url:'http://192.168.1.201:9000/portal/customers/c40.png', name:'图片2', desc:'图片2'},
])
// 新增产品组数据
const productGroups = ref<ProductGroup[]>([
  {
    products: [
      { imgUrl: 'http://192.168.1.201:9000/portal/product-our/S2B2B.png', title: 'S2B2B', desc: '通过数字化整合上下游资源,重构传统供应链“多级分销、信息割裂”的痛点,实现供应商增收......' },
      { imgUrl: 'http://192.168.1.201:9000/portal/product-our/实验室管理系统.png', title: '实验室管理系统', desc: '主要应用于汽车零部件质检行业。它能解决委托单流转、设备管理、数据管理、权限管理等方面的痛点,具备委托单管理.....' },
      { imgUrl: 'http://192.168.1.201:9000/portal/product-our/TQS系统.png', title: 'TQS系统', desc: '解决制造业、汽车业培训痛点。它涵盖多个模块,具备人员信息管理、培训管理、岗位技能培训管理等功能,能实现培训数字...' },
      { imgUrl: 'http://192.168.1.201:9000/portal/product-our/外部供应商管理系统.png', title: '外部供应商管理系统', desc: '破信息壁垒,实现数据共享,自动化处理订单,增强沟通与生产跟踪。系统具备多模块功能,涵盖用户、订单、工单等管理,支持移动端扫码记录工时...' }
    ]
  },
  { products: [
      { imgUrl: 'http://192.168.1.201:9000/portal/product-our/JIT.png', title: 'JIT', desc: '面向工业领域的生产管理系统,旨在减少库存和浪费、提升生产效率。它针对数据出错、库存积压等行业痛点,提供数字化管理、自动化检测等解决方案。系统具备物料管理、工艺路线管理等多种功能,实现生产全过程管控与高效运营' },
      { imgUrl: 'http://192.168.1.201:9000/portal/product-our/CPTM.png', title: 'CPTM', desc: '优化人力开发流程,助力企业发展。它解决了企业培训管理缺乏系统化、报考流程效率低等问题,具备集成平台管理、自动化流程、技能评估等功能,涵盖培训管理、人员信息管理等模块,推动员工和团队能力提升。' },
  ] }
]);
const ProductCenters = ref<ProductCenter[]>([
  { url:'http://192.168.1.201:9000/portal/product-center/LIMS系统介绍方案.pdf', name:'LIMS实验室管理系统', desc:'LIMS实验室管理系统'},
  { url:'http://192.168.1.201:9000/portal/product-center/外部供应商管理系统介绍.pdf', name:'供应商管理系统',  desc:'供应商管理系统'},
  { url:'http://192.168.1.201:9000/portal/product-center/TQS系统介绍与解决方案.pdf', name:'TQS企业培训系统',  desc:'TQS企业培训系统'},
  { url:'http://192.168.1.201:9000/portal/product-center/花满芫小程序产品介绍.pdf', name:'S2B2B小程序平台',  desc:'S2B2B小程序平台'},
  { url:'http://192.168.1.201:9000/portal/product-center/JIT系统介绍.pdf', name:'JIT系统',  desc:'JIT系统'},
  { url:'http://192.168.1.201:9000/portal/product-center/CPTM软件产品介绍.pdf', name:'CPTM企业能力管理系统',  desc:'CPTM企业能力管理系统'},
])
const companyInfo = ref<CompanyInfo>({
  logo: "http://192.168.1.201:9000/portal/logo.png",
  name: "云游四方",
  desc: "专注于智能化解决方案",
  address: "江苏省苏州市虎丘区华云路1号桑田岛科创园",
  wechat:"http://192.168.1.201:9000/portal/company-info/联系微信.png",
  phoneHotList: ["400-123-4567", "010-88889999"],
  phoneSaleAfterList: ["400-987-6543", "010-66667777"],
  qrCodeList: [
    { url:"http://192.168.1.201:9000/portal/company-info/服务号.jpg", name:"服务号"},
    { url:"http://192.168.1.201:9000/portal/company-info/联系微信.png",name: "联系微信"},
  ]
});
</script>
<style scoped>
.home-container {
  position: relative;
  width: 100%;
  min-height: 100vh;
  margin: 0;
  padding: 0;
}
.el-menu--horizontal {
  --el-menu-horizontal-height: 40px;
}
.logo-container {
  display: flex;
  align-items: center;
}
.logo {
  height: 40px;
  margin-right: 10px;
}
.logo-text {
  font-size: 18px;
  font-weight: bold;
  color: #333;
}
.main-content {
  width: 100%;
  margin-top: 60px;
  /* 为固定的header留出空间 */
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0px;
  /* height: 600px; */
  width: 100%;
}
.banner {
  position: relative;
  width: 100%;
  min-height: calc(100vh - 60px);
  /* 减去header高度 */
  background: linear-gradient(to bottom, #1a237e, #3949ab);
  color: white;
  /* padding: 40px 0; */
  display: flex;
  flex-direction: column;
  align-items: center;
  box-sizing: border-box;
}
.logos-container {
  display: flex;
  justify-content: center;
  gap: 40px;
  margin: 30px 0;
}
.cert-logo,
.company-logo {
  height: 80px;
}
.main-title {
  font-size: 36px;
  text-align: center;
  margin: 40px 0;
}
.organizers {
  display: flex;
  justify-content: center;
  gap: 20px;
  margin: 20px 0;
}
.org-item {
  display: flex;
  align-items: center;
}
.org-label {
  color: #ccc;
  margin-right: 5px;
}
.org-name {
  color: white;
}
.location {
  margin: 40px 0;
}
.location h2 {
  font-size: 32px;
  text-align: center;
}
.info-cards {
  display: flex;
  justify-content: center;
  gap: 20px;
  width: 80%;
  margin-top: 40px;
  margin-bottom: 40px;
  /* 添加底部间距 */
  flex-wrap: wrap;
  /* 在小屏幕上允许换行 */
}
.info-card {
  background-color: rgba(255, 255, 255, 0.1);
  padding: 20px;
  border-radius: 5px;
  flex: 1;
  min-width: 250px;
  /* 确保在小屏幕上有最小宽度 */
}
.card-title {
  font-size: 18px;
  margin-bottom: 10px;
  color: white;
}
.card-desc {
  color: #ddd;
  font-size: 14px;
}
.float-buttons {
  position: fixed;
  right: 20px;
  bottom: 100px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.float-btn {
  width: 60px;
  height: 60px;
  display: flex;
  justify-content: center;
  align-items: center;
}
.btn-content {
  display: flex;
  flex-direction: column;
  align-items: center;
  font-size: 12px;
}
.product-btn {
  background-color: #fff;
  color: #333;
}
.service-btn {
  background-color: #fff;
  color: #333;
}
.top-btn {
  background-color: #fff;
  color: #333;
}
/* 添加响应式设计 */
@media (max-width: 768px) {
  .organizers {
    display: flex;
    justify-content: center;
    gap: 20px;
    margin: 20px 0;
  }
  .org-item {
    display: flex;
    align-items: center;
  }
  .org-label {
    color: #ccc;
    margin-right: 5px;
  }
  .org-name {
    color: white;
  }
  .location {
    margin: 40px 0;
  }
  .location h2 {
    font-size: 32px;
    text-align: center;
  }
  .info-cards {
    display: flex;
    justify-content: center;
    gap: 20px;
    width: 80%;
    margin-top: 40px;
    margin-bottom: 40px;
    /* 添加底部间距 */
    flex-wrap: wrap;
    /* 在小屏幕上允许换行 */
  }
  .info-card {
    background-color: rgba(255, 255, 255, 0.1);
    padding: 20px;
    border-radius: 5px;
    flex: 1;
    min-width: 250px;
    /* 确保在小屏幕上有最小宽度 */
  }
  .card-title {
    font-size: 18px;
    margin-bottom: 10px;
    color: white;
  }
  .card-desc {
    color: #ddd;
    font-size: 14px;
  }
  .float-buttons {
    position: fixed;
    right: 20px;
    bottom: 100px;
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .float-btn {
    width: 60px;
    height: 60px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .btn-content {
    display: flex;
    flex-direction: column;
    align-items: center;
    font-size: 12px;
  }
  .product-btn {
    background-color: #fff;
    color: #333;
  }
  .service-btn {
    background-color: #fff;
    color: #333;
  }
  .top-btn {
    background-color: #fff;
    color: #333;
  }
  /* 添加响应式设计 */
  @media (max-width: 768px) {
    .organizers {
      flex-direction: column;
      align-items: center;
    }
    .info-cards {
      width: 90%;
    }
    .main-title {
      font-size: 28px;
      padding: 0 15px;
    }
  }
  </style>
  <style scoped>
  .demonstration {
    color: var(--el-text-color-secondary);
  }
  .el-carousel__item h3 {
    color: #475669;
    opacity: 0.75;
    line-height: 150px;
    margin: 0;
    text-align: center;
  }
  .el-carousel__item:nth-child(2n) {
    /* background-color: #FFFFFF; */
  }
  .el-carousel__item:nth-child(2n + 1) {
    /* background-color: #FFFFFF; */
  }
  </style>
  <style scoped>
  .carousel-container {
    position: relative;
    margin-top: 30px;
  }
  .overlay-carousel {
    position: absolute;
    top: 400px;
    /* 调整此值控制重叠程度 */
    left: 50%;
    transform: translateX(-50%);
    width: 80%;
    /* 适当调整宽度 */
  }
  .our-products {
    margin-top: 10px;
    width: 100%;
    display: flex;
    flex-direction: column;
    /* 设置子元素垂直排列 */
    align-items: center;
    /* 可选:将子元素水平居中 */
    padding: 0 20px;
  }
  .our-products-title {
    width: 100%;
    height: 50px;
    text-align: center;
  }
  .our-products-carousel {
    margin-top: 30px;
    width: 80%;
    /* height: 300px; */
  }
  .our-products-carousel-product {
    width: 100%;
    display: flex;
    flex-direction: column;
    /* 设置子元素垂直排列 */
    align-items: center;
    /* 可选:将子元素水平居中 */
    padding: 0 5px;
  }
  .card-content-div {
    text-align: center;
    margin: 10px;
  }
  .card-content-div-title {
    font-weight: 500;
  }
  .card-content-div-content {
    color: gray;
    font-size: 14px;
  }
  .third-other {
    width: 100%;
    text-align: center;
    margin-top: 20px;
    background-color: #F2F5FA;
  }
  .footer-list {
    display: flex;
    flex-wrap: wrap;
    /* Allow wrapping to new lines */
  }
  .footer-list li {
    width: 48%;
    /* Adjust this value to control the width of each item */
    margin-bottom: 5px;
    /* Optional: Adds space between rows */
    text-align: left;
  }
  .f12 {
    font-size: 12px;
    color: #2B2B2B;
  }
  ul,
  ol,
  li {
    list-style: none;
  }
  ul {
    margin: 0;
  }
  ol,
  ul {
    margin-top: 0;
    margin-bottom: 10px;
  }
  .cooperation-img {
    width: 50px;
    height: 50px;
    object-fit: cover;
    margin: 5px;
  }
  .contact-us {
    margin: 10px;
  }
  .j-a-c {
    display: flex;
    /* justify-content: center; */
    align-items: center;
  }
  .logo-l {
    height: 20px;
  }
  .logo-l-text {
    font-size: 12px;
    font-weight: bold;
    color: #333;
  }
  .m-10 {
    margin-left: 10px;
  }
  .footer-QR-code {
    display: flex;
    justify-content: flex-start;
    margin-top: 10px;
  }
  .qr-code-img {
    width: 60px;
    height: 60px;
  }
  .xuanfu {
    width: 30px;
    height: 30px;
  }
::v-deep .el-carousel__mask {
    /* background-color: var(--el-color-white); */
    height: 100%;
    left: 0;
    opacity: .24;
    position: absolute;
    top: 0;
    transition: var(--el-transition-duration-fast);
    width: 100%;
}
  .carousel-content{
    /* width: 50%;
    background-color: #FFFFFF; */
    text-align: center;
  .info-cards {
    width: 90%;
  }
  </style>
  .main-title {
    font-size: 28px;
    padding: 0 15px;
  }
}
</style>
<style scoped>
.demonstration {
  color: var(--el-text-color-secondary);
}
.el-carousel__item h3 {
  color: #475669;
  opacity: 0.75;
  line-height: 150px;
  margin: 0;
  text-align: center;
}
.el-carousel__item:nth-child(2n) {
  /* background-color: #FFFFFF; */
}
.el-carousel__item:nth-child(2n + 1) {
  /* background-color: #FFFFFF; */
}
</style>
<style scoped>
.carousel-container {
  position: relative;
  margin-top: 30px;
  min-height: calc(100vh - 60px);
}
.carousel-content-main{
  height: 100%;
}
.overlay-carousel {
  position: absolute;
  top: calc(100vh - 200px);
  /* 调整此值控制重叠程度 */
  left: 50%;
  transform: translateX(-50%);
  width: 80%;
  /* 适当调整宽度 */
}
.our-products {
  margin-top: 50px;
  width: 100%;
  display: flex;
  flex-direction: column;
  /* 设置子元素垂直排列 */
  align-items: center;
  /* 可选:将子元素水平居中 */
  padding: 0 50px;
}
.our-products-title {
  width: 100%;
  height: 50px;
  text-align: center;
}
.our-products-carousel {
  margin-top: 30px;
  width: 80%;
  /* height: 300px; */
}
.our-products-carousel-product {
  width: 100%;
  display: flex;
  flex-direction: column;
  /* 设置子元素垂直排列 */
  align-items: center;
  /* 可选:将子元素水平居中 */
  padding: 0 5px;
}
.card-content-div {
  text-align: center;
  margin: 10px;
}
.card-content-div-title {
  font-weight: 500;
}
.card-content-div-content {
  color: gray;
  font-size: 14px;
}
.third-other {
  width: 100%;
  text-align: center;
  margin-top: 30px;
  background-color: #F2F5FA;
  padding: 20px;
}
.third-other-title {
  margin: 0 20px;
}
.footer-list {
  display: flex;
  flex-wrap: wrap;
  /* Allow wrapping to new lines */
}
.footer-list li {
  width: 48%;
  /* Adjust this value to control the width of each item */
  margin-bottom: 5px;
  /* Optional: Adds space between rows */
  text-align: left;
}
.f12 {
  font-size: 12px;
  color: #2B2B2B;
}
ul,
ol,
li {
  list-style: none;
}
ul {
  margin: 0;
}
ol,
ul {
  margin-top: 0;
  margin-bottom: 10px;
}
.cooperation-img {
  width: 50px;
  height: 50px;
  object-fit: cover;
  margin: 5px;
}
.contact-us {
  margin: 10px;
}
.j-a-c {
  display: flex;
  /* justify-content: center; */
  align-items: center;
}
.j-a-c-column{
  display: flex;
  align-items: center;
  flex-direction: column;
}
.logo-l {
  height: 20px;
}
.logo-l-text {
  font-size: 12px;
  font-weight: bold;
  color: #333;
}
.m-10 {
  margin-left: 10px;
}
.footer-QR-code {
  display: flex;
  justify-content: flex-start;
  margin-top: 10px;
}
.qr-code-img {
  width: 60px;
  height: 60px;
}
.xuanfu {
  width: 30px;
  height: 30px;
}
/*
::v-deep .el-carousel__mask {
  height: 100%;
  left: 0;
  opacity: .24;
  position: absolute;
  top: 0;
  transition: var(--el-transition-duration-fast);
  width: 100%;
} */
.carousel-content {
  /* width: 50%;
    background-color: #FFFFFF; */
  text-align: center;
}
</style>
src/pages/MainLayout.vue
@@ -1,10 +1,12 @@
<template>
  <HeaderMenu />
  <router-view />
  <Footer />
</template>
<script lang="ts" setup>
import HeaderMenu from '@/components/HeaderMenu.vue';
import Footer from '@/components/Footer.vue';
import { ref } from 'vue';
src/pages/Product.vue
@@ -1,129 +1,231 @@
<template>
    <div class="container">
  <div class="container">
    <el-container>
      <el-container>
        <el-container>
          <el-aside class="aside">
            <h5 class="aside-title">所有产品</h5>
            <el-menu default-active="2" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose">
              <el-sub-menu index="1">
        <el-aside class="aside">
          <h5 class="aside-title">所有产品</h5>
          <el-menu default-active="2" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose">
            <template v-for="item in menuItems" :key="item.index" @click="handleSelect(item)">
              <el-sub-menu v-if="item.subMenu" :index="item.index">
                <template #title>
                  <el-icon>
                    <location />
                    <component :is="item.icon" />
                  </el-icon>
                  <span>工业信息化</span>
                  <span>
                    <!-- {{ item.title }} -->
                    <el-link :underline="false" :href="item.pdfUrl" target="_blank"><span
                        class="f12">{{ item.title }}</span></el-link></span>
                </template>
                <el-menu-item index="1-1">lims系统</el-menu-item>
                <el-menu-item index="1-2">JIT系统</el-menu-item>
                <el-menu-item v-for="subItem in item.subMenu" :key="subItem.index" :index="subItem.index"
                  @click="handleSelect(subItem)">
                  <!-- {{ subItem.title }} -->
                  <el-link :underline="false" :href="subItem.pdfUrl" target="_blank"><span
                      class="f12">{{ subItem.title }}</span></el-link>
                </el-menu-item>
              </el-sub-menu>
              <el-menu-item index="2">
                <el-icon><icon-menu /></el-icon>
                <span>SaaS</span>
              </el-menu-item>
              <el-menu-item index="3">
              <el-menu-item v-else :index="item.index">
                <el-icon>
                  <setting />
                  <component :is="item.icon" />
                </el-icon>
                <span>C端</span>
                <span>{{ item.title }}</span>
              </el-menu-item>
            </el-menu>
          </el-aside>
          <el-main>
            <div class="main-up">
              <img src="http://192.168.1.201:9000/portal/product_2.png" class="main-image" alt="">
            </template>
          </el-menu>
        </el-aside>
        <el-main style="width: 80vh;overflow: hidden;">
          <div class="main-up">
            <!-- <img :src="curImg" class="main-image" alt=""> -->
             <div style="width: 100%; text-align: center;"><h1 style="font-weight: 600;color: #15A2E9 ;font-size: 20px;">云游四方操作系统</h1></div>
             <div style="width: 100%;height: 90%;">
              <img src="http://192.168.1.201:9000/portal/product-center/产品背景.png" alt="" style="width: 15%; height: 90%;margin: 10px;">
              <img src="http://192.168.1.201:9000/portal/product-center/产品背景2.png" alt="" style="width: 60%; height: 90%;margin: 10px;">
              <img src="http://192.168.1.201:9000/portal/product-center/产品背景图3.jpg" alt="" style="width: 15%; height: 90%;margin: 10px;">
             </div>
          </div>
          <div class="main-down">
            <h5 class="section-title">推荐产品</h5>
            <div class="card-container">
              <el-card v-for="(item, index) in products" :key="index" class="card">
                <img :src="item.imgUrl" class="card-image" />
                <div class="card-content">
                  <span class="card-title">{{ item.title }}</span>
                </div>
                <div class="card-content">
                  <span class="card-description">{{ item.desc }}</span>
                </div>
              </el-card>
            </div>
            <div class="main-down">
              <h5 class="section-title">推荐产品</h5>
              <div class="card-container">
                <el-card v-for="(item, index) in 3" :key="index" class="card">
                  <img src="http://192.168.1.201:9000/portal/bg.png" class="card-image" />
                  <div class="card-content">
                    <span class="card-title">智慧校园门户网站</span>
                  </div>
                  <div class="card-content">
                    <span class="card-description">提供全流程、一体化的数据</span>
                  </div>
                </el-card>
              </div>
            </div>
          </el-main>
        </el-container>
          </div>
        </el-main>
      </el-container>
    </div>
  </template>
  <script lang="ts" setup>
  import { Document, Menu as IconMenu, Location, Setting } from '@element-plus/icons-vue';
  const handleOpen = (key: string, keyPath: string[]) => {
    console.log(key, keyPath);
  };
  const handleClose = (key: string, keyPath: string[]) => {
    console.log(key, keyPath);
  };
  </script>
  <style scoped>
  .container {
    margin: 70px;
    height: 100%;
  }
  .aside {
    width: 200px;
  }
  .aside-title {
    margin-bottom: 10px;
  }
  .main-up {
    display: flex;
    justify-content: center;
    align-items: center;
    /* padding: 20px; */
  }
  .main-image {
    width: 800px;
    height: 250px;
  }
  .main-down {
    margin-top: 10px;
  }
  .section-title {
    margin-bottom: 10px;
  }
  .card-container {
    width: 100%;
    display: flex;
    flex-wrap: wrap;
  }
  .card {
    width: 200px;
    height: 200px;
    margin: 10px;
  }
  .card-image {
    width: 100%;
    height: 80px;
    object-fit: cover;
  }
  .card-content {
    text-align: center;
  }
  .card-title {
    font-weight: bold;
  }
  .card-description {
    color: gray;
  }
  </style>
    </el-container>
  </div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { Document, Menu as IconMenu, Location, Setting } from '@element-plus/icons-vue';
import { MenuItem, Products } from '@/models/portalModels';
const menuItems: MenuItem[] = [
  {
    index: '1',
    title: '工业信息化',
    imgUrl: '',
    pdfUrl: '',
    icon: Location,
    subMenu: [
      {
        index: '1-1',
        title: '实验室管理系统',
        imgUrl: 'http://192.168.1.201:9000/portal/product-our/实验室管理系统.png',
        pdfUrl: 'http://192.168.1.201:9000/portal/product-center/LIMS系统介绍方案.pdf',
      },
      {
        index: '1-2',
        title: 'TQS系统',
        imgUrl: 'http://192.168.1.201:9000/portal/product-our/TQS系统.png',
        pdfUrl: 'http://192.168.1.201:9000/portal/product-center/TQS系统介绍与解决方案.pdf',
      },
      {
        index: '1-3',
        title: 'CPTM系统',
        imgUrl: 'http://192.168.1.201:9000/portal/product-our/CPTM.png',
        pdfUrl: 'http://192.168.1.201:9000/portal/product-center/CPTM软件产品介绍.pdf',
      },
      {
        index: '1-4',
        title: 'JIT系统',
        imgUrl: 'http://192.168.1.201:9000/portal/product-our/JIT.png',
        pdfUrl: 'http://192.168.1.201:9000/portal/product-center/JIT系统介绍.pdf',
      },
    ],
  },
  {
    index: '2',
    title: 'SaaS平台',
    imgUrl: '',
    pdfUrl: '',
    icon: IconMenu,
    subMenu: [
      {
        index: '2-1',
        title: '供应商管理系统',
        imgUrl: 'http://192.168.1.201:9000/portal/product-our/外部供应商管理系统.png',
        pdfUrl: 'http://192.168.1.201:9000/portal/product-center/外部供应商管理系统介绍.pdf',
      },
      {
        index: '2-2',
        title: 'S2B2B平台',
        imgUrl: 'http://192.168.1.201:9000/portal/product-our/S2B2B.png',
        pdfUrl: 'http://192.168.1.201:9000/portal/product-center/花满芫小程序产品介绍.pdf',
      },
    ],
  },
  {
    index: '3',
    title: 'C端',
    imgUrl: '',
    pdfUrl: '',
    icon: Setting,
    subMenu: [
    ],
  },
];
const products = ref<Products[]>([
  { imgUrl: 'http://192.168.1.201:9000/portal/product-our/外部供应商管理系统.png', title: '外部供应商管理系统', desc: '破信息壁垒,实现数据共享,自动化处理订单,增强沟通与生产跟踪。系统具备多模块功能,涵盖用户、订单、工单等管理,支持移动端扫码记录工时...' },
  { imgUrl: 'http://192.168.1.201:9000/portal/product-our/S2B2B.png', title: 'S2B2B', desc: '通过数字化整合上下游资源,重构传统供应链“多级分销、信息割裂”的痛点,实现供应商增收......' },
  { imgUrl: 'http://192.168.1.201:9000/portal/product-our/实验室管理系统.png', title: '实验室管理系统', desc: '主要应用于汽车零部件质检行业。它能解决委托单流转、设备管理、数据管理、权限管理等方面的痛点,具备委托单管理.....' },
  // { imgUrl: 'http://192.168.1.201:9000/portal/product-our/TQS系统.png', title: 'TQS系统', desc: '解决制造业、汽车业培训痛点。它涵盖多个模块,具备人员信息管理、培训管理、岗位技能培训管理等功能,能实现培训数字...' },
  // { imgUrl: 'http://192.168.1.201:9000/portal/product-our/外部供应商管理系统.png', title: '外部供应商管理系统', desc: '破信息壁垒,实现数据共享,自动化处理订单,增强沟通与生产跟踪。系统具备多模块功能,涵盖用户、订单、工单等管理,支持移动端扫码记录工时...' },
  // { imgUrl: 'http://192.168.1.201:9000/portal/product-our/JIT.png', title: 'JIT', desc: '面向工业领域的生产管理系统,旨在减少库存和浪费、提升生产效率。它针对数据出错、库存积压等行业痛点,提供数字化管理、自动化检测等解决方案。系统具备物料管理、工艺路线管理等多种功能,实现生产全过程管控与高效运营' },
  // { imgUrl: 'http://192.168.1.201:9000/portal/product-our/CPTM.png', title: 'CPTM', desc: '优化人力开发流程,助力企业发展。它解决了企业培训管理缺乏系统化、报考流程效率低等问题,具备集成平台管理、自动化流程、技能评估等功能,涵盖培训管理、人员信息管理等模块,推动员工和团队能力提升。' },
])
const handleOpen = (key: string, keyPath: string[]) => {
  console.log(key, keyPath);
};
const handleClose = (key: string, keyPath: string[]) => {
  console.log(key, keyPath);
};
const handleSelect = (item: MenuItem) => {
  console.log(item);
  curImg.value = item.imgUrl
};
const curImg = ref('http://192.168.1.201:9000/portal/bg.png');
</script>
<style scoped>
.container {
  margin: 70px;
  height: 100%;
}
.aside {
  width: 200px;
}
.aside-title {
  margin-bottom: 10px;
}
.main-up {
  display: flex;
  /* justify-content: center; */
  /* align-items: center; */
  height: 38vh;
  flex-direction: column;
  /* padding: 20px; */
}
.main-image {
  width: 90%;
  height: 100%;
}
.main-down {
  margin-top: 10px;
}
.section-title {
  margin-bottom: 10px;
}
.card-container {
  width: 100%;
  display: flex;
  flex-wrap: wrap;
}
.card {
  width: 200px;
  min-height: 250px;
  margin: 10px;
}
.card-image {
  width: 100%;
  height: 120px;
  object-fit: cover;
}
.card-content {
  text-align: center;
}
.card-title {
  font-weight: bold;
}
.card-description {
  color: gray;
}
</style>