koishi-plugin-media-luna 0.0.31 → 0.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/client/components/ConfigRenderer.vue +119 -1
  2. package/dist/index.js +2 -2
  3. package/dist/style.css +1 -1
  4. package/lib/core/api/setup-api.d.ts.map +1 -1
  5. package/lib/core/api/setup-api.js +22 -0
  6. package/lib/core/api/setup-api.js.map +1 -1
  7. package/lib/core/medialuna.service.d.ts +20 -0
  8. package/lib/core/medialuna.service.d.ts.map +1 -1
  9. package/lib/core/medialuna.service.js +58 -8
  10. package/lib/core/medialuna.service.js.map +1 -1
  11. package/lib/core/plugin-loader.d.ts +5 -1
  12. package/lib/core/plugin-loader.d.ts.map +1 -1
  13. package/lib/core/plugin-loader.js +49 -2
  14. package/lib/core/plugin-loader.js.map +1 -1
  15. package/lib/core/types.d.ts +2 -0
  16. package/lib/core/types.d.ts.map +1 -1
  17. package/lib/core/types.js.map +1 -1
  18. package/lib/index.d.ts.map +1 -1
  19. package/lib/index.js +17 -5
  20. package/lib/index.js.map +1 -1
  21. package/lib/plugins/connector-chatluna/api.d.ts +6 -0
  22. package/lib/plugins/connector-chatluna/api.d.ts.map +1 -0
  23. package/lib/plugins/connector-chatluna/api.js +161 -0
  24. package/lib/plugins/connector-chatluna/api.js.map +1 -0
  25. package/lib/plugins/connector-chatluna/config.d.ts +41 -0
  26. package/lib/plugins/connector-chatluna/config.d.ts.map +1 -0
  27. package/lib/plugins/connector-chatluna/config.js +142 -0
  28. package/lib/plugins/connector-chatluna/config.js.map +1 -0
  29. package/lib/plugins/connector-chatluna/connector.d.ts +4 -0
  30. package/lib/plugins/connector-chatluna/connector.d.ts.map +1 -0
  31. package/lib/plugins/connector-chatluna/connector.js +114 -0
  32. package/lib/plugins/connector-chatluna/connector.js.map +1 -0
  33. package/lib/plugins/connector-chatluna/index.d.ts +5 -0
  34. package/lib/plugins/connector-chatluna/index.d.ts.map +1 -0
  35. package/lib/plugins/connector-chatluna/index.js +53 -0
  36. package/lib/plugins/connector-chatluna/index.js.map +1 -0
  37. package/lib/plugins/connector-chatluna/tools.d.ts +11 -0
  38. package/lib/plugins/connector-chatluna/tools.d.ts.map +1 -0
  39. package/lib/plugins/connector-chatluna/tools.js +353 -0
  40. package/lib/plugins/connector-chatluna/tools.js.map +1 -0
  41. package/lib/plugins/index.d.ts +3 -1
  42. package/lib/plugins/index.d.ts.map +1 -1
  43. package/lib/plugins/index.js +5 -2
  44. package/lib/plugins/index.js.map +1 -1
  45. package/lib/plugins/koishi-commands/index.d.ts.map +1 -1
  46. package/lib/plugins/koishi-commands/index.js +202 -230
  47. package/lib/plugins/koishi-commands/index.js.map +1 -1
  48. package/lib/types/index.d.ts +2 -0
  49. package/lib/types/index.d.ts.map +1 -1
  50. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import{defineComponent as oe,computed as G,ref as w,resolveComponent as A,createElementBlock as n,openBlock as l,createElementVNode as e,createCommentVNode as o,Fragment as D,renderList as ee,normalizeClass as te,toDisplayString as $,createVNode as r,withKeys as as,withCtx as V,createStaticVNode as it,createBlock as se,warn as ns,watch as ye,unref as ae,inject as Ue,isRef as os,getCurrentInstance as Ae,provide as is,renderSlot as We,mergeProps as rs,Transition as Ze,withDirectives as Te,normalizeStyle as Nt,vShow as Oe,shallowReactive as ds,onMounted as he,resolveDynamicComponent as lt,withModifiers as fe,isVNode as Ft,render as _t,createTextVNode as E,onUnmounted as Ye,Teleport as us,createSlots as cs,onBeforeUnmount as vs,h as yt,KeepAlive as ps}from"vue";import{send as Lt,message as X,receive as ms}from"@koishijs/client";import{isClient as rt,useEventListener as fs,useResizeObserver as gs,useTimeoutFn as _s}from"@vueuse/core";async function R(t,a){const s=await Lt(t,a);if(!s.success)throw new Error(s.error||"请求失败");return s.data}const ze={list:()=>R("media-luna/channels/list"),get:t=>R("media-luna/channels/get",{id:t}),create:t=>R("media-luna/channels/create",t),update:(t,a)=>R("media-luna/channels/update",{id:t,data:a}),delete:t=>R("media-luna/channels/delete",{id:t}),toggle:(t,a)=>R("media-luna/channels/toggle",{id:t,enabled:a}),tags:()=>R("media-luna/channels/tags"),getByTags:(t,a)=>R("media-luna/channels/by-tags",{tags:t,matchAll:a})},Ie={list:t=>R("media-luna/presets/list",{enabledOnly:t}),get:t=>R("media-luna/presets/get",{id:t}),create:t=>R("media-luna/presets/create",t),update:(t,a)=>R("media-luna/presets/update",{id:t,data:a}),delete:t=>R("media-luna/presets/delete",{id:t}),toggle:(t,a)=>R("media-luna/presets/toggle",{id:t,enabled:a}),copy:t=>R("media-luna/presets/copy",{id:t}),matching:t=>R("media-luna/presets/matching",{channelId:t}),tags:()=>R("media-luna/presets/tags"),getByTags:(t,a)=>R("media-luna/presets/by-tags",{tags:t,matchAll:a})},Pe={list:t=>R("media-luna/tasks/list",t),get:t=>R("media-luna/tasks/get",{id:t}),delete:t=>R("media-luna/tasks/delete",{id:t}),stats:t=>R("media-luna/tasks/stats",{channelId:t}),cleanup:t=>R("media-luna/tasks/cleanup",{days:t}),recent:(t,a)=>R("media-luna/tasks/recent",{userId:t,limit:a}),my:t=>R("media-luna/tasks/my",t)},ys={me:()=>R("media-luna/auth/me")},He={list:()=>R("media-luna/middlewares/list"),get:t=>R("media-luna/middlewares/get",{name:t}),update:(t,a)=>R("media-luna/middlewares/update",{name:t,data:a}),reset:t=>R("media-luna/middlewares/reset",{name:t}),executionOrder:()=>R("media-luna/middlewares/execution-order"),cardFields:()=>R("media-luna/middlewares/card-fields")},Be={list:()=>R("media-luna/connectors/list"),get:t=>R("media-luna/connectors/get",{id:t}),fields:t=>R("media-luna/connectors/fields",{id:t}),schema:()=>R("media-luna/connectors/schema")},hs={generate:t=>R("media-luna/generate",t),preview:t=>R("media-luna/generate/preview",t)},bs={upload:(t,a,s)=>R("media-luna/cache/upload",{data:t,mime:a,filename:s}),cacheUrl:t=>R("media-luna/cache/cache-url",{url:t}),get:t=>R("media-luna/cache/get",{id:t}),read:t=>R("media-luna/cache/read",{id:t}),delete:t=>R("media-luna/cache/delete",{id:t}),stats:()=>R("media-luna/cache/stats"),clear:()=>R("media-luna/cache/clear")},ht={panels:()=>R("media-luna/settings/panels"),get:t=>R("media-luna/settings/get",{id:t}),update:(t,a)=>R("media-luna/settings/update",{id:t,config:a}),syncRemotePresets:()=>R("media-luna/presets/sync")},we={status:()=>R("media-luna/setup/status"),getStorageFields:()=>R("media-luna/setup/storage/fields"),getStorageConfig:()=>R("media-luna/setup/storage/get"),updateStorageConfig:t=>R("media-luna/setup/storage/update",t),generateVerifyCode:t=>R("media-luna/setup/verify-code/generate",{uid:t}),verifyCode:(t,a)=>R("media-luna/setup/verify-code/verify",{code:t,uid:a}),bindUid:t=>R("media-luna/setup/bind-uid",{uid:t}),getUsers:()=>R("media-luna/setup/users"),complete:()=>R("media-luna/setup/complete")},at={list:()=>R("media-luna/plugins/list"),get:t=>R("media-luna/plugins/get",{id:t}),updateConfig:(t,a)=>R("media-luna/plugins/update-config",{pluginId:t,config:a}),enable:t=>R("media-luna/plugins/enable",{id:t}),disable:t=>R("media-luna/plugins/disable",{id:t}),externalList:()=>R("media-luna/plugins/external/list"),externalAdd:t=>R("media-luna/plugins/external/add",{moduleName:t}),externalRemove:t=>R("media-luna/plugins/external/remove",{moduleName:t})},ks={class:"tag-filter"},$s={class:"filter-tags"},ws=["onClick"],Cs={key:0,class:"filter-input-wrapper"},Vs=oe({__name:"TagFilter",props:{modelValue:{default:()=>[]},allTags:{},presetTags:{default:()=>[]},showInput:{type:Boolean,default:true},maxDynamicTags:{default:20}},emits:["update:modelValue","change"],setup(t,{emit:a}){const s=t,u=a,i=G({get:()=>s.modelValue,set:p=>{u("update:modelValue",p),u("change",p)}}),v=w(""),b=G(()=>{const p=s.allTags.filter(k=>!s.presetTags.includes(k)).slice(0,s.maxDynamicTags);return[...s.presetTags,...p]}),S=p=>{const k=[...i.value],U=k.indexOf(p);U>=0?k.splice(U,1):k.push(p),i.value=k},C=()=>{const p=v.value.trim();p&&!i.value.includes(p)&&(i.value=[...i.value,p]),v.value=""};return(p,k)=>{const U=A("k-icon"),I=A("el-input");return l(),n("div",ks,[e("div",$s,[(l(true),n(D,null,ee(b.value,f=>(l(),n("span",{key:f,class:te(["filter-tag",{active:i.value.includes(f)}]),onClick:T=>S(f)},$(f),11,ws))),128))]),t.showInput?(l(),n("div",Cs,[r(I,{modelValue:v.value,"onUpdate:modelValue":k[0]||(k[0]=f=>v.value=f),placeholder:"输入标签筛选...",size:"small",clearable:"",onKeyup:as(C,["enter"]),class:"filter-input"},{prefix:V(()=>[r(U,{name:"search"})]),_:1},8,["modelValue"])])):o("v-if",true)])}}}),ce=(t,a)=>{const s=t.__vccOpts||t;for(const[u,i]of a)s[u]=i;return s},dt=ce(Vs,[["__scopeId","data-v-61b504c8"]]),xs={class:"view-mode-switch"},Ss=oe({__name:"ViewModeSwitch",props:{modelValue:{}},emits:["update:modelValue"],setup(t){return(a,s)=>(l(),n("div",xs,[e("button",{class:te(["mode-btn",{active:t.modelValue==="card"}]),onClick:s[0]||(s[0]=u=>a.$emit("update:modelValue","card")),title:"卡片视图"},[...s[2]||(s[2]=[it('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-ae3ef498><rect x="3" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect></svg>',1)])],2),e("button",{class:te(["mode-btn",{active:t.modelValue==="list"}]),onClick:s[1]||(s[1]=u=>a.$emit("update:modelValue","list")),title:"列表视图"},[...s[3]||(s[3]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2)]))}}),Et=ce(Ss,[["__scopeId","data-v-ae3ef498"]]),Is={class:"tag-input"},Ts=oe({__name:"TagInput",props:{modelValue:{},suggestions:{},placeholder:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,i=G({get:()=>s.modelValue,set:v=>u("update:modelValue",v)});return(v,b)=>{const S=A("el-option"),C=A("el-select");return l(),n("div",Is,[r(C,{modelValue:i.value,"onUpdate:modelValue":b[0]||(b[0]=p=>i.value=p),multiple:"",filterable:"","allow-create":"","default-first-option":"",placeholder:t.placeholder,class:"tag-select","tag-type":"primary"},{default:V(()=>[(l(true),n(D,null,ee(t.suggestions,p=>(l(),se(S,{key:p,label:p,value:p},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])])}}}),At=ce(Ts,[["__scopeId","data-v-68388640"]]);/**
1
+ import{defineComponent as oe,computed as G,ref as w,resolveComponent as M,createElementBlock as n,openBlock as l,createElementVNode as e,createCommentVNode as o,Fragment as F,renderList as ee,normalizeClass as te,toDisplayString as $,createVNode as i,withKeys as as,withCtx as S,createStaticVNode as it,createBlock as se,warn as ns,watch as _e,unref as ae,inject as Ue,isRef as os,getCurrentInstance as Ae,provide as is,renderSlot as We,mergeProps as rs,Transition as Ze,withDirectives as Oe,normalizeStyle as Ft,vShow as Te,shallowReactive as ds,onMounted as ye,resolveDynamicComponent as lt,withModifiers as fe,isVNode as Lt,render as yt,createTextVNode as A,onUnmounted as Ye,Teleport as us,createSlots as cs,onBeforeUnmount as vs,h as ht,KeepAlive as ps}from"vue";import{send as rt,message as Q,receive as ms}from"@koishijs/client";import{isClient as dt,useEventListener as fs,useResizeObserver as gs,useTimeoutFn as _s}from"@vueuse/core";async function q(t,a){const s=await rt(t,a);if(!s.success)throw new Error(s.error||"请求失败");return s.data}const ze={list:()=>q("media-luna/channels/list"),get:t=>q("media-luna/channels/get",{id:t}),create:t=>q("media-luna/channels/create",t),update:(t,a)=>q("media-luna/channels/update",{id:t,data:a}),delete:t=>q("media-luna/channels/delete",{id:t}),toggle:(t,a)=>q("media-luna/channels/toggle",{id:t,enabled:a}),tags:()=>q("media-luna/channels/tags"),getByTags:(t,a)=>q("media-luna/channels/by-tags",{tags:t,matchAll:a})},Ie={list:t=>q("media-luna/presets/list",{enabledOnly:t}),get:t=>q("media-luna/presets/get",{id:t}),create:t=>q("media-luna/presets/create",t),update:(t,a)=>q("media-luna/presets/update",{id:t,data:a}),delete:t=>q("media-luna/presets/delete",{id:t}),toggle:(t,a)=>q("media-luna/presets/toggle",{id:t,enabled:a}),copy:t=>q("media-luna/presets/copy",{id:t}),matching:t=>q("media-luna/presets/matching",{channelId:t}),tags:()=>q("media-luna/presets/tags"),getByTags:(t,a)=>q("media-luna/presets/by-tags",{tags:t,matchAll:a})},Pe={list:t=>q("media-luna/tasks/list",t),get:t=>q("media-luna/tasks/get",{id:t}),delete:t=>q("media-luna/tasks/delete",{id:t}),stats:t=>q("media-luna/tasks/stats",{channelId:t}),cleanup:t=>q("media-luna/tasks/cleanup",{days:t}),recent:(t,a)=>q("media-luna/tasks/recent",{userId:t,limit:a}),my:t=>q("media-luna/tasks/my",t)},ys={me:()=>q("media-luna/auth/me")},He={list:()=>q("media-luna/middlewares/list"),get:t=>q("media-luna/middlewares/get",{name:t}),update:(t,a)=>q("media-luna/middlewares/update",{name:t,data:a}),reset:t=>q("media-luna/middlewares/reset",{name:t}),executionOrder:()=>q("media-luna/middlewares/execution-order"),cardFields:()=>q("media-luna/middlewares/card-fields")},Be={list:()=>q("media-luna/connectors/list"),get:t=>q("media-luna/connectors/get",{id:t}),fields:t=>q("media-luna/connectors/fields",{id:t}),schema:()=>q("media-luna/connectors/schema")},hs={generate:t=>q("media-luna/generate",t),preview:t=>q("media-luna/generate/preview",t)},bs={upload:(t,a,s)=>q("media-luna/cache/upload",{data:t,mime:a,filename:s}),cacheUrl:t=>q("media-luna/cache/cache-url",{url:t}),get:t=>q("media-luna/cache/get",{id:t}),read:t=>q("media-luna/cache/read",{id:t}),delete:t=>q("media-luna/cache/delete",{id:t}),stats:()=>q("media-luna/cache/stats"),clear:()=>q("media-luna/cache/clear")},bt={panels:()=>q("media-luna/settings/panels"),get:t=>q("media-luna/settings/get",{id:t}),update:(t,a)=>q("media-luna/settings/update",{id:t,config:a}),syncRemotePresets:()=>q("media-luna/presets/sync")},we={status:()=>q("media-luna/setup/status"),getStorageFields:()=>q("media-luna/setup/storage/fields"),getStorageConfig:()=>q("media-luna/setup/storage/get"),updateStorageConfig:t=>q("media-luna/setup/storage/update",t),generateVerifyCode:t=>q("media-luna/setup/verify-code/generate",{uid:t}),verifyCode:(t,a)=>q("media-luna/setup/verify-code/verify",{code:t,uid:a}),bindUid:t=>q("media-luna/setup/bind-uid",{uid:t}),getUsers:()=>q("media-luna/setup/users"),complete:()=>q("media-luna/setup/complete")},at={list:()=>q("media-luna/plugins/list"),get:t=>q("media-luna/plugins/get",{id:t}),updateConfig:(t,a)=>q("media-luna/plugins/update-config",{pluginId:t,config:a}),enable:t=>q("media-luna/plugins/enable",{id:t}),disable:t=>q("media-luna/plugins/disable",{id:t}),externalList:()=>q("media-luna/plugins/external/list"),externalAdd:t=>q("media-luna/plugins/external/add",{moduleName:t}),externalRemove:t=>q("media-luna/plugins/external/remove",{moduleName:t})},ks={class:"tag-filter"},$s={class:"filter-tags"},ws=["onClick"],Cs={key:0,class:"filter-input-wrapper"},Vs=oe({__name:"TagFilter",props:{modelValue:{default:()=>[]},allTags:{},presetTags:{default:()=>[]},showInput:{type:Boolean,default:true},maxDynamicTags:{default:20}},emits:["update:modelValue","change"],setup(t,{emit:a}){const s=t,u=a,r=G({get:()=>s.modelValue,set:_=>{u("update:modelValue",_),u("change",_)}}),v=w(""),h=G(()=>{const _=s.allTags.filter(C=>!s.presetTags.includes(C)).slice(0,s.maxDynamicTags);return[...s.presetTags,..._]}),T=_=>{const C=[...r.value],N=C.indexOf(_);N>=0?C.splice(N,1):C.push(_),r.value=C},x=()=>{const _=v.value.trim();_&&!r.value.includes(_)&&(r.value=[...r.value,_]),v.value=""};return(_,C)=>{const N=M("k-icon"),z=M("el-input");return l(),n("div",ks,[e("div",$s,[(l(true),n(F,null,ee(h.value,p=>(l(),n("span",{key:p,class:te(["filter-tag",{active:r.value.includes(p)}]),onClick:U=>T(p)},$(p),11,ws))),128))]),t.showInput?(l(),n("div",Cs,[i(z,{modelValue:v.value,"onUpdate:modelValue":C[0]||(C[0]=p=>v.value=p),placeholder:"输入标签筛选...",size:"small",clearable:"",onKeyup:as(x,["enter"]),class:"filter-input"},{prefix:S(()=>[i(N,{name:"search"})]),_:1},8,["modelValue"])])):o("v-if",true)])}}}),ve=(t,a)=>{const s=t.__vccOpts||t;for(const[u,r]of a)s[u]=r;return s},ut=ve(Vs,[["__scopeId","data-v-61b504c8"]]),xs={class:"view-mode-switch"},Ss=oe({__name:"ViewModeSwitch",props:{modelValue:{}},emits:["update:modelValue"],setup(t){return(a,s)=>(l(),n("div",xs,[e("button",{class:te(["mode-btn",{active:t.modelValue==="card"}]),onClick:s[0]||(s[0]=u=>a.$emit("update:modelValue","card")),title:"卡片视图"},[...s[2]||(s[2]=[it('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-ae3ef498><rect x="3" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect></svg>',1)])],2),e("button",{class:te(["mode-btn",{active:t.modelValue==="list"}]),onClick:s[1]||(s[1]=u=>a.$emit("update:modelValue","list")),title:"列表视图"},[...s[3]||(s[3]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2)]))}}),Et=ve(Ss,[["__scopeId","data-v-ae3ef498"]]),Is={class:"tag-input"},Os=oe({__name:"TagInput",props:{modelValue:{},suggestions:{},placeholder:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,r=G({get:()=>s.modelValue,set:v=>u("update:modelValue",v)});return(v,h)=>{const T=M("el-option"),x=M("el-select");return l(),n("div",Is,[i(x,{modelValue:r.value,"onUpdate:modelValue":h[0]||(h[0]=_=>r.value=_),multiple:"",filterable:"","allow-create":"","default-first-option":"",placeholder:t.placeholder,class:"tag-select","tag-type":"primary"},{default:S(()=>[(l(true),n(F,null,ee(t.suggestions,_=>(l(),se(T,{key:_,label:_,value:_},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])])}}}),At=ve(Os,[["__scopeId","data-v-68388640"]]);/**
2
2
  * @vue/shared v3.5.22
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
- **/const Os=Object.prototype.hasOwnProperty,bt=(t,a)=>Os.call(t,a),Je=t=>typeof t=="function",Ge=t=>typeof t=="string",Mt=t=>t!==null&&typeof t=="object";var Us=typeof global=="object"&&global&&global.Object===Object&&global,zs=typeof self=="object"&&self&&self.Object===Object&&self,ut=Us||zs||Function("return this")(),De=ut.Symbol,jt=Object.prototype,Ps=jt.hasOwnProperty,Ds=jt.toString,Ee=De?De.toStringTag:void 0;function Ns(t){var a=Ps.call(t,Ee),s=t[Ee];try{t[Ee]=void 0;var u=true}catch{}var i=Ds.call(t);return u&&(a?t[Ee]=s:delete t[Ee]),i}var Fs=Object.prototype,Ls=Fs.toString;function Es(t){return Ls.call(t)}var As="[object Null]",Ms="[object Undefined]",kt=De?De.toStringTag:void 0;function Rt(t){return t==null?t===void 0?Ms:As:kt&&kt in Object(t)?Ns(t):Es(t)}function js(t){return t!=null&&typeof t=="object"}var Rs="[object Symbol]";function ct(t){return typeof t=="symbol"||js(t)&&Rt(t)==Rs}function Bs(t,a){for(var s=-1,u=t==null?0:t.length,i=Array(u);++s<u;)i[s]=a(t[s],s,t);return i}var vt=Array.isArray,$t=De?De.prototype:void 0,wt=$t?$t.toString:void 0;function Bt(t){if(typeof t=="string")return t;if(vt(t))return Bs(t,Bt)+"";if(ct(t))return wt?wt.call(t):"";var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function qt(t){var a=typeof t;return t!=null&&(a=="object"||a=="function")}var qs="[object AsyncFunction]",Hs="[object Function]",Js="[object GeneratorFunction]",Gs="[object Proxy]";function Ks(t){if(!qt(t))return false;var a=Rt(t);return a==Hs||a==Js||a==qs||a==Gs}var tt=ut["__core-js_shared__"],Ct=function(){var t=/[^.]+$/.exec(tt&&tt.keys&&tt.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function Ws(t){return!!Ct&&Ct in t}var Zs=Function.prototype,Ys=Zs.toString;function Xs(t){if(t!=null){try{return Ys.call(t)}catch{}try{return t+""}catch{}}return""}var Qs=/[\\^$.*+?()[\]{}|]/g,el=/^\[object .+?Constructor\]$/,tl=Function.prototype,sl=Object.prototype,ll=tl.toString,al=sl.hasOwnProperty,nl=RegExp("^"+ll.call(al).replace(Qs,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ol(t){if(!qt(t)||Ws(t))return false;var a=Ks(t)?nl:el;return a.test(Xs(t))}function il(t,a){return t==null?void 0:t[a]}function Ht(t,a){var s=il(t,a);return ol(s)?s:void 0}function rl(t,a){return t===a||t!==t&&a!==a}var dl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ul=/^\w*$/;function cl(t,a){if(vt(t))return false;var s=typeof t;return s=="number"||s=="symbol"||s=="boolean"||t==null||ct(t)?true:ul.test(t)||!dl.test(t)||a!=null&&t in Object(a)}var Me=Ht(Object,"create");function vl(){this.__data__=Me?Me(null):{},this.size=0}function pl(t){var a=this.has(t)&&delete this.__data__[t];return this.size-=a?1:0,a}var ml="__lodash_hash_undefined__",fl=Object.prototype,gl=fl.hasOwnProperty;function _l(t){var a=this.__data__;if(Me){var s=a[t];return s===ml?void 0:s}return gl.call(a,t)?a[t]:void 0}var yl=Object.prototype,hl=yl.hasOwnProperty;function bl(t){var a=this.__data__;return Me?a[t]!==void 0:hl.call(a,t)}var kl="__lodash_hash_undefined__";function $l(t,a){var s=this.__data__;return this.size+=this.has(t)?0:1,s[t]=Me&&a===void 0?kl:a,this}function Ve(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var u=t[a];this.set(u[0],u[1])}}Ve.prototype.clear=vl;Ve.prototype.delete=pl;Ve.prototype.get=_l;Ve.prototype.has=bl;Ve.prototype.set=$l;function wl(){this.__data__=[],this.size=0}function Xe(t,a){for(var s=t.length;s--;)if(rl(t[s][0],a))return s;return-1}var Cl=Array.prototype,Vl=Cl.splice;function xl(t){var a=this.__data__,s=Xe(a,t);if(s<0)return false;var u=a.length-1;return s==u?a.pop():Vl.call(a,s,1),--this.size,true}function Sl(t){var a=this.__data__,s=Xe(a,t);return s<0?void 0:a[s][1]}function Il(t){return Xe(this.__data__,t)>-1}function Tl(t,a){var s=this.__data__,u=Xe(s,t);return u<0?(++this.size,s.push([t,a])):s[u][1]=a,this}function Fe(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var u=t[a];this.set(u[0],u[1])}}Fe.prototype.clear=wl;Fe.prototype.delete=xl;Fe.prototype.get=Sl;Fe.prototype.has=Il;Fe.prototype.set=Tl;var Ol=Ht(ut,"Map");function Ul(){this.size=0,this.__data__={hash:new Ve,map:new(Ol||Fe),string:new Ve}}function zl(t){var a=typeof t;return a=="string"||a=="number"||a=="symbol"||a=="boolean"?t!=="__proto__":t===null}function Qe(t,a){var s=t.__data__;return zl(a)?s[typeof a=="string"?"string":"hash"]:s.map}function Pl(t){var a=Qe(this,t).delete(t);return this.size-=a?1:0,a}function Dl(t){return Qe(this,t).get(t)}function Nl(t){return Qe(this,t).has(t)}function Fl(t,a){var s=Qe(this,t),u=s.size;return s.set(t,a),this.size+=s.size==u?0:1,this}function xe(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var u=t[a];this.set(u[0],u[1])}}xe.prototype.clear=Ul;xe.prototype.delete=Pl;xe.prototype.get=Dl;xe.prototype.has=Nl;xe.prototype.set=Fl;var Ll="Expected a function";function pt(t,a){if(typeof t!="function"||a!=null&&typeof a!="function")throw new TypeError(Ll);var s=function(){var u=arguments,i=a?a.apply(this,u):u[0],v=s.cache;if(v.has(i))return v.get(i);var b=t.apply(this,u);return s.cache=v.set(i,b)||v,b};return s.cache=new(pt.Cache||xe),s}pt.Cache=xe;var El=500;function Al(t){var a=pt(t,function(u){return s.size===El&&s.clear(),u}),s=a.cache;return a}var Ml=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,jl=/\\(\\)?/g,Rl=Al(function(t){var a=[];return t.charCodeAt(0)===46&&a.push(""),t.replace(Ml,function(s,u,i,v){a.push(i?v.replace(jl,"$1"):u||s)}),a});function Bl(t){return t==null?"":Bt(t)}function ql(t,a){return vt(t)?t:cl(t,a)?[t]:Rl(Bl(t))}function Hl(t){if(typeof t=="string"||ct(t))return t;var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function Jl(t,a){a=ql(a,t);for(var s=0,u=a.length;t!=null&&s<u;)t=t[Hl(a[s++])];return s&&s==u?t:void 0}function Gl(t,a,s){var u=t==null?void 0:Jl(t,a);return u===void 0?s:u}function Kl(t){for(var a=-1,s=t==null?0:t.length,u={};++a<s;){var i=t[a];u[i[0]]=i[1]}return u}const Wl=t=>t===void 0,je=t=>typeof t=="number",Zl=t=>typeof Element>"u"?false:t instanceof Element,Yl=t=>Ge(t)?!Number.isNaN(Number(t)):false,Vt=t=>Object.keys(t);function nt(t,a="px"){if(!t)return"";if(je(t)||Yl(t))return`${t}${a}`;if(Ge(t))return t}/*! Element Plus Icons Vue v2.3.2 */var Xl=oe({name:"CircleCloseFilled",__name:"circle-close-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),Ql=Xl,ea=oe({name:"Close",__name:"close",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),ta=ea,sa=oe({name:"InfoFilled",__name:"info-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),la=sa,aa=oe({name:"SuccessFilled",__name:"success-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),na=aa,oa=oe({name:"WarningFilled",__name:"warning-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ia=oa;const Jt="__epPropKey",ke=t=>t,ra=t=>Mt(t)&&!!t[Jt],Gt=(t,a)=>{if(!Mt(t)||ra(t))return t;const{values:s,required:u,default:i,type:v,validator:b}=t,C={type:v,required:!!u,validator:s||b?p=>{let k=false,U=[];if(s&&(U=Array.from(s),bt(t,"default")&&U.push(i),k||(k=U.includes(p))),b&&(k||(k=b(p))),!k&&U.length>0){const I=[...new Set(U)].map(f=>JSON.stringify(f)).join(", ");ns(`Invalid prop: validation failed${a?` for prop "${a}"`:""}. Expected one of [${I}], got value ${JSON.stringify(p)}.`)}return k}:void 0,[Jt]:true};return bt(t,"default")&&(C.default=i),C},Re=t=>Kl(Object.entries(t).map(([a,s])=>[a,Gt(s,a)])),da=ke([String,Object,Function]),ua={Close:ta},xt={success:na,warning:ia,error:Ql,info:la},Kt=(t,a)=>(t.install=s=>{for(const u of[t,...Object.values({})])s.component(u.name,u)},t),ca=(t,a)=>(t.install=s=>{t._context=s._context,s.config.globalProperties[a]=t},t),va={esc:"Escape"},pa=["","default","small","large"],ma=t=>t,St=({from:t,replacement:a,scope:s,version:u,ref:i,type:v="API"},b)=>{ye(()=>ae(b),S=>{},{immediate:true})};var fa={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const ga=t=>(a,s)=>_a(a,s,ae(t)),_a=(t,a,s)=>Gl(s,t,t).replace(/\{(\w+)\}/g,(u,i)=>{var v;return`${(v=a==null?void 0:a[i])!=null?v:`{${i}}`}`}),ya=t=>{const a=G(()=>ae(t).name),s=os(t)?t:w(t);return{lang:a,locale:s,t:ga(t)}},Wt=Symbol("localeContextKey"),ha=t=>{const a=t||Ue(Wt,w());return ya(G(()=>a.value||fa))},qe="el",ba="is-",Ce=(t,a,s,u,i)=>{let v=`${t}-${a}`;return s&&(v+=`-${s}`),u&&(v+=`__${u}`),i&&(v+=`--${i}`),v},Zt=Symbol("namespaceContextKey"),ka=t=>{const a=t||(Ae()?Ue(Zt,w(qe)):w(qe));return G(()=>ae(a)||qe)},mt=(t,a)=>{const s=ka(a);return{namespace:s,b:(m="")=>Ce(s.value,t,m,"",""),e:m=>m?Ce(s.value,t,"",m,""):"",m:m=>m?Ce(s.value,t,"","",m):"",be:(m,g)=>m&&g?Ce(s.value,t,m,g,""):"",em:(m,g)=>m&&g?Ce(s.value,t,"",m,g):"",bm:(m,g)=>m&&g?Ce(s.value,t,m,"",g):"",bem:(m,g,B)=>m&&g&&B?Ce(s.value,t,m,g,B):"",is:(m,...g)=>{const B=g.length>=1?g[0]:true;return m&&B?`${ba}${m}`:""},cssVar:m=>{const g={};for(const B in m)m[B]&&(g[`--${s.value}-${B}`]=m[B]);return g},cssVarName:m=>`--${s.value}-${m}`,cssVarBlock:m=>{const g={};for(const B in m)m[B]&&(g[`--${s.value}-${t}-${B}`]=m[B]);return g},cssVarBlockName:m=>`--${s.value}-${t}-${m}`}},It={current:0},Tt=w(0),Yt=2e3,Ot=Symbol("elZIndexContextKey"),Xt=Symbol("zIndexContextKey"),$a=t=>{const a=Ae()?Ue(Ot,It):It,s=t||(Ae()?Ue(Xt,void 0):void 0),u=G(()=>{const b=ae(s);return je(b)?b:Yt}),i=G(()=>u.value+Tt.value),v=()=>(a.current++,Tt.value=a.current,i.value);return!rt&&Ue(Ot),{initialZIndex:u,currentZIndex:i,nextZIndex:v}},wa=Gt({type:String,values:pa,required:false}),Ca=Symbol("size"),Va=Symbol("emptyValuesContextKey"),xa=Re({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:t=>Je(t)?!t():!t}}),Qt=Symbol(),Ke=w();function es(t,a=void 0){return Ae()?Ue(Qt,Ke):Ke}function Sa(t,a){const s=es(),u=mt(t,G(()=>{var S;return((S=s.value)==null?void 0:S.namespace)||qe})),i=ha(G(()=>{var S;return(S=s.value)==null?void 0:S.locale})),v=$a(G(()=>{var S;return((S=s.value)==null?void 0:S.zIndex)||Yt})),b=G(()=>{var S;return ae(a)||((S=s.value)==null?void 0:S.size)||""});return ts(G(()=>ae(s)||{})),{ns:u,locale:i,zIndex:v,size:b}}const ts=(t,a,s=false)=>{var u;const i=!!Ae(),v=i?es():void 0,b=(u=void 0)!=null?u:i?is:void 0;if(!b)return;const S=G(()=>{const C=ae(t);return v!=null&&v.value?Ia(v.value,C):C});return b(Qt,S),b(Wt,G(()=>S.value.locale)),b(Zt,G(()=>S.value.namespace)),b(Xt,G(()=>S.value.zIndex)),b(Ca,{size:G(()=>S.value.size||"")}),b(Va,G(()=>({emptyValues:S.value.emptyValues,valueOnClear:S.value.valueOnClear}))),(s||!Ke.value)&&(Ke.value=S.value),S},Ia=(t,a)=>{const s=[...new Set([...Vt(t),...Vt(a)])],u={};for(const i of s)u[i]=a[i]!==void 0?a[i]:t[i];return u},Ta=Re({a11y:{type:Boolean,default:true},locale:{type:ke(Object)},size:wa,button:{type:ke(Object)},experimentalFeatures:{type:ke(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:ke(Object)},zIndex:Number,namespace:{type:String,default:"el"},...xa}),ot={};oe({name:"ElConfigProvider",props:Ta,setup(t,{slots:a}){ye(()=>t.message,u=>{Object.assign(ot,u??{})},{immediate:true,deep:true});const s=ts(t);return()=>We(a,"default",{config:s==null?void 0:s.value})}});var ft=(t,a)=>{const s=t.__vccOpts||t;for(const[u,i]of a)s[u]=i;return s};const Oa=Re({size:{type:ke([Number,String])},color:{type:String}}),Ua=oe({name:"ElIcon",inheritAttrs:false}),za=oe({...Ua,props:Oa,setup(t){const a=t,s=mt("icon"),u=G(()=>{const{size:i,color:v}=a;return!i&&!v?{}:{fontSize:Wl(i)?void 0:nt(i),"--color":v}});return(i,v)=>(l(),n("i",rs({class:ae(s).b(),style:ae(u)},i.$attrs),[We(i.$slots,"default")],16))}});var Pa=ft(za,[["__file","icon.vue"]]);const Ut=Kt(Pa),Da=Re({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:true},color:String,dotStyle:{type:ke([String,Object,Array])},badgeStyle:{type:ke([String,Object,Array])},offset:{type:ke(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),Na=["textContent"],Fa=oe({name:"ElBadge"}),La=oe({...Fa,props:Da,setup(t,{expose:a}){const s=t,u=mt("badge"),i=G(()=>s.isDot?"":je(s.value)&&je(s.max)?s.max<s.value?`${s.max}+`:s.value===0&&!s.showZero?"":`${s.value}`:`${s.value}`),v=G(()=>{var b,S,C,p,k,U;return[{backgroundColor:s.color,marginRight:nt(-((S=(b=s.offset)==null?void 0:b[0])!=null?S:0)),marginTop:nt((p=(C=s.offset)==null?void 0:C[1])!=null?p:0)},(k=s.dotStyle)!=null?k:{},(U=s.badgeStyle)!=null?U:{}]});return St({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},G(()=>!!s.dotStyle)),St({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},G(()=>!!s.dotClass)),a({content:i}),(b,S)=>(l(),n("div",{class:te(ae(u).b())},[We(b.$slots,"default"),r(Ze,{name:`${ae(u).namespace.value}-zoom-in-center`,persisted:""},{default:V(()=>[Te(e("sup",{class:te([ae(u).e("content"),ae(u).em("content",b.type),ae(u).is("fixed",!!b.$slots.default),ae(u).is("dot",b.isDot),b.dotClass,b.badgeClass]),style:Nt(ae(v)),textContent:$(ae(i))},null,14,Na),[[Oe,!b.hidden&&(ae(i)||b.isDot)]])]),_:1},8,["name"])],2))}});var Ea=ft(La,[["__file","badge.vue"]]);const Aa=Kt(Ea),ss=["success","info","warning","error"],ge=ma({customClass:"",center:false,dangerouslyUseHTMLString:false,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:false,type:"info",plain:false,offset:16,zIndex:0,grouping:false,repeatNum:1,appendTo:rt?document.body:void 0}),Ma=Re({customClass:{type:String,default:ge.customClass},center:{type:Boolean,default:ge.center},dangerouslyUseHTMLString:{type:Boolean,default:ge.dangerouslyUseHTMLString},duration:{type:Number,default:ge.duration},icon:{type:da,default:ge.icon},id:{type:String,default:ge.id},message:{type:ke([String,Object,Function]),default:ge.message},onClose:{type:ke(Function),default:ge.onClose},showClose:{type:Boolean,default:ge.showClose},type:{type:String,values:ss,default:ge.type},plain:{type:Boolean,default:ge.plain},offset:{type:Number,default:ge.offset},zIndex:{type:Number,default:ge.zIndex},grouping:{type:Boolean,default:ge.grouping},repeatNum:{type:Number,default:ge.repeatNum}}),ja={destroy:()=>true},$e=ds([]),Ra=t=>{const a=$e.findIndex(i=>i.id===t),s=$e[a];let u;return a>0&&(u=$e[a-1]),{current:s,prev:u}},Ba=t=>{const{prev:a}=Ra(t);return a?a.vm.exposed.bottom.value:0},qa=(t,a)=>$e.findIndex(u=>u.id===t)>0?16:a,Ha=["id"],Ja=["innerHTML"],Ga=oe({name:"ElMessage"}),Ka=oe({...Ga,props:Ma,emits:ja,setup(t,{expose:a}){const s=t,{Close:u}=ua,{ns:i,zIndex:v}=Sa("message"),{currentZIndex:b,nextZIndex:S}=v,C=w(),p=w(false),k=w(0);let U;const I=G(()=>s.type?s.type==="error"?"danger":s.type:"info"),f=G(()=>{const Q=s.type;return{[i.bm("icon",Q)]:Q&&xt[Q]}}),T=G(()=>s.icon||xt[s.type]||""),m=G(()=>Ba(s.id)),g=G(()=>qa(s.id,s.offset)+m.value),B=G(()=>k.value+g.value),J=G(()=>({top:`${g.value}px`,zIndex:b.value}));function F(){s.duration!==0&&({stop:U}=_s(()=>{x()},s.duration))}function O(){U==null||U()}function x(){p.value=false}function Y({code:Q}){Q===va.esc&&x()}return he(()=>{F(),S(),p.value=true}),ye(()=>s.repeatNum,()=>{O(),F()}),fs(document,"keydown",Y),gs(C,()=>{k.value=C.value.getBoundingClientRect().height}),a({visible:p,bottom:B,close:x}),(Q,ve)=>(l(),se(Ze,{name:ae(i).b("fade"),onBeforeLeave:Q.onClose,onAfterLeave:ve[0]||(ve[0]=N=>Q.$emit("destroy")),persisted:""},{default:V(()=>[Te(e("div",{id:Q.id,ref_key:"messageRef",ref:C,class:te([ae(i).b(),{[ae(i).m(Q.type)]:Q.type},ae(i).is("center",Q.center),ae(i).is("closable",Q.showClose),ae(i).is("plain",Q.plain),Q.customClass]),style:Nt(ae(J)),role:"alert",onMouseenter:O,onMouseleave:F},[Q.repeatNum>1?(l(),se(ae(Aa),{key:0,value:Q.repeatNum,type:ae(I),class:te(ae(i).e("badge"))},null,8,["value","type","class"])):o("v-if",true),ae(T)?(l(),se(ae(Ut),{key:1,class:te([ae(i).e("icon"),ae(f)])},{default:V(()=>[(l(),se(lt(ae(T))))]),_:1},8,["class"])):o("v-if",true),We(Q.$slots,"default",{},()=>[Q.dangerouslyUseHTMLString?(l(),n(D,{key:1},[o(" Caution here, message could've been compromised, never use user's input as message "),e("p",{class:te(ae(i).e("content")),innerHTML:Q.message},null,10,Ja)],2112)):(l(),n("p",{key:0,class:te(ae(i).e("content"))},$(Q.message),3))]),Q.showClose?(l(),se(ae(Ut),{key:2,class:te(ae(i).e("closeBtn")),onClick:fe(x,["stop"])},{default:V(()=>[r(ae(u))]),_:1},8,["class","onClick"])):o("v-if",true)],46,Ha),[[Oe,p.value]])]),_:3},8,["name","onBeforeLeave"]))}});var Wa=ft(Ka,[["__file","message.vue"]]);let Za=1;const ls=t=>{const a=!t||Ge(t)||Ft(t)||Je(t)?{message:t}:t,s={...ge,...a};if(!s.appendTo)s.appendTo=document.body;else if(Ge(s.appendTo)){let u=document.querySelector(s.appendTo);Zl(u)||(u=document.body),s.appendTo=u}return s},Ya=t=>{const a=$e.indexOf(t);if(a===-1)return;$e.splice(a,1);const{handler:s}=t;s.close()},Xa=({appendTo:t,...a},s)=>{const u=`message_${Za++}`,i=a.onClose,v=document.createElement("div"),b={...a,id:u,onClose:()=>{i==null||i(),Ya(k)},onDestroy:()=>{_t(null,v)}},S=r(Wa,b,Je(b.message)||Ft(b.message)?{default:Je(b.message)?b.message:()=>b.message}:null);S.appContext=s||Ne._context,_t(S,v),t.appendChild(v.firstElementChild);const C=S.component,k={id:u,vnode:S,vm:C,handler:{close:()=>{C.exposed.visible.value=false}},props:S.component.props};return k},Ne=(t={},a)=>{if(!rt)return{close:()=>{}};if(je(ot.max)&&$e.length>=ot.max)return{close:()=>{}};const s=ls(t);if(s.grouping&&$e.length){const i=$e.find(({vnode:v})=>{var b;return((b=v.props)==null?void 0:b.message)===s.message});if(i)return i.props.repeatNum+=1,i.props.type=s.type,i.handler}const u=Xa(s,a);return $e.push(u),u.handler};ss.forEach(t=>{Ne[t]=(a={},s)=>{const u=ls(a);return Ne({...u,type:t},s)}});function Qa(t){for(const a of $e)(!t||t===a.props.type)&&a.handler.close()}Ne.closeAll=Qa;Ne._context=null;const Se=ca(Ne,"$message"),en={class:"table-field-editor"},tn={class:"toolbar"},sn={class:"toolbar-left"},ln={class:"toolbar-right"},an={class:"table-wrapper"},nn={class:"data-table"},on={key:0,class:"col-check"},rn={key:0,class:"col-check"},dn={class:"col-op"},un=["colspan"],cn={class:"add-hint"},vn={key:0,class:"table-footer"},pn={class:"import-mode"},mn={class:"presets-header"},fn={class:"sel-count"},gn={class:"presets-list"},_n=["onClick"],yn={class:"p-alias"},hn={class:"p-desc"},bn=oe({__name:"TableFieldEditor",props:{columns:{},modelValue:{default:()=>[]},tableConfig:{},presets:{default:()=>[]}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,i=G({get:()=>s.modelValue||[],set:z=>u("update:modelValue",z)}),v=w([]),b=G(()=>i.value.length>0&&v.value.length===i.value.length),S=G(()=>v.value.length>0&&v.value.length<i.value.length),C=G(()=>{var y;let z=s.columns.length+1;return((y=s.tableConfig)==null?void 0:y.enableSelection)!==false&&z++,z}),p=w(false),k=w(""),U=w("append"),I=w(false),f=w([]),T=w(""),m=G(()=>{const z=new Set;for(const y of i.value)y.alias&&z.add(y.alias.toLowerCase());return z}),g=G(()=>{if(!T.value)return s.presets;const z=T.value.toLowerCase();return s.presets.filter(y=>{var d,c,L;return((d=y.alias)==null?void 0:d.toLowerCase().includes(z))||((c=y.description)==null?void 0:c.toLowerCase().includes(z))||((L=y.repoId)==null?void 0:L.toLowerCase().includes(z))})});function B(){const z={};for(const y of s.columns)z[y.key]=y.type==="boolean"?false:y.type==="number"?void 0:"";u("update:modelValue",[...i.value,z])}function J(z){const y=[...i.value];y.splice(z,1),u("update:modelValue",y),v.value=v.value.filter(d=>d!==z).map(d=>d>z?d-1:d)}function F(z,y,d){const c=[...i.value];c[z]={...c[z],[y]:d},u("update:modelValue",c)}function O(z){const y=v.value.indexOf(z);y>=0?v.value.splice(y,1):v.value.push(z)}function x(z){v.value=z?i.value.map((y,d)=>d):[]}function Y(){if(v.value.length===0)return;const z=new Set(v.value);u("update:modelValue",i.value.filter((y,d)=>!z.has(d))),Se.success(`已删除 ${z.size} 条`),v.value=[]}function Q(){const z=new Blob([JSON.stringify(i.value,null,2)],{type:"application/json"}),y=URL.createObjectURL(z),d=document.createElement("a");d.href=y,d.download="data.json",d.click(),URL.revokeObjectURL(y),Se.success("导出成功")}function ve(){try{const z=JSON.parse(k.value);if(!Array.isArray(z)){Se.error("需要 JSON 数组");return}const y=z.map(d=>{const c={};for(const L of s.columns)c[L.key]=d[L.key]??(L.key==="repoId"&&d.name?d.name:"");return c});u("update:modelValue",U.value==="replace"?y:[...i.value,...y]),Se.success(`已导入 ${y.length} 条`),p.value=false,k.value=""}catch{Se.error("JSON 解析失败")}}function N(){f.value=g.value.filter(z=>{var y;return!m.value.has((y=z.alias)==null?void 0:y.toLowerCase())}).map(z=>z.alias)}function P(z){if(m.value.has(z==null?void 0:z.toLowerCase()))return;const y=f.value.indexOf(z);y>=0?f.value.splice(y,1):f.value.push(z)}function W(){const y=s.presets.filter(d=>f.value.includes(d.alias)).map(d=>{const c={};for(const L of s.columns)c[L.key]=d[L.key]??"";return c});u("update:modelValue",[...i.value,...y]),Se.success(`已导入 ${y.length} 条`),I.value=false,f.value=[]}return ye(I,z=>{z&&(f.value=[],T.value="")}),(z,y)=>{var M,Z,ue,q,ie;const d=A("k-icon"),c=A("el-button"),L=A("el-checkbox"),ne=A("el-input"),K=A("el-input-number"),_=A("el-switch"),h=A("el-option"),j=A("el-select"),re=A("el-radio"),le=A("el-radio-group"),de=A("el-dialog"),pe=A("el-tag");return l(),n("div",en,[o(" 工具栏 "),e("div",tn,[e("div",sn,[r(c,{type:"primary",size:"small",onClick:B},{default:V(()=>[r(d,{name:"add"}),y[10]||(y[10]=E(" 添加 ",-1))]),_:1}),(M=t.tableConfig)!=null&&M.enableBatchDelete&&v.value.length>0?(l(),se(c,{key:0,type:"danger",size:"small",onClick:Y},{default:V(()=>[E(" 删除选中 ("+$(v.value.length)+") ",1)]),_:1})):o("v-if",true)]),e("div",ln,[((Z=t.presets)==null?void 0:Z.length)>0?(l(),se(c,{key:0,size:"small",onClick:y[0]||(y[0]=H=>I.value=true)},{default:V(()=>[...y[11]||(y[11]=[E(" 内置预设 ",-1)])]),_:1})):o("v-if",true),((ue=t.tableConfig)==null?void 0:ue.enableImport)!==false?(l(),se(c,{key:1,size:"small",onClick:y[1]||(y[1]=H=>p.value=true)},{default:V(()=>[...y[12]||(y[12]=[E(" 导入 ",-1)])]),_:1})):o("v-if",true),((q=t.tableConfig)==null?void 0:q.enableExport)!==false?(l(),se(c,{key:2,size:"small",onClick:Q},{default:V(()=>[...y[13]||(y[13]=[E(" 导出 ",-1)])]),_:1})):o("v-if",true)])]),o(" 数据表格 "),e("div",an,[e("table",nn,[e("thead",null,[e("tr",null,[((ie=t.tableConfig)==null?void 0:ie.enableSelection)!==false?(l(),n("th",on,[r(L,{"model-value":b.value,indeterminate:S.value,onChange:x,size:"small"},null,8,["model-value","indeterminate"])])):o("v-if",true),(l(true),n(D,null,ee(t.columns,H=>(l(),n("th",{key:H.key,class:te(["col-"+H.key,{required:H.required}])},$(H.label),3))),128)),y[14]||(y[14]=e("th",{class:"col-op"},"操作",-1))])]),e("tbody",null,[(l(true),n(D,null,ee(i.value,(H,_e)=>{var Le;return l(),n("tr",{key:_e,class:te({selected:v.value.includes(_e)})},[((Le=t.tableConfig)==null?void 0:Le.enableSelection)!==false?(l(),n("td",rn,[r(L,{"model-value":v.value.includes(_e),onChange:me=>O(_e),size:"small"},null,8,["model-value","onChange"])])):o("v-if",true),(l(true),n(D,null,ee(t.columns,me=>(l(),n("td",{key:me.key,class:te("col-"+me.key)},[me.type==="text"?(l(),se(ne,{key:0,"model-value":H[me.key],"onUpdate:modelValue":be=>F(_e,me.key,be),placeholder:me.placeholder,size:"small"},null,8,["model-value","onUpdate:modelValue","placeholder"])):me.type==="number"?(l(),se(K,{key:1,"model-value":H[me.key],"onUpdate:modelValue":be=>F(_e,me.key,be),size:"small",controls:false,class:"num-input"},null,8,["model-value","onUpdate:modelValue"])):me.type==="boolean"?(l(),se(_,{key:2,"model-value":H[me.key],"onUpdate:modelValue":be=>F(_e,me.key,be),size:"small"},null,8,["model-value","onUpdate:modelValue"])):me.type==="select"?(l(),se(j,{key:3,"model-value":H[me.key],"onUpdate:modelValue":be=>F(_e,me.key,be),placeholder:me.placeholder||"请选择",size:"small"},{default:V(()=>[(l(true),n(D,null,ee(me.options,be=>(l(),se(h,{key:String(be.value),label:be.label,value:be.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])):o("v-if",true)],2))),128)),e("td",dn,[r(c,{type:"danger",size:"small",link:"",onClick:me=>J(_e)},{default:V(()=>[...y[15]||(y[15]=[E(" 删除 ",-1)])]),_:1},8,["onClick"])])],2)}),128)),o(" 添加行 "),e("tr",{class:"add-row",onClick:B},[e("td",{colspan:C.value,class:"add-cell"},[e("span",cn,[r(d,{name:"add"}),y[16]||(y[16]=E(" 点击添加一行 ",-1))])],8,un)])])])]),o(" 底部统计 "),i.value.length>0?(l(),n("div",vn," 共 "+$(i.value.length)+" 条 ",1)):o("v-if",true),o(" 导入对话框 "),r(de,{modelValue:p.value,"onUpdate:modelValue":y[5]||(y[5]=H=>p.value=H),title:"导入数据",width:"550px","close-on-click-modal":false},{footer:V(()=>[r(c,{onClick:y[4]||(y[4]=H=>p.value=false)},{default:V(()=>[...y[19]||(y[19]=[E("取消",-1)])]),_:1}),r(c,{type:"primary",onClick:ve},{default:V(()=>[...y[20]||(y[20]=[E("导入",-1)])]),_:1})]),default:V(()=>[y[21]||(y[21]=e("p",{class:"dialog-tip"},"粘贴 JSON 数组格式数据:",-1)),r(ne,{modelValue:k.value,"onUpdate:modelValue":y[2]||(y[2]=H=>k.value=H),type:"textarea",rows:10,placeholder:'[{"alias": "xxx", "repoId": "xxx", ...}]'},null,8,["modelValue"]),e("div",pn,[r(le,{modelValue:U.value,"onUpdate:modelValue":y[3]||(y[3]=H=>U.value=H)},{default:V(()=>[r(re,{value:"append"},{default:V(()=>[...y[17]||(y[17]=[E("追加",-1)])]),_:1}),r(re,{value:"replace"},{default:V(()=>[...y[18]||(y[18]=[E("替换",-1)])]),_:1})]),_:1},8,["modelValue"])])]),_:1},8,["modelValue"]),o(" 预设对话框 "),r(de,{modelValue:I.value,"onUpdate:modelValue":y[9]||(y[9]=H=>I.value=H),title:"内置预设",width:"600px","close-on-click-modal":false},{footer:V(()=>[r(c,{onClick:y[8]||(y[8]=H=>I.value=false)},{default:V(()=>[...y[25]||(y[25]=[E("取消",-1)])]),_:1}),r(c,{type:"primary",onClick:W,disabled:f.value.length===0},{default:V(()=>[E(" 导入 ("+$(f.value.length)+") ",1)]),_:1},8,["disabled"])]),default:V(()=>[e("div",mn,[r(ne,{modelValue:T.value,"onUpdate:modelValue":y[6]||(y[6]=H=>T.value=H),placeholder:"搜索...",size:"small",clearable:"",class:"search-input"},null,8,["modelValue"]),r(c,{size:"small",onClick:N},{default:V(()=>[...y[22]||(y[22]=[E("全选",-1)])]),_:1}),r(c,{size:"small",onClick:y[7]||(y[7]=H=>f.value=[])},{default:V(()=>[...y[23]||(y[23]=[E("清空",-1)])]),_:1}),e("span",fn,"已选 "+$(f.value.length),1)]),e("div",gn,[(l(true),n(D,null,ee(g.value,H=>{var _e,Le,me;return l(),n("div",{key:H.alias,class:te(["preset-row",{selected:f.value.includes(H.alias),disabled:m.value.has((_e=H.alias)==null?void 0:_e.toLowerCase())}]),onClick:be=>P(H.alias)},[r(L,{"model-value":f.value.includes(H.alias),disabled:m.value.has((Le=H.alias)==null?void 0:Le.toLowerCase()),size:"small"},null,8,["model-value","disabled"]),e("span",yn,$(H.alias),1),e("span",hn,$(H.description||H.repoId),1),m.value.has((me=H.alias)==null?void 0:me.toLowerCase())?(l(),se(pe,{key:0,size:"small",type:"info"},{default:V(()=>[...y[24]||(y[24]=[E("已有",-1)])]),_:1})):o("v-if",true)],10,_n)}),128))])]),_:1},8,["modelValue"])])}}}),kn=ce(bn,[["__scopeId","data-v-3cee27e6"]]),$n={class:"config-renderer"},wn={key:0,class:"form-row"},Cn={class:"field-container"},Vn={key:7,class:"field-desc"},xn=oe({__name:"ConfigRenderer",props:{fields:{},modelValue:{},clearable:{type:Boolean,default:false},presetsMap:{default:()=>({})}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,i=p=>s.modelValue[p],v=(p,k)=>{const U={...s.modelValue,[p]:k};u("update:modelValue",U)},b=p=>{if(!p.showWhen)return true;const{field:k,value:U}=p.showWhen;return s.modelValue[k]===U},S=p=>{const k=s.modelValue[p];return Array.isArray(k)?k:[]},C=p=>{var k;return p?((k=s.presetsMap)==null?void 0:k[p])||[]:[]};return(p,k)=>{const U=A("el-switch"),I=A("el-option"),f=A("el-select"),T=A("el-input-number"),m=A("el-input");return l(),n("div",$n,[(l(true),n(D,null,ee(t.fields,g=>{var B;return l(),n(D,{key:g.key},[b(g)?(l(),n("div",wn,[e("div",{class:te(["form-label",{required:g.required}])},$(g.label),3),e("div",Cn,[o(" Boolean 类型 "),g.type==="boolean"?(l(),se(U,{key:0,"model-value":i(g.key),"onUpdate:modelValue":J=>v(g.key,J)},null,8,["model-value","onUpdate:modelValue"])):g.type==="select"?(l(),n(D,{key:1},[o(" Select 类型 "),r(f,{"model-value":i(g.key),"onUpdate:modelValue":J=>v(g.key,J),placeholder:g.placeholder||"请选择",clearable:t.clearable,style:{width:"100%"}},{default:V(()=>[(l(true),n(D,null,ee(g.options,J=>(l(),se(I,{key:String(J.value),label:J.label,value:J.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)):g.type==="number"?(l(),n(D,{key:2},[o(" Number 类型 "),r(T,{"model-value":i(g.key),"onUpdate:modelValue":J=>v(g.key,J),placeholder:g.placeholder,controls:true},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):g.type==="textarea"?(l(),n(D,{key:3},[o(" Textarea 类型 "),r(m,{"model-value":i(g.key),"onUpdate:modelValue":J=>v(g.key,J),type:"textarea",rows:4,placeholder:g.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):g.type==="table"&&g.columns?(l(),n(D,{key:4},[o(" Table 类型(数组对象编辑) "),r(kn,{columns:g.columns,"model-value":S(g.key),"onUpdate:modelValue":J=>v(g.key,J),"table-config":g.tableConfig,presets:C((B=g.tableConfig)==null?void 0:B.presetsSource)},null,8,["columns","model-value","onUpdate:modelValue","table-config","presets"])],64)):g.type==="password"?(l(),n(D,{key:5},[o(" Password 类型 "),r(m,{"model-value":i(g.key),"onUpdate:modelValue":J=>v(g.key,J),type:"password","show-password":"",placeholder:g.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(D,{key:6},[o(" Text/String 类型 (默认) "),r(m,{"model-value":i(g.key),"onUpdate:modelValue":J=>v(g.key,J),placeholder:g.placeholder,clearable:t.clearable},null,8,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)),o(" 字段描述 "),g.description?(l(),n("div",Vn,$(g.description),1)):o("v-if",true)])])):o("v-if",true)],64)}),128))])}}}),et=ce(xn,[["__scopeId","data-v-e970d3f2"]]),Sn={class:"dialog-layout"},In={class:"tab-nav"},Tn=["onClick"],On={key:0,class:"tab-badge"},Un={class:"tab-content"},zn={class:"content-section"},Pn={class:"form-group"},Dn={class:"form-row"},Nn={class:"form-group flex-1"},Fn={class:"form-group"},Ln={class:"switch-wrapper"},En={class:"switch-label"},An={class:"form-group"},Mn={class:"section-divider"},jn={class:"content-section"},Rn={class:"override-hint-bar"},Bn={class:"pipeline-flow"},qn={class:"phase-icon"},Hn={class:"phase-info"},Jn={class:"phase-name"},Gn={class:"phase-desc"},Kn={class:"phase-badge"},Wn={key:0,class:"phase-middlewares"},Zn={class:"mw-card"},Yn={class:"mw-content"},Xn={class:"mw-name"},Qn={class:"mw-desc"},eo={key:2,class:"phase-connector"},to={class:"connector-arrow"},so={class:"content-section"},lo={class:"override-hint-bar"},ao={key:0,class:"plugins-override-list"},no=["onClick"],oo={class:"plugin-info"},io={class:"plugin-name"},ro={key:0,class:"override-badge"},uo={class:"plugin-actions"},co={class:"plugin-config-fields"},vo={key:0,class:"override-field-row"},po={class:"field-label"},mo={class:"field-input"},fo={key:0,class:"field-hint"},go={key:1,class:"empty-hint"},_o={class:"dialog-footer"},yo=oe({__name:"ChannelConfigDialog",props:{modelValue:{type:Boolean},channel:{default:null}},emits:["update:modelValue","saved"],setup(t,{emit:a}){const s=t,u=a,i=G({get:()=>s.modelValue,set:_=>u("update:modelValue",_)}),v=G(()=>{var _;return!!((_=s.channel)!=null&&_.id)}),b=w("basic"),S=w(false),C=w(new Set),p=w([]),k=w({}),U=w([]),I=w([]),f=w({name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}),T=[{id:"basic",label:"基本信息",icon:"file-text"},{id:"middlewares",label:"中间件流程",icon:"git-branch"},{id:"plugins",label:"插件配置",icon:"puzzle"}],m=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],g={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},B=G(()=>f.value.connectorId?k.value[f.value.connectorId]||[]:[]),J=G(()=>{const _=p.value.find(h=>h.id===f.value.connectorId);return(_==null?void 0:_.name)||"连接器"}),F=G(()=>T.map(_=>{let h="";return _.id==="middlewares"&&(h=String(U.value.length)),_.id==="plugins"&&O.value.length>0&&(h=String(O.value.length)),{..._,badge:h}})),O=G(()=>I.value.filter(_=>_.configFields&&_.configFields.length>0)),x=_=>U.value.filter(h=>h.phase===_),Y=(_,h)=>{var j,re,le;return(le=(re=(j=f.value.pluginOverrides)==null?void 0:j[_])==null?void 0:re.middlewares)==null?void 0:le[h]},Q=(_,h,j)=>{f.value.pluginOverrides||(f.value.pluginOverrides={}),f.value.pluginOverrides[_]||(f.value.pluginOverrides[_]={}),f.value.pluginOverrides[_].middlewares||(f.value.pluginOverrides[_].middlewares={}),j==null?(delete f.value.pluginOverrides[_].middlewares[h],Object.keys(f.value.pluginOverrides[_].middlewares).length===0&&delete f.value.pluginOverrides[_].middlewares,Object.keys(f.value.pluginOverrides[_]).length===0&&delete f.value.pluginOverrides[_]):f.value.pluginOverrides[_].middlewares[h]=j},ve=_=>{const h=Y(_.configGroup||_.name,_.name);return h!==void 0?h?"active override":"override":_.enabled?"active":""},N=(_,h)=>{var j,re;return(re=(j=f.value.pluginOverrides)==null?void 0:j[_])==null?void 0:re[h]},P=(_,h,j)=>{f.value.pluginOverrides||(f.value.pluginOverrides={}),f.value.pluginOverrides[_]||(f.value.pluginOverrides[_]={}),j==null||j===""?(delete f.value.pluginOverrides[_][h],Object.keys(f.value.pluginOverrides[_]).length===0&&delete f.value.pluginOverrides[_]):f.value.pluginOverrides[_][h]=j},W=_=>{var j;const h=(j=f.value.pluginOverrides)==null?void 0:j[_];return h&&Object.keys(h).length>0},z=_=>{f.value.pluginOverrides&&delete f.value.pluginOverrides[_]},y=_=>{C.value.has(_)?C.value.delete(_):C.value.add(_)},d=(_,h)=>{var M,Z;if(!h.showWhen)return true;const{field:j,value:re}=h.showWhen,le=(Z=(M=f.value.pluginOverrides)==null?void 0:M[_.id])==null?void 0:Z[j],de=_.config[j];return(le!==void 0?le:de)===re},c=async _=>{if(f.value.connectorConfig={},_&&!k.value[_])try{const h=await Be.fields(_);k.value[_]=h}catch(h){console.error("Failed to load connector fields:",h)}},L=async()=>{var _;if(!f.value.name){X.error("请输入渠道名称");return}if(!f.value.connectorId){X.error("请选择连接器");return}S.value=true;try{v.value&&((_=s.channel)!=null&&_.id)?(await ze.update(s.channel.id,f.value),X.success("保存成功")):(await ze.create(f.value),X.success("创建成功")),u("saved"),i.value=false}catch(h){X.error(h instanceof Error?h.message:"操作失败")}finally{S.value=false}},ne=()=>{b.value="basic",C.value.clear()},K=async()=>{try{const[_,h,j]=await Promise.all([Be.list(),He.list(),at.list()]);p.value=_,U.value=h,I.value=j.filter(re=>re.configFields&&re.configFields.length>0||re.middlewares&&re.middlewares.length>0)}catch(_){console.error("Failed to load data:",_)}};return ye(()=>s.modelValue,async _=>{if(_)if(await K(),s.channel){if(f.value=JSON.parse(JSON.stringify(s.channel)),f.value.pluginOverrides||(f.value.pluginOverrides={}),f.value.connectorConfig||(f.value.connectorConfig={}),f.value.connectorId&&!k.value[f.value.connectorId])try{const h=await Be.fields(f.value.connectorId);k.value[f.value.connectorId]=h}catch(h){console.error("Failed to load connector fields:",h)}for(const h of Object.keys(f.value.pluginOverrides))C.value.add(h)}else f.value={name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}}),(_,h)=>{const j=A("k-icon"),re=A("el-input"),le=A("el-option"),de=A("el-select"),pe=A("el-switch"),M=A("k-button"),Z=A("el-input-number"),ue=A("el-dialog");return l(),se(ue,{modelValue:i.value,"onUpdate:modelValue":h[6]||(h[6]=q=>i.value=q),title:v.value?"编辑渠道":"创建渠道",width:"800px","close-on-click-modal":false,class:"channel-config-dialog",onClosed:ne},{footer:V(()=>[e("div",_o,[r(M,{onClick:h[5]||(h[5]=q=>i.value=false)},{default:V(()=>[...h[24]||(h[24]=[E("取消",-1)])]),_:1}),r(M,{type:"primary",onClick:L,loading:S.value},{default:V(()=>[E($(v.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:V(()=>[e("div",Sn,[o(" 左侧 Tab 导航 "),e("div",In,[(l(true),n(D,null,ee(F.value,q=>(l(),n("div",{key:q.id,class:te(["tab-item",{active:b.value===q.id}]),onClick:ie=>b.value=q.id},[r(j,{name:q.icon},null,8,["name"]),e("span",null,$(q.label),1),q.badge?(l(),n("span",On,$(q.badge),1)):o("v-if",true)],10,Tn))),128))]),o(" 右侧内容区 "),e("div",Un,[o(" 基本信息 "),Te(e("div",zn,[h[13]||(h[13]=e("div",{class:"section-header"},[e("h4",null,"基本信息"),e("p",null,"设置渠道的名称、连接器和标签")],-1)),e("div",Pn,[h[7]||(h[7]=e("label",{class:"form-label required"},"渠道名称",-1)),r(re,{modelValue:f.value.name,"onUpdate:modelValue":h[0]||(h[0]=q=>f.value.name=q),placeholder:"如 OpenAI DALL-E"},null,8,["modelValue"]),h[8]||(h[8]=e("div",{class:"form-hint"},"用户可见的渠道名称,冲突时会自动添加后缀",-1))]),e("div",Dn,[e("div",Nn,[h[9]||(h[9]=e("label",{class:"form-label required"},"连接器",-1)),r(de,{modelValue:f.value.connectorId,"onUpdate:modelValue":h[1]||(h[1]=q=>f.value.connectorId=q),placeholder:"选择连接器",onChange:c,style:{width:"100%"}},{default:V(()=>[(l(true),n(D,null,ee(p.value,q=>(l(),se(le,{key:q.id,label:q.name,value:q.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Fn,[h[10]||(h[10]=e("label",{class:"form-label"},"启用状态",-1)),e("div",Ln,[r(pe,{modelValue:f.value.enabled,"onUpdate:modelValue":h[2]||(h[2]=q=>f.value.enabled=q)},null,8,["modelValue"]),e("span",En,$(f.value.enabled?"启用":"禁用"),1)])])]),e("div",An,[h[11]||(h[11]=e("label",{class:"form-label"},"标签",-1)),r(At,{modelValue:f.value.tags,"onUpdate:modelValue":h[3]||(h[3]=q=>f.value.tags=q),placeholder:"输入标签后按回车..."},null,8,["modelValue"]),h[12]||(h[12]=e("div",{class:"form-hint"},"用于分类和筛选渠道",-1))]),o(" 连接器配置(内嵌) "),B.value.length>0?(l(),n(D,{key:0},[e("div",Mn,[e("span",null,$(J.value)+" 配置",1)]),r(et,{fields:B.value,modelValue:f.value.connectorConfig,"onUpdate:modelValue":h[4]||(h[4]=q=>f.value.connectorConfig=q)},null,8,["fields","modelValue"])],64)):o("v-if",true)],512),[[Oe,b.value==="basic"]]),o(" 中间件流程 "),Te(e("div",jn,[h[18]||(h[18]=e("div",{class:"section-header"},[e("h4",null,"中间件流程"),e("p",null,"控制此渠道的中间件启用状态")],-1)),e("div",Rn,[r(j,{name:"info-circle"}),h[14]||(h[14]=e("span",null,"留空表示跟随全局配置",-1))]),e("div",Bn,[(l(),n(D,null,ee(m,(q,ie)=>e("div",{key:q.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:te(["phase-header",q.colorClass])},[e("div",qn,[r(j,{name:q.icon},null,8,["name"])]),e("div",Hn,[e("span",Jn,$(q.label),1),e("span",Gn,$(q.description),1)]),e("span",Kn,$(x(q.id).length),1)],2),o(" 中间件列表 "),x(q.id).length>0?(l(),n("div",Wn,[(l(true),n(D,null,ee(x(q.id),H=>(l(),n("div",{key:H.name,class:te(["mw-item",{"has-override":Y(H.configGroup||H.name,H.name)!==void 0}])},[e("div",Zn,[e("div",{class:te(["mw-status",ve(H)])},null,2),e("div",Yn,[e("span",Xn,$(H.displayName),1),e("span",Qn,$(H.description||g[H.category]||H.category),1)]),r(de,{"model-value":Y(H.configGroup||H.name,H.name),"onUpdate:modelValue":_e=>Q(H.configGroup||H.name,H.name,_e),placeholder:H.enabled?"全局: 启用":"全局: 禁用",clearable:"",size:"small",class:"mw-switch"},{default:V(()=>[r(le,{label:"启用",value:true}),r(le,{label:"禁用",value:false})]),_:1},8,["model-value","onUpdate:modelValue","placeholder"])])],2))),128))])):(l(),n(D,{key:1},[o(" 空状态 "),h[15]||(h[15]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),ie<m.length-1?(l(),n("div",eo,[h[16]||(h[16]=e("div",{class:"connector-line"},null,-1)),e("div",to,[r(j,{name:"chevron-down"})]),h[17]||(h[17]=e("div",{class:"connector-line"},null,-1))])):o("v-if",true)])),64))]),o(" 底部说明 "),h[19]||(h[19]=e("div",{class:"pipeline-footer"},[e("div",{class:"footer-item"},[e("span",{class:"dot active"}),e("span",null,"启用 - 中间件将在请求中执行")]),e("div",{class:"footer-item"},[e("span",{class:"dot"}),e("span",null,"禁用 - 中间件将被跳过")]),e("div",{class:"footer-item"},[e("span",{class:"dot override"}),e("span",null,"已覆盖 - 与全局配置不同")])],-1))],512),[[Oe,b.value==="middlewares"]]),o(" 插件配置 "),Te(e("div",so,[h[23]||(h[23]=e("div",{class:"section-header"},[e("h4",null,"插件配置覆盖"),e("p",null,"为此渠道单独配置插件参数")],-1)),e("div",lo,[r(j,{name:"info-circle"}),h[20]||(h[20]=e("span",null,"留空使用全局配置,填写后将覆盖全局设置",-1))]),O.value.length>0?(l(),n("div",ao,[(l(true),n(D,null,ee(O.value,q=>(l(),n("div",{key:q.id,class:te(["plugin-override-card",{expanded:C.value.has(q.id)}])},[e("div",{class:"plugin-header",onClick:ie=>y(q.id)},[e("div",oo,[e("span",io,$(q.name),1),W(q.id)?(l(),n("span",ro,"已覆盖")):o("v-if",true)]),e("div",uo,[W(q.id)?(l(),se(M,{key:0,size:"mini",onClick:fe(ie=>z(q.id),["stop"])},{default:V(()=>[...h[21]||(h[21]=[E(" 清除 ",-1)])]),_:1},8,["onClick"])):o("v-if",true),r(j,{name:C.value.has(q.id)?"chevron-up":"chevron-down"},null,8,["name"])])],8,no),Te(e("div",co,[(l(true),n(D,null,ee(q.configFields,ie=>(l(),n(D,{key:ie.key},[d(q,ie)?(l(),n("div",vo,[e("label",po,$(ie.label),1),e("div",mo,[o(" Boolean 类型 "),ie.type==="boolean"?(l(),se(de,{key:0,"model-value":N(q.id,ie.key),"onUpdate:modelValue":H=>P(q.id,ie.key,H),placeholder:"使用全局配置",clearable:""},{default:V(()=>[r(le,{label:"是",value:true}),r(le,{label:"否",value:false})]),_:1},8,["model-value","onUpdate:modelValue"])):ie.type==="select"?(l(),n(D,{key:1},[o(" Select 类型 "),r(de,{"model-value":N(q.id,ie.key),"onUpdate:modelValue":H=>P(q.id,ie.key,H),placeholder:`全局: ${q.config[ie.key]??"未设置"}`,clearable:""},{default:V(()=>[(l(true),n(D,null,ee(ie.options,H=>(l(),se(le,{key:String(H.value),label:H.label,value:H.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])],64)):ie.type==="number"?(l(),n(D,{key:2},[o(" Number 类型 "),r(Z,{"model-value":N(q.id,ie.key),"onUpdate:modelValue":H=>P(q.id,ie.key,H),placeholder:`全局: ${q.config[ie.key]??""}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(D,{key:3},[o(" Text/String 类型 (默认) "),r(re,{"model-value":N(q.id,ie.key),"onUpdate:modelValue":H=>P(q.id,ie.key,H),placeholder:`全局: ${q.config[ie.key]??"未设置"}`,clearable:""},null,8,["model-value","onUpdate:modelValue","placeholder"])],64))]),ie.description?(l(),n("div",fo,$(ie.description),1)):o("v-if",true)])):o("v-if",true)],64))),128))],512),[[Oe,C.value.has(q.id)]])],2))),128))])):(l(),n("div",go,[r(j,{name:"apps"}),h[22]||(h[22]=e("span",null,"暂无可配置的插件",-1))]))],512),[[Oe,b.value==="plugins"]])])])]),_:1},8,["modelValue","title"])}}}),ho=ce(yo,[["__scopeId","data-v-74bfe0c7"]]),bo={key:0},ko=oe({__name:"LoadingState",props:{text:{default:"加载中..."},icon:{default:"sync"},size:{default:"default"}},setup(t){const a=t,s=G(()=>`size-${a.size}`);return(u,i)=>{const v=A("k-icon");return l(),n("div",{class:te(["loading-state",s.value])},[r(v,{name:t.icon,class:"loading-icon"},null,8,["name"]),t.text?(l(),n("span",bo,$(t.text),1)):o("v-if",true)],2)}}}),$o=ce(ko,[["__scopeId","data-v-99cf565d"]]),wo={class:"ml-view-container"},Co={class:"ml-view-header"},Vo={class:"ml-header-left"},xo={class:"ml-header-right"},So={class:"ml-view-content"},Io={class:"ml-grid"},To=["onClick"],Oo={class:"card-header"},Uo={class:"header-main"},zo={class:"channel-name"},Po={class:"header-meta"},Do={class:"connector-badge"},No={key:0,class:"cost-badge"},Fo={class:"card-body"},Lo={key:0,class:"field-list"},Eo={class:"field-label"},Ao={class:"field-value"},Mo={key:1,class:"tags-list"},jo={class:"ml-table-container"},Ro={class:"ml-table"},Bo=["onClick"],qo={class:"col-name"},Ho={class:"name-text"},Jo={class:"col-connector"},Go={class:"connector-badge"},Ko={class:"col-tags"},Wo={class:"tags-wrapper"},Zo={key:0,class:"mini-tag more"},Yo={class:"col-cost"},Xo={key:0,class:"cost-value"},Qo={class:"action-btns"},ei=oe({__name:"ChannelsView",setup(t){const a=["text2img","img2img","NSFW"],s=w(false),u=w("card"),i=w([]),v=w([]),b=w([]),S=w({}),C=w(false),p=w(null),k=w([]),U=G(()=>{const N=new Set;return i.value.forEach(P=>{(P.tags||[]).forEach(W=>N.add(W))}),Array.from(N).sort()}),I=G(()=>k.value.length===0?i.value:i.value.filter(N=>k.value.every(P=>(N.tags||[]).includes(P)))),f=N=>{const P=v.value.find(W=>W.id===N);return P?P.name:N},T=N=>{var W;const P=v.value.find(z=>z.id===N.connectorId);return(W=P==null?void 0:P.cardFields)!=null&&W.length?P.cardFields.map(z=>{const y=P.fields.find(d=>d.key===z.key);return{key:z.key,label:z.label||(y==null?void 0:y.label)||z.key,format:z.format||"text"}}):[]},m=(N,P)=>{var z,y,d,c,L;const W=P.configGroup;switch(P.source){case"channel":if(W){const ne=(y=(z=N.pluginOverrides)==null?void 0:z[W])==null?void 0:y[P.key];if(ne!==void 0)return ne}return N[P.key];case"connectorConfig":return(d=N.connectorConfig)==null?void 0:d[P.key];case"pluginOverride":return W?(L=(c=N.pluginOverrides)==null?void 0:c[W])==null?void 0:L[P.key]:void 0;default:return}},g=(N,P)=>{var d,c,L;const W=P.configGroup;if(!W)return P.suffix||"";const z=(c=(d=N.pluginOverrides)==null?void 0:d[W])==null?void 0:c.currencyLabel;if(z)return` ${z}${P.suffix||""}`;const y=(L=S.value[W])==null?void 0:L.currencyLabel;return y?` ${y}${P.suffix||""}`:` 积分${P.suffix||""}`},B=(N,P,W)=>{if(N==null||N==="")return"-";let z;switch(P){case"password-mask":z="••••••";break;case"boolean":z=N?"是":"否";break;case"number":z=String(N);break;case"size":z=String(N);break;case"currency":z=N===0?"免费":String(N);break;default:z=String(N)}return W?`${z} ${W}`:z},J=async()=>{s.value=true;try{const[N,P,W]=await Promise.all([ze.list(),Be.list(),He.cardFields()]);i.value=N,v.value=P,b.value=W.fields,S.value=W.globalConfigs}catch{X.error("加载数据失败")}finally{s.value=false}},F=()=>{p.value=null,C.value=true},O=N=>{p.value=N,C.value=true},x=()=>{J()},Y=async N=>{if(confirm(`确定要删除渠道 "${N.name}" 吗?`))try{await ze.delete(N.id),X.success("删除成功"),J()}catch{X.error("删除失败")}},Q=async N=>{try{await ze.toggle(N.id,N.enabled)}catch{N.enabled=!N.enabled,X.error("操作失败")}},ve=N=>{const P=JSON.parse(JSON.stringify(N));delete P.id,P.name=`${N.name} (副本)`,p.value=P,C.value=true};return he(()=>{J()}),(N,P)=>{const W=A("k-icon"),z=A("k-button"),y=A("el-switch");return l(),n("div",wo,[e("div",Co,[e("div",Vo,[r(z,{solid:"",type:"primary",onClick:F},{icon:V(()=>[r(W,{name:"add"})]),default:V(()=>[P[7]||(P[7]=E(" 新建渠道 ",-1))]),_:1}),r(dt,{modelValue:k.value,"onUpdate:modelValue":P[0]||(P[0]=d=>k.value=d),"all-tags":U.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",xo,[r(Et,{modelValue:u.value,"onUpdate:modelValue":P[1]||(P[1]=d=>u.value=d)},null,8,["modelValue"])])]),e("div",So,[s.value?(l(),se($o,{key:0})):u.value==="card"?(l(),n(D,{key:1},[o(" 卡片视图 "),e("div",Io,[(l(true),n(D,null,ee(I.value,d=>(l(),n("div",{key:d.id},[e("div",{class:"ml-card ml-card--clickable",onClick:c=>O(d)},[e("div",Oo,[e("div",Uo,[e("div",zo,$(d.name),1),r(y,{modelValue:d.enabled,"onUpdate:modelValue":c=>d.enabled=c,size:"small",onChange:c=>Q(d),onClick:P[2]||(P[2]=fe(()=>{},["stop"]))},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("div",Po,[e("span",Do,[r(W,{name:"link"}),E(" "+$(f(d.connectorId)),1)]),o(" 中间件字段(如费用)显示在标题旁 "),(l(true),n(D,null,ee(b.value,c=>(l(),n(D,{key:`mw-${c.key}`},[c.key==="cost"?(l(),n("span",No,$(B(m(d,c),c.format,g(d,c))),1)):o("v-if",true)],64))),128))])]),e("div",Fo,[o(" 配置字段列表 "),T(d).length?(l(),n("div",Lo,[(l(true),n(D,null,ee(T(d),c=>(l(),n("div",{key:c.key,class:"field-item"},[e("span",Eo,$(c.label),1),e("span",Ao,$(B(d.connectorConfig[c.key],c.format)),1)]))),128))])):o("v-if",true),o(" 标签 "),d.tags&&d.tags.length?(l(),n("div",Mo,[(l(true),n(D,null,ee(d.tags,c=>(l(),n("span",{key:c,class:"tag-pill"},$(c),1))),128))])):o("v-if",true)]),e("div",{class:"card-footer",onClick:P[3]||(P[3]=fe(()=>{},["stop"]))},[r(z,{size:"mini",class:"ml-btn-outline-primary",onClick:c=>ve(d)},{icon:V(()=>[r(W,{name:"copy"})]),default:V(()=>[P[8]||(P[8]=E(" 复制 ",-1))]),_:1},8,["onClick"]),P[10]||(P[10]=e("div",{class:"spacer"},null,-1)),r(z,{size:"mini",class:"ml-btn-outline-danger",onClick:c=>Y(d)},{icon:V(()=>[r(W,{name:"delete"})]),default:V(()=>[P[9]||(P[9]=E(" 删除 ",-1))]),_:1},8,["onClick"])])],8,To)]))),128))])],2112)):(l(),n(D,{key:2},[o(" 列表视图 "),e("div",jo,[e("table",Ro,[P[13]||(P[13]=e("thead",null,[e("tr",null,[e("th",{class:"col-name"},"名称"),e("th",{class:"col-connector"},"连接器"),e("th",{class:"col-tags"},"标签"),e("th",{class:"col-cost"},"费用"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(l(true),n(D,null,ee(I.value,d=>(l(),n("tr",{key:d.id,onClick:c=>O(d)},[e("td",qo,[e("span",Ho,$(d.name),1)]),e("td",Jo,[e("span",Go,$(f(d.connectorId)),1)]),e("td",Ko,[e("div",Wo,[(l(true),n(D,null,ee((d.tags||[]).slice(0,2),c=>(l(),n("span",{key:c,class:"mini-tag"},$(c),1))),128)),d.tags&&d.tags.length>2?(l(),n("span",Zo,"+"+$(d.tags.length-2),1)):o("v-if",true)])]),e("td",Yo,[(l(true),n(D,null,ee(b.value,c=>(l(),n(D,{key:`mw-${c.key}`},[c.key==="cost"?(l(),n("span",Xo,$(B(m(d,c),c.format,g(d,c))),1)):o("v-if",true)],64))),128))]),e("td",{class:"col-status",onClick:P[4]||(P[4]=fe(()=>{},["stop"]))},[r(y,{modelValue:d.enabled,"onUpdate:modelValue":c=>d.enabled=c,size:"small",onChange:c=>Q(d)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:P[5]||(P[5]=fe(()=>{},["stop"]))},[e("div",Qo,[r(z,{size:"mini",class:"ml-btn-outline-primary",onClick:c=>ve(d)},{icon:V(()=>[r(W,{name:"copy"})]),default:V(()=>[P[11]||(P[11]=E(" 复制 ",-1))]),_:1},8,["onClick"]),r(z,{size:"mini",class:"ml-btn-outline-danger",onClick:c=>Y(d)},{icon:V(()=>[r(W,{name:"delete"})]),default:V(()=>[P[12]||(P[12]=E(" 删除 ",-1))]),_:1},8,["onClick"])])])],8,Bo))),128))])])])],2112))]),o(" 编辑/创建对话框 "),r(ho,{modelValue:C.value,"onUpdate:modelValue":P[6]||(P[6]=d=>C.value=d),channel:p.value,onSaved:x},null,8,["modelValue","channel"])])}}}),ti=ce(ei,[["__scopeId","data-v-67a4b49d"]]),si={class:"json-editor"},li={key:0,class:"error-msg"},ai=oe({__name:"JsonEditor",props:{modelValue:{},rows:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,i=w(""),v=w("");ye(()=>s.modelValue,S=>{try{i.value=JSON.stringify(S,null,2)}catch{i.value=""}},{immediate:true});const b=()=>{try{const S=JSON.parse(i.value);v.value="",u("update:modelValue",S)}catch{v.value="Invalid JSON format"}};return(S,C)=>{const p=A("el-input");return l(),n("div",si,[r(p,{modelValue:i.value,"onUpdate:modelValue":C[0]||(C[0]=k=>i.value=k),type:"textarea",rows:t.rows,class:"code-input",onBlur:b},null,8,["modelValue","rows"]),v.value?(l(),n("div",li,$(v.value),1)):o("v-if",true)])}}}),ni=ce(ai,[["__scopeId","data-v-4d47b7db"]]),oi={class:"image-upload"},ii={key:0,class:"image-list"},ri={class:"image-preview"},di=["src","alt"],ui={class:"image-overlay"},ci={class:"image-name"},vi={class:"upload-content"},pi={key:1,class:"upload-loading"},mi=oe({__name:"ImageUpload",props:{modelValue:{},maxCount:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,i=w(),v=w(false),b=w([]),S=async()=>{var m;const T=[];for(const g of s.modelValue)g&&T.push({url:g,filename:((m=g.split("/").pop())==null?void 0:m.split("?")[0])||"image",mime:"image/png",previewUrl:g});b.value=T};ye(()=>s.modelValue,()=>{S()},{immediate:true});const C=()=>{var T;(T=i.value)==null||T.click()},p=async T=>{const m=T.target;!m.files||m.files.length===0||(await U(Array.from(m.files)),m.value="")},k=async T=>{var g;const m=(g=T.dataTransfer)==null?void 0:g.files;!m||m.length===0||await U(Array.from(m).filter(B=>B.type.startsWith("image/")))},U=async T=>{if(T.length===0)return;const m=s.maxCount||10;b.value.length+T.length>m&&(X.warning(`最多上传 ${m} 张图片`),T=T.slice(0,m-b.value.length)),v.value=true;try{for(const g of T){const B=await I(g),J=await bs.upload(B,g.type,g.name);if(!J.url){X.error("缓存服务未配置 selfUrl,无法获取图片 URL");continue}b.value.push({url:J.url,filename:J.filename,mime:J.mime,previewUrl:J.url})}u("update:modelValue",b.value.map(g=>g.url))}catch(g){X.error("上传失败"),console.error(g)}finally{v.value=false}},I=T=>new Promise((m,g)=>{const B=new FileReader;B.onload=()=>{const F=B.result.split(",")[1];m(F)},B.onerror=g,B.readAsDataURL(T)}),f=T=>{b.value.splice(T,1),u("update:modelValue",b.value.map(m=>m.url))};return he(()=>{S()}),(T,m)=>{const g=A("k-icon"),B=A("k-button");return l(),n("div",oi,[o(" 已上传的图片列表 "),b.value.length>0?(l(),n("div",ii,[(l(true),n(D,null,ee(b.value,(J,F)=>(l(),n("div",{key:J.url||F,class:"image-item"},[e("div",ri,[e("img",{src:J.previewUrl,alt:J.filename},null,8,di),e("div",ui,[r(B,{size:"mini",class:"remove-btn",onClick:O=>f(F)},{icon:V(()=>[r(g,{name:"delete"})]),_:1},8,["onClick"])])]),e("div",ci,$(J.filename),1)]))),128))])):o("v-if",true),o(" 上传按钮 "),e("div",{class:"upload-area",onClick:C,onDragover:m[0]||(m[0]=fe(()=>{},["prevent"])),onDrop:fe(k,["prevent"])},[e("input",{ref_key:"fileInput",ref:i,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:p},null,544),e("div",vi,[r(g,{name:"add",class:"upload-icon"}),m[1]||(m[1]=e("span",{class:"upload-text"},"点击或拖拽上传图片",-1))])],32),o(" 加载状态 "),v.value?(l(),n("div",pi,[r(g,{name:"sync",class:"loading-icon"}),m[2]||(m[2]=E(" 上传中... ",-1))])):o("v-if",true)])}}}),zt=ce(mi,[["__scopeId","data-v-47f2485e"]]),fi={class:"ml-view-container"},gi={class:"ml-view-header"},_i={class:"ml-header-left"},yi={class:"ml-header-right"},hi={class:"ml-view-content"},bi={key:0,class:"loading-state"},ki={class:"ml-masonry"},$i=["onClick"],wi={key:0,class:"card-thumbnail"},Ci=["src","alt"],Vi={class:"thumbnail-overlay"},xi={key:0,class:"ref-count"},Si={key:1,class:"card-thumbnail placeholder"},Ii={class:"card-content"},Ti={class:"card-title"},Oi={key:0,class:"card-tags"},Ui={key:0,class:"mini-tag more"},zi={class:"ml-table-container"},Pi={class:"ml-table"},Di=["onClick"],Ni={class:"col-thumb"},Fi={class:"thumb-wrapper"},Li=["src","alt"],Ei={key:1,class:"thumb-placeholder"},Ai={class:"col-name"},Mi={class:"name-text"},ji={class:"col-template"},Ri={class:"template-preview"},Bi={class:"col-refs"},qi={key:0,class:"ref-badge"},Hi={key:1,class:"no-data"},Ji={class:"col-source"},Gi={class:"action-btns"},Ki={class:"dialog-footer"},Wi=oe({__name:"PresetsView",setup(t){const a=["本地","远程","text2img","img2img","NSFW"],s=w(false),u=w([]),i=w(false),v=w(false),b=w([]),S=w("card"),C=G(()=>{const O=new Set;return u.value.forEach(x=>{(x.tags||[]).forEach(Y=>O.add(Y))}),Array.from(O).sort()}),p=w({name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"}),k=w([]);ye(()=>p.value.thumbnail,O=>{k.value=O?[O]:[]},{immediate:true}),ye(k,O=>{p.value.thumbnail=O.length>0?O[0]:""});const U=G(()=>b.value.length===0?u.value:u.value.filter(O=>b.value.every(x=>x==="本地"?O.source==="user":x==="远程"?O.source==="api":(O.tags||[]).includes(x)))),I=async()=>{s.value=true;try{u.value=await Ie.list()}catch{X.error("加载数据失败")}finally{s.value=false}},f=()=>{v.value=false,p.value={name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"},i.value=true},T=O=>{v.value=true,p.value=JSON.parse(JSON.stringify(O)),i.value=true},m=O=>{v.value=false;const x=JSON.parse(JSON.stringify(O));delete x.id,x.name=`${O.name} (副本)`,x.source="user",p.value=x,i.value=true},g=async O=>{try{await Ie.toggle(O.id,O.enabled)}catch{O.enabled=!O.enabled,X.error("操作失败")}},B=(O,x=50)=>{if(!O)return"-";const Y=O.replace(/\s+/g," ").trim();return Y.length<=x?Y:Y.slice(0,x)+"..."},J=async()=>{if(!p.value.name||!p.value.promptTemplate){X.warning("请填写必要信息");return}try{v.value&&p.value.id?(await Ie.update(p.value.id,p.value),X.success("更新成功")):(await Ie.create(p.value),X.success("创建成功")),i.value=false,I()}catch{X.error("操作失败")}},F=async O=>{if(confirm(`确定要删除预设 "${O.name}" 吗?`))try{await Ie.delete(O.id),X.success("删除成功"),I()}catch{X.error("删除失败")}};return he(()=>{I()}),(O,x)=>{const Y=A("k-icon"),Q=A("k-button"),ve=A("el-switch"),N=A("el-input"),P=A("el-form-item"),W=A("el-divider"),z=A("el-form"),y=A("el-dialog");return l(),n("div",fi,[e("div",gi,[e("div",_i,[r(Q,{solid:"",type:"primary",onClick:f},{icon:V(()=>[r(Y,{name:"add"})]),default:V(()=>[x[14]||(x[14]=E(" 新建预设 ",-1))]),_:1}),r(dt,{modelValue:b.value,"onUpdate:modelValue":x[0]||(x[0]=d=>b.value=d),"all-tags":C.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",yi,[r(Et,{modelValue:S.value,"onUpdate:modelValue":x[1]||(x[1]=d=>S.value=d)},null,8,["modelValue"])])]),e("div",hi,[s.value?(l(),n("div",bi,[r(Y,{name:"sync",class:"ml-spin"}),x[15]||(x[15]=E(" 加载中... ",-1))])):S.value==="card"?(l(),n(D,{key:1},[o(" 卡片视图 (瀑布流) "),e("div",ki,[(l(true),n(D,null,ee(U.value,d=>{var c,L;return l(),n("div",{key:d.id,class:"ml-masonry-item"},[e("div",{class:"preset-card",onClick:ne=>T(d)},[o(" 缩略图 "),d.thumbnail?(l(),n("div",wi,[e("img",{src:d.thumbnail,alt:d.name,loading:"lazy"},null,8,Ci),e("div",Vi,[(c=d.referenceImages)!=null&&c.length?(l(),n("span",xi,[r(Y,{name:"image"}),E(" "+$(d.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",Si,[r(Y,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",Ii,[e("div",Ti,$(d.name),1),(L=d.tags)!=null&&L.length?(l(),n("div",Oi,[(l(true),n(D,null,ee(d.tags.slice(0,4),ne=>(l(),n("span",{key:ne,class:"mini-tag"},$(ne),1))),128)),d.tags.length>4?(l(),n("span",Ui,"+"+$(d.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮 "),e("div",{class:"card-actions",onClick:x[2]||(x[2]=fe(()=>{},["stop"]))},[r(ve,{modelValue:d.enabled,"onUpdate:modelValue":ne=>d.enabled=ne,size:"small",onChange:ne=>g(d)},null,8,["modelValue","onUpdate:modelValue","onChange"]),r(Q,{size:"mini",class:"ml-btn-outline-primary",onClick:ne=>m(d)},{icon:V(()=>[r(Y,{name:"copy"})]),default:V(()=>[x[16]||(x[16]=E(" 复制 ",-1))]),_:1},8,["onClick"]),d.source==="user"?(l(),se(Q,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:ne=>F(d)},{icon:V(()=>[r(Y,{name:"delete"})]),default:V(()=>[x[17]||(x[17]=E(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)]),o(" 来源标记 "),e("div",{class:te(["source-indicator",d.source])},$(d.source==="api"?"远程":"本地"),3)],8,$i)])}),128))])],2112)):(l(),n(D,{key:2},[o(" 列表视图 "),e("div",zi,[e("table",Pi,[x[20]||(x[20]=e("thead",null,[e("tr",null,[e("th",{class:"col-thumb"},"缩略图"),e("th",{class:"col-name"},"名称"),e("th",{class:"col-template"},"Prompt 模板"),e("th",{class:"col-refs"},"参考图"),e("th",{class:"col-source"},"来源"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(l(true),n(D,null,ee(U.value,d=>{var c;return l(),n("tr",{key:d.id,onClick:L=>T(d)},[e("td",Ni,[e("div",Fi,[d.thumbnail?(l(),n("img",{key:0,src:d.thumbnail,alt:d.name},null,8,Li)):(l(),n("div",Ei,[r(Y,{name:"image"})]))])]),e("td",Ai,[e("span",Mi,$(d.name),1)]),e("td",ji,[e("span",Ri,$(B(d.promptTemplate)),1)]),e("td",Bi,[(c=d.referenceImages)!=null&&c.length?(l(),n("span",qi,[r(Y,{name:"image"}),E(" "+$(d.referenceImages.length),1)])):(l(),n("span",Hi,"-"))]),e("td",Ji,[e("span",{class:te(["source-badge",d.source])},$(d.source==="api"?"远程":"本地"),3)]),e("td",{class:"col-status",onClick:x[3]||(x[3]=fe(()=>{},["stop"]))},[r(ve,{modelValue:d.enabled,"onUpdate:modelValue":L=>d.enabled=L,size:"small",onChange:L=>g(d)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:x[4]||(x[4]=fe(()=>{},["stop"]))},[e("div",Gi,[r(Q,{size:"mini",class:"ml-btn-outline-primary",onClick:L=>m(d)},{icon:V(()=>[r(Y,{name:"copy"})]),default:V(()=>[x[18]||(x[18]=E(" 复制 ",-1))]),_:1},8,["onClick"]),d.source==="user"?(l(),se(Q,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:L=>F(d)},{icon:V(()=>[r(Y,{name:"delete"})]),default:V(()=>[x[19]||(x[19]=E(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)])])],8,Di)}),128))])])])],2112))]),o(" 编辑/创建对话框 "),r(y,{modelValue:i.value,"onUpdate:modelValue":x[13]||(x[13]=d=>i.value=d),title:v.value?"编辑预设":"创建预设",width:"600px","close-on-click-modal":false},{footer:V(()=>[e("span",Ki,[r(Q,{onClick:x[12]||(x[12]=d=>i.value=false)},{default:V(()=>[...x[27]||(x[27]=[E("取消",-1)])]),_:1}),r(Q,{type:"primary",onClick:J},{default:V(()=>[...x[28]||(x[28]=[E("保存",-1)])]),_:1})])]),default:V(()=>[i.value?(l(),se(z,{key:0,ref:"formRef",model:p.value,"label-width":"100px"},{default:V(()=>[r(P,{label:"名称",required:""},{default:V(()=>[r(N,{modelValue:p.value.name,"onUpdate:modelValue":x[5]||(x[5]=d=>p.value.name=d),disabled:v.value&&p.value.source==="api",placeholder:"如 二次元少女"},null,8,["modelValue","disabled"]),x[21]||(x[21]=e("div",{class:"form-tip"},"用于指令调用和展示,冲突时会自动添加后缀",-1))]),_:1}),r(P,{label:"Prompt 模板",required:""},{default:V(()=>[r(N,{modelValue:p.value.promptTemplate,"onUpdate:modelValue":x[6]||(x[6]=d=>p.value.promptTemplate=d),type:"textarea",rows:4,placeholder:"输入提示词模板,支持变量如 {prompt}"},null,8,["modelValue"]),x[22]||(x[22]=e("div",{class:"form-tip"},"默认将用户输入附加在最后,也可使用 {prompt} 指定位置",-1))]),_:1}),p.value.source==="user"?(l(),se(P,{key:0,label:"缩略图"},{default:V(()=>[r(zt,{modelValue:k.value,"onUpdate:modelValue":x[7]||(x[7]=d=>k.value=d),"max-count":1},null,8,["modelValue"]),x[23]||(x[23]=e("div",{class:"form-tip"},"用于在卡片视图中展示预设的预览图",-1))]),_:1})):o("v-if",true),r(P,{label:"参考图"},{default:V(()=>[r(zt,{modelValue:p.value.referenceImages,"onUpdate:modelValue":x[8]||(x[8]=d=>p.value.referenceImages=d),"max-count":5},null,8,["modelValue"]),x[24]||(x[24]=e("div",{class:"form-tip"},"生成时会自动附加这些参考图片",-1))]),_:1}),r(W,{"content-position":"left"},{default:V(()=>[...x[25]||(x[25]=[E("高级设置",-1)])]),_:1}),r(P,{label:"标签"},{default:V(()=>[r(At,{modelValue:p.value.tags,"onUpdate:modelValue":x[9]||(x[9]=d=>p.value.tags=d),placeholder:"输入标签..."},null,8,["modelValue"]),x[26]||(x[26]=e("div",{class:"form-tip"},"与渠道标签匹配时会自动关联",-1))]),_:1}),r(P,{label:"参数覆盖"},{default:V(()=>[r(ni,{modelValue:p.value.parameterOverrides,"onUpdate:modelValue":x[10]||(x[10]=d=>p.value.parameterOverrides=d),rows:3},null,8,["modelValue"])]),_:1}),r(P,{label:"启用状态"},{default:V(()=>[r(ve,{modelValue:p.value.enabled,"onUpdate:modelValue":x[11]||(x[11]=d=>p.value.enabled=d)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])):o("v-if",true)]),_:1},8,["modelValue","title"])])}}}),Zi=ce(Wi,[["__scopeId","data-v-8eaa50b4"]]),Yi=oe({__name:"StatusBadge",props:{status:{}},setup(t){const a=t,s=G(()=>{switch(a.status){case"pending":return"等待中";case"processing":return"处理中";case"success":return"成功";case"failed":return"失败";default:return a.status}});return(u,i)=>(l(),n("span",{class:te(["status-badge",t.status])},$(s.value),3))}}),Pt=ce(Yi,[["__scopeId","data-v-0bc21896"]]),Xi={class:"lightbox-container"},Qi={class:"lightbox-content"},er=["src"],tr={key:2,class:"image-counter"},sr={key:0,class:"lightbox-sidebar"},lr={class:"sidebar-header"},ar={class:"sidebar-body"},nr={class:"info-block"},or={class:"block-header"},ir={key:0,class:"info-block"},rr={class:"info-value"},dr={key:1,class:"info-block"},ur={class:"info-value"},cr={class:"sidebar-footer"},vr=oe({__name:"ImageLightbox",props:{visible:{type:Boolean},images:{},initialIndex:{default:0},prompt:{},createdAt:{},duration:{},showSidebar:{type:Boolean,default:true}},emits:["update:visible","close"],setup(t,{emit:a}){const s=t,u=a,i=w(s.initialIndex),v=G(()=>s.images[i.value]||"");ye(()=>s.visible,m=>{m?(i.value=s.initialIndex,document.body.style.overflow="hidden"):document.body.style.overflow=""}),ye(()=>s.initialIndex,m=>{i.value=m});const b=()=>{u("update:visible",false),u("close")},S=()=>{i.value=(i.value-1+s.images.length)%s.images.length},C=()=>{i.value=(i.value+1)%s.images.length},p=()=>{s.prompt&&(navigator.clipboard.writeText(s.prompt),X.success("已复制提示词"))},k=()=>{window.open(v.value,"_blank")},U=()=>{const m=document.createElement("a");m.href=v.value,m.download=`image-${Date.now()}.png`,m.click()},I=m=>(typeof m=="string"?new Date(m):m).toLocaleString(),f=m=>m<1e3?`${m}ms`:`${(m/1e3).toFixed(1)}s`,T=m=>{s.visible&&(m.key==="Escape"?b():m.key==="ArrowLeft"?S():m.key==="ArrowRight"&&C())};return he(()=>{window.addEventListener("keydown",T)}),Ye(()=>{window.removeEventListener("keydown",T),document.body.style.overflow=""}),(m,g)=>{const B=A("k-icon");return l(),se(us,{to:"body"},[r(Ze,{name:"lightbox-fade"},{default:V(()=>[t.visible?(l(),n("div",{key:0,class:"lightbox-overlay",onClick:fe(b,["self"])},[e("div",Xi,[e("div",Qi,[o(" 左侧图片区域 "),e("div",{class:"lightbox-image-area",onClick:fe(b,["self"])},[o(" 关闭按钮 "),e("button",{class:"close-btn",onClick:b,title:"关闭 (Esc)"},[r(B,{name:"times"})]),o(" 多图时的导航 "),t.images.length>1?(l(),n("button",{key:0,class:"nav-btn prev",onClick:fe(S,["stop"]),title:"上一张"},[r(B,{name:"chevron-left"})])):o("v-if",true),e("img",{src:v.value,class:"lightbox-image",alt:"Preview"},null,8,er),t.images.length>1?(l(),n("button",{key:1,class:"nav-btn next",onClick:fe(C,["stop"]),title:"下一张"},[r(B,{name:"chevron-right"})])):o("v-if",true),o(" 图片计数器 "),t.images.length>1?(l(),n("div",tr,$(i.value+1)+" / "+$(t.images.length),1)):o("v-if",true)]),o(" 右侧信息栏 "),t.showSidebar?(l(),n("div",sr,[e("div",lr,[g[0]||(g[0]=e("div",{class:"info-title"},"图片详情",-1)),e("button",{class:"header-close-btn",onClick:b,title:"关闭"},[r(B,{name:"times"})])]),e("div",ar,[o(" 提示词 "),e("div",nr,[e("div",or,[g[1]||(g[1]=e("span",null,"提示词",-1)),t.prompt?(l(),n("button",{key:0,class:"copy-btn",onClick:p}," 复制 ")):o("v-if",true)]),e("div",{class:te(["prompt-content",{empty:!t.prompt}])},$(t.prompt||"无提示词"),3)]),o(" 创建时间 "),t.createdAt?(l(),n("div",ir,[g[2]||(g[2]=e("div",{class:"block-header"},[e("span",null,"创建时间")],-1)),e("div",rr,$(I(t.createdAt)),1)])):o("v-if",true),o(" 生成耗时 "),t.duration?(l(),n("div",dr,[g[3]||(g[3]=e("div",{class:"block-header"},[e("span",null,"生成耗时")],-1)),e("div",ur,$(f(t.duration)),1)])):o("v-if",true)]),e("div",cr,[e("button",{class:"action-btn primary",onClick:k},[r(B,{name:"external-link"}),g[4]||(g[4]=E(" 查看原图 ",-1))]),e("button",{class:"action-btn secondary",onClick:U},[r(B,{name:"download"}),g[5]||(g[5]=E(" 下载 ",-1))])])])):o("v-if",true)])])])):o("v-if",true)]),_:1})])}}}),gt=ce(vr,[["__scopeId","data-v-bd68872f"]]),pr={class:"ml-view-container"},mr={class:"ml-view-header"},fr={class:"ml-header-left"},gr={class:"view-mode-switch"},_r={class:"ml-header-right"},yr={key:0,class:"stats-grid"},hr={class:"stat-card"},br={class:"stat-icon total"},kr={class:"stat-content"},$r={class:"stat-value"},wr={class:"stat-card"},Cr={class:"stat-icon success"},Vr={class:"stat-content"},xr={class:"stat-value success"},Sr={class:"stat-card"},Ir={class:"stat-icon failed"},Tr={class:"stat-content"},Or={class:"stat-value failed"},Ur={class:"stat-card"},zr={class:"stat-icon processing"},Pr={class:"stat-content"},Dr={class:"stat-value pending"},Nr={class:"stat-card"},Fr={class:"stat-icon rate"},Lr={class:"stat-content"},Er={class:"stat-value"},Ar={class:"filter-bar"},Mr={class:"filter-group"},jr={key:0,class:"pagination-info"},Rr={class:"ml-view-content"},Br={class:"mono-text"},qr=["title"],Hr={key:0},Jr={key:1,class:"text-muted"},Gr={key:0},Kr={key:1},Wr={class:"time-text"},Zr={key:0,class:"empty-gallery"},Yr={key:1,class:"ml-masonry"},Xr=["onClick"],Qr={class:"gallery-image-wrapper"},ed=["src"],td=["src"],sd={class:"gallery-overlay"},ld={class:"gallery-info"},ad=["title"],nd={class:"gallery-meta"},od={class:"gallery-time"},id={class:"pagination"},rd={key:0,class:"task-detail"},dd={class:"detail-section"},ud={class:"detail-grid"},cd={class:"detail-item"},vd={class:"detail-item"},pd={class:"detail-item"},md={class:"detail-item"},fd={class:"detail-item"},gd={class:"detail-item"},_d={class:"detail-section"},yd={class:"code-block"},hd={key:0,class:"detail-section"},bd={class:"output-gallery"},kd=["src"],$d=["src"],wd=["src"],Cd={key:3,class:"text-asset"},Vd=["href"],xd={key:1,class:"detail-section"},Sd={class:"code-block error"},Id={class:"cleanup-form"},Td={class:"dialog-footer"},Od=oe({__name:"TasksView",setup(t){const a=w("list"),s=w(false),u=w([]),i=w(null),v=w(0),b=w(1),S=w(20),C=w({status:"",userId:void 0,channelId:void 0}),p=w(false),k=w(null);w(false);const U=w(null),I=w(false),f=w([]),T=w(0),m=w(""),g=w(),B=w(),J=w(false),F=w(30),O=d=>{var c,L,ne;return((L=(c=d.middlewareLogs)==null?void 0:c.preset)==null?void 0:L.transformedPrompt)||((ne=d.requestSnapshot)==null?void 0:ne.prompt)||""},x=G(()=>{var c,L,ne;const d=[];for(const K of u.value){if(K.status!=="success"||!K.responseSnapshot)continue;const _=((L=(c=K.middlewareLogs)==null?void 0:c.preset)==null?void 0:L.transformedPrompt)||((ne=K.requestSnapshot)==null?void 0:ne.prompt)||"";K.responseSnapshot.forEach((h,j)=>{(h.kind==="image"||h.kind==="video")&&h.url&&d.push({id:K.id,assetIndex:j,kind:h.kind,url:h.url,prompt:_,channelId:K.channelId,createdAt:K.startTime})})}return d}),Y=async()=>{s.value=true;try{const d={limit:S.value,offset:(b.value-1)*S.value};C.value.status&&(d.status=C.value.status),C.value.userId&&(d.userId=Number(C.value.userId)),C.value.channelId&&(d.channelId=Number(C.value.channelId));const[c,L]=await Promise.all([Pe.list(d),Pe.stats()]);u.value=c.items,v.value=c.total,i.value=L}catch(d){console.error("Failed to fetch tasks:",d),X.error("加载数据失败")}finally{s.value=false}},Q=d=>{k.value=d,p.value=true},ve=d=>{f.value=[d.url],T.value=0,m.value=d.prompt,g.value=d.createdAt,B.value=void 0,I.value=true,U.value=d},N=()=>{J.value=true},P=async()=>{try{const d=await Pe.cleanup(F.value);X.success(`成功清理 ${d.deleted} 条任务`),J.value=false,Y()}catch{X.error("清理失败")}},W=d=>new Date(d).toLocaleString(),z=d=>d<1e3?`${d}ms`:`${(d/1e3).toFixed(2)}s`,y=d=>{const c=d.target;c.style.display="none"};return he(()=>{Y()}),(d,c)=>{const L=A("k-icon"),ne=A("k-button"),K=A("el-option"),_=A("el-select"),h=A("el-input"),j=A("el-table-column"),re=A("el-table"),le=A("el-pagination"),de=A("el-dialog"),pe=A("el-input-number");return l(),n("div",pr,[o(" 固定头部区域 "),e("div",mr,[e("div",fr,[o(" 视图切换 "),e("div",gr,[e("button",{class:te(["mode-btn",{active:a.value==="list"}]),onClick:c[0]||(c[0]=M=>a.value="list"),title:"列表视图"},[...c[14]||(c[14]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2),e("button",{class:te(["mode-btn",{active:a.value==="gallery"}]),onClick:c[1]||(c[1]=M=>a.value="gallery"),title:"画廊视图"},[...c[15]||(c[15]=[it('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-898a70bb><rect x="3" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect></svg>',1)])],2)])]),e("div",_r,[r(ne,{onClick:N},{icon:V(()=>[r(L,{name:"delete"})]),default:V(()=>[c[16]||(c[16]=E(" 清理记录 ",-1))]),_:1}),r(ne,{onClick:Y},{icon:V(()=>[r(L,{name:"refresh"})]),default:V(()=>[c[17]||(c[17]=E(" 刷新 ",-1))]),_:1})])]),o(" 统计信息 (固定) "),i.value?(l(),n("div",yr,[e("div",hr,[e("div",br,[r(L,{name:"clipboard-list"})]),e("div",kr,[e("div",$r,$(i.value.total),1),c[18]||(c[18]=e("div",{class:"stat-label"},"总任务数",-1))])]),e("div",wr,[e("div",Cr,[r(L,{name:"check-circle"})]),e("div",Vr,[e("div",xr,$(i.value.byStatus.success),1),c[19]||(c[19]=e("div",{class:"stat-label"},"成功",-1))])]),e("div",Sr,[e("div",Ir,[r(L,{name:"exclamation-triangle"})]),e("div",Tr,[e("div",Or,$(i.value.byStatus.failed),1),c[20]||(c[20]=e("div",{class:"stat-label"},"失败",-1))])]),e("div",Ur,[e("div",zr,[r(L,{name:"clock"})]),e("div",Pr,[e("div",Dr,$(i.value.byStatus.pending+i.value.byStatus.processing),1),c[21]||(c[21]=e("div",{class:"stat-label"},"进行中",-1))])]),e("div",Nr,[e("div",Fr,[r(L,{name:"chart-pie"})]),e("div",Lr,[e("div",Er,$(i.value.successRate),1),c[22]||(c[22]=e("div",{class:"stat-label"},"成功率",-1))])])])):o("v-if",true),o(" 筛选栏 (固定) "),e("div",Ar,[e("div",Mr,[r(_,{modelValue:C.value.status,"onUpdate:modelValue":c[2]||(c[2]=M=>C.value.status=M),placeholder:"所有状态",clearable:"",onChange:Y,style:{width:"140px"}},{default:V(()=>[r(K,{label:"等待中",value:"pending"}),r(K,{label:"处理中",value:"processing"}),r(K,{label:"成功",value:"success"}),r(K,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),r(h,{modelValue:C.value.channelId,"onUpdate:modelValue":c[3]||(c[3]=M=>C.value.channelId=M),placeholder:"渠道 ID",clearable:"",onChange:Y,style:{width:"140px"}},null,8,["modelValue"]),r(h,{modelValue:C.value.userId,"onUpdate:modelValue":c[4]||(c[4]=M=>C.value.userId=M),placeholder:"用户 ID",clearable:"",onChange:Y,style:{width:"140px"}},null,8,["modelValue"])]),v.value>0?(l(),n("div",jr," 共 "+$(v.value)+" 条记录 ",1)):o("v-if",true)]),o(" 可滚动的内容区域 "),e("div",Rr,[o(" 列表视图 "),a.value==="list"?(l(),se(re,{key:0,data:u.value,style:{width:"100%"},class:"task-table",onRowClick:Q},{default:V(()=>[r(j,{prop:"id",label:"ID",width:"80",align:"center"},{default:V(({row:M})=>[e("span",Br,"#"+$(M.id),1)]),_:1}),r(j,{label:"状态",width:"100",align:"center"},{default:V(({row:M})=>[r(Pt,{status:M.status},null,8,["status"])]),_:1}),r(j,{prop:"channelId",label:"渠道",width:"100",align:"center"}),r(j,{label:"提示词","min-width":"300"},{default:V(({row:M})=>[e("div",{class:"prompt-cell",title:O(M)},$(O(M)),9,qr)]),_:1}),r(j,{label:"输出",width:"120",align:"center"},{default:V(({row:M})=>[M.responseSnapshot&&M.responseSnapshot.length?(l(),n("span",Hr,$(M.responseSnapshot.length)+" 个资产 ",1)):(l(),n("span",Jr,"-"))]),_:1}),r(j,{label:"耗时",width:"100",align:"right"},{default:V(({row:M})=>[M.duration?(l(),n("span",Gr,$(z(M.duration)),1)):(l(),n("span",Kr,"-"))]),_:1}),r(j,{label:"时间",width:"180",align:"right"},{default:V(({row:M})=>[e("span",Wr,$(W(M.startTime)),1)]),_:1})]),_:1},8,["data"])):a.value==="gallery"?(l(),n(D,{key:1},[o(" 画廊视图 (瀑布流) "),x.value.length===0?(l(),n("div",Zr,[r(L,{name:"image",class:"empty-icon"}),c[23]||(c[23]=e("p",null,"暂无成功生成的图片",-1))])):(l(),n("div",Yr,[(l(true),n(D,null,ee(x.value,M=>(l(),n("div",{key:M.id+"-"+M.assetIndex,class:"ml-masonry-item"},[e("div",{class:"gallery-item",onClick:Z=>ve(M)},[e("div",Qr,[M.kind==="image"?(l(),n("img",{key:0,src:M.url,class:"gallery-image",loading:"lazy",onError:y},null,40,ed)):M.kind==="video"?(l(),n("video",{key:1,src:M.url,class:"gallery-video",muted:"",loop:"",onMouseenter:c[5]||(c[5]=Z=>Z.target.play()),onMouseleave:c[6]||(c[6]=Z=>Z.target.pause())},null,40,td)):o("v-if",true),e("div",sd,[r(L,{name:"zoom-in",class:"zoom-icon"})])]),e("div",ld,[e("div",{class:"gallery-prompt",title:M.prompt},$(M.prompt),9,ad),e("div",nd,[e("span",od,$(W(M.createdAt)),1)])])],8,Xr)]))),128))]))],64)):o("v-if",true)]),o(" 分页 (固定在底部) "),e("div",id,[r(le,{"current-page":b.value,"onUpdate:currentPage":c[7]||(c[7]=M=>b.value=M),"page-size":S.value,"onUpdate:pageSize":c[8]||(c[8]=M=>S.value=M),total:v.value,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:Y,onSizeChange:Y},null,8,["current-page","page-size","total"])]),o(" 任务详情对话框 "),r(de,{modelValue:p.value,"onUpdate:modelValue":c[9]||(c[9]=M=>p.value=M),title:"任务详情",width:"800px"},{default:V(()=>{var M,Z;return[k.value?(l(),n("div",rd,[e("div",dd,[c[31]||(c[31]=e("h3",null,"基本信息",-1)),e("div",ud,[e("div",cd,[c[24]||(c[24]=e("span",{class:"label"},"ID:",-1)),E(" "+$(k.value.id),1)]),e("div",vd,[c[25]||(c[25]=e("span",{class:"label"},"状态:",-1)),c[26]||(c[26]=E()),r(Pt,{status:k.value.status},null,8,["status"])]),e("div",pd,[c[27]||(c[27]=e("span",{class:"label"},"渠道 ID:",-1)),E(" "+$(k.value.channelId),1)]),e("div",md,[c[28]||(c[28]=e("span",{class:"label"},"用户 ID:",-1)),E(" "+$(k.value.userId||"N/A"),1)]),e("div",fd,[c[29]||(c[29]=e("span",{class:"label"},"创建时间:",-1)),E(" "+$(W(k.value.startTime)),1)]),e("div",gd,[c[30]||(c[30]=e("span",{class:"label"},"耗时:",-1)),E(" "+$(z(k.value.duration||0)),1)])])]),e("div",_d,[c[32]||(c[32]=e("h3",null,"Prompt",-1)),e("div",yd,$(O(k.value)),1)]),k.value.responseSnapshot&&k.value.responseSnapshot.length>0?(l(),n("div",hd,[e("h3",null,"生成结果 ("+$(k.value.responseSnapshot.length)+" 个资产)",1),e("div",bd,[(l(true),n(D,null,ee(k.value.responseSnapshot,(ue,q)=>{var ie;return l(),n("div",{key:q,class:"output-item"},[ue.kind==="image"&&ue.url?(l(),n("img",{key:0,src:ue.url,class:"output-image"},null,8,kd)):ue.kind==="video"&&ue.url?(l(),n("video",{key:1,src:ue.url,class:"output-image",controls:""},null,8,$d)):ue.kind==="audio"&&ue.url?(l(),n("audio",{key:2,src:ue.url,controls:"",style:{width:"100%"}},null,8,wd)):ue.kind==="text"&&ue.content?(l(),n("div",Cd,$(ue.content),1)):ue.url?(l(),n("a",{key:4,href:ue.url,target:"_blank",class:"file-link"},[r(L,{name:"file"}),E(" "+$(((ie=ue.meta)==null?void 0:ie.filename)||ue.url),1)],8,Vd)):o("v-if",true)])}),128))])])):o("v-if",true),(Z=(M=k.value.middlewareLogs)==null?void 0:M.request)!=null&&Z.error?(l(),n("div",xd,[c[33]||(c[33]=e("h3",null,"错误信息",-1)),e("div",Sd,$(k.value.middlewareLogs.request.error),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue"]),o(" 图片预览弹窗 "),r(gt,{visible:I.value,"onUpdate:visible":c[10]||(c[10]=M=>I.value=M),images:f.value,"initial-index":T.value,prompt:m.value,"created-at":g.value,duration:B.value},null,8,["visible","images","initial-index","prompt","created-at","duration"]),o(" 清理对话框 "),r(de,{modelValue:J.value,"onUpdate:modelValue":c[13]||(c[13]=M=>J.value=M),title:"清理旧任务",width:"400px"},{footer:V(()=>[e("span",Td,[r(ne,{onClick:c[12]||(c[12]=M=>J.value=false)},{default:V(()=>[...c[35]||(c[35]=[E("取消",-1)])]),_:1}),r(ne,{type:"error",onClick:P},{default:V(()=>[...c[36]||(c[36]=[E("确认清理",-1)])]),_:1})])]),default:V(()=>[e("div",Id,[c[34]||(c[34]=e("p",null,"清理多少天前的任务?",-1)),r(pe,{modelValue:F.value,"onUpdate:modelValue":c[11]||(c[11]=M=>F.value=M),min:1,max:365},null,8,["modelValue"])])]),_:1},8,["modelValue"])])}}}),Ud=ce(Od,[["__scopeId","data-v-898a70bb"]]),zd={class:"gallery-content"},Pd={class:"gallery-header"},Dd={class:"header-left"},Nd={key:0,class:"gallery-count"},Fd={class:"header-actions"},Ld={key:0,class:"gallery-empty"},Ed={class:"gallery-empty"},Ad=["onClick"],Md={key:0,class:"task-image-wrapper"},jd=["src"],Rd={key:0,class:"more-images"},Bd={class:"task-processing"},qd={class:"processing-text"},Hd={class:"task-failed"},Jd={class:"task-info"},Gd=["title"],Kd={class:"task-meta"},Wd={class:"task-time"},Zd={key:0,class:"task-duration"},Yd={key:0,class:"loading-more"},st=10,Xd=oe({__name:"HistoryGallery",emits:["select"],setup(t,{expose:a,emit:s}){const u=s,i=w(false),v=w(false),b=w(false),S=w([]),C=w(0),p=w(false),k=w(0),U=w();let I=null;const f=w(false),T=w([]),m=w(0),g=w(""),B=w(),J=w(),F=async()=>{try{const y=await ys.me();return b.value=y.loggedIn,y.loggedIn}catch{return b.value=false,false}},O=y=>{var L,ne,K;const d=[];if(y.responseSnapshot)for(const _ of y.responseSnapshot)_.kind==="image"&&_.url&&d.push(_.url);const c=((ne=(L=y.middlewareLogs)==null?void 0:L.preset)==null?void 0:ne.transformedPrompt)||((K=y.requestSnapshot)==null?void 0:K.prompt)||"";return{id:y.id,status:y.status,prompt:c,images:d,createdAt:new Date(y.startTime),duration:y.duration||void 0}},x=async(y=false)=>{if(b.value){v.value=true;try{const d=await Pe.my({limit:st,offset:y?k.value:0}),c=d.items.map(O);y?S.value=[...S.value,...c]:(S.value=c,k.value=0),C.value=d.total,p.value=d.items.length>=st,k.value+=st}catch(d){console.error("Failed to load tasks:",d)}finally{v.value=false}}},Y=()=>{!v.value&&p.value&&x(true)},Q=y=>{const d=y.target,{scrollTop:c,scrollHeight:L,clientHeight:ne}=d;L-c-ne<100&&Y()},ve=async()=>{await F(),await x()},N=y=>{y.status==="success"&&y.images.length>0&&(T.value=y.images,m.value=0,g.value=y.prompt,B.value=y.createdAt,J.value=y.duration,f.value=true,u("select",y))},P=y=>{const c=new Date().getTime()-y.getTime();return c<6e4?"刚刚":c<36e5?`${Math.floor(c/6e4)}分钟前`:c<864e5?`${Math.floor(c/36e5)}小时前`:c<6048e5?`${Math.floor(c/864e5)}天前`:y.toLocaleDateString()},W=y=>y<1e3?`${y}ms`:`${(y/1e3).toFixed(1)}s`,z=()=>{I=setInterval(()=>{S.value.some(d=>d.status==="pending"||d.status==="processing")&&x()},3e3)};return a({refresh:ve}),he(async()=>{await F()&&(await x(),z())}),Ye(()=>{I&&clearInterval(I)}),(y,d)=>{const c=A("k-icon");return l(),n("div",{class:te(["history-gallery",{collapsed:i.value}])},[o(" 折叠状态的侧边条 "),i.value?(l(),n("div",{key:0,class:"collapsed-bar",onClick:d[0]||(d[0]=L=>i.value=false)},[r(c,{name:"history"}),d[3]||(d[3]=e("span",{class:"collapsed-text"},"历史",-1))])):(l(),n(D,{key:1},[o(" 展开的内容 "),e("div",zd,[e("div",Pd,[e("div",Dd,[d[4]||(d[4]=e("span",{class:"gallery-title"},"历史记录",-1)),C.value>0?(l(),n("span",Nd,$(C.value),1)):o("v-if",true)]),e("div",Fd,[r(c,{name:"refresh",class:te(["action-icon",{spinning:v.value}]),onClick:ve,title:"刷新"},null,8,["class"]),r(c,{name:"chevron-right",class:"action-icon",onClick:d[1]||(d[1]=L=>i.value=true),title:"收起"})])]),o(" 未登录提示 "),b.value?v.value&&S.value.length===0?(l(),n(D,{key:1},[o(" 加载中 "),d[6]||(d[6]=e("div",{class:"gallery-loading"},[e("div",{class:"loader-small"})],-1))],2112)):S.value.length===0?(l(),n(D,{key:2},[o(" 空状态 "),e("div",Ed,[r(c,{name:"image",class:"empty-icon"}),d[7]||(d[7]=e("p",null,"暂无记录",-1))])],2112)):(l(),n(D,{key:3},[o(" 任务列表 (瀑布流) "),e("div",{class:"gallery-list",ref_key:"listRef",ref:U,onScroll:Q},[(l(true),n(D,null,ee(S.value,L=>(l(),n("div",{key:L.id,class:te(["task-card",{clickable:L.status==="success"}]),onClick:ne=>N(L)},[o(" 图片区域 - 只显示第一张 "),L.images&&L.images.length>0?(l(),n("div",Md,[e("img",{src:L.images[0],class:"task-image",loading:"lazy"},null,8,jd),L.images.length>1?(l(),n("div",Rd," +"+$(L.images.length-1),1)):o("v-if",true)])):L.status==="processing"||L.status==="pending"?(l(),n(D,{key:1},[o(" 处理中动画 "),e("div",Bd,[d[8]||(d[8]=e("div",{class:"processing-animation"},[e("div",{class:"dot"}),e("div",{class:"dot"}),e("div",{class:"dot"})],-1)),e("span",qd,$(L.status==="pending"?"等待中":"生成中"),1)])],2112)):L.status==="failed"?(l(),n(D,{key:2},[o(" 失败状态 "),e("div",Hd,[r(c,{name:"exclamation-triangle",class:"failed-icon"}),d[9]||(d[9]=e("span",null,"失败",-1))])],2112)):o("v-if",true),o(" 任务信息 "),e("div",Jd,[e("div",{class:"task-prompt",title:L.prompt},$(L.prompt||"(无提示词)"),9,Gd),e("div",Kd,[e("span",Wd,$(P(L.createdAt)),1),L.duration?(l(),n("span",Zd,$(W(L.duration)),1)):o("v-if",true)])])],10,Ad))),128)),o(" 加载更多 "),v.value&&S.value.length>0?(l(),n("div",Yd,[...d[10]||(d[10]=[e("div",{class:"loader-small"},null,-1)])])):o("v-if",true)],544)],2112)):(l(),n("div",Ld,[r(c,{name:"user",class:"empty-icon"}),d[5]||(d[5]=e("p",null,"请登录查看历史",-1))]))])],2112)),o(" 图片预览弹窗 "),r(gt,{visible:f.value,"onUpdate:visible":d[2]||(d[2]=L=>f.value=L),images:T.value,"initial-index":m.value,prompt:g.value,"created-at":B.value,duration:J.value},null,8,["visible","images","initial-index","prompt","created-at","duration"])],2)}}}),Qd=ce(Xd,[["__scopeId","data-v-6cba50e5"]]),eu={class:"preset-picker"},tu={key:0,class:"preset-info"},su=["src"],lu={key:1,class:"preset-thumb placeholder"},au={class:"preset-details"},nu={class:"preset-name"},ou={key:1,class:"placeholder-text"},iu={class:"picker-header"},ru={class:"preset-count"},du={class:"picker-content"},uu={class:"ml-masonry"},cu=["onClick"],vu={key:0,class:"card-thumbnail"},pu=["src","alt"],mu={class:"thumbnail-overlay"},fu={key:0,class:"ref-count"},gu={key:1,class:"card-thumbnail placeholder"},_u={class:"card-content"},yu={class:"card-title"},hu={key:0,class:"card-tags"},bu={key:0,class:"mini-tag more"},ku={key:2,class:"selected-mark"},$u={key:0,class:"empty-state"},wu={class:"dialog-footer"},Cu={key:0,class:"preset-detail"},Vu={key:0,class:"detail-thumbnail"},xu=["src","alt"],Su={class:"detail-section"},Iu={class:"detail-row"},Tu={key:0,class:"detail-row"},Ou={class:"detail-tags"},Uu={class:"detail-section"},zu={class:"prompt-preview"},Pu={key:1,class:"detail-section"},Du={class:"detail-label"},Nu={class:"reference-images"},Fu=["src"],Lu={key:2,class:"detail-section"},Eu={class:"param-preview"},Au={class:"dialog-footer"},Mu=oe({__name:"PresetPicker",props:{modelValue:{},presets:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,i=["本地","远程","text2img","img2img","NSFW"],v=w(false),b=w(false),S=w([]),C=w(s.modelValue),p=w(null),k=G(()=>{const F=new Set;return s.presets.forEach(O=>{(O.tags||[]).forEach(x=>F.add(x))}),Array.from(F).sort()}),U=G(()=>s.modelValue?s.presets.find(F=>F.id===s.modelValue):null),I=G(()=>{let F=s.presets;return S.value.length===0?F:F.filter(O=>S.value.every(x=>x==="本地"?O.source==="user":x==="远程"?O.source==="api":(O.tags||[]).includes(x)))}),f=()=>{C.value=s.modelValue,S.value=[],v.value=true},T=F=>{C.value=F.id},m=()=>{u("update:modelValue",C.value),v.value=false},g=()=>{u("update:modelValue",void 0)},B=F=>{p.value=F,b.value=true},J=()=>{p.value&&(u("update:modelValue",p.value.id),b.value=false,v.value=false)};return ye(()=>s.modelValue,F=>{C.value=F}),(F,O)=>{var ve;const x=A("k-icon"),Y=A("k-button"),Q=A("el-dialog");return l(),n("div",eu,[o(" 当前选中的预设显示 "),e("div",{class:"selected-preset",onClick:f},[U.value?(l(),n("div",tu,[U.value.thumbnail?(l(),n("img",{key:0,src:U.value.thumbnail,class:"preset-thumb"},null,8,su)):(l(),n("div",lu,[r(x,{name:"image"})])),e("div",au,[e("span",nu,$(U.value.name),1),e("span",{class:te(["preset-source",U.value.source])},$(U.value.source==="api"?"远程":"本地"),3)]),r(x,{name:"times",class:"clear-btn",onClick:fe(g,["stop"]),title:"清除选择"})])):(l(),n("div",ou,[r(x,{name:"layer-group"}),O[6]||(O[6]=e("span",null,"选择预设模板 (可选)",-1))])),r(x,{name:"chevron-down",class:"dropdown-icon"})]),o(" 预设选择弹窗 - 复用 PresetsView 的布局 "),r(Q,{modelValue:v.value,"onUpdate:modelValue":O[3]||(O[3]=N=>v.value=N),title:"选择预设",width:"80vw",top:"5vh","close-on-click-modal":true,class:"preset-picker-dialog"},{footer:V(()=>[e("div",wu,[r(Y,{onClick:O[2]||(O[2]=N=>v.value=false)},{default:V(()=>[...O[9]||(O[9]=[E("取消",-1)])]),_:1}),r(Y,{type:"primary",onClick:m,disabled:!C.value},{default:V(()=>[...O[10]||(O[10]=[E(" 确认选择 ",-1)])]),_:1},8,["disabled"])])]),default:V(()=>[e("div",iu,[r(dt,{modelValue:S.value,"onUpdate:modelValue":O[0]||(O[0]=N=>S.value=N),"all-tags":k.value,"preset-tags":i},null,8,["modelValue","all-tags"]),e("span",ru,"共 "+$(I.value.length)+" 个预设",1)]),e("div",du,[e("div",uu,[(l(true),n(D,null,ee(I.value,N=>{var P,W;return l(),n("div",{key:N.id,class:"ml-masonry-item"},[e("div",{class:te(["preset-card",{selected:C.value===N.id}]),onClick:z=>T(N)},[o(" 缩略图 "),N.thumbnail?(l(),n("div",vu,[e("img",{src:N.thumbnail,alt:N.name,loading:"lazy"},null,8,pu),e("div",mu,[(P=N.referenceImages)!=null&&P.length?(l(),n("span",fu,[r(x,{name:"image"}),E(" "+$(N.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",gu,[r(x,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",_u,[e("div",yu,$(N.name),1),(W=N.tags)!=null&&W.length?(l(),n("div",hu,[(l(true),n(D,null,ee(N.tags.slice(0,4),z=>(l(),n("span",{key:z,class:"mini-tag"},$(z),1))),128)),N.tags.length>4?(l(),n("span",bu,"+"+$(N.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮区 "),e("div",{class:"card-actions",onClick:O[1]||(O[1]=fe(()=>{},["stop"]))},[r(Y,{size:"mini",onClick:z=>B(N)},{icon:V(()=>[r(x,{name:"eye"})]),default:V(()=>[O[7]||(O[7]=E(" 详情 ",-1))]),_:1},8,["onClick"])]),o(" 来源标记 "),e("div",{class:te(["source-indicator",N.source])},$(N.source==="api"?"远程":"本地"),3),o(" 选中标记 "),C.value===N.id?(l(),n("div",ku,[r(x,{name:"check"})])):o("v-if",true)],10,cu)])}),128))]),o(" 空状态 "),I.value.length===0?(l(),n("div",$u,[r(x,{name:"search",class:"empty-icon"}),O[8]||(O[8]=e("p",null,"没有找到匹配的预设",-1))])):o("v-if",true)])]),_:1},8,["modelValue"]),o(" 预设详情弹窗 "),r(Q,{modelValue:b.value,"onUpdate:modelValue":O[5]||(O[5]=N=>b.value=N),title:((ve=p.value)==null?void 0:ve.name)||"预设详情",width:"600px","close-on-click-modal":true,class:"preset-detail-dialog"},{footer:V(()=>[e("div",Au,[r(Y,{onClick:O[4]||(O[4]=N=>b.value=false)},{default:V(()=>[...O[15]||(O[15]=[E("关闭",-1)])]),_:1}),r(Y,{type:"primary",onClick:J},{icon:V(()=>[r(x,{name:"check"})]),default:V(()=>[O[16]||(O[16]=E(" 选择此预设 ",-1))]),_:1})])]),default:V(()=>{var N,P;return[p.value?(l(),n("div",Cu,[o(" 缩略图 "),p.value.thumbnail?(l(),n("div",Vu,[e("img",{src:p.value.thumbnail,alt:p.value.name},null,8,xu)])):o("v-if",true),o(" 基本信息 "),e("div",Su,[e("div",Iu,[O[11]||(O[11]=e("span",{class:"detail-label"},"来源:",-1)),e("span",{class:te(["source-badge",p.value.source])},$(p.value.source==="api"?"远程":"本地"),3)]),(N=p.value.tags)!=null&&N.length?(l(),n("div",Tu,[O[12]||(O[12]=e("span",{class:"detail-label"},"标签:",-1)),e("div",Ou,[(l(true),n(D,null,ee(p.value.tags,W=>(l(),n("span",{key:W,class:"mini-tag"},$(W),1))),128))])])):o("v-if",true)]),o(" Prompt 模板 "),e("div",Uu,[O[13]||(O[13]=e("div",{class:"detail-label"},"Prompt 模板:",-1)),e("div",zu,$(p.value.promptTemplate),1)]),o(" 参考图 "),(P=p.value.referenceImages)!=null&&P.length?(l(),n("div",Pu,[e("div",Du,"参考图片 ("+$(p.value.referenceImages.length)+"):",1),e("div",Nu,[(l(true),n(D,null,ee(p.value.referenceImages,(W,z)=>(l(),n("img",{key:z,src:W,class:"ref-image"},null,8,Fu))),128))])])):o("v-if",true),o(" 参数覆盖 "),p.value.parameterOverrides&&Object.keys(p.value.parameterOverrides).length?(l(),n("div",Lu,[O[14]||(O[14]=e("div",{class:"detail-label"},"参数覆盖:",-1)),e("div",Eu,$(JSON.stringify(p.value.parameterOverrides,null,2)),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue","title"])])}}}),ju=ce(Mu,[["__scopeId","data-v-59115136"]]),Ru={class:"view-container"},Bu={class:"view-content"},qu={class:"generate-layout"},Hu={class:"config-panel"},Ju={class:"form-section"},Gu={class:"section-title"},Ku={class:"form-item"},Wu={class:"form-item"},Zu={class:"form-section flex-grow"},Yu={class:"section-title"},Xu={class:"form-section"},Qu={class:"section-title"},ec={class:"upload-area"},tc={key:0,class:"upload-list"},sc=["src"],lc=["onClick"],ac={class:"form-actions"},nc={class:"preview-panel"},oc={key:0,class:"generating-state"},ic={class:"generating-content"},rc={class:"generating-info"},dc={class:"generating-timer"},uc={key:0,class:"generating-hint"},cc={class:"result-container"},vc={key:0,class:"success-result"},pc={class:"output-grid"},mc=["src","onClick"],fc={class:"output-actions"},gc=["href"],_c=["src"],yc=["src"],hc=["href"],bc={class:"text-output"},kc=["href"],$c={class:"result-meta"},wc={class:"meta-item success-badge"},Cc={key:0,class:"meta-item"},Vc={key:1,class:"meta-item"},xc={class:"error-result"},Sc={class:"error-content"},Ic={class:"error-info"},Tc={class:"error-msg"},Oc={key:0,class:"error-meta"},Uc={key:1,class:"error-meta"},zc={class:"empty-state"},Pc=oe({__name:"GenerateView",setup(t){const a=w([]),s=w([]),u=w(false),i=w(null),v=w([]),b=w([]),S=w(),C=w();let p=0;const k=w(0),U=w(null);let I=null,f=0;const T=w({channel:void 0,prompt:"",parameters:{}}),m=w(void 0),g=w(false),B=w([]),J=w(0),F=w(""),O=K=>{if(K<1e3)return`${K}ms`;const _=K/1e3;if(_<60)return`${_.toFixed(1)}s`;const h=Math.floor(_/60),j=(_%60).toFixed(0);return`${h}m ${j}s`},x=()=>{f=Date.now(),k.value=0,I=setInterval(()=>{k.value=Date.now()-f},100)},Y=()=>{I&&(clearInterval(I),I=null)},Q=K=>{var _;(_=i.value)!=null&&_.output&&(B.value=i.value.output.filter(h=>h.kind==="image"&&h.url).map(h=>h.url),J.value=K,g.value=true)},ve=async()=>{try{const[K,_]=await Promise.all([ze.list(),Ie.list()]);a.value=K,s.value=_}catch(K){console.error(K)}},N=K=>new Promise((_,h)=>{const j=new FileReader;j.onload=()=>{const le=j.result.split(",")[1];_(le)},j.onerror=h,j.readAsDataURL(K)}),P=()=>{var K;(K=S.value)==null||K.click()},W=async K=>{const _=K.target;!_.files||_.files.length===0||(await y(Array.from(_.files)),_.value="")},z=async K=>{var h;const _=(h=K.dataTransfer)==null?void 0:h.files;!_||_.length===0||await y(Array.from(_).filter(j=>j.type.startsWith("image/")))},y=async K=>{const _=4-v.value.length;if(_<=0){X.warning("最多上传 4 张图片");return}const h=K.slice(0,_);for(const j of h){const re=URL.createObjectURL(j);v.value.push({uid:++p,url:re,raw:j});try{const le=await N(j);b.value.push({type:"image",base64:le,mimeType:j.type,filename:j.name})}catch(le){console.error("Failed to read file:",j.name,le)}}},d=K=>{const _=v.value[K];_&&(URL.revokeObjectURL(_.url),v.value.splice(K,1),b.value.splice(K,1))},c=async K=>{var _,h,j,re;try{const le=await Pe.get(K);if(F.value=((h=(_=le.middlewareLogs)==null?void 0:_.preset)==null?void 0:h.transformedPrompt)||((j=le.requestSnapshot)==null?void 0:j.prompt)||"",le.status==="success"&&le.responseSnapshot&&le.responseSnapshot.length>0)return{success:true,output:le.responseSnapshot,taskId:le.id,duration:le.duration||void 0};if(le.status==="failed"){const de=(re=le.middlewareLogs)==null?void 0:re._error;return{success:false,error:(de==null?void 0:de.message)||"生成失败",taskId:le.id,duration:le.duration||void 0}}return null}catch{return null}},L=async()=>{var K,_,h,j,re,le;if(!T.value.channel){X.warning("请选择渠道");return}u.value=true,i.value=null,U.value=null,x();try{const de={channelId:T.value.channel,prompt:T.value.prompt||"",parameters:{...T.value.parameters}};if(b.value.length>0&&(de.files=b.value),m.value){const M=s.value.find(Z=>Z.id===m.value);M&&(de.parameters.preset=M.name)}const pe=await hs.generate(de);if(pe.taskId&&(U.value=pe.taskId),pe.success)if(i.value=pe,(K=C.value)==null||K.refresh(),pe.taskId)try{const M=await Pe.get(pe.taskId);F.value=((h=(_=M.middlewareLogs)==null?void 0:_.preset)==null?void 0:h.transformedPrompt)||((j=M.requestSnapshot)==null?void 0:j.prompt)||""}catch{F.value=T.value.prompt}else F.value=T.value.prompt;else if(pe.taskId){await new Promise(Z=>setTimeout(Z,500));const M=await c(pe.taskId);M&&M.success?(i.value=M,(re=C.value)==null||re.refresh()):i.value=pe}else i.value=pe}catch(de){if(U.value){await new Promise(M=>setTimeout(M,500));const pe=await c(U.value);pe?(i.value=pe,pe.success&&((le=C.value)==null||le.refresh())):i.value={success:false,error:de.message||"请求失败"}}else i.value={success:false,error:de.message||"请求失败"}}finally{Y(),u.value=false}},ne=K=>{K.prompt&&(T.value.prompt=K.prompt)};return he(()=>{ve()}),Ye(()=>{Y()}),(K,_)=>{var M;const h=A("k-icon"),j=A("el-option"),re=A("el-select"),le=A("el-input"),de=A("k-button"),pe=A("k-card");return l(),n("div",Ru,[e("div",Bu,[e("div",qu,[o(" 左侧配置区 "),e("div",Hu,[r(pe,{class:"config-card"},{default:V(()=>[e("div",Ju,[e("div",Gu,[r(h,{name:"settings"}),_[5]||(_[5]=E(" 基础配置 ",-1))]),e("div",Ku,[_[6]||(_[6]=e("div",{class:"label"},"生成渠道",-1)),r(re,{modelValue:T.value.channel,"onUpdate:modelValue":_[0]||(_[0]=Z=>T.value.channel=Z),placeholder:"选择生成渠道",style:{width:"100%"}},{default:V(()=>[(l(true),n(D,null,ee(a.value,Z=>(l(),se(j,{key:Z.id,label:Z.name,value:Z.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Wu,[_[7]||(_[7]=e("div",{class:"label"},"预设模板",-1)),r(ju,{modelValue:m.value,"onUpdate:modelValue":_[1]||(_[1]=Z=>m.value=Z),presets:s.value},null,8,["modelValue","presets"])])]),e("div",Zu,[e("div",Yu,[r(h,{name:"edit"}),_[8]||(_[8]=E(" 提示词 ",-1))]),r(le,{modelValue:T.value.prompt,"onUpdate:modelValue":_[2]||(_[2]=Z=>T.value.prompt=Z),type:"textarea",rows:8,placeholder:"输入提示词,支持自然语言描述...",resize:"none",class:"prompt-input"},null,8,["modelValue"])]),o(" 文件上传区域 "),e("div",Xu,[e("div",Qu,[r(h,{name:"image"}),_[9]||(_[9]=E(" 参考图片 ",-1))]),e("div",ec,[o(" 已上传的图片列表 "),v.value.length>0?(l(),n("div",tc,[(l(true),n(D,null,ee(v.value,(Z,ue)=>(l(),n("div",{key:Z.uid,class:"upload-item"},[e("img",{src:Z.url,class:"upload-thumb"},null,8,sc),e("div",{class:"upload-overlay",onClick:q=>d(ue)},[r(h,{name:"delete"})],8,lc)]))),128))])):o("v-if",true),o(" 上传按钮 "),v.value.length<4?(l(),n("div",{key:1,class:"upload-trigger",onClick:P,onDragover:_[3]||(_[3]=fe(()=>{},["prevent"])),onDrop:fe(z,["prevent"])},[e("input",{ref_key:"fileInput",ref:S,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:W},null,544),r(h,{name:"add",class:"upload-icon"})],32)):o("v-if",true),_[10]||(_[10]=e("div",{class:"upload-tip"},"点击或拖拽上传,最多 4 张",-1))])]),e("div",ac,[r(de,{solid:"",type:"primary",loading:u.value,onClick:L,class:"generate-btn"},{icon:V(()=>[r(h,{name:"magic"})]),default:V(()=>[_[11]||(_[11]=E(" 生成图片 ",-1))]),_:1},8,["loading"])])]),_:1})]),o(" 右侧预览区 "),e("div",nc,[o(" 生成中状态 "),u.value?(l(),n("div",oc,[e("div",ic,[_[13]||(_[13]=e("div",{class:"loader"},null,-1)),e("div",rc,[_[12]||(_[12]=e("p",{class:"generating-title"},"正在生成中...",-1)),e("p",dc,[r(h,{name:"stopwatch"}),E(" 已用时间: "+$(O(k.value)),1)]),U.value?(l(),n("p",uc,"任务 ID: "+$(U.value),1)):o("v-if",true)])])])):i.value?(l(),n(D,{key:1},[o(" 有结果 "),e("div",cc,[o(" 成功状态 "),i.value.success&&i.value.output&&i.value.output.length?(l(),n("div",vc,[e("div",pc,[(l(true),n(D,null,ee(i.value.output,(Z,ue)=>{var q;return l(),n("div",{key:ue,class:"output-wrapper"},[o(" 图片 "),Z.kind==="image"?(l(),n(D,{key:0},[e("img",{src:Z.url,onClick:ie=>Q(ue),class:"clickable-image"},null,8,mc),e("div",fc,[e("a",{href:Z.url,target:"_blank",class:"action-btn",download:""},[r(h,{name:"download"})],8,gc)])],64)):Z.kind==="video"?(l(),n(D,{key:1},[o(" 视频 "),e("video",{src:Z.url,controls:"",class:"output-video"},null,8,_c)],64)):Z.kind==="audio"?(l(),n(D,{key:2},[o(" 音频 "),e("audio",{src:Z.url,controls:"",class:"output-audio"},null,8,yc)],64)):Z.kind==="file"?(l(),n(D,{key:3},[o(" 其他文件 "),e("a",{href:Z.url,target:"_blank",class:"file-link"},[r(h,{name:"file"}),E(" "+$(((q=Z.meta)==null?void 0:q.filename)||"下载文件"),1)],8,hc)],64)):Z.kind==="text"?(l(),n(D,{key:4},[o(" 文本 "),e("div",bc,$(Z.content),1)],64)):Z.url?(l(),n(D,{key:5},[o(" 兜底:有 url 则显示链接 "),e("a",{href:Z.url,target:"_blank"},$(Z.url),9,kc)],64)):o("v-if",true)])}),128))]),e("div",$c,[e("span",wc,[r(h,{name:"check-circle"}),_[14]||(_[14]=E(" 生成成功 ",-1))]),i.value.duration?(l(),n("span",Cc,[r(h,{name:"stopwatch"}),E(" 耗时: "+$(O(i.value.duration)),1)])):o("v-if",true),i.value.taskId?(l(),n("span",Vc,[r(h,{name:"list-alt"}),E(" 任务 ID: "+$(i.value.taskId),1)])):o("v-if",true)])])):(l(),n(D,{key:1},[o(" 失败状态 "),e("div",xc,[e("div",Sc,[r(h,{name:"exclamation-triangle",class:"error-icon"}),e("div",Ic,[_[15]||(_[15]=e("p",{class:"error-title"},"生成失败",-1)),e("p",Tc,$(i.value.error||"未知错误"),1),i.value.taskId?(l(),n("p",Oc,"任务 ID: "+$(i.value.taskId),1)):o("v-if",true),i.value.duration?(l(),n("p",Uc,"耗时: "+$(O(i.value.duration)),1)):o("v-if",true)])]),r(de,{class:"retry-btn",onClick:L},{icon:V(()=>[r(h,{name:"refresh"})]),default:V(()=>[_[16]||(_[16]=E(" 重新生成 ",-1))]),_:1})])],2112))])],2112)):(l(),n(D,{key:2},[o(" 空状态 "),e("div",zc,[r(h,{name:"image",class:"empty-icon"}),_[17]||(_[17]=e("p",null,"在左侧配置并点击生成",-1))])],2112))]),o(" 右侧历史画廊 "),r(Qd,{ref_key:"historyGalleryRef",ref:C,onSelect:ne},null,512)])]),o(" 图片预览弹窗 "),r(gt,{visible:g.value,"onUpdate:visible":_[4]||(_[4]=Z=>g.value=Z),images:B.value,"initial-index":J.value,prompt:F.value,duration:(M=i.value)==null?void 0:M.duration},null,8,["visible","images","initial-index","prompt","duration"])])}}}),Dt=ce(Pc,[["__scopeId","data-v-a3441aa4"]]),Dc={class:"pipeline-panel"},Nc={class:"pipeline-flow"},Fc={class:"phase-icon"},Lc={class:"phase-info"},Ec={class:"phase-name"},Ac={class:"phase-desc"},Mc={class:"phase-badge"},jc={key:0,class:"phase-middlewares"},Rc={class:"mw-card"},Bc={class:"mw-content"},qc={class:"mw-name"},Hc={class:"mw-desc"},Jc=["title"],Gc=["checked","onChange"],Kc={key:2,class:"phase-connector"},Wc={class:"connector-arrow"},Zc=oe({__name:"MiddlewaresPanel",setup(t){const a=w([]),s=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查、任务创建",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],u={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},i=S=>a.value.filter(C=>C.phase===S),v=async()=>{try{a.value=await He.list()}catch{X.error("加载中间件列表失败")}},b=async S=>{const C=!S.enabled;try{await He.update(S.name,{enabled:C}),S.enabled=C,X.success(C?"已启用":"已禁用")}catch{X.error("操作失败")}};return he(v),(S,C)=>{const p=A("k-icon");return l(),n("div",Dc,[o(" 标题区 "),C[5]||(C[5]=e("div",{class:"panel-header"},[e("div",{class:"header-title"},[e("h3",null,"请求执行流程"),e("span",{class:"subtitle"},"每个生成请求按以下阶段依次处理")])],-1)),o(" 流程图 "),e("div",Nc,[(l(),n(D,null,ee(s,(k,U)=>e("div",{key:k.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:te(["phase-header",k.colorClass])},[e("div",Fc,[r(p,{name:k.icon},null,8,["name"])]),e("div",Lc,[e("span",Ec,$(k.label),1),e("span",Ac,$(k.description),1)]),e("span",Mc,$(i(k.id).length),1)],2),o(" 中间件列表 "),i(k.id).length>0?(l(),n("div",jc,[(l(true),n(D,null,ee(i(k.id),(I,f)=>(l(),n("div",{key:I.name,class:te(["mw-item",{disabled:!I.enabled}])},[e("div",Rc,[e("div",{class:te(["mw-status",{active:I.enabled}])},null,2),e("div",Bc,[e("span",qc,$(I.displayName),1),e("span",Hc,$(I.description||u[I.category]||I.category),1)]),e("label",{class:"toggle-switch",onClick:C[0]||(C[0]=fe(()=>{},["stop"])),title:I.enabled?"点击禁用":"点击启用"},[e("input",{type:"checkbox",checked:I.enabled,onChange:T=>b(I)},null,40,Gc),C[1]||(C[1]=e("span",{class:"slider"},null,-1))],8,Jc)])],2))),128))])):(l(),n(D,{key:1},[o(" 空状态 "),C[2]||(C[2]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),U<s.length-1?(l(),n("div",Kc,[C[3]||(C[3]=e("div",{class:"connector-line"},null,-1)),e("div",Wc,[r(p,{name:"chevron-down"})]),C[4]||(C[4]=e("div",{class:"connector-line"},null,-1))])):o("v-if",true)])),64))]),o(" 底部说明 "),C[6]||(C[6]=it('<div class="pipeline-footer" data-v-b4b0cf47><div class="footer-item" data-v-b4b0cf47><span class="dot active" data-v-b4b0cf47></span><span data-v-b4b0cf47>启用 - 中间件将在请求中执行</span></div><div class="footer-item" data-v-b4b0cf47><span class="dot" data-v-b4b0cf47></span><span data-v-b4b0cf47>禁用 - 中间件将被跳过</span></div><p class="footer-hint" data-v-b4b0cf47>同一阶段内的中间件可能并行执行。详细配置请前往「扩展插件」面板。</p></div>',1))])}}}),Yc=ce(Zc,[["__scopeId","data-v-b4b0cf47"]]),Xc={class:"plugins-panel"},Qc={key:0,class:"loading-state"},ev={class:"empty-state"},tv={class:"plugins-list"},sv=["onClick"],lv={class:"plugin-info"},av={class:"plugin-header"},nv={class:"plugin-name"},ov={key:0,class:"plugin-version"},iv={class:"plugin-description"},rv={class:"plugin-status"},dv={key:0,class:"plugin-badge connector"},uv={key:1,class:"plugin-badge middleware"},cv={key:0,class:"plugin-detail"},vv={class:"detail-header"},pv={class:"header-left"},mv={key:0,class:"version"},fv={class:"header-actions"},gv={key:0,class:"connector-info"},_v={class:"connector-meta"},yv={class:"connector-id"},hv={class:"connector-types"},bv={key:1,class:"middlewares-list"},kv={class:"middleware-tags"},$v={class:"phase-badge"},wv={key:2,class:"config-section"},Cv={class:"config-actions"},Vv={class:"no-config"},xv={class:"no-selection"},Sv=oe({__name:"PluginsPanel",setup(t){const a=w(true),s=w([]),u=w(null),i=w({}),v=w(false),b={"lifecycle-prepare":"准备","lifecycle-pre-request":"前置","lifecycle-request":"请求","lifecycle-post-request":"后置","lifecycle-finalize":"完成"},S=I=>b[I]||I,C=async()=>{try{a.value=true,s.value=await at.list()}catch(I){console.error("Failed to load plugins:",I),s.value=[]}finally{a.value=false}},p=I=>{u.value=I,i.value={...I.config};for(const f of I.configFields||[])i.value[f.key]===void 0&&f.default!==void 0&&(i.value[f.key]=f.default)},k=async()=>{if(u.value){v.value=true;try{await at.updateConfig(u.value.id,i.value),X.success("保存成功"),await C();const I=s.value.find(f=>{var T;return f.id===((T=u.value)==null?void 0:T.id)});I&&(u.value=I,i.value={...I.config})}catch{X.error("保存失败")}finally{v.value=false}}},U=async I=>{var f;try{const T=await Lt(I.apiEvent);if((T==null?void 0:T.success)===false)throw new Error(T.error||"操作失败");if(I.apiEvent==="media-luna/presets/sync"&&(T!=null&&T.data)){const{added:m,updated:g,removed:B,notModified:J}=T.data;J?X.info("数据未变化,无需更新"):X.success(`同步完成:新增 ${m},更新 ${g},删除 ${B}`)}else(f=T==null?void 0:T.data)!=null&&f.message?X.success(T.data.message):X.success(`${I.label} 完成`);await C()}catch(T){X.error(`${I.label} 失败: ${T instanceof Error?T.message:"未知错误"}`)}};return he(C),(I,f)=>{var g,B,J;const T=A("k-icon"),m=A("k-button");return l(),n("div",Xc,[o(" 加载状态 "),a.value?(l(),n("div",Qc,[r(T,{name:"sync",class:"spin"}),f[1]||(f[1]=e("span",null,"加载中...",-1))])):s.value.length===0?(l(),n(D,{key:1},[o(" 空状态 "),e("div",ev,[r(T,{name:"apps"}),f[2]||(f[2]=e("p",null,"暂无扩展插件",-1)),f[3]||(f[3]=e("p",{class:"hint"},[E("第三方扩展插件将在这里显示"),e("br"),E('内置功能请在"功能模块"中配置')],-1))])],2112)):(l(),n(D,{key:2},[o(" 插件列表 "),e("div",tv,[(l(true),n(D,null,ee(s.value,F=>{var O,x;return l(),n("div",{key:F.id,class:te(["plugin-card",{active:((O=u.value)==null?void 0:O.id)===F.id,disabled:!F.enabled}]),onClick:Y=>p(F)},[e("div",lv,[e("div",av,[e("span",nv,$(F.name),1),F.version?(l(),n("span",ov,"v"+$(F.version),1)):o("v-if",true)]),e("p",iv,$(F.description||"暂无描述"),1)]),e("div",rv,[F.connector?(l(),n("span",dv,"连接器")):o("v-if",true),(x=F.middlewares)!=null&&x.length?(l(),n("span",uv,$(F.middlewares.length)+" 个中间件 ",1)):o("v-if",true),r(T,{name:F.enabled?"check-circle":"close-circle",class:te(F.enabled?"enabled":"disabled")},null,8,["name","class"])])],10,sv)}),128))]),o(" 插件详情 "),u.value?(l(),n("div",cv,[e("header",vv,[e("div",pv,[e("h3",null,$(u.value.name),1),u.value.version?(l(),n("span",mv,"v"+$(u.value.version),1)):o("v-if",true)]),e("div",fv,[(l(true),n(D,null,ee(u.value.actions,F=>(l(),se(m,{key:F.name,type:F.type||"default",size:"small",onClick:O=>U(F)},cs({default:V(()=>[E(" "+$(F.label),1)]),_:2},[F.icon?{name:"icon",fn:V(()=>[r(T,{name:F.icon},null,8,["name"])]),key:"0"}:void 0]),1032,["type","onClick"]))),128))])]),o(" 连接器信息 "),u.value.connector?(l(),n("div",gv,[f[4]||(f[4]=e("h4",null,"连接器",-1)),e("div",_v,[e("span",yv,$(u.value.connector.id),1),e("span",hv," 支持: "+$(((g=u.value.connector.supportedTypes)==null?void 0:g.join(", "))||"无"),1)])])):o("v-if",true),o(" 中间件列表 "),(B=u.value.middlewares)!=null&&B.length?(l(),n("div",bv,[f[5]||(f[5]=e("h4",null,"中间件",-1)),e("div",kv,[(l(true),n(D,null,ee(u.value.middlewares,F=>(l(),n("span",{key:F.name,class:te(["middleware-tag",{enabled:F.enabled}])},[E($(F.displayName||F.name)+" ",1),e("span",$v,$(S(F.phase)),1)],2))),128))])])):o("v-if",true),o(" 配置表单 "),(J=u.value.configFields)!=null&&J.length?(l(),n("div",wv,[f[7]||(f[7]=e("h4",null,"配置",-1)),r(et,{fields:u.value.configFields,modelValue:i.value,"onUpdate:modelValue":f[0]||(f[0]=F=>i.value=F),"presets-map":u.value.presets},null,8,["fields","modelValue","presets-map"]),e("div",Cv,[r(m,{type:"primary",onClick:k,loading:v.value},{icon:V(()=>[r(T,{name:"save"})]),default:V(()=>[f[6]||(f[6]=E(" 保存配置 ",-1))]),_:1},8,["loading"])])])):(l(),n(D,{key:3},[o(" 无配置提示 "),e("div",Vv,[r(T,{name:"info-circle"}),f[8]||(f[8]=e("span",null,"该插件暂无可配置项",-1))])],2112))])):(l(),n(D,{key:1},[o(" 无选中提示 "),e("div",xv,[r(T,{name:"apps"}),f[9]||(f[9]=e("p",null,"请从左侧选择一个插件查看详情",-1))])],2112))],64))])}}}),Iv=ce(Sv,[["__scopeId","data-v-a53de4c8"]]),Tv={class:"settings-view"},Ov={class:"sidebar"},Uv={class:"nav-list"},zv=["onClick"],Pv={class:"main-content"},Dv={key:0,class:"loading"},Nv={class:"panel-header"},Fv={key:0},Lv={class:"custom-panel"},Ev={class:"actions"},Av=oe({__name:"SettingsView",setup(t){const a=w(true),s=w([]),u=w(""),i=w({}),v=G(()=>s.value.find(p=>p.id===u.value)),b=async()=>{try{s.value=await ht.panels(),s.value.length&&!u.value&&(u.value=s.value[0].id)}catch{X.error("加载设置面板失败")}},S=()=>{var p;if(((p=v.value)==null?void 0:p.type)==="custom"){i.value={...v.value.config||{}};for(const k of v.value.configFields||[])i.value[k.key]===void 0&&k.default!==void 0&&(i.value[k.key]=k.default)}},C=async()=>{if(v.value)try{await ht.update(v.value.id,i.value),X.success("保存成功"),await b()}catch{X.error("保存失败")}};return ye(u,()=>{var p;((p=v.value)==null?void 0:p.type)==="custom"&&S()}),he(async()=>{await b(),a.value=false}),(p,k)=>{const U=A("k-icon"),I=A("k-button");return l(),n("div",Tv,[o(" 侧边栏导航 "),e("aside",Ov,[e("nav",Uv,[(l(true),n(D,null,ee(s.value,f=>(l(),n("div",{key:f.id,class:te(["nav-item",{active:u.value===f.id}]),onClick:T=>u.value=f.id},[r(U,{name:f.icon},null,8,["name"]),e("span",null,$(f.name),1)],10,zv))),128))])]),o(" 主内容区 "),e("main",Pv,[a.value?(l(),n("div",Dv,[r(U,{name:"sync",class:"spin"}),k[1]||(k[1]=E(" 加载中... ",-1))])):v.value?(l(),n(D,{key:1},[o(" 面板标题 "),e("header",Nv,[e("h2",null,$(v.value.name),1),v.value.description?(l(),n("p",Fv,$(v.value.description),1)):o("v-if",true)]),o(" 功能模块面板 "),v.value.component==="middlewares"?(l(),se(Yc,{key:0})):v.value.component==="plugins"?(l(),n(D,{key:1},[o(" 扩展插件面板 "),r(Iv)],64)):v.value.type==="custom"&&v.value.configFields?(l(),n(D,{key:2},[o(" 自定义面板 "),e("div",Lv,[r(et,{fields:v.value.configFields,modelValue:i.value,"onUpdate:modelValue":k[0]||(k[0]=f=>i.value=f)},null,8,["fields","modelValue"]),e("div",Ev,[r(I,{type:"primary",onClick:C},{icon:V(()=>[r(U,{name:"save"})]),default:V(()=>[k[2]||(k[2]=E(" 保存 ",-1))]),_:1})])])],64)):o("v-if",true)],64)):o("v-if",true)])])}}}),Mv=ce(Av,[["__scopeId","data-v-5fa778a6"]]),jv={class:"setup-storage"},Rv={key:0,class:"loading-state"},Bv={key:0,class:"warning-box"},qv={class:"step-actions"},Hv=oe({__name:"SetupStorage",props:{modelValue:{},saving:{type:Boolean}},emits:["update:modelValue","next"],setup(t,{emit:a}){const s=t,u=a,i=w(true),v=w([]),b=w({});ye(b,p=>{u("update:modelValue",{...p})},{deep:true});const S=async()=>{try{i.value=true;const[p,k]=await Promise.all([we.getStorageFields(),we.getStorageConfig()]);v.value=p;const U={...s.modelValue};for(const I of p)k[I.key]!==void 0?U[I.key]=k[I.key]:U[I.key]===void 0&&I.default!==void 0&&(U[I.key]=I.default);b.value=U}catch(p){console.error("Failed to load storage config:",p)}finally{i.value=false}},C=()=>{u("next")};return he(S),(p,k)=>{const U=A("k-icon"),I=A("k-button");return l(),n("div",jv,[k[4]||(k[4]=e("h3",null,"存储配置",-1)),k[5]||(k[5]=e("p",{class:"step-desc"},"选择生成图片的存储方式。推荐使用本地存储或 S3 兼容存储。",-1)),i.value?(l(),n("div",Rv,[r(U,{name:"sync",class:"spin"}),k[1]||(k[1]=e("span",null,"加载配置中...",-1))])):(l(),n(D,{key:1},[o(" 使用 ConfigRenderer 渲染配置字段 "),r(et,{fields:v.value,modelValue:b.value,"onUpdate:modelValue":k[0]||(k[0]=f=>b.value=f)},null,8,["fields","modelValue"]),o(" 警告提示(当选择不使用时) "),b.value.backend==="none"?(l(),n("div",Bv,[r(U,{name:"warning"}),k[2]||(k[2]=e("div",null,[e("strong",null,"注意"),e("p",null,'选择"不使用"将保留生成服务返回的原始 URL,这些 URL 可能会过期或无法访问。建议配置存储后端以确保图片长期可用。')],-1))])):o("v-if",true)],64)),o(" 操作按钮 "),e("div",qv,[r(I,{type:"primary",loading:t.saving,disabled:i.value,onClick:C},{default:V(()=>[...k[3]||(k[3]=[E(" 下一步 ",-1)])]),_:1},8,["loading","disabled"])])])}}}),Jv=ce(Hv,[["__scopeId","data-v-9aeaae19"]]),Gv={class:"setup-auth"},Kv={class:"config-panel"},Wv={class:"form-row"},Zv={class:"field-container"},Yv={class:"verify-section"},Xv={class:"verify-card"},Qv={class:"code-display"},ep={class:"code-value"},tp={class:"code-meta"},sp={class:"step-actions"},lp=oe({__name:"SetupAuth",props:{saving:{type:Boolean}},emits:["complete","skip"],setup(t,{emit:a}){const s=a,u=w(null),i=w(false),v=w(""),b=w(0),S=w(null);let C=null,p=null;const k=async()=>{try{const m=await we.status();m.boundUid&&(u.value=m.boundUid,S.value=m.boundUid)}catch(m){console.error("Failed to load status:",m)}},U=async()=>{if(I&&clearTimeout(I),!!u.value)try{i.value=true;const m=await we.generateVerifyCode(u.value);v.value=m.code,b.value=m.expiresIn,X.success("验证码已生成,请在聊天平台完成验证")}catch(m){X.error("生成验证码失败: "+(m instanceof Error?m.message:"未知错误"))}finally{i.value=false}};let I=null;const f=()=>{I&&clearTimeout(I),v.value="",u.value&&(I=window.setTimeout(U,1e3))},T=async()=>{if(!u.value){X.warning("请输入用户 ID");return}try{await we.bindUid(u.value),X.success("配置已保存"),s("complete")}catch(m){X.error("保存失败: "+(m instanceof Error?m.message:"未知错误"))}};return he(()=>{k(),C=ms("media-luna/webui-auth/bind-request",m=>{m.uid&&(u.value=m.uid,m.code&&(v.value=m.code,b.value=m.expiresIn,X.info("收到绑定请求,请在聊天平台完成验证")))}),p=window.setInterval(async()=>{try{const m=await we.status();if(m.boundUid){if(u.value&&m.boundUid!==u.value)return;m.boundUid!==S.value&&(u.value=m.boundUid,X.success("检测到绑定成功!"),s("complete"),p&&clearInterval(p))}}catch{}},3e3)}),Ye(()=>{C&&C(),p&&clearInterval(p)}),(m,g)=>{const B=A("el-input-number"),J=A("k-button");return l(),n("div",Gv,[g[8]||(g[8]=e("h3",null,"用户绑定",-1)),g[9]||(g[9]=e("p",{class:"step-desc"}," 将 WebUI 与 Koishi 用户绑定。你可以直接配置用户 ID,也可以通过验证码进行验证绑定。 ",-1)),e("div",Kv,[o(" UID 输入 "),e("div",Wv,[g[3]||(g[3]=e("div",{class:"form-label"},"用户 ID (UID)",-1)),e("div",Zv,[r(B,{modelValue:u.value,"onUpdate:modelValue":g[0]||(g[0]=F=>u.value=F),min:1,controls:false,placeholder:"Koishi 用户 ID",class:"uid-input full-width",onInput:f},null,8,["modelValue"]),g[2]||(g[2]=e("div",{class:"field-desc"},[E(" 输入你的 Koishi "),e("code",null,"uid"),E(",不是原神的。 ")],-1))])]),o(" 验证码显示区域 "),e("div",Yv,[e("div",Xv,[e("div",Qv,[g[4]||(g[4]=e("div",{class:"code-label"},"验证码",-1)),e("div",ep,$(v.value),1),e("div",tp,"有效期 "+$(b.value)+" 秒",1)]),g[5]||(g[5]=e("div",{class:"verify-guide"},[e("p",null,"请在聊天平台向机器人发送以下指令完成绑定:"),e("div",{class:"command-box"},[e("code",null,"bindui")]),e("p",{class:"small-hint"},"发送指令后,请根据提示输入左侧的验证码。")],-1))])])]),e("div",sp,[r(J,{onClick:g[1]||(g[1]=F=>m.$emit("skip"))},{default:V(()=>[...g[6]||(g[6]=[E("跳过",-1)])]),_:1}),r(J,{type:"primary",loading:t.saving,onClick:T},{default:V(()=>[...g[7]||(g[7]=[E(" 保存 / 完成 ",-1)])]),_:1},8,["loading"])])])}}}),ap=ce(lp,[["__scopeId","data-v-59078dbb"]]),np={class:"setup-wizard"},op={class:"wizard-container"},ip={class:"steps-indicator"},rp={class:"step-number"},dp={key:1},up={class:"step-label"},cp={class:"wizard-content"},vp={key:"complete",class:"step-complete"},pp={class:"complete-icon"},mp=oe({__name:"SetupWizard",emits:["complete"],setup(t,{emit:a}){const s=a,u=[{id:"storage",label:"存储配置"},{id:"auth",label:"用户绑定"},{id:"complete",label:"完成"}],i=w(0),v=w(false),b=w({}),S=async()=>{v.value=true;try{await we.updateStorageConfig(b.value),X.success("存储配置已保存"),i.value=1}catch(U){X.error("保存失败: "+(U instanceof Error?U.message:"未知错误"))}finally{v.value=false}},C=()=>{i.value=2},p=()=>{i.value=2},k=async()=>{try{await we.complete(),s("complete")}catch{s("complete")}};return(U,I)=>{const f=A("k-icon"),T=A("k-button");return l(),n("div",np,[e("div",op,[o(" 头部 "),I[4]||(I[4]=e("div",{class:"wizard-header"},[e("h1",null,"欢迎使用 Media Luna"),e("p",null,"在开始使用前,请完成以下基础配置")],-1)),o(" 步骤指示器 "),e("div",ip,[(l(),n(D,null,ee(u,(m,g)=>e("div",{key:m.id,class:te(["step-item",{active:i.value===g,completed:i.value>g}])},[e("div",rp,[i.value>g?(l(),se(f,{key:0,name:"check"})):(l(),n("span",dp,$(g+1),1))]),e("span",up,$(m.label),1)],2)),64))]),o(" 步骤内容 "),e("div",cp,[r(Ze,{name:"fade",mode:"out-in"},{default:V(()=>[i.value===0?(l(),se(Jv,{key:"storage",modelValue:b.value,"onUpdate:modelValue":I[0]||(I[0]=m=>b.value=m),saving:v.value,onNext:S},null,8,["modelValue","saving"])):i.value===1?(l(),se(ap,{key:"auth",saving:v.value,onComplete:C,onSkip:p},null,8,["saving"])):i.value===2?(l(),n("div",vp,[e("div",pp,[r(f,{name:"check-circle"})]),I[2]||(I[2]=e("h2",null,"配置完成",-1)),I[3]||(I[3]=e("p",null,"您已完成 Media Luna 的初始设置,现在可以开始使用了。",-1)),r(T,{type:"primary",size:"large",onClick:k},{default:V(()=>[...I[1]||(I[1]=[E(" 开始使用 ",-1)])]),_:1})])):o("v-if",true)]),_:1})])])])}}}),fp=ce(mp,[["__scopeId","data-v-3931ca56"]]),gp={class:"top-nav"},_p={class:"nav-container"},yp={class:"nav-tabs",role:"tablist"},hp=["onClick","aria-selected"],bp={class:"main-content"},kp=oe({__name:"index",setup(t){const a=w("generate"),s=w(false),u=async()=>{try{const U=await we.status();s.value=U.needsSetup}catch(U){console.error("Failed to check setup status:",U),s.value=false}},i=()=>{s.value=false},v=G(()=>{switch(a.value){case"generate":return Dt;case"channels":return ti;case"presets":return Zi;case"tasks":return Ud;case"settings":return Mv;default:return Dt}}),b=U=>()=>yt("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[yt("path",{d:U})]),S=[{id:"generate",label:"生成",icon:b("M7.5 5.6L10 7 8.6 4.5 10 2 7.5 3.4 5 2 6.4 4.5 5 7zM19 2l-2.5 1.4L14 2l1.4 2.5L14 7l2.5-1.4L19 7l-1.4-2.5zm-5.6 5.4L9 12l4.4 4.6L17.8 12zM2 13l2.5 1.4L6 17l1.4-2.5L10 13 7.5 11.6 6 9l-1.4 2.5z")},{id:"channels",label:"渠道",icon:b("M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z")},{id:"presets",label:"预设",icon:b("M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z")},{id:"tasks",label:"任务",icon:b("M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z")},{id:"settings",label:"设置",icon:b("M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.488.488 0 0 0-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.58 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z")}];let C="";function p(){const U=document.querySelector(".layout-header");U&&(C=U.style.display,U.style.display="none")}function k(){const U=document.querySelector(".layout-header");U&&(U.style.display=C||"")}return he(()=>{p(),u()}),vs(k),(U,I)=>{const f=A("k-layout");return l(),se(f,{class:"app-layout media-luna-app"},{default:V(()=>[o(" 设置向导 "),s.value?(l(),se(fp,{key:0,onComplete:i})):(l(),n(D,{key:1},[o(" 主界面 "),e("div",gp,[e("div",_p,[I[0]||(I[0]=e("div",{class:"logo-area"},[e("span",{class:"logo-text"},"MEDIA LUNA")],-1)),e("div",yp,[(l(),n(D,null,ee(S,T=>e("div",{key:T.id,class:te(["nav-tab",{active:a.value===T.id}]),onClick:m=>a.value=T.id,role:"tab","aria-selected":a.value===T.id},[(l(),se(lt(T.icon),{class:"tab-icon"})),e("span",null,$(T.label),1)],10,hp)),64))])])]),e("div",bp,[(l(),se(ps,null,[(l(),se(lt(v.value)))],1024))])],64))]),_:1})}}}),$p=ce(kp,[["__scopeId","data-v-c4fa9f13"]]),xp=t=>{t.page({name:"Media Luna",path:"/media-luna",component:$p,order:500})};export{xp as default};
5
+ **/const Ts=Object.prototype.hasOwnProperty,kt=(t,a)=>Ts.call(t,a),Ke=t=>typeof t=="function",Je=t=>typeof t=="string",Mt=t=>t!==null&&typeof t=="object";var Us=typeof global=="object"&&global&&global.Object===Object&&global,zs=typeof self=="object"&&self&&self.Object===Object&&self,ct=Us||zs||Function("return this")(),De=ct.Symbol,jt=Object.prototype,Ps=jt.hasOwnProperty,Ds=jt.toString,Ee=De?De.toStringTag:void 0;function Ns(t){var a=Ps.call(t,Ee),s=t[Ee];try{t[Ee]=void 0;var u=true}catch{}var r=Ds.call(t);return u&&(a?t[Ee]=s:delete t[Ee]),r}var Fs=Object.prototype,Ls=Fs.toString;function Es(t){return Ls.call(t)}var As="[object Null]",Ms="[object Undefined]",$t=De?De.toStringTag:void 0;function Rt(t){return t==null?t===void 0?Ms:As:$t&&$t in Object(t)?Ns(t):Es(t)}function js(t){return t!=null&&typeof t=="object"}var Rs="[object Symbol]";function vt(t){return typeof t=="symbol"||js(t)&&Rt(t)==Rs}function Bs(t,a){for(var s=-1,u=t==null?0:t.length,r=Array(u);++s<u;)r[s]=a(t[s],s,t);return r}var pt=Array.isArray,wt=De?De.prototype:void 0,Ct=wt?wt.toString:void 0;function Bt(t){if(typeof t=="string")return t;if(pt(t))return Bs(t,Bt)+"";if(vt(t))return Ct?Ct.call(t):"";var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function qt(t){var a=typeof t;return t!=null&&(a=="object"||a=="function")}var qs="[object AsyncFunction]",Hs="[object Function]",Ks="[object GeneratorFunction]",Js="[object Proxy]";function Gs(t){if(!qt(t))return false;var a=Rt(t);return a==Hs||a==Ks||a==qs||a==Js}var tt=ct["__core-js_shared__"],Vt=function(){var t=/[^.]+$/.exec(tt&&tt.keys&&tt.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function Ws(t){return!!Vt&&Vt in t}var Zs=Function.prototype,Ys=Zs.toString;function Xs(t){if(t!=null){try{return Ys.call(t)}catch{}try{return t+""}catch{}}return""}var Qs=/[\\^$.*+?()[\]{}|]/g,el=/^\[object .+?Constructor\]$/,tl=Function.prototype,sl=Object.prototype,ll=tl.toString,al=sl.hasOwnProperty,nl=RegExp("^"+ll.call(al).replace(Qs,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ol(t){if(!qt(t)||Ws(t))return false;var a=Gs(t)?nl:el;return a.test(Xs(t))}function il(t,a){return t==null?void 0:t[a]}function Ht(t,a){var s=il(t,a);return ol(s)?s:void 0}function rl(t,a){return t===a||t!==t&&a!==a}var dl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ul=/^\w*$/;function cl(t,a){if(pt(t))return false;var s=typeof t;return s=="number"||s=="symbol"||s=="boolean"||t==null||vt(t)?true:ul.test(t)||!dl.test(t)||a!=null&&t in Object(a)}var Me=Ht(Object,"create");function vl(){this.__data__=Me?Me(null):{},this.size=0}function pl(t){var a=this.has(t)&&delete this.__data__[t];return this.size-=a?1:0,a}var ml="__lodash_hash_undefined__",fl=Object.prototype,gl=fl.hasOwnProperty;function _l(t){var a=this.__data__;if(Me){var s=a[t];return s===ml?void 0:s}return gl.call(a,t)?a[t]:void 0}var yl=Object.prototype,hl=yl.hasOwnProperty;function bl(t){var a=this.__data__;return Me?a[t]!==void 0:hl.call(a,t)}var kl="__lodash_hash_undefined__";function $l(t,a){var s=this.__data__;return this.size+=this.has(t)?0:1,s[t]=Me&&a===void 0?kl:a,this}function Ve(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var u=t[a];this.set(u[0],u[1])}}Ve.prototype.clear=vl;Ve.prototype.delete=pl;Ve.prototype.get=_l;Ve.prototype.has=bl;Ve.prototype.set=$l;function wl(){this.__data__=[],this.size=0}function Xe(t,a){for(var s=t.length;s--;)if(rl(t[s][0],a))return s;return-1}var Cl=Array.prototype,Vl=Cl.splice;function xl(t){var a=this.__data__,s=Xe(a,t);if(s<0)return false;var u=a.length-1;return s==u?a.pop():Vl.call(a,s,1),--this.size,true}function Sl(t){var a=this.__data__,s=Xe(a,t);return s<0?void 0:a[s][1]}function Il(t){return Xe(this.__data__,t)>-1}function Ol(t,a){var s=this.__data__,u=Xe(s,t);return u<0?(++this.size,s.push([t,a])):s[u][1]=a,this}function Fe(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var u=t[a];this.set(u[0],u[1])}}Fe.prototype.clear=wl;Fe.prototype.delete=xl;Fe.prototype.get=Sl;Fe.prototype.has=Il;Fe.prototype.set=Ol;var Tl=Ht(ct,"Map");function Ul(){this.size=0,this.__data__={hash:new Ve,map:new(Tl||Fe),string:new Ve}}function zl(t){var a=typeof t;return a=="string"||a=="number"||a=="symbol"||a=="boolean"?t!=="__proto__":t===null}function Qe(t,a){var s=t.__data__;return zl(a)?s[typeof a=="string"?"string":"hash"]:s.map}function Pl(t){var a=Qe(this,t).delete(t);return this.size-=a?1:0,a}function Dl(t){return Qe(this,t).get(t)}function Nl(t){return Qe(this,t).has(t)}function Fl(t,a){var s=Qe(this,t),u=s.size;return s.set(t,a),this.size+=s.size==u?0:1,this}function xe(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var u=t[a];this.set(u[0],u[1])}}xe.prototype.clear=Ul;xe.prototype.delete=Pl;xe.prototype.get=Dl;xe.prototype.has=Nl;xe.prototype.set=Fl;var Ll="Expected a function";function mt(t,a){if(typeof t!="function"||a!=null&&typeof a!="function")throw new TypeError(Ll);var s=function(){var u=arguments,r=a?a.apply(this,u):u[0],v=s.cache;if(v.has(r))return v.get(r);var h=t.apply(this,u);return s.cache=v.set(r,h)||v,h};return s.cache=new(mt.Cache||xe),s}mt.Cache=xe;var El=500;function Al(t){var a=mt(t,function(u){return s.size===El&&s.clear(),u}),s=a.cache;return a}var Ml=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,jl=/\\(\\)?/g,Rl=Al(function(t){var a=[];return t.charCodeAt(0)===46&&a.push(""),t.replace(Ml,function(s,u,r,v){a.push(r?v.replace(jl,"$1"):u||s)}),a});function Bl(t){return t==null?"":Bt(t)}function ql(t,a){return pt(t)?t:cl(t,a)?[t]:Rl(Bl(t))}function Hl(t){if(typeof t=="string"||vt(t))return t;var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function Kl(t,a){a=ql(a,t);for(var s=0,u=a.length;t!=null&&s<u;)t=t[Hl(a[s++])];return s&&s==u?t:void 0}function Jl(t,a,s){var u=t==null?void 0:Kl(t,a);return u===void 0?s:u}function Gl(t){for(var a=-1,s=t==null?0:t.length,u={};++a<s;){var r=t[a];u[r[0]]=r[1]}return u}const Wl=t=>t===void 0,je=t=>typeof t=="number",Zl=t=>typeof Element>"u"?false:t instanceof Element,Yl=t=>Je(t)?!Number.isNaN(Number(t)):false,xt=t=>Object.keys(t);function nt(t,a="px"){if(!t)return"";if(je(t)||Yl(t))return`${t}${a}`;if(Je(t))return t}/*! Element Plus Icons Vue v2.3.2 */var Xl=oe({name:"CircleCloseFilled",__name:"circle-close-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),Ql=Xl,ea=oe({name:"Close",__name:"close",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),ta=ea,sa=oe({name:"InfoFilled",__name:"info-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),la=sa,aa=oe({name:"SuccessFilled",__name:"success-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),na=aa,oa=oe({name:"WarningFilled",__name:"warning-filled",setup(t){return(a,s)=>(l(),n("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[e("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ia=oa;const Kt="__epPropKey",ke=t=>t,ra=t=>Mt(t)&&!!t[Kt],Jt=(t,a)=>{if(!Mt(t)||ra(t))return t;const{values:s,required:u,default:r,type:v,validator:h}=t,x={type:v,required:!!u,validator:s||h?_=>{let C=false,N=[];if(s&&(N=Array.from(s),kt(t,"default")&&N.push(r),C||(C=N.includes(_))),h&&(C||(C=h(_))),!C&&N.length>0){const z=[...new Set(N)].map(p=>JSON.stringify(p)).join(", ");ns(`Invalid prop: validation failed${a?` for prop "${a}"`:""}. Expected one of [${z}], got value ${JSON.stringify(_)}.`)}return C}:void 0,[Kt]:true};return kt(t,"default")&&(x.default=r),x},Re=t=>Gl(Object.entries(t).map(([a,s])=>[a,Jt(s,a)])),da=ke([String,Object,Function]),ua={Close:ta},St={success:na,warning:ia,error:Ql,info:la},Gt=(t,a)=>(t.install=s=>{for(const u of[t,...Object.values({})])s.component(u.name,u)},t),ca=(t,a)=>(t.install=s=>{t._context=s._context,s.config.globalProperties[a]=t},t),va={esc:"Escape"},pa=["","default","small","large"],ma=t=>t,It=({from:t,replacement:a,scope:s,version:u,ref:r,type:v="API"},h)=>{_e(()=>ae(h),T=>{},{immediate:true})};var fa={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const ga=t=>(a,s)=>_a(a,s,ae(t)),_a=(t,a,s)=>Jl(s,t,t).replace(/\{(\w+)\}/g,(u,r)=>{var v;return`${(v=a==null?void 0:a[r])!=null?v:`{${r}}`}`}),ya=t=>{const a=G(()=>ae(t).name),s=os(t)?t:w(t);return{lang:a,locale:s,t:ga(t)}},Wt=Symbol("localeContextKey"),ha=t=>{const a=t||Ue(Wt,w());return ya(G(()=>a.value||fa))},qe="el",ba="is-",Ce=(t,a,s,u,r)=>{let v=`${t}-${a}`;return s&&(v+=`-${s}`),u&&(v+=`__${u}`),r&&(v+=`--${r}`),v},Zt=Symbol("namespaceContextKey"),ka=t=>{const a=t||(Ae()?Ue(Zt,w(qe)):w(qe));return G(()=>ae(a)||qe)},ft=(t,a)=>{const s=ka(a);return{namespace:s,b:(m="")=>Ce(s.value,t,m,"",""),e:m=>m?Ce(s.value,t,"",m,""):"",m:m=>m?Ce(s.value,t,"","",m):"",be:(m,O)=>m&&O?Ce(s.value,t,m,O,""):"",em:(m,O)=>m&&O?Ce(s.value,t,"",m,O):"",bm:(m,O)=>m&&O?Ce(s.value,t,m,"",O):"",bem:(m,O,K)=>m&&O&&K?Ce(s.value,t,m,O,K):"",is:(m,...O)=>{const K=O.length>=1?O[0]:true;return m&&K?`${ba}${m}`:""},cssVar:m=>{const O={};for(const K in m)m[K]&&(O[`--${s.value}-${K}`]=m[K]);return O},cssVarName:m=>`--${s.value}-${m}`,cssVarBlock:m=>{const O={};for(const K in m)m[K]&&(O[`--${s.value}-${t}-${K}`]=m[K]);return O},cssVarBlockName:m=>`--${s.value}-${t}-${m}`}},Ot={current:0},Tt=w(0),Yt=2e3,Ut=Symbol("elZIndexContextKey"),Xt=Symbol("zIndexContextKey"),$a=t=>{const a=Ae()?Ue(Ut,Ot):Ot,s=t||(Ae()?Ue(Xt,void 0):void 0),u=G(()=>{const h=ae(s);return je(h)?h:Yt}),r=G(()=>u.value+Tt.value),v=()=>(a.current++,Tt.value=a.current,r.value);return!dt&&Ue(Ut),{initialZIndex:u,currentZIndex:r,nextZIndex:v}},wa=Jt({type:String,values:pa,required:false}),Ca=Symbol("size"),Va=Symbol("emptyValuesContextKey"),xa=Re({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:t=>Ke(t)?!t():!t}}),Qt=Symbol(),Ge=w();function es(t,a=void 0){return Ae()?Ue(Qt,Ge):Ge}function Sa(t,a){const s=es(),u=ft(t,G(()=>{var T;return((T=s.value)==null?void 0:T.namespace)||qe})),r=ha(G(()=>{var T;return(T=s.value)==null?void 0:T.locale})),v=$a(G(()=>{var T;return((T=s.value)==null?void 0:T.zIndex)||Yt})),h=G(()=>{var T;return ae(a)||((T=s.value)==null?void 0:T.size)||""});return ts(G(()=>ae(s)||{})),{ns:u,locale:r,zIndex:v,size:h}}const ts=(t,a,s=false)=>{var u;const r=!!Ae(),v=r?es():void 0,h=(u=void 0)!=null?u:r?is:void 0;if(!h)return;const T=G(()=>{const x=ae(t);return v!=null&&v.value?Ia(v.value,x):x});return h(Qt,T),h(Wt,G(()=>T.value.locale)),h(Zt,G(()=>T.value.namespace)),h(Xt,G(()=>T.value.zIndex)),h(Ca,{size:G(()=>T.value.size||"")}),h(Va,G(()=>({emptyValues:T.value.emptyValues,valueOnClear:T.value.valueOnClear}))),(s||!Ge.value)&&(Ge.value=T.value),T},Ia=(t,a)=>{const s=[...new Set([...xt(t),...xt(a)])],u={};for(const r of s)u[r]=a[r]!==void 0?a[r]:t[r];return u},Oa=Re({a11y:{type:Boolean,default:true},locale:{type:ke(Object)},size:wa,button:{type:ke(Object)},experimentalFeatures:{type:ke(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:ke(Object)},zIndex:Number,namespace:{type:String,default:"el"},...xa}),ot={};oe({name:"ElConfigProvider",props:Oa,setup(t,{slots:a}){_e(()=>t.message,u=>{Object.assign(ot,u??{})},{immediate:true,deep:true});const s=ts(t);return()=>We(a,"default",{config:s==null?void 0:s.value})}});var gt=(t,a)=>{const s=t.__vccOpts||t;for(const[u,r]of a)s[u]=r;return s};const Ta=Re({size:{type:ke([Number,String])},color:{type:String}}),Ua=oe({name:"ElIcon",inheritAttrs:false}),za=oe({...Ua,props:Ta,setup(t){const a=t,s=ft("icon"),u=G(()=>{const{size:r,color:v}=a;return!r&&!v?{}:{fontSize:Wl(r)?void 0:nt(r),"--color":v}});return(r,v)=>(l(),n("i",rs({class:ae(s).b(),style:ae(u)},r.$attrs),[We(r.$slots,"default")],16))}});var Pa=gt(za,[["__file","icon.vue"]]);const zt=Gt(Pa),Da=Re({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:true},color:String,dotStyle:{type:ke([String,Object,Array])},badgeStyle:{type:ke([String,Object,Array])},offset:{type:ke(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),Na=["textContent"],Fa=oe({name:"ElBadge"}),La=oe({...Fa,props:Da,setup(t,{expose:a}){const s=t,u=ft("badge"),r=G(()=>s.isDot?"":je(s.value)&&je(s.max)?s.max<s.value?`${s.max}+`:s.value===0&&!s.showZero?"":`${s.value}`:`${s.value}`),v=G(()=>{var h,T,x,_,C,N;return[{backgroundColor:s.color,marginRight:nt(-((T=(h=s.offset)==null?void 0:h[0])!=null?T:0)),marginTop:nt((_=(x=s.offset)==null?void 0:x[1])!=null?_:0)},(C=s.dotStyle)!=null?C:{},(N=s.badgeStyle)!=null?N:{}]});return It({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},G(()=>!!s.dotStyle)),It({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},G(()=>!!s.dotClass)),a({content:r}),(h,T)=>(l(),n("div",{class:te(ae(u).b())},[We(h.$slots,"default"),i(Ze,{name:`${ae(u).namespace.value}-zoom-in-center`,persisted:""},{default:S(()=>[Oe(e("sup",{class:te([ae(u).e("content"),ae(u).em("content",h.type),ae(u).is("fixed",!!h.$slots.default),ae(u).is("dot",h.isDot),h.dotClass,h.badgeClass]),style:Ft(ae(v)),textContent:$(ae(r))},null,14,Na),[[Te,!h.hidden&&(ae(r)||h.isDot)]])]),_:1},8,["name"])],2))}});var Ea=gt(La,[["__file","badge.vue"]]);const Aa=Gt(Ea),ss=["success","info","warning","error"],ge=ma({customClass:"",center:false,dangerouslyUseHTMLString:false,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:false,type:"info",plain:false,offset:16,zIndex:0,grouping:false,repeatNum:1,appendTo:dt?document.body:void 0}),Ma=Re({customClass:{type:String,default:ge.customClass},center:{type:Boolean,default:ge.center},dangerouslyUseHTMLString:{type:Boolean,default:ge.dangerouslyUseHTMLString},duration:{type:Number,default:ge.duration},icon:{type:da,default:ge.icon},id:{type:String,default:ge.id},message:{type:ke([String,Object,Function]),default:ge.message},onClose:{type:ke(Function),default:ge.onClose},showClose:{type:Boolean,default:ge.showClose},type:{type:String,values:ss,default:ge.type},plain:{type:Boolean,default:ge.plain},offset:{type:Number,default:ge.offset},zIndex:{type:Number,default:ge.zIndex},grouping:{type:Boolean,default:ge.grouping},repeatNum:{type:Number,default:ge.repeatNum}}),ja={destroy:()=>true},$e=ds([]),Ra=t=>{const a=$e.findIndex(r=>r.id===t),s=$e[a];let u;return a>0&&(u=$e[a-1]),{current:s,prev:u}},Ba=t=>{const{prev:a}=Ra(t);return a?a.vm.exposed.bottom.value:0},qa=(t,a)=>$e.findIndex(u=>u.id===t)>0?16:a,Ha=["id"],Ka=["innerHTML"],Ja=oe({name:"ElMessage"}),Ga=oe({...Ja,props:Ma,emits:ja,setup(t,{expose:a}){const s=t,{Close:u}=ua,{ns:r,zIndex:v}=Sa("message"),{currentZIndex:h,nextZIndex:T}=v,x=w(),_=w(false),C=w(0);let N;const z=G(()=>s.type?s.type==="error"?"danger":s.type:"info"),p=G(()=>{const X=s.type;return{[r.bm("icon",X)]:X&&St[X]}}),U=G(()=>s.icon||St[s.type]||""),m=G(()=>Ba(s.id)),O=G(()=>qa(s.id,s.offset)+m.value),K=G(()=>C.value+O.value),L=G(()=>({top:`${O.value}px`,zIndex:h.value}));function I(){s.duration!==0&&({stop:N}=_s(()=>{b()},s.duration))}function V(){N==null||N()}function b(){_.value=false}function Z({code:X}){X===va.esc&&b()}return ye(()=>{I(),T(),_.value=true}),_e(()=>s.repeatNum,()=>{V(),I()}),fs(document,"keydown",Z),gs(x,()=>{C.value=x.value.getBoundingClientRect().height}),a({visible:_,bottom:K,close:b}),(X,de)=>(l(),se(Ze,{name:ae(r).b("fade"),onBeforeLeave:X.onClose,onAfterLeave:de[0]||(de[0]=k=>X.$emit("destroy")),persisted:""},{default:S(()=>[Oe(e("div",{id:X.id,ref_key:"messageRef",ref:x,class:te([ae(r).b(),{[ae(r).m(X.type)]:X.type},ae(r).is("center",X.center),ae(r).is("closable",X.showClose),ae(r).is("plain",X.plain),X.customClass]),style:Ft(ae(L)),role:"alert",onMouseenter:V,onMouseleave:I},[X.repeatNum>1?(l(),se(ae(Aa),{key:0,value:X.repeatNum,type:ae(z),class:te(ae(r).e("badge"))},null,8,["value","type","class"])):o("v-if",true),ae(U)?(l(),se(ae(zt),{key:1,class:te([ae(r).e("icon"),ae(p)])},{default:S(()=>[(l(),se(lt(ae(U))))]),_:1},8,["class"])):o("v-if",true),We(X.$slots,"default",{},()=>[X.dangerouslyUseHTMLString?(l(),n(F,{key:1},[o(" Caution here, message could've been compromised, never use user's input as message "),e("p",{class:te(ae(r).e("content")),innerHTML:X.message},null,10,Ka)],2112)):(l(),n("p",{key:0,class:te(ae(r).e("content"))},$(X.message),3))]),X.showClose?(l(),se(ae(zt),{key:2,class:te(ae(r).e("closeBtn")),onClick:fe(b,["stop"])},{default:S(()=>[i(ae(u))]),_:1},8,["class","onClick"])):o("v-if",true)],46,Ha),[[Te,_.value]])]),_:3},8,["name","onBeforeLeave"]))}});var Wa=gt(Ga,[["__file","message.vue"]]);let Za=1;const ls=t=>{const a=!t||Je(t)||Lt(t)||Ke(t)?{message:t}:t,s={...ge,...a};if(!s.appendTo)s.appendTo=document.body;else if(Je(s.appendTo)){let u=document.querySelector(s.appendTo);Zl(u)||(u=document.body),s.appendTo=u}return s},Ya=t=>{const a=$e.indexOf(t);if(a===-1)return;$e.splice(a,1);const{handler:s}=t;s.close()},Xa=({appendTo:t,...a},s)=>{const u=`message_${Za++}`,r=a.onClose,v=document.createElement("div"),h={...a,id:u,onClose:()=>{r==null||r(),Ya(C)},onDestroy:()=>{yt(null,v)}},T=i(Wa,h,Ke(h.message)||Lt(h.message)?{default:Ke(h.message)?h.message:()=>h.message}:null);T.appContext=s||Ne._context,yt(T,v),t.appendChild(v.firstElementChild);const x=T.component,C={id:u,vnode:T,vm:x,handler:{close:()=>{x.exposed.visible.value=false}},props:T.component.props};return C},Ne=(t={},a)=>{if(!dt)return{close:()=>{}};if(je(ot.max)&&$e.length>=ot.max)return{close:()=>{}};const s=ls(t);if(s.grouping&&$e.length){const r=$e.find(({vnode:v})=>{var h;return((h=v.props)==null?void 0:h.message)===s.message});if(r)return r.props.repeatNum+=1,r.props.type=s.type,r.handler}const u=Xa(s,a);return $e.push(u),u.handler};ss.forEach(t=>{Ne[t]=(a={},s)=>{const u=ls(a);return Ne({...u,type:t},s)}});function Qa(t){for(const a of $e)(!t||t===a.props.type)&&a.handler.close()}Ne.closeAll=Qa;Ne._context=null;const Se=ca(Ne,"$message"),en={class:"table-field-editor"},tn={class:"toolbar"},sn={class:"toolbar-left"},ln={class:"toolbar-right"},an={class:"table-wrapper"},nn={class:"data-table"},on={key:0,class:"col-check"},rn={key:0,class:"col-check"},dn={class:"col-op"},un=["colspan"],cn={class:"add-hint"},vn={key:0,class:"table-footer"},pn={class:"import-mode"},mn={class:"presets-header"},fn={class:"sel-count"},gn={class:"presets-list"},_n=["onClick"],yn={class:"p-alias"},hn={class:"p-desc"},bn=oe({__name:"TableFieldEditor",props:{columns:{},modelValue:{default:()=>[]},tableConfig:{},presets:{default:()=>[]}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,r=G({get:()=>s.modelValue||[],set:P=>u("update:modelValue",P)}),v=w([]),h=G(()=>r.value.length>0&&v.value.length===r.value.length),T=G(()=>v.value.length>0&&v.value.length<r.value.length),x=G(()=>{var g;let P=s.columns.length+1;return((g=s.tableConfig)==null?void 0:g.enableSelection)!==false&&P++,P}),_=w(false),C=w(""),N=w("append"),z=w(false),p=w([]),U=w(""),m=G(()=>{const P=new Set;for(const g of r.value)g.alias&&P.add(g.alias.toLowerCase());return P}),O=G(()=>{if(!U.value)return s.presets;const P=U.value.toLowerCase();return s.presets.filter(g=>{var d,c,E;return((d=g.alias)==null?void 0:d.toLowerCase().includes(P))||((c=g.description)==null?void 0:c.toLowerCase().includes(P))||((E=g.repoId)==null?void 0:E.toLowerCase().includes(P))})});function K(){const P={};for(const g of s.columns)P[g.key]=g.type==="boolean"?false:g.type==="number"?void 0:"";u("update:modelValue",[...r.value,P])}function L(P){const g=[...r.value];g.splice(P,1),u("update:modelValue",g),v.value=v.value.filter(d=>d!==P).map(d=>d>P?d-1:d)}function I(P,g,d){const c=[...r.value];c[P]={...c[P],[g]:d},u("update:modelValue",c)}function V(P){const g=v.value.indexOf(P);g>=0?v.value.splice(g,1):v.value.push(P)}function b(P){v.value=P?r.value.map((g,d)=>d):[]}function Z(){if(v.value.length===0)return;const P=new Set(v.value);u("update:modelValue",r.value.filter((g,d)=>!P.has(d))),Se.success(`已删除 ${P.size} 条`),v.value=[]}function X(){const P=new Blob([JSON.stringify(r.value,null,2)],{type:"application/json"}),g=URL.createObjectURL(P),d=document.createElement("a");d.href=g,d.download="data.json",d.click(),URL.revokeObjectURL(g),Se.success("导出成功")}function de(){try{const P=JSON.parse(C.value);if(!Array.isArray(P)){Se.error("需要 JSON 数组");return}const g=P.map(d=>{const c={};for(const E of s.columns)c[E.key]=d[E.key]??(E.key==="repoId"&&d.name?d.name:"");return c});u("update:modelValue",N.value==="replace"?g:[...r.value,...g]),Se.success(`已导入 ${g.length} 条`),_.value=false,C.value=""}catch{Se.error("JSON 解析失败")}}function k(){p.value=O.value.filter(P=>{var g;return!m.value.has((g=P.alias)==null?void 0:g.toLowerCase())}).map(P=>P.alias)}function D(P){if(m.value.has(P==null?void 0:P.toLowerCase()))return;const g=p.value.indexOf(P);g>=0?p.value.splice(g,1):p.value.push(P)}function j(){const g=s.presets.filter(d=>p.value.includes(d.alias)).map(d=>{const c={};for(const E of s.columns)c[E.key]=d[E.key]??"";return c});u("update:modelValue",[...r.value,...g]),Se.success(`已导入 ${g.length} 条`),z.value=false,p.value=[]}return _e(z,P=>{P&&(p.value=[],U.value="")}),(P,g)=>{var R,Y,ce,H,ie;const d=M("k-icon"),c=M("el-button"),E=M("el-checkbox"),ne=M("el-input"),W=M("el-input-number"),f=M("el-switch"),y=M("el-option"),B=M("el-select"),re=M("el-radio"),le=M("el-radio-group"),ue=M("el-dialog"),pe=M("el-tag");return l(),n("div",en,[o(" 工具栏 "),e("div",tn,[e("div",sn,[i(c,{type:"primary",size:"small",onClick:K},{default:S(()=>[i(d,{name:"add"}),g[10]||(g[10]=A(" 添加 ",-1))]),_:1}),(R=t.tableConfig)!=null&&R.enableBatchDelete&&v.value.length>0?(l(),se(c,{key:0,type:"danger",size:"small",onClick:Z},{default:S(()=>[A(" 删除选中 ("+$(v.value.length)+") ",1)]),_:1})):o("v-if",true)]),e("div",ln,[((Y=t.presets)==null?void 0:Y.length)>0?(l(),se(c,{key:0,size:"small",onClick:g[0]||(g[0]=J=>z.value=true)},{default:S(()=>[...g[11]||(g[11]=[A(" 内置预设 ",-1)])]),_:1})):o("v-if",true),((ce=t.tableConfig)==null?void 0:ce.enableImport)!==false?(l(),se(c,{key:1,size:"small",onClick:g[1]||(g[1]=J=>_.value=true)},{default:S(()=>[...g[12]||(g[12]=[A(" 导入 ",-1)])]),_:1})):o("v-if",true),((H=t.tableConfig)==null?void 0:H.enableExport)!==false?(l(),se(c,{key:2,size:"small",onClick:X},{default:S(()=>[...g[13]||(g[13]=[A(" 导出 ",-1)])]),_:1})):o("v-if",true)])]),o(" 数据表格 "),e("div",an,[e("table",nn,[e("thead",null,[e("tr",null,[((ie=t.tableConfig)==null?void 0:ie.enableSelection)!==false?(l(),n("th",on,[i(E,{"model-value":h.value,indeterminate:T.value,onChange:b,size:"small"},null,8,["model-value","indeterminate"])])):o("v-if",true),(l(true),n(F,null,ee(t.columns,J=>(l(),n("th",{key:J.key,class:te(["col-"+J.key,{required:J.required}])},$(J.label),3))),128)),g[14]||(g[14]=e("th",{class:"col-op"},"操作",-1))])]),e("tbody",null,[(l(true),n(F,null,ee(r.value,(J,he)=>{var Le;return l(),n("tr",{key:he,class:te({selected:v.value.includes(he)})},[((Le=t.tableConfig)==null?void 0:Le.enableSelection)!==false?(l(),n("td",rn,[i(E,{"model-value":v.value.includes(he),onChange:me=>V(he),size:"small"},null,8,["model-value","onChange"])])):o("v-if",true),(l(true),n(F,null,ee(t.columns,me=>(l(),n("td",{key:me.key,class:te("col-"+me.key)},[me.type==="text"?(l(),se(ne,{key:0,"model-value":J[me.key],"onUpdate:modelValue":be=>I(he,me.key,be),placeholder:me.placeholder,size:"small"},null,8,["model-value","onUpdate:modelValue","placeholder"])):me.type==="number"?(l(),se(W,{key:1,"model-value":J[me.key],"onUpdate:modelValue":be=>I(he,me.key,be),size:"small",controls:false,class:"num-input"},null,8,["model-value","onUpdate:modelValue"])):me.type==="boolean"?(l(),se(f,{key:2,"model-value":J[me.key],"onUpdate:modelValue":be=>I(he,me.key,be),size:"small"},null,8,["model-value","onUpdate:modelValue"])):me.type==="select"?(l(),se(B,{key:3,"model-value":J[me.key],"onUpdate:modelValue":be=>I(he,me.key,be),placeholder:me.placeholder||"请选择",size:"small"},{default:S(()=>[(l(true),n(F,null,ee(me.options,be=>(l(),se(y,{key:String(be.value),label:be.label,value:be.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])):o("v-if",true)],2))),128)),e("td",dn,[i(c,{type:"danger",size:"small",link:"",onClick:me=>L(he)},{default:S(()=>[...g[15]||(g[15]=[A(" 删除 ",-1)])]),_:1},8,["onClick"])])],2)}),128)),o(" 添加行 "),e("tr",{class:"add-row",onClick:K},[e("td",{colspan:x.value,class:"add-cell"},[e("span",cn,[i(d,{name:"add"}),g[16]||(g[16]=A(" 点击添加一行 ",-1))])],8,un)])])])]),o(" 底部统计 "),r.value.length>0?(l(),n("div",vn," 共 "+$(r.value.length)+" 条 ",1)):o("v-if",true),o(" 导入对话框 "),i(ue,{modelValue:_.value,"onUpdate:modelValue":g[5]||(g[5]=J=>_.value=J),title:"导入数据",width:"550px","close-on-click-modal":false},{footer:S(()=>[i(c,{onClick:g[4]||(g[4]=J=>_.value=false)},{default:S(()=>[...g[19]||(g[19]=[A("取消",-1)])]),_:1}),i(c,{type:"primary",onClick:de},{default:S(()=>[...g[20]||(g[20]=[A("导入",-1)])]),_:1})]),default:S(()=>[g[21]||(g[21]=e("p",{class:"dialog-tip"},"粘贴 JSON 数组格式数据:",-1)),i(ne,{modelValue:C.value,"onUpdate:modelValue":g[2]||(g[2]=J=>C.value=J),type:"textarea",rows:10,placeholder:'[{"alias": "xxx", "repoId": "xxx", ...}]'},null,8,["modelValue"]),e("div",pn,[i(le,{modelValue:N.value,"onUpdate:modelValue":g[3]||(g[3]=J=>N.value=J)},{default:S(()=>[i(re,{value:"append"},{default:S(()=>[...g[17]||(g[17]=[A("追加",-1)])]),_:1}),i(re,{value:"replace"},{default:S(()=>[...g[18]||(g[18]=[A("替换",-1)])]),_:1})]),_:1},8,["modelValue"])])]),_:1},8,["modelValue"]),o(" 预设对话框 "),i(ue,{modelValue:z.value,"onUpdate:modelValue":g[9]||(g[9]=J=>z.value=J),title:"内置预设",width:"600px","close-on-click-modal":false},{footer:S(()=>[i(c,{onClick:g[8]||(g[8]=J=>z.value=false)},{default:S(()=>[...g[25]||(g[25]=[A("取消",-1)])]),_:1}),i(c,{type:"primary",onClick:j,disabled:p.value.length===0},{default:S(()=>[A(" 导入 ("+$(p.value.length)+") ",1)]),_:1},8,["disabled"])]),default:S(()=>[e("div",mn,[i(ne,{modelValue:U.value,"onUpdate:modelValue":g[6]||(g[6]=J=>U.value=J),placeholder:"搜索...",size:"small",clearable:"",class:"search-input"},null,8,["modelValue"]),i(c,{size:"small",onClick:k},{default:S(()=>[...g[22]||(g[22]=[A("全选",-1)])]),_:1}),i(c,{size:"small",onClick:g[7]||(g[7]=J=>p.value=[])},{default:S(()=>[...g[23]||(g[23]=[A("清空",-1)])]),_:1}),e("span",fn,"已选 "+$(p.value.length),1)]),e("div",gn,[(l(true),n(F,null,ee(O.value,J=>{var he,Le,me;return l(),n("div",{key:J.alias,class:te(["preset-row",{selected:p.value.includes(J.alias),disabled:m.value.has((he=J.alias)==null?void 0:he.toLowerCase())}]),onClick:be=>D(J.alias)},[i(E,{"model-value":p.value.includes(J.alias),disabled:m.value.has((Le=J.alias)==null?void 0:Le.toLowerCase()),size:"small"},null,8,["model-value","disabled"]),e("span",yn,$(J.alias),1),e("span",hn,$(J.description||J.repoId),1),m.value.has((me=J.alias)==null?void 0:me.toLowerCase())?(l(),se(pe,{key:0,size:"small",type:"info"},{default:S(()=>[...g[24]||(g[24]=[A("已有",-1)])]),_:1})):o("v-if",true)],10,_n)}),128))])]),_:1},8,["modelValue"])])}}}),kn=ve(bn,[["__scopeId","data-v-3cee27e6"]]),$n={class:"config-renderer"},wn={key:0,class:"form-row"},Cn={class:"field-container"},Vn={key:8,class:"field-desc"},xn=oe({__name:"ConfigRenderer",props:{fields:{},modelValue:{},clearable:{type:Boolean,default:false},presetsMap:{default:()=>({})}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,r=w({}),v=w({}),h=(L,I)=>{if(!I||Object.keys(I).length===0)return L;const V=Object.keys(I).sort().map(b=>`${b}=${I[b]}`).join("&");return`${L}?${V}`},T=async(L,I)=>{const V=h(L,I);if(!(r.value[V]||v.value[V])){v.value[V]=true;try{const b=await rt(L,I);b!=null&&b.success&&Array.isArray(b.data)?r.value[V]=b.data:r.value[V]=[]}catch(b){console.error(`Failed to fetch options from ${L}:`,b),r.value[V]=[]}finally{v.value[V]=false}}},x=L=>{if(!L.dependsOn)return;const I=s.modelValue[L.dependsOn];if(!(I==null||I===""))return{[L.dependsOn]:I}},_=L=>{if(!L.optionsSource)return"";const I=x(L);return h(L.optionsSource,I)},C=L=>{const I=_(L);return I?r.value[I]||[]:[]},N=L=>{const I=_(L);return I&&v.value[I]||false},z=L=>{if(L.type!=="select-remote"||!L.optionsSource)return;const I=x(L);T(L.optionsSource,I)};ye(()=>{for(const L of s.fields)z(L)}),_e(()=>s.modelValue,(L,I)=>{for(const V of s.fields)if(V.type==="select-remote"&&V.dependsOn&&V.optionsSource){const b=L[V.dependsOn],Z=I==null?void 0:I[V.dependsOn];b!==Z&&z(V)}},{deep:true});const p=L=>s.modelValue[L],U=(L,I)=>{const V={...s.modelValue,[L]:I};u("update:modelValue",V)},m=L=>{if(!L.showWhen)return true;const{field:I,value:V}=L.showWhen;return s.modelValue[I]===V},O=L=>{const I=s.modelValue[L];return Array.isArray(I)?I:[]},K=L=>{var I;return L?((I=s.presetsMap)==null?void 0:I[L])||[]:[]};return(L,I)=>{const V=M("el-switch"),b=M("el-option"),Z=M("el-select"),X=M("el-input-number"),de=M("el-input");return l(),n("div",$n,[(l(true),n(F,null,ee(t.fields,k=>{var D;return l(),n(F,{key:k.key},[m(k)?(l(),n("div",wn,[e("div",{class:te(["form-label",{required:k.required}])},$(k.label),3),e("div",Cn,[o(" Boolean 类型 "),k.type==="boolean"?(l(),se(V,{key:0,"model-value":p(k.key),"onUpdate:modelValue":j=>U(k.key,j)},null,8,["model-value","onUpdate:modelValue"])):k.type==="select"?(l(),n(F,{key:1},[o(" Select 类型 "),i(Z,{"model-value":p(k.key),"onUpdate:modelValue":j=>U(k.key,j),placeholder:k.placeholder||"请选择",clearable:t.clearable,style:{width:"100%"}},{default:S(()=>[(l(true),n(F,null,ee(k.options,j=>(l(),se(b,{key:String(j.value),label:j.label,value:j.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)):k.type==="select-remote"?(l(),n(F,{key:2},[o(" Select Remote 类型(远程获取选项) "),i(Z,{"model-value":p(k.key),"onUpdate:modelValue":j=>U(k.key,j),placeholder:k.placeholder||"请选择",clearable:t.clearable,loading:N(k),filterable:"",style:{width:"100%"}},{default:S(()=>[(l(true),n(F,null,ee(C(k),j=>(l(),se(b,{key:String(j.value),label:j.label,value:j.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable","loading"])],64)):k.type==="number"?(l(),n(F,{key:3},[o(" Number 类型 "),i(X,{"model-value":p(k.key),"onUpdate:modelValue":j=>U(k.key,j),placeholder:k.placeholder,controls:true},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):k.type==="textarea"?(l(),n(F,{key:4},[o(" Textarea 类型 "),i(de,{"model-value":p(k.key),"onUpdate:modelValue":j=>U(k.key,j),type:"textarea",rows:4,placeholder:k.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):k.type==="table"&&k.columns?(l(),n(F,{key:5},[o(" Table 类型(数组对象编辑) "),i(kn,{columns:k.columns,"model-value":O(k.key),"onUpdate:modelValue":j=>U(k.key,j),"table-config":k.tableConfig,presets:K((D=k.tableConfig)==null?void 0:D.presetsSource)},null,8,["columns","model-value","onUpdate:modelValue","table-config","presets"])],64)):k.type==="password"?(l(),n(F,{key:6},[o(" Password 类型 "),i(de,{"model-value":p(k.key),"onUpdate:modelValue":j=>U(k.key,j),type:"password","show-password":"",placeholder:k.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(F,{key:7},[o(" Text/String 类型 (默认) "),i(de,{"model-value":p(k.key),"onUpdate:modelValue":j=>U(k.key,j),placeholder:k.placeholder,clearable:t.clearable},null,8,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)),o(" 字段描述 "),k.description?(l(),n("div",Vn,$(k.description),1)):o("v-if",true)])])):o("v-if",true)],64)}),128))])}}}),et=ve(xn,[["__scopeId","data-v-5070280c"]]),Sn={class:"dialog-layout"},In={class:"tab-nav"},On=["onClick"],Tn={key:0,class:"tab-badge"},Un={class:"tab-content"},zn={class:"content-section"},Pn={class:"form-group"},Dn={class:"form-row"},Nn={class:"form-group flex-1"},Fn={class:"form-group"},Ln={class:"switch-wrapper"},En={class:"switch-label"},An={class:"form-group"},Mn={class:"section-divider"},jn={class:"content-section"},Rn={class:"override-hint-bar"},Bn={class:"pipeline-flow"},qn={class:"phase-icon"},Hn={class:"phase-info"},Kn={class:"phase-name"},Jn={class:"phase-desc"},Gn={class:"phase-badge"},Wn={key:0,class:"phase-middlewares"},Zn={class:"mw-card"},Yn={class:"mw-content"},Xn={class:"mw-name"},Qn={class:"mw-desc"},eo={key:2,class:"phase-connector"},to={class:"connector-arrow"},so={class:"content-section"},lo={class:"override-hint-bar"},ao={key:0,class:"plugins-override-list"},no=["onClick"],oo={class:"plugin-info"},io={class:"plugin-name"},ro={key:0,class:"override-badge"},uo={class:"plugin-actions"},co={class:"plugin-config-fields"},vo={key:0,class:"override-field-row"},po={class:"field-label"},mo={class:"field-input"},fo={key:0,class:"field-hint"},go={key:1,class:"empty-hint"},_o={class:"dialog-footer"},yo=oe({__name:"ChannelConfigDialog",props:{modelValue:{type:Boolean},channel:{default:null}},emits:["update:modelValue","saved"],setup(t,{emit:a}){const s=t,u=a,r=G({get:()=>s.modelValue,set:f=>u("update:modelValue",f)}),v=G(()=>{var f;return!!((f=s.channel)!=null&&f.id)}),h=w("basic"),T=w(false),x=w(new Set),_=w([]),C=w({}),N=w([]),z=w([]),p=w({name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}),U=[{id:"basic",label:"基本信息",icon:"file-text"},{id:"middlewares",label:"中间件流程",icon:"git-branch"},{id:"plugins",label:"插件配置",icon:"puzzle"}],m=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],O={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},K=G(()=>p.value.connectorId?C.value[p.value.connectorId]||[]:[]),L=G(()=>{const f=_.value.find(y=>y.id===p.value.connectorId);return(f==null?void 0:f.name)||"连接器"}),I=G(()=>U.map(f=>{let y="";return f.id==="middlewares"&&(y=String(N.value.length)),f.id==="plugins"&&V.value.length>0&&(y=String(V.value.length)),{...f,badge:y}})),V=G(()=>z.value.filter(f=>f.configFields&&f.configFields.length>0)),b=f=>N.value.filter(y=>y.phase===f),Z=(f,y)=>{var B,re,le;return(le=(re=(B=p.value.pluginOverrides)==null?void 0:B[f])==null?void 0:re.middlewares)==null?void 0:le[y]},X=(f,y,B)=>{p.value.pluginOverrides||(p.value.pluginOverrides={}),p.value.pluginOverrides[f]||(p.value.pluginOverrides[f]={}),p.value.pluginOverrides[f].middlewares||(p.value.pluginOverrides[f].middlewares={}),B==null?(delete p.value.pluginOverrides[f].middlewares[y],Object.keys(p.value.pluginOverrides[f].middlewares).length===0&&delete p.value.pluginOverrides[f].middlewares,Object.keys(p.value.pluginOverrides[f]).length===0&&delete p.value.pluginOverrides[f]):p.value.pluginOverrides[f].middlewares[y]=B},de=f=>{const y=Z(f.configGroup||f.name,f.name);return y!==void 0?y?"active override":"override":f.enabled?"active":""},k=(f,y)=>{var B,re;return(re=(B=p.value.pluginOverrides)==null?void 0:B[f])==null?void 0:re[y]},D=(f,y,B)=>{p.value.pluginOverrides||(p.value.pluginOverrides={}),p.value.pluginOverrides[f]||(p.value.pluginOverrides[f]={}),B==null||B===""?(delete p.value.pluginOverrides[f][y],Object.keys(p.value.pluginOverrides[f]).length===0&&delete p.value.pluginOverrides[f]):p.value.pluginOverrides[f][y]=B},j=f=>{var B;const y=(B=p.value.pluginOverrides)==null?void 0:B[f];return y&&Object.keys(y).length>0},P=f=>{p.value.pluginOverrides&&delete p.value.pluginOverrides[f]},g=f=>{x.value.has(f)?x.value.delete(f):x.value.add(f)},d=(f,y)=>{var R,Y;if(!y.showWhen)return true;const{field:B,value:re}=y.showWhen,le=(Y=(R=p.value.pluginOverrides)==null?void 0:R[f.id])==null?void 0:Y[B],ue=f.config[B];return(le!==void 0?le:ue)===re},c=async f=>{if(p.value.connectorConfig={},f&&!C.value[f])try{const y=await Be.fields(f);C.value[f]=y}catch(y){console.error("Failed to load connector fields:",y)}},E=async()=>{var f;if(!p.value.name){Q.error("请输入渠道名称");return}if(!p.value.connectorId){Q.error("请选择连接器");return}T.value=true;try{v.value&&((f=s.channel)!=null&&f.id)?(await ze.update(s.channel.id,p.value),Q.success("保存成功")):(await ze.create(p.value),Q.success("创建成功")),u("saved"),r.value=false}catch(y){Q.error(y instanceof Error?y.message:"操作失败")}finally{T.value=false}},ne=()=>{h.value="basic",x.value.clear()},W=async()=>{try{const[f,y,B]=await Promise.all([Be.list(),He.list(),at.list()]);_.value=f,N.value=y,z.value=B.filter(re=>re.configFields&&re.configFields.length>0||re.middlewares&&re.middlewares.length>0)}catch(f){console.error("Failed to load data:",f)}};return _e(()=>s.modelValue,async f=>{if(f)if(await W(),s.channel){if(p.value=JSON.parse(JSON.stringify(s.channel)),p.value.pluginOverrides||(p.value.pluginOverrides={}),p.value.connectorConfig||(p.value.connectorConfig={}),p.value.connectorId&&!C.value[p.value.connectorId])try{const y=await Be.fields(p.value.connectorId);C.value[p.value.connectorId]=y}catch(y){console.error("Failed to load connector fields:",y)}for(const y of Object.keys(p.value.pluginOverrides))x.value.add(y)}else p.value={name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}}),(f,y)=>{const B=M("k-icon"),re=M("el-input"),le=M("el-option"),ue=M("el-select"),pe=M("el-switch"),R=M("k-button"),Y=M("el-input-number"),ce=M("el-dialog");return l(),se(ce,{modelValue:r.value,"onUpdate:modelValue":y[6]||(y[6]=H=>r.value=H),title:v.value?"编辑渠道":"创建渠道",width:"800px","close-on-click-modal":false,class:"channel-config-dialog",onClosed:ne},{footer:S(()=>[e("div",_o,[i(R,{onClick:y[5]||(y[5]=H=>r.value=false)},{default:S(()=>[...y[24]||(y[24]=[A("取消",-1)])]),_:1}),i(R,{type:"primary",onClick:E,loading:T.value},{default:S(()=>[A($(v.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:S(()=>[e("div",Sn,[o(" 左侧 Tab 导航 "),e("div",In,[(l(true),n(F,null,ee(I.value,H=>(l(),n("div",{key:H.id,class:te(["tab-item",{active:h.value===H.id}]),onClick:ie=>h.value=H.id},[i(B,{name:H.icon},null,8,["name"]),e("span",null,$(H.label),1),H.badge?(l(),n("span",Tn,$(H.badge),1)):o("v-if",true)],10,On))),128))]),o(" 右侧内容区 "),e("div",Un,[o(" 基本信息 "),Oe(e("div",zn,[y[13]||(y[13]=e("div",{class:"section-header"},[e("h4",null,"基本信息"),e("p",null,"设置渠道的名称、连接器和标签")],-1)),e("div",Pn,[y[7]||(y[7]=e("label",{class:"form-label required"},"渠道名称",-1)),i(re,{modelValue:p.value.name,"onUpdate:modelValue":y[0]||(y[0]=H=>p.value.name=H),placeholder:"如 OpenAI DALL-E"},null,8,["modelValue"]),y[8]||(y[8]=e("div",{class:"form-hint"},"用户可见的渠道名称,冲突时会自动添加后缀",-1))]),e("div",Dn,[e("div",Nn,[y[9]||(y[9]=e("label",{class:"form-label required"},"连接器",-1)),i(ue,{modelValue:p.value.connectorId,"onUpdate:modelValue":y[1]||(y[1]=H=>p.value.connectorId=H),placeholder:"选择连接器",onChange:c,style:{width:"100%"}},{default:S(()=>[(l(true),n(F,null,ee(_.value,H=>(l(),se(le,{key:H.id,label:H.name,value:H.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Fn,[y[10]||(y[10]=e("label",{class:"form-label"},"启用状态",-1)),e("div",Ln,[i(pe,{modelValue:p.value.enabled,"onUpdate:modelValue":y[2]||(y[2]=H=>p.value.enabled=H)},null,8,["modelValue"]),e("span",En,$(p.value.enabled?"启用":"禁用"),1)])])]),e("div",An,[y[11]||(y[11]=e("label",{class:"form-label"},"标签",-1)),i(At,{modelValue:p.value.tags,"onUpdate:modelValue":y[3]||(y[3]=H=>p.value.tags=H),placeholder:"输入标签后按回车..."},null,8,["modelValue"]),y[12]||(y[12]=e("div",{class:"form-hint"},"用于分类和筛选渠道",-1))]),o(" 连接器配置(内嵌) "),K.value.length>0?(l(),n(F,{key:0},[e("div",Mn,[e("span",null,$(L.value)+" 配置",1)]),i(et,{fields:K.value,modelValue:p.value.connectorConfig,"onUpdate:modelValue":y[4]||(y[4]=H=>p.value.connectorConfig=H)},null,8,["fields","modelValue"])],64)):o("v-if",true)],512),[[Te,h.value==="basic"]]),o(" 中间件流程 "),Oe(e("div",jn,[y[18]||(y[18]=e("div",{class:"section-header"},[e("h4",null,"中间件流程"),e("p",null,"控制此渠道的中间件启用状态")],-1)),e("div",Rn,[i(B,{name:"info-circle"}),y[14]||(y[14]=e("span",null,"留空表示跟随全局配置",-1))]),e("div",Bn,[(l(),n(F,null,ee(m,(H,ie)=>e("div",{key:H.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:te(["phase-header",H.colorClass])},[e("div",qn,[i(B,{name:H.icon},null,8,["name"])]),e("div",Hn,[e("span",Kn,$(H.label),1),e("span",Jn,$(H.description),1)]),e("span",Gn,$(b(H.id).length),1)],2),o(" 中间件列表 "),b(H.id).length>0?(l(),n("div",Wn,[(l(true),n(F,null,ee(b(H.id),J=>(l(),n("div",{key:J.name,class:te(["mw-item",{"has-override":Z(J.configGroup||J.name,J.name)!==void 0}])},[e("div",Zn,[e("div",{class:te(["mw-status",de(J)])},null,2),e("div",Yn,[e("span",Xn,$(J.displayName),1),e("span",Qn,$(J.description||O[J.category]||J.category),1)]),i(ue,{"model-value":Z(J.configGroup||J.name,J.name),"onUpdate:modelValue":he=>X(J.configGroup||J.name,J.name,he),placeholder:J.enabled?"全局: 启用":"全局: 禁用",clearable:"",size:"small",class:"mw-switch"},{default:S(()=>[i(le,{label:"启用",value:true}),i(le,{label:"禁用",value:false})]),_:1},8,["model-value","onUpdate:modelValue","placeholder"])])],2))),128))])):(l(),n(F,{key:1},[o(" 空状态 "),y[15]||(y[15]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),ie<m.length-1?(l(),n("div",eo,[y[16]||(y[16]=e("div",{class:"connector-line"},null,-1)),e("div",to,[i(B,{name:"chevron-down"})]),y[17]||(y[17]=e("div",{class:"connector-line"},null,-1))])):o("v-if",true)])),64))]),o(" 底部说明 "),y[19]||(y[19]=e("div",{class:"pipeline-footer"},[e("div",{class:"footer-item"},[e("span",{class:"dot active"}),e("span",null,"启用 - 中间件将在请求中执行")]),e("div",{class:"footer-item"},[e("span",{class:"dot"}),e("span",null,"禁用 - 中间件将被跳过")]),e("div",{class:"footer-item"},[e("span",{class:"dot override"}),e("span",null,"已覆盖 - 与全局配置不同")])],-1))],512),[[Te,h.value==="middlewares"]]),o(" 插件配置 "),Oe(e("div",so,[y[23]||(y[23]=e("div",{class:"section-header"},[e("h4",null,"插件配置覆盖"),e("p",null,"为此渠道单独配置插件参数")],-1)),e("div",lo,[i(B,{name:"info-circle"}),y[20]||(y[20]=e("span",null,"留空使用全局配置,填写后将覆盖全局设置",-1))]),V.value.length>0?(l(),n("div",ao,[(l(true),n(F,null,ee(V.value,H=>(l(),n("div",{key:H.id,class:te(["plugin-override-card",{expanded:x.value.has(H.id)}])},[e("div",{class:"plugin-header",onClick:ie=>g(H.id)},[e("div",oo,[e("span",io,$(H.name),1),j(H.id)?(l(),n("span",ro,"已覆盖")):o("v-if",true)]),e("div",uo,[j(H.id)?(l(),se(R,{key:0,size:"mini",onClick:fe(ie=>P(H.id),["stop"])},{default:S(()=>[...y[21]||(y[21]=[A(" 清除 ",-1)])]),_:1},8,["onClick"])):o("v-if",true),i(B,{name:x.value.has(H.id)?"chevron-up":"chevron-down"},null,8,["name"])])],8,no),Oe(e("div",co,[(l(true),n(F,null,ee(H.configFields,ie=>(l(),n(F,{key:ie.key},[d(H,ie)?(l(),n("div",vo,[e("label",po,$(ie.label),1),e("div",mo,[o(" Boolean 类型 "),ie.type==="boolean"?(l(),se(ue,{key:0,"model-value":k(H.id,ie.key),"onUpdate:modelValue":J=>D(H.id,ie.key,J),placeholder:"使用全局配置",clearable:""},{default:S(()=>[i(le,{label:"是",value:true}),i(le,{label:"否",value:false})]),_:1},8,["model-value","onUpdate:modelValue"])):ie.type==="select"?(l(),n(F,{key:1},[o(" Select 类型 "),i(ue,{"model-value":k(H.id,ie.key),"onUpdate:modelValue":J=>D(H.id,ie.key,J),placeholder:`全局: ${H.config[ie.key]??"未设置"}`,clearable:""},{default:S(()=>[(l(true),n(F,null,ee(ie.options,J=>(l(),se(le,{key:String(J.value),label:J.label,value:J.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])],64)):ie.type==="number"?(l(),n(F,{key:2},[o(" Number 类型 "),i(Y,{"model-value":k(H.id,ie.key),"onUpdate:modelValue":J=>D(H.id,ie.key,J),placeholder:`全局: ${H.config[ie.key]??""}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(F,{key:3},[o(" Text/String 类型 (默认) "),i(re,{"model-value":k(H.id,ie.key),"onUpdate:modelValue":J=>D(H.id,ie.key,J),placeholder:`全局: ${H.config[ie.key]??"未设置"}`,clearable:""},null,8,["model-value","onUpdate:modelValue","placeholder"])],64))]),ie.description?(l(),n("div",fo,$(ie.description),1)):o("v-if",true)])):o("v-if",true)],64))),128))],512),[[Te,x.value.has(H.id)]])],2))),128))])):(l(),n("div",go,[i(B,{name:"apps"}),y[22]||(y[22]=e("span",null,"暂无可配置的插件",-1))]))],512),[[Te,h.value==="plugins"]])])])]),_:1},8,["modelValue","title"])}}}),ho=ve(yo,[["__scopeId","data-v-74bfe0c7"]]),bo={key:0},ko=oe({__name:"LoadingState",props:{text:{default:"加载中..."},icon:{default:"sync"},size:{default:"default"}},setup(t){const a=t,s=G(()=>`size-${a.size}`);return(u,r)=>{const v=M("k-icon");return l(),n("div",{class:te(["loading-state",s.value])},[i(v,{name:t.icon,class:"loading-icon"},null,8,["name"]),t.text?(l(),n("span",bo,$(t.text),1)):o("v-if",true)],2)}}}),$o=ve(ko,[["__scopeId","data-v-99cf565d"]]),wo={class:"ml-view-container"},Co={class:"ml-view-header"},Vo={class:"ml-header-left"},xo={class:"ml-header-right"},So={class:"ml-view-content"},Io={class:"ml-grid"},Oo=["onClick"],To={class:"card-header"},Uo={class:"header-main"},zo={class:"channel-name"},Po={class:"header-meta"},Do={class:"connector-badge"},No={key:0,class:"cost-badge"},Fo={class:"card-body"},Lo={key:0,class:"field-list"},Eo={class:"field-label"},Ao={class:"field-value"},Mo={key:1,class:"tags-list"},jo={class:"ml-table-container"},Ro={class:"ml-table"},Bo=["onClick"],qo={class:"col-name"},Ho={class:"name-text"},Ko={class:"col-connector"},Jo={class:"connector-badge"},Go={class:"col-tags"},Wo={class:"tags-wrapper"},Zo={key:0,class:"mini-tag more"},Yo={class:"col-cost"},Xo={key:0,class:"cost-value"},Qo={class:"action-btns"},ei=oe({__name:"ChannelsView",setup(t){const a=["text2img","img2img","NSFW"],s=w(false),u=w("card"),r=w([]),v=w([]),h=w([]),T=w({}),x=w(false),_=w(null),C=w([]),N=G(()=>{const k=new Set;return r.value.forEach(D=>{(D.tags||[]).forEach(j=>k.add(j))}),Array.from(k).sort()}),z=G(()=>C.value.length===0?r.value:r.value.filter(k=>C.value.every(D=>(k.tags||[]).includes(D)))),p=k=>{const D=v.value.find(j=>j.id===k);return D?D.name:k},U=k=>{var j;const D=v.value.find(P=>P.id===k.connectorId);return(j=D==null?void 0:D.cardFields)!=null&&j.length?D.cardFields.map(P=>{const g=D.fields.find(d=>d.key===P.key);return{key:P.key,label:P.label||(g==null?void 0:g.label)||P.key,format:P.format||"text"}}):[]},m=(k,D)=>{var P,g,d,c,E;const j=D.configGroup;switch(D.source){case"channel":if(j){const ne=(g=(P=k.pluginOverrides)==null?void 0:P[j])==null?void 0:g[D.key];if(ne!==void 0)return ne}return k[D.key];case"connectorConfig":return(d=k.connectorConfig)==null?void 0:d[D.key];case"pluginOverride":return j?(E=(c=k.pluginOverrides)==null?void 0:c[j])==null?void 0:E[D.key]:void 0;default:return}},O=(k,D)=>{var d,c,E;const j=D.configGroup;if(!j)return D.suffix||"";const P=(c=(d=k.pluginOverrides)==null?void 0:d[j])==null?void 0:c.currencyLabel;if(P)return` ${P}${D.suffix||""}`;const g=(E=T.value[j])==null?void 0:E.currencyLabel;return g?` ${g}${D.suffix||""}`:` 积分${D.suffix||""}`},K=(k,D,j)=>{if(k==null||k==="")return"-";let P;switch(D){case"password-mask":P="••••••";break;case"boolean":P=k?"是":"否";break;case"number":P=String(k);break;case"size":P=String(k);break;case"currency":P=k===0?"免费":String(k);break;default:P=String(k)}return j?`${P} ${j}`:P},L=async()=>{s.value=true;try{const[k,D,j]=await Promise.all([ze.list(),Be.list(),He.cardFields()]);r.value=k,v.value=D,h.value=j.fields,T.value=j.globalConfigs}catch{Q.error("加载数据失败")}finally{s.value=false}},I=()=>{_.value=null,x.value=true},V=k=>{_.value=k,x.value=true},b=()=>{L()},Z=async k=>{if(confirm(`确定要删除渠道 "${k.name}" 吗?`))try{await ze.delete(k.id),Q.success("删除成功"),L()}catch{Q.error("删除失败")}},X=async k=>{try{await ze.toggle(k.id,k.enabled)}catch{k.enabled=!k.enabled,Q.error("操作失败")}},de=k=>{const D=JSON.parse(JSON.stringify(k));delete D.id,D.name=`${k.name} (副本)`,_.value=D,x.value=true};return ye(()=>{L()}),(k,D)=>{const j=M("k-icon"),P=M("k-button"),g=M("el-switch");return l(),n("div",wo,[e("div",Co,[e("div",Vo,[i(P,{solid:"",type:"primary",onClick:I},{icon:S(()=>[i(j,{name:"add"})]),default:S(()=>[D[7]||(D[7]=A(" 新建渠道 ",-1))]),_:1}),i(ut,{modelValue:C.value,"onUpdate:modelValue":D[0]||(D[0]=d=>C.value=d),"all-tags":N.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",xo,[i(Et,{modelValue:u.value,"onUpdate:modelValue":D[1]||(D[1]=d=>u.value=d)},null,8,["modelValue"])])]),e("div",So,[s.value?(l(),se($o,{key:0})):u.value==="card"?(l(),n(F,{key:1},[o(" 卡片视图 "),e("div",Io,[(l(true),n(F,null,ee(z.value,d=>(l(),n("div",{key:d.id},[e("div",{class:"ml-card ml-card--clickable",onClick:c=>V(d)},[e("div",To,[e("div",Uo,[e("div",zo,$(d.name),1),i(g,{modelValue:d.enabled,"onUpdate:modelValue":c=>d.enabled=c,size:"small",onChange:c=>X(d),onClick:D[2]||(D[2]=fe(()=>{},["stop"]))},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("div",Po,[e("span",Do,[i(j,{name:"link"}),A(" "+$(p(d.connectorId)),1)]),o(" 中间件字段(如费用)显示在标题旁 "),(l(true),n(F,null,ee(h.value,c=>(l(),n(F,{key:`mw-${c.key}`},[c.key==="cost"?(l(),n("span",No,$(K(m(d,c),c.format,O(d,c))),1)):o("v-if",true)],64))),128))])]),e("div",Fo,[o(" 配置字段列表 "),U(d).length?(l(),n("div",Lo,[(l(true),n(F,null,ee(U(d),c=>(l(),n("div",{key:c.key,class:"field-item"},[e("span",Eo,$(c.label),1),e("span",Ao,$(K(d.connectorConfig[c.key],c.format)),1)]))),128))])):o("v-if",true),o(" 标签 "),d.tags&&d.tags.length?(l(),n("div",Mo,[(l(true),n(F,null,ee(d.tags,c=>(l(),n("span",{key:c,class:"tag-pill"},$(c),1))),128))])):o("v-if",true)]),e("div",{class:"card-footer",onClick:D[3]||(D[3]=fe(()=>{},["stop"]))},[i(P,{size:"mini",class:"ml-btn-outline-primary",onClick:c=>de(d)},{icon:S(()=>[i(j,{name:"copy"})]),default:S(()=>[D[8]||(D[8]=A(" 复制 ",-1))]),_:1},8,["onClick"]),D[10]||(D[10]=e("div",{class:"spacer"},null,-1)),i(P,{size:"mini",class:"ml-btn-outline-danger",onClick:c=>Z(d)},{icon:S(()=>[i(j,{name:"delete"})]),default:S(()=>[D[9]||(D[9]=A(" 删除 ",-1))]),_:1},8,["onClick"])])],8,Oo)]))),128))])],2112)):(l(),n(F,{key:2},[o(" 列表视图 "),e("div",jo,[e("table",Ro,[D[13]||(D[13]=e("thead",null,[e("tr",null,[e("th",{class:"col-name"},"名称"),e("th",{class:"col-connector"},"连接器"),e("th",{class:"col-tags"},"标签"),e("th",{class:"col-cost"},"费用"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(l(true),n(F,null,ee(z.value,d=>(l(),n("tr",{key:d.id,onClick:c=>V(d)},[e("td",qo,[e("span",Ho,$(d.name),1)]),e("td",Ko,[e("span",Jo,$(p(d.connectorId)),1)]),e("td",Go,[e("div",Wo,[(l(true),n(F,null,ee((d.tags||[]).slice(0,2),c=>(l(),n("span",{key:c,class:"mini-tag"},$(c),1))),128)),d.tags&&d.tags.length>2?(l(),n("span",Zo,"+"+$(d.tags.length-2),1)):o("v-if",true)])]),e("td",Yo,[(l(true),n(F,null,ee(h.value,c=>(l(),n(F,{key:`mw-${c.key}`},[c.key==="cost"?(l(),n("span",Xo,$(K(m(d,c),c.format,O(d,c))),1)):o("v-if",true)],64))),128))]),e("td",{class:"col-status",onClick:D[4]||(D[4]=fe(()=>{},["stop"]))},[i(g,{modelValue:d.enabled,"onUpdate:modelValue":c=>d.enabled=c,size:"small",onChange:c=>X(d)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:D[5]||(D[5]=fe(()=>{},["stop"]))},[e("div",Qo,[i(P,{size:"mini",class:"ml-btn-outline-primary",onClick:c=>de(d)},{icon:S(()=>[i(j,{name:"copy"})]),default:S(()=>[D[11]||(D[11]=A(" 复制 ",-1))]),_:1},8,["onClick"]),i(P,{size:"mini",class:"ml-btn-outline-danger",onClick:c=>Z(d)},{icon:S(()=>[i(j,{name:"delete"})]),default:S(()=>[D[12]||(D[12]=A(" 删除 ",-1))]),_:1},8,["onClick"])])])],8,Bo))),128))])])])],2112))]),o(" 编辑/创建对话框 "),i(ho,{modelValue:x.value,"onUpdate:modelValue":D[6]||(D[6]=d=>x.value=d),channel:_.value,onSaved:b},null,8,["modelValue","channel"])])}}}),ti=ve(ei,[["__scopeId","data-v-67a4b49d"]]),si={class:"json-editor"},li={key:0,class:"error-msg"},ai=oe({__name:"JsonEditor",props:{modelValue:{},rows:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,r=w(""),v=w("");_e(()=>s.modelValue,T=>{try{r.value=JSON.stringify(T,null,2)}catch{r.value=""}},{immediate:true});const h=()=>{try{const T=JSON.parse(r.value);v.value="",u("update:modelValue",T)}catch{v.value="Invalid JSON format"}};return(T,x)=>{const _=M("el-input");return l(),n("div",si,[i(_,{modelValue:r.value,"onUpdate:modelValue":x[0]||(x[0]=C=>r.value=C),type:"textarea",rows:t.rows,class:"code-input",onBlur:h},null,8,["modelValue","rows"]),v.value?(l(),n("div",li,$(v.value),1)):o("v-if",true)])}}}),ni=ve(ai,[["__scopeId","data-v-4d47b7db"]]),oi={class:"image-upload"},ii={key:0,class:"image-list"},ri={class:"image-preview"},di=["src","alt"],ui={class:"image-overlay"},ci={class:"image-name"},vi={class:"upload-content"},pi={key:1,class:"upload-loading"},mi=oe({__name:"ImageUpload",props:{modelValue:{},maxCount:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,r=w(),v=w(false),h=w([]),T=async()=>{var m;const U=[];for(const O of s.modelValue)O&&U.push({url:O,filename:((m=O.split("/").pop())==null?void 0:m.split("?")[0])||"image",mime:"image/png",previewUrl:O});h.value=U};_e(()=>s.modelValue,()=>{T()},{immediate:true});const x=()=>{var U;(U=r.value)==null||U.click()},_=async U=>{const m=U.target;!m.files||m.files.length===0||(await N(Array.from(m.files)),m.value="")},C=async U=>{var O;const m=(O=U.dataTransfer)==null?void 0:O.files;!m||m.length===0||await N(Array.from(m).filter(K=>K.type.startsWith("image/")))},N=async U=>{if(U.length===0)return;const m=s.maxCount||10;h.value.length+U.length>m&&(Q.warning(`最多上传 ${m} 张图片`),U=U.slice(0,m-h.value.length)),v.value=true;try{for(const O of U){const K=await z(O),L=await bs.upload(K,O.type,O.name);if(!L.url){Q.error("缓存服务未配置 selfUrl,无法获取图片 URL");continue}h.value.push({url:L.url,filename:L.filename,mime:L.mime,previewUrl:L.url})}u("update:modelValue",h.value.map(O=>O.url))}catch(O){Q.error("上传失败"),console.error(O)}finally{v.value=false}},z=U=>new Promise((m,O)=>{const K=new FileReader;K.onload=()=>{const I=K.result.split(",")[1];m(I)},K.onerror=O,K.readAsDataURL(U)}),p=U=>{h.value.splice(U,1),u("update:modelValue",h.value.map(m=>m.url))};return ye(()=>{T()}),(U,m)=>{const O=M("k-icon"),K=M("k-button");return l(),n("div",oi,[o(" 已上传的图片列表 "),h.value.length>0?(l(),n("div",ii,[(l(true),n(F,null,ee(h.value,(L,I)=>(l(),n("div",{key:L.url||I,class:"image-item"},[e("div",ri,[e("img",{src:L.previewUrl,alt:L.filename},null,8,di),e("div",ui,[i(K,{size:"mini",class:"remove-btn",onClick:V=>p(I)},{icon:S(()=>[i(O,{name:"delete"})]),_:1},8,["onClick"])])]),e("div",ci,$(L.filename),1)]))),128))])):o("v-if",true),o(" 上传按钮 "),e("div",{class:"upload-area",onClick:x,onDragover:m[0]||(m[0]=fe(()=>{},["prevent"])),onDrop:fe(C,["prevent"])},[e("input",{ref_key:"fileInput",ref:r,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:_},null,544),e("div",vi,[i(O,{name:"add",class:"upload-icon"}),m[1]||(m[1]=e("span",{class:"upload-text"},"点击或拖拽上传图片",-1))])],32),o(" 加载状态 "),v.value?(l(),n("div",pi,[i(O,{name:"sync",class:"loading-icon"}),m[2]||(m[2]=A(" 上传中... ",-1))])):o("v-if",true)])}}}),Pt=ve(mi,[["__scopeId","data-v-47f2485e"]]),fi={class:"ml-view-container"},gi={class:"ml-view-header"},_i={class:"ml-header-left"},yi={class:"ml-header-right"},hi={class:"ml-view-content"},bi={key:0,class:"loading-state"},ki={class:"ml-masonry"},$i=["onClick"],wi={key:0,class:"card-thumbnail"},Ci=["src","alt"],Vi={class:"thumbnail-overlay"},xi={key:0,class:"ref-count"},Si={key:1,class:"card-thumbnail placeholder"},Ii={class:"card-content"},Oi={class:"card-title"},Ti={key:0,class:"card-tags"},Ui={key:0,class:"mini-tag more"},zi={class:"ml-table-container"},Pi={class:"ml-table"},Di=["onClick"],Ni={class:"col-thumb"},Fi={class:"thumb-wrapper"},Li=["src","alt"],Ei={key:1,class:"thumb-placeholder"},Ai={class:"col-name"},Mi={class:"name-text"},ji={class:"col-template"},Ri={class:"template-preview"},Bi={class:"col-refs"},qi={key:0,class:"ref-badge"},Hi={key:1,class:"no-data"},Ki={class:"col-source"},Ji={class:"action-btns"},Gi={class:"dialog-footer"},Wi=oe({__name:"PresetsView",setup(t){const a=["本地","远程","text2img","img2img","NSFW"],s=w(false),u=w([]),r=w(false),v=w(false),h=w([]),T=w("card"),x=G(()=>{const V=new Set;return u.value.forEach(b=>{(b.tags||[]).forEach(Z=>V.add(Z))}),Array.from(V).sort()}),_=w({name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"}),C=w([]);_e(()=>_.value.thumbnail,V=>{C.value=V?[V]:[]},{immediate:true}),_e(C,V=>{_.value.thumbnail=V.length>0?V[0]:""});const N=G(()=>h.value.length===0?u.value:u.value.filter(V=>h.value.every(b=>b==="本地"?V.source==="user":b==="远程"?V.source==="api":(V.tags||[]).includes(b)))),z=async()=>{s.value=true;try{u.value=await Ie.list()}catch{Q.error("加载数据失败")}finally{s.value=false}},p=()=>{v.value=false,_.value={name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"},r.value=true},U=V=>{v.value=true,_.value=JSON.parse(JSON.stringify(V)),r.value=true},m=V=>{v.value=false;const b=JSON.parse(JSON.stringify(V));delete b.id,b.name=`${V.name} (副本)`,b.source="user",_.value=b,r.value=true},O=async V=>{try{await Ie.toggle(V.id,V.enabled)}catch{V.enabled=!V.enabled,Q.error("操作失败")}},K=(V,b=50)=>{if(!V)return"-";const Z=V.replace(/\s+/g," ").trim();return Z.length<=b?Z:Z.slice(0,b)+"..."},L=async()=>{if(!_.value.name||!_.value.promptTemplate){Q.warning("请填写必要信息");return}try{v.value&&_.value.id?(await Ie.update(_.value.id,_.value),Q.success("更新成功")):(await Ie.create(_.value),Q.success("创建成功")),r.value=false,z()}catch{Q.error("操作失败")}},I=async V=>{if(confirm(`确定要删除预设 "${V.name}" 吗?`))try{await Ie.delete(V.id),Q.success("删除成功"),z()}catch{Q.error("删除失败")}};return ye(()=>{z()}),(V,b)=>{const Z=M("k-icon"),X=M("k-button"),de=M("el-switch"),k=M("el-input"),D=M("el-form-item"),j=M("el-divider"),P=M("el-form"),g=M("el-dialog");return l(),n("div",fi,[e("div",gi,[e("div",_i,[i(X,{solid:"",type:"primary",onClick:p},{icon:S(()=>[i(Z,{name:"add"})]),default:S(()=>[b[14]||(b[14]=A(" 新建预设 ",-1))]),_:1}),i(ut,{modelValue:h.value,"onUpdate:modelValue":b[0]||(b[0]=d=>h.value=d),"all-tags":x.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",yi,[i(Et,{modelValue:T.value,"onUpdate:modelValue":b[1]||(b[1]=d=>T.value=d)},null,8,["modelValue"])])]),e("div",hi,[s.value?(l(),n("div",bi,[i(Z,{name:"sync",class:"ml-spin"}),b[15]||(b[15]=A(" 加载中... ",-1))])):T.value==="card"?(l(),n(F,{key:1},[o(" 卡片视图 (瀑布流) "),e("div",ki,[(l(true),n(F,null,ee(N.value,d=>{var c,E;return l(),n("div",{key:d.id,class:"ml-masonry-item"},[e("div",{class:"preset-card",onClick:ne=>U(d)},[o(" 缩略图 "),d.thumbnail?(l(),n("div",wi,[e("img",{src:d.thumbnail,alt:d.name,loading:"lazy"},null,8,Ci),e("div",Vi,[(c=d.referenceImages)!=null&&c.length?(l(),n("span",xi,[i(Z,{name:"image"}),A(" "+$(d.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",Si,[i(Z,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",Ii,[e("div",Oi,$(d.name),1),(E=d.tags)!=null&&E.length?(l(),n("div",Ti,[(l(true),n(F,null,ee(d.tags.slice(0,4),ne=>(l(),n("span",{key:ne,class:"mini-tag"},$(ne),1))),128)),d.tags.length>4?(l(),n("span",Ui,"+"+$(d.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮 "),e("div",{class:"card-actions",onClick:b[2]||(b[2]=fe(()=>{},["stop"]))},[i(de,{modelValue:d.enabled,"onUpdate:modelValue":ne=>d.enabled=ne,size:"small",onChange:ne=>O(d)},null,8,["modelValue","onUpdate:modelValue","onChange"]),i(X,{size:"mini",class:"ml-btn-outline-primary",onClick:ne=>m(d)},{icon:S(()=>[i(Z,{name:"copy"})]),default:S(()=>[b[16]||(b[16]=A(" 复制 ",-1))]),_:1},8,["onClick"]),d.source==="user"?(l(),se(X,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:ne=>I(d)},{icon:S(()=>[i(Z,{name:"delete"})]),default:S(()=>[b[17]||(b[17]=A(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)]),o(" 来源标记 "),e("div",{class:te(["source-indicator",d.source])},$(d.source==="api"?"远程":"本地"),3)],8,$i)])}),128))])],2112)):(l(),n(F,{key:2},[o(" 列表视图 "),e("div",zi,[e("table",Pi,[b[20]||(b[20]=e("thead",null,[e("tr",null,[e("th",{class:"col-thumb"},"缩略图"),e("th",{class:"col-name"},"名称"),e("th",{class:"col-template"},"Prompt 模板"),e("th",{class:"col-refs"},"参考图"),e("th",{class:"col-source"},"来源"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(l(true),n(F,null,ee(N.value,d=>{var c;return l(),n("tr",{key:d.id,onClick:E=>U(d)},[e("td",Ni,[e("div",Fi,[d.thumbnail?(l(),n("img",{key:0,src:d.thumbnail,alt:d.name},null,8,Li)):(l(),n("div",Ei,[i(Z,{name:"image"})]))])]),e("td",Ai,[e("span",Mi,$(d.name),1)]),e("td",ji,[e("span",Ri,$(K(d.promptTemplate)),1)]),e("td",Bi,[(c=d.referenceImages)!=null&&c.length?(l(),n("span",qi,[i(Z,{name:"image"}),A(" "+$(d.referenceImages.length),1)])):(l(),n("span",Hi,"-"))]),e("td",Ki,[e("span",{class:te(["source-badge",d.source])},$(d.source==="api"?"远程":"本地"),3)]),e("td",{class:"col-status",onClick:b[3]||(b[3]=fe(()=>{},["stop"]))},[i(de,{modelValue:d.enabled,"onUpdate:modelValue":E=>d.enabled=E,size:"small",onChange:E=>O(d)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:b[4]||(b[4]=fe(()=>{},["stop"]))},[e("div",Ji,[i(X,{size:"mini",class:"ml-btn-outline-primary",onClick:E=>m(d)},{icon:S(()=>[i(Z,{name:"copy"})]),default:S(()=>[b[18]||(b[18]=A(" 复制 ",-1))]),_:1},8,["onClick"]),d.source==="user"?(l(),se(X,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:E=>I(d)},{icon:S(()=>[i(Z,{name:"delete"})]),default:S(()=>[b[19]||(b[19]=A(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)])])],8,Di)}),128))])])])],2112))]),o(" 编辑/创建对话框 "),i(g,{modelValue:r.value,"onUpdate:modelValue":b[13]||(b[13]=d=>r.value=d),title:v.value?"编辑预设":"创建预设",width:"600px","close-on-click-modal":false},{footer:S(()=>[e("span",Gi,[i(X,{onClick:b[12]||(b[12]=d=>r.value=false)},{default:S(()=>[...b[27]||(b[27]=[A("取消",-1)])]),_:1}),i(X,{type:"primary",onClick:L},{default:S(()=>[...b[28]||(b[28]=[A("保存",-1)])]),_:1})])]),default:S(()=>[r.value?(l(),se(P,{key:0,ref:"formRef",model:_.value,"label-width":"100px"},{default:S(()=>[i(D,{label:"名称",required:""},{default:S(()=>[i(k,{modelValue:_.value.name,"onUpdate:modelValue":b[5]||(b[5]=d=>_.value.name=d),disabled:v.value&&_.value.source==="api",placeholder:"如 二次元少女"},null,8,["modelValue","disabled"]),b[21]||(b[21]=e("div",{class:"form-tip"},"用于指令调用和展示,冲突时会自动添加后缀",-1))]),_:1}),i(D,{label:"Prompt 模板",required:""},{default:S(()=>[i(k,{modelValue:_.value.promptTemplate,"onUpdate:modelValue":b[6]||(b[6]=d=>_.value.promptTemplate=d),type:"textarea",rows:4,placeholder:"输入提示词模板,支持变量如 {prompt}"},null,8,["modelValue"]),b[22]||(b[22]=e("div",{class:"form-tip"},"默认将用户输入附加在最后,也可使用 {prompt} 指定位置",-1))]),_:1}),_.value.source==="user"?(l(),se(D,{key:0,label:"缩略图"},{default:S(()=>[i(Pt,{modelValue:C.value,"onUpdate:modelValue":b[7]||(b[7]=d=>C.value=d),"max-count":1},null,8,["modelValue"]),b[23]||(b[23]=e("div",{class:"form-tip"},"用于在卡片视图中展示预设的预览图",-1))]),_:1})):o("v-if",true),i(D,{label:"参考图"},{default:S(()=>[i(Pt,{modelValue:_.value.referenceImages,"onUpdate:modelValue":b[8]||(b[8]=d=>_.value.referenceImages=d),"max-count":5},null,8,["modelValue"]),b[24]||(b[24]=e("div",{class:"form-tip"},"生成时会自动附加这些参考图片",-1))]),_:1}),i(j,{"content-position":"left"},{default:S(()=>[...b[25]||(b[25]=[A("高级设置",-1)])]),_:1}),i(D,{label:"标签"},{default:S(()=>[i(At,{modelValue:_.value.tags,"onUpdate:modelValue":b[9]||(b[9]=d=>_.value.tags=d),placeholder:"输入标签..."},null,8,["modelValue"]),b[26]||(b[26]=e("div",{class:"form-tip"},"与渠道标签匹配时会自动关联",-1))]),_:1}),i(D,{label:"参数覆盖"},{default:S(()=>[i(ni,{modelValue:_.value.parameterOverrides,"onUpdate:modelValue":b[10]||(b[10]=d=>_.value.parameterOverrides=d),rows:3},null,8,["modelValue"])]),_:1}),i(D,{label:"启用状态"},{default:S(()=>[i(de,{modelValue:_.value.enabled,"onUpdate:modelValue":b[11]||(b[11]=d=>_.value.enabled=d)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])):o("v-if",true)]),_:1},8,["modelValue","title"])])}}}),Zi=ve(Wi,[["__scopeId","data-v-8eaa50b4"]]),Yi=oe({__name:"StatusBadge",props:{status:{}},setup(t){const a=t,s=G(()=>{switch(a.status){case"pending":return"等待中";case"processing":return"处理中";case"success":return"成功";case"failed":return"失败";default:return a.status}});return(u,r)=>(l(),n("span",{class:te(["status-badge",t.status])},$(s.value),3))}}),Dt=ve(Yi,[["__scopeId","data-v-0bc21896"]]),Xi={class:"lightbox-container"},Qi={class:"lightbox-content"},er=["src"],tr={key:2,class:"image-counter"},sr={key:0,class:"lightbox-sidebar"},lr={class:"sidebar-header"},ar={class:"sidebar-body"},nr={class:"info-block"},or={class:"block-header"},ir={key:0,class:"info-block"},rr={class:"info-value"},dr={key:1,class:"info-block"},ur={class:"info-value"},cr={class:"sidebar-footer"},vr=oe({__name:"ImageLightbox",props:{visible:{type:Boolean},images:{},initialIndex:{default:0},prompt:{},createdAt:{},duration:{},showSidebar:{type:Boolean,default:true}},emits:["update:visible","close"],setup(t,{emit:a}){const s=t,u=a,r=w(s.initialIndex),v=G(()=>s.images[r.value]||"");_e(()=>s.visible,m=>{m?(r.value=s.initialIndex,document.body.style.overflow="hidden"):document.body.style.overflow=""}),_e(()=>s.initialIndex,m=>{r.value=m});const h=()=>{u("update:visible",false),u("close")},T=()=>{r.value=(r.value-1+s.images.length)%s.images.length},x=()=>{r.value=(r.value+1)%s.images.length},_=()=>{s.prompt&&(navigator.clipboard.writeText(s.prompt),Q.success("已复制提示词"))},C=()=>{window.open(v.value,"_blank")},N=()=>{const m=document.createElement("a");m.href=v.value,m.download=`image-${Date.now()}.png`,m.click()},z=m=>(typeof m=="string"?new Date(m):m).toLocaleString(),p=m=>m<1e3?`${m}ms`:`${(m/1e3).toFixed(1)}s`,U=m=>{s.visible&&(m.key==="Escape"?h():m.key==="ArrowLeft"?T():m.key==="ArrowRight"&&x())};return ye(()=>{window.addEventListener("keydown",U)}),Ye(()=>{window.removeEventListener("keydown",U),document.body.style.overflow=""}),(m,O)=>{const K=M("k-icon");return l(),se(us,{to:"body"},[i(Ze,{name:"lightbox-fade"},{default:S(()=>[t.visible?(l(),n("div",{key:0,class:"lightbox-overlay",onClick:fe(h,["self"])},[e("div",Xi,[e("div",Qi,[o(" 左侧图片区域 "),e("div",{class:"lightbox-image-area",onClick:fe(h,["self"])},[o(" 关闭按钮 "),e("button",{class:"close-btn",onClick:h,title:"关闭 (Esc)"},[i(K,{name:"times"})]),o(" 多图时的导航 "),t.images.length>1?(l(),n("button",{key:0,class:"nav-btn prev",onClick:fe(T,["stop"]),title:"上一张"},[i(K,{name:"chevron-left"})])):o("v-if",true),e("img",{src:v.value,class:"lightbox-image",alt:"Preview"},null,8,er),t.images.length>1?(l(),n("button",{key:1,class:"nav-btn next",onClick:fe(x,["stop"]),title:"下一张"},[i(K,{name:"chevron-right"})])):o("v-if",true),o(" 图片计数器 "),t.images.length>1?(l(),n("div",tr,$(r.value+1)+" / "+$(t.images.length),1)):o("v-if",true)]),o(" 右侧信息栏 "),t.showSidebar?(l(),n("div",sr,[e("div",lr,[O[0]||(O[0]=e("div",{class:"info-title"},"图片详情",-1)),e("button",{class:"header-close-btn",onClick:h,title:"关闭"},[i(K,{name:"times"})])]),e("div",ar,[o(" 提示词 "),e("div",nr,[e("div",or,[O[1]||(O[1]=e("span",null,"提示词",-1)),t.prompt?(l(),n("button",{key:0,class:"copy-btn",onClick:_}," 复制 ")):o("v-if",true)]),e("div",{class:te(["prompt-content",{empty:!t.prompt}])},$(t.prompt||"无提示词"),3)]),o(" 创建时间 "),t.createdAt?(l(),n("div",ir,[O[2]||(O[2]=e("div",{class:"block-header"},[e("span",null,"创建时间")],-1)),e("div",rr,$(z(t.createdAt)),1)])):o("v-if",true),o(" 生成耗时 "),t.duration?(l(),n("div",dr,[O[3]||(O[3]=e("div",{class:"block-header"},[e("span",null,"生成耗时")],-1)),e("div",ur,$(p(t.duration)),1)])):o("v-if",true)]),e("div",cr,[e("button",{class:"action-btn primary",onClick:C},[i(K,{name:"external-link"}),O[4]||(O[4]=A(" 查看原图 ",-1))]),e("button",{class:"action-btn secondary",onClick:N},[i(K,{name:"download"}),O[5]||(O[5]=A(" 下载 ",-1))])])])):o("v-if",true)])])])):o("v-if",true)]),_:1})])}}}),_t=ve(vr,[["__scopeId","data-v-bd68872f"]]),pr={class:"ml-view-container"},mr={class:"ml-view-header"},fr={class:"ml-header-left"},gr={class:"view-mode-switch"},_r={class:"ml-header-right"},yr={key:0,class:"stats-grid"},hr={class:"stat-card"},br={class:"stat-icon total"},kr={class:"stat-content"},$r={class:"stat-value"},wr={class:"stat-card"},Cr={class:"stat-icon success"},Vr={class:"stat-content"},xr={class:"stat-value success"},Sr={class:"stat-card"},Ir={class:"stat-icon failed"},Or={class:"stat-content"},Tr={class:"stat-value failed"},Ur={class:"stat-card"},zr={class:"stat-icon processing"},Pr={class:"stat-content"},Dr={class:"stat-value pending"},Nr={class:"stat-card"},Fr={class:"stat-icon rate"},Lr={class:"stat-content"},Er={class:"stat-value"},Ar={class:"filter-bar"},Mr={class:"filter-group"},jr={key:0,class:"pagination-info"},Rr={class:"ml-view-content"},Br={class:"mono-text"},qr=["title"],Hr={key:0},Kr={key:1,class:"text-muted"},Jr={key:0},Gr={key:1},Wr={class:"time-text"},Zr={key:0,class:"empty-gallery"},Yr={key:1,class:"ml-masonry"},Xr=["onClick"],Qr={class:"gallery-image-wrapper"},ed=["src"],td=["src"],sd={class:"gallery-overlay"},ld={class:"gallery-info"},ad=["title"],nd={class:"gallery-meta"},od={class:"gallery-time"},id={class:"pagination"},rd={key:0,class:"task-detail"},dd={class:"detail-section"},ud={class:"detail-grid"},cd={class:"detail-item"},vd={class:"detail-item"},pd={class:"detail-item"},md={class:"detail-item"},fd={class:"detail-item"},gd={class:"detail-item"},_d={class:"detail-section"},yd={class:"code-block"},hd={key:0,class:"detail-section"},bd={class:"output-gallery"},kd=["src"],$d=["src"],wd=["src"],Cd={key:3,class:"text-asset"},Vd=["href"],xd={key:1,class:"detail-section"},Sd={class:"code-block error"},Id={class:"cleanup-form"},Od={class:"dialog-footer"},Td=oe({__name:"TasksView",setup(t){const a=w("list"),s=w(false),u=w([]),r=w(null),v=w(0),h=w(1),T=w(20),x=w({status:"",userId:void 0,channelId:void 0}),_=w(false),C=w(null);w(false);const N=w(null),z=w(false),p=w([]),U=w(0),m=w(""),O=w(),K=w(),L=w(false),I=w(30),V=d=>{var c,E,ne;return((E=(c=d.middlewareLogs)==null?void 0:c.preset)==null?void 0:E.transformedPrompt)||((ne=d.requestSnapshot)==null?void 0:ne.prompt)||""},b=G(()=>{var c,E,ne;const d=[];for(const W of u.value){if(W.status!=="success"||!W.responseSnapshot)continue;const f=((E=(c=W.middlewareLogs)==null?void 0:c.preset)==null?void 0:E.transformedPrompt)||((ne=W.requestSnapshot)==null?void 0:ne.prompt)||"";W.responseSnapshot.forEach((y,B)=>{(y.kind==="image"||y.kind==="video")&&y.url&&d.push({id:W.id,assetIndex:B,kind:y.kind,url:y.url,prompt:f,channelId:W.channelId,createdAt:W.startTime})})}return d}),Z=async()=>{s.value=true;try{const d={limit:T.value,offset:(h.value-1)*T.value};x.value.status&&(d.status=x.value.status),x.value.userId&&(d.userId=Number(x.value.userId)),x.value.channelId&&(d.channelId=Number(x.value.channelId));const[c,E]=await Promise.all([Pe.list(d),Pe.stats()]);u.value=c.items,v.value=c.total,r.value=E}catch(d){console.error("Failed to fetch tasks:",d),Q.error("加载数据失败")}finally{s.value=false}},X=d=>{C.value=d,_.value=true},de=d=>{p.value=[d.url],U.value=0,m.value=d.prompt,O.value=d.createdAt,K.value=void 0,z.value=true,N.value=d},k=()=>{L.value=true},D=async()=>{try{const d=await Pe.cleanup(I.value);Q.success(`成功清理 ${d.deleted} 条任务`),L.value=false,Z()}catch{Q.error("清理失败")}},j=d=>new Date(d).toLocaleString(),P=d=>d<1e3?`${d}ms`:`${(d/1e3).toFixed(2)}s`,g=d=>{const c=d.target;c.style.display="none"};return ye(()=>{Z()}),(d,c)=>{const E=M("k-icon"),ne=M("k-button"),W=M("el-option"),f=M("el-select"),y=M("el-input"),B=M("el-table-column"),re=M("el-table"),le=M("el-pagination"),ue=M("el-dialog"),pe=M("el-input-number");return l(),n("div",pr,[o(" 固定头部区域 "),e("div",mr,[e("div",fr,[o(" 视图切换 "),e("div",gr,[e("button",{class:te(["mode-btn",{active:a.value==="list"}]),onClick:c[0]||(c[0]=R=>a.value="list"),title:"列表视图"},[...c[14]||(c[14]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2),e("button",{class:te(["mode-btn",{active:a.value==="gallery"}]),onClick:c[1]||(c[1]=R=>a.value="gallery"),title:"画廊视图"},[...c[15]||(c[15]=[it('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-898a70bb><rect x="3" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect></svg>',1)])],2)])]),e("div",_r,[i(ne,{onClick:k},{icon:S(()=>[i(E,{name:"delete"})]),default:S(()=>[c[16]||(c[16]=A(" 清理记录 ",-1))]),_:1}),i(ne,{onClick:Z},{icon:S(()=>[i(E,{name:"refresh"})]),default:S(()=>[c[17]||(c[17]=A(" 刷新 ",-1))]),_:1})])]),o(" 统计信息 (固定) "),r.value?(l(),n("div",yr,[e("div",hr,[e("div",br,[i(E,{name:"clipboard-list"})]),e("div",kr,[e("div",$r,$(r.value.total),1),c[18]||(c[18]=e("div",{class:"stat-label"},"总任务数",-1))])]),e("div",wr,[e("div",Cr,[i(E,{name:"check-circle"})]),e("div",Vr,[e("div",xr,$(r.value.byStatus.success),1),c[19]||(c[19]=e("div",{class:"stat-label"},"成功",-1))])]),e("div",Sr,[e("div",Ir,[i(E,{name:"exclamation-triangle"})]),e("div",Or,[e("div",Tr,$(r.value.byStatus.failed),1),c[20]||(c[20]=e("div",{class:"stat-label"},"失败",-1))])]),e("div",Ur,[e("div",zr,[i(E,{name:"clock"})]),e("div",Pr,[e("div",Dr,$(r.value.byStatus.pending+r.value.byStatus.processing),1),c[21]||(c[21]=e("div",{class:"stat-label"},"进行中",-1))])]),e("div",Nr,[e("div",Fr,[i(E,{name:"chart-pie"})]),e("div",Lr,[e("div",Er,$(r.value.successRate),1),c[22]||(c[22]=e("div",{class:"stat-label"},"成功率",-1))])])])):o("v-if",true),o(" 筛选栏 (固定) "),e("div",Ar,[e("div",Mr,[i(f,{modelValue:x.value.status,"onUpdate:modelValue":c[2]||(c[2]=R=>x.value.status=R),placeholder:"所有状态",clearable:"",onChange:Z,style:{width:"140px"}},{default:S(()=>[i(W,{label:"等待中",value:"pending"}),i(W,{label:"处理中",value:"processing"}),i(W,{label:"成功",value:"success"}),i(W,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),i(y,{modelValue:x.value.channelId,"onUpdate:modelValue":c[3]||(c[3]=R=>x.value.channelId=R),placeholder:"渠道 ID",clearable:"",onChange:Z,style:{width:"140px"}},null,8,["modelValue"]),i(y,{modelValue:x.value.userId,"onUpdate:modelValue":c[4]||(c[4]=R=>x.value.userId=R),placeholder:"用户 ID",clearable:"",onChange:Z,style:{width:"140px"}},null,8,["modelValue"])]),v.value>0?(l(),n("div",jr," 共 "+$(v.value)+" 条记录 ",1)):o("v-if",true)]),o(" 可滚动的内容区域 "),e("div",Rr,[o(" 列表视图 "),a.value==="list"?(l(),se(re,{key:0,data:u.value,style:{width:"100%"},class:"task-table",onRowClick:X},{default:S(()=>[i(B,{prop:"id",label:"ID",width:"80",align:"center"},{default:S(({row:R})=>[e("span",Br,"#"+$(R.id),1)]),_:1}),i(B,{label:"状态",width:"100",align:"center"},{default:S(({row:R})=>[i(Dt,{status:R.status},null,8,["status"])]),_:1}),i(B,{prop:"channelId",label:"渠道",width:"100",align:"center"}),i(B,{label:"提示词","min-width":"300"},{default:S(({row:R})=>[e("div",{class:"prompt-cell",title:V(R)},$(V(R)),9,qr)]),_:1}),i(B,{label:"输出",width:"120",align:"center"},{default:S(({row:R})=>[R.responseSnapshot&&R.responseSnapshot.length?(l(),n("span",Hr,$(R.responseSnapshot.length)+" 个资产 ",1)):(l(),n("span",Kr,"-"))]),_:1}),i(B,{label:"耗时",width:"100",align:"right"},{default:S(({row:R})=>[R.duration?(l(),n("span",Jr,$(P(R.duration)),1)):(l(),n("span",Gr,"-"))]),_:1}),i(B,{label:"时间",width:"180",align:"right"},{default:S(({row:R})=>[e("span",Wr,$(j(R.startTime)),1)]),_:1})]),_:1},8,["data"])):a.value==="gallery"?(l(),n(F,{key:1},[o(" 画廊视图 (瀑布流) "),b.value.length===0?(l(),n("div",Zr,[i(E,{name:"image",class:"empty-icon"}),c[23]||(c[23]=e("p",null,"暂无成功生成的图片",-1))])):(l(),n("div",Yr,[(l(true),n(F,null,ee(b.value,R=>(l(),n("div",{key:R.id+"-"+R.assetIndex,class:"ml-masonry-item"},[e("div",{class:"gallery-item",onClick:Y=>de(R)},[e("div",Qr,[R.kind==="image"?(l(),n("img",{key:0,src:R.url,class:"gallery-image",loading:"lazy",onError:g},null,40,ed)):R.kind==="video"?(l(),n("video",{key:1,src:R.url,class:"gallery-video",muted:"",loop:"",onMouseenter:c[5]||(c[5]=Y=>Y.target.play()),onMouseleave:c[6]||(c[6]=Y=>Y.target.pause())},null,40,td)):o("v-if",true),e("div",sd,[i(E,{name:"zoom-in",class:"zoom-icon"})])]),e("div",ld,[e("div",{class:"gallery-prompt",title:R.prompt},$(R.prompt),9,ad),e("div",nd,[e("span",od,$(j(R.createdAt)),1)])])],8,Xr)]))),128))]))],64)):o("v-if",true)]),o(" 分页 (固定在底部) "),e("div",id,[i(le,{"current-page":h.value,"onUpdate:currentPage":c[7]||(c[7]=R=>h.value=R),"page-size":T.value,"onUpdate:pageSize":c[8]||(c[8]=R=>T.value=R),total:v.value,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:Z,onSizeChange:Z},null,8,["current-page","page-size","total"])]),o(" 任务详情对话框 "),i(ue,{modelValue:_.value,"onUpdate:modelValue":c[9]||(c[9]=R=>_.value=R),title:"任务详情",width:"800px"},{default:S(()=>{var R,Y;return[C.value?(l(),n("div",rd,[e("div",dd,[c[31]||(c[31]=e("h3",null,"基本信息",-1)),e("div",ud,[e("div",cd,[c[24]||(c[24]=e("span",{class:"label"},"ID:",-1)),A(" "+$(C.value.id),1)]),e("div",vd,[c[25]||(c[25]=e("span",{class:"label"},"状态:",-1)),c[26]||(c[26]=A()),i(Dt,{status:C.value.status},null,8,["status"])]),e("div",pd,[c[27]||(c[27]=e("span",{class:"label"},"渠道 ID:",-1)),A(" "+$(C.value.channelId),1)]),e("div",md,[c[28]||(c[28]=e("span",{class:"label"},"用户 ID:",-1)),A(" "+$(C.value.userId||"N/A"),1)]),e("div",fd,[c[29]||(c[29]=e("span",{class:"label"},"创建时间:",-1)),A(" "+$(j(C.value.startTime)),1)]),e("div",gd,[c[30]||(c[30]=e("span",{class:"label"},"耗时:",-1)),A(" "+$(P(C.value.duration||0)),1)])])]),e("div",_d,[c[32]||(c[32]=e("h3",null,"Prompt",-1)),e("div",yd,$(V(C.value)),1)]),C.value.responseSnapshot&&C.value.responseSnapshot.length>0?(l(),n("div",hd,[e("h3",null,"生成结果 ("+$(C.value.responseSnapshot.length)+" 个资产)",1),e("div",bd,[(l(true),n(F,null,ee(C.value.responseSnapshot,(ce,H)=>{var ie;return l(),n("div",{key:H,class:"output-item"},[ce.kind==="image"&&ce.url?(l(),n("img",{key:0,src:ce.url,class:"output-image"},null,8,kd)):ce.kind==="video"&&ce.url?(l(),n("video",{key:1,src:ce.url,class:"output-image",controls:""},null,8,$d)):ce.kind==="audio"&&ce.url?(l(),n("audio",{key:2,src:ce.url,controls:"",style:{width:"100%"}},null,8,wd)):ce.kind==="text"&&ce.content?(l(),n("div",Cd,$(ce.content),1)):ce.url?(l(),n("a",{key:4,href:ce.url,target:"_blank",class:"file-link"},[i(E,{name:"file"}),A(" "+$(((ie=ce.meta)==null?void 0:ie.filename)||ce.url),1)],8,Vd)):o("v-if",true)])}),128))])])):o("v-if",true),(Y=(R=C.value.middlewareLogs)==null?void 0:R.request)!=null&&Y.error?(l(),n("div",xd,[c[33]||(c[33]=e("h3",null,"错误信息",-1)),e("div",Sd,$(C.value.middlewareLogs.request.error),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue"]),o(" 图片预览弹窗 "),i(_t,{visible:z.value,"onUpdate:visible":c[10]||(c[10]=R=>z.value=R),images:p.value,"initial-index":U.value,prompt:m.value,"created-at":O.value,duration:K.value},null,8,["visible","images","initial-index","prompt","created-at","duration"]),o(" 清理对话框 "),i(ue,{modelValue:L.value,"onUpdate:modelValue":c[13]||(c[13]=R=>L.value=R),title:"清理旧任务",width:"400px"},{footer:S(()=>[e("span",Od,[i(ne,{onClick:c[12]||(c[12]=R=>L.value=false)},{default:S(()=>[...c[35]||(c[35]=[A("取消",-1)])]),_:1}),i(ne,{type:"error",onClick:D},{default:S(()=>[...c[36]||(c[36]=[A("确认清理",-1)])]),_:1})])]),default:S(()=>[e("div",Id,[c[34]||(c[34]=e("p",null,"清理多少天前的任务?",-1)),i(pe,{modelValue:I.value,"onUpdate:modelValue":c[11]||(c[11]=R=>I.value=R),min:1,max:365},null,8,["modelValue"])])]),_:1},8,["modelValue"])])}}}),Ud=ve(Td,[["__scopeId","data-v-898a70bb"]]),zd={class:"gallery-content"},Pd={class:"gallery-header"},Dd={class:"header-left"},Nd={key:0,class:"gallery-count"},Fd={class:"header-actions"},Ld={key:0,class:"gallery-empty"},Ed={class:"gallery-empty"},Ad=["onClick"],Md={key:0,class:"task-image-wrapper"},jd=["src"],Rd={key:0,class:"more-images"},Bd={class:"task-processing"},qd={class:"processing-text"},Hd={class:"task-failed"},Kd={class:"task-info"},Jd=["title"],Gd={class:"task-meta"},Wd={class:"task-time"},Zd={key:0,class:"task-duration"},Yd={key:0,class:"loading-more"},st=10,Xd=oe({__name:"HistoryGallery",emits:["select"],setup(t,{expose:a,emit:s}){const u=s,r=w(false),v=w(false),h=w(false),T=w([]),x=w(0),_=w(false),C=w(0),N=w();let z=null;const p=w(false),U=w([]),m=w(0),O=w(""),K=w(),L=w(),I=async()=>{try{const g=await ys.me();return h.value=g.loggedIn,g.loggedIn}catch{return h.value=false,false}},V=g=>{var E,ne,W;const d=[];if(g.responseSnapshot)for(const f of g.responseSnapshot)f.kind==="image"&&f.url&&d.push(f.url);const c=((ne=(E=g.middlewareLogs)==null?void 0:E.preset)==null?void 0:ne.transformedPrompt)||((W=g.requestSnapshot)==null?void 0:W.prompt)||"";return{id:g.id,status:g.status,prompt:c,images:d,createdAt:new Date(g.startTime),duration:g.duration||void 0}},b=async(g=false)=>{if(h.value){v.value=true;try{const d=await Pe.my({limit:st,offset:g?C.value:0}),c=d.items.map(V);g?T.value=[...T.value,...c]:(T.value=c,C.value=0),x.value=d.total,_.value=d.items.length>=st,C.value+=st}catch(d){console.error("Failed to load tasks:",d)}finally{v.value=false}}},Z=()=>{!v.value&&_.value&&b(true)},X=g=>{const d=g.target,{scrollTop:c,scrollHeight:E,clientHeight:ne}=d;E-c-ne<100&&Z()},de=async()=>{await I(),await b()},k=g=>{g.status==="success"&&g.images.length>0&&(U.value=g.images,m.value=0,O.value=g.prompt,K.value=g.createdAt,L.value=g.duration,p.value=true,u("select",g))},D=g=>{const c=new Date().getTime()-g.getTime();return c<6e4?"刚刚":c<36e5?`${Math.floor(c/6e4)}分钟前`:c<864e5?`${Math.floor(c/36e5)}小时前`:c<6048e5?`${Math.floor(c/864e5)}天前`:g.toLocaleDateString()},j=g=>g<1e3?`${g}ms`:`${(g/1e3).toFixed(1)}s`,P=()=>{z=setInterval(()=>{T.value.some(d=>d.status==="pending"||d.status==="processing")&&b()},3e3)};return a({refresh:de}),ye(async()=>{await I()&&(await b(),P())}),Ye(()=>{z&&clearInterval(z)}),(g,d)=>{const c=M("k-icon");return l(),n("div",{class:te(["history-gallery",{collapsed:r.value}])},[o(" 折叠状态的侧边条 "),r.value?(l(),n("div",{key:0,class:"collapsed-bar",onClick:d[0]||(d[0]=E=>r.value=false)},[i(c,{name:"history"}),d[3]||(d[3]=e("span",{class:"collapsed-text"},"历史",-1))])):(l(),n(F,{key:1},[o(" 展开的内容 "),e("div",zd,[e("div",Pd,[e("div",Dd,[d[4]||(d[4]=e("span",{class:"gallery-title"},"历史记录",-1)),x.value>0?(l(),n("span",Nd,$(x.value),1)):o("v-if",true)]),e("div",Fd,[i(c,{name:"refresh",class:te(["action-icon",{spinning:v.value}]),onClick:de,title:"刷新"},null,8,["class"]),i(c,{name:"chevron-right",class:"action-icon",onClick:d[1]||(d[1]=E=>r.value=true),title:"收起"})])]),o(" 未登录提示 "),h.value?v.value&&T.value.length===0?(l(),n(F,{key:1},[o(" 加载中 "),d[6]||(d[6]=e("div",{class:"gallery-loading"},[e("div",{class:"loader-small"})],-1))],2112)):T.value.length===0?(l(),n(F,{key:2},[o(" 空状态 "),e("div",Ed,[i(c,{name:"image",class:"empty-icon"}),d[7]||(d[7]=e("p",null,"暂无记录",-1))])],2112)):(l(),n(F,{key:3},[o(" 任务列表 (瀑布流) "),e("div",{class:"gallery-list",ref_key:"listRef",ref:N,onScroll:X},[(l(true),n(F,null,ee(T.value,E=>(l(),n("div",{key:E.id,class:te(["task-card",{clickable:E.status==="success"}]),onClick:ne=>k(E)},[o(" 图片区域 - 只显示第一张 "),E.images&&E.images.length>0?(l(),n("div",Md,[e("img",{src:E.images[0],class:"task-image",loading:"lazy"},null,8,jd),E.images.length>1?(l(),n("div",Rd," +"+$(E.images.length-1),1)):o("v-if",true)])):E.status==="processing"||E.status==="pending"?(l(),n(F,{key:1},[o(" 处理中动画 "),e("div",Bd,[d[8]||(d[8]=e("div",{class:"processing-animation"},[e("div",{class:"dot"}),e("div",{class:"dot"}),e("div",{class:"dot"})],-1)),e("span",qd,$(E.status==="pending"?"等待中":"生成中"),1)])],2112)):E.status==="failed"?(l(),n(F,{key:2},[o(" 失败状态 "),e("div",Hd,[i(c,{name:"exclamation-triangle",class:"failed-icon"}),d[9]||(d[9]=e("span",null,"失败",-1))])],2112)):o("v-if",true),o(" 任务信息 "),e("div",Kd,[e("div",{class:"task-prompt",title:E.prompt},$(E.prompt||"(无提示词)"),9,Jd),e("div",Gd,[e("span",Wd,$(D(E.createdAt)),1),E.duration?(l(),n("span",Zd,$(j(E.duration)),1)):o("v-if",true)])])],10,Ad))),128)),o(" 加载更多 "),v.value&&T.value.length>0?(l(),n("div",Yd,[...d[10]||(d[10]=[e("div",{class:"loader-small"},null,-1)])])):o("v-if",true)],544)],2112)):(l(),n("div",Ld,[i(c,{name:"user",class:"empty-icon"}),d[5]||(d[5]=e("p",null,"请登录查看历史",-1))]))])],2112)),o(" 图片预览弹窗 "),i(_t,{visible:p.value,"onUpdate:visible":d[2]||(d[2]=E=>p.value=E),images:U.value,"initial-index":m.value,prompt:O.value,"created-at":K.value,duration:L.value},null,8,["visible","images","initial-index","prompt","created-at","duration"])],2)}}}),Qd=ve(Xd,[["__scopeId","data-v-6cba50e5"]]),eu={class:"preset-picker"},tu={key:0,class:"preset-info"},su=["src"],lu={key:1,class:"preset-thumb placeholder"},au={class:"preset-details"},nu={class:"preset-name"},ou={key:1,class:"placeholder-text"},iu={class:"picker-header"},ru={class:"preset-count"},du={class:"picker-content"},uu={class:"ml-masonry"},cu=["onClick"],vu={key:0,class:"card-thumbnail"},pu=["src","alt"],mu={class:"thumbnail-overlay"},fu={key:0,class:"ref-count"},gu={key:1,class:"card-thumbnail placeholder"},_u={class:"card-content"},yu={class:"card-title"},hu={key:0,class:"card-tags"},bu={key:0,class:"mini-tag more"},ku={key:2,class:"selected-mark"},$u={key:0,class:"empty-state"},wu={class:"dialog-footer"},Cu={key:0,class:"preset-detail"},Vu={key:0,class:"detail-thumbnail"},xu=["src","alt"],Su={class:"detail-section"},Iu={class:"detail-row"},Ou={key:0,class:"detail-row"},Tu={class:"detail-tags"},Uu={class:"detail-section"},zu={class:"prompt-preview"},Pu={key:1,class:"detail-section"},Du={class:"detail-label"},Nu={class:"reference-images"},Fu=["src"],Lu={key:2,class:"detail-section"},Eu={class:"param-preview"},Au={class:"dialog-footer"},Mu=oe({__name:"PresetPicker",props:{modelValue:{},presets:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,u=a,r=["本地","远程","text2img","img2img","NSFW"],v=w(false),h=w(false),T=w([]),x=w(s.modelValue),_=w(null),C=G(()=>{const I=new Set;return s.presets.forEach(V=>{(V.tags||[]).forEach(b=>I.add(b))}),Array.from(I).sort()}),N=G(()=>s.modelValue?s.presets.find(I=>I.id===s.modelValue):null),z=G(()=>{let I=s.presets;return T.value.length===0?I:I.filter(V=>T.value.every(b=>b==="本地"?V.source==="user":b==="远程"?V.source==="api":(V.tags||[]).includes(b)))}),p=()=>{x.value=s.modelValue,T.value=[],v.value=true},U=I=>{x.value=I.id},m=()=>{u("update:modelValue",x.value),v.value=false},O=()=>{u("update:modelValue",void 0)},K=I=>{_.value=I,h.value=true},L=()=>{_.value&&(u("update:modelValue",_.value.id),h.value=false,v.value=false)};return _e(()=>s.modelValue,I=>{x.value=I}),(I,V)=>{var de;const b=M("k-icon"),Z=M("k-button"),X=M("el-dialog");return l(),n("div",eu,[o(" 当前选中的预设显示 "),e("div",{class:"selected-preset",onClick:p},[N.value?(l(),n("div",tu,[N.value.thumbnail?(l(),n("img",{key:0,src:N.value.thumbnail,class:"preset-thumb"},null,8,su)):(l(),n("div",lu,[i(b,{name:"image"})])),e("div",au,[e("span",nu,$(N.value.name),1),e("span",{class:te(["preset-source",N.value.source])},$(N.value.source==="api"?"远程":"本地"),3)]),i(b,{name:"times",class:"clear-btn",onClick:fe(O,["stop"]),title:"清除选择"})])):(l(),n("div",ou,[i(b,{name:"layer-group"}),V[6]||(V[6]=e("span",null,"选择预设模板 (可选)",-1))])),i(b,{name:"chevron-down",class:"dropdown-icon"})]),o(" 预设选择弹窗 - 复用 PresetsView 的布局 "),i(X,{modelValue:v.value,"onUpdate:modelValue":V[3]||(V[3]=k=>v.value=k),title:"选择预设",width:"80vw",top:"5vh","close-on-click-modal":true,class:"preset-picker-dialog"},{footer:S(()=>[e("div",wu,[i(Z,{onClick:V[2]||(V[2]=k=>v.value=false)},{default:S(()=>[...V[9]||(V[9]=[A("取消",-1)])]),_:1}),i(Z,{type:"primary",onClick:m,disabled:!x.value},{default:S(()=>[...V[10]||(V[10]=[A(" 确认选择 ",-1)])]),_:1},8,["disabled"])])]),default:S(()=>[e("div",iu,[i(ut,{modelValue:T.value,"onUpdate:modelValue":V[0]||(V[0]=k=>T.value=k),"all-tags":C.value,"preset-tags":r},null,8,["modelValue","all-tags"]),e("span",ru,"共 "+$(z.value.length)+" 个预设",1)]),e("div",du,[e("div",uu,[(l(true),n(F,null,ee(z.value,k=>{var D,j;return l(),n("div",{key:k.id,class:"ml-masonry-item"},[e("div",{class:te(["preset-card",{selected:x.value===k.id}]),onClick:P=>U(k)},[o(" 缩略图 "),k.thumbnail?(l(),n("div",vu,[e("img",{src:k.thumbnail,alt:k.name,loading:"lazy"},null,8,pu),e("div",mu,[(D=k.referenceImages)!=null&&D.length?(l(),n("span",fu,[i(b,{name:"image"}),A(" "+$(k.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",gu,[i(b,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",_u,[e("div",yu,$(k.name),1),(j=k.tags)!=null&&j.length?(l(),n("div",hu,[(l(true),n(F,null,ee(k.tags.slice(0,4),P=>(l(),n("span",{key:P,class:"mini-tag"},$(P),1))),128)),k.tags.length>4?(l(),n("span",bu,"+"+$(k.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮区 "),e("div",{class:"card-actions",onClick:V[1]||(V[1]=fe(()=>{},["stop"]))},[i(Z,{size:"mini",onClick:P=>K(k)},{icon:S(()=>[i(b,{name:"eye"})]),default:S(()=>[V[7]||(V[7]=A(" 详情 ",-1))]),_:1},8,["onClick"])]),o(" 来源标记 "),e("div",{class:te(["source-indicator",k.source])},$(k.source==="api"?"远程":"本地"),3),o(" 选中标记 "),x.value===k.id?(l(),n("div",ku,[i(b,{name:"check"})])):o("v-if",true)],10,cu)])}),128))]),o(" 空状态 "),z.value.length===0?(l(),n("div",$u,[i(b,{name:"search",class:"empty-icon"}),V[8]||(V[8]=e("p",null,"没有找到匹配的预设",-1))])):o("v-if",true)])]),_:1},8,["modelValue"]),o(" 预设详情弹窗 "),i(X,{modelValue:h.value,"onUpdate:modelValue":V[5]||(V[5]=k=>h.value=k),title:((de=_.value)==null?void 0:de.name)||"预设详情",width:"600px","close-on-click-modal":true,class:"preset-detail-dialog"},{footer:S(()=>[e("div",Au,[i(Z,{onClick:V[4]||(V[4]=k=>h.value=false)},{default:S(()=>[...V[15]||(V[15]=[A("关闭",-1)])]),_:1}),i(Z,{type:"primary",onClick:L},{icon:S(()=>[i(b,{name:"check"})]),default:S(()=>[V[16]||(V[16]=A(" 选择此预设 ",-1))]),_:1})])]),default:S(()=>{var k,D;return[_.value?(l(),n("div",Cu,[o(" 缩略图 "),_.value.thumbnail?(l(),n("div",Vu,[e("img",{src:_.value.thumbnail,alt:_.value.name},null,8,xu)])):o("v-if",true),o(" 基本信息 "),e("div",Su,[e("div",Iu,[V[11]||(V[11]=e("span",{class:"detail-label"},"来源:",-1)),e("span",{class:te(["source-badge",_.value.source])},$(_.value.source==="api"?"远程":"本地"),3)]),(k=_.value.tags)!=null&&k.length?(l(),n("div",Ou,[V[12]||(V[12]=e("span",{class:"detail-label"},"标签:",-1)),e("div",Tu,[(l(true),n(F,null,ee(_.value.tags,j=>(l(),n("span",{key:j,class:"mini-tag"},$(j),1))),128))])])):o("v-if",true)]),o(" Prompt 模板 "),e("div",Uu,[V[13]||(V[13]=e("div",{class:"detail-label"},"Prompt 模板:",-1)),e("div",zu,$(_.value.promptTemplate),1)]),o(" 参考图 "),(D=_.value.referenceImages)!=null&&D.length?(l(),n("div",Pu,[e("div",Du,"参考图片 ("+$(_.value.referenceImages.length)+"):",1),e("div",Nu,[(l(true),n(F,null,ee(_.value.referenceImages,(j,P)=>(l(),n("img",{key:P,src:j,class:"ref-image"},null,8,Fu))),128))])])):o("v-if",true),o(" 参数覆盖 "),_.value.parameterOverrides&&Object.keys(_.value.parameterOverrides).length?(l(),n("div",Lu,[V[14]||(V[14]=e("div",{class:"detail-label"},"参数覆盖:",-1)),e("div",Eu,$(JSON.stringify(_.value.parameterOverrides,null,2)),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue","title"])])}}}),ju=ve(Mu,[["__scopeId","data-v-59115136"]]),Ru={class:"view-container"},Bu={class:"view-content"},qu={class:"generate-layout"},Hu={class:"config-panel"},Ku={class:"form-section"},Ju={class:"section-title"},Gu={class:"form-item"},Wu={class:"form-item"},Zu={class:"form-section flex-grow"},Yu={class:"section-title"},Xu={class:"form-section"},Qu={class:"section-title"},ec={class:"upload-area"},tc={key:0,class:"upload-list"},sc=["src"],lc=["onClick"],ac={class:"form-actions"},nc={class:"preview-panel"},oc={key:0,class:"generating-state"},ic={class:"generating-content"},rc={class:"generating-info"},dc={class:"generating-timer"},uc={key:0,class:"generating-hint"},cc={class:"result-container"},vc={key:0,class:"success-result"},pc={class:"output-grid"},mc=["src","onClick"],fc={class:"output-actions"},gc=["href"],_c=["src"],yc=["src"],hc=["href"],bc={class:"text-output"},kc=["href"],$c={class:"result-meta"},wc={class:"meta-item success-badge"},Cc={key:0,class:"meta-item"},Vc={key:1,class:"meta-item"},xc={class:"error-result"},Sc={class:"error-content"},Ic={class:"error-info"},Oc={class:"error-msg"},Tc={key:0,class:"error-meta"},Uc={key:1,class:"error-meta"},zc={class:"empty-state"},Pc=oe({__name:"GenerateView",setup(t){const a=w([]),s=w([]),u=w(false),r=w(null),v=w([]),h=w([]),T=w(),x=w();let _=0;const C=w(0),N=w(null);let z=null,p=0;const U=w({channel:void 0,prompt:"",parameters:{}}),m=w(void 0),O=w(false),K=w([]),L=w(0),I=w(""),V=W=>{if(W<1e3)return`${W}ms`;const f=W/1e3;if(f<60)return`${f.toFixed(1)}s`;const y=Math.floor(f/60),B=(f%60).toFixed(0);return`${y}m ${B}s`},b=()=>{p=Date.now(),C.value=0,z=setInterval(()=>{C.value=Date.now()-p},100)},Z=()=>{z&&(clearInterval(z),z=null)},X=W=>{var f;(f=r.value)!=null&&f.output&&(K.value=r.value.output.filter(y=>y.kind==="image"&&y.url).map(y=>y.url),L.value=W,O.value=true)},de=async()=>{try{const[W,f]=await Promise.all([ze.list(),Ie.list()]);a.value=W,s.value=f}catch(W){console.error(W)}},k=W=>new Promise((f,y)=>{const B=new FileReader;B.onload=()=>{const le=B.result.split(",")[1];f(le)},B.onerror=y,B.readAsDataURL(W)}),D=()=>{var W;(W=T.value)==null||W.click()},j=async W=>{const f=W.target;!f.files||f.files.length===0||(await g(Array.from(f.files)),f.value="")},P=async W=>{var y;const f=(y=W.dataTransfer)==null?void 0:y.files;!f||f.length===0||await g(Array.from(f).filter(B=>B.type.startsWith("image/")))},g=async W=>{const f=4-v.value.length;if(f<=0){Q.warning("最多上传 4 张图片");return}const y=W.slice(0,f);for(const B of y){const re=URL.createObjectURL(B);v.value.push({uid:++_,url:re,raw:B});try{const le=await k(B);h.value.push({type:"image",base64:le,mimeType:B.type,filename:B.name})}catch(le){console.error("Failed to read file:",B.name,le)}}},d=W=>{const f=v.value[W];f&&(URL.revokeObjectURL(f.url),v.value.splice(W,1),h.value.splice(W,1))},c=async W=>{var f,y,B,re;try{const le=await Pe.get(W);if(I.value=((y=(f=le.middlewareLogs)==null?void 0:f.preset)==null?void 0:y.transformedPrompt)||((B=le.requestSnapshot)==null?void 0:B.prompt)||"",le.status==="success"&&le.responseSnapshot&&le.responseSnapshot.length>0)return{success:true,output:le.responseSnapshot,taskId:le.id,duration:le.duration||void 0};if(le.status==="failed"){const ue=(re=le.middlewareLogs)==null?void 0:re._error;return{success:false,error:(ue==null?void 0:ue.message)||"生成失败",taskId:le.id,duration:le.duration||void 0}}return null}catch{return null}},E=async()=>{var W,f,y,B,re,le;if(!U.value.channel){Q.warning("请选择渠道");return}u.value=true,r.value=null,N.value=null,b();try{const ue={channelId:U.value.channel,prompt:U.value.prompt||"",parameters:{...U.value.parameters}};if(h.value.length>0&&(ue.files=h.value),m.value){const R=s.value.find(Y=>Y.id===m.value);R&&(ue.parameters.preset=R.name)}const pe=await hs.generate(ue);if(pe.taskId&&(N.value=pe.taskId),pe.success)if(r.value=pe,(W=x.value)==null||W.refresh(),pe.taskId)try{const R=await Pe.get(pe.taskId);I.value=((y=(f=R.middlewareLogs)==null?void 0:f.preset)==null?void 0:y.transformedPrompt)||((B=R.requestSnapshot)==null?void 0:B.prompt)||""}catch{I.value=U.value.prompt}else I.value=U.value.prompt;else if(pe.taskId){await new Promise(Y=>setTimeout(Y,500));const R=await c(pe.taskId);R&&R.success?(r.value=R,(re=x.value)==null||re.refresh()):r.value=pe}else r.value=pe}catch(ue){if(N.value){await new Promise(R=>setTimeout(R,500));const pe=await c(N.value);pe?(r.value=pe,pe.success&&((le=x.value)==null||le.refresh())):r.value={success:false,error:ue.message||"请求失败"}}else r.value={success:false,error:ue.message||"请求失败"}}finally{Z(),u.value=false}},ne=W=>{W.prompt&&(U.value.prompt=W.prompt)};return ye(()=>{de()}),Ye(()=>{Z()}),(W,f)=>{var R;const y=M("k-icon"),B=M("el-option"),re=M("el-select"),le=M("el-input"),ue=M("k-button"),pe=M("k-card");return l(),n("div",Ru,[e("div",Bu,[e("div",qu,[o(" 左侧配置区 "),e("div",Hu,[i(pe,{class:"config-card"},{default:S(()=>[e("div",Ku,[e("div",Ju,[i(y,{name:"settings"}),f[5]||(f[5]=A(" 基础配置 ",-1))]),e("div",Gu,[f[6]||(f[6]=e("div",{class:"label"},"生成渠道",-1)),i(re,{modelValue:U.value.channel,"onUpdate:modelValue":f[0]||(f[0]=Y=>U.value.channel=Y),placeholder:"选择生成渠道",style:{width:"100%"}},{default:S(()=>[(l(true),n(F,null,ee(a.value,Y=>(l(),se(B,{key:Y.id,label:Y.name,value:Y.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Wu,[f[7]||(f[7]=e("div",{class:"label"},"预设模板",-1)),i(ju,{modelValue:m.value,"onUpdate:modelValue":f[1]||(f[1]=Y=>m.value=Y),presets:s.value},null,8,["modelValue","presets"])])]),e("div",Zu,[e("div",Yu,[i(y,{name:"edit"}),f[8]||(f[8]=A(" 提示词 ",-1))]),i(le,{modelValue:U.value.prompt,"onUpdate:modelValue":f[2]||(f[2]=Y=>U.value.prompt=Y),type:"textarea",rows:8,placeholder:"输入提示词,支持自然语言描述...",resize:"none",class:"prompt-input"},null,8,["modelValue"])]),o(" 文件上传区域 "),e("div",Xu,[e("div",Qu,[i(y,{name:"image"}),f[9]||(f[9]=A(" 参考图片 ",-1))]),e("div",ec,[o(" 已上传的图片列表 "),v.value.length>0?(l(),n("div",tc,[(l(true),n(F,null,ee(v.value,(Y,ce)=>(l(),n("div",{key:Y.uid,class:"upload-item"},[e("img",{src:Y.url,class:"upload-thumb"},null,8,sc),e("div",{class:"upload-overlay",onClick:H=>d(ce)},[i(y,{name:"delete"})],8,lc)]))),128))])):o("v-if",true),o(" 上传按钮 "),v.value.length<4?(l(),n("div",{key:1,class:"upload-trigger",onClick:D,onDragover:f[3]||(f[3]=fe(()=>{},["prevent"])),onDrop:fe(P,["prevent"])},[e("input",{ref_key:"fileInput",ref:T,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:j},null,544),i(y,{name:"add",class:"upload-icon"})],32)):o("v-if",true),f[10]||(f[10]=e("div",{class:"upload-tip"},"点击或拖拽上传,最多 4 张",-1))])]),e("div",ac,[i(ue,{solid:"",type:"primary",loading:u.value,onClick:E,class:"generate-btn"},{icon:S(()=>[i(y,{name:"magic"})]),default:S(()=>[f[11]||(f[11]=A(" 生成图片 ",-1))]),_:1},8,["loading"])])]),_:1})]),o(" 右侧预览区 "),e("div",nc,[o(" 生成中状态 "),u.value?(l(),n("div",oc,[e("div",ic,[f[13]||(f[13]=e("div",{class:"loader"},null,-1)),e("div",rc,[f[12]||(f[12]=e("p",{class:"generating-title"},"正在生成中...",-1)),e("p",dc,[i(y,{name:"stopwatch"}),A(" 已用时间: "+$(V(C.value)),1)]),N.value?(l(),n("p",uc,"任务 ID: "+$(N.value),1)):o("v-if",true)])])])):r.value?(l(),n(F,{key:1},[o(" 有结果 "),e("div",cc,[o(" 成功状态 "),r.value.success&&r.value.output&&r.value.output.length?(l(),n("div",vc,[e("div",pc,[(l(true),n(F,null,ee(r.value.output,(Y,ce)=>{var H;return l(),n("div",{key:ce,class:"output-wrapper"},[o(" 图片 "),Y.kind==="image"?(l(),n(F,{key:0},[e("img",{src:Y.url,onClick:ie=>X(ce),class:"clickable-image"},null,8,mc),e("div",fc,[e("a",{href:Y.url,target:"_blank",class:"action-btn",download:""},[i(y,{name:"download"})],8,gc)])],64)):Y.kind==="video"?(l(),n(F,{key:1},[o(" 视频 "),e("video",{src:Y.url,controls:"",class:"output-video"},null,8,_c)],64)):Y.kind==="audio"?(l(),n(F,{key:2},[o(" 音频 "),e("audio",{src:Y.url,controls:"",class:"output-audio"},null,8,yc)],64)):Y.kind==="file"?(l(),n(F,{key:3},[o(" 其他文件 "),e("a",{href:Y.url,target:"_blank",class:"file-link"},[i(y,{name:"file"}),A(" "+$(((H=Y.meta)==null?void 0:H.filename)||"下载文件"),1)],8,hc)],64)):Y.kind==="text"?(l(),n(F,{key:4},[o(" 文本 "),e("div",bc,$(Y.content),1)],64)):Y.url?(l(),n(F,{key:5},[o(" 兜底:有 url 则显示链接 "),e("a",{href:Y.url,target:"_blank"},$(Y.url),9,kc)],64)):o("v-if",true)])}),128))]),e("div",$c,[e("span",wc,[i(y,{name:"check-circle"}),f[14]||(f[14]=A(" 生成成功 ",-1))]),r.value.duration?(l(),n("span",Cc,[i(y,{name:"stopwatch"}),A(" 耗时: "+$(V(r.value.duration)),1)])):o("v-if",true),r.value.taskId?(l(),n("span",Vc,[i(y,{name:"list-alt"}),A(" 任务 ID: "+$(r.value.taskId),1)])):o("v-if",true)])])):(l(),n(F,{key:1},[o(" 失败状态 "),e("div",xc,[e("div",Sc,[i(y,{name:"exclamation-triangle",class:"error-icon"}),e("div",Ic,[f[15]||(f[15]=e("p",{class:"error-title"},"生成失败",-1)),e("p",Oc,$(r.value.error||"未知错误"),1),r.value.taskId?(l(),n("p",Tc,"任务 ID: "+$(r.value.taskId),1)):o("v-if",true),r.value.duration?(l(),n("p",Uc,"耗时: "+$(V(r.value.duration)),1)):o("v-if",true)])]),i(ue,{class:"retry-btn",onClick:E},{icon:S(()=>[i(y,{name:"refresh"})]),default:S(()=>[f[16]||(f[16]=A(" 重新生成 ",-1))]),_:1})])],2112))])],2112)):(l(),n(F,{key:2},[o(" 空状态 "),e("div",zc,[i(y,{name:"image",class:"empty-icon"}),f[17]||(f[17]=e("p",null,"在左侧配置并点击生成",-1))])],2112))]),o(" 右侧历史画廊 "),i(Qd,{ref_key:"historyGalleryRef",ref:x,onSelect:ne},null,512)])]),o(" 图片预览弹窗 "),i(_t,{visible:O.value,"onUpdate:visible":f[4]||(f[4]=Y=>O.value=Y),images:K.value,"initial-index":L.value,prompt:I.value,duration:(R=r.value)==null?void 0:R.duration},null,8,["visible","images","initial-index","prompt","duration"])])}}}),Nt=ve(Pc,[["__scopeId","data-v-a3441aa4"]]),Dc={class:"pipeline-panel"},Nc={class:"pipeline-flow"},Fc={class:"phase-icon"},Lc={class:"phase-info"},Ec={class:"phase-name"},Ac={class:"phase-desc"},Mc={class:"phase-badge"},jc={key:0,class:"phase-middlewares"},Rc={class:"mw-card"},Bc={class:"mw-content"},qc={class:"mw-name"},Hc={class:"mw-desc"},Kc=["title"],Jc=["checked","onChange"],Gc={key:2,class:"phase-connector"},Wc={class:"connector-arrow"},Zc=oe({__name:"MiddlewaresPanel",setup(t){const a=w([]),s=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查、任务创建",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],u={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},r=T=>a.value.filter(x=>x.phase===T),v=async()=>{try{a.value=await He.list()}catch{Q.error("加载中间件列表失败")}},h=async T=>{const x=!T.enabled;try{await He.update(T.name,{enabled:x}),T.enabled=x,Q.success(x?"已启用":"已禁用")}catch{Q.error("操作失败")}};return ye(v),(T,x)=>{const _=M("k-icon");return l(),n("div",Dc,[o(" 标题区 "),x[5]||(x[5]=e("div",{class:"panel-header"},[e("div",{class:"header-title"},[e("h3",null,"请求执行流程"),e("span",{class:"subtitle"},"每个生成请求按以下阶段依次处理")])],-1)),o(" 流程图 "),e("div",Nc,[(l(),n(F,null,ee(s,(C,N)=>e("div",{key:C.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:te(["phase-header",C.colorClass])},[e("div",Fc,[i(_,{name:C.icon},null,8,["name"])]),e("div",Lc,[e("span",Ec,$(C.label),1),e("span",Ac,$(C.description),1)]),e("span",Mc,$(r(C.id).length),1)],2),o(" 中间件列表 "),r(C.id).length>0?(l(),n("div",jc,[(l(true),n(F,null,ee(r(C.id),(z,p)=>(l(),n("div",{key:z.name,class:te(["mw-item",{disabled:!z.enabled}])},[e("div",Rc,[e("div",{class:te(["mw-status",{active:z.enabled}])},null,2),e("div",Bc,[e("span",qc,$(z.displayName),1),e("span",Hc,$(z.description||u[z.category]||z.category),1)]),e("label",{class:"toggle-switch",onClick:x[0]||(x[0]=fe(()=>{},["stop"])),title:z.enabled?"点击禁用":"点击启用"},[e("input",{type:"checkbox",checked:z.enabled,onChange:U=>h(z)},null,40,Jc),x[1]||(x[1]=e("span",{class:"slider"},null,-1))],8,Kc)])],2))),128))])):(l(),n(F,{key:1},[o(" 空状态 "),x[2]||(x[2]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),N<s.length-1?(l(),n("div",Gc,[x[3]||(x[3]=e("div",{class:"connector-line"},null,-1)),e("div",Wc,[i(_,{name:"chevron-down"})]),x[4]||(x[4]=e("div",{class:"connector-line"},null,-1))])):o("v-if",true)])),64))]),o(" 底部说明 "),x[6]||(x[6]=it('<div class="pipeline-footer" data-v-b4b0cf47><div class="footer-item" data-v-b4b0cf47><span class="dot active" data-v-b4b0cf47></span><span data-v-b4b0cf47>启用 - 中间件将在请求中执行</span></div><div class="footer-item" data-v-b4b0cf47><span class="dot" data-v-b4b0cf47></span><span data-v-b4b0cf47>禁用 - 中间件将被跳过</span></div><p class="footer-hint" data-v-b4b0cf47>同一阶段内的中间件可能并行执行。详细配置请前往「扩展插件」面板。</p></div>',1))])}}}),Yc=ve(Zc,[["__scopeId","data-v-b4b0cf47"]]),Xc={class:"plugins-panel"},Qc={key:0,class:"loading-state"},ev={class:"empty-state"},tv={class:"plugins-list"},sv=["onClick"],lv={class:"plugin-info"},av={class:"plugin-header"},nv={class:"plugin-name"},ov={key:0,class:"plugin-version"},iv={class:"plugin-description"},rv={class:"plugin-status"},dv={key:0,class:"plugin-badge connector"},uv={key:1,class:"plugin-badge middleware"},cv={key:0,class:"plugin-detail"},vv={class:"detail-header"},pv={class:"header-left"},mv={key:0,class:"version"},fv={class:"header-actions"},gv={key:0,class:"connector-info"},_v={class:"connector-meta"},yv={class:"connector-id"},hv={class:"connector-types"},bv={key:1,class:"middlewares-list"},kv={class:"middleware-tags"},$v={class:"phase-badge"},wv={key:2,class:"config-section"},Cv={class:"config-actions"},Vv={class:"no-config"},xv={class:"no-selection"},Sv=oe({__name:"PluginsPanel",setup(t){const a=w(true),s=w([]),u=w(null),r=w({}),v=w(false),h={"lifecycle-prepare":"准备","lifecycle-pre-request":"前置","lifecycle-request":"请求","lifecycle-post-request":"后置","lifecycle-finalize":"完成"},T=z=>h[z]||z,x=async()=>{try{a.value=true,s.value=await at.list()}catch(z){console.error("Failed to load plugins:",z),s.value=[]}finally{a.value=false}},_=z=>{u.value=z,r.value={...z.config};for(const p of z.configFields||[])r.value[p.key]===void 0&&p.default!==void 0&&(r.value[p.key]=p.default)},C=async()=>{if(u.value){v.value=true;try{await at.updateConfig(u.value.id,r.value),Q.success("保存成功"),await x();const z=s.value.find(p=>{var U;return p.id===((U=u.value)==null?void 0:U.id)});z&&(u.value=z,r.value={...z.config})}catch{Q.error("保存失败")}finally{v.value=false}}},N=async z=>{var p;try{const U=await rt(z.apiEvent);if((U==null?void 0:U.success)===false)throw new Error(U.error||"操作失败");if(z.apiEvent==="media-luna/presets/sync"&&(U!=null&&U.data)){const{added:m,updated:O,removed:K,notModified:L}=U.data;L?Q.info("数据未变化,无需更新"):Q.success(`同步完成:新增 ${m},更新 ${O},删除 ${K}`)}else(p=U==null?void 0:U.data)!=null&&p.message?Q.success(U.data.message):Q.success(`${z.label} 完成`);await x()}catch(U){Q.error(`${z.label} 失败: ${U instanceof Error?U.message:"未知错误"}`)}};return ye(x),(z,p)=>{var O,K,L;const U=M("k-icon"),m=M("k-button");return l(),n("div",Xc,[o(" 加载状态 "),a.value?(l(),n("div",Qc,[i(U,{name:"sync",class:"spin"}),p[1]||(p[1]=e("span",null,"加载中...",-1))])):s.value.length===0?(l(),n(F,{key:1},[o(" 空状态 "),e("div",ev,[i(U,{name:"apps"}),p[2]||(p[2]=e("p",null,"暂无扩展插件",-1)),p[3]||(p[3]=e("p",{class:"hint"},[A("第三方扩展插件将在这里显示"),e("br"),A('内置功能请在"功能模块"中配置')],-1))])],2112)):(l(),n(F,{key:2},[o(" 插件列表 "),e("div",tv,[(l(true),n(F,null,ee(s.value,I=>{var V,b;return l(),n("div",{key:I.id,class:te(["plugin-card",{active:((V=u.value)==null?void 0:V.id)===I.id,disabled:!I.enabled}]),onClick:Z=>_(I)},[e("div",lv,[e("div",av,[e("span",nv,$(I.name),1),I.version?(l(),n("span",ov,"v"+$(I.version),1)):o("v-if",true)]),e("p",iv,$(I.description||"暂无描述"),1)]),e("div",rv,[I.connector?(l(),n("span",dv,"连接器")):o("v-if",true),(b=I.middlewares)!=null&&b.length?(l(),n("span",uv,$(I.middlewares.length)+" 个中间件 ",1)):o("v-if",true),i(U,{name:I.enabled?"check-circle":"close-circle",class:te(I.enabled?"enabled":"disabled")},null,8,["name","class"])])],10,sv)}),128))]),o(" 插件详情 "),u.value?(l(),n("div",cv,[e("header",vv,[e("div",pv,[e("h3",null,$(u.value.name),1),u.value.version?(l(),n("span",mv,"v"+$(u.value.version),1)):o("v-if",true)]),e("div",fv,[(l(true),n(F,null,ee(u.value.actions,I=>(l(),se(m,{key:I.name,type:I.type||"default",size:"small",onClick:V=>N(I)},cs({default:S(()=>[A(" "+$(I.label),1)]),_:2},[I.icon?{name:"icon",fn:S(()=>[i(U,{name:I.icon},null,8,["name"])]),key:"0"}:void 0]),1032,["type","onClick"]))),128))])]),o(" 连接器信息 "),u.value.connector?(l(),n("div",gv,[p[4]||(p[4]=e("h4",null,"连接器",-1)),e("div",_v,[e("span",yv,$(u.value.connector.id),1),e("span",hv," 支持: "+$(((O=u.value.connector.supportedTypes)==null?void 0:O.join(", "))||"无"),1)])])):o("v-if",true),o(" 中间件列表 "),(K=u.value.middlewares)!=null&&K.length?(l(),n("div",bv,[p[5]||(p[5]=e("h4",null,"中间件",-1)),e("div",kv,[(l(true),n(F,null,ee(u.value.middlewares,I=>(l(),n("span",{key:I.name,class:te(["middleware-tag",{enabled:I.enabled}])},[A($(I.displayName||I.name)+" ",1),e("span",$v,$(T(I.phase)),1)],2))),128))])])):o("v-if",true),o(" 配置表单 "),(L=u.value.configFields)!=null&&L.length?(l(),n("div",wv,[p[7]||(p[7]=e("h4",null,"配置",-1)),i(et,{fields:u.value.configFields,modelValue:r.value,"onUpdate:modelValue":p[0]||(p[0]=I=>r.value=I),"presets-map":u.value.presets},null,8,["fields","modelValue","presets-map"]),e("div",Cv,[i(m,{type:"primary",onClick:C,loading:v.value},{icon:S(()=>[i(U,{name:"save"})]),default:S(()=>[p[6]||(p[6]=A(" 保存配置 ",-1))]),_:1},8,["loading"])])])):(l(),n(F,{key:3},[o(" 无配置提示 "),e("div",Vv,[i(U,{name:"info-circle"}),p[8]||(p[8]=e("span",null,"该插件暂无可配置项",-1))])],2112))])):(l(),n(F,{key:1},[o(" 无选中提示 "),e("div",xv,[i(U,{name:"apps"}),p[9]||(p[9]=e("p",null,"请从左侧选择一个插件查看详情",-1))])],2112))],64))])}}}),Iv=ve(Sv,[["__scopeId","data-v-a53de4c8"]]),Ov={class:"settings-view"},Tv={class:"sidebar"},Uv={class:"nav-list"},zv=["onClick"],Pv={class:"main-content"},Dv={key:0,class:"loading"},Nv={class:"panel-header"},Fv={key:0},Lv={class:"custom-panel"},Ev={class:"actions"},Av=oe({__name:"SettingsView",setup(t){const a=w(true),s=w([]),u=w(""),r=w({}),v=G(()=>s.value.find(_=>_.id===u.value)),h=async()=>{try{s.value=await bt.panels(),s.value.length&&!u.value&&(u.value=s.value[0].id)}catch{Q.error("加载设置面板失败")}},T=()=>{var _;if(((_=v.value)==null?void 0:_.type)==="custom"){r.value={...v.value.config||{}};for(const C of v.value.configFields||[])r.value[C.key]===void 0&&C.default!==void 0&&(r.value[C.key]=C.default)}},x=async()=>{if(v.value)try{await bt.update(v.value.id,r.value),Q.success("保存成功"),await h()}catch{Q.error("保存失败")}};return _e(u,()=>{var _;((_=v.value)==null?void 0:_.type)==="custom"&&T()}),ye(async()=>{await h(),a.value=false}),(_,C)=>{const N=M("k-icon"),z=M("k-button");return l(),n("div",Ov,[o(" 侧边栏导航 "),e("aside",Tv,[e("nav",Uv,[(l(true),n(F,null,ee(s.value,p=>(l(),n("div",{key:p.id,class:te(["nav-item",{active:u.value===p.id}]),onClick:U=>u.value=p.id},[i(N,{name:p.icon},null,8,["name"]),e("span",null,$(p.name),1)],10,zv))),128))])]),o(" 主内容区 "),e("main",Pv,[a.value?(l(),n("div",Dv,[i(N,{name:"sync",class:"spin"}),C[1]||(C[1]=A(" 加载中... ",-1))])):v.value?(l(),n(F,{key:1},[o(" 面板标题 "),e("header",Nv,[e("h2",null,$(v.value.name),1),v.value.description?(l(),n("p",Fv,$(v.value.description),1)):o("v-if",true)]),o(" 功能模块面板 "),v.value.component==="middlewares"?(l(),se(Yc,{key:0})):v.value.component==="plugins"?(l(),n(F,{key:1},[o(" 扩展插件面板 "),i(Iv)],64)):v.value.type==="custom"&&v.value.configFields?(l(),n(F,{key:2},[o(" 自定义面板 "),e("div",Lv,[i(et,{fields:v.value.configFields,modelValue:r.value,"onUpdate:modelValue":C[0]||(C[0]=p=>r.value=p)},null,8,["fields","modelValue"]),e("div",Ev,[i(z,{type:"primary",onClick:x},{icon:S(()=>[i(N,{name:"save"})]),default:S(()=>[C[2]||(C[2]=A(" 保存 ",-1))]),_:1})])])],64)):o("v-if",true)],64)):o("v-if",true)])])}}}),Mv=ve(Av,[["__scopeId","data-v-5fa778a6"]]),jv={class:"setup-storage"},Rv={key:0,class:"loading-state"},Bv={key:0,class:"warning-box"},qv={class:"step-actions"},Hv=oe({__name:"SetupStorage",props:{modelValue:{},saving:{type:Boolean}},emits:["update:modelValue","next"],setup(t,{emit:a}){const s=t,u=a,r=w(true),v=w([]),h=w({});_e(h,_=>{u("update:modelValue",{..._})},{deep:true});const T=async()=>{try{r.value=true;const[_,C]=await Promise.all([we.getStorageFields(),we.getStorageConfig()]);v.value=_;const N={...s.modelValue};for(const z of _)C[z.key]!==void 0?N[z.key]=C[z.key]:N[z.key]===void 0&&z.default!==void 0&&(N[z.key]=z.default);h.value=N}catch(_){console.error("Failed to load storage config:",_)}finally{r.value=false}},x=()=>{u("next")};return ye(T),(_,C)=>{const N=M("k-icon"),z=M("k-button");return l(),n("div",jv,[C[4]||(C[4]=e("h3",null,"存储配置",-1)),C[5]||(C[5]=e("p",{class:"step-desc"},"选择生成图片的存储方式。推荐使用本地存储或 S3 兼容存储。",-1)),r.value?(l(),n("div",Rv,[i(N,{name:"sync",class:"spin"}),C[1]||(C[1]=e("span",null,"加载配置中...",-1))])):(l(),n(F,{key:1},[o(" 使用 ConfigRenderer 渲染配置字段 "),i(et,{fields:v.value,modelValue:h.value,"onUpdate:modelValue":C[0]||(C[0]=p=>h.value=p)},null,8,["fields","modelValue"]),o(" 警告提示(当选择不使用时) "),h.value.backend==="none"?(l(),n("div",Bv,[i(N,{name:"warning"}),C[2]||(C[2]=e("div",null,[e("strong",null,"注意"),e("p",null,'选择"不使用"将保留生成服务返回的原始 URL,这些 URL 可能会过期或无法访问。建议配置存储后端以确保图片长期可用。')],-1))])):o("v-if",true)],64)),o(" 操作按钮 "),e("div",qv,[i(z,{type:"primary",loading:t.saving,disabled:r.value,onClick:x},{default:S(()=>[...C[3]||(C[3]=[A(" 下一步 ",-1)])]),_:1},8,["loading","disabled"])])])}}}),Kv=ve(Hv,[["__scopeId","data-v-9aeaae19"]]),Jv={class:"setup-auth"},Gv={class:"config-panel"},Wv={class:"form-row"},Zv={class:"field-container"},Yv={class:"verify-section"},Xv={class:"verify-card"},Qv={class:"code-display"},ep={class:"code-value"},tp={class:"code-meta"},sp={class:"step-actions"},lp=oe({__name:"SetupAuth",props:{saving:{type:Boolean}},emits:["complete","skip"],setup(t,{emit:a}){const s=a,u=w(null),r=w(false),v=w(""),h=w(0),T=w(null);let x=null,_=null;const C=async()=>{try{const m=await we.status();m.boundUid&&(u.value=m.boundUid,T.value=m.boundUid)}catch(m){console.error("Failed to load status:",m)}},N=async()=>{if(z&&clearTimeout(z),!!u.value)try{r.value=true;const m=await we.generateVerifyCode(u.value);v.value=m.code,h.value=m.expiresIn,Q.success("验证码已生成,请在聊天平台完成验证")}catch(m){Q.error("生成验证码失败: "+(m instanceof Error?m.message:"未知错误"))}finally{r.value=false}};let z=null;const p=()=>{z&&clearTimeout(z),v.value="",u.value&&(z=window.setTimeout(N,1e3))},U=async()=>{if(!u.value){Q.warning("请输入用户 ID");return}try{await we.bindUid(u.value),Q.success("配置已保存"),s("complete")}catch(m){Q.error("保存失败: "+(m instanceof Error?m.message:"未知错误"))}};return ye(()=>{C(),x=ms("media-luna/webui-auth/bind-request",m=>{m.uid&&(u.value=m.uid,m.code&&(v.value=m.code,h.value=m.expiresIn,Q.info("收到绑定请求,请在聊天平台完成验证")))}),_=window.setInterval(async()=>{try{const m=await we.status();if(m.boundUid){if(u.value&&m.boundUid!==u.value)return;m.boundUid!==T.value&&(u.value=m.boundUid,Q.success("检测到绑定成功!"),s("complete"),_&&clearInterval(_))}}catch{}},3e3)}),Ye(()=>{x&&x(),_&&clearInterval(_)}),(m,O)=>{const K=M("el-input-number"),L=M("k-button");return l(),n("div",Jv,[O[8]||(O[8]=e("h3",null,"用户绑定",-1)),O[9]||(O[9]=e("p",{class:"step-desc"}," 将 WebUI 与 Koishi 用户绑定。你可以直接配置用户 ID,也可以通过验证码进行验证绑定。 ",-1)),e("div",Gv,[o(" UID 输入 "),e("div",Wv,[O[3]||(O[3]=e("div",{class:"form-label"},"用户 ID (UID)",-1)),e("div",Zv,[i(K,{modelValue:u.value,"onUpdate:modelValue":O[0]||(O[0]=I=>u.value=I),min:1,controls:false,placeholder:"Koishi 用户 ID",class:"uid-input full-width",onInput:p},null,8,["modelValue"]),O[2]||(O[2]=e("div",{class:"field-desc"},[A(" 输入你的 Koishi "),e("code",null,"uid"),A(",不是原神的。 ")],-1))])]),o(" 验证码显示区域 "),e("div",Yv,[e("div",Xv,[e("div",Qv,[O[4]||(O[4]=e("div",{class:"code-label"},"验证码",-1)),e("div",ep,$(v.value),1),e("div",tp,"有效期 "+$(h.value)+" 秒",1)]),O[5]||(O[5]=e("div",{class:"verify-guide"},[e("p",null,"请在聊天平台向机器人发送以下指令完成绑定:"),e("div",{class:"command-box"},[e("code",null,"bindui")]),e("p",{class:"small-hint"},"发送指令后,请根据提示输入左侧的验证码。")],-1))])])]),e("div",sp,[i(L,{onClick:O[1]||(O[1]=I=>m.$emit("skip"))},{default:S(()=>[...O[6]||(O[6]=[A("跳过",-1)])]),_:1}),i(L,{type:"primary",loading:t.saving,onClick:U},{default:S(()=>[...O[7]||(O[7]=[A(" 保存 / 完成 ",-1)])]),_:1},8,["loading"])])])}}}),ap=ve(lp,[["__scopeId","data-v-59078dbb"]]),np={class:"setup-wizard"},op={class:"wizard-container"},ip={class:"steps-indicator"},rp={class:"step-number"},dp={key:1},up={class:"step-label"},cp={class:"wizard-content"},vp={key:"complete",class:"step-complete"},pp={class:"complete-icon"},mp=oe({__name:"SetupWizard",emits:["complete"],setup(t,{emit:a}){const s=a,u=[{id:"storage",label:"存储配置"},{id:"auth",label:"用户绑定"},{id:"complete",label:"完成"}],r=w(0),v=w(false),h=w({}),T=async()=>{v.value=true;try{await we.updateStorageConfig(h.value),Q.success("存储配置已保存"),r.value=1}catch(N){Q.error("保存失败: "+(N instanceof Error?N.message:"未知错误"))}finally{v.value=false}},x=()=>{r.value=2},_=()=>{r.value=2},C=async()=>{try{await we.complete(),s("complete")}catch{s("complete")}};return(N,z)=>{const p=M("k-icon"),U=M("k-button");return l(),n("div",np,[e("div",op,[o(" 头部 "),z[4]||(z[4]=e("div",{class:"wizard-header"},[e("h1",null,"欢迎使用 Media Luna"),e("p",null,"在开始使用前,请完成以下基础配置")],-1)),o(" 步骤指示器 "),e("div",ip,[(l(),n(F,null,ee(u,(m,O)=>e("div",{key:m.id,class:te(["step-item",{active:r.value===O,completed:r.value>O}])},[e("div",rp,[r.value>O?(l(),se(p,{key:0,name:"check"})):(l(),n("span",dp,$(O+1),1))]),e("span",up,$(m.label),1)],2)),64))]),o(" 步骤内容 "),e("div",cp,[i(Ze,{name:"fade",mode:"out-in"},{default:S(()=>[r.value===0?(l(),se(Kv,{key:"storage",modelValue:h.value,"onUpdate:modelValue":z[0]||(z[0]=m=>h.value=m),saving:v.value,onNext:T},null,8,["modelValue","saving"])):r.value===1?(l(),se(ap,{key:"auth",saving:v.value,onComplete:x,onSkip:_},null,8,["saving"])):r.value===2?(l(),n("div",vp,[e("div",pp,[i(p,{name:"check-circle"})]),z[2]||(z[2]=e("h2",null,"配置完成",-1)),z[3]||(z[3]=e("p",null,"您已完成 Media Luna 的初始设置,现在可以开始使用了。",-1)),i(U,{type:"primary",size:"large",onClick:C},{default:S(()=>[...z[1]||(z[1]=[A(" 开始使用 ",-1)])]),_:1})])):o("v-if",true)]),_:1})])])])}}}),fp=ve(mp,[["__scopeId","data-v-3931ca56"]]),gp={class:"top-nav"},_p={class:"nav-container"},yp={class:"nav-tabs",role:"tablist"},hp=["onClick","aria-selected"],bp={class:"main-content"},kp=oe({__name:"index",setup(t){const a=w("generate"),s=w(false),u=async()=>{try{const N=await we.status();s.value=N.needsSetup}catch(N){console.error("Failed to check setup status:",N),s.value=false}},r=()=>{s.value=false},v=G(()=>{switch(a.value){case"generate":return Nt;case"channels":return ti;case"presets":return Zi;case"tasks":return Ud;case"settings":return Mv;default:return Nt}}),h=N=>()=>ht("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[ht("path",{d:N})]),T=[{id:"generate",label:"生成",icon:h("M7.5 5.6L10 7 8.6 4.5 10 2 7.5 3.4 5 2 6.4 4.5 5 7zM19 2l-2.5 1.4L14 2l1.4 2.5L14 7l2.5-1.4L19 7l-1.4-2.5zm-5.6 5.4L9 12l4.4 4.6L17.8 12zM2 13l2.5 1.4L6 17l1.4-2.5L10 13 7.5 11.6 6 9l-1.4 2.5z")},{id:"channels",label:"渠道",icon:h("M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z")},{id:"presets",label:"预设",icon:h("M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z")},{id:"tasks",label:"任务",icon:h("M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z")},{id:"settings",label:"设置",icon:h("M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.488.488 0 0 0-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.58 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z")}];let x="";function _(){const N=document.querySelector(".layout-header");N&&(x=N.style.display,N.style.display="none")}function C(){const N=document.querySelector(".layout-header");N&&(N.style.display=x||"")}return ye(()=>{_(),u()}),vs(C),(N,z)=>{const p=M("k-layout");return l(),se(p,{class:"app-layout media-luna-app"},{default:S(()=>[o(" 设置向导 "),s.value?(l(),se(fp,{key:0,onComplete:r})):(l(),n(F,{key:1},[o(" 主界面 "),e("div",gp,[e("div",_p,[z[0]||(z[0]=e("div",{class:"logo-area"},[e("span",{class:"logo-text"},"MEDIA LUNA")],-1)),e("div",yp,[(l(),n(F,null,ee(T,U=>e("div",{key:U.id,class:te(["nav-tab",{active:a.value===U.id}]),onClick:m=>a.value=U.id,role:"tab","aria-selected":a.value===U.id},[(l(),se(lt(U.icon),{class:"tab-icon"})),e("span",null,$(U.label),1)],10,hp)),64))])])]),e("div",bp,[(l(),se(ps,null,[(l(),se(lt(v.value)))],1024))])],64))]),_:1})}}}),$p=ve(kp,[["__scopeId","data-v-c4fa9f13"]]),xp=t=>{t.page({name:"Media Luna",path:"/media-luna",component:$p,order:500})};export{xp as default};