3 lines
9.3 KiB
Java
3 lines
9.3 KiB
Java
var A=(S,u,h)=>new Promise((i,d)=>{var s=r=>{try{g(h.next(r))}catch(c){d(c)}},l=r=>{try{g(h.throw(r))}catch(c){d(c)}},g=r=>r.done?i(r.value):Promise.resolve(r.value).then(s,l);g((h=h.apply(S,u)).next())});import{e as J,h as G,o as H,r as y,d as N,C as b,z as f,Q as o,y as O,H as w,f as a,A as m,R as F,K as L,u as _,F as Q,E as I}from"./vue-vendor-DNhG1Cve.js";import{e as X}from"./index-C69VKHba.js";import Y from"./ImageViewer-DC0qDdlD.js";import{a1 as W,aU as Z,aH as ee,d as R,s as te,aX as oe,x as U,au as ae}from"./index-X7Y8jykP.js";import{u as se}from"./useForm-D61zovon.js";import{B as le}from"./BasicForm-ClUSoD_-.js";import{b as ie}from"./index-CeNCCWzL.js";import"./helper-DcLcf4v6.js";import"./index-BzChaRPg.js";import"./BasicForm.vue_vue_type_style_index_0_lang-B29PWQy0.js";import"./index-DO7ZhK45.js";import"./index-ByCwbQDV.js";import"./index-Upeu4GGa.js";import"./index-C4wWpZeQ.js";import"./emoji-mart-vue-fast-R0uJEDq-.js";import"./useTimeout-D5AmIBZw.js";import"./index-M9QP6cvf.js";import"./Skeleton-CimgOdM7.js";import"./useScrollTo-0FPEw5-K.js";import"./useIntersectionObserver-BGOgyKyu.js";import"./breakpointEnum-BhAg6bcX.js";import"./index-BDvqZ5j4.js";import"./BasicModal-xH56XuRZ.js";import"./ModalHeader-Sr8KwhJJ.js";import"./useWindowSizeFn-C-0M9_Ul.js";import"./useAppInject-DPZGPcR3.js";import"./index-CuWaQdlK.js";import"./index-saD4h7VJ.js";import"./useBreakpoint-DXhPW7nV.js";import"./useEventListener-BRXjwk7A.js";import"./uniqBy--vsL0WVB.js";const V=[{field:"drawModelId",label:"模型",component:"JDictSelectTag",required:!0,helpMessage:["1、需要选择已激活的图像模型","2、当前推荐通义万象模型 (wan2.5-i2i-preview)","3、建议上传清晰的模特图和服装图以获得最佳效果"],componentProps:{dictCode:"airag_model where model_type = 'IMAGE' and activate_flag = 1,name,id",placeholder:"请选择图像模型"}},{field:"modelImage",label:"模特图片",component:"JImageUpload",required:!0,componentProps:{fileMax:1,text:"上传模特"},helpMessage:["上传模特图片,建议使用全身照,正面清晰"]},{field:"clothUpload",label:"服装",slot:"clothUpload",component:"Input",required:!1},{field:"userPrompt",label:"提示词",component:"InputTextArea",componentProps:{rows:4,placeholder:"在此输入你的提示词,或使用示例快速填充"},required:!0}],ne=[{field:"drawModelId",label:"模型",component:"JDictSelectTag",required:!0,helpMessage:["1、需要选择已激活的视频模型","2、建议选择支持图生视频的模型"],componentProps:{dictCode:"airag_model where model_type = 'VIDEO' and activate_flag = 1,name,id",placeholder:"请选择视频模型"}},{field:"modelImage",label:"模特图片",component:"JImageUpload",componentProps:{fileMax:1,text:"上传模特"},helpMessage:["上传模特图片,建议使用全身照,正面清晰"]},{field:"clothUpload",label:"",slot:"clothUpload",component:"Input",required:!1},{field:"userPrompt",label:"自定义提示词",component:"InputTextArea",componentProps:{rows:4,placeholder:"在此输入你的提示词,或使用下方示例快速填充"},required:!1}],re={class:"ai-cloth-change-page"},ce={class:"cloth-change-wrapper"},de={class:"config-panel"},pe={class:"config-tabs"},me={class:"form-scroll"},ue={class:"examples-row",role:"toolbar","aria-label":"示例"},ge={class:"section-block"},ve={key:0,class:"ai-notice"},fe={class:"action-bar"},_e={class:"preview-panel"},he={class:"preview-content"},ye={key:0,class:"empty-state"},be={key:1,class:"loading-state"},we={key:2,class:"result-image-wrapper group"},Ie=["src"],ke={class:"hover-actions"},xe={key:3,class:"result-video-wrapper group"},Ce=["src"],Ue={class:"hover-actions"},j="ai_cloth_task_id",je=J({__name:"AiClothChange",setup(S){const{createMessage:u}=te(),{domainUrl:h}=W(),i=y("image"),d=y(""),s=y(!1),l=y(""),g=y(!1),r=y(null);let c=null;const[B,{validate:E,resetSchema:q,getFieldsValue:Se,setFieldsValue:M}]=se({schemas:V,showActionButtonGroup:!1,wrapperCol:{span:24},labelCol:{span:24}});G(i,t=>{l.value="",q(t==="image"?V:ne)});function z(t){const e=(t.userPrompt||"").toString().trim();if(e)return`用户提示:
|
||
${e}`}function P(t){const e=()=>{R.get({url:`/airag/chat/getAiPosterResult/${t}`},{isTransformResponse:!1}).then(n=>{if(n.success)if(n.result==="pending"||n.result===null)c=setTimeout(e,3e3);else{const k=/#\s*{\s*domainURL\s*}/g;l.value=n.result.replace(k,h+"/sys/common/static"),s.value=!1,localStorage.removeItem(j),u.success(i.value==="image"?"图片生成成功!":"视频生成成功!")}else s.value=!1,localStorage.removeItem(j),u.warning(n.message||"生成失败!")}).catch(()=>{c=setTimeout(e,3e3)})};e()}function $(){return A(this,null,function*(){const t=(d.value||"").split(",").filter(Boolean);if(t.length===0){u.warning("请上传服装图片");return}try{const e=yield E();s.value=!0,l.value="";const n=[];if(e.modelImage){const v=(e.modelImage||"").toString().split(",")[0];v&&n.push(v)}if(n.push(...t),i.value==="image")e.imageSize="720*1280";else{u.info("敬请期待"),s.value=!1;return}const k=z(e),p={drawModelId:e.drawModelId,content:k,imageUrl:n.join(","),type:i.value==="image"?"cloth_image":"cloth_video",imageSize:e.imageSize},x=yield R.post({url:"/airag/chat/genAiPosterAsync",params:p},{isTransformResponse:!1});if(x.success&&x.result){const v=x.result;localStorage.setItem(j,v),P(v)}else s.value=!1,u.warning("提交任务失败!")}catch(e){s.value=!1}})}H(()=>{const t=localStorage.getItem(j);t&&(s.value=!0,l.value="",P(t))}),N(()=>{c&&(clearTimeout(c),c=null)});function T(){if(!l.value)return;const t=document.createElement("a");t.href=l.value,t.download=`ai-cloth-change-${Date.now()}.${i.value==="image"?"jpg":"mp4"}`,t.target="_blank",t.click()}function D(){const t="图像映射: 图一=模特; 图二=服装素材。任务: 将图二整体替换到图一身上,保持模特面部与姿态不变,服装贴合自然,光影一致;服装贴合自然,光影一致,风格写实高清。请输出高质量合成图",e="https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/model_1772695749704.jpg";d.value="https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/dress_1772700962866.jpg",M({userPrompt:t,modelImage:e})}function K(){const t="图像映射: 图一=模特; 图二=上衣素材; 图三=下装素材(可选)。任务: 仅将图二的上衣替换到图一上半身(胸部/肩部/袖口),严格不修改面部或下半身; 对齐按肩线/胸围并融合光照; 风格写实高清。请输出高质量合成图",e="https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/model_1772695749704.jpg";d.value="https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/jacket_1772701290346.jpg,https://jeecgdev.oss-cn-beijing.aliyuncs.com/upload/test/pants_1772701320192.jpg",M({userPrompt:t,modelImage:e})}return(t,e)=>{const n=oe,k=Z,p=L("a-button"),x=ie,v=ee;return f(),b(Q,null,[o("div",re,[e[11]||(e[11]=o("div",{class:"page-header"},[o("h1",{class:"page-title"},"AI 换衣"),o("div",{class:"header-desc"},"将模特图片和服装图片上传,AI自动生成换衣效果")],-1)),o("div",ce,[o("div",de,[o("div",pe,[a(k,{activeKey:i.value,"onUpdate:activeKey":e[0]||(e[0]=C=>i.value=C),tabBarStyle:{margin:0}},{default:m(()=>[a(n,{key:"image",tab:"生成图片"}),a(n,{key:"video",tab:"生成视频"})]),_:1},8,["activeKey"])]),o("div",me,[o("div",ue,[a(p,{class:"example-btn",type:"default",onClick:F(D,["prevent"])},{default:m(()=>[...e[4]||(e[4]=[I("示例:换整体服装",-1)])]),_:1}),a(p,{class:"example-btn",type:"default",onClick:F(K,["prevent"])},{default:m(()=>[...e[5]||(e[5]=[I("示例:上衣/裤子",-1)])]),_:1})]),a(_(le),{onRegister:_(B)},{clothUpload:m(()=>[o("div",ge,[a(_(X),{value:d.value,"onUpdate:value":e[1]||(e[1]=C=>d.value=C),fileMax:2,text:"上传服装"},null,8,["value"])])]),_:1},8,["onRegister"]),i.value==="video"?(f(),b("div",ve,[a(x,{message:"视频生成可能需要较长时间,请耐心等待~",type:"info","show-icon":"",closable:!1})])):w("",!0)]),o("div",fe,[a(p,{type:"primary",size:"large",block:"",class:"gen-btn",loading:s.value,onClick:$},{default:m(()=>[...e[6]||(e[6]=[I(" 生成 ",-1)])]),_:1},8,["loading"])])]),o("div",_e,[o("div",he,[!l.value&&!s.value?(f(),b("div",ye,[a(_(U),{icon:"ant-design:picture-outlined",size:"64",color:"#ccc"}),e[7]||(e[7]=o("p",null,"在左侧配置后点击「生成」",-1))])):w("",!0),s.value?(f(),b("div",be,[a(v,{size:"large",tip:`正在${i.value==="image"?"生成图片":"生成视频"},请稍候...`},null,8,["tip"])])):w("",!0),i.value==="image"&&l.value&&!s.value?(f(),b("div",we,[o("img",{src:l.value,class:"result-image",alt:"换衣结果"},null,8,Ie),o("div",ke,[a(p,{type:"primary",ghost:"",onClick:e[2]||(e[2]=C=>g.value=!0)},{default:m(()=>[a(_(U),{icon:"ant-design:eye-outlined"}),e[8]||(e[8]=I(" 预览 ",-1))]),_:1}),a(p,{type:"primary",ghost:"",onClick:T},{default:m(()=>[a(_(U),{icon:"ant-design:download-outlined"}),e[9]||(e[9]=I(" 下载 ",-1))]),_:1})])])):w("",!0),i.value==="video"&&l.value&&!s.value?(f(),b("div",xe,[o("video",{ref_key:"videoRef",ref:r,src:l.value,controls:"",class:"result-video"},null,8,Ce),o("div",Ue,[a(p,{type:"primary",ghost:"",onClick:T},{default:m(()=>[a(_(U),{icon:"ant-design:download-outlined"}),e[10]||(e[10]=I(" 下载 ",-1))]),_:1})])])):w("",!0)])])])]),g.value?(f(),O(Y,{key:0,imageUrl:l.value,onHide:e[3]||(e[3]=C=>g.value=!1)},null,8,["imageUrl"])):w("",!0)],64)}}}),nt=ae(je,[["__scopeId","data-v-fde1795d"]]);export{nt as default};
|