101 lines
2.8 KiB
JavaScript
101 lines
2.8 KiB
JavaScript
// API调用工具
|
|
const API = {
|
|
async post(url, data) {
|
|
const resp = await fetch(url, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(data)
|
|
});
|
|
if (!resp.ok) {
|
|
const err = await resp.text();
|
|
throw new Error(err);
|
|
}
|
|
return resp.json();
|
|
},
|
|
async get(url) {
|
|
const resp = await fetch(url);
|
|
if (!resp.ok) {
|
|
const err = await resp.text();
|
|
throw new Error(err);
|
|
}
|
|
return resp.json();
|
|
}
|
|
};
|
|
|
|
// 状态显示
|
|
function getStatusBadge(status) {
|
|
const map = {
|
|
'CREATED': '<span class="badge badge-created">已创建</span>',
|
|
'QUEUED': '<span class="badge badge-queued">排队中</span>',
|
|
'RUNNING': '<span class="badge badge-running">执行中</span>',
|
|
'SUCCESS': '<span class="badge badge-success">成功</span>',
|
|
'FAILED': '<span class="badge badge-failed">失败</span>',
|
|
'CANCELED': '<span class="badge badge-canceled">已取消</span>'
|
|
};
|
|
return map[status] || `<span class="badge">${status}</span>`;
|
|
}
|
|
|
|
// 格式化时间
|
|
function formatTime(ts) {
|
|
if (!ts) return '-';
|
|
const d = new Date(ts);
|
|
return d.toLocaleString('zh-CN');
|
|
}
|
|
|
|
// 显示提示
|
|
function showAlert(msg, type = 'info') {
|
|
const alert = document.createElement('div');
|
|
alert.className = `alert alert-${type}`;
|
|
alert.textContent = msg;
|
|
const container = document.querySelector('.container');
|
|
container.insertBefore(alert, container.firstChild);
|
|
setTimeout(() => alert.remove(), 5000);
|
|
}
|
|
|
|
// 轮询任务状态
|
|
function pollTask(taskId, queryFn, onUpdate, interval = 3000) {
|
|
let timer;
|
|
const poll = async () => {
|
|
try {
|
|
const result = await queryFn(taskId);
|
|
onUpdate(result);
|
|
const status = result?.data?.status;
|
|
if (status === 'SUCCESS' || status === 'FAILED' || status === 'CANCELED') {
|
|
clearInterval(timer);
|
|
}
|
|
} catch (err) {
|
|
console.error('轮询失败:', err);
|
|
}
|
|
};
|
|
poll();
|
|
timer = setInterval(poll, interval);
|
|
return () => clearInterval(timer);
|
|
}
|
|
|
|
// 获取能力名称
|
|
function getCapabilityName(key) {
|
|
const map = {
|
|
'pippit_novel_agent': '短剧/漫剧',
|
|
'pippit_avatar_marketing_agent': '带货营销',
|
|
'pippit_story_marketing_agent': '剧情营销',
|
|
'pippit_video_part_agent': '短片创作'
|
|
};
|
|
return map[key] || key;
|
|
}
|
|
|
|
// 获取动作名称
|
|
function getActionName(key) {
|
|
const map = {
|
|
'script_analysis': '剧本解析',
|
|
'narration_design': '旁白改编',
|
|
'character_generate': '角色生成',
|
|
'scene_generate': '场景生成',
|
|
'storyboard_design': '分镜设计',
|
|
'shot_video_generate': '分镜短片',
|
|
'shot_video_generate_fast': '分镜短片(Fast)',
|
|
'shot_video_compose': '成片合成',
|
|
'generate_video': '生成视频'
|
|
};
|
|
return map[key] || key;
|
|
}
|