📺 VideoTV 管理后台 v3.0

输入密码登录内容管理后台

默认密码:videotv2026
🌐 全局网站设置
💡 全局信息为全站共享,修改后所有页面同步生效。
公司信息
导航栏CTA按钮
统计数据(首页显示)
🖼 首页Hero区域
💡 首页顶部的核心展示区域,影响用户第一印象。
徽章与主标题
副标题
按钮文字
关于我们页面Hero
🛒 场景管理
💡 场景指首页解决方案Tab下的5个卡片(电商直播、医疗会议等)。支持添加、编辑、删除、拖拽排序。
🎥 产品管理
💡 产品指"产品服务"下拉菜单中的4个卡片(直播服务、点播服务等)。
📄 页面管理
⚠️ 新建页面:填写表单 → 点击「生成HTML文件」→ 下载得到新HTML → 上传到Cloudflare Pages根目录即可访问。
🛠 部署操作
发布步骤
标准发布流程:
1. 修改内容 → 点「💾 保存」
2. 点「📥 下载 content.json」
3. 将 content.json 上传到 Cloudflare Pages 根目录,或拖拽整个文件夹重新部署
ℹ️ 关于页面
🔻 页脚信息
📞 联系信息
🖼 图片URL管理
💡 图片上传到 Cloudflare Pages 的 /images/ 目录后,在此填入完整URL即可全站生效。
主要图片
场景卡片图片
● 未保存

${p.heroTitle}

${p.heroSubtitle}

${featuresH?`

${p.featuresTitle}

${featuresH}
`:''} ${useCasesH?`

${p.usecaseTitle}

${useCasesH}
`:''} ${faqH?`

${p.faqTitle}

${faqH}
`:''}

${p.ctaTitle}

留下您的联系方式,专业顾问将在24小时内与您联系

${p.ctaText}
`; const blob = new Blob([html], {type:'text/html'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = p.filename; a.click(); URL.revokeObjectURL(a.href); showToast('📝 ' + p.filename + ' 已下载'); } function generateSinglePageHtml(pageId) { const p = contentData.pages[pageId]; if (!p) return; document.getElementById('page_title').value = p.title||''; document.getElementById('page_slug').value = pageId; document.getElementById('page_filename').value = p.filename||(pageId+'.html'); document.getElementById('page_metaDesc').value = p.metaDesc||''; document.getElementById('page_heroTitle').value = p.heroTitle||''; document.getElementById('page_heroSubtitle').value = p.heroSubtitle||''; document.getElementById('page_ctaTitle').value = p.ctaTitle||''; document.getElementById('page_ctaText').value = p.ctaText||''; document.getElementById('pageFeatures').innerHTML = (p.features||[]).map((f,i)=>featHtml(i,f)).join('')||featHtml(0); document.getElementById('pageUseCases').innerHTML = (p.useCases||[]).map((u,i)=>ucHtml(i,u)).join('')||ucHtml(0); document.getElementById('pageFaqs').innerHTML = (p.faq||[]).map((f,i)=>faqHtml(i,f)).join('')||faqHtml(0); generatePageHtml(); } function downloadAllGeneratedPages() { const pages = contentData.pages||{}; const ids = Object.keys(pages); if (!ids.length) { showToast('⚠️ 暂无页面'); return; } showToast('📦 正在生成 ' + ids.length + ' 个HTML文件...'); ids.forEach((id, idx) => { setTimeout(() => { document.getElementById('page_title').value = pages[id].title||''; document.getElementById('page_slug').value = id; document.getElementById('page_filename').value = pages[id].filename||(id+'.html'); document.getElementById('page_metaDesc').value = pages[id].metaDesc||''; document.getElementById('page_heroTitle').value = pages[id].heroTitle||''; document.getElementById('page_heroSubtitle').value = pages[id].heroSubtitle||''; document.getElementById('page_ctaTitle').value = pages[id].ctaTitle||''; document.getElementById('page_ctaText').value = pages[id].ctaText||''; document.getElementById('pageFeatures').innerHTML = (pages[id].features||[]).map((f,i)=>featHtml(i,f)).join('')||featHtml(0); document.getElementById('pageUseCases').innerHTML = (pages[id].useCases||[]).map((u,i)=>ucHtml(i,u)).join('')||ucHtml(0); document.getElementById('pageFaqs').innerHTML = (pages[id].faq||[]).map((f,i)=>faqHtml(i,f)).join('')||faqHtml(0); generatePageHtml(); }, idx * 600); }); } // ========== 图片 ========== function previewImage(fieldId) { const url = getVal(fieldId); const preview = document.getElementById('preview_' + fieldId); if (!url) { preview.style.display='none'; return; } preview.src = url; preview.style.display = 'block'; preview.onerror = () => { preview.style.display='none'; showToast('⚠️ 图片加载失败'); }; } function renderScenarioImages() { const el = document.getElementById('scenarioImages'); const scenarios = contentData.scenarios||[]; el.innerHTML = scenarios.length ? scenarios.map((s,i)=>`
`).join('') : '
暂无场景,请先在「场景管理」中添加。
'; } // ========== 工具 ========== function getContrast(hex) { if (!hex||!hex.startsWith('#')) return '#000'; const r=parseInt(hex.slice(1,3),16),g=parseInt(hex.slice(3,5),16),b=parseInt(hex.slice(5,7),16); return (r*299+g*587+b*114)/1000 > 128 ? '#000' : '#fff'; } function showToast(msg) { const t = document.getElementById('toast'); t.textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 3000); } // ========== Init ========== if (sessionStorage.getItem('videotv_logged_in') === '1') { document.body.classList.add('logged-in'); loadContent(); } window.addEventListener('beforeunload', e => { if (isDirty) { e.preventDefault(); e.returnValue = ''; } });