baodan/baodanppt/public/js/app.js
2026-07-23 08:52:59 +08:00

63 lines
2.3 KiB
JavaScript

/* =========================================================================
Insurance Plan AI - 启动入口
========================================================================= */
import { goStep, buildStepsNav, toast } from './steps.js';
import { state } from './state.js';
import { getSession } from './api.js';
// 启动时挂载顶部步骤指示器
document.addEventListener('DOMContentLoaded', async () => {
if (location.protocol === 'file:') {
toast('已检测到本地文件模式,页面将自动连接 http://localhost:3000 的后端服务', 'info');
}
// 1) 步骤指示器
const navHost = document.getElementById('stepsNavHost');
if (navHost) navHost.innerHTML = buildStepsNav();
// 2) 默认进入 upload 屏
goStep('upload');
// 3) 如果有 sessionId 在 URL 上 (从分享链接回来), 自动恢复
const params = new URLSearchParams(location.search);
const sid = params.get('session');
if (sid) {
try {
const session = await getSession(sid);
state.sessionId = sid;
state.extractions = session.extractions || [];
state.files = (session.files || []).map((f) => ({
file: { name: f.name, size: 0 },
type: f.type || 'savings',
}));
if (session.status === 'parsed' && state.extractions.length > 0) {
const last = (session.chatHistory || []).slice(-1)[0];
state.initialChatMsg = last?.content || '';
toast('已恢复上次会话', 'success');
goStep('chat');
} else if (session.status === 'done' && session.hasPpt) {
state.downloadUrl = session.downloadUrl || '';
state.markdownUrl = session.markdownUrl || '';
state.previewUrls = session.previewUrls || [];
state.previewPdfUrl = session.previewPdfUrl || '';
state.slideCount = session.slideCount || 0;
state.resultFilename = (() => {
try {
const parsed = new URL(session.downloadUrl, location.origin);
return decodeURIComponent(parsed.pathname.split('/').pop() || 'plan.pptx');
} catch {
return 'plan.pptx';
}
})();
goStep('result');
} else if (session.status === 'parsing') {
goStep('parsing');
setTimeout(() => window.__triggerParse?.(), 300);
}
} catch (err) {
console.warn('恢复会话失败:', err);
}
}
});