47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
const btn = document.getElementById('btn');
|
|
const statusEl = document.getElementById('status');
|
|
const resultEl = document.getElementById('result');
|
|
const videoEl = document.getElementById('video');
|
|
const downloadEl = document.getElementById('download');
|
|
const scriptEl = document.getElementById('script');
|
|
|
|
btn.addEventListener('click', async () => {
|
|
const topic = document.getElementById('topic').value.trim();
|
|
const scenes = parseInt(document.getElementById('scenes').value, 10) || 5;
|
|
const rate = parseInt(document.getElementById('rate').value, 10) || 160;
|
|
|
|
if (!topic) {
|
|
statusEl.textContent = '请填写主题';
|
|
return;
|
|
}
|
|
|
|
btn.disabled = true;
|
|
resultEl.classList.add('hidden');
|
|
statusEl.textContent = '生成中,请稍候(可能需要 1-3 分钟)...';
|
|
|
|
try {
|
|
const res = await fetch('/api/generate', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ topic, scenes, rate }),
|
|
});
|
|
const data = await res.json();
|
|
if (!data.ok) throw new Error(data.error || '生成失败');
|
|
|
|
statusEl.textContent = '完成!';
|
|
videoEl.src = '/' + data.video;
|
|
downloadEl.href = '/' + data.video;
|
|
scriptEl.innerHTML = '';
|
|
data.script.forEach((s) => {
|
|
const li = document.createElement('li');
|
|
li.textContent = s.text;
|
|
scriptEl.appendChild(li);
|
|
});
|
|
resultEl.classList.remove('hidden');
|
|
} catch (e) {
|
|
statusEl.textContent = '错误:' + e.message;
|
|
} finally {
|
|
btn.disabled = false;
|
|
}
|
|
});
|