明树Git Lab

Commit 63a76923 authored by yangyajing's avatar yangyajing

增加隐私协议,修改页面内容结构样式

parent e41a12d5
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>明树数据</title> <title>明树数据</title>
</head> </head>
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
\ No newline at end of file
...@@ -2046,7 +2046,187 @@ const App = () => { ...@@ -2046,7 +2046,187 @@ const App = () => {
}; };
// Render Content based on activeTab // Render Content based on activeTab
const RadiationCanvas = () => {
const canvasRef = useRef(null);
useEffect(() => {
const canvas = canvasRef.current;
if (!canvas) return;
const ctx = canvas.getContext('2d');
// 城市相对坐标 (0-100)
const cities = [
{ name: "北京", x: 70, y: 25, isCore: true },
{ name: "乌鲁木齐", x: 15, y: 20 },
{ name: "兰州", x: 40, y: 42 },
{ name: "西安", x: 55, y: 48 },
{ name: "石家庄", x: 68, y: 32 },
{ name: "成都", x: 45, y: 60 },
{ name: "武汉", x: 68, y: 62 },
{ name: "南京", x: 80, y: 55 },
{ name: "上海", x: 85, y: 58 }
];
let w, h;
// 粒子系统:用于模拟数据流
let flowParticles = [];
const resizeMap = () => {
w = document.getElementById("radiationCanvas").offsetWidth;
h = document.getElementById("radiationCanvas").offsetHeight;
canvas.width = w;
canvas.height = h - 50;
}
window.addEventListener('resize', resizeMap);
resizeMap();
// 创建流动粒子
const createFlowParticles = () => {
// 每一帧都有几率产生新粒子从北京出发
if (Math.random() > 0.8) {
// 随机选一个目标城市
const targetIndex = Math.floor(Math.random() * cities.length);
if (!cities[targetIndex].isCore) {
flowParticles.push({
target: targetIndex,
progress: 0,
// 降低粒子速度:从 0.01-0.02 降低到 0.005-0.01
speed: 0.005 + Math.random() * 0.005
});
}
}
}
let pulseR = 0;
const drawMap = () => {
ctx.clearRect(0, 0, w, h);
const core = cities.find(c => c.isCore);
// 将相对坐标转换为屏幕坐标 (为了视觉平衡,稍微向左移一点,因为右边空)
const getX = (pct) => pct/100 * w * 0.8;
const getY = (pct) => pct/100 * h * 1.2;
const coreX = getX(core.x);
const coreY = getY(core.y);
// 1. 绘制连线 (静态底线)
cities.forEach(city => {
if (!city.isCore) {
const cx = getX(city.x);
const cy = getY(city.y);
ctx.beginPath();
// 渐变线:核心处亮,远处暗
const grad = ctx.createLinearGradient(coreX, coreY, cx, cy);
grad.addColorStop(0, "rgba(0, 255, 194, 0.5)");
grad.addColorStop(1, "rgba(0, 255, 194, 0.05)");
ctx.strokeStyle = grad;
ctx.lineWidth = 1.5;
ctx.moveTo(coreX, coreY);
ctx.lineTo(cx, cy);
ctx.stroke();
}
});
// 2. 绘制流动数据粒子 (Flow)
createFlowParticles();
for (let i = flowParticles.length - 1; i >= 0; i--) {
const p = flowParticles[i];
const target = cities[p.target];
const tx = getX(target.x);
const ty = getY(target.y);
p.progress += p.speed;
if (p.progress >= 1) {
flowParticles.splice(i, 1); // 到达目的地消失
continue;
}
const currX = coreX + (tx - coreX) * p.progress;
const currY = coreY + (ty - coreY) * p.progress;
// 绘制拖尾效果
const tailX = currX - (tx - coreX) * 0.05; // 简单的反向向量
const tailY = currY - (ty - coreY) * 0.05;
const grad = ctx.createLinearGradient(currX, currY, tailX, tailY);
grad.addColorStop(0, "rgba(255, 255, 255, 1)");
grad.addColorStop(1, "rgba(255, 255, 255, 0)");
ctx.beginPath();
ctx.moveTo(currX, currY);
ctx.lineTo(tailX, tailY);
ctx.strokeStyle = grad;
ctx.lineWidth = 3;
ctx.stroke();
}
// 3. 绘制城市节点
cities.forEach(city => {
const cx = getX(city.x);
const cy = getY(city.y);
if (city.isCore) {
// --- 核心北京 ---
// 扩散波 (Shockwave)
ctx.beginPath();
ctx.arc(cx, cy, pulseR, 0, Math.PI * 2);
ctx.strokeStyle = `rgba(0, 255, 194, ${1 - pulseR/60})`; // 范围更大
ctx.lineWidth = 2;
ctx.stroke();
// 第二圈波
ctx.beginPath();
ctx.arc(cx, cy, pulseR * 0.6, 0, Math.PI * 2);
ctx.strokeStyle = `rgba(0, 255, 194, ${(1 - pulseR/60)*0.5})`;
ctx.stroke();
// 核心高亮实体
ctx.fillStyle = '#00FFC2';
ctx.shadowBlur = 30;
ctx.shadowColor = '#00FFC2';
ctx.beginPath();
ctx.arc(cx, cy, 8, 0, Math.PI * 2);
ctx.fill();
ctx.shadowBlur = 0;
// 城市名
ctx.fillStyle = '#fff';
ctx.font = 'bold 16px sans-serif';
ctx.fillText(city.name, cx + 15, cy + 5);
} else {
// --- 其他城市 ---
ctx.fillStyle = '#fff';
ctx.beginPath();
ctx.arc(cx, cy, 4, 0, Math.PI * 2);
ctx.fill();
// 城市名 (稍微暗一点)
ctx.fillStyle = 'rgba(255,255,255,0.7)';
ctx.font = '12px sans-serif';
ctx.fillText(city.name, cx + 10, cy + 4);
}
});
// 更新动画参数
pulseR += 0.5;
if (pulseR > 60) pulseR = 0;
requestAnimationFrame(drawMap);
}
drawMap();
});
return <canvas ref={canvasRef} className="pointer-events-none z-0 mix-blend-screen" />;
}
const renderContent = () => { const renderContent = () => {
const partners = [
"华为", "宏信建投", "浙江交投", "中建八局", "中建一局",
"中交投资", "远东宏信", "长江生态环保", "首创环保", "北控水务",
"招商证券", "华泰证券", "浦发银行", "中国农业发展银行", "中国建设银行",
"平安银行", "工银科技", "中铁建大桥局", "中铁城市开发研究院", "中交公规院",
"北京绿基投", "甘肃公交建", "深圳市ppp中心", "国家信息中心", "湖北省发改委", "湖南省发改委",
"新疆自治区发改委", "四川省财政厅", "山西省财政厅", "甘肃省交通厅", "江西省交通厅",
"湖北交投", "中建四局", "大连甘井子区发改局"
];
switch (activeTab) { switch (activeTab) {
case 'home': case 'home':
return <HomeSection setActiveTab={setActiveTab} setSelectedScenario={setSelectedScenario} />; return <HomeSection setActiveTab={setActiveTab} setSelectedScenario={setSelectedScenario} />;
...@@ -2267,82 +2447,94 @@ const App = () => { ...@@ -2267,82 +2447,94 @@ const App = () => {
); );
case 'partners': case 'partners':
return ( return (
<section className="pt-24 pb-16 container mx-auto px-6 animate-fade-in-up min-h-[60vh]"> <section className="pt-24 pb-16 container mx-auto px-6 animate-fade-in-up min-h-[60vh]">
<div className="max-w-6xl mx-auto"> <div className="max-w-6xl mx-auto">
{/* 主题与正文 */} {/* 主题与正文 */}
<div className="text-center mb-16"> <div className="text-center mb-16">
<h2 className="text-3xl font-bold text-white mb-4">拥抱全球伙伴 · 共建无界生态</h2> <h2 className="text-3xl font-bold text-white mb-4">拥抱全球伙伴 · 共建无界生态</h2>
<p className="text-gray-400 max-w-3xl mx-auto leading-relaxed"> <p className="text-gray-400 max-w-3xl mx-auto leading-relaxed">
明树数据以全面开放的姿态,诚邀全球合作伙伴加入明树生态体系!我们打破地域与行业的藩篱,寻找志同道合的同行者,让我们以数据为纽带,以信任为基石,打破孤岛,链接无限,共铸数字经济的全球版图! 明树数据以全面开放的姿态,诚邀全球合作伙伴加入明树生态体系!我们打破地域与行业的藩篱,寻找志同道合的同行者,让我们以数据为纽带,以信任为基石,打破孤岛,链接无限,共铸数字经济的全球版图!
</p> </p>
</div> </div>
{/* 三大合作板块 */} {/* 三大合作板块 */}
<div className="grid grid-cols-1 md:grid-cols-3 gap-8"> <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
{/* 势能·共铸 */} {/* 势能·共铸 */}
<div className="bg-[#16181d] border border-white/5 rounded-lg p-8 hover:border-[#00FFC2]/50 transition-all duration-300 group hover:-translate-y-2"> <div className="bg-[#16181d] border border-white/5 rounded-lg p-8 hover:border-[#00FFC2]/50 transition-all duration-300 group hover:-translate-y-2">
<div className="w-12 h-12 bg-[#00FFC2]/10 rounded-lg flex items-center justify-center mb-6 text-[#00FFC2] group-hover:bg-[#00FFC2]/20"> <div className="w-12 h-12 bg-[#00FFC2]/10 rounded-lg flex items-center justify-center mb-6 text-[#00FFC2] group-hover:bg-[#00FFC2]/20">
<Zap className="w-6 h-6" /> <Zap className="w-6 h-6" />
</div> </div>
<h3 className="text-xl font-bold text-white mb-4" style={{fontSize: "24px" }}>势能 · 共铸</h3> <h3 className="text-xl font-bold text-white mb-4" style={{fontSize: "24px" }}>势能 · 共铸</h3>
{/* 新增副标题 - 突出显示 */} {/* 新增副标题 - 突出显示 */}
<h4 className="text-lg font-bold text-[#00FFC2] mb-3">寻找手握资源的实干家与项目方</h4> <h4 className="text-lg font-bold text-[#00FFC2] mb-3">寻找手握资源的实干家与项目方</h4>
<p className="text-gray-300 mb-6 leading-relaxed" style={{ lineHeight: 1.8, fontSize: "14px" }}> <p className="text-gray-300 mb-6 leading-relaxed" style={{ lineHeight: 1.8, fontSize: "14px" }}>
覆盖消费、能源、文旅、交通等行业,拥有丰富资源且寻求数字化转型与升级的伙伴。 覆盖消费、能源、文旅、交通等行业,拥有丰富资源且寻求数字化转型与升级的伙伴。
</p> </p>
<div className="bg-[#21242b] rounded-md p-3"> <div className="bg-[#21242b] rounded-md p-3">
<p className="text-white font-medium text-center"><span className="text-lg font-bold text-white">资源变现 · 场景落地</span></p> <p className="text-white font-medium text-center"><span className="text-lg font-bold text-white">资源变现 · 场景落地</span></p>
</div> </div>
</div> </div>
{/* 效能·共生 */} {/* 效能·共生 */}
<div className="bg-[#16181d] border border-white/5 rounded-lg p-8 hover:border-[#00FFC2]/50 transition-all duration-300 group hover:-translate-y-2"> <div className="bg-[#16181d] border border-white/5 rounded-lg p-8 hover:border-[#00FFC2]/50 transition-all duration-300 group hover:-translate-y-2">
<div className="w-12 h-12 bg-[#00FFC2]/10 rounded-lg flex items-center justify-center mb-6 text-[#00FFC2] group-hover:bg-[#00FFC2]/20"> <div className="w-12 h-12 bg-[#00FFC2]/10 rounded-lg flex items-center justify-center mb-6 text-[#00FFC2] group-hover:bg-[#00FFC2]/20">
<Handshake className="w-6 h-6" /> <Handshake className="w-6 h-6" />
</div> </div>
<h3 className="text-xl font-bold text-white mb-4" style={{fontSize: "24px" }}>效能 · 共生</h3> <h3 className="text-xl font-bold text-white mb-4" style={{fontSize: "24px" }}>效能 · 共生</h3>
{/* 新增副标题 - 突出显示 */} {/* 新增副标题 - 突出显示 */}
<h4 className="text-lg font-bold text-[#00FFC2] mb-3">寻找业务链条上下游专业服务伙伴</h4> <h4 className="text-lg font-bold text-[#00FFC2] mb-3">寻找业务链条上下游专业服务伙伴</h4>
<p className="text-gray-300 mb-6 leading-relaxed" style={{ lineHeight: 1.8, fontSize: "14px" }}> <p className="text-gray-300 mb-6 leading-relaxed" style={{ lineHeight: 1.8, fontSize: "14px" }}>
专注垂直领域的数据、AI企业,提供咨询、法律、财税、评估和运营等专业服务的企业。 专注垂直领域的数据、AI企业,提供咨询、法律、财税、评估和运营等专业服务的企业。
</p> </p>
<div className="bg-[#21242b] rounded-md p-3"> <div className="bg-[#21242b] rounded-md p-3">
<p className="text-white font-medium text-center"><span className="text-lg font-bold text-white">协同合作 · 强强联合</span></p> <p className="text-white font-medium text-center"><span className="text-lg font-bold text-white">协同合作 · 强强联合</span></p>
</div> </div>
</div> </div>
{/* 视野·无界 */} {/* 视野·无界 */}
<div className="bg-[#16181d] border border-white/5 rounded-lg p-8 hover:border-[#00FFC2]/50 transition-all duration-300 group hover:-translate-y-2"> <div className="bg-[#16181d] border border-white/5 rounded-lg p-8 hover:border-[#00FFC2]/50 transition-all duration-300 group hover:-translate-y-2">
<div className="w-12 h-12 bg-[#00FFC2]/10 rounded-lg flex items-center justify-center mb-6 text-[#00FFC2] group-hover:bg-[#00FFC2]/20"> <div className="w-12 h-12 bg-[#00FFC2]/10 rounded-lg flex items-center justify-center mb-6 text-[#00FFC2] group-hover:bg-[#00FFC2]/20">
<Globe className="w-6 h-6" /> <Globe className="w-6 h-6" />
</div> </div>
<h3 className="text-xl font-bold text-white mb-4" style={{fontSize: "24px" }}>视野 · 无界</h3> <h3 className="text-xl font-bold text-white mb-4" style={{fontSize: "24px" }}>视野 · 无界</h3>
{/* 新增副标题 - 突出显示 */} {/* 新增副标题 - 突出显示 */}
<h4 className="text-lg font-bold text-[#00FFC2] mb-3">寻找拥抱全球资本的高能先行者</h4> <h4 className="text-lg font-bold text-[#00FFC2] mb-3">寻找拥抱全球资本的高能先行者</h4>
<p className="text-gray-300 mb-6 leading-relaxed" style={{ lineHeight: 1.8, fontSize: "14px" }}> <p className="text-gray-300 mb-6 leading-relaxed" style={{ lineHeight: 1.8, fontSize: "14px" }}>
拥有高质量(产业集群/垂业类)或优质实物资产,认同数字资产化与科技出海的伙伴。 拥有高质量(产业集群/垂业类)或优质实物资产,认同数字资产化与科技出海的伙伴。
</p> </p>
<div className="bg-[#21242b] rounded-md p-3"> <div className="bg-[#21242b] rounded-md p-3">
<p className="text-white font-medium text-center"><span className="text-lg font-bold text-white">数据资产 · 科技出海</span></p> <p className="text-white font-medium text-center"><span className="text-lg font-bold text-white">数据资产 · 科技出海</span></p>
</div> </div>
</div> </div>
</div> </div>
{/* 现有合作伙伴展示 */} {/* 现有合作伙伴展示 */}
<div className="mt-16 pt-8 border-t border-white/5"> <div className="mt-16 overflow-hidden pt-8 border-t border-white/5">
<h3 className="text-xl font-bold text-white mb-8 text-center">部分合作伙伴</h3> <h3 className="text-xl font-bold text-white mb-8 text-center">部分合作伙伴</h3>
<div className="flex flex-wrap justify-center gap-8 opacity-80"> <div className="relative">
{['华为', '宏信建投', '浙江交投', '中建八局', '中建一局', '中交投资', '远东宏信', '长江生态环保'].map((p,i) => ( <div className="absolute top-0 left-0 w-8 h-full bg-gradient-to-r from-[#16181d] to-transparent z-10"></div>
<span key={i} className="text-lg md:text-xl font-bold text-gray-300 hover:text-[#00FFC2] transition-colors cursor-default"> <div className="absolute top-0 right-0 w-8 h-full bg-gradient-to-l from-[#16181d] to-transparent z-10"></div>
{p} <div className="flex gap-8 animate-infinite-scroll min-w-max">
</span> {partners.map((partner, index) => (
))} <span key={index} className="text-lg md:text-xl font-bold text-gray-300 hover:text-[#00FFC2] transition-colors cursor-default">{partner}</span>
</div> ))}
</div> {partners.map((partner, index) => (
</div> <span key={`dup-${index}`} className="text-lg md:text-xl font-bold text-gray-300 hover:text-[#00FFC2] transition-colors cursor-default">{partner}</span>
</section> ))}
); </div>
</div>
{/* <div className="flex flex-wrap justify-center gap-8 opacity-80">
{partners.map((p,i) => (
<span key={i} className="text-lg md:text-xl font-bold text-gray-300 hover:text-[#00FFC2] transition-colors cursor-default">
{p}
</span>
))}
</div> */}
</div>
</div>
</section>
);
case 'about': case 'about':
return ( return (
...@@ -2361,7 +2553,8 @@ const App = () => { ...@@ -2361,7 +2553,8 @@ const App = () => {
</div> </div>
{/* Certifications & Associations */} {/* Certifications & Associations */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 mb-16"> <div className="grid grid-cols-1 md:grid-cols-3 gap-8 mb-16">
{/* <div> */}
<div className="bg-[#1a1c23] border border-white/5 rounded p-8 hover:border-[#00FFC2]/30 transition-colors"> <div className="bg-[#1a1c23] border border-white/5 rounded p-8 hover:border-[#00FFC2]/30 transition-colors">
<h4 className="text-white font-bold mb-6 flex items-center gap-2"><Award className="w-5 h-5 text-[#00FFC2]"/> 企业资质与荣誉</h4> <h4 className="text-white font-bold mb-6 flex items-center gap-2"><Award className="w-5 h-5 text-[#00FFC2]"/> 企业资质与荣誉</h4>
<div className="flex flex-wrap gap-2"> <div className="flex flex-wrap gap-2">
...@@ -2383,6 +2576,11 @@ const App = () => { ...@@ -2383,6 +2576,11 @@ const App = () => {
))} ))}
</ul> </ul>
</div> </div>
{/* </div> */}
<div id="radiationCanvas">
<div className="text-gray-400">公司总部位于北京,在上海、南京、武汉、成都、兰州、西安、石家庄、乌鲁木齐、陵水、香港等地设有分支机构。</div>
<RadiationCanvas></RadiationCanvas>
</div>
</div> </div>
{/* Major Awards Highlight - Data Element X (样式已同步首页) */} {/* Major Awards Highlight - Data Element X (样式已同步首页) */}
...@@ -2695,7 +2893,7 @@ const App = () => { ...@@ -2695,7 +2893,7 @@ const App = () => {
<h2 className="text-2xl font-bold text-white mb-8 tracking-tight">与明树&#x3000;越山海</h2> <h2 className="text-2xl font-bold text-white mb-8 tracking-tight">与明树&#x3000;越山海</h2>
<div className="flex justify-center gap-8 text-xs text-gray-500 mt-12 border-t border-white/5 pt-8"> <div className="flex justify-center gap-8 text-xs text-gray-500 mt-12 border-t border-white/5 pt-8">
<span>© 2024 Bridata Inc.</span> <span>© 2024 Bridata Inc.</span>
<span>Privacy Policy</span> <a href="https://custom.bridata.com/yinsizhengce.html" target='_blank'>Privacy Policy</a>
<span>Terms of Service</span> <span>Terms of Service</span>
</div> </div>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment