Files
JuYou/API/static/web/assets/RedrawProjectView-BOC15O0-.js
T
2026-08-25 17:59:42 +08:00

2 lines
6.3 KiB
JavaScript

import{d as oe,u as te,y as ae,q as w,w as g,g as se,C as u,n as re,h as ne,k as p,o as d,a as t,e as m,b as s,t as c,j as V,p as T,L as le,D as z,G as ie,c as C,F as de,v as ce,s as E,A as F,r as A,H as ue,f as pe,E as me}from"./index-p1BAR2Hc.js";import{A as fe,F as U,T as ve}from"./icons-CbZw_MCi.js";import{P as _e}from"./ProjectSearchField-C68_CxpU.js";import{C as we}from"./CreativeSelect-CikGCVMP.js";import{L as ge}from"./LoadingMedia-q1A6xJc7.js";import{M as ye}from"./ModelConfigDialog-BZPjXRWk.js";import{u as he}from"./useModelPrompts-BKmMdFPq.js";import{f as ke}from"./datetime-P3V4sQaP.js";import{f as be}from"./media-Do63jPLX.js";import{_ as Ce}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Pe={class:"redraw-project-header"},je={class:"redraw-project-heading"},Le={class:"redraw-project-actions creative-page-actions"},Me={class:"redraw-episode-toolbar"},Ve={class:"redraw-episode-grid"},Ee=["onClick"],Se={class:"redraw-episode-cover"},xe={class:"redraw-episode-copy"},Be=["onClick"],De={class:"redraw-episode-meta"},Re={key:0,class:"redraw-episode-empty"},Te=oe({__name:"RedrawProjectView",setup(ze){const $=se(),P=ne(),v=te(),i=String($.params.projectId),l=p(),S=p({styles:[],models:[]}),y=p(!1),_=p(!1),h=p(!1),j=p(!1),f=p(""),I=F(()=>{var e;return(e=l.value)==null?void 0:e.model_configs.some(o=>o.purpose==="prompt_reverse"&&!!o.model_id)}),L=F(()=>{var r;const e=f.value.trim().toLocaleLowerCase(),o=((r=l.value)==null?void 0:r.episodes)||[];return e?o.filter(n=>n.name.toLocaleLowerCase().includes(e)||String(n.episode_no).includes(e)||`第${n.episode_no}集`.includes(e.replaceAll(" ",""))):o}),{prompts:N,promptSelections:O,loadPrompts:q,selectPrompt:G,createPrompt:H,updatePrompt:J,deletePrompt:K}=he(),Q={draft:{label:"待上传",tone:"is-draft"},uploaded:{label:"待反推",tone:"is-uploaded"},analyzing:{label:"分镜反推中",tone:"is-analyzing"},review:{label:"待反推剧本",tone:"is-ready"},generating:{label:"剧本反推中",tone:"is-generating"},failed:{label:"处理失败",tone:"is-failed"}};function x(e){return e.status==="review"&&e.has_redraw_script?{label:"已完成",tone:"is-completed"}:Q[e.status]||{label:e.status,tone:"is-draft"}}async function M(){y.value=!0;try{const[e,o]=await Promise.all([u.project(i),u.options()]);if(S.value=o,l.value=e,l.value.project_type!=="video_redraw"){await P.replace({name:"drama-project",params:{projectId:i}});return}if(!l.value.model_configs.some(n=>n.purpose==="prompt_reverse"&&!!n.model_id)){const n=o.models.find(b=>b.model_type==="text"&&b.multimodal);n&&(await u.saveModels(i,{prompt_reverse:{model_id:n.id,settings:{prompt:""}}}),l.value=await u.project(i))}}catch(e){k(e,"加载项目失败")}finally{y.value=!1}}async function W(){h.value=!0,await q(["剧本反推"])}async function X(e){const o=e.prompt_reverse;if(!(o!=null&&o.model_id))return v.warning("请选择反推模型");j.value=!0;try{await u.saveModels(i,{prompt_reverse:o}),h.value=!1,v.success("模型配置已保存"),await M()}catch(r){k(r,"保存模型配置失败")}finally{j.value=!1}}async function B(){if(!_.value){_.value=!0;try{const e=await u.createEpisode(i);v.success(`第 ${e.episode_no} 集已创建`),await P.push({name:"redraw-workbench",params:{projectId:i,episodeId:e.id}})}catch(e){k(e,"创建剧集失败")}finally{_.value=!1}}}async function Y(e){await P.push({name:"redraw-workbench",params:{projectId:i,episodeId:e}})}async function Z(e,o){try{await me.confirm(`确定删除第 ${o} 集吗?`,"删除剧集",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消"}),await u.deleteEpisode(i,e),v.success("剧集已删除"),await M()}catch(r){r!=="cancel"&&r!=="close"&&k(r,"删除剧集失败")}}function k(e,o){const r=re(e);v.error(r.message,r.copyText,o)}return ae(M),(e,o)=>{const r=A("RouterLink"),n=A("el-button"),b=ue("loading");return d(),w(we,{"page-title":"剧本反推"},{default:g(()=>{var D;return[t("section",Pe,[m(r,{class:"redraw-project-back",to:{name:"redraw-projects"}},{default:g(()=>[m(s(fe),{size:18})]),_:1}),t("div",je,[t("strong",null,c(((D=l.value)==null?void 0:D.name)||"项目"),1)]),t("div",Le,[m(n,{icon:s(le),class:T({"model-warning":!I.value}),onClick:W},{default:g(()=>[...o[2]||(o[2]=[V(" 模型配置 ",-1)])]),_:1},8,["icon","class"]),m(n,{type:"primary",icon:s(z),loading:_.value,onClick:B},{default:g(()=>[...o[3]||(o[3]=[V(" 创建剧集 ",-1)])]),_:1},8,["icon","loading"])])]),t("section",Me,[m(_e,{modelValue:f.value,"onUpdate:modelValue":o[0]||(o[0]=a=>f.value=a),placeholder:"搜索剧集名称或集数"},null,8,["modelValue"]),t("span",null,c(L.value.length)+" 个剧集",1)]),ie((d(),C("section",Ve,[(d(!0),C(de,null,ce(L.value,a=>{var R;return d(),C("article",{key:a.id,class:"redraw-episode-card",onClick:ee=>Y(a.id)},[t("div",Se,[a.source_video_url?(d(),w(ge,{key:0,type:"video",src:s(be)(a.source_video_url),muted:"",playsinline:"",preload:"metadata"},null,8,["src"])):(d(),w(s(U),{key:1,size:34,"stroke-width":"1.25"})),t("span",{class:T(["redraw-episode-status",x(a).tone])},c(x(a).label),3)]),t("div",xe,[t("div",null,[t("strong",null,c(a.name),1)]),t("button",{type:"button",onClick:pe(ee=>Z(a.id,a.episode_no),["stop"])},[m(s(ve),{size:16})],8,Be)]),t("div",De,[t("span",null,c(a.storyboard_count||0)+" 个分镜",1),t("time",null,c(s(ke)(a.updated_at||((R=l.value)==null?void 0:R.updated_at)||"")),1)])],8,Ee)}),128)),!y.value&&!L.value.length?(d(),C("div",Re,[m(s(U),{size:38,"stroke-width":"1.2"}),t("strong",null,c(f.value.trim()?"没有匹配的剧集":"还没有剧集"),1),t("p",null,c(f.value.trim()?"换一个关键词继续查找":"创建第一集后上传原视频开始反推"),1),f.value.trim()?E("",!0):(d(),w(n,{key:0,type:"primary",icon:s(z),loading:_.value,onClick:B},{default:g(()=>[...o[4]||(o[4]=[V(" 创建剧集 ",-1)])]),_:1},8,["icon","loading"]))])):E("",!0)])),[[b,y.value]]),l.value?(d(),w(ye,{key:0,modelValue:h.value,"onUpdate:modelValue":o[1]||(o[1]=a=>h.value=a),"analysis-only":"",options:S.value,configs:l.value.model_configs,prompts:s(N),"prompt-selections":s(O),saving:j.value,onSave:X,onPromptSelect:s(G),onPromptCreate:s(H),onPromptUpdate:s(J),onPromptDelete:s(K)},null,8,["modelValue","options","configs","prompts","prompt-selections","saving","onPromptSelect","onPromptCreate","onPromptUpdate","onPromptDelete"])):E("",!0)]}),_:1})}}}),Je=Ce(Te,[["__scopeId","data-v-e8312bf0"]]);export{Je as default};