feat: 初始化硅基伙伴企业官网项目
添加项目基础结构和核心页面组件,包括: - 首页布局与导航栏 - 产品服务展示区 - 客户案例模块 - 关于我们介绍 - 联系咨询表单 - 页脚信息 集成Vue 3 + Vite技术栈,配置TypeScript支持,添加基础样式和响应式设计
This commit is contained in:
39
.gitignore
vendored
Normal file
39
.gitignore
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
coverage
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
|
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Cypress
|
||||||
|
/cypress/videos/
|
||||||
|
/cypress/screenshots/
|
||||||
|
|
||||||
|
# Vitest
|
||||||
|
__screenshots__/
|
||||||
|
|
||||||
|
# Vite
|
||||||
|
*.timestamp-*-*.mjs
|
||||||
3
.vscode/extensions.json
vendored
Normal file
3
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["Vue.volar"]
|
||||||
|
}
|
||||||
42
README.md
Normal file
42
README.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# silicon-partner
|
||||||
|
|
||||||
|
This template should help get you started developing with Vue 3 in Vite.
|
||||||
|
|
||||||
|
## Recommended IDE Setup
|
||||||
|
|
||||||
|
[VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
|
||||||
|
|
||||||
|
## Recommended Browser Setup
|
||||||
|
|
||||||
|
- Chromium-based browsers (Chrome, Edge, Brave, etc.):
|
||||||
|
- [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd)
|
||||||
|
- [Turn on Custom Object Formatter in Chrome DevTools](http://bit.ly/object-formatters)
|
||||||
|
- Firefox:
|
||||||
|
- [Vue.js devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)
|
||||||
|
- [Turn on Custom Object Formatter in Firefox DevTools](https://fxdx.dev/firefox-devtools-custom-object-formatters/)
|
||||||
|
|
||||||
|
## Type Support for `.vue` Imports in TS
|
||||||
|
|
||||||
|
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.
|
||||||
|
|
||||||
|
## Customize configuration
|
||||||
|
|
||||||
|
See [Vite Configuration Reference](https://vite.dev/config/).
|
||||||
|
|
||||||
|
## Project Setup
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compile and Hot-Reload for Development
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Type-Check, Compile and Minify for Production
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
13
index.html
Normal file
13
index.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<link rel="icon" href="/favicon.ico">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Vite App</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.ts"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
2847
package-lock.json
generated
Normal file
2847
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
30
package.json
Normal file
30
package.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "silicon-partner",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "run-p type-check \"build-only {@}\" --",
|
||||||
|
"preview": "vite preview",
|
||||||
|
"build-only": "vite build",
|
||||||
|
"type-check": "vue-tsc --build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"vue": "^3.5.29"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@tsconfig/node24": "^24.0.4",
|
||||||
|
"@types/node": "^24.11.0",
|
||||||
|
"@vitejs/plugin-vue": "^6.0.4",
|
||||||
|
"@vue/tsconfig": "^0.8.1",
|
||||||
|
"npm-run-all2": "^8.0.4",
|
||||||
|
"typescript": "~5.9.3",
|
||||||
|
"vite": "^7.3.1",
|
||||||
|
"vite-plugin-vue-devtools": "^8.0.6",
|
||||||
|
"vue-tsc": "^3.2.5"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^20.19.0 || >=22.12.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
35
src/App.vue
Normal file
35
src/App.vue
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<NavBar />
|
||||||
|
<main>
|
||||||
|
<HeroSection />
|
||||||
|
<ServicesSection />
|
||||||
|
<FeaturesSection />
|
||||||
|
<StatsSection />
|
||||||
|
<CasesSection />
|
||||||
|
<AboutSection />
|
||||||
|
<CTASection />
|
||||||
|
</main>
|
||||||
|
<FooterSection />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import NavBar from './components/NavBar.vue'
|
||||||
|
import HeroSection from './components/HeroSection.vue'
|
||||||
|
import ServicesSection from './components/ServicesSection.vue'
|
||||||
|
import FeaturesSection from './components/FeaturesSection.vue'
|
||||||
|
import StatsSection from './components/StatsSection.vue'
|
||||||
|
import CasesSection from './components/CasesSection.vue'
|
||||||
|
import AboutSection from './components/AboutSection.vue'
|
||||||
|
import CTASection from './components/CTASection.vue'
|
||||||
|
import FooterSection from './components/FooterSection.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import './assets/main.css';
|
||||||
|
|
||||||
|
#app {
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
137
src/assets/main.css
Normal file
137
src/assets/main.css
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
|
||||||
|
|
||||||
|
*, *::before, *::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--green: #10b981;
|
||||||
|
--green-light: #34d399;
|
||||||
|
--green-dark: #059669;
|
||||||
|
--green-50: #ecfdf5;
|
||||||
|
--green-100: #d1fae5;
|
||||||
|
--green-200: #a7f3d0;
|
||||||
|
--gray-50: #f9fafb;
|
||||||
|
--gray-100: #f3f4f6;
|
||||||
|
--gray-200: #e5e7eb;
|
||||||
|
--gray-300: #d1d5db;
|
||||||
|
--gray-400: #9ca3af;
|
||||||
|
--gray-500: #6b7280;
|
||||||
|
--gray-600: #4b5563;
|
||||||
|
--gray-700: #374151;
|
||||||
|
--gray-800: #1f2937;
|
||||||
|
--gray-900: #111827;
|
||||||
|
--white: #ffffff;
|
||||||
|
--shadow-sm: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
|
||||||
|
--shadow: 0 4px 16px rgba(0,0,0,.06), 0 1px 4px rgba(0,0,0,.04);
|
||||||
|
--shadow-md: 0 8px 32px rgba(0,0,0,.08), 0 2px 8px rgba(0,0,0,.04);
|
||||||
|
--shadow-lg: 0 16px 48px rgba(0,0,0,.10), 0 4px 16px rgba(0,0,0,.05);
|
||||||
|
--radius: 16px;
|
||||||
|
--radius-sm: 10px;
|
||||||
|
--radius-lg: 24px;
|
||||||
|
--radius-xl: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||||
|
background: var(--white);
|
||||||
|
color: var(--gray-900);
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1440px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1200px) {
|
||||||
|
.container { padding: 0 48px; }
|
||||||
|
}
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.container { padding: 0 24px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 14px 28px;
|
||||||
|
background: var(--green);
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 50px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 600;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all .2s ease;
|
||||||
|
text-decoration: none;
|
||||||
|
letter-spacing: -.01em;
|
||||||
|
}
|
||||||
|
.btn-primary:hover {
|
||||||
|
background: var(--green-dark);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 8px 24px rgba(16,185,129,.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-secondary {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 14px 28px;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--gray-700);
|
||||||
|
border: 1.5px solid var(--gray-200);
|
||||||
|
border-radius: 50px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 600;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all .2s ease;
|
||||||
|
text-decoration: none;
|
||||||
|
letter-spacing: -.01em;
|
||||||
|
}
|
||||||
|
.btn-secondary:hover {
|
||||||
|
border-color: var(--green);
|
||||||
|
color: var(--green);
|
||||||
|
background: var(--green-50);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 6px 14px;
|
||||||
|
background: var(--green-50);
|
||||||
|
color: var(--green-dark);
|
||||||
|
border-radius: 50px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
letter-spacing: .02em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: clamp(32px, 4vw, 52px);
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--gray-900);
|
||||||
|
letter-spacing: -.03em;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-sub {
|
||||||
|
font-size: 18px;
|
||||||
|
color: var(--gray-500);
|
||||||
|
line-height: 1.7;
|
||||||
|
font-weight: 400;
|
||||||
|
max-width: 560px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.green { color: var(--green); }
|
||||||
138
src/components/AboutSection.vue
Normal file
138
src/components/AboutSection.vue
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
<template>
|
||||||
|
<section id="about" class="about">
|
||||||
|
<div class="container">
|
||||||
|
<div class="about-layout">
|
||||||
|
<div class="about-text">
|
||||||
|
<div class="tag">关于我们</div>
|
||||||
|
<h2 class="section-title" style="margin-top:16px">
|
||||||
|
专注 AI 落地<br>深耕企业场景
|
||||||
|
</h2>
|
||||||
|
<p class="section-sub" style="margin-top:16px">
|
||||||
|
北京硅基伙伴科技有限公司,成立于 2022 年,
|
||||||
|
总部位于北京。我们由一批来自顶级互联网公司和 AI 研究院的技术专家创立,
|
||||||
|
专注于企业 AI 数字化转型技术服务,致力于让先进的 AI 能力真正在企业中落地生根。
|
||||||
|
</p>
|
||||||
|
<p class="section-sub" style="margin-top:12px; font-size: 15px;">
|
||||||
|
我们相信,AI 不应该只是大企业的特权。
|
||||||
|
通过我们的产品和服务,让每一家企业都能享受到 AI 带来的生产力革命。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="team-tags">
|
||||||
|
<span v-for="t in teamTags" :key="t">{{ t }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="about-cards">
|
||||||
|
<div class="about-card" v-for="c in aboutCards" :key="c.title">
|
||||||
|
<div class="about-card-icon" v-html="c.icon"></div>
|
||||||
|
<h3>{{ c.title }}</h3>
|
||||||
|
<p>{{ c.desc }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const teamTags = [
|
||||||
|
'前阿里巴巴', '前腾讯', '前百度 AI', '清华大学 CS',
|
||||||
|
'北京大学', '斯坦福大学', 'IEEE Fellow'
|
||||||
|
]
|
||||||
|
|
||||||
|
const aboutCards = [
|
||||||
|
{
|
||||||
|
title: '使命',
|
||||||
|
desc: '让 AI 成为每家企业的核心竞争力,推动中国企业数字化转型进入智能时代。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><circle cx="12" cy="12" r="10"/><path d="M12 8v4l3 3"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '愿景',
|
||||||
|
desc: '成为中国企业 AI 数字化转型领域最受信赖的技术伙伴,服务超过 10,000 家企业。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '价值观',
|
||||||
|
desc: '客户成功优先、技术诚实透明、持续创新迭代、共赢长期主义。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>`,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.about {
|
||||||
|
padding: 120px 0;
|
||||||
|
background: var(--white);
|
||||||
|
}
|
||||||
|
.about-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 80px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.team-tags {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 8px;
|
||||||
|
margin-top: 32px;
|
||||||
|
}
|
||||||
|
.team-tags span {
|
||||||
|
padding: 6px 14px;
|
||||||
|
background: var(--gray-100);
|
||||||
|
border-radius: 50px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--gray-600);
|
||||||
|
}
|
||||||
|
.about-cards {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
.about-card {
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
align-items: flex-start;
|
||||||
|
background: var(--gray-50);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
padding: 28px;
|
||||||
|
border: 1.5px solid var(--gray-100);
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
.about-card:hover {
|
||||||
|
border-color: var(--green-200);
|
||||||
|
background: var(--green-50);
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
.about-card-icon {
|
||||||
|
width: 48px;
|
||||||
|
height: 48px;
|
||||||
|
background: white;
|
||||||
|
border-radius: 14px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
box-shadow: var(--shadow-sm);
|
||||||
|
border: 1px solid var(--gray-100);
|
||||||
|
}
|
||||||
|
.about-card h3 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--gray-900);
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.about-card p {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--gray-500);
|
||||||
|
line-height: 1.65;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1024px) {
|
||||||
|
.about-layout { grid-template-columns: 1fr; }
|
||||||
|
}
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.about { padding: 80px 0; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
326
src/components/CTASection.vue
Normal file
326
src/components/CTASection.vue
Normal file
@@ -0,0 +1,326 @@
|
|||||||
|
<template>
|
||||||
|
<section id="contact" class="cta-section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="cta-grid">
|
||||||
|
<!-- Left: Contact form -->
|
||||||
|
<div class="cta-form-wrap">
|
||||||
|
<div class="tag">联系我们</div>
|
||||||
|
<h2 class="section-title" style="margin-top:16px; font-size: clamp(28px,3vw,42px)">
|
||||||
|
开启您的<br> AI 转型之旅
|
||||||
|
</h2>
|
||||||
|
<p class="section-sub" style="margin-top:12px; font-size: 15px;">
|
||||||
|
填写信息,我们的解决方案顾问将在 1 个工作日内与您联系,为您提供专属方案。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<form class="contact-form" @submit.prevent="submitForm">
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>您的姓名 *</label>
|
||||||
|
<input v-model="form.name" type="text" placeholder="请输入姓名" required />
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>联系电话 *</label>
|
||||||
|
<input v-model="form.phone" type="tel" placeholder="请输入手机号" required />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>公司名称</label>
|
||||||
|
<input v-model="form.company" type="text" placeholder="请输入公司名称" />
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>感兴趣的产品</label>
|
||||||
|
<div class="checkbox-group">
|
||||||
|
<label class="checkbox-item" v-for="p in products" :key="p">
|
||||||
|
<input type="checkbox" :value="p" v-model="form.products" />
|
||||||
|
<span>{{ p }}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>您的需求描述</label>
|
||||||
|
<textarea v-model="form.message" placeholder="简单描述您的业务场景和需求..." rows="4"></textarea>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn-primary submit-btn" :class="{ loading: submitting }">
|
||||||
|
<span v-if="!submitted">
|
||||||
|
立即提交,免费咨询
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||||
|
</span>
|
||||||
|
<span v-else class="success-msg">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg>
|
||||||
|
提交成功,我们将尽快联系您!
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Right: Info -->
|
||||||
|
<div class="cta-info">
|
||||||
|
<div class="info-card">
|
||||||
|
<h3>快速响应承诺</h3>
|
||||||
|
<div class="promise-list">
|
||||||
|
<div class="promise" v-for="p in promises" :key="p.text">
|
||||||
|
<div class="promise-icon">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="promise-title">{{ p.title }}</div>
|
||||||
|
<div class="promise-text">{{ p.text }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-channels">
|
||||||
|
<h3>其他联系方式</h3>
|
||||||
|
<div class="channel" v-for="c in channels" :key="c.label">
|
||||||
|
<div class="channel-icon" v-html="c.icon"></div>
|
||||||
|
<div>
|
||||||
|
<div class="channel-label">{{ c.label }}</div>
|
||||||
|
<div class="channel-val">{{ c.val }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="trust-logos">
|
||||||
|
<div class="trust-label">合作伙伴</div>
|
||||||
|
<div class="logos-row">
|
||||||
|
<div class="logo-pill" v-for="l in logos" :key="l">{{ l }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
|
||||||
|
const submitting = ref(false)
|
||||||
|
const submitted = ref(false)
|
||||||
|
|
||||||
|
const form = reactive({
|
||||||
|
name: '',
|
||||||
|
phone: '',
|
||||||
|
company: '',
|
||||||
|
products: [] as string[],
|
||||||
|
message: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const products = ['企业知识库', '数据整合', '智能报表', 'AI 财务', 'AI 客服', '定制 MCP']
|
||||||
|
|
||||||
|
async function submitForm() {
|
||||||
|
submitting.value = true
|
||||||
|
await new Promise(r => setTimeout(r, 1000))
|
||||||
|
submitting.value = false
|
||||||
|
submitted.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
const promises = [
|
||||||
|
{ title: '1 个工作日内响应', text: '专属顾问主动联系,了解您的需求' },
|
||||||
|
{ title: '免费需求诊断', text: '提供初步的 AI 数字化转型建议方案' },
|
||||||
|
{ title: '定制演示方案', text: '针对您的场景准备专属 Demo 演示' },
|
||||||
|
{ title: '无压力咨询', text: '充分了解后再决定,绝不强行推销' },
|
||||||
|
]
|
||||||
|
|
||||||
|
const channels = [
|
||||||
|
{
|
||||||
|
label: '商务合作',
|
||||||
|
val: 'business@siliconpartner.cn',
|
||||||
|
icon: `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '服务热线',
|
||||||
|
val: '400-888-0000',
|
||||||
|
icon: `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12 19.79 19.79 0 0 1 1.61 3.41 2 2 0 0 1 3.6 1.24h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L7.91 9a16 16 0 0 0 6 6l1.27-.9a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>`,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
const logos = ['阿里云', '腾讯云', '华为云', 'OpenAI', 'DeepSeek']
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.cta-section {
|
||||||
|
padding: 120px 0;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
.cta-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 480px;
|
||||||
|
gap: 80px;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
.contact-form {
|
||||||
|
margin-top: 36px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
.form-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
.form-group {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
.form-group label {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--gray-700);
|
||||||
|
}
|
||||||
|
.form-group input,
|
||||||
|
.form-group textarea {
|
||||||
|
padding: 12px 16px;
|
||||||
|
border: 1.5px solid var(--gray-200);
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--gray-800);
|
||||||
|
font-family: inherit;
|
||||||
|
transition: all .15s;
|
||||||
|
outline: none;
|
||||||
|
background: var(--gray-50);
|
||||||
|
}
|
||||||
|
.form-group input:focus,
|
||||||
|
.form-group textarea:focus {
|
||||||
|
border-color: var(--green);
|
||||||
|
background: white;
|
||||||
|
box-shadow: 0 0 0 3px rgba(16,185,129,.1);
|
||||||
|
}
|
||||||
|
.form-group input::placeholder,
|
||||||
|
.form-group textarea::placeholder {
|
||||||
|
color: var(--gray-400);
|
||||||
|
}
|
||||||
|
textarea { resize: vertical; min-height: 100px; }
|
||||||
|
|
||||||
|
.checkbox-group {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
.checkbox-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 7px 12px;
|
||||||
|
border: 1.5px solid var(--gray-200);
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 13px;
|
||||||
|
color: var(--gray-600);
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all .15s;
|
||||||
|
}
|
||||||
|
.checkbox-item:has(input:checked) {
|
||||||
|
border-color: var(--green);
|
||||||
|
background: var(--green-50);
|
||||||
|
color: var(--green-dark);
|
||||||
|
}
|
||||||
|
.checkbox-item input { display: none; }
|
||||||
|
|
||||||
|
.submit-btn {
|
||||||
|
width: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 16px !important;
|
||||||
|
font-size: 15px !important;
|
||||||
|
}
|
||||||
|
.submit-btn.loading { opacity: .7; cursor: not-allowed; }
|
||||||
|
.success-msg {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Info side */
|
||||||
|
.info-card {
|
||||||
|
background: var(--gray-50);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
padding: 32px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
border: 1px solid var(--gray-100);
|
||||||
|
}
|
||||||
|
.info-card h3, .contact-channels h3 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--gray-800);
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.promise-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
.promise {
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
.promise-icon {
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
background: var(--green-100);
|
||||||
|
border-radius: 8px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
.promise-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-800);
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
.promise-text {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--gray-500);
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-channels {
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
.channel {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 14px 0;
|
||||||
|
border-bottom: 1px solid var(--gray-100);
|
||||||
|
}
|
||||||
|
.channel:last-child { border-bottom: none; }
|
||||||
|
.channel-icon {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background: var(--green-50);
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.channel-label { font-size: 12px; color: var(--gray-400); font-weight: 500; }
|
||||||
|
.channel-val { font-size: 14px; font-weight: 700; color: var(--gray-800); margin-top: 2px; }
|
||||||
|
|
||||||
|
.trust-logos { margin-top: 8px; }
|
||||||
|
.trust-label { font-size: 12px; color: var(--gray-400); font-weight: 600; text-transform: uppercase; letter-spacing: .05em; margin-bottom: 12px; }
|
||||||
|
.logos-row { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||||
|
.logo-pill {
|
||||||
|
padding: 6px 14px;
|
||||||
|
background: var(--gray-100);
|
||||||
|
border-radius: 50px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--gray-500);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1100px) {
|
||||||
|
.cta-grid { grid-template-columns: 1fr; }
|
||||||
|
}
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.cta-section { padding: 80px 0; }
|
||||||
|
.form-row { grid-template-columns: 1fr; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
218
src/components/CasesSection.vue
Normal file
218
src/components/CasesSection.vue
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
<template>
|
||||||
|
<section id="cases" class="cases">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-head">
|
||||||
|
<div class="tag">客户案例</div>
|
||||||
|
<h2 class="section-title" style="margin-top:16px">
|
||||||
|
他们已经先行一步
|
||||||
|
</h2>
|
||||||
|
<p class="section-sub" style="margin-top:16px">
|
||||||
|
来自不同行业的企业,都在硅基伙伴的助力下实现了 AI 数字化跨越。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cases-grid">
|
||||||
|
<div class="case-card" v-for="c in cases" :key="c.company">
|
||||||
|
<div class="case-header">
|
||||||
|
<div class="case-logo">{{ c.logoText }}</div>
|
||||||
|
<div class="case-industry">{{ c.industry }}</div>
|
||||||
|
</div>
|
||||||
|
<blockquote class="case-quote">"{{ c.quote }}"</blockquote>
|
||||||
|
<div class="case-results">
|
||||||
|
<div class="result" v-for="r in c.results" :key="r.label">
|
||||||
|
<div class="result-val">{{ r.val }}</div>
|
||||||
|
<div class="result-label">{{ r.label }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="case-person">
|
||||||
|
<div class="person-avatar">{{ c.name[0] }}</div>
|
||||||
|
<div>
|
||||||
|
<div class="person-name">{{ c.name }}</div>
|
||||||
|
<div class="person-title">{{ c.title }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- CTA strip -->
|
||||||
|
<div class="cases-cta">
|
||||||
|
<p>加入 200+ 企业,开启 AI 驱动增长之旅</p>
|
||||||
|
<a href="#contact" class="btn-primary">预约一对一咨询</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const cases = [
|
||||||
|
{
|
||||||
|
logoText: '某零售集团',
|
||||||
|
industry: '新零售',
|
||||||
|
quote: '接入硅基伙伴的多平台数据整合后,我们的运营效率提升了 8 倍,以前需要 3 个人做一整天的数据工作,现在 10 分钟自动完成。',
|
||||||
|
results: [
|
||||||
|
{ val: '8x', label: '运营效率提升' },
|
||||||
|
{ val: '60%', label: '人力成本节省' },
|
||||||
|
{ val: '实时', label: '数据同步' },
|
||||||
|
],
|
||||||
|
name: '张总监',
|
||||||
|
title: '运营总监',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
logoText: '某电商品牌',
|
||||||
|
industry: '电子商务',
|
||||||
|
quote: 'AI 客服上线后,我们的售后响应时间从平均 4 小时降到了 30 秒,客户满意度提升了 40%,同时节省了大量客服人力。',
|
||||||
|
results: [
|
||||||
|
{ val: '30秒', label: '平均响应时间' },
|
||||||
|
{ val: '+40%', label: '客户满意度' },
|
||||||
|
{ val: '70%', label: '自动处理率' },
|
||||||
|
],
|
||||||
|
name: '李总',
|
||||||
|
title: 'CEO',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
logoText: '某制造企业',
|
||||||
|
industry: '智能制造',
|
||||||
|
quote: '企业知识库让我们的新员工培训周期从 3 个月缩短到 3 周,SOP 自动推送让合规操作率提升到 99.2%,大幅降低了生产风险。',
|
||||||
|
results: [
|
||||||
|
{ val: '3周', label: '培训周期缩短' },
|
||||||
|
{ val: '99.2%', label: '合规操作率' },
|
||||||
|
{ val: '-80%', label: '培训成本' },
|
||||||
|
],
|
||||||
|
name: '王经理',
|
||||||
|
title: '人力资源总监',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.cases {
|
||||||
|
padding: 120px 0;
|
||||||
|
background: var(--gray-50);
|
||||||
|
}
|
||||||
|
.section-head {
|
||||||
|
margin-bottom: 64px;
|
||||||
|
}
|
||||||
|
.cases-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 24px;
|
||||||
|
margin-bottom: 60px;
|
||||||
|
}
|
||||||
|
.case-card {
|
||||||
|
background: white;
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
padding: 36px;
|
||||||
|
border: 1.5px solid var(--gray-100);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
transition: all .25s;
|
||||||
|
}
|
||||||
|
.case-card:hover {
|
||||||
|
box-shadow: var(--shadow-md);
|
||||||
|
border-color: var(--green-200);
|
||||||
|
transform: translateY(-4px);
|
||||||
|
}
|
||||||
|
.case-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.case-logo {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--gray-800);
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
}
|
||||||
|
.case-industry {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--green-dark);
|
||||||
|
background: var(--green-50);
|
||||||
|
padding: 4px 10px;
|
||||||
|
border-radius: 50px;
|
||||||
|
letter-spacing: .02em;
|
||||||
|
}
|
||||||
|
.case-quote {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--gray-600);
|
||||||
|
line-height: 1.75;
|
||||||
|
font-style: italic;
|
||||||
|
border-left: 3px solid var(--green);
|
||||||
|
padding-left: 16px;
|
||||||
|
margin: 0;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.case-results {
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
border-top: 1px solid var(--gray-100);
|
||||||
|
border-bottom: 1px solid var(--gray-100);
|
||||||
|
padding: 16px 0;
|
||||||
|
}
|
||||||
|
.result-val {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--green-dark);
|
||||||
|
letter-spacing: -.03em;
|
||||||
|
}
|
||||||
|
.result-label {
|
||||||
|
font-size: 11px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
margin-top: 2px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.case-person {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
.person-avatar {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background: linear-gradient(135deg, var(--green), var(--green-dark));
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: white;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 16px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.person-name {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-800);
|
||||||
|
}
|
||||||
|
.person-title {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cases-cta {
|
||||||
|
background: linear-gradient(135deg, var(--green-50), white);
|
||||||
|
border: 1.5px solid var(--green-100);
|
||||||
|
border-radius: var(--radius-xl);
|
||||||
|
padding: 40px 48px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
.cases-cta p {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-800);
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1100px) {
|
||||||
|
.cases-grid { grid-template-columns: 1fr; }
|
||||||
|
}
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.cases { padding: 80px 0; }
|
||||||
|
.cases-cta { flex-direction: column; text-align: center; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
240
src/components/FeaturesSection.vue
Normal file
240
src/components/FeaturesSection.vue
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
<template>
|
||||||
|
<section id="features" class="features">
|
||||||
|
<div class="container">
|
||||||
|
<div class="features-layout">
|
||||||
|
<!-- Left text -->
|
||||||
|
<div class="features-text">
|
||||||
|
<div class="tag">核心优势</div>
|
||||||
|
<h2 class="section-title" style="margin-top:16px">
|
||||||
|
为什么选择<br>硅基伙伴?
|
||||||
|
</h2>
|
||||||
|
<p class="section-sub" style="margin-top:16px">
|
||||||
|
深耕企业 AI 数字化场景,以技术为引擎,以数据为燃料,
|
||||||
|
助力企业在智能时代保持竞争优势。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="feature-list">
|
||||||
|
<div class="feature-item" v-for="(f, i) in features" :key="i" :class="{ active: activeIdx === i }" @click="activeIdx = i">
|
||||||
|
<div class="feature-num">0{{ i + 1 }}</div>
|
||||||
|
<div class="feature-content">
|
||||||
|
<div class="feature-title">{{ f.title }}</div>
|
||||||
|
<div class="feature-desc">{{ f.desc }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="feature-arrow">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Right visual -->
|
||||||
|
<div class="features-visual">
|
||||||
|
<div class="visual-card" v-for="(f, i) in features" :key="i" :class="{ visible: activeIdx === i }">
|
||||||
|
<div class="visual-icon">
|
||||||
|
<span v-html="f.icon"></span>
|
||||||
|
</div>
|
||||||
|
<h3>{{ f.title }}</h3>
|
||||||
|
<p>{{ f.detail }}</p>
|
||||||
|
<div class="visual-metrics">
|
||||||
|
<div class="vm" v-for="m in f.metrics" :key="m.label">
|
||||||
|
<div class="vm-val">{{ m.val }}</div>
|
||||||
|
<div class="vm-label">{{ m.label }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const activeIdx = ref(0)
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
title: '极速部署,快速见效',
|
||||||
|
desc: '最快 7 天完成系统上线,轻量接入,无需改造现有业务流程。',
|
||||||
|
detail: '采用模块化架构,标准化 API 接口,可快速与企业现有系统集成。支持私有化部署和 SaaS 模式,灵活选择,保障数据安全与业务连续性。',
|
||||||
|
icon: `<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>`,
|
||||||
|
metrics: [
|
||||||
|
{ val: '7天', label: '最快上线' },
|
||||||
|
{ val: '99.9%', label: 'SLA 保障' },
|
||||||
|
{ val: '0', label: '业务中断' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '安全可靠,数据自主',
|
||||||
|
desc: '企业数据不出域,支持私有化部署,通过等保三级认证。',
|
||||||
|
detail: '全链路数据加密传输,支持本地私有化部署方案,确保企业核心数据资产完全自主可控。严格遵循数据安全合规要求,通过国家信息安全等级保护三级认证。',
|
||||||
|
icon: `<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>`,
|
||||||
|
metrics: [
|
||||||
|
{ val: '等保三级', label: '安全认证' },
|
||||||
|
{ val: '256bit', label: 'AES 加密' },
|
||||||
|
{ val: '100%', label: '数据自主' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '持续学习,越用越准',
|
||||||
|
desc: '基于企业专属数据持续微调,模型与业务同步成长。',
|
||||||
|
detail: '通过 RLHF 强化学习机制,持续收集企业用户反馈,让 AI 模型不断适应企业专属业务场景,随时间推移准确率和效率持续提升。',
|
||||||
|
icon: `<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>`,
|
||||||
|
metrics: [
|
||||||
|
{ val: '98.7%', label: '问答准确率' },
|
||||||
|
{ val: '持续', label: '自主学习' },
|
||||||
|
{ val: '3个月', label: '显著提升周期' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '专属服务,全程陪伴',
|
||||||
|
desc: '一对一客户成功经理,提供从实施到运营的全生命周期服务。',
|
||||||
|
detail: '配备专属解决方案架构师和客户成功经理,提供需求分析、方案设计、系统实施、员工培训、持续运营优化的全生命周期服务支持。',
|
||||||
|
icon: `<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>`,
|
||||||
|
metrics: [
|
||||||
|
{ val: '1v1', label: '专属服务' },
|
||||||
|
{ val: '7×24h', label: '技术支持' },
|
||||||
|
{ val: '98%', label: '客户续约率' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.features {
|
||||||
|
padding: 120px 0;
|
||||||
|
background: var(--gray-50);
|
||||||
|
}
|
||||||
|
.features-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 80px;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
.feature-list {
|
||||||
|
margin-top: 40px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
.feature-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
padding: 20px 20px;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all .2s ease;
|
||||||
|
border: 1.5px solid transparent;
|
||||||
|
}
|
||||||
|
.feature-item:hover {
|
||||||
|
background: white;
|
||||||
|
border-color: var(--gray-200);
|
||||||
|
}
|
||||||
|
.feature-item.active {
|
||||||
|
background: white;
|
||||||
|
border-color: var(--green-200);
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
.feature-num {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--gray-300);
|
||||||
|
letter-spacing: .05em;
|
||||||
|
width: 28px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
transition: color .2s;
|
||||||
|
}
|
||||||
|
.feature-item.active .feature-num { color: var(--green); }
|
||||||
|
.feature-content { flex: 1; }
|
||||||
|
.feature-title {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-700);
|
||||||
|
margin-bottom: 4px;
|
||||||
|
transition: color .2s;
|
||||||
|
}
|
||||||
|
.feature-item.active .feature-title { color: var(--gray-900); }
|
||||||
|
.feature-desc {
|
||||||
|
font-size: 13px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.feature-arrow {
|
||||||
|
color: var(--gray-300);
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
.feature-item.active .feature-arrow { color: var(--green); transform: translateX(3px); }
|
||||||
|
|
||||||
|
/* Visual panel */
|
||||||
|
.features-visual {
|
||||||
|
position: sticky;
|
||||||
|
top: 100px;
|
||||||
|
}
|
||||||
|
.visual-card {
|
||||||
|
background: white;
|
||||||
|
border-radius: var(--radius-xl);
|
||||||
|
padding: 48px;
|
||||||
|
box-shadow: var(--shadow-lg);
|
||||||
|
border: 1px solid var(--gray-100);
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.visual-card.visible { display: block; animation: fadeSlide .3s ease; }
|
||||||
|
@keyframes fadeSlide {
|
||||||
|
from { opacity: 0; transform: translateY(12px); }
|
||||||
|
to { opacity: 1; transform: translateY(0); }
|
||||||
|
}
|
||||||
|
.visual-icon {
|
||||||
|
width: 72px;
|
||||||
|
height: 72px;
|
||||||
|
background: linear-gradient(135deg, var(--green-50), var(--green-100));
|
||||||
|
border-radius: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
}
|
||||||
|
.visual-card h3 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--gray-900);
|
||||||
|
letter-spacing: -.03em;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.visual-card p {
|
||||||
|
font-size: 15px;
|
||||||
|
color: var(--gray-500);
|
||||||
|
line-height: 1.75;
|
||||||
|
margin-bottom: 36px;
|
||||||
|
}
|
||||||
|
.visual-metrics {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 16px;
|
||||||
|
border-top: 1px solid var(--gray-100);
|
||||||
|
padding-top: 28px;
|
||||||
|
}
|
||||||
|
.vm-val {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--green-dark);
|
||||||
|
letter-spacing: -.03em;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
.vm-label {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1024px) {
|
||||||
|
.features-layout { grid-template-columns: 1fr; }
|
||||||
|
.features-visual { position: static; }
|
||||||
|
}
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.features { padding: 80px 0; }
|
||||||
|
.visual-card { padding: 32px 24px; }
|
||||||
|
.visual-metrics { grid-template-columns: 1fr; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
217
src/components/FooterSection.vue
Normal file
217
src/components/FooterSection.vue
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
<template>
|
||||||
|
<footer class="footer">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-grid">
|
||||||
|
<!-- Brand -->
|
||||||
|
<div class="footer-brand">
|
||||||
|
<div class="logo">
|
||||||
|
<div class="logo-icon">
|
||||||
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none">
|
||||||
|
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="logo-cn">硅基伙伴</div>
|
||||||
|
<div class="logo-en">Silicon Partner Technology</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="brand-desc">
|
||||||
|
北京硅基伙伴科技有限公司<br>
|
||||||
|
致力于成为企业最信赖的 AI 数字化转型伙伴
|
||||||
|
</p>
|
||||||
|
<div class="socials">
|
||||||
|
<a href="#" class="social" aria-label="微信">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M8.5 12.5a1 1 0 1 0 2 0 1 1 0 0 0-2 0zm5 0a1 1 0 1 0 2 0 1 1 0 0 0-2 0zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="social" aria-label="微博">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14H9V8h2v8zm4 0h-2V8h2v8z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="#" class="social" aria-label="LinkedIn">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Links -->
|
||||||
|
<div class="footer-links" v-for="col in linkCols" :key="col.title">
|
||||||
|
<h4>{{ col.title }}</h4>
|
||||||
|
<ul>
|
||||||
|
<li v-for="l in col.links" :key="l.text">
|
||||||
|
<a :href="l.href">{{ l.text }}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<div class="footer-bottom-left">
|
||||||
|
<span>© 2024 北京硅基伙伴科技有限公司. 保留所有权利.</span>
|
||||||
|
<span>京ICP备XXXXXXXX号</span>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom-right">
|
||||||
|
<a href="#">隐私政策</a>
|
||||||
|
<a href="#">服务协议</a>
|
||||||
|
<a href="#">Cookie 设置</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const linkCols = [
|
||||||
|
{
|
||||||
|
title: '产品',
|
||||||
|
links: [
|
||||||
|
{ text: '企业知识库', href: '#' },
|
||||||
|
{ text: '多平台数据整合', href: '#' },
|
||||||
|
{ text: '智能报表分析', href: '#' },
|
||||||
|
{ text: 'AI 智能财务', href: '#' },
|
||||||
|
{ text: 'AI 智能客服', href: '#' },
|
||||||
|
{ text: '定制企业 MCP', href: '#' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '解决方案',
|
||||||
|
links: [
|
||||||
|
{ text: '新零售行业', href: '#' },
|
||||||
|
{ text: '电子商务', href: '#' },
|
||||||
|
{ text: '智能制造', href: '#' },
|
||||||
|
{ text: '金融服务', href: '#' },
|
||||||
|
{ text: '人力资源', href: '#' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '公司',
|
||||||
|
links: [
|
||||||
|
{ text: '关于我们', href: '#about' },
|
||||||
|
{ text: '客户案例', href: '#cases' },
|
||||||
|
{ text: '加入我们', href: '#' },
|
||||||
|
{ text: '新闻动态', href: '#' },
|
||||||
|
{ text: '联系我们', href: '#contact' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.footer {
|
||||||
|
background: var(--gray-900);
|
||||||
|
color: white;
|
||||||
|
padding: 80px 0 0;
|
||||||
|
}
|
||||||
|
.footer-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 2fr 1fr 1fr 1fr;
|
||||||
|
gap: 48px;
|
||||||
|
padding-bottom: 60px;
|
||||||
|
border-bottom: 1px solid rgba(255,255,255,.08);
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.logo-icon {
|
||||||
|
width: 38px;
|
||||||
|
height: 38px;
|
||||||
|
background: linear-gradient(135deg, var(--green), var(--green-dark));
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.logo-cn {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
}
|
||||||
|
.logo-en {
|
||||||
|
font-size: 10px;
|
||||||
|
color: rgba(255,255,255,.4);
|
||||||
|
letter-spacing: .04em;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
.brand-desc {
|
||||||
|
font-size: 14px;
|
||||||
|
color: rgba(255,255,255,.45);
|
||||||
|
line-height: 1.75;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
.socials {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
.social {
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
background: rgba(255,255,255,.08);
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: rgba(255,255,255,.5);
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
.social:hover {
|
||||||
|
background: var(--green);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.footer-links h4 {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: rgba(255,255,255,.6);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: .08em;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.footer-links ul {
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
.footer-links a {
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 14px;
|
||||||
|
color: rgba(255,255,255,.5);
|
||||||
|
transition: color .15s;
|
||||||
|
}
|
||||||
|
.footer-links a:hover { color: white; }
|
||||||
|
.footer-bottom {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 24px 0;
|
||||||
|
gap: 20px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.footer-bottom-left {
|
||||||
|
display: flex;
|
||||||
|
gap: 24px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: rgba(255,255,255,.3);
|
||||||
|
}
|
||||||
|
.footer-bottom-right {
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
.footer-bottom-right a {
|
||||||
|
font-size: 12px;
|
||||||
|
color: rgba(255,255,255,.3);
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color .15s;
|
||||||
|
}
|
||||||
|
.footer-bottom-right a:hover { color: rgba(255,255,255,.7); }
|
||||||
|
|
||||||
|
@media (max-width: 1100px) {
|
||||||
|
.footer-grid { grid-template-columns: 1fr 1fr; }
|
||||||
|
.footer-brand { grid-column: 1 / -1; }
|
||||||
|
}
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.footer-grid { grid-template-columns: 1fr; }
|
||||||
|
.footer-bottom { flex-direction: column; align-items: flex-start; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
558
src/components/HeroSection.vue
Normal file
558
src/components/HeroSection.vue
Normal file
@@ -0,0 +1,558 @@
|
|||||||
|
<template>
|
||||||
|
<section class="hero">
|
||||||
|
<!-- Background decoration -->
|
||||||
|
<div class="hero-bg">
|
||||||
|
<div class="bg-orb bg-orb-1"></div>
|
||||||
|
<div class="bg-orb bg-orb-2"></div>
|
||||||
|
<div class="bg-orb bg-orb-3"></div>
|
||||||
|
<div class="grid-lines"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="hero-content">
|
||||||
|
<div class="hero-badge">
|
||||||
|
<span class="badge-dot"></span>
|
||||||
|
企业 AI 数字化转型专家
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1 class="hero-title">
|
||||||
|
让 <span class="highlight">AI</span> 成为<br>
|
||||||
|
企业最强生产力
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p class="hero-desc">
|
||||||
|
北京硅基伙伴科技,专注企业 AI 数字化转型技术服务。<br>
|
||||||
|
从知识库到智能客服,从数据整合到财务自动化,<br>
|
||||||
|
我们是您最信赖的数字化伙伴。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="hero-actions">
|
||||||
|
<a href="#demo" class="btn-primary btn-lg">
|
||||||
|
免费预约演示
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="#services" class="btn-secondary btn-lg">
|
||||||
|
查看解决方案
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hero-stats">
|
||||||
|
<div class="stat" v-for="s in stats" :key="s.label">
|
||||||
|
<div class="stat-value">{{ s.value }}</div>
|
||||||
|
<div class="stat-label">{{ s.label }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Hero visual -->
|
||||||
|
<div class="hero-visual">
|
||||||
|
<div class="dashboard-card">
|
||||||
|
<div class="card-header">
|
||||||
|
<div class="card-dots">
|
||||||
|
<span></span><span></span><span></span>
|
||||||
|
</div>
|
||||||
|
<span class="card-title">AI 智能驾驶舱</span>
|
||||||
|
<div class="card-status">
|
||||||
|
<span class="status-dot"></span> 实时运行中
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<!-- Mini chart -->
|
||||||
|
<div class="chart-area">
|
||||||
|
<div class="chart-bars">
|
||||||
|
<div class="bar" v-for="(h, i) in bars" :key="i" :style="{ height: h + '%' }">
|
||||||
|
<div class="bar-glow"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="chart-labels">
|
||||||
|
<span v-for="l in ['1月','2月','3月','4月','5月','6月']" :key="l">{{ l }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Metrics row -->
|
||||||
|
<div class="metrics-row">
|
||||||
|
<div class="metric" v-for="m in metrics" :key="m.label">
|
||||||
|
<div class="metric-val">{{ m.val }}</div>
|
||||||
|
<div class="metric-lbl">{{ m.label }}</div>
|
||||||
|
<div class="metric-chg" :class="m.up ? 'up' : 'down'">
|
||||||
|
{{ m.up ? '↑' : '↓' }} {{ m.chg }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- AI insight -->
|
||||||
|
<div class="ai-insight">
|
||||||
|
<div class="ai-icon">
|
||||||
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2"><path d="M12 2a10 10 0 1 1 0 20A10 10 0 0 1 12 2z"/><path d="M12 8v4l3 3"/></svg>
|
||||||
|
</div>
|
||||||
|
<div class="ai-text">
|
||||||
|
<div class="ai-label">AI 智能洞察</div>
|
||||||
|
<div class="ai-msg">本月销售额较上月提升 <strong>23.6%</strong>,建议重点关注华南区域增长机会</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Floating cards -->
|
||||||
|
<div class="float-card float-1">
|
||||||
|
<div class="float-icon">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M9 12l2 2 4-4m6 2a9 9 0 1 1-18 0 9 9 0 0 1 18 0z"/></svg>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="float-title">知识库问答</div>
|
||||||
|
<div class="float-sub">响应准确率 98.7%</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="float-card float-2">
|
||||||
|
<div class="float-icon">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="float-title">自动化处理</div>
|
||||||
|
<div class="float-sub">效率提升 10x</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Scroll indicator -->
|
||||||
|
<div class="scroll-hint">
|
||||||
|
<div class="scroll-wheel"></div>
|
||||||
|
<span>向下探索</span>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const stats = [
|
||||||
|
{ value: '200+', label: '服务企业' },
|
||||||
|
{ value: '98%', label: '客户满意度' },
|
||||||
|
{ value: '10x', label: '效率提升' },
|
||||||
|
{ value: '7×24h', label: '稳定运行' },
|
||||||
|
]
|
||||||
|
const bars = [45, 62, 55, 78, 68, 92]
|
||||||
|
const metrics = [
|
||||||
|
{ val: '¥2.4M', label: '本月营收', chg: '23.6%', up: true },
|
||||||
|
{ val: '1,284', label: '处理工单', chg: '12.1%', up: true },
|
||||||
|
{ val: '98.7%', label: '自动化率', chg: '2.3%', up: true },
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.hero {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 120px 0 80px;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
background: linear-gradient(160deg, #f0fdf8 0%, #ffffff 45%, #f5f3ff 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-bg {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.bg-orb {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
filter: blur(72px);
|
||||||
|
}
|
||||||
|
.bg-orb-1 {
|
||||||
|
width: 700px;
|
||||||
|
height: 700px;
|
||||||
|
background: radial-gradient(circle, #6ee7b7 0%, #34d399 40%, transparent 70%);
|
||||||
|
top: -160px;
|
||||||
|
right: -160px;
|
||||||
|
opacity: .28;
|
||||||
|
}
|
||||||
|
.bg-orb-2 {
|
||||||
|
width: 500px;
|
||||||
|
height: 500px;
|
||||||
|
background: radial-gradient(circle, #a78bfa 0%, #818cf8 50%, transparent 70%);
|
||||||
|
bottom: -80px;
|
||||||
|
left: -120px;
|
||||||
|
opacity: .18;
|
||||||
|
}
|
||||||
|
.bg-orb-3 {
|
||||||
|
width: 360px;
|
||||||
|
height: 360px;
|
||||||
|
background: radial-gradient(circle, #fde68a 0%, #fbbf24 50%, transparent 70%);
|
||||||
|
top: 30%;
|
||||||
|
left: 38%;
|
||||||
|
opacity: .10;
|
||||||
|
}
|
||||||
|
.grid-lines {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background-image:
|
||||||
|
linear-gradient(rgba(16,185,129,.07) 1px, transparent 1px),
|
||||||
|
linear-gradient(90deg, rgba(16,185,129,.07) 1px, transparent 1px);
|
||||||
|
background-size: 56px 56px;
|
||||||
|
mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 40%, transparent 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
align-items: center;
|
||||||
|
gap: 80px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-badge {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 8px 16px;
|
||||||
|
background: var(--green-50);
|
||||||
|
border: 1px solid var(--green-200);
|
||||||
|
border-radius: 50px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--green-dark);
|
||||||
|
letter-spacing: .02em;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
}
|
||||||
|
.badge-dot {
|
||||||
|
width: 7px;
|
||||||
|
height: 7px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--green);
|
||||||
|
animation: pulse 2s infinite;
|
||||||
|
}
|
||||||
|
@keyframes pulse {
|
||||||
|
0%, 100% { opacity: 1; transform: scale(1); }
|
||||||
|
50% { opacity: .6; transform: scale(1.3); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-title {
|
||||||
|
font-size: clamp(42px, 5.5vw, 72px);
|
||||||
|
font-weight: 900;
|
||||||
|
letter-spacing: -.04em;
|
||||||
|
line-height: 1.08;
|
||||||
|
color: var(--gray-900);
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
.highlight {
|
||||||
|
background: linear-gradient(135deg, #10b981 0%, #059669 50%, #0891b2 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-desc {
|
||||||
|
font-size: 17px;
|
||||||
|
line-height: 1.75;
|
||||||
|
color: var(--gray-500);
|
||||||
|
margin-bottom: 40px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-actions {
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 56px;
|
||||||
|
}
|
||||||
|
.btn-lg {
|
||||||
|
padding: 16px 32px !important;
|
||||||
|
font-size: 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-stats {
|
||||||
|
display: flex;
|
||||||
|
gap: 40px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.stat-value {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--green-dark);
|
||||||
|
letter-spacing: -.03em;
|
||||||
|
}
|
||||||
|
.stat-label {
|
||||||
|
font-size: 13px;
|
||||||
|
color: var(--gray-500);
|
||||||
|
margin-top: 4px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.stat + .stat {
|
||||||
|
padding-left: 40px;
|
||||||
|
border-left: 1px solid rgba(16,185,129,.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dashboard card */
|
||||||
|
.hero-visual {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.dashboard-card {
|
||||||
|
background: white;
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
box-shadow: 0 20px 60px rgba(16,185,129,.12), 0 4px 16px rgba(0,0,0,.06);
|
||||||
|
border: 1px solid rgba(16,185,129,.15);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 16px 20px;
|
||||||
|
border-bottom: 1px solid var(--gray-100);
|
||||||
|
background: var(--gray-50);
|
||||||
|
}
|
||||||
|
.card-dots {
|
||||||
|
display: flex;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
.card-dots span {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--gray-300);
|
||||||
|
}
|
||||||
|
.card-dots span:nth-child(1) { background: #ff5f57; }
|
||||||
|
.card-dots span:nth-child(2) { background: #febc2e; }
|
||||||
|
.card-dots span:nth-child(3) { background: #28c840; }
|
||||||
|
.card-title {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--gray-600);
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.card-status {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--green-dark);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.status-dot {
|
||||||
|
width: 7px;
|
||||||
|
height: 7px;
|
||||||
|
background: var(--green);
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: pulse 2s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-body {
|
||||||
|
padding: 24px 20px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chart-area {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.chart-bars {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
|
gap: 8px;
|
||||||
|
height: 120px;
|
||||||
|
padding: 0 4px;
|
||||||
|
}
|
||||||
|
.bar {
|
||||||
|
flex: 1;
|
||||||
|
background: linear-gradient(180deg, #34d399, #059669);
|
||||||
|
border-radius: 6px 6px 0 0;
|
||||||
|
position: relative;
|
||||||
|
transition: all .3s;
|
||||||
|
opacity: .9;
|
||||||
|
}
|
||||||
|
.bar:nth-child(4) { background: linear-gradient(180deg, #60a5fa, #2563eb); }
|
||||||
|
.bar:nth-child(6) { background: linear-gradient(180deg, #a78bfa, #7c3aed); }
|
||||||
|
.bar:hover { opacity: 1; transform: scaleY(1.04); transform-origin: bottom; }
|
||||||
|
.bar-glow {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 40%;
|
||||||
|
background: linear-gradient(transparent, rgba(16,185,129,.15));
|
||||||
|
border-radius: 0 0 6px 6px;
|
||||||
|
}
|
||||||
|
.chart-labels {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 8px 4px 0;
|
||||||
|
font-size: 11px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.metrics-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.metric {
|
||||||
|
background: var(--gray-50);
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
.metric-val {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-900);
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
}
|
||||||
|
.metric-lbl {
|
||||||
|
font-size: 11px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
margin: 3px 0 2px;
|
||||||
|
}
|
||||||
|
.metric-chg {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.metric-chg.up { color: var(--green); }
|
||||||
|
.metric-chg.down { color: #ef4444; }
|
||||||
|
|
||||||
|
.ai-insight {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
align-items: flex-start;
|
||||||
|
background: linear-gradient(135deg, var(--green-50), white);
|
||||||
|
border: 1px solid var(--green-100);
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
.ai-icon {
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
background: linear-gradient(135deg, var(--green), var(--green-dark));
|
||||||
|
border-radius: 8px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.ai-label {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--green-dark);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: .04em;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
.ai-msg {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--gray-600);
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Floating cards */
|
||||||
|
.float-card {
|
||||||
|
position: absolute;
|
||||||
|
background: white;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
box-shadow: var(--shadow-md);
|
||||||
|
border: 1px solid var(--gray-100);
|
||||||
|
padding: 14px 18px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
animation: float 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
.float-1 {
|
||||||
|
top: -24px;
|
||||||
|
left: -40px;
|
||||||
|
animation-delay: 0s;
|
||||||
|
}
|
||||||
|
.float-2 {
|
||||||
|
bottom: -24px;
|
||||||
|
right: -30px;
|
||||||
|
animation-delay: 1.5s;
|
||||||
|
}
|
||||||
|
@keyframes float {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-8px); }
|
||||||
|
}
|
||||||
|
.float-icon {
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
background: var(--green-50);
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.float-title {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-800);
|
||||||
|
}
|
||||||
|
.float-sub {
|
||||||
|
font-size: 11px;
|
||||||
|
color: var(--green-dark);
|
||||||
|
font-weight: 600;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll-hint {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 40px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 500;
|
||||||
|
animation: bounce 2s infinite;
|
||||||
|
}
|
||||||
|
.scroll-wheel {
|
||||||
|
width: 22px;
|
||||||
|
height: 36px;
|
||||||
|
border: 2px solid var(--gray-300);
|
||||||
|
border-radius: 12px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.scroll-wheel::after {
|
||||||
|
content: '';
|
||||||
|
width: 4px;
|
||||||
|
height: 8px;
|
||||||
|
background: var(--green);
|
||||||
|
border-radius: 2px;
|
||||||
|
position: absolute;
|
||||||
|
top: 6px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
animation: scroll-dot 2s infinite;
|
||||||
|
}
|
||||||
|
@keyframes scroll-dot {
|
||||||
|
0% { transform: translateX(-50%) translateY(0); opacity: 1; }
|
||||||
|
100% { transform: translateX(-50%) translateY(12px); opacity: 0; }
|
||||||
|
}
|
||||||
|
@keyframes bounce {
|
||||||
|
0%, 100% { transform: translateX(-50%) translateY(0); }
|
||||||
|
50% { transform: translateX(-50%) translateY(-5px); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1024px) {
|
||||||
|
.container {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 60px;
|
||||||
|
}
|
||||||
|
.hero-visual { order: -1; max-width: 560px; margin: 0 auto; width: 100%; }
|
||||||
|
.hero-content { text-align: center; }
|
||||||
|
.hero-stats { justify-content: center; }
|
||||||
|
.hero-actions { justify-content: center; }
|
||||||
|
.section-sub { margin: 0 auto; }
|
||||||
|
}
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.float-1, .float-2 { display: none; }
|
||||||
|
.hero-stats { gap: 20px; }
|
||||||
|
.stat + .stat { padding-left: 20px; }
|
||||||
|
.metrics-row { grid-template-columns: 1fr; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
182
src/components/NavBar.vue
Normal file
182
src/components/NavBar.vue
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
<template>
|
||||||
|
<nav class="navbar" :class="{ scrolled: isScrolled }">
|
||||||
|
<div class="container nav-inner">
|
||||||
|
<a href="#" class="logo">
|
||||||
|
<div class="logo-icon">
|
||||||
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
||||||
|
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="logo-text">
|
||||||
|
<span class="logo-cn">硅基伙伴</span>
|
||||||
|
<span class="logo-en">Silicon Partner</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="nav-links">
|
||||||
|
<a href="#services">解决方案</a>
|
||||||
|
<a href="#features">核心优势</a>
|
||||||
|
<a href="#cases">客户案例</a>
|
||||||
|
<a href="#about">关于我们</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nav-actions">
|
||||||
|
<a href="#contact" class="btn-secondary" style="padding: 10px 20px; font-size: 14px;">联系我们</a>
|
||||||
|
<a href="#demo" class="btn-primary" style="padding: 10px 20px; font-size: 14px;">
|
||||||
|
免费体验
|
||||||
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button class="menu-btn" @click="menuOpen = !menuOpen">
|
||||||
|
<span></span><span></span><span></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mobile-menu" :class="{ open: menuOpen }">
|
||||||
|
<a href="#services" @click="menuOpen=false">解决方案</a>
|
||||||
|
<a href="#features" @click="menuOpen=false">核心优势</a>
|
||||||
|
<a href="#cases" @click="menuOpen=false">客户案例</a>
|
||||||
|
<a href="#about" @click="menuOpen=false">关于我们</a>
|
||||||
|
<a href="#contact" class="btn-primary" style="margin-top:8px;justify-content:center;" @click="menuOpen=false">免费体验</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, onMounted, onUnmounted } from 'vue'
|
||||||
|
|
||||||
|
const isScrolled = ref(false)
|
||||||
|
const menuOpen = ref(false)
|
||||||
|
|
||||||
|
function onScroll() {
|
||||||
|
isScrolled.value = window.scrollY > 20
|
||||||
|
}
|
||||||
|
onMounted(() => window.addEventListener('scroll', onScroll))
|
||||||
|
onUnmounted(() => window.removeEventListener('scroll', onScroll))
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.navbar {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 1000;
|
||||||
|
transition: all .3s ease;
|
||||||
|
padding: 20px 0;
|
||||||
|
}
|
||||||
|
.navbar.scrolled {
|
||||||
|
background: rgba(255,255,255,.92);
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
-webkit-backdrop-filter: blur(20px);
|
||||||
|
box-shadow: 0 1px 0 rgba(0,0,0,.06);
|
||||||
|
padding: 14px 0;
|
||||||
|
}
|
||||||
|
.nav-inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 40px;
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.logo-icon {
|
||||||
|
width: 38px;
|
||||||
|
height: 38px;
|
||||||
|
background: linear-gradient(135deg, var(--green), var(--green-dark));
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0 4px 12px rgba(16,185,129,.3);
|
||||||
|
}
|
||||||
|
.logo-text {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
.logo-cn {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--gray-900);
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
}
|
||||||
|
.logo-en {
|
||||||
|
font-size: 10px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
font-weight: 500;
|
||||||
|
letter-spacing: .05em;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
.nav-links {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.nav-links a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--gray-600);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 8px 14px;
|
||||||
|
border-radius: 8px;
|
||||||
|
transition: all .15s;
|
||||||
|
}
|
||||||
|
.nav-links a:hover {
|
||||||
|
color: var(--gray-900);
|
||||||
|
background: var(--gray-100);
|
||||||
|
}
|
||||||
|
.nav-actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.menu-btn {
|
||||||
|
display: none;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 5px;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
.menu-btn span {
|
||||||
|
display: block;
|
||||||
|
width: 22px;
|
||||||
|
height: 2px;
|
||||||
|
background: var(--gray-700);
|
||||||
|
border-radius: 2px;
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
.mobile-menu {
|
||||||
|
display: none;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 16px 24px 20px;
|
||||||
|
gap: 4px;
|
||||||
|
background: white;
|
||||||
|
border-top: 1px solid var(--gray-100);
|
||||||
|
}
|
||||||
|
.mobile-menu.open {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.mobile-menu a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--gray-700);
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 12px 0;
|
||||||
|
border-bottom: 1px solid var(--gray-100);
|
||||||
|
}
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
.nav-links, .nav-actions { display: none; }
|
||||||
|
.menu-btn { display: flex; }
|
||||||
|
.nav-inner { justify-content: space-between; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
208
src/components/ServicesSection.vue
Normal file
208
src/components/ServicesSection.vue
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
<template>
|
||||||
|
<section id="services" class="services">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-head">
|
||||||
|
<div class="tag">解决方案</div>
|
||||||
|
<h2 class="section-title" style="margin-top:16px">
|
||||||
|
覆盖企业 AI 转型<br>全链路需求
|
||||||
|
</h2>
|
||||||
|
<p class="section-sub" style="margin-top:16px">
|
||||||
|
六大核心产品线,从数据到洞察,从自动化到智能化,
|
||||||
|
为企业提供端到端 AI 数字化解决方案。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="services-grid">
|
||||||
|
<div
|
||||||
|
class="service-card"
|
||||||
|
v-for="(svc, i) in services"
|
||||||
|
:key="i"
|
||||||
|
:class="{ featured: svc.featured }"
|
||||||
|
>
|
||||||
|
<div class="card-tag" v-if="svc.featured">热门</div>
|
||||||
|
<div class="svc-icon" :style="{ background: svc.iconBg }">
|
||||||
|
<span v-html="svc.icon"></span>
|
||||||
|
</div>
|
||||||
|
<h3 class="svc-title">{{ svc.title }}</h3>
|
||||||
|
<p class="svc-desc">{{ svc.desc }}</p>
|
||||||
|
<ul class="svc-features">
|
||||||
|
<li v-for="f in svc.features" :key="f">
|
||||||
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2.5"><path d="M20 6L9 17l-5-5"/></svg>
|
||||||
|
{{ f }}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<a href="#contact" class="svc-link">
|
||||||
|
了解详情
|
||||||
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const services = [
|
||||||
|
{
|
||||||
|
title: '企业知识库 & SOP',
|
||||||
|
desc: '将企业文档、规章制度、业务流程转化为智能知识库,支持自然语言问答,让知识随时触手可及。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/><line x1="9" y1="9" x2="15" y2="9"/><line x1="9" y1="13" x2="15" y2="13"/></svg>`,
|
||||||
|
iconBg: 'linear-gradient(135deg, #ecfdf5, #d1fae5)',
|
||||||
|
features: ['文档智能解析', '多轮对话问答', '人力资源 & 财务 SOP', '权限分级管理'],
|
||||||
|
featured: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '多平台数据整合',
|
||||||
|
desc: '一键接入抖店、快手小店、微信小店、小红书等主流电商平台,统一数据清洗与标准化处理。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/><path d="M7 8h10M7 12h6"/></svg>`,
|
||||||
|
iconBg: 'linear-gradient(135deg, #ecfdf5, #d1fae5)',
|
||||||
|
features: ['抖音/快手/微信小店', '小红书数据接入', '自动清洗 & 去重', 'API 实时同步'],
|
||||||
|
featured: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '智能报表分析',
|
||||||
|
desc: '自动生成日报、月报、战报,可视化大屏驾驶舱,让数据决策快人一步。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>`,
|
||||||
|
iconBg: 'linear-gradient(135deg, #ecfdf5, #d1fae5)',
|
||||||
|
features: ['自动日/月/年报', '战报大屏驾驶舱', 'AI 趋势预测', '多维交叉分析'],
|
||||||
|
featured: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'AI 智能财务',
|
||||||
|
desc: '发票智能识别与开具、报销自动整理收集,让财务工作从繁琐走向高效。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><rect x="1" y="4" width="22" height="16" rx="2" ry="2"/><line x1="1" y1="10" x2="23" y2="10"/></svg>`,
|
||||||
|
iconBg: 'linear-gradient(135deg, #ecfdf5, #d1fae5)',
|
||||||
|
features: ['发票 OCR 识别', '自动开具发票', '报销单智能归档', '财务合规审核'],
|
||||||
|
featured: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'AI 智能客服',
|
||||||
|
desc: '7×24 小时在线客服,覆盖售前咨询、售后处理全流程,大幅降低人力成本。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>`,
|
||||||
|
iconBg: 'linear-gradient(135deg, #ecfdf5, #d1fae5)',
|
||||||
|
features: ['售前智能导购', '售后问题处理', '多渠道统一入口', '情绪识别转人工'],
|
||||||
|
featured: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '定制企业级 MCP',
|
||||||
|
desc: '基于企业专属场景,构建量身定制的 Model Context Protocol,打造私有化 AI 中枢。',
|
||||||
|
icon: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="1.8"><circle cx="12" cy="12" r="3"/><path d="M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14"/><path d="M15.54 8.46a5 5 0 0 1 0 7.07M8.46 8.46a5 5 0 0 0 0 7.07"/></svg>`,
|
||||||
|
iconBg: 'linear-gradient(135deg, #ecfdf5, #d1fae5)',
|
||||||
|
features: ['私有化部署', '企业数据安全', '模型灵活接入', '持续迭代优化'],
|
||||||
|
featured: false,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.services {
|
||||||
|
padding: 120px 0;
|
||||||
|
background: var(--white);
|
||||||
|
}
|
||||||
|
.section-head {
|
||||||
|
margin-bottom: 64px;
|
||||||
|
}
|
||||||
|
.services-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
.service-card {
|
||||||
|
background: var(--white);
|
||||||
|
border: 1.5px solid var(--gray-100);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
padding: 32px;
|
||||||
|
position: relative;
|
||||||
|
transition: all .25s ease;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.service-card::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background: linear-gradient(135deg, var(--green-50), transparent);
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity .25s;
|
||||||
|
}
|
||||||
|
.service-card:hover {
|
||||||
|
border-color: var(--green-200);
|
||||||
|
box-shadow: var(--shadow-md);
|
||||||
|
transform: translateY(-4px);
|
||||||
|
}
|
||||||
|
.service-card:hover::before { opacity: 1; }
|
||||||
|
.service-card.featured {
|
||||||
|
border-color: var(--green-200);
|
||||||
|
background: linear-gradient(135deg, var(--green-50) 0%, white 60%);
|
||||||
|
box-shadow: 0 0 0 1px var(--green-200), var(--shadow-md);
|
||||||
|
}
|
||||||
|
.card-tag {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
background: var(--green);
|
||||||
|
color: white;
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 4px 10px;
|
||||||
|
border-radius: 50px;
|
||||||
|
letter-spacing: .04em;
|
||||||
|
}
|
||||||
|
.svc-icon {
|
||||||
|
width: 52px;
|
||||||
|
height: 52px;
|
||||||
|
border-radius: 14px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.svc-title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-900);
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
.svc-desc {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--gray-500);
|
||||||
|
line-height: 1.7;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.svc-features {
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
.svc-features li {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
color: var(--gray-600);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.svc-link {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
color: var(--green-dark);
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-decoration: none;
|
||||||
|
letter-spacing: -.01em;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.svc-link:hover { color: var(--green); }
|
||||||
|
|
||||||
|
@media (max-width: 1100px) {
|
||||||
|
.services-grid { grid-template-columns: repeat(2, 1fr); }
|
||||||
|
}
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
.services-grid { grid-template-columns: 1fr; }
|
||||||
|
.services { padding: 80px 0; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
134
src/components/StatsSection.vue
Normal file
134
src/components/StatsSection.vue
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
<template>
|
||||||
|
<section class="stats-section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="stats-inner">
|
||||||
|
<div class="stats-text">
|
||||||
|
<div class="tag">数据说话</div>
|
||||||
|
<h2 class="section-title" style="margin-top:16px; max-width: 480px;">
|
||||||
|
让数字见证<br>我们的实力
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="stats-grid">
|
||||||
|
<div class="stat-card" v-for="s in stats" :key="s.label">
|
||||||
|
<div class="stat-icon" v-html="s.icon"></div>
|
||||||
|
<div class="stat-num">{{ s.value }}</div>
|
||||||
|
<div class="stat-name">{{ s.label }}</div>
|
||||||
|
<div class="stat-desc">{{ s.desc }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const stats = [
|
||||||
|
{
|
||||||
|
value: '200+',
|
||||||
|
label: '服务企业数',
|
||||||
|
desc: '覆盖零售、制造、金融等多个行业',
|
||||||
|
icon: `<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '98%',
|
||||||
|
label: '客户满意度',
|
||||||
|
desc: '连续三年 NPS 评分行业第一',
|
||||||
|
icon: `<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '10x',
|
||||||
|
label: '效率提升',
|
||||||
|
desc: '平均人效提升 10 倍以上',
|
||||||
|
icon: `<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"/><polyline points="17 6 23 6 23 12"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '7×24h',
|
||||||
|
label: '稳定运行',
|
||||||
|
desc: '99.9% SLA 高可用架构保障',
|
||||||
|
icon: `<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '50M+',
|
||||||
|
label: '日均处理量',
|
||||||
|
desc: '每天处理超五千万条数据记录',
|
||||||
|
icon: `<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg>`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '< 200ms',
|
||||||
|
label: '平均响应时延',
|
||||||
|
desc: 'AI 推理引擎高性能架构',
|
||||||
|
icon: `<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>`,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.stats-section {
|
||||||
|
padding: 120px 0;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
.stats-inner {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 320px 1fr;
|
||||||
|
gap: 80px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.stats-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
.stat-card {
|
||||||
|
background: var(--gray-50);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
padding: 28px;
|
||||||
|
border: 1.5px solid var(--gray-100);
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
.stat-card:hover {
|
||||||
|
border-color: var(--green-200);
|
||||||
|
background: var(--green-50);
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
.stat-icon {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
background: white;
|
||||||
|
border-radius: 12px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
box-shadow: var(--shadow-sm);
|
||||||
|
border: 1px solid var(--gray-100);
|
||||||
|
}
|
||||||
|
.stat-num {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 900;
|
||||||
|
color: var(--gray-900);
|
||||||
|
letter-spacing: -.04em;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
.stat-name {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--gray-700);
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
.stat-desc {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--gray-400);
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1100px) {
|
||||||
|
.stats-inner { grid-template-columns: 1fr; gap: 48px; }
|
||||||
|
}
|
||||||
|
@media (max-width: 800px) {
|
||||||
|
.stats-grid { grid-template-columns: repeat(2, 1fr); }
|
||||||
|
}
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.stats-grid { grid-template-columns: 1fr; }
|
||||||
|
.stats-section { padding: 80px 0; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
6
src/main.ts
Normal file
6
src/main.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import './assets/main.css'
|
||||||
|
|
||||||
|
import { createApp } from 'vue'
|
||||||
|
import App from './App.vue'
|
||||||
|
|
||||||
|
createApp(App).mount('#app')
|
||||||
18
tsconfig.app.json
Normal file
18
tsconfig.app.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"extends": "@vue/tsconfig/tsconfig.dom.json",
|
||||||
|
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
|
||||||
|
"exclude": ["src/**/__tests__/*"],
|
||||||
|
"compilerOptions": {
|
||||||
|
// Extra safety for array and object lookups, but may have false positives.
|
||||||
|
"noUncheckedIndexedAccess": true,
|
||||||
|
|
||||||
|
// Path mapping for cleaner imports.
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
},
|
||||||
|
|
||||||
|
// `vue-tsc --build` produces a .tsbuildinfo file for incremental type-checking.
|
||||||
|
// Specified here to keep it out of the root directory.
|
||||||
|
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
11
tsconfig.json
Normal file
11
tsconfig.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"files": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.node.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.app.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
28
tsconfig.node.json
Normal file
28
tsconfig.node.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
// TSConfig for modules that run in Node.js environment via either transpilation or type-stripping.
|
||||||
|
{
|
||||||
|
"extends": "@tsconfig/node24/tsconfig.json",
|
||||||
|
"include": [
|
||||||
|
"vite.config.*",
|
||||||
|
"vitest.config.*",
|
||||||
|
"cypress.config.*",
|
||||||
|
"nightwatch.conf.*",
|
||||||
|
"playwright.config.*",
|
||||||
|
"eslint.config.*"
|
||||||
|
],
|
||||||
|
"compilerOptions": {
|
||||||
|
// Most tools use transpilation instead of Node.js's native type-stripping.
|
||||||
|
// Bundler mode provides a smoother developer experience.
|
||||||
|
"module": "preserve",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
|
||||||
|
// Include Node.js types and avoid accidentally including other `@types/*` packages.
|
||||||
|
"types": ["node"],
|
||||||
|
|
||||||
|
// Disable emitting output during `vue-tsc --build`, which is used for type-checking only.
|
||||||
|
"noEmit": true,
|
||||||
|
|
||||||
|
// `vue-tsc --build` produces a .tsbuildinfo file for incremental type-checking.
|
||||||
|
// Specified here to keep it out of the root directory.
|
||||||
|
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
18
vite.config.ts
Normal file
18
vite.config.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { fileURLToPath, URL } from 'node:url'
|
||||||
|
|
||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import vue from '@vitejs/plugin-vue'
|
||||||
|
import vueDevTools from 'vite-plugin-vue-devtools'
|
||||||
|
|
||||||
|
// https://vite.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [
|
||||||
|
vue(),
|
||||||
|
vueDevTools(),
|
||||||
|
],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user