| 1 |
- import{d as e,r as a,O as l,c as t,w as s,i as o,b as i,e as c,f as n,h as u,j as r,F as d,k as f,z as v,t as m,a3 as p,A as g,G as _,l as h,a4 as k,a5 as b,m as y,n as w,J as C,y as x,a6 as Z,M as F,a7 as j,N as I,a8 as M,p as P}from"./index-Co9nPWLO.js";import{c as J,a as N,b as O}from"./video-generator-api.Cip3yDj1.js";import{_ as V}from"./_plugin-vue_export-helper.BCo6x5W8.js";const q={portrait:{images:[],audio:{url:"",volume:1},video:{width:720,height:1280,fps:30,bitrate:"2M",format:"mp4"},kenburns:{enabled:!0,minZoom:1,maxZoom:1.2}},landscape:{images:[],audio:{url:"",volume:1},video:{width:1920,height:1080,fps:30,bitrate:"4M",format:"mp4"},kenburns:{enabled:!0,minZoom:1,maxZoom:1.15}},square:{images:[],audio:{url:"",volume:1},video:{width:1080,height:1080,fps:30,bitrate:"2M",format:"mp4"},kenburns:{enabled:!0,minZoom:1,maxZoom:1.25}}},D=V(e({__name:"create",setup(e){const V=["选择素材","配置效果","生成视频"],D=a(0),S=a(null),z=a(!1),A=a(0),B=[{value:"portrait",label:"竖屏",width:720,height:1280},{value:"landscape",label:"横屏",width:1920,height:1080},{value:"square",label:"方形",width:1080,height:1080}],E=a({title:"",config:{...q.portrait,audio:{url:"",volume:1}}});function G(){C()}function K(){if(0===D.value){if(!E.value.title)return void x({title:"请输入标题",icon:"none"});if(0===E.value.config.images.length)return void x({title:"请添加图片",icon:"none"})}D.value<V.length-1&&D.value++}function T(e){E.value.config.kenburns.enabled=e.detail.value}function U(){Z({count:9,success:e=>{F({title:"上传图片中..."});let a=0;const l=e.tempFilePaths.length;e.tempFilePaths.forEach(e=>{j({url:"http://localhost:3000/api/video/materials/upload",filePath:e,name:"file",formData:{type:"image",category:"custom"},success:e=>{if(a++,200===e.statusCode)try{const a=JSON.parse(e.data);a.success&&E.value.config.images.push({url:a.data.url,duration:5,transition:"fade"})}catch(t){console.error("解析响应失败:",t)}a===l&&(I(),x({title:"上传完成",icon:"success"}))},fail:e=>{a++,console.error("上传失败:",e),a===l&&(I(),x({title:"部分上传失败",icon:"none"}))}})})},fail:e=>{console.error("选择图片失败:",e)}})}function H(){M({count:1,type:"audio",success:e=>{F({title:"上传音频中..."});const a=e.tempFiles[0].path;j({url:"http://localhost:3000/api/video/materials/upload",filePath:a,name:"file",formData:{type:"audio",category:"custom"},success:e=>{if(I(),200===e.statusCode)try{const a=JSON.parse(e.data);a.success?(E.value.config.audio.url=a.data.url,x({title:"音频上传完成",icon:"success"})):x({title:"上传失败",icon:"none"})}catch(a){console.error("解析响应失败:",a),x({title:"上传失败",icon:"none"})}else x({title:"上传失败",icon:"none"})},fail:e=>{I(),console.error("上传失败:",e),x({title:"上传失败",icon:"none"})}})},fail:e=>{console.error("选择音频失败:",e),x({title:"请选择音频文件",icon:"none"})}})}function L(){E.value.config.audio.url=""}async function Q(){try{F({title:"保存中..."});const e=await J({title:E.value.title,config:E.value.config});console.log("保存成功,响应:",e),S.value=e.id,I(),x({title:"保存成功",icon:"success"})}catch(e){I(),console.error("保存失败:",e),x({title:"保存失败: "+(e.message||"未知错误"),icon:"none"})}}async function R(){if(S.value||(await Q(),S.value))try{z.value=!0,A.value=0,await N(S.value);const e=setInterval(async()=>{try{const a=await O(S.value);A.value=a.progress,"completed"===a.status?(clearInterval(e),x({title:"生成成功",icon:"success"}),setTimeout(()=>{P({url:"/pages/video-generator/preview?id="+S.value})},1500)):"failed"===a.status&&(clearInterval(e),z.value=!1,x({title:"生成失败",icon:"none"}))}catch(a){console.error("获取进度失败:",a)}},2e3)}catch(e){z.value=!1,x({title:"启动生成失败",icon:"none"})}else x({title:"请先保存",icon:"none"})}return l(e=>{(null==e?void 0:e.id)&&console.log("编辑项目:",e.id)}),(e,a)=>{const l=n,C=o,x=g,Z=_,F=b,j=y;return i(),t(C,{class:"page"},{default:s(()=>[c(C,{class:"nav-bar"},{default:s(()=>[c(C,{class:"nav-content"},{default:s(()=>[c(C,{class:"nav-left",onClick:G},{default:s(()=>[c(l,{class:"back-icon"},{default:s(()=>[u("←")]),_:1})]),_:1}),c(l,{class:"page-title"},{default:s(()=>[u("创建视频")]),_:1}),c(C,{class:"nav-right"},{default:s(()=>[c(l,{class:"save-btn",onClick:Q},{default:s(()=>[u("保存")]),_:1})]),_:1})]),_:1})]),_:1}),c(C,{class:"step-nav"},{default:s(()=>[(i(),r(d,null,f(V,(e,a)=>c(C,{key:a,class:v(["step-item",{active:D.value===a}])},{default:s(()=>[c(C,{class:"step-number"},{default:s(()=>[u(m(a+1),1)]),_:2},1024),c(l,{class:"step-text"},{default:s(()=>[u(m(e),1)]),_:2},1024)]),_:2},1032,["class"])),64))]),_:1}),c(C,{class:"step-content"},{default:s(()=>[p(c(C,{class:"step-panel"},{default:s(()=>[c(C,{class:"form-section"},{default:s(()=>[c(l,{class:"section-title"},{default:s(()=>[u("基本信息")]),_:1}),c(C,{class:"form-item"},{default:s(()=>[c(l,{class:"form-label"},{default:s(()=>[u("视频标题 *")]),_:1}),c(x,{modelValue:E.value.title,"onUpdate:modelValue":a[0]||(a[0]=e=>E.value.title=e),class:"form-input",placeholder:"给视频起个标题",maxlength:100,"auto-height":""},null,8,["modelValue"])]),_:1})]),_:1}),c(C,{class:"form-section"},{default:s(()=>[c(l,{class:"section-title"},{default:s(()=>[u("选择配图")]),_:1}),E.value.config.images.length>0?(i(),t(C,{key:0,class:"selected-images"},{default:s(()=>[(i(!0),r(d,null,f(E.value.config.images,(e,a)=>(i(),t(C,{key:a,class:"selected-image-item"},{default:s(()=>[c(Z,{src:e.url,mode:"aspectFill",class:"selected-image"},null,8,["src"]),c(C,{class:"image-remove",onClick:e=>function(e){E.value.config.images.splice(e,1)}(a)},{default:s(()=>[u("×")]),_:2},1032,["onClick"])]),_:2},1024))),128))]),_:1})):h("",!0),c(C,{class:"upload-area",onClick:U},{default:s(()=>[c(l,{class:"upload-icon"},{default:s(()=>[u("+")]),_:1}),c(l,{class:"upload-text"},{default:s(()=>[u("添加图片")]),_:1})]),_:1})]),_:1}),c(C,{class:"form-section"},{default:s(()=>[c(l,{class:"section-title"},{default:s(()=>[u("选择音频")]),_:1}),E.value.config.audio.url?(i(),t(C,{key:0,class:"audio-preview"},{default:s(()=>[c(l,{class:"audio-name"},{default:s(()=>[u("已选择音频")]),_:1}),c(C,{class:"audio-remove",onClick:L},{default:s(()=>[u("更换音频")]),_:1})]),_:1})):(i(),t(C,{key:1,class:"upload-area",onClick:H},{default:s(()=>[c(l,{class:"upload-icon"},{default:s(()=>[u("+")]),_:1}),c(l,{class:"upload-text"},{default:s(()=>[u("添加音频")]),_:1})]),_:1}))]),_:1})]),_:1},512),[[k,0===D.value]]),p(c(C,{class:"step-panel"},{default:s(()=>[c(C,{class:"form-section"},{default:s(()=>[c(l,{class:"section-title"},{default:s(()=>[u("视频尺寸")]),_:1}),c(C,{class:"ratio-options"},{default:s(()=>[(i(),r(d,null,f(B,e=>c(C,{key:e.value,class:v(["ratio-option",{active:E.value.config.video.width===e.width}]),onClick:a=>function(e){const a=q[e.value];E.value.config.video={...a.video}}(e)},{default:s(()=>[c(l,{class:"ratio-label"},{default:s(()=>[u(m(e.label),1)]),_:2},1024)]),_:2},1032,["class","onClick"])),64))]),_:1})]),_:1}),c(C,{class:"form-section"},{default:s(()=>[c(l,{class:"section-title"},{default:s(()=>[u("Ken Burns 效果")]),_:1}),c(C,{class:"switch-item"},{default:s(()=>[c(l,{class:"switch-label"},{default:s(()=>[u("启用效果")]),_:1}),c(F,{checked:E.value.config.kenburns.enabled,onChange:T,color:"#667eea"},null,8,["checked"])]),_:1})]),_:1})]),_:1},512),[[k,1===D.value]]),p(c(C,{class:"step-panel"},{default:s(()=>[c(C,{class:"preview-card"},{default:s(()=>[c(l,{class:"preview-title"},{default:s(()=>[u(m(E.value.title||"未命名视频"),1)]),_:1}),c(l,{class:"meta-item"},{default:s(()=>[u("尺寸: "+m(E.value.config.video.width)+"×"+m(E.value.config.video.height),1)]),_:1}),c(l,{class:"meta-item"},{default:s(()=>[u("图片: "+m(E.value.config.images.length)+"张",1)]),_:1})]),_:1}),z.value?(i(),t(C,{key:1,class:"generating-section"},{default:s(()=>[c(l,{class:"generating-text"},{default:s(()=>[u("正在生成视频... "+m(A.value)+"%",1)]),_:1}),c(C,{class:"progress-bar-large"},{default:s(()=>[c(C,{class:"progress-fill-large",style:w({width:A.value+"%"})},null,8,["style"])]),_:1})]),_:1})):(i(),t(C,{key:0,class:"generate-section"},{default:s(()=>[c(j,{class:"generate-btn",onClick:R},{default:s(()=>[u("开始生成视频")]),_:1})]),_:1}))]),_:1},512),[[k,2===D.value]])]),_:1}),c(C,{class:"bottom-nav"},{default:s(()=>[D.value>0?(i(),t(C,{key:0,class:"nav-btn prev",onClick:a[1]||(a[1]=e=>D.value--)},{default:s(()=>[u("← 上一步")]),_:1})):h("",!0),D.value<V.length-1?(i(),t(C,{key:1,class:"nav-btn next",onClick:K},{default:s(()=>[u("下一步 →")]),_:1})):h("",!0)]),_:1})]),_:1})}}}),[["__scopeId","data-v-6f797890"]]);export{D as default};
|