// Language switching functionality let currentLang = localStorage.getItem('language') || 'cn'; let langData = {}; async function loadLanguage(lang) { try { const res = await fetch(`config/lang-${lang}.json`); langData = await res.json(); updatePageLanguage(); localStorage.setItem('language', lang); currentLang = lang; // Update active state for language options document.querySelectorAll('.lang-option').forEach(option => { if (option.getAttribute('data-lang') === lang) { option.classList.add('active'); } else { option.classList.remove('active'); } }); // Reload services and cases with new language loadServices(); loadCases(); // 重新加载视频以更新语言 } catch (err) { console.error("加载语言文件失败:", err); } } function updatePageLanguage() { // Update all elements with data-i18n attribute document.querySelectorAll('[data-i18n]').forEach(element => { const key = element.getAttribute('data-i18n'); const translation = getNestedTranslation(langData, key); if (translation) { element.textContent = translation; } }); } function getNestedTranslation(obj, path) { return path.split('.').reduce((current, key) => current?.[key], obj); } async function loadServices() { try { const res = await fetch(`config/card-${currentLang}.json`); const cards = await res.json(); const grid = document.getElementById("servicesGrid"); grid.innerHTML = ''; // Clear existing content cards.forEach(item => { const card = document.createElement("div"); card.className = "service-card"; // 判断 src 是图片还是图标 let content; if (/\.(png|jpe?g|gif|webp|svg)$/i.test(item.src)) { content = `${item.title}`; } else { content = ``; } card.innerHTML = `
${content}

${item.title}

${item.desc}

`; // 如果 url 不为空,整个卡片可点击 if (item.url && item.url.trim() !== "") { card.style.cursor = "pointer"; card.addEventListener("click", () => { let targetUrl = item.url.trim(); // 如果不是 http/https 开头,自动补全 if (!/^https?:\/\//i.test(targetUrl)) { targetUrl = "https://" + targetUrl; } window.open(targetUrl, "_blank"); // 新窗口打开 }); } grid.appendChild(card); }); } catch (err) { console.error("加载业务卡片失败:", err); } } async function loadPartners() { try { // 从后台 API 获取合作伙伴数据 const res = await fetch("/api/partners/public"); const result = await res.json(); if (!result.success) { throw new Error(result.message || '获取合作伙伴数据失败'); } const partners = result.data; const grid = document.getElementById("partnersGrid"); grid.innerHTML = ''; // 清空现有内容 partners.forEach(item => { const partnerCard = document.createElement("div"); partnerCard.className = "partner-logo"; partnerCard.innerHTML = ` ${item.name} `; // 如果 url 不为空,整个卡片可点击 if (item.url && item.url.trim() !== "") { partnerCard.style.cursor = "pointer"; partnerCard.addEventListener("click", () => { let targetUrl = item.url.trim(); // 如果不是 http/https 开头,自动补全 if (!/^https?:\/\//i.test(targetUrl)) { targetUrl = "https://" + targetUrl; } window.open(targetUrl, "_blank"); // 新窗口打开 }); } grid.appendChild(partnerCard); }); } catch (err) { console.error("加载合作伙伴失败:", err); // 显示友好的错误提示 const grid = document.getElementById("partnersGrid"); grid.innerHTML = '

暂无合作伙伴数据

'; } } document.addEventListener("DOMContentLoaded", () => { loadCases(); loadServices(); loadPartners(); // Load initial language loadLanguage(currentLang); // Language toggle button event - handle clicks on language options const langBtn = document.getElementById('langToggle'); if (langBtn) { langBtn.addEventListener('click', (e) => { const target = e.target; if (target.classList.contains('lang-option')) { const selectedLang = target.getAttribute('data-lang'); if (selectedLang !== currentLang) { loadLanguage(selectedLang); } } }); } }); async function loadCases() { try { // 从后台 API 获取视频数据 const res = await fetch('/api/videos/public'); const result = await res.json(); if (!result.success) { throw new Error(result.message || '获取视频数据失败'); } const cases = result.data; const grid = document.getElementById("casesGrid"); grid.innerHTML = ''; // Clear existing content // 根据当前语言选择标题和描述 cases.forEach(item => { const card = document.createElement("div"); card.className = "case-card"; card.setAttribute("data-video", item.video_url); const title = currentLang === 'cn' ? item.title_cn : item.title_en; const desc = currentLang === 'cn' ? item.desc_cn : item.desc_en; // 使用封面图 card.innerHTML = ` ${title}

${title}

${desc || ''}

`; grid.appendChild(card); }); // 加载完成后绑定点击播放逻辑 bindVideoModal(); } catch (err) { console.error("加载案例失败:", err); // 显示友好的错误提示 const grid = document.getElementById("casesGrid"); grid.innerHTML = '

暂无视频数据

'; } } function bindVideoModal() { const modal = document.getElementById("videoModal"); const modalVideo = document.getElementById("modalVideo"); const closeBtn = modal.querySelector(".close-btn"); // 点击卡片播放 document.querySelectorAll(".case-card .play-button").forEach(button => { button.addEventListener("click", () => { const videoSrc = button.parentElement.getAttribute("data-video"); modal.style.display = "flex"; modalVideo.src = videoSrc; modalVideo.play(); }); }); // 关闭按钮 closeBtn.addEventListener("click", () => { modal.style.display = "none"; modalVideo.pause(); modalVideo.src = ""; }); // 点击遮罩层关闭 modal.addEventListener("click", (e) => { if (e.target === modal) { modal.style.display = "none"; modalVideo.pause(); modalVideo.src = ""; } }); } // const hamburger = document.querySelector('.hamburger'); const navLinks = document.querySelector('.nav-links'); // hamburger.addEventListener('click', () => { // navLinks.classList.toggle('active'); // }); window.addEventListener('scroll', () => { const header = document.querySelector('header'); if (window.scrollY > 100) { header.classList.add('scrolled'); } else { header.classList.remove('scrolled'); } }); document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const targetId = this.getAttribute('href'); if (targetId === '#') return; const targetElement = document.querySelector(targetId); if (targetElement) { navLinks.classList.remove('active'); window.scrollTo({ top: targetElement.offsetTop - 80, behavior: 'smooth' }); } }); });