- 修复BCryptPasswordEncoder密码验证问题 - 实现密码设置提示弹窗功能(仅对无密码用户显示一次) - 优化修改密码逻辑和验证流程 - 更新Welcome页面背景样式 - 清理临时SQL文件和测试代码 - 移动数据库备份文件到database/backups目录 - 删除不必要的MD文档和临时文件
2 lines
29 KiB
JavaScript
2 lines
29 KiB
JavaScript
import{e as X,_ as Ge,f as Ne,u as ze,L as We,h as $e}from"./index-69868281.js";import{aA as Be,c as oe,r as k,h as je,m as He,X as qe,al as se,z as g,A as p,B as o,P as d,u as n,R as Y,J as Ke,D as ae,M as E,Q as ge,a4 as pe,K as J,aj as Ye,aE as me,aD as Je,E as Qe,ae as Xe,W as Ze}from"./vue-vendor-164775a6.js";import{_ as et}from"./avatar-default-20a1956c.js";import{i as tt}from"./imageToVideo-8fb20473.js";import{o as ot}from"./promptOptimizer-4e5a91ee.js";import{c as st}from"./userWorks-aba806c8.js";import{E as u,I as at}from"./element-plus-83a396df.js";import"./utils-edfcd65b.js";const ye=async A=>X.post("/storyboard-video/create",A),Q=async A=>X.get(`/storyboard-video/task/${A}`),he=async(A=0,e=10)=>X.get("/storyboard-video/tasks",{params:{page:A,size:e}}),rt=async A=>X.post(`/storyboard-video/task/${A}/start-video`),lt=Object.freeze(Object.defineProperty({__proto__:null,createStoryboardTask:ye,getStoryboardTask:Q,getUserStoryboardTasks:he,startVideoGeneration:rt},Symbol.toStringTag,{value:"Module"}));const it={class:"storyboard-video-create-page"},nt={class:"top-header"},dt={class:"header-left"},ut={class:"header-right"},ct={class:"points-display"},vt={class:"points-icon"},gt={class:"points-number"},pt={class:"user-avatar"},mt=["alt"],yt={class:"main-content"},ht={class:"left-panel"},_t={class:"left-panel-content"},bt={class:"creation-tabs"},ft={class:"tab active"},kt={class:"storyboard-steps"},Tt={key:0,class:"storyboard-section"},wt={key:0,class:"image-count"},St={key:1,class:"image-count",style:{color:"#ef4444"}},It={key:0,class:"images-preview-grid"},Ct=["src","alt"],Et=["onClick"],Ut={class:"image-index"},Pt={class:"text-input-section"},Rt=["placeholder"],Vt={class:"input-tips"},Lt={class:"tip-item"},At={class:"tip-item"},Dt={class:"optimize-btn"},Ot=["disabled"],xt={key:1,class:"storyboard-section"},Ft={class:"generated-image-preview"},Mt=["src","alt"],Gt={key:1,class:"placeholder-text"},Nt={class:"video-settings"},zt={class:"setting-item"},Wt={class:"setting-item"},$t={class:"setting-item"},Bt={class:"hd-setting"},jt={class:"cost-text"},Ht={class:"generate-section floating"},qt=["disabled"],Kt={key:0,class:"login-tip-floating"},Yt={class:"right-panel"},Jt={class:"preview-area"},Qt={key:0,class:"task-status"},Xt={class:"status-header"},Zt={class:"task-id"},eo={key:0,class:"task-description"},to={class:"video-preview-container"},oo={key:0,class:"generating-container"},so={class:"generating-placeholder"},ao={class:"generating-text"},ro={class:"progress-bar-large"},lo={key:1,class:"completed-container"},io={class:"task-info-header"},no={class:"task-checkbox"},uo={for:"inProgressTask"},co={key:0,class:"video-player-container"},vo={class:"video-player"},go=["src"],po={key:1,class:"image-display-container"},mo=["src","alt"],yo={class:"result-actions"},ho={key:0,class:"action-icons"},_o=["title"],bo={key:2,class:"failed-container"},fo={class:"failed-placeholder"},ko={class:"failed-text"},To={class:"failed-desc"},wo={key:3,class:"status-placeholder"},So={class:"status-text"},Io={key:1,class:"preview-content"},Co={key:0,class:"preview-video"},Eo=["src"],Uo={key:1,class:"preview-image"},Po=["src","alt"],Ro={key:0,class:"video-progress-overlay"},Vo={class:"loading-text"},Lo={key:0,class:"progress-text"},Ao={key:2,class:"preview-loading"},Do={class:"loading-text"},Oo={key:0,class:"progress-text"},xo={key:3,class:"preview-placeholder"},Fo={class:"placeholder-text"},Mo={key:2,class:"history-section"},Go={class:"history-list"},No={key:0,class:"history-status-checkbox"},zo={class:"history-item-header"},Wo={class:"history-type"},$o={class:"history-date"},Bo={class:"history-prompt"},jo={class:"history-preview"},Ho={key:0,class:"history-placeholder"},qo={class:"queue-text"},Ko={class:"queue-link"},Yo=["onClick"],Jo=["onClick"],Qo=["src","onClick"],Xo={key:0,class:"play-overlay"},Zo={key:2,class:"history-image-thumbnail"},es=["src","alt"],ts={key:3,class:"history-placeholder"},os={class:"no-result-text"},ss={class:"history-actions"},as=["onClick"],rs={__name:"StoryboardVideoCreate",setup(A){const{t:e}=Ne(),W=Be(),U=ze(),Z=oe(()=>U.isAuthenticated),T=k(""),D=k("16:9"),$=k("10"),M=k(!1),_=k(!1),h=k("generate"),b=k([]),m=k(""),R=k(""),w=k(null),H=k(!1),C=oe(()=>{var t;return b.value.length>0&&((t=b.value[0])!=null&&t.url)?b.value[0].url:""}),z=oe(()=>b.value.length>0),_e=k(""),I=k(null),G=k(!1),ee=k(!1),O=k(""),V=k(""),P=k(0),x=k([]),N=k({}),F=k({}),be=()=>{W.push("/")},q=()=>{W.push({path:"/login",query:{redirect:W.currentRoute.value.fullPath}})},fe=()=>{W.push("/text-to-video/create")},ke=()=>{W.push("/image-to-video/create")},Te=()=>{h.value="generate"},we=()=>{C.value||m.value?h.value="video":u.warning(e("video.storyboard.uploadOrGenerateFirst"))},Se=()=>h.value==="video"?m.value&&R.value?e("video.storyboard.startGenerateVideo"):(z.value,e("video.generate")):z.value?e("video.storyboard.generateVideoWithUpload"):T.value.trim()?e("video.storyboard.startGenerateStoryboard"):e("video.storyboard.startGenerate"),Ie=()=>{if(console.log("handleGenerateClick 被调用,当前步骤:",h.value),!U.isAuthenticated){u.warning(e("video.storyboard.loginBeforeSubmit")),q();return}if(h.value==="video"){re();return}if(z.value){m.value=C.value,h.value="video",setTimeout(()=>{re()},100);return}if(T.value.trim()){Re();return}u.warning(e("video.storyboard.uploadOrInputPrompt"))},Ce=()=>{if(b.value.length>=6){u.warning(e("video.storyboard.maxImages"));return}Ee()},Ee=()=>{const t=document.createElement("input");t.type="file",t.accept="image/*",t.multiple=!0,t.onchange=s=>{const l=Array.from(s.target.files||[]),a=b.value.length,y=6-a;if(l.length===0)return;if(l.length>y){u.warning(e("video.storyboard.maxImagesWarning",{current:a,remaining:y}));return}const r=100*1024*1024;if(l.filter(S=>S.size>r).length>0){u.error(e("video.storyboard.fileSizeLimit"));return}if(l.filter(S=>!S.type.startsWith("image/")).length>0){u.error(e("video.storyboard.invalidFileType"));return}const i=a===0;let v=0;l.forEach((S,L)=>{const j=new FileReader;j.onload=te=>{b.value.push({url:te.target.result,file:S,name:S.name}),v++,v===l.length&&(i&&b.value.length>0&&(m.value=b.value[0].url),u.success(e("video.storyboard.uploadSuccess",{count:l.length})))},j.readAsDataURL(S)})},t.click()},Ue=t=>{if(t>=0&&t<b.value.length){const s=b.value[t];b.value.splice(t,1),m.value===s.url&&(b.value.length>0?m.value=b.value[0].url:m.value=""),u.success(e("video.storyboard.imageRemoved"))}},Pe=async()=>{var t,s,l;if(!T.value.trim()){u.warning(e("video.storyboard.enterPrompt"));return}if(T.value.length>2e3){u.warning(e("video.storyboard.promptTooLong"));return}try{H.value=!0;const a=at.service({lock:!1,text:e("video.storyboard.optimizingPrompt"),background:"rgba(0, 0, 0, 0.3)"}),y=await ot(T.value.trim(),"storyboard");if(a.close(),y.data&&y.data.success){const r=y.data.data,c=r.optimizedPrompt;r.optimized&&c!==T.value.trim()?(T.value=c,u.success(e("video.storyboard.optimizeSuccess"))):u.warning(e("video.storyboard.alreadyOptimized"))}else u.error(((t=y.data)==null?void 0:t.message)||e("video.storyboard.optimizeFailed"))}catch(a){console.error("优化提示词失败:",a);let y=e("video.storyboard.optimizeFailed");if(a.response){const r=a.response.status;r===400?y=((s=a.response.data)==null?void 0:s.message)||e("video.storyboard.paramError"):r===408||a.code==="ECONNABORTED"?y=e("video.storyboard.timeout"):r>=500?y=e("video.storyboard.serverError"):y=((l=a.response.data)==null?void 0:l.message)||e("video.storyboard.optimizeFailed")}else a.request||a.code==="ERR_NETWORK"?y=e("video.storyboard.networkError"):y=a.message||e("video.storyboard.optimizeFailed");u.error(y)}finally{H.value=!1}},Re=async()=>{var t,s,l;if(console.log("startGenerate 被调用"),!U.isAuthenticated){u.warning(e("video.storyboard.loginBeforeSubmit")),q();return}if(!T.value.trim()){u.warning(e("video.storyboard.enterDescription"));return}G.value=!0;try{console.log("开始创建任务,参数:",{prompt:T.value,aspectRatio:D.value,hdMode:M.value,imageUrl:C.value||null}),_.value=!0,u.info(e("video.storyboard.startingGenerate"));const a=await ye({prompt:T.value,aspectRatio:D.value,hdMode:M.value,imageUrl:C.value||null});console.log("API响应:",a),a.data&&a.data.success?(u.success(e("video.storyboard.taskCreated")),R.value=a.data.data.taskId,console.log("Task created:",a.data.data),setTimeout(async()=>{try{await U.fetchCurrentUser(),console.log("用户积分已更新")}catch(y){console.error("更新用户积分失败:",y)}},0),B(a.data.data.taskId),setTimeout(()=>{G.value=!1},2e3)):(console.error("创建任务失败,响应:",a.data),u.error(((t=a.data)==null?void 0:t.message)||e("video.storyboard.createTaskFailed")),_.value=!1,G.value=!1,currentTask.value=null,taskStatus.value="",m.value="")}catch(a){console.error("生成分镜图失败,完整错误:",a),console.error("错误详情:",{message:a.message,response:a.response,stack:a.stack}),u.error(e("video.storyboard.generateFailed")+": "+(((l=(s=a.response)==null?void 0:s.data)==null?void 0:l.message)||a.message)),_.value=!1,G.value=!1,currentTask.value=null,taskStatus.value="",m.value=""}},B=async t=>{w.value&&(clearTimeout(w.value),w.value=null);const s=90;let l=0,a=2e4;const y=async()=>{if(l>=s){w.value&&(clearTimeout(w.value),w.value=null),_.value=!1,u.warning(e("video.storyboard.taskTimeout"));return}l++;try{const r=await Q(t);if(r.data.success&&r.data.data){const c=r.data.data,f=String(c.status||"").toUpperCase(),i=Number(c.progress)||0,v=c.resultUrl||"",S=i<50||v&&v.startsWith("data:image")&&i<100,L=S?2e4:12e4;if(L!==a&&(a=L,console.log(`轮询间隔已调整为: ${a/1e3}秒 (${S?"分镜图生成阶段":"视频生成阶段"})`)),console.log("轮询任务状态:",{status:f,progress:i,hasResultUrl:!!v,resultUrlLength:v?v.length:0,resultUrlPrefix:v?v.substring(0,50):"无",interval:a/1e3+"秒"}),v&&v.trim().length>0&&v.startsWith("data:image"))if(!m.value||m.value!==v){if(console.log("✓ 检测到分镜图已生成(通过resultUrl判断)!"),console.log(" - resultUrl长度:",v.length),console.log(" - resultUrl前缀:",v.substring(0,30)+"..."),console.log(" - 当前progress:",i),console.log(" - 当前status:",f),m.value=v,_.value=!1,i<100){w.value&&(clearTimeout(w.value),w.value=null),console.log("✓ 分镜图生成完成!停止轮询,等待用户点击生成视频"),console.log(" - 设置 generatedImageUrl,长度:",v.length),console.log(" - 设置 inProgress = false"),console.log(" - 切换到 video 步骤"),h.value="video",setTimeout(()=>{u.success(e("video.storyboard.storyboardCompleted")),console.log("✓ UI状态更新完成,generatedImageUrl:",m.value?"已设置("+m.value.length+"字符)":"未设置")},100);return}h.value==="generate"&&(h.value="video")}else console.log("分镜图已处理过,跳过");if(f==="COMPLETED"&&i>=100){w.value&&(clearTimeout(w.value),w.value=null),console.log("✓ 视频生成完成,视频URL:",v?"已获取":"未获取"),v&&(v.startsWith("data:image")?m.value=v:V.value=v),O.value="COMPLETED",P.value=100,_.value=!1,u.success(e("video.storyboard.videoCompleted")),h.value==="generate"&&(h.value="video");return}if(f==="FAILED"||f==="CANCELLED"){w.value&&(clearTimeout(w.value),w.value=null),_.value=!1,u.error(e("video.storyboard.taskFailed")+": "+(c.errorMessage||e("video.storyboard.unknownError")));return}f==="PROCESSING"&&i>50&&(P.value=i,O.value="PROCESSING",v&&v.startsWith("data:image")&&(!m.value||m.value!==v)&&(m.value=v,h.value==="generate"&&(h.value="video"))),f==="PROCESSING"&&i<50&&console.log("分镜图生成中,进度:",i+"%")}}catch(r){console.error("轮询任务状态失败:",r)}w.value=setTimeout(y,a)};w.value=setTimeout(y,a)},Ve=async(t,s)=>{try{let l;if(t.startsWith("data:image")){const a=await fetch(t);if(!a.ok)throw new Error(`HTTP错误: ${a.status}`);return l=await a.blob(),new File([l],s,{type:l.type})}else try{const a=await fetch(t);if(!a.ok)throw new Error(`HTTP错误: ${a.status}`);return l=await a.blob(),new File([l],s,{type:l.type||"image/jpeg"})}catch(a){throw console.error("直接获取图片失败,可能是CORS问题:",a),new Error("无法加载图片,请确保图片URL可以访问")}}catch(l){throw console.error("转换图片URL失败:",l),new Error("无法加载图片: "+(l.message||"未知错误"))}},re=async()=>{var l,a,y,r,c,f;if(console.log("startVideoGenerate 被调用"),!U.isAuthenticated){u.warning(e("video.storyboard.loginBeforeSubmit")),q();return}if(R.value&&m.value){try{_.value=!0,O.value="PROCESSING",P.value=50,u.info(e("video.storyboard.startingVideoGenerate")),console.log("调用开始生成视频API,任务ID:",R.value);const{startVideoGeneration:i}=await $e(()=>Promise.resolve().then(()=>lt),void 0),v=await i(R.value);console.log("开始生成视频API响应:",v),v.data&&v.data.success?(u.success(e("video.storyboard.videoTaskStarted")),console.log("视频生成任务已启动,任务ID:",R.value),h.value!=="video"&&(h.value="video"),B(R.value)):(console.error("启动视频生成失败,响应:",v.data),u.error(((l=v.data)==null?void 0:l.message)||e("video.storyboard.videoStartFailed")),_.value=!1)}catch(i){console.error("启动视频生成失败,完整错误:",i),u.error(e("video.storyboard.videoStartFailed")+": "+(((y=(a=i.response)==null?void 0:a.data)==null?void 0:y.message)||i.message)),_.value=!1}return}const t=C.value;if(!t){u.warning(e("video.storyboard.uploadOrGenerateFirst"));return}let s=T.value.trim();!s&&C.value&&(s=e("video.storyboard.defaultPrompt"));try{_.value=!0,u.info(e("video.storyboard.startingVideoGenerate")),console.log("转换图片URL:",t);let i;if(t.startsWith("data:image")){const S=t.split(",")[1],L=atob(S),j=new Array(L.length);for(let K=0;K<L.length;K++)j[K]=L.charCodeAt(K);const te=new Uint8Array(j),Me=new Blob([te],{type:"image/jpeg"});i=new File([Me],"storyboard-image.jpg",{type:"image/jpeg"})}else i=await Ve(t,"storyboard-image.jpg");console.log("调用图生视频API,参数:",{prompt:s,aspectRatio:D.value,hdMode:M.value,duration:$.value,firstFrame:i});const v=await tt.createTask({firstFrame:i,prompt:s,aspectRatio:D.value,duration:parseInt($.value),hdMode:M.value});if(console.log("图生视频API响应:",v),v.data&&v.data.success){const S=v.data.data.taskId;_e.value=S,O.value="PROCESSING",P.value=0,u.success(e("video.storyboard.videoTaskCreated")),console.log("视频任务创建成功,任务ID:",S),setTimeout(async()=>{try{await U.fetchCurrentUser(),console.log("用户积分已更新")}catch(L){console.error("更新用户积分失败:",L)}},0),Le(S)}else console.error("创建视频任务失败,响应:",v.data),u.error(((r=v.data)==null?void 0:r.message)||e("video.storyboard.createVideoTaskFailed")),_.value=!1}catch(i){console.error("生成视频失败,完整错误:",i),console.error("错误详情:",{message:i.message,response:i.response,stack:i.stack}),u.error(e("video.storyboard.generateVideoFailed")+": "+(((f=(c=i.response)==null?void 0:c.data)==null?void 0:f.message)||i.message)),_.value=!1}},Le=async t=>{I.value&&(clearTimeout(I.value),I.value=null);const s=30;let l=0;const a=12e4,y=async()=>{if(l>=s){I.value&&(clearTimeout(I.value),I.value=null),_.value=!1,O.value="TIMEOUT",u.warning(e("video.storyboard.videoTaskTimeout"));return}l++;try{const r=await Q(t);if(console.log("轮询视频任务状态:",r.data),r.data.success&&r.data.data){const c=r.data.data;if(O.value=c.status||"PROCESSING",P.value=c.progress||0,console.log("视频任务状态:",c.status,"进度:",c.progress,"视频URL:",c.resultUrl),c.status==="COMPLETED"&&c.resultUrl){I.value&&(clearTimeout(I.value),I.value=null),console.log("视频生成完成,视频URL:",c.resultUrl),c.resultUrl.startsWith("data:image")||(V.value=c.resultUrl),_.value=!1,P.value=100,u.success(e("video.storyboard.videoCompleted")),setTimeout(async()=>{try{await U.fetchCurrentUser(),console.log("用户积分已更新")}catch(f){console.error("更新用户积分失败:",f)}},0);return}else if(c.status==="FAILED"||c.status==="CANCELLED"){I.value&&(clearTimeout(I.value),I.value=null),_.value=!1,u.error(e("video.storyboard.videoGenerateFailed")+": "+(c.errorMessage||e("video.storyboard.unknownError")));return}}}catch(r){console.error("轮询视频任务状态失败:",r)}I.value=setTimeout(y,a)};I.value=setTimeout(y,a)},le=t=>t?(t.startsWith("/")||!t.startsWith("http"))&&!t.startsWith("/uploads/")&&!t.startsWith("/api/")?t.startsWith("/")?t:`/${t}`:t:"",ie=async()=>{if(!U.isAuthenticated){x.value=[];return}try{const t=await he(0,10);if(console.log("分镜视频历史记录API响应:",t),t.data&&t.data.success){const s=(t.data.data||[]).filter(l=>l.status==="COMPLETED").slice(0,10);console.log("获取到的任务列表:",s),x.value=s.map(l=>({...l,resultUrl:l.resultUrl&&!l.resultUrl.startsWith("data:image")?le(l.resultUrl):l.resultUrl})),console.log("历史记录加载成功:",x.value.length,"条")}else console.warn("分镜视频历史记录API返回失败:",t.data),x.value=[]}catch(t){console.error("加载历史记录失败:",t),console.error("错误详情:",t.response||t.message),x.value=[]}},ne=t=>{t.prompt&&(T.value=t.prompt),t.aspectRatio&&(D.value=t.aspectRatio),t.hdMode!==void 0&&(M.value=t.hdMode),t.resultUrl&&t.resultUrl.startsWith("data:image")&&(m.value=t.resultUrl,b.value=[{url:t.resultUrl,file:null,name:"分镜图"}]),window.scrollTo({top:0,behavior:"smooth"}),u.success(e("video.storyboard.paramsFilled"))},Ae=async t=>{try{u.info(e("video.storyboard.cancelFeaturePending"))}catch(s){console.error("取消任务失败:",s)}},De=t=>{const s=t.target;s.currentTime=1,s.addEventListener("play",()=>{const l=Object.keys(F.value).find(a=>F.value[a]===s);l&&(N.value[l]=!0)}),s.addEventListener("pause",()=>{const l=Object.keys(F.value).find(a=>F.value[a]===s);l&&(N.value[l]=!1)}),s.addEventListener("ended",()=>{const l=Object.keys(F.value).find(a=>F.value[a]===s);l&&(N.value[l]=!1,s.currentTime=1)})},Oe=t=>{console.error("历史记录视频加载失败:",t.target.src)},xe=(t,s)=>{s&&(F.value[t]=s)},de=t=>{const s=F.value[t.taskId];if(s)if(N.value[t.taskId])s.pause(),N.value[t.taskId]=!1;else{try{s.muted=!1,s.volume=1,s.play()}catch{s.play()}N.value[t.taskId]=!0}},ue=t=>{if(!t)return"";const s=new Date(t),l=s.getFullYear(),a=String(s.getMonth()+1).padStart(2,"0"),y=String(s.getDate()).padStart(2,"0"),r=String(s.getHours()).padStart(2,"0"),c=String(s.getMinutes()).padStart(2,"0");return`${l}年${a}月${y}日 ${r}:${c}`},ce=t=>({PENDING:e("video.storyboard.statusPending"),PROCESSING:e("video.storyboard.statusProcessing"),COMPLETED:e("video.completed"),FAILED:e("video.failed"),CANCELLED:e("video.storyboard.statusCancelled")})[t]||e("video.storyboard.statusUnknown"),Fe=()=>{if(V.value){const t=document.createElement("a");t.href=V.value,t.download=`storyboard_video_${R.value}.mp4`,document.body.appendChild(t),t.click(),document.body.removeChild(t),u.success(e("video.storyboard.downloadStarted"))}else u.error(e("video.storyboard.videoUrlNotAvailable"))};je(()=>U.isAuthenticated,t=>{t?(ie(),setTimeout(()=>{G.value||ve()},500)):(x.value=[],ee.value=!1)});const ve=async()=>{if(U.isAuthenticated){if(G.value){console.log("[Task Restore] 跳过恢复:正在创建新任务");return}if(ee.value&¤tTask.value){console.log("[Task Restore] 跳过恢复:已有任务在进行中");return}try{const t=await st();if(t.data&&t.data.success&&t.data.data){const l=t.data.data.filter(a=>a.workType==="STORYBOARD_VIDEO");if(l.length>0){const a=l[0],y=new Date(a.createdAt),c=(new Date-y)/(1e3*60*60);if(c>1){console.log(`[Task Restore] 跳过恢复:任务创建时间超过1小时 (${c.toFixed(1)}小时前)`);return}console.log(`[Task Restore] 恢复最近的任务 (${Math.floor(c*60)}分钟前创建)`),console.log("恢复分镜视频任务:",a);try{const f=await Q(a.taskId);if(f.data&&f.data.success&&f.data.data){const i=f.data.data;console.log("任务详情:",i),currentTask.value={taskId:i.taskId,prompt:i.prompt,aspectRatio:i.aspectRatio,duration:i.duration,resultUrl:i.resultUrl,createdAt:i.createdAt,progress:i.progress||0},R.value=i.taskId,i.prompt&&(T.value=i.prompt),i.aspectRatio&&(D.value=i.aspectRatio),i.duration&&($.value=i.duration||"10"),ee.value=!0;const v=i.progress||0,S=i.resultUrl||"";S&&S.startsWith("data:image")?(console.log("分镜图已生成,恢复到视频生成步骤"),m.value=S,h.value="video",v>=100?(_.value=!1,taskStatus.value="COMPLETED",u.success(e("video.storyboard.taskCompleted"))):(_.value=!0,taskStatus.value=i.status||"PROCESSING",u.info(e("video.storyboard.resumingVideoTask")),B(i.taskId))):(console.log("分镜图生成中,恢复到分镜图生成步骤"),h.value="generate",_.value=!0,taskStatus.value=i.status||"PROCESSING",u.info(e("video.storyboard.resumingStoryboardTask")),B(i.taskId))}else console.error("获取任务详情失败")}catch(f){console.error("获取任务详情失败:",f),R.value=a.taskId,T.value=a.prompt||"",_.value=!0,taskStatus.value=a.status||"PROCESSING",u.info(e("video.storyboard.resumingTask")),B(a.taskId)}}}}catch(t){console.error("恢复任务失败:",t)}}};return He(()=>{ie(),ve()}),qe(()=>{w.value&&(clearTimeout(w.value),w.value=null),I.value&&(clearTimeout(I.value),I.value=null)}),(t,s)=>{const l=se("Star"),a=se("el-icon"),y=se("el-switch");return g(),p("div",it,[o("header",nt,[o("div",dt,[o("button",{class:"back-btn",onClick:be}," ← "+d(n(e)("common.home")),1)]),o("div",ut,[o("div",ct,[o("div",vt,[Y(a,null,{default:Ke(()=>[Y(l)]),_:1})]),o("span",gt,d(n(U).availablePoints),1)]),Y(We),o("div",pt,[o("img",{src:et,alt:n(e)("video.storyboard.userAvatar")},null,8,mt)])])]),o("div",yt,[o("div",ht,[o("div",_t,[o("div",bt,[o("div",{class:"tab",onClick:fe},d(n(e)("home.textToVideo")),1),o("div",{class:"tab",onClick:ke},d(n(e)("home.imageToVideo")),1),o("div",ft,d(n(e)("home.storyboardVideo")),1)]),o("div",kt,[o("div",{class:ae(["step",{active:h.value==="generate"}]),onClick:Te},d(n(e)("video.storyboard.generateStoryboard")),3),o("div",{class:ae(["step",{active:h.value==="video",disabled:!m.value&&!z.value}]),onClick:we},d(n(e)("video.storyboard.generateVideo")),3)]),h.value==="generate"?(g(),p("div",Tt,[o("div",{class:ae(["image-upload-btn",{disabled:b.value.length>=6}]),onClick:Ce},[o("span",null,"+ "+d(n(e)("video.storyboard.uploadStoryboard")),1),b.value.length>0?(g(),p("span",wt,d(n(e)("video.storyboard.uploadedCount",{count:b.value.length})),1)):E("",!0),b.value.length>=6?(g(),p("span",St,d(n(e)("video.storyboard.uploadLimit")),1)):E("",!0)],2),b.value.length>0?(g(),p("div",It,[(g(!0),p(ge,null,pe(b.value,(r,c)=>(g(),p("div",{class:"image-preview-item",key:c},[o("img",{src:r.url,alt:n(e)("video.storyboard.uploadedImage",{index:c+1})},null,8,Ct),o("button",{class:"remove-btn",onClick:f=>Ue(c)},"×",8,Et),o("div",Ut,d(c+1),1)]))),128))])):E("",!0),o("div",Pt,[J(o("textarea",{"onUpdate:modelValue":s[0]||(s[0]=r=>T.value=r),placeholder:n(e)("video.storyboard.promptPlaceholder"),class:"text-input",rows:"6"},null,8,Rt),[[Ye,T.value]]),o("div",Vt,[o("div",Lt,d(n(e)("video.storyboard.tip1")),1),o("div",At,d(n(e)("video.storyboard.tip2")),1)]),o("div",Dt,[o("button",{class:"optimize-button",onClick:Pe,disabled:!T.value.trim()||H.value}," ✨ "+d(H.value?n(e)("video.storyboard.optimizing"):n(e)("video.optimizePrompt")),9,Ot)])])])):E("",!0),h.value==="video"?(g(),p("div",xt,[o("div",Ft,[m.value||C.value?(g(),p("img",{key:0,src:m.value||C.value,alt:n(e)("video.storyboard.storyboardImage")},null,8,Mt)):(g(),p("div",Gt,d(n(e)("video.storyboard.noStoryboard")),1))])])):E("",!0),o("div",Nt,[o("div",zt,[o("label",null,d(n(e)("video.aspectRatio")),1),J(o("select",{"onUpdate:modelValue":s[1]||(s[1]=r=>D.value=r),class:"setting-select"},[...s[8]||(s[8]=[Je('<option value="16:9" data-v-5551331a>16:9</option><option value="4:3" data-v-5551331a>4:3</option><option value="1:1" data-v-5551331a>1:1</option><option value="3:4" data-v-5551331a>3:4</option><option value="9:16" data-v-5551331a>9:16</option>',5)])],512),[[me,D.value]])]),o("div",Wt,[o("label",null,d(n(e)("video.duration")),1),J(o("select",{"onUpdate:modelValue":s[2]||(s[2]=r=>$.value=r),class:"setting-select"},[...s[9]||(s[9]=[o("option",{value:"10"},"10s",-1),o("option",{value:"15"},"15s",-1),o("option",{value:"25"},"25s",-1)])],512),[[me,$.value]])]),o("div",$t,[o("label",null,d(n(e)("video.storyboard.hdMode")),1),o("div",Bt,[Y(y,{modelValue:M.value,"onUpdate:modelValue":s[3]||(s[3]=r=>M.value=r)},null,8,["modelValue"]),o("span",jt,d(n(e)("video.storyboard.hdCost")),1)])])])])]),o("div",Ht,[o("button",{class:"generate-btn",onClick:Ie,disabled:!Z.value||_.value||G.value||h.value==="generate"&&!z.value&&!T.value.trim()||h.value==="video"&&!m.value&&!z.value},d(Z.value?Se():n(e)("video.storyboard.pleaseLogin")),9,qt),Z.value?E("",!0):(g(),p("div",Kt,[o("p",null,d(n(e)("video.storyboard.loginRequired")),1),o("button",{class:"login-link-btn",onClick:q},d(n(e)("video.storyboard.loginNow")),1)]))]),o("div",Yt,[o("div",Jt,[t.currentTask?(g(),p("div",Qt,[o("div",Xt,[o("h3",null,d(ce(t.taskStatus)),1),o("div",Zt,d(n(e)("home.storyboardVideo"))+" "+d(ue(t.currentTask.createdAt)),1)]),T.value?(g(),p("div",eo,d(T.value),1)):E("",!0),o("div",to,[_.value?(g(),p("div",oo,[o("div",so,[o("div",ao,d(h.value==="generate"?n(e)("video.storyboard.generatingStoryboardText"):n(e)("video.storyboard.generatingVideoText")),1),o("div",ro,[o("div",{class:"progress-fill-large",style:Qe({width:(h.value==="video"?P.value:50)+"%"})},null,4)])])])):t.taskStatus==="COMPLETED"?(g(),p("div",lo,[o("div",io,[o("div",no,[J(o("input",{type:"checkbox",id:"inProgressTask","onUpdate:modelValue":s[4]||(s[4]=r=>_.value=r),disabled:""},null,512),[[Xe,_.value]]),o("label",uo,d(n(e)("video.storyboard.inProgress")),1)])]),V.value?(g(),p("div",co,[o("div",vo,[o("video",{src:V.value,controls:"",class:"result-video",preload:"metadata"},null,8,go)])])):m.value||C.value?(g(),p("div",po,[o("img",{src:m.value||C.value,alt:n(e)("video.storyboard.storyboardImage"),class:"result-image"},null,8,mo)])):E("",!0),o("div",yo,[o("button",{class:"action-btn primary",onClick:s[5]||(s[5]=r=>ne(t.currentTask))},d(n(e)("profile.createSimilar")),1),V.value?(g(),p("div",ho,[o("button",{class:"icon-btn",onClick:Fe,title:n(e)("video.imageToVideo.downloadVideo")},[...s[10]||(s[10]=[o("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},[o("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})],-1)])],8,_o)])):E("",!0)])])):t.taskStatus==="FAILED"?(g(),p("div",bo,[o("div",fo,[s[11]||(s[11]=o("div",{class:"failed-icon"},"❌",-1)),o("div",ko,d(n(e)("video.storyboard.taskFailed")),1),o("div",To,d(n(e)("video.storyboard.checkInputOrRetry")),1)])])):(g(),p("div",wo,[o("div",So,d(ce(t.taskStatus)),1)]))])])):(g(),p("div",Io,[h.value==="video"&&V.value&&O.value==="COMPLETED"?(g(),p("div",Co,[o("video",{src:V.value,controls:"",preload:"metadata",style:{"max-width":"100%","max-height":"100%",width:"auto",height:"auto","object-fit":"contain"}},null,8,Eo)])):C.value||m.value?(g(),p("div",Uo,[o("img",{src:C.value||m.value,alt:n(e)("video.storyboard.storyboardImage"),onLoad:s[6]||(s[6]=r=>console.log("图片加载成功:",C.value||m.value?"URL长度="+(C.value||m.value).length:"无URL")),onError:s[7]||(s[7]=r=>console.error("图片加载失败:",C.value||m.value))},null,40,Po),h.value==="video"&&O.value==="PROCESSING"?(g(),p("div",Ro,[s[12]||(s[12]=o("div",{class:"loading-spinner"},null,-1)),o("div",Vo,d(n(e)("video.storyboard.generatingVideo")),1),P.value>0?(g(),p("div",Lo,d(n(e)("video.storyboard.progress",{progress:P.value})),1)):E("",!0)])):E("",!0)])):_.value&&!C.value&&!m.value?(g(),p("div",Ao,[s[13]||(s[13]=o("div",{class:"loading-spinner"},null,-1)),o("div",Do,d(h.value==="generate"?n(e)("video.storyboard.generatingStoryboardText"):n(e)("video.storyboard.generatingVideoText")),1),h.value==="video"&&P.value>0?(g(),p("div",Oo,d(n(e)("video.storyboard.progress",{progress:P.value})),1)):E("",!0)])):(g(),p("div",xo,[o("div",Fo,d(n(e)("video.storyboard.startCreating")),1)]))])),x.value.length>0?(g(),p("div",Mo,[o("div",Go,[(g(!0),p(ge,null,pe(x.value,r=>(g(),p("div",{key:r.taskId,class:"history-item"},[r.status==="PENDING"||r.status==="PROCESSING"?(g(),p("div",No,[s[14]||(s[14]=o("input",{type:"checkbox",checked:!0,disabled:""},null,-1)),o("label",null,d(n(e)("video.storyboard.inProgress")),1)])):E("",!0),o("div",zo,[o("span",Wo,d(n(e)("home.storyboardVideo")),1),o("span",$o,d(ue(r.createdAt)),1)]),o("div",Bo,d(r.prompt||n(e)("video.storyboard.noDescription")),1),o("div",jo,[r.status==="PENDING"||r.status==="PROCESSING"?(g(),p("div",Ho,[o("div",qo,d(n(e)("video.storyboard.queuing")),1),o("div",Ko,d(n(e)("video.storyboard.subscribeToSpeed")),1),o("button",{class:"cancel-btn",onClick:c=>Ae(r.taskId)},d(n(e)("common.cancel")),9,Yo)])):r.status==="COMPLETED"&&r.resultUrl&&!r.resultUrl.startsWith("data:image")?(g(),p("div",{key:1,class:"history-video-thumbnail",onClick:c=>de(r)},[o("video",{ref_for:!0,ref:c=>xe(r.taskId,c),src:le(r.resultUrl),muted:"",preload:"metadata",onLoadedmetadata:De,onError:Oe,onClick:Ze(c=>de(r),["stop"])},null,40,Qo),N.value[r.taskId]?E("",!0):(g(),p("div",Xo,[...s[15]||(s[15]=[o("div",{class:"play-icon"},"▶",-1)])]))],8,Jo)):r.resultUrl&&r.resultUrl.startsWith("data:image")?(g(),p("div",Zo,[o("img",{src:r.resultUrl,alt:n(e)("video.storyboard.storyboardImage")},null,8,es)])):(g(),p("div",ts,[o("div",os,d(n(e)("video.storyboard.noResult")),1)]))]),o("div",ss,[o("button",{class:"similar-btn",onClick:c=>ne(r)},d(n(e)("profile.createSimilar")),9,as)])]))),128))])])):E("",!0)])])])])}}},ps=Ge(rs,[["__scopeId","data-v-5551331a"]]);export{ps as default};
|