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

2 lines
23 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{d as ke,u as Pe,o as t,c as l,e as v,w as b,a as e,b as f,j as K,G as ge,F as C,v as A,q as U,t as a,s as P,k as y,A as F,C as B,r as Z,H as je,p as Ve,n as Ae,a8 as ae,E as Te,x as Me,a9 as De,y as Le,z as Ue,g as Fe,O as Oe,L as Re,S as Ee,I as qe}from"./index-p1BAR2Hc.js";import{r as Ne,s as Se,t as We,q as Ie,g as _e,u as Xe,j as Ge,v as Ke,w as ze,x as Ze,y as He,z as Je,Z as Qe,C as Ye,E as et,A as tt,P as st,G as lt}from"./icons-CbZw_MCi.js";import{C as nt}from"./CreativeSelect-CikGCVMP.js";import{M as at}from"./ModelConfigDialog-BZPjXRWk.js";import{f as ot}from"./datetime-P3V4sQaP.js";import{_ as he}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{u as it}from"./useModelPrompts-BKmMdFPq.js";import{e as ut}from"./scriptAnalysisModel-D-P7Lk0D.js";const rt={class:"import-menu"},ct=["disabled"],dt=["disabled"],vt={class:"project-import"},pt={class:"project-import__list"},mt=["disabled","onClick"],yt={class:"project-import__file"},ft={class:"project-import__content"},_t={key:0,class:"project-import__empty"},gt={class:"local-import"},kt={class:"local-import__icon"},ht={key:0,class:"local-import__selected"},bt={key:1},Ct=ke({__name:"ScriptImportDialog",props:{scriptId:{},disabled:{type:Boolean},beforeImport:{type:Function}},emits:["imported"],setup(u,{emit:O}){const k=u,d=O,M=Pe(),D=y(!1),_=y(!1),n=y(!1),h=y([]),w=y(!1),g=y(!1),I=y(""),j=y(""),x=y(null),N=y(null),z=F(()=>h.value.find(c=>c.id===I.value)),L=F(()=>{const c=j.value.trim().toLocaleLowerCase();return c?h.value.filter(o=>o.name.toLocaleLowerCase().includes(c)):h.value});function W(c,o){const p=Ae(c);M.error(p.message,p.copyText,o)}async function H(c){try{const o=ae("div",{class:"script-import-confirm__content"},[ae("span",{class:"script-import-confirm__icon"},[ae(Xe,{size:22})]),ae("div",{class:"script-import-confirm__copy"},[ae("strong",`确认导入“${c}”?`),ae("p","导入成功后将替换当前剧本原文,并清空已有分析结果。该操作不可恢复。")])]);await Te.confirm(o,"确认导入剧本",{customClass:"script-import-confirm",confirmButtonText:"确认导入",cancelButtonText:"取消"})}catch(o){if(o!=="cancel"&&o!=="close")throw o;return!1}return!0}async function J(c){if(D.value=!1,c==="local"){x.value=null,n.value=!0;return}I.value="",j.value="",_.value=!0,w.value=!0;try{h.value=await B.scriptAnalysisImportProjects()}catch(o){W(o,"加载剧本反推项目失败")}finally{w.value=!1}}async function Y(){if(!(!z.value||g.value)&&await H(z.value.name)&&await k.beforeImport()){g.value=!0;try{const c=await B.importScriptAnalysisProject(k.scriptId,I.value);d("imported",c),_.value=!1,M.success("已导入项目中反推完成的剧本")}catch(c){W(c,"导入剧本失败")}finally{g.value=!1}}}function ee(){var c;(c=N.value)==null||c.click()}function te(c){var R;const o=c.target,p=(R=o.files)==null?void 0:R[0];if(o.value="",!p)return;const T=p.name.toLowerCase().slice(p.name.lastIndexOf("."));if(T!==".txt"&&T!==".doc"){M.warning("仅支持 TXT 和 DOC 文件");return}if(p.size>3*1024*1024){M.warning("剧本文件不能超过 3MB");return}x.value=p}async function se(){const c=x.value;if(!(!c||g.value)&&await H(c.name)&&await k.beforeImport()){g.value=!0;try{const o=await B.importScriptAnalysisFile(k.scriptId,c);d("imported",o),n.value=!1,M.success("本地剧本导入成功")}catch(o){W(o,"导入剧本失败")}finally{g.value=!1}}}function $(c){return c<1024?`${c} B`:`${(c/1024).toFixed(c<1024*100?1:0)} KB`}return(c,o)=>{const p=Z("el-button"),T=Z("el-popover"),R=Z("el-input"),Q=Z("el-dialog"),X=je("loading");return t(),l(C,null,[v(T,{visible:D.value,"onUpdate:visible":o[2]||(o[2]=m=>D.value=m),placement:"bottom-start",width:248,"show-arrow":!1,"popper-class":"script-import-popover",trigger:"click"},{reference:b(()=>[v(p,{loading:g.value,disabled:u.disabled},{default:b(()=>[v(f(We),{size:16}),o[8]||(o[8]=K("导入剧本 ",-1))]),_:1},8,["loading","disabled"])]),default:b(()=>[e("div",rt,[e("button",{type:"button",class:"import-menu__item",disabled:g.value,onClick:o[0]||(o[0]=m=>J("project"))},[v(f(Ne),{size:19}),o[9]||(o[9]=e("span",null,[e("strong",null,"从剧本反推项目导入"),e("small",null,"导入所有已完成的剧集")],-1))],8,ct),e("button",{type:"button",class:"import-menu__item",disabled:g.value,onClick:o[1]||(o[1]=m=>J("local"))},[v(f(Se),{size:19}),o[10]||(o[10]=e("span",null,[e("strong",null,"从本地导入"),e("small",null,"支持 TXT、DOC 文件")],-1))],8,dt)])]),_:1},8,["visible"]),v(Q,{modelValue:_.value,"onUpdate:modelValue":o[5]||(o[5]=m=>_.value=m),"align-center":"",title:"从剧本反推项目导入",width:"min(920px, calc(100vw - 28px))",class:"web-dialog creative-dialog script-import-dialog project-import-dialog"},{footer:b(()=>[v(p,{onClick:o[4]||(o[4]=m=>_.value=!1)},{default:b(()=>[...o[11]||(o[11]=[K("取消",-1)])]),_:1}),v(p,{type:"primary",loading:g.value,disabled:!I.value,onClick:Y},{default:b(()=>[...o[12]||(o[12]=[K(" 导入所选项目 ",-1)])]),_:1},8,["loading","disabled"])]),default:b(()=>[e("div",vt,[v(R,{modelValue:j.value,"onUpdate:modelValue":o[3]||(o[3]=m=>j.value=m),clearable:"",placeholder:"搜索项目名称",class:"project-import__search"},{prefix:b(()=>[v(f(Ie),{size:17})]),_:1},8,["modelValue"]),ge((t(),l("div",pt,[(t(!0),l(C,null,A(L.value,m=>(t(),l("button",{key:m.id,type:"button",class:Ve(["project-import__item",{active:I.value===m.id}]),disabled:g.value,onClick:oe=>I.value=m.id},[e("span",yt,[v(f(_e),{size:19})]),e("span",ft,[e("strong",null,a(m.name),1),e("small",null," 已完成 "+a(m.episode_count)+" 集 · "+a(m.char_count)+" 字 · "+a(f(ot)(m.updated_at)),1)])],10,mt))),128)),!w.value&&!L.value.length?(t(),l("div",_t,[j.value.trim()?(t(),U(f(Ie),{key:0,size:30})):(t(),U(f(_e),{key:1,size:30})),e("strong",null,a(j.value.trim()?"未找到匹配项目":"暂无可导入的项目"),1),e("span",null,a(j.value.trim()?"请尝试其他项目名称":"仅展示至少有一集已完成剧本反推的项目"),1)])):P("",!0)])),[[X,w.value]])])]),_:1},8,["modelValue"]),v(Q,{modelValue:n.value,"onUpdate:modelValue":o[7]||(o[7]=m=>n.value=m),"align-center":"",title:"从本地导入",width:"min(480px, calc(100vw - 28px))",class:"web-dialog creative-dialog script-import-dialog local-import-dialog"},{footer:b(()=>[v(p,{onClick:o[6]||(o[6]=m=>n.value=!1)},{default:b(()=>[...o[13]||(o[13]=[K("取消",-1)])]),_:1}),v(p,{type:"primary",loading:g.value,disabled:!x.value,onClick:se},{default:b(()=>[...o[14]||(o[14]=[K(" 导入文件 ",-1)])]),_:1},8,["loading","disabled"])]),default:b(()=>[e("input",{ref_key:"fileInput",ref:N,class:"script-import-file",type:"file",accept:".txt,.doc",onChange:te},null,544),ge((t(),l("div",gt,[e("span",kt,[v(f(Se),{size:26})]),e("strong",null,a(x.value?"已选择剧本文件":"选择本地剧本文件"),1),x.value?(t(),l("div",ht,[v(f(_e),{size:18}),e("span",null,[e("strong",null,a(x.value.name),1),e("small",null,a($(x.value.size)),1)])])):(t(),l("span",bt,"支持 TXT、DOC 格式,文件最大 3MB")),v(p,{disabled:g.value,onClick:ee},{default:b(()=>[K(a(x.value?"重新选择":"选择文件"),1)]),_:1},8,["disabled"])])),[[X,g.value]])]),_:1},8,["modelValue"])],64)}}}),wt=he(Ct,[["__scopeId","data-v-244079b6"]]),xt={class:"analysis-result"},$t={class:"analysis-result__header"},St={key:0,class:"analysis-state is-running"},It={key:1,class:"analysis-state is-failed"},zt={key:2,class:"analysis-state"},Pt={class:"analysis-categories"},jt=["title","onClick"],Vt={class:"analysis-content"},At={key:0,class:"result-stack tag-section-grid"},Tt={class:"result-block"},Bt={class:"tag-list"},Mt={key:0,class:"empty-copy"},Dt={class:"result-block"},Lt={class:"tag-list scene-tags"},Ut={key:0,class:"empty-copy"},Ft={key:1,class:"result-stack selling-layout"},Ot={class:"summary-card"},Rt={class:"highlight-list content-card-grid"},Et={key:0,class:"empty-copy"},qt={key:2,class:"result-stack"},Nt={class:"result-block prose-block"},Wt={class:"result-block"},Xt={class:"outline-list"},Gt={class:"result-block"},Kt={class:"emotion-list content-card-grid"},Zt={class:"result-block"},Ht={class:"episode-list content-card-grid"},Jt={key:0},Qt={key:3,class:"result-stack"},Yt={class:"result-block"},es={class:"character-list content-card-grid"},ts={key:0,class:"empty-copy"},ss={key:4,class:"result-stack"},ls={class:"opening-grid"},ns={class:"result-block"},as={class:"tag-list"},os={class:"result-block prose-block"},is={key:0,class:"result-block prose-block"},us={key:5,class:"result-stack"},rs={class:"result-block"},cs={class:"hook-list"},ds={class:"hook-number"},vs={class:"result-block paywall-block"},ps={class:"paywall-list content-card-grid"},ms={key:6,class:"result-stack"},ys={class:"result-block"},fs={class:"content-card-grid custom-analysis-list"},_s={key:0},gs={key:0,class:"empty-copy"},ks={key:0,class:"result-block"},hs={class:"content-card-grid custom-analysis-list"},bs={key:1,class:"analysis-empty"},Cs={key:3,class:"analysis-error-message"},ws=ke({__name:"ScriptAnalysisResult",props:{result:{},characters:{},status:{},message:{}},setup(u){const O=u,k=y("tags"),d=F(()=>{var _,n,h,w;return[{key:"tags",label:"标签",title:"标签",icon:Ze},{key:"selling",label:"看点",title:"看点卖点",icon:He},{key:"story",label:"剧情",title:"剧情结构",icon:ze},{key:"characters",label:"角色",title:"角色库",icon:Je},{key:"opening",label:"开篇",title:"黄金三秒",icon:Qe},{key:"hooks",label:"钩子",title:"单集钩子",icon:Ye},...(n=(_=O.result)==null?void 0:_.custom_analysis)!=null&&n.length||(w=(h=O.result)==null?void 0:h.unmatched_objectives)!=null&&w.length?[{key:"custom",label:"其他",title:"其他分析",icon:et}]:[]]}),M=F(()=>O.status==="succeeded"&&!!Object.keys(O.result||{}).length),D=F(()=>O.characters||[]);return(_,n)=>{var h,w,g,I,j,x,N,z,L,W,H,J,Y,ee,te,se,$,c,o,p,T,R,Q,X,m,oe,E,re,ie,le,ne,ce,de,G,ve,pe,me,ye,fe,i,r,V;return t(),l("article",xt,[e("header",$t,[n[0]||(n[0]=e("strong",null,"分析结果",-1)),u.status==="queued"||u.status==="running"?(t(),l("span",St,a(u.message||"正在分析剧本"),1)):u.status==="failed"?(t(),l("span",It," 分析失败 ")):M.value?(t(),l("span",zt,"已完成")):P("",!0)]),M.value?(t(),l(C,{key:0},[e("nav",Pt,[(t(!0),l(C,null,A(d.value,s=>(t(),l("button",{key:s.key,type:"button",class:Ve({active:k.value===s.key}),title:s.title,onClick:S=>k.value=s.key},[(t(),U(Me(s.icon),{size:16})),e("span",null,a(s.label),1)],10,jt))),128))]),e("div",Vt,[k.value==="tags"?(t(),l("section",At,[e("div",Tt,[n[1]||(n[1]=e("h3",null,"短剧标签",-1)),e("div",Bt,[(t(!0),l(C,null,A(((w=(h=u.result)==null?void 0:h.tags)==null?void 0:w.drama_tags)||[],s=>(t(),l("span",{key:s},a(s),1))),128)),(j=(I=(g=u.result)==null?void 0:g.tags)==null?void 0:I.drama_tags)!=null&&j.length?P("",!0):(t(),l("p",Mt," 暂无标签 "))])]),e("div",Dt,[n[2]||(n[2]=e("h3",null,"适用场景标签",-1)),e("div",Lt,[(t(!0),l(C,null,A(((N=(x=u.result)==null?void 0:x.tags)==null?void 0:N.applicable_scene_tags)||[],s=>(t(),l("span",{key:s},a(s),1))),128)),(W=(L=(z=u.result)==null?void 0:z.tags)==null?void 0:L.applicable_scene_tags)!=null&&W.length?P("",!0):(t(),l("p",Ut," 暂无适用场景标签 "))])])])):k.value==="selling"?(t(),l("section",Ft,[e("div",Ot,[n[3]||(n[3]=e("span",null,"一句话总结",-1)),e("p",null,a(((J=(H=u.result)==null?void 0:H.selling_point)==null?void 0:J.summary)||"暂无总结"),1)]),e("div",Rt,[(t(!0),l(C,null,A(((ee=(Y=u.result)==null?void 0:Y.selling_point)==null?void 0:ee.highlights)||[],(s,S)=>(t(),l("article",{key:`${s.type}-${S}`},[e("span",null,a(s.type),1),e("p",null,a(s.content),1)]))),128)),($=(se=(te=u.result)==null?void 0:te.selling_point)==null?void 0:se.highlights)!=null&&$.length?P("",!0):(t(),l("p",Et," 暂无核心看点 "))])])):k.value==="story"?(t(),l("section",qt,[e("div",Nt,[n[4]||(n[4]=e("h3",null,"短剧简介",-1)),e("p",null,a(((o=(c=u.result)==null?void 0:c.story_structure)==null?void 0:o.synopsis)||"暂无简介"),1)]),e("div",Wt,[n[5]||(n[5]=e("h3",null,"故事大纲",-1)),e("ol",Xt,[(t(!0),l(C,null,A(((T=(p=u.result)==null?void 0:p.story_structure)==null?void 0:T.story_outline)||[],(s,S)=>(t(),l("li",{key:S},a(s),1))),128))])]),e("div",Gt,[n[6]||(n[6]=e("h3",null,"情绪大纲",-1)),e("div",Kt,[(t(!0),l(C,null,A(((Q=(R=u.result)==null?void 0:R.story_structure)==null?void 0:Q.emotion_outline)||[],(s,S)=>(t(),l("article",{key:S},[e("header",null,[e("strong",null,a(s.stage),1),e("span",null,a(s.emotion),1)]),e("p",null,a(s.description),1)]))),128))])]),e("div",Zt,[n[7]||(n[7]=e("h3",null,"分集大纲",-1)),e("div",Ht,[(t(!0),l(C,null,A(((m=(X=u.result)==null?void 0:X.story_structure)==null?void 0:m.episode_outlines)||[],s=>(t(),l("article",{key:s.episode_no},[e("header",null,[e("strong",null,"第 "+a(s.episode_no)+" 集",1),e("span",null,a(s.title),1)]),e("p",null,a(s.outline),1),s.emotion?(t(),l("small",Jt,"情绪:"+a(s.emotion),1)):P("",!0)]))),128))])])])):k.value==="characters"?(t(),l("section",Qt,[e("div",Yt,[e("div",es,[(t(!0),l(C,null,A(D.value,s=>(t(),l("article",{key:s.id},[e("header",null,[e("strong",null,a(s.name),1),e("span",null,a(s.faction),1)]),e("p",null,a(s.biography),1),e("dl",null,[s.motivation?(t(),l(C,{key:0},[n[8]||(n[8]=e("dt",null,"核心动机",-1)),e("dd",null,a(s.motivation),1)],64)):P("",!0),s.relationship?(t(),l(C,{key:1},[n[9]||(n[9]=e("dt",null,"人物关系",-1)),e("dd",null,a(s.relationship),1)],64)):P("",!0)])]))),128)),D.value.length?P("",!0):(t(),l("p",ts," 暂无人物小传 "))])])])):k.value==="opening"?(t(),l("section",ss,[e("div",ls,[e("article",null,[n[10]||(n[10]=e("span",null,"开篇第一个画面",-1)),e("p",null,a(((E=(oe=u.result)==null?void 0:oe.opening_hook)==null?void 0:E.first_scene)||"暂无"),1)]),e("article",null,[n[11]||(n[11]=e("span",null,"第一句台词",-1)),e("p",null,a(((ie=(re=u.result)==null?void 0:re.opening_hook)==null?void 0:ie.first_line)||"暂无"),1)])]),e("div",ns,[n[12]||(n[12]=e("h3",null,"抓眼方式",-1)),e("div",as,[(t(!0),l(C,null,A(((ne=(le=u.result)==null?void 0:le.opening_hook)==null?void 0:ne.attention_methods)||[],s=>(t(),l("span",{key:s},a(s),1))),128))])]),e("div",os,[n[13]||(n[13]=e("h3",null,"分析",-1)),e("p",null,a(((de=(ce=u.result)==null?void 0:ce.opening_hook)==null?void 0:de.analysis)||"暂无分析"),1)]),(ve=(G=u.result)==null?void 0:G.opening_hook)!=null&&ve.optimization?(t(),l("div",is,[n[14]||(n[14]=e("h3",null,"优化建议",-1)),e("p",null,a(u.result.opening_hook.optimization),1)])):P("",!0)])):k.value==="hooks"?(t(),l("section",us,[e("div",rs,[n[15]||(n[15]=e("h3",null,"前十集逐集钩子",-1)),e("div",cs,[(t(!0),l(C,null,A(((pe=u.result)==null?void 0:pe.episode_hooks)||[],s=>(t(),l("article",{key:s.episode_no},[e("div",ds,a(s.episode_no),1),e("div",null,[e("header",null,[e("strong",null,"第 "+a(s.episode_no)+" 集",1),e("span",null,a(s.hook_type),1)]),e("p",null,a(s.hook),1),e("small",null,a(s.basis),1)])]))),128))])]),e("div",vs,[n[16]||(n[16]=e("h3",null,"第十集付费卡点候选",-1)),e("div",ps,[(t(!0),l(C,null,A(((me=u.result)==null?void 0:me.episode_10_paywall_hooks)||[],(s,S)=>(t(),l("article",{key:S},[e("header",null,[e("strong",null,"候选 "+a(S+1),1),e("span",null,a(s.hook_type),1)]),e("p",null,a(s.content),1),e("small",null,a(s.appeal),1)]))),128))])])])):(t(),l("section",ms,[e("div",ys,[n[17]||(n[17]=e("h3",null,"补充分析",-1)),e("div",fs,[(t(!0),l(C,null,A(((ye=u.result)==null?void 0:ye.custom_analysis)||[],(s,S)=>{var ue;return t(),l("article",{key:`${s.objective}-${S}`},[e("header",null,[e("strong",null,a(s.objective),1)]),e("p",null,a(s.conclusion),1),(ue=s.evidence)!=null&&ue.length?(t(),l("small",_s,"原文依据:"+a(s.evidence.join("")),1)):P("",!0)])}),128)),(i=(fe=u.result)==null?void 0:fe.custom_analysis)!=null&&i.length?P("",!0):(t(),l("p",gs," 暂无补充分析 "))])]),(V=(r=u.result)==null?void 0:r.unmatched_objectives)!=null&&V.length?(t(),l("div",ks,[n[18]||(n[18]=e("h3",null,"无法完成的目标",-1)),e("div",hs,[(t(!0),l(C,null,A(u.result.unmatched_objectives,(s,S)=>(t(),l("article",{key:`${s.objective}-${S}`},[e("header",null,[e("strong",null,a(s.objective),1)]),e("p",null,a(s.reason),1)]))),128))])])):P("",!0)]))])],64)):(t(),l("div",bs,[u.status==="queued"||u.status==="running"?(t(),U(f(Ge),{key:0,class:"analysis-loading-icon",size:38})):u.status==="failed"?(t(),U(f(Ke),{key:1,class:"analysis-failed-icon",size:38,"stroke-width":"1.3"})):(t(),U(f(ze),{key:2,size:38,"stroke-width":"1.3"})),e("strong",null,a(u.status==="queued"||u.status==="running"?"正在分析剧本":u.status==="failed"?"分析失败":"尚未开始分析"),1),u.status==="failed"?(t(),l("p",Cs,a(u.message||"剧本分析失败,请重试"),1)):P("",!0)]))])}}}),xs=he(ws,[["__scopeId","data-v-c62f1ab5"]]),$s={class:"script-context-bar"},Ss={class:"workbench-heading"},Is={key:1,class:"name-display"},zs={class:"script-context-actions creative-page-actions"},Ps={class:"workbench-panels"},js={class:"workbench-panel"},Vs=ke({__name:"ScriptAnalysisWorkbenchView",setup(u){const O=Fe(),k=Pe(),d=y(null),M=y({styles:[],models:[]}),D=y([]),_=y(""),n=y(""),h=y(""),w=y(!1),g=y(!1),I=y(!1),j=y(!1),x=y(!1),N=y(null);let z=null,L;const{prompts:W,promptSelections:H,loadPrompts:J,selectPrompt:Y,createPrompt:ee,updatePrompt:te,deletePrompt:se}=it(),$=F(()=>{var i,r;return((i=d.value)==null?void 0:i.analysis_status)==="queued"||((r=d.value)==null?void 0:r.analysis_status)==="running"}),c=F(()=>{var i;return $.value&&((i=d.value)==null?void 0:i.analysis_message)==="正在取消分析"}),o=F(()=>D.value.some(i=>i.model_type==="text"&&!!i.model_id)),p=y({name:"",sourceContent:"",resultContent:""}),T=F(()=>_.value!==p.value.name||n.value!==p.value.sourceContent||h.value!==p.value.resultContent),R=F(()=>{const i=_.value||"未命名剧本",r=Array.from(i).reduce((V,s)=>V+(/^[\x00-\xff]$/.test(s)?.6:1),0);return`${Math.min(420,Math.max(160,Math.ceil(r*16+28)))}px`});async function Q(){var i;x.value=!0,await qe(),(i=N.value)==null||i.focus()}function X(){p.value={name:_.value,sourceContent:n.value,resultContent:h.value}}async function m(){if(w.value||!T.value)return;await G()&&T.value&&await G()}function oe(){x.value=!1,m()}function E(i,r="加载失败"){const V=Ae(i);k.error(V.message,V.copyText,r)}async function re(){w.value=!0;try{const[i,r,V]=await Promise.all([B.scriptAnalysis(String(O.params.scriptId)),B.options(),B.userModelConfigs("script_analysis")]);d.value=i,M.value=r,D.value=await ut(r,V),await J(["剧本分析"]),_.value=d.value.name,n.value=d.value.source_content,h.value=d.value.result_content,X(),le()}catch(i){E(i)}finally{w.value=!1}}async function ie(){if(d.value)try{const i=await B.scriptAnalysis(d.value.id);d.value=i,h.value=i.result_content,p.value.resultContent=i.result_content,le()}catch(i){ne(),E(i,"刷新分析状态失败")}}function le(){$.value&&!L?L=setInterval(ie,2500):$.value||ne()}function ne(){L&&clearInterval(L),L=void 0}async function ce(i){var V;const r=(V=i.prompt_reverse)==null?void 0:V.model_id;if(!r)return k.warning("请选择文本模型");j.value=!0;try{await B.saveUserModelConfig("script_analysis","text",r),D.value=await B.userModelConfigs("script_analysis"),I.value=!1,k.success("模型配置已保存")}catch(s){E(s,"保存模型配置失败")}finally{j.value=!1}}async function de(){if(!d.value)return!1;const i={name:_.value,sourceContent:n.value,resultContent:h.value};g.value=!0;try{const r=await B.updateScriptAnalysis(d.value.id,{name:i.name.trim()||"未命名剧本",source_content:i.sourceContent,result_content:i.resultContent});return d.value=r,_.value===i.name&&(_.value=r.name),n.value===i.sourceContent&&(n.value=r.source_content),h.value===i.resultContent&&(h.value=r.result_content),p.value={name:r.name,sourceContent:r.source_content,resultContent:r.result_content},x.value=!1,!0}catch(r){return E(r,"保存失败"),!1}finally{g.value=!1}}function G(){return z||(z=de().finally(()=>{z=null}),z)}async function ve(){if(!(!d.value||$.value)){if(!o.value){I.value=!0,k.warning("请先选择并保存剧本分析文本模型");return}if(!n.value.trim()){k.warning("请先填写剧本原文");return}if(await G())try{await B.analyzeScriptAnalysis(d.value.id),d.value.analysis_status="queued",d.value.analysis_message="剧本分析排队中",le(),k.success("剧本分析任务已提交")}catch(i){E(i,"开始分析失败")}}}async function pe(){if(!(!d.value||!$.value)){try{await Te.confirm("确定取消当前剧本分析任务吗?取消后已扣积分不退。","取消分析",{type:"warning",confirmButtonText:"确认取消",cancelButtonText:"继续分析"})}catch(i){if(i==="cancel"||i==="close")return;throw i}try{await B.cancelScriptAnalysis(d.value.id),d.value.analysis_message="正在取消分析",await ie()}catch(i){E(i,"取消分析失败")}}}function me(){$.value?pe():ve()}function ye(i){d.value=i,_.value=i.name,n.value=i.source_content,h.value=i.result_content,X()}async function fe(){return!(z&&!await z||T.value&&!await G())}return De(async()=>z&&!await z?!1:T.value?G():!0),Le(()=>{re()}),Ue(ne),(i,r)=>{const V=Z("RouterLink"),s=Z("el-input"),S=Z("el-icon"),ue=Z("el-button"),Be=je("loading");return t(),U(nt,{class:"script-workbench-shell"},{default:b(()=>{var be,Ce,we,xe;return[e("section",$s,[e("div",Ss,[v(V,{class:"back-button",to:{name:"script-analysis"},title:"返回"},{default:b(()=>[v(f(tt),{size:18})]),_:1}),x.value?(t(),U(s,{key:0,ref_key:"nameInputRef",ref:N,modelValue:_.value,"onUpdate:modelValue":r[0]||(r[0]=q=>_.value=q),class:"name-input",style:Oe({"--name-input-width":R.value}),maxlength:"120",placeholder:"未命名剧本",onBlur:oe},null,8,["modelValue","style"])):(t(),l("div",Is,[e("strong",null,a(_.value||"未命名剧本"),1),e("button",{type:"button",class:"name-edit-button",title:"编辑剧本名",onClick:Q},[v(f(st),{size:15})])]))]),e("div",zs,[v(ue,{onClick:r[1]||(r[1]=q=>I.value=!0)},{default:b(()=>[v(S,null,{default:b(()=>[v(f(Re))]),_:1}),r[4]||(r[4]=K("模型配置",-1))]),_:1}),d.value?(t(),U(wt,{key:0,"script-id":d.value.id,disabled:w.value||$.value,"before-import":fe,onImported:ye},null,8,["script-id","disabled"])):P("",!0),v(ue,{class:"analyze-button",type:$.value?"danger":"primary",loading:g.value,disabled:w.value||c.value||!$.value&&!n.value.trim(),onClick:me},{default:b(()=>{var q,$e;return[$.value?(t(),U(S,{key:0},{default:b(()=>[v(f(Ee))]),_:1})):(t(),U(f(lt),{key:1,size:16})),K(a($.value?c.value?"取消中":"取消任务":((q=d.value)==null?void 0:q.analysis_status)==="succeeded"||(($e=d.value)==null?void 0:$e.analysis_status)==="failed"?"重新分析":"开始分析"),1)]}),_:1},8,["type","loading","disabled"])])]),ge((t(),l("section",Ps,[e("article",js,[e("header",null,[r[5]||(r[5]=e("strong",null,"剧本原文",-1)),e("span",null,a(n.value.length)+" 字",1)]),v(s,{modelValue:n.value,"onUpdate:modelValue":r[2]||(r[2]=q=>n.value=q),type:"textarea",resize:"none",placeholder:"在这里粘贴或编辑剧本原文",onBlur:m},null,8,["modelValue"])]),v(xs,{result:(be=d.value)==null?void 0:be.analysis_result,characters:(Ce=d.value)==null?void 0:Ce.characters,status:(we=d.value)==null?void 0:we.analysis_status,message:(xe=d.value)==null?void 0:xe.analysis_message},null,8,["result","characters","status","message"])])),[[Be,w.value]]),v(at,{modelValue:I.value,"onUpdate:modelValue":r[3]||(r[3]=q=>I.value=q),"analysis-only":"","project-type":"script_analysis",options:M.value,configs:D.value,saving:j.value,prompts:f(W),"prompt-selections":f(H),onSave:ce,onPromptSelect:f(Y),onPromptCreate:f(ee),onPromptUpdate:f(te),onPromptDelete:f(se)},null,8,["modelValue","options","configs","saving","prompts","prompt-selections","onPromptSelect","onPromptCreate","onPromptUpdate","onPromptDelete"])]}),_:1})}}}),Os=he(Vs,[["__scopeId","data-v-9f1a6f24"]]);export{Os as default};