import{E as Rs}from"./element-plus-CqiD73Lu.js";import{aP as ns,r as M,c as E,q as tt,V as Es,o as Te,x as d,y as i,z as e,I as ye,C as j,P as u,R as ne,J as Os,L as h,B as gt,K as T,aq as se,Q as ae,ac as oe,T as js,a5 as Me,D as Gs,_ as Be,Y as $e,an as ie,O as A,aa as Ze,aV as et,al as _e,f as Je,u as Xe}from"./vue-vendor-Bsazo-x0.js";import{c as G,_ as De,s as O,u as qs}from"./index-CiBIcxok.js";import{Q as je}from"./vendor-Dr8jvgFu.js";import{_ as zs}from"./WindowCountdown-BTXjZ8Dc.js";import{C as Lt}from"./CustomDropdown-Cjw_tgLf.js";const _t=ns("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0,this.error=null;try{const b=await G.get("/admin/supported-clients");return b.success?this.supportedClients=b.data||[]:(this.error=b.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(b){return this.error=b.message||"加载支持的客户端失败",console.error("Error loading supported clients:",b),[]}finally{this.loading=!1}}}}),Tt=ns("apiKeys",()=>{const b=M([]),N=M(!1),c=M(null),V=M("all"),B=M(""),C=M("asc"),P=async()=>{N.value=!0,c.value=null;try{const S=await G.get("/admin/api-keys");if(S.success)b.value=S.data||[];else throw new Error(S.message||"获取API Keys失败")}catch(S){throw c.value=S.message,S}finally{N.value=!1}};return{apiKeys:b,loading:N,error:c,statsTimeRange:V,sortBy:B,sortOrder:C,fetchApiKeys:P,createApiKey:async S=>{N.value=!0,c.value=null;try{const z=await G.post("/admin/api-keys",S);if(z.success)return await P(),z.data;throw new Error(z.message||"创建API Key失败")}catch(z){throw c.value=z.message,z}finally{N.value=!1}},updateApiKey:async(S,z)=>{N.value=!0,c.value=null;try{const $=await G.put(`/admin/api-keys/${S}`,z);if($.success)return await P(),$;throw new Error($.message||"更新API Key失败")}catch($){throw c.value=$.message,$}finally{N.value=!1}},toggleApiKey:async S=>{N.value=!0,c.value=null;try{const z=await G.put(`/admin/api-keys/${S}/toggle`);if(z.success)return await P(),z;throw new Error(z.message||"切换状态失败")}catch(z){throw c.value=z.message,z}finally{N.value=!1}},renewApiKey:async(S,z)=>{N.value=!0,c.value=null;try{const $=await G.put(`/admin/api-keys/${S}`,z);if($.success)return await P(),$;throw new Error($.message||"续期失败")}catch($){throw c.value=$.message,$}finally{N.value=!1}},deleteApiKey:async S=>{N.value=!0,c.value=null;try{const z=await G.delete(`/admin/api-keys/${S}`);if(z.success)return await P(),z;throw new Error(z.message||"删除失败")}catch(z){throw c.value=z.message,z}finally{N.value=!1}},fetchApiKeyStats:async(S,z="all")=>{try{const $=await G.get(`/admin/api-keys/${S}/stats`,{params:{timeRange:z}});if($.success)return $.stats;throw new Error($.message||"获取统计失败")}catch($){return console.error("获取API Key统计失败:",$),null}},fetchTags:async()=>{try{const S=await G.get("/admin/api-keys/tags");if(S.success)return S.data||[];throw new Error(S.message||"获取标签失败")}catch(S){return console.error("获取标签失败:",S),[]}},sortApiKeys:S=>{B.value===S?C.value=C.value==="asc"?"desc":"asc":(B.value=S,C.value="asc")},reset:()=>{b.value=[],N.value=!1,c.value=null,V.value="all",B.value="",C.value="asc"}}}),Fs={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},Bs={class:"relative"},Ws={class:"custom-scrollbar flex-1 overflow-y-auto"},Ns={key:0,class:"border-b border-gray-200 dark:border-gray-600"},Hs=["onClick"],Ys={class:"text-gray-700 dark:text-gray-300"},Qs={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},Js={class:"text-gray-700 dark:text-gray-300"},Xs={key:1},Zs=["onClick"],ea={class:"flex items-center justify-between"},ta={class:"text-gray-700 dark:text-gray-300"},sa={class:"text-xs text-gray-500 dark:text-gray-400"},aa={key:2},ra={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},oa=["onClick"],la={class:"flex items-center justify-between"},na={class:"text-gray-700 dark:text-gray-300"},ia={class:"text-xs text-gray-400 dark:text-gray-500"},da={key:3},ua=["onClick"],ca={class:"flex items-center justify-between"},ga={class:"text-gray-700 dark:text-gray-300"},pa={class:"text-xs text-gray-400 dark:text-gray-500"},ma={key:4},xa=["onClick"],ya={class:"flex items-center justify-between"},fa={class:"text-gray-700 dark:text-gray-300"},ba={class:"text-xs text-gray-400 dark:text-gray-500"},va={key:5},ka=["onClick"],wa={class:"flex items-center justify-between"},ha={class:"text-gray-700 dark:text-gray-300"},Aa={class:"text-xs text-gray-400 dark:text-gray-500"},$a={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Ca={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:b=>["claude","gemini","openai","bedrock","droid"].includes(b)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(b,{emit:N}){const c=b,V=N,B=M(!1),C=M(""),P=M(null),q=M(null),U=M({}),Q=M(null),Y=M(""),k=E(()=>c.specialOptions||[]),_=E(()=>{const x=k.value.find(g=>g.value===c.modelValue);if(x)return x.label;if(!c.modelValue)return c.defaultOptionText;if(c.modelValue.startsWith("group:")){const g=c.modelValue.substring(6),l=c.groups.find(y=>y.id===g);return l?`${l.name} (${l.memberCount||0} 个成员)`:""}if(c.modelValue.startsWith("console:")){const g=c.modelValue.substring(8),l=c.accounts.find(y=>y.id===g&&y.platform==="claude-console");return l?`${l.name} (${m(l)})`:""}if(c.modelValue.startsWith("responses:")){const g=c.modelValue.substring(10),l=c.accounts.find(y=>y.id===g&&y.platform==="openai-responses");return l?`${l.name} (${m(l)})`:""}if(c.modelValue.startsWith("api:")){const g=c.modelValue.substring(4),l=c.accounts.find(y=>y.id===g&&y.platform==="gemini-api");return l?`${l.name} (${m(l)})`:""}const K=c.accounts.find(g=>g.id===c.modelValue);return K?`${K.name} (${m(K)})`:""}),m=x=>{if(!x)return"未知";if(!(x.isActive==="true"||x.isActive===!0))switch(x.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return x.status==="rate_limited"?"限流中":"正常"},s=E(()=>[...c.accounts].sort((x,K)=>{const g=new Date(x.createdAt||0);return new Date(K.createdAt||0)-g})),R=E(()=>{let x=c.groups.filter(K=>K.platform?K.platform===c.platform:!0);if(C.value){const K=C.value.toLowerCase();x=x.filter(g=>g.name.toLowerCase().includes(K))}return x}),S=E(()=>{let x=[];if(c.platform==="claude"?x=s.value.filter(K=>K.platform==="claude-oauth"):c.platform==="openai"?x=s.value.filter(K=>K.platform==="openai"):c.platform==="droid"?x=s.value.filter(K=>K.platform==="droid"):c.platform==="gemini"?x=s.value.filter(K=>K.platform==="gemini"):x=s.value.filter(K=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(K.platform)),C.value){const K=C.value.toLowerCase();x=x.filter(g=>g.name.toLowerCase().includes(K))}return x}),z=E(()=>{if(c.platform!=="claude")return[];let x=s.value.filter(K=>K.platform==="claude-console");if(C.value){const K=C.value.toLowerCase();x=x.filter(g=>g.name.toLowerCase().includes(K))}return x}),$=E(()=>{if(c.platform!=="openai")return[];let x=s.value.filter(K=>K.platform==="openai-responses");if(C.value){const K=C.value.toLowerCase();x=x.filter(g=>g.name.toLowerCase().includes(K))}return x}),L=E(()=>{if(c.platform!=="gemini")return[];let x=s.value.filter(K=>K.platform==="gemini-api");if(C.value){const K=C.value.toLowerCase();x=x.filter(g=>g.name.toLowerCase().includes(K))}return x}),re=E(()=>R.value.length>0||S.value.length>0||z.value.length>0||$.value.length>0||L.value.length>0),J=x=>{if(!x)return"";const K=new Date(x),l=(new Date-K)/(1e3*60*60);return l<24?"今天创建":l<48?"昨天创建":l<168?`${Math.floor(l/24)} 天前`:K.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},de=()=>{if(!B.value||!q.value||!Q.value)return;const x=Q.value;if(!x)return;const K=x.getBoundingClientRect(),g=window.innerHeight,l=window.innerWidth,y=g-K.bottom,ue=K.top,ge=8,Z=y-ge,ve=ue-ge;let ce=!1,ee=Z;Y.value==="above"&&ve>=150?(ce=!0,ee=ve):Y.value==="below"&&Z>=150?(ce=!1,ee=Z):ve>Z&&Z<200&&(ce=!0,ee=ve),Y.value=ce?"above":"below";let H=K.left;const xe=K.width;H+xe>l-ge&&(H=l-xe-ge),H{if(!B.value&&Q.value){const x=Q.value.getBoundingClientRect(),g=window.innerHeight-x.bottom,l=8;U.value={position:"fixed",left:`${x.left}px`,width:`${x.width}px`,maxHeight:`${Math.min(g-l,400)}px`,top:`${x.bottom}px`}}B.value=!B.value,B.value&&Gs(()=>{var x;de(),(x=P.value)==null||x.focus()})},F=x=>{V("update:modelValue",x||""),B.value=!1,C.value=""},be=()=>{},v=()=>{var x;C.value="",(x=P.value)==null||x.focus()},o=x=>{var K,g;!((K=Q.value)!=null&&K.contains(x.target))&&!((g=q.value)!=null&&g.contains(x.target))&&(B.value=!1)},n=()=>{B.value&&de()};return tt(()=>{document.addEventListener("click",o),window.addEventListener("scroll",n,!0),window.addEventListener("resize",de)}),Es(()=>{document.removeEventListener("click",o),window.removeEventListener("scroll",n,!0),window.removeEventListener("resize",de)}),Te(B,x=>{x||(C.value="",Y.value="")}),(x,K)=>(i(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:j(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":b.disabled}]),onClick:K[0]||(K[0]=g=>!b.disabled&&me())},[e("span",{class:j(b.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},u(_.value),3),e("i",{class:j(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":B.value}])},null,2)],2),(i(),ye(Me,{to:"body"},[ne(js,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:Os(()=>[B.value?(i(),d("div",{key:0,ref_key:"dropdownRef",ref:q,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:gt(U.value)},[e("div",Fs,[e("div",Bs,[T(e("input",{ref_key:"searchInput",ref:P,"onUpdate:modelValue":K[1]||(K[1]=g=>C.value=g),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:be},null,544),[[se,C.value]]),K[4]||(K[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),C.value?(i(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:v},K[3]||(K[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):h("",!0)])]),e("div",Ws,[k.value.length>0?(i(),d("div",Ns,[(i(!0),d(ae,null,oe(k.value,g=>(i(),d("div",{key:`special-${g.value}`,class:j(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":b.modelValue===g.value}]),onClick:l=>F(g.value)},[e("span",Ys,u(g.label),1),g.description?(i(),d("span",Qs,u(g.description),1)):h("",!0)],10,Hs))),128))])):h("",!0),e("div",{class:j(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!b.modelValue}]),onClick:K[2]||(K[2]=g=>F(null))},[e("span",Js,u(b.defaultOptionText),1)],2),R.value.length>0?(i(),d("div",Xs,[K[5]||(K[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(i(!0),d(ae,null,oe(R.value,g=>(i(),d("div",{key:`group:${g.id}`,class:j(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":b.modelValue===`group:${g.id}`}]),onClick:l=>F(`group:${g.id}`)},[e("div",ea,[e("span",ta,u(g.name),1),e("span",sa,u(g.memberCount||0)+" 个成员",1)])],10,Zs))),128))])):h("",!0),S.value.length>0?(i(),d("div",aa,[e("div",ra,u(b.platform==="claude"?"Claude OAuth 专属账号":b.platform==="openai"?"OpenAI 专属账号":b.platform==="droid"?"Droid 专属账号":b.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(i(!0),d(ae,null,oe(S.value,g=>(i(),d("div",{key:g.id,class:j(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":b.modelValue===g.id}]),onClick:l=>F(g.id)},[e("div",la,[e("div",null,[e("span",na,u(g.name),1),e("span",{class:j(["ml-2 rounded-full px-2 py-0.5 text-xs",g.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":g.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(m(g)),3)]),e("span",ia,u(J(g.createdAt)),1)])],10,oa))),128))])):h("",!0),b.platform==="claude"&&z.value.length>0?(i(),d("div",da,[K[6]||(K[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(i(!0),d(ae,null,oe(z.value,g=>(i(),d("div",{key:g.id,class:j(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":b.modelValue===`console:${g.id}`}]),onClick:l=>F(`console:${g.id}`)},[e("div",ca,[e("div",null,[e("span",ga,u(g.name),1),e("span",{class:j(["ml-2 rounded-full px-2 py-0.5 text-xs",g.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":g.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(m(g)),3)]),e("span",pa,u(J(g.createdAt)),1)])],10,ua))),128))])):h("",!0),b.platform==="openai"&&$.value.length>0?(i(),d("div",ma,[K[7]||(K[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(i(!0),d(ae,null,oe($.value,g=>(i(),d("div",{key:g.id,class:j(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":b.modelValue===`responses:${g.id}`}]),onClick:l=>F(`responses:${g.id}`)},[e("div",ya,[e("div",null,[e("span",fa,u(g.name),1),e("span",{class:j(["ml-2 rounded-full px-2 py-0.5 text-xs",g.isActive==="true"||g.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":g.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(m(g)),3)]),e("span",ba,u(J(g.createdAt)),1)])],10,xa))),128))])):h("",!0),b.platform==="gemini"&&L.value.length>0?(i(),d("div",va,[K[8]||(K[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(i(!0),d(ae,null,oe(L.value,g=>(i(),d("div",{key:g.id,class:j(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":b.modelValue===`api:${g.id}`}]),onClick:l=>F(`api:${g.id}`)},[e("div",wa,[e("div",null,[e("span",ha,u(g.name),1),e("span",{class:j(["ml-2 rounded-full px-2 py-0.5 text-xs",g.isActive==="true"||g.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":g.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(m(g)),3)]),e("span",Aa,u(J(g.createdAt)),1)])],10,ka))),128))])):h("",!0),C.value&&!re.value?(i(),d("div",$a,K[9]||(K[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):h("",!0)])],4)):h("",!0)]),_:1})]))],512))}},he=De(Ca,[["__scopeId","data-v-32c162ec"]]),Ia={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Ka={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},La={class:"mb-4 flex items-center justify-between"},Da={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},_a={class:"flex items-center gap-3 sm:gap-4"},Ta={class:"flex cursor-pointer items-center"},Sa={class:"flex cursor-pointer items-center"},Ma={key:0,class:"mt-3"},Ua={class:"flex items-center gap-4"},Pa={class:"flex-1"},Va={class:"flex items-center gap-2"},Ra={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},Ea=["placeholder"],Oa={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},ja={class:"space-y-4"},Ga={key:0},qa={class:"flex flex-wrap gap-2"},za=["onClick"],Fa={key:1},Ba={class:"flex flex-wrap gap-2"},Wa=["onClick"],Na={class:"flex gap-2"},Ha=["onKeypress"],Ya={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},Qa={class:"space-y-2"},Ja={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Xa={class:"space-y-2"},Za={class:"flex gap-2"},er={class:"space-y-2"},tr={class:"flex gap-2"},sr={class:"space-y-2"},ar={class:"flex gap-2"},rr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},or={class:"flex items-center gap-4"},lr={class:"flex cursor-pointer items-center"},nr={class:"flex cursor-pointer items-center"},ir={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},dr={key:0},ur={key:1},cr={key:0},gr={key:0,class:"mt-3"},pr=["min"],mr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},xr={key:1},yr={class:"flex items-center gap-2"},fr=["max","placeholder"],br={class:"mt-2 flex flex-wrap gap-2"},vr=["onClick"],kr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},wr={class:"flex gap-4"},hr={class:"flex cursor-pointer items-center"},Ar={class:"flex cursor-pointer items-center"},$r={class:"flex cursor-pointer items-center"},Cr={class:"flex cursor-pointer items-center"},Ir={class:"flex cursor-pointer items-center"},Kr={class:"mb-2 flex items-center justify-between"},Lr=["disabled"],Dr={class:"grid grid-cols-1 gap-3"},_r={class:"mb-2 flex items-center"},Tr={key:0,class:"space-y-3"},Sr={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},Mr=["onClick"],Ur={key:0,class:"text-sm text-gray-400"},Pr={class:"space-y-3"},Vr={class:"flex flex-wrap gap-2"},Rr=["onClick"],Er={key:0,class:"text-sm italic text-gray-400"},Or={class:"flex gap-2"},jr=["onKeydown"],Gr={class:"mb-2 flex items-center"},qr={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},zr={class:"space-y-1"},Fr=["id","value"],Br=["for"],Wr={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Nr={class:"block text-xs text-gray-500 dark:text-gray-400"},Hr={class:"flex gap-3 pt-2"},Yr=["disabled"],Qr={key:0,class:"loading-spinner mr-2"},Jr={key:1,class:"fas fa-plus mr-2"},Xr={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(b,{emit:N}){const c=b,V=N,B=_t(),C=Tt(),P=M(!1),q=M(!1),U=M({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=M({name:""}),Y=M(""),k=M([]),_=E(()=>k.value.filter(g=>!s.tags.includes(g))),m=M([]),s=Be({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:"all",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});tt(async()=>{if(m.value=await B.loadSupportedClients(),k.value=await C.fetchTags(),c.accounts){const g=[];c.accounts.openai&&c.accounts.openai.forEach(l=>{g.push({...l,platform:"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(l=>{g.push({...l,platform:"openai-responses"})}),U.value={claude:c.accounts.claude||[],gemini:c.accounts.gemini||[],openai:g,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(l=>({...l,platform:"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}await R()});const R=async()=>{var g,l;q.value=!0;try{const[y,ue,ge,Z,ve,ce,ee,H]=await Promise.all([G.get("/admin/claude-accounts"),G.get("/admin/claude-console-accounts"),G.get("/admin/gemini-accounts"),G.get("/admin/openai-accounts"),G.get("/admin/openai-responses-accounts"),G.get("/admin/bedrock-accounts"),G.get("/admin/droid-accounts"),G.get("/admin/account-groups")]),xe=[];y.success&&((g=y.data)==null||g.forEach(le=>{xe.push({...le,platform:"claude-oauth",isDedicated:le.accountType==="dedicated"})})),ue.success&&((l=ue.data)==null||l.forEach(le=>{xe.push({...le,platform:"claude-console",isDedicated:le.accountType==="dedicated"})})),U.value.claude=xe,ge.success&&(U.value.gemini=(ge.data||[]).map(le=>({...le,isDedicated:le.accountType==="dedicated"})));const Ue=[];if(Z.success&&(Z.data||[]).forEach(le=>{Ue.push({...le,platform:"openai",isDedicated:le.accountType==="dedicated"})}),ve.success&&(ve.data||[]).forEach(le=>{Ue.push({...le,platform:"openai-responses",isDedicated:le.accountType==="dedicated"})}),U.value.openai=Ue,ce.success&&(U.value.bedrock=(ce.data||[]).map(le=>({...le,isDedicated:le.accountType==="dedicated"}))),ee.success&&(U.value.droid=(ee.data||[]).map(le=>({...le,platform:"droid",isDedicated:le.accountType==="dedicated"}))),H.success){const le=H.data||[];U.value.claudeGroups=le.filter(Le=>Le.platform==="claude"),U.value.geminiGroups=le.filter(Le=>Le.platform==="gemini"),U.value.openaiGroups=le.filter(Le=>Le.platform==="openai"),U.value.droidGroups=le.filter(Le=>Le.platform==="droid")}O("账号列表已刷新","success")}catch{O("刷新账号列表失败","error")}finally{q.value=!1}},S=E(()=>{const g=new Date;return g.setMinutes(g.getMinutes()+1),g.toISOString().slice(0,16)}),z=()=>{if(!s.expireDuration){s.expiresAt=null;return}if(s.expireDuration==="custom")return;const g=new Date,y=s.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ue,ge]=y,Z=parseInt(ue);switch(ge){case"d":g.setDate(g.getDate()+Z);break;case"h":g.setHours(g.getHours()+Z);break;case"m":g.setMonth(g.getMonth()+Z);break;case"y":g.setFullYear(g.getFullYear()+Z);break}s.expiresAt=g.toISOString()}},$=()=>{s.customExpireDate&&(s.expiresAt=new Date(s.customExpireDate).toISOString())},L=g=>new Date(g).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),re=()=>{s.modelInput&&!s.restrictedModels.includes(s.modelInput)&&(s.restrictedModels.push(s.modelInput),s.modelInput="")},J=g=>{s.restrictedModels.splice(g,1)},de=M(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),me=E(()=>de.value.filter(g=>!s.restrictedModels.includes(g))),F=g=>{s.restrictedModels.includes(g)||s.restrictedModels.push(g)},be=()=>{if(Y.value&&Y.value.trim()){const g=Y.value.trim();s.tags.includes(g)||s.tags.push(g),Y.value=""}},v=g=>{s.tags.includes(g)||s.tags.push(g)},o=g=>{s.tags.splice(g,1)},n=()=>s.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],x=()=>{s.activationUnit==="hours"?s.activationDays>24&&(s.activationDays=24):s.activationDays<1&&(s.activationDays=1)},K=async()=>{if(Q.value.name="",!s.name||!s.name.trim()){Q.value.name="请输入API Key名称";return}if(s.createType==="batch"&&(!s.batchCount||s.batchCount<2||s.batchCount>500)){O("批量创建数量必须在 2-500 之间","error");return}if(s.rateLimitWindow&&(!s.rateLimitCost||parseFloat(s.rateLimitCost)===0)){let g=!1;if(window.showConfirm?g=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`,"继续创建","返回修改"):g=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`),!g)return}P.value=!0;try{const g={description:s.description||void 0,tokenLimit:0,rateLimitWindow:s.rateLimitWindow!==""&&s.rateLimitWindow!==null?parseInt(s.rateLimitWindow):null,rateLimitRequests:s.rateLimitRequests!==""&&s.rateLimitRequests!==null?parseInt(s.rateLimitRequests):null,rateLimitCost:s.rateLimitCost!==""&&s.rateLimitCost!==null?parseFloat(s.rateLimitCost):null,concurrencyLimit:s.concurrencyLimit!==""&&s.concurrencyLimit!==null?parseInt(s.concurrencyLimit):0,dailyCostLimit:s.dailyCostLimit!==""&&s.dailyCostLimit!==null?parseFloat(s.dailyCostLimit):0,totalCostLimit:s.totalCostLimit!==""&&s.totalCostLimit!==null?parseFloat(s.totalCostLimit):0,weeklyOpusCostLimit:s.weeklyOpusCostLimit!==""&&s.weeklyOpusCostLimit!==null?parseFloat(s.weeklyOpusCostLimit):0,expiresAt:s.expirationMode==="fixed"&&s.expiresAt||void 0,expirationMode:s.expirationMode,activationDays:s.expirationMode==="activation"?s.activationDays:void 0,activationUnit:s.expirationMode==="activation"?s.activationUnit:void 0,permissions:s.permissions,tags:s.tags.length>0?s.tags:void 0,enableModelRestriction:s.enableModelRestriction,restrictedModels:s.restrictedModels,enableClientRestriction:s.enableClientRestriction,allowedClients:s.allowedClients};if(s.claudeAccountId&&(s.claudeAccountId.startsWith("console:")?(g.claudeConsoleAccountId=s.claudeAccountId.substring(8),delete g.claudeAccountId):(g.claudeAccountId=s.claudeAccountId,delete g.claudeConsoleAccountId)),s.geminiAccountId&&(g.geminiAccountId=s.geminiAccountId),s.openaiAccountId&&(g.openaiAccountId=s.openaiAccountId),s.bedrockAccountId&&(g.bedrockAccountId=s.bedrockAccountId),s.droidAccountId&&(g.droidAccountId=s.droidAccountId),s.createType==="single"){const l={...g,name:s.name},y=await G.post("/admin/api-keys",l);y.success?(O("API Key 创建成功","success"),V("success",y.data),V("close")):O(y.message||"创建失败","error")}else{const l={...g,createType:"batch",baseName:s.name,count:s.batchCount},y=await G.post("/admin/api-keys/batch",l);y.success?(O(`成功创建 ${y.data.length} 个 API Key`,"success"),V("batch-success",y.data),V("close")):O(y.message||"批量创建失败","error")}}catch{O("创建失败","error")}finally{P.value=!1}};return(g,l)=>(i(),ye(Me,{to:"body"},[e("div",Ia,[e("div",Ka,[e("div",La,[l[49]||(l[49]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:l[0]||(l[0]=y=>g.$emit("close"))},l[48]||(l[48]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:$e(K,["prevent"])},[e("div",Da,[e("div",{class:j(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",s.createType==="batch"?"mb-3":""])},[l[52]||(l[52]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",_a,[e("label",Ta,[T(e("input",{"onUpdate:modelValue":l[1]||(l[1]=y=>s.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[ie,s.createType]]),l[50]||(l[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),A(" 单个创建 ")],-1))]),e("label",Sa,[T(e("input",{"onUpdate:modelValue":l[2]||(l[2]=y=>s.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[ie,s.createType]]),l[51]||(l[51]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),A(" 批量创建 ")],-1))])])],2),s.createType==="batch"?(i(),d("div",Ma,[e("div",Ua,[e("div",Pa,[l[54]||(l[54]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",Va,[T(e("input",{"onUpdate:modelValue":l[3]||(l[3]=y=>s.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[se,s.batchCount,void 0,{number:!0}]]),l[53]||(l[53]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",Ra,[l[55]||(l[55]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+u(s.name||"MyKey")+"_1, "+u(s.name||"MyKey")+"_2 ...",1)])])):h("",!0)]),e("div",null,[l[56]||(l[56]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[A("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[T(e("input",{"onUpdate:modelValue":l[4]||(l[4]=y=>s.name=y),class:j(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value.name}]),placeholder:s.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:l[5]||(l[5]=y=>Q.value.name="")},null,42,Ea),[[se,s.name]])]),Q.value.name?(i(),d("p",Oa,u(Q.value.name),1)):h("",!0)]),e("div",null,[l[64]||(l[64]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",ja,[s.tags.length>0?(i(),d("div",Ga,[l[58]||(l[58]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",qa,[(i(!0),d(ae,null,oe(s.tags,(y,ue)=>(i(),d("span",{key:"selected-"+ue,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[A(u(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:ge=>o(ue)},l[57]||(l[57]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,za)]))),128))])])):h("",!0),_.value.length>0?(i(),d("div",Fa,[l[60]||(l[60]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Ba,[(i(!0),d(ae,null,oe(_.value,y=>(i(),d("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ue=>v(y)},[l[59]||(l[59]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),A(" "+u(y),1)],8,Wa))),128))])])):h("",!0),e("div",null,[l[62]||(l[62]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",Na,[T(e("input",{"onUpdate:modelValue":l[6]||(l[6]=y=>Y.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:Ze($e(be,["prevent"]),["enter"])},null,40,Ha),[[se,Y.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:be},l[61]||(l[61]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[63]||(l[63]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",Ya,[l[72]||(l[72]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",Qa,[e("div",Ja,[e("div",null,[l[65]||(l[65]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),T(e("input",{"onUpdate:modelValue":l[7]||(l[7]=y=>s.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[se,s.rateLimitWindow]]),l[66]||(l[66]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[67]||(l[67]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),T(e("input",{"onUpdate:modelValue":l[8]||(l[8]=y=>s.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[se,s.rateLimitRequests]]),l[68]||(l[68]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[69]||(l[69]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),T(e("input",{"onUpdate:modelValue":l[9]||(l[9]=y=>s.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[se,s.rateLimitCost]]),l[70]||(l[70]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[71]||(l[71]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),A(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),A(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),A(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[74]||(l[74]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Xa,[e("div",Za,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[10]||(l[10]=y=>s.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[11]||(l[11]=y=>s.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[12]||(l[12]=y=>s.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[13]||(l[13]=y=>s.dailyCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":l[14]||(l[14]=y=>s.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[se,s.dailyCostLimit]]),l[73]||(l[73]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[76]||(l[76]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",er,[e("div",tr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[15]||(l[15]=y=>s.totalCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[16]||(l[16]=y=>s.totalCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[17]||(l[17]=y=>s.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[18]||(l[18]=y=>s.totalCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":l[19]||(l[19]=y=>s.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[se,s.totalCostLimit]]),l[75]||(l[75]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[78]||(l[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Opus 模型周费用限制 (美元)",-1)),e("div",sr,[e("div",ar,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[20]||(l[20]=y=>s.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[21]||(l[21]=y=>s.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[22]||(l[22]=y=>s.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[23]||(l[23]=y=>s.weeklyOpusCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":l[24]||(l[24]=y=>s.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[se,s.weeklyOpusCostLimit]]),l[77]||(l[77]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户,0 或留空表示无限制 ",-1))])]),e("div",null,[l[79]||(l[79]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),T(e("input",{"onUpdate:modelValue":l[25]||(l[25]=y=>s.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[se,s.concurrencyLimit]]),l[80]||(l[80]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[l[81]||(l[81]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),T(e("textarea",{"onUpdate:modelValue":l[26]||(l[26]=y=>s.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[se,s.description]])]),e("div",null,[l[89]||(l[89]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",rr,[e("div",or,[e("label",lr,[T(e("input",{"onUpdate:modelValue":l[27]||(l[27]=y=>s.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[ie,s.expirationMode]]),l[82]||(l[82]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",nr,[T(e("input",{"onUpdate:modelValue":l[28]||(l[28]=y=>s.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[ie,s.expirationMode]]),l[83]||(l[83]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",ir,[s.expirationMode==="fixed"?(i(),d("span",dr,l[84]||(l[84]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),A(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(i(),d("span",ur,l[85]||(l[85]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),A(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),s.expirationMode==="fixed"?(i(),d("div",cr,[T(e("select",{"onUpdate:modelValue":l[29]||(l[29]=y=>s.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:z},l[86]||(l[86]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[et,s.expireDuration]]),s.expireDuration==="custom"?(i(),d("div",gr,[T(e("input",{"onUpdate:modelValue":l[30]||(l[30]=y=>s.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:S.value,type:"datetime-local",onChange:$},null,40,pr),[[se,s.customExpireDate]])])):h("",!0),s.expiresAt?(i(),d("p",mr," 将于 "+u(L(s.expiresAt))+" 过期 ",1)):h("",!0)])):(i(),d("div",xr,[e("div",yr,[T(e("input",{"onUpdate:modelValue":l[31]||(l[31]=y=>s.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:s.activationUnit==="hours"?8760:3650,min:"1",placeholder:s.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,fr),[[se,s.activationDays,void 0,{number:!0}]]),T(e("select",{"onUpdate:modelValue":l[32]||(l[32]=y=>s.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:x},l[87]||(l[87]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[et,s.activationUnit]])]),e("div",br,[(i(!0),d(ae,null,oe(n(),y=>(i(),d("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:ue=>s.activationDays=y.value},u(y.label),9,vr))),128))]),e("p",kr,[l[88]||(l[88]=e("i",{class:"fas fa-clock mr-1"},null,-1)),A(" Key 将在首次使用后激活,激活后 "+u(s.activationDays||(s.activationUnit==="hours"?24:30))+" "+u(s.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[l[95]||(l[95]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",wr,[e("label",hr,[T(e("input",{"onUpdate:modelValue":l[33]||(l[33]=y=>s.permissions=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"all"},null,512),[[ie,s.permissions]]),l[90]||(l[90]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"全部服务",-1))]),e("label",Ar,[T(e("input",{"onUpdate:modelValue":l[34]||(l[34]=y=>s.permissions=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude"},null,512),[[ie,s.permissions]]),l[91]||(l[91]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Claude",-1))]),e("label",$r,[T(e("input",{"onUpdate:modelValue":l[35]||(l[35]=y=>s.permissions=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"gemini"},null,512),[[ie,s.permissions]]),l[92]||(l[92]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Gemini",-1))]),e("label",Cr,[T(e("input",{"onUpdate:modelValue":l[36]||(l[36]=y=>s.permissions=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"openai"},null,512),[[ie,s.permissions]]),l[93]||(l[93]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 OpenAI",-1))]),e("label",Ir,[T(e("input",{"onUpdate:modelValue":l[37]||(l[37]=y=>s.permissions=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"droid"},null,512),[[ie,s.permissions]]),l[94]||(l[94]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Droid",-1))])]),l[96]||(l[96]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 控制此 API Key 可以访问哪些服务 ",-1))]),e("div",null,[e("div",Kr,[l[97]||(l[97]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定 (可选)",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:q.value,title:"刷新账号列表",type:"button",onClick:R},[e("i",{class:j(["fas",q.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(q.value?"刷新中...":"刷新账号"),1)],8,Lr)]),e("div",Dr,[e("div",null,[l[98]||(l[98]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(he,{modelValue:s.claudeAccountId,"onUpdate:modelValue":l[38]||(l[38]=y=>s.claudeAccountId=y),accounts:U.value.claude,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="claude",groups:U.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[99]||(l[99]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(he,{modelValue:s.geminiAccountId,"onUpdate:modelValue":l[39]||(l[39]=y=>s.geminiAccountId=y),accounts:U.value.gemini,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="gemini",groups:U.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[100]||(l[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(he,{modelValue:s.openaiAccountId,"onUpdate:modelValue":l[40]||(l[40]=y=>s.openaiAccountId=y),accounts:U.value.openai,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="openai",groups:U.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[101]||(l[101]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(he,{modelValue:s.bedrockAccountId,"onUpdate:modelValue":l[41]||(l[41]=y=>s.bedrockAccountId=y),accounts:U.value.bedrock,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="openai",groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[l[102]||(l[102]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(he,{modelValue:s.droidAccountId,"onUpdate:modelValue":l[42]||(l[42]=y=>s.droidAccountId=y),accounts:U.value.droid,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="droid",groups:U.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),l[103]||(l[103]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",_r,[T(e("input",{id:"enableModelRestriction","onUpdate:modelValue":l[43]||(l[43]=y=>s.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[_e,s.enableModelRestriction]]),l[104]||(l[104]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),s.enableModelRestriction?(i(),d("div",Tr,[e("div",null,[l[107]||(l[107]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",Sr,[(i(!0),d(ae,null,oe(s.restrictedModels,(y,ue)=>(i(),d("span",{key:ue,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[A(u(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:ge=>J(ue)},l[105]||(l[105]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Mr)]))),128)),s.restrictedModels.length===0?(i(),d("span",Ur," 暂无限制的模型 ")):h("",!0)]),e("div",Pr,[e("div",Vr,[(i(!0),d(ae,null,oe(me.value,y=>(i(),d("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:ue=>F(y)},u(y),9,Rr))),128)),me.value.length===0?(i(),d("span",Er," 所有常用模型已在限制列表中 ")):h("",!0)]),e("div",Or,[T(e("input",{"onUpdate:modelValue":l[44]||(l[44]=y=>s.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:Ze($e(re,["prevent"]),["enter"])},null,40,jr),[[se,s.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:re},l[106]||(l[106]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[108]||(l[108]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):h("",!0)]),e("div",null,[e("div",Gr,[T(e("input",{id:"enableClientRestriction","onUpdate:modelValue":l[45]||(l[45]=y=>s.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[_e,s.enableClientRestriction]]),l[109]||(l[109]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),s.enableClientRestriction?(i(),d("div",qr,[e("div",null,[l[110]||(l[110]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",zr,[(i(!0),d(ae,null,oe(m.value,y=>(i(),d("div",{key:y.id,class:"flex items-start"},[T(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":l[46]||(l[46]=ue=>s.allowedClients=ue),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,Fr),[[_e,s.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",Wr,u(y.name),1),e("span",Nr,u(y.description),1)],8,Br)]))),128))])])])):h("",!0)]),e("div",Hr,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[47]||(l[47]=y=>g.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:P.value,type:"submit"},[P.value?(i(),d("div",Qr)):(i(),d("i",Jr)),A(" "+u(P.value?"创建中...":"创建"),1)],8,Yr)])],32)])])]))}},Zr=De(Xr,[["__scopeId","data-v-4adaa454"]]),eo={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},to={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},so={class:"mb-4 flex items-center justify-between sm:mb-6"},ao=["value"],ro={key:0,class:"text-gray-500"},oo={class:"space-y-4"},lo={key:0},no={class:"flex flex-wrap gap-2"},io=["onClick"],uo={key:1},co={class:"flex flex-wrap gap-2"},go=["onClick"],po={class:"flex gap-2"},mo=["onKeypress"],xo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},yo={class:"space-y-2"},fo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},bo={class:"space-y-3"},vo={class:"flex gap-2"},ko={class:"space-y-3"},wo={class:"flex gap-2"},ho={class:"space-y-3"},Ao={class:"flex gap-2"},$o={class:"mb-3 flex items-center"},Co={class:"flex gap-4"},Io={class:"flex cursor-pointer items-center"},Ko={class:"flex cursor-pointer items-center"},Lo={class:"flex cursor-pointer items-center"},Do={class:"flex cursor-pointer items-center"},_o={class:"flex cursor-pointer items-center"},To={class:"mb-3 flex items-center justify-between"},So=["disabled"],Mo={class:"grid grid-cols-1 gap-3"},Uo={class:"mb-3 flex items-center"},Po={key:0,class:"space-y-3"},Vo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2 dark:border-gray-600 dark:bg-gray-700"},Ro=["onClick"],Eo={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},Oo={class:"space-y-3"},jo={class:"flex flex-wrap gap-2"},Go=["onClick"],qo={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},zo={class:"flex gap-2"},Fo=["onKeydown"],Bo={class:"mb-3 flex items-center"},Wo={key:0,class:"space-y-3"},No={class:"space-y-2"},Ho=["id","value"],Yo=["for"],Qo={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Jo={class:"block text-xs text-gray-500 dark:text-gray-400"},Xo={class:"flex gap-3 pt-4"},Zo=["disabled"],el={key:0,class:"loading-spinner mr-2"},tl={key:1,class:"fas fa-save mr-2"},sl={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(b,{emit:N}){const c=b,V=N,B=_t(),C=Tt(),P=M(!1),q=M(!1),U=M({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=M([]),Y=M([]),k=M(""),_=M([]),m=E(()=>_.value.filter(v=>!s.tags.includes(v))),s=Be({name:"",tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"all",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),R=()=>{s.modelInput&&!s.restrictedModels.includes(s.modelInput)&&(s.restrictedModels.push(s.modelInput),s.modelInput="")},S=v=>{s.restrictedModels.splice(v,1)},z=M(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),$=E(()=>z.value.filter(v=>!s.restrictedModels.includes(v))),L=v=>{s.restrictedModels.includes(v)||s.restrictedModels.push(v)},re=()=>{if(k.value&&k.value.trim()){const v=k.value.trim();s.tags.includes(v)||s.tags.push(v),k.value=""}},J=v=>{s.tags.includes(v)||s.tags.push(v)},de=v=>{s.tags.splice(v,1)},me=async()=>{if(s.rateLimitWindow&&(!s.rateLimitCost||parseFloat(s.rateLimitCost)===0)){let v=!1;if(window.showConfirm?v=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`,"继续保存","返回修改"):v=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`),!v)return}P.value=!0;try{const v={name:s.name,tokenLimit:0,rateLimitWindow:s.rateLimitWindow!==""&&s.rateLimitWindow!==null?parseInt(s.rateLimitWindow):0,rateLimitRequests:s.rateLimitRequests!==""&&s.rateLimitRequests!==null?parseInt(s.rateLimitRequests):0,rateLimitCost:s.rateLimitCost!==""&&s.rateLimitCost!==null?parseFloat(s.rateLimitCost):0,concurrencyLimit:s.concurrencyLimit!==""&&s.concurrencyLimit!==null?parseInt(s.concurrencyLimit):0,dailyCostLimit:s.dailyCostLimit!==""&&s.dailyCostLimit!==null?parseFloat(s.dailyCostLimit):0,totalCostLimit:s.totalCostLimit!==""&&s.totalCostLimit!==null?parseFloat(s.totalCostLimit):0,weeklyOpusCostLimit:s.weeklyOpusCostLimit!==""&&s.weeklyOpusCostLimit!==null?parseFloat(s.weeklyOpusCostLimit):0,permissions:s.permissions,tags:s.tags};s.claudeAccountId?s.claudeAccountId.startsWith("console:")?(v.claudeConsoleAccountId=s.claudeAccountId.substring(8),v.claudeAccountId=null):(s.claudeAccountId.startsWith("group:"),v.claudeAccountId=s.claudeAccountId,v.claudeConsoleAccountId=null):(v.claudeAccountId=null,v.claudeConsoleAccountId=null),s.geminiAccountId?v.geminiAccountId=s.geminiAccountId:v.geminiAccountId=null,s.openaiAccountId?v.openaiAccountId=s.openaiAccountId:v.openaiAccountId=null,s.bedrockAccountId?v.bedrockAccountId=s.bedrockAccountId:v.bedrockAccountId=null,s.droidAccountId?v.droidAccountId=s.droidAccountId:v.droidAccountId=null,v.enableModelRestriction=s.enableModelRestriction,v.restrictedModels=s.restrictedModels,v.enableClientRestriction=s.enableClientRestriction,v.allowedClients=s.allowedClients,v.isActive=s.isActive,s.ownerId!==void 0&&(v.ownerId=s.ownerId);const o=await G.put(`/admin/api-keys/${c.apiKey.id}`,v);o.success?(V("success"),V("close")):O(o.message||"更新失败","error")}catch{O("更新失败","error")}finally{P.value=!1}},F=async()=>{var v,o;q.value=!0;try{const[n,x,K,g,l,y,ue,ge,Z]=await Promise.all([G.get("/admin/claude-accounts"),G.get("/admin/claude-console-accounts"),G.get("/admin/gemini-accounts"),G.get("/admin/gemini-api-accounts"),G.get("/admin/openai-accounts"),G.get("/admin/openai-responses-accounts"),G.get("/admin/bedrock-accounts"),G.get("/admin/droid-accounts"),G.get("/admin/account-groups")]),ve=[];n.success&&((v=n.data)==null||v.forEach(H=>{ve.push({...H,platform:"claude-oauth",isDedicated:H.accountType==="dedicated"})})),x.success&&((o=x.data)==null||o.forEach(H=>{ve.push({...H,platform:"claude-console",isDedicated:H.accountType==="dedicated"})})),U.value.claude=ve;const ce=[];K.success&&(K.data||[]).forEach(H=>{ce.push({...H,platform:"gemini",isDedicated:H.accountType==="dedicated"})}),g.success&&(g.data||[]).forEach(H=>{ce.push({...H,platform:"gemini-api",isDedicated:H.accountType==="dedicated"})}),U.value.gemini=ce;const ee=[];if(l.success&&(l.data||[]).forEach(H=>{ee.push({...H,platform:"openai",isDedicated:H.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(H=>{ee.push({...H,platform:"openai-responses",isDedicated:H.accountType==="dedicated"})}),U.value.openai=ee,ue.success&&(U.value.bedrock=(ue.data||[]).map(H=>({...H,isDedicated:H.accountType==="dedicated"}))),ge.success&&(U.value.droid=(ge.data||[]).map(H=>({...H,platform:"droid",isDedicated:H.accountType==="dedicated"}))),Z.success){const H=Z.data||[];U.value.claudeGroups=H.filter(xe=>xe.platform==="claude"),U.value.geminiGroups=H.filter(xe=>xe.platform==="gemini"),U.value.openaiGroups=H.filter(xe=>xe.platform==="openai"),U.value.droidGroups=H.filter(xe=>xe.platform==="droid")}O("账号列表已刷新","success")}catch{O("刷新账号列表失败","error")}finally{q.value=!1}},be=async()=>{try{const v=await G.get("/admin/users");v.success&&(Y.value=v.data||[])}catch{Y.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return tt(async()=>{try{const[v,o]=await Promise.all([B.loadSupportedClients(),C.fetchTags(),be()]);Q.value=v||[],_.value=o||[]}catch{Q.value=[],_.value=[]}if(c.accounts){const v=[];c.accounts.gemini&&c.accounts.gemini.forEach(n=>{v.push({...n,platform:"gemini"})}),c.accounts.geminiApi&&c.accounts.geminiApi.forEach(n=>{v.push({...n,platform:"gemini-api"})});const o=[];c.accounts.openai&&c.accounts.openai.forEach(n=>{o.push({...n,platform:"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(n=>{o.push({...n,platform:"openai-responses"})}),U.value={claude:c.accounts.claude||[],gemini:v,openai:o,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(n=>({...n,platform:"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}await F(),s.name=c.apiKey.name,s.tokenLimit=c.apiKey.tokenLimit||"",s.rateLimitCost=c.apiKey.rateLimitCost||"",c.apiKey.tokenLimit>0&&c.apiKey.rateLimitCost,s.rateLimitWindow=c.apiKey.rateLimitWindow||"",s.rateLimitRequests=c.apiKey.rateLimitRequests||"",s.concurrencyLimit=c.apiKey.concurrencyLimit||"",s.dailyCostLimit=c.apiKey.dailyCostLimit||"",s.totalCostLimit=c.apiKey.totalCostLimit||"",s.weeklyOpusCostLimit=c.apiKey.weeklyOpusCostLimit||"",s.permissions=c.apiKey.permissions||"all",c.apiKey.claudeConsoleAccountId?s.claudeAccountId=`console:${c.apiKey.claudeConsoleAccountId}`:s.claudeAccountId=c.apiKey.claudeAccountId||"",s.geminiAccountId=c.apiKey.geminiAccountId||"",s.openaiAccountId=c.apiKey.openaiAccountId||"",s.bedrockAccountId=c.apiKey.bedrockAccountId||"",s.droidAccountId=c.apiKey.droidAccountId||"",s.restrictedModels=c.apiKey.restrictedModels||[],s.allowedClients=c.apiKey.allowedClients||[],s.tags=c.apiKey.tags||[],s.enableModelRestriction=c.apiKey.enableModelRestriction||!1,s.enableClientRestriction=c.apiKey.enableClientRestriction||!1,s.isActive=c.apiKey.isActive!==void 0?c.apiKey.isActive:!0,s.ownerId=c.apiKey.userId||"admin"}),(v,o)=>(i(),ye(Me,{to:"body"},[e("div",eo,[e("div",to,[e("div",so,[o[40]||(o[40]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 编辑 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:o[0]||(o[0]=n=>v.$emit("close"))},o[39]||(o[39]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:$e(me,["prevent"])},[e("div",null,[o[41]||(o[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"名称",-1)),e("div",null,[T(e("input",{"onUpdate:modelValue":o[1]||(o[1]=n=>s.name=n),class:"form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",maxlength:"100",placeholder:"请输入API Key名称",required:"",type:"text"},null,512),[[se,s.name]])]),o[42]||(o[42]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",null,[o[43]||(o[43]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"所有者",-1)),T(e("select",{"onUpdate:modelValue":o[2]||(o[2]=n=>s.ownerId=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(i(!0),d(ae,null,oe(Y.value,n=>(i(),d("option",{key:n.id,value:n.id},[A(u(n.displayName)+" ("+u(n.username)+") ",1),n.role==="admin"?(i(),d("span",ro,"- 管理员")):h("",!0)],8,ao))),128))],512),[[et,s.ownerId]]),o[44]||(o[44]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 分配此 API Key 给指定用户或管理员,管理员分配时不受用户 API Key 数量限制 ",-1))]),e("div",null,[o[52]||(o[52]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"标签",-1)),e("div",oo,[s.tags.length>0?(i(),d("div",lo,[o[46]||(o[46]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",no,[(i(!0),d(ae,null,oe(s.tags,(n,x)=>(i(),d("span",{key:"selected-"+x,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[A(u(n)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:K=>de(x)},o[45]||(o[45]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,io)]))),128))])])):h("",!0),m.value.length>0?(i(),d("div",uo,[o[48]||(o[48]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",co,[(i(!0),d(ae,null,oe(m.value,n=>(i(),d("button",{key:"available-"+n,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:x=>J(n)},[o[47]||(o[47]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),A(" "+u(n),1)],8,go))),128))])])):h("",!0),e("div",null,[o[50]||(o[50]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",po,[T(e("input",{"onUpdate:modelValue":o[3]||(o[3]=n=>k.value=n),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:Ze($e(re,["prevent"]),["enter"])},null,40,mo),[[se,k.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:re},o[49]||(o[49]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),o[51]||(o[51]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",xo,[o[60]||(o[60]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",yo,[e("div",fo,[e("div",null,[o[53]||(o[53]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),T(e("input",{"onUpdate:modelValue":o[4]||(o[4]=n=>s.rateLimitWindow=n),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[se,s.rateLimitWindow]]),o[54]||(o[54]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[o[55]||(o[55]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),T(e("input",{"onUpdate:modelValue":o[5]||(o[5]=n=>s.rateLimitRequests=n),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[se,s.rateLimitRequests]]),o[56]||(o[56]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[o[57]||(o[57]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),T(e("input",{"onUpdate:modelValue":o[6]||(o[6]=n=>s.rateLimitCost=n),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[se,s.rateLimitCost]]),o[58]||(o[58]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),o[59]||(o[59]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),A(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),A(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),A(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[o[62]||(o[62]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",bo,[e("div",vo,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[7]||(o[7]=n=>s.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[8]||(o[8]=n=>s.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[9]||(o[9]=n=>s.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[10]||(o[10]=n=>s.dailyCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":o[11]||(o[11]=n=>s.dailyCostLimit=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[se,s.dailyCostLimit]]),o[61]||(o[61]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[o[64]||(o[64]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",ko,[e("div",wo,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[12]||(o[12]=n=>s.totalCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[13]||(o[13]=n=>s.totalCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[14]||(o[14]=n=>s.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[15]||(o[15]=n=>s.totalCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":o[16]||(o[16]=n=>s.totalCostLimit=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[se,s.totalCostLimit]]),o[63]||(o[63]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[o[66]||(o[66]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Opus 模型周费用限制 (美元)",-1)),e("div",ho,[e("div",Ao,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[17]||(o[17]=n=>s.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[18]||(o[18]=n=>s.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[19]||(o[19]=n=>s.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[20]||(o[20]=n=>s.weeklyOpusCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":o[21]||(o[21]=n=>s.weeklyOpusCostLimit=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[se,s.weeklyOpusCostLimit]]),o[65]||(o[65]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户,0 或留空表示无限制 ",-1))])]),e("div",null,[o[67]||(o[67]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),T(e("input",{"onUpdate:modelValue":o[22]||(o[22]=n=>s.concurrencyLimit=n),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[se,s.concurrencyLimit]]),o[68]||(o[68]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",$o,[T(e("input",{id:"editIsActive","onUpdate:modelValue":o[23]||(o[23]=n=>s.isActive=n),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[_e,s.isActive]]),o[69]||(o[69]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),o[70]||(o[70]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key,暂停所有请求,客户端返回 401 错误 ",-1))]),e("div",null,[o[76]||(o[76]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Co,[e("label",Io,[T(e("input",{"onUpdate:modelValue":o[24]||(o[24]=n=>s.permissions=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"all"},null,512),[[ie,s.permissions]]),o[71]||(o[71]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"全部服务",-1))]),e("label",Ko,[T(e("input",{"onUpdate:modelValue":o[25]||(o[25]=n=>s.permissions=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude"},null,512),[[ie,s.permissions]]),o[72]||(o[72]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Claude",-1))]),e("label",Lo,[T(e("input",{"onUpdate:modelValue":o[26]||(o[26]=n=>s.permissions=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"gemini"},null,512),[[ie,s.permissions]]),o[73]||(o[73]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Gemini",-1))]),e("label",Do,[T(e("input",{"onUpdate:modelValue":o[27]||(o[27]=n=>s.permissions=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"openai"},null,512),[[ie,s.permissions]]),o[74]||(o[74]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 OpenAI",-1))]),e("label",_o,[T(e("input",{"onUpdate:modelValue":o[28]||(o[28]=n=>s.permissions=n),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"droid"},null,512),[[ie,s.permissions]]),o[75]||(o[75]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Droid",-1))])]),o[77]||(o[77]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 控制此 API Key 可以访问哪些服务 ",-1))]),e("div",null,[e("div",To,[o[78]||(o[78]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:q.value,title:"刷新账号列表",type:"button",onClick:F},[e("i",{class:j(["fas",q.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(q.value?"刷新中...":"刷新账号"),1)],8,So)]),e("div",Mo,[e("div",null,[o[79]||(o[79]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(he,{modelValue:s.claudeAccountId,"onUpdate:modelValue":o[29]||(o[29]=n=>s.claudeAccountId=n),accounts:U.value.claude,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="claude",groups:U.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[80]||(o[80]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(he,{modelValue:s.geminiAccountId,"onUpdate:modelValue":o[30]||(o[30]=n=>s.geminiAccountId=n),accounts:U.value.gemini,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="gemini",groups:U.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[81]||(o[81]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(he,{modelValue:s.openaiAccountId,"onUpdate:modelValue":o[31]||(o[31]=n=>s.openaiAccountId=n),accounts:U.value.openai,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="openai",groups:U.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[82]||(o[82]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(he,{modelValue:s.bedrockAccountId,"onUpdate:modelValue":o[32]||(o[32]=n=>s.bedrockAccountId=n),accounts:U.value.bedrock,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="openai",groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[o[83]||(o[83]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(he,{modelValue:s.droidAccountId,"onUpdate:modelValue":o[33]||(o[33]=n=>s.droidAccountId=n),accounts:U.value.droid,"default-option-text":"使用共享账号池",disabled:s.permissions!=="all"&&s.permissions!=="droid",groups:U.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),o[84]||(o[84]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",Uo,[T(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":o[34]||(o[34]=n=>s.enableModelRestriction=n),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[_e,s.enableModelRestriction]]),o[85]||(o[85]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),s.enableModelRestriction?(i(),d("div",Po,[e("div",null,[o[88]||(o[88]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",Vo,[(i(!0),d(ae,null,oe(s.restrictedModels,(n,x)=>(i(),d("span",{key:x,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800 dark:bg-red-900/30 dark:text-red-400"},[A(u(n)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300",type:"button",onClick:K=>S(x)},o[86]||(o[86]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Ro)]))),128)),s.restrictedModels.length===0?(i(),d("span",Eo," 暂无限制的模型 ")):h("",!0)]),e("div",Oo,[e("div",jo,[(i(!0),d(ae,null,oe($.value,n=>(i(),d("button",{key:n,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600 sm:text-sm",type:"button",onClick:x=>L(n)},u(n),9,Go))),128)),$.value.length===0?(i(),d("span",qo," 所有常用模型已在限制列表中 ")):h("",!0)]),e("div",zo,[T(e("input",{"onUpdate:modelValue":o[35]||(o[35]=n=>s.modelInput=n),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:Ze($e(R,["prevent"]),["enter"])},null,40,Fo),[[se,s.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:R},o[87]||(o[87]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),o[89]||(o[89]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):h("",!0)]),e("div",null,[e("div",Bo,[T(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":o[36]||(o[36]=n=>s.enableClientRestriction=n),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[_e,s.enableClientRestriction]]),o[90]||(o[90]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),s.enableClientRestriction?(i(),d("div",Wo,[e("div",null,[o[91]||(o[91]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),o[92]||(o[92]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",No,[(i(!0),d(ae,null,oe(Q.value,n=>(i(),d("div",{key:n.id,class:"flex items-start"},[T(e("input",{id:`edit_client_${n.id}`,"onUpdate:modelValue":o[37]||(o[37]=x=>s.allowedClients=x),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:n.id},null,8,Ho),[[_e,s.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${n.id}`},[e("span",Qo,u(n.name),1),e("span",Jo,u(n.description),1)],8,Yo)]))),128))])])])):h("",!0)]),e("div",Xo,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[38]||(o[38]=n=>v.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:P.value,type:"submit"},[P.value?(i(),d("div",el)):(i(),d("i",tl)),A(" "+u(P.value?"保存中...":"保存修改"),1)],8,Zo)])],32)])])]))}},al=De(sl,[["__scopeId","data-v-d0cd0aca"]]),rl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ol={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},ll={class:"mb-6 flex items-center justify-between"},nl={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},il={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},dl={class:"flex items-start gap-3"},ul={class:"text-sm text-gray-700"},cl={class:"mt-1 text-xs text-gray-600"},gl={key:0,class:"mt-3"},pl=["min"],ml={key:1,class:"mt-2 text-xs text-gray-500"},xl={class:"flex gap-3 pt-4"},yl=["disabled"],fl={key:0,class:"loading-spinner mr-2"},bl={key:1,class:"fas fa-clock mr-2"},vl={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(b,{emit:N}){const c=b,V=N,B=M(!1),C=Be({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),P=E(()=>{const k=new Date;return c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>k?new Date(c.apiKey.expiresAt).toISOString().slice(0,16):(k.setMinutes(k.getMinutes()+1),k.toISOString().slice(0,16))}),q=k=>new Date(k).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),U=()=>{if(!C.renewDuration){C.newExpiresAt=null;return}if(C.renewDuration==="permanent"){C.newExpiresAt=null;return}if(C.renewDuration==="custom")return;const k=c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>new Date?new Date(c.apiKey.expiresAt):new Date,m=C.renewDuration.match(/(\d+)([dhmy])/);if(m){const[,s,R]=m,S=parseInt(s);switch(R){case"d":k.setDate(k.getDate()+S);break;case"h":k.setHours(k.getHours()+S);break;case"m":k.setMonth(k.getMonth()+S);break;case"y":k.setFullYear(k.getFullYear()+S);break}C.newExpiresAt=k.toISOString()}},Q=()=>{C.customExpireDate&&(C.newExpiresAt=new Date(C.customExpireDate).toISOString())},Y=async()=>{B.value=!0;try{const k={expiresAt:C.renewDuration==="permanent"?null:C.newExpiresAt},_=await G.put(`/admin/api-keys/${c.apiKey.id}`,k);_.success?(O("API Key 续期成功","success"),V("success"),V("close")):O(_.message||"续期失败","error")}catch{O("续期失败","error")}finally{B.value=!1}};return U(),(k,_)=>(i(),ye(Me,{to:"body"},[e("div",rl,[e("div",ol,[e("div",ll,[_[5]||(_[5]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-clock text-white"})]),e("h3",{class:"text-xl font-bold text-gray-900"},"续期 API Key")],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:_[0]||(_[0]=m=>k.$emit("close"))},_[4]||(_[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",nl,[e("div",il,[e("div",dl,[_[7]||(_[7]=e("div",{class:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[_[6]||(_[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",ul,u(b.apiKey.name),1),e("p",cl," 当前过期时间:"+u(b.apiKey.expiresAt?q(b.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[_[9]||(_[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),T(e("select",{"onUpdate:modelValue":_[1]||(_[1]=m=>C.renewDuration=m),class:"form-input w-full",onChange:U},_[8]||(_[8]=[e("option",{value:"7d"},"延长 7 天",-1),e("option",{value:"30d"},"延长 30 天",-1),e("option",{value:"90d"},"延长 90 天",-1),e("option",{value:"180d"},"延长 180 天",-1),e("option",{value:"365d"},"延长 365 天",-1),e("option",{value:"custom"},"自定义日期",-1),e("option",{value:"permanent"},"设为永不过期",-1)]),544),[[et,C.renewDuration]]),C.renewDuration==="custom"?(i(),d("div",gl,[T(e("input",{"onUpdate:modelValue":_[2]||(_[2]=m=>C.customExpireDate=m),class:"form-input w-full",min:P.value,type:"datetime-local",onChange:Q},null,40,pl),[[se,C.customExpireDate]])])):h("",!0),C.newExpiresAt?(i(),d("p",ml," 新的过期时间:"+u(q(C.newExpiresAt)),1)):h("",!0)])]),e("div",xl,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200",type:"button",onClick:_[3]||(_[3]=m=>k.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:B.value||!C.renewDuration,type:"button",onClick:Y},[B.value?(i(),d("div",fl)):(i(),d("i",bl)),A(" "+u(B.value?"续期中...":"确认续期"),1)],8,yl)])])])]))}},kl=De(vl,[["__scopeId","data-v-2fba52a3"]]),wl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},hl={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Al={class:"mb-6 space-y-4"},$l={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Cl={class:"font-medium text-gray-900 dark:text-gray-100"},Il={key:0},Kl={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Ll={class:"text-gray-700 dark:text-gray-300"},Dl={class:"relative"},_l={class:"flex min-h-[60px] items-center break-all rounded-lg border border-gray-700 bg-gray-900 p-4 pr-14 font-mono text-sm text-white dark:border-gray-600 dark:bg-gray-900"},Tl={class:"absolute right-3 top-3"},Sl=["title"],Ml={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(b,{emit:N}){const c=b,V=N,B=M(!1),C=()=>{if(typeof window<"u"){const s=window.location.protocol,R=window.location.host;let S=s+"//"+R;const z=window.location.href,$=z.indexOf("/",8);return $!==-1&&(S=z.substring(0,$)),S}return""},P=E(()=>C()+"/api"),q=()=>{B.value=!B.value},U=()=>{const s=c.apiKey.apiKey||c.apiKey.key||"";return s?B.value||s.length<=12?s:s.substring(0,8)+"●".repeat(Math.max(0,s.length-12))+s.substring(s.length-4):""},Q=async(s,R)=>{try{await navigator.clipboard.writeText(s),O(R,"success")}catch{const z=document.createElement("textarea");z.value=s,document.body.appendChild(z),z.select();try{document.execCommand("copy"),O(R,"success")}catch{O("复制失败,请手动复制","error")}finally{document.body.removeChild(z)}}},Y=async()=>{const s=c.apiKey.apiKey||c.apiKey.key||"";if(!s){O("API Key 不存在","error");return}const R=`ANTHROPIC_BASE_URL="${P.value}" ANTHROPIC_AUTH_TOKEN="${s}"`;await Q(R,"配置信息已复制到剪贴板")},k=async()=>{const s=c.apiKey.apiKey||c.apiKey.key||"";if(!s){O("API Key 不存在","error");return}await Q(s,"API Key 已复制")},_=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。 确定要关闭吗?`,"确定关闭","取消")&&V("close"):confirm(`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。 确定要关闭吗?`)&&V("close")},m=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有保存API Key,关闭后将无法再次查看。 建议您先复制API Key再关闭。`,"仍然关闭","返回复制")&&V("close"):confirm(`您还没有保存API Key,关闭后将无法再次查看。 确定要关闭吗?`)&&V("close")};return(s,R)=>(i(),ye(Me,{to:"body"},[e("div",wl,[e("div",hl,[e("div",{class:"mb-6 flex items-center justify-between"},[R[1]||(R[1]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-check text-lg text-white"})]),e("div",null,[e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"API Key 创建成功"),e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"请妥善保存您的 API Key")])],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"直接关闭(不推荐)",onClick:m},R[0]||(R[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),R[9]||(R[9]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4 dark:border-amber-500 dark:bg-amber-900/20"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400 dark:bg-amber-500"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900 dark:text-amber-400"},"重要提醒"),e("p",{class:"text-sm text-amber-800 dark:text-amber-300"}," 这是您唯一能看到完整 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即复制并妥善保存。 ")])])],-1)),e("div",Al,[e("div",null,[R[2]||(R[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",$l,[e("span",Cl,u(b.apiKey.name),1)])]),b.apiKey.description?(i(),d("div",Il,[R[3]||(R[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Kl,[e("span",Ll,u(b.apiKey.description||"无描述"),1)])])):h("",!0),e("div",null,[R[4]||(R[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",Dl,[e("div",_l,u(U()),1),e("div",Tl,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:B.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:q},[e("i",{class:j(["fas",B.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,Sl)])]),R[5]||(R[5]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 点击眼睛图标切换显示模式,使用下方按钮复制环境变量配置 ",-1))])]),e("div",{class:"flex flex-col gap-3 sm:gap-4"},[e("div",{class:"flex flex-col gap-3 sm:flex-row sm:gap-4"},[e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-blue-200 bg-blue-50 px-5 py-3 text-sm font-semibold text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100 dark:border-blue-500/50 dark:bg-blue-500/10 dark:text-blue-200 dark:hover:bg-blue-500/20 sm:flex-1 sm:text-base",onClick:k},R[6]||(R[6]=[e("i",{class:"fas fa-key"},null,-1),A(" 仅复制密钥 ",-1)])),e("button",{class:"btn btn-primary flex w-full items-center justify-center gap-2 px-5 py-3 text-sm font-semibold sm:flex-1 sm:text-base",onClick:Y},R[7]||(R[7]=[e("i",{class:"fas fa-copy"},null,-1),A(" 复制Claude配置 ",-1)]))]),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-gray-300 bg-gray-200 px-5 py-3 text-sm font-semibold text-gray-800 transition-colors hover:border-gray-400 hover:bg-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 sm:text-base",onClick:_},R[8]||(R[8]=[e("i",{class:"fas fa-check-circle"},null,-1),A(" 我已保存 ",-1)]))])])])]))}},Ul=De(Ml,[["__scopeId","data-v-d2440499"]]),Pl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Vl={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},Rl={class:"mb-6 flex items-center justify-between"},El={class:"flex items-center gap-3"},Ol={class:"text-sm text-gray-600"},jl={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},Gl={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},ql={class:"flex items-center justify-between"},zl={class:"mt-1 text-2xl font-bold text-blue-900"},Fl={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},Bl={class:"flex items-center justify-between"},Wl={class:"mt-1 truncate text-lg font-bold text-green-900"},Nl={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},Hl={class:"flex items-center justify-between"},Yl={class:"mt-1 text-lg font-bold text-purple-900"},Ql={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},Jl={class:"flex items-center justify-between"},Xl={class:"mt-1 text-lg font-bold text-orange-900"},Zl={class:"mb-6"},en={class:"mb-3 flex items-center justify-between"},tn={class:"flex items-center gap-2"},sn={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},an={class:"font-mono text-xs text-gray-300"},rn={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(b,{emit:N}){const c=b,V=N,B=M(!1),C=E(()=>{if(c.apiKeys.length>0){const m=c.apiKeys[0],s=m.name.match(/^(.+)_\d+$/);return s?s[1]:m.name}return""}),P=()=>{if(c.apiKeys.length===0)return"未知";const m=c.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[m]||m},q=()=>{if(c.apiKeys.length===0)return"未知";const m=c.apiKeys[0].expiresAt;if(!m)return"永不过期";const s=new Date(m),S=Math.ceil((s-new Date)/(1e3*60*60*24));return S<=7?`${S}天`:S<=30?`${Math.ceil(S/7)}周`:S<=365?`${Math.ceil(S/30)}个月`:`${Math.ceil(S/365)}年`},U=()=>{B.value=!B.value},Q=()=>{const s=c.apiKeys.slice(0,10).map(R=>`${R.name}: ${R.apiKey||R.key||""}`);return c.apiKeys.length>10&&s.push(`... 还有 ${c.apiKeys.length-10} 个 API Key`),s.join(` `)},Y=()=>{const m=c.apiKeys.map($=>`${$.name}: ${$.apiKey||$.key||""}`).join(` `),s=new Blob([m],{type:"text/plain;charset=utf-8"}),R=URL.createObjectURL(s),S=document.createElement("a");S.href=R;const z=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);S.download=`api-keys-${C.value}-${z}.txt`,document.body.appendChild(S),S.click(),document.body.removeChild(S),URL.revokeObjectURL(R),O("API Keys 文件已下载","success")},k=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。 确定要关闭吗?`,"确定关闭","返回下载")&&V("close"):confirm(`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。 确定要关闭吗?`)&&V("close")},_=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有下载 API Keys,关闭后将无法再次查看。 强烈建议您先下载保存。`,"仍然关闭","返回下载")&&V("close"):confirm(`您还没有下载 API Keys,关闭后将无法再次查看。 确定要关闭吗?`)&&V("close")};return(m,s)=>(i(),ye(Me,{to:"body"},[e("div",Pl,[e("div",Vl,[e("div",Rl,[e("div",El,[s[1]||(s[1]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-layer-group text-lg text-white"})],-1)),e("div",null,[s[0]||(s[0]=e("h3",{class:"text-xl font-bold text-gray-900"},"批量创建成功",-1)),e("p",Ol,"成功创建 "+u(b.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:_},s[2]||(s[2]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),s[14]||(s[14]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900"},"重要提醒"),e("p",{class:"text-sm text-amber-800"}," 这是您唯一能看到所有 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即下载并妥善保存。 ")])])],-1)),e("div",jl,[e("div",Gl,[e("div",ql,[e("div",null,[s[3]||(s[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",zl,u(b.apiKeys.length),1)]),s[4]||(s[4]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-blue-500 bg-opacity-20"},[e("i",{class:"fas fa-key text-blue-600"})],-1))])]),e("div",Fl,[e("div",Bl,[e("div",null,[s[5]||(s[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",Wl,u(C.value),1)]),s[6]||(s[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-green-500 bg-opacity-20"},[e("i",{class:"fas fa-tag text-green-600"})],-1))])]),e("div",Nl,[e("div",Hl,[e("div",null,[s[7]||(s[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",Yl,u(P()),1)]),s[8]||(s[8]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-purple-500 bg-opacity-20"},[e("i",{class:"fas fa-shield-alt text-purple-600"})],-1))])]),e("div",Ql,[e("div",Jl,[e("div",null,[s[9]||(s[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",Xl,u(q()),1)]),s[10]||(s[10]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-orange-500 bg-opacity-20"},[e("i",{class:"fas fa-clock text-orange-600"})],-1))])])]),e("div",Zl,[e("div",en,[s[12]||(s[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",tn,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:U},[e("i",{class:j(["fas",B.value?"fa-eye-slash":"fa-eye"])},null,2),A(" "+u(B.value?"隐藏":"显示")+"预览 ",1)]),s[11]||(s[11]=e("span",{class:"text-xs text-gray-500"},"(最多显示前10个)",-1))])]),B.value?(i(),d("div",sn,[e("pre",an,u(Q()),1)])):h("",!0)]),e("div",{class:"flex gap-3"},[e("button",{class:"btn btn-primary flex flex-1 items-center justify-center gap-2 px-6 py-3 font-semibold",onClick:Y},s[13]||(s[13]=[e("i",{class:"fas fa-download"},null,-1),A(" 下载所有 API Keys ",-1)])),e("button",{class:"rounded-xl border border-gray-300 bg-gray-200 px-6 py-3 font-semibold text-gray-800 transition-colors hover:bg-gray-300",onClick:k}," 我已保存 ")]),s[15]||(s[15]=e("div",{class:"mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("p",{class:"flex items-start text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-2 mt-0.5 flex-shrink-0"}),e("span",null," 下载的文件格式为文本文件(.txt),每行包含一个 API Key。 请将文件保存在安全的位置,避免泄露。 ")])],-1))])])]))}},on=De(rn,[["__scopeId","data-v-b0b904b9"]]),ln={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},nn={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},dn={class:"mb-4 flex items-center justify-between sm:mb-6"},un={class:"flex items-center gap-2 sm:gap-3"},cn={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},gn={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},pn={class:"flex items-start gap-3"},mn={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},xn={class:"space-y-4"},yn={class:"flex flex-wrap gap-4"},fn={class:"flex cursor-pointer items-center"},bn={class:"flex cursor-pointer items-center"},vn={class:"flex cursor-pointer items-center"},kn={class:"flex cursor-pointer items-center"},wn={key:0,class:"space-y-3"},hn={key:0},An={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},$n={class:"flex flex-wrap gap-2"},Cn=["onClick"],In={key:1},Kn={class:"flex flex-wrap gap-2"},Ln=["onClick"],Dn={class:"flex gap-2"},_n=["onKeypress"],Tn={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},Sn={class:"space-y-2"},Mn={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Un={class:"mb-3 flex items-center gap-4"},Pn={class:"flex gap-4"},Vn={class:"flex cursor-pointer items-center"},Rn={class:"flex cursor-pointer items-center"},En={class:"flex cursor-pointer items-center"},On={class:"flex flex-wrap gap-4"},jn={class:"flex cursor-pointer items-center"},Gn={class:"flex cursor-pointer items-center"},qn={class:"flex cursor-pointer items-center"},zn={class:"flex cursor-pointer items-center"},Fn={class:"flex cursor-pointer items-center"},Bn={class:"flex cursor-pointer items-center"},Wn={class:"mb-3 flex items-center justify-between"},Nn=["disabled"],Hn={class:"grid grid-cols-1 gap-3"},Yn={class:"flex gap-3 pt-4"},Qn=["disabled"],Jn={key:0,class:"loading-spinner mr-2"},Xn={key:1,class:"fas fa-save mr-2"},Dt="__KEEP_ORIGINAL__",Zn={__name:"BatchEditApiKeyModal",props:{selectedKeys:{type:Array,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success"],setup(b,{emit:N}){const c=b,V=N,B=Tt(),C=M(!1),P=M(!1),q=M({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),U=M(""),Q=M([]),Y=M("none"),k=E(()=>c.selectedKeys.length),_=E(()=>Q.value.filter(o=>!m.tags.includes(o))),m=Be({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",tags:[],isActive:null}),s=[{value:Dt,label:"不修改"},{value:"SHARED_POOL",label:"使用共享账号池"}],R=o=>E({get:()=>m[o]===""?Dt:m[o],set:n=>{!n||n===Dt?m[o]="":m[o]=n}}),S=R("claudeAccountId"),z=R("geminiAccountId"),$=R("openaiAccountId"),L=R("bedrockAccountId"),re=R("droidAccountId"),J=o=>!m.permissions||m.permissions==="all"?!0:m.permissions===o,de=()=>{if(U.value&&U.value.trim()){const o=U.value.trim();m.tags.includes(o)||m.tags.push(o),U.value=""}},me=o=>{m.tags.includes(o)||m.tags.push(o)},F=o=>{m.tags.splice(o,1)},be=async()=>{var o,n;P.value=!0;try{const[x,K,g,l,y,ue,ge,Z]=await Promise.all([G.get("/admin/claude-accounts"),G.get("/admin/claude-console-accounts"),G.get("/admin/gemini-accounts"),G.get("/admin/openai-accounts"),G.get("/admin/openai-responses-accounts"),G.get("/admin/bedrock-accounts"),G.get("/admin/droid-accounts"),G.get("/admin/account-groups")]),ve=[];x.success&&((o=x.data)==null||o.forEach(ee=>{ve.push({...ee,platform:"claude-oauth",isDedicated:ee.accountType==="dedicated"})})),K.success&&((n=K.data)==null||n.forEach(ee=>{ve.push({...ee,platform:"claude-console",isDedicated:ee.accountType==="dedicated"})})),q.value.claude=ve,g.success&&(q.value.gemini=(g.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"})));const ce=[];if(l.success&&(l.data||[]).forEach(ee=>{ce.push({...ee,platform:"openai",isDedicated:ee.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(ee=>{ce.push({...ee,platform:"openai-responses",isDedicated:ee.accountType==="dedicated"})}),q.value.openai=ce,ue.success&&(q.value.bedrock=(ue.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),ge.success&&(q.value.droid=(ge.data||[]).map(ee=>({...ee,platform:"droid",isDedicated:ee.accountType==="dedicated"}))),Z.success){const ee=Z.data||[];q.value.claudeGroups=ee.filter(H=>H.platform==="claude"),q.value.geminiGroups=ee.filter(H=>H.platform==="gemini"),q.value.openaiGroups=ee.filter(H=>H.platform==="openai"),q.value.droidGroups=ee.filter(H=>H.platform==="droid")}O("账号列表已刷新","success")}catch{O("刷新账号列表失败","error")}finally{P.value=!1}},v=async()=>{C.value=!0;try{const o={};m.rateLimitCost!==""&&m.rateLimitCost!==null&&(o.rateLimitCost=parseFloat(m.rateLimitCost)),m.rateLimitWindow!==""&&m.rateLimitWindow!==null&&(o.rateLimitWindow=parseInt(m.rateLimitWindow)),m.rateLimitRequests!==""&&m.rateLimitRequests!==null&&(o.rateLimitRequests=parseInt(m.rateLimitRequests)),m.concurrencyLimit!==""&&m.concurrencyLimit!==null&&(o.concurrencyLimit=parseInt(m.concurrencyLimit)),m.dailyCostLimit!==""&&m.dailyCostLimit!==null&&(o.dailyCostLimit=parseFloat(m.dailyCostLimit)),m.totalCostLimit!==""&&m.totalCostLimit!==null&&(o.totalCostLimit=parseFloat(m.totalCostLimit)),m.weeklyOpusCostLimit!==""&&m.weeklyOpusCostLimit!==null&&(o.weeklyOpusCostLimit=parseFloat(m.weeklyOpusCostLimit)),m.permissions!==""&&(o.permissions=m.permissions),m.claudeAccountId!==""&&(m.claudeAccountId==="SHARED_POOL"?(o.claudeAccountId=null,o.claudeConsoleAccountId=null):m.claudeAccountId.startsWith("console:")?(o.claudeConsoleAccountId=m.claudeAccountId.substring(8),o.claudeAccountId=null):(m.claudeAccountId.startsWith("group:"),o.claudeAccountId=m.claudeAccountId,o.claudeConsoleAccountId=null)),m.geminiAccountId!==""&&(m.geminiAccountId==="SHARED_POOL"?o.geminiAccountId=null:o.geminiAccountId=m.geminiAccountId),m.openaiAccountId!==""&&(m.openaiAccountId==="SHARED_POOL"?o.openaiAccountId=null:o.openaiAccountId=m.openaiAccountId),m.bedrockAccountId!==""&&(m.bedrockAccountId==="SHARED_POOL"?o.bedrockAccountId=null:o.bedrockAccountId=m.bedrockAccountId),m.droidAccountId!==""&&(m.droidAccountId==="SHARED_POOL"?o.droidAccountId=null:o.droidAccountId=m.droidAccountId),m.isActive!==null&&(o.isActive=m.isActive),Y.value!=="none"&&(o.tags=m.tags,o.tagOperation=Y.value);const n=await G.put("/admin/api-keys/batch",{keyIds:c.selectedKeys,updates:o});if(n.success){const{successCount:x,failedCount:K,errors:g}=n.data;if(x>0){if(O(`成功批量编辑 ${x} 个 API Keys`,"success"),K>0){const l=g.map(y=>`${y.keyId}: ${y.error}`).join(` `);O(`${K} 个编辑失败: ${l}`,"warning")}}else O("所有 API Keys 编辑失败","error");V("success"),V("close")}else O(n.message||"批量编辑失败","error")}catch(o){O("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",o)}finally{C.value=!1}};return tt(async()=>{if(Q.value=await B.fetchTags(),c.accounts){const o=[];c.accounts.openai&&c.accounts.openai.forEach(n=>{o.push({...n,platform:"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(n=>{o.push({...n,platform:"openai-responses"})}),q.value={claude:c.accounts.claude||[],gemini:c.accounts.gemini||[],openai:o,bedrock:c.accounts.bedrock||[],droid:c.accounts.droid||[],claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}}),(o,n)=>(i(),ye(Me,{to:"body"},[e("div",ln,[e("div",nn,[e("div",dn,[e("div",un,[n[28]||(n[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",cn," 批量编辑 API Keys ("+u(k.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:n[0]||(n[0]=x=>o.$emit("close"))},n[29]||(n[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:$e(v,["prevent"])},[e("div",gn,[e("div",pn,[n[31]||(n[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[n[30]||(n[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",mn," 以下设置将应用到所选的 "+u(k.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[n[41]||(n[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",xn,[e("div",yn,[e("label",fn,[T(e("input",{"onUpdate:modelValue":n[1]||(n[1]=x=>Y.value=x),class:"mr-2",type:"radio",value:"replace"},null,512),[[ie,Y.value]]),n[32]||(n[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",bn,[T(e("input",{"onUpdate:modelValue":n[2]||(n[2]=x=>Y.value=x),class:"mr-2",type:"radio",value:"add"},null,512),[[ie,Y.value]]),n[33]||(n[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",vn,[T(e("input",{"onUpdate:modelValue":n[3]||(n[3]=x=>Y.value=x),class:"mr-2",type:"radio",value:"remove"},null,512),[[ie,Y.value]]),n[34]||(n[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",kn,[T(e("input",{"onUpdate:modelValue":n[4]||(n[4]=x=>Y.value=x),class:"mr-2",type:"radio",value:"none"},null,512),[[ie,Y.value]]),n[35]||(n[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),Y.value!=="none"?(i(),d("div",wn,[m.tags.length>0?(i(),d("div",hn,[e("div",An,u(Y.value==="replace"?"新标签列表:":Y.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",$n,[(i(!0),d(ae,null,oe(m.tags,(x,K)=>(i(),d("span",{key:"selected-"+K,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},[A(u(x)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:g=>F(K)},n[36]||(n[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Cn)]))),128))])])):h("",!0),_.value.length>0?(i(),d("div",In,[n[38]||(n[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Kn,[(i(!0),d(ae,null,oe(_.value,x=>(i(),d("button",{key:"available-"+x,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-300",type:"button",onClick:K=>me(x)},[n[37]||(n[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),A(" "+u(x),1)],8,Ln))),128))])])):h("",!0),e("div",null,[n[40]||(n[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",Dn,[T(e("input",{"onUpdate:modelValue":n[5]||(n[5]=x=>U.value=x),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:Ze($e(de,["prevent"]),["enter"])},null,40,_n),[[se,U.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700",type:"button",onClick:de},n[39]||(n[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):h("",!0)])]),e("div",Tn,[n[45]||(n[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",Sn,[e("div",Mn,[e("div",null,[n[42]||(n[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),T(e("input",{"onUpdate:modelValue":n[6]||(n[6]=x=>m.rateLimitWindow=x),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[se,m.rateLimitWindow]])]),e("div",null,[n[43]||(n[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),T(e("input",{"onUpdate:modelValue":n[7]||(n[7]=x=>m.rateLimitRequests=x),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[se,m.rateLimitRequests]])]),e("div",null,[n[44]||(n[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),T(e("input",{"onUpdate:modelValue":n[8]||(n[8]=x=>m.rateLimitCost=x),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改",step:"0.01",type:"number"},null,512),[[se,m.rateLimitCost]])])])])]),e("div",null,[n[46]||(n[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),T(e("input",{"onUpdate:modelValue":n[9]||(n[9]=x=>m.dailyCostLimit=x),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[se,m.dailyCostLimit]])]),e("div",null,[n[47]||(n[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),T(e("input",{"onUpdate:modelValue":n[10]||(n[10]=x=>m.totalCostLimit=x),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[se,m.totalCostLimit]])]),e("div",null,[n[48]||(n[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Opus 模型周费用限制 (美元) ",-1)),T(e("input",{"onUpdate:modelValue":n[11]||(n[11]=x=>m.weeklyOpusCostLimit=x),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[se,m.weeklyOpusCostLimit]]),n[49]||(n[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户 ",-1))]),e("div",null,[n[50]||(n[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),T(e("input",{"onUpdate:modelValue":n[12]||(n[12]=x=>m.concurrencyLimit=x),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",type:"number"},null,512),[[se,m.concurrencyLimit]])]),e("div",null,[e("div",Un,[n[54]||(n[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",Pn,[e("label",Vn,[T(e("input",{"onUpdate:modelValue":n[13]||(n[13]=x=>m.isActive=x),class:"mr-2",type:"radio",value:!0},null,512),[[ie,m.isActive]]),n[51]||(n[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",Rn,[T(e("input",{"onUpdate:modelValue":n[14]||(n[14]=x=>m.isActive=x),class:"mr-2",type:"radio",value:!1},null,512),[[ie,m.isActive]]),n[52]||(n[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",En,[T(e("input",{"onUpdate:modelValue":n[15]||(n[15]=x=>m.isActive=x),class:"mr-2",type:"radio",value:null},null,512),[[ie,m.isActive]]),n[53]||(n[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[n[61]||(n[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",On,[e("label",jn,[T(e("input",{"onUpdate:modelValue":n[16]||(n[16]=x=>m.permissions=x),class:"mr-2",type:"radio",value:""},null,512),[[ie,m.permissions]]),n[55]||(n[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",Gn,[T(e("input",{"onUpdate:modelValue":n[17]||(n[17]=x=>m.permissions=x),class:"mr-2",type:"radio",value:"all"},null,512),[[ie,m.permissions]]),n[56]||(n[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",qn,[T(e("input",{"onUpdate:modelValue":n[18]||(n[18]=x=>m.permissions=x),class:"mr-2",type:"radio",value:"claude"},null,512),[[ie,m.permissions]]),n[57]||(n[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",zn,[T(e("input",{"onUpdate:modelValue":n[19]||(n[19]=x=>m.permissions=x),class:"mr-2",type:"radio",value:"gemini"},null,512),[[ie,m.permissions]]),n[58]||(n[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",Fn,[T(e("input",{"onUpdate:modelValue":n[20]||(n[20]=x=>m.permissions=x),class:"mr-2",type:"radio",value:"openai"},null,512),[[ie,m.permissions]]),n[59]||(n[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",Bn,[T(e("input",{"onUpdate:modelValue":n[21]||(n[21]=x=>m.permissions=x),class:"mr-2",type:"radio",value:"droid"},null,512),[[ie,m.permissions]]),n[60]||(n[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",Wn,[n[62]||(n[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:P.value,title:"刷新账号列表",type:"button",onClick:be},[e("i",{class:j(["fas",P.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(P.value?"刷新中...":"刷新账号"),1)],8,Nn)]),e("div",Hn,[e("div",null,[n[63]||(n[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(he,{modelValue:Xe(S),"onUpdate:modelValue":n[22]||(n[22]=x=>Je(S)?S.value=x:null),accounts:q.value.claude,"default-option-text":"请选择Claude账号",disabled:!J("claude"),groups:q.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":s},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[n[64]||(n[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(he,{modelValue:Xe(z),"onUpdate:modelValue":n[23]||(n[23]=x=>Je(z)?z.value=x:null),accounts:q.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!J("gemini"),groups:q.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":s},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[n[65]||(n[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(he,{modelValue:Xe($),"onUpdate:modelValue":n[24]||(n[24]=x=>Je($)?$.value=x:null),accounts:q.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!J("openai"),groups:q.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":s},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[n[66]||(n[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(he,{modelValue:Xe(L),"onUpdate:modelValue":n[25]||(n[25]=x=>Je(L)?L.value=x:null),accounts:q.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!J("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":s},null,8,["modelValue","accounts","disabled"])]),e("div",null,[n[67]||(n[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(he,{modelValue:Xe(re),"onUpdate:modelValue":n[26]||(n[26]=x=>Je(re)?re.value=x:null),accounts:q.value.droid,"default-option-text":"请选择Droid账号",disabled:!J("droid"),groups:q.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":s},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",Yn,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:n[27]||(n[27]=x=>o.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:C.value,type:"submit"},[C.value?(i(),d("div",Jn)):(i(),d("i",Xn)),A(" "+u(C.value?"保存中...":"批量保存"),1)],8,Qn)])],32)])])]))}},ei=De(Zn,[["__scopeId","data-v-0dc5b225"]]),ti={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},si={class:"modal-content relative mx-auto w-full max-w-lg p-8"},ai={class:"mb-6 flex items-center justify-between"},ri={class:"flex items-center gap-3"},oi={class:"text-sm text-gray-600 dark:text-gray-400"},li={class:"space-y-6"},ni={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},ii={class:"flex items-center justify-between"},di={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},ui={class:"ml-2 text-xs font-normal text-gray-600"},ci={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},gi={key:0,class:"mb-4"},pi={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},mi={class:"mb-3 grid grid-cols-3 gap-2"},xi=["onClick"],yi={key:1,class:"animate-fadeIn"},fi=["min"],bi={key:2,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},vi={class:"flex items-center justify-between"},ki={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},wi={class:"flex gap-3 pt-2"},hi=["disabled"],Ai={key:0,class:"loading-spinner mr-2"},$i={key:1,class:"fas fa-save mr-2"},Ci={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(b,{expose:N,emit:c}){const V=b,B=c,C=M(!1),P=Be({expireDuration:"",customExpireDate:"",expiresAt:null}),q=[{value:"",label:"永不过期"},{value:"1d",label:"1 天"},{value:"7d",label:"7 天"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],U=E(()=>{const $=new Date;return $.setMinutes($.getMinutes()+1),$.toISOString().slice(0,16)});Te(()=>V.show,$=>{$&&Q()}),Te(()=>{var $;return($=V.apiKey)==null?void 0:$.id},$=>{$&&V.show&&Q()});const Q=()=>{C.value=!1,V.apiKey.expiresAt?(P.expireDuration="custom",P.customExpireDate=new Date(V.apiKey.expiresAt).toISOString().slice(0,16),P.expiresAt=V.apiKey.expiresAt):(P.expireDuration="",P.customExpireDate="",P.expiresAt=null)},Y=$=>{if(P.expireDuration=$,!$){P.expiresAt=null;return}if($==="custom")return;const L=new Date,re=$.match(/(\d+)([dhmy])/);if(re){const[,J,de]=re,me=parseInt(J);switch(de){case"d":L.setDate(L.getDate()+me);break;case"h":L.setHours(L.getHours()+me);break;case"m":L.setMonth(L.getMonth()+me);break;case"y":L.setFullYear(L.getFullYear()+me);break}P.expiresAt=L.toISOString()}},k=()=>{P.customExpireDate&&(P.expiresAt=new Date(P.customExpireDate).toISOString())},_=$=>$?new Date($).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",m=$=>$?new Date($){if(!$)return null;const L=new Date,J=new Date($)-L,de=Math.ceil(J/(1e3*60*60*24));return J<0?{text:"已过期",class:"text-red-600"}:de<=7?{text:`${de} 天后过期`,class:"text-orange-600"}:de<=30?{text:`${de} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(de/30)} 个月后过期`,class:"text-green-600"}},R=()=>{C.value=!0,B("save",{keyId:V.apiKey.id,expiresAt:P.expiresAt})},S=async()=>{let $=!0;window.showConfirm?$=await window.showConfirm("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${V.apiKey.activationDays||(V.apiKey.activationUnit==="hours"?24:30)} ${V.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消"):$=confirm(`确定要立即激活此 API Key 吗?激活后将在 ${V.apiKey.activationDays||(V.apiKey.activationUnit==="hours"?24:30)} ${V.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`),$&&(C.value=!0,B("save",{keyId:V.apiKey.id,activateNow:!0}))};return N({resetSaving:()=>{C.value=!1}}),($,L)=>(i(),ye(Me,{to:"body"},[b.show?(i(),d("div",ti,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:L[0]||(L[0]=re=>$.$emit("close"))}),e("div",si,[e("div",ai,[e("div",ri,[L[6]||(L[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[L[5]||(L[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",oi,' 为 "'+u(b.apiKey.name||"API Key")+'" 设置新的过期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:L[1]||(L[1]=re=>$.$emit("close"))},L[7]||(L[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",li,[e("div",ni,[e("div",ii,[e("div",null,[L[12]||(L[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",di,[b.apiKey.expirationMode==="activation"&&!b.apiKey.isActivated?(i(),d(ae,{key:0},[L[8]||(L[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),L[9]||(L[9]=A(" 未激活 ",-1)),e("span",ui," (激活后 "+u(b.apiKey.activationDays||(b.apiKey.activationUnit==="hours"?24:30))+" "+u(b.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):b.apiKey.expiresAt?(i(),d(ae,{key:1},[A(u(_(b.apiKey.expiresAt))+" ",1),s(b.apiKey.expiresAt)?(i(),d("span",{key:0,class:j(["ml-2 text-xs font-normal",s(b.apiKey.expiresAt).class])}," ("+u(s(b.apiKey.expiresAt).text)+") ",3)):h("",!0)],64)):(i(),d(ae,{key:2},[L[10]||(L[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),L[11]||(L[11]=A(" 永不过期 ",-1))],64))])]),e("div",ci,[e("i",{class:j(["fas fa-hourglass-half text-lg",b.apiKey.expiresAt&&m(b.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),b.apiKey.expirationMode==="activation"&&!b.apiKey.isActivated?(i(),d("div",gi,[e("button",{class:"w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-3 font-semibold text-white transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow-lg",onClick:S},[L[13]||(L[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),A(" 立即激活 (激活后 "+u(b.apiKey.activationDays||(b.apiKey.activationUnit==="hours"?24:30))+" "+u(b.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",pi,[L[14]||(L[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),A(" 点击立即激活此 API Key,激活后将在 "+u(b.apiKey.activationDays||(b.apiKey.activationUnit==="hours"?24:30))+" "+u(b.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):h("",!0),e("div",null,[L[16]||(L[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",mi,[(i(),d(ae,null,oe(q,re=>e("button",{key:re.value,class:j(["rounded-lg px-3 py-2 text-sm font-medium transition-all",P.expireDuration===re.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:J=>Y(re.value)},u(re.label),11,xi)),64)),e("button",{class:j(["rounded-lg px-3 py-2 text-sm font-medium transition-all",P.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:L[2]||(L[2]=re=>Y("custom"))},L[15]||(L[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),A(" 自定义 ",-1)]),2)])]),P.expireDuration==="custom"?(i(),d("div",yi,[L[17]||(L[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),T(e("input",{"onUpdate:modelValue":L[3]||(L[3]=re=>P.customExpireDate=re),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:U.value,type:"datetime-local",onChange:k},null,40,fi),[[se,P.customExpireDate]]),L[18]||(L[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):h("",!0),P.expiresAt!==b.apiKey.expiresAt?(i(),d("div",bi,[e("div",vi,[e("div",null,[L[21]||(L[21]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),A(" 新的过期时间 ")],-1)),e("p",ki,[P.expiresAt?(i(),d(ae,{key:0},[A(u(_(P.expiresAt))+" ",1),s(P.expiresAt)?(i(),d("span",{key:0,class:j(["ml-2 text-xs font-normal",s(P.expiresAt).class])}," ("+u(s(P.expiresAt).text)+") ",3)):h("",!0)],64)):(i(),d(ae,{key:1},[L[19]||(L[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),L[20]||(L[20]=A(" 永不过期 ",-1))],64))])]),L[22]||(L[22]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):h("",!0),e("div",wi,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:L[4]||(L[4]=re=>$.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:C.value||P.expiresAt===b.apiKey.expiresAt,onClick:R},[C.value?(i(),d("div",Ai)):(i(),d("i",$i)),A(" "+u(C.value?"保存中...":"保存更改"),1)],8,hi)])])])])):h("",!0)]))}},Ii=De(Ci,[["__scopeId","data-v-fb30c1d3"]]),Ki={class:"w-full"},Li={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},Di={key:1,class:"space-y-1.5"},_i={class:"flex items-center justify-between text-[11px] font-medium"},Ti={class:"text-gray-700 dark:text-gray-200"},Si={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},Mi={class:"relative z-10 flex h-full items-center justify-between px-3"},Ui={class:"flex items-center gap-1.5"},Pi={class:"flex items-center gap-1.5"},Vi={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},Ri={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:b=>["daily","opus","window","total"].includes(b)},variant:{type:String,default:"full",validator:b=>["full","compact"].includes(b)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(b){const N=b,c=E(()=>N.variant==="compact"),V=E(()=>{if(!N.limit||N.limit<=0)return 0;const _=N.current/N.limit*100;return Math.min(_,100)}),B=E(()=>{switch(N.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),C=E(()=>{switch(N.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),P=E(()=>{const _=V.value;return N.type==="daily"?_>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":_>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":N.type==="opus"?_>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":_>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":N.type==="window"?_>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":_>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":N.type==="total"?_>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":_>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),q=E(()=>{const _=V.value;if(_>=95)return"bg-rose-500 dark:bg-rose-400";if(_>=80)return"bg-amber-400 dark:bg-amber-300";switch(N.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-slate-400 dark:bg-slate-500"}}),U=E(()=>{const _=V.value;if(_>=95)return"text-rose-600 dark:text-rose-300";if(_>=80)return"text-amber-600 dark:text-amber-300";switch(N.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),Q=E(()=>{const _=V.value;let m="";if(_>=90)m="text-red-700 dark:text-red-400";else if(_>=70)m="text-orange-700 dark:text-orange-400";else switch(N.type){case"daily":m="text-green-700 dark:text-green-400";break;case"opus":m="text-purple-700 dark:text-purple-400";break;case"window":m="text-blue-700 dark:text-blue-400";break;default:m="text-gray-600 dark:text-gray-400"}let s="";switch(N.type){case"daily":s="fas fa-calendar-day";break;case"opus":s="fas fa-gem";break;case"window":s="fas fa-clock";break;case"total":s="fas fa-wallet";break;default:s="fas fa-infinity"}return`${s} ${m}`}),Y=E(()=>{if(V.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(N.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),k=E(()=>{const _=V.value;if(_>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(_>=90)return"text-red-700 dark:text-red-300";if(_>=70)return"text-orange-700 dark:text-orange-300";switch(N.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(_,m)=>(i(),d("div",Ki,[!b.limit||b.limit<=0?(i(),d("div",Li,m[0]||(m[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):c.value?(i(),d("div",Di,[e("div",_i,[e("div",{class:j(["flex items-center gap-1.5",U.value])},[e("i",{class:j(["text-[11px]",Q.value])},null,2),e("span",null,u(b.label),1)],2),e("span",Ti,"$"+u(b.current.toFixed(2))+" / $"+u(b.limit.toFixed(2)),1)]),e("div",Si,[e("div",{class:j(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",q.value]),style:gt({width:V.value+"%"})},null,6)])])):(i(),d("div",{key:2,class:j(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",B.value])},[e("div",{class:j(["absolute inset-0",C.value])},null,2),e("div",{class:j(["absolute inset-0 h-full transition-all duration-500 ease-out",P.value]),style:gt({width:V.value+"%"})},null,6),m[1]||(m[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",Mi,[e("div",Ui,[e("i",{class:j(["text-xs",Q.value])},null,2),e("span",{class:j(["text-xs font-semibold",Y.value])},u(b.label),3)]),e("div",Pi,[e("span",{class:j(["text-xs font-bold tabular-nums",k.value])}," $"+u(b.current.toFixed(2))+" / $"+u(b.limit.toFixed(2)),3)])]),b.showShine&&V.value>0?(i(),d("div",Vi)):h("",!0)],2))]))}},Se=De(Ri,[["__scopeId","data-v-8a01dc56"]]),Ei={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Oi={class:"modal-content relative mx-auto flex max-h-[90vh] w-[95%] max-w-5xl flex-col p-4 sm:w-full sm:p-6 md:p-8"},ji={class:"mb-4 flex items-center justify-between sm:mb-6"},Gi={class:"flex items-center gap-2 sm:gap-3"},qi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},zi={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},Fi={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},Bi={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-blue-800/20"},Wi={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Ni={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Hi={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4 dark:border-green-700 dark:from-green-900/20 dark:to-green-800/20"},Yi={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Qi={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Ji={class:"rounded-lg border border-yellow-200 bg-gradient-to-br from-yellow-50 to-yellow-100 p-4 dark:border-yellow-700 dark:from-yellow-900/20 dark:to-yellow-800/20"},Xi={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Zi={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},ed={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4 dark:border-purple-700 dark:from-purple-900/20 dark:to-purple-800/20"},td={class:"space-y-1 text-sm"},sd={class:"flex justify-between"},ad={class:"font-semibold text-gray-900 dark:text-gray-100"},rd={class:"flex justify-between"},od={class:"font-semibold text-gray-900 dark:text-gray-100"},ld={class:"mb-6"},nd={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},id={class:"flex items-center justify-between"},dd={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ud={class:"flex items-center justify-between"},cd={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},gd={key:0,class:"flex items-center justify-between"},pd={class:"text-sm font-semibold text-purple-600"},md={key:1,class:"flex items-center justify-between"},xd={class:"text-sm font-semibold text-purple-600"},yd={key:0,class:"mb-6"},fd={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},bd={key:0,class:"space-y-1.5"},vd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},kd={key:1,class:"space-y-1.5"},wd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},hd={key:2,class:"space-y-1.5"},Ad={class:"text-right text-xs text-gray-500 dark:text-gray-400"},$d={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Cd={class:"font-semibold text-purple-600 dark:text-purple-300"},Id={key:4,class:"space-y-2"},Kd={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close"],setup(b,{emit:N}){const c=b,V=N,B=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.total)==null?void 0:o.requests)||0}),C=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.daily)==null?void 0:o.requests)||0}),P=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.total)==null?void 0:o.tokens)||0}),q=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.daily)==null?void 0:o.tokens)||0}),U=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.total)==null?void 0:o.cost)||0}),Q=E(()=>c.apiKey.dailyCost||0),Y=E(()=>c.apiKey.totalCostLimit||0),k=E(()=>c.apiKey.weeklyOpusCost||0),_=E(()=>c.apiKey.weeklyOpusCostLimit||0),m=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.total)==null?void 0:o.inputTokens)||0}),s=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.total)==null?void 0:o.outputTokens)||0}),R=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.total)==null?void 0:o.cacheCreateTokens)||0}),S=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.total)==null?void 0:o.cacheReadTokens)||0}),z=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.averages)==null?void 0:o.rpm)||0}),$=E(()=>{var v,o;return((o=(v=c.apiKey.usage)==null?void 0:v.averages)==null?void 0:o.tpm)||0}),L=E(()=>c.apiKey.dailyCostLimit>0||c.apiKey.totalCostLimit>0||c.apiKey.concurrencyLimit>0||c.apiKey.weeklyOpusCostLimit>0||c.apiKey.rateLimitWindow>0||c.apiKey.tokenLimit>0),re=E(()=>!c.apiKey.dailyCostLimit||c.apiKey.dailyCostLimit===0?0:Q.value/c.apiKey.dailyCostLimit*100),J=E(()=>!Y.value||Y.value===0?0:U.value/Y.value*100),de=E(()=>!_.value||_.value===0?0:k.value/_.value*100),me=v=>!v&&v!==0?"0":v.toLocaleString("zh-CN"),F=v=>v>=1e6?(v/1e6).toFixed(1)+"M":v>=1e3?(v/1e3).toFixed(1)+"K":v.toString(),be=()=>{V("close")};return(v,o)=>(i(),ye(Me,{to:"body"},[b.show?(i(),d("div",Ei,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:be}),e("div",Oi,[e("div",ji,[e("div",Gi,[o[0]||(o[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",qi," 使用统计详情 - "+u(b.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:be},o[1]||(o[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",zi,[e("div",Fi,[e("div",Bi,[o[2]||(o[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",Wi,u(me(B.value)),1),e("div",Ni," 今日: "+u(me(C.value))+" 次 ",1)]),e("div",Hi,[o[3]||(o[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",Yi,u(F(P.value)),1),e("div",Qi," 今日: "+u(F(q.value)),1)]),e("div",Ji,[o[4]||(o[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",Xi," $"+u(U.value.toFixed(4)),1),e("div",Zi," 今日: $"+u(Q.value.toFixed(4)),1)]),e("div",ed,[o[7]||(o[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",td,[e("div",sd,[o[5]||(o[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",ad,u(z.value),1)]),e("div",rd,[o[6]||(o[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",od,u($.value),1)])])])]),e("div",ld,[o[12]||(o[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),A(" Token 使用分布 ")],-1)),e("div",nd,[e("div",id,[o[8]||(o[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",dd,u(F(m.value)),1)]),e("div",ud,[o[9]||(o[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",cd,u(F(s.value)),1)]),R.value>0?(i(),d("div",gd,[o[10]||(o[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",pd,u(F(R.value)),1)])):h("",!0),S.value>0?(i(),d("div",md,[o[11]||(o[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",xd,u(F(S.value)),1)])):h("",!0)])]),L.value?(i(),d("div",yd,[o[15]||(o[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),A(" 限制设置 ")],-1)),e("div",fd,[b.apiKey.dailyCostLimit>0?(i(),d("div",bd,[ne(Se,{current:Q.value,label:"每日费用限制",limit:b.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",vd," 已使用 "+u(Math.min(re.value,100).toFixed(1))+"% ",1)])):h("",!0),b.apiKey.weeklyOpusCostLimit>0?(i(),d("div",kd,[ne(Se,{current:k.value,label:"Opus 周费用限制",limit:b.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",wd," 已使用 "+u(Math.min(de.value,100).toFixed(1))+"% ",1)])):h("",!0),b.apiKey.totalCostLimit>0?(i(),d("div",hd,[ne(Se,{current:U.value,label:"总费用限制",limit:b.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",Ad," 已使用 "+u(Math.min(J.value,100).toFixed(1))+"% ",1)])):h("",!0),b.apiKey.concurrencyLimit>0?(i(),d("div",$d,[o[13]||(o[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Cd,u(b.apiKey.currentConcurrency||0)+" / "+u(b.apiKey.concurrencyLimit),1)])):h("",!0),b.apiKey.rateLimitWindow>0?(i(),d("div",Id,[o[14]||(o[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),A(" 时间窗口限制 ")],-1)),ne(zs,{"cost-limit":b.apiKey.rateLimitCost,"current-cost":b.apiKey.currentWindowCost,"current-requests":b.apiKey.currentWindowRequests,"current-tokens":b.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":b.apiKey.rateLimitWindow,"request-limit":b.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":b.apiKey.tokenLimit,"window-end-time":b.apiKey.windowEndTime,"window-remaining-seconds":b.apiKey.windowRemainingSeconds,"window-start-time":b.apiKey.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"])])):h("",!0)])])):h("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:be}," 关闭 ")])])])):h("",!0)]))}},Ld=De(Kd,[["__scopeId","data-v-da99842f"]]),Dd={class:"tab-content"},_d={class:"card p-4 sm:p-6"},Td={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Sd={class:"border-b border-gray-200 dark:border-gray-700"},Md={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},Ud={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},Pd={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},Vd={key:0,class:"tab-panel"},Rd={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Ed={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Od={class:"group relative min-w-[140px]"},jd={key:0,class:"flex items-center"},Gd={class:"group relative min-w-[140px]"},qd={class:"relative"},zd={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-purple-500 text-xs text-white shadow-sm"},Fd={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},Bd={class:"sm:w-44"},Wd={class:"group relative flex-1"},Nd={class:"relative flex items-center"},Hd=["placeholder"],Yd={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Qd=["disabled"],Jd={class:"relative"},Xd={class:"relative"},Zd={key:0,class:"py-12 text-center"},e0={key:1,class:"py-12 text-center"},t0={key:2,class:"table-wrapper hidden md:block"},s0={class:"table-container"},a0={class:"w-full table-fixed"},r0={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},o0={key:0,class:"w-[50px] px-3 py-4 text-left"},l0={class:"flex items-center"},n0=["indeterminate"],i0={key:1,class:"fas fa-sort ml-1 text-gray-400"},d0={key:1,class:"fas fa-sort ml-1 text-gray-400"},u0={key:1,class:"fas fa-sort ml-1 text-gray-400"},c0={key:1,class:"fas fa-sort ml-1 text-gray-400"},g0={key:1,class:"fas fa-sort ml-1 text-gray-400"},p0={key:1,class:"fas fa-sort ml-1 text-gray-400"},m0={key:1,class:"fas fa-sort ml-1 text-gray-400"},x0={key:1,class:"fas fa-sort ml-1 text-gray-400"},y0={key:0,class:"px-3 py-3"},f0={class:"flex items-center"},b0=["value"],v0={class:"px-3 py-3"},k0={class:"min-w-0"},w0=["title"],h0={key:0,class:"mt-1 text-xs text-red-600"},A0={class:"px-3 py-3"},$0={class:"space-y-1"},C0={key:0,class:"flex items-center gap-1 text-xs"},I0={class:"truncate text-gray-600 dark:text-gray-400"},K0={key:1,class:"flex items-center gap-1 text-xs"},L0={class:"truncate text-gray-600 dark:text-gray-400"},D0={key:2,class:"flex items-center gap-1 text-xs"},_0={class:"truncate text-gray-600 dark:text-gray-400"},T0={key:3,class:"flex items-center gap-1 text-xs"},S0={class:"truncate text-gray-600 dark:text-gray-400"},M0={key:4,class:"flex items-center gap-1 text-xs"},U0={class:"truncate text-gray-600 dark:text-gray-400"},P0={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},V0={class:"px-3 py-3"},R0={class:"flex flex-wrap gap-1"},E0={key:0,class:"text-xs text-gray-400"},O0={class:"whitespace-nowrap px-3 py-3"},j0={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},G0={class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},q0={class:"px-2 py-2",style:{"font-size":"12px"}},z0={class:"flex flex-col gap-2"},F0={key:2,class:"space-y-1.5"},B0={class:"flex items-center justify-between text-[10px]"},W0={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},N0={class:"font-medium"},H0={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Y0={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Q0={class:"flex items-center justify-end gap-1"},J0={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},X0={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Z0={class:"flex items-center justify-end gap-1"},eu={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},tu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},su={class:"flex flex-col leading-tight"},au=["title"],ru={key:1,class:"text-gray-400",style:{"font-size":"13px"}},ou=["title"],lu={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},nu={key:3,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},iu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},du={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},uu={class:"inline-flex items-center gap-1.5"},cu={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},gu={key:1},pu=["onClick"],mu=["onClick"],xu=["onClick"],yu=["onClick"],fu={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},bu={class:"flex gap-1"},vu=["onClick"],ku=["onClick"],wu=["onClick"],hu=["onClick"],Au=["title","onClick"],$u={class:"ml-1 hidden xl:inline"},Cu=["onClick"],Iu={key:0},Ku={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},Lu={key:0,class:"py-4 text-center"},Du={class:"space-y-4"},_u={class:"mb-4 flex items-center justify-between"},Tu={class:"flex items-center gap-2"},Su={key:0,class:"rounded-full bg-gray-100 px-2 py-1 text-xs text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Mu={class:"flex items-center gap-1"},Uu={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},Pu=["onClick"],Vu={key:0,class:"py-8 text-center"},Ru={class:"mb-3 flex items-center justify-center gap-2"},Eu=["onClick"],Ou={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},ju={class:"mb-3 flex items-start justify-between"},Gu={class:"flex-1"},qu={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},zu={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},Fu={class:"mb-3 space-y-2"},Bu={class:"flex items-center justify-between text-sm"},Wu={class:"font-semibold text-gray-900 dark:text-gray-100"},Nu={class:"flex items-center justify-between text-sm"},Hu={class:"font-semibold text-green-600"},Yu={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},Qu={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ju={class:"font-medium"},Xu={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Zu={class:"font-medium"},ec={key:0,class:"flex items-center justify-between text-xs text-purple-600"},tc={class:"font-medium"},sc={key:1,class:"flex items-center justify-between text-xs text-purple-600"},ac={class:"font-medium"},rc={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},oc={class:"mt-1 text-right"},lc={class:"text-xs font-medium text-indigo-600"},nc={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},ic={class:"flex items-center justify-between text-sm"},dc={class:"flex gap-4 text-xs"},uc={class:"text-gray-600 dark:text-gray-400"},cc={class:"font-semibold text-gray-800 dark:text-gray-200"},gc={class:"text-gray-600 dark:text-gray-400"},pc={class:"font-semibold text-gray-800 dark:text-gray-200"},mc={key:3,class:"space-y-3 md:hidden"},xc={class:"mb-3 flex items-start justify-between"},yc={class:"flex items-center gap-3"},fc=["value"],bc={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},vc={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},kc={class:"mb-3 space-y-1.5"},wc={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},hc={class:"text-gray-600 dark:text-gray-400"},Ac={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},$c={class:"text-gray-600 dark:text-gray-400"},Cc={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},Ic={class:"text-gray-600 dark:text-gray-400"},Kc={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},Lc={class:"text-gray-600 dark:text-gray-400"},Dc={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},_c={class:"text-gray-600 dark:text-gray-400"},Tc={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},Sc={key:6,class:"text-xs text-red-600"},Mc={class:"mb-3 space-y-2"},Uc={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},Pc={class:"mb-2 flex items-center justify-between"},Vc={class:"text-xs text-gray-600 dark:text-gray-400"},Rc=["onClick"],Ec={class:"grid grid-cols-2 gap-3"},Oc={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},jc={class:"text-sm font-semibold text-green-600"},Gc={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},qc={class:"flex items-center justify-between"},zc={class:"font-medium text-gray-700 dark:text-gray-300"},Fc={class:"mt-1 flex items-center justify-between"},Bc=["title"],Wc={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Nc={key:1,class:"text-gray-400 dark:text-gray-500"},Hc={class:"space-y-2"},Yc={key:2,class:"space-y-2"},Qc={class:"flex items-center justify-between text-xs"},Jc={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},Xc={class:"font-medium"},Zc={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},eg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},tg={class:"mb-1 flex justify-between"},sg={class:"flex items-center justify-between"},ag={class:"flex items-center gap-1"},rg=["onClick"],og={key:0,class:"mb-3 flex flex-wrap gap-1"},lg={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},ng=["onClick"],ig=["onClick"],dg=["onClick"],ug=["onClick"],cg=["onClick"],gg={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},pg={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},mg={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},xg={class:"flex items-center gap-2"},yg=["value"],fg={class:"flex items-center gap-2"},bg=["disabled"],vg={class:"flex items-center gap-1"},kg={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},wg=["onClick"],hg={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Ag=["disabled"],$g={key:1,class:"tab-panel"},Cg={key:0,class:"py-12 text-center"},Ig={key:1,class:"py-12 text-center"},Kg={key:2},Lg={class:"mb-4 flex justify-end"},Dg={class:"table-wrapper"},_g={class:"table-container"},Tg={class:"w-full table-fixed"},Sg={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},Mg={key:0,class:"w-[15%] min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Ug={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Pg={class:"px-3 py-3"},Vg={class:"flex items-center"},Rg={class:"min-w-0"},Eg=["title"],Og={class:"px-3 py-3"},jg={class:"space-y-1"},Gg={key:0,class:"flex items-center gap-1 text-xs"},qg={key:1,class:"flex items-center gap-1 text-xs"},zg={key:2,class:"flex items-center gap-1 text-xs"},Fg={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Bg={key:0,class:"px-3 py-3"},Wg={class:"text-xs"},Ng={key:0,class:"text-blue-600"},Hg={key:1,class:"text-green-600"},Yg={key:2,class:"text-gray-500 dark:text-gray-400"},Qg={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Jg={class:"px-3 py-3"},Xg={class:"text-xs"},Zg={key:0,class:"text-blue-600"},ep={key:1,class:"text-green-600"},tp={key:2,class:"text-gray-500 dark:text-gray-400"},sp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},ap={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},rp={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},op={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},lp={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},np={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},ip={class:"flex items-center justify-end gap-1"},dp={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},up={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},cp={class:"flex flex-col leading-tight"},gp=["title"],pp={key:1,class:"text-gray-400",style:{"font-size":"13px"}},mp=["title"],xp={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},yp={key:3,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},fp={class:"operations-column operations-cell px-3 py-3"},bp={class:"flex items-center gap-2"},vp=["onClick"],kp=["onClick"],ls=16,wp={__name:"ApiKeysView",setup(b){const N=_t(),c=qs(),V=M([]),B=E(()=>{var a;return((a=c.oemSettings)==null?void 0:a.ldapEnabled)||!1}),C=M([]),P=M(!1),q=M(!1),U=M(!1),Q=M(!1),Y=M("today"),k=Be({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),_=E(()=>U.value),m=()=>{U.value=!U.value,U.value||(C.value=[],P.value=!1,q.value=!1)},s=E(()=>[{value:"today",label:"今日",icon:"fa-calendar-day"},{value:"7days",label:"最近7天",icon:"fa-calendar-week"},{value:"30days",label:"最近30天",icon:"fa-calendar-alt"},{value:"all",label:"全部时间",icon:"fa-infinity"},{value:"custom",label:"自定义范围",icon:"fa-calendar-check"}]),R=M("active"),S=M([]),z=M(!1),$=M("periodCost"),L=M("desc"),re=M({}),J=M({}),de=M({}),me=M([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),F=M({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),be=M(null),v=M(null),o=M(!1),n=M(null),x=M(""),K=M([]),g=M(""),l=M("apiKey"),y=E(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),ue=E(()=>{const a=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return K.value.forEach(t=>{a.push({value:t,label:t,icon:"fa-tag"})}),a}),ge=E(()=>x.value?V.value.filter(a=>a.tags&&a.tags.includes(x.value)).length:0),Z=M(1),ce=M((()=>{const a=localStorage.getItem("apiKeysPageSize");if(a){const t=parseInt(a,10);if([10,20,50,100].includes(t))return t}return 10})()),ee=[10,20,50,100],H=M(!1),xe=M(!1),Ue=M(!1),le=M(!1),Le=M(!1),st=M(!1),St=M(null),Mt=M(null),Ut=M(null),Pt=M([]),is=a=>{const t=new Set,p=(...D)=>{D.forEach(W=>{if(typeof W!="string")return;const I=W.trim();I&&t.add(I)})},r=D=>typeof D!="string"?"":D.replace(/^⚠️\s*/,"").replace(/^🔒\s*/,"").trim(),f=(D,W)=>{const I=r(W);p(D,W,I),I&&p(`${D} ${I}`)};return(a.claudeAccountId||a.claudeConsoleAccountId)&&f("Claude",mt(a)),a.geminiAccountId&&f("Gemini",xt(a)),a.openaiAccountId&&f("OpenAI",yt(a)),a.bedrockAccountId&&f("Bedrock",ft(a)),a.droidAccountId&&f("Droid",bt(a)),!a.claudeAccountId&&!a.claudeConsoleAccountId&&!a.geminiAccountId&&!a.openaiAccountId&&!a.bedrockAccountId&&!a.droidAccountId&&p("共享池"),Array.from(t)},Ge=E(()=>{let a=V.value;if(x.value&&(a=V.value.filter(p=>p.tags&&p.tags.includes(x.value))),g.value){const p=g.value.toLowerCase().trim();a=a.filter(r=>{if(l.value==="bindingAccount"){const D=is(r);return D.length===0?!1:D.some(W=>W.toLowerCase().includes(p))}const f=r.name&&r.name.toLowerCase().includes(p);if(B.value){const D=r.ownerDisplayName&&r.ownerDisplayName.toLowerCase().includes(p);return f||D}return f})}return $.value?[...a].sort((p,r)=>{let f=p[$.value],D=r[$.value];return $.value==="status"?(f=p.isActive?1:0,D=r.isActive?1:0):$.value==="periodRequests"?(f=it(p),D=it(r)):$.value==="periodCost"?(f=vt(p),D=vt(r)):$.value==="periodTokens"?(f=dt(p),D=dt(r)):$.value==="dailyCost"?(f=p.dailyCost||0,D=r.dailyCost||0):$.value==="totalCost"?(f=p.totalCost||0,D=r.totalCost||0):($.value==="createdAt"||$.value==="expiresAt"||$.value==="lastUsedAt")&&(f=f?new Date(f).getTime():0,D=D?new Date(D).getTime():0),fD?L.value==="asc"?1:-1:0}):a}),Oe=E(()=>{const a=Ge.value.length;return Math.ceil(a/ce.value)||0}),We=E(()=>{const a=[],t=Z.value,p=Oe.value;if(p<=7)for(let r=1;r<=p;r++)a.push(r);else{let r=Math.max(1,t-2),f=Math.min(p,t+2);t<=3?f=5:t>=p-2&&(r=p-4);for(let D=r;D<=f;D++)a.push(D)}return a}),Vt=E(()=>{const a=We.value;return a.length===0?!1:a[0]>1}),Rt=E(()=>{const a=We.value;return a.length===0?!1:a[a.length-1]{const a=We.value;return a.length===0?!1:Vt.value&&a[0]>2}),us=E(()=>{const a=We.value;return a.length===0?!1:Rt.value&&a[a.length-1]{const a=(Z.value-1)*ce.value,t=a+ce.value;return Ge.value.slice(a,t)}),at=async()=>{var a,t;try{const[p,r,f,D,W,I,te,fe,w]=await Promise.all([G.get("/admin/claude-accounts"),G.get("/admin/claude-console-accounts"),G.get("/admin/gemini-accounts"),G.get("/admin/gemini-api-accounts"),G.get("/admin/openai-accounts"),G.get("/admin/openai-responses-accounts"),G.get("/admin/bedrock-accounts"),G.get("/admin/droid-accounts"),G.get("/admin/account-groups")]),ke=[];p.success&&((a=p.data)==null||a.forEach(X=>{ke.push({...X,platform:"claude-oauth",isDedicated:X.accountType==="dedicated"})})),r.success&&((t=r.data)==null||t.forEach(X=>{ke.push({...X,platform:"claude-console",isDedicated:X.accountType==="dedicated"})})),F.value.claude=ke;const pe=[];if(f.success&&(f.data||[]).forEach(X=>{pe.push({...X,platform:"gemini",isDedicated:X.accountType==="dedicated"})}),D.success&&(D.data||[]).forEach(X=>{pe.push({...X,platform:"gemini-api",isDedicated:X.accountType==="dedicated"})}),F.value.gemini=pe,W.success&&(F.value.openai=(W.data||[]).map(X=>({...X,isDedicated:X.accountType==="dedicated"}))),I.success&&(F.value.openaiResponses=(I.data||[]).map(X=>({...X,isDedicated:X.accountType==="dedicated"}))),te.success&&(F.value.bedrock=(te.data||[]).map(X=>({...X,isDedicated:X.accountType==="dedicated"}))),fe.success&&(F.value.droid=(fe.data||[]).map(X=>({...X,platform:"droid",isDedicated:X.accountType==="dedicated"}))),w.success){const X=w.data||[];F.value.claudeGroups=X.filter(Ke=>Ke.platform==="claude"),F.value.geminiGroups=X.filter(Ke=>Ke.platform==="gemini"),F.value.openaiGroups=X.filter(Ke=>Ke.platform==="openai"),F.value.droidGroups=X.filter(Ke=>Ke.platform==="droid")}}catch{}},Ce=async()=>{Q.value=!0;try{let a={};k.type==="custom"&&k.customStart&&k.customEnd?(a.startDate=k.customStart,a.endDate=k.customEnd,a.timeRange="custom"):k.preset==="all"?a.timeRange="all":a.timeRange=k.preset;const t=new URLSearchParams(a).toString(),p=await G.get(`/admin/api-keys?${t}`);if(p.success){V.value=p.data||[];const r=new Set;V.value.forEach(f=>{f.tags&&Array.isArray(f.tags)&&f.tags.forEach(D=>r.add(D))}),K.value=Array.from(r).sort()}}catch{O("加载 API Keys 失败","error")}finally{Q.value=!1}},rt=async()=>{R.value="deleted",z.value=!0;try{const a=await G.get("/admin/api-keys/deleted");a.success&&(S.value=a.apiKeys||[])}catch{O("加载已删除的 API Keys 失败","error")}finally{z.value=!1}},Pe=a=>{$.value===a?L.value=L.value==="asc"?"desc":"asc":($.value=a,L.value="asc")},pt=a=>!a&&a!==0?"0":a.toLocaleString("zh-CN"),Ae=a=>!a&&a!==0?"0":a>=1e6?(a/1e6).toFixed(1)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString(),Ne=a=>{if(!a)return"未知账户";if(a.startsWith("group:")){const I=a.substring(6),te=F.value.claudeGroups.find(pe=>pe.id===I);if(te)return`分组-${te.name}`;const fe=F.value.geminiGroups.find(pe=>pe.id===I);if(fe)return`分组-${fe.name}`;const w=F.value.openaiGroups.find(pe=>pe.id===I);if(w)return`分组-${w.name}`;const ke=F.value.droidGroups.find(pe=>pe.id===I);return ke?`分组-${ke.name}`:`分组-${I.substring(0,8)}`}const t=F.value.claude.find(I=>I.id===a);if(t)return`${t.name}`;if(a.startsWith("api:")){const I=a.replace("api:",""),te=F.value.gemini.find(fe=>fe.id===I&&fe.platform==="gemini-api");return te?`${te.name}`:`${I.substring(0,8)}`}const p=F.value.gemini.find(I=>I.id===a);if(p)return`${p.name}`;if(a.startsWith("responses:")){const I=a.replace("responses:",""),te=F.value.openaiResponses.find(fe=>fe.id===I);return te?`${te.name}`:`${I.substring(0,8)}`}const r=F.value.openai.find(I=>I.id===a);if(r)return`${r.name}`;const f=F.value.openaiResponses.find(I=>I.id===a);if(f)return`${f.name}`;const D=F.value.bedrock.find(I=>I.id===a);if(D)return`${D.name}`;const W=F.value.droid.find(I=>I.id===a);return W?`${W.name}`:`${a.substring(0,8)}`},mt=a=>{if(a.claudeAccountId){const t=Ne(a.claudeAccountId);if(a.claudeAccountId.startsWith("group:"))return t;const p=F.value.claude.find(r=>r.id===a.claudeAccountId);return p?p.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(a.claudeConsoleAccountId){const t=F.value.claude.find(p=>p.id===a.claudeConsoleAccountId&&p.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},xt=a=>{if(a.geminiAccountId){const t=Ne(a.geminiAccountId);if(a.geminiAccountId.startsWith("group:"))return t;if(a.geminiAccountId.startsWith("api:")){const r=a.geminiAccountId.replace("api:",""),f=F.value.gemini.find(D=>D.id===r&&D.platform==="gemini-api");return f?f.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const p=F.value.gemini.find(r=>r.id===a.geminiAccountId);return p?p.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},yt=a=>{if(a.openaiAccountId){const t=Ne(a.openaiAccountId);if(a.openaiAccountId.startsWith("group:"))return t;let p=null;if(a.openaiAccountId.startsWith("responses:")){const r=a.openaiAccountId.replace("responses:","");p=F.value.openaiResponses.find(f=>f.id===r)}else p=F.value.openai.find(r=>r.id===a.openaiAccountId);return p?p.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ft=a=>{if(a.bedrockAccountId){const t=Ne(a.bedrockAccountId);if(a.bedrockAccountId.startsWith("group:"))return t;const p=F.value.bedrock.find(r=>r.id===a.bedrockAccountId);return p?p.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},bt=a=>{if(a.droidAccountId){const t=Ne(a.droidAccountId);if(a.droidAccountId.startsWith("group:"))return t;const p=F.value.droid.find(r=>r.id===a.droidAccountId);return p?p.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ot=a=>a?new Date(a)!a||ot(a)?!1:(new Date(a)-new Date)/(1e3*60*60*24)<=7,Et=a=>a?new Date(a).toLocaleDateString("zh-CN"):"",cs=async a=>{re.value[a]?re.value[a]=!1:(re.value[a]=!0,de.value[a]||qt(a),await nt(a,!0))},nt=async(a,t=!1)=>{if(!t&&J.value[a]&&J.value[a].length>0)return;const p=Ve(a);try{let r=`/admin/api-keys/${a}/model-stats`;const f=new URLSearchParams;if(p.customStart&&p.customEnd)f.append("startDate",p.customStart),f.append("endDate",p.customEnd),f.append("period","custom");else{const W=p.preset==="today"||p.preset==="7days"?"daily":"monthly";f.append("period",W)}r+="?"+f.toString();const D=await G.get(r);D.success&&(J.value[a]=D.data||[])}catch{O("加载模型统计失败","error"),J.value[a]=[]}},Ot=(a,t)=>{const p=t.reduce((r,f)=>r+(f.allTokens||0),0);return p===0?0:Math.round(a/p*100)},gs=a=>a.formatted&&a.formatted.total?a.formatted.total:a.cost!==void 0?`$${a.cost.toFixed(6)}`:"$0.000000",it=a=>{var t,p,r,f,D,W;if(k.type==="custom"){if(a.usage){if(a.usage.custom&&a.usage.custom.requests!==void 0)return a.usage.custom.requests;if(a.usage.total&&a.usage.total.requests!==void 0)return a.usage.total.requests}return 0}else{if(k.preset==="today")return((p=(t=a.usage)==null?void 0:t.daily)==null?void 0:p.requests)||0;if(k.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].requests!==void 0?a.usage["7days"].requests:0;if(k.preset==="30days"){if(a.usage){if(a.usage["30days"]&&a.usage["30days"].requests!==void 0)return a.usage["30days"].requests;if(a.usage.monthly&&a.usage.monthly.requests!==void 0)return a.usage.monthly.requests}return 0}else return k.preset==="all"?a.usage&&a.usage.all&&a.usage.all.requests!==void 0?a.usage.all.requests:((f=(r=a.usage)==null?void 0:r.total)==null?void 0:f.requests)||0:((W=(D=a.usage)==null?void 0:D.total)==null?void 0:W.requests)||0}},jt=a=>{if(k.type==="custom"){if(a.usage){if(a.usage.custom&&a.usage.custom.cost!==void 0)return a.usage.custom.cost;if(a.usage.total&&a.usage.total.cost!==void 0)return a.usage.total.cost}return 0}else{if(k.preset==="today")return a.dailyCost||0;if(k.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].cost!==void 0?a.usage["7days"].cost:a.weeklyCost||a.periodCost||0;if(k.preset==="30days"){if(a.usage){if(a.usage["30days"]&&a.usage["30days"].cost!==void 0)return a.usage["30days"].cost;if(a.usage.monthly&&a.usage.monthly.cost!==void 0)return a.usage.monthly.cost;if(a.usage.total&&a.usage.total.cost!==void 0)return a.usage.total.cost}return a.monthlyCost||a.periodCost||0}else return k.preset==="all"?a.usage&&a.usage.all&&a.usage.all.cost!==void 0?a.usage.all.cost:a.totalCost||0:a.periodCost||a.totalCost||0}},dt=a=>{var t,p,r,f,D,W;if(k.type==="custom"){if(a.usage){if(a.usage.custom&&a.usage.custom.tokens!==void 0)return a.usage.custom.tokens;if(a.usage.total&&a.usage.total.tokens!==void 0)return a.usage.total.tokens}return 0}else{if(k.preset==="today")return((p=(t=a.usage)==null?void 0:t.daily)==null?void 0:p.tokens)||0;if(k.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].tokens!==void 0?a.usage["7days"].tokens:0;if(k.preset==="30days"){if(a.usage){if(a.usage["30days"]&&a.usage["30days"].tokens!==void 0)return a.usage["30days"].tokens;if(a.usage.monthly&&a.usage.monthly.tokens!==void 0)return a.usage.monthly.tokens;if(a.usage.total&&a.usage.total.tokens!==void 0)return a.usage.total.tokens}return 0}else return k.preset==="all"?a.usage&&a.usage.all&&a.usage.all.tokens!==void 0?a.usage.all.tokens:((f=(r=a.usage)==null?void 0:r.total)==null?void 0:f.tokens)||0:((W=(D=a.usage)==null?void 0:D.total)==null?void 0:W.tokens)||0}},ps=a=>{var t,p,r,f,D,W;if(k.type==="custom"){if(a.usage){if(a.usage.custom&&a.usage.custom.inputTokens!==void 0)return a.usage.custom.inputTokens;if(a.usage.total&&a.usage.total.inputTokens!==void 0)return a.usage.total.inputTokens}return 0}else{if(k.preset==="today")return((p=(t=a.usage)==null?void 0:t.daily)==null?void 0:p.inputTokens)||0;if(k.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].inputTokens!==void 0?a.usage["7days"].inputTokens:0;if(k.preset==="30days"){if(a.usage){if(a.usage["30days"]&&a.usage["30days"].inputTokens!==void 0)return a.usage["30days"].inputTokens;if(a.usage.monthly&&a.usage.monthly.inputTokens!==void 0)return a.usage.monthly.inputTokens;if(a.usage.total&&a.usage.total.inputTokens!==void 0)return a.usage.total.inputTokens}return 0}else return k.preset==="all"?a.usage&&a.usage.all&&a.usage.all.inputTokens!==void 0?a.usage.all.inputTokens:((f=(r=a.usage)==null?void 0:r.total)==null?void 0:f.inputTokens)||0:((W=(D=a.usage)==null?void 0:D.total)==null?void 0:W.inputTokens)||0}},ms=a=>{var t,p,r,f,D,W;if(k.type==="custom"){if(a.usage){if(a.usage.custom&&a.usage.custom.outputTokens!==void 0)return a.usage.custom.outputTokens;if(a.usage.total&&a.usage.total.outputTokens!==void 0)return a.usage.total.outputTokens}return 0}else{if(k.preset==="today")return((p=(t=a.usage)==null?void 0:t.daily)==null?void 0:p.outputTokens)||0;if(k.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].outputTokens!==void 0?a.usage["7days"].outputTokens:0;if(k.preset==="30days"){if(a.usage){if(a.usage["30days"]&&a.usage["30days"].outputTokens!==void 0)return a.usage["30days"].outputTokens;if(a.usage.monthly&&a.usage.monthly.outputTokens!==void 0)return a.usage.monthly.outputTokens;if(a.usage.total&&a.usage.total.outputTokens!==void 0)return a.usage.total.outputTokens}return 0}else return k.preset==="all"?a.usage&&a.usage.all&&a.usage.all.outputTokens!==void 0?a.usage.all.outputTokens:((f=(r=a.usage)==null?void 0:r.total)==null?void 0:f.outputTokens)||0:((W=(D=a.usage)==null?void 0:D.total)==null?void 0:W.outputTokens)||0}},vt=a=>{if(!J.value[a.id])return jt(a);const t=J.value[a.id]||[];let p=0;return t.forEach(r=>{if(r.cost!==void 0)p+=r.cost;else if(r.formatted&&r.formatted.total){const f=r.formatted.total.replace("$","").replace(",",""),D=parseFloat(f);isNaN(D)||(p+=D)}}),p},xs=a=>{Gt(a)},Gt=a=>{if(k.preset=a,a==="custom"){if(k.type="custom",!k.customRange){const t=new Date,p=new Date(t);p.setDate(t.getDate()-6);const r=f=>f.getFullYear()+"-"+String(f.getMonth()+1).padStart(2,"0")+"-"+String(f.getDate()).padStart(2,"0")+" 00:00:00";k.customRange=[r(p),r(t)],k.customStart=p.toISOString().split("T")[0],k.customEnd=t.toISOString().split("T")[0]}}else if(a==="all")k.type="preset",k.customStart=null,k.customEnd=null;else{k.type="preset";const t=new Date,p=new Date(t);a==="today"?p.setHours(0,0,0,0):a==="7days"?p.setDate(t.getDate()-6):a==="30days"&&p.setDate(t.getDate()-29),k.customStart=p.toISOString().split("T")[0],k.customEnd=t.toISOString().split("T")[0]}Ce()},ys=a=>{a&&a.length===2?(k.type="custom",k.preset="custom",k.customRange=a,k.customStart=a[0].split(" ")[0],k.customEnd=a[1].split(" ")[0],Ce()):a===null&&Gt("today")},qt=a=>{const t=new Date;new Date(t).setHours(0,0,0,0),de.value[a]={type:"preset",preset:"today",customStart:t.toISOString().split("T")[0],customEnd:t.toISOString().split("T")[0],customRange:null,presetOptions:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30},{value:"custom",label:"自定义",days:-1}]}},Ve=a=>(de.value[a]||qt(a),de.value[a]),zt=(a,t)=>{const p=Ve(t);p.type="preset",p.preset=a;const r=p.presetOptions.find(f=>f.value===a);if(r)if(a==="custom"){if(p.type="custom",!p.customRange){const f=new Date,D=new Date(f);D.setDate(f.getDate()-6);const W=I=>I.getFullYear()+"-"+String(I.getMonth()+1).padStart(2,"0")+"-"+String(I.getDate()).padStart(2,"0")+" 00:00:00";p.customRange=[W(D),W(f)],p.customStart=D.toISOString().split("T")[0],p.customEnd=f.toISOString().split("T")[0]}}else{const f=new Date,D=new Date(f);D.setDate(f.getDate()-(r.days-1)),p.customStart=D.toISOString().split("T")[0],p.customEnd=f.toISOString().split("T")[0];const W=I=>I.getFullYear()+"-"+String(I.getMonth()+1).padStart(2,"0")+"-"+String(I.getDate()).padStart(2,"0")+" 00:00:00";p.customRange=[W(D),W(f)]}nt(t,!0)},fs=(a,t)=>{const p=Ve(a);t&&t.length===2?(p.type="custom",p.preset="custom",p.customRange=t,p.customStart=t[0].split(" ")[0],p.customEnd=t[1].split(" ")[0],nt(a,!0)):t===null&&zt("7days",a)},Ft=a=>a>new Date,bs=a=>{const t=Ve(a);t.type="preset",t.preset="today";const p=new Date;new Date(p).setHours(0,0,0,0),t.customStart=p.toISOString().split("T")[0],t.customEnd=p.toISOString().split("T")[0],t.customRange=null,nt(a,!0),O("已重置筛选条件并刷新数据","info")},vs=async()=>{await at(),H.value=!0},Bt=async a=>{await at(),St.value=a,xe.value=!0},Wt=a=>{Mt.value=a,Ue.value=!0},ks=a=>{H.value=!1,Ut.value=a,le.value=!0,Ce()},ws=a=>{H.value=!1,Pt.value=a,Le.value=!0,Ce()},hs=async()=>{if(C.value.length===0){O("请先选择要编辑的 API Keys","warning");return}await at(),st.value=!0},As=()=>{st.value=!1,C.value=[],Ie(),Ce()},$s=()=>{xe.value=!1,O("API Key 更新成功","success"),Ce()},Cs=()=>{Ue.value=!1,O("API Key 续期成功","success"),Ce()},Nt=async a=>{let t=!0;if(a.isActive&&(window.showConfirm?t=await window.showConfirm("禁用 API Key",`确定要禁用 API Key "${a.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消"):t=confirm(`确定要禁用 API Key "${a.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`)),!!t)try{const p=await G.put(`/admin/api-keys/${a.id}`,{isActive:!a.isActive});if(p.success){O(`API Key 已${a.isActive?"禁用":"激活"}`,"success");const r=V.value.find(f=>f.id===a.id);r&&(r.isActive=!a.isActive)}else O(p.message||"操作失败","error")}catch{O("操作失败","error")}},Ht=async a=>{let t=!1;if(window.showConfirm?t=await window.showConfirm("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消"):t=confirm("确定要删除这个 API Key 吗?此操作不可恢复。"),!!t)try{const p=await G.delete(`/admin/api-keys/${a}`);if(p.success){O("API Key 已删除","success");const r=C.value.indexOf(a);r>-1&&C.value.splice(r,1),Ie(),Ce()}else O(p.message||"删除失败","error")}catch{O("删除失败","error")}},Is=async a=>{var p,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消"):t=confirm("确定要恢复这个 API Key 吗?恢复后可以重新使用。"),!!t)try{const f=await G.post(`/admin/api-keys/${a}/restore`);f.success?(O("API Key 已成功恢复","success"),await rt(),await Ce()):O(f.error||"恢复失败","error")}catch(f){O(((r=(p=f.response)==null?void 0:p.data)==null?void 0:r.error)||"恢复失败","error")}},Ks=async a=>{var p,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消"):t=confirm("确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。"),!!t)try{const f=await G.delete(`/admin/api-keys/${a}/permanent`);f.success?(O("API Key 已彻底删除","success"),rt()):O(f.error||"彻底删除失败","error")}catch(f){O(((r=(p=f.response)==null?void 0:p.data)==null?void 0:r.error)||"彻底删除失败","error")}},Ls=async()=>{var p,r;const a=S.value.length;if(a===0){O("没有需要清空的 API Keys","info");return}let t=!1;if(window.showConfirm?t=await window.showConfirm("清空所有已删除的 API Keys",`确定要彻底删除全部 ${a} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消"):t=confirm(`确定要彻底删除全部 ${a} 个已删除的 API Keys 吗?此操作不可恢复。`),!!t)try{const f=await G.delete("/admin/api-keys/deleted/clear-all");f.success?(O(f.message||"已清空所有已删除的 API Keys","success"),f.details&&f.details.failedCount>0&&O(`${f.details.failedCount} 个清空失败`,"warning"),rt()):O(f.error||"清空失败","error")}catch(f){O(((r=(p=f.response)==null?void 0:p.data)==null?void 0:r.error)||"清空失败","error")}},Ds=async()=>{const a=C.value.length;if(a===0){O("请先选择要删除的 API Keys","warning");return}let t=!1;const p=`确定要删除选中的 ${a} 个 API Key 吗?此操作不可恢复。`;if(window.showConfirm?t=await window.showConfirm("批量删除 API Keys",p,"确定删除","取消"):t=confirm(p),!t)return;const r=[...C.value];try{const f=await G.delete("/admin/api-keys/batch",{data:{keyIds:r}});if(f.success){const{successCount:D,failedCount:W,errors:I}=f.data;if(D>0){if(O(`成功删除 ${D} 个 API Keys`,"success"),W>0){const te=I.map(fe=>`${fe.keyId}: ${fe.error}`).join(` `);O(`${W} 个删除失败: ${te}`,"warning")}}else O("所有 API Keys 删除失败","error");C.value=[],Ie(),Ce()}else O(f.message||"批量删除失败","error")}catch{O("批量删除失败","error")}},_s=()=>{if(P.value)qe.value.forEach(a=>{C.value.includes(a.id)||C.value.push(a.id)});else{const a=new Set(qe.value.map(t=>t.id));C.value=C.value.filter(t=>!a.has(t))}Ie()},Ie=()=>{const a=qe.value.length,t=qe.value.filter(p=>C.value.includes(p.id)).length;t===0?(P.value=!1,q.value=!1):t===a?(P.value=!0,q.value=!1):(P.value=!1,q.value=!0)},He=a=>{be.value=a},Yt=()=>{be.value=null},Ts=async({keyId:a,expiresAt:t,activateNow:p})=>{try{const r=await G.patch(`/admin/api-keys/${a}/expiration`,{expiresAt:t||null,activateNow:p||!1});if(r.success){O(p?"API Key已激活":"过期时间已更新","success");const f=V.value.find(D=>D.id===a);f&&(p&&r.updates?(f.isActivated=!0,f.activatedAt=r.updates.activatedAt,f.expiresAt=r.updates.expiresAt):(f.expiresAt=t||null,t&&!f.isActivated&&(f.isActivated=!0))),Yt()}else O(r.message||"更新失败","error"),v.value&&v.value.resetSaving()}catch{O("更新失败","error"),v.value&&v.value.resetSaving()}},Re=a=>a?new Date(a).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",Qt=a=>{if(a==null)return"--:--";const t=Math.floor(a/3600),p=Math.floor(a%3600/60),r=a%60;return t>0?`${t}h${p}m`:p>0?`${p}m${r}s`:`${r}s`},kt=a=>{n.value=a,o.value=!0},wt=a=>{if(!a)return"从未使用";const t=new Date(a),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},ht={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},Ss=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Jt=a=>{if(!a)return"other";const t=String(a).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},ut=a=>(a==null?void 0:a.lastUsage)||null,At=a=>{const t=ut(a);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},$t=a=>{if(!a)return!1;if(a.accountCategory==="deleted")return!0;const t=typeof a.rawAccountId=="string"?a.rawAccountId.trim():"",p=typeof a.accountName=="string"?a.accountName.trim():"",r=typeof a.accountType=="string"?a.accountType.trim().toLowerCase():"";if(!t)return!1;const f=Ss.test(t),D=!p||p===t,W=Jt(r);return f&&D&&(!r||r==="unknown"||W==="other")},Ms=a=>a?$t(a)?"已删除":a.accountName||a.accountId||a.rawAccountId||"未知账号":"未知账号",Ye=a=>Ms(ut(a)),Ct=a=>{const t=Ye(a);return t.length>ls?`${t.slice(0,ls)}...`:t},ct=a=>{const t=ut(a);if($t(t))return ht.deleted;const p=(t==null?void 0:t.accountCategory)||Jt(t==null?void 0:t.accountType);return ht[p]||ht.other},It=a=>{const t=ut(a);return $t(t)},Us=()=>{g.value="",Z.value=1},Ps=()=>{try{const a=Ge.value.map(w=>{var Xt,Zt,es,ts,ss,as,rs,os;const ke=it(w),pe=vt(w),X=dt(w),Ke=ps(w),we=ms(w),Vs={ID:w.id||"",名称:w.name||"",描述:w.description||"",状态:w.isActive?"启用":"禁用",API密钥:w.apiKey||"",过期模式:w.expirationMode==="activation"?"首次使用后激活":w.expirationMode==="fixed"?"固定时间":"无",激活期限:w.activationDays||"",激活单位:w.activationUnit==="hours"?"小时":w.activationUnit==="days"?"天":"",已激活:w.isActivated?"是":"否",激活时间:w.activatedAt?Re(w.activatedAt):"",过期时间:w.expiresAt?Re(w.expiresAt):"",服务权限:w.permissions==="all"?"全部服务":w.permissions==="claude"?"仅Claude":w.permissions==="gemini"?"仅Gemini":w.permissions==="openai"?"仅OpenAI":w.permissions==="droid"?"仅Droid":w.permissions||"",令牌限制:w.tokenLimit==="0"||w.tokenLimit===0?"无限制":w.tokenLimit||"",并发限制:w.concurrencyLimit==="0"||w.concurrencyLimit===0?"无限制":w.concurrencyLimit||"","速率窗口(分钟)":w.rateLimitWindow==="0"||w.rateLimitWindow===0?"无限制":w.rateLimitWindow||"",速率请求限制:w.rateLimitRequests==="0"||w.rateLimitRequests===0?"无限制":w.rateLimitRequests||"","日费用限制($)":w.dailyCostLimit==="0"||w.dailyCostLimit===0?"无限制":`$${w.dailyCostLimit}`||"","总费用限制($)":w.totalCostLimit==="0"||w.totalCostLimit===0?"无限制":`$${w.totalCostLimit}`||"",Claude专属账户:w.claudeAccountId||"",Claude控制台账户:w.claudeConsoleAccountId||"",Gemini专属账户:w.geminiAccountId||"",OpenAI专属账户:w.openaiAccountId||"","Azure OpenAI专属账户":w.azureOpenaiAccountId||"",Bedrock专属账户:w.bedrockAccountId||"",Droid专属账户:w.droidAccountId||"",启用模型限制:w.enableModelRestriction?"是":"否",限制的模型:w.restrictedModels&&w.restrictedModels.length>0?w.restrictedModels.join("; "):"",启用客户端限制:w.enableClientRestriction?"是":"否",允许的客户端:w.allowedClients&&w.allowedClients.length>0?w.allowedClients.join("; "):"",创建时间:w.createdAt?Re(w.createdAt):"",创建者:w.createdBy||"",用户ID:w.userId||"",用户名:w.userUsername||"",标签:w.tags&&w.tags.length>0?w.tags.join(", "):"无",请求总数:ke,"总费用($)":pe.toFixed(2),Token数:Ae(X),输入Token:Ae(Ke),输出Token:Ae(we),最后使用时间:w.lastUsedAt?Re(w.lastUsedAt):"从未使用",最后使用账号:Ye(w),最后使用类型:ct(w)},ze={};let Fe=null;return k.preset==="today"?Fe=(Zt=(Xt=w.usage)==null?void 0:Xt.daily)==null?void 0:Zt.models:k.preset==="7days"?Fe=(ts=(es=w.usage)==null?void 0:es.weekly)==null?void 0:ts.models:k.preset==="30days"?Fe=(as=(ss=w.usage)==null?void 0:ss.monthly)==null?void 0:as.models:k.preset==="all"&&(Fe=(os=(rs=w.usage)==null?void 0:rs.total)==null?void 0:os.models),Fe&&Object.entries(Fe).forEach(([Kt,Qe])=>{let Ee=Kt;Kt.includes(":")&&(Ee=Kt.split(":").pop()),Ee=Ee.replace(/[:/]/g,"_"),ze[`${Ee}_请求数`]=Qe.requests||0,ze[`${Ee}_费用($)`]=(Qe.cost||0).toFixed(2),ze[`${Ee}_Token`]=Ae(Qe.totalTokens||0),ze[`${Ee}_输入Token`]=Ae(Qe.inputTokens||0),ze[`${Ee}_输出Token`]=Ae(Qe.outputTokens||0)}),{...Vs,...ze}}),t=je.utils.book_new(),p=je.utils.json_to_sheet(a),r=je.utils.decode_range(p["!ref"]),f=Object.keys(a[0]||{}),D=f.map(w=>w==="ID"?{wch:40}:w==="名称"?{wch:25}:w==="描述"?{wch:30}:w==="API密钥"?{wch:45}:w==="标签"?{wch:20}:w.includes("时间")?{wch:20}:w.includes("限制")?{wch:15}:w.includes("费用")?{wch:15}:w.includes("Token")?{wch:15}:w.includes("请求")?{wch:12}:w.includes("账户")?{wch:30}:w.includes("权限")||w.includes("模型")||w.includes("客户端")?{wch:20}:w.includes("激活")||w.includes("过期")?{wch:18}:{wch:15});p["!cols"]=D;for(let w=r.s.c;w<=r.e.c;++w){const ke=je.utils.encode_cell({r:0,c:w});if(!p[ke])continue;const pe=f[w],X=pe&&pe.includes("_");p[ke].s={fill:{fgColor:{rgb:X?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let w=1;w<=r.e.r;++w)for(let ke=r.s.c;ke<=r.e.c;++ke){const pe=je.utils.encode_cell({r:w,c:ke});if(!p[pe])continue;const X=f[ke],Ke=p[pe].v,we={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};w%2===0&&(we.fill={fgColor:{rgb:"F2F2F2"}}),X==="名称"?we.alignment={horizontal:"left",vertical:"center"}:X==="标签"?(we.alignment={horizontal:"left",vertical:"center"},Ke==="无"&&(we.font={...we.font,color:{rgb:"999999"},italic:!0})):X==="最后使用时间"?(we.alignment={horizontal:"right",vertical:"center"},Ke==="从未使用"&&(we.font={...we.font,color:{rgb:"999999"},italic:!0})):X&&X.includes("费用")?(we.alignment={horizontal:"right",vertical:"center"},we.font={...we.font,color:{rgb:"0066CC"},bold:!0}):X&&(X.includes("Token")||X.includes("请求"))&&(we.alignment={horizontal:"right",vertical:"center"}),p[pe].s=we}je.utils.book_append_sheet(t,p,"用量统计");const W=new Date,I=W.getFullYear()+String(W.getMonth()+1).padStart(2,"0")+String(W.getDate()).padStart(2,"0")+"_"+String(W.getHours()).padStart(2,"0")+String(W.getMinutes()).padStart(2,"0")+String(W.getSeconds()).padStart(2,"0");let te="";k.type==="preset"?te={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[k.preset]||k.preset:te="自定义时间";const fe=`API_Keys_用量统计_${te}_${I}.xlsx`;je.writeFile(t,fe),O(`成功导出 ${a.length} 条API Key用量数据`,"success")}catch{O("导出失败,请重试","error")}};return Te([x,Y],()=>{Z.value=1,C.value=[],Ie()}),Te(g,()=>{Z.value=1,Ie()}),Te(l,()=>{Z.value=1,Ie()}),Te([Z,ce],()=>{Ie()}),Te(ce,a=>{localStorage.setItem("apiKeysPageSize",a.toString())}),Te(V,()=>{const a=new Set(V.value.map(t=>t.id));C.value=C.value.filter(t=>a.has(t)),Ie()}),tt(async()=>{await Promise.all([N.loadSupportedClients(),at(),Ce()]),Ie()}),(a,t)=>{const p=Rs;return i(),d("div",Dd,[e("div",_d,[e("div",Td,[t[150]||(t[150]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",Sd,[e("nav",Md,[e("button",{class:j(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",R.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>R.value="active")},[t[35]||(t[35]=A(" 活跃 API Keys ",-1)),V.value.length>0?(i(),d("span",Ud,u(V.value.length),1)):h("",!0)],2),e("button",{class:j(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",R.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:rt},[t[36]||(t[36]=A(" 已删除 API Keys ",-1)),S.value.length>0?(i(),d("span",Pd,u(S.value.length),1)):h("",!0)],2)])]),R.value==="active"?(i(),d("div",Vd,[e("div",Rd,[e("div",Ed,[e("div",Od,[t[37]||(t[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ne(Lt,{modelValue:k.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>k.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:s.value,placeholder:"选择时间范围",onChange:xs},null,8,["modelValue","options"])]),k.type==="custom"?(i(),d("div",jd,[ne(p,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":me.value,"disabled-date":Ft,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":k.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":ys},null,8,["default-time","model-value"])])):h("",!0),e("div",Gd,[t[38]||(t[38]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",qd,[ne(Lt,{modelValue:x.value,"onUpdate:modelValue":t[2]||(t[2]=r=>x.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:ue.value,placeholder:"所有标签",onChange:t[3]||(t[3]=r=>Z.value=1)},null,8,["modelValue","options"]),x.value?(i(),d("span",zd,u(ge.value),1)):h("",!0)])]),e("div",Fd,[e("div",Bd,[ne(Lt,{modelValue:l.value,"onUpdate:modelValue":t[4]||(t[4]=r=>l.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:y.value,placeholder:"选择搜索类型",onChange:t[5]||(t[5]=r=>Z.value=1)},null,8,["modelValue","options"])]),e("div",Wd,[t[41]||(t[41]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Nd,[T(e("input",{"onUpdate:modelValue":t[6]||(t[6]=r=>g.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:l.value==="bindingAccount"?"搜索所属账号...":B.value?"搜索名称或所有者...":"搜索名称...",type:"text",onInput:t[7]||(t[7]=r=>Z.value=1)},null,40,Hd),[[se,g.value]]),t[40]||(t[40]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),g.value?(i(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Us},t[39]||(t[39]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):h("",!0)])])])]),e("div",Yd,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:Q.value,onClick:t[8]||(t[8]=r=>Ce())},[t[42]||(t[42]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:j(["fas relative text-green-500",Q.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[43]||(t[43]=e("span",{class:"relative"},"刷新",-1))],8,Qd),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:m},[e("i",{class:j(U.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(U.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:Ps},t[44]||(t[44]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),C.value.length>0?(i(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[9]||(t[9]=r=>hs())},[t[45]||(t[45]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[46]||(t[46]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",Jd,"编辑选中 ("+u(C.value.length)+")",1)])):h("",!0),C.value.length>0?(i(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[10]||(t[10]=r=>Ds())},[t[47]||(t[47]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[48]||(t[48]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Xd,"删除选中 ("+u(C.value.length)+")",1)])):h("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:$e(vs,["stop"])},t[49]||(t[49]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),Q.value?(i(),d("div",Zd,t[50]||(t[50]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):V.value.length===0?(i(),d("div",e0,t[51]||(t[51]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(i(),d("div",t0,[e("div",s0,[e("table",a0,[e("thead",r0,[e("tr",null,[_.value?(i(),d("th",o0,[e("div",l0,[T(e("input",{"onUpdate:modelValue":t[11]||(t[11]=r=>P.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:q.value,type:"checkbox",onChange:_s},null,40,n0),[[_e,P.value]])])])):h("",!0),e("th",{class:"w-[14%] min-w-[120px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[12]||(t[12]=r=>Pe("name"))},[t[52]||(t[52]=A(" 名称 ",-1)),$.value==="name"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",i0))]),t[60]||(t[60]=e("th",{class:"w-[15%] min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[61]||(t[61]=e("th",{class:"w-[10%] min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"w-[6%] min-w-[60px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Pe("status"))},[t[53]||(t[53]=A(" 状态 ",-1)),$.value==="status"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",d0))]),e("th",{class:"w-[4%] min-w-[40px] cursor-pointer px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>Pe("periodCost"))},[t[54]||(t[54]=A(" 费用 ",-1)),$.value==="periodCost"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",u0))]),t[62]||(t[62]=e("th",{class:"w-[14%] min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),e("th",{class:"w-[5%] min-w-[45px] cursor-pointer px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>Pe("periodTokens"))},[t[55]||(t[55]=A(" Token ",-1)),$.value==="periodTokens"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",c0))]),e("th",{class:"w-[5%] min-w-[45px] cursor-pointer px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[16]||(t[16]=r=>Pe("periodRequests"))},[t[56]||(t[56]=A(" 请求数 ",-1)),$.value==="periodRequests"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",g0))]),e("th",{class:"w-[8%] min-w-[70px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[17]||(t[17]=r=>Pe("lastUsedAt"))},[t[57]||(t[57]=A(" 最后使用 ",-1)),$.value==="lastUsedAt"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",p0))]),e("th",{class:"w-[8%] min-w-[70px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[18]||(t[18]=r=>Pe("createdAt"))},[t[58]||(t[58]=A(" 创建时间 ",-1)),$.value==="createdAt"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",m0))]),e("th",{class:"w-[8%] min-w-[70px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[19]||(t[19]=r=>Pe("expiresAt"))},[t[59]||(t[59]=A(" 过期时间 ",-1)),$.value==="expiresAt"?(i(),d("i",{key:0,class:j(["fas",L.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(i(),d("i",x0))]),t[63]||(t[63]=e("th",{class:"operations-column sticky right-0 w-[23%] min-w-[200px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(i(!0),d(ae,null,oe(qe.value,(r,f)=>{var D,W;return i(),d(ae,{key:r.id},[e("tr",{class:j(["table-row transition-all duration-150",f%2===0?"bg-white dark:bg-gray-800/40":"bg-gray-50/70 dark:bg-gray-700/30","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:bg-blue-50/60 hover:shadow-sm dark:hover:bg-blue-900/20"])},[_.value?(i(),d("td",y0,[e("div",f0,[T(e("input",{"onUpdate:modelValue":t[20]||(t[20]=I=>C.value=I),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ie},null,40,b0),[[_e,C.value]])])])):h("",!0),e("td",v0,[e("div",k0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},u(r.name),9,w0),B.value&&r.ownerDisplayName?(i(),d("div",h0,[t[64]||(t[64]=e("i",{class:"fas fa-user mr-1"},null,-1)),A(" "+u(r.ownerDisplayName),1)])):h("",!0)])]),e("td",A0,[e("div",$0,[r.claudeAccountId||r.claudeConsoleAccountId?(i(),d("div",C0,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),A(" Claude ")],-1)),e("span",I0,u(mt(r)),1)])):h("",!0),r.geminiAccountId?(i(),d("div",K0,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),A(" Gemini ")],-1)),e("span",L0,u(xt(r)),1)])):h("",!0),r.openaiAccountId?(i(),d("div",D0,[t[67]||(t[67]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),A(" OpenAI ")],-1)),e("span",_0,u(yt(r)),1)])):h("",!0),r.bedrockAccountId?(i(),d("div",T0,[t[68]||(t[68]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),A(" Bedrock ")],-1)),e("span",S0,u(ft(r)),1)])):h("",!0),r.droidAccountId?(i(),d("div",M0,[t[69]||(t[69]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),A(" Droid ")],-1)),e("span",U0,u(bt(r)),1)])):h("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(i(),d("div",P0,t[70]||(t[70]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),A(" 共享池 ",-1)]))):h("",!0)])]),e("td",V0,[e("div",R0,[(i(!0),d(ae,null,oe(r.tags||[],I=>(i(),d("span",{key:I,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},u(I),1))),128)),!r.tags||r.tags.length===0?(i(),d("span",E0,"无标签")):h("",!0)])]),e("td",O0,[e("span",{class:j(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:j(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),A(" "+u(r.isActive?"活跃":"禁用"),1)],2)]),e("td",j0,[e("span",G0," $"+u(jt(r).toFixed(2)),1)]),e("td",q0,[e("div",z0,[r.dailyCostLimit>0?(i(),ye(Se,{key:0,current:r.dailyCost||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(i(),ye(Se,{key:1,current:((W=(D=r.usage)==null?void 0:D.total)==null?void 0:W.cost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(i(),d("div",F0,[ne(Se,{current:r.currentWindowCost||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",B0,[e("div",W0,[t[71]||(t[71]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",N0,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:j(["font-bold",r.windowRemainingSeconds>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u(r.windowRemainingSeconds>0?Qt(r.windowRemainingSeconds):"未激活"),3)])])):(i(),d("div",H0,t[72]||(t[72]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))])]),e("td",Y0,[e("div",Q0,[e("span",J0,u(Ae(dt(r))),1)])]),e("td",X0,[e("div",Z0,[e("span",eu,u(pt(it(r))),1),t[73]||(t[73]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",tu,[e("div",su,[r.lastUsedAt?(i(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(wt(r.lastUsedAt)),9,au)):(i(),d("span",ru,"从未使用")),At(r)?(i(),d("span",{key:2,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:Ye(r)},[A(u(Ct(r))+" ",1),It(r)?h("",!0):(i(),d("span",lu," ("+u(ct(r))+") ",1))],8,ou)):(i(),d("span",nu," 暂无使用账号 "))])]),e("td",iu,u(new Date(r.createdAt).toLocaleDateString()),1),e("td",du,[e("div",uu,[r.expirationMode==="activation"&&!r.isActivated?(i(),d("span",cu,[t[74]||(t[74]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),A(" 未激活 ( "+u(r.activationDays||(r.activationUnit==="hours"?24:30))+u(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(i(),d("span",gu,[ot(r.expiresAt)?(i(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:$e(I=>He(r),["stop"])},t[75]||(t[75]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),A(" 已过期 ",-1)]),8,pu)):lt(r.expiresAt)?(i(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:$e(I=>He(r),["stop"])},[t[76]||(t[76]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),A(" "+u(Et(r.expiresAt)),1)],8,mu)):(i(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:$e(I=>He(r),["stop"])},u(Et(r.expiresAt)),9,xu))])):(i(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:$e(I=>He(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),A(" 永不过期 ",-1)]),8,yu))])]),e("td",fu,[e("div",bu,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:I=>kt(r)},t[78]||(t[78]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"详情",-1)]),8,vu),r&&r.id?(i(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:I=>cs(r.id)},[e("i",{class:j(["fas",re.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[79]||(t[79]=e("span",{class:"ml-1 hidden xl:inline"},"模型",-1))],8,ku)):h("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:I=>Bt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"编辑",-1)]),8,wu),r.expiresAt&&(ot(r.expiresAt)||lt(r.expiresAt))?(i(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:I=>Wt(r)},t[81]||(t[81]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"续期",-1)]),8,hu)):h("",!0),e("button",{class:j([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:I=>Nt(r)},[e("i",{class:j(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",$u,u(r.isActive?"禁用":"激活"),1)],10,Au),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:I=>Ht(r.id)},t[82]||(t[82]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"删除",-1)]),8,Cu)])])],2),r&&r.id&&re.value[r.id]?(i(),d("tr",Iu,[e("td",Ku,[J.value[r.id]?h("",!0):(i(),d("div",Lu,t[83]||(t[83]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",Du,[e("div",_u,[t[84]||(t[84]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),A(" 模型使用分布 ")],-1)),e("div",Tu,[J.value[r.id]&&J.value[r.id].length>0?(i(),d("span",Su,u(J.value[r.id].length)+" 个模型 ",1)):h("",!0),e("div",Mu,[e("div",Uu,[(i(!0),d(ae,null,oe(Ve(r.id).presetOptions,I=>(i(),d("button",{key:I.value,class:j(["rounded px-2 py-1 text-xs font-medium transition-colors",Ve(r.id).preset===I.value&&Ve(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:te=>zt(I.value,r.id)},u(I.label),11,Pu))),128))]),ne(p,{class:"api-key-date-picker",clearable:!0,"default-time":me.value,"disabled-date":Ft,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Ve(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":I=>fs(r.id,I)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),J.value[r.id]&&J.value[r.id].length===0?(i(),d("div",Vu,[e("div",Ru,[t[86]||(t[86]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[87]||(t[87]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:I=>bs(r.id)},t[85]||(t[85]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,Eu)]),t[88]||(t[88]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):J.value[r.id]&&J.value[r.id].length>0?(i(),d("div",Ou,[(i(!0),d(ae,null,oe(J.value[r.id],I=>(i(),d("div",{key:I.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",ju,[e("div",Gu,[e("span",qu,u(I.model),1),e("span",zu,u(I.requests)+" 次请求",1)])]),e("div",Fu,[e("div",Bu,[t[89]||(t[89]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),A(" 总Token: ")],-1)),e("span",Wu,u(Ae(I.allTokens)),1)]),e("div",Nu,[t[90]||(t[90]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),A(" 费用: ")],-1)),e("span",Hu,u(gs(I)),1)]),e("div",Yu,[e("div",Qu,[t[91]||(t[91]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),A(" 输入: ")],-1)),e("span",Ju,u(Ae(I.inputTokens)),1)]),e("div",Xu,[t[92]||(t[92]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),A(" 输出: ")],-1)),e("span",Zu,u(Ae(I.outputTokens)),1)]),I.cacheCreateTokens>0?(i(),d("div",ec,[t[93]||(t[93]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),A(" 缓存创建: ")],-1)),e("span",tc,u(Ae(I.cacheCreateTokens)),1)])):h("",!0),I.cacheReadTokens>0?(i(),d("div",sc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),A(" 缓存读取: ")],-1)),e("span",ac,u(Ae(I.cacheReadTokens)),1)])):h("",!0)])]),e("div",rc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:gt({width:Ot(I.allTokens,J.value[r.id])+"%"})},null,4)]),e("div",oc,[e("span",lc,u(Ot(I.allTokens,J.value[r.id]))+"% ",1)])]))),128))])):h("",!0),J.value[r.id]&&J.value[r.id].length>0?(i(),d("div",nc,[e("div",ic,[t[97]||(t[97]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),A(" 总计统计 ")],-1)),e("div",dc,[e("span",uc,[t[95]||(t[95]=A(" 总请求: ",-1)),e("span",cc,u(J.value[r.id].reduce((I,te)=>I+te.requests,0)),1)]),e("span",gc,[t[96]||(t[96]=A(" 总Token: ",-1)),e("span",pc,u(Ae(J.value[r.id].reduce((I,te)=>I+te.allTokens,0))),1)])])])])):h("",!0)])])])):h("",!0)],64)}),128))])])])])),!Q.value&&Ge.value.length>0?(i(),d("div",mc,[(i(!0),d(ae,null,oe(qe.value,r=>{var f,D,W,I;return i(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",xc,[e("div",yc,[_.value?T((i(),d("input",{key:0,"onUpdate:modelValue":t[21]||(t[21]=te=>C.value=te),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ie},null,40,fc)),[[_e,C.value]]):h("",!0),e("div",null,[e("h4",bc,u(r.name),1),e("p",vc,u(r.id),1)])]),e("span",{class:j(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:j(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),A(" "+u(r.isActive?"活跃":"已停用"),1)],2)]),e("div",kc,[r.claudeAccountId||r.claudeConsoleAccountId?(i(),d("div",wc,[t[98]||(t[98]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),A(" Claude ")],-1)),e("span",hc,u(mt(r)),1)])):h("",!0),r.geminiAccountId?(i(),d("div",Ac,[t[99]||(t[99]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),A(" Gemini ")],-1)),e("span",$c,u(xt(r)),1)])):h("",!0),r.openaiAccountId?(i(),d("div",Cc,[t[100]||(t[100]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),A(" OpenAI ")],-1)),e("span",Ic,u(yt(r)),1)])):h("",!0),r.bedrockAccountId?(i(),d("div",Kc,[t[101]||(t[101]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),A(" Bedrock ")],-1)),e("span",Lc,u(ft(r)),1)])):h("",!0),r.droidAccountId?(i(),d("div",Dc,[t[102]||(t[102]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),A(" Droid ")],-1)),e("span",_c,u(bt(r)),1)])):h("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(i(),d("div",Tc,t[103]||(t[103]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),A(" 使用共享池 ",-1)]))):h("",!0),B.value&&r.ownerDisplayName?(i(),d("div",Sc,[t[104]||(t[104]=e("i",{class:"fas fa-user mr-1"},null,-1)),A(" "+u(r.ownerDisplayName),1)])):h("",!0)]),e("div",Mc,[e("div",Uc,[e("div",Pc,[e("span",Vc,u(k.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:te=>kt(r)},t[105]||(t[105]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),A("详情 ",-1)]),8,Rc)]),e("div",Ec,[e("div",null,[e("p",Oc,u(pt(((D=(f=r.usage)==null?void 0:f.daily)==null?void 0:D.requests)||0))+" 次 ",1),t[106]||(t[106]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[e("p",jc," $"+u((r.dailyCost||0).toFixed(2)),1),t[107]||(t[107]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Gc,[e("div",qc,[t[108]||(t[108]=e("span",null,"最后使用",-1)),e("span",zc,u(r.lastUsedAt?wt(r.lastUsedAt):"从未使用"),1)]),e("div",Fc,[t[109]||(t[109]=e("span",null,"账号",-1)),At(r)?(i(),d("span",{key:0,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:Ye(r)},[A(u(Ct(r))+" ",1),It(r)?h("",!0):(i(),d("span",Wc," ("+u(ct(r))+") ",1))],8,Bc)):(i(),d("span",Nc,"暂无使用账号"))])])]),e("div",Hc,[r.dailyCostLimit>0?(i(),ye(Se,{key:0,current:r.dailyCost||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(i(),ye(Se,{key:1,current:((I=(W=r.usage)==null?void 0:W.total)==null?void 0:I.cost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(i(),d("div",Yc,[ne(Se,{current:r.currentWindowCost||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Qc,[e("div",Jc,[t[110]||(t[110]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Xc,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:j(["font-bold",r.windowRemainingSeconds>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u(r.windowRemainingSeconds>0?Qt(r.windowRemainingSeconds):"未激活"),3)])])):(i(),d("div",Zc,t[111]||(t[111]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))])]),e("div",eg,[e("div",tg,[t[112]||(t[112]=e("span",null,"创建时间",-1)),e("span",null,u(Re(r.createdAt)),1)]),e("div",sg,[t[114]||(t[114]=e("span",null,"过期时间",-1)),e("div",ag,[e("span",{class:j(lt(r.expiresAt)?"font-semibold text-orange-600":"")},u(r.expiresAt?Re(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:$e(te=>He(r),["stop"])},t[113]||(t[113]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,rg)])])]),r.tags&&r.tags.length>0?(i(),d("div",og,[(i(!0),d(ae,null,oe(r.tags,te=>(i(),d("span",{key:te,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},u(te),1))),128))])):h("",!0),e("div",lg,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:te=>kt(r)},t[115]||(t[115]=[e("i",{class:"fas fa-chart-line"},null,-1),A(" 查看详情 ",-1)]),8,ng),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:te=>Bt(r)},t[116]||(t[116]=[e("i",{class:"fas fa-edit mr-1"},null,-1),A(" 编辑 ",-1)]),8,ig),r.expiresAt&&(ot(r.expiresAt)||lt(r.expiresAt))?(i(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:te=>Wt(r)},t[117]||(t[117]=[e("i",{class:"fas fa-clock mr-1"},null,-1),A(" 续期 ",-1)]),8,dg)):h("",!0),e("button",{class:j([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:te=>Nt(r)},[e("i",{class:j(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),A(" "+u(r.isActive?"禁用":"激活"),1)],10,ug),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:te=>Ht(r.id)},t[118]||(t[118]=[e("i",{class:"fas fa-trash"},null,-1)]),8,cg)])])}),128))])):h("",!0),Ge.value.length>0?(i(),d("div",gg,[e("div",pg,[e("span",mg," 共 "+u(Ge.value.length)+" 条记录 ",1),e("div",xg,[t[119]||(t[119]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),T(e("select",{"onUpdate:modelValue":t[22]||(t[22]=r=>ce.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:t[23]||(t[23]=r=>Z.value=1)},[(i(),d(ae,null,oe(ee,r=>e("option",{key:r,value:r},u(r),9,yg)),64))],544),[[et,ce.value]]),t[120]||(t[120]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",fg,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:Z.value===1,onClick:t[24]||(t[24]=r=>Z.value--)},t[121]||(t[121]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,bg),e("div",vg,[Vt.value?(i(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[25]||(t[25]=r=>Z.value=1)}," 1 ")):h("",!0),ds.value?(i(),d("span",kg,"...")):h("",!0),(i(!0),d(ae,null,oe(We.value,r=>(i(),d("button",{key:r,class:j(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===Z.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:f=>Z.value=r},u(r),11,wg))),128)),us.value?(i(),d("span",hg,"...")):h("",!0),Rt.value?(i(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[26]||(t[26]=r=>Z.value=Oe.value)},u(Oe.value),1)):h("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:Z.value===Oe.value||Oe.value===0,onClick:t[27]||(t[27]=r=>Z.value++)},t[122]||(t[122]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,Ag)])])):h("",!0)])):R.value==="deleted"?(i(),d("div",$g,[z.value?(i(),d("div",Cg,t[123]||(t[123]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):S.value.length===0?(i(),d("div",Ig,t[124]||(t[124]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(i(),d("div",Kg,[e("div",Lg,[S.value.length>0?(i(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:Ls},[t[125]||(t[125]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),A(" 清空所有已删除 ("+u(S.value.length)+") ",1)])):h("",!0)]),e("div",Dg,[e("div",_g,[e("table",Tg,[e("thead",Sg,[e("tr",null,[t[126]||(t[126]=e("th",{class:"w-[14%] min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[127]||(t[127]=e("th",{class:"w-[15%] min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),B.value?(i(),d("th",Mg," 创建者 ")):h("",!0),t[128]||(t[128]=e("th",{class:"w-[15%] min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[129]||(t[129]=e("th",{class:"w-[10%] min-w-[90px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[130]||(t[130]=e("th",{class:"w-[10%] min-w-[90px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[131]||(t[131]=e("th",{class:"w-[8%] min-w-[60px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[132]||(t[132]=e("th",{class:"w-[8%] min-w-[60px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[133]||(t[133]=e("th",{class:"w-[8%] min-w-[60px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[134]||(t[134]=e("th",{class:"w-[9%] min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[135]||(t[135]=e("th",{class:"operations-column sticky right-0 w-[15%] min-w-[160px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ug,[(i(!0),d(ae,null,oe(S.value,r=>{var f,D,W,I,te,fe;return i(),d("tr",{key:r.id,class:"table-row"},[e("td",Pg,[e("div",Vg,[t[136]||(t[136]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Rg,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},u(r.name),9,Eg)])])]),e("td",Og,[e("div",jg,[r.claudeAccountId?(i(),d("div",Gg,t[137]||(t[137]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),A(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(i(),d("div",qg,t[138]||(t[138]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),A(" Claude Console ")],-1)]))):r.geminiAccountId?(i(),d("div",zg,t[139]||(t[139]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),A(" Gemini ")],-1)]))):(i(),d("div",Fg,t[140]||(t[140]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),A(" 共享池 ",-1)])))])]),B.value?(i(),d("td",Bg,[e("div",Wg,[r.createdBy==="admin"?(i(),d("span",Ng,t[141]||(t[141]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),A(" 管理员 ",-1)]))):r.userUsername?(i(),d("span",Hg,[t[142]||(t[142]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),A(" "+u(r.userUsername),1)])):(i(),d("span",Yg,t[143]||(t[143]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),A(" 未知 ",-1)])))])])):h("",!0),e("td",Qg,u(Re(r.createdAt)),1),e("td",Jg,[e("div",Xg,[r.deletedByType==="admin"?(i(),d("span",Zg,[t[144]||(t[144]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),A(" "+u(r.deletedBy),1)])):r.deletedByType==="user"?(i(),d("span",ep,[t[145]||(t[145]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),A(" "+u(r.deletedBy),1)])):(i(),d("span",tp,[t[146]||(t[146]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),A(" "+u(r.deletedBy),1)]))])]),e("td",sp,u(Re(r.deletedAt)),1),e("td",ap,[e("span",rp," $"+u((((D=(f=r.usage)==null?void 0:f.total)==null?void 0:D.cost)||0).toFixed(2)),1)]),e("td",op,[e("span",lp,u(Ae(((I=(W=r.usage)==null?void 0:W.total)==null?void 0:I.tokens)||0)),1)]),e("td",np,[e("div",ip,[e("span",dp,u(pt(((fe=(te=r.usage)==null?void 0:te.total)==null?void 0:fe.requests)||0)),1),t[147]||(t[147]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",up,[e("div",cp,[r.lastUsedAt?(i(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(wt(r.lastUsedAt)),9,gp)):(i(),d("span",pp,"从未使用")),At(r)?(i(),d("span",{key:2,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:Ye(r)},[A(u(Ct(r))+" ",1),It(r)?h("",!0):(i(),d("span",xp," ("+u(ct(r))+") ",1))],8,mp)):(i(),d("span",yp," 暂无使用账号 "))])]),e("td",fp,[e("div",bp,[r.canRestore?(i(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:w=>Is(r.id)},t[148]||(t[148]=[e("i",{class:"fas fa-undo mr-1"},null,-1),A(" 恢复 ",-1)]),8,vp)):h("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:w=>Ks(r.id)},t[149]||(t[149]=[e("i",{class:"fas fa-times mr-1"},null,-1),A(" 彻底删除 ",-1)]),8,kp)])])])}),128))])])])])]))])):h("",!0)])]),H.value?(i(),ye(Zr,{key:0,accounts:F.value,onBatchSuccess:ws,onClose:t[28]||(t[28]=r=>H.value=!1),onSuccess:ks},null,8,["accounts"])):h("",!0),xe.value?(i(),ye(al,{key:1,accounts:F.value,"api-key":St.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onSuccess:$s},null,8,["accounts","api-key"])):h("",!0),Ue.value?(i(),ye(kl,{key:2,"api-key":Mt.value,onClose:t[30]||(t[30]=r=>Ue.value=!1),onSuccess:Cs},null,8,["api-key"])):h("",!0),le.value?(i(),ye(Ul,{key:3,"api-key":Ut.value,onClose:t[31]||(t[31]=r=>le.value=!1)},null,8,["api-key"])):h("",!0),Le.value?(i(),ye(on,{key:4,"api-keys":Pt.value,onClose:t[32]||(t[32]=r=>Le.value=!1)},null,8,["api-keys"])):h("",!0),st.value?(i(),ye(ei,{key:5,accounts:F.value,"selected-keys":C.value,onClose:t[33]||(t[33]=r=>st.value=!1),onSuccess:As},null,8,["accounts","selected-keys"])):h("",!0),ne(Ii,{ref_key:"expiryEditModalRef",ref:v,"api-key":be.value||{id:null,expiresAt:null,name:""},show:!!be.value,onClose:Yt,onSave:Ts},null,8,["api-key","show"]),ne(Ld,{"api-key":n.value||{},show:o.value,onClose:t[34]||(t[34]=r=>o.value=!1)},null,8,["api-key","show"])])}}},Lp=De(wp,[["__scopeId","data-v-181b4732"]]);export{Lp as default};