2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{aA as fe,r,c as ge,U as ke,al as be,z as u,A as d,B as e,O as he,M as V,K as k,aj as _e,P as w,aE as W,aD as ye,ae as $,E as N,ag as H,I as we,R as m,J as x,u as C,a1 as xe}from"./vue-vendor-164775a6.js";import{_ as Ce,u as Ue}from"./index-2fb4354b.js";import{E as a,D as O,u as Se,F as Te,x as Ee,b as Fe,G as Me}from"./element-plus-4a19e5e8.js";import{i as G}from"./imageToVideo-6b02abdd.js";import{o as Ve}from"./promptOptimizer-dc3175a2.js";import"./utils-edfcd65b.js";const ze={class:"image-to-video-create-page"},Pe={class:"top-header"},Ie={class:"header-right"},Re={class:"main-content"},Be={class:"left-panel"},Ne={class:"image-input-section"},Ae={key:0,class:"image-preview"},Le={key:0,class:"preview-item"},We=["src"],$e={key:1,class:"preview-item"},He=["src"],Oe={class:"text-input-section"},Ge={class:"optimize-btn"},De=["disabled"],je={class:"video-settings"},qe={class:"setting-item"},Je={class:"setting-item"},Ke={class:"setting-item"},Ye={class:"hd-setting"},Qe={class:"right-panel"},Xe={class:"preview-area"},Ze={key:0,class:"task-status"},et={class:"status-header"},tt={class:"task-id"},st={class:"task-description"},lt={class:"video-preview-container"},ot={key:0,class:"generating-container"},at={class:"generating-placeholder"},it={class:"progress-bar-large"},nt={key:1,class:"completed-container"},rt={class:"task-info-header"},ut={class:"task-checkbox"},dt={class:"video-player-container"},ct=["src"],vt={key:1,class:"no-video-placeholder"},pt={class:"watermark-overlay"},mt={class:"watermark-options"},ft={class:"watermark-option"},gt={class:"watermark-option"},kt={key:2,class:"failed-container"},bt={key:3,class:"status-placeholder"},ht={class:"status-text"},_t={key:1,class:"preview-content"},yt={__name:"ImageToVideoCreate",setup(wt){const g=fe(),D=Ue(),c=r(""),U=r("16:9"),z=r("10"),P=r(!1),b=r(!1),h=r(""),_=r(""),S=r(null),I=r(null),i=r(null),y=r(0),p=r(""),T=r(null),A=r(!1),E=r("without"),F=r(!1),f=r(!1),R=r(null),j=ge(()=>{if(!R.value||!f.value)return{};const s=R.value.getBoundingClientRect();return{position:"fixed",top:`${s.bottom+8}px`,right:`${window.innerWidth-s.right}px`,zIndex:99999}}),q=()=>{g.push("/")},J=()=>{g.push("/text-to-video/create")},K=()=>{g.push("/storyboard-video/create")},Y=()=>{f.value=!f.value},Q=()=>{f.value=!1,g.push("/profile")},X=()=>{f.value=!1,g.push("/works")},Z=()=>{f.value=!1,g.push("/subscription")},ee=()=>{f.value=!1,g.push("/settings")},te=()=>{f.value=!1,D.logout(),g.push("/login")},se=()=>{const s=document.createElement("input");s.type="file",s.accept="image/*",s.onchange=t=>{const o=t.target.files[0];if(o){if(o.size>104857600){a.error("图片文件大小不能超过100MB");return}if(!o.type.startsWith("image/")){a.error("请选择有效的图片文件");return}S.value=o;const n=new FileReader;n.onload=v=>{h.value=v.target.result},n.readAsDataURL(o)}},s.click()},le=()=>{const s=document.createElement("input");s.type="file",s.accept="image/*",s.onchange=t=>{const o=t.target.files[0];if(o){if(o.size>104857600){a.error("图片文件大小不能超过100MB");return}if(!o.type.startsWith("image/")){a.error("请选择有效的图片文件");return}I.value=o;const n=new FileReader;n.onload=v=>{_.value=v.target.result},n.readAsDataURL(o)}},s.click()},oe=()=>{h.value="",S.value=null},ae=()=>{_.value="",I.value=null},B=async()=>{var t;if(b.value){a.warning("已有任务在进行中,请等待完成或取消当前任务");return}if(!S.value){a.error("请上传首帧图片");return}if(!c.value.trim()){a.error("请输入描述文字");return}if(c.value.trim().length>500){a.error("描述文字不能超过500个字符");return}const s=O.service({lock:!0,text:"正在创建任务...",background:"rgba(0, 0, 0, 0.7)"});try{const o={firstFrame:S.value,lastFrame:I.value,prompt:c.value.trim(),aspectRatio:U.value,duration:parseInt(z.value),hdMode:P.value},l=await G.createTask(o);l.data&&l.data.success?(i.value=l.data.data,b.value=!0,y.value=0,p.value="PENDING",a.success("任务创建成功,开始处理..."),ie()):a.error(((t=l.data)==null?void 0:t.message)||"创建任务失败")}catch(o){console.error("创建任务失败:",o),a.error("创建任务失败,请重试")}finally{s.close()}},ie=()=>{i.value&&(T.value=G.pollTaskStatus(i.value.taskId,s=>{s&&typeof s.progress=="number"&&(y.value=s.progress),s&&s.status&&(p.value=s.status),s&&s.resultUrl&&s.resultUrl.trim()&&i.value&&(i.value.resultUrl=s.resultUrl,console.log("更新resultUrl:",s.resultUrl.substring(0,50)+"...")),console.log("任务进度:",s)},s=>{b.value=!1,y.value=100,p.value="COMPLETED",s&&s.resultUrl&&s.resultUrl.trim()?i.value&&(i.value.resultUrl=s.resultUrl,console.log("任务完成,resultUrl已更新:",s.resultUrl.substring(0,50)+"...")):i.value&&!i.value.resultUrl&&console.warn("任务完成但未获取到resultUrl"),a.success("视频生成完成!"),console.log("任务完成:",s)},s=>{b.value=!1,p.value="FAILED",a.error("视频生成失败:"+s.message),console.error("任务失败:",s)}))},L=s=>({PENDING:"等待中",PROCESSING:"处理中",COMPLETED:"已完成",FAILED:"失败",CANCELLED:"已取消"})[s]||"未知",ne=s=>{if(!s)return"";const t=new Date(s),o=t.getFullYear(),l=String(t.getMonth()+1).padStart(2,"0"),n=String(t.getDate()).padStart(2,"0"),v=String(t.getHours()).padStart(2,"0"),M=String(t.getMinutes()).padStart(2,"0");return`${o}年${l}月${n}日 ${v}:${M}`},re=()=>{var l;const s=((l=i.value)==null?void 0:l.aspectRatio)||U.value||"16:9",[t,o]=s.split(":").map(Number);return{aspectRatio:`${t} / ${o}`,maxHeight:"70vh"}},ue=async()=>{var s,t,o;if(!c.value.trim()){a.warning("请输入提示词");return}if(c.value.length>2e3){a.warning("提示词过长,请控制在2000字符以内");return}try{F.value=!0;const l=O.service({lock:!1,text:"正在优化提示词,请稍候...",background:"rgba(0, 0, 0, 0.3)"}),n=await Ve(c.value.trim(),"image-to-video");if(l.close(),n.data&&n.data.success){const v=n.data.data,M=v.optimizedPrompt;v.optimized&&M!==c.value.trim()?(c.value=M,a.success("提示词优化成功!")):a.warning("提示词已优化,但可能无明显变化")}else a.error(((s=n.data)==null?void 0:s.message)||"优化失败")}catch(l){console.error("优化提示词失败:",l);let n="优化提示词失败";if(l.response){const v=l.response.status;v===400?n=((t=l.response.data)==null?void 0:t.message)||"请求参数错误":v===408||l.code==="ECONNABORTED"?n="请求超时,请稍后重试":v>=500?n="服务器错误,请稍后重试":n=((o=l.response.data)==null?void 0:o.message)||"优化失败"}else l.request?n="网络错误,请检查网络连接":n=l.message||"优化失败";a.error(n)}finally{F.value=!1}},de=()=>{B()},ce=()=>{if(i.value&&i.value.resultUrl){const s=document.createElement("a");s.href=i.value.resultUrl,s.download=`video_${i.value.taskId}.mp4`,document.body.appendChild(s),s.click(),document.body.removeChild(s),a.success("开始下载视频")}else a.error("视频链接不可用")},ve=()=>{i.value=null,b.value=!1,y.value=0,p.value="",B()},pe=()=>{if(!i.value){a.error("没有可投稿的作品");return}a.success("投稿成功!"),console.log("投稿作品:",i.value)},me=()=>{if(!i.value){a.error("没有可删除的作品");return}a.confirm("确定要删除这个作品吗?","确认删除",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{i.value=null,p.value="",a.success("作品已删除")}).catch(()=>{a.info("已取消删除")})};return ke(()=>{T.value&&(T.value(),T.value=null)}),(s,t)=>{const o=be("el-icon");return u(),d("div",ze,[e("header",Pe,[e("div",{class:"header-left"},[e("button",{class:"back-btn",onClick:q}," ← 首页 ")]),e("div",Ie,[t[7]||(t[7]=e("div",{class:"credits-info"},[e("div",{class:"credits-circle"},"25"),e("span",null,"| 首购优惠")],-1)),t[8]||(t[8]=e("div",{class:"notification-icon"},[he(" 🔔 "),e("div",{class:"notification-badge"},"5")],-1)),e("div",{class:"user-avatar",onClick:Y,ref_key:"userAvatarRef",ref:R}," 👤 ",512)])]),e("div",Re,[e("div",Be,[e("div",{class:"creation-tabs"},[e("div",{class:"tab",onClick:J},"文生视频"),t[9]||(t[9]=e("div",{class:"tab active"},"图生视频",-1)),e("div",{class:"tab",onClick:K},"分镜视频")]),e("div",Ne,[e("div",{class:"image-upload-area"},[e("div",{class:"upload-box",onClick:se},[...t[10]||(t[10]=[e("div",{class:"upload-icon"},"+",-1),e("div",{class:"upload-text"},"首帧",-1)])]),t[12]||(t[12]=e("div",{class:"arrow-icon"},"↔",-1)),e("div",{class:"upload-box optional",onClick:le},[...t[11]||(t[11]=[e("div",{class:"upload-icon"},"+",-1),e("div",{class:"upload-text"},"尾帧 (可选)",-1)])])]),h.value||_.value?(u(),d("div",Ae,[h.value?(u(),d("div",Le,[e("img",{src:h.value,alt:"首帧"},null,8,We),e("button",{class:"remove-btn",onClick:oe},"×")])):V("",!0),_.value?(u(),d("div",$e,[e("img",{src:_.value,alt:"尾帧"},null,8,He),e("button",{class:"remove-btn",onClick:ae},"×")])):V("",!0)])):V("",!0)]),e("div",Oe,[k(e("textarea",{"onUpdate:modelValue":t[0]||(t[0]=l=>c.value=l),placeholder:"结合图片,描述想要生成的内容",class:"text-input",rows:"6"},null,512),[[_e,c.value]]),e("div",Ge,[e("button",{class:"optimize-button",onClick:ue,disabled:!c.value.trim()||F.value}," ✨ "+w(F.value?"优化中...":"一键优化"),9,De)])]),e("div",je,[e("div",qe,[t[14]||(t[14]=e("label",null,"比例",-1)),k(e("select",{"onUpdate:modelValue":t[1]||(t[1]=l=>U.value=l),class:"setting-select"},[...t[13]||(t[13]=[ye('<option value="16:9" data-v-f67a5941>16:9</option><option value="4:3" data-v-f67a5941>4:3</option><option value="1:1" data-v-f67a5941>1:1</option><option value="3:4" data-v-f67a5941>3:4</option><option value="9:16" data-v-f67a5941>9:16</option>',5)])],512),[[W,U.value]])]),e("div",Je,[t[16]||(t[16]=e("label",null,"时长",-1)),k(e("select",{"onUpdate:modelValue":t[2]||(t[2]=l=>z.value=l),class:"setting-select"},[...t[15]||(t[15]=[e("option",{value:"10"},"10s",-1)])],512),[[W,z.value]])]),e("div",Ke,[t[18]||(t[18]=e("label",null,"高清模式 (1080P)",-1)),e("div",Ye,[k(e("input",{type:"checkbox","onUpdate:modelValue":t[3]||(t[3]=l=>P.value=l),class:"hd-switch"},null,512),[[$,P.value]]),t[17]||(t[17]=e("span",{class:"cost-text"},"开启消耗20积分",-1))])])]),e("div",{class:"generate-section"},[e("button",{class:"generate-btn",onClick:B}," 开始生成 ")])]),e("div",Qe,[e("div",Xe,[i.value?(u(),d("div",Ze,[e("div",et,[e("h3",null,w(L(p.value)),1),e("div",tt,"图生视频 "+w(ne(i.value.createdAt)),1)]),e("div",st,w(c.value),1),e("div",lt,[b.value?(u(),d("div",ot,[e("div",at,[t[19]||(t[19]=e("div",{class:"generating-text"},"生成中",-1)),e("div",it,[e("div",{class:"progress-fill-large",style:N({width:y.value+"%"})},null,4)])])])):p.value==="COMPLETED"?(u(),d("div",nt,[e("div",rt,[e("div",ut,[k(e("input",{type:"checkbox",id:"inProgress","onUpdate:modelValue":t[4]||(t[4]=l=>A.value=l)},null,512),[[$,A.value]]),t[20]||(t[20]=e("label",{for:"inProgress"},"进行中",-1))])]),e("div",dt,[e("div",{class:"video-player",style:N(re())},[i.value.resultUrl?(u(),d("video",{key:0,src:i.value.resultUrl,controls:"",class:"result-video",poster:""},null,8,ct)):(u(),d("div",vt,[...t[21]||(t[21]=[e("div",{class:"no-video-text"},"视频生成完成,但未获取到视频链接",-1)])])),e("div",pt,[e("div",mt,[e("div",ft,[k(e("input",{type:"radio",id:"withWatermark",name:"watermark",value:"with","onUpdate:modelValue":t[5]||(t[5]=l=>E.value=l)},null,512),[[H,E.value]]),t[22]||(t[22]=e("label",{for:"withWatermark"},"带水印",-1))]),e("div",gt,[k(e("input",{type:"radio",id:"withoutWatermark",name:"watermark",value:"without","onUpdate:modelValue":t[6]||(t[6]=l=>E.value=l)},null,512),[[H,E.value]]),t[23]||(t[23]=e("label",{for:"withoutWatermark"},"不带水印 会员专享",-1))])])])],4)]),e("div",{class:"result-actions"},[e("button",{class:"action-btn primary",onClick:de},"做同款"),e("button",{class:"action-btn primary",onClick:pe},"投稿"),e("div",{class:"action-icons"},[e("button",{class:"icon-btn",onClick:ce,title:"下载视频"},[...t[24]||(t[24]=[e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},[e("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})],-1)])]),e("button",{class:"icon-btn",onClick:me,title:"删除作品"},[...t[25]||(t[25]=[e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},[e("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"})],-1)])])])])])):p.value==="FAILED"?(u(),d("div",kt,[t[26]||(t[26]=e("div",{class:"failed-placeholder"},[e("div",{class:"failed-icon"},"❌"),e("div",{class:"failed-text"},"生成失败"),e("div",{class:"failed-desc"},"请检查输入内容或重试")],-1)),e("div",{class:"result-actions"},[e("button",{class:"action-btn primary",onClick:ve},"重新生成")])])):(u(),d("div",bt,[e("div",ht,w(L(p.value)),1)]))])])):(u(),d("div",_t,[...t[27]||(t[27]=[e("div",{class:"preview-placeholder"},[e("div",{class:"placeholder-text"},"开始创作您的第一个作品吧!"),e("div",{class:"placeholder-tips"},[e("p",null,"• 上传首帧图片"),e("p",null,"• 输入描述文字"),e("p",null,"• 选择视频参数"),e("p",null,"• 点击开始生成")])],-1)])]))])])]),(u(),we(xe,{to:"body"},[f.value?(u(),d("div",{key:0,class:"user-menu-teleport",style:N(j.value)},[e("div",{class:"menu-item",onClick:Q},[m(o,null,{default:x(()=>[m(C(Se))]),_:1}),t[28]||(t[28]=e("span",null,"个人资料",-1))]),e("div",{class:"menu-item",onClick:X},[m(o,null,{default:x(()=>[m(C(Te))]),_:1}),t[29]||(t[29]=e("span",null,"我的作品",-1))]),e("div",{class:"menu-item",onClick:Z},[m(o,null,{default:x(()=>[m(C(Ee))]),_:1}),t[30]||(t[30]=e("span",null,"会员订阅",-1))]),e("div",{class:"menu-item",onClick:ee},[m(o,null,{default:x(()=>[m(C(Fe))]),_:1}),t[31]||(t[31]=e("span",null,"系统设置",-1))]),t[33]||(t[33]=e("div",{class:"menu-divider"},null,-1)),e("div",{class:"menu-item logout",onClick:te},[m(o,null,{default:x(()=>[m(C(Me))]),_:1}),t[32]||(t[32]=e("span",null,"退出登录",-1))])],4)):V("",!0)]))])}}},Ft=Ce(yt,[["__scopeId","data-v-f67a5941"]]);export{Ft as default};
|