// 财经商贸简历 - 增强版交互脚本 // 注册GSAP插件 gsap.registerPlugin(ScrollTrigger, TextPlugin); // 全局变量 - 鼠标相关变量已删除 // 页面加载完成后初始化 document.addEventListener('DOMContentLoaded', function() { // 初始化所有功能 initLoader(); initParticles(); initTypedText(); initCountUp(); initGSAPAnimations(); initScrollTriggers(); initChartAnimations(); initProjectCards3D(); initMagneticButtons(); initSmoothScroll(); initParallax(); }); // 1. 增强版加载动画 - 优化速度 function initLoader() { const loader = document.getElementById('loader'); // 立即显示英雄页内容,不等待加载动画 playIntroAnimations(); // GSAP加载动画 - 缩短时间 const tl = gsap.timeline({ onComplete: () => { gsap.to(loader, { opacity: 0, duration: 0.3, onComplete: () => { loader.style.display = 'none'; } }); } }); // 加载条动画 - 更快 tl.to('.bar', { height: '100%', stagger: 0.05, duration: 0.3, ease: 'power2.inOut' }) .to('.trend-line', { width: '100%', duration: 0.4, ease: 'power2.out' }, '-=0.2'); } // 2. 粒子背景 function initParticles() { if (typeof particlesJS !== 'undefined') { particlesJS('particles-js', { particles: { number: { value: 80, density: { enable: true, value_area: 800 } }, color: { value: ['#FFD700', '#2563eb', '#10b981'] }, shape: { type: 'circle' }, opacity: { value: 0.5, random: true, anim: { enable: true, speed: 1, opacity_min: 0.1, sync: false } }, size: { value: 3, random: true, anim: { enable: true, speed: 2, size_min: 0.1, sync: false } }, line_linked: { enable: true, distance: 150, color: '#FFD700', opacity: 0.2, width: 1 }, move: { enable: true, speed: 1, direction: 'none', random: false, straight: false, out_mode: 'out', bounce: false, attract: { enable: true, rotateX: 600, rotateY: 1200 } } }, interactivity: { detect_on: 'canvas', events: { onhover: { enable: true, mode: 'grab' }, onclick: { enable: true, mode: 'push' }, resize: true }, modes: { grab: { distance: 140, line_linked: { opacity: 0.5 } }, push: { particles_nb: 4 } } }, retina_detect: true }); } } // 3. 鼠标跟随效果 - 已删除 // 4. 打字机效果 function initTypedText() { if (typeof Typed !== 'undefined') { // 副标题打字机 new Typed('#typed-subtitle', { strings: [ '精通Amazon、Shopify、TikTok Shop多平台运营', '数据驱动选品,精准把握市场趋势', '优化Listing提升转化,打造爆款产品', '跨境物流供应链管理,确保履约时效' ], typeSpeed: 50, backSpeed: 30, backDelay: 2000, loop: true, showCursor: false }); } } // 5. 数字滚动动画 function initCountUp() { const observerOptions = { threshold: 0.5, rootMargin: '0px' }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const numbers = entry.target.querySelectorAll('.stat-number'); numbers.forEach(num => { const count = parseFloat(num.getAttribute('data-count')); const prefix = num.getAttribute('data-prefix') || ''; const suffix = num.getAttribute('data-suffix') || ''; if (typeof CountUp !== 'undefined') { const counter = new CountUp(num, count, { duration: 2.5, prefix: prefix, suffix: suffix, enableScrollSpy: false }); counter.start(); } else { // 备用动画 let current = 0; const increment = count / 50; const timer = setInterval(() => { current += increment; if (current >= count) { current = count; clearInterval(timer); } num.textContent = prefix + Math.floor(current) + suffix; }, 30); } }); observer.unobserve(entry.target); } }); }, observerOptions); const statsContainer = document.querySelector('.stats-container'); if (statsContainer) { observer.observe(statsContainer); } } // 6. GSAP动画 - 优化速度 function initGSAPAnimations() { // 注释掉GSAP标题动画,使用CSS动画替代 // 标题现在使用内联CSS动画,不需要JS控制 // 徽章动画 - 更快 gsap.from('.hero-badge', { scale: 0, rotation: 360, duration: 0.6, ease: 'back.out(1.7)', delay: 0.1 }); // 按钮动画 - 更快 gsap.from('.hero-cta .btn-primary, .hero-cta .btn-secondary', { y: 30, opacity: 0, duration: 0.4, stagger: 0.1, ease: 'power2.out', delay: 0.4 }); } // 7. 滚动触发动画 function initScrollTriggers() { // 章节标题动画 gsap.utils.toArray('.section-title').forEach(title => { gsap.from(title, { scrollTrigger: { trigger: title, start: 'top 80%', toggleActions: 'play none none reverse' }, y: 50, opacity: 0, duration: 1, ease: 'power3.out' }); }); // 技能卡片动画 - 优化速度 gsap.utils.toArray('.skill-card').forEach((card, index) => { gsap.from(card, { scrollTrigger: { trigger: card, start: 'top 85%', once: true // 只执行一次动画 }, y: 30, opacity: 0, duration: 0.4, delay: index * 0.02, // 大幅减少延迟 ease: 'power2.out' }); }); // 项目卡片动画 gsap.utils.toArray('.project-card').forEach((card, index) => { gsap.from(card, { scrollTrigger: { trigger: card, start: 'top 80%' }, scale: 0.8, opacity: 0, duration: 0.8, delay: index * 0.1, ease: 'power2.out' }); }); // 时间线动画 gsap.utils.toArray('.timeline-item').forEach((item, index) => { const direction = index % 2 === 0 ? -100 : 100; gsap.from(item, { scrollTrigger: { trigger: item, start: 'top 80%' }, x: direction, opacity: 0, duration: 1, ease: 'power2.out' }); }); } // 8. 图表动画 function initChartAnimations() { // K线图动画 const chartBg = document.getElementById('chartBg'); if (chartBg) { // 动态创建K线 for (let i = 0; i < 30; i++) { const bar = document.createElement('div'); bar.className = 'chart-line'; bar.style.left = (i * 3.3) + '%'; bar.style.height = Math.random() * 60 + 20 + '%'; bar.style.background = Math.random() > 0.5 ? '#10b981' : '#ef4444'; bar.style.animationDelay = (i * 0.1) + 's'; chartBg.appendChild(bar); // GSAP动画 gsap.from(bar, { height: 0, duration: 1, delay: i * 0.05, ease: 'power2.out' }); } } // 3D金融正方体交互增强 const financeCube = document.querySelector('.finance-cube'); if (financeCube) { let currentRotationX = -20; let currentRotationY = 0; let autoRotate = true; let mouseStartX = 0; let mouseStartY = 0; let rotationStartX = -20; let rotationStartY = 0; // 获取当前旋转角度 function getCurrentRotation() { const transform = window.getComputedStyle(financeCube).transform; if (transform && transform !== 'none') { // 从transform matrix中提取旋转角度(简化处理) const elapsed = Date.now() * 0.001; // 转换为秒 currentRotationY = (elapsed * 18) % 360; // 20秒转360度 = 18度/秒 } return currentRotationY; } // 鼠标交互控制旋转 const cubeContainer = document.querySelector('.finance-cube-container'); if (cubeContainer) { cubeContainer.addEventListener('mouseenter', (e) => { autoRotate = false; // 获取当前的旋转位置 currentRotationY = getCurrentRotation(); currentRotationX = -20; // 记录鼠标起始位置和旋转起始角度 const rect = cubeContainer.getBoundingClientRect(); mouseStartX = e.clientX - rect.left; mouseStartY = e.clientY - rect.top; rotationStartX = currentRotationX; rotationStartY = currentRotationY; // 停止CSS动画并设置当前位置 financeCube.style.animation = 'none'; gsap.set(financeCube, { rotationX: currentRotationX, rotationY: currentRotationY }); }); cubeContainer.addEventListener('mouseleave', () => { autoRotate = true; // 从当前位置继续动画 const currentY = gsap.getProperty(financeCube, "rotationY"); financeCube.style.animation = 'rotateCube 20s infinite linear'; financeCube.style.animationDelay = `-${(currentY % 360) / 18}s`; }); cubeContainer.addEventListener('mousemove', (e) => { if (!autoRotate) { const rect = cubeContainer.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; // 基于鼠标移动的增量计算旋转 const deltaX = (x - mouseStartX) / rect.width * 180; const deltaY = (y - mouseStartY) / rect.height * 180; currentRotationY = rotationStartY + deltaX; currentRotationX = rotationStartX - deltaY; // 限制X轴旋转范围 currentRotationX = Math.max(-60, Math.min(60, currentRotationX)); gsap.to(financeCube, { rotationX: currentRotationX, rotationY: currentRotationY, duration: 0.1, ease: 'power2.out' }); } }); } // 为每个面添加简单的悬停效果 document.querySelectorAll('.cube-face').forEach((face, index) => { // 添加悬停时的图标缩放效果 const icon = face.querySelector('.face-content i'); if (icon) { face.addEventListener('mouseenter', () => { gsap.to(icon, { scale: 1.1, duration: 0.3, ease: 'power2.out' }); }); face.addEventListener('mouseleave', () => { gsap.to(icon, { scale: 1, duration: 0.3, ease: 'power2.out' }); }); } }); // 添加键盘控制 document.addEventListener('keydown', (e) => { if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return; switch(e.key) { case 'ArrowUp': rotationX -= 10; break; case 'ArrowDown': rotationX += 10; break; case 'ArrowLeft': rotationY -= 10; break; case 'ArrowRight': rotationY += 10; break; case ' ': autoRotate = !autoRotate; if (autoRotate) { financeCube.style.animation = 'rotateCube 20s infinite linear'; } else { financeCube.style.animation = 'none'; } e.preventDefault(); break; } if (!autoRotate && (e.key.startsWith('Arrow'))) { gsap.to(financeCube, { rotationX: rotationX, rotationY: rotationY, duration: 0.3, ease: 'power2.out' }); } }); } } // 9. 3D项目卡片 function initProjectCards3D() { document.querySelectorAll('.project-card').forEach(card => { card.addEventListener('mousemove', (e) => { const rect = card.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const centerX = rect.width / 2; const centerY = rect.height / 2; const rotateX = (y - centerY) / 10; const rotateY = (centerX - x) / 10; gsap.to(card, { rotationX: rotateX, rotationY: rotateY, duration: 0.3, ease: 'power2.out', transformPerspective: 1000 }); }); card.addEventListener('mouseleave', () => { gsap.to(card, { rotationX: 0, rotationY: 0, duration: 0.5, ease: 'power2.out' }); }); }); } // 10. 磁性按钮效果 function initMagneticButtons() { document.querySelectorAll('.btn-primary, .btn-secondary').forEach(btn => { btn.addEventListener('mousemove', (e) => { const rect = btn.getBoundingClientRect(); const x = e.clientX - rect.left - rect.width / 2; const y = e.clientY - rect.top - rect.height / 2; gsap.to(btn, { x: x * 0.3, y: y * 0.3, duration: 0.3, ease: 'power2.out' }); }); btn.addEventListener('mouseleave', () => { gsap.to(btn, { x: 0, y: 0, duration: 0.3, ease: 'power2.out' }); }); }); } // 11. 平滑滚动 function initSmoothScroll() { // 使用GSAP的ScrollSmoother(需要付费插件)或自定义实现 let currentScroll = 0; let targetScroll = 0; const ease = 0.1; function smoothScroll() { targetScroll = window.scrollY; currentScroll += (targetScroll - currentScroll) * ease; // 应用视差效果 gsap.set('.hero-background', { y: currentScroll * 0.5 }); requestAnimationFrame(smoothScroll); } // smoothScroll(); // 如果需要启用 } // 12. 视差滚动 function initParallax() { gsap.to('.hero-background', { scrollTrigger: { trigger: '.hero-section', start: 'top top', end: 'bottom top', scrub: 1 }, y: 300, ease: 'none' }); // 多层视差 gsap.utils.toArray('.parallax-layer').forEach((layer, index) => { const speed = (index + 1) * 0.5; gsap.to(layer, { scrollTrigger: { trigger: layer, start: 'top bottom', end: 'bottom top', scrub: 1 }, y: 100 * speed, ease: 'none' }); }); } // 13. 入场动画序列 - 优化速度 function playIntroAnimations() { const tl = gsap.timeline(); // 更快的动画,排除已有CSS动画的元素 tl.from('.finance-nav', { y: -100, opacity: 0, duration: 0.4, ease: 'power3.out' }) .from('.hero-content > *:not(.hero-title)', { y: 30, opacity: 0, duration: 0.4, stagger: 0.05, ease: 'power2.out' }, '-=0.2'); } // 14. 导航栏交互增强 window.addEventListener('scroll', () => { const navbar = document.getElementById('navbar'); const scrollY = window.scrollY; if (scrollY > 50) { navbar.classList.add('scrolled'); // 添加模糊背景 gsap.to(navbar, { backdropFilter: 'blur(20px)', duration: 0.3 }); } else { navbar.classList.remove('scrolled'); gsap.to(navbar, { backdropFilter: 'blur(0px)', duration: 0.3 }); } // 更新导航链接状态 updateActiveNavLink(); }); // 15. 更新活动导航链接 function updateActiveNavLink() { const sections = document.querySelectorAll('section'); const navLinks = document.querySelectorAll('.nav-link'); let current = ''; sections.forEach(section => { const sectionTop = section.offsetTop; const sectionHeight = section.clientHeight; if (scrollY >= (sectionTop - 200)) { current = section.getAttribute('id'); } }); navLinks.forEach(link => { link.classList.remove('active'); if (link.getAttribute('href').substring(1) === current) { link.classList.add('active'); } }); } // 16. 项目详情模态框增强 - 已被index.html中的新版本替代 // 注释掉避免冲突 /* window.showProjectDetail_old = function(projectId) { console.log('showProjectDetail called with ID:', projectId); const modal = document.getElementById('projectModal'); const modalContent = document.getElementById('modalContent'); if (!modal || !modalContent) { console.error('Modal elements not found!'); alert('模态框元素未找到!请刷新页面重试。'); return; } // 项目详情数据 const projectDetails = { 1: { title: '十足便利店内容营销推广项目', description: '以"门店职人"KOC为核心,结合抖音矩阵运营、精准DOU+投流和直播互动,累计覆盖全国1200+门店。', flows: [ { title: '流程一:明确平台目标', img: 'public/十足便利店内容营销推广项目/流程一:明确平台目标.jpeg', overview: '在项目启动阶段,协助完成用户画像分析、内容战略定位与竞品数据对比,明确抖音平台的传播目标与方向。', content: [ '数据回溯整理:协助分析近6个月的用户互动数据,形成用户兴趣点和偏好趋势表。', '竞品模式收集:整理"Today便利店""便利蜂"等竞品内容样式与互动量,归纳不足。', '目标KPI归纳:协助制定曝光、互动和到店转化的分级目标表,用于团队后续追踪。', '客群画像梳理:参与输出18–30岁年轻群体偏好的数据报告,为内容定位提供支持。' ] }, { title: '流程二:搭建门店职人内容运营体系', img: 'public/十足便利店内容营销推广项目/流程二:搭建门店职人内容运营体系.jpeg', overview: '在内容生产阶段,参与建立门店职人梯队、视频模板与发布规范,推动员工成为内容创作者,强化门店的社交化表达。', content: [ '职人候选筛选:协助各门店推荐1–2名员工,统计兴趣与表现,组成内容梯队。', '视频模板制定:参与制作"三镜头+字幕+口播"标准模版,降低员工视频制作门槛。', '内容排班表协助:根据门店节奏,协助建立每周至少2条视频的内容上传计划表。', '职人认证资料:配合设计门店职人抖音ID卡牌,整理资料用于门店线上线下展示。', '热榜评选辅助:收集各门店视频数据,整理"爆款内容"评选结果并发布。' ] }, { title: '流程三:搭建门店营销账号矩阵', img: 'public/十足便利店内容营销推广项目/流程三:搭建门店营销账号矩阵.png', overview: '在账号搭建阶段,协助建立主子账号联动机制,统一认证与管理,提升内容协同效率和传播覆盖面。', content: [ '账号资料归档:协助收集并上传各门店账号信息,统一接入企业蓝V后台。', '主子账号内容分工:整理主账号品牌事件与子账号本地化互动的内容边界表。', '协同转发执行:参与每周主号转发优质门店子号视频,提升曝光率。', '账号绩效打分:协助统计粉丝增长、播放量、投产比,生成门店账号表现评分表。', '内容审核支持:参与搭建词库过滤机制,帮助降低违规内容风险。' ] }, { title: '流程四:执行精准DOU+广告与直播互动', img: 'public/十足便利店内容营销推广项目/流程四:执行精准 DOU+ 广告与直播互动活动.jpeg', overview: '在互动与转化阶段,协助执行直播栏目策划、互动机制设置及直播素材归档,强化用户留存与线上线下互动。', content: [ '直播选题准备:协助制定"午间带货""夜宵推荐"等直播栏目脚本。', '节日内容排期:整理高考季、夏日饮品季等热点日历,配合直播与短视频执行。', '直播互动支持:参与设置"弹幕秒杀""关注领券"等直播间互动环节。', '兑换码整理:协助统计并发放门店线下兑换码,保障直播到店转化。', '素材库归档:收集高表现直播片段,剪辑后归档至"职人内容素材库"。' ] }, { title: '流程五:实施本地化DOU+定向投流', img: 'public/十足便利店内容营销推广项目/流程五:实施本地化 DOU+ 定向投流.png', overview: '在广告投放环节,协助执行精准人群定向、AB测试与预算调控,确保内容投流高效并保持ROI稳定。', content: [ '人群标签设定:协助建立"女性/25–40岁/距离<3km"精准客群标签组合。', '素材AB测试:整理不同文案与视频组合,执行小范围测试并记录表现。', '预算控制支持:参与动态调整每日预算,确保投产比≥3.0。', '投流监控数据整理:协助更新广告投流与门店数据联动看板,供团队复盘。', '高ROI案例收集:参与整理表现优异视频,推动跨门店复制拍摄与投放。' ] }, { title: '流程六:推动线下体验与线上互动融合', img: 'public/十足便利店内容营销推广项目/流程六:推动线下体验与线上互动的融合.jpeg', overview: '在项目后期,协助建立线上互动与门店体验结合的机制,推动用户到店转化与复购黏性。', content: [ '点赞兑换执行:协助整理点赞兑换券活动执行情况,统计兑换成功数量。', '客服响应支持:监控抖音私信与小程序客服,确保响应时间在30秒内。', '互动活动记录:统计累计参与互动兑换的用户规模,并制作数据简报。', '会员打卡辅助:协助上线会员打卡功能,记录用户复购与参与数据。', '用户反馈收集:整理线上线下用户对互动机制的意见,为后续改进提供参考。' ] } ] }, 2: { title: '夏季凉被产品出海项目', description: '聚焦欧美高温市场的"Hot Sleeper"用户群体,围绕凉感舒眠需求打造跨境床品品牌,全年营收3200万美元。', flows: [ { title: '流程一:品牌定位与用户细分', img: 'public/夏季凉被产品出海项目/流程一:品牌定位与用户细分.jpeg', overview: '在项目初期,协助开展用户调研、竞品分析与定价测试,明确目标人群与品牌定位,为产品研发和渠道策略提供方向。', content: [ '协助问卷与访谈调研,整理用户对夜间盗汗、体温调节等痛点的反馈数据。', '参与品牌定位资料整理,提炼"高端智能凉感床品"核心价值。', '协助品牌视觉语言输出,支持蓝白冷调的包装与主图风格统一。', '配合定价测试,参与建立欧美市场的阶梯定价方案。', '协助构建用户旅程地图,整理电商平台用户路径与转化点。' ] }, { title: '流程二:出口法规与认证合规', img: 'public/夏季凉被产品出海项目/流程二:出口法规与认证合规.jpg', overview: '在出口合规阶段,协助认证资料整理、包装环保检测与产品标签核对,保障产品满足欧美市场监管要求。', content: [ '协助整理 CE、RoHS、RED 等认证材料并归档。', '参与织物安全检测样本送检与结果收集。', '协助核对包装环保比例,确保 ≥80% 再生纸板符合欧盟政策。', '参与商品标签检查,确认 EAN-13 条码与原产地标识完整。', '协助搭建认证文档归档体系,支持跨境平台资质审核。' ] }, { title: '流程三:多平台渠道运营', img: 'public/夏季凉被产品出海项目/流程三:多平台渠道运营.jpeg', overview: '在渠道运营环节,协助 Amazon、Shopify 与 TikTok 的店铺维护与流量转化,支持公域引流与私域沉淀。', content: [ '协助 Amazon 关键词优化与五图内容更新,支持提升自然排名。', '参与 FBA 补货表格建立,跟进库存动态与发货周期。', '协助 Shopify 会员管理,录入积分数据并支持自动邮件回访测试。', '参与 TikTok KOL合作执行,整理达人投放素材与发布时间表。', '协助数据对接,配合 Google Analytics 建立跨平台用户行为追踪表。' ] }, { title: '流程四:柔性制造与海外物流体系', img: 'public/夏季凉被产品出海项目/流程四:柔性制造与海外物流体系搭建.jpeg', overview: '在供应链环节,协助生产进度监控与国际物流方案执行,确保订单交付稳定与跨境履约顺畅。', content: [ '协助 MES 系统数据录入,支持 SKU 切换与返单调度。', '参与多路径运输方案整理,记录海运、空运与中欧班列时效数据。', '协助海外仓入库数据录入,确认 Prime 标准与 DDP 清关记录。', '配合越南冗余产线测试,整理应急产能启用数据。', '协助物流追踪表更新,跟进延误订单与异常履约情况。' ] }, { title: '流程五:内容营销与品牌曝光', img: 'public/夏季凉被产品出海项目/流程五:内容营销与品牌曝光.jpg', overview: '在营销推广阶段,协助媒体合作、达人传播与UGC激励执行,支持品牌声量与转化提升。', content: [ '协助整理媒体评测文章与开箱视频素材,归档至内容库。', '参与 TikTok 话题数据统计,监测标签播放量与互动效果。', '协助 Prime Day 促销执行,整理单日爆单数据并生成日报。', '参与用户晒单奖励发放,收集UGC内容并分类归档。', '协助 Notion 内容库管理,维护命名规则与版本更新。' ] } ] }, 3: { title: '良品铺子采购方案设计项目', description: '通过建立科学的需求预测机制、严格的供应商准入制度和数字化的合同履约管理,实现采购全过程标准化与可视化。', flows: [ { title: '流程一:制定采购需求计划', img: 'public/良品铺子采购方案设计项目/流程一:制定采购需求计划.jpeg' }, { title: '流程二:供应商准入与评估选择', img: 'public/良品铺子采购方案设计项目/流程二:供应商准入与评估选择.jpeg' }, { title: '流程三:采购执行与合同签订', img: 'public/良品铺子采购方案设计项目/流程三:采购执行与合同签订.jpeg' }, { title: '流程四:到货验收与质量检查', img: 'public/良品铺子采购方案设计项目/流程四:到货验收与质量检查.jpeg' }, { title: '流程五:物流运输与库存入库', img: 'public/良品铺子采购方案设计项目/流程五:物流运输与库存入库.jpeg' }, { title: '流程六:供应商绩效管理与持续改进', img: 'public/良品铺子采购方案设计项目/流程六:供应商绩效管理与持续改进.jpeg' } ] }, 4: { title: '永辉生鲜超市供应链管理设计项目', description: '通过构建优选供应商体系、完善冷链物流、优化库存周转,显著提升了库存流转效率与配送时效。', flows: [ { title: '流程一:构建优选供应商体系', img: 'public/永辉生鲜超市供应链管理设计项目/流程一:构建优选供应商体系与合同履约机制.jpeg' }, { title: '流程二:建设全程冷链物流系统', img: 'public/永辉生鲜超市供应链管理设计项目/流程二:建设全程冷链物流系统保障产品新鲜.jpeg' }, { title: '流程三:优化库存周转与信息协同', img: 'public/永辉生鲜超市供应链管理设计项目/流程三:优化库存周转与信息协同策略.jpg' }, { title: '流程四:分析客户偏好与多渠道订单响应', img: 'public/永辉生鲜超市供应链管理设计项目/流程四:分析客户偏好与多渠道订单响应机制.jpeg' }, { title: '流程五:构建反馈优化与持续改进机制', img: 'public/永辉生鲜超市供应链管理设计项目/流程五:构建反馈优化与供应链持续改进机制.jpeg' } ] }, 5: { title: '某证券公司申请增加业务种类核准项目', description: '围绕新增"融资融券、做市交易、代销金融产品"三项业务,在三个月监管时限内实现换证、权限开通与经纪端SOP上线。', flows: [ { title: '流程一:构建立项论证', img: 'public/某证券公司申请增加业务种类核准项目/流程一:构建立项论证.jpg' }, { title: '流程二:规范公司治理与内部决策程序', img: 'public/某证券公司申请增加业务种类核准项目/流程二:规范公司治理与内部决策程序.jpeg' }, { title: '流程三:实施资本实力与风控指标复核', img: 'public/某证券公司申请增加业务种类核准项目/流程三:实施资本实力与风控指标复核.jpeg' }, { title: '流程四:制定制度体系与合规意见', img: 'public/某证券公司申请增加业务种类核准项目/流程四:制定制度体系与合规意见.jpeg' }, { title: '流程五:封装报批、线上申报与测试投产', img: 'public/某证券公司申请增加业务种类核准项目/流程五:封装报批、线上申报与测试投产.png' } ] } }; const project = projectDetails[projectId] || projectDetails[1]; // 显示模态框(检查GSAP是否可用) if (typeof gsap !== 'undefined') { // 使用GSAP动画 gsap.fromTo(modal, { opacity: 0, scale: 0.8 }, { opacity: 1, scale: 1, duration: 0.3, ease: 'back.out(1.7)', display: 'block' } ); } else { // 直接显示模态框 modal.style.display = 'block'; modal.style.opacity = '1'; console.warn('GSAP not loaded, using simple display'); } // 生成流程详情HTML let flowsHTML = ''; project.flows.forEach((flow, index) => { let contentHTML = ''; if (flow.content && flow.content.length > 0) { contentHTML = '
${flow.overview}
` : ''} ${contentHTML} ${flow.img ? `${project.description}