GPU_Web/src/views/home/index.vue
2025-12-30 15:09:25 +08:00

407 lines
13 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 style="background-color: rgba(250, 251, 253,1);">
<div style="height: 600px; overflow: hidden;">
<a-carousel :after-change="onChange" style="height: 100%;" autoplay>
<template #prevArrow>
<div class="custom-slick-arrow" style="left: 10px; z-index: 1">
<left-circle-outlined />
</div>
</template>
<template #nextArrow>
<div class="custom-slick-arrow" style="right: 10px">
<right-circle-outlined />
</div>
</template>
<div v-for="item in bannerList" :key="item.id" class="banner-slide">
<img :src="item.image_url" alt="" srcset="" width="100%" height="100%">
</div>
</a-carousel>
</div>
<div class="one">
<div v-for="item in oneList" style="display: flex;justify-content: center;align-items: center;cursor: pointer;" @click="router.push(item.path)">
<div style="margin-right: 10px;"><img :src="item.img" alt="" srcset="" width="50" height="50"></div>
<div>
<h3>{{ item.title }}</h3>
<span>{{ item.description }}</span>
</div>
</div>
</div>
<div class="two">
<div>
<div>
<div style="margin-bottom: 40px;">
<div class="title">
<span>高性价比的算力服务</span>
</div>
<div class="subtitle">
高性价比+稳定性能算力服务适配多场景热门算力服务如下:
</div>
</div>
<div class="list_card">
<div v-for="(value, index) in source" style="padding: 0 10px;text-align: center;font-size: 16px;"
:style="{ 'border-top': `3px solid ${listColor[index]}` }">
<div class="name"
style="font-size: 24px;font-weight: bold;padding: 20px;border-bottom: 1px solid #c9c9c9;text-align: center;">
{{ value.gpu_type }}
</div>
<div class="price" style="margin: 30px 0;">
<span style="font-size: 24px;font-weight: bold;color: #5b85fe;">¥{{ value.payOnTime }}</span>
<span style="font-size: 12px;">/小时</span>
</div>
<div style="padding-bottom: 40px;line-height: 40px;">
<!-- 修改这里添加单位 -->
<div>内存{{ value.memory }}GB</div>
<div>显存{{ value.vram }}GB</div>
<div>GPU{{ value.gpu_num }}</div>
</div>
</div>
</div>
</div>
<div>
<div style="margin-bottom: 40px;">
<div class="title">
<span>产品优势</span>
</div>
<div class="subtitle">
按需租赁高算力稳定省心更省成本
</div>
</div>
<div class="avatary_list">
<div class="avatary_item">
<div>
<div class="title" style="font-size: 28px;">海量高性能 GPU 集群算力</div>
<div class="subtitle" style="text-align: left;font-size: 18px;line-height:30px;">搭载 NVIDIA A100/H100/H800 等高性能
GPU拥有强悍算力与超高显存带宽精准适配不同精度需求大幅提升运算效率与资源利用率同时优化稀疏矩阵运算有效减少 AI 模型的冗余计算</div>
</div>
<img src="@/assets/jimeng.png" alt="" srcset="" width="300" height="300">
</div>
<div class="avatary_item" style="margin-bottom: 50px;">
<img src="@/assets/gpu.png" alt="" srcset="" width="300">
<div>
<div class="title" style="font-size: 28px;">算力灵活调度</div>
<div class="subtitle" style="text-align: left;font-size: 18px;line-height:30px;">
本平台支持按需计费与包周期计费两种正式模式适配短期突发算力需求与长期稳定部署场景按需计费按实结算避免资源浪费包周期计费性价比更优保障持续运算用户可自主择选兼顾成本与效率助力业务高效推进
</div>
</div>
</div>
<div class="avatary_item">
<div>
<div class="title" style="font-size: 28px;">低价高配 算力性价比超高</div>
<div class="subtitle" style="text-align: left;font-size: 18px;line-height:30px;">
算力性价比之王花一半钱享翻倍算力顶级硬件配置 + 灵活计费模式无隐形消费中小团队初创企业无需负担高昂成本轻松拥抱 AI 时代高性价比之选
</div>
</div>
<img src="@/assets/jimeng2.png" alt="" srcset="" width="300" height="300px">
</div>
</div>
</div>
</div>
</div>
<div class="three"></div>
<div class="footer">
<div class="footer_contain">
<div>
<div style="color: #000000;">服务热线:</div>
<div style="font-size: 36px;font-weight: bold;padding: 20px 0;">400-110-6993</div>
<div>邮箱:service@hzzxxd.com</div>
<div>地址:江苏省南通市崇川区紫琅科技城3号楼</div>
</div>
<div>
<div style="color: #000000;">快速导航</div>
<div>算力中心</div>
<div>云主机</div>
<div>用户文档</div>
</div>
<div style="display: flex;align-items: center;gap: 60px;">
<div style="display: flex;flex-direction: column;align-items: center;">
<img src="@/assets/qr.jpg" alt="" srcset="" width="100">
<div>公众号</div>
</div>
<div style="display: flex;flex-direction: column;align-items: center;">
<img src="@/assets/qr.jpg" alt="" srcset="" width="100">
<div>企业微信</div>
</div>
</div>
</div>
<div
style="border-top: 1px solid #ebe4e4;height: 45px;text-align: center;line-height: 45px;color: #666666;font-size: 14px;">
苏备案号20251124号</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { LeftCircleOutlined, RightCircleOutlined } from '@ant-design/icons-vue';
import { ref } from 'vue'
import { useRouter } from 'vue-router';
import { getBannerList, getGpuList, getAdvantage, getHotProduct } from '@/apis/home';
import one from '@/assets/1.png'
import two from '@/assets/2.png'
import three from '@/assets/3.png'
import firth from '@/assets/4.png'
import youhuiquan from '@/assets/youhuiquan-2.png'
import yaoqinghaoyou from '@/assets/yaoqinghaoyou-4.png'
import goumaijilu from '@/assets/goumaijilu.png'
import defaultBanner3 from '@/assets/12.png';
import defaultBanner4 from '@/assets/333.png';
import defaultBanner from '@/assets/333.png';
const router = useRouter();
const listColor = ref(['#7ed321', '#21d3c0', '#35a4de'])
const source = ref([])
const oneList = ref([
{
img: youhuiquan,
title: '算力免费领',
description: '完成认证/问卷获得算力券',
path:'/active/newUser'
},
{
img: yaoqinghaoyou,
title: '邀约优算友',
description: '邀请好友可获得算力券',
path:'/active/invite'
},
{
img: goumaijilu,
title: '开业重磅福利',
description: '购算力,享豪礼',
path:'/active/newUser'
}
])
const advantageList = ref([])
const bannerList = ref<any[]>([
{ id: 0, image_url: defaultBanner3 },
{ id: 1, image_url: defaultBanner4 }
]);
const onChange = (current: number) => {
console.log(current);
};
// 请求轮播
const fetchBannerList = async () => {
try {
const res: any = await getBannerList();
// 处理返回的数据
if (res && Array.isArray(res) && res.length > 0) {
const processedList = res.map((item: any, index: number) => {
// 确保每个item都有id
const processedItem = {
id: item.id || index,
image_url: item.image_url || defaultBanner
};
// 处理http协议问题
if (processedItem.image_url && processedItem.image_url.startsWith('http://')) {
processedItem.image_url = processedItem.image_url.replace('http://', 'https://');
}
return processedItem;
});
bannerList.value = processedList;
} else {
// API返回空数据或无效数据使用默认图片
bannerList.value = [{ id: 0, image_url: defaultBanner }];
}
} catch (error: any) {
console.error('轮播图请求失败:', error);
// 请求失败时使用默认图片
bannerList.value = [{ id: 0, image_url: defaultBanner }];
}
};
// 请求GPU列表
const getGPUList = async () => {
try {
// const res: any = await getGpuList();
source.value = [
{ gpu_type: 'NVIDIA RTX 3090', payOnTime: 15.0, memory: 64, vram: 24, gpu_num: 1 },
{ gpu_type: 'NVIDIA A100', payOnTime: 25.0, memory: 128, vram: 40, gpu_num: 1 },
{ gpu_type: 'NVIDIA RTX 4090', payOnTime: 30.0, memory: 96, vram: 24, gpu_num: 1 }
];
} catch (error: any) {
console.error('GPU列表请求失败:', error);
}
}
// 请求产品优势
const getAdvantageList = async () => {
try {
// const res: any = await getAdvantage();
const list = [
{ title: '高性能算力', description: '采用最新一代GPU提供强大计算能力满足各种复杂任务需求。' },
{ title: '灵活计费模式', description: '支持按需付费和包月套餐,用户可根据实际需求选择最合适的计费方式。' },
{ title: '全球节点覆盖', description: '在多个地区设有数据中心,确保用户无论身处何地都能享受低延迟的服务体验。' },
{ title: '专业技术支持', description: '提供7x24小时技术支持确保用户在使用过程中遇到的问题能够及时得到解决。' }
];
// 给每个 item 添加 img 字段
list.forEach((item: any, index: number) => {
if (index === 0) {
item.img = one;
} else if (index === 1) {
item.img = two;
} else if (index === 2) {
item.img = three;
} else {
item.img = firth;
}
});
advantageList.value = list;
} catch (error: any) {
console.error('产品优势请求失败:', error);
}
}
// fetchBannerList();
getGPUList();
getAdvantageList();
</script>
<style scoped lang="scss">
.banner-slide {
width: 100%;
height: 600px;
// background: url('@/assets/banner2.png') no-repeat center / cover;
}
.one {
display: flex;
justify-content: space-around;
align-items: center;
padding: 30px 0;
width: 1200px;
margin: 0 auto;
border-radius: 27px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.25);
&>div {
padding: 10;
flex: 1;
display: flex;
align-items: center;
& span {
color: #666666
}
}
}
.two {
// background-image: linear-gradient(to bottom, #eaf7fc, #f4fafc);
padding-bottom: 80px;
&>div {
width: 1200px;
margin: 0 auto;
.title {
font-size: 28px;
font-weight: 700;
text-align: center;
}
&>div:first-child {
padding: 44px 0;
}
.subtitle {
margin-top: 20px;
color: rgb(153, 153, 153);
text-align: center;
}
.list_card {
margin-top: 30px;
display: flex;
justify-content: space-between;
gap: 20px;
&>div {
flex: 1;
background-color: #ffffff;
line-height: 30px;
transition: all 0.4s cubic-bezier(0.25, 0.1, 0.25, 1);
/* 更长的过渡时间和不同的缓动函数 */
}
&>div:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
}
.avatary_list {
// display: grid;
// grid-template-columns: repeat(2, 1fr);
// gap: 50px;
&>div {
display: flex;
// flex-direction: column;
align-items: flex-start;
justify-content: space-between;
gap: 100px;
&>div{
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
}
.title {
color: #59b2f2;
font-size: 18px;
font-weight: bold;
line-height: 30px;
margin-top: 20px;
}
.subtitle {
color: #666666;
}
}
}
}
.three {
height: 180px;
background: url('@/assets/bottom.png') no-repeat center / 100% 100%;
}
.footer {
height: 260px;
background-color: #ffffff;
width: 100%;
.footer_contain {
width: 1200px;
margin: 0 auto;
height: calc(100% - 45px);
display: flex;
justify-content: space-around;
align-items: self-start;
padding: 20px 0;
&>div {
line-height: 30px;
color: #3a3939;
}
}
}
/* For demo */
</style>