🚀 数字创意服务领导者

湖南承岳科技有限公司

专业提供数字人、视频制作、动漫制作、对标账号运营及软件开发等一站式数字创意解决方案

创新驱动,数字赋能

湖南承岳科技有限公司是一家专注于数字创意领域的高新技术企业。我们汇聚了一支充满激情和创意的专业团队,致力于为客户提供最前沿的数字化解决方案。

从数字人技术到视频制作,从动漫创作到软件开发,我们始终以客户需求为导向,以技术创新为驱动,帮助企业在数字化浪潮中脱颖而出。

100+
成功案例
50+
合作伙伴
5+
年行业经验
🎯

全方位数字创意服务

我们提供专业的数字化解决方案,助力您的品牌在数字时代脱颖而出

🤖

数字人服务

打造专属虚拟数字人,支持2D/3D形象定制、AI驱动、直播互动等功能,为您的品牌注入科技活力,实现7×24小时在线服务。

🎬

视频制作

专业短视频、宣传片、广告片制作,涵盖策划、拍摄、剪辑、特效全流程服务,用影像讲述您的品牌故事。

🎨

动漫制作

原创动漫IP开发、动画短片制作、品牌动画设计,融合创意与技术,打造独特的视觉体验和品牌记忆点。

📊

对标账号运营

深度分析行业标杆账号,制定差异化运营策略,提供内容规划、数据分析、粉丝增长等一站式代运营服务。

💻

软件开发

定制化软件开发服务,包括APP开发、小程序开发、企业管理系统、电商平台等,用技术赋能业务增长。

期待与您合作

无论您有任何需求或疑问,我们随时为您提供专业咨询

📍

公司地址

湖南省长沙市

📧

电子邮箱

contact@chengyuekj.com

🌐

官方网站

www.chengyuekj.com

🎬 抖音视频智能发布

基于RPA技术,实现视频自动上传、智能填单、一键发布

📤

自动上传

支持本地视频文件自动上传,断点续传,进度实时显示

✏️

智能填单

自动填写标题、描述、话题标签,支持模板预设

🤖

RPA自动化

模拟真人操作,随机延迟,防检测机制,安全可靠

