- 修复BCryptPasswordEncoder密码验证问题 - 实现密码设置提示弹窗功能(仅对无密码用户显示一次) - 优化修改密码逻辑和验证流程 - 更新Welcome页面背景样式 - 清理临时SQL文件和测试代码 - 移动数据库备份文件到database/backups目录 - 删除不必要的MD文档和临时文件
2 lines
29 KiB
JavaScript
2 lines
29 KiB
JavaScript
import{e as X,_ as Me,f as Ne,u as ze,L as We,h as $e}from"./index-f9e4b253.js";import{aA as Be,c as oe,r as f,h as je,m as He,X as qe,al as se,z as g,A as p,B as o,P as n,u as i,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-60f05266.js";import{o as ot}from"./promptOptimizer-a867a273.js";import{c as st}from"./userWorks-9d67d6ac.js";import{E as d,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"},Ot={class:"optimize-btn"},Dt=["disabled"],xt={key:1,class:"storyboard-section"},Ft={class:"generated-image-preview"},Gt=["src","alt"],Mt={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"},Oo={class:"loading-text"},Do={key:0,class:"progress-text"},xo={key:3,class:"preview-placeholder"},Fo={class:"placeholder-text"},Go={key:2,class:"history-section"},Mo={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),k=f(""),O=f("16:9"),$=f("10"),G=f(!1),_=f(!1),h=f("generate"),b=f([]),m=f(""),R=f(""),T=f(null),H=f(!1),I=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=f(""),S=f(null),M=f(!1),ee=f(!1),D=f(""),V=f(""),P=f(0),x=f([]),N=f({}),F=f({}),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=()=>{I.value||m.value?h.value="video":d.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"):k.value.trim()?e("video.storyboard.startGenerateStoryboard"):e("video.storyboard.startGenerate"),Ie=()=>{if(console.log("handleGenerateClick 被调用,当前步骤:",h.value),!U.isAuthenticated){d.warning(e("video.storyboard.loginBeforeSubmit")),q();return}if(h.value==="video"){re();return}if(z.value){m.value=I.value,h.value="video",setTimeout(()=>{re()},100);return}if(k.value.trim()){Re();return}d.warning(e("video.storyboard.uploadOrInputPrompt"))},Ce=()=>{if(b.value.length>=6){d.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||[]),r=b.value.length,v=6-r;if(l.length===0)return;if(l.length>v){d.warning(e("video.storyboard.maxImagesWarning",{current:r,remaining:v}));return}const a=100*1024*1024;if(l.filter(C=>C.size>a).length>0){d.error(e("video.storyboard.fileSizeLimit"));return}if(l.filter(C=>!C.type.startsWith("image/")).length>0){d.error(e("video.storyboard.invalidFileType"));return}const y=r===0;let c=0;l.forEach((C,L)=>{const j=new FileReader;j.onload=te=>{b.value.push({url:te.target.result,file:C,name:C.name}),c++,c===l.length&&(y&&b.value.length>0&&(m.value=b.value[0].url),d.success(e("video.storyboard.uploadSuccess",{count:l.length})))},j.readAsDataURL(C)})},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=""),d.success(e("video.storyboard.imageRemoved"))}},Pe=async()=>{var t,s,l;if(!k.value.trim()){d.warning(e("video.storyboard.enterPrompt"));return}if(k.value.length>2e3){d.warning(e("video.storyboard.promptTooLong"));return}try{H.value=!0;const r=at.service({lock:!1,text:e("video.storyboard.optimizingPrompt"),background:"rgba(0, 0, 0, 0.3)"}),v=await ot(k.value.trim(),"storyboard");if(r.close(),v.data&&v.data.success){const a=v.data.data,u=a.optimizedPrompt;a.optimized&&u!==k.value.trim()?(k.value=u,d.success(e("video.storyboard.optimizeSuccess"))):d.warning(e("video.storyboard.alreadyOptimized"))}else d.error(((t=v.data)==null?void 0:t.message)||e("video.storyboard.optimizeFailed"))}catch(r){console.error("优化提示词失败:",r);let v=e("video.storyboard.optimizeFailed");if(r.response){const a=r.response.status;a===400?v=((s=r.response.data)==null?void 0:s.message)||e("video.storyboard.paramError"):a===408||r.code==="ECONNABORTED"?v=e("video.storyboard.timeout"):a>=500?v=e("video.storyboard.serverError"):v=((l=r.response.data)==null?void 0:l.message)||e("video.storyboard.optimizeFailed")}else r.request||r.code==="ERR_NETWORK"?v=e("video.storyboard.networkError"):v=r.message||e("video.storyboard.optimizeFailed");d.error(v)}finally{H.value=!1}},Re=async()=>{var t,s,l;if(console.log("startGenerate 被调用"),!U.isAuthenticated){d.warning(e("video.storyboard.loginBeforeSubmit")),q();return}if(!k.value.trim()){d.warning(e("video.storyboard.enterDescription"));return}M.value=!0;try{console.log("开始创建任务,参数:",{prompt:k.value,aspectRatio:O.value,hdMode:G.value,imageUrl:I.value||null}),_.value=!0,d.info(e("video.storyboard.startingGenerate"));const r=await ye({prompt:k.value,aspectRatio:O.value,hdMode:G.value,imageUrl:I.value||null});console.log("API响应:",r),r.data&&r.data.success?(d.success(e("video.storyboard.taskCreated")),R.value=r.data.data.taskId,console.log("Task created:",r.data.data),setTimeout(async()=>{try{await U.fetchCurrentUser(),console.log("用户积分已更新")}catch(v){console.error("更新用户积分失败:",v)}},0),B(r.data.data.taskId),setTimeout(()=>{M.value=!1},2e3)):(console.error("创建任务失败,响应:",r.data),d.error(((t=r.data)==null?void 0:t.message)||e("video.storyboard.createTaskFailed")),_.value=!1,M.value=!1,currentTask.value=null,taskStatus.value="",m.value="")}catch(r){console.error("生成分镜图失败,完整错误:",r),console.error("错误详情:",{message:r.message,response:r.response,stack:r.stack}),d.error(e("video.storyboard.generateFailed")+": "+(((l=(s=r.response)==null?void 0:s.data)==null?void 0:l.message)||r.message)),_.value=!1,M.value=!1,currentTask.value=null,taskStatus.value="",m.value=""}},B=async t=>{T.value&&(clearTimeout(T.value),T.value=null);const s=90;let l=0,r=2e4;const v=async()=>{if(l>=s){T.value&&(clearTimeout(T.value),T.value=null),_.value=!1,d.warning(e("video.storyboard.taskTimeout"));return}l++;try{const a=await Q(t);if(a.data.success&&a.data.data){const u=a.data.data,w=String(u.status||"").toUpperCase(),y=Number(u.progress)||0,c=u.resultUrl||"",C=y<50||c&&c.startsWith("data:image")&&y<100,L=C?2e4:12e4;if(L!==r&&(r=L,console.log(`轮询间隔已调整为: ${r/1e3}秒 (${C?"分镜图生成阶段":"视频生成阶段"})`)),console.log("轮询任务状态:",{status:w,progress:y,hasResultUrl:!!c,resultUrlLength:c?c.length:0,resultUrlPrefix:c?c.substring(0,50):"无",interval:r/1e3+"秒"}),c&&c.trim().length>0&&c.startsWith("data:image"))if(!m.value||m.value!==c){if(console.log("✓ 检测到分镜图已生成(通过resultUrl判断)!"),console.log(" - resultUrl长度:",c.length),console.log(" - resultUrl前缀:",c.substring(0,30)+"..."),console.log(" - 当前progress:",y),console.log(" - 当前status:",w),m.value=c,_.value=!1,y<100){T.value&&(clearTimeout(T.value),T.value=null),console.log("✓ 分镜图生成完成!停止轮询,等待用户点击生成视频"),console.log(" - 设置 generatedImageUrl,长度:",c.length),console.log(" - 设置 inProgress = false"),console.log(" - 切换到 video 步骤"),h.value="video",setTimeout(()=>{d.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(w==="COMPLETED"&&y>=100){T.value&&(clearTimeout(T.value),T.value=null),console.log("✓ 视频生成完成,视频URL:",c?"已获取":"未获取"),c&&(c.startsWith("data:image")?m.value=c:V.value=c),D.value="COMPLETED",P.value=100,_.value=!1,d.success(e("video.storyboard.videoCompleted")),h.value==="generate"&&(h.value="video");return}if(w==="FAILED"||w==="CANCELLED"){T.value&&(clearTimeout(T.value),T.value=null),_.value=!1,d.error(e("video.storyboard.taskFailed")+": "+(u.errorMessage||e("video.storyboard.unknownError")));return}w==="PROCESSING"&&y>50&&(P.value=y,D.value="PROCESSING",c&&c.startsWith("data:image")&&(!m.value||m.value!==c)&&(m.value=c,h.value==="generate"&&(h.value="video"))),w==="PROCESSING"&&y<50&&console.log("分镜图生成中,进度:",y+"%")}}catch(a){console.error("轮询任务状态失败:",a)}T.value=setTimeout(v,r)};T.value=setTimeout(v,r)},Ve=async(t,s)=>{try{let l;if(t.startsWith("data:image")){const r=await fetch(t);if(!r.ok)throw new Error(`HTTP错误: ${r.status}`);return l=await r.blob(),new File([l],s,{type:l.type})}else try{const r=await fetch(t);if(!r.ok)throw new Error(`HTTP错误: ${r.status}`);return l=await r.blob(),new File([l],s,{type:l.type||"image/jpeg"})}catch(r){throw console.error("直接获取图片失败,可能是CORS问题:",r),new Error("无法加载图片,请确保图片URL可以访问")}}catch(l){throw console.error("转换图片URL失败:",l),new Error("无法加载图片: "+(l.message||"未知错误"))}},re=async()=>{var l,r,v,a,u,w;if(console.log("startVideoGenerate 被调用"),!U.isAuthenticated){d.warning(e("video.storyboard.loginBeforeSubmit")),q();return}if(R.value&&m.value){try{_.value=!0,D.value="PROCESSING",P.value=50,d.info(e("video.storyboard.startingVideoGenerate")),console.log("调用开始生成视频API,任务ID:",R.value);const{startVideoGeneration:y}=await $e(()=>Promise.resolve().then(()=>lt),void 0),c=await y(R.value);console.log("开始生成视频API响应:",c),c.data&&c.data.success?(d.success(e("video.storyboard.videoTaskStarted")),console.log("视频生成任务已启动,任务ID:",R.value),h.value!=="video"&&(h.value="video"),B(R.value)):(console.error("启动视频生成失败,响应:",c.data),d.error(((l=c.data)==null?void 0:l.message)||e("video.storyboard.videoStartFailed")),_.value=!1)}catch(y){console.error("启动视频生成失败,完整错误:",y),d.error(e("video.storyboard.videoStartFailed")+": "+(((v=(r=y.response)==null?void 0:r.data)==null?void 0:v.message)||y.message)),_.value=!1}return}const t=I.value;if(!t){d.warning(e("video.storyboard.uploadOrGenerateFirst"));return}let s=k.value.trim();!s&&I.value&&(s=e("video.storyboard.defaultPrompt"));try{_.value=!0,d.info(e("video.storyboard.startingVideoGenerate")),console.log("转换图片URL:",t);let y;if(t.startsWith("data:image")){const C=t.split(",")[1],L=atob(C),j=new Array(L.length);for(let K=0;K<L.length;K++)j[K]=L.charCodeAt(K);const te=new Uint8Array(j),Ge=new Blob([te],{type:"image/jpeg"});y=new File([Ge],"storyboard-image.jpg",{type:"image/jpeg"})}else y=await Ve(t,"storyboard-image.jpg");console.log("调用图生视频API,参数:",{prompt:s,aspectRatio:O.value,hdMode:G.value,duration:$.value,firstFrame:y});const c=await tt.createTask({firstFrame:y,prompt:s,aspectRatio:O.value,duration:parseInt($.value),hdMode:G.value});if(console.log("图生视频API响应:",c),c.data&&c.data.success){const C=c.data.data.taskId;_e.value=C,D.value="PROCESSING",P.value=0,d.success(e("video.storyboard.videoTaskCreated")),console.log("视频任务创建成功,任务ID:",C),setTimeout(async()=>{try{await U.fetchCurrentUser(),console.log("用户积分已更新")}catch(L){console.error("更新用户积分失败:",L)}},0),Le(C)}else console.error("创建视频任务失败,响应:",c.data),d.error(((a=c.data)==null?void 0:a.message)||e("video.storyboard.createVideoTaskFailed")),_.value=!1}catch(y){console.error("生成视频失败,完整错误:",y),console.error("错误详情:",{message:y.message,response:y.response,stack:y.stack}),d.error(e("video.storyboard.generateVideoFailed")+": "+(((w=(u=y.response)==null?void 0:u.data)==null?void 0:w.message)||y.message)),_.value=!1}},Le=async t=>{S.value&&(clearTimeout(S.value),S.value=null);const s=30;let l=0;const r=12e4,v=async()=>{if(l>=s){S.value&&(clearTimeout(S.value),S.value=null),_.value=!1,D.value="TIMEOUT",d.warning(e("video.storyboard.videoTaskTimeout"));return}l++;try{const a=await Q(t);if(console.log("轮询视频任务状态:",a.data),a.data.success&&a.data.data){const u=a.data.data;if(D.value=u.status||"PROCESSING",P.value=u.progress||0,console.log("视频任务状态:",u.status,"进度:",u.progress,"视频URL:",u.resultUrl),u.status==="COMPLETED"&&u.resultUrl){S.value&&(clearTimeout(S.value),S.value=null),console.log("视频生成完成,视频URL:",u.resultUrl),u.resultUrl.startsWith("data:image")||(V.value=u.resultUrl),_.value=!1,P.value=100,d.success(e("video.storyboard.videoCompleted")),setTimeout(async()=>{try{await U.fetchCurrentUser(),console.log("用户积分已更新")}catch(w){console.error("更新用户积分失败:",w)}},0);return}else if(u.status==="FAILED"||u.status==="CANCELLED"){S.value&&(clearTimeout(S.value),S.value=null),_.value=!1,d.error(e("video.storyboard.videoGenerateFailed")+": "+(u.errorMessage||e("video.storyboard.unknownError")));return}}}catch(a){console.error("轮询视频任务状态失败:",a)}S.value=setTimeout(v,r)};S.value=setTimeout(v,r)},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&&(k.value=t.prompt),t.aspectRatio&&(O.value=t.aspectRatio),t.hdMode!==void 0&&(G.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"}),d.success(e("video.storyboard.paramsFilled"))},Ae=async t=>{try{d.info(e("video.storyboard.cancelFeaturePending"))}catch(s){console.error("取消任务失败:",s)}},Oe=t=>{const s=t.target;s.currentTime=1,s.addEventListener("play",()=>{const l=Object.keys(F.value).find(r=>F.value[r]===s);l&&(N.value[l]=!0)}),s.addEventListener("pause",()=>{const l=Object.keys(F.value).find(r=>F.value[r]===s);l&&(N.value[l]=!1)}),s.addEventListener("ended",()=>{const l=Object.keys(F.value).find(r=>F.value[r]===s);l&&(N.value[l]=!1,s.currentTime=1)})},De=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(),r=String(s.getMonth()+1).padStart(2,"0"),v=String(s.getDate()).padStart(2,"0"),a=String(s.getHours()).padStart(2,"0"),u=String(s.getMinutes()).padStart(2,"0");return`${l}年${r}月${v}日 ${a}:${u}`},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),d.success(e("video.storyboard.downloadStarted"))}else d.error(e("video.storyboard.videoUrlNotAvailable"))};je(()=>U.isAuthenticated,t=>{t?(ie(),setTimeout(()=>{M.value||ve()},500)):(x.value=[],ee.value=!1)});const ve=async()=>{if(U.isAuthenticated){if(M.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(r=>r.workType==="STORYBOARD_VIDEO");if(l.length>0){const r=l[0];console.log("恢复分镜视频任务:",r);try{const v=await Q(r.taskId);if(v.data&&v.data.success&&v.data.data){const a=v.data.data;console.log("任务详情:",a),currentTask.value={taskId:a.taskId,prompt:a.prompt,aspectRatio:a.aspectRatio,duration:a.duration,resultUrl:a.resultUrl,createdAt:a.createdAt,progress:a.progress||0},R.value=a.taskId,a.prompt&&(k.value=a.prompt),a.aspectRatio&&(O.value=a.aspectRatio),a.duration&&($.value=a.duration||"10"),ee.value=!0;const u=a.progress||0,w=a.resultUrl||"";w&&w.startsWith("data:image")?(console.log("分镜图已生成,恢复到视频生成步骤"),m.value=w,h.value="video",u>=100?(_.value=!1,taskStatus.value="COMPLETED",d.success(e("video.storyboard.taskCompleted"))):(_.value=!0,taskStatus.value=a.status||"PROCESSING",d.info(e("video.storyboard.resumingVideoTask")),B(a.taskId))):(console.log("分镜图生成中,恢复到分镜图生成步骤"),h.value="generate",_.value=!0,taskStatus.value=a.status||"PROCESSING",d.info(e("video.storyboard.resumingStoryboardTask")),B(a.taskId))}else console.error("获取任务详情失败")}catch(v){console.error("获取任务详情失败:",v),R.value=r.taskId,k.value=r.prompt||"",_.value=!0,taskStatus.value=r.status||"PROCESSING",d.info(e("video.storyboard.resumingTask")),B(r.taskId)}}}}catch(t){console.error("恢复任务失败:",t)}}};return He(()=>{ie(),ve()}),qe(()=>{T.value&&(clearTimeout(T.value),T.value=null),S.value&&(clearTimeout(S.value),S.value=null)}),(t,s)=>{const l=se("Star"),r=se("el-icon"),v=se("el-switch");return g(),p("div",it,[o("header",nt,[o("div",dt,[o("button",{class:"back-btn",onClick:be}," ← "+n(i(e)("common.home")),1)]),o("div",ut,[o("div",ct,[o("div",vt,[Y(r,null,{default:Ke(()=>[Y(l)]),_:1})]),o("span",gt,n(i(U).availablePoints),1)]),Y(We),o("div",pt,[o("img",{src:et,alt:i(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},n(i(e)("home.textToVideo")),1),o("div",{class:"tab",onClick:ke},n(i(e)("home.imageToVideo")),1),o("div",ft,n(i(e)("home.storyboardVideo")),1)]),o("div",kt,[o("div",{class:ae(["step",{active:h.value==="generate"}]),onClick:Te},n(i(e)("video.storyboard.generateStoryboard")),3),o("div",{class:ae(["step",{active:h.value==="video",disabled:!m.value&&!z.value}]),onClick:we},n(i(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,"+ "+n(i(e)("video.storyboard.uploadStoryboard")),1),b.value.length>0?(g(),p("span",wt,n(i(e)("video.storyboard.uploadedCount",{count:b.value.length})),1)):E("",!0),b.value.length>=6?(g(),p("span",St,n(i(e)("video.storyboard.uploadLimit")),1)):E("",!0)],2),b.value.length>0?(g(),p("div",It,[(g(!0),p(ge,null,pe(b.value,(a,u)=>(g(),p("div",{class:"image-preview-item",key:u},[o("img",{src:a.url,alt:i(e)("video.storyboard.uploadedImage",{index:u+1})},null,8,Ct),o("button",{class:"remove-btn",onClick:w=>Ue(u)},"×",8,Et),o("div",Ut,n(u+1),1)]))),128))])):E("",!0),o("div",Pt,[J(o("textarea",{"onUpdate:modelValue":s[0]||(s[0]=a=>k.value=a),placeholder:i(e)("video.storyboard.promptPlaceholder"),class:"text-input",rows:"6"},null,8,Rt),[[Ye,k.value]]),o("div",Vt,[o("div",Lt,n(i(e)("video.storyboard.tip1")),1),o("div",At,n(i(e)("video.storyboard.tip2")),1)]),o("div",Ot,[o("button",{class:"optimize-button",onClick:Pe,disabled:!k.value.trim()||H.value}," ✨ "+n(H.value?i(e)("video.storyboard.optimizing"):i(e)("video.optimizePrompt")),9,Dt)])])])):E("",!0),h.value==="video"?(g(),p("div",xt,[o("div",Ft,[m.value||I.value?(g(),p("img",{key:0,src:m.value||I.value,alt:i(e)("video.storyboard.storyboardImage")},null,8,Gt)):(g(),p("div",Mt,n(i(e)("video.storyboard.noStoryboard")),1))])])):E("",!0),o("div",Nt,[o("div",zt,[o("label",null,n(i(e)("video.aspectRatio")),1),J(o("select",{"onUpdate:modelValue":s[1]||(s[1]=a=>O.value=a),class:"setting-select"},[...s[8]||(s[8]=[Je('<option value="16:9" data-v-93c7dd6e>16:9</option><option value="4:3" data-v-93c7dd6e>4:3</option><option value="1:1" data-v-93c7dd6e>1:1</option><option value="3:4" data-v-93c7dd6e>3:4</option><option value="9:16" data-v-93c7dd6e>9:16</option>',5)])],512),[[me,O.value]])]),o("div",Wt,[o("label",null,n(i(e)("video.duration")),1),J(o("select",{"onUpdate:modelValue":s[2]||(s[2]=a=>$.value=a),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,n(i(e)("video.storyboard.hdMode")),1),o("div",Bt,[Y(v,{modelValue:G.value,"onUpdate:modelValue":s[3]||(s[3]=a=>G.value=a)},null,8,["modelValue"]),o("span",jt,n(i(e)("video.storyboard.hdCost")),1)])])])])]),o("div",Ht,[o("button",{class:"generate-btn",onClick:Ie,disabled:!Z.value||_.value||M.value||h.value==="generate"&&!z.value&&!k.value.trim()||h.value==="video"&&!m.value&&!z.value},n(Z.value?Se():i(e)("video.storyboard.pleaseLogin")),9,qt),Z.value?E("",!0):(g(),p("div",Kt,[o("p",null,n(i(e)("video.storyboard.loginRequired")),1),o("button",{class:"login-link-btn",onClick:q},n(i(e)("video.storyboard.loginNow")),1)]))]),o("div",Yt,[o("div",Jt,[t.currentTask?(g(),p("div",Qt,[o("div",Xt,[o("h3",null,n(ce(t.taskStatus)),1),o("div",Zt,n(i(e)("home.storyboardVideo"))+" "+n(ue(t.currentTask.createdAt)),1)]),k.value?(g(),p("div",eo,n(k.value),1)):E("",!0),o("div",to,[_.value?(g(),p("div",oo,[o("div",so,[o("div",ao,n(h.value==="generate"?i(e)("video.storyboard.generatingStoryboardText"):i(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]=a=>_.value=a),disabled:""},null,512),[[Xe,_.value]]),o("label",uo,n(i(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||I.value?(g(),p("div",po,[o("img",{src:m.value||I.value,alt:i(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]=a=>ne(t.currentTask))},n(i(e)("profile.createSimilar")),1),V.value?(g(),p("div",ho,[o("button",{class:"icon-btn",onClick:Fe,title:i(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,n(i(e)("video.storyboard.taskFailed")),1),o("div",To,n(i(e)("video.storyboard.checkInputOrRetry")),1)])])):(g(),p("div",wo,[o("div",So,n(ce(t.taskStatus)),1)]))])])):(g(),p("div",Io,[h.value==="video"&&V.value&&D.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)])):I.value||m.value?(g(),p("div",Uo,[o("img",{src:I.value||m.value,alt:i(e)("video.storyboard.storyboardImage"),onLoad:s[6]||(s[6]=a=>console.log("图片加载成功:",I.value||m.value?"URL长度="+(I.value||m.value).length:"无URL")),onError:s[7]||(s[7]=a=>console.error("图片加载失败:",I.value||m.value))},null,40,Po),h.value==="video"&&D.value==="PROCESSING"?(g(),p("div",Ro,[s[12]||(s[12]=o("div",{class:"loading-spinner"},null,-1)),o("div",Vo,n(i(e)("video.storyboard.generatingVideo")),1),P.value>0?(g(),p("div",Lo,n(i(e)("video.storyboard.progress",{progress:P.value})),1)):E("",!0)])):E("",!0)])):_.value&&!I.value&&!m.value?(g(),p("div",Ao,[s[13]||(s[13]=o("div",{class:"loading-spinner"},null,-1)),o("div",Oo,n(h.value==="generate"?i(e)("video.storyboard.generatingStoryboardText"):i(e)("video.storyboard.generatingVideoText")),1),h.value==="video"&&P.value>0?(g(),p("div",Do,n(i(e)("video.storyboard.progress",{progress:P.value})),1)):E("",!0)])):(g(),p("div",xo,[o("div",Fo,n(i(e)("video.storyboard.startCreating")),1)]))])),x.value.length>0?(g(),p("div",Go,[o("div",Mo,[(g(!0),p(ge,null,pe(x.value,a=>(g(),p("div",{key:a.taskId,class:"history-item"},[a.status==="PENDING"||a.status==="PROCESSING"?(g(),p("div",No,[s[14]||(s[14]=o("input",{type:"checkbox",checked:!0,disabled:""},null,-1)),o("label",null,n(i(e)("video.storyboard.inProgress")),1)])):E("",!0),o("div",zo,[o("span",Wo,n(i(e)("home.storyboardVideo")),1),o("span",$o,n(ue(a.createdAt)),1)]),o("div",Bo,n(a.prompt||i(e)("video.storyboard.noDescription")),1),o("div",jo,[a.status==="PENDING"||a.status==="PROCESSING"?(g(),p("div",Ho,[o("div",qo,n(i(e)("video.storyboard.queuing")),1),o("div",Ko,n(i(e)("video.storyboard.subscribeToSpeed")),1),o("button",{class:"cancel-btn",onClick:u=>Ae(a.taskId)},n(i(e)("common.cancel")),9,Yo)])):a.status==="COMPLETED"&&a.resultUrl&&!a.resultUrl.startsWith("data:image")?(g(),p("div",{key:1,class:"history-video-thumbnail",onClick:u=>de(a)},[o("video",{ref_for:!0,ref:u=>xe(a.taskId,u),src:le(a.resultUrl),muted:"",preload:"metadata",onLoadedmetadata:Oe,onError:De,onClick:Ze(u=>de(a),["stop"])},null,40,Qo),N.value[a.taskId]?E("",!0):(g(),p("div",Xo,[...s[15]||(s[15]=[o("div",{class:"play-icon"},"▶",-1)])]))],8,Jo)):a.resultUrl&&a.resultUrl.startsWith("data:image")?(g(),p("div",Zo,[o("img",{src:a.resultUrl,alt:i(e)("video.storyboard.storyboardImage")},null,8,es)])):(g(),p("div",ts,[o("div",os,n(i(e)("video.storyboard.noResult")),1)]))]),o("div",ss,[o("button",{class:"similar-btn",onClick:u=>ne(a)},n(i(e)("profile.createSimilar")),9,as)])]))),128))])])):E("",!0)])])])])}}},ps=Me(rs,[["__scopeId","data-v-93c7dd6e"]]);export{ps as default};
|