diff --git a/website/index.html b/website/index.html index 2703a1d..60a0e25 100644 --- a/website/index.html +++ b/website/index.html @@ -4,10 +4,11 @@ - + + 广西讯驰 - 智慧教育数字化解决方案 | 校企益邦 · 科研管理 · 智慧党建 · 实训管理平台 diff --git a/website/src/components/CertificateCard.jsx b/website/src/components/CertificateCard.jsx new file mode 100644 index 0000000..f705cbe --- /dev/null +++ b/website/src/components/CertificateCard.jsx @@ -0,0 +1,188 @@ +import React from 'react' +import ScrollReveal from './ScrollReveal' +import { Award, Leaf, Shield, Lock, Wrench } from 'lucide-react' + +/* ─── 证书数据 — 统一蓝色 ─── */ +const certificates = [ + { + id: 'iso9001', + icon: Award, + code: 'ISO 9001', + name: '质量管理体系认证', + + date: '2024年3月', + color: '#004ec4', + sealColor: '#004ec4', + }, + { + id: 'iso14001', + icon: Leaf, + code: 'ISO 14001', + name: '环境管理体系认证', + + date: '2024年3月', + color: '#004ec4', + sealColor: '#004ec4', + }, + { + id: 'iso45001', + icon: Shield, + code: 'ISO 45001', + name: '职业健康安全管理体系认证', + + date: '2024年3月', + color: '#004ec4', + sealColor: '#004ec4', + }, + { + id: 'iso27001', + icon: Lock, + code: 'ISO 27001', + name: '信息安全管理体系认证', + + date: '2024年3月', + color: '#004ec4', + sealColor: '#004ec4', + }, + { + id: 'iso20000', + icon: Wrench, + code: 'ISO 20000', + name: '信息技术服务管理体系认证', + + date: '2024年3月', + color: '#004ec4', + sealColor: '#004ec4', + }, +] + +export default function CertificateCard({ certificate, index, scale = 1 }) { + const { icon: Icon, code, name, desc, color } = certificate + + return ( + +
+ {/* ── 外阴影 ── */} +
+ + {/* ── 证书主体 ── */} +
+ {/* 外层粗边框 */} +
+ + {/* 中层装饰线 */} +
+ + {/* 内层双线框 */} +
+
+ + {/* 四边中点装饰 */} + + + + + + {/* 内容区 */} +
+ + {/* 认证图标 */} +
+
+ +
+ +
+ + {/* 认证编号 */} +
+ {code} +
+ + {/* 认证名称 */} +
+ {name} +
+ + {/* 分隔线 — 带花纹 */} +
+
+
+
+
+
+
+
+
+ + {/* 证明文字 */} +

+ {desc} +

+ + + +
+ + {/* 底部蓝色线条 */} +
+ {/* 折角 */} +
+
+
+
+ + {/* hover 顶部高光线 */} +
+
+ + ) +} + +/* ─── 边框中点装饰 ─── */ +function BorderCenterOrnament({ position, color }) { + const posMap = { + 'top': 'top-[3px] left-1/2 -translate-x-1/2', + 'bottom': 'bottom-[3px] left-1/2 -translate-x-1/2', + 'left': 'left-[3px] top-1/2 -translate-y-1/2', + 'right': 'right-[3px] top-1/2 -translate-y-1/2', + } + const isHorizontal = position === 'top' || position === 'bottom' + + return ( +
+
+
+
+
+ ) +} + +export { certificates } + + + diff --git a/website/src/components/CertificateCarousel.jsx b/website/src/components/CertificateCarousel.jsx new file mode 100644 index 0000000..9175af0 --- /dev/null +++ b/website/src/components/CertificateCarousel.jsx @@ -0,0 +1,94 @@ +import React, { useState, useEffect, useCallback } from 'react' +import CertificateCard, { certificates } from './CertificateCard' + +export default function CertificateCarousel() { + const [active, setActive] = useState(2) // 从中间开始 (ISO 45001) + const [isMobile, setIsMobile] = useState(false) + + // 检测是否为移动端 + useEffect(() => { + const check = () => setIsMobile(window.innerWidth < 768) + check() + window.addEventListener('resize', check) + return () => window.removeEventListener('resize', check) + }, []) + + const next = useCallback(() => { + setActive(prev => (prev + 1) % certificates.length) + }, []) + + // 自动轮播 + useEffect(() => { + const timer = setInterval(next, 3000) + return () => clearInterval(timer) + }, [next]) + + const goTo = (index) => setActive(index) + + // 响应式参数 + const containerHeight = isMobile ? 'h-[360px]' : 'h-[600px]' + const translateXBase = isMobile ? 140 : 260 + const scaleCenter = 1.0 + const scaleNear = isMobile ? 0.8 : 0.7 + const scaleFar = isMobile ? 0.5 : 0.4 + + return ( +
+ {/* 证书展示区 */} +
+ {certificates.map((cert, i) => { + let offset = i - active + + // 循环环绕:取最短路径 + if (offset > 2) offset = offset - certificates.length + if (offset < -2) offset = offset + certificates.length + + const absOffset = Math.abs(offset) + + let scale = scaleCenter + if (absOffset === 1) scale = scaleNear + if (absOffset >= 2) scale = scaleFar + + let opacity = 1 + if (absOffset === 1) opacity = 0.6 + if (absOffset >= 2) opacity = 0 + + let translateX = offset * translateXBase + + let zIndex = 10 - absOffset + + return ( +
= 2 ? 'blur(2px)' : 'none', + }} + onClick={() => goTo(i)} + > + +
+ ) + })} +
+ + {/* 底部指示点 */} +
+ {certificates.map((cert, i) => ( +
+
+ ) +} \ No newline at end of file diff --git a/website/src/components/ContactForm.jsx b/website/src/components/ContactForm.jsx index ed849c4..df6bfb0 100644 --- a/website/src/components/ContactForm.jsx +++ b/website/src/components/ContactForm.jsx @@ -37,7 +37,7 @@ export default function ContactForm() { setShowModal(false); } - const inputClass = 'w-full px-4 py-3 border border-gray-200 rounded-xl text-base focus:outline-none focus:ring-2 focus:ring-[#043b8f]/20 focus:border-[#043b8f]/40 transition-shadow placeholder-[#94a3b8] bg-white text-[#334155]'; + const inputClass = 'w-full px-4 py-3 border border-gray-200 rounded-xl text-base focus:outline-none focus:ring-2 focus:ring-[#004ec4]/30 focus:border-[#004ec4]/60 transition-shadow placeholder-[#94a3b8] bg-white text-[#334155]'; return ( <> @@ -46,21 +46,21 @@ export default function ContactForm() {
- - Inquiry + + Inquiry
-

+

在线咨询

-

填写表单,我们将在 1 个工作日内与您联系

+

填写表单,我们将在 1 个工作日内与您联系

-
-
+ style={{ background: 'linear-gradient(90deg, transparent, #004ec4, transparent)' }} /> +
+
@@ -91,7 +91,7 @@ export default function ContactForm() { 关注产品 (可选)