koishi-plugin-media-luna 0.0.37 → 0.0.39
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.
- package/client/components/ConfigRenderer.vue +45 -7
- package/dist/index.js +2 -2
- package/dist/style.css +1 -1
- package/lib/plugins/connector-chatluna/middleware.d.ts +7 -35
- package/lib/plugins/connector-chatluna/middleware.d.ts.map +1 -1
- package/lib/plugins/connector-chatluna/middleware.js +8 -21
- package/lib/plugins/connector-chatluna/middleware.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{defineComponent as
|
|
1
|
+
import{defineComponent as ue,computed as Z,ref as $,resolveComponent as j,createElementBlock as n,openBlock as l,createElementVNode as e,createCommentVNode as o,Fragment as N,renderList as te,normalizeClass as se,toDisplayString as k,createVNode as i,withKeys as ds,withCtx as V,createStaticVNode as ct,createBlock as le,warn as us,watch as $e,unref as ne,inject as Ne,isRef as cs,getCurrentInstance as je,provide as vs,renderSlot as Xe,mergeProps as ps,Transition as Qe,withDirectives as Pe,normalizeStyle as At,vShow as De,shallowReactive as ms,onMounted as we,resolveDynamicComponent as it,withModifiers as ye,isVNode as Mt,render as kt,createTextVNode as R,onUnmounted as et,Teleport as fs,createSlots as gs,onBeforeUnmount as _s,h as $t,KeepAlive as ys}from"vue";import{send as tt,message as Q,receive as hs}from"@koishijs/client";import{isClient as vt,useEventListener as bs,useResizeObserver as ks,useTimeoutFn as $s}from"@vueuse/core";async function K(t,a){const s=await tt(t,a);if(!s.success)throw new Error(s.error||"请求失败");return s.data}const Fe={list:()=>K("media-luna/channels/list"),get:t=>K("media-luna/channels/get",{id:t}),create:t=>K("media-luna/channels/create",t),update:(t,a)=>K("media-luna/channels/update",{id:t,data:a}),delete:t=>K("media-luna/channels/delete",{id:t}),toggle:(t,a)=>K("media-luna/channels/toggle",{id:t,enabled:a}),tags:()=>K("media-luna/channels/tags"),getByTags:(t,a)=>K("media-luna/channels/by-tags",{tags:t,matchAll:a})},ze={list:t=>K("media-luna/presets/list",{enabledOnly:t}),get:t=>K("media-luna/presets/get",{id:t}),create:t=>K("media-luna/presets/create",t),update:(t,a)=>K("media-luna/presets/update",{id:t,data:a}),delete:t=>K("media-luna/presets/delete",{id:t}),toggle:(t,a)=>K("media-luna/presets/toggle",{id:t,enabled:a}),copy:t=>K("media-luna/presets/copy",{id:t}),matching:t=>K("media-luna/presets/matching",{channelId:t}),tags:()=>K("media-luna/presets/tags"),getByTags:(t,a)=>K("media-luna/presets/by-tags",{tags:t,matchAll:a})},Le={list:t=>K("media-luna/tasks/list",t),get:t=>K("media-luna/tasks/get",{id:t}),delete:t=>K("media-luna/tasks/delete",{id:t}),stats:t=>K("media-luna/tasks/stats",{channelId:t}),cleanup:t=>K("media-luna/tasks/cleanup",{days:t}),recent:(t,a)=>K("media-luna/tasks/recent",{userId:t,limit:a}),my:t=>K("media-luna/tasks/my",t)},ws={me:()=>K("media-luna/auth/me")},Ge={list:()=>K("media-luna/middlewares/list"),get:t=>K("media-luna/middlewares/get",{name:t}),update:(t,a)=>K("media-luna/middlewares/update",{name:t,data:a}),reset:t=>K("media-luna/middlewares/reset",{name:t}),executionOrder:()=>K("media-luna/middlewares/execution-order"),cardFields:()=>K("media-luna/middlewares/card-fields")},He={list:()=>K("media-luna/connectors/list"),get:t=>K("media-luna/connectors/get",{id:t}),fields:t=>K("media-luna/connectors/fields",{id:t}),schema:()=>K("media-luna/connectors/schema")},Cs={generate:t=>K("media-luna/generate",t),preview:t=>K("media-luna/generate/preview",t)},Vs={upload:(t,a,s)=>K("media-luna/cache/upload",{data:t,mime:a,filename:s}),cacheUrl:t=>K("media-luna/cache/cache-url",{url:t}),get:t=>K("media-luna/cache/get",{id:t}),read:t=>K("media-luna/cache/read",{id:t}),delete:t=>K("media-luna/cache/delete",{id:t}),stats:()=>K("media-luna/cache/stats"),clear:()=>K("media-luna/cache/clear")},wt={panels:()=>K("media-luna/settings/panels"),get:t=>K("media-luna/settings/get",{id:t}),update:(t,a)=>K("media-luna/settings/update",{id:t,config:a}),syncRemotePresets:()=>K("media-luna/presets/sync")},Se={status:()=>K("media-luna/setup/status"),getStorageFields:()=>K("media-luna/setup/storage/fields"),getStorageConfig:()=>K("media-luna/setup/storage/get"),updateStorageConfig:t=>K("media-luna/setup/storage/update",t),generateVerifyCode:t=>K("media-luna/setup/verify-code/generate",{uid:t}),verifyCode:(t,a)=>K("media-luna/setup/verify-code/verify",{code:t,uid:a}),bindUid:t=>K("media-luna/setup/bind-uid",{uid:t}),getUsers:()=>K("media-luna/setup/users"),complete:()=>K("media-luna/setup/complete")},rt={list:()=>K("media-luna/plugins/list"),get:t=>K("media-luna/plugins/get",{id:t}),updateConfig:(t,a)=>K("media-luna/plugins/update-config",{pluginId:t,config:a}),enable:t=>K("media-luna/plugins/enable",{id:t}),disable:t=>K("media-luna/plugins/disable",{id:t}),externalList:()=>K("media-luna/plugins/external/list"),externalAdd:t=>K("media-luna/plugins/external/add",{moduleName:t}),externalRemove:t=>K("media-luna/plugins/external/remove",{moduleName:t})},xs={class:"tag-filter"},Ss={class:"filter-tags"},Is=["onClick"],Os={key:0,class:"filter-input-wrapper"},Ts=ue({__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,c=a,r=Z({get:()=>s.modelValue,set:_=>{c("update:modelValue",_),c("change",_)}}),m=$(""),h=Z(()=>{const _=s.allTags.filter(w=>!s.presetTags.includes(w)).slice(0,s.maxDynamicTags);return[...s.presetTags,..._]}),S=_=>{const w=[...r.value],F=w.indexOf(_);F>=0?w.splice(F,1):w.push(_),r.value=w},x=()=>{const _=m.value.trim();_&&!r.value.includes(_)&&(r.value=[...r.value,_]),m.value=""};return(_,w)=>{const F=j("k-icon"),O=j("el-input");return l(),n("div",xs,[e("div",Ss,[(l(true),n(N,null,te(h.value,T=>(l(),n("span",{key:T,class:se(["filter-tag",{active:r.value.includes(T)}]),onClick:I=>S(T)},k(T),11,Is))),128))]),t.showInput?(l(),n("div",Os,[i(O,{modelValue:m.value,"onUpdate:modelValue":w[0]||(w[0]=T=>m.value=T),placeholder:"输入标签筛选...",size:"small",clearable:"",onKeyup:ds(x,["enter"]),class:"filter-input"},{prefix:V(()=>[i(F,{name:"search"})]),_:1},8,["modelValue"])])):o("v-if",true)])}}}),me=(t,a)=>{const s=t.__vccOpts||t;for(const[c,r]of a)s[c]=r;return s},pt=me(Ts,[["__scopeId","data-v-61b504c8"]]),Us={class:"view-mode-switch"},zs=ue({__name:"ViewModeSwitch",props:{modelValue:{}},emits:["update:modelValue"],setup(t){return(a,s)=>(l(),n("div",Us,[e("button",{class:se(["mode-btn",{active:t.modelValue==="card"}]),onClick:s[0]||(s[0]=c=>a.$emit("update:modelValue","card")),title:"卡片视图"},[...s[2]||(s[2]=[ct('<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:se(["mode-btn",{active:t.modelValue==="list"}]),onClick:s[1]||(s[1]=c=>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)]))}}),Rt=me(zs,[["__scopeId","data-v-ae3ef498"]]),Ps={class:"tag-input"},Ds=ue({__name:"TagInput",props:{modelValue:{},suggestions:{},placeholder:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=Z({get:()=>s.modelValue,set:m=>c("update:modelValue",m)});return(m,h)=>{const S=j("el-option"),x=j("el-select");return l(),n("div",Ps,[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:V(()=>[(l(true),n(N,null,te(t.suggestions,_=>(l(),le(S,{key:_,label:_,value:_},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])])}}}),jt=me(Ds,[["__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 Ns=Object.prototype.hasOwnProperty,Ct=(t,a)=>Ns.call(t,a),We=t=>typeof t=="function",Ze=t=>typeof t=="string",Bt=t=>t!==null&&typeof t=="object";var Fs=typeof global=="object"&&global&&global.Object===Object&&global,Ls=typeof self=="object"&&self&&self.Object===Object&&self,mt=Fs||Ls||Function("return this")(),Ee=mt.Symbol,qt=Object.prototype,Es=qt.hasOwnProperty,As=qt.toString,je=Ee?Ee.toStringTag:void 0;function Ms(t){var a=Es.call(t,je),s=t[je];try{t[je]=void 0;var c=true}catch{}var r=As.call(t);return c&&(a?t[je]=s:delete t[je]),r}var js=Object.prototype,Rs=js.toString;function Bs(t){return Rs.call(t)}var qs="[object Null]",Ks="[object Undefined]",Vt=Ee?Ee.toStringTag:void 0;function Kt(t){return t==null?t===void 0?Ks:qs:Vt&&Vt in Object(t)?Ms(t):Bs(t)}function Hs(t){return t!=null&&typeof t=="object"}var Js="[object Symbol]";function ft(t){return typeof t=="symbol"||Hs(t)&&Kt(t)==Js}function Gs(t,a){for(var s=-1,c=t==null?0:t.length,r=Array(c);++s<c;)r[s]=a(t[s],s,t);return r}var gt=Array.isArray,xt=Ee?Ee.prototype:void 0,St=xt?xt.toString:void 0;function Ht(t){if(typeof t=="string")return t;if(gt(t))return Gs(t,Ht)+"";if(ft(t))return St?St.call(t):"";var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function Jt(t){var a=typeof t;return t!=null&&(a=="object"||a=="function")}var Ws="[object AsyncFunction]",Zs="[object Function]",Ys="[object GeneratorFunction]",Xs="[object Proxy]";function Qs(t){if(!Jt(t))return false;var a=Kt(t);return a==Zs||a==Ys||a==Ws||a==Xs}var nt=mt["__core-js_shared__"],It=function(){var t=/[^.]+$/.exec(nt&&nt.keys&&nt.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function el(t){return!!It&&It in t}var tl=Function.prototype,sl=tl.toString;function ll(t){if(t!=null){try{return sl.call(t)}catch{}try{return t+""}catch{}}return""}var al=/[\\^$.*+?()[\]{}|]/g,nl=/^\[object .+?Constructor\]$/,ol=Function.prototype,il=Object.prototype,rl=ol.toString,dl=il.hasOwnProperty,ul=RegExp("^"+rl.call(dl).replace(al,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function cl(t){if(!Jt(t)||el(t))return false;var a=Qs(t)?ul:nl;return a.test(ll(t))}function vl(t,a){return t==null?void 0:t[a]}function Gt(t,a){var s=vl(t,a);return cl(s)?s:void 0}function pl(t,a){return t===a||t!==t&&a!==a}var ml=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,fl=/^\w*$/;function gl(t,a){if(gt(t))return false;var s=typeof t;return s=="number"||s=="symbol"||s=="boolean"||t==null||ft(t)?true:fl.test(t)||!ml.test(t)||a!=null&&t in Object(a)}var Be=Gt(Object,"create");function _l(){this.__data__=Be?Be(null):{},this.size=0}function yl(t){var a=this.has(t)&&delete this.__data__[t];return this.size-=a?1:0,a}var hl="__lodash_hash_undefined__",bl=Object.prototype,kl=bl.hasOwnProperty;function $l(t){var a=this.__data__;if(Be){var s=a[t];return s===hl?void 0:s}return kl.call(a,t)?a[t]:void 0}var wl=Object.prototype,Cl=wl.hasOwnProperty;function Vl(t){var a=this.__data__;return Be?a[t]!==void 0:Cl.call(a,t)}var xl="__lodash_hash_undefined__";function Sl(t,a){var s=this.__data__;return this.size+=this.has(t)?0:1,s[t]=Be&&a===void 0?xl:a,this}function Oe(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var c=t[a];this.set(c[0],c[1])}}Oe.prototype.clear=_l;Oe.prototype.delete=yl;Oe.prototype.get=$l;Oe.prototype.has=Vl;Oe.prototype.set=Sl;function Il(){this.__data__=[],this.size=0}function st(t,a){for(var s=t.length;s--;)if(pl(t[s][0],a))return s;return-1}var Ol=Array.prototype,Tl=Ol.splice;function Ul(t){var a=this.__data__,s=st(a,t);if(s<0)return false;var c=a.length-1;return s==c?a.pop():Tl.call(a,s,1),--this.size,true}function zl(t){var a=this.__data__,s=st(a,t);return s<0?void 0:a[s][1]}function Pl(t){return st(this.__data__,t)>-1}function Dl(t,a){var s=this.__data__,c=st(s,t);return c<0?(++this.size,s.push([t,a])):s[c][1]=a,this}function Me(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var c=t[a];this.set(c[0],c[1])}}Me.prototype.clear=Il;Me.prototype.delete=Ul;Me.prototype.get=zl;Me.prototype.has=Pl;Me.prototype.set=Dl;var Nl=Gt(mt,"Map");function Fl(){this.size=0,this.__data__={hash:new Oe,map:new(Nl||Me),string:new Oe}}function Ll(t){var a=typeof t;return a=="string"||a=="number"||a=="symbol"||a=="boolean"?t!=="__proto__":t===null}function lt(t,a){var s=t.__data__;return Ll(a)?s[typeof a=="string"?"string":"hash"]:s.map}function El(t){var a=lt(this,t).delete(t);return this.size-=a?1:0,a}function Al(t){return lt(this,t).get(t)}function Ml(t){return lt(this,t).has(t)}function jl(t,a){var s=lt(this,t),c=s.size;return s.set(t,a),this.size+=s.size==c?0:1,this}function Te(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var c=t[a];this.set(c[0],c[1])}}Te.prototype.clear=Fl;Te.prototype.delete=El;Te.prototype.get=Al;Te.prototype.has=Ml;Te.prototype.set=jl;var Rl="Expected a function";function _t(t,a){if(typeof t!="function"||a!=null&&typeof a!="function")throw new TypeError(Rl);var s=function(){var c=arguments,r=a?a.apply(this,c):c[0],p=s.cache;if(p.has(r))return p.get(r);var _=t.apply(this,c);return s.cache=p.set(r,_)||p,_};return s.cache=new(_t.Cache||Te),s}_t.Cache=Te;var Bl=500;function ql(t){var a=_t(t,function(c){return s.size===Bl&&s.clear(),c}),s=a.cache;return a}var Kl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Hl=/\\(\\)?/g,Jl=ql(function(t){var a=[];return t.charCodeAt(0)===46&&a.push(""),t.replace(Kl,function(s,c,r,p){a.push(r?p.replace(Hl,"$1"):c||s)}),a});function Gl(t){return t==null?"":Ht(t)}function Wl(t,a){return gt(t)?t:gl(t,a)?[t]:Jl(Gl(t))}function Zl(t){if(typeof t=="string"||ft(t))return t;var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function Yl(t,a){a=Wl(a,t);for(var s=0,c=a.length;t!=null&&s<c;)t=t[Zl(a[s++])];return s&&s==c?t:void 0}function Xl(t,a,s){var c=t==null?void 0:Yl(t,a);return c===void 0?s:c}function Ql(t){for(var a=-1,s=t==null?0:t.length,c={};++a<s;){var r=t[a];c[r[0]]=r[1]}return c}const ea=t=>t===void 0,qe=t=>typeof t=="number",ta=t=>typeof Element>"u"?false:t instanceof Element,sa=t=>Ze(t)?!Number.isNaN(Number(t)):false,Ot=t=>Object.keys(t);function dt(t,a="px"){if(!t)return"";if(qe(t)||sa(t))return`${t}${a}`;if(Ze(t))return t}/*! Element Plus Icons Vue v2.3.2 */var la=de({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"})]))}}),aa=la,na=de({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"})]))}}),oa=na,ia=de({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"})]))}}),ra=ia,da=de({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"})]))}}),ua=da,ca=de({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"})]))}}),va=ca;const Wt="__epPropKey",Ve=t=>t,pa=t=>Bt(t)&&!!t[Wt],Zt=(t,a)=>{if(!Bt(t)||pa(t))return t;const{values:s,required:c,default:r,type:p,validator:_}=t,S={type:p,required:!!c,validator:s||_?f=>{let w=false,N=[];if(s&&(N=Array.from(s),Ct(t,"default")&&N.push(r),w||(w=N.includes(f))),_&&(w||(w=_(f))),!w&&N.length>0){const U=[...new Set(N)].map(z=>JSON.stringify(z)).join(", ");us(`Invalid prop: validation failed${a?` for prop "${a}"`:""}. Expected one of [${U}], got value ${JSON.stringify(f)}.`)}return w}:void 0,[Wt]:true};return Ct(t,"default")&&(S.default=r),S},Ke=t=>Ql(Object.entries(t).map(([a,s])=>[a,Zt(s,a)])),ma=Ve([String,Object,Function]),fa={Close:oa},Tt={success:ua,warning:va,error:aa,info:ra},Yt=(t,a)=>(t.install=s=>{for(const c of[t,...Object.values({})])s.component(c.name,c)},t),ga=(t,a)=>(t.install=s=>{t._context=s._context,s.config.globalProperties[a]=t},t),_a={esc:"Escape"},ya=["","default","small","large"],ha=t=>t,Ut=({from:t,replacement:a,scope:s,version:c,ref:r,type:p="API"},_)=>{$e(()=>ne(_),T=>{},{immediate:true})};var ba={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 ka=t=>(a,s)=>$a(a,s,ne(t)),$a=(t,a,s)=>Xl(s,t,t).replace(/\{(\w+)\}/g,(c,r)=>{var p;return`${(p=a==null?void 0:a[r])!=null?p:`{${r}}`}`}),wa=t=>{const a=Z(()=>ne(t).name),s=cs(t)?t:$(t);return{lang:a,locale:s,t:ka(t)}},Xt=Symbol("localeContextKey"),Ca=t=>{const a=t||Ne(Xt,$());return wa(Z(()=>a.value||ba))},Je="el",Va="is-",Ie=(t,a,s,c,r)=>{let p=`${t}-${a}`;return s&&(p+=`-${s}`),c&&(p+=`__${c}`),r&&(p+=`--${r}`),p},Qt=Symbol("namespaceContextKey"),xa=t=>{const a=t||(Re()?Ne(Qt,$(Je)):$(Je));return Z(()=>ne(a)||Je)},yt=(t,a)=>{const s=xa(a);return{namespace:s,b:(u="")=>Ie(s.value,t,u,"",""),e:u=>u?Ie(s.value,t,"",u,""):"",m:u=>u?Ie(s.value,t,"","",u):"",be:(u,O)=>u&&O?Ie(s.value,t,u,O,""):"",em:(u,O)=>u&&O?Ie(s.value,t,"",u,O):"",bm:(u,O)=>u&&O?Ie(s.value,t,u,"",O):"",bem:(u,O,K)=>u&&O&&K?Ie(s.value,t,u,O,K):"",is:(u,...O)=>{const K=O.length>=1?O[0]:true;return u&&K?`${Va}${u}`:""},cssVar:u=>{const O={};for(const K in u)u[K]&&(O[`--${s.value}-${K}`]=u[K]);return O},cssVarName:u=>`--${s.value}-${u}`,cssVarBlock:u=>{const O={};for(const K in u)u[K]&&(O[`--${s.value}-${t}-${K}`]=u[K]);return O},cssVarBlockName:u=>`--${s.value}-${t}-${u}`}},zt={current:0},Pt=$(0),es=2e3,Dt=Symbol("elZIndexContextKey"),ts=Symbol("zIndexContextKey"),Sa=t=>{const a=Re()?Ne(Dt,zt):zt,s=t||(Re()?Ne(ts,void 0):void 0),c=Z(()=>{const _=ne(s);return qe(_)?_:es}),r=Z(()=>c.value+Pt.value),p=()=>(a.current++,Pt.value=a.current,r.value);return!vt&&Ne(Dt),{initialZIndex:c,currentZIndex:r,nextZIndex:p}},Ia=Zt({type:String,values:ya,required:false}),Oa=Symbol("size"),Ta=Symbol("emptyValuesContextKey"),Ua=Ke({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:t=>We(t)?!t():!t}}),ss=Symbol(),Ye=$();function ls(t,a=void 0){return Re()?Ne(ss,Ye):Ye}function za(t,a){const s=ls(),c=yt(t,Z(()=>{var T;return((T=s.value)==null?void 0:T.namespace)||Je})),r=Ca(Z(()=>{var T;return(T=s.value)==null?void 0:T.locale})),p=Sa(Z(()=>{var T;return((T=s.value)==null?void 0:T.zIndex)||es})),_=Z(()=>{var T;return ne(a)||((T=s.value)==null?void 0:T.size)||""});return as(Z(()=>ne(s)||{})),{ns:c,locale:r,zIndex:p,size:_}}const as=(t,a,s=false)=>{var c;const r=!!Re(),p=r?ls():void 0,_=(c=void 0)!=null?c:r?vs:void 0;if(!_)return;const T=Z(()=>{const S=ne(t);return p!=null&&p.value?Pa(p.value,S):S});return _(ss,T),_(Xt,Z(()=>T.value.locale)),_(Qt,Z(()=>T.value.namespace)),_(ts,Z(()=>T.value.zIndex)),_(Oa,{size:Z(()=>T.value.size||"")}),_(Ta,Z(()=>({emptyValues:T.value.emptyValues,valueOnClear:T.value.valueOnClear}))),(s||!Ye.value)&&(Ye.value=T.value),T},Pa=(t,a)=>{const s=[...new Set([...Ot(t),...Ot(a)])],c={};for(const r of s)c[r]=a[r]!==void 0?a[r]:t[r];return c},Da=Ke({a11y:{type:Boolean,default:true},locale:{type:Ve(Object)},size:Ia,button:{type:Ve(Object)},experimentalFeatures:{type:Ve(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:Ve(Object)},zIndex:Number,namespace:{type:String,default:"el"},...Ua}),ut={};de({name:"ElConfigProvider",props:Da,setup(t,{slots:a}){$e(()=>t.message,c=>{Object.assign(ut,c??{})},{immediate:true,deep:true});const s=as(t);return()=>Xe(a,"default",{config:s==null?void 0:s.value})}});var ht=(t,a)=>{const s=t.__vccOpts||t;for(const[c,r]of a)s[c]=r;return s};const Na=Ke({size:{type:Ve([Number,String])},color:{type:String}}),Fa=de({name:"ElIcon",inheritAttrs:false}),La=de({...Fa,props:Na,setup(t){const a=t,s=yt("icon"),c=Z(()=>{const{size:r,color:p}=a;return!r&&!p?{}:{fontSize:ea(r)?void 0:dt(r),"--color":p}});return(r,p)=>(l(),n("i",ps({class:ne(s).b(),style:ne(c)},r.$attrs),[Xe(r.$slots,"default")],16))}});var Ea=ht(La,[["__file","icon.vue"]]);const Nt=Yt(Ea),Aa=Ke({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:Ve([String,Object,Array])},badgeStyle:{type:Ve([String,Object,Array])},offset:{type:Ve(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),Ma=["textContent"],ja=de({name:"ElBadge"}),Ra=de({...ja,props:Aa,setup(t,{expose:a}){const s=t,c=yt("badge"),r=Z(()=>s.isDot?"":qe(s.value)&&qe(s.max)?s.max<s.value?`${s.max}+`:s.value===0&&!s.showZero?"":`${s.value}`:`${s.value}`),p=Z(()=>{var _,T,S,f,w,N;return[{backgroundColor:s.color,marginRight:dt(-((T=(_=s.offset)==null?void 0:_[0])!=null?T:0)),marginTop:dt((f=(S=s.offset)==null?void 0:S[1])!=null?f:0)},(w=s.dotStyle)!=null?w:{},(N=s.badgeStyle)!=null?N:{}]});return Ut({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},Z(()=>!!s.dotStyle)),Ut({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},Z(()=>!!s.dotClass)),a({content:r}),(_,T)=>(l(),n("div",{class:se(ne(c).b())},[Xe(_.$slots,"default"),i(Qe,{name:`${ne(c).namespace.value}-zoom-in-center`,persisted:""},{default:x(()=>[Pe(e("sup",{class:se([ne(c).e("content"),ne(c).em("content",_.type),ne(c).is("fixed",!!_.$slots.default),ne(c).is("dot",_.isDot),_.dotClass,_.badgeClass]),style:At(ne(p)),textContent:k(ne(r))},null,14,Ma),[[De,!_.hidden&&(ne(r)||_.isDot)]])]),_:1},8,["name"])],2))}});var Ba=ht(Ra,[["__file","badge.vue"]]);const qa=Yt(Ba),ns=["success","info","warning","error"],ke=ha({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:vt?document.body:void 0}),Ka=Ke({customClass:{type:String,default:ke.customClass},center:{type:Boolean,default:ke.center},dangerouslyUseHTMLString:{type:Boolean,default:ke.dangerouslyUseHTMLString},duration:{type:Number,default:ke.duration},icon:{type:ma,default:ke.icon},id:{type:String,default:ke.id},message:{type:Ve([String,Object,Function]),default:ke.message},onClose:{type:Ve(Function),default:ke.onClose},showClose:{type:Boolean,default:ke.showClose},type:{type:String,values:ns,default:ke.type},plain:{type:Boolean,default:ke.plain},offset:{type:Number,default:ke.offset},zIndex:{type:Number,default:ke.zIndex},grouping:{type:Boolean,default:ke.grouping},repeatNum:{type:Number,default:ke.repeatNum}}),Ha={destroy:()=>true},xe=ms([]),Ja=t=>{const a=xe.findIndex(r=>r.id===t),s=xe[a];let c;return a>0&&(c=xe[a-1]),{current:s,prev:c}},Ga=t=>{const{prev:a}=Ja(t);return a?a.vm.exposed.bottom.value:0},Wa=(t,a)=>xe.findIndex(c=>c.id===t)>0?16:a,Za=["id"],Ya=["innerHTML"],Xa=de({name:"ElMessage"}),Qa=de({...Xa,props:Ka,emits:Ha,setup(t,{expose:a}){const s=t,{Close:c}=fa,{ns:r,zIndex:p}=za("message"),{currentZIndex:_,nextZIndex:T}=p,S=$(),f=$(false),w=$(0);let N;const U=Z(()=>s.type?s.type==="error"?"danger":s.type:"info"),z=Z(()=>{const X=s.type;return{[r.bm("icon",X)]:X&&Tt[X]}}),I=Z(()=>s.icon||Tt[s.type]||""),u=Z(()=>Ga(s.id)),O=Z(()=>Wa(s.id,s.offset)+u.value),K=Z(()=>w.value+O.value),L=Z(()=>({top:`${O.value}px`,zIndex:_.value}));function V(){s.duration!==0&&({stop:N}=$s(()=>{h()},s.duration))}function C(){N==null||N()}function h(){f.value=false}function W({code:X}){X===_a.esc&&h()}return we(()=>{V(),T(),f.value=true}),$e(()=>s.repeatNum,()=>{C(),V()}),bs(document,"keydown",W),ks(S,()=>{w.value=S.value.getBoundingClientRect().height}),a({visible:f,bottom:K,close:h}),(X,pe)=>(l(),le(Qe,{name:ne(r).b("fade"),onBeforeLeave:X.onClose,onAfterLeave:pe[0]||(pe[0]=b=>X.$emit("destroy")),persisted:""},{default:x(()=>[Pe(e("div",{id:X.id,ref_key:"messageRef",ref:S,class:se([ne(r).b(),{[ne(r).m(X.type)]:X.type},ne(r).is("center",X.center),ne(r).is("closable",X.showClose),ne(r).is("plain",X.plain),X.customClass]),style:At(ne(L)),role:"alert",onMouseenter:C,onMouseleave:V},[X.repeatNum>1?(l(),le(ne(qa),{key:0,value:X.repeatNum,type:ne(U),class:se(ne(r).e("badge"))},null,8,["value","type","class"])):o("v-if",true),ne(I)?(l(),le(ne(Nt),{key:1,class:se([ne(r).e("icon"),ne(z)])},{default:x(()=>[(l(),le(it(ne(I))))]),_:1},8,["class"])):o("v-if",true),Xe(X.$slots,"default",{},()=>[X.dangerouslyUseHTMLString?(l(),n(P,{key:1},[o(" Caution here, message could've been compromised, never use user's input as message "),e("p",{class:se(ne(r).e("content")),innerHTML:X.message},null,10,Ya)],2112)):(l(),n("p",{key:0,class:se(ne(r).e("content"))},k(X.message),3))]),X.showClose?(l(),le(ne(Nt),{key:2,class:se(ne(r).e("closeBtn")),onClick:ye(h,["stop"])},{default:x(()=>[i(ne(c))]),_:1},8,["class","onClick"])):o("v-if",true)],46,Za),[[De,f.value]])]),_:3},8,["name","onBeforeLeave"]))}});var en=ht(Qa,[["__file","message.vue"]]);let tn=1;const os=t=>{const a=!t||Ze(t)||Mt(t)||We(t)?{message:t}:t,s={...ke,...a};if(!s.appendTo)s.appendTo=document.body;else if(Ze(s.appendTo)){let c=document.querySelector(s.appendTo);ta(c)||(c=document.body),s.appendTo=c}return s},sn=t=>{const a=xe.indexOf(t);if(a===-1)return;xe.splice(a,1);const{handler:s}=t;s.close()},ln=({appendTo:t,...a},s)=>{const c=`message_${tn++}`,r=a.onClose,p=document.createElement("div"),_={...a,id:c,onClose:()=>{r==null||r(),sn(w)},onDestroy:()=>{kt(null,p)}},T=i(en,_,We(_.message)||Mt(_.message)?{default:We(_.message)?_.message:()=>_.message}:null);T.appContext=s||Ae._context,kt(T,p),t.appendChild(p.firstElementChild);const S=T.component,w={id:c,vnode:T,vm:S,handler:{close:()=>{S.exposed.visible.value=false}},props:T.component.props};return w},Ae=(t={},a)=>{if(!vt)return{close:()=>{}};if(qe(ut.max)&&xe.length>=ut.max)return{close:()=>{}};const s=os(t);if(s.grouping&&xe.length){const r=xe.find(({vnode:p})=>{var _;return((_=p.props)==null?void 0:_.message)===s.message});if(r)return r.props.repeatNum+=1,r.props.type=s.type,r.handler}const c=ln(s,a);return xe.push(c),c.handler};ns.forEach(t=>{Ae[t]=(a={},s)=>{const c=os(a);return Ae({...c,type:t},s)}});function an(t){for(const a of xe)(!t||t===a.props.type)&&a.handler.close()}Ae.closeAll=an;Ae._context=null;const Ue=ga(Ae,"$message"),nn={class:"table-field-editor"},on={class:"toolbar"},rn={class:"toolbar-left"},dn={class:"toolbar-right"},un={class:"table-wrapper"},cn={class:"data-table"},vn={key:0,class:"col-check"},pn={key:0,class:"col-check"},mn={class:"col-op"},fn=["colspan"],gn={class:"add-hint"},_n={key:0,class:"table-footer"},yn={class:"import-mode"},hn={class:"presets-header"},bn={class:"sel-count"},kn={class:"presets-list"},$n=["onClick"],wn={class:"p-alias"},Cn={class:"p-desc"},Vn=de({__name:"TableFieldEditor",props:{columns:{},modelValue:{default:()=>[]},tableConfig:{},presets:{default:()=>[]}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=Z({get:()=>s.modelValue||[],set:D=>c("update:modelValue",D)}),p=$([]),_=Z(()=>r.value.length>0&&p.value.length===r.value.length),T=Z(()=>p.value.length>0&&p.value.length<r.value.length),S=Z(()=>{var m;let D=s.columns.length+1;return((m=s.tableConfig)==null?void 0:m.enableSelection)!==false&&D++,D}),f=$(false),w=$(""),N=$("append"),U=$(false),z=$([]),I=$(""),u=Z(()=>{const D=new Set;for(const m of r.value)m.alias&&D.add(m.alias.toLowerCase());return D}),O=Z(()=>{if(!I.value)return s.presets;const D=I.value.toLowerCase();return s.presets.filter(m=>{var d,v,A;return((d=m.alias)==null?void 0:d.toLowerCase().includes(D))||((v=m.description)==null?void 0:v.toLowerCase().includes(D))||((A=m.repoId)==null?void 0:A.toLowerCase().includes(D))})});function K(){const D={};for(const m of s.columns)D[m.key]=m.type==="boolean"?false:m.type==="number"?void 0:"";c("update:modelValue",[...r.value,D])}function L(D){const m=[...r.value];m.splice(D,1),c("update:modelValue",m),p.value=p.value.filter(d=>d!==D).map(d=>d>D?d-1:d)}function V(D,m,d){const v=[...r.value];v[D]={...v[D],[m]:d},c("update:modelValue",v)}function C(D){const m=p.value.indexOf(D);m>=0?p.value.splice(m,1):p.value.push(D)}function h(D){p.value=D?r.value.map((m,d)=>d):[]}function W(){if(p.value.length===0)return;const D=new Set(p.value);c("update:modelValue",r.value.filter((m,d)=>!D.has(d))),Ue.success(`已删除 ${D.size} 条`),p.value=[]}function X(){const D=new Blob([JSON.stringify(r.value,null,2)],{type:"application/json"}),m=URL.createObjectURL(D),d=document.createElement("a");d.href=m,d.download="data.json",d.click(),URL.revokeObjectURL(m),Ue.success("导出成功")}function pe(){try{const D=JSON.parse(w.value);if(!Array.isArray(D)){Ue.error("需要 JSON 数组");return}const m=D.map(d=>{const v={};for(const A of s.columns)v[A.key]=d[A.key]??(A.key==="repoId"&&d.name?d.name:"");return v});c("update:modelValue",N.value==="replace"?m:[...r.value,...m]),Ue.success(`已导入 ${m.length} 条`),f.value=false,w.value=""}catch{Ue.error("JSON 解析失败")}}function b(){z.value=O.value.filter(D=>{var m;return!u.value.has((m=D.alias)==null?void 0:m.toLowerCase())}).map(D=>D.alias)}function F(D){if(u.value.has(D==null?void 0:D.toLowerCase()))return;const m=z.value.indexOf(D);m>=0?z.value.splice(m,1):z.value.push(D)}function R(){const m=s.presets.filter(d=>z.value.includes(d.alias)).map(d=>{const v={};for(const A of s.columns)v[A.key]=d[A.key]??"";return v});c("update:modelValue",[...r.value,...m]),Ue.success(`已导入 ${m.length} 条`),U.value=false,z.value=[]}return $e(U,D=>{D&&(z.value=[],I.value="")}),(D,m)=>{var B,g,y,G,oe;const d=j("k-icon"),v=j("el-button"),A=j("el-checkbox"),ae=j("el-input"),J=j("el-input-number"),E=j("el-switch"),Q=j("el-option"),ie=j("el-select"),he=j("el-radio"),ve=j("el-radio-group"),ge=j("el-dialog"),fe=j("el-tag");return l(),n("div",nn,[o(" 工具栏 "),e("div",on,[e("div",rn,[i(v,{type:"primary",size:"small",onClick:K},{default:x(()=>[i(d,{name:"add"}),m[10]||(m[10]=M(" 添加 ",-1))]),_:1}),(B=t.tableConfig)!=null&&B.enableBatchDelete&&p.value.length>0?(l(),le(v,{key:0,type:"danger",size:"small",onClick:W},{default:x(()=>[M(" 删除选中 ("+k(p.value.length)+") ",1)]),_:1})):o("v-if",true)]),e("div",dn,[((g=t.presets)==null?void 0:g.length)>0?(l(),le(v,{key:0,size:"small",onClick:m[0]||(m[0]=Y=>U.value=true)},{default:x(()=>[...m[11]||(m[11]=[M(" 内置预设 ",-1)])]),_:1})):o("v-if",true),((y=t.tableConfig)==null?void 0:y.enableImport)!==false?(l(),le(v,{key:1,size:"small",onClick:m[1]||(m[1]=Y=>f.value=true)},{default:x(()=>[...m[12]||(m[12]=[M(" 导入 ",-1)])]),_:1})):o("v-if",true),((G=t.tableConfig)==null?void 0:G.enableExport)!==false?(l(),le(v,{key:2,size:"small",onClick:X},{default:x(()=>[...m[13]||(m[13]=[M(" 导出 ",-1)])]),_:1})):o("v-if",true)])]),o(" 数据表格 "),e("div",un,[e("table",cn,[e("thead",null,[e("tr",null,[((oe=t.tableConfig)==null?void 0:oe.enableSelection)!==false?(l(),n("th",vn,[i(A,{"model-value":_.value,indeterminate:T.value,onChange:h,size:"small"},null,8,["model-value","indeterminate"])])):o("v-if",true),(l(true),n(P,null,te(t.columns,Y=>(l(),n("th",{key:Y.key,class:se(["col-"+Y.key,{required:Y.required}])},k(Y.label),3))),128)),m[14]||(m[14]=e("th",{class:"col-op"},"操作",-1))])]),e("tbody",null,[(l(true),n(P,null,te(r.value,(Y,_e)=>{var Ce;return l(),n("tr",{key:_e,class:se({selected:p.value.includes(_e)})},[((Ce=t.tableConfig)==null?void 0:Ce.enableSelection)!==false?(l(),n("td",pn,[i(A,{"model-value":p.value.includes(_e),onChange:ce=>C(_e),size:"small"},null,8,["model-value","onChange"])])):o("v-if",true),(l(true),n(P,null,te(t.columns,ce=>(l(),n("td",{key:ce.key,class:se("col-"+ce.key)},[ce.type==="text"?(l(),le(ae,{key:0,"model-value":Y[ce.key],"onUpdate:modelValue":be=>V(_e,ce.key,be),placeholder:ce.placeholder,size:"small"},null,8,["model-value","onUpdate:modelValue","placeholder"])):ce.type==="number"?(l(),le(J,{key:1,"model-value":Y[ce.key],"onUpdate:modelValue":be=>V(_e,ce.key,be),size:"small",controls:false,class:"num-input"},null,8,["model-value","onUpdate:modelValue"])):ce.type==="boolean"?(l(),le(E,{key:2,"model-value":Y[ce.key],"onUpdate:modelValue":be=>V(_e,ce.key,be),size:"small"},null,8,["model-value","onUpdate:modelValue"])):ce.type==="select"?(l(),le(ie,{key:3,"model-value":Y[ce.key],"onUpdate:modelValue":be=>V(_e,ce.key,be),placeholder:ce.placeholder||"请选择",size:"small"},{default:x(()=>[(l(true),n(P,null,te(ce.options,be=>(l(),le(Q,{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",mn,[i(v,{type:"danger",size:"small",link:"",onClick:ce=>L(_e)},{default:x(()=>[...m[15]||(m[15]=[M(" 删除 ",-1)])]),_:1},8,["onClick"])])],2)}),128)),o(" 添加行 "),e("tr",{class:"add-row",onClick:K},[e("td",{colspan:S.value,class:"add-cell"},[e("span",gn,[i(d,{name:"add"}),m[16]||(m[16]=M(" 点击添加一行 ",-1))])],8,fn)])])])]),o(" 底部统计 "),r.value.length>0?(l(),n("div",_n," 共 "+k(r.value.length)+" 条 ",1)):o("v-if",true),o(" 导入对话框 "),i(ge,{modelValue:f.value,"onUpdate:modelValue":m[5]||(m[5]=Y=>f.value=Y),title:"导入数据",width:"550px","close-on-click-modal":false},{footer:x(()=>[i(v,{onClick:m[4]||(m[4]=Y=>f.value=false)},{default:x(()=>[...m[19]||(m[19]=[M("取消",-1)])]),_:1}),i(v,{type:"primary",onClick:pe},{default:x(()=>[...m[20]||(m[20]=[M("导入",-1)])]),_:1})]),default:x(()=>[m[21]||(m[21]=e("p",{class:"dialog-tip"},"粘贴 JSON 数组格式数据:",-1)),i(ae,{modelValue:w.value,"onUpdate:modelValue":m[2]||(m[2]=Y=>w.value=Y),type:"textarea",rows:10,placeholder:'[{"alias": "xxx", "repoId": "xxx", ...}]'},null,8,["modelValue"]),e("div",yn,[i(ve,{modelValue:N.value,"onUpdate:modelValue":m[3]||(m[3]=Y=>N.value=Y)},{default:x(()=>[i(he,{value:"append"},{default:x(()=>[...m[17]||(m[17]=[M("追加",-1)])]),_:1}),i(he,{value:"replace"},{default:x(()=>[...m[18]||(m[18]=[M("替换",-1)])]),_:1})]),_:1},8,["modelValue"])])]),_:1},8,["modelValue"]),o(" 预设对话框 "),i(ge,{modelValue:U.value,"onUpdate:modelValue":m[9]||(m[9]=Y=>U.value=Y),title:"内置预设",width:"600px","close-on-click-modal":false},{footer:x(()=>[i(v,{onClick:m[8]||(m[8]=Y=>U.value=false)},{default:x(()=>[...m[25]||(m[25]=[M("取消",-1)])]),_:1}),i(v,{type:"primary",onClick:R,disabled:z.value.length===0},{default:x(()=>[M(" 导入 ("+k(z.value.length)+") ",1)]),_:1},8,["disabled"])]),default:x(()=>[e("div",hn,[i(ae,{modelValue:I.value,"onUpdate:modelValue":m[6]||(m[6]=Y=>I.value=Y),placeholder:"搜索...",size:"small",clearable:"",class:"search-input"},null,8,["modelValue"]),i(v,{size:"small",onClick:b},{default:x(()=>[...m[22]||(m[22]=[M("全选",-1)])]),_:1}),i(v,{size:"small",onClick:m[7]||(m[7]=Y=>z.value=[])},{default:x(()=>[...m[23]||(m[23]=[M("清空",-1)])]),_:1}),e("span",bn,"已选 "+k(z.value.length),1)]),e("div",kn,[(l(true),n(P,null,te(O.value,Y=>{var _e,Ce,ce;return l(),n("div",{key:Y.alias,class:se(["preset-row",{selected:z.value.includes(Y.alias),disabled:u.value.has((_e=Y.alias)==null?void 0:_e.toLowerCase())}]),onClick:be=>F(Y.alias)},[i(A,{"model-value":z.value.includes(Y.alias),disabled:u.value.has((Ce=Y.alias)==null?void 0:Ce.toLowerCase()),size:"small"},null,8,["model-value","disabled"]),e("span",wn,k(Y.alias),1),e("span",Cn,k(Y.description||Y.repoId),1),u.value.has((ce=Y.alias)==null?void 0:ce.toLowerCase())?(l(),le(fe,{key:0,size:"small",type:"info"},{default:x(()=>[...m[24]||(m[24]=[M("已有",-1)])]),_:1})):o("v-if",true)],10,$n)}),128))])]),_:1},8,["modelValue"])])}}}),xn=me(Vn,[["__scopeId","data-v-3cee27e6"]]),Sn={class:"config-renderer"},In={key:0,class:"form-row"},On={class:"field-container"},Tn={key:8,class:"field-desc"},Un=de({__name:"ConfigRenderer",props:{fields:{},modelValue:{},clearable:{type:Boolean,default:false},presetsMap:{default:()=>({})}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=$({}),p=$({}),_=(L,V)=>{if(!V||Object.keys(V).length===0)return L;const C=Object.keys(V).sort().map(h=>`${h}=${V[h]}`).join("&");return`${L}?${C}`},T=async(L,V)=>{const C=_(L,V);if(!(r.value[C]||p.value[C])){p.value[C]=true;try{const h=await tt(L,V);h!=null&&h.success&&Array.isArray(h.data)?r.value[C]=h.data:r.value[C]=[]}catch(h){console.error(`Failed to fetch options from ${L}:`,h),r.value[C]=[]}finally{p.value[C]=false}}},S=L=>{if(!L.dependsOn)return;const V=s.modelValue[L.dependsOn];return V==null||V===""?void 0:{[L.dependsOn.includes(".")?L.dependsOn.split(".").pop():L.dependsOn]:V}},f=L=>{if(!L.optionsSource)return"";const V=S(L);return _(L.optionsSource,V)},w=L=>{const V=f(L);return V?r.value[V]||[]:[]},N=L=>{const V=f(L);return V&&p.value[V]||false},U=L=>{if(L.type!=="select-remote"||!L.optionsSource)return;const V=S(L);T(L.optionsSource,V)};we(()=>{for(const L of s.fields)U(L)}),$e(()=>s.modelValue,(L,V)=>{for(const C of s.fields)if(C.type==="select-remote"&&C.dependsOn&&C.optionsSource){const h=L[C.dependsOn],W=V==null?void 0:V[C.dependsOn];h!==W&&U(C)}},{deep:true});const z=L=>s.modelValue[L],I=(L,V)=>{const C={...s.modelValue,[L]:V};c("update:modelValue",C)},u=(L,V=new Set)=>{if(!L.showWhen)return true;const{field:C,value:h}=L.showWhen;if(V.has(L.key)||(V.add(L.key),s.modelValue[C]!==h))return false;const W=s.fields.find(X=>X.key===C);return W?u(W,V):true},O=L=>{const V=s.modelValue[L];return Array.isArray(V)?V:[]},K=L=>{var V;return L?((V=s.presetsMap)==null?void 0:V[L])||[]:[]};return(L,V)=>{const C=j("el-switch"),h=j("el-option"),W=j("el-select"),X=j("el-input-number"),pe=j("el-input");return l(),n("div",Sn,[(l(true),n(P,null,te(t.fields,b=>{var F;return l(),n(P,{key:b.key},[u(b)?(l(),n("div",In,[e("div",{class:se(["form-label",{required:b.required}])},k(b.label),3),e("div",On,[o(" Boolean 类型 "),b.type==="boolean"?(l(),le(C,{key:0,"model-value":z(b.key),"onUpdate:modelValue":R=>I(b.key,R)},null,8,["model-value","onUpdate:modelValue"])):b.type==="select"?(l(),n(P,{key:1},[o(" Select 类型 "),i(W,{"model-value":z(b.key),"onUpdate:modelValue":R=>I(b.key,R),placeholder:b.placeholder||"请选择",clearable:t.clearable,style:{width:"100%"}},{default:x(()=>[(l(true),n(P,null,te(b.options,R=>(l(),le(h,{key:String(R.value),label:R.label,value:R.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)):b.type==="select-remote"?(l(),n(P,{key:2},[o(" Select Remote 类型(远程获取选项) "),i(W,{"model-value":z(b.key),"onUpdate:modelValue":R=>I(b.key,R),placeholder:b.placeholder||"请选择",clearable:t.clearable,loading:N(b),filterable:"",style:{width:"100%"}},{default:x(()=>[(l(true),n(P,null,te(w(b),R=>(l(),le(h,{key:String(R.value),label:R.label,value:R.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable","loading"])],64)):b.type==="number"?(l(),n(P,{key:3},[o(" Number 类型 "),i(X,{"model-value":z(b.key),"onUpdate:modelValue":R=>I(b.key,R),placeholder:b.placeholder,controls:true},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):b.type==="textarea"?(l(),n(P,{key:4},[o(" Textarea 类型 "),i(pe,{"model-value":z(b.key),"onUpdate:modelValue":R=>I(b.key,R),type:"textarea",rows:4,placeholder:b.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):b.type==="table"&&b.columns?(l(),n(P,{key:5},[o(" Table 类型(数组对象编辑) "),i(xn,{columns:b.columns,"model-value":O(b.key),"onUpdate:modelValue":R=>I(b.key,R),"table-config":b.tableConfig,presets:K((F=b.tableConfig)==null?void 0:F.presetsSource)},null,8,["columns","model-value","onUpdate:modelValue","table-config","presets"])],64)):b.type==="password"?(l(),n(P,{key:6},[o(" Password 类型 "),i(pe,{"model-value":z(b.key),"onUpdate:modelValue":R=>I(b.key,R),type:"password","show-password":"",placeholder:b.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(P,{key:7},[o(" Text/String 类型 (默认) "),i(pe,{"model-value":z(b.key),"onUpdate:modelValue":R=>I(b.key,R),placeholder:b.placeholder,clearable:t.clearable},null,8,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)),o(" 字段描述 "),b.description?(l(),n("div",Tn,k(b.description),1)):o("v-if",true)])])):o("v-if",true)],64)}),128))])}}}),at=me(Un,[["__scopeId","data-v-1d59c346"]]),zn={class:"dialog-layout"},Pn={class:"tab-nav"},Dn=["onClick"],Nn={key:0,class:"tab-badge"},Fn={class:"tab-content"},Ln={class:"content-section"},En={class:"form-group"},An={class:"form-row"},Mn={class:"form-group flex-1"},jn={class:"form-group"},Rn={class:"switch-wrapper"},Bn={class:"switch-label"},qn={class:"form-group"},Kn={class:"section-divider"},Hn={class:"content-section"},Jn={class:"override-hint-bar"},Gn={class:"pipeline-flow"},Wn={class:"phase-icon"},Zn={class:"phase-info"},Yn={class:"phase-name"},Xn={class:"phase-desc"},Qn={class:"phase-badge"},eo={key:0,class:"phase-middlewares"},to={class:"mw-card"},so={class:"mw-content"},lo={class:"mw-name"},ao={class:"mw-desc"},no={key:2,class:"phase-connector"},oo={class:"connector-arrow"},io={class:"content-section"},ro={class:"override-hint-bar"},uo={key:0,class:"plugins-override-list"},co=["onClick"],vo={class:"plugin-info"},po={class:"plugin-name"},mo={key:0,class:"override-badge"},fo={class:"plugin-actions"},go={class:"plugin-config-fields"},_o={key:0,class:"override-field-row"},yo={class:"field-label"},ho={class:"field-input"},bo={key:0,class:"field-hint"},ko={key:1,class:"empty-hint"},$o={class:"dialog-footer"},wo=de({__name:"ChannelConfigDialog",props:{modelValue:{type:Boolean},channel:{default:null}},emits:["update:modelValue","saved"],setup(t,{emit:a}){const s=t,c=a,r=Z({get:()=>s.modelValue,set:g=>c("update:modelValue",g)}),p=Z(()=>{var g;return!!((g=s.channel)!=null&&g.id)}),_=$("basic"),T=$(false),S=$(new Set),f=$([]),w=$({}),N=$([]),U=$([]),z=$({}),I=$({}),u=$({name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}),O=[{id:"basic",label:"基本信息",icon:"file-text"},{id:"middlewares",label:"中间件流程",icon:"git-branch"},{id:"plugins",label:"插件配置",icon:"puzzle"}],K=[{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"}],L={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},V=Z(()=>u.value.connectorId?w.value[u.value.connectorId]||[]:[]),C=Z(()=>{const g=f.value.find(y=>y.id===u.value.connectorId);return(g==null?void 0:g.name)||"连接器"}),h=Z(()=>O.map(g=>{let y="";return g.id==="middlewares"&&(y=String(N.value.length)),g.id==="plugins"&&W.value.length>0&&(y=String(W.value.length)),{...g,badge:y}})),W=Z(()=>U.value.filter(g=>g.configFields&&g.configFields.length>0)),X=(g,y)=>{if(!y||Object.keys(y).length===0)return g;const G=Object.keys(y).sort().map(oe=>`${oe}=${y[oe]}`).join("&");return`${g}?${G}`},pe=async(g,y)=>{const G=X(g,y);if(!(z.value[G]||I.value[G])){I.value[G]=true;try{const oe=await tt(g,y);oe!=null&&oe.success&&Array.isArray(oe.data)?z.value[G]=oe.data:z.value[G]=[]}catch(oe){console.error(`Failed to fetch options from ${g}:`,oe),z.value[G]=[]}finally{I.value[G]=false}}},b=(g,y)=>{var Ce,ce;if(!g.dependsOn)return;const G=(ce=(Ce=u.value.pluginOverrides)==null?void 0:Ce[y.id])==null?void 0:ce[g.dependsOn],oe=y.config[g.dependsOn],Y=G!==void 0?G:oe;return Y==null||Y===""?void 0:{[g.dependsOn.includes(".")?g.dependsOn.split(".").pop():g.dependsOn]:Y}},F=(g,y)=>{if(!g.optionsSource)return"";const G=b(g,y);return X(g.optionsSource,G)},R=(g,y)=>{const G=F(g,y);if(!G)return[];if(!z.value[G]&&!I.value[G]){const oe=b(g,y);pe(g.optionsSource,oe)}return z.value[G]||[]},D=g=>{if(!g.optionsSource)return false;for(const y of Object.keys(I.value))if(y.startsWith(g.optionsSource)&&I.value[y])return true;return false},m=g=>N.value.filter(y=>y.phase===g),d=(g,y)=>{var G,oe,Y;return(Y=(oe=(G=u.value.pluginOverrides)==null?void 0:G[g])==null?void 0:oe.middlewares)==null?void 0:Y[y]},v=(g,y,G)=>{u.value.pluginOverrides||(u.value.pluginOverrides={}),u.value.pluginOverrides[g]||(u.value.pluginOverrides[g]={}),u.value.pluginOverrides[g].middlewares||(u.value.pluginOverrides[g].middlewares={}),G==null?(delete u.value.pluginOverrides[g].middlewares[y],Object.keys(u.value.pluginOverrides[g].middlewares).length===0&&delete u.value.pluginOverrides[g].middlewares,Object.keys(u.value.pluginOverrides[g]).length===0&&delete u.value.pluginOverrides[g]):u.value.pluginOverrides[g].middlewares[y]=G},A=g=>{const y=d(g.configGroup||g.name,g.name);return y!==void 0?y?"active override":"override":g.enabled?"active":""},ae=(g,y)=>{var G,oe;return(oe=(G=u.value.pluginOverrides)==null?void 0:G[g])==null?void 0:oe[y]},J=(g,y,G)=>{u.value.pluginOverrides||(u.value.pluginOverrides={}),u.value.pluginOverrides[g]||(u.value.pluginOverrides[g]={}),G==null||G===""?(delete u.value.pluginOverrides[g][y],Object.keys(u.value.pluginOverrides[g]).length===0&&delete u.value.pluginOverrides[g]):u.value.pluginOverrides[g][y]=G},E=g=>{var G;const y=(G=u.value.pluginOverrides)==null?void 0:G[g];return y&&Object.keys(y).length>0},Q=g=>{u.value.pluginOverrides&&delete u.value.pluginOverrides[g]},ie=g=>{S.value.has(g)?S.value.delete(g):S.value.add(g)},he=(g,y)=>{var ce,be;if(!y.showWhen)return true;const{field:G,value:oe}=y.showWhen,Y=(be=(ce=u.value.pluginOverrides)==null?void 0:ce[g.id])==null?void 0:be[G],_e=g.config[G];return(Y!==void 0?Y:_e)===oe},ve=async g=>{if(u.value.connectorConfig={},g&&!w.value[g])try{const y=await He.fields(g);w.value[g]=y}catch(y){console.error("Failed to load connector fields:",y)}},ge=async()=>{var g;if(!u.value.name){ee.error("请输入渠道名称");return}if(!u.value.connectorId){ee.error("请选择连接器");return}T.value=true;try{p.value&&((g=s.channel)!=null&&g.id)?(await Fe.update(s.channel.id,u.value),ee.success("保存成功")):(await Fe.create(u.value),ee.success("创建成功")),c("saved"),r.value=false}catch(y){ee.error(y instanceof Error?y.message:"操作失败")}finally{T.value=false}},fe=()=>{_.value="basic",S.value.clear()},B=async()=>{try{const[g,y,G]=await Promise.all([He.list(),Ge.list(),rt.list()]);f.value=g,N.value=y,U.value=G.filter(oe=>oe.configFields&&oe.configFields.length>0||oe.middlewares&&oe.middlewares.length>0)}catch(g){console.error("Failed to load data:",g)}};return $e(()=>s.modelValue,async g=>{if(g)if(await B(),s.channel){if(u.value=JSON.parse(JSON.stringify(s.channel)),u.value.pluginOverrides||(u.value.pluginOverrides={}),u.value.connectorConfig||(u.value.connectorConfig={}),u.value.connectorId&&!w.value[u.value.connectorId])try{const y=await He.fields(u.value.connectorId);w.value[u.value.connectorId]=y}catch(y){console.error("Failed to load connector fields:",y)}for(const y of Object.keys(u.value.pluginOverrides))S.value.add(y)}else u.value={name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}}),(g,y)=>{const G=j("k-icon"),oe=j("el-input"),Y=j("el-option"),_e=j("el-select"),Ce=j("el-switch"),ce=j("k-button"),be=j("el-input-number"),is=j("el-dialog");return l(),le(is,{modelValue:r.value,"onUpdate:modelValue":y[6]||(y[6]=H=>r.value=H),title:p.value?"编辑渠道":"创建渠道",width:"800px","close-on-click-modal":false,class:"channel-config-dialog",onClosed:fe},{footer:x(()=>[e("div",$o,[i(ce,{onClick:y[5]||(y[5]=H=>r.value=false)},{default:x(()=>[...y[24]||(y[24]=[M("取消",-1)])]),_:1}),i(ce,{type:"primary",onClick:ge,loading:T.value},{default:x(()=>[M(k(p.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:x(()=>[e("div",zn,[o(" 左侧 Tab 导航 "),e("div",Pn,[(l(true),n(P,null,te(h.value,H=>(l(),n("div",{key:H.id,class:se(["tab-item",{active:_.value===H.id}]),onClick:ue=>_.value=H.id},[i(G,{name:H.icon},null,8,["name"]),e("span",null,k(H.label),1),H.badge?(l(),n("span",Nn,k(H.badge),1)):o("v-if",true)],10,Dn))),128))]),o(" 右侧内容区 "),e("div",Fn,[o(" 基本信息 "),Pe(e("div",Ln,[y[13]||(y[13]=e("div",{class:"section-header"},[e("h4",null,"基本信息"),e("p",null,"设置渠道的名称、连接器和标签")],-1)),e("div",En,[y[7]||(y[7]=e("label",{class:"form-label required"},"渠道名称",-1)),i(oe,{modelValue:u.value.name,"onUpdate:modelValue":y[0]||(y[0]=H=>u.value.name=H),placeholder:"如 OpenAI DALL-E"},null,8,["modelValue"]),y[8]||(y[8]=e("div",{class:"form-hint"},"用户可见的渠道名称,冲突时会自动添加后缀",-1))]),e("div",An,[e("div",Mn,[y[9]||(y[9]=e("label",{class:"form-label required"},"连接器",-1)),i(_e,{modelValue:u.value.connectorId,"onUpdate:modelValue":y[1]||(y[1]=H=>u.value.connectorId=H),placeholder:"选择连接器",onChange:ve,style:{width:"100%"}},{default:x(()=>[(l(true),n(P,null,te(f.value,H=>(l(),le(Y,{key:H.id,label:H.name,value:H.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",jn,[y[10]||(y[10]=e("label",{class:"form-label"},"启用状态",-1)),e("div",Rn,[i(Ce,{modelValue:u.value.enabled,"onUpdate:modelValue":y[2]||(y[2]=H=>u.value.enabled=H)},null,8,["modelValue"]),e("span",Bn,k(u.value.enabled?"启用":"禁用"),1)])])]),e("div",qn,[y[11]||(y[11]=e("label",{class:"form-label"},"标签",-1)),i(Rt,{modelValue:u.value.tags,"onUpdate:modelValue":y[3]||(y[3]=H=>u.value.tags=H),placeholder:"输入标签后按回车..."},null,8,["modelValue"]),y[12]||(y[12]=e("div",{class:"form-hint"},"用于分类和筛选渠道",-1))]),o(" 连接器配置(内嵌) "),V.value.length>0?(l(),n(P,{key:0},[e("div",Kn,[e("span",null,k(C.value)+" 配置",1)]),i(at,{fields:V.value,modelValue:u.value.connectorConfig,"onUpdate:modelValue":y[4]||(y[4]=H=>u.value.connectorConfig=H)},null,8,["fields","modelValue"])],64)):o("v-if",true)],512),[[De,_.value==="basic"]]),o(" 中间件流程 "),Pe(e("div",Hn,[y[18]||(y[18]=e("div",{class:"section-header"},[e("h4",null,"中间件流程"),e("p",null,"控制此渠道的中间件启用状态")],-1)),e("div",Jn,[i(G,{name:"info-circle"}),y[14]||(y[14]=e("span",null,"留空表示跟随全局配置",-1))]),e("div",Gn,[(l(),n(P,null,te(K,(H,ue)=>e("div",{key:H.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:se(["phase-header",H.colorClass])},[e("div",Wn,[i(G,{name:H.icon},null,8,["name"])]),e("div",Zn,[e("span",Yn,k(H.label),1),e("span",Xn,k(H.description),1)]),e("span",Qn,k(m(H.id).length),1)],2),o(" 中间件列表 "),m(H.id).length>0?(l(),n("div",eo,[(l(true),n(P,null,te(m(H.id),re=>(l(),n("div",{key:re.name,class:se(["mw-item",{"has-override":d(re.configGroup||re.name,re.name)!==void 0}])},[e("div",to,[e("div",{class:se(["mw-status",A(re)])},null,2),e("div",so,[e("span",lo,k(re.displayName),1),e("span",ao,k(re.description||L[re.category]||re.category),1)]),i(_e,{"model-value":d(re.configGroup||re.name,re.name),"onUpdate:modelValue":rs=>v(re.configGroup||re.name,re.name,rs),placeholder:re.enabled?"全局: 启用":"全局: 禁用",clearable:"",size:"small",class:"mw-switch"},{default:x(()=>[i(Y,{label:"启用",value:true}),i(Y,{label:"禁用",value:false})]),_:1},8,["model-value","onUpdate:modelValue","placeholder"])])],2))),128))])):(l(),n(P,{key:1},[o(" 空状态 "),y[15]||(y[15]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),ue<K.length-1?(l(),n("div",no,[y[16]||(y[16]=e("div",{class:"connector-line"},null,-1)),e("div",oo,[i(G,{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),[[De,_.value==="middlewares"]]),o(" 插件配置 "),Pe(e("div",io,[y[23]||(y[23]=e("div",{class:"section-header"},[e("h4",null,"插件配置覆盖"),e("p",null,"为此渠道单独配置插件参数")],-1)),e("div",ro,[i(G,{name:"info-circle"}),y[20]||(y[20]=e("span",null,"留空使用全局配置,填写后将覆盖全局设置",-1))]),W.value.length>0?(l(),n("div",uo,[(l(true),n(P,null,te(W.value,H=>(l(),n("div",{key:H.id,class:se(["plugin-override-card",{expanded:S.value.has(H.id)}])},[e("div",{class:"plugin-header",onClick:ue=>ie(H.id)},[e("div",vo,[e("span",po,k(H.name),1),E(H.id)?(l(),n("span",mo,"已覆盖")):o("v-if",true)]),e("div",fo,[E(H.id)?(l(),le(ce,{key:0,size:"mini",onClick:ye(ue=>Q(H.id),["stop"])},{default:x(()=>[...y[21]||(y[21]=[M(" 清除 ",-1)])]),_:1},8,["onClick"])):o("v-if",true),i(G,{name:S.value.has(H.id)?"chevron-up":"chevron-down"},null,8,["name"])])],8,co),Pe(e("div",go,[(l(true),n(P,null,te(H.configFields,ue=>(l(),n(P,{key:ue.key},[he(H,ue)?(l(),n("div",_o,[e("label",yo,k(ue.label),1),e("div",ho,[o(" Boolean 类型 "),ue.type==="boolean"?(l(),le(_e,{key:0,"model-value":ae(H.id,ue.key),"onUpdate:modelValue":re=>J(H.id,ue.key,re),placeholder:"使用全局配置",clearable:""},{default:x(()=>[i(Y,{label:"是",value:true}),i(Y,{label:"否",value:false})]),_:1},8,["model-value","onUpdate:modelValue"])):ue.type==="select"?(l(),n(P,{key:1},[o(" Select 类型 "),i(_e,{"model-value":ae(H.id,ue.key),"onUpdate:modelValue":re=>J(H.id,ue.key,re),placeholder:`全局: ${H.config[ue.key]??"未设置"}`,clearable:""},{default:x(()=>[(l(true),n(P,null,te(ue.options,re=>(l(),le(Y,{key:String(re.value),label:re.label,value:re.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])],64)):ue.type==="select-remote"?(l(),n(P,{key:2},[o(" Select Remote 类型 "),i(_e,{"model-value":ae(H.id,ue.key),"onUpdate:modelValue":re=>J(H.id,ue.key,re),placeholder:`全局: ${H.config[ue.key]??"未设置"}`,loading:D(ue),clearable:"",filterable:""},{default:x(()=>[(l(true),n(P,null,te(R(ue,H),re=>(l(),le(Y,{key:String(re.value),label:re.label,value:re.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","loading"])],64)):ue.type==="number"?(l(),n(P,{key:3},[o(" Number 类型 "),i(be,{"model-value":ae(H.id,ue.key),"onUpdate:modelValue":re=>J(H.id,ue.key,re),placeholder:`全局: ${H.config[ue.key]??""}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):ue.type==="textarea"?(l(),n(P,{key:4},[o(" Textarea 类型 "),i(oe,{"model-value":ae(H.id,ue.key),"onUpdate:modelValue":re=>J(H.id,ue.key,re),type:"textarea",rows:3,placeholder:`全局: ${H.config[ue.key]??"未设置"}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(P,{key:5},[o(" Text/String 类型 (默认) "),i(oe,{"model-value":ae(H.id,ue.key),"onUpdate:modelValue":re=>J(H.id,ue.key,re),placeholder:`全局: ${H.config[ue.key]??"未设置"}`,clearable:""},null,8,["model-value","onUpdate:modelValue","placeholder"])],64))]),ue.description?(l(),n("div",bo,k(ue.description),1)):o("v-if",true)])):o("v-if",true)],64))),128))],512),[[De,S.value.has(H.id)]])],2))),128))])):(l(),n("div",ko,[i(G,{name:"apps"}),y[22]||(y[22]=e("span",null,"暂无可配置的插件",-1))]))],512),[[De,_.value==="plugins"]])])])]),_:1},8,["modelValue","title"])}}}),Co=me(wo,[["__scopeId","data-v-fa356be7"]]),Vo={key:0},xo=de({__name:"LoadingState",props:{text:{default:"加载中..."},icon:{default:"sync"},size:{default:"default"}},setup(t){const a=t,s=Z(()=>`size-${a.size}`);return(c,r)=>{const p=j("k-icon");return l(),n("div",{class:se(["loading-state",s.value])},[i(p,{name:t.icon,class:"loading-icon"},null,8,["name"]),t.text?(l(),n("span",Vo,k(t.text),1)):o("v-if",true)],2)}}}),So=me(xo,[["__scopeId","data-v-99cf565d"]]),Io={class:"ml-view-container"},Oo={class:"ml-view-header"},To={class:"ml-header-left"},Uo={class:"ml-header-right"},zo={class:"ml-view-content"},Po={class:"ml-grid"},Do=["onClick"],No={class:"card-header"},Fo={class:"header-main"},Lo={class:"channel-name"},Eo={class:"header-meta"},Ao={class:"connector-badge"},Mo={key:0,class:"cost-badge"},jo={class:"card-body"},Ro={key:0,class:"field-list"},Bo={class:"field-label"},qo={class:"field-value"},Ko={key:1,class:"tags-list"},Ho={class:"ml-table-container"},Jo={class:"ml-table"},Go=["onClick"],Wo={class:"col-name"},Zo={class:"name-text"},Yo={class:"col-connector"},Xo={class:"connector-badge"},Qo={class:"col-tags"},ei={class:"tags-wrapper"},ti={key:0,class:"mini-tag more"},si={class:"col-cost"},li={key:0,class:"cost-value"},ai={class:"action-btns"},ni=de({__name:"ChannelsView",setup(t){const a=["text2img","img2img","NSFW"],s=$(false),c=$("card"),r=$([]),p=$([]),_=$([]),T=$({}),S=$(false),f=$(null),w=$([]),N=Z(()=>{const b=new Set;return r.value.forEach(F=>{(F.tags||[]).forEach(R=>b.add(R))}),Array.from(b).sort()}),U=Z(()=>w.value.length===0?r.value:r.value.filter(b=>w.value.every(F=>(b.tags||[]).includes(F)))),z=b=>{const F=p.value.find(R=>R.id===b);return F?F.name:b},I=b=>{var R;const F=p.value.find(D=>D.id===b.connectorId);return(R=F==null?void 0:F.cardFields)!=null&&R.length?F.cardFields.map(D=>{const m=F.fields.find(d=>d.key===D.key);return{key:D.key,label:D.label||(m==null?void 0:m.label)||D.key,format:D.format||"text"}}):[]},u=(b,F)=>{var D,m,d,v,A;const R=F.configGroup;switch(F.source){case"channel":if(R){const ae=(m=(D=b.pluginOverrides)==null?void 0:D[R])==null?void 0:m[F.key];if(ae!==void 0)return ae}return b[F.key];case"connectorConfig":return(d=b.connectorConfig)==null?void 0:d[F.key];case"pluginOverride":return R?(A=(v=b.pluginOverrides)==null?void 0:v[R])==null?void 0:A[F.key]:void 0;default:return}},O=(b,F)=>{var d,v,A;const R=F.configGroup;if(!R)return F.suffix||"";const D=(v=(d=b.pluginOverrides)==null?void 0:d[R])==null?void 0:v.currencyLabel;if(D)return` ${D}${F.suffix||""}`;const m=(A=T.value[R])==null?void 0:A.currencyLabel;return m?` ${m}${F.suffix||""}`:` 积分${F.suffix||""}`},K=(b,F,R)=>{if(b==null||b==="")return"-";let D;switch(F){case"password-mask":D="••••••";break;case"boolean":D=b?"是":"否";break;case"number":D=String(b);break;case"size":D=String(b);break;case"currency":D=b===0?"免费":String(b);break;default:D=String(b)}return R?`${D} ${R}`:D},L=async()=>{s.value=true;try{const[b,F,R]=await Promise.all([Fe.list(),He.list(),Ge.cardFields()]);r.value=b,p.value=F,_.value=R.fields,T.value=R.globalConfigs}catch{ee.error("加载数据失败")}finally{s.value=false}},V=()=>{f.value=null,S.value=true},C=b=>{f.value=b,S.value=true},h=()=>{L()},W=async b=>{if(confirm(`确定要删除渠道 "${b.name}" 吗?`))try{await Fe.delete(b.id),ee.success("删除成功"),L()}catch{ee.error("删除失败")}},X=async b=>{try{await Fe.toggle(b.id,b.enabled)}catch{b.enabled=!b.enabled,ee.error("操作失败")}},pe=b=>{const F=JSON.parse(JSON.stringify(b));delete F.id,F.name=`${b.name} (副本)`,f.value=F,S.value=true};return we(()=>{L()}),(b,F)=>{const R=j("k-icon"),D=j("k-button"),m=j("el-switch");return l(),n("div",Io,[e("div",Oo,[e("div",To,[i(D,{solid:"",type:"primary",onClick:V},{icon:x(()=>[i(R,{name:"add"})]),default:x(()=>[F[7]||(F[7]=M(" 新建渠道 ",-1))]),_:1}),i(pt,{modelValue:w.value,"onUpdate:modelValue":F[0]||(F[0]=d=>w.value=d),"all-tags":N.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",Uo,[i(jt,{modelValue:c.value,"onUpdate:modelValue":F[1]||(F[1]=d=>c.value=d)},null,8,["modelValue"])])]),e("div",zo,[s.value?(l(),le(So,{key:0})):c.value==="card"?(l(),n(P,{key:1},[o(" 卡片视图 "),e("div",Po,[(l(true),n(P,null,te(U.value,d=>(l(),n("div",{key:d.id},[e("div",{class:"ml-card ml-card--clickable",onClick:v=>C(d)},[e("div",No,[e("div",Fo,[e("div",Lo,k(d.name),1),i(m,{modelValue:d.enabled,"onUpdate:modelValue":v=>d.enabled=v,size:"small",onChange:v=>X(d),onClick:F[2]||(F[2]=ye(()=>{},["stop"]))},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("div",Eo,[e("span",Ao,[i(R,{name:"link"}),M(" "+k(z(d.connectorId)),1)]),o(" 中间件字段(如费用)显示在标题旁 "),(l(true),n(P,null,te(_.value,v=>(l(),n(P,{key:`mw-${v.key}`},[v.key==="cost"?(l(),n("span",Mo,k(K(u(d,v),v.format,O(d,v))),1)):o("v-if",true)],64))),128))])]),e("div",jo,[o(" 配置字段列表 "),I(d).length?(l(),n("div",Ro,[(l(true),n(P,null,te(I(d),v=>(l(),n("div",{key:v.key,class:"field-item"},[e("span",Bo,k(v.label),1),e("span",qo,k(K(d.connectorConfig[v.key],v.format)),1)]))),128))])):o("v-if",true),o(" 标签 "),d.tags&&d.tags.length?(l(),n("div",Ko,[(l(true),n(P,null,te(d.tags,v=>(l(),n("span",{key:v,class:"tag-pill"},k(v),1))),128))])):o("v-if",true)]),e("div",{class:"card-footer",onClick:F[3]||(F[3]=ye(()=>{},["stop"]))},[i(D,{size:"mini",class:"ml-btn-outline-primary",onClick:v=>pe(d)},{icon:x(()=>[i(R,{name:"copy"})]),default:x(()=>[F[8]||(F[8]=M(" 复制 ",-1))]),_:1},8,["onClick"]),F[10]||(F[10]=e("div",{class:"spacer"},null,-1)),i(D,{size:"mini",class:"ml-btn-outline-danger",onClick:v=>W(d)},{icon:x(()=>[i(R,{name:"delete"})]),default:x(()=>[F[9]||(F[9]=M(" 删除 ",-1))]),_:1},8,["onClick"])])],8,Do)]))),128))])],2112)):(l(),n(P,{key:2},[o(" 列表视图 "),e("div",Ho,[e("table",Jo,[F[13]||(F[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(P,null,te(U.value,d=>(l(),n("tr",{key:d.id,onClick:v=>C(d)},[e("td",Wo,[e("span",Zo,k(d.name),1)]),e("td",Yo,[e("span",Xo,k(z(d.connectorId)),1)]),e("td",Qo,[e("div",ei,[(l(true),n(P,null,te((d.tags||[]).slice(0,2),v=>(l(),n("span",{key:v,class:"mini-tag"},k(v),1))),128)),d.tags&&d.tags.length>2?(l(),n("span",ti,"+"+k(d.tags.length-2),1)):o("v-if",true)])]),e("td",si,[(l(true),n(P,null,te(_.value,v=>(l(),n(P,{key:`mw-${v.key}`},[v.key==="cost"?(l(),n("span",li,k(K(u(d,v),v.format,O(d,v))),1)):o("v-if",true)],64))),128))]),e("td",{class:"col-status",onClick:F[4]||(F[4]=ye(()=>{},["stop"]))},[i(m,{modelValue:d.enabled,"onUpdate:modelValue":v=>d.enabled=v,size:"small",onChange:v=>X(d)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:F[5]||(F[5]=ye(()=>{},["stop"]))},[e("div",ai,[i(D,{size:"mini",class:"ml-btn-outline-primary",onClick:v=>pe(d)},{icon:x(()=>[i(R,{name:"copy"})]),default:x(()=>[F[11]||(F[11]=M(" 复制 ",-1))]),_:1},8,["onClick"]),i(D,{size:"mini",class:"ml-btn-outline-danger",onClick:v=>W(d)},{icon:x(()=>[i(R,{name:"delete"})]),default:x(()=>[F[12]||(F[12]=M(" 删除 ",-1))]),_:1},8,["onClick"])])])],8,Go))),128))])])])],2112))]),o(" 编辑/创建对话框 "),i(Co,{modelValue:S.value,"onUpdate:modelValue":F[6]||(F[6]=d=>S.value=d),channel:f.value,onSaved:h},null,8,["modelValue","channel"])])}}}),oi=me(ni,[["__scopeId","data-v-67a4b49d"]]),ii={class:"json-editor"},ri={key:0,class:"error-msg"},di=de({__name:"JsonEditor",props:{modelValue:{},rows:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=$(""),p=$("");$e(()=>s.modelValue,T=>{try{r.value=JSON.stringify(T,null,2)}catch{r.value=""}},{immediate:true});const _=()=>{try{const T=JSON.parse(r.value);p.value="",c("update:modelValue",T)}catch{p.value="Invalid JSON format"}};return(T,S)=>{const f=j("el-input");return l(),n("div",ii,[i(f,{modelValue:r.value,"onUpdate:modelValue":S[0]||(S[0]=w=>r.value=w),type:"textarea",rows:t.rows,class:"code-input",onBlur:_},null,8,["modelValue","rows"]),p.value?(l(),n("div",ri,k(p.value),1)):o("v-if",true)])}}}),ui=me(di,[["__scopeId","data-v-4d47b7db"]]),ci={class:"image-upload"},vi={key:0,class:"image-list"},pi={class:"image-preview"},mi=["src","alt"],fi={class:"image-overlay"},gi={class:"image-name"},_i={class:"upload-content"},yi={key:1,class:"upload-loading"},hi=de({__name:"ImageUpload",props:{modelValue:{},maxCount:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=$(),p=$(false),_=$([]),T=async()=>{var u;const I=[];for(const O of s.modelValue)O&&I.push({url:O,filename:((u=O.split("/").pop())==null?void 0:u.split("?")[0])||"image",mime:"image/png",previewUrl:O});_.value=I};$e(()=>s.modelValue,()=>{T()},{immediate:true});const S=()=>{var I;(I=r.value)==null||I.click()},f=async I=>{const u=I.target;!u.files||u.files.length===0||(await N(Array.from(u.files)),u.value="")},w=async I=>{var O;const u=(O=I.dataTransfer)==null?void 0:O.files;!u||u.length===0||await N(Array.from(u).filter(K=>K.type.startsWith("image/")))},N=async I=>{if(I.length===0)return;const u=s.maxCount||10;_.value.length+I.length>u&&(ee.warning(`最多上传 ${u} 张图片`),I=I.slice(0,u-_.value.length)),p.value=true;try{for(const O of I){const K=await U(O),L=await Vs.upload(K,O.type,O.name);if(!L.url){ee.error("缓存服务未配置 selfUrl,无法获取图片 URL");continue}_.value.push({url:L.url,filename:L.filename,mime:L.mime,previewUrl:L.url})}c("update:modelValue",_.value.map(O=>O.url))}catch(O){ee.error("上传失败"),console.error(O)}finally{p.value=false}},U=I=>new Promise((u,O)=>{const K=new FileReader;K.onload=()=>{const V=K.result.split(",")[1];u(V)},K.onerror=O,K.readAsDataURL(I)}),z=I=>{_.value.splice(I,1),c("update:modelValue",_.value.map(u=>u.url))};return we(()=>{T()}),(I,u)=>{const O=j("k-icon"),K=j("k-button");return l(),n("div",ci,[o(" 已上传的图片列表 "),_.value.length>0?(l(),n("div",vi,[(l(true),n(P,null,te(_.value,(L,V)=>(l(),n("div",{key:L.url||V,class:"image-item"},[e("div",pi,[e("img",{src:L.previewUrl,alt:L.filename},null,8,mi),e("div",fi,[i(K,{size:"mini",class:"remove-btn",onClick:C=>z(V)},{icon:x(()=>[i(O,{name:"delete"})]),_:1},8,["onClick"])])]),e("div",gi,k(L.filename),1)]))),128))])):o("v-if",true),o(" 上传按钮 "),e("div",{class:"upload-area",onClick:S,onDragover:u[0]||(u[0]=ye(()=>{},["prevent"])),onDrop:ye(w,["prevent"])},[e("input",{ref_key:"fileInput",ref:r,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:f},null,544),e("div",_i,[i(O,{name:"add",class:"upload-icon"}),u[1]||(u[1]=e("span",{class:"upload-text"},"点击或拖拽上传图片",-1))])],32),o(" 加载状态 "),p.value?(l(),n("div",yi,[i(O,{name:"sync",class:"loading-icon"}),u[2]||(u[2]=M(" 上传中... ",-1))])):o("v-if",true)])}}}),Ft=me(hi,[["__scopeId","data-v-47f2485e"]]),bi={class:"ml-view-container"},ki={class:"ml-view-header"},$i={class:"ml-header-left"},wi={class:"ml-header-right"},Ci={class:"ml-view-content"},Vi={key:0,class:"loading-state"},xi={class:"ml-masonry"},Si=["onClick"],Ii={key:0,class:"card-thumbnail"},Oi=["src","alt"],Ti={class:"thumbnail-overlay"},Ui={key:0,class:"ref-count"},zi={key:1,class:"card-thumbnail placeholder"},Pi={class:"card-content"},Di={class:"card-title"},Ni={key:0,class:"card-tags"},Fi={key:0,class:"mini-tag more"},Li={class:"ml-table-container"},Ei={class:"ml-table"},Ai=["onClick"],Mi={class:"col-thumb"},ji={class:"thumb-wrapper"},Ri=["src","alt"],Bi={key:1,class:"thumb-placeholder"},qi={class:"col-name"},Ki={class:"name-text"},Hi={class:"col-template"},Ji={class:"template-preview"},Gi={class:"col-refs"},Wi={key:0,class:"ref-badge"},Zi={key:1,class:"no-data"},Yi={class:"col-source"},Xi={class:"action-btns"},Qi={class:"dialog-footer"},er=de({__name:"PresetsView",setup(t){const a=["本地","远程","text2img","img2img","NSFW"],s=$(false),c=$([]),r=$(false),p=$(false),_=$([]),T=$("card"),S=Z(()=>{const C=new Set;return c.value.forEach(h=>{(h.tags||[]).forEach(W=>C.add(W))}),Array.from(C).sort()}),f=$({name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"}),w=$([]);$e(()=>f.value.thumbnail,C=>{w.value=C?[C]:[]},{immediate:true}),$e(w,C=>{f.value.thumbnail=C.length>0?C[0]:""});const N=Z(()=>_.value.length===0?c.value:c.value.filter(C=>_.value.every(h=>h==="本地"?C.source==="user":h==="远程"?C.source==="api":(C.tags||[]).includes(h)))),U=async()=>{s.value=true;try{c.value=await ze.list()}catch{ee.error("加载数据失败")}finally{s.value=false}},z=()=>{p.value=false,f.value={name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"},r.value=true},I=C=>{p.value=true,f.value=JSON.parse(JSON.stringify(C)),r.value=true},u=C=>{p.value=false;const h=JSON.parse(JSON.stringify(C));delete h.id,h.name=`${C.name} (副本)`,h.source="user",f.value=h,r.value=true},O=async C=>{try{await ze.toggle(C.id,C.enabled)}catch{C.enabled=!C.enabled,ee.error("操作失败")}},K=(C,h=50)=>{if(!C)return"-";const W=C.replace(/\s+/g," ").trim();return W.length<=h?W:W.slice(0,h)+"..."},L=async()=>{if(!f.value.name||!f.value.promptTemplate){ee.warning("请填写必要信息");return}try{p.value&&f.value.id?(await ze.update(f.value.id,f.value),ee.success("更新成功")):(await ze.create(f.value),ee.success("创建成功")),r.value=false,U()}catch{ee.error("操作失败")}},V=async C=>{if(confirm(`确定要删除预设 "${C.name}" 吗?`))try{await ze.delete(C.id),ee.success("删除成功"),U()}catch{ee.error("删除失败")}};return we(()=>{U()}),(C,h)=>{const W=j("k-icon"),X=j("k-button"),pe=j("el-switch"),b=j("el-input"),F=j("el-form-item"),R=j("el-divider"),D=j("el-form"),m=j("el-dialog");return l(),n("div",bi,[e("div",ki,[e("div",$i,[i(X,{solid:"",type:"primary",onClick:z},{icon:x(()=>[i(W,{name:"add"})]),default:x(()=>[h[14]||(h[14]=M(" 新建预设 ",-1))]),_:1}),i(pt,{modelValue:_.value,"onUpdate:modelValue":h[0]||(h[0]=d=>_.value=d),"all-tags":S.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",wi,[i(jt,{modelValue:T.value,"onUpdate:modelValue":h[1]||(h[1]=d=>T.value=d)},null,8,["modelValue"])])]),e("div",Ci,[s.value?(l(),n("div",Vi,[i(W,{name:"sync",class:"ml-spin"}),h[15]||(h[15]=M(" 加载中... ",-1))])):T.value==="card"?(l(),n(P,{key:1},[o(" 卡片视图 (瀑布流) "),e("div",xi,[(l(true),n(P,null,te(N.value,d=>{var v,A;return l(),n("div",{key:d.id,class:"ml-masonry-item"},[e("div",{class:"preset-card",onClick:ae=>I(d)},[o(" 缩略图 "),d.thumbnail?(l(),n("div",Ii,[e("img",{src:d.thumbnail,alt:d.name,loading:"lazy"},null,8,Oi),e("div",Ti,[(v=d.referenceImages)!=null&&v.length?(l(),n("span",Ui,[i(W,{name:"image"}),M(" "+k(d.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",zi,[i(W,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",Pi,[e("div",Di,k(d.name),1),(A=d.tags)!=null&&A.length?(l(),n("div",Ni,[(l(true),n(P,null,te(d.tags.slice(0,4),ae=>(l(),n("span",{key:ae,class:"mini-tag"},k(ae),1))),128)),d.tags.length>4?(l(),n("span",Fi,"+"+k(d.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮 "),e("div",{class:"card-actions",onClick:h[2]||(h[2]=ye(()=>{},["stop"]))},[i(pe,{modelValue:d.enabled,"onUpdate:modelValue":ae=>d.enabled=ae,size:"small",onChange:ae=>O(d)},null,8,["modelValue","onUpdate:modelValue","onChange"]),i(X,{size:"mini",class:"ml-btn-outline-primary",onClick:ae=>u(d)},{icon:x(()=>[i(W,{name:"copy"})]),default:x(()=>[h[16]||(h[16]=M(" 复制 ",-1))]),_:1},8,["onClick"]),d.source==="user"?(l(),le(X,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:ae=>V(d)},{icon:x(()=>[i(W,{name:"delete"})]),default:x(()=>[h[17]||(h[17]=M(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)]),o(" 来源标记 "),e("div",{class:se(["source-indicator",d.source])},k(d.source==="api"?"远程":"本地"),3)],8,Si)])}),128))])],2112)):(l(),n(P,{key:2},[o(" 列表视图 "),e("div",Li,[e("table",Ei,[h[20]||(h[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(P,null,te(N.value,d=>{var v;return l(),n("tr",{key:d.id,onClick:A=>I(d)},[e("td",Mi,[e("div",ji,[d.thumbnail?(l(),n("img",{key:0,src:d.thumbnail,alt:d.name},null,8,Ri)):(l(),n("div",Bi,[i(W,{name:"image"})]))])]),e("td",qi,[e("span",Ki,k(d.name),1)]),e("td",Hi,[e("span",Ji,k(K(d.promptTemplate)),1)]),e("td",Gi,[(v=d.referenceImages)!=null&&v.length?(l(),n("span",Wi,[i(W,{name:"image"}),M(" "+k(d.referenceImages.length),1)])):(l(),n("span",Zi,"-"))]),e("td",Yi,[e("span",{class:se(["source-badge",d.source])},k(d.source==="api"?"远程":"本地"),3)]),e("td",{class:"col-status",onClick:h[3]||(h[3]=ye(()=>{},["stop"]))},[i(pe,{modelValue:d.enabled,"onUpdate:modelValue":A=>d.enabled=A,size:"small",onChange:A=>O(d)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:h[4]||(h[4]=ye(()=>{},["stop"]))},[e("div",Xi,[i(X,{size:"mini",class:"ml-btn-outline-primary",onClick:A=>u(d)},{icon:x(()=>[i(W,{name:"copy"})]),default:x(()=>[h[18]||(h[18]=M(" 复制 ",-1))]),_:1},8,["onClick"]),d.source==="user"?(l(),le(X,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:A=>V(d)},{icon:x(()=>[i(W,{name:"delete"})]),default:x(()=>[h[19]||(h[19]=M(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)])])],8,Ai)}),128))])])])],2112))]),o(" 编辑/创建对话框 "),i(m,{modelValue:r.value,"onUpdate:modelValue":h[13]||(h[13]=d=>r.value=d),title:p.value?"编辑预设":"创建预设",width:"600px","close-on-click-modal":false},{footer:x(()=>[e("span",Qi,[i(X,{onClick:h[12]||(h[12]=d=>r.value=false)},{default:x(()=>[...h[27]||(h[27]=[M("取消",-1)])]),_:1}),i(X,{type:"primary",onClick:L},{default:x(()=>[...h[28]||(h[28]=[M("保存",-1)])]),_:1})])]),default:x(()=>[r.value?(l(),le(D,{key:0,ref:"formRef",model:f.value,"label-width":"100px"},{default:x(()=>[i(F,{label:"名称",required:""},{default:x(()=>[i(b,{modelValue:f.value.name,"onUpdate:modelValue":h[5]||(h[5]=d=>f.value.name=d),disabled:p.value&&f.value.source==="api",placeholder:"如 二次元少女"},null,8,["modelValue","disabled"]),h[21]||(h[21]=e("div",{class:"form-tip"},"用于指令调用和展示,冲突时会自动添加后缀",-1))]),_:1}),i(F,{label:"Prompt 模板",required:""},{default:x(()=>[i(b,{modelValue:f.value.promptTemplate,"onUpdate:modelValue":h[6]||(h[6]=d=>f.value.promptTemplate=d),type:"textarea",rows:4,placeholder:"输入提示词模板,支持变量如 {prompt}"},null,8,["modelValue"]),h[22]||(h[22]=e("div",{class:"form-tip"},"默认将用户输入附加在最后,也可使用 {prompt} 指定位置",-1))]),_:1}),f.value.source==="user"?(l(),le(F,{key:0,label:"缩略图"},{default:x(()=>[i(Ft,{modelValue:w.value,"onUpdate:modelValue":h[7]||(h[7]=d=>w.value=d),"max-count":1},null,8,["modelValue"]),h[23]||(h[23]=e("div",{class:"form-tip"},"用于在卡片视图中展示预设的预览图",-1))]),_:1})):o("v-if",true),i(F,{label:"参考图"},{default:x(()=>[i(Ft,{modelValue:f.value.referenceImages,"onUpdate:modelValue":h[8]||(h[8]=d=>f.value.referenceImages=d),"max-count":5},null,8,["modelValue"]),h[24]||(h[24]=e("div",{class:"form-tip"},"生成时会自动附加这些参考图片",-1))]),_:1}),i(R,{"content-position":"left"},{default:x(()=>[...h[25]||(h[25]=[M("高级设置",-1)])]),_:1}),i(F,{label:"标签"},{default:x(()=>[i(Rt,{modelValue:f.value.tags,"onUpdate:modelValue":h[9]||(h[9]=d=>f.value.tags=d),placeholder:"输入标签..."},null,8,["modelValue"]),h[26]||(h[26]=e("div",{class:"form-tip"},"与渠道标签匹配时会自动关联",-1))]),_:1}),i(F,{label:"参数覆盖"},{default:x(()=>[i(ui,{modelValue:f.value.parameterOverrides,"onUpdate:modelValue":h[10]||(h[10]=d=>f.value.parameterOverrides=d),rows:3},null,8,["modelValue"])]),_:1}),i(F,{label:"启用状态"},{default:x(()=>[i(pe,{modelValue:f.value.enabled,"onUpdate:modelValue":h[11]||(h[11]=d=>f.value.enabled=d)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])):o("v-if",true)]),_:1},8,["modelValue","title"])])}}}),tr=me(er,[["__scopeId","data-v-8eaa50b4"]]),sr=de({__name:"StatusBadge",props:{status:{}},setup(t){const a=t,s=Z(()=>{switch(a.status){case"pending":return"等待中";case"processing":return"处理中";case"success":return"成功";case"failed":return"失败";default:return a.status}});return(c,r)=>(l(),n("span",{class:se(["status-badge",t.status])},k(s.value),3))}}),Lt=me(sr,[["__scopeId","data-v-0bc21896"]]),lr={class:"lightbox-container"},ar={class:"lightbox-content"},nr=["src"],or={key:2,class:"image-counter"},ir={key:0,class:"lightbox-sidebar"},rr={class:"sidebar-header"},dr={class:"sidebar-body"},ur={class:"info-block"},cr={class:"block-header"},vr={key:0,class:"info-block"},pr={class:"info-value"},mr={key:1,class:"info-block"},fr={class:"info-value"},gr={class:"sidebar-footer"},_r=de({__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,c=a,r=$(s.initialIndex),p=Z(()=>s.images[r.value]||"");$e(()=>s.visible,u=>{u?(r.value=s.initialIndex,document.body.style.overflow="hidden"):document.body.style.overflow=""}),$e(()=>s.initialIndex,u=>{r.value=u});const _=()=>{c("update:visible",false),c("close")},T=()=>{r.value=(r.value-1+s.images.length)%s.images.length},S=()=>{r.value=(r.value+1)%s.images.length},f=()=>{s.prompt&&(navigator.clipboard.writeText(s.prompt),ee.success("已复制提示词"))},w=()=>{window.open(p.value,"_blank")},N=()=>{const u=document.createElement("a");u.href=p.value,u.download=`image-${Date.now()}.png`,u.click()},U=u=>(typeof u=="string"?new Date(u):u).toLocaleString(),z=u=>u<1e3?`${u}ms`:`${(u/1e3).toFixed(1)}s`,I=u=>{s.visible&&(u.key==="Escape"?_():u.key==="ArrowLeft"?T():u.key==="ArrowRight"&&S())};return we(()=>{window.addEventListener("keydown",I)}),et(()=>{window.removeEventListener("keydown",I),document.body.style.overflow=""}),(u,O)=>{const K=j("k-icon");return l(),le(fs,{to:"body"},[i(Qe,{name:"lightbox-fade"},{default:x(()=>[t.visible?(l(),n("div",{key:0,class:"lightbox-overlay",onClick:ye(_,["self"])},[e("div",lr,[e("div",ar,[o(" 左侧图片区域 "),e("div",{class:"lightbox-image-area",onClick:ye(_,["self"])},[o(" 关闭按钮 "),e("button",{class:"close-btn",onClick:_,title:"关闭 (Esc)"},[i(K,{name:"times"})]),o(" 多图时的导航 "),t.images.length>1?(l(),n("button",{key:0,class:"nav-btn prev",onClick:ye(T,["stop"]),title:"上一张"},[i(K,{name:"chevron-left"})])):o("v-if",true),e("img",{src:p.value,class:"lightbox-image",alt:"Preview"},null,8,nr),t.images.length>1?(l(),n("button",{key:1,class:"nav-btn next",onClick:ye(S,["stop"]),title:"下一张"},[i(K,{name:"chevron-right"})])):o("v-if",true),o(" 图片计数器 "),t.images.length>1?(l(),n("div",or,k(r.value+1)+" / "+k(t.images.length),1)):o("v-if",true)]),o(" 右侧信息栏 "),t.showSidebar?(l(),n("div",ir,[e("div",rr,[O[0]||(O[0]=e("div",{class:"info-title"},"图片详情",-1)),e("button",{class:"header-close-btn",onClick:_,title:"关闭"},[i(K,{name:"times"})])]),e("div",dr,[o(" 提示词 "),e("div",ur,[e("div",cr,[O[1]||(O[1]=e("span",null,"提示词",-1)),t.prompt?(l(),n("button",{key:0,class:"copy-btn",onClick:f}," 复制 ")):o("v-if",true)]),e("div",{class:se(["prompt-content",{empty:!t.prompt}])},k(t.prompt||"无提示词"),3)]),o(" 创建时间 "),t.createdAt?(l(),n("div",vr,[O[2]||(O[2]=e("div",{class:"block-header"},[e("span",null,"创建时间")],-1)),e("div",pr,k(U(t.createdAt)),1)])):o("v-if",true),o(" 生成耗时 "),t.duration?(l(),n("div",mr,[O[3]||(O[3]=e("div",{class:"block-header"},[e("span",null,"生成耗时")],-1)),e("div",fr,k(z(t.duration)),1)])):o("v-if",true)]),e("div",gr,[e("button",{class:"action-btn primary",onClick:w},[i(K,{name:"external-link"}),O[4]||(O[4]=M(" 查看原图 ",-1))]),e("button",{class:"action-btn secondary",onClick:N},[i(K,{name:"download"}),O[5]||(O[5]=M(" 下载 ",-1))])])])):o("v-if",true)])])])):o("v-if",true)]),_:1})])}}}),bt=me(_r,[["__scopeId","data-v-bd68872f"]]),yr={class:"ml-view-container"},hr={class:"ml-view-header"},br={class:"ml-header-left"},kr={class:"view-mode-switch"},$r={class:"ml-header-right"},wr={key:0,class:"stats-grid"},Cr={class:"stat-card"},Vr={class:"stat-icon total"},xr={class:"stat-content"},Sr={class:"stat-value"},Ir={class:"stat-card"},Or={class:"stat-icon success"},Tr={class:"stat-content"},Ur={class:"stat-value success"},zr={class:"stat-card"},Pr={class:"stat-icon failed"},Dr={class:"stat-content"},Nr={class:"stat-value failed"},Fr={class:"stat-card"},Lr={class:"stat-icon processing"},Er={class:"stat-content"},Ar={class:"stat-value pending"},Mr={class:"stat-card"},jr={class:"stat-icon rate"},Rr={class:"stat-content"},Br={class:"stat-value"},qr={class:"filter-bar"},Kr={class:"filter-group"},Hr={key:0,class:"pagination-info"},Jr={class:"ml-view-content"},Gr={class:"mono-text"},Wr=["title"],Zr={key:0},Yr={key:1,class:"text-muted"},Xr={key:0},Qr={key:1},ed={class:"time-text"},td={key:0,class:"empty-gallery"},sd={key:1,class:"ml-masonry"},ld=["onClick"],ad={class:"gallery-image-wrapper"},nd=["src"],od=["src"],id={class:"gallery-overlay"},rd={class:"gallery-info"},dd=["title"],ud={class:"gallery-meta"},cd={class:"gallery-time"},vd={class:"pagination"},pd={key:0,class:"task-detail"},md={class:"detail-section"},fd={class:"detail-grid"},gd={class:"detail-item"},_d={class:"detail-item"},yd={class:"detail-item"},hd={class:"detail-item"},bd={class:"detail-item"},kd={class:"detail-item"},$d={class:"detail-section"},wd={class:"code-block"},Cd={key:0,class:"detail-section"},Vd={class:"output-gallery"},xd=["src"],Sd=["src"],Id=["src"],Od={key:3,class:"text-asset"},Td=["href"],Ud={key:1,class:"detail-section"},zd={class:"code-block error"},Pd={class:"cleanup-form"},Dd={class:"dialog-footer"},Nd=de({__name:"TasksView",setup(t){const a=$("list"),s=$(false),c=$([]),r=$(null),p=$(0),_=$(1),T=$(20),S=$({status:"",userId:void 0,channelId:void 0}),f=$(false),w=$(null);$(false);const N=$(null),U=$(false),z=$([]),I=$(0),u=$(""),O=$(),K=$(),L=$(false),V=$(30),C=d=>{var v,A,ae;return((A=(v=d.middlewareLogs)==null?void 0:v.preset)==null?void 0:A.transformedPrompt)||((ae=d.requestSnapshot)==null?void 0:ae.prompt)||""},h=Z(()=>{var v,A,ae;const d=[];for(const J of c.value){if(J.status!=="success"||!J.responseSnapshot)continue;const E=((A=(v=J.middlewareLogs)==null?void 0:v.preset)==null?void 0:A.transformedPrompt)||((ae=J.requestSnapshot)==null?void 0:ae.prompt)||"";J.responseSnapshot.forEach((Q,ie)=>{(Q.kind==="image"||Q.kind==="video")&&Q.url&&d.push({id:J.id,assetIndex:ie,kind:Q.kind,url:Q.url,prompt:E,channelId:J.channelId,createdAt:J.startTime})})}return d}),W=async()=>{s.value=true;try{const d={limit:T.value,offset:(_.value-1)*T.value};S.value.status&&(d.status=S.value.status),S.value.userId&&(d.userId=Number(S.value.userId)),S.value.channelId&&(d.channelId=Number(S.value.channelId));const[v,A]=await Promise.all([Le.list(d),Le.stats()]);c.value=v.items,p.value=v.total,r.value=A}catch(d){console.error("Failed to fetch tasks:",d),ee.error("加载数据失败")}finally{s.value=false}},X=d=>{w.value=d,f.value=true},pe=d=>{z.value=[d.url],I.value=0,u.value=d.prompt,O.value=d.createdAt,K.value=void 0,U.value=true,N.value=d},b=()=>{L.value=true},F=async()=>{try{const d=await Le.cleanup(V.value);ee.success(`成功清理 ${d.deleted} 条任务`),L.value=false,W()}catch{ee.error("清理失败")}},R=d=>new Date(d).toLocaleString(),D=d=>d<1e3?`${d}ms`:`${(d/1e3).toFixed(2)}s`,m=d=>{const v=d.target;v.style.display="none"};return we(()=>{W()}),(d,v)=>{const A=j("k-icon"),ae=j("k-button"),J=j("el-option"),E=j("el-select"),Q=j("el-input"),ie=j("el-table-column"),he=j("el-table"),ve=j("el-pagination"),ge=j("el-dialog"),fe=j("el-input-number");return l(),n("div",yr,[o(" 固定头部区域 "),e("div",hr,[e("div",br,[o(" 视图切换 "),e("div",kr,[e("button",{class:se(["mode-btn",{active:a.value==="list"}]),onClick:v[0]||(v[0]=B=>a.value="list"),title:"列表视图"},[...v[14]||(v[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:se(["mode-btn",{active:a.value==="gallery"}]),onClick:v[1]||(v[1]=B=>a.value="gallery"),title:"画廊视图"},[...v[15]||(v[15]=[ct('<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(ae,{onClick:b},{icon:x(()=>[i(A,{name:"delete"})]),default:x(()=>[v[16]||(v[16]=M(" 清理记录 ",-1))]),_:1}),i(ae,{onClick:W},{icon:x(()=>[i(A,{name:"refresh"})]),default:x(()=>[v[17]||(v[17]=M(" 刷新 ",-1))]),_:1})])]),o(" 统计信息 (固定) "),r.value?(l(),n("div",wr,[e("div",Cr,[e("div",Vr,[i(A,{name:"clipboard-list"})]),e("div",xr,[e("div",Sr,k(r.value.total),1),v[18]||(v[18]=e("div",{class:"stat-label"},"总任务数",-1))])]),e("div",Ir,[e("div",Or,[i(A,{name:"check-circle"})]),e("div",Tr,[e("div",Ur,k(r.value.byStatus.success),1),v[19]||(v[19]=e("div",{class:"stat-label"},"成功",-1))])]),e("div",zr,[e("div",Pr,[i(A,{name:"exclamation-triangle"})]),e("div",Dr,[e("div",Nr,k(r.value.byStatus.failed),1),v[20]||(v[20]=e("div",{class:"stat-label"},"失败",-1))])]),e("div",Fr,[e("div",Lr,[i(A,{name:"clock"})]),e("div",Er,[e("div",Ar,k(r.value.byStatus.pending+r.value.byStatus.processing),1),v[21]||(v[21]=e("div",{class:"stat-label"},"进行中",-1))])]),e("div",Mr,[e("div",jr,[i(A,{name:"chart-pie"})]),e("div",Rr,[e("div",Br,k(r.value.successRate),1),v[22]||(v[22]=e("div",{class:"stat-label"},"成功率",-1))])])])):o("v-if",true),o(" 筛选栏 (固定) "),e("div",qr,[e("div",Kr,[i(E,{modelValue:S.value.status,"onUpdate:modelValue":v[2]||(v[2]=B=>S.value.status=B),placeholder:"所有状态",clearable:"",onChange:W,style:{width:"140px"}},{default:x(()=>[i(J,{label:"等待中",value:"pending"}),i(J,{label:"处理中",value:"processing"}),i(J,{label:"成功",value:"success"}),i(J,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),i(Q,{modelValue:S.value.channelId,"onUpdate:modelValue":v[3]||(v[3]=B=>S.value.channelId=B),placeholder:"渠道 ID",clearable:"",onChange:W,style:{width:"140px"}},null,8,["modelValue"]),i(Q,{modelValue:S.value.userId,"onUpdate:modelValue":v[4]||(v[4]=B=>S.value.userId=B),placeholder:"用户 ID",clearable:"",onChange:W,style:{width:"140px"}},null,8,["modelValue"])]),p.value>0?(l(),n("div",Hr," 共 "+k(p.value)+" 条记录 ",1)):o("v-if",true)]),o(" 可滚动的内容区域 "),e("div",Jr,[o(" 列表视图 "),a.value==="list"?(l(),le(he,{key:0,data:c.value,style:{width:"100%"},class:"task-table",onRowClick:X},{default:x(()=>[i(ie,{prop:"id",label:"ID",width:"80",align:"center"},{default:x(({row:B})=>[e("span",Gr,"#"+k(B.id),1)]),_:1}),i(ie,{label:"状态",width:"100",align:"center"},{default:x(({row:B})=>[i(Lt,{status:B.status},null,8,["status"])]),_:1}),i(ie,{prop:"channelId",label:"渠道",width:"100",align:"center"}),i(ie,{label:"提示词","min-width":"300"},{default:x(({row:B})=>[e("div",{class:"prompt-cell",title:C(B)},k(C(B)),9,Wr)]),_:1}),i(ie,{label:"输出",width:"120",align:"center"},{default:x(({row:B})=>[B.responseSnapshot&&B.responseSnapshot.length?(l(),n("span",Zr,k(B.responseSnapshot.length)+" 个资产 ",1)):(l(),n("span",Yr,"-"))]),_:1}),i(ie,{label:"耗时",width:"100",align:"right"},{default:x(({row:B})=>[B.duration?(l(),n("span",Xr,k(D(B.duration)),1)):(l(),n("span",Qr,"-"))]),_:1}),i(ie,{label:"时间",width:"180",align:"right"},{default:x(({row:B})=>[e("span",ed,k(R(B.startTime)),1)]),_:1})]),_:1},8,["data"])):a.value==="gallery"?(l(),n(P,{key:1},[o(" 画廊视图 (瀑布流) "),h.value.length===0?(l(),n("div",td,[i(A,{name:"image",class:"empty-icon"}),v[23]||(v[23]=e("p",null,"暂无成功生成的图片",-1))])):(l(),n("div",sd,[(l(true),n(P,null,te(h.value,B=>(l(),n("div",{key:B.id+"-"+B.assetIndex,class:"ml-masonry-item"},[e("div",{class:"gallery-item",onClick:g=>pe(B)},[e("div",ad,[B.kind==="image"?(l(),n("img",{key:0,src:B.url,class:"gallery-image",loading:"lazy",onError:m},null,40,nd)):B.kind==="video"?(l(),n("video",{key:1,src:B.url,class:"gallery-video",muted:"",loop:"",onMouseenter:v[5]||(v[5]=g=>g.target.play()),onMouseleave:v[6]||(v[6]=g=>g.target.pause())},null,40,od)):o("v-if",true),e("div",id,[i(A,{name:"zoom-in",class:"zoom-icon"})])]),e("div",rd,[e("div",{class:"gallery-prompt",title:B.prompt},k(B.prompt),9,dd),e("div",ud,[e("span",cd,k(R(B.createdAt)),1)])])],8,ld)]))),128))]))],64)):o("v-if",true)]),o(" 分页 (固定在底部) "),e("div",vd,[i(ve,{"current-page":_.value,"onUpdate:currentPage":v[7]||(v[7]=B=>_.value=B),"page-size":T.value,"onUpdate:pageSize":v[8]||(v[8]=B=>T.value=B),total:p.value,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:W,onSizeChange:W},null,8,["current-page","page-size","total"])]),o(" 任务详情对话框 "),i(ge,{modelValue:f.value,"onUpdate:modelValue":v[9]||(v[9]=B=>f.value=B),title:"任务详情",width:"800px"},{default:x(()=>{var B,g;return[w.value?(l(),n("div",pd,[e("div",md,[v[31]||(v[31]=e("h3",null,"基本信息",-1)),e("div",fd,[e("div",gd,[v[24]||(v[24]=e("span",{class:"label"},"ID:",-1)),M(" "+k(w.value.id),1)]),e("div",_d,[v[25]||(v[25]=e("span",{class:"label"},"状态:",-1)),v[26]||(v[26]=M()),i(Lt,{status:w.value.status},null,8,["status"])]),e("div",yd,[v[27]||(v[27]=e("span",{class:"label"},"渠道 ID:",-1)),M(" "+k(w.value.channelId),1)]),e("div",hd,[v[28]||(v[28]=e("span",{class:"label"},"用户 ID:",-1)),M(" "+k(w.value.userId||"N/A"),1)]),e("div",bd,[v[29]||(v[29]=e("span",{class:"label"},"创建时间:",-1)),M(" "+k(R(w.value.startTime)),1)]),e("div",kd,[v[30]||(v[30]=e("span",{class:"label"},"耗时:",-1)),M(" "+k(D(w.value.duration||0)),1)])])]),e("div",$d,[v[32]||(v[32]=e("h3",null,"Prompt",-1)),e("div",wd,k(C(w.value)),1)]),w.value.responseSnapshot&&w.value.responseSnapshot.length>0?(l(),n("div",Cd,[e("h3",null,"生成结果 ("+k(w.value.responseSnapshot.length)+" 个资产)",1),e("div",Vd,[(l(true),n(P,null,te(w.value.responseSnapshot,(y,G)=>{var oe;return l(),n("div",{key:G,class:"output-item"},[y.kind==="image"&&y.url?(l(),n("img",{key:0,src:y.url,class:"output-image"},null,8,xd)):y.kind==="video"&&y.url?(l(),n("video",{key:1,src:y.url,class:"output-image",controls:""},null,8,Sd)):y.kind==="audio"&&y.url?(l(),n("audio",{key:2,src:y.url,controls:"",style:{width:"100%"}},null,8,Id)):y.kind==="text"&&y.content?(l(),n("div",Od,k(y.content),1)):y.url?(l(),n("a",{key:4,href:y.url,target:"_blank",class:"file-link"},[i(A,{name:"file"}),M(" "+k(((oe=y.meta)==null?void 0:oe.filename)||y.url),1)],8,Td)):o("v-if",true)])}),128))])])):o("v-if",true),(g=(B=w.value.middlewareLogs)==null?void 0:B.request)!=null&&g.error?(l(),n("div",Ud,[v[33]||(v[33]=e("h3",null,"错误信息",-1)),e("div",zd,k(w.value.middlewareLogs.request.error),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue"]),o(" 图片预览弹窗 "),i(bt,{visible:U.value,"onUpdate:visible":v[10]||(v[10]=B=>U.value=B),images:z.value,"initial-index":I.value,prompt:u.value,"created-at":O.value,duration:K.value},null,8,["visible","images","initial-index","prompt","created-at","duration"]),o(" 清理对话框 "),i(ge,{modelValue:L.value,"onUpdate:modelValue":v[13]||(v[13]=B=>L.value=B),title:"清理旧任务",width:"400px"},{footer:x(()=>[e("span",Dd,[i(ae,{onClick:v[12]||(v[12]=B=>L.value=false)},{default:x(()=>[...v[35]||(v[35]=[M("取消",-1)])]),_:1}),i(ae,{type:"error",onClick:F},{default:x(()=>[...v[36]||(v[36]=[M("确认清理",-1)])]),_:1})])]),default:x(()=>[e("div",Pd,[v[34]||(v[34]=e("p",null,"清理多少天前的任务?",-1)),i(fe,{modelValue:V.value,"onUpdate:modelValue":v[11]||(v[11]=B=>V.value=B),min:1,max:365},null,8,["modelValue"])])]),_:1},8,["modelValue"])])}}}),Fd=me(Nd,[["__scopeId","data-v-898a70bb"]]),Ld={class:"gallery-content"},Ed={class:"gallery-header"},Ad={class:"header-left"},Md={key:0,class:"gallery-count"},jd={class:"header-actions"},Rd={key:0,class:"gallery-empty"},Bd={class:"gallery-empty"},qd=["onClick"],Kd={key:0,class:"task-image-wrapper"},Hd=["src"],Jd={key:0,class:"more-images"},Gd={class:"task-processing"},Wd={class:"processing-text"},Zd={class:"task-failed"},Yd={class:"task-info"},Xd=["title"],Qd={class:"task-meta"},eu={class:"task-time"},tu={key:0,class:"task-duration"},su={key:0,class:"loading-more"},ot=10,lu=de({__name:"HistoryGallery",emits:["select"],setup(t,{expose:a,emit:s}){const c=s,r=$(false),p=$(false),_=$(false),T=$([]),S=$(0),f=$(false),w=$(0),N=$();let U=null;const z=$(false),I=$([]),u=$(0),O=$(""),K=$(),L=$(),V=async()=>{try{const m=await ws.me();return _.value=m.loggedIn,m.loggedIn}catch{return _.value=false,false}},C=m=>{var A,ae,J;const d=[];if(m.responseSnapshot)for(const E of m.responseSnapshot)E.kind==="image"&&E.url&&d.push(E.url);const v=((ae=(A=m.middlewareLogs)==null?void 0:A.preset)==null?void 0:ae.transformedPrompt)||((J=m.requestSnapshot)==null?void 0:J.prompt)||"";return{id:m.id,status:m.status,prompt:v,images:d,createdAt:new Date(m.startTime),duration:m.duration||void 0}},h=async(m=false)=>{if(_.value){p.value=true;try{const d=await Le.my({limit:ot,offset:m?w.value:0}),v=d.items.map(C);m?T.value=[...T.value,...v]:(T.value=v,w.value=0),S.value=d.total,f.value=d.items.length>=ot,w.value+=ot}catch(d){console.error("Failed to load tasks:",d)}finally{p.value=false}}},W=()=>{!p.value&&f.value&&h(true)},X=m=>{const d=m.target,{scrollTop:v,scrollHeight:A,clientHeight:ae}=d;A-v-ae<100&&W()},pe=async()=>{await V(),await h()},b=m=>{m.status==="success"&&m.images.length>0&&(I.value=m.images,u.value=0,O.value=m.prompt,K.value=m.createdAt,L.value=m.duration,z.value=true,c("select",m))},F=m=>{const v=new Date().getTime()-m.getTime();return v<6e4?"刚刚":v<36e5?`${Math.floor(v/6e4)}分钟前`:v<864e5?`${Math.floor(v/36e5)}小时前`:v<6048e5?`${Math.floor(v/864e5)}天前`:m.toLocaleDateString()},R=m=>m<1e3?`${m}ms`:`${(m/1e3).toFixed(1)}s`,D=()=>{U=setInterval(()=>{T.value.some(d=>d.status==="pending"||d.status==="processing")&&h()},3e3)};return a({refresh:pe}),we(async()=>{await V()&&(await h(),D())}),et(()=>{U&&clearInterval(U)}),(m,d)=>{const v=j("k-icon");return l(),n("div",{class:se(["history-gallery",{collapsed:r.value}])},[o(" 折叠状态的侧边条 "),r.value?(l(),n("div",{key:0,class:"collapsed-bar",onClick:d[0]||(d[0]=A=>r.value=false)},[i(v,{name:"history"}),d[3]||(d[3]=e("span",{class:"collapsed-text"},"历史",-1))])):(l(),n(P,{key:1},[o(" 展开的内容 "),e("div",Ld,[e("div",Ed,[e("div",Ad,[d[4]||(d[4]=e("span",{class:"gallery-title"},"历史记录",-1)),S.value>0?(l(),n("span",Md,k(S.value),1)):o("v-if",true)]),e("div",jd,[i(v,{name:"refresh",class:se(["action-icon",{spinning:p.value}]),onClick:pe,title:"刷新"},null,8,["class"]),i(v,{name:"chevron-right",class:"action-icon",onClick:d[1]||(d[1]=A=>r.value=true),title:"收起"})])]),o(" 未登录提示 "),_.value?p.value&&T.value.length===0?(l(),n(P,{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(P,{key:2},[o(" 空状态 "),e("div",Bd,[i(v,{name:"image",class:"empty-icon"}),d[7]||(d[7]=e("p",null,"暂无记录",-1))])],2112)):(l(),n(P,{key:3},[o(" 任务列表 (瀑布流) "),e("div",{class:"gallery-list",ref_key:"listRef",ref:N,onScroll:X},[(l(true),n(P,null,te(T.value,A=>(l(),n("div",{key:A.id,class:se(["task-card",{clickable:A.status==="success"}]),onClick:ae=>b(A)},[o(" 图片区域 - 只显示第一张 "),A.images&&A.images.length>0?(l(),n("div",Kd,[e("img",{src:A.images[0],class:"task-image",loading:"lazy"},null,8,Hd),A.images.length>1?(l(),n("div",Jd," +"+k(A.images.length-1),1)):o("v-if",true)])):A.status==="processing"||A.status==="pending"?(l(),n(P,{key:1},[o(" 处理中动画 "),e("div",Gd,[d[8]||(d[8]=e("div",{class:"processing-animation"},[e("div",{class:"dot"}),e("div",{class:"dot"}),e("div",{class:"dot"})],-1)),e("span",Wd,k(A.status==="pending"?"等待中":"生成中"),1)])],2112)):A.status==="failed"?(l(),n(P,{key:2},[o(" 失败状态 "),e("div",Zd,[i(v,{name:"exclamation-triangle",class:"failed-icon"}),d[9]||(d[9]=e("span",null,"失败",-1))])],2112)):o("v-if",true),o(" 任务信息 "),e("div",Yd,[e("div",{class:"task-prompt",title:A.prompt},k(A.prompt||"(无提示词)"),9,Xd),e("div",Qd,[e("span",eu,k(F(A.createdAt)),1),A.duration?(l(),n("span",tu,k(R(A.duration)),1)):o("v-if",true)])])],10,qd))),128)),o(" 加载更多 "),p.value&&T.value.length>0?(l(),n("div",su,[...d[10]||(d[10]=[e("div",{class:"loader-small"},null,-1)])])):o("v-if",true)],544)],2112)):(l(),n("div",Rd,[i(v,{name:"user",class:"empty-icon"}),d[5]||(d[5]=e("p",null,"请登录查看历史",-1))]))])],2112)),o(" 图片预览弹窗 "),i(bt,{visible:z.value,"onUpdate:visible":d[2]||(d[2]=A=>z.value=A),images:I.value,"initial-index":u.value,prompt:O.value,"created-at":K.value,duration:L.value},null,8,["visible","images","initial-index","prompt","created-at","duration"])],2)}}}),au=me(lu,[["__scopeId","data-v-6cba50e5"]]),nu={class:"preset-picker"},ou={key:0,class:"preset-info"},iu=["src"],ru={key:1,class:"preset-thumb placeholder"},du={class:"preset-details"},uu={class:"preset-name"},cu={key:1,class:"placeholder-text"},vu={class:"picker-header"},pu={class:"preset-count"},mu={class:"picker-content"},fu={class:"ml-masonry"},gu=["onClick"],_u={key:0,class:"card-thumbnail"},yu=["src","alt"],hu={class:"thumbnail-overlay"},bu={key:0,class:"ref-count"},ku={key:1,class:"card-thumbnail placeholder"},$u={class:"card-content"},wu={class:"card-title"},Cu={key:0,class:"card-tags"},Vu={key:0,class:"mini-tag more"},xu={key:2,class:"selected-mark"},Su={key:0,class:"empty-state"},Iu={class:"dialog-footer"},Ou={key:0,class:"preset-detail"},Tu={key:0,class:"detail-thumbnail"},Uu=["src","alt"],zu={class:"detail-section"},Pu={class:"detail-row"},Du={key:0,class:"detail-row"},Nu={class:"detail-tags"},Fu={class:"detail-section"},Lu={class:"prompt-preview"},Eu={key:1,class:"detail-section"},Au={class:"detail-label"},Mu={class:"reference-images"},ju=["src"],Ru={key:2,class:"detail-section"},Bu={class:"param-preview"},qu={class:"dialog-footer"},Ku=de({__name:"PresetPicker",props:{modelValue:{},presets:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=["本地","远程","text2img","img2img","NSFW"],p=$(false),_=$(false),T=$([]),S=$(s.modelValue),f=$(null),w=Z(()=>{const V=new Set;return s.presets.forEach(C=>{(C.tags||[]).forEach(h=>V.add(h))}),Array.from(V).sort()}),N=Z(()=>s.modelValue?s.presets.find(V=>V.id===s.modelValue):null),U=Z(()=>{let V=s.presets;return T.value.length===0?V:V.filter(C=>T.value.every(h=>h==="本地"?C.source==="user":h==="远程"?C.source==="api":(C.tags||[]).includes(h)))}),z=()=>{S.value=s.modelValue,T.value=[],p.value=true},I=V=>{S.value=V.id},u=()=>{c("update:modelValue",S.value),p.value=false},O=()=>{c("update:modelValue",void 0)},K=V=>{f.value=V,_.value=true},L=()=>{f.value&&(c("update:modelValue",f.value.id),_.value=false,p.value=false)};return $e(()=>s.modelValue,V=>{S.value=V}),(V,C)=>{var pe;const h=j("k-icon"),W=j("k-button"),X=j("el-dialog");return l(),n("div",nu,[o(" 当前选中的预设显示 "),e("div",{class:"selected-preset",onClick:z},[N.value?(l(),n("div",ou,[N.value.thumbnail?(l(),n("img",{key:0,src:N.value.thumbnail,class:"preset-thumb"},null,8,iu)):(l(),n("div",ru,[i(h,{name:"image"})])),e("div",du,[e("span",uu,k(N.value.name),1),e("span",{class:se(["preset-source",N.value.source])},k(N.value.source==="api"?"远程":"本地"),3)]),i(h,{name:"times",class:"clear-btn",onClick:ye(O,["stop"]),title:"清除选择"})])):(l(),n("div",cu,[i(h,{name:"layer-group"}),C[6]||(C[6]=e("span",null,"选择预设模板 (可选)",-1))])),i(h,{name:"chevron-down",class:"dropdown-icon"})]),o(" 预设选择弹窗 - 复用 PresetsView 的布局 "),i(X,{modelValue:p.value,"onUpdate:modelValue":C[3]||(C[3]=b=>p.value=b),title:"选择预设",width:"80vw",top:"5vh","close-on-click-modal":true,class:"preset-picker-dialog"},{footer:x(()=>[e("div",Iu,[i(W,{onClick:C[2]||(C[2]=b=>p.value=false)},{default:x(()=>[...C[9]||(C[9]=[M("取消",-1)])]),_:1}),i(W,{type:"primary",onClick:u,disabled:!S.value},{default:x(()=>[...C[10]||(C[10]=[M(" 确认选择 ",-1)])]),_:1},8,["disabled"])])]),default:x(()=>[e("div",vu,[i(pt,{modelValue:T.value,"onUpdate:modelValue":C[0]||(C[0]=b=>T.value=b),"all-tags":w.value,"preset-tags":r},null,8,["modelValue","all-tags"]),e("span",pu,"共 "+k(U.value.length)+" 个预设",1)]),e("div",mu,[e("div",fu,[(l(true),n(P,null,te(U.value,b=>{var F,R;return l(),n("div",{key:b.id,class:"ml-masonry-item"},[e("div",{class:se(["preset-card",{selected:S.value===b.id}]),onClick:D=>I(b)},[o(" 缩略图 "),b.thumbnail?(l(),n("div",_u,[e("img",{src:b.thumbnail,alt:b.name,loading:"lazy"},null,8,yu),e("div",hu,[(F=b.referenceImages)!=null&&F.length?(l(),n("span",bu,[i(h,{name:"image"}),M(" "+k(b.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",ku,[i(h,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",$u,[e("div",wu,k(b.name),1),(R=b.tags)!=null&&R.length?(l(),n("div",Cu,[(l(true),n(P,null,te(b.tags.slice(0,4),D=>(l(),n("span",{key:D,class:"mini-tag"},k(D),1))),128)),b.tags.length>4?(l(),n("span",Vu,"+"+k(b.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮区 "),e("div",{class:"card-actions",onClick:C[1]||(C[1]=ye(()=>{},["stop"]))},[i(W,{size:"mini",onClick:D=>K(b)},{icon:x(()=>[i(h,{name:"eye"})]),default:x(()=>[C[7]||(C[7]=M(" 详情 ",-1))]),_:1},8,["onClick"])]),o(" 来源标记 "),e("div",{class:se(["source-indicator",b.source])},k(b.source==="api"?"远程":"本地"),3),o(" 选中标记 "),S.value===b.id?(l(),n("div",xu,[i(h,{name:"check"})])):o("v-if",true)],10,gu)])}),128))]),o(" 空状态 "),U.value.length===0?(l(),n("div",Su,[i(h,{name:"search",class:"empty-icon"}),C[8]||(C[8]=e("p",null,"没有找到匹配的预设",-1))])):o("v-if",true)])]),_:1},8,["modelValue"]),o(" 预设详情弹窗 "),i(X,{modelValue:_.value,"onUpdate:modelValue":C[5]||(C[5]=b=>_.value=b),title:((pe=f.value)==null?void 0:pe.name)||"预设详情",width:"600px","close-on-click-modal":true,class:"preset-detail-dialog"},{footer:x(()=>[e("div",qu,[i(W,{onClick:C[4]||(C[4]=b=>_.value=false)},{default:x(()=>[...C[15]||(C[15]=[M("关闭",-1)])]),_:1}),i(W,{type:"primary",onClick:L},{icon:x(()=>[i(h,{name:"check"})]),default:x(()=>[C[16]||(C[16]=M(" 选择此预设 ",-1))]),_:1})])]),default:x(()=>{var b,F;return[f.value?(l(),n("div",Ou,[o(" 缩略图 "),f.value.thumbnail?(l(),n("div",Tu,[e("img",{src:f.value.thumbnail,alt:f.value.name},null,8,Uu)])):o("v-if",true),o(" 基本信息 "),e("div",zu,[e("div",Pu,[C[11]||(C[11]=e("span",{class:"detail-label"},"来源:",-1)),e("span",{class:se(["source-badge",f.value.source])},k(f.value.source==="api"?"远程":"本地"),3)]),(b=f.value.tags)!=null&&b.length?(l(),n("div",Du,[C[12]||(C[12]=e("span",{class:"detail-label"},"标签:",-1)),e("div",Nu,[(l(true),n(P,null,te(f.value.tags,R=>(l(),n("span",{key:R,class:"mini-tag"},k(R),1))),128))])])):o("v-if",true)]),o(" Prompt 模板 "),e("div",Fu,[C[13]||(C[13]=e("div",{class:"detail-label"},"Prompt 模板:",-1)),e("div",Lu,k(f.value.promptTemplate),1)]),o(" 参考图 "),(F=f.value.referenceImages)!=null&&F.length?(l(),n("div",Eu,[e("div",Au,"参考图片 ("+k(f.value.referenceImages.length)+"):",1),e("div",Mu,[(l(true),n(P,null,te(f.value.referenceImages,(R,D)=>(l(),n("img",{key:D,src:R,class:"ref-image"},null,8,ju))),128))])])):o("v-if",true),o(" 参数覆盖 "),f.value.parameterOverrides&&Object.keys(f.value.parameterOverrides).length?(l(),n("div",Ru,[C[14]||(C[14]=e("div",{class:"detail-label"},"参数覆盖:",-1)),e("div",Bu,k(JSON.stringify(f.value.parameterOverrides,null,2)),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue","title"])])}}}),Hu=me(Ku,[["__scopeId","data-v-59115136"]]),Ju={class:"view-container"},Gu={class:"view-content"},Wu={class:"generate-layout"},Zu={class:"config-panel"},Yu={class:"form-section"},Xu={class:"section-title"},Qu={class:"form-item"},ec={class:"form-item"},tc={class:"form-section flex-grow"},sc={class:"section-title"},lc={class:"form-section"},ac={class:"section-title"},nc={class:"upload-area"},oc={key:0,class:"upload-list"},ic=["src"],rc=["onClick"],dc={class:"form-actions"},uc={class:"preview-panel"},cc={key:0,class:"generating-state"},vc={class:"generating-content"},pc={class:"generating-info"},mc={class:"generating-timer"},fc={key:0,class:"generating-hint"},gc={class:"result-container"},_c={key:0,class:"success-result"},yc={class:"output-grid"},hc=["src","onClick"],bc={class:"output-actions"},kc=["href"],$c=["src"],wc=["src"],Cc=["href"],Vc={class:"text-output"},xc=["href"],Sc={class:"result-meta"},Ic={class:"meta-item success-badge"},Oc={key:0,class:"meta-item"},Tc={key:1,class:"meta-item"},Uc={class:"error-result"},zc={class:"error-content"},Pc={class:"error-info"},Dc={class:"error-msg"},Nc={key:0,class:"error-meta"},Fc={key:1,class:"error-meta"},Lc={class:"empty-state"},Ec=de({__name:"GenerateView",setup(t){const a=$([]),s=$([]),c=$(false),r=$(null),p=$([]),_=$([]),T=$(),S=$();let f=0;const w=$(0),N=$(null);let U=null,z=0;const I=$({channel:void 0,prompt:"",parameters:{}}),u=$(void 0),O=$(false),K=$([]),L=$(0),V=$(""),C=J=>{if(J<1e3)return`${J}ms`;const E=J/1e3;if(E<60)return`${E.toFixed(1)}s`;const Q=Math.floor(E/60),ie=(E%60).toFixed(0);return`${Q}m ${ie}s`},h=()=>{z=Date.now(),w.value=0,U=setInterval(()=>{w.value=Date.now()-z},100)},W=()=>{U&&(clearInterval(U),U=null)},X=J=>{var E;(E=r.value)!=null&&E.output&&(K.value=r.value.output.filter(Q=>Q.kind==="image"&&Q.url).map(Q=>Q.url),L.value=J,O.value=true)},pe=async()=>{try{const[J,E]=await Promise.all([Fe.list(),ze.list()]);a.value=J,s.value=E}catch(J){console.error(J)}},b=J=>new Promise((E,Q)=>{const ie=new FileReader;ie.onload=()=>{const ve=ie.result.split(",")[1];E(ve)},ie.onerror=Q,ie.readAsDataURL(J)}),F=()=>{var J;(J=T.value)==null||J.click()},R=async J=>{const E=J.target;!E.files||E.files.length===0||(await m(Array.from(E.files)),E.value="")},D=async J=>{var Q;const E=(Q=J.dataTransfer)==null?void 0:Q.files;!E||E.length===0||await m(Array.from(E).filter(ie=>ie.type.startsWith("image/")))},m=async J=>{const E=4-p.value.length;if(E<=0){ee.warning("最多上传 4 张图片");return}const Q=J.slice(0,E);for(const ie of Q){const he=URL.createObjectURL(ie);p.value.push({uid:++f,url:he,raw:ie});try{const ve=await b(ie);_.value.push({type:"image",base64:ve,mimeType:ie.type,filename:ie.name})}catch(ve){console.error("Failed to read file:",ie.name,ve)}}},d=J=>{const E=p.value[J];E&&(URL.revokeObjectURL(E.url),p.value.splice(J,1),_.value.splice(J,1))},v=async J=>{var E,Q,ie,he;try{const ve=await Le.get(J);if(V.value=((Q=(E=ve.middlewareLogs)==null?void 0:E.preset)==null?void 0:Q.transformedPrompt)||((ie=ve.requestSnapshot)==null?void 0:ie.prompt)||"",ve.status==="success"&&ve.responseSnapshot&&ve.responseSnapshot.length>0)return{success:true,output:ve.responseSnapshot,taskId:ve.id,duration:ve.duration||void 0};if(ve.status==="failed"){const ge=(he=ve.middlewareLogs)==null?void 0:he._error;return{success:false,error:(ge==null?void 0:ge.message)||"生成失败",taskId:ve.id,duration:ve.duration||void 0}}return null}catch{return null}},A=async()=>{var J,E,Q,ie,he,ve;if(!I.value.channel){ee.warning("请选择渠道");return}c.value=true,r.value=null,N.value=null,h();try{const ge={channelId:I.value.channel,prompt:I.value.prompt||"",parameters:{...I.value.parameters}};if(_.value.length>0&&(ge.files=_.value),u.value){const B=s.value.find(g=>g.id===u.value);B&&(ge.parameters.preset=B.name)}const fe=await Cs.generate(ge);if(fe.taskId&&(N.value=fe.taskId),fe.success)if(r.value=fe,(J=S.value)==null||J.refresh(),fe.taskId)try{const B=await Le.get(fe.taskId);V.value=((Q=(E=B.middlewareLogs)==null?void 0:E.preset)==null?void 0:Q.transformedPrompt)||((ie=B.requestSnapshot)==null?void 0:ie.prompt)||""}catch{V.value=I.value.prompt}else V.value=I.value.prompt;else if(fe.taskId){await new Promise(g=>setTimeout(g,500));const B=await v(fe.taskId);B&&B.success?(r.value=B,(he=S.value)==null||he.refresh()):r.value=fe}else r.value=fe}catch(ge){if(N.value){await new Promise(B=>setTimeout(B,500));const fe=await v(N.value);fe?(r.value=fe,fe.success&&((ve=S.value)==null||ve.refresh())):r.value={success:false,error:ge.message||"请求失败"}}else r.value={success:false,error:ge.message||"请求失败"}}finally{W(),c.value=false}},ae=J=>{J.prompt&&(I.value.prompt=J.prompt)};return we(()=>{pe()}),et(()=>{W()}),(J,E)=>{var B;const Q=j("k-icon"),ie=j("el-option"),he=j("el-select"),ve=j("el-input"),ge=j("k-button"),fe=j("k-card");return l(),n("div",Ju,[e("div",Gu,[e("div",Wu,[o(" 左侧配置区 "),e("div",Zu,[i(fe,{class:"config-card"},{default:x(()=>[e("div",Yu,[e("div",Xu,[i(Q,{name:"settings"}),E[5]||(E[5]=M(" 基础配置 ",-1))]),e("div",Qu,[E[6]||(E[6]=e("div",{class:"label"},"生成渠道",-1)),i(he,{modelValue:I.value.channel,"onUpdate:modelValue":E[0]||(E[0]=g=>I.value.channel=g),placeholder:"选择生成渠道",style:{width:"100%"}},{default:x(()=>[(l(true),n(P,null,te(a.value,g=>(l(),le(ie,{key:g.id,label:g.name,value:g.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",ec,[E[7]||(E[7]=e("div",{class:"label"},"预设模板",-1)),i(Hu,{modelValue:u.value,"onUpdate:modelValue":E[1]||(E[1]=g=>u.value=g),presets:s.value},null,8,["modelValue","presets"])])]),e("div",tc,[e("div",sc,[i(Q,{name:"edit"}),E[8]||(E[8]=M(" 提示词 ",-1))]),i(ve,{modelValue:I.value.prompt,"onUpdate:modelValue":E[2]||(E[2]=g=>I.value.prompt=g),type:"textarea",rows:8,placeholder:"输入提示词,支持自然语言描述...",resize:"none",class:"prompt-input"},null,8,["modelValue"])]),o(" 文件上传区域 "),e("div",lc,[e("div",ac,[i(Q,{name:"image"}),E[9]||(E[9]=M(" 参考图片 ",-1))]),e("div",nc,[o(" 已上传的图片列表 "),p.value.length>0?(l(),n("div",oc,[(l(true),n(P,null,te(p.value,(g,y)=>(l(),n("div",{key:g.uid,class:"upload-item"},[e("img",{src:g.url,class:"upload-thumb"},null,8,ic),e("div",{class:"upload-overlay",onClick:G=>d(y)},[i(Q,{name:"delete"})],8,rc)]))),128))])):o("v-if",true),o(" 上传按钮 "),p.value.length<4?(l(),n("div",{key:1,class:"upload-trigger",onClick:F,onDragover:E[3]||(E[3]=ye(()=>{},["prevent"])),onDrop:ye(D,["prevent"])},[e("input",{ref_key:"fileInput",ref:T,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:R},null,544),i(Q,{name:"add",class:"upload-icon"})],32)):o("v-if",true),E[10]||(E[10]=e("div",{class:"upload-tip"},"点击或拖拽上传,最多 4 张",-1))])]),e("div",dc,[i(ge,{solid:"",type:"primary",loading:c.value,onClick:A,class:"generate-btn"},{icon:x(()=>[i(Q,{name:"magic"})]),default:x(()=>[E[11]||(E[11]=M(" 生成图片 ",-1))]),_:1},8,["loading"])])]),_:1})]),o(" 右侧预览区 "),e("div",uc,[o(" 生成中状态 "),c.value?(l(),n("div",cc,[e("div",vc,[E[13]||(E[13]=e("div",{class:"loader"},null,-1)),e("div",pc,[E[12]||(E[12]=e("p",{class:"generating-title"},"正在生成中...",-1)),e("p",mc,[i(Q,{name:"stopwatch"}),M(" 已用时间: "+k(C(w.value)),1)]),N.value?(l(),n("p",fc,"任务 ID: "+k(N.value),1)):o("v-if",true)])])])):r.value?(l(),n(P,{key:1},[o(" 有结果 "),e("div",gc,[o(" 成功状态 "),r.value.success&&r.value.output&&r.value.output.length?(l(),n("div",_c,[e("div",yc,[(l(true),n(P,null,te(r.value.output,(g,y)=>{var G;return l(),n("div",{key:y,class:"output-wrapper"},[o(" 图片 "),g.kind==="image"?(l(),n(P,{key:0},[e("img",{src:g.url,onClick:oe=>X(y),class:"clickable-image"},null,8,hc),e("div",bc,[e("a",{href:g.url,target:"_blank",class:"action-btn",download:""},[i(Q,{name:"download"})],8,kc)])],64)):g.kind==="video"?(l(),n(P,{key:1},[o(" 视频 "),e("video",{src:g.url,controls:"",class:"output-video"},null,8,$c)],64)):g.kind==="audio"?(l(),n(P,{key:2},[o(" 音频 "),e("audio",{src:g.url,controls:"",class:"output-audio"},null,8,wc)],64)):g.kind==="file"?(l(),n(P,{key:3},[o(" 其他文件 "),e("a",{href:g.url,target:"_blank",class:"file-link"},[i(Q,{name:"file"}),M(" "+k(((G=g.meta)==null?void 0:G.filename)||"下载文件"),1)],8,Cc)],64)):g.kind==="text"?(l(),n(P,{key:4},[o(" 文本 "),e("div",Vc,k(g.content),1)],64)):g.url?(l(),n(P,{key:5},[o(" 兜底:有 url 则显示链接 "),e("a",{href:g.url,target:"_blank"},k(g.url),9,xc)],64)):o("v-if",true)])}),128))]),e("div",Sc,[e("span",Ic,[i(Q,{name:"check-circle"}),E[14]||(E[14]=M(" 生成成功 ",-1))]),r.value.duration?(l(),n("span",Oc,[i(Q,{name:"stopwatch"}),M(" 耗时: "+k(C(r.value.duration)),1)])):o("v-if",true),r.value.taskId?(l(),n("span",Tc,[i(Q,{name:"list-alt"}),M(" 任务 ID: "+k(r.value.taskId),1)])):o("v-if",true)])])):(l(),n(P,{key:1},[o(" 失败状态 "),e("div",Uc,[e("div",zc,[i(Q,{name:"exclamation-triangle",class:"error-icon"}),e("div",Pc,[E[15]||(E[15]=e("p",{class:"error-title"},"生成失败",-1)),e("p",Dc,k(r.value.error||"未知错误"),1),r.value.taskId?(l(),n("p",Nc,"任务 ID: "+k(r.value.taskId),1)):o("v-if",true),r.value.duration?(l(),n("p",Fc,"耗时: "+k(C(r.value.duration)),1)):o("v-if",true)])]),i(ge,{class:"retry-btn",onClick:A},{icon:x(()=>[i(Q,{name:"refresh"})]),default:x(()=>[E[16]||(E[16]=M(" 重新生成 ",-1))]),_:1})])],2112))])],2112)):(l(),n(P,{key:2},[o(" 空状态 "),e("div",Lc,[i(Q,{name:"image",class:"empty-icon"}),E[17]||(E[17]=e("p",null,"在左侧配置并点击生成",-1))])],2112))]),o(" 右侧历史画廊 "),i(au,{ref_key:"historyGalleryRef",ref:S,onSelect:ae},null,512)])]),o(" 图片预览弹窗 "),i(bt,{visible:O.value,"onUpdate:visible":E[4]||(E[4]=g=>O.value=g),images:K.value,"initial-index":L.value,prompt:V.value,duration:(B=r.value)==null?void 0:B.duration},null,8,["visible","images","initial-index","prompt","duration"])])}}}),Et=me(Ec,[["__scopeId","data-v-a3441aa4"]]),Ac={class:"pipeline-panel"},Mc={class:"pipeline-flow"},jc={class:"phase-icon"},Rc={class:"phase-info"},Bc={class:"phase-name"},qc={class:"phase-desc"},Kc={class:"phase-badge"},Hc={key:0,class:"phase-middlewares"},Jc={class:"mw-card"},Gc={class:"mw-content"},Wc={class:"mw-name"},Zc={class:"mw-desc"},Yc=["title"],Xc=["checked","onChange"],Qc={key:2,class:"phase-connector"},ev={class:"connector-arrow"},tv=de({__name:"MiddlewaresPanel",setup(t){const a=$([]),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"}],c={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},r=T=>a.value.filter(S=>S.phase===T),p=async()=>{try{a.value=await Ge.list()}catch{ee.error("加载中间件列表失败")}},_=async T=>{const S=!T.enabled;try{await Ge.update(T.name,{enabled:S}),T.enabled=S,ee.success(S?"已启用":"已禁用")}catch{ee.error("操作失败")}};return we(p),(T,S)=>{const f=j("k-icon");return l(),n("div",Ac,[o(" 标题区 "),S[5]||(S[5]=e("div",{class:"panel-header"},[e("div",{class:"header-title"},[e("h3",null,"请求执行流程"),e("span",{class:"subtitle"},"每个生成请求按以下阶段依次处理")])],-1)),o(" 流程图 "),e("div",Mc,[(l(),n(P,null,te(s,(w,N)=>e("div",{key:w.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:se(["phase-header",w.colorClass])},[e("div",jc,[i(f,{name:w.icon},null,8,["name"])]),e("div",Rc,[e("span",Bc,k(w.label),1),e("span",qc,k(w.description),1)]),e("span",Kc,k(r(w.id).length),1)],2),o(" 中间件列表 "),r(w.id).length>0?(l(),n("div",Hc,[(l(true),n(P,null,te(r(w.id),(U,z)=>(l(),n("div",{key:U.name,class:se(["mw-item",{disabled:!U.enabled}])},[e("div",Jc,[e("div",{class:se(["mw-status",{active:U.enabled}])},null,2),e("div",Gc,[e("span",Wc,k(U.displayName),1),e("span",Zc,k(U.description||c[U.category]||U.category),1)]),e("label",{class:"toggle-switch",onClick:S[0]||(S[0]=ye(()=>{},["stop"])),title:U.enabled?"点击禁用":"点击启用"},[e("input",{type:"checkbox",checked:U.enabled,onChange:I=>_(U)},null,40,Xc),S[1]||(S[1]=e("span",{class:"slider"},null,-1))],8,Yc)])],2))),128))])):(l(),n(P,{key:1},[o(" 空状态 "),S[2]||(S[2]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),N<s.length-1?(l(),n("div",Qc,[S[3]||(S[3]=e("div",{class:"connector-line"},null,-1)),e("div",ev,[i(f,{name:"chevron-down"})]),S[4]||(S[4]=e("div",{class:"connector-line"},null,-1))])):o("v-if",true)])),64))]),o(" 底部说明 "),S[6]||(S[6]=ct('<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))])}}}),sv=me(tv,[["__scopeId","data-v-b4b0cf47"]]),lv={class:"plugins-panel"},av={key:0,class:"loading-state"},nv={class:"empty-state"},ov={class:"plugins-list"},iv=["onClick"],rv={class:"plugin-info"},dv={class:"plugin-header"},uv={class:"plugin-name"},cv={key:0,class:"plugin-version"},vv={class:"plugin-description"},pv={class:"plugin-status"},mv={key:0,class:"plugin-badge connector"},fv={key:1,class:"plugin-badge middleware"},gv={key:0,class:"plugin-detail"},_v={class:"detail-header"},yv={class:"header-left"},hv={key:0,class:"version"},bv={class:"header-actions"},kv={key:0,class:"connector-info"},$v={class:"connector-meta"},wv={class:"connector-id"},Cv={class:"connector-types"},Vv={key:1,class:"middlewares-list"},xv={class:"middleware-tags"},Sv={class:"phase-badge"},Iv={key:2,class:"config-section"},Ov={class:"config-actions"},Tv={class:"no-config"},Uv={class:"no-selection"},zv=de({__name:"PluginsPanel",setup(t){const a=$(true),s=$([]),c=$(null),r=$({}),p=$(false),_={"lifecycle-prepare":"准备","lifecycle-pre-request":"前置","lifecycle-request":"请求","lifecycle-post-request":"后置","lifecycle-finalize":"完成"},T=U=>_[U]||U,S=async()=>{try{a.value=true,s.value=await rt.list()}catch(U){console.error("Failed to load plugins:",U),s.value=[]}finally{a.value=false}},f=U=>{c.value=U,r.value={...U.config};for(const z of U.configFields||[])r.value[z.key]===void 0&&z.default!==void 0&&(r.value[z.key]=z.default)},w=async()=>{if(c.value){p.value=true;try{await rt.updateConfig(c.value.id,r.value),ee.success("保存成功"),await S();const U=s.value.find(z=>{var I;return z.id===((I=c.value)==null?void 0:I.id)});U&&(c.value=U,r.value={...U.config})}catch{ee.error("保存失败")}finally{p.value=false}}},N=async U=>{var z;try{const I=await tt(U.apiEvent);if((I==null?void 0:I.success)===false)throw new Error(I.error||"操作失败");if(U.apiEvent==="media-luna/presets/sync"&&(I!=null&&I.data)){const{added:u,updated:O,removed:K,notModified:L}=I.data;L?ee.info("数据未变化,无需更新"):ee.success(`同步完成:新增 ${u},更新 ${O},删除 ${K}`)}else(z=I==null?void 0:I.data)!=null&&z.message?ee.success(I.data.message):ee.success(`${U.label} 完成`);await S()}catch(I){ee.error(`${U.label} 失败: ${I instanceof Error?I.message:"未知错误"}`)}};return we(S),(U,z)=>{var O,K,L;const I=j("k-icon"),u=j("k-button");return l(),n("div",lv,[o(" 加载状态 "),a.value?(l(),n("div",av,[i(I,{name:"sync",class:"spin"}),z[1]||(z[1]=e("span",null,"加载中...",-1))])):s.value.length===0?(l(),n(P,{key:1},[o(" 空状态 "),e("div",nv,[i(I,{name:"apps"}),z[2]||(z[2]=e("p",null,"暂无扩展插件",-1)),z[3]||(z[3]=e("p",{class:"hint"},[M("第三方扩展插件将在这里显示"),e("br"),M('内置功能请在"功能模块"中配置')],-1))])],2112)):(l(),n(P,{key:2},[o(" 插件列表 "),e("div",ov,[(l(true),n(P,null,te(s.value,V=>{var C,h;return l(),n("div",{key:V.id,class:se(["plugin-card",{active:((C=c.value)==null?void 0:C.id)===V.id,disabled:!V.enabled}]),onClick:W=>f(V)},[e("div",rv,[e("div",dv,[e("span",uv,k(V.name),1),V.version?(l(),n("span",cv,"v"+k(V.version),1)):o("v-if",true)]),e("p",vv,k(V.description||"暂无描述"),1)]),e("div",pv,[V.connector?(l(),n("span",mv,"连接器")):o("v-if",true),(h=V.middlewares)!=null&&h.length?(l(),n("span",fv,k(V.middlewares.length)+" 个中间件 ",1)):o("v-if",true),i(I,{name:V.enabled?"check-circle":"close-circle",class:se(V.enabled?"enabled":"disabled")},null,8,["name","class"])])],10,iv)}),128))]),o(" 插件详情 "),c.value?(l(),n("div",gv,[e("header",_v,[e("div",yv,[e("h3",null,k(c.value.name),1),c.value.version?(l(),n("span",hv,"v"+k(c.value.version),1)):o("v-if",true)]),e("div",bv,[(l(true),n(P,null,te(c.value.actions,V=>(l(),le(u,{key:V.name,type:V.type||"default",size:"small",onClick:C=>N(V)},gs({default:x(()=>[M(" "+k(V.label),1)]),_:2},[V.icon?{name:"icon",fn:x(()=>[i(I,{name:V.icon},null,8,["name"])]),key:"0"}:void 0]),1032,["type","onClick"]))),128))])]),o(" 连接器信息 "),c.value.connector?(l(),n("div",kv,[z[4]||(z[4]=e("h4",null,"连接器",-1)),e("div",$v,[e("span",wv,k(c.value.connector.id),1),e("span",Cv," 支持: "+k(((O=c.value.connector.supportedTypes)==null?void 0:O.join(", "))||"无"),1)])])):o("v-if",true),o(" 中间件列表 "),(K=c.value.middlewares)!=null&&K.length?(l(),n("div",Vv,[z[5]||(z[5]=e("h4",null,"中间件",-1)),e("div",xv,[(l(true),n(P,null,te(c.value.middlewares,V=>(l(),n("span",{key:V.name,class:se(["middleware-tag",{enabled:V.enabled}])},[M(k(V.displayName||V.name)+" ",1),e("span",Sv,k(T(V.phase)),1)],2))),128))])])):o("v-if",true),o(" 配置表单 "),(L=c.value.configFields)!=null&&L.length?(l(),n("div",Iv,[z[7]||(z[7]=e("h4",null,"配置",-1)),i(at,{fields:c.value.configFields,modelValue:r.value,"onUpdate:modelValue":z[0]||(z[0]=V=>r.value=V),"presets-map":c.value.presets},null,8,["fields","modelValue","presets-map"]),e("div",Ov,[i(u,{type:"primary",onClick:w,loading:p.value},{icon:x(()=>[i(I,{name:"save"})]),default:x(()=>[z[6]||(z[6]=M(" 保存配置 ",-1))]),_:1},8,["loading"])])])):(l(),n(P,{key:3},[o(" 无配置提示 "),e("div",Tv,[i(I,{name:"info-circle"}),z[8]||(z[8]=e("span",null,"该插件暂无可配置项",-1))])],2112))])):(l(),n(P,{key:1},[o(" 无选中提示 "),e("div",Uv,[i(I,{name:"apps"}),z[9]||(z[9]=e("p",null,"请从左侧选择一个插件查看详情",-1))])],2112))],64))])}}}),Pv=me(zv,[["__scopeId","data-v-a53de4c8"]]),Dv={class:"settings-view"},Nv={class:"sidebar"},Fv={class:"nav-list"},Lv=["onClick"],Ev={class:"main-content"},Av={key:0,class:"loading"},Mv={class:"panel-header"},jv={key:0},Rv={class:"custom-panel"},Bv={class:"actions"},qv=de({__name:"SettingsView",setup(t){const a=$(true),s=$([]),c=$(""),r=$({}),p=Z(()=>s.value.find(f=>f.id===c.value)),_=async()=>{try{s.value=await wt.panels(),s.value.length&&!c.value&&(c.value=s.value[0].id)}catch{ee.error("加载设置面板失败")}},T=()=>{var f;if(((f=p.value)==null?void 0:f.type)==="custom"){r.value={...p.value.config||{}};for(const w of p.value.configFields||[])r.value[w.key]===void 0&&w.default!==void 0&&(r.value[w.key]=w.default)}},S=async()=>{if(p.value)try{await wt.update(p.value.id,r.value),ee.success("保存成功"),await _()}catch{ee.error("保存失败")}};return $e(c,()=>{var f;((f=p.value)==null?void 0:f.type)==="custom"&&T()}),we(async()=>{await _(),a.value=false}),(f,w)=>{const N=j("k-icon"),U=j("k-button");return l(),n("div",Dv,[o(" 侧边栏导航 "),e("aside",Nv,[e("nav",Fv,[(l(true),n(P,null,te(s.value,z=>(l(),n("div",{key:z.id,class:se(["nav-item",{active:c.value===z.id}]),onClick:I=>c.value=z.id},[i(N,{name:z.icon},null,8,["name"]),e("span",null,k(z.name),1)],10,Lv))),128))])]),o(" 主内容区 "),e("main",Ev,[a.value?(l(),n("div",Av,[i(N,{name:"sync",class:"spin"}),w[1]||(w[1]=M(" 加载中... ",-1))])):p.value?(l(),n(P,{key:1},[o(" 面板标题 "),e("header",Mv,[e("h2",null,k(p.value.name),1),p.value.description?(l(),n("p",jv,k(p.value.description),1)):o("v-if",true)]),o(" 功能模块面板 "),p.value.component==="middlewares"?(l(),le(sv,{key:0})):p.value.component==="plugins"?(l(),n(P,{key:1},[o(" 扩展插件面板 "),i(Pv)],64)):p.value.type==="custom"&&p.value.configFields?(l(),n(P,{key:2},[o(" 自定义面板 "),e("div",Rv,[i(at,{fields:p.value.configFields,modelValue:r.value,"onUpdate:modelValue":w[0]||(w[0]=z=>r.value=z)},null,8,["fields","modelValue"]),e("div",Bv,[i(U,{type:"primary",onClick:S},{icon:x(()=>[i(N,{name:"save"})]),default:x(()=>[w[2]||(w[2]=M(" 保存 ",-1))]),_:1})])])],64)):o("v-if",true)],64)):o("v-if",true)])])}}}),Kv=me(qv,[["__scopeId","data-v-5fa778a6"]]),Hv={class:"setup-storage"},Jv={key:0,class:"loading-state"},Gv={key:0,class:"warning-box"},Wv={class:"step-actions"},Zv=de({__name:"SetupStorage",props:{modelValue:{},saving:{type:Boolean}},emits:["update:modelValue","next"],setup(t,{emit:a}){const s=t,c=a,r=$(true),p=$([]),_=$({});$e(_,f=>{c("update:modelValue",{...f})},{deep:true});const T=async()=>{try{r.value=true;const[f,w]=await Promise.all([Se.getStorageFields(),Se.getStorageConfig()]);p.value=f;const N={...s.modelValue};for(const U of f)w[U.key]!==void 0?N[U.key]=w[U.key]:N[U.key]===void 0&&U.default!==void 0&&(N[U.key]=U.default);_.value=N}catch(f){console.error("Failed to load storage config:",f)}finally{r.value=false}},S=()=>{c("next")};return we(T),(f,w)=>{const N=j("k-icon"),U=j("k-button");return l(),n("div",Hv,[w[4]||(w[4]=e("h3",null,"存储配置",-1)),w[5]||(w[5]=e("p",{class:"step-desc"},"选择生成图片的存储方式。推荐使用本地存储或 S3 兼容存储。",-1)),r.value?(l(),n("div",Jv,[i(N,{name:"sync",class:"spin"}),w[1]||(w[1]=e("span",null,"加载配置中...",-1))])):(l(),n(P,{key:1},[o(" 使用 ConfigRenderer 渲染配置字段 "),i(at,{fields:p.value,modelValue:_.value,"onUpdate:modelValue":w[0]||(w[0]=z=>_.value=z)},null,8,["fields","modelValue"]),o(" 警告提示(当选择不使用时) "),_.value.backend==="none"?(l(),n("div",Gv,[i(N,{name:"warning"}),w[2]||(w[2]=e("div",null,[e("strong",null,"注意"),e("p",null,'选择"不使用"将保留生成服务返回的原始 URL,这些 URL 可能会过期或无法访问。建议配置存储后端以确保图片长期可用。')],-1))])):o("v-if",true)],64)),o(" 操作按钮 "),e("div",Wv,[i(U,{type:"primary",loading:t.saving,disabled:r.value,onClick:S},{default:x(()=>[...w[3]||(w[3]=[M(" 下一步 ",-1)])]),_:1},8,["loading","disabled"])])])}}}),Yv=me(Zv,[["__scopeId","data-v-9aeaae19"]]),Xv={class:"setup-auth"},Qv={class:"config-panel"},ep={class:"form-row"},tp={class:"field-container"},sp={class:"verify-section"},lp={class:"verify-card"},ap={class:"code-display"},np={class:"code-value"},op={class:"code-meta"},ip={class:"step-actions"},rp=de({__name:"SetupAuth",props:{saving:{type:Boolean}},emits:["complete","skip"],setup(t,{emit:a}){const s=a,c=$(null),r=$(false),p=$(""),_=$(0),T=$(null);let S=null,f=null;const w=async()=>{try{const u=await Se.status();u.boundUid&&(c.value=u.boundUid,T.value=u.boundUid)}catch(u){console.error("Failed to load status:",u)}},N=async()=>{if(U&&clearTimeout(U),!!c.value)try{r.value=true;const u=await Se.generateVerifyCode(c.value);p.value=u.code,_.value=u.expiresIn,ee.success("验证码已生成,请在聊天平台完成验证")}catch(u){ee.error("生成验证码失败: "+(u instanceof Error?u.message:"未知错误"))}finally{r.value=false}};let U=null;const z=()=>{U&&clearTimeout(U),p.value="",c.value&&(U=window.setTimeout(N,1e3))},I=async()=>{if(!c.value){ee.warning("请输入用户 ID");return}try{await Se.bindUid(c.value),ee.success("配置已保存"),s("complete")}catch(u){ee.error("保存失败: "+(u instanceof Error?u.message:"未知错误"))}};return we(()=>{w(),S=hs("media-luna/webui-auth/bind-request",u=>{u.uid&&(c.value=u.uid,u.code&&(p.value=u.code,_.value=u.expiresIn,ee.info("收到绑定请求,请在聊天平台完成验证")))}),f=window.setInterval(async()=>{try{const u=await Se.status();if(u.boundUid){if(c.value&&u.boundUid!==c.value)return;u.boundUid!==T.value&&(c.value=u.boundUid,ee.success("检测到绑定成功!"),s("complete"),f&&clearInterval(f))}}catch{}},3e3)}),et(()=>{S&&S(),f&&clearInterval(f)}),(u,O)=>{const K=j("el-input-number"),L=j("k-button");return l(),n("div",Xv,[O[8]||(O[8]=e("h3",null,"用户绑定",-1)),O[9]||(O[9]=e("p",{class:"step-desc"}," 将 WebUI 与 Koishi 用户绑定。你可以直接配置用户 ID,也可以通过验证码进行验证绑定。 ",-1)),e("div",Qv,[o(" UID 输入 "),e("div",ep,[O[3]||(O[3]=e("div",{class:"form-label"},"用户 ID (UID)",-1)),e("div",tp,[i(K,{modelValue:c.value,"onUpdate:modelValue":O[0]||(O[0]=V=>c.value=V),min:1,controls:false,placeholder:"Koishi 用户 ID",class:"uid-input full-width",onInput:z},null,8,["modelValue"]),O[2]||(O[2]=e("div",{class:"field-desc"},[M(" 输入你的 Koishi "),e("code",null,"uid"),M(",不是原神的。 ")],-1))])]),o(" 验证码显示区域 "),e("div",sp,[e("div",lp,[e("div",ap,[O[4]||(O[4]=e("div",{class:"code-label"},"验证码",-1)),e("div",np,k(p.value),1),e("div",op,"有效期 "+k(_.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",ip,[i(L,{onClick:O[1]||(O[1]=V=>u.$emit("skip"))},{default:x(()=>[...O[6]||(O[6]=[M("跳过",-1)])]),_:1}),i(L,{type:"primary",loading:t.saving,onClick:I},{default:x(()=>[...O[7]||(O[7]=[M(" 保存 / 完成 ",-1)])]),_:1},8,["loading"])])])}}}),dp=me(rp,[["__scopeId","data-v-59078dbb"]]),up={class:"setup-wizard"},cp={class:"wizard-container"},vp={class:"steps-indicator"},pp={class:"step-number"},mp={key:1},fp={class:"step-label"},gp={class:"wizard-content"},_p={key:"complete",class:"step-complete"},yp={class:"complete-icon"},hp=de({__name:"SetupWizard",emits:["complete"],setup(t,{emit:a}){const s=a,c=[{id:"storage",label:"存储配置"},{id:"auth",label:"用户绑定"},{id:"complete",label:"完成"}],r=$(0),p=$(false),_=$({}),T=async()=>{p.value=true;try{await Se.updateStorageConfig(_.value),ee.success("存储配置已保存"),r.value=1}catch(N){ee.error("保存失败: "+(N instanceof Error?N.message:"未知错误"))}finally{p.value=false}},S=()=>{r.value=2},f=()=>{r.value=2},w=async()=>{try{await Se.complete(),s("complete")}catch{s("complete")}};return(N,U)=>{const z=j("k-icon"),I=j("k-button");return l(),n("div",up,[e("div",cp,[o(" 头部 "),U[4]||(U[4]=e("div",{class:"wizard-header"},[e("h1",null,"欢迎使用 Media Luna"),e("p",null,"在开始使用前,请完成以下基础配置")],-1)),o(" 步骤指示器 "),e("div",vp,[(l(),n(P,null,te(c,(u,O)=>e("div",{key:u.id,class:se(["step-item",{active:r.value===O,completed:r.value>O}])},[e("div",pp,[r.value>O?(l(),le(z,{key:0,name:"check"})):(l(),n("span",mp,k(O+1),1))]),e("span",fp,k(u.label),1)],2)),64))]),o(" 步骤内容 "),e("div",gp,[i(Qe,{name:"fade",mode:"out-in"},{default:x(()=>[r.value===0?(l(),le(Yv,{key:"storage",modelValue:_.value,"onUpdate:modelValue":U[0]||(U[0]=u=>_.value=u),saving:p.value,onNext:T},null,8,["modelValue","saving"])):r.value===1?(l(),le(dp,{key:"auth",saving:p.value,onComplete:S,onSkip:f},null,8,["saving"])):r.value===2?(l(),n("div",_p,[e("div",yp,[i(z,{name:"check-circle"})]),U[2]||(U[2]=e("h2",null,"配置完成",-1)),U[3]||(U[3]=e("p",null,"您已完成 Media Luna 的初始设置,现在可以开始使用了。",-1)),i(I,{type:"primary",size:"large",onClick:w},{default:x(()=>[...U[1]||(U[1]=[M(" 开始使用 ",-1)])]),_:1})])):o("v-if",true)]),_:1})])])])}}}),bp=me(hp,[["__scopeId","data-v-3931ca56"]]),kp={class:"top-nav"},$p={class:"nav-container"},wp={class:"nav-tabs",role:"tablist"},Cp=["onClick","aria-selected"],Vp={class:"main-content"},xp=de({__name:"index",setup(t){const a=$("generate"),s=$(false),c=async()=>{try{const N=await Se.status();s.value=N.needsSetup}catch(N){console.error("Failed to check setup status:",N),s.value=false}},r=()=>{s.value=false},p=Z(()=>{switch(a.value){case"generate":return Et;case"channels":return oi;case"presets":return tr;case"tasks":return Fd;case"settings":return Kv;default:return Et}}),_=N=>()=>$t("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[$t("path",{d:N})]),T=[{id:"generate",label:"生成",icon:_("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:_("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:_("M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z")},{id:"tasks",label:"任务",icon:_("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:_("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 S="";function f(){const N=document.querySelector(".layout-header");N&&(S=N.style.display,N.style.display="none")}function w(){const N=document.querySelector(".layout-header");N&&(N.style.display=S||"")}return we(()=>{f(),c()}),_s(w),(N,U)=>{const z=j("k-layout");return l(),le(z,{class:"app-layout media-luna-app"},{default:x(()=>[o(" 设置向导 "),s.value?(l(),le(bp,{key:0,onComplete:r})):(l(),n(P,{key:1},[o(" 主界面 "),e("div",kp,[e("div",$p,[U[0]||(U[0]=e("div",{class:"logo-area"},[e("span",{class:"logo-text"},"MEDIA LUNA")],-1)),e("div",wp,[(l(),n(P,null,te(T,I=>e("div",{key:I.id,class:se(["nav-tab",{active:a.value===I.id}]),onClick:u=>a.value=I.id,role:"tab","aria-selected":a.value===I.id},[(l(),le(it(I.icon),{class:"tab-icon"})),e("span",null,k(I.label),1)],10,Cp)),64))])])]),e("div",Vp,[(l(),le(ys,null,[(l(),le(it(p.value)))],1024))])],64))]),_:1})}}}),Sp=me(xp,[["__scopeId","data-v-c4fa9f13"]]),Up=t=>{t.page({name:"Media Luna",path:"/media-luna",component:Sp,order:500})};export{Up as default};
|
|
5
|
+
**/const Ns=Object.prototype.hasOwnProperty,Ct=(t,a)=>Ns.call(t,a),We=t=>typeof t=="function",Ze=t=>typeof t=="string",Bt=t=>t!==null&&typeof t=="object";var Fs=typeof global=="object"&&global&&global.Object===Object&&global,Ls=typeof self=="object"&&self&&self.Object===Object&&self,mt=Fs||Ls||Function("return this")(),Ee=mt.Symbol,qt=Object.prototype,Es=qt.hasOwnProperty,As=qt.toString,Re=Ee?Ee.toStringTag:void 0;function Ms(t){var a=Es.call(t,Re),s=t[Re];try{t[Re]=void 0;var c=true}catch{}var r=As.call(t);return c&&(a?t[Re]=s:delete t[Re]),r}var Rs=Object.prototype,js=Rs.toString;function Bs(t){return js.call(t)}var qs="[object Null]",Ks="[object Undefined]",Vt=Ee?Ee.toStringTag:void 0;function Kt(t){return t==null?t===void 0?Ks:qs:Vt&&Vt in Object(t)?Ms(t):Bs(t)}function Hs(t){return t!=null&&typeof t=="object"}var Js="[object Symbol]";function ft(t){return typeof t=="symbol"||Hs(t)&&Kt(t)==Js}function Gs(t,a){for(var s=-1,c=t==null?0:t.length,r=Array(c);++s<c;)r[s]=a(t[s],s,t);return r}var gt=Array.isArray,xt=Ee?Ee.prototype:void 0,St=xt?xt.toString:void 0;function Ht(t){if(typeof t=="string")return t;if(gt(t))return Gs(t,Ht)+"";if(ft(t))return St?St.call(t):"";var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function Jt(t){var a=typeof t;return t!=null&&(a=="object"||a=="function")}var Ws="[object AsyncFunction]",Zs="[object Function]",Ys="[object GeneratorFunction]",Xs="[object Proxy]";function Qs(t){if(!Jt(t))return false;var a=Kt(t);return a==Zs||a==Ys||a==Ws||a==Xs}var nt=mt["__core-js_shared__"],It=function(){var t=/[^.]+$/.exec(nt&&nt.keys&&nt.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function el(t){return!!It&&It in t}var tl=Function.prototype,sl=tl.toString;function ll(t){if(t!=null){try{return sl.call(t)}catch{}try{return t+""}catch{}}return""}var al=/[\\^$.*+?()[\]{}|]/g,nl=/^\[object .+?Constructor\]$/,ol=Function.prototype,il=Object.prototype,rl=ol.toString,dl=il.hasOwnProperty,ul=RegExp("^"+rl.call(dl).replace(al,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function cl(t){if(!Jt(t)||el(t))return false;var a=Qs(t)?ul:nl;return a.test(ll(t))}function vl(t,a){return t==null?void 0:t[a]}function Gt(t,a){var s=vl(t,a);return cl(s)?s:void 0}function pl(t,a){return t===a||t!==t&&a!==a}var ml=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,fl=/^\w*$/;function gl(t,a){if(gt(t))return false;var s=typeof t;return s=="number"||s=="symbol"||s=="boolean"||t==null||ft(t)?true:fl.test(t)||!ml.test(t)||a!=null&&t in Object(a)}var Be=Gt(Object,"create");function _l(){this.__data__=Be?Be(null):{},this.size=0}function yl(t){var a=this.has(t)&&delete this.__data__[t];return this.size-=a?1:0,a}var hl="__lodash_hash_undefined__",bl=Object.prototype,kl=bl.hasOwnProperty;function $l(t){var a=this.__data__;if(Be){var s=a[t];return s===hl?void 0:s}return kl.call(a,t)?a[t]:void 0}var wl=Object.prototype,Cl=wl.hasOwnProperty;function Vl(t){var a=this.__data__;return Be?a[t]!==void 0:Cl.call(a,t)}var xl="__lodash_hash_undefined__";function Sl(t,a){var s=this.__data__;return this.size+=this.has(t)?0:1,s[t]=Be&&a===void 0?xl:a,this}function Oe(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var c=t[a];this.set(c[0],c[1])}}Oe.prototype.clear=_l;Oe.prototype.delete=yl;Oe.prototype.get=$l;Oe.prototype.has=Vl;Oe.prototype.set=Sl;function Il(){this.__data__=[],this.size=0}function st(t,a){for(var s=t.length;s--;)if(pl(t[s][0],a))return s;return-1}var Ol=Array.prototype,Tl=Ol.splice;function Ul(t){var a=this.__data__,s=st(a,t);if(s<0)return false;var c=a.length-1;return s==c?a.pop():Tl.call(a,s,1),--this.size,true}function zl(t){var a=this.__data__,s=st(a,t);return s<0?void 0:a[s][1]}function Pl(t){return st(this.__data__,t)>-1}function Dl(t,a){var s=this.__data__,c=st(s,t);return c<0?(++this.size,s.push([t,a])):s[c][1]=a,this}function Me(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var c=t[a];this.set(c[0],c[1])}}Me.prototype.clear=Il;Me.prototype.delete=Ul;Me.prototype.get=zl;Me.prototype.has=Pl;Me.prototype.set=Dl;var Nl=Gt(mt,"Map");function Fl(){this.size=0,this.__data__={hash:new Oe,map:new(Nl||Me),string:new Oe}}function Ll(t){var a=typeof t;return a=="string"||a=="number"||a=="symbol"||a=="boolean"?t!=="__proto__":t===null}function lt(t,a){var s=t.__data__;return Ll(a)?s[typeof a=="string"?"string":"hash"]:s.map}function El(t){var a=lt(this,t).delete(t);return this.size-=a?1:0,a}function Al(t){return lt(this,t).get(t)}function Ml(t){return lt(this,t).has(t)}function Rl(t,a){var s=lt(this,t),c=s.size;return s.set(t,a),this.size+=s.size==c?0:1,this}function Te(t){var a=-1,s=t==null?0:t.length;for(this.clear();++a<s;){var c=t[a];this.set(c[0],c[1])}}Te.prototype.clear=Fl;Te.prototype.delete=El;Te.prototype.get=Al;Te.prototype.has=Ml;Te.prototype.set=Rl;var jl="Expected a function";function _t(t,a){if(typeof t!="function"||a!=null&&typeof a!="function")throw new TypeError(jl);var s=function(){var c=arguments,r=a?a.apply(this,c):c[0],m=s.cache;if(m.has(r))return m.get(r);var h=t.apply(this,c);return s.cache=m.set(r,h)||m,h};return s.cache=new(_t.Cache||Te),s}_t.Cache=Te;var Bl=500;function ql(t){var a=_t(t,function(c){return s.size===Bl&&s.clear(),c}),s=a.cache;return a}var Kl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Hl=/\\(\\)?/g,Jl=ql(function(t){var a=[];return t.charCodeAt(0)===46&&a.push(""),t.replace(Kl,function(s,c,r,m){a.push(r?m.replace(Hl,"$1"):c||s)}),a});function Gl(t){return t==null?"":Ht(t)}function Wl(t,a){return gt(t)?t:gl(t,a)?[t]:Jl(Gl(t))}function Zl(t){if(typeof t=="string"||ft(t))return t;var a=t+"";return a=="0"&&1/t==-1/0?"-0":a}function Yl(t,a){a=Wl(a,t);for(var s=0,c=a.length;t!=null&&s<c;)t=t[Zl(a[s++])];return s&&s==c?t:void 0}function Xl(t,a,s){var c=t==null?void 0:Yl(t,a);return c===void 0?s:c}function Ql(t){for(var a=-1,s=t==null?0:t.length,c={};++a<s;){var r=t[a];c[r[0]]=r[1]}return c}const ea=t=>t===void 0,qe=t=>typeof t=="number",ta=t=>typeof Element>"u"?false:t instanceof Element,sa=t=>Ze(t)?!Number.isNaN(Number(t)):false,Ot=t=>Object.keys(t);function dt(t,a="px"){if(!t)return"";if(qe(t)||sa(t))return`${t}${a}`;if(Ze(t))return t}/*! Element Plus Icons Vue v2.3.2 */var la=ue({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"})]))}}),aa=la,na=ue({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"})]))}}),oa=na,ia=ue({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"})]))}}),ra=ia,da=ue({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"})]))}}),ua=da,ca=ue({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"})]))}}),va=ca;const Wt="__epPropKey",Ve=t=>t,pa=t=>Bt(t)&&!!t[Wt],Zt=(t,a)=>{if(!Bt(t)||pa(t))return t;const{values:s,required:c,default:r,type:m,validator:h}=t,x={type:m,required:!!c,validator:s||h?_=>{let w=false,F=[];if(s&&(F=Array.from(s),Ct(t,"default")&&F.push(r),w||(w=F.includes(_))),h&&(w||(w=h(_))),!w&&F.length>0){const O=[...new Set(F)].map(T=>JSON.stringify(T)).join(", ");us(`Invalid prop: validation failed${a?` for prop "${a}"`:""}. Expected one of [${O}], got value ${JSON.stringify(_)}.`)}return w}:void 0,[Wt]:true};return Ct(t,"default")&&(x.default=r),x},Ke=t=>Ql(Object.entries(t).map(([a,s])=>[a,Zt(s,a)])),ma=Ve([String,Object,Function]),fa={Close:oa},Tt={success:ua,warning:va,error:aa,info:ra},Yt=(t,a)=>(t.install=s=>{for(const c of[t,...Object.values({})])s.component(c.name,c)},t),ga=(t,a)=>(t.install=s=>{t._context=s._context,s.config.globalProperties[a]=t},t),_a={esc:"Escape"},ya=["","default","small","large"],ha=t=>t,Ut=({from:t,replacement:a,scope:s,version:c,ref:r,type:m="API"},h)=>{$e(()=>ne(h),S=>{},{immediate:true})};var ba={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 ka=t=>(a,s)=>$a(a,s,ne(t)),$a=(t,a,s)=>Xl(s,t,t).replace(/\{(\w+)\}/g,(c,r)=>{var m;return`${(m=a==null?void 0:a[r])!=null?m:`{${r}}`}`}),wa=t=>{const a=Z(()=>ne(t).name),s=cs(t)?t:$(t);return{lang:a,locale:s,t:ka(t)}},Xt=Symbol("localeContextKey"),Ca=t=>{const a=t||Ne(Xt,$());return wa(Z(()=>a.value||ba))},Je="el",Va="is-",Ie=(t,a,s,c,r)=>{let m=`${t}-${a}`;return s&&(m+=`-${s}`),c&&(m+=`__${c}`),r&&(m+=`--${r}`),m},Qt=Symbol("namespaceContextKey"),xa=t=>{const a=t||(je()?Ne(Qt,$(Je)):$(Je));return Z(()=>ne(a)||Je)},yt=(t,a)=>{const s=xa(a);return{namespace:s,b:(d="")=>Ie(s.value,t,d,"",""),e:d=>d?Ie(s.value,t,"",d,""):"",m:d=>d?Ie(s.value,t,"","",d):"",be:(d,C)=>d&&C?Ie(s.value,t,d,C,""):"",em:(d,C)=>d&&C?Ie(s.value,t,"",d,C):"",bm:(d,C)=>d&&C?Ie(s.value,t,d,"",C):"",bem:(d,C,H)=>d&&C&&H?Ie(s.value,t,d,C,H):"",is:(d,...C)=>{const H=C.length>=1?C[0]:true;return d&&H?`${Va}${d}`:""},cssVar:d=>{const C={};for(const H in d)d[H]&&(C[`--${s.value}-${H}`]=d[H]);return C},cssVarName:d=>`--${s.value}-${d}`,cssVarBlock:d=>{const C={};for(const H in d)d[H]&&(C[`--${s.value}-${t}-${H}`]=d[H]);return C},cssVarBlockName:d=>`--${s.value}-${t}-${d}`}},zt={current:0},Pt=$(0),es=2e3,Dt=Symbol("elZIndexContextKey"),ts=Symbol("zIndexContextKey"),Sa=t=>{const a=je()?Ne(Dt,zt):zt,s=t||(je()?Ne(ts,void 0):void 0),c=Z(()=>{const h=ne(s);return qe(h)?h:es}),r=Z(()=>c.value+Pt.value),m=()=>(a.current++,Pt.value=a.current,r.value);return!vt&&Ne(Dt),{initialZIndex:c,currentZIndex:r,nextZIndex:m}},Ia=Zt({type:String,values:ya,required:false}),Oa=Symbol("size"),Ta=Symbol("emptyValuesContextKey"),Ua=Ke({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:t=>We(t)?!t():!t}}),ss=Symbol(),Ye=$();function ls(t,a=void 0){return je()?Ne(ss,Ye):Ye}function za(t,a){const s=ls(),c=yt(t,Z(()=>{var S;return((S=s.value)==null?void 0:S.namespace)||Je})),r=Ca(Z(()=>{var S;return(S=s.value)==null?void 0:S.locale})),m=Sa(Z(()=>{var S;return((S=s.value)==null?void 0:S.zIndex)||es})),h=Z(()=>{var S;return ne(a)||((S=s.value)==null?void 0:S.size)||""});return as(Z(()=>ne(s)||{})),{ns:c,locale:r,zIndex:m,size:h}}const as=(t,a,s=false)=>{var c;const r=!!je(),m=r?ls():void 0,h=(c=void 0)!=null?c:r?vs:void 0;if(!h)return;const S=Z(()=>{const x=ne(t);return m!=null&&m.value?Pa(m.value,x):x});return h(ss,S),h(Xt,Z(()=>S.value.locale)),h(Qt,Z(()=>S.value.namespace)),h(ts,Z(()=>S.value.zIndex)),h(Oa,{size:Z(()=>S.value.size||"")}),h(Ta,Z(()=>({emptyValues:S.value.emptyValues,valueOnClear:S.value.valueOnClear}))),(s||!Ye.value)&&(Ye.value=S.value),S},Pa=(t,a)=>{const s=[...new Set([...Ot(t),...Ot(a)])],c={};for(const r of s)c[r]=a[r]!==void 0?a[r]:t[r];return c},Da=Ke({a11y:{type:Boolean,default:true},locale:{type:Ve(Object)},size:Ia,button:{type:Ve(Object)},experimentalFeatures:{type:Ve(Object)},keyboardNavigation:{type:Boolean,default:true},message:{type:Ve(Object)},zIndex:Number,namespace:{type:String,default:"el"},...Ua}),ut={};ue({name:"ElConfigProvider",props:Da,setup(t,{slots:a}){$e(()=>t.message,c=>{Object.assign(ut,c??{})},{immediate:true,deep:true});const s=as(t);return()=>Xe(a,"default",{config:s==null?void 0:s.value})}});var ht=(t,a)=>{const s=t.__vccOpts||t;for(const[c,r]of a)s[c]=r;return s};const Na=Ke({size:{type:Ve([Number,String])},color:{type:String}}),Fa=ue({name:"ElIcon",inheritAttrs:false}),La=ue({...Fa,props:Na,setup(t){const a=t,s=yt("icon"),c=Z(()=>{const{size:r,color:m}=a;return!r&&!m?{}:{fontSize:ea(r)?void 0:dt(r),"--color":m}});return(r,m)=>(l(),n("i",ps({class:ne(s).b(),style:ne(c)},r.$attrs),[Xe(r.$slots,"default")],16))}});var Ea=ht(La,[["__file","icon.vue"]]);const Nt=Yt(Ea),Aa=Ke({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:Ve([String,Object,Array])},badgeStyle:{type:Ve([String,Object,Array])},offset:{type:Ve(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),Ma=["textContent"],Ra=ue({name:"ElBadge"}),ja=ue({...Ra,props:Aa,setup(t,{expose:a}){const s=t,c=yt("badge"),r=Z(()=>s.isDot?"":qe(s.value)&&qe(s.max)?s.max<s.value?`${s.max}+`:s.value===0&&!s.showZero?"":`${s.value}`:`${s.value}`),m=Z(()=>{var h,S,x,_,w,F;return[{backgroundColor:s.color,marginRight:dt(-((S=(h=s.offset)==null?void 0:h[0])!=null?S:0)),marginTop:dt((_=(x=s.offset)==null?void 0:x[1])!=null?_:0)},(w=s.dotStyle)!=null?w:{},(F=s.badgeStyle)!=null?F:{}]});return Ut({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},Z(()=>!!s.dotStyle)),Ut({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},Z(()=>!!s.dotClass)),a({content:r}),(h,S)=>(l(),n("div",{class:se(ne(c).b())},[Xe(h.$slots,"default"),i(Qe,{name:`${ne(c).namespace.value}-zoom-in-center`,persisted:""},{default:V(()=>[Pe(e("sup",{class:se([ne(c).e("content"),ne(c).em("content",h.type),ne(c).is("fixed",!!h.$slots.default),ne(c).is("dot",h.isDot),h.dotClass,h.badgeClass]),style:At(ne(m)),textContent:k(ne(r))},null,14,Ma),[[De,!h.hidden&&(ne(r)||h.isDot)]])]),_:1},8,["name"])],2))}});var Ba=ht(ja,[["__file","badge.vue"]]);const qa=Yt(Ba),ns=["success","info","warning","error"],ke=ha({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:vt?document.body:void 0}),Ka=Ke({customClass:{type:String,default:ke.customClass},center:{type:Boolean,default:ke.center},dangerouslyUseHTMLString:{type:Boolean,default:ke.dangerouslyUseHTMLString},duration:{type:Number,default:ke.duration},icon:{type:ma,default:ke.icon},id:{type:String,default:ke.id},message:{type:Ve([String,Object,Function]),default:ke.message},onClose:{type:Ve(Function),default:ke.onClose},showClose:{type:Boolean,default:ke.showClose},type:{type:String,values:ns,default:ke.type},plain:{type:Boolean,default:ke.plain},offset:{type:Number,default:ke.offset},zIndex:{type:Number,default:ke.zIndex},grouping:{type:Boolean,default:ke.grouping},repeatNum:{type:Number,default:ke.repeatNum}}),Ha={destroy:()=>true},xe=ms([]),Ja=t=>{const a=xe.findIndex(r=>r.id===t),s=xe[a];let c;return a>0&&(c=xe[a-1]),{current:s,prev:c}},Ga=t=>{const{prev:a}=Ja(t);return a?a.vm.exposed.bottom.value:0},Wa=(t,a)=>xe.findIndex(c=>c.id===t)>0?16:a,Za=["id"],Ya=["innerHTML"],Xa=ue({name:"ElMessage"}),Qa=ue({...Xa,props:Ka,emits:Ha,setup(t,{expose:a}){const s=t,{Close:c}=fa,{ns:r,zIndex:m}=za("message"),{currentZIndex:h,nextZIndex:S}=m,x=$(),_=$(false),w=$(0);let F;const O=Z(()=>s.type?s.type==="error"?"danger":s.type:"info"),T=Z(()=>{const B=s.type;return{[r.bm("icon",B)]:B&&Tt[B]}}),I=Z(()=>s.icon||Tt[s.type]||""),d=Z(()=>Ga(s.id)),C=Z(()=>Wa(s.id,s.offset)+d.value),H=Z(()=>w.value+C.value),ee=Z(()=>({top:`${C.value}px`,zIndex:h.value}));function L(){s.duration!==0&&({stop:F}=$s(()=>{f()},s.duration))}function g(){F==null||F()}function f(){_.value=false}function A({code:B}){B===_a.esc&&f()}return we(()=>{L(),S(),_.value=true}),$e(()=>s.repeatNum,()=>{g(),L()}),bs(document,"keydown",A),ks(x,()=>{w.value=x.value.getBoundingClientRect().height}),a({visible:_,bottom:H,close:f}),(B,re)=>(l(),le(Qe,{name:ne(r).b("fade"),onBeforeLeave:B.onClose,onAfterLeave:re[0]||(re[0]=U=>B.$emit("destroy")),persisted:""},{default:V(()=>[Pe(e("div",{id:B.id,ref_key:"messageRef",ref:x,class:se([ne(r).b(),{[ne(r).m(B.type)]:B.type},ne(r).is("center",B.center),ne(r).is("closable",B.showClose),ne(r).is("plain",B.plain),B.customClass]),style:At(ne(ee)),role:"alert",onMouseenter:g,onMouseleave:L},[B.repeatNum>1?(l(),le(ne(qa),{key:0,value:B.repeatNum,type:ne(O),class:se(ne(r).e("badge"))},null,8,["value","type","class"])):o("v-if",true),ne(I)?(l(),le(ne(Nt),{key:1,class:se([ne(r).e("icon"),ne(T)])},{default:V(()=>[(l(),le(it(ne(I))))]),_:1},8,["class"])):o("v-if",true),Xe(B.$slots,"default",{},()=>[B.dangerouslyUseHTMLString?(l(),n(N,{key:1},[o(" Caution here, message could've been compromised, never use user's input as message "),e("p",{class:se(ne(r).e("content")),innerHTML:B.message},null,10,Ya)],2112)):(l(),n("p",{key:0,class:se(ne(r).e("content"))},k(B.message),3))]),B.showClose?(l(),le(ne(Nt),{key:2,class:se(ne(r).e("closeBtn")),onClick:ye(f,["stop"])},{default:V(()=>[i(ne(c))]),_:1},8,["class","onClick"])):o("v-if",true)],46,Za),[[De,_.value]])]),_:3},8,["name","onBeforeLeave"]))}});var en=ht(Qa,[["__file","message.vue"]]);let tn=1;const os=t=>{const a=!t||Ze(t)||Mt(t)||We(t)?{message:t}:t,s={...ke,...a};if(!s.appendTo)s.appendTo=document.body;else if(Ze(s.appendTo)){let c=document.querySelector(s.appendTo);ta(c)||(c=document.body),s.appendTo=c}return s},sn=t=>{const a=xe.indexOf(t);if(a===-1)return;xe.splice(a,1);const{handler:s}=t;s.close()},ln=({appendTo:t,...a},s)=>{const c=`message_${tn++}`,r=a.onClose,m=document.createElement("div"),h={...a,id:c,onClose:()=>{r==null||r(),sn(w)},onDestroy:()=>{kt(null,m)}},S=i(en,h,We(h.message)||Mt(h.message)?{default:We(h.message)?h.message:()=>h.message}:null);S.appContext=s||Ae._context,kt(S,m),t.appendChild(m.firstElementChild);const x=S.component,w={id:c,vnode:S,vm:x,handler:{close:()=>{x.exposed.visible.value=false}},props:S.component.props};return w},Ae=(t={},a)=>{if(!vt)return{close:()=>{}};if(qe(ut.max)&&xe.length>=ut.max)return{close:()=>{}};const s=os(t);if(s.grouping&&xe.length){const r=xe.find(({vnode:m})=>{var h;return((h=m.props)==null?void 0:h.message)===s.message});if(r)return r.props.repeatNum+=1,r.props.type=s.type,r.handler}const c=ln(s,a);return xe.push(c),c.handler};ns.forEach(t=>{Ae[t]=(a={},s)=>{const c=os(a);return Ae({...c,type:t},s)}});function an(t){for(const a of xe)(!t||t===a.props.type)&&a.handler.close()}Ae.closeAll=an;Ae._context=null;const Ue=ga(Ae,"$message"),nn={class:"table-field-editor"},on={class:"toolbar"},rn={class:"toolbar-left"},dn={class:"toolbar-right"},un={class:"table-wrapper"},cn={class:"data-table"},vn={key:0,class:"col-check"},pn={key:0,class:"col-check"},mn={class:"col-op"},fn=["colspan"],gn={class:"add-hint"},_n={key:0,class:"table-footer"},yn={class:"import-mode"},hn={class:"presets-header"},bn={class:"sel-count"},kn={class:"presets-list"},$n=["onClick"],wn={class:"p-alias"},Cn={class:"p-desc"},Vn=ue({__name:"TableFieldEditor",props:{columns:{},modelValue:{default:()=>[]},tableConfig:{},presets:{default:()=>[]}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=Z({get:()=>s.modelValue||[],set:P=>c("update:modelValue",P)}),m=$([]),h=Z(()=>r.value.length>0&&m.value.length===r.value.length),S=Z(()=>m.value.length>0&&m.value.length<r.value.length),x=Z(()=>{var p;let P=s.columns.length+1;return((p=s.tableConfig)==null?void 0:p.enableSelection)!==false&&P++,P}),_=$(false),w=$(""),F=$("append"),O=$(false),T=$([]),I=$(""),d=Z(()=>{const P=new Set;for(const p of r.value)p.alias&&P.add(p.alias.toLowerCase());return P}),C=Z(()=>{if(!I.value)return s.presets;const P=I.value.toLowerCase();return s.presets.filter(p=>{var u,v,M;return((u=p.alias)==null?void 0:u.toLowerCase().includes(P))||((v=p.description)==null?void 0:v.toLowerCase().includes(P))||((M=p.repoId)==null?void 0:M.toLowerCase().includes(P))})});function H(){const P={};for(const p of s.columns)P[p.key]=p.type==="boolean"?false:p.type==="number"?void 0:"";c("update:modelValue",[...r.value,P])}function ee(P){const p=[...r.value];p.splice(P,1),c("update:modelValue",p),m.value=m.value.filter(u=>u!==P).map(u=>u>P?u-1:u)}function L(P,p,u){const v=[...r.value];v[P]={...v[P],[p]:u},c("update:modelValue",v)}function g(P){const p=m.value.indexOf(P);p>=0?m.value.splice(p,1):m.value.push(P)}function f(P){m.value=P?r.value.map((p,u)=>u):[]}function A(){if(m.value.length===0)return;const P=new Set(m.value);c("update:modelValue",r.value.filter((p,u)=>!P.has(u))),Ue.success(`已删除 ${P.size} 条`),m.value=[]}function B(){const P=new Blob([JSON.stringify(r.value,null,2)],{type:"application/json"}),p=URL.createObjectURL(P),u=document.createElement("a");u.href=p,u.download="data.json",u.click(),URL.revokeObjectURL(p),Ue.success("导出成功")}function re(){try{const P=JSON.parse(w.value);if(!Array.isArray(P)){Ue.error("需要 JSON 数组");return}const p=P.map(u=>{const v={};for(const M of s.columns)v[M.key]=u[M.key]??(M.key==="repoId"&&u.name?u.name:"");return v});c("update:modelValue",F.value==="replace"?p:[...r.value,...p]),Ue.success(`已导入 ${p.length} 条`),_.value=false,w.value=""}catch{Ue.error("JSON 解析失败")}}function U(){T.value=C.value.filter(P=>{var p;return!d.value.has((p=P.alias)==null?void 0:p.toLowerCase())}).map(P=>P.alias)}function D(P){if(d.value.has(P==null?void 0:P.toLowerCase()))return;const p=T.value.indexOf(P);p>=0?T.value.splice(p,1):T.value.push(P)}function z(){const p=s.presets.filter(u=>T.value.includes(u.alias)).map(u=>{const v={};for(const M of s.columns)v[M.key]=u[M.key]??"";return v});c("update:modelValue",[...r.value,...p]),Ue.success(`已导入 ${p.length} 条`),O.value=false,T.value=[]}return $e(O,P=>{P&&(T.value=[],I.value="")}),(P,p)=>{var q,y,b,W,oe;const u=j("k-icon"),v=j("el-button"),M=j("el-checkbox"),ae=j("el-input"),G=j("el-input-number"),E=j("el-switch"),X=j("el-option"),ie=j("el-select"),he=j("el-radio"),pe=j("el-radio-group"),ge=j("el-dialog"),fe=j("el-tag");return l(),n("div",nn,[o(" 工具栏 "),e("div",on,[e("div",rn,[i(v,{type:"primary",size:"small",onClick:H},{default:V(()=>[i(u,{name:"add"}),p[10]||(p[10]=R(" 添加 ",-1))]),_:1}),(q=t.tableConfig)!=null&&q.enableBatchDelete&&m.value.length>0?(l(),le(v,{key:0,type:"danger",size:"small",onClick:A},{default:V(()=>[R(" 删除选中 ("+k(m.value.length)+") ",1)]),_:1})):o("v-if",true)]),e("div",dn,[((y=t.presets)==null?void 0:y.length)>0?(l(),le(v,{key:0,size:"small",onClick:p[0]||(p[0]=Y=>O.value=true)},{default:V(()=>[...p[11]||(p[11]=[R(" 内置预设 ",-1)])]),_:1})):o("v-if",true),((b=t.tableConfig)==null?void 0:b.enableImport)!==false?(l(),le(v,{key:1,size:"small",onClick:p[1]||(p[1]=Y=>_.value=true)},{default:V(()=>[...p[12]||(p[12]=[R(" 导入 ",-1)])]),_:1})):o("v-if",true),((W=t.tableConfig)==null?void 0:W.enableExport)!==false?(l(),le(v,{key:2,size:"small",onClick:B},{default:V(()=>[...p[13]||(p[13]=[R(" 导出 ",-1)])]),_:1})):o("v-if",true)])]),o(" 数据表格 "),e("div",un,[e("table",cn,[e("thead",null,[e("tr",null,[((oe=t.tableConfig)==null?void 0:oe.enableSelection)!==false?(l(),n("th",vn,[i(M,{"model-value":h.value,indeterminate:S.value,onChange:f,size:"small"},null,8,["model-value","indeterminate"])])):o("v-if",true),(l(true),n(N,null,te(t.columns,Y=>(l(),n("th",{key:Y.key,class:se(["col-"+Y.key,{required:Y.required}])},k(Y.label),3))),128)),p[14]||(p[14]=e("th",{class:"col-op"},"操作",-1))])]),e("tbody",null,[(l(true),n(N,null,te(r.value,(Y,_e)=>{var Ce;return l(),n("tr",{key:_e,class:se({selected:m.value.includes(_e)})},[((Ce=t.tableConfig)==null?void 0:Ce.enableSelection)!==false?(l(),n("td",pn,[i(M,{"model-value":m.value.includes(_e),onChange:ve=>g(_e),size:"small"},null,8,["model-value","onChange"])])):o("v-if",true),(l(true),n(N,null,te(t.columns,ve=>(l(),n("td",{key:ve.key,class:se("col-"+ve.key)},[ve.type==="text"?(l(),le(ae,{key:0,"model-value":Y[ve.key],"onUpdate:modelValue":be=>L(_e,ve.key,be),placeholder:ve.placeholder,size:"small"},null,8,["model-value","onUpdate:modelValue","placeholder"])):ve.type==="number"?(l(),le(G,{key:1,"model-value":Y[ve.key],"onUpdate:modelValue":be=>L(_e,ve.key,be),size:"small",controls:false,class:"num-input"},null,8,["model-value","onUpdate:modelValue"])):ve.type==="boolean"?(l(),le(E,{key:2,"model-value":Y[ve.key],"onUpdate:modelValue":be=>L(_e,ve.key,be),size:"small"},null,8,["model-value","onUpdate:modelValue"])):ve.type==="select"?(l(),le(ie,{key:3,"model-value":Y[ve.key],"onUpdate:modelValue":be=>L(_e,ve.key,be),placeholder:ve.placeholder||"请选择",size:"small"},{default:V(()=>[(l(true),n(N,null,te(ve.options,be=>(l(),le(X,{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",mn,[i(v,{type:"danger",size:"small",link:"",onClick:ve=>ee(_e)},{default:V(()=>[...p[15]||(p[15]=[R(" 删除 ",-1)])]),_:1},8,["onClick"])])],2)}),128)),o(" 添加行 "),e("tr",{class:"add-row",onClick:H},[e("td",{colspan:x.value,class:"add-cell"},[e("span",gn,[i(u,{name:"add"}),p[16]||(p[16]=R(" 点击添加一行 ",-1))])],8,fn)])])])]),o(" 底部统计 "),r.value.length>0?(l(),n("div",_n," 共 "+k(r.value.length)+" 条 ",1)):o("v-if",true),o(" 导入对话框 "),i(ge,{modelValue:_.value,"onUpdate:modelValue":p[5]||(p[5]=Y=>_.value=Y),title:"导入数据",width:"550px","close-on-click-modal":false},{footer:V(()=>[i(v,{onClick:p[4]||(p[4]=Y=>_.value=false)},{default:V(()=>[...p[19]||(p[19]=[R("取消",-1)])]),_:1}),i(v,{type:"primary",onClick:re},{default:V(()=>[...p[20]||(p[20]=[R("导入",-1)])]),_:1})]),default:V(()=>[p[21]||(p[21]=e("p",{class:"dialog-tip"},"粘贴 JSON 数组格式数据:",-1)),i(ae,{modelValue:w.value,"onUpdate:modelValue":p[2]||(p[2]=Y=>w.value=Y),type:"textarea",rows:10,placeholder:'[{"alias": "xxx", "repoId": "xxx", ...}]'},null,8,["modelValue"]),e("div",yn,[i(pe,{modelValue:F.value,"onUpdate:modelValue":p[3]||(p[3]=Y=>F.value=Y)},{default:V(()=>[i(he,{value:"append"},{default:V(()=>[...p[17]||(p[17]=[R("追加",-1)])]),_:1}),i(he,{value:"replace"},{default:V(()=>[...p[18]||(p[18]=[R("替换",-1)])]),_:1})]),_:1},8,["modelValue"])])]),_:1},8,["modelValue"]),o(" 预设对话框 "),i(ge,{modelValue:O.value,"onUpdate:modelValue":p[9]||(p[9]=Y=>O.value=Y),title:"内置预设",width:"600px","close-on-click-modal":false},{footer:V(()=>[i(v,{onClick:p[8]||(p[8]=Y=>O.value=false)},{default:V(()=>[...p[25]||(p[25]=[R("取消",-1)])]),_:1}),i(v,{type:"primary",onClick:z,disabled:T.value.length===0},{default:V(()=>[R(" 导入 ("+k(T.value.length)+") ",1)]),_:1},8,["disabled"])]),default:V(()=>[e("div",hn,[i(ae,{modelValue:I.value,"onUpdate:modelValue":p[6]||(p[6]=Y=>I.value=Y),placeholder:"搜索...",size:"small",clearable:"",class:"search-input"},null,8,["modelValue"]),i(v,{size:"small",onClick:U},{default:V(()=>[...p[22]||(p[22]=[R("全选",-1)])]),_:1}),i(v,{size:"small",onClick:p[7]||(p[7]=Y=>T.value=[])},{default:V(()=>[...p[23]||(p[23]=[R("清空",-1)])]),_:1}),e("span",bn,"已选 "+k(T.value.length),1)]),e("div",kn,[(l(true),n(N,null,te(C.value,Y=>{var _e,Ce,ve;return l(),n("div",{key:Y.alias,class:se(["preset-row",{selected:T.value.includes(Y.alias),disabled:d.value.has((_e=Y.alias)==null?void 0:_e.toLowerCase())}]),onClick:be=>D(Y.alias)},[i(M,{"model-value":T.value.includes(Y.alias),disabled:d.value.has((Ce=Y.alias)==null?void 0:Ce.toLowerCase()),size:"small"},null,8,["model-value","disabled"]),e("span",wn,k(Y.alias),1),e("span",Cn,k(Y.description||Y.repoId),1),d.value.has((ve=Y.alias)==null?void 0:ve.toLowerCase())?(l(),le(fe,{key:0,size:"small",type:"info"},{default:V(()=>[...p[24]||(p[24]=[R("已有",-1)])]),_:1})):o("v-if",true)],10,$n)}),128))])]),_:1},8,["modelValue"])])}}}),xn=me(Vn,[["__scopeId","data-v-3cee27e6"]]),Sn={class:"config-renderer"},In={key:0,class:"form-row"},On={class:"field-container"},Tn={key:8,class:"field-desc"},Un=ue({__name:"ConfigRenderer",props:{fields:{},modelValue:{},clearable:{type:Boolean,default:false},presetsMap:{default:()=>({})}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=(g,f)=>{if(!f.includes("."))return g[f];const A=f.split(".");let B=g;for(const re of A){if(B==null)return;B=B[re]}return B},m=(g,f,A)=>{if(!f.includes("."))return{...g,[f]:A};const B=f.split("."),re={...g};let U=re;for(let D=0;D<B.length-1;D++){const z=B[D];U[z]=U[z]?{...U[z]}:{},U=U[z]}return U[B[B.length-1]]=A,re},h=$({}),S=$({}),x=(g,f)=>{if(!f||Object.keys(f).length===0)return g;const A=Object.keys(f).sort().map(B=>`${B}=${f[B]}`).join("&");return`${g}?${A}`},_=async(g,f)=>{const A=x(g,f);if(!(h.value[A]||S.value[A])){S.value[A]=true;try{const B=await tt(g,f);B!=null&&B.success&&Array.isArray(B.data)?h.value[A]=B.data:h.value[A]=[]}catch(B){console.error(`Failed to fetch options from ${g}:`,B),h.value[A]=[]}finally{S.value[A]=false}}},w=g=>{if(!g.dependsOn)return;const f=r(s.modelValue,g.dependsOn);return f==null||f===""?void 0:{[g.dependsOn.includes(".")?g.dependsOn.split(".").pop():g.dependsOn]:f}},F=g=>{if(!g.optionsSource)return"";const f=w(g);return x(g.optionsSource,f)},O=g=>{const f=F(g);return f?h.value[f]||[]:[]},T=g=>{const f=F(g);return f&&S.value[f]||false},I=g=>{if(g.type!=="select-remote"||!g.optionsSource)return;const f=w(g);_(g.optionsSource,f)};we(()=>{for(const g of s.fields)I(g)}),$e(()=>s.modelValue,(g,f)=>{for(const A of s.fields)if(A.type==="select-remote"&&A.dependsOn&&A.optionsSource){const B=r(g,A.dependsOn),re=f?r(f,A.dependsOn):void 0;B!==re&&I(A)}},{deep:true});const d=g=>r(s.modelValue,g),C=(g,f)=>{const A=m(s.modelValue,g,f);c("update:modelValue",A)},H=(g,f=new Set)=>{if(!g.showWhen)return true;const{field:A,value:B}=g.showWhen;if(f.has(g.key)||(f.add(g.key),r(s.modelValue,A)!==B))return false;const re=s.fields.find(U=>U.key===A);return re?H(re,f):true},ee=g=>{const f=s.modelValue[g];return Array.isArray(f)?f:[]},L=g=>{var f;return g?((f=s.presetsMap)==null?void 0:f[g])||[]:[]};return(g,f)=>{const A=j("el-switch"),B=j("el-option"),re=j("el-select"),U=j("el-input-number"),D=j("el-input");return l(),n("div",Sn,[(l(true),n(N,null,te(t.fields,z=>{var P;return l(),n(N,{key:z.key},[H(z)?(l(),n("div",In,[e("div",{class:se(["form-label",{required:z.required}])},k(z.label),3),e("div",On,[o(" Boolean 类型 "),z.type==="boolean"?(l(),le(A,{key:0,"model-value":d(z.key),"onUpdate:modelValue":p=>C(z.key,p)},null,8,["model-value","onUpdate:modelValue"])):z.type==="select"?(l(),n(N,{key:1},[o(" Select 类型 "),i(re,{"model-value":d(z.key),"onUpdate:modelValue":p=>C(z.key,p),placeholder:z.placeholder||"请选择",clearable:t.clearable,style:{width:"100%"}},{default:V(()=>[(l(true),n(N,null,te(z.options,p=>(l(),le(B,{key:String(p.value),label:p.label,value:p.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)):z.type==="select-remote"?(l(),n(N,{key:2},[o(" Select Remote 类型(远程获取选项) "),i(re,{"model-value":d(z.key),"onUpdate:modelValue":p=>C(z.key,p),placeholder:z.placeholder||"请选择",clearable:t.clearable,loading:T(z),filterable:"",style:{width:"100%"}},{default:V(()=>[(l(true),n(N,null,te(O(z),p=>(l(),le(B,{key:String(p.value),label:p.label,value:p.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable","loading"])],64)):z.type==="number"?(l(),n(N,{key:3},[o(" Number 类型 "),i(U,{"model-value":d(z.key),"onUpdate:modelValue":p=>C(z.key,p),placeholder:z.placeholder,controls:true},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):z.type==="textarea"?(l(),n(N,{key:4},[o(" Textarea 类型 "),i(D,{"model-value":d(z.key),"onUpdate:modelValue":p=>C(z.key,p),type:"textarea",rows:4,placeholder:z.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):z.type==="table"&&z.columns?(l(),n(N,{key:5},[o(" Table 类型(数组对象编辑) "),i(xn,{columns:z.columns,"model-value":ee(z.key),"onUpdate:modelValue":p=>C(z.key,p),"table-config":z.tableConfig,presets:L((P=z.tableConfig)==null?void 0:P.presetsSource)},null,8,["columns","model-value","onUpdate:modelValue","table-config","presets"])],64)):z.type==="password"?(l(),n(N,{key:6},[o(" Password 类型 "),i(D,{"model-value":d(z.key),"onUpdate:modelValue":p=>C(z.key,p),type:"password","show-password":"",placeholder:z.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(N,{key:7},[o(" Text/String 类型 (默认) "),i(D,{"model-value":d(z.key),"onUpdate:modelValue":p=>C(z.key,p),placeholder:z.placeholder,clearable:t.clearable},null,8,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)),o(" 字段描述 "),z.description?(l(),n("div",Tn,k(z.description),1)):o("v-if",true)])])):o("v-if",true)],64)}),128))])}}}),at=me(Un,[["__scopeId","data-v-1d6d9e1f"]]),zn={class:"dialog-layout"},Pn={class:"tab-nav"},Dn=["onClick"],Nn={key:0,class:"tab-badge"},Fn={class:"tab-content"},Ln={class:"content-section"},En={class:"form-group"},An={class:"form-row"},Mn={class:"form-group flex-1"},Rn={class:"form-group"},jn={class:"switch-wrapper"},Bn={class:"switch-label"},qn={class:"form-group"},Kn={class:"section-divider"},Hn={class:"content-section"},Jn={class:"override-hint-bar"},Gn={class:"pipeline-flow"},Wn={class:"phase-icon"},Zn={class:"phase-info"},Yn={class:"phase-name"},Xn={class:"phase-desc"},Qn={class:"phase-badge"},eo={key:0,class:"phase-middlewares"},to={class:"mw-card"},so={class:"mw-content"},lo={class:"mw-name"},ao={class:"mw-desc"},no={key:2,class:"phase-connector"},oo={class:"connector-arrow"},io={class:"content-section"},ro={class:"override-hint-bar"},uo={key:0,class:"plugins-override-list"},co=["onClick"],vo={class:"plugin-info"},po={class:"plugin-name"},mo={key:0,class:"override-badge"},fo={class:"plugin-actions"},go={class:"plugin-config-fields"},_o={key:0,class:"override-field-row"},yo={class:"field-label"},ho={class:"field-input"},bo={key:0,class:"field-hint"},ko={key:1,class:"empty-hint"},$o={class:"dialog-footer"},wo=ue({__name:"ChannelConfigDialog",props:{modelValue:{type:Boolean},channel:{default:null}},emits:["update:modelValue","saved"],setup(t,{emit:a}){const s=t,c=a,r=Z({get:()=>s.modelValue,set:y=>c("update:modelValue",y)}),m=Z(()=>{var y;return!!((y=s.channel)!=null&&y.id)}),h=$("basic"),S=$(false),x=$(new Set),_=$([]),w=$({}),F=$([]),O=$([]),T=$({}),I=$({}),d=$({name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}),C=[{id:"basic",label:"基本信息",icon:"file-text"},{id:"middlewares",label:"中间件流程",icon:"git-branch"},{id:"plugins",label:"插件配置",icon:"puzzle"}],H=[{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"}],ee={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},L=Z(()=>d.value.connectorId?w.value[d.value.connectorId]||[]:[]),g=Z(()=>{const y=_.value.find(b=>b.id===d.value.connectorId);return(y==null?void 0:y.name)||"连接器"}),f=Z(()=>C.map(y=>{let b="";return y.id==="middlewares"&&(b=String(F.value.length)),y.id==="plugins"&&A.value.length>0&&(b=String(A.value.length)),{...y,badge:b}})),A=Z(()=>O.value.filter(y=>y.configFields&&y.configFields.length>0)),B=(y,b)=>{if(!b||Object.keys(b).length===0)return y;const W=Object.keys(b).sort().map(oe=>`${oe}=${b[oe]}`).join("&");return`${y}?${W}`},re=async(y,b)=>{const W=B(y,b);if(!(T.value[W]||I.value[W])){I.value[W]=true;try{const oe=await tt(y,b);oe!=null&&oe.success&&Array.isArray(oe.data)?T.value[W]=oe.data:T.value[W]=[]}catch(oe){console.error(`Failed to fetch options from ${y}:`,oe),T.value[W]=[]}finally{I.value[W]=false}}},U=(y,b)=>{var Ce,ve;if(!y.dependsOn)return;const W=(ve=(Ce=d.value.pluginOverrides)==null?void 0:Ce[b.id])==null?void 0:ve[y.dependsOn],oe=b.config[y.dependsOn],Y=W!==void 0?W:oe;return Y==null||Y===""?void 0:{[y.dependsOn.includes(".")?y.dependsOn.split(".").pop():y.dependsOn]:Y}},D=(y,b)=>{if(!y.optionsSource)return"";const W=U(y,b);return B(y.optionsSource,W)},z=(y,b)=>{const W=D(y,b);if(!W)return[];if(!T.value[W]&&!I.value[W]){const oe=U(y,b);re(y.optionsSource,oe)}return T.value[W]||[]},P=y=>{if(!y.optionsSource)return false;for(const b of Object.keys(I.value))if(b.startsWith(y.optionsSource)&&I.value[b])return true;return false},p=y=>F.value.filter(b=>b.phase===y),u=(y,b)=>{var W,oe,Y;return(Y=(oe=(W=d.value.pluginOverrides)==null?void 0:W[y])==null?void 0:oe.middlewares)==null?void 0:Y[b]},v=(y,b,W)=>{d.value.pluginOverrides||(d.value.pluginOverrides={}),d.value.pluginOverrides[y]||(d.value.pluginOverrides[y]={}),d.value.pluginOverrides[y].middlewares||(d.value.pluginOverrides[y].middlewares={}),W==null?(delete d.value.pluginOverrides[y].middlewares[b],Object.keys(d.value.pluginOverrides[y].middlewares).length===0&&delete d.value.pluginOverrides[y].middlewares,Object.keys(d.value.pluginOverrides[y]).length===0&&delete d.value.pluginOverrides[y]):d.value.pluginOverrides[y].middlewares[b]=W},M=y=>{const b=u(y.configGroup||y.name,y.name);return b!==void 0?b?"active override":"override":y.enabled?"active":""},ae=(y,b)=>{var W,oe;return(oe=(W=d.value.pluginOverrides)==null?void 0:W[y])==null?void 0:oe[b]},G=(y,b,W)=>{d.value.pluginOverrides||(d.value.pluginOverrides={}),d.value.pluginOverrides[y]||(d.value.pluginOverrides[y]={}),W==null||W===""?(delete d.value.pluginOverrides[y][b],Object.keys(d.value.pluginOverrides[y]).length===0&&delete d.value.pluginOverrides[y]):d.value.pluginOverrides[y][b]=W},E=y=>{var W;const b=(W=d.value.pluginOverrides)==null?void 0:W[y];return b&&Object.keys(b).length>0},X=y=>{d.value.pluginOverrides&&delete d.value.pluginOverrides[y]},ie=y=>{x.value.has(y)?x.value.delete(y):x.value.add(y)},he=(y,b)=>{var ve,be;if(!b.showWhen)return true;const{field:W,value:oe}=b.showWhen,Y=(be=(ve=d.value.pluginOverrides)==null?void 0:ve[y.id])==null?void 0:be[W],_e=y.config[W];return(Y!==void 0?Y:_e)===oe},pe=async y=>{if(d.value.connectorConfig={},y&&!w.value[y])try{const b=await He.fields(y);w.value[y]=b}catch(b){console.error("Failed to load connector fields:",b)}},ge=async()=>{var y;if(!d.value.name){Q.error("请输入渠道名称");return}if(!d.value.connectorId){Q.error("请选择连接器");return}S.value=true;try{m.value&&((y=s.channel)!=null&&y.id)?(await Fe.update(s.channel.id,d.value),Q.success("保存成功")):(await Fe.create(d.value),Q.success("创建成功")),c("saved"),r.value=false}catch(b){Q.error(b instanceof Error?b.message:"操作失败")}finally{S.value=false}},fe=()=>{h.value="basic",x.value.clear()},q=async()=>{try{const[y,b,W]=await Promise.all([He.list(),Ge.list(),rt.list()]);_.value=y,F.value=b,O.value=W.filter(oe=>oe.configFields&&oe.configFields.length>0||oe.middlewares&&oe.middlewares.length>0)}catch(y){console.error("Failed to load data:",y)}};return $e(()=>s.modelValue,async y=>{if(y)if(await q(),s.channel){if(d.value=JSON.parse(JSON.stringify(s.channel)),d.value.pluginOverrides||(d.value.pluginOverrides={}),d.value.connectorConfig||(d.value.connectorConfig={}),d.value.connectorId&&!w.value[d.value.connectorId])try{const b=await He.fields(d.value.connectorId);w.value[d.value.connectorId]=b}catch(b){console.error("Failed to load connector fields:",b)}for(const b of Object.keys(d.value.pluginOverrides))x.value.add(b)}else d.value={name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}}),(y,b)=>{const W=j("k-icon"),oe=j("el-input"),Y=j("el-option"),_e=j("el-select"),Ce=j("el-switch"),ve=j("k-button"),be=j("el-input-number"),is=j("el-dialog");return l(),le(is,{modelValue:r.value,"onUpdate:modelValue":b[6]||(b[6]=J=>r.value=J),title:m.value?"编辑渠道":"创建渠道",width:"800px","close-on-click-modal":false,class:"channel-config-dialog",onClosed:fe},{footer:V(()=>[e("div",$o,[i(ve,{onClick:b[5]||(b[5]=J=>r.value=false)},{default:V(()=>[...b[24]||(b[24]=[R("取消",-1)])]),_:1}),i(ve,{type:"primary",onClick:ge,loading:S.value},{default:V(()=>[R(k(m.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:V(()=>[e("div",zn,[o(" 左侧 Tab 导航 "),e("div",Pn,[(l(true),n(N,null,te(f.value,J=>(l(),n("div",{key:J.id,class:se(["tab-item",{active:h.value===J.id}]),onClick:ce=>h.value=J.id},[i(W,{name:J.icon},null,8,["name"]),e("span",null,k(J.label),1),J.badge?(l(),n("span",Nn,k(J.badge),1)):o("v-if",true)],10,Dn))),128))]),o(" 右侧内容区 "),e("div",Fn,[o(" 基本信息 "),Pe(e("div",Ln,[b[13]||(b[13]=e("div",{class:"section-header"},[e("h4",null,"基本信息"),e("p",null,"设置渠道的名称、连接器和标签")],-1)),e("div",En,[b[7]||(b[7]=e("label",{class:"form-label required"},"渠道名称",-1)),i(oe,{modelValue:d.value.name,"onUpdate:modelValue":b[0]||(b[0]=J=>d.value.name=J),placeholder:"如 OpenAI DALL-E"},null,8,["modelValue"]),b[8]||(b[8]=e("div",{class:"form-hint"},"用户可见的渠道名称,冲突时会自动添加后缀",-1))]),e("div",An,[e("div",Mn,[b[9]||(b[9]=e("label",{class:"form-label required"},"连接器",-1)),i(_e,{modelValue:d.value.connectorId,"onUpdate:modelValue":b[1]||(b[1]=J=>d.value.connectorId=J),placeholder:"选择连接器",onChange:pe,style:{width:"100%"}},{default:V(()=>[(l(true),n(N,null,te(_.value,J=>(l(),le(Y,{key:J.id,label:J.name,value:J.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Rn,[b[10]||(b[10]=e("label",{class:"form-label"},"启用状态",-1)),e("div",jn,[i(Ce,{modelValue:d.value.enabled,"onUpdate:modelValue":b[2]||(b[2]=J=>d.value.enabled=J)},null,8,["modelValue"]),e("span",Bn,k(d.value.enabled?"启用":"禁用"),1)])])]),e("div",qn,[b[11]||(b[11]=e("label",{class:"form-label"},"标签",-1)),i(jt,{modelValue:d.value.tags,"onUpdate:modelValue":b[3]||(b[3]=J=>d.value.tags=J),placeholder:"输入标签后按回车..."},null,8,["modelValue"]),b[12]||(b[12]=e("div",{class:"form-hint"},"用于分类和筛选渠道",-1))]),o(" 连接器配置(内嵌) "),L.value.length>0?(l(),n(N,{key:0},[e("div",Kn,[e("span",null,k(g.value)+" 配置",1)]),i(at,{fields:L.value,modelValue:d.value.connectorConfig,"onUpdate:modelValue":b[4]||(b[4]=J=>d.value.connectorConfig=J)},null,8,["fields","modelValue"])],64)):o("v-if",true)],512),[[De,h.value==="basic"]]),o(" 中间件流程 "),Pe(e("div",Hn,[b[18]||(b[18]=e("div",{class:"section-header"},[e("h4",null,"中间件流程"),e("p",null,"控制此渠道的中间件启用状态")],-1)),e("div",Jn,[i(W,{name:"info-circle"}),b[14]||(b[14]=e("span",null,"留空表示跟随全局配置",-1))]),e("div",Gn,[(l(),n(N,null,te(H,(J,ce)=>e("div",{key:J.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:se(["phase-header",J.colorClass])},[e("div",Wn,[i(W,{name:J.icon},null,8,["name"])]),e("div",Zn,[e("span",Yn,k(J.label),1),e("span",Xn,k(J.description),1)]),e("span",Qn,k(p(J.id).length),1)],2),o(" 中间件列表 "),p(J.id).length>0?(l(),n("div",eo,[(l(true),n(N,null,te(p(J.id),de=>(l(),n("div",{key:de.name,class:se(["mw-item",{"has-override":u(de.configGroup||de.name,de.name)!==void 0}])},[e("div",to,[e("div",{class:se(["mw-status",M(de)])},null,2),e("div",so,[e("span",lo,k(de.displayName),1),e("span",ao,k(de.description||ee[de.category]||de.category),1)]),i(_e,{"model-value":u(de.configGroup||de.name,de.name),"onUpdate:modelValue":rs=>v(de.configGroup||de.name,de.name,rs),placeholder:de.enabled?"全局: 启用":"全局: 禁用",clearable:"",size:"small",class:"mw-switch"},{default:V(()=>[i(Y,{label:"启用",value:true}),i(Y,{label:"禁用",value:false})]),_:1},8,["model-value","onUpdate:modelValue","placeholder"])])],2))),128))])):(l(),n(N,{key:1},[o(" 空状态 "),b[15]||(b[15]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),ce<H.length-1?(l(),n("div",no,[b[16]||(b[16]=e("div",{class:"connector-line"},null,-1)),e("div",oo,[i(W,{name:"chevron-down"})]),b[17]||(b[17]=e("div",{class:"connector-line"},null,-1))])):o("v-if",true)])),64))]),o(" 底部说明 "),b[19]||(b[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),[[De,h.value==="middlewares"]]),o(" 插件配置 "),Pe(e("div",io,[b[23]||(b[23]=e("div",{class:"section-header"},[e("h4",null,"插件配置覆盖"),e("p",null,"为此渠道单独配置插件参数")],-1)),e("div",ro,[i(W,{name:"info-circle"}),b[20]||(b[20]=e("span",null,"留空使用全局配置,填写后将覆盖全局设置",-1))]),A.value.length>0?(l(),n("div",uo,[(l(true),n(N,null,te(A.value,J=>(l(),n("div",{key:J.id,class:se(["plugin-override-card",{expanded:x.value.has(J.id)}])},[e("div",{class:"plugin-header",onClick:ce=>ie(J.id)},[e("div",vo,[e("span",po,k(J.name),1),E(J.id)?(l(),n("span",mo,"已覆盖")):o("v-if",true)]),e("div",fo,[E(J.id)?(l(),le(ve,{key:0,size:"mini",onClick:ye(ce=>X(J.id),["stop"])},{default:V(()=>[...b[21]||(b[21]=[R(" 清除 ",-1)])]),_:1},8,["onClick"])):o("v-if",true),i(W,{name:x.value.has(J.id)?"chevron-up":"chevron-down"},null,8,["name"])])],8,co),Pe(e("div",go,[(l(true),n(N,null,te(J.configFields,ce=>(l(),n(N,{key:ce.key},[he(J,ce)?(l(),n("div",_o,[e("label",yo,k(ce.label),1),e("div",ho,[o(" Boolean 类型 "),ce.type==="boolean"?(l(),le(_e,{key:0,"model-value":ae(J.id,ce.key),"onUpdate:modelValue":de=>G(J.id,ce.key,de),placeholder:"使用全局配置",clearable:""},{default:V(()=>[i(Y,{label:"是",value:true}),i(Y,{label:"否",value:false})]),_:1},8,["model-value","onUpdate:modelValue"])):ce.type==="select"?(l(),n(N,{key:1},[o(" Select 类型 "),i(_e,{"model-value":ae(J.id,ce.key),"onUpdate:modelValue":de=>G(J.id,ce.key,de),placeholder:`全局: ${J.config[ce.key]??"未设置"}`,clearable:""},{default:V(()=>[(l(true),n(N,null,te(ce.options,de=>(l(),le(Y,{key:String(de.value),label:de.label,value:de.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])],64)):ce.type==="select-remote"?(l(),n(N,{key:2},[o(" Select Remote 类型 "),i(_e,{"model-value":ae(J.id,ce.key),"onUpdate:modelValue":de=>G(J.id,ce.key,de),placeholder:`全局: ${J.config[ce.key]??"未设置"}`,loading:P(ce),clearable:"",filterable:""},{default:V(()=>[(l(true),n(N,null,te(z(ce,J),de=>(l(),le(Y,{key:String(de.value),label:de.label,value:de.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","loading"])],64)):ce.type==="number"?(l(),n(N,{key:3},[o(" Number 类型 "),i(be,{"model-value":ae(J.id,ce.key),"onUpdate:modelValue":de=>G(J.id,ce.key,de),placeholder:`全局: ${J.config[ce.key]??""}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):ce.type==="textarea"?(l(),n(N,{key:4},[o(" Textarea 类型 "),i(oe,{"model-value":ae(J.id,ce.key),"onUpdate:modelValue":de=>G(J.id,ce.key,de),type:"textarea",rows:3,placeholder:`全局: ${J.config[ce.key]??"未设置"}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(l(),n(N,{key:5},[o(" Text/String 类型 (默认) "),i(oe,{"model-value":ae(J.id,ce.key),"onUpdate:modelValue":de=>G(J.id,ce.key,de),placeholder:`全局: ${J.config[ce.key]??"未设置"}`,clearable:""},null,8,["model-value","onUpdate:modelValue","placeholder"])],64))]),ce.description?(l(),n("div",bo,k(ce.description),1)):o("v-if",true)])):o("v-if",true)],64))),128))],512),[[De,x.value.has(J.id)]])],2))),128))])):(l(),n("div",ko,[i(W,{name:"apps"}),b[22]||(b[22]=e("span",null,"暂无可配置的插件",-1))]))],512),[[De,h.value==="plugins"]])])])]),_:1},8,["modelValue","title"])}}}),Co=me(wo,[["__scopeId","data-v-fa356be7"]]),Vo={key:0},xo=ue({__name:"LoadingState",props:{text:{default:"加载中..."},icon:{default:"sync"},size:{default:"default"}},setup(t){const a=t,s=Z(()=>`size-${a.size}`);return(c,r)=>{const m=j("k-icon");return l(),n("div",{class:se(["loading-state",s.value])},[i(m,{name:t.icon,class:"loading-icon"},null,8,["name"]),t.text?(l(),n("span",Vo,k(t.text),1)):o("v-if",true)],2)}}}),So=me(xo,[["__scopeId","data-v-99cf565d"]]),Io={class:"ml-view-container"},Oo={class:"ml-view-header"},To={class:"ml-header-left"},Uo={class:"ml-header-right"},zo={class:"ml-view-content"},Po={class:"ml-grid"},Do=["onClick"],No={class:"card-header"},Fo={class:"header-main"},Lo={class:"channel-name"},Eo={class:"header-meta"},Ao={class:"connector-badge"},Mo={key:0,class:"cost-badge"},Ro={class:"card-body"},jo={key:0,class:"field-list"},Bo={class:"field-label"},qo={class:"field-value"},Ko={key:1,class:"tags-list"},Ho={class:"ml-table-container"},Jo={class:"ml-table"},Go=["onClick"],Wo={class:"col-name"},Zo={class:"name-text"},Yo={class:"col-connector"},Xo={class:"connector-badge"},Qo={class:"col-tags"},ei={class:"tags-wrapper"},ti={key:0,class:"mini-tag more"},si={class:"col-cost"},li={key:0,class:"cost-value"},ai={class:"action-btns"},ni=ue({__name:"ChannelsView",setup(t){const a=["text2img","img2img","NSFW"],s=$(false),c=$("card"),r=$([]),m=$([]),h=$([]),S=$({}),x=$(false),_=$(null),w=$([]),F=Z(()=>{const U=new Set;return r.value.forEach(D=>{(D.tags||[]).forEach(z=>U.add(z))}),Array.from(U).sort()}),O=Z(()=>w.value.length===0?r.value:r.value.filter(U=>w.value.every(D=>(U.tags||[]).includes(D)))),T=U=>{const D=m.value.find(z=>z.id===U);return D?D.name:U},I=U=>{var z;const D=m.value.find(P=>P.id===U.connectorId);return(z=D==null?void 0:D.cardFields)!=null&&z.length?D.cardFields.map(P=>{const p=D.fields.find(u=>u.key===P.key);return{key:P.key,label:P.label||(p==null?void 0:p.label)||P.key,format:P.format||"text"}}):[]},d=(U,D)=>{var P,p,u,v,M;const z=D.configGroup;switch(D.source){case"channel":if(z){const ae=(p=(P=U.pluginOverrides)==null?void 0:P[z])==null?void 0:p[D.key];if(ae!==void 0)return ae}return U[D.key];case"connectorConfig":return(u=U.connectorConfig)==null?void 0:u[D.key];case"pluginOverride":return z?(M=(v=U.pluginOverrides)==null?void 0:v[z])==null?void 0:M[D.key]:void 0;default:return}},C=(U,D)=>{var u,v,M;const z=D.configGroup;if(!z)return D.suffix||"";const P=(v=(u=U.pluginOverrides)==null?void 0:u[z])==null?void 0:v.currencyLabel;if(P)return` ${P}${D.suffix||""}`;const p=(M=S.value[z])==null?void 0:M.currencyLabel;return p?` ${p}${D.suffix||""}`:` 积分${D.suffix||""}`},H=(U,D,z)=>{if(U==null||U==="")return"-";let P;switch(D){case"password-mask":P="••••••";break;case"boolean":P=U?"是":"否";break;case"number":P=String(U);break;case"size":P=String(U);break;case"currency":P=U===0?"免费":String(U);break;default:P=String(U)}return z?`${P} ${z}`:P},ee=async()=>{s.value=true;try{const[U,D,z]=await Promise.all([Fe.list(),He.list(),Ge.cardFields()]);r.value=U,m.value=D,h.value=z.fields,S.value=z.globalConfigs}catch{Q.error("加载数据失败")}finally{s.value=false}},L=()=>{_.value=null,x.value=true},g=U=>{_.value=U,x.value=true},f=()=>{ee()},A=async U=>{if(confirm(`确定要删除渠道 "${U.name}" 吗?`))try{await Fe.delete(U.id),Q.success("删除成功"),ee()}catch{Q.error("删除失败")}},B=async U=>{try{await Fe.toggle(U.id,U.enabled)}catch{U.enabled=!U.enabled,Q.error("操作失败")}},re=U=>{const D=JSON.parse(JSON.stringify(U));delete D.id,D.name=`${U.name} (副本)`,_.value=D,x.value=true};return we(()=>{ee()}),(U,D)=>{const z=j("k-icon"),P=j("k-button"),p=j("el-switch");return l(),n("div",Io,[e("div",Oo,[e("div",To,[i(P,{solid:"",type:"primary",onClick:L},{icon:V(()=>[i(z,{name:"add"})]),default:V(()=>[D[7]||(D[7]=R(" 新建渠道 ",-1))]),_:1}),i(pt,{modelValue:w.value,"onUpdate:modelValue":D[0]||(D[0]=u=>w.value=u),"all-tags":F.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",Uo,[i(Rt,{modelValue:c.value,"onUpdate:modelValue":D[1]||(D[1]=u=>c.value=u)},null,8,["modelValue"])])]),e("div",zo,[s.value?(l(),le(So,{key:0})):c.value==="card"?(l(),n(N,{key:1},[o(" 卡片视图 "),e("div",Po,[(l(true),n(N,null,te(O.value,u=>(l(),n("div",{key:u.id},[e("div",{class:"ml-card ml-card--clickable",onClick:v=>g(u)},[e("div",No,[e("div",Fo,[e("div",Lo,k(u.name),1),i(p,{modelValue:u.enabled,"onUpdate:modelValue":v=>u.enabled=v,size:"small",onChange:v=>B(u),onClick:D[2]||(D[2]=ye(()=>{},["stop"]))},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("div",Eo,[e("span",Ao,[i(z,{name:"link"}),R(" "+k(T(u.connectorId)),1)]),o(" 中间件字段(如费用)显示在标题旁 "),(l(true),n(N,null,te(h.value,v=>(l(),n(N,{key:`mw-${v.key}`},[v.key==="cost"?(l(),n("span",Mo,k(H(d(u,v),v.format,C(u,v))),1)):o("v-if",true)],64))),128))])]),e("div",Ro,[o(" 配置字段列表 "),I(u).length?(l(),n("div",jo,[(l(true),n(N,null,te(I(u),v=>(l(),n("div",{key:v.key,class:"field-item"},[e("span",Bo,k(v.label),1),e("span",qo,k(H(u.connectorConfig[v.key],v.format)),1)]))),128))])):o("v-if",true),o(" 标签 "),u.tags&&u.tags.length?(l(),n("div",Ko,[(l(true),n(N,null,te(u.tags,v=>(l(),n("span",{key:v,class:"tag-pill"},k(v),1))),128))])):o("v-if",true)]),e("div",{class:"card-footer",onClick:D[3]||(D[3]=ye(()=>{},["stop"]))},[i(P,{size:"mini",class:"ml-btn-outline-primary",onClick:v=>re(u)},{icon:V(()=>[i(z,{name:"copy"})]),default:V(()=>[D[8]||(D[8]=R(" 复制 ",-1))]),_:1},8,["onClick"]),D[10]||(D[10]=e("div",{class:"spacer"},null,-1)),i(P,{size:"mini",class:"ml-btn-outline-danger",onClick:v=>A(u)},{icon:V(()=>[i(z,{name:"delete"})]),default:V(()=>[D[9]||(D[9]=R(" 删除 ",-1))]),_:1},8,["onClick"])])],8,Do)]))),128))])],2112)):(l(),n(N,{key:2},[o(" 列表视图 "),e("div",Ho,[e("table",Jo,[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(N,null,te(O.value,u=>(l(),n("tr",{key:u.id,onClick:v=>g(u)},[e("td",Wo,[e("span",Zo,k(u.name),1)]),e("td",Yo,[e("span",Xo,k(T(u.connectorId)),1)]),e("td",Qo,[e("div",ei,[(l(true),n(N,null,te((u.tags||[]).slice(0,2),v=>(l(),n("span",{key:v,class:"mini-tag"},k(v),1))),128)),u.tags&&u.tags.length>2?(l(),n("span",ti,"+"+k(u.tags.length-2),1)):o("v-if",true)])]),e("td",si,[(l(true),n(N,null,te(h.value,v=>(l(),n(N,{key:`mw-${v.key}`},[v.key==="cost"?(l(),n("span",li,k(H(d(u,v),v.format,C(u,v))),1)):o("v-if",true)],64))),128))]),e("td",{class:"col-status",onClick:D[4]||(D[4]=ye(()=>{},["stop"]))},[i(p,{modelValue:u.enabled,"onUpdate:modelValue":v=>u.enabled=v,size:"small",onChange:v=>B(u)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:D[5]||(D[5]=ye(()=>{},["stop"]))},[e("div",ai,[i(P,{size:"mini",class:"ml-btn-outline-primary",onClick:v=>re(u)},{icon:V(()=>[i(z,{name:"copy"})]),default:V(()=>[D[11]||(D[11]=R(" 复制 ",-1))]),_:1},8,["onClick"]),i(P,{size:"mini",class:"ml-btn-outline-danger",onClick:v=>A(u)},{icon:V(()=>[i(z,{name:"delete"})]),default:V(()=>[D[12]||(D[12]=R(" 删除 ",-1))]),_:1},8,["onClick"])])])],8,Go))),128))])])])],2112))]),o(" 编辑/创建对话框 "),i(Co,{modelValue:x.value,"onUpdate:modelValue":D[6]||(D[6]=u=>x.value=u),channel:_.value,onSaved:f},null,8,["modelValue","channel"])])}}}),oi=me(ni,[["__scopeId","data-v-67a4b49d"]]),ii={class:"json-editor"},ri={key:0,class:"error-msg"},di=ue({__name:"JsonEditor",props:{modelValue:{},rows:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=$(""),m=$("");$e(()=>s.modelValue,S=>{try{r.value=JSON.stringify(S,null,2)}catch{r.value=""}},{immediate:true});const h=()=>{try{const S=JSON.parse(r.value);m.value="",c("update:modelValue",S)}catch{m.value="Invalid JSON format"}};return(S,x)=>{const _=j("el-input");return l(),n("div",ii,[i(_,{modelValue:r.value,"onUpdate:modelValue":x[0]||(x[0]=w=>r.value=w),type:"textarea",rows:t.rows,class:"code-input",onBlur:h},null,8,["modelValue","rows"]),m.value?(l(),n("div",ri,k(m.value),1)):o("v-if",true)])}}}),ui=me(di,[["__scopeId","data-v-4d47b7db"]]),ci={class:"image-upload"},vi={key:0,class:"image-list"},pi={class:"image-preview"},mi=["src","alt"],fi={class:"image-overlay"},gi={class:"image-name"},_i={class:"upload-content"},yi={key:1,class:"upload-loading"},hi=ue({__name:"ImageUpload",props:{modelValue:{},maxCount:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=$(),m=$(false),h=$([]),S=async()=>{var d;const I=[];for(const C of s.modelValue)C&&I.push({url:C,filename:((d=C.split("/").pop())==null?void 0:d.split("?")[0])||"image",mime:"image/png",previewUrl:C});h.value=I};$e(()=>s.modelValue,()=>{S()},{immediate:true});const x=()=>{var I;(I=r.value)==null||I.click()},_=async I=>{const d=I.target;!d.files||d.files.length===0||(await F(Array.from(d.files)),d.value="")},w=async I=>{var C;const d=(C=I.dataTransfer)==null?void 0:C.files;!d||d.length===0||await F(Array.from(d).filter(H=>H.type.startsWith("image/")))},F=async I=>{if(I.length===0)return;const d=s.maxCount||10;h.value.length+I.length>d&&(Q.warning(`最多上传 ${d} 张图片`),I=I.slice(0,d-h.value.length)),m.value=true;try{for(const C of I){const H=await O(C),ee=await Vs.upload(H,C.type,C.name);if(!ee.url){Q.error("缓存服务未配置 selfUrl,无法获取图片 URL");continue}h.value.push({url:ee.url,filename:ee.filename,mime:ee.mime,previewUrl:ee.url})}c("update:modelValue",h.value.map(C=>C.url))}catch(C){Q.error("上传失败"),console.error(C)}finally{m.value=false}},O=I=>new Promise((d,C)=>{const H=new FileReader;H.onload=()=>{const L=H.result.split(",")[1];d(L)},H.onerror=C,H.readAsDataURL(I)}),T=I=>{h.value.splice(I,1),c("update:modelValue",h.value.map(d=>d.url))};return we(()=>{S()}),(I,d)=>{const C=j("k-icon"),H=j("k-button");return l(),n("div",ci,[o(" 已上传的图片列表 "),h.value.length>0?(l(),n("div",vi,[(l(true),n(N,null,te(h.value,(ee,L)=>(l(),n("div",{key:ee.url||L,class:"image-item"},[e("div",pi,[e("img",{src:ee.previewUrl,alt:ee.filename},null,8,mi),e("div",fi,[i(H,{size:"mini",class:"remove-btn",onClick:g=>T(L)},{icon:V(()=>[i(C,{name:"delete"})]),_:1},8,["onClick"])])]),e("div",gi,k(ee.filename),1)]))),128))])):o("v-if",true),o(" 上传按钮 "),e("div",{class:"upload-area",onClick:x,onDragover:d[0]||(d[0]=ye(()=>{},["prevent"])),onDrop:ye(w,["prevent"])},[e("input",{ref_key:"fileInput",ref:r,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:_},null,544),e("div",_i,[i(C,{name:"add",class:"upload-icon"}),d[1]||(d[1]=e("span",{class:"upload-text"},"点击或拖拽上传图片",-1))])],32),o(" 加载状态 "),m.value?(l(),n("div",yi,[i(C,{name:"sync",class:"loading-icon"}),d[2]||(d[2]=R(" 上传中... ",-1))])):o("v-if",true)])}}}),Ft=me(hi,[["__scopeId","data-v-47f2485e"]]),bi={class:"ml-view-container"},ki={class:"ml-view-header"},$i={class:"ml-header-left"},wi={class:"ml-header-right"},Ci={class:"ml-view-content"},Vi={key:0,class:"loading-state"},xi={class:"ml-masonry"},Si=["onClick"],Ii={key:0,class:"card-thumbnail"},Oi=["src","alt"],Ti={class:"thumbnail-overlay"},Ui={key:0,class:"ref-count"},zi={key:1,class:"card-thumbnail placeholder"},Pi={class:"card-content"},Di={class:"card-title"},Ni={key:0,class:"card-tags"},Fi={key:0,class:"mini-tag more"},Li={class:"ml-table-container"},Ei={class:"ml-table"},Ai=["onClick"],Mi={class:"col-thumb"},Ri={class:"thumb-wrapper"},ji=["src","alt"],Bi={key:1,class:"thumb-placeholder"},qi={class:"col-name"},Ki={class:"name-text"},Hi={class:"col-template"},Ji={class:"template-preview"},Gi={class:"col-refs"},Wi={key:0,class:"ref-badge"},Zi={key:1,class:"no-data"},Yi={class:"col-source"},Xi={class:"action-btns"},Qi={class:"dialog-footer"},er=ue({__name:"PresetsView",setup(t){const a=["本地","远程","text2img","img2img","NSFW"],s=$(false),c=$([]),r=$(false),m=$(false),h=$([]),S=$("card"),x=Z(()=>{const g=new Set;return c.value.forEach(f=>{(f.tags||[]).forEach(A=>g.add(A))}),Array.from(g).sort()}),_=$({name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"}),w=$([]);$e(()=>_.value.thumbnail,g=>{w.value=g?[g]:[]},{immediate:true}),$e(w,g=>{_.value.thumbnail=g.length>0?g[0]:""});const F=Z(()=>h.value.length===0?c.value:c.value.filter(g=>h.value.every(f=>f==="本地"?g.source==="user":f==="远程"?g.source==="api":(g.tags||[]).includes(f)))),O=async()=>{s.value=true;try{c.value=await ze.list()}catch{Q.error("加载数据失败")}finally{s.value=false}},T=()=>{m.value=false,_.value={name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"},r.value=true},I=g=>{m.value=true,_.value=JSON.parse(JSON.stringify(g)),r.value=true},d=g=>{m.value=false;const f=JSON.parse(JSON.stringify(g));delete f.id,f.name=`${g.name} (副本)`,f.source="user",_.value=f,r.value=true},C=async g=>{try{await ze.toggle(g.id,g.enabled)}catch{g.enabled=!g.enabled,Q.error("操作失败")}},H=(g,f=50)=>{if(!g)return"-";const A=g.replace(/\s+/g," ").trim();return A.length<=f?A:A.slice(0,f)+"..."},ee=async()=>{if(!_.value.name||!_.value.promptTemplate){Q.warning("请填写必要信息");return}try{m.value&&_.value.id?(await ze.update(_.value.id,_.value),Q.success("更新成功")):(await ze.create(_.value),Q.success("创建成功")),r.value=false,O()}catch{Q.error("操作失败")}},L=async g=>{if(confirm(`确定要删除预设 "${g.name}" 吗?`))try{await ze.delete(g.id),Q.success("删除成功"),O()}catch{Q.error("删除失败")}};return we(()=>{O()}),(g,f)=>{const A=j("k-icon"),B=j("k-button"),re=j("el-switch"),U=j("el-input"),D=j("el-form-item"),z=j("el-divider"),P=j("el-form"),p=j("el-dialog");return l(),n("div",bi,[e("div",ki,[e("div",$i,[i(B,{solid:"",type:"primary",onClick:T},{icon:V(()=>[i(A,{name:"add"})]),default:V(()=>[f[14]||(f[14]=R(" 新建预设 ",-1))]),_:1}),i(pt,{modelValue:h.value,"onUpdate:modelValue":f[0]||(f[0]=u=>h.value=u),"all-tags":x.value,"preset-tags":a},null,8,["modelValue","all-tags"])]),e("div",wi,[i(Rt,{modelValue:S.value,"onUpdate:modelValue":f[1]||(f[1]=u=>S.value=u)},null,8,["modelValue"])])]),e("div",Ci,[s.value?(l(),n("div",Vi,[i(A,{name:"sync",class:"ml-spin"}),f[15]||(f[15]=R(" 加载中... ",-1))])):S.value==="card"?(l(),n(N,{key:1},[o(" 卡片视图 (瀑布流) "),e("div",xi,[(l(true),n(N,null,te(F.value,u=>{var v,M;return l(),n("div",{key:u.id,class:"ml-masonry-item"},[e("div",{class:"preset-card",onClick:ae=>I(u)},[o(" 缩略图 "),u.thumbnail?(l(),n("div",Ii,[e("img",{src:u.thumbnail,alt:u.name,loading:"lazy"},null,8,Oi),e("div",Ti,[(v=u.referenceImages)!=null&&v.length?(l(),n("span",Ui,[i(A,{name:"image"}),R(" "+k(u.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",zi,[i(A,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",Pi,[e("div",Di,k(u.name),1),(M=u.tags)!=null&&M.length?(l(),n("div",Ni,[(l(true),n(N,null,te(u.tags.slice(0,4),ae=>(l(),n("span",{key:ae,class:"mini-tag"},k(ae),1))),128)),u.tags.length>4?(l(),n("span",Fi,"+"+k(u.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮 "),e("div",{class:"card-actions",onClick:f[2]||(f[2]=ye(()=>{},["stop"]))},[i(re,{modelValue:u.enabled,"onUpdate:modelValue":ae=>u.enabled=ae,size:"small",onChange:ae=>C(u)},null,8,["modelValue","onUpdate:modelValue","onChange"]),i(B,{size:"mini",class:"ml-btn-outline-primary",onClick:ae=>d(u)},{icon:V(()=>[i(A,{name:"copy"})]),default:V(()=>[f[16]||(f[16]=R(" 复制 ",-1))]),_:1},8,["onClick"]),u.source==="user"?(l(),le(B,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:ae=>L(u)},{icon:V(()=>[i(A,{name:"delete"})]),default:V(()=>[f[17]||(f[17]=R(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)]),o(" 来源标记 "),e("div",{class:se(["source-indicator",u.source])},k(u.source==="api"?"远程":"本地"),3)],8,Si)])}),128))])],2112)):(l(),n(N,{key:2},[o(" 列表视图 "),e("div",Li,[e("table",Ei,[f[20]||(f[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(N,null,te(F.value,u=>{var v;return l(),n("tr",{key:u.id,onClick:M=>I(u)},[e("td",Mi,[e("div",Ri,[u.thumbnail?(l(),n("img",{key:0,src:u.thumbnail,alt:u.name},null,8,ji)):(l(),n("div",Bi,[i(A,{name:"image"})]))])]),e("td",qi,[e("span",Ki,k(u.name),1)]),e("td",Hi,[e("span",Ji,k(H(u.promptTemplate)),1)]),e("td",Gi,[(v=u.referenceImages)!=null&&v.length?(l(),n("span",Wi,[i(A,{name:"image"}),R(" "+k(u.referenceImages.length),1)])):(l(),n("span",Zi,"-"))]),e("td",Yi,[e("span",{class:se(["source-badge",u.source])},k(u.source==="api"?"远程":"本地"),3)]),e("td",{class:"col-status",onClick:f[3]||(f[3]=ye(()=>{},["stop"]))},[i(re,{modelValue:u.enabled,"onUpdate:modelValue":M=>u.enabled=M,size:"small",onChange:M=>C(u)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:f[4]||(f[4]=ye(()=>{},["stop"]))},[e("div",Xi,[i(B,{size:"mini",class:"ml-btn-outline-primary",onClick:M=>d(u)},{icon:V(()=>[i(A,{name:"copy"})]),default:V(()=>[f[18]||(f[18]=R(" 复制 ",-1))]),_:1},8,["onClick"]),u.source==="user"?(l(),le(B,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:M=>L(u)},{icon:V(()=>[i(A,{name:"delete"})]),default:V(()=>[f[19]||(f[19]=R(" 删除 ",-1))]),_:1},8,["onClick"])):o("v-if",true)])])],8,Ai)}),128))])])])],2112))]),o(" 编辑/创建对话框 "),i(p,{modelValue:r.value,"onUpdate:modelValue":f[13]||(f[13]=u=>r.value=u),title:m.value?"编辑预设":"创建预设",width:"600px","close-on-click-modal":false},{footer:V(()=>[e("span",Qi,[i(B,{onClick:f[12]||(f[12]=u=>r.value=false)},{default:V(()=>[...f[27]||(f[27]=[R("取消",-1)])]),_:1}),i(B,{type:"primary",onClick:ee},{default:V(()=>[...f[28]||(f[28]=[R("保存",-1)])]),_:1})])]),default:V(()=>[r.value?(l(),le(P,{key:0,ref:"formRef",model:_.value,"label-width":"100px"},{default:V(()=>[i(D,{label:"名称",required:""},{default:V(()=>[i(U,{modelValue:_.value.name,"onUpdate:modelValue":f[5]||(f[5]=u=>_.value.name=u),disabled:m.value&&_.value.source==="api",placeholder:"如 二次元少女"},null,8,["modelValue","disabled"]),f[21]||(f[21]=e("div",{class:"form-tip"},"用于指令调用和展示,冲突时会自动添加后缀",-1))]),_:1}),i(D,{label:"Prompt 模板",required:""},{default:V(()=>[i(U,{modelValue:_.value.promptTemplate,"onUpdate:modelValue":f[6]||(f[6]=u=>_.value.promptTemplate=u),type:"textarea",rows:4,placeholder:"输入提示词模板,支持变量如 {prompt}"},null,8,["modelValue"]),f[22]||(f[22]=e("div",{class:"form-tip"},"默认将用户输入附加在最后,也可使用 {prompt} 指定位置",-1))]),_:1}),_.value.source==="user"?(l(),le(D,{key:0,label:"缩略图"},{default:V(()=>[i(Ft,{modelValue:w.value,"onUpdate:modelValue":f[7]||(f[7]=u=>w.value=u),"max-count":1},null,8,["modelValue"]),f[23]||(f[23]=e("div",{class:"form-tip"},"用于在卡片视图中展示预设的预览图",-1))]),_:1})):o("v-if",true),i(D,{label:"参考图"},{default:V(()=>[i(Ft,{modelValue:_.value.referenceImages,"onUpdate:modelValue":f[8]||(f[8]=u=>_.value.referenceImages=u),"max-count":5},null,8,["modelValue"]),f[24]||(f[24]=e("div",{class:"form-tip"},"生成时会自动附加这些参考图片",-1))]),_:1}),i(z,{"content-position":"left"},{default:V(()=>[...f[25]||(f[25]=[R("高级设置",-1)])]),_:1}),i(D,{label:"标签"},{default:V(()=>[i(jt,{modelValue:_.value.tags,"onUpdate:modelValue":f[9]||(f[9]=u=>_.value.tags=u),placeholder:"输入标签..."},null,8,["modelValue"]),f[26]||(f[26]=e("div",{class:"form-tip"},"与渠道标签匹配时会自动关联",-1))]),_:1}),i(D,{label:"参数覆盖"},{default:V(()=>[i(ui,{modelValue:_.value.parameterOverrides,"onUpdate:modelValue":f[10]||(f[10]=u=>_.value.parameterOverrides=u),rows:3},null,8,["modelValue"])]),_:1}),i(D,{label:"启用状态"},{default:V(()=>[i(re,{modelValue:_.value.enabled,"onUpdate:modelValue":f[11]||(f[11]=u=>_.value.enabled=u)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])):o("v-if",true)]),_:1},8,["modelValue","title"])])}}}),tr=me(er,[["__scopeId","data-v-8eaa50b4"]]),sr=ue({__name:"StatusBadge",props:{status:{}},setup(t){const a=t,s=Z(()=>{switch(a.status){case"pending":return"等待中";case"processing":return"处理中";case"success":return"成功";case"failed":return"失败";default:return a.status}});return(c,r)=>(l(),n("span",{class:se(["status-badge",t.status])},k(s.value),3))}}),Lt=me(sr,[["__scopeId","data-v-0bc21896"]]),lr={class:"lightbox-container"},ar={class:"lightbox-content"},nr=["src"],or={key:2,class:"image-counter"},ir={key:0,class:"lightbox-sidebar"},rr={class:"sidebar-header"},dr={class:"sidebar-body"},ur={class:"info-block"},cr={class:"block-header"},vr={key:0,class:"info-block"},pr={class:"info-value"},mr={key:1,class:"info-block"},fr={class:"info-value"},gr={class:"sidebar-footer"},_r=ue({__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,c=a,r=$(s.initialIndex),m=Z(()=>s.images[r.value]||"");$e(()=>s.visible,d=>{d?(r.value=s.initialIndex,document.body.style.overflow="hidden"):document.body.style.overflow=""}),$e(()=>s.initialIndex,d=>{r.value=d});const h=()=>{c("update:visible",false),c("close")},S=()=>{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("已复制提示词"))},w=()=>{window.open(m.value,"_blank")},F=()=>{const d=document.createElement("a");d.href=m.value,d.download=`image-${Date.now()}.png`,d.click()},O=d=>(typeof d=="string"?new Date(d):d).toLocaleString(),T=d=>d<1e3?`${d}ms`:`${(d/1e3).toFixed(1)}s`,I=d=>{s.visible&&(d.key==="Escape"?h():d.key==="ArrowLeft"?S():d.key==="ArrowRight"&&x())};return we(()=>{window.addEventListener("keydown",I)}),et(()=>{window.removeEventListener("keydown",I),document.body.style.overflow=""}),(d,C)=>{const H=j("k-icon");return l(),le(fs,{to:"body"},[i(Qe,{name:"lightbox-fade"},{default:V(()=>[t.visible?(l(),n("div",{key:0,class:"lightbox-overlay",onClick:ye(h,["self"])},[e("div",lr,[e("div",ar,[o(" 左侧图片区域 "),e("div",{class:"lightbox-image-area",onClick:ye(h,["self"])},[o(" 关闭按钮 "),e("button",{class:"close-btn",onClick:h,title:"关闭 (Esc)"},[i(H,{name:"times"})]),o(" 多图时的导航 "),t.images.length>1?(l(),n("button",{key:0,class:"nav-btn prev",onClick:ye(S,["stop"]),title:"上一张"},[i(H,{name:"chevron-left"})])):o("v-if",true),e("img",{src:m.value,class:"lightbox-image",alt:"Preview"},null,8,nr),t.images.length>1?(l(),n("button",{key:1,class:"nav-btn next",onClick:ye(x,["stop"]),title:"下一张"},[i(H,{name:"chevron-right"})])):o("v-if",true),o(" 图片计数器 "),t.images.length>1?(l(),n("div",or,k(r.value+1)+" / "+k(t.images.length),1)):o("v-if",true)]),o(" 右侧信息栏 "),t.showSidebar?(l(),n("div",ir,[e("div",rr,[C[0]||(C[0]=e("div",{class:"info-title"},"图片详情",-1)),e("button",{class:"header-close-btn",onClick:h,title:"关闭"},[i(H,{name:"times"})])]),e("div",dr,[o(" 提示词 "),e("div",ur,[e("div",cr,[C[1]||(C[1]=e("span",null,"提示词",-1)),t.prompt?(l(),n("button",{key:0,class:"copy-btn",onClick:_}," 复制 ")):o("v-if",true)]),e("div",{class:se(["prompt-content",{empty:!t.prompt}])},k(t.prompt||"无提示词"),3)]),o(" 创建时间 "),t.createdAt?(l(),n("div",vr,[C[2]||(C[2]=e("div",{class:"block-header"},[e("span",null,"创建时间")],-1)),e("div",pr,k(O(t.createdAt)),1)])):o("v-if",true),o(" 生成耗时 "),t.duration?(l(),n("div",mr,[C[3]||(C[3]=e("div",{class:"block-header"},[e("span",null,"生成耗时")],-1)),e("div",fr,k(T(t.duration)),1)])):o("v-if",true)]),e("div",gr,[e("button",{class:"action-btn primary",onClick:w},[i(H,{name:"external-link"}),C[4]||(C[4]=R(" 查看原图 ",-1))]),e("button",{class:"action-btn secondary",onClick:F},[i(H,{name:"download"}),C[5]||(C[5]=R(" 下载 ",-1))])])])):o("v-if",true)])])])):o("v-if",true)]),_:1})])}}}),bt=me(_r,[["__scopeId","data-v-bd68872f"]]),yr={class:"ml-view-container"},hr={class:"ml-view-header"},br={class:"ml-header-left"},kr={class:"view-mode-switch"},$r={class:"ml-header-right"},wr={key:0,class:"stats-grid"},Cr={class:"stat-card"},Vr={class:"stat-icon total"},xr={class:"stat-content"},Sr={class:"stat-value"},Ir={class:"stat-card"},Or={class:"stat-icon success"},Tr={class:"stat-content"},Ur={class:"stat-value success"},zr={class:"stat-card"},Pr={class:"stat-icon failed"},Dr={class:"stat-content"},Nr={class:"stat-value failed"},Fr={class:"stat-card"},Lr={class:"stat-icon processing"},Er={class:"stat-content"},Ar={class:"stat-value pending"},Mr={class:"stat-card"},Rr={class:"stat-icon rate"},jr={class:"stat-content"},Br={class:"stat-value"},qr={class:"filter-bar"},Kr={class:"filter-group"},Hr={key:0,class:"pagination-info"},Jr={class:"ml-view-content"},Gr={class:"mono-text"},Wr=["title"],Zr={key:0},Yr={key:1,class:"text-muted"},Xr={key:0},Qr={key:1},ed={class:"time-text"},td={key:0,class:"empty-gallery"},sd={key:1,class:"ml-masonry"},ld=["onClick"],ad={class:"gallery-image-wrapper"},nd=["src"],od=["src"],id={class:"gallery-overlay"},rd={class:"gallery-info"},dd=["title"],ud={class:"gallery-meta"},cd={class:"gallery-time"},vd={class:"pagination"},pd={key:0,class:"task-detail"},md={class:"detail-section"},fd={class:"detail-grid"},gd={class:"detail-item"},_d={class:"detail-item"},yd={class:"detail-item"},hd={class:"detail-item"},bd={class:"detail-item"},kd={class:"detail-item"},$d={class:"detail-section"},wd={class:"code-block"},Cd={key:0,class:"detail-section"},Vd={class:"output-gallery"},xd=["src"],Sd=["src"],Id=["src"],Od={key:3,class:"text-asset"},Td=["href"],Ud={key:1,class:"detail-section"},zd={class:"code-block error"},Pd={class:"cleanup-form"},Dd={class:"dialog-footer"},Nd=ue({__name:"TasksView",setup(t){const a=$("list"),s=$(false),c=$([]),r=$(null),m=$(0),h=$(1),S=$(20),x=$({status:"",userId:void 0,channelId:void 0}),_=$(false),w=$(null);$(false);const F=$(null),O=$(false),T=$([]),I=$(0),d=$(""),C=$(),H=$(),ee=$(false),L=$(30),g=u=>{var v,M,ae;return((M=(v=u.middlewareLogs)==null?void 0:v.preset)==null?void 0:M.transformedPrompt)||((ae=u.requestSnapshot)==null?void 0:ae.prompt)||""},f=Z(()=>{var v,M,ae;const u=[];for(const G of c.value){if(G.status!=="success"||!G.responseSnapshot)continue;const E=((M=(v=G.middlewareLogs)==null?void 0:v.preset)==null?void 0:M.transformedPrompt)||((ae=G.requestSnapshot)==null?void 0:ae.prompt)||"";G.responseSnapshot.forEach((X,ie)=>{(X.kind==="image"||X.kind==="video")&&X.url&&u.push({id:G.id,assetIndex:ie,kind:X.kind,url:X.url,prompt:E,channelId:G.channelId,createdAt:G.startTime})})}return u}),A=async()=>{s.value=true;try{const u={limit:S.value,offset:(h.value-1)*S.value};x.value.status&&(u.status=x.value.status),x.value.userId&&(u.userId=Number(x.value.userId)),x.value.channelId&&(u.channelId=Number(x.value.channelId));const[v,M]=await Promise.all([Le.list(u),Le.stats()]);c.value=v.items,m.value=v.total,r.value=M}catch(u){console.error("Failed to fetch tasks:",u),Q.error("加载数据失败")}finally{s.value=false}},B=u=>{w.value=u,_.value=true},re=u=>{T.value=[u.url],I.value=0,d.value=u.prompt,C.value=u.createdAt,H.value=void 0,O.value=true,F.value=u},U=()=>{ee.value=true},D=async()=>{try{const u=await Le.cleanup(L.value);Q.success(`成功清理 ${u.deleted} 条任务`),ee.value=false,A()}catch{Q.error("清理失败")}},z=u=>new Date(u).toLocaleString(),P=u=>u<1e3?`${u}ms`:`${(u/1e3).toFixed(2)}s`,p=u=>{const v=u.target;v.style.display="none"};return we(()=>{A()}),(u,v)=>{const M=j("k-icon"),ae=j("k-button"),G=j("el-option"),E=j("el-select"),X=j("el-input"),ie=j("el-table-column"),he=j("el-table"),pe=j("el-pagination"),ge=j("el-dialog"),fe=j("el-input-number");return l(),n("div",yr,[o(" 固定头部区域 "),e("div",hr,[e("div",br,[o(" 视图切换 "),e("div",kr,[e("button",{class:se(["mode-btn",{active:a.value==="list"}]),onClick:v[0]||(v[0]=q=>a.value="list"),title:"列表视图"},[...v[14]||(v[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:se(["mode-btn",{active:a.value==="gallery"}]),onClick:v[1]||(v[1]=q=>a.value="gallery"),title:"画廊视图"},[...v[15]||(v[15]=[ct('<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(ae,{onClick:U},{icon:V(()=>[i(M,{name:"delete"})]),default:V(()=>[v[16]||(v[16]=R(" 清理记录 ",-1))]),_:1}),i(ae,{onClick:A},{icon:V(()=>[i(M,{name:"refresh"})]),default:V(()=>[v[17]||(v[17]=R(" 刷新 ",-1))]),_:1})])]),o(" 统计信息 (固定) "),r.value?(l(),n("div",wr,[e("div",Cr,[e("div",Vr,[i(M,{name:"clipboard-list"})]),e("div",xr,[e("div",Sr,k(r.value.total),1),v[18]||(v[18]=e("div",{class:"stat-label"},"总任务数",-1))])]),e("div",Ir,[e("div",Or,[i(M,{name:"check-circle"})]),e("div",Tr,[e("div",Ur,k(r.value.byStatus.success),1),v[19]||(v[19]=e("div",{class:"stat-label"},"成功",-1))])]),e("div",zr,[e("div",Pr,[i(M,{name:"exclamation-triangle"})]),e("div",Dr,[e("div",Nr,k(r.value.byStatus.failed),1),v[20]||(v[20]=e("div",{class:"stat-label"},"失败",-1))])]),e("div",Fr,[e("div",Lr,[i(M,{name:"clock"})]),e("div",Er,[e("div",Ar,k(r.value.byStatus.pending+r.value.byStatus.processing),1),v[21]||(v[21]=e("div",{class:"stat-label"},"进行中",-1))])]),e("div",Mr,[e("div",Rr,[i(M,{name:"chart-pie"})]),e("div",jr,[e("div",Br,k(r.value.successRate),1),v[22]||(v[22]=e("div",{class:"stat-label"},"成功率",-1))])])])):o("v-if",true),o(" 筛选栏 (固定) "),e("div",qr,[e("div",Kr,[i(E,{modelValue:x.value.status,"onUpdate:modelValue":v[2]||(v[2]=q=>x.value.status=q),placeholder:"所有状态",clearable:"",onChange:A,style:{width:"140px"}},{default:V(()=>[i(G,{label:"等待中",value:"pending"}),i(G,{label:"处理中",value:"processing"}),i(G,{label:"成功",value:"success"}),i(G,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),i(X,{modelValue:x.value.channelId,"onUpdate:modelValue":v[3]||(v[3]=q=>x.value.channelId=q),placeholder:"渠道 ID",clearable:"",onChange:A,style:{width:"140px"}},null,8,["modelValue"]),i(X,{modelValue:x.value.userId,"onUpdate:modelValue":v[4]||(v[4]=q=>x.value.userId=q),placeholder:"用户 ID",clearable:"",onChange:A,style:{width:"140px"}},null,8,["modelValue"])]),m.value>0?(l(),n("div",Hr," 共 "+k(m.value)+" 条记录 ",1)):o("v-if",true)]),o(" 可滚动的内容区域 "),e("div",Jr,[o(" 列表视图 "),a.value==="list"?(l(),le(he,{key:0,data:c.value,style:{width:"100%"},class:"task-table",onRowClick:B},{default:V(()=>[i(ie,{prop:"id",label:"ID",width:"80",align:"center"},{default:V(({row:q})=>[e("span",Gr,"#"+k(q.id),1)]),_:1}),i(ie,{label:"状态",width:"100",align:"center"},{default:V(({row:q})=>[i(Lt,{status:q.status},null,8,["status"])]),_:1}),i(ie,{prop:"channelId",label:"渠道",width:"100",align:"center"}),i(ie,{label:"提示词","min-width":"300"},{default:V(({row:q})=>[e("div",{class:"prompt-cell",title:g(q)},k(g(q)),9,Wr)]),_:1}),i(ie,{label:"输出",width:"120",align:"center"},{default:V(({row:q})=>[q.responseSnapshot&&q.responseSnapshot.length?(l(),n("span",Zr,k(q.responseSnapshot.length)+" 个资产 ",1)):(l(),n("span",Yr,"-"))]),_:1}),i(ie,{label:"耗时",width:"100",align:"right"},{default:V(({row:q})=>[q.duration?(l(),n("span",Xr,k(P(q.duration)),1)):(l(),n("span",Qr,"-"))]),_:1}),i(ie,{label:"时间",width:"180",align:"right"},{default:V(({row:q})=>[e("span",ed,k(z(q.startTime)),1)]),_:1})]),_:1},8,["data"])):a.value==="gallery"?(l(),n(N,{key:1},[o(" 画廊视图 (瀑布流) "),f.value.length===0?(l(),n("div",td,[i(M,{name:"image",class:"empty-icon"}),v[23]||(v[23]=e("p",null,"暂无成功生成的图片",-1))])):(l(),n("div",sd,[(l(true),n(N,null,te(f.value,q=>(l(),n("div",{key:q.id+"-"+q.assetIndex,class:"ml-masonry-item"},[e("div",{class:"gallery-item",onClick:y=>re(q)},[e("div",ad,[q.kind==="image"?(l(),n("img",{key:0,src:q.url,class:"gallery-image",loading:"lazy",onError:p},null,40,nd)):q.kind==="video"?(l(),n("video",{key:1,src:q.url,class:"gallery-video",muted:"",loop:"",onMouseenter:v[5]||(v[5]=y=>y.target.play()),onMouseleave:v[6]||(v[6]=y=>y.target.pause())},null,40,od)):o("v-if",true),e("div",id,[i(M,{name:"zoom-in",class:"zoom-icon"})])]),e("div",rd,[e("div",{class:"gallery-prompt",title:q.prompt},k(q.prompt),9,dd),e("div",ud,[e("span",cd,k(z(q.createdAt)),1)])])],8,ld)]))),128))]))],64)):o("v-if",true)]),o(" 分页 (固定在底部) "),e("div",vd,[i(pe,{"current-page":h.value,"onUpdate:currentPage":v[7]||(v[7]=q=>h.value=q),"page-size":S.value,"onUpdate:pageSize":v[8]||(v[8]=q=>S.value=q),total:m.value,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:A,onSizeChange:A},null,8,["current-page","page-size","total"])]),o(" 任务详情对话框 "),i(ge,{modelValue:_.value,"onUpdate:modelValue":v[9]||(v[9]=q=>_.value=q),title:"任务详情",width:"800px"},{default:V(()=>{var q,y;return[w.value?(l(),n("div",pd,[e("div",md,[v[31]||(v[31]=e("h3",null,"基本信息",-1)),e("div",fd,[e("div",gd,[v[24]||(v[24]=e("span",{class:"label"},"ID:",-1)),R(" "+k(w.value.id),1)]),e("div",_d,[v[25]||(v[25]=e("span",{class:"label"},"状态:",-1)),v[26]||(v[26]=R()),i(Lt,{status:w.value.status},null,8,["status"])]),e("div",yd,[v[27]||(v[27]=e("span",{class:"label"},"渠道 ID:",-1)),R(" "+k(w.value.channelId),1)]),e("div",hd,[v[28]||(v[28]=e("span",{class:"label"},"用户 ID:",-1)),R(" "+k(w.value.userId||"N/A"),1)]),e("div",bd,[v[29]||(v[29]=e("span",{class:"label"},"创建时间:",-1)),R(" "+k(z(w.value.startTime)),1)]),e("div",kd,[v[30]||(v[30]=e("span",{class:"label"},"耗时:",-1)),R(" "+k(P(w.value.duration||0)),1)])])]),e("div",$d,[v[32]||(v[32]=e("h3",null,"Prompt",-1)),e("div",wd,k(g(w.value)),1)]),w.value.responseSnapshot&&w.value.responseSnapshot.length>0?(l(),n("div",Cd,[e("h3",null,"生成结果 ("+k(w.value.responseSnapshot.length)+" 个资产)",1),e("div",Vd,[(l(true),n(N,null,te(w.value.responseSnapshot,(b,W)=>{var oe;return l(),n("div",{key:W,class:"output-item"},[b.kind==="image"&&b.url?(l(),n("img",{key:0,src:b.url,class:"output-image"},null,8,xd)):b.kind==="video"&&b.url?(l(),n("video",{key:1,src:b.url,class:"output-image",controls:""},null,8,Sd)):b.kind==="audio"&&b.url?(l(),n("audio",{key:2,src:b.url,controls:"",style:{width:"100%"}},null,8,Id)):b.kind==="text"&&b.content?(l(),n("div",Od,k(b.content),1)):b.url?(l(),n("a",{key:4,href:b.url,target:"_blank",class:"file-link"},[i(M,{name:"file"}),R(" "+k(((oe=b.meta)==null?void 0:oe.filename)||b.url),1)],8,Td)):o("v-if",true)])}),128))])])):o("v-if",true),(y=(q=w.value.middlewareLogs)==null?void 0:q.request)!=null&&y.error?(l(),n("div",Ud,[v[33]||(v[33]=e("h3",null,"错误信息",-1)),e("div",zd,k(w.value.middlewareLogs.request.error),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue"]),o(" 图片预览弹窗 "),i(bt,{visible:O.value,"onUpdate:visible":v[10]||(v[10]=q=>O.value=q),images:T.value,"initial-index":I.value,prompt:d.value,"created-at":C.value,duration:H.value},null,8,["visible","images","initial-index","prompt","created-at","duration"]),o(" 清理对话框 "),i(ge,{modelValue:ee.value,"onUpdate:modelValue":v[13]||(v[13]=q=>ee.value=q),title:"清理旧任务",width:"400px"},{footer:V(()=>[e("span",Dd,[i(ae,{onClick:v[12]||(v[12]=q=>ee.value=false)},{default:V(()=>[...v[35]||(v[35]=[R("取消",-1)])]),_:1}),i(ae,{type:"error",onClick:D},{default:V(()=>[...v[36]||(v[36]=[R("确认清理",-1)])]),_:1})])]),default:V(()=>[e("div",Pd,[v[34]||(v[34]=e("p",null,"清理多少天前的任务?",-1)),i(fe,{modelValue:L.value,"onUpdate:modelValue":v[11]||(v[11]=q=>L.value=q),min:1,max:365},null,8,["modelValue"])])]),_:1},8,["modelValue"])])}}}),Fd=me(Nd,[["__scopeId","data-v-898a70bb"]]),Ld={class:"gallery-content"},Ed={class:"gallery-header"},Ad={class:"header-left"},Md={key:0,class:"gallery-count"},Rd={class:"header-actions"},jd={key:0,class:"gallery-empty"},Bd={class:"gallery-empty"},qd=["onClick"],Kd={key:0,class:"task-image-wrapper"},Hd=["src"],Jd={key:0,class:"more-images"},Gd={class:"task-processing"},Wd={class:"processing-text"},Zd={class:"task-failed"},Yd={class:"task-info"},Xd=["title"],Qd={class:"task-meta"},eu={class:"task-time"},tu={key:0,class:"task-duration"},su={key:0,class:"loading-more"},ot=10,lu=ue({__name:"HistoryGallery",emits:["select"],setup(t,{expose:a,emit:s}){const c=s,r=$(false),m=$(false),h=$(false),S=$([]),x=$(0),_=$(false),w=$(0),F=$();let O=null;const T=$(false),I=$([]),d=$(0),C=$(""),H=$(),ee=$(),L=async()=>{try{const p=await ws.me();return h.value=p.loggedIn,p.loggedIn}catch{return h.value=false,false}},g=p=>{var M,ae,G;const u=[];if(p.responseSnapshot)for(const E of p.responseSnapshot)E.kind==="image"&&E.url&&u.push(E.url);const v=((ae=(M=p.middlewareLogs)==null?void 0:M.preset)==null?void 0:ae.transformedPrompt)||((G=p.requestSnapshot)==null?void 0:G.prompt)||"";return{id:p.id,status:p.status,prompt:v,images:u,createdAt:new Date(p.startTime),duration:p.duration||void 0}},f=async(p=false)=>{if(h.value){m.value=true;try{const u=await Le.my({limit:ot,offset:p?w.value:0}),v=u.items.map(g);p?S.value=[...S.value,...v]:(S.value=v,w.value=0),x.value=u.total,_.value=u.items.length>=ot,w.value+=ot}catch(u){console.error("Failed to load tasks:",u)}finally{m.value=false}}},A=()=>{!m.value&&_.value&&f(true)},B=p=>{const u=p.target,{scrollTop:v,scrollHeight:M,clientHeight:ae}=u;M-v-ae<100&&A()},re=async()=>{await L(),await f()},U=p=>{p.status==="success"&&p.images.length>0&&(I.value=p.images,d.value=0,C.value=p.prompt,H.value=p.createdAt,ee.value=p.duration,T.value=true,c("select",p))},D=p=>{const v=new Date().getTime()-p.getTime();return v<6e4?"刚刚":v<36e5?`${Math.floor(v/6e4)}分钟前`:v<864e5?`${Math.floor(v/36e5)}小时前`:v<6048e5?`${Math.floor(v/864e5)}天前`:p.toLocaleDateString()},z=p=>p<1e3?`${p}ms`:`${(p/1e3).toFixed(1)}s`,P=()=>{O=setInterval(()=>{S.value.some(u=>u.status==="pending"||u.status==="processing")&&f()},3e3)};return a({refresh:re}),we(async()=>{await L()&&(await f(),P())}),et(()=>{O&&clearInterval(O)}),(p,u)=>{const v=j("k-icon");return l(),n("div",{class:se(["history-gallery",{collapsed:r.value}])},[o(" 折叠状态的侧边条 "),r.value?(l(),n("div",{key:0,class:"collapsed-bar",onClick:u[0]||(u[0]=M=>r.value=false)},[i(v,{name:"history"}),u[3]||(u[3]=e("span",{class:"collapsed-text"},"历史",-1))])):(l(),n(N,{key:1},[o(" 展开的内容 "),e("div",Ld,[e("div",Ed,[e("div",Ad,[u[4]||(u[4]=e("span",{class:"gallery-title"},"历史记录",-1)),x.value>0?(l(),n("span",Md,k(x.value),1)):o("v-if",true)]),e("div",Rd,[i(v,{name:"refresh",class:se(["action-icon",{spinning:m.value}]),onClick:re,title:"刷新"},null,8,["class"]),i(v,{name:"chevron-right",class:"action-icon",onClick:u[1]||(u[1]=M=>r.value=true),title:"收起"})])]),o(" 未登录提示 "),h.value?m.value&&S.value.length===0?(l(),n(N,{key:1},[o(" 加载中 "),u[6]||(u[6]=e("div",{class:"gallery-loading"},[e("div",{class:"loader-small"})],-1))],2112)):S.value.length===0?(l(),n(N,{key:2},[o(" 空状态 "),e("div",Bd,[i(v,{name:"image",class:"empty-icon"}),u[7]||(u[7]=e("p",null,"暂无记录",-1))])],2112)):(l(),n(N,{key:3},[o(" 任务列表 (瀑布流) "),e("div",{class:"gallery-list",ref_key:"listRef",ref:F,onScroll:B},[(l(true),n(N,null,te(S.value,M=>(l(),n("div",{key:M.id,class:se(["task-card",{clickable:M.status==="success"}]),onClick:ae=>U(M)},[o(" 图片区域 - 只显示第一张 "),M.images&&M.images.length>0?(l(),n("div",Kd,[e("img",{src:M.images[0],class:"task-image",loading:"lazy"},null,8,Hd),M.images.length>1?(l(),n("div",Jd," +"+k(M.images.length-1),1)):o("v-if",true)])):M.status==="processing"||M.status==="pending"?(l(),n(N,{key:1},[o(" 处理中动画 "),e("div",Gd,[u[8]||(u[8]=e("div",{class:"processing-animation"},[e("div",{class:"dot"}),e("div",{class:"dot"}),e("div",{class:"dot"})],-1)),e("span",Wd,k(M.status==="pending"?"等待中":"生成中"),1)])],2112)):M.status==="failed"?(l(),n(N,{key:2},[o(" 失败状态 "),e("div",Zd,[i(v,{name:"exclamation-triangle",class:"failed-icon"}),u[9]||(u[9]=e("span",null,"失败",-1))])],2112)):o("v-if",true),o(" 任务信息 "),e("div",Yd,[e("div",{class:"task-prompt",title:M.prompt},k(M.prompt||"(无提示词)"),9,Xd),e("div",Qd,[e("span",eu,k(D(M.createdAt)),1),M.duration?(l(),n("span",tu,k(z(M.duration)),1)):o("v-if",true)])])],10,qd))),128)),o(" 加载更多 "),m.value&&S.value.length>0?(l(),n("div",su,[...u[10]||(u[10]=[e("div",{class:"loader-small"},null,-1)])])):o("v-if",true)],544)],2112)):(l(),n("div",jd,[i(v,{name:"user",class:"empty-icon"}),u[5]||(u[5]=e("p",null,"请登录查看历史",-1))]))])],2112)),o(" 图片预览弹窗 "),i(bt,{visible:T.value,"onUpdate:visible":u[2]||(u[2]=M=>T.value=M),images:I.value,"initial-index":d.value,prompt:C.value,"created-at":H.value,duration:ee.value},null,8,["visible","images","initial-index","prompt","created-at","duration"])],2)}}}),au=me(lu,[["__scopeId","data-v-6cba50e5"]]),nu={class:"preset-picker"},ou={key:0,class:"preset-info"},iu=["src"],ru={key:1,class:"preset-thumb placeholder"},du={class:"preset-details"},uu={class:"preset-name"},cu={key:1,class:"placeholder-text"},vu={class:"picker-header"},pu={class:"preset-count"},mu={class:"picker-content"},fu={class:"ml-masonry"},gu=["onClick"],_u={key:0,class:"card-thumbnail"},yu=["src","alt"],hu={class:"thumbnail-overlay"},bu={key:0,class:"ref-count"},ku={key:1,class:"card-thumbnail placeholder"},$u={class:"card-content"},wu={class:"card-title"},Cu={key:0,class:"card-tags"},Vu={key:0,class:"mini-tag more"},xu={key:2,class:"selected-mark"},Su={key:0,class:"empty-state"},Iu={class:"dialog-footer"},Ou={key:0,class:"preset-detail"},Tu={key:0,class:"detail-thumbnail"},Uu=["src","alt"],zu={class:"detail-section"},Pu={class:"detail-row"},Du={key:0,class:"detail-row"},Nu={class:"detail-tags"},Fu={class:"detail-section"},Lu={class:"prompt-preview"},Eu={key:1,class:"detail-section"},Au={class:"detail-label"},Mu={class:"reference-images"},Ru=["src"],ju={key:2,class:"detail-section"},Bu={class:"param-preview"},qu={class:"dialog-footer"},Ku=ue({__name:"PresetPicker",props:{modelValue:{},presets:{}},emits:["update:modelValue"],setup(t,{emit:a}){const s=t,c=a,r=["本地","远程","text2img","img2img","NSFW"],m=$(false),h=$(false),S=$([]),x=$(s.modelValue),_=$(null),w=Z(()=>{const L=new Set;return s.presets.forEach(g=>{(g.tags||[]).forEach(f=>L.add(f))}),Array.from(L).sort()}),F=Z(()=>s.modelValue?s.presets.find(L=>L.id===s.modelValue):null),O=Z(()=>{let L=s.presets;return S.value.length===0?L:L.filter(g=>S.value.every(f=>f==="本地"?g.source==="user":f==="远程"?g.source==="api":(g.tags||[]).includes(f)))}),T=()=>{x.value=s.modelValue,S.value=[],m.value=true},I=L=>{x.value=L.id},d=()=>{c("update:modelValue",x.value),m.value=false},C=()=>{c("update:modelValue",void 0)},H=L=>{_.value=L,h.value=true},ee=()=>{_.value&&(c("update:modelValue",_.value.id),h.value=false,m.value=false)};return $e(()=>s.modelValue,L=>{x.value=L}),(L,g)=>{var re;const f=j("k-icon"),A=j("k-button"),B=j("el-dialog");return l(),n("div",nu,[o(" 当前选中的预设显示 "),e("div",{class:"selected-preset",onClick:T},[F.value?(l(),n("div",ou,[F.value.thumbnail?(l(),n("img",{key:0,src:F.value.thumbnail,class:"preset-thumb"},null,8,iu)):(l(),n("div",ru,[i(f,{name:"image"})])),e("div",du,[e("span",uu,k(F.value.name),1),e("span",{class:se(["preset-source",F.value.source])},k(F.value.source==="api"?"远程":"本地"),3)]),i(f,{name:"times",class:"clear-btn",onClick:ye(C,["stop"]),title:"清除选择"})])):(l(),n("div",cu,[i(f,{name:"layer-group"}),g[6]||(g[6]=e("span",null,"选择预设模板 (可选)",-1))])),i(f,{name:"chevron-down",class:"dropdown-icon"})]),o(" 预设选择弹窗 - 复用 PresetsView 的布局 "),i(B,{modelValue:m.value,"onUpdate:modelValue":g[3]||(g[3]=U=>m.value=U),title:"选择预设",width:"80vw",top:"5vh","close-on-click-modal":true,class:"preset-picker-dialog"},{footer:V(()=>[e("div",Iu,[i(A,{onClick:g[2]||(g[2]=U=>m.value=false)},{default:V(()=>[...g[9]||(g[9]=[R("取消",-1)])]),_:1}),i(A,{type:"primary",onClick:d,disabled:!x.value},{default:V(()=>[...g[10]||(g[10]=[R(" 确认选择 ",-1)])]),_:1},8,["disabled"])])]),default:V(()=>[e("div",vu,[i(pt,{modelValue:S.value,"onUpdate:modelValue":g[0]||(g[0]=U=>S.value=U),"all-tags":w.value,"preset-tags":r},null,8,["modelValue","all-tags"]),e("span",pu,"共 "+k(O.value.length)+" 个预设",1)]),e("div",mu,[e("div",fu,[(l(true),n(N,null,te(O.value,U=>{var D,z;return l(),n("div",{key:U.id,class:"ml-masonry-item"},[e("div",{class:se(["preset-card",{selected:x.value===U.id}]),onClick:P=>I(U)},[o(" 缩略图 "),U.thumbnail?(l(),n("div",_u,[e("img",{src:U.thumbnail,alt:U.name,loading:"lazy"},null,8,yu),e("div",hu,[(D=U.referenceImages)!=null&&D.length?(l(),n("span",bu,[i(f,{name:"image"}),R(" "+k(U.referenceImages.length),1)])):o("v-if",true)])])):(l(),n("div",ku,[i(f,{name:"image",class:"placeholder-icon"})])),o(" 内容 "),e("div",$u,[e("div",wu,k(U.name),1),(z=U.tags)!=null&&z.length?(l(),n("div",Cu,[(l(true),n(N,null,te(U.tags.slice(0,4),P=>(l(),n("span",{key:P,class:"mini-tag"},k(P),1))),128)),U.tags.length>4?(l(),n("span",Vu,"+"+k(U.tags.length-4),1)):o("v-if",true)])):o("v-if",true)]),o(" 操作按钮区 "),e("div",{class:"card-actions",onClick:g[1]||(g[1]=ye(()=>{},["stop"]))},[i(A,{size:"mini",onClick:P=>H(U)},{icon:V(()=>[i(f,{name:"eye"})]),default:V(()=>[g[7]||(g[7]=R(" 详情 ",-1))]),_:1},8,["onClick"])]),o(" 来源标记 "),e("div",{class:se(["source-indicator",U.source])},k(U.source==="api"?"远程":"本地"),3),o(" 选中标记 "),x.value===U.id?(l(),n("div",xu,[i(f,{name:"check"})])):o("v-if",true)],10,gu)])}),128))]),o(" 空状态 "),O.value.length===0?(l(),n("div",Su,[i(f,{name:"search",class:"empty-icon"}),g[8]||(g[8]=e("p",null,"没有找到匹配的预设",-1))])):o("v-if",true)])]),_:1},8,["modelValue"]),o(" 预设详情弹窗 "),i(B,{modelValue:h.value,"onUpdate:modelValue":g[5]||(g[5]=U=>h.value=U),title:((re=_.value)==null?void 0:re.name)||"预设详情",width:"600px","close-on-click-modal":true,class:"preset-detail-dialog"},{footer:V(()=>[e("div",qu,[i(A,{onClick:g[4]||(g[4]=U=>h.value=false)},{default:V(()=>[...g[15]||(g[15]=[R("关闭",-1)])]),_:1}),i(A,{type:"primary",onClick:ee},{icon:V(()=>[i(f,{name:"check"})]),default:V(()=>[g[16]||(g[16]=R(" 选择此预设 ",-1))]),_:1})])]),default:V(()=>{var U,D;return[_.value?(l(),n("div",Ou,[o(" 缩略图 "),_.value.thumbnail?(l(),n("div",Tu,[e("img",{src:_.value.thumbnail,alt:_.value.name},null,8,Uu)])):o("v-if",true),o(" 基本信息 "),e("div",zu,[e("div",Pu,[g[11]||(g[11]=e("span",{class:"detail-label"},"来源:",-1)),e("span",{class:se(["source-badge",_.value.source])},k(_.value.source==="api"?"远程":"本地"),3)]),(U=_.value.tags)!=null&&U.length?(l(),n("div",Du,[g[12]||(g[12]=e("span",{class:"detail-label"},"标签:",-1)),e("div",Nu,[(l(true),n(N,null,te(_.value.tags,z=>(l(),n("span",{key:z,class:"mini-tag"},k(z),1))),128))])])):o("v-if",true)]),o(" Prompt 模板 "),e("div",Fu,[g[13]||(g[13]=e("div",{class:"detail-label"},"Prompt 模板:",-1)),e("div",Lu,k(_.value.promptTemplate),1)]),o(" 参考图 "),(D=_.value.referenceImages)!=null&&D.length?(l(),n("div",Eu,[e("div",Au,"参考图片 ("+k(_.value.referenceImages.length)+"):",1),e("div",Mu,[(l(true),n(N,null,te(_.value.referenceImages,(z,P)=>(l(),n("img",{key:P,src:z,class:"ref-image"},null,8,Ru))),128))])])):o("v-if",true),o(" 参数覆盖 "),_.value.parameterOverrides&&Object.keys(_.value.parameterOverrides).length?(l(),n("div",ju,[g[14]||(g[14]=e("div",{class:"detail-label"},"参数覆盖:",-1)),e("div",Bu,k(JSON.stringify(_.value.parameterOverrides,null,2)),1)])):o("v-if",true)])):o("v-if",true)]}),_:1},8,["modelValue","title"])])}}}),Hu=me(Ku,[["__scopeId","data-v-59115136"]]),Ju={class:"view-container"},Gu={class:"view-content"},Wu={class:"generate-layout"},Zu={class:"config-panel"},Yu={class:"form-section"},Xu={class:"section-title"},Qu={class:"form-item"},ec={class:"form-item"},tc={class:"form-section flex-grow"},sc={class:"section-title"},lc={class:"form-section"},ac={class:"section-title"},nc={class:"upload-area"},oc={key:0,class:"upload-list"},ic=["src"],rc=["onClick"],dc={class:"form-actions"},uc={class:"preview-panel"},cc={key:0,class:"generating-state"},vc={class:"generating-content"},pc={class:"generating-info"},mc={class:"generating-timer"},fc={key:0,class:"generating-hint"},gc={class:"result-container"},_c={key:0,class:"success-result"},yc={class:"output-grid"},hc=["src","onClick"],bc={class:"output-actions"},kc=["href"],$c=["src"],wc=["src"],Cc=["href"],Vc={class:"text-output"},xc=["href"],Sc={class:"result-meta"},Ic={class:"meta-item success-badge"},Oc={key:0,class:"meta-item"},Tc={key:1,class:"meta-item"},Uc={class:"error-result"},zc={class:"error-content"},Pc={class:"error-info"},Dc={class:"error-msg"},Nc={key:0,class:"error-meta"},Fc={key:1,class:"error-meta"},Lc={class:"empty-state"},Ec=ue({__name:"GenerateView",setup(t){const a=$([]),s=$([]),c=$(false),r=$(null),m=$([]),h=$([]),S=$(),x=$();let _=0;const w=$(0),F=$(null);let O=null,T=0;const I=$({channel:void 0,prompt:"",parameters:{}}),d=$(void 0),C=$(false),H=$([]),ee=$(0),L=$(""),g=G=>{if(G<1e3)return`${G}ms`;const E=G/1e3;if(E<60)return`${E.toFixed(1)}s`;const X=Math.floor(E/60),ie=(E%60).toFixed(0);return`${X}m ${ie}s`},f=()=>{T=Date.now(),w.value=0,O=setInterval(()=>{w.value=Date.now()-T},100)},A=()=>{O&&(clearInterval(O),O=null)},B=G=>{var E;(E=r.value)!=null&&E.output&&(H.value=r.value.output.filter(X=>X.kind==="image"&&X.url).map(X=>X.url),ee.value=G,C.value=true)},re=async()=>{try{const[G,E]=await Promise.all([Fe.list(),ze.list()]);a.value=G,s.value=E}catch(G){console.error(G)}},U=G=>new Promise((E,X)=>{const ie=new FileReader;ie.onload=()=>{const pe=ie.result.split(",")[1];E(pe)},ie.onerror=X,ie.readAsDataURL(G)}),D=()=>{var G;(G=S.value)==null||G.click()},z=async G=>{const E=G.target;!E.files||E.files.length===0||(await p(Array.from(E.files)),E.value="")},P=async G=>{var X;const E=(X=G.dataTransfer)==null?void 0:X.files;!E||E.length===0||await p(Array.from(E).filter(ie=>ie.type.startsWith("image/")))},p=async G=>{const E=4-m.value.length;if(E<=0){Q.warning("最多上传 4 张图片");return}const X=G.slice(0,E);for(const ie of X){const he=URL.createObjectURL(ie);m.value.push({uid:++_,url:he,raw:ie});try{const pe=await U(ie);h.value.push({type:"image",base64:pe,mimeType:ie.type,filename:ie.name})}catch(pe){console.error("Failed to read file:",ie.name,pe)}}},u=G=>{const E=m.value[G];E&&(URL.revokeObjectURL(E.url),m.value.splice(G,1),h.value.splice(G,1))},v=async G=>{var E,X,ie,he;try{const pe=await Le.get(G);if(L.value=((X=(E=pe.middlewareLogs)==null?void 0:E.preset)==null?void 0:X.transformedPrompt)||((ie=pe.requestSnapshot)==null?void 0:ie.prompt)||"",pe.status==="success"&&pe.responseSnapshot&&pe.responseSnapshot.length>0)return{success:true,output:pe.responseSnapshot,taskId:pe.id,duration:pe.duration||void 0};if(pe.status==="failed"){const ge=(he=pe.middlewareLogs)==null?void 0:he._error;return{success:false,error:(ge==null?void 0:ge.message)||"生成失败",taskId:pe.id,duration:pe.duration||void 0}}return null}catch{return null}},M=async()=>{var G,E,X,ie,he,pe;if(!I.value.channel){Q.warning("请选择渠道");return}c.value=true,r.value=null,F.value=null,f();try{const ge={channelId:I.value.channel,prompt:I.value.prompt||"",parameters:{...I.value.parameters}};if(h.value.length>0&&(ge.files=h.value),d.value){const q=s.value.find(y=>y.id===d.value);q&&(ge.parameters.preset=q.name)}const fe=await Cs.generate(ge);if(fe.taskId&&(F.value=fe.taskId),fe.success)if(r.value=fe,(G=x.value)==null||G.refresh(),fe.taskId)try{const q=await Le.get(fe.taskId);L.value=((X=(E=q.middlewareLogs)==null?void 0:E.preset)==null?void 0:X.transformedPrompt)||((ie=q.requestSnapshot)==null?void 0:ie.prompt)||""}catch{L.value=I.value.prompt}else L.value=I.value.prompt;else if(fe.taskId){await new Promise(y=>setTimeout(y,500));const q=await v(fe.taskId);q&&q.success?(r.value=q,(he=x.value)==null||he.refresh()):r.value=fe}else r.value=fe}catch(ge){if(F.value){await new Promise(q=>setTimeout(q,500));const fe=await v(F.value);fe?(r.value=fe,fe.success&&((pe=x.value)==null||pe.refresh())):r.value={success:false,error:ge.message||"请求失败"}}else r.value={success:false,error:ge.message||"请求失败"}}finally{A(),c.value=false}},ae=G=>{G.prompt&&(I.value.prompt=G.prompt)};return we(()=>{re()}),et(()=>{A()}),(G,E)=>{var q;const X=j("k-icon"),ie=j("el-option"),he=j("el-select"),pe=j("el-input"),ge=j("k-button"),fe=j("k-card");return l(),n("div",Ju,[e("div",Gu,[e("div",Wu,[o(" 左侧配置区 "),e("div",Zu,[i(fe,{class:"config-card"},{default:V(()=>[e("div",Yu,[e("div",Xu,[i(X,{name:"settings"}),E[5]||(E[5]=R(" 基础配置 ",-1))]),e("div",Qu,[E[6]||(E[6]=e("div",{class:"label"},"生成渠道",-1)),i(he,{modelValue:I.value.channel,"onUpdate:modelValue":E[0]||(E[0]=y=>I.value.channel=y),placeholder:"选择生成渠道",style:{width:"100%"}},{default:V(()=>[(l(true),n(N,null,te(a.value,y=>(l(),le(ie,{key:y.id,label:y.name,value:y.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",ec,[E[7]||(E[7]=e("div",{class:"label"},"预设模板",-1)),i(Hu,{modelValue:d.value,"onUpdate:modelValue":E[1]||(E[1]=y=>d.value=y),presets:s.value},null,8,["modelValue","presets"])])]),e("div",tc,[e("div",sc,[i(X,{name:"edit"}),E[8]||(E[8]=R(" 提示词 ",-1))]),i(pe,{modelValue:I.value.prompt,"onUpdate:modelValue":E[2]||(E[2]=y=>I.value.prompt=y),type:"textarea",rows:8,placeholder:"输入提示词,支持自然语言描述...",resize:"none",class:"prompt-input"},null,8,["modelValue"])]),o(" 文件上传区域 "),e("div",lc,[e("div",ac,[i(X,{name:"image"}),E[9]||(E[9]=R(" 参考图片 ",-1))]),e("div",nc,[o(" 已上传的图片列表 "),m.value.length>0?(l(),n("div",oc,[(l(true),n(N,null,te(m.value,(y,b)=>(l(),n("div",{key:y.uid,class:"upload-item"},[e("img",{src:y.url,class:"upload-thumb"},null,8,ic),e("div",{class:"upload-overlay",onClick:W=>u(b)},[i(X,{name:"delete"})],8,rc)]))),128))])):o("v-if",true),o(" 上传按钮 "),m.value.length<4?(l(),n("div",{key:1,class:"upload-trigger",onClick:D,onDragover:E[3]||(E[3]=ye(()=>{},["prevent"])),onDrop:ye(P,["prevent"])},[e("input",{ref_key:"fileInput",ref:S,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:z},null,544),i(X,{name:"add",class:"upload-icon"})],32)):o("v-if",true),E[10]||(E[10]=e("div",{class:"upload-tip"},"点击或拖拽上传,最多 4 张",-1))])]),e("div",dc,[i(ge,{solid:"",type:"primary",loading:c.value,onClick:M,class:"generate-btn"},{icon:V(()=>[i(X,{name:"magic"})]),default:V(()=>[E[11]||(E[11]=R(" 生成图片 ",-1))]),_:1},8,["loading"])])]),_:1})]),o(" 右侧预览区 "),e("div",uc,[o(" 生成中状态 "),c.value?(l(),n("div",cc,[e("div",vc,[E[13]||(E[13]=e("div",{class:"loader"},null,-1)),e("div",pc,[E[12]||(E[12]=e("p",{class:"generating-title"},"正在生成中...",-1)),e("p",mc,[i(X,{name:"stopwatch"}),R(" 已用时间: "+k(g(w.value)),1)]),F.value?(l(),n("p",fc,"任务 ID: "+k(F.value),1)):o("v-if",true)])])])):r.value?(l(),n(N,{key:1},[o(" 有结果 "),e("div",gc,[o(" 成功状态 "),r.value.success&&r.value.output&&r.value.output.length?(l(),n("div",_c,[e("div",yc,[(l(true),n(N,null,te(r.value.output,(y,b)=>{var W;return l(),n("div",{key:b,class:"output-wrapper"},[o(" 图片 "),y.kind==="image"?(l(),n(N,{key:0},[e("img",{src:y.url,onClick:oe=>B(b),class:"clickable-image"},null,8,hc),e("div",bc,[e("a",{href:y.url,target:"_blank",class:"action-btn",download:""},[i(X,{name:"download"})],8,kc)])],64)):y.kind==="video"?(l(),n(N,{key:1},[o(" 视频 "),e("video",{src:y.url,controls:"",class:"output-video"},null,8,$c)],64)):y.kind==="audio"?(l(),n(N,{key:2},[o(" 音频 "),e("audio",{src:y.url,controls:"",class:"output-audio"},null,8,wc)],64)):y.kind==="file"?(l(),n(N,{key:3},[o(" 其他文件 "),e("a",{href:y.url,target:"_blank",class:"file-link"},[i(X,{name:"file"}),R(" "+k(((W=y.meta)==null?void 0:W.filename)||"下载文件"),1)],8,Cc)],64)):y.kind==="text"?(l(),n(N,{key:4},[o(" 文本 "),e("div",Vc,k(y.content),1)],64)):y.url?(l(),n(N,{key:5},[o(" 兜底:有 url 则显示链接 "),e("a",{href:y.url,target:"_blank"},k(y.url),9,xc)],64)):o("v-if",true)])}),128))]),e("div",Sc,[e("span",Ic,[i(X,{name:"check-circle"}),E[14]||(E[14]=R(" 生成成功 ",-1))]),r.value.duration?(l(),n("span",Oc,[i(X,{name:"stopwatch"}),R(" 耗时: "+k(g(r.value.duration)),1)])):o("v-if",true),r.value.taskId?(l(),n("span",Tc,[i(X,{name:"list-alt"}),R(" 任务 ID: "+k(r.value.taskId),1)])):o("v-if",true)])])):(l(),n(N,{key:1},[o(" 失败状态 "),e("div",Uc,[e("div",zc,[i(X,{name:"exclamation-triangle",class:"error-icon"}),e("div",Pc,[E[15]||(E[15]=e("p",{class:"error-title"},"生成失败",-1)),e("p",Dc,k(r.value.error||"未知错误"),1),r.value.taskId?(l(),n("p",Nc,"任务 ID: "+k(r.value.taskId),1)):o("v-if",true),r.value.duration?(l(),n("p",Fc,"耗时: "+k(g(r.value.duration)),1)):o("v-if",true)])]),i(ge,{class:"retry-btn",onClick:M},{icon:V(()=>[i(X,{name:"refresh"})]),default:V(()=>[E[16]||(E[16]=R(" 重新生成 ",-1))]),_:1})])],2112))])],2112)):(l(),n(N,{key:2},[o(" 空状态 "),e("div",Lc,[i(X,{name:"image",class:"empty-icon"}),E[17]||(E[17]=e("p",null,"在左侧配置并点击生成",-1))])],2112))]),o(" 右侧历史画廊 "),i(au,{ref_key:"historyGalleryRef",ref:x,onSelect:ae},null,512)])]),o(" 图片预览弹窗 "),i(bt,{visible:C.value,"onUpdate:visible":E[4]||(E[4]=y=>C.value=y),images:H.value,"initial-index":ee.value,prompt:L.value,duration:(q=r.value)==null?void 0:q.duration},null,8,["visible","images","initial-index","prompt","duration"])])}}}),Et=me(Ec,[["__scopeId","data-v-a3441aa4"]]),Ac={class:"pipeline-panel"},Mc={class:"pipeline-flow"},Rc={class:"phase-icon"},jc={class:"phase-info"},Bc={class:"phase-name"},qc={class:"phase-desc"},Kc={class:"phase-badge"},Hc={key:0,class:"phase-middlewares"},Jc={class:"mw-card"},Gc={class:"mw-content"},Wc={class:"mw-name"},Zc={class:"mw-desc"},Yc=["title"],Xc=["checked","onChange"],Qc={key:2,class:"phase-connector"},ev={class:"connector-arrow"},tv=ue({__name:"MiddlewaresPanel",setup(t){const a=$([]),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"}],c={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},r=S=>a.value.filter(x=>x.phase===S),m=async()=>{try{a.value=await Ge.list()}catch{Q.error("加载中间件列表失败")}},h=async S=>{const x=!S.enabled;try{await Ge.update(S.name,{enabled:x}),S.enabled=x,Q.success(x?"已启用":"已禁用")}catch{Q.error("操作失败")}};return we(m),(S,x)=>{const _=j("k-icon");return l(),n("div",Ac,[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",Mc,[(l(),n(N,null,te(s,(w,F)=>e("div",{key:w.id,class:"phase-section"},[o(" 阶段标题 "),e("div",{class:se(["phase-header",w.colorClass])},[e("div",Rc,[i(_,{name:w.icon},null,8,["name"])]),e("div",jc,[e("span",Bc,k(w.label),1),e("span",qc,k(w.description),1)]),e("span",Kc,k(r(w.id).length),1)],2),o(" 中间件列表 "),r(w.id).length>0?(l(),n("div",Hc,[(l(true),n(N,null,te(r(w.id),(O,T)=>(l(),n("div",{key:O.name,class:se(["mw-item",{disabled:!O.enabled}])},[e("div",Jc,[e("div",{class:se(["mw-status",{active:O.enabled}])},null,2),e("div",Gc,[e("span",Wc,k(O.displayName),1),e("span",Zc,k(O.description||c[O.category]||O.category),1)]),e("label",{class:"toggle-switch",onClick:x[0]||(x[0]=ye(()=>{},["stop"])),title:O.enabled?"点击禁用":"点击启用"},[e("input",{type:"checkbox",checked:O.enabled,onChange:I=>h(O)},null,40,Xc),x[1]||(x[1]=e("span",{class:"slider"},null,-1))],8,Yc)])],2))),128))])):(l(),n(N,{key:1},[o(" 空状态 "),x[2]||(x[2]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),o(" 阶段间连接箭头 "),F<s.length-1?(l(),n("div",Qc,[x[3]||(x[3]=e("div",{class:"connector-line"},null,-1)),e("div",ev,[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]=ct('<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))])}}}),sv=me(tv,[["__scopeId","data-v-b4b0cf47"]]),lv={class:"plugins-panel"},av={key:0,class:"loading-state"},nv={class:"empty-state"},ov={class:"plugins-list"},iv=["onClick"],rv={class:"plugin-info"},dv={class:"plugin-header"},uv={class:"plugin-name"},cv={key:0,class:"plugin-version"},vv={class:"plugin-description"},pv={class:"plugin-status"},mv={key:0,class:"plugin-badge connector"},fv={key:1,class:"plugin-badge middleware"},gv={key:0,class:"plugin-detail"},_v={class:"detail-header"},yv={class:"header-left"},hv={key:0,class:"version"},bv={class:"header-actions"},kv={key:0,class:"connector-info"},$v={class:"connector-meta"},wv={class:"connector-id"},Cv={class:"connector-types"},Vv={key:1,class:"middlewares-list"},xv={class:"middleware-tags"},Sv={class:"phase-badge"},Iv={key:2,class:"config-section"},Ov={class:"config-actions"},Tv={class:"no-config"},Uv={class:"no-selection"},zv=ue({__name:"PluginsPanel",setup(t){const a=$(true),s=$([]),c=$(null),r=$({}),m=$(false),h={"lifecycle-prepare":"准备","lifecycle-pre-request":"前置","lifecycle-request":"请求","lifecycle-post-request":"后置","lifecycle-finalize":"完成"},S=O=>h[O]||O,x=async()=>{try{a.value=true,s.value=await rt.list()}catch(O){console.error("Failed to load plugins:",O),s.value=[]}finally{a.value=false}},_=O=>{c.value=O,r.value={...O.config};for(const T of O.configFields||[])r.value[T.key]===void 0&&T.default!==void 0&&(r.value[T.key]=T.default)},w=async()=>{if(c.value){m.value=true;try{await rt.updateConfig(c.value.id,r.value),Q.success("保存成功"),await x();const O=s.value.find(T=>{var I;return T.id===((I=c.value)==null?void 0:I.id)});O&&(c.value=O,r.value={...O.config})}catch{Q.error("保存失败")}finally{m.value=false}}},F=async O=>{var T;try{const I=await tt(O.apiEvent);if((I==null?void 0:I.success)===false)throw new Error(I.error||"操作失败");if(O.apiEvent==="media-luna/presets/sync"&&(I!=null&&I.data)){const{added:d,updated:C,removed:H,notModified:ee}=I.data;ee?Q.info("数据未变化,无需更新"):Q.success(`同步完成:新增 ${d},更新 ${C},删除 ${H}`)}else(T=I==null?void 0:I.data)!=null&&T.message?Q.success(I.data.message):Q.success(`${O.label} 完成`);await x()}catch(I){Q.error(`${O.label} 失败: ${I instanceof Error?I.message:"未知错误"}`)}};return we(x),(O,T)=>{var C,H,ee;const I=j("k-icon"),d=j("k-button");return l(),n("div",lv,[o(" 加载状态 "),a.value?(l(),n("div",av,[i(I,{name:"sync",class:"spin"}),T[1]||(T[1]=e("span",null,"加载中...",-1))])):s.value.length===0?(l(),n(N,{key:1},[o(" 空状态 "),e("div",nv,[i(I,{name:"apps"}),T[2]||(T[2]=e("p",null,"暂无扩展插件",-1)),T[3]||(T[3]=e("p",{class:"hint"},[R("第三方扩展插件将在这里显示"),e("br"),R('内置功能请在"功能模块"中配置')],-1))])],2112)):(l(),n(N,{key:2},[o(" 插件列表 "),e("div",ov,[(l(true),n(N,null,te(s.value,L=>{var g,f;return l(),n("div",{key:L.id,class:se(["plugin-card",{active:((g=c.value)==null?void 0:g.id)===L.id,disabled:!L.enabled}]),onClick:A=>_(L)},[e("div",rv,[e("div",dv,[e("span",uv,k(L.name),1),L.version?(l(),n("span",cv,"v"+k(L.version),1)):o("v-if",true)]),e("p",vv,k(L.description||"暂无描述"),1)]),e("div",pv,[L.connector?(l(),n("span",mv,"连接器")):o("v-if",true),(f=L.middlewares)!=null&&f.length?(l(),n("span",fv,k(L.middlewares.length)+" 个中间件 ",1)):o("v-if",true),i(I,{name:L.enabled?"check-circle":"close-circle",class:se(L.enabled?"enabled":"disabled")},null,8,["name","class"])])],10,iv)}),128))]),o(" 插件详情 "),c.value?(l(),n("div",gv,[e("header",_v,[e("div",yv,[e("h3",null,k(c.value.name),1),c.value.version?(l(),n("span",hv,"v"+k(c.value.version),1)):o("v-if",true)]),e("div",bv,[(l(true),n(N,null,te(c.value.actions,L=>(l(),le(d,{key:L.name,type:L.type||"default",size:"small",onClick:g=>F(L)},gs({default:V(()=>[R(" "+k(L.label),1)]),_:2},[L.icon?{name:"icon",fn:V(()=>[i(I,{name:L.icon},null,8,["name"])]),key:"0"}:void 0]),1032,["type","onClick"]))),128))])]),o(" 连接器信息 "),c.value.connector?(l(),n("div",kv,[T[4]||(T[4]=e("h4",null,"连接器",-1)),e("div",$v,[e("span",wv,k(c.value.connector.id),1),e("span",Cv," 支持: "+k(((C=c.value.connector.supportedTypes)==null?void 0:C.join(", "))||"无"),1)])])):o("v-if",true),o(" 中间件列表 "),(H=c.value.middlewares)!=null&&H.length?(l(),n("div",Vv,[T[5]||(T[5]=e("h4",null,"中间件",-1)),e("div",xv,[(l(true),n(N,null,te(c.value.middlewares,L=>(l(),n("span",{key:L.name,class:se(["middleware-tag",{enabled:L.enabled}])},[R(k(L.displayName||L.name)+" ",1),e("span",Sv,k(S(L.phase)),1)],2))),128))])])):o("v-if",true),o(" 配置表单 "),(ee=c.value.configFields)!=null&&ee.length?(l(),n("div",Iv,[T[7]||(T[7]=e("h4",null,"配置",-1)),i(at,{fields:c.value.configFields,modelValue:r.value,"onUpdate:modelValue":T[0]||(T[0]=L=>r.value=L),"presets-map":c.value.presets},null,8,["fields","modelValue","presets-map"]),e("div",Ov,[i(d,{type:"primary",onClick:w,loading:m.value},{icon:V(()=>[i(I,{name:"save"})]),default:V(()=>[T[6]||(T[6]=R(" 保存配置 ",-1))]),_:1},8,["loading"])])])):(l(),n(N,{key:3},[o(" 无配置提示 "),e("div",Tv,[i(I,{name:"info-circle"}),T[8]||(T[8]=e("span",null,"该插件暂无可配置项",-1))])],2112))])):(l(),n(N,{key:1},[o(" 无选中提示 "),e("div",Uv,[i(I,{name:"apps"}),T[9]||(T[9]=e("p",null,"请从左侧选择一个插件查看详情",-1))])],2112))],64))])}}}),Pv=me(zv,[["__scopeId","data-v-a53de4c8"]]),Dv={class:"settings-view"},Nv={class:"sidebar"},Fv={class:"nav-list"},Lv=["onClick"],Ev={class:"main-content"},Av={key:0,class:"loading"},Mv={class:"panel-header"},Rv={key:0},jv={class:"custom-panel"},Bv={class:"actions"},qv=ue({__name:"SettingsView",setup(t){const a=$(true),s=$([]),c=$(""),r=$({}),m=Z(()=>s.value.find(_=>_.id===c.value)),h=async()=>{try{s.value=await wt.panels(),s.value.length&&!c.value&&(c.value=s.value[0].id)}catch{Q.error("加载设置面板失败")}},S=()=>{var _;if(((_=m.value)==null?void 0:_.type)==="custom"){r.value={...m.value.config||{}};for(const w of m.value.configFields||[])r.value[w.key]===void 0&&w.default!==void 0&&(r.value[w.key]=w.default)}},x=async()=>{if(m.value)try{await wt.update(m.value.id,r.value),Q.success("保存成功"),await h()}catch{Q.error("保存失败")}};return $e(c,()=>{var _;((_=m.value)==null?void 0:_.type)==="custom"&&S()}),we(async()=>{await h(),a.value=false}),(_,w)=>{const F=j("k-icon"),O=j("k-button");return l(),n("div",Dv,[o(" 侧边栏导航 "),e("aside",Nv,[e("nav",Fv,[(l(true),n(N,null,te(s.value,T=>(l(),n("div",{key:T.id,class:se(["nav-item",{active:c.value===T.id}]),onClick:I=>c.value=T.id},[i(F,{name:T.icon},null,8,["name"]),e("span",null,k(T.name),1)],10,Lv))),128))])]),o(" 主内容区 "),e("main",Ev,[a.value?(l(),n("div",Av,[i(F,{name:"sync",class:"spin"}),w[1]||(w[1]=R(" 加载中... ",-1))])):m.value?(l(),n(N,{key:1},[o(" 面板标题 "),e("header",Mv,[e("h2",null,k(m.value.name),1),m.value.description?(l(),n("p",Rv,k(m.value.description),1)):o("v-if",true)]),o(" 功能模块面板 "),m.value.component==="middlewares"?(l(),le(sv,{key:0})):m.value.component==="plugins"?(l(),n(N,{key:1},[o(" 扩展插件面板 "),i(Pv)],64)):m.value.type==="custom"&&m.value.configFields?(l(),n(N,{key:2},[o(" 自定义面板 "),e("div",jv,[i(at,{fields:m.value.configFields,modelValue:r.value,"onUpdate:modelValue":w[0]||(w[0]=T=>r.value=T)},null,8,["fields","modelValue"]),e("div",Bv,[i(O,{type:"primary",onClick:x},{icon:V(()=>[i(F,{name:"save"})]),default:V(()=>[w[2]||(w[2]=R(" 保存 ",-1))]),_:1})])])],64)):o("v-if",true)],64)):o("v-if",true)])])}}}),Kv=me(qv,[["__scopeId","data-v-5fa778a6"]]),Hv={class:"setup-storage"},Jv={key:0,class:"loading-state"},Gv={key:0,class:"warning-box"},Wv={class:"step-actions"},Zv=ue({__name:"SetupStorage",props:{modelValue:{},saving:{type:Boolean}},emits:["update:modelValue","next"],setup(t,{emit:a}){const s=t,c=a,r=$(true),m=$([]),h=$({});$e(h,_=>{c("update:modelValue",{..._})},{deep:true});const S=async()=>{try{r.value=true;const[_,w]=await Promise.all([Se.getStorageFields(),Se.getStorageConfig()]);m.value=_;const F={...s.modelValue};for(const O of _)w[O.key]!==void 0?F[O.key]=w[O.key]:F[O.key]===void 0&&O.default!==void 0&&(F[O.key]=O.default);h.value=F}catch(_){console.error("Failed to load storage config:",_)}finally{r.value=false}},x=()=>{c("next")};return we(S),(_,w)=>{const F=j("k-icon"),O=j("k-button");return l(),n("div",Hv,[w[4]||(w[4]=e("h3",null,"存储配置",-1)),w[5]||(w[5]=e("p",{class:"step-desc"},"选择生成图片的存储方式。推荐使用本地存储或 S3 兼容存储。",-1)),r.value?(l(),n("div",Jv,[i(F,{name:"sync",class:"spin"}),w[1]||(w[1]=e("span",null,"加载配置中...",-1))])):(l(),n(N,{key:1},[o(" 使用 ConfigRenderer 渲染配置字段 "),i(at,{fields:m.value,modelValue:h.value,"onUpdate:modelValue":w[0]||(w[0]=T=>h.value=T)},null,8,["fields","modelValue"]),o(" 警告提示(当选择不使用时) "),h.value.backend==="none"?(l(),n("div",Gv,[i(F,{name:"warning"}),w[2]||(w[2]=e("div",null,[e("strong",null,"注意"),e("p",null,'选择"不使用"将保留生成服务返回的原始 URL,这些 URL 可能会过期或无法访问。建议配置存储后端以确保图片长期可用。')],-1))])):o("v-if",true)],64)),o(" 操作按钮 "),e("div",Wv,[i(O,{type:"primary",loading:t.saving,disabled:r.value,onClick:x},{default:V(()=>[...w[3]||(w[3]=[R(" 下一步 ",-1)])]),_:1},8,["loading","disabled"])])])}}}),Yv=me(Zv,[["__scopeId","data-v-9aeaae19"]]),Xv={class:"setup-auth"},Qv={class:"config-panel"},ep={class:"form-row"},tp={class:"field-container"},sp={class:"verify-section"},lp={class:"verify-card"},ap={class:"code-display"},np={class:"code-value"},op={class:"code-meta"},ip={class:"step-actions"},rp=ue({__name:"SetupAuth",props:{saving:{type:Boolean}},emits:["complete","skip"],setup(t,{emit:a}){const s=a,c=$(null),r=$(false),m=$(""),h=$(0),S=$(null);let x=null,_=null;const w=async()=>{try{const d=await Se.status();d.boundUid&&(c.value=d.boundUid,S.value=d.boundUid)}catch(d){console.error("Failed to load status:",d)}},F=async()=>{if(O&&clearTimeout(O),!!c.value)try{r.value=true;const d=await Se.generateVerifyCode(c.value);m.value=d.code,h.value=d.expiresIn,Q.success("验证码已生成,请在聊天平台完成验证")}catch(d){Q.error("生成验证码失败: "+(d instanceof Error?d.message:"未知错误"))}finally{r.value=false}};let O=null;const T=()=>{O&&clearTimeout(O),m.value="",c.value&&(O=window.setTimeout(F,1e3))},I=async()=>{if(!c.value){Q.warning("请输入用户 ID");return}try{await Se.bindUid(c.value),Q.success("配置已保存"),s("complete")}catch(d){Q.error("保存失败: "+(d instanceof Error?d.message:"未知错误"))}};return we(()=>{w(),x=hs("media-luna/webui-auth/bind-request",d=>{d.uid&&(c.value=d.uid,d.code&&(m.value=d.code,h.value=d.expiresIn,Q.info("收到绑定请求,请在聊天平台完成验证")))}),_=window.setInterval(async()=>{try{const d=await Se.status();if(d.boundUid){if(c.value&&d.boundUid!==c.value)return;d.boundUid!==S.value&&(c.value=d.boundUid,Q.success("检测到绑定成功!"),s("complete"),_&&clearInterval(_))}}catch{}},3e3)}),et(()=>{x&&x(),_&&clearInterval(_)}),(d,C)=>{const H=j("el-input-number"),ee=j("k-button");return l(),n("div",Xv,[C[8]||(C[8]=e("h3",null,"用户绑定",-1)),C[9]||(C[9]=e("p",{class:"step-desc"}," 将 WebUI 与 Koishi 用户绑定。你可以直接配置用户 ID,也可以通过验证码进行验证绑定。 ",-1)),e("div",Qv,[o(" UID 输入 "),e("div",ep,[C[3]||(C[3]=e("div",{class:"form-label"},"用户 ID (UID)",-1)),e("div",tp,[i(H,{modelValue:c.value,"onUpdate:modelValue":C[0]||(C[0]=L=>c.value=L),min:1,controls:false,placeholder:"Koishi 用户 ID",class:"uid-input full-width",onInput:T},null,8,["modelValue"]),C[2]||(C[2]=e("div",{class:"field-desc"},[R(" 输入你的 Koishi "),e("code",null,"uid"),R(",不是原神的。 ")],-1))])]),o(" 验证码显示区域 "),e("div",sp,[e("div",lp,[e("div",ap,[C[4]||(C[4]=e("div",{class:"code-label"},"验证码",-1)),e("div",np,k(m.value),1),e("div",op,"有效期 "+k(h.value)+" 秒",1)]),C[5]||(C[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",ip,[i(ee,{onClick:C[1]||(C[1]=L=>d.$emit("skip"))},{default:V(()=>[...C[6]||(C[6]=[R("跳过",-1)])]),_:1}),i(ee,{type:"primary",loading:t.saving,onClick:I},{default:V(()=>[...C[7]||(C[7]=[R(" 保存 / 完成 ",-1)])]),_:1},8,["loading"])])])}}}),dp=me(rp,[["__scopeId","data-v-59078dbb"]]),up={class:"setup-wizard"},cp={class:"wizard-container"},vp={class:"steps-indicator"},pp={class:"step-number"},mp={key:1},fp={class:"step-label"},gp={class:"wizard-content"},_p={key:"complete",class:"step-complete"},yp={class:"complete-icon"},hp=ue({__name:"SetupWizard",emits:["complete"],setup(t,{emit:a}){const s=a,c=[{id:"storage",label:"存储配置"},{id:"auth",label:"用户绑定"},{id:"complete",label:"完成"}],r=$(0),m=$(false),h=$({}),S=async()=>{m.value=true;try{await Se.updateStorageConfig(h.value),Q.success("存储配置已保存"),r.value=1}catch(F){Q.error("保存失败: "+(F instanceof Error?F.message:"未知错误"))}finally{m.value=false}},x=()=>{r.value=2},_=()=>{r.value=2},w=async()=>{try{await Se.complete(),s("complete")}catch{s("complete")}};return(F,O)=>{const T=j("k-icon"),I=j("k-button");return l(),n("div",up,[e("div",cp,[o(" 头部 "),O[4]||(O[4]=e("div",{class:"wizard-header"},[e("h1",null,"欢迎使用 Media Luna"),e("p",null,"在开始使用前,请完成以下基础配置")],-1)),o(" 步骤指示器 "),e("div",vp,[(l(),n(N,null,te(c,(d,C)=>e("div",{key:d.id,class:se(["step-item",{active:r.value===C,completed:r.value>C}])},[e("div",pp,[r.value>C?(l(),le(T,{key:0,name:"check"})):(l(),n("span",mp,k(C+1),1))]),e("span",fp,k(d.label),1)],2)),64))]),o(" 步骤内容 "),e("div",gp,[i(Qe,{name:"fade",mode:"out-in"},{default:V(()=>[r.value===0?(l(),le(Yv,{key:"storage",modelValue:h.value,"onUpdate:modelValue":O[0]||(O[0]=d=>h.value=d),saving:m.value,onNext:S},null,8,["modelValue","saving"])):r.value===1?(l(),le(dp,{key:"auth",saving:m.value,onComplete:x,onSkip:_},null,8,["saving"])):r.value===2?(l(),n("div",_p,[e("div",yp,[i(T,{name:"check-circle"})]),O[2]||(O[2]=e("h2",null,"配置完成",-1)),O[3]||(O[3]=e("p",null,"您已完成 Media Luna 的初始设置,现在可以开始使用了。",-1)),i(I,{type:"primary",size:"large",onClick:w},{default:V(()=>[...O[1]||(O[1]=[R(" 开始使用 ",-1)])]),_:1})])):o("v-if",true)]),_:1})])])])}}}),bp=me(hp,[["__scopeId","data-v-3931ca56"]]),kp={class:"top-nav"},$p={class:"nav-container"},wp={class:"nav-tabs",role:"tablist"},Cp=["onClick","aria-selected"],Vp={class:"main-content"},xp=ue({__name:"index",setup(t){const a=$("generate"),s=$(false),c=async()=>{try{const F=await Se.status();s.value=F.needsSetup}catch(F){console.error("Failed to check setup status:",F),s.value=false}},r=()=>{s.value=false},m=Z(()=>{switch(a.value){case"generate":return Et;case"channels":return oi;case"presets":return tr;case"tasks":return Fd;case"settings":return Kv;default:return Et}}),h=F=>()=>$t("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[$t("path",{d:F})]),S=[{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 F=document.querySelector(".layout-header");F&&(x=F.style.display,F.style.display="none")}function w(){const F=document.querySelector(".layout-header");F&&(F.style.display=x||"")}return we(()=>{_(),c()}),_s(w),(F,O)=>{const T=j("k-layout");return l(),le(T,{class:"app-layout media-luna-app"},{default:V(()=>[o(" 设置向导 "),s.value?(l(),le(bp,{key:0,onComplete:r})):(l(),n(N,{key:1},[o(" 主界面 "),e("div",kp,[e("div",$p,[O[0]||(O[0]=e("div",{class:"logo-area"},[e("span",{class:"logo-text"},"MEDIA LUNA")],-1)),e("div",wp,[(l(),n(N,null,te(S,I=>e("div",{key:I.id,class:se(["nav-tab",{active:a.value===I.id}]),onClick:d=>a.value=I.id,role:"tab","aria-selected":a.value===I.id},[(l(),le(it(I.icon),{class:"tab-icon"})),e("span",null,k(I.label),1)],10,Cp)),64))])])]),e("div",Vp,[(l(),le(ys,null,[(l(),le(it(m.value)))],1024))])],64))]),_:1})}}}),Sp=me(xp,[["__scopeId","data-v-c4fa9f13"]]),Up=t=>{t.page({name:"Media Luna",path:"/media-luna",component:Sp,order:500})};export{Up as default};
|