import{d as G,c as E,a as s,t as $,A as O,o as g,u as oe,q as se,y as I,w as u,k as v,j as z,e as r,l as J,F as R,i as x,p as F,n as le,E as Z,r as h,v as re}from"./index-CcdGGfCj.js";import{h as b,a as ie,_ as C}from"./http-CGjljVXL.js";import{_ as H}from"./_plugin-vue_export-helper-DlAUqK2U.js";const ce={class:"page-stack management-page"},ue={class:"page-header master-detail-heading"},pe={class:"page-actions"},de={class:"master-detail-panel"},me={class:"master-list"},fe={class:"master-list-toolbar"},ye={class:"master-list-items"},ve={class:"master-editor"},ge={key:1,class:"master-empty"},_e=G({__name:"MasterDetailLayout",props:{title:{},description:{},emptyText:{},hasSelection:{type:Boolean}},setup(w){return(k,y)=>(g(),E("div",ce,[s("header",ue,[s("div",null,[s("h2",null,$(w.title),1)]),s("div",pe,[O(k.$slots,"header-actions",{},void 0,!0)])]),s("section",de,[s("aside",me,[s("div",fe,[O(k.$slots,"list-toolbar",{},void 0,!0)]),s("div",ye,[O(k.$slots,"list",{},void 0,!0)])]),s("section",ve,[w.hasSelection?O(k.$slots,"detail",{key:0},void 0,!0):(g(),E("div",ge,$(w.emptyText),1))])])]))}}),he=H(_e,[["__scopeId","data-v-0b46c3ec"]]),be={class:"header-actions"},ke=["onClick"],Se={class:"editor-heading"},$e={class:"form-grid"},Ve={class:"editor-actions"},xe=G({__name:"PromptsView",setup(w){const k=["剧本反推","剧本分析","角色生成","场景生成","道具生成","分镜图生成","首尾帧生成","视频生成"],y=oe(),T=v(!1),U=v(!1),B=v(!1),j=v(!1),M=v(),_=v([]),p=v(""),L=v(!1),A=z({keyword:"",page:1,page_size:100}),i=z({name:"",type:"",content:""}),P=re(()=>_.value.find(e=>e.id===p.value));function S(e){Object.assign(i,{name:(e==null?void 0:e.name)||"",type:(e==null?void 0:e.type)||(e==null?void 0:e.category)||"",content:(e==null?void 0:e.content)||(e==null?void 0:e.version_content)||""}),p.value=(e==null?void 0:e.id)||"",L.value=!e}async function N(){var e;T.value=!0;try{const{data:t}=await b.get("/prompts",{params:A});if(_.value=((e=t.data)==null?void 0:e.items)||[],p.value){const o=_.value.find(l=>l.id===p.value);o?S(o):S()}else _.value.length&&S(_.value[0])}catch(t){V(t)}finally{T.value=!1}}function K(){S()}function Q(){return i.name.trim()?i.type?i.content.trim()?"":"请输入提示词内容":"请选择适用类型":"请输入提示词名称"}async function W(){const e=Q();if(e){y.warning(e);return}U.value=!0;try{const t={name:i.name.trim(),type:i.type,content:i.content};if(p.value)await b.put(`/prompts/${p.value}`,t);else{const{data:o}=await b.post("/prompts",t);p.value=o.data.id}L.value=!1,y.success("提示词已保存"),await N()}catch(t){V(t)}finally{U.value=!1}}async function X(){if(P.value)try{await Z.confirm(`确定要删除提示词“${P.value.name||"未命名提示词"}”吗?此操作不可恢复。`,"确认删除",{type:"warning"}),await b.delete(`/prompts/${p.value}`),y.success("提示词已删除"),p.value="",S(),await N()}catch(e){e!=="cancel"&&e!=="close"&&V(e)}}async function q(){var o,l;const e=[];let t=1;for(;;){const{data:a}=await b.get("/prompts",{params:{page:t,page_size:100}}),m=((o=a.data)==null?void 0:o.items)||[];if(e.push(...m),e.length>=Number(((l=a.data)==null?void 0:l.total)||0)||!m.length)return e;t+=1}}function Y(){return`prompts-backup-${new Date().toLocaleString("sv-SE",{timeZone:"Asia/Shanghai",hour12:!1}).replace(/[-:]/g,"").replace(" ","-")}.json`}async function ee(){B.value=!0;try{const e=await q(),t={format:"juhe-factory-prompts",version:1,exported_at:new Date().toISOString(),prompts:e.map(a=>({title:String(a.name||""),type:String(a.type||""),content:String(a.content||"")}))},o=URL.createObjectURL(new Blob([JSON.stringify(t,null,2)],{type:"application/json;charset=utf-8"})),l=document.createElement("a");l.href=o,l.download=Y(),l.click(),URL.revokeObjectURL(o),y.success(`已导出 ${e.length} 条提示词`)}catch(e){V(e)}finally{B.value=!1}}function te(e){const t=JSON.parse(e),o=Array.isArray(t)?t:t==null?void 0:t.prompts;if(!Array.isArray(o)||!o.length)throw new Error("JSON 中没有可恢复的提示词");const l=new Set;return o.map((a,m)=>{if(!a||typeof a!="object")throw new Error(`第 ${m+1} 条提示词格式无效`);const f=a,d=String(f.title||f.name||"").trim(),c=String(f.type||"").trim(),n=String(f.content||"").trim();if(!d||!c||!n)throw new Error(`第 ${m+1} 条提示词缺少标题、类型或内容`);if(l.has(d))throw new Error(`JSON 中存在重复标题:${d}`);return l.add(d),{title:d,type:c,content:n}})}function ae(){var e;(e=M.value)==null||e.click()}async function ne(e){var l;const t=e.target,o=(l=t.files)==null?void 0:l[0];if(o){j.value=!0;try{const a=te(await o.text()),m=await q(),f=new Map;for(const c of m)f.has(String(c.name||"").trim())||f.set(String(c.name||"").trim(),c);const d=a.filter(c=>f.has(c.title)).length;await Z.confirm(`文件包含 ${a.length} 条提示词,将覆盖 ${d} 条、新增 ${a.length-d} 条。是否继续恢复?`,"确认恢复提示词",{type:"warning",confirmButtonText:"确认恢复",cancelButtonText:"取消"});for(const c of a){const n={name:c.title,type:c.type,content:c.content},D=f.get(c.title);D?await b.put(`/prompts/${D.id}`,n):await b.post("/prompts",n)}y.success(`恢复完成:覆盖 ${d} 条,新增 ${a.length-d} 条`),await N()}catch(a){a!=="cancel"&&a!=="close"&&(a instanceof SyntaxError?y.error("JSON 文件格式错误"):a instanceof Error&&!("response"in a)?y.error(a.message):V(a))}finally{j.value=!1,t.value=""}}}function V(e){const t=ie(e);y.error(t.message,t.copyText)}return se(N),(e,t)=>{const o=h("el-button"),l=h("el-input"),a=h("el-empty"),m=h("el-form-item"),f=h("el-option"),d=h("el-select"),c=h("el-form");return g(),I(he,{title:"提示词管理",description:"管理系统提示词,保存后立即生效","empty-text":"请从左侧选择提示词,或点击新增提示词","has-selection":!!p.value||L.value},{"header-actions":u(()=>[s("div",be,[s("input",{ref_key:"restoreInput",ref:M,class:"restore-input",type:"file",accept:"application/json,.json",onChange:ne},null,544),r(o,{loading:B.value,disabled:j.value,onClick:ee},{default:u(()=>[r(C,{name:"Upload"}),t[4]||(t[4]=x("导出",-1))]),_:1},8,["loading","disabled"]),r(o,{loading:j.value,disabled:B.value,onClick:ae},{default:u(()=>[r(C,{name:"Download"}),t[5]||(t[5]=x("恢复",-1))]),_:1},8,["loading","disabled"])])]),"list-toolbar":u(()=>[r(l,{modelValue:A.keyword,"onUpdate:modelValue":t[0]||(t[0]=n=>A.keyword=n),clearable:"",placeholder:"搜索提示词名称"},{prefix:u(()=>[r(C,{name:"Search"})]),_:1},8,["modelValue"])]),list:u(()=>[r(o,{class:"create-prompt-button",type:"primary",onClick:K},{default:u(()=>[r(C,{name:"Plus"}),t[6]||(t[6]=x("新建提示词",-1))]),_:1}),(g(!0),E(R,null,J(_.value,n=>(g(),E("button",{key:n.id,class:le(["master-item",{active:n.id===p.value}]),type:"button",onClick:D=>S(n)},[s("strong",null,$(n.name||"未命名提示词"),1),s("span",null,$(n.type||n.category||"未分类"),1)],10,ke))),128)),!T.value&&!_.value.length?(g(),I(a,{key:0,description:"暂无提示词","image-size":70})):F("",!0)]),detail:u(()=>[s("header",Se,[s("div",null,[s("span",null,$(p.value?"编辑提示词":"新增提示词"),1),s("h3",null,$(i.name||"未命名提示词"),1)])]),r(c,{class:"editor-form",model:i,"label-position":"top"},{default:u(()=>[s("div",$e,[r(m,{label:"提示词名称",required:""},{default:u(()=>[r(l,{modelValue:i.name,"onUpdate:modelValue":t[1]||(t[1]=n=>i.name=n),modelModifiers:{trim:!0},placeholder:"请输入提示词名称"},null,8,["modelValue"])]),_:1}),r(m,{label:"适用类型",required:""},{default:u(()=>[r(d,{modelValue:i.type,"onUpdate:modelValue":t[2]||(t[2]=n=>i.type=n),placeholder:"请选择适用类型",class:"type-select",filterable:""},{default:u(()=>[(g(),E(R,null,J(k,n=>r(f,{key:n,label:n,value:n},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1})]),r(m,{class:"prompt-content-field",label:"提示词内容",required:""},{default:u(()=>[r(l,{modelValue:i.content,"onUpdate:modelValue":t[3]||(t[3]=n=>i.content=n),type:"textarea",rows:16,resize:"none",placeholder:"请输入提示词内容"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"]),s("footer",Ve,[p.value?(g(),I(o,{key:0,type:"danger",plain:"",onClick:X},{default:u(()=>[r(C,{name:"Delete"}),t[7]||(t[7]=x("删除",-1))]),_:1})):F("",!0),r(o,{type:"primary",loading:U.value,onClick:W},{default:u(()=>[...t[8]||(t[8]=[x("保存",-1)])]),_:1},8,["loading"])])]),_:1},8,["has-selection"])}}}),Be=H(xe,[["__scopeId","data-v-2c741e31"]]);export{Be as default};