// ==================== 手机短信验证码登录(新增)==================== let currentSessionId = null; let smsCountdownInterval = null; // 显示短信验证码登录弹窗 function showSMSLogin() { console.log('📱 [showSMSLogin] 开始显示短信验证码登录弹窗'); try { // 获取弹窗元素 const modal = document.getElementById('smsLoginModal'); if (!modal) { console.error('❌ [showSMSLogin] 找不到smsLoginModal元素!'); alert('系统错误:找不到登录弹窗元素'); return; } // 重置UI modal.style.display = 'block'; console.log('✅ [showSMSLogin] 弹窗已显示'); const step1 = document.getElementById('smsStep1'); const step2 = document.getElementById('smsStep2'); const success = document.getElementById('smsLoginSuccess'); const manualOption = document.getElementById('manualCookieOption'); const manualForm = document.getElementById('manualCookieForm'); const status = document.getElementById('smsStatus'); const phoneInput = document.getElementById('phoneInput'); const codeInput = document.getElementById('codeInput'); const phoneError = document.getElementById('phoneError'); const sendBtn = document.getElementById('sendCodeBtn'); const verifyBtn = document.getElementById('verifyCodeBtn'); if (step1) step1.style.display = 'block'; if (step2) step2.style.display = 'none'; if (success) success.style.display = 'none'; if (manualOption) manualOption.style.display = 'block'; if (manualForm) manualForm.style.display = 'none'; if (status) status.textContent = ''; if (phoneInput) phoneInput.value = ''; if (codeInput) codeInput.value = ''; if (phoneError) phoneError.style.display = 'none'; // 重置按钮状态 if (sendBtn) { sendBtn.disabled = true; sendBtn.style.opacity = '0.5'; } if (verifyBtn) { verifyBtn.disabled = true; verifyBtn.style.opacity = '0.5'; } // 清除之前的倒计时 if (smsCountdownInterval) { clearInterval(smsCountdownInterval); smsCountdownInterval = null; } console.log('✅ [showSMSLogin] 弹窗初始化完成'); } catch (error) { console.error('❌ [showSMSLogin] 显示弹窗时出错:', error); alert('显示登录窗口时出错: ' + error.message); } } // 验证手机号 function validatePhone(phone) { const isValid = /^1[3-9]\d{9}$/.test(phone); const sendBtn = document.getElementById('sendCodeBtn'); const errorEl = document.getElementById('phoneError'); if (isValid) { sendBtn.disabled = false; sendBtn.style.opacity = '1'; errorEl.style.display = 'none'; } else { sendBtn.disabled = true; sendBtn.style.opacity = '0.5'; if (phone.length === 11) { errorEl.style.display = 'block'; } } return isValid; } // 验证验证码 function validateCode(code) { const isValid = /^\d{6}$/.test(code); const verifyBtn = document.getElementById('verifyCodeBtn'); if (isValid) { verifyBtn.disabled = false; verifyBtn.style.opacity = '1'; } else { verifyBtn.disabled = true; verifyBtn.style.opacity = '0.5'; } return isValid; } // 发送验证码 async function sendSMSCode() { const phone = document.getElementById('phoneInput').value.trim(); const sendBtn = document.getElementById('sendCodeBtn'); const statusEl = document.getElementById('smsStatus'); if (!validatePhone(phone)) { statusEl.textContent = '请输入正确的手机号'; statusEl.style.color = '#ef4444'; return; } // 禁用按钮 sendBtn.disabled = true; sendBtn.style.opacity = '0.5'; sendBtn.textContent = '发送中...'; statusEl.textContent = '正在发送验证码...'; statusEl.style.color = '#64748b'; try { const formData = new FormData(); formData.append('phone', phone); const response = await fetch('/api/douyin/login-sms/send', { method: 'POST', body: formData }); const result = await response.json(); console.log('发送验证码响应:', result); if (result.status === 'sent') { currentSessionId = result.session_id; // 显示步骤2 document.getElementById('smsStep1').style.display = 'none'; document.getElementById('smsStep2').style.display = 'block'; document.getElementById('displayPhone').textContent = result.phone; statusEl.textContent = '验证码已发送'; statusEl.style.color = '#22c55e'; // 开始倒计时 startSMSCountdown(result.countdown || 60); } else { sendBtn.disabled = false; sendBtn.style.opacity = '1'; sendBtn.textContent = '获取验证码'; statusEl.textContent = result.message || '发送失败'; statusEl.style.color = '#ef4444'; } } catch (error) { console.error('发送验证码失败:', error); sendBtn.disabled = false; sendBtn.style.opacity = '1'; sendBtn.textContent = '获取验证码'; statusEl.textContent = '网络错误,请重试'; statusEl.style.color = '#ef4444'; } } // 开始倒计时 function startSMSCountdown(seconds) { const countdownEl = document.getElementById('countdownSec'); const resendBtn = document.getElementById('resendBtn'); let remaining = seconds; countdownEl.textContent = remaining; resendBtn.style.display = 'none'; smsCountdownInterval = setInterval(() => { remaining--; countdownEl.textContent = remaining; if (remaining <= 0) { clearInterval(smsCountdownInterval); smsCountdownInterval = null; resendBtn.style.display = 'inline'; document.getElementById('smsCountdown').innerHTML = ''; } }, 1000); } // 重新发送 async function resendCode() { document.getElementById('smsStep2').style.display = 'none'; document.getElementById('smsStep1').style.display = 'block'; document.getElementById('smsCountdown').innerHTML = '60秒后重新获取 '; validatePhone(document.getElementById('phoneInput').value); } // 返回手机号输入 function backToPhone() { document.getElementById('smsStep2').style.display = 'none'; document.getElementById('smsStep1').style.display = 'block'; document.getElementById('smsStatus').textContent = ''; if (smsCountdownInterval) { clearInterval(smsCountdownInterval); smsCountdownInterval = null; } validatePhone(document.getElementById('phoneInput').value); } // 验证验证码并登录 async function verifySMSCode() { const code = document.getElementById('codeInput').value.trim(); const verifyBtn = document.getElementById('verifyCodeBtn'); const statusEl = document.getElementById('smsStatus'); if (!/^\d{6}$/.test(code)) { statusEl.textContent = '请输入6位验证码'; statusEl.style.color = '#ef4444'; return; } if (!currentSessionId) { statusEl.textContent = '会话已过期,请重新获取验证码'; statusEl.style.color = '#ef4444'; return; } // 禁用按钮 verifyBtn.disabled = true; verifyBtn.textContent = '登录中...'; statusEl.textContent = '正在验证...'; statusEl.style.color = '#64748b'; try { const formData = new FormData(); formData.append('session_id', currentSessionId); formData.append('code', code); const response = await fetch('/api/douyin/login-sms/verify', { method: 'POST', body: formData }); const result = await response.json(); console.log('验证响应:', result); if (result.status === 'success') { document.getElementById('smsStep2').style.display = 'none'; document.getElementById('smsLoginSuccess').style.display = 'block'; if (smsCountdownInterval) { clearInterval(smsCountdownInterval); smsCountdownInterval = null; } setTimeout(() => { closeSMSModal(); if (pendingFormData) { submitWithLoginCheck(pendingFormData); pendingFormData = null; } }, 2000); } else { verifyBtn.disabled = false; verifyBtn.textContent = '登录'; statusEl.textContent = result.message || '验证码错误'; statusEl.style.color = '#ef4444'; } } catch (error) { console.error('验证失败:', error); verifyBtn.disabled = false; verifyBtn.textContent = '登录'; statusEl.textContent = '网络错误,请重试'; statusEl.style.color = '#ef4444'; } } // 关闭短信登录弹窗 function closeSMSModal() { document.getElementById('smsLoginModal').style.display = 'none'; if (smsCountdownInterval) { clearInterval(smsCountdownInterval); smsCountdownInterval = null; } currentSessionId = null; } // 保留旧的函数作为兼容(防止引用错误) function showQRLogin() { showSMSLogin(); } function closeQRModal() { closeSMSModal(); } function refreshQR() { showSMSLogin(); }