2025-12-15 17:46:47 +08:00

465 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="main-page">
<!-- banner图 -->
<div class="top-box">
<div class="title">
<p class="title-top">
<span class="name">开元云</span> 您身边的AI管家
</p>
<p class="title-btm">
全球领先的AI服务运营商
</p>
</div>
</div>
<!-- 云筑企业基座 -->
<div class="base-box">
<div class="text">
<div class="text-top">云筑企业基座</div>
<div class="text-btm">多云结合 让上云更简单</div>
</div>
<!-- 内容 -->
<div class="content">
<div class="item-box" v-for="(item, key) in baseData" :key="key">
<div class="item-title">{{ item.title }}</div>
<div class="item-description">{{ item.description }}</div>
<!-- 优势列表 -->
<div class="advantage-list" v-if="item.list && item.list.length">
<div class="advantage-item" v-for="listItem in item.list" :key="listItem.id">
<p>
<img v-if="listItem.icon" :src="getIconPath(listItem.icon)" alt="" class="advantage-icon" />
<span v-if="listItem.name" class="advantage-name">{{ listItem.name }} : </span>
<span class="advantage-content">{{ listItem.content }}</span>
</p>
</div>
</div>
<div class="item-price">
<span class="price-icon">¥</span>
<span class="price">{{ item.price }}</span> {{ item.price_unit }}
</div>
<div class="item-button">
<div class="item-button-text" @click="openConsultDialog(item, '云筑企业基座')">立即咨询</div>
</div>
</div>
</div>
</div>
<!-- 智算未来征程 -->
<div class="journey-box">
<div class="text">
<div class="text-top">智算未来征程</div>
<div class="text-btm">多元异构 灵活短租</div>
</div>
<!-- 内容 -->
<div class="content">
<div class="item-box" v-for="(item, key) in journeyData" :key="key">
<div class="item-title">{{ item.title }}</div>
<div class="item-description">{{ item.description }}</div>
<!-- 优势列表 -->
<div class="advantage-list" v-if="item.list && item.list.length">
<div class="advantage-item" v-for="listItem in item.list" :key="listItem.id">
<p>
<img v-if="listItem.icon" :src="getIconPath(listItem.icon)" alt="" class="advantage-icon" />
<span v-if="listItem.name" class="advantage-name">{{ listItem.name }} : </span>
<span class="advantage-content">{{ listItem.content }}</span>
</p>
</div>
</div>
<div class="item-price">
<span class="price-icon">¥</span>
<span class="price">{{ item.price }}</span> {{ item.price_unit }}
</div>
<div class="item-button">
<div class="item-button-text" @click="openConsultDialog(item, '智算未来征程')">立即咨询</div>
</div>
</div>
</div>
</div>
<!-- 网织智能经纬 -->
<div class="latitude-box">
<div class="text">
<div class="text-top">网织智能经纬</div>
<div class="text-btm">云算网结合 让连接更简单</div>
</div>
<!-- 内容 -->
<div class="content">
<div class="item-box" v-for="(item, key) in latitude" :key="key">
<div class="item-title">{{ item.title }}</div>
<div class="item-description">{{ item.description }}</div>
<!-- 优势列表 -->
<div class="advantage-list" v-if="item.advantageList && item.advantageList.length">
<div class="advantage-item" v-for="advantage in item.advantageList" :key="advantage.id">
<p>
<img v-if="advantage.icon" :src="getIconPath(advantage.icon)" alt="" class="advantage-icon" />
<span class="advantage-name">{{ advantage.name }}</span>
<span class="advantage-content">{{ advantage.content }}</span>
</p>
</div>
</div>
<!-- 标签列表 - 添加边框 -->
<div class="tag-list" v-if="item.tagList && item.tagList.length">
<span class="tag-item" v-for="tag in item.tagList" :key="tag.id">
{{ tag.name }}
</span>
</div>
<div class="item-button">
<div class="item-button-text" @click="openConsultDialog(item, '网织智能经纬')">立即咨询</div>
</div>
</div>
</div>
</div>
<!-- 合作伙伴 -->
<div class="partner">
<div class="text">
<div class="text-top">合作伙伴</div>
<div class="text-btm">Partners</div>
</div>
<!-- 滚动合作伙伴内容 -->
<div class="partner-scroll">
<div class="logo-scroll-wrapper">
<div class="logo-scroll-container">
<div v-for="(image, index) in duplicatedImages" :key="index" class="logo-item">
<img :src="image" />
</div>
</div>
</div>
</div>
</div>
<!-- 修改footer部分 -->
<div class="footer">
<div class="footer-content">
<!-- 顶部信息 -->
<div class="footer-top">
<div class="logo-footer">
<img :src="logoImg" alt="公司logo" v-if="logoImg">
<!-- <img src="@/assets/kyy/LOGO.png" alt="公司logo" class="img"> -->
</div>
<div class="contact-info">
<div class="contact-item">
<i class="iconfont icon-dizhi"></i>
<span class="label">地址</span>
<span class="value">{{ address }}</span>
</div>
<div class="contact-item">
<i class="iconfont icon-dianhua"></i>
<span class="label">电话</span>
<div class="phone-numbers">
<a href="tel:400-6150805" class="phone-link">400-6150805</a>
<span class="phone-separator">/</span>
<a href="tel:010-65917875" class="phone-link">010-65917875</a>
</div>
</div>
<div class="contact-item">
<i class="iconfont icon-youxiang"></i>
<span class="label">邮箱</span>
<a href="mailto:Open-computing@kaiyuancloud.cn" class="email-link">
Open-computing@kaiyuancloud.cn
</a>
</div>
</div>
</div>
<!-- 备案信息 -->
<div class="footer-bottom">
<div class="icp-info">
<div class="icp-item">
<span class="icp-text">ICP备案号</span>
<span class="icp-number">{{ ICP }}</span>
</div>
<div class="copyright">
版权所有 © kaiyuanyun 2023
</div>
</div>
<div class="record-info">
<div class="police-record">
<img src="@/image/login/policeInsignia/policeInsignia.png" alt="公安备案图标" class="police-icon">
<a href="https://beian.mps.gov.cn/#/query/webSearch?code=11010502054007" rel="noreferrer" target="_blank"
class="police-link">
京公网安备 11010502054007
</a>
</div>
<div class="license-record">
<router-link tag="a" target="_blank" class="license-link" :to="{ name: 'homePageImage' }">
经营许可证京B2-20232313
</router-link>
</div>
</div>
<!-- 移动端显示的二维码 -->
<div class="mobile-qr">
<div class="qr-item">
<div class="qr-code">
<img src="@/assets/kyy/kyy公众号.jpg" alt="微信客服二维码">
</div>
<span class="qr-desc">扫描关注二维码</span>
</div>
<div class="qr-item">
<div class="qr-code">
<img src="@/assets/kyy/客服wechat.png" alt="微信客服二维码">
</div>
<span class="qr-desc">微信客服</span>
</div>
</div>
</div>
</div>
<!-- PC端显示的二维码移动端隐藏 -->
<div class="pc-qr">
<div class="qr-box">
<div class="qr-code">
<img src="@/assets/kyy/客服wechat.png" alt="微信客服二维码">
</div>
<span class="qr-content">微信客服</span>
</div>
</div>
</div>
<!-- 产品咨询弹窗 -->
<ProductConsultDialog :visible.sync="showConsultDialog" :platform-name="platformName" :qr-code="qrCode"
:default-form-data="consultFormData" :submit-api="submitConsultApi" @success="handleConsultSuccess"
@close="handleDialogClose" />
</div>
</template>
<script>
import { reqHotProduct } from '@/api/H5/index.js'
import { getLogoAPI } from "@/api/login"
import ProductConsultDialog from '../H5_dialog/index.vue'
import { reqProductConsult } from '@/api/H5/index'
export default {
name: 'MainPage',
components: {
ProductConsultDialog
},
data() {
return {
baseData: {},
journeyData: {},
latitude: {},
images: [
require('../images/top/img.png'),
require('../images/top/img_1.png'),
require('../images/top/img_2.png'),
require('../images/top/img_3.png'),
require('../images/top/img_4.png'),
require('../images/top/img_5.png'),
require('../images/top/img_6.png'),
require('../images/top/img_8.png'),
require('../images/top/img_9.png')
],
logoImg: require("@/assets/logo/colorLogo.png"),
logoText: "开元云(北京)科技有限公司",
url: window.location.href,
photosUrl: [],
ICP: "京ICP备2022001945号-1",
address: "农业展览馆13号瑞辰国际中心518B(团结湖地铁站c东南口步行420米)",
// 咨询弹窗相关
showConsultDialog: false,
platformName: '开元云',
qrCode: '',
consultFormData: {
content: '',
custom_type: '1',
name: '',
phone: '',
company: '',
email: '',
checked: false
},
currentItem: null,
currentCategory: null
}
},
computed: {
duplicatedImages() {
return [...this.images, ...this.images]
}
},
created() {
this.loadData()
},
methods: {
async loadData() {
try {
await this.getHotProduct()
await this.getCompanyInfo()
} catch (error) {
console.error('数据加载失败:', error)
}
},
async getHotProduct() {
const res = await reqHotProduct()
console.log('热门产品数据', res)
if (res.status) {
// 直接使用对象结构
this.baseData = res.data.base || {}
this.journeyData = res.data.suan || {}
this.latitude = res.data.net || {}
}
},
async getCompanyInfo() {
const params = {
url_link: this.parseURL(this.url)
}
const res = await getLogoAPI(params)
if (res.status && res.data && res.data.length) {
this.photosUrl = res.data[0]
if (this.photosUrl.orgname !== '业主机构') {
this.logoImg = this.photosUrl.logo || this.logoImg
this.logoText = this.photosUrl.orgname || this.logoText
this.ICP = this.photosUrl.license_number || this.ICP
this.address = this.photosUrl.address || this.address
}
} else {
this.showErrorMessage(res.msg || '获取公司信息失败')
}
},
parseURL(url) {
if (url.includes("#")) {
return url.split("#")[0]
}
return url
},
showErrorMessage(message) {
this.$message({
message,
type: "error"
})
},
// 获取图标路径
getIconPath(iconPath) {
// 如果图标路径是绝对路径或网络路径,直接返回
if (iconPath.startsWith('http') || iconPath.startsWith('//') || iconPath.startsWith('data:')) {
return iconPath
}
// 如果是相对路径,尝试使用 require 加载
try {
// 注意:这里可能需要根据实际路径调整
// 假设图标在 @/views/homePage/mainPage/ 目录下
return require(`@/views/homePage/mainPage/${iconPath}`)
} catch (e) {
console.warn('图标加载失败:', iconPath)
return ''
}
},
// 打开咨询弹窗
openConsultDialog(item, category) {
this.currentItem = item
this.currentCategory = category
// 构建优势列表文本
let advantageText = ''
if (item.list && item.list.length) {
advantageText = item.list.map(listItem => {
return listItem.name ? `${listItem.name}${listItem.content}` : listItem.content
}).join('\n')
} else if (item.advantageList && item.advantageList.length) {
advantageText = item.advantageList.map(advantage => {
return advantage.name ? `${advantage.name}${advantage.content}` : advantage.content
}).join('\n')
}
// 构建标签列表文本
let tagText = ''
if (item.tagList && item.tagList.length) {
tagText = item.tagList.map(tag => tag.name).join('、')
}
// 设置咨询表单的预填内容
this.consultFormData = {
...this.consultFormData,
content: `我想咨询关于【${item.title}】(${category})的产品信息\n产品描述${item.description}\n${advantageText ? '产品优势:\n' + advantageText : ''}${tagText ? '\n产品标签' + tagText : ''}${item.price ? '\n参考价格' + item.price + (item.price_unit || '') : ''}`
}
this.showConsultDialog = true
},
// 提交咨询API
async submitConsultApi(data) {
// 如果有额外的产品信息,可以添加到提交数据中
const submitData = {
...data,
product_name: this.currentItem?.title || '',
product_description: this.currentItem?.description || '',
product_category: this.currentCategory || '',
product_price: this.currentItem?.price || '',
product_price_unit: this.currentItem?.price_unit || '',
page_type: 'main_page'
}
return await reqProductConsult(submitData)
},
// 咨询成功回调
handleConsultSuccess(response) {
console.log('咨询提交成功:', response)
// 可以在这里添加后续逻辑,比如记录咨询历史等
this.$message.success('咨询提交成功,我们将尽快联系您!')
},
// 弹窗关闭回调
handleDialogClose() {
this.currentItem = null
this.currentCategory = null
// 重置表单数据
this.consultFormData = {
content: '',
custom_type: '1',
name: '',
phone: '',
company: '',
email: '',
checked: false
}
}
}
}
</script>
<style lang="less">
html,
body {
box-sizing: border-box;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow-x: hidden;
}
body {
overflow-y: auto !important;
background-color: #f8fafd;
}
</style>
<style lang="less" scoped>
@import url('../less/official/index.less');
</style>