diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js index 4f5e45a..3d08ba6 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js @@ -250,10 +250,21 @@ function buildCreatePrompt(accountName, w, personaBlock, hasPersona, attachText) 中部=对话流(用户输入 vs AI 整理/追问),底部=输入框 + 提交创作 */ async function confirmAiScript(accountName, btn) { const accId = btn && btn.dataset.accId ? btn.dataset.accId : ''; - const w = { idea: '', pain: '', blow: '', form: '', dur: '', note: '' }; - const convo = []; // 对话流 { role: 'u' | 'ai', text } + /* 09-07 v26:草稿缓存(localStorage,按账号隔离)——关闭/误关后重开恢复已对话内容与已填需求 */ + const CACHE_KEY = 'aicreate_draft_' + accountName; + const readCache = () => { + try { + const raw = localStorage.getItem(CACHE_KEY); + return raw ? JSON.parse(raw) : null; + } catch (e) { return null; } + }; + const cache = readCache(); + const w = { idea: '', pain: '', blow: '', form: '', dur: '', note: '', ...(cache && cache.w ? cache.w : {}) }; + const convo = (cache && Array.isArray(cache.convo)) ? cache.convo.filter((c) => c && c.role && typeof c.text === 'string').map((c) => ({ role: c.role === 'ai' ? 'ai' : 'u', text: String(c.text), opts: Array.isArray(c.opts) ? c.opts.filter((o) => typeof o === 'string') : [] })) : []; // 对话流 { role: 'u' | 'ai', text, opts } let pHas = false, pContent = ''; - let attach = { name: '', text: '' }; // 已上传需求附件(解析后的纯文本,打磨与创作共用) + let attach = (cache && cache.attach && cache.attach.name) + ? { name: String(cache.attach.name), text: String(cache.attach.text || '').slice(0, 20000), meta: String(cache.attach.meta || '') } + : { name: '', text: '' }; // 已上传需求附件(解析后的纯文本,打磨与创作共用) let parsing = false; // 附件解析中(防重入) let busy = false; const loadPersona = async () => { @@ -269,7 +280,11 @@ async function confirmAiScript(accountName, btn) { const mask = document.createElement('div'); mask.className = 'modal-mask'; mask.innerHTML = `