import{E as bs}from"./element-plus-CqiD73Lu.js";import{aP as Wt,r as S,c as F,q as Ne,V as vs,o as Se,x as i,y as o,z as e,I as ne,C as E,P as c,R as ge,J as ks,L as k,B as Me,K as T,aq as X,Q as Y,ac as Z,T as ws,a5 as Ie,D as hs,_ as qe,Y as fe,an as ae,O as I,aa as Be,aV as _e,al as Ae}from"./vue-vendor-Bsazo-x0.js";import{c as B,_ as we,s as U,u as $s}from"./index-DNRbUlyV.js";import{Q as Ve}from"./vendor-Dr8jvgFu.js";import{_ as As}from"./WindowCountdown-BTXjZ8Dc.js";import{C as zt}from"./CustomDropdown-CsUVyI9I.js";const ct=Wt("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 w=await B.get("/admin/supported-clients");return w.success?this.supportedClients=w.data||[]:(this.error=w.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(w){return this.error=w.message||"加载支持的客户端失败",console.error("Error loading supported clients:",w),[]}finally{this.loading=!1}}}}),gt=Wt("apiKeys",()=>{const w=S([]),G=S(!1),g=S(null),q=S("all"),W=S(""),C=S("asc"),_=async()=>{G.value=!0,g.value=null;try{const R=await B.get("/admin/api-keys");if(R.success)w.value=R.data||[];else throw new Error(R.message||"获取API Keys失败")}catch(R){throw g.value=R.message,R}finally{G.value=!1}};return{apiKeys:w,loading:G,error:g,statsTimeRange:q,sortBy:W,sortOrder:C,fetchApiKeys:_,createApiKey:async R=>{G.value=!0,g.value=null;try{const N=await B.post("/admin/api-keys",R);if(N.success)return await _(),N.data;throw new Error(N.message||"创建API Key失败")}catch(N){throw g.value=N.message,N}finally{G.value=!1}},updateApiKey:async(R,N)=>{G.value=!0,g.value=null;try{const K=await B.put(`/admin/api-keys/${R}`,N);if(K.success)return await _(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{G.value=!1}},toggleApiKey:async R=>{G.value=!0,g.value=null;try{const N=await B.put(`/admin/api-keys/${R}/toggle`);if(N.success)return await _(),N;throw new Error(N.message||"切换状态失败")}catch(N){throw g.value=N.message,N}finally{G.value=!1}},renewApiKey:async(R,N)=>{G.value=!0,g.value=null;try{const K=await B.put(`/admin/api-keys/${R}`,N);if(K.success)return await _(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{G.value=!1}},deleteApiKey:async R=>{G.value=!0,g.value=null;try{const N=await B.delete(`/admin/api-keys/${R}`);if(N.success)return await _(),N;throw new Error(N.message||"删除失败")}catch(N){throw g.value=N.message,N}finally{G.value=!1}},fetchApiKeyStats:async(R,N="all")=>{try{const K=await B.get(`/admin/api-keys/${R}/stats`,{params:{timeRange:N}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const R=await B.get("/admin/api-keys/tags");if(R.success)return R.data||[];throw new Error(R.message||"获取标签失败")}catch(R){return console.error("获取标签失败:",R),[]}},sortApiKeys:R=>{W.value===R?C.value=C.value==="asc"?"desc":"asc":(W.value=R,C.value="asc")},reset:()=>{w.value=[],G.value=!1,g.value=null,q.value="all",W.value="",C.value="asc"}}}),Cs={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},Is={class:"relative"},Ks={class:"custom-scrollbar flex-1 overflow-y-auto"},Ls={class:"text-gray-700 dark:text-gray-300"},Ds={key:0},Ts=["onClick"],Ss={class:"flex items-center justify-between"},_s={class:"text-gray-700 dark:text-gray-300"},Ps={class:"text-xs text-gray-500 dark:text-gray-400"},Ms={key:1},Rs={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Vs=["onClick"],Es={class:"flex items-center justify-between"},Os={class:"text-gray-700 dark:text-gray-300"},js={class:"text-xs text-gray-400 dark:text-gray-500"},Us={key:2},qs=["onClick"],Gs={class:"flex items-center justify-between"},zs={class:"text-gray-700 dark:text-gray-300"},Fs={class:"text-xs text-gray-400 dark:text-gray-500"},Ws={key:3},Bs=["onClick"],Ns={class:"flex items-center justify-between"},Hs={class:"text-gray-700 dark:text-gray-300"},Ys={class:"text-xs text-gray-400 dark:text-gray-500"},Qs={key:4,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Js={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:w=>["claude","gemini","openai","bedrock"].includes(w)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"}},emits:["update:modelValue"],setup(w,{emit:G}){const g=w,q=G,W=S(!1),C=S(""),_=S(null),z=S(null),V=S({}),H=S(null),D=S(""),y=F(()=>{if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),p=g.groups.find(n=>n.id===u);return p?`${p.name} (${p.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),p=g.accounts.find(n=>n.id===u&&n.platform==="claude-console");return p?`${p.name} (${L(p)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),p=g.accounts.find(n=>n.id===u&&n.platform==="openai-responses");return p?`${p.name} (${L(p)})`:""}const l=g.accounts.find(u=>u.id===g.modelValue);return l?`${l.name} (${L(l)})`:""}),L=l=>{if(!l)return"未知";if(!(l.isActive==="true"||l.isActive===!0))switch(l.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return l.status==="rate_limited"?"限流中":"正常"},m=F(()=>[...g.accounts].sort((l,u)=>{const p=new Date(l.createdAt||0);return new Date(u.createdAt||0)-p})),s=F(()=>{let l=g.groups.filter(u=>u.platform?u.platform===g.platform:!0);if(C.value){const u=C.value.toLowerCase();l=l.filter(p=>p.name.toLowerCase().includes(u))}return l}),Q=F(()=>{let l=[];if(g.platform==="claude"?l=m.value.filter(u=>u.platform==="claude-oauth"):g.platform==="openai"?l=m.value.filter(u=>u.platform==="openai"):l=m.value.filter(u=>!["claude-oauth","claude-console","openai-responses"].includes(u.platform)),C.value){const u=C.value.toLowerCase();l=l.filter(p=>p.name.toLowerCase().includes(u))}return l}),R=F(()=>{if(g.platform!=="claude")return[];let l=m.value.filter(u=>u.platform==="claude-console");if(C.value){const u=C.value.toLowerCase();l=l.filter(p=>p.name.toLowerCase().includes(u))}return l}),N=F(()=>{if(g.platform!=="openai")return[];let l=m.value.filter(u=>u.platform==="openai-responses");if(C.value){const u=C.value.toLowerCase();l=l.filter(p=>p.name.toLowerCase().includes(u))}return l}),K=F(()=>s.value.length>0||Q.value.length>0||R.value.length>0||N.value.length>0),b=l=>{if(!l)return"";const u=new Date(l),n=(new Date-u)/(1e3*60*60);return n<24?"今天创建":n<48?"昨天创建":n<168?`${Math.floor(n/24)} 天前`:u.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},d=()=>{if(!W.value||!z.value||!H.value)return;const l=H.value;if(!l)return;const u=l.getBoundingClientRect(),p=window.innerHeight,n=window.innerWidth,v=p-u.bottom,oe=u.top,ue=8,ee=v-ue,be=oe-ue;let ie=!1,te=ee;D.value==="above"&&be>=150?(ie=!0,te=be):D.value==="below"&&ee>=150?(ie=!1,te=ee):be>ee&&ee<200&&(ie=!0,te=be),D.value=ie?"above":"below";let le=u.left;const he=u.width;le+he>n-ue&&(le=n-he-ue),le{if(!W.value&&H.value){const l=H.value.getBoundingClientRect(),p=window.innerHeight-l.bottom,n=8;V.value={position:"fixed",left:`${l.left}px`,width:`${l.width}px`,maxHeight:`${Math.min(p-n,400)}px`,top:`${l.bottom}px`}}W.value=!W.value,W.value&&hs(()=>{var l;d(),(l=_.value)==null||l.focus()})},J=l=>{q("update:modelValue",l||""),W.value=!1,C.value=""},O=()=>{},$=()=>{var l;C.value="",(l=_.value)==null||l.focus()},de=l=>{var u,p;!((u=H.value)!=null&&u.contains(l.target))&&!((p=z.value)!=null&&p.contains(l.target))&&(W.value=!1)},P=()=>{W.value&&d()};return Ne(()=>{document.addEventListener("click",de),window.addEventListener("scroll",P,!0),window.addEventListener("resize",d)}),vs(()=>{document.removeEventListener("click",de),window.removeEventListener("scroll",P,!0),window.removeEventListener("resize",d)}),Se(W,l=>{l||(C.value="",D.value="")}),(l,u)=>(o(),i("div",{ref_key:"triggerRef",ref:H,class:"relative"},[e("div",{class:E(["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":w.disabled}]),onClick:u[0]||(u[0]=p=>!w.disabled&&f())},[e("span",{class:E(w.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(y.value),3),e("i",{class:E(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":W.value}])},null,2)],2),(o(),ne(Ie,{to:"body"},[ge(ws,{"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:ks(()=>[W.value?(o(),i("div",{key:0,ref_key:"dropdownRef",ref:z,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:Me(V.value)},[e("div",Cs,[e("div",Is,[T(e("input",{ref_key:"searchInput",ref:_,"onUpdate:modelValue":u[1]||(u[1]=p=>C.value=p),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:O},null,544),[[X,C.value]]),u[4]||(u[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?(o(),i("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:$},u[3]||(u[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):k("",!0)])]),e("div",Ks,[e("div",{class:E(["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":!w.modelValue}]),onClick:u[2]||(u[2]=p=>J(null))},[e("span",Ls,c(w.defaultOptionText),1)],2),s.value.length>0?(o(),i("div",Ds,[u[5]||(u[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)),(o(!0),i(Y,null,Z(s.value,p=>(o(),i("div",{key:`group:${p.id}`,class:E(["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":w.modelValue===`group:${p.id}`}]),onClick:n=>J(`group:${p.id}`)},[e("div",Ss,[e("span",_s,c(p.name),1),e("span",Ps,c(p.memberCount||0)+" 个成员",1)])],10,Ts))),128))])):k("",!0),Q.value.length>0?(o(),i("div",Ms,[e("div",Rs,c(w.platform==="claude"?"Claude OAuth 专属账号":w.platform==="openai"?"OpenAI 专属账号":"OAuth 专属账号"),1),(o(!0),i(Y,null,Z(Q.value,p=>(o(),i("div",{key:p.id,class:E(["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":w.modelValue===p.id}]),onClick:n=>J(p.id)},[e("div",Es,[e("div",null,[e("span",Os,c(p.name),1),e("span",{class:E(["ml-2 rounded-full px-2 py-0.5 text-xs",p.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":p.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"])},c(L(p)),3)]),e("span",js,c(b(p.createdAt)),1)])],10,Vs))),128))])):k("",!0),w.platform==="claude"&&R.value.length>0?(o(),i("div",Us,[u[6]||(u[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)),(o(!0),i(Y,null,Z(R.value,p=>(o(),i("div",{key:p.id,class:E(["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":w.modelValue===`console:${p.id}`}]),onClick:n=>J(`console:${p.id}`)},[e("div",Gs,[e("div",null,[e("span",zs,c(p.name),1),e("span",{class:E(["ml-2 rounded-full px-2 py-0.5 text-xs",p.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":p.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"])},c(L(p)),3)]),e("span",Fs,c(b(p.createdAt)),1)])],10,qs))),128))])):k("",!0),w.platform==="openai"&&N.value.length>0?(o(),i("div",Ws,[u[7]||(u[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)),(o(!0),i(Y,null,Z(N.value,p=>(o(),i("div",{key:p.id,class:E(["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":w.modelValue===`responses:${p.id}`}]),onClick:n=>J(`responses:${p.id}`)},[e("div",Ns,[e("div",null,[e("span",Hs,c(p.name),1),e("span",{class:E(["ml-2 rounded-full px-2 py-0.5 text-xs",p.isActive==="true"||p.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":p.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"])},c(L(p)),3)]),e("span",Ys,c(b(p.createdAt)),1)])],10,Bs))),128))])):k("",!0),C.value&&!K.value?(o(),i("div",Qs,u[8]||(u[8]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):k("",!0)])],4)):k("",!0)]),_:1})]))],512))}},Pe=we(Js,[["__scopeId","data-v-ba978ba9"]]),Xs={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Zs={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},ea={class:"mb-4 flex items-center justify-between"},ta={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"},sa={class:"flex items-center gap-3 sm:gap-4"},aa={class:"flex cursor-pointer items-center"},ra={class:"flex cursor-pointer items-center"},oa={key:0,class:"mt-3"},la={class:"flex items-center gap-4"},na={class:"flex-1"},ia={class:"flex items-center gap-2"},da={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},ua=["placeholder"],ca={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},ga={class:"space-y-4"},pa={key:0},ma={class:"flex flex-wrap gap-2"},xa=["onClick"],ya={key:1},fa={class:"flex flex-wrap gap-2"},ba=["onClick"],va={class:"flex gap-2"},ka=["onKeypress"],wa={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},ha={class:"space-y-2"},$a={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Aa={class:"space-y-2"},Ca={class:"flex gap-2"},Ia={class:"space-y-2"},Ka={class:"flex gap-2"},La={class:"space-y-2"},Da={class:"flex gap-2"},Ta={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Sa={class:"flex items-center gap-4"},_a={class:"flex cursor-pointer items-center"},Pa={class:"flex cursor-pointer items-center"},Ma={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ra={key:0},Va={key:1},Ea={key:0},Oa={key:0,class:"mt-3"},ja=["min"],Ua={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qa={key:1},Ga={class:"flex items-center gap-2"},za={class:"mt-2 flex flex-wrap gap-2"},Fa=["onClick"],Wa={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ba={class:"flex gap-4"},Na={class:"flex cursor-pointer items-center"},Ha={class:"flex cursor-pointer items-center"},Ya={class:"flex cursor-pointer items-center"},Qa={class:"flex cursor-pointer items-center"},Ja={class:"mb-2 flex items-center justify-between"},Xa=["disabled"],Za={class:"grid grid-cols-1 gap-3"},er={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"},ar=["onClick"],rr={key:0,class:"text-sm text-gray-400"},or={class:"space-y-3"},lr={class:"flex flex-wrap gap-2"},nr=["onClick"],ir={key:0,class:"text-sm italic text-gray-400"},dr={class:"flex gap-2"},ur=["onKeydown"],cr={class:"mb-2 flex items-center"},gr={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},pr={class:"space-y-1"},mr=["id","value"],xr=["for"],yr={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},fr={class:"block text-xs text-gray-500 dark:text-gray-400"},br={class:"flex gap-3 pt-2"},vr=["disabled"],kr={key:0,class:"loading-spinner mr-2"},wr={key:1,class:"fas fa-plus mr-2"},hr={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[]})}},emits:["close","success","batch-success"],setup(w,{emit:G}){const g=w,q=G,W=ct(),C=gt(),_=S(!1),z=S(!1),V=S({claude:[],gemini:[],openai:[],bedrock:[],claudeGroups:[],geminiGroups:[],openaiGroups:[]}),H=S({name:""}),D=S(""),y=S([]),L=F(()=>y.value.filter(p=>!s.tags.includes(p))),m=S([]),s=qe({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,permissions:"all",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});Ne(async()=>{if(m.value=await W.loadSupportedClients(),y.value=await C.fetchTags(),g.accounts){const p=[];g.accounts.openai&&g.accounts.openai.forEach(n=>{p.push({...n,platform:"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(n=>{p.push({...n,platform:"openai-responses"})}),V.value={claude:g.accounts.claude||[],gemini:g.accounts.gemini||[],openai:p,bedrock:g.accounts.bedrock||[],claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[]}}await Q()});const Q=async()=>{var p,n;z.value=!0;try{const[v,oe,ue,ee,be,ie,te]=await Promise.all([B.get("/admin/claude-accounts"),B.get("/admin/claude-console-accounts"),B.get("/admin/gemini-accounts"),B.get("/admin/openai-accounts"),B.get("/admin/openai-responses-accounts"),B.get("/admin/bedrock-accounts"),B.get("/admin/account-groups")]),le=[];v.success&&((p=v.data)==null||p.forEach(se=>{le.push({...se,platform:"claude-oauth",isDedicated:se.accountType==="dedicated"})})),oe.success&&((n=oe.data)==null||n.forEach(se=>{le.push({...se,platform:"claude-console",isDedicated:se.accountType==="dedicated"})})),V.value.claude=le,ue.success&&(V.value.gemini=(ue.data||[]).map(se=>({...se,isDedicated:se.accountType==="dedicated"})));const he=[];if(ee.success&&(ee.data||[]).forEach(se=>{he.push({...se,platform:"openai",isDedicated:se.accountType==="dedicated"})}),be.success&&(be.data||[]).forEach(se=>{he.push({...se,platform:"openai-responses",isDedicated:se.accountType==="dedicated"})}),V.value.openai=he,ie.success&&(V.value.bedrock=(ie.data||[]).map(se=>({...se,isDedicated:se.accountType==="dedicated"}))),te.success){const se=te.data||[];V.value.claudeGroups=se.filter(Ce=>Ce.platform==="claude"),V.value.geminiGroups=se.filter(Ce=>Ce.platform==="gemini"),V.value.openaiGroups=se.filter(Ce=>Ce.platform==="openai")}U("账号列表已刷新","success")}catch{U("刷新账号列表失败","error")}finally{z.value=!1}},R=F(()=>{const p=new Date;return p.setMinutes(p.getMinutes()+1),p.toISOString().slice(0,16)}),N=()=>{if(!s.expireDuration){s.expiresAt=null;return}if(s.expireDuration==="custom")return;const p=new Date,v=s.expireDuration.match(/(\d+)([dhmy])/);if(v){const[,oe,ue]=v,ee=parseInt(oe);switch(ue){case"d":p.setDate(p.getDate()+ee);break;case"h":p.setHours(p.getHours()+ee);break;case"m":p.setMonth(p.getMonth()+ee);break;case"y":p.setFullYear(p.getFullYear()+ee);break}s.expiresAt=p.toISOString()}},K=()=>{s.customExpireDate&&(s.expiresAt=new Date(s.customExpireDate).toISOString())},b=p=>new Date(p).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),d=()=>{s.modelInput&&!s.restrictedModels.includes(s.modelInput)&&(s.restrictedModels.push(s.modelInput),s.modelInput="")},f=p=>{s.restrictedModels.splice(p,1)},J=S(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),O=F(()=>J.value.filter(p=>!s.restrictedModels.includes(p))),$=p=>{s.restrictedModels.includes(p)||s.restrictedModels.push(p)},de=()=>{if(D.value&&D.value.trim()){const p=D.value.trim();s.tags.includes(p)||s.tags.push(p),D.value=""}},P=p=>{s.tags.includes(p)||s.tags.push(p)},l=p=>{s.tags.splice(p,1)},u=async()=>{if(H.value.name="",!s.name||!s.name.trim()){H.value.name="请输入API Key名称";return}if(s.createType==="batch"&&(!s.batchCount||s.batchCount<2||s.batchCount>500)){U("批量创建数量必须在 2-500 之间","error");return}if(s.rateLimitWindow&&(!s.rateLimitCost||parseFloat(s.rateLimitCost)===0)){let p=!1;if(window.showConfirm?p=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`,"继续创建","返回修改"):p=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`),!p)return}_.value=!0;try{const p={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,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:")?(p.claudeConsoleAccountId=s.claudeAccountId.substring(8),delete p.claudeAccountId):(p.claudeAccountId=s.claudeAccountId,delete p.claudeConsoleAccountId)),s.geminiAccountId&&(p.geminiAccountId=s.geminiAccountId),s.openaiAccountId&&(p.openaiAccountId=s.openaiAccountId),s.bedrockAccountId&&(p.bedrockAccountId=s.bedrockAccountId),s.createType==="single"){const n={...p,name:s.name},v=await B.post("/admin/api-keys",n);v.success?(U("API Key 创建成功","success"),q("success",v.data),q("close")):U(v.message||"创建失败","error")}else{const n={...p,createType:"batch",baseName:s.name,count:s.batchCount},v=await B.post("/admin/api-keys/batch",n);v.success?(U(`成功创建 ${v.data.length} 个 API Key`,"success"),q("batch-success",v.data),q("close")):U(v.message||"批量创建失败","error")}}catch{U("创建失败","error")}finally{_.value=!1}};return(p,n)=>(o(),ne(Ie,{to:"body"},[e("div",Xs,[e("div",Zs,[e("div",ea,[n[46]||(n[46]=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:n[0]||(n[0]=v=>p.$emit("close"))},n[45]||(n[45]=[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:fe(u,["prevent"])},[e("div",ta,[e("div",{class:E(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",s.createType==="batch"?"mb-3":""])},[n[49]||(n[49]=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",sa,[e("label",aa,[T(e("input",{"onUpdate:modelValue":n[1]||(n[1]=v=>s.createType=v),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),[[ae,s.createType]]),n[47]||(n[47]=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"}),I(" 单个创建 ")],-1))]),e("label",ra,[T(e("input",{"onUpdate:modelValue":n[2]||(n[2]=v=>s.createType=v),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),[[ae,s.createType]]),n[48]||(n[48]=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"}),I(" 批量创建 ")],-1))])])],2),s.createType==="batch"?(o(),i("div",oa,[e("div",la,[e("div",na,[n[51]||(n[51]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",ia,[T(e("input",{"onUpdate:modelValue":n[3]||(n[3]=v=>s.batchCount=v),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),[[X,s.batchCount,void 0,{number:!0}]]),n[50]||(n[50]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",da,[n[52]||(n[52]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+c(s.name||"MyKey")+"_1, "+c(s.name||"MyKey")+"_2 ...",1)])])):k("",!0)]),e("div",null,[n[53]||(n[53]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[I("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[T(e("input",{"onUpdate:modelValue":n[4]||(n[4]=v=>s.name=v),class:E(["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":H.value.name}]),placeholder:s.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:n[5]||(n[5]=v=>H.value.name="")},null,42,ua),[[X,s.name]])]),H.value.name?(o(),i("p",ca,c(H.value.name),1)):k("",!0)]),e("div",null,[n[61]||(n[61]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",ga,[s.tags.length>0?(o(),i("div",pa,[n[55]||(n[55]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",ma,[(o(!0),i(Y,null,Z(s.tags,(v,oe)=>(o(),i("span",{key:"selected-"+oe,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"},[I(c(v)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:ue=>l(oe)},n[54]||(n[54]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,xa)]))),128))])])):k("",!0),L.value.length>0?(o(),i("div",ya,[n[57]||(n[57]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",fa,[(o(!0),i(Y,null,Z(L.value,v=>(o(),i("button",{key:"available-"+v,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:oe=>P(v)},[n[56]||(n[56]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),I(" "+c(v),1)],8,ba))),128))])])):k("",!0),e("div",null,[n[59]||(n[59]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",va,[T(e("input",{"onUpdate:modelValue":n[6]||(n[6]=v=>D.value=v),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:Be(fe(de,["prevent"]),["enter"])},null,40,ka),[[X,D.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:de},n[58]||(n[58]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),n[60]||(n[60]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",wa,[n[69]||(n[69]=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",ha,[e("div",$a,[e("div",null,[n[62]||(n[62]=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]=v=>s.rateLimitWindow=v),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),[[X,s.rateLimitWindow]]),n[63]||(n[63]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[n[64]||(n[64]=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]=v=>s.rateLimitRequests=v),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),[[X,s.rateLimitRequests]]),n[65]||(n[65]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[n[66]||(n[66]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),T(e("input",{"onUpdate:modelValue":n[9]||(n[9]=v=>s.rateLimitCost=v),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),[[X,s.rateLimitCost]]),n[67]||(n[67]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),n[68]||(n[68]=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:"),I(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),I(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),I(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[n[71]||(n[71]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Aa,[e("div",Ca,[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:n[10]||(n[10]=v=>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:n[11]||(n[11]=v=>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:n[12]||(n[12]=v=>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:n[13]||(n[13]=v=>s.dailyCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":n[14]||(n[14]=v=>s.dailyCostLimit=v),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),[[X,s.dailyCostLimit]]),n[70]||(n[70]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[n[73]||(n[73]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Ia,[e("div",Ka,[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:n[15]||(n[15]=v=>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:n[16]||(n[16]=v=>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:n[17]||(n[17]=v=>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:n[18]||(n[18]=v=>s.totalCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":n[19]||(n[19]=v=>s.totalCostLimit=v),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),[[X,s.totalCostLimit]]),n[72]||(n[72]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[n[75]||(n[75]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Opus 模型周费用限制 (美元)",-1)),e("div",La,[e("div",Da,[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:n[20]||(n[20]=v=>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:n[21]||(n[21]=v=>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:n[22]||(n[22]=v=>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:n[23]||(n[23]=v=>s.weeklyOpusCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":n[24]||(n[24]=v=>s.weeklyOpusCostLimit=v),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),[[X,s.weeklyOpusCostLimit]]),n[74]||(n[74]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户,0 或留空表示无限制 ",-1))])]),e("div",null,[n[76]||(n[76]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),T(e("input",{"onUpdate:modelValue":n[25]||(n[25]=v=>s.concurrencyLimit=v),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),[[X,s.concurrencyLimit]]),n[77]||(n[77]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[n[78]||(n[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),T(e("textarea",{"onUpdate:modelValue":n[26]||(n[26]=v=>s.description=v),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),[[X,s.description]])]),e("div",null,[n[86]||(n[86]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Ta,[e("div",Sa,[e("label",_a,[T(e("input",{"onUpdate:modelValue":n[27]||(n[27]=v=>s.expirationMode=v),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[ae,s.expirationMode]]),n[79]||(n[79]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",Pa,[T(e("input",{"onUpdate:modelValue":n[28]||(n[28]=v=>s.expirationMode=v),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[ae,s.expirationMode]]),n[80]||(n[80]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Ma,[s.expirationMode==="fixed"?(o(),i("span",Ra,n[81]||(n[81]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),I(" 固定时间模式:Key 创建后立即生效,按设定时间过期 ",-1)]))):(o(),i("span",Va,n[82]||(n[82]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),I(" 激活模式:Key 首次使用时激活,激活后按设定天数过期(适合批量销售) ",-1)])))])]),s.expirationMode==="fixed"?(o(),i("div",Ea,[T(e("select",{"onUpdate:modelValue":n[29]||(n[29]=v=>s.expireDuration=v),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:N},n[83]||(n[83]=[e("option",{value:""},"永不过期",-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),[[_e,s.expireDuration]]),s.expireDuration==="custom"?(o(),i("div",Oa,[T(e("input",{"onUpdate:modelValue":n[30]||(n[30]=v=>s.customExpireDate=v),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:R.value,type:"datetime-local",onChange:K},null,40,ja),[[X,s.customExpireDate]])])):k("",!0),s.expiresAt?(o(),i("p",Ua," 将于 "+c(b(s.expiresAt))+" 过期 ",1)):k("",!0)])):(o(),i("div",qa,[e("div",Ga,[T(e("input",{"onUpdate:modelValue":n[31]||(n[31]=v=>s.activationDays=v),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"3650",min:"1",placeholder:"输入天数",type:"number"},null,512),[[X,s.activationDays,void 0,{number:!0}]]),n[84]||(n[84]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"天",-1))]),e("div",za,[(o(),i(Y,null,Z([30,90,180,365],v=>e("button",{key:v,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:oe=>s.activationDays=v},c(v)+"天 ",9,Fa)),64))]),e("p",Wa,[n[85]||(n[85]=e("i",{class:"fas fa-clock mr-1"},null,-1)),I(" Key 将在首次使用后激活,激活后 "+c(s.activationDays||30)+" 天过期 ",1)])]))]),e("div",null,[n[91]||(n[91]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Ba,[e("label",Na,[T(e("input",{"onUpdate:modelValue":n[32]||(n[32]=v=>s.permissions=v),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"all"},null,512),[[ae,s.permissions]]),n[87]||(n[87]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"全部服务",-1))]),e("label",Ha,[T(e("input",{"onUpdate:modelValue":n[33]||(n[33]=v=>s.permissions=v),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude"},null,512),[[ae,s.permissions]]),n[88]||(n[88]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Claude",-1))]),e("label",Ya,[T(e("input",{"onUpdate:modelValue":n[34]||(n[34]=v=>s.permissions=v),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"gemini"},null,512),[[ae,s.permissions]]),n[89]||(n[89]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Gemini",-1))]),e("label",Qa,[T(e("input",{"onUpdate:modelValue":n[35]||(n[35]=v=>s.permissions=v),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"openai"},null,512),[[ae,s.permissions]]),n[90]||(n[90]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 OpenAI",-1))])]),n[92]||(n[92]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 控制此 API Key 可以访问哪些服务 ",-1))]),e("div",null,[e("div",Ja,[n[93]||(n[93]=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:z.value,title:"刷新账号列表",type:"button",onClick:Q},[e("i",{class:E(["fas",z.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(z.value?"刷新中...":"刷新账号"),1)],8,Xa)]),e("div",Za,[e("div",null,[n[94]||(n[94]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ge(Pe,{modelValue:s.claudeAccountId,"onUpdate:modelValue":n[36]||(n[36]=v=>s.claudeAccountId=v),accounts:V.value.claude,"default-option-text":"使用共享账号池",disabled:s.permissions==="gemini"||s.permissions==="openai",groups:V.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[n[95]||(n[95]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ge(Pe,{modelValue:s.geminiAccountId,"onUpdate:modelValue":n[37]||(n[37]=v=>s.geminiAccountId=v),accounts:V.value.gemini,"default-option-text":"使用共享账号池",disabled:s.permissions==="claude"||s.permissions==="openai",groups:V.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[n[96]||(n[96]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ge(Pe,{modelValue:s.openaiAccountId,"onUpdate:modelValue":n[38]||(n[38]=v=>s.openaiAccountId=v),accounts:V.value.openai,"default-option-text":"使用共享账号池",disabled:s.permissions==="claude"||s.permissions==="gemini",groups:V.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[n[97]||(n[97]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ge(Pe,{modelValue:s.bedrockAccountId,"onUpdate:modelValue":n[39]||(n[39]=v=>s.bedrockAccountId=v),accounts:V.value.bedrock,"default-option-text":"使用共享账号池",disabled:s.permissions==="gemini"||s.permissions==="openai",groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])])]),n[98]||(n[98]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",er,[T(e("input",{id:"enableModelRestriction","onUpdate:modelValue":n[40]||(n[40]=v=>s.enableModelRestriction=v),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ae,s.enableModelRestriction]]),n[99]||(n[99]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),s.enableModelRestriction?(o(),i("div",tr,[e("div",null,[n[102]||(n[102]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",sr,[(o(!0),i(Y,null,Z(s.restrictedModels,(v,oe)=>(o(),i("span",{key:oe,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[I(c(v)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:ue=>f(oe)},n[100]||(n[100]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,ar)]))),128)),s.restrictedModels.length===0?(o(),i("span",rr," 暂无限制的模型 ")):k("",!0)]),e("div",or,[e("div",lr,[(o(!0),i(Y,null,Z(O.value,v=>(o(),i("button",{key:v,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:oe=>$(v)},c(v),9,nr))),128)),O.value.length===0?(o(),i("span",ir," 所有常用模型已在限制列表中 ")):k("",!0)]),e("div",dr,[T(e("input",{"onUpdate:modelValue":n[41]||(n[41]=v=>s.modelInput=v),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:Be(fe(d,["prevent"]),["enter"])},null,40,ur),[[X,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:d},n[101]||(n[101]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),n[103]||(n[103]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):k("",!0)]),e("div",null,[e("div",cr,[T(e("input",{id:"enableClientRestriction","onUpdate:modelValue":n[42]||(n[42]=v=>s.enableClientRestriction=v),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ae,s.enableClientRestriction]]),n[104]||(n[104]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),s.enableClientRestriction?(o(),i("div",gr,[e("div",null,[n[105]||(n[105]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",pr,[(o(!0),i(Y,null,Z(m.value,v=>(o(),i("div",{key:v.id,class:"flex items-start"},[T(e("input",{id:`client_${v.id}`,"onUpdate:modelValue":n[43]||(n[43]=oe=>s.allowedClients=oe),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:v.id},null,8,mr),[[Ae,s.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${v.id}`},[e("span",yr,c(v.name),1),e("span",fr,c(v.description),1)],8,xr)]))),128))])])])):k("",!0)]),e("div",br,[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:n[44]||(n[44]=v=>p.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:_.value,type:"submit"},[_.value?(o(),i("div",kr)):(o(),i("i",wr)),I(" "+c(_.value?"创建中...":"创建"),1)],8,vr)])],32)])])]))}},$r=we(hr,[["__scopeId","data-v-957cdf76"]]),Ar={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Cr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Ir={class:"mb-4 flex items-center justify-between sm:mb-6"},Kr=["value"],Lr={key:0,class:"text-gray-500"},Dr={class:"space-y-4"},Tr={key:0},Sr={class:"flex flex-wrap gap-2"},_r=["onClick"],Pr={key:1},Mr={class:"flex flex-wrap gap-2"},Rr=["onClick"],Vr={class:"flex gap-2"},Er=["onKeypress"],Or={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},jr={class:"space-y-2"},Ur={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},qr={class:"space-y-3"},Gr={class:"flex gap-2"},zr={class:"space-y-3"},Fr={class:"flex gap-2"},Wr={class:"space-y-3"},Br={class:"flex gap-2"},Nr={class:"mb-3 flex items-center"},Hr={class:"flex gap-4"},Yr={class:"flex cursor-pointer items-center"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"mb-3 flex items-center justify-between"},eo=["disabled"],to={class:"grid grid-cols-1 gap-3"},so={class:"mb-3 flex items-center"},ao={key:0,class:"space-y-3"},ro={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"},oo=["onClick"],lo={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},no={class:"space-y-3"},io={class:"flex flex-wrap gap-2"},uo=["onClick"],co={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},go={class:"flex gap-2"},po=["onKeydown"],mo={class:"mb-3 flex items-center"},xo={key:0,class:"space-y-3"},yo={class:"space-y-2"},fo=["id","value"],bo=["for"],vo={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},ko={class:"block text-xs text-gray-500 dark:text-gray-400"},wo={class:"flex gap-3 pt-4"},ho=["disabled"],$o={key:0,class:"loading-spinner mr-2"},Ao={key:1,class:"fas fa-save mr-2"},Co={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[]})}},emits:["close","success"],setup(w,{emit:G}){const g=w,q=G,W=ct(),C=gt(),_=S(!1),z=S(!1),V=S({claude:[],gemini:[],openai:[],bedrock:[],claudeGroups:[],geminiGroups:[],openaiGroups:[]}),H=S([]),D=S([]),y=S(""),L=S([]),m=F(()=>L.value.filter(P=>!s.tags.includes(P))),s=qe({name:"",tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"all",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),Q=()=>{s.modelInput&&!s.restrictedModels.includes(s.modelInput)&&(s.restrictedModels.push(s.modelInput),s.modelInput="")},R=P=>{s.restrictedModels.splice(P,1)},N=S(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),K=F(()=>N.value.filter(P=>!s.restrictedModels.includes(P))),b=P=>{s.restrictedModels.includes(P)||s.restrictedModels.push(P)},d=()=>{if(y.value&&y.value.trim()){const P=y.value.trim();s.tags.includes(P)||s.tags.push(P),y.value=""}},f=P=>{s.tags.includes(P)||s.tags.push(P)},J=P=>{s.tags.splice(P,1)},O=async()=>{if(s.rateLimitWindow&&(!s.rateLimitCost||parseFloat(s.rateLimitCost)===0)){let P=!1;if(window.showConfirm?P=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`,"继续保存","返回修改"):P=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`),!P)return}_.value=!0;try{const P={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:")?(P.claudeConsoleAccountId=s.claudeAccountId.substring(8),P.claudeAccountId=null):(s.claudeAccountId.startsWith("group:"),P.claudeAccountId=s.claudeAccountId,P.claudeConsoleAccountId=null):(P.claudeAccountId=null,P.claudeConsoleAccountId=null),s.geminiAccountId?P.geminiAccountId=s.geminiAccountId:P.geminiAccountId=null,s.openaiAccountId?P.openaiAccountId=s.openaiAccountId:P.openaiAccountId=null,s.bedrockAccountId?P.bedrockAccountId=s.bedrockAccountId:P.bedrockAccountId=null,P.enableModelRestriction=s.enableModelRestriction,P.restrictedModels=s.restrictedModels,P.enableClientRestriction=s.enableClientRestriction,P.allowedClients=s.allowedClients,P.isActive=s.isActive,s.ownerId!==void 0&&(P.ownerId=s.ownerId);const l=await B.put(`/admin/api-keys/${g.apiKey.id}`,P);l.success?(q("success"),q("close")):U(l.message||"更新失败","error")}catch{U("更新失败","error")}finally{_.value=!1}},$=async()=>{var P,l;z.value=!0;try{const[u,p,n,v,oe,ue,ee]=await Promise.all([B.get("/admin/claude-accounts"),B.get("/admin/claude-console-accounts"),B.get("/admin/gemini-accounts"),B.get("/admin/openai-accounts"),B.get("/admin/openai-responses-accounts"),B.get("/admin/bedrock-accounts"),B.get("/admin/account-groups")]),be=[];u.success&&((P=u.data)==null||P.forEach(te=>{be.push({...te,platform:"claude-oauth",isDedicated:te.accountType==="dedicated"})})),p.success&&((l=p.data)==null||l.forEach(te=>{be.push({...te,platform:"claude-console",isDedicated:te.accountType==="dedicated"})})),V.value.claude=be,n.success&&(V.value.gemini=(n.data||[]).map(te=>({...te,isDedicated:te.accountType==="dedicated"})));const ie=[];if(v.success&&(v.data||[]).forEach(te=>{ie.push({...te,platform:"openai",isDedicated:te.accountType==="dedicated"})}),oe.success&&(oe.data||[]).forEach(te=>{ie.push({...te,platform:"openai-responses",isDedicated:te.accountType==="dedicated"})}),V.value.openai=ie,ue.success&&(V.value.bedrock=(ue.data||[]).map(te=>({...te,isDedicated:te.accountType==="dedicated"}))),ee.success){const te=ee.data||[];V.value.claudeGroups=te.filter(le=>le.platform==="claude"),V.value.geminiGroups=te.filter(le=>le.platform==="gemini"),V.value.openaiGroups=te.filter(le=>le.platform==="openai")}U("账号列表已刷新","success")}catch{U("刷新账号列表失败","error")}finally{z.value=!1}},de=async()=>{try{const P=await B.get("/admin/users");P.success&&(D.value=P.data||[])}catch{D.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return Ne(async()=>{try{const[P,l]=await Promise.all([W.loadSupportedClients(),C.fetchTags(),de()]);H.value=P||[],L.value=l||[]}catch{H.value=[],L.value=[]}if(g.accounts){const P=[];g.accounts.openai&&g.accounts.openai.forEach(l=>{P.push({...l,platform:"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(l=>{P.push({...l,platform:"openai-responses"})}),V.value={claude:g.accounts.claude||[],gemini:g.accounts.gemini||[],openai:P,bedrock:g.accounts.bedrock||[],claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[]}}await $(),s.name=g.apiKey.name,s.tokenLimit=g.apiKey.tokenLimit||"",s.rateLimitCost=g.apiKey.rateLimitCost||"",g.apiKey.tokenLimit>0&&g.apiKey.rateLimitCost,s.rateLimitWindow=g.apiKey.rateLimitWindow||"",s.rateLimitRequests=g.apiKey.rateLimitRequests||"",s.concurrencyLimit=g.apiKey.concurrencyLimit||"",s.dailyCostLimit=g.apiKey.dailyCostLimit||"",s.totalCostLimit=g.apiKey.totalCostLimit||"",s.weeklyOpusCostLimit=g.apiKey.weeklyOpusCostLimit||"",s.permissions=g.apiKey.permissions||"all",g.apiKey.claudeConsoleAccountId?s.claudeAccountId=`console:${g.apiKey.claudeConsoleAccountId}`:s.claudeAccountId=g.apiKey.claudeAccountId||"",s.geminiAccountId=g.apiKey.geminiAccountId||"",s.openaiAccountId=g.apiKey.openaiAccountId||"",s.bedrockAccountId=g.apiKey.bedrockAccountId||"",s.restrictedModels=g.apiKey.restrictedModels||[],s.allowedClients=g.apiKey.allowedClients||[],s.tags=g.apiKey.tags||[],s.enableModelRestriction=g.apiKey.enableModelRestriction||!1,s.enableClientRestriction=g.apiKey.enableClientRestriction||!1,s.isActive=g.apiKey.isActive!==void 0?g.apiKey.isActive:!0,s.ownerId=g.apiKey.userId||"admin"}),(P,l)=>(o(),ne(Ie,{to:"body"},[e("div",Ar,[e("div",Cr,[e("div",Ir,[l[38]||(l[38]=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:l[0]||(l[0]=u=>P.$emit("close"))},l[37]||(l[37]=[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:fe(O,["prevent"])},[e("div",null,[l[39]||(l[39]=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":l[1]||(l[1]=u=>s.name=u),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),[[X,s.name]])]),l[40]||(l[40]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",null,[l[41]||(l[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)),T(e("select",{"onUpdate:modelValue":l[2]||(l[2]=u=>s.ownerId=u),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(o(!0),i(Y,null,Z(D.value,u=>(o(),i("option",{key:u.id,value:u.id},[I(c(u.displayName)+" ("+c(u.username)+") ",1),u.role==="admin"?(o(),i("span",Lr,"- 管理员")):k("",!0)],8,Kr))),128))],512),[[_e,s.ownerId]]),l[42]||(l[42]=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,[l[50]||(l[50]=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",Dr,[s.tags.length>0?(o(),i("div",Tr,[l[44]||(l[44]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",Sr,[(o(!0),i(Y,null,Z(s.tags,(u,p)=>(o(),i("span",{key:"selected-"+p,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"},[I(c(u)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:n=>J(p)},l[43]||(l[43]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,_r)]))),128))])])):k("",!0),m.value.length>0?(o(),i("div",Pr,[l[46]||(l[46]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Mr,[(o(!0),i(Y,null,Z(m.value,u=>(o(),i("button",{key:"available-"+u,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:p=>f(u)},[l[45]||(l[45]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),I(" "+c(u),1)],8,Rr))),128))])])):k("",!0),e("div",null,[l[48]||(l[48]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",Vr,[T(e("input",{"onUpdate:modelValue":l[3]||(l[3]=u=>y.value=u),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:Be(fe(d,["prevent"]),["enter"])},null,40,Er),[[X,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:d},l[47]||(l[47]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[49]||(l[49]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",Or,[l[58]||(l[58]=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",jr,[e("div",Ur,[e("div",null,[l[51]||(l[51]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),T(e("input",{"onUpdate:modelValue":l[4]||(l[4]=u=>s.rateLimitWindow=u),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),[[X,s.rateLimitWindow]]),l[52]||(l[52]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[53]||(l[53]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),T(e("input",{"onUpdate:modelValue":l[5]||(l[5]=u=>s.rateLimitRequests=u),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),[[X,s.rateLimitRequests]]),l[54]||(l[54]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[55]||(l[55]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),T(e("input",{"onUpdate:modelValue":l[6]||(l[6]=u=>s.rateLimitCost=u),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),[[X,s.rateLimitCost]]),l[56]||(l[56]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[57]||(l[57]=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:"),I(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),I(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),I(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[60]||(l[60]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",qr,[e("div",Gr,[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:l[7]||(l[7]=u=>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:l[8]||(l[8]=u=>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:l[9]||(l[9]=u=>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:l[10]||(l[10]=u=>s.dailyCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":l[11]||(l[11]=u=>s.dailyCostLimit=u),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),[[X,s.dailyCostLimit]]),l[59]||(l[59]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[62]||(l[62]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",zr,[e("div",Fr,[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:l[12]||(l[12]=u=>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:l[13]||(l[13]=u=>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:l[14]||(l[14]=u=>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:l[15]||(l[15]=u=>s.totalCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":l[16]||(l[16]=u=>s.totalCostLimit=u),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),[[X,s.totalCostLimit]]),l[61]||(l[61]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[64]||(l[64]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Opus 模型周费用限制 (美元)",-1)),e("div",Wr,[e("div",Br,[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:l[17]||(l[17]=u=>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:l[18]||(l[18]=u=>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:l[19]||(l[19]=u=>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:l[20]||(l[20]=u=>s.weeklyOpusCostLimit="")}," 自定义 ")]),T(e("input",{"onUpdate:modelValue":l[21]||(l[21]=u=>s.weeklyOpusCostLimit=u),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),[[X,s.weeklyOpusCostLimit]]),l[63]||(l[63]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户,0 或留空表示无限制 ",-1))])]),e("div",null,[l[65]||(l[65]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),T(e("input",{"onUpdate:modelValue":l[22]||(l[22]=u=>s.concurrencyLimit=u),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),[[X,s.concurrencyLimit]]),l[66]||(l[66]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",Nr,[T(e("input",{id:"editIsActive","onUpdate:modelValue":l[23]||(l[23]=u=>s.isActive=u),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),[[Ae,s.isActive]]),l[67]||(l[67]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),l[68]||(l[68]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key,暂停所有请求,客户端返回 401 错误 ",-1))]),e("div",null,[l[73]||(l[73]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Hr,[e("label",Yr,[T(e("input",{"onUpdate:modelValue":l[24]||(l[24]=u=>s.permissions=u),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"all"},null,512),[[ae,s.permissions]]),l[69]||(l[69]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"全部服务",-1))]),e("label",Qr,[T(e("input",{"onUpdate:modelValue":l[25]||(l[25]=u=>s.permissions=u),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude"},null,512),[[ae,s.permissions]]),l[70]||(l[70]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Claude",-1))]),e("label",Jr,[T(e("input",{"onUpdate:modelValue":l[26]||(l[26]=u=>s.permissions=u),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"gemini"},null,512),[[ae,s.permissions]]),l[71]||(l[71]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 Gemini",-1))]),e("label",Xr,[T(e("input",{"onUpdate:modelValue":l[27]||(l[27]=u=>s.permissions=u),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"openai"},null,512),[[ae,s.permissions]]),l[72]||(l[72]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"仅 OpenAI",-1))])]),l[74]||(l[74]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 控制此 API Key 可以访问哪些服务 ",-1))]),e("div",null,[e("div",Zr,[l[75]||(l[75]=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:z.value,title:"刷新账号列表",type:"button",onClick:$},[e("i",{class:E(["fas",z.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(z.value?"刷新中...":"刷新账号"),1)],8,eo)]),e("div",to,[e("div",null,[l[76]||(l[76]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ge(Pe,{modelValue:s.claudeAccountId,"onUpdate:modelValue":l[28]||(l[28]=u=>s.claudeAccountId=u),accounts:V.value.claude,"default-option-text":"使用共享账号池",disabled:s.permissions==="gemini"||s.permissions==="openai",groups:V.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[77]||(l[77]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ge(Pe,{modelValue:s.geminiAccountId,"onUpdate:modelValue":l[29]||(l[29]=u=>s.geminiAccountId=u),accounts:V.value.gemini,"default-option-text":"使用共享账号池",disabled:s.permissions==="claude"||s.permissions==="openai",groups:V.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[78]||(l[78]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ge(Pe,{modelValue:s.openaiAccountId,"onUpdate:modelValue":l[30]||(l[30]=u=>s.openaiAccountId=u),accounts:V.value.openai,"default-option-text":"使用共享账号池",disabled:s.permissions==="claude"||s.permissions==="gemini",groups:V.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[79]||(l[79]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ge(Pe,{modelValue:s.bedrockAccountId,"onUpdate:modelValue":l[31]||(l[31]=u=>s.bedrockAccountId=u),accounts:V.value.bedrock,"default-option-text":"使用共享账号池",disabled:s.permissions==="gemini"||s.permissions==="openai",groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])])]),l[80]||(l[80]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",so,[T(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":l[32]||(l[32]=u=>s.enableModelRestriction=u),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),[[Ae,s.enableModelRestriction]]),l[81]||(l[81]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),s.enableModelRestriction?(o(),i("div",ao,[e("div",null,[l[84]||(l[84]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",ro,[(o(!0),i(Y,null,Z(s.restrictedModels,(u,p)=>(o(),i("span",{key:p,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"},[I(c(u)+" ",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:n=>R(p)},l[82]||(l[82]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,oo)]))),128)),s.restrictedModels.length===0?(o(),i("span",lo," 暂无限制的模型 ")):k("",!0)]),e("div",no,[e("div",io,[(o(!0),i(Y,null,Z(K.value,u=>(o(),i("button",{key:u,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:p=>b(u)},c(u),9,uo))),128)),K.value.length===0?(o(),i("span",co," 所有常用模型已在限制列表中 ")):k("",!0)]),e("div",go,[T(e("input",{"onUpdate:modelValue":l[33]||(l[33]=u=>s.modelInput=u),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:Be(fe(Q,["prevent"]),["enter"])},null,40,po),[[X,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:Q},l[83]||(l[83]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[85]||(l[85]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):k("",!0)]),e("div",null,[e("div",mo,[T(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":l[34]||(l[34]=u=>s.enableClientRestriction=u),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),[[Ae,s.enableClientRestriction]]),l[86]||(l[86]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),s.enableClientRestriction?(o(),i("div",xo,[e("div",null,[l[87]||(l[87]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),l[88]||(l[88]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",yo,[(o(!0),i(Y,null,Z(H.value,u=>(o(),i("div",{key:u.id,class:"flex items-start"},[T(e("input",{id:`edit_client_${u.id}`,"onUpdate:modelValue":l[35]||(l[35]=p=>s.allowedClients=p),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:u.id},null,8,fo),[[Ae,s.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${u.id}`},[e("span",vo,c(u.name),1),e("span",ko,c(u.description),1)],8,bo)]))),128))])])])):k("",!0)]),e("div",wo,[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:l[36]||(l[36]=u=>P.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:_.value,type:"submit"},[_.value?(o(),i("div",$o)):(o(),i("i",Ao)),I(" "+c(_.value?"保存中...":"保存修改"),1)],8,ho)])],32)])])]))}},Io=we(Co,[["__scopeId","data-v-ac0e53a0"]]),Ko={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Lo={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},Do={class:"mb-6 flex items-center justify-between"},To={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},So={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},_o={class:"flex items-start gap-3"},Po={class:"text-sm text-gray-700"},Mo={class:"mt-1 text-xs text-gray-600"},Ro={key:0,class:"mt-3"},Vo=["min"],Eo={key:1,class:"mt-2 text-xs text-gray-500"},Oo={class:"flex gap-3 pt-4"},jo=["disabled"],Uo={key:0,class:"loading-spinner mr-2"},qo={key:1,class:"fas fa-clock mr-2"},Go={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(w,{emit:G}){const g=w,q=G,W=S(!1),C=qe({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),_=F(()=>{const y=new Date;return g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>y?new Date(g.apiKey.expiresAt).toISOString().slice(0,16):(y.setMinutes(y.getMinutes()+1),y.toISOString().slice(0,16))}),z=y=>new Date(y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),V=()=>{if(!C.renewDuration){C.newExpiresAt=null;return}if(C.renewDuration==="permanent"){C.newExpiresAt=null;return}if(C.renewDuration==="custom")return;const y=g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>new Date?new Date(g.apiKey.expiresAt):new Date,m=C.renewDuration.match(/(\d+)([dhmy])/);if(m){const[,s,Q]=m,R=parseInt(s);switch(Q){case"d":y.setDate(y.getDate()+R);break;case"h":y.setHours(y.getHours()+R);break;case"m":y.setMonth(y.getMonth()+R);break;case"y":y.setFullYear(y.getFullYear()+R);break}C.newExpiresAt=y.toISOString()}},H=()=>{C.customExpireDate&&(C.newExpiresAt=new Date(C.customExpireDate).toISOString())},D=async()=>{W.value=!0;try{const y={expiresAt:C.renewDuration==="permanent"?null:C.newExpiresAt},L=await B.put(`/admin/api-keys/${g.apiKey.id}`,y);L.success?(U("API Key 续期成功","success"),q("success"),q("close")):U(L.message||"续期失败","error")}catch{U("续期失败","error")}finally{W.value=!1}};return V(),(y,L)=>(o(),ne(Ie,{to:"body"},[e("div",Ko,[e("div",Lo,[e("div",Do,[L[5]||(L[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:L[0]||(L[0]=m=>y.$emit("close"))},L[4]||(L[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",To,[e("div",So,[e("div",_o,[L[7]||(L[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,[L[6]||(L[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",Po,c(w.apiKey.name),1),e("p",Mo," 当前过期时间:"+c(w.apiKey.expiresAt?z(w.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[L[9]||(L[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),T(e("select",{"onUpdate:modelValue":L[1]||(L[1]=m=>C.renewDuration=m),class:"form-input w-full",onChange:V},L[8]||(L[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),[[_e,C.renewDuration]]),C.renewDuration==="custom"?(o(),i("div",Ro,[T(e("input",{"onUpdate:modelValue":L[2]||(L[2]=m=>C.customExpireDate=m),class:"form-input w-full",min:_.value,type:"datetime-local",onChange:H},null,40,Vo),[[X,C.customExpireDate]])])):k("",!0),C.newExpiresAt?(o(),i("p",Eo," 新的过期时间:"+c(z(C.newExpiresAt)),1)):k("",!0)])]),e("div",Oo,[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:L[3]||(L[3]=m=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:W.value||!C.renewDuration,type:"button",onClick:D},[W.value?(o(),i("div",Uo)):(o(),i("i",qo)),I(" "+c(W.value?"续期中...":"确认续期"),1)],8,jo)])])])]))}},zo=we(Go,[["__scopeId","data-v-2fba52a3"]]),Fo={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Wo={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Bo={class:"mb-6 space-y-4"},No={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Ho={class:"font-medium text-gray-900 dark:text-gray-100"},Yo={key:0},Qo={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Jo={class:"text-gray-700 dark:text-gray-300"},Xo={class:"relative"},Zo={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"},el={class:"absolute right-3 top-3"},tl=["title"],sl={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(w,{emit:G}){const g=w,q=G,W=S(!1),C=()=>{W.value=!W.value},_=()=>{const D=g.apiKey.apiKey||g.apiKey.key||"";return D?W.value||D.length<=12?D:D.substring(0,8)+"●".repeat(Math.max(0,D.length-12))+D.substring(D.length-4):""},z=async()=>{const D=g.apiKey.apiKey||g.apiKey.key||"";if(!D){U("API Key 不存在","error");return}try{await navigator.clipboard.writeText(D),U("API Key 已复制到剪贴板","success")}catch{const L=document.createElement("textarea");L.value=D,document.body.appendChild(L),L.select();try{document.execCommand("copy"),U("API Key 已复制到剪贴板","success")}catch{U("复制失败,请手动复制","error")}finally{document.body.removeChild(L)}}},V=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。 确定要关闭吗?`,"确定关闭","取消")&&q("close"):confirm(`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。 确定要关闭吗?`)&&q("close")},H=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有保存API Key,关闭后将无法再次查看。 建议您先复制API Key再关闭。`,"仍然关闭","返回复制")&&q("close"):confirm(`您还没有保存API Key,关闭后将无法再次查看。 确定要关闭吗?`)&&q("close")};return(D,y)=>(o(),ne(Ie,{to:"body"},[e("div",Fo,[e("div",Wo,[e("div",{class:"mb-6 flex items-center justify-between"},[y[1]||(y[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:H},y[0]||(y[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),y[7]||(y[7]=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",Bo,[e("div",null,[y[2]||(y[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",No,[e("span",Ho,c(w.apiKey.name),1)])]),w.apiKey.description?(o(),i("div",Yo,[y[3]||(y[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Qo,[e("span",Jo,c(w.apiKey.description||"无描述"),1)])])):k("",!0),e("div",null,[y[4]||(y[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",Xo,[e("div",Zo,c(_()),1),e("div",el,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:W.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:C},[e("i",{class:E(["fas",W.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,tl)])]),y[5]||(y[5]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 点击眼睛图标切换显示模式,使用下方按钮复制完整 API Key ",-1))])]),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:z},y[6]||(y[6]=[e("i",{class:"fas fa-copy"},null,-1),I(" 复制 API Key ",-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 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:V}," 我已保存 ")])])])]))}},al=we(sl,[["__scopeId","data-v-e11a15f2"]]),rl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ol={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},ll={class:"mb-6 flex items-center justify-between"},nl={class:"flex items-center gap-3"},il={class:"text-sm text-gray-600"},dl={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},ul={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},cl={class:"flex items-center justify-between"},gl={class:"mt-1 text-2xl font-bold text-blue-900"},pl={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},ml={class:"flex items-center justify-between"},xl={class:"mt-1 truncate text-lg font-bold text-green-900"},yl={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},fl={class:"flex items-center justify-between"},bl={class:"mt-1 text-lg font-bold text-purple-900"},vl={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},kl={class:"flex items-center justify-between"},wl={class:"mt-1 text-lg font-bold text-orange-900"},hl={class:"mb-6"},$l={class:"mb-3 flex items-center justify-between"},Al={class:"flex items-center gap-2"},Cl={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},Il={class:"font-mono text-xs text-gray-300"},Kl={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(w,{emit:G}){const g=w,q=G,W=S(!1),C=F(()=>{if(g.apiKeys.length>0){const m=g.apiKeys[0],s=m.name.match(/^(.+)_\d+$/);return s?s[1]:m.name}return""}),_=()=>{if(g.apiKeys.length===0)return"未知";const m=g.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[m]||m},z=()=>{if(g.apiKeys.length===0)return"未知";const m=g.apiKeys[0].expiresAt;if(!m)return"永不过期";const s=new Date(m),R=Math.ceil((s-new Date)/(1e3*60*60*24));return R<=7?`${R}天`:R<=30?`${Math.ceil(R/7)}周`:R<=365?`${Math.ceil(R/30)}个月`:`${Math.ceil(R/365)}年`},V=()=>{W.value=!W.value},H=()=>{const s=g.apiKeys.slice(0,10).map(Q=>`${Q.name}: ${Q.apiKey||Q.key||""}`);return g.apiKeys.length>10&&s.push(`... 还有 ${g.apiKeys.length-10} 个 API Key`),s.join(` `)},D=()=>{const m=g.apiKeys.map(K=>`${K.name}: ${K.apiKey||K.key||""}`).join(` `),s=new Blob([m],{type:"text/plain;charset=utf-8"}),Q=URL.createObjectURL(s),R=document.createElement("a");R.href=Q;const N=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);R.download=`api-keys-${C.value}-${N}.txt`,document.body.appendChild(R),R.click(),document.body.removeChild(R),URL.revokeObjectURL(Q),U("API Keys 文件已下载","success")},y=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。 确定要关闭吗?`,"确定关闭","返回下载")&&q("close"):confirm(`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。 确定要关闭吗?`)&&q("close")},L=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有下载 API Keys,关闭后将无法再次查看。 强烈建议您先下载保存。`,"仍然关闭","返回下载")&&q("close"):confirm(`您还没有下载 API Keys,关闭后将无法再次查看。 确定要关闭吗?`)&&q("close")};return(m,s)=>(o(),ne(Ie,{to:"body"},[e("div",rl,[e("div",ol,[e("div",ll,[e("div",nl,[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",il,"成功创建 "+c(w.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:L},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",dl,[e("div",ul,[e("div",cl,[e("div",null,[s[3]||(s[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",gl,c(w.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",pl,[e("div",ml,[e("div",null,[s[5]||(s[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",xl,c(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",yl,[e("div",fl,[e("div",null,[s[7]||(s[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",bl,c(_()),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",vl,[e("div",kl,[e("div",null,[s[9]||(s[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",wl,c(z()),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",hl,[e("div",$l,[s[12]||(s[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",Al,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:V},[e("i",{class:E(["fas",W.value?"fa-eye-slash":"fa-eye"])},null,2),I(" "+c(W.value?"隐藏":"显示")+"预览 ",1)]),s[11]||(s[11]=e("span",{class:"text-xs text-gray-500"},"(最多显示前10个)",-1))])]),W.value?(o(),i("div",Cl,[e("pre",Il,c(H()),1)])):k("",!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:D},s[13]||(s[13]=[e("i",{class:"fas fa-download"},null,-1),I(" 下载所有 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:y}," 我已保存 ")]),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))])])]))}},Ll=we(Kl,[["__scopeId","data-v-b0b904b9"]]),Dl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Tl={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Sl={class:"mb-4 flex items-center justify-between sm:mb-6"},_l={class:"flex items-center gap-2 sm:gap-3"},Pl={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Ml={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},Rl={class:"flex items-start gap-3"},Vl={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},El={class:"space-y-4"},Ol={class:"flex flex-wrap gap-4"},jl={class:"flex cursor-pointer items-center"},Ul={class:"flex cursor-pointer items-center"},ql={class:"flex cursor-pointer items-center"},Gl={class:"flex cursor-pointer items-center"},zl={key:0,class:"space-y-3"},Fl={key:0},Wl={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Bl={class:"flex flex-wrap gap-2"},Nl=["onClick"],Hl={key:1},Yl={class:"flex flex-wrap gap-2"},Ql=["onClick"],Jl={class:"flex gap-2"},Xl=["onKeypress"],Zl={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},en={class:"space-y-2"},tn={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},sn={class:"mb-3 flex items-center gap-4"},an={class:"flex gap-4"},rn={class:"flex cursor-pointer items-center"},on={class:"flex cursor-pointer items-center"},ln={class:"flex cursor-pointer items-center"},nn={class:"flex flex-wrap gap-4"},dn={class:"flex cursor-pointer items-center"},un={class:"flex cursor-pointer items-center"},cn={class:"flex cursor-pointer items-center"},gn={class:"flex cursor-pointer items-center"},pn={class:"flex cursor-pointer items-center"},mn={class:"mb-3 flex items-center justify-between"},xn=["disabled"],yn={class:"grid grid-cols-1 gap-3"},fn=["disabled"],bn={key:0,label:"账号分组"},vn=["value"],kn={key:1,label:"专属账号"},wn=["value"],hn=["disabled"],$n={key:0,label:"账号分组"},An=["value"],Cn={key:1,label:"专属账号"},In=["value"],Kn=["disabled"],Ln={key:0,label:"账号分组"},Dn=["value"],Tn={key:1,label:"专属账号"},Sn=["value"],_n=["disabled"],Pn={key:0,label:"专属账号"},Mn=["value"],Rn={class:"flex gap-3 pt-4"},Vn=["disabled"],En={key:0,class:"loading-spinner mr-2"},On={key:1,class:"fas fa-save mr-2"},jn={__name:"BatchEditApiKeyModal",props:{selectedKeys:{type:Array,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[]})}},emits:["close","success"],setup(w,{emit:G}){const g=w,q=G,W=gt(),C=S(!1),_=S(!1),z=S({claude:[],gemini:[],openai:[],bedrock:[],claudeGroups:[],geminiGroups:[],openaiGroups:[]}),V=S(""),H=S([]),D=S("none"),y=F(()=>g.selectedKeys.length),L=F(()=>H.value.filter(b=>!m.tags.includes(b))),m=qe({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",tags:[],isActive:null}),s=()=>{if(V.value&&V.value.trim()){const b=V.value.trim();m.tags.includes(b)||m.tags.push(b),V.value=""}},Q=b=>{m.tags.includes(b)||m.tags.push(b)},R=b=>{m.tags.splice(b,1)},N=async()=>{var b,d;_.value=!0;try{const[f,J,O,$,de,P]=await Promise.all([B.get("/admin/claude-accounts"),B.get("/admin/claude-console-accounts"),B.get("/admin/gemini-accounts"),B.get("/admin/openai-accounts"),B.get("/admin/bedrock-accounts"),B.get("/admin/account-groups")]),l=[];if(f.success&&((b=f.data)==null||b.forEach(u=>{l.push({...u,platform:"claude-oauth",isDedicated:u.accountType==="dedicated"})})),J.success&&((d=J.data)==null||d.forEach(u=>{l.push({...u,platform:"claude-console",isDedicated:u.accountType==="dedicated"})})),z.value.claude=l,O.success&&(z.value.gemini=(O.data||[]).map(u=>({...u,isDedicated:u.accountType==="dedicated"}))),$.success&&(z.value.openai=($.data||[]).map(u=>({...u,isDedicated:u.accountType==="dedicated"}))),de.success&&(z.value.bedrock=(de.data||[]).map(u=>({...u,isDedicated:u.accountType==="dedicated"}))),P.success){const u=P.data||[];z.value.claudeGroups=u.filter(p=>p.platform==="claude"),z.value.geminiGroups=u.filter(p=>p.platform==="gemini"),z.value.openaiGroups=u.filter(p=>p.platform==="openai")}U("账号列表已刷新","success")}catch{U("刷新账号列表失败","error")}finally{_.value=!1}},K=async()=>{C.value=!0;try{const b={};m.rateLimitCost!==""&&m.rateLimitCost!==null&&(b.rateLimitCost=parseFloat(m.rateLimitCost)),m.rateLimitWindow!==""&&m.rateLimitWindow!==null&&(b.rateLimitWindow=parseInt(m.rateLimitWindow)),m.rateLimitRequests!==""&&m.rateLimitRequests!==null&&(b.rateLimitRequests=parseInt(m.rateLimitRequests)),m.concurrencyLimit!==""&&m.concurrencyLimit!==null&&(b.concurrencyLimit=parseInt(m.concurrencyLimit)),m.dailyCostLimit!==""&&m.dailyCostLimit!==null&&(b.dailyCostLimit=parseFloat(m.dailyCostLimit)),m.totalCostLimit!==""&&m.totalCostLimit!==null&&(b.totalCostLimit=parseFloat(m.totalCostLimit)),m.weeklyOpusCostLimit!==""&&m.weeklyOpusCostLimit!==null&&(b.weeklyOpusCostLimit=parseFloat(m.weeklyOpusCostLimit)),m.permissions!==""&&(b.permissions=m.permissions),m.claudeAccountId!==""&&(m.claudeAccountId==="SHARED_POOL"?(b.claudeAccountId=null,b.claudeConsoleAccountId=null):m.claudeAccountId.startsWith("console:")?(b.claudeConsoleAccountId=m.claudeAccountId.substring(8),b.claudeAccountId=null):(m.claudeAccountId.startsWith("group:"),b.claudeAccountId=m.claudeAccountId,b.claudeConsoleAccountId=null)),m.geminiAccountId!==""&&(m.geminiAccountId==="SHARED_POOL"?b.geminiAccountId=null:b.geminiAccountId=m.geminiAccountId),m.openaiAccountId!==""&&(m.openaiAccountId==="SHARED_POOL"?b.openaiAccountId=null:b.openaiAccountId=m.openaiAccountId),m.bedrockAccountId!==""&&(m.bedrockAccountId==="SHARED_POOL"?b.bedrockAccountId=null:b.bedrockAccountId=m.bedrockAccountId),m.isActive!==null&&(b.isActive=m.isActive),D.value!=="none"&&(b.tags=m.tags,b.tagOperation=D.value);const d=await B.put("/admin/api-keys/batch",{keyIds:g.selectedKeys,updates:b});if(d.success){const{successCount:f,failedCount:J,errors:O}=d.data;if(f>0){if(U(`成功批量编辑 ${f} 个 API Keys`,"success"),J>0){const $=O.map(de=>`${de.keyId}: ${de.error}`).join(` `);U(`${J} 个编辑失败: ${$}`,"warning")}}else U("所有 API Keys 编辑失败","error");q("success"),q("close")}else U(d.message||"批量编辑失败","error")}catch(b){U("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",b)}finally{C.value=!1}};return Ne(async()=>{H.value=await W.fetchTags(),g.accounts&&(z.value={claude:g.accounts.claude||[],gemini:g.accounts.gemini||[],openai:g.accounts.openai||[],bedrock:g.accounts.bedrock||[],claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[]})}),(b,d)=>(o(),ne(Ie,{to:"body"},[e("div",Dl,[e("div",Tl,[e("div",Sl,[e("div",_l,[d[26]||(d[26]=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",Pl," 批量编辑 API Keys ("+c(y.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:d[0]||(d[0]=f=>b.$emit("close"))},d[27]||(d[27]=[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:fe(K,["prevent"])},[e("div",Ml,[e("div",Rl,[d[29]||(d[29]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[d[28]||(d[28]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",Vl," 以下设置将应用到所选的 "+c(y.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[d[39]||(d[39]=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",El,[e("div",Ol,[e("label",jl,[T(e("input",{"onUpdate:modelValue":d[1]||(d[1]=f=>D.value=f),class:"mr-2",type:"radio",value:"replace"},null,512),[[ae,D.value]]),d[30]||(d[30]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",Ul,[T(e("input",{"onUpdate:modelValue":d[2]||(d[2]=f=>D.value=f),class:"mr-2",type:"radio",value:"add"},null,512),[[ae,D.value]]),d[31]||(d[31]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",ql,[T(e("input",{"onUpdate:modelValue":d[3]||(d[3]=f=>D.value=f),class:"mr-2",type:"radio",value:"remove"},null,512),[[ae,D.value]]),d[32]||(d[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Gl,[T(e("input",{"onUpdate:modelValue":d[4]||(d[4]=f=>D.value=f),class:"mr-2",type:"radio",value:"none"},null,512),[[ae,D.value]]),d[33]||(d[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),D.value!=="none"?(o(),i("div",zl,[m.tags.length>0?(o(),i("div",Fl,[e("div",Wl,c(D.value==="replace"?"新标签列表:":D.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Bl,[(o(!0),i(Y,null,Z(m.tags,(f,J)=>(o(),i("span",{key:"selected-"+J,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"},[I(c(f)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:O=>R(J)},d[34]||(d[34]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Nl)]))),128))])])):k("",!0),L.value.length>0?(o(),i("div",Hl,[d[36]||(d[36]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Yl,[(o(!0),i(Y,null,Z(L.value,f=>(o(),i("button",{key:"available-"+f,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:J=>Q(f)},[d[35]||(d[35]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),I(" "+c(f),1)],8,Ql))),128))])])):k("",!0),e("div",null,[d[38]||(d[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",Jl,[T(e("input",{"onUpdate:modelValue":d[5]||(d[5]=f=>V.value=f),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:Be(fe(s,["prevent"]),["enter"])},null,40,Xl),[[X,V.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:s},d[37]||(d[37]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):k("",!0)])]),e("div",Zl,[d[43]||(d[43]=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",en,[e("div",tn,[e("div",null,[d[40]||(d[40]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),T(e("input",{"onUpdate:modelValue":d[6]||(d[6]=f=>m.rateLimitWindow=f),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),[[X,m.rateLimitWindow]])]),e("div",null,[d[41]||(d[41]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),T(e("input",{"onUpdate:modelValue":d[7]||(d[7]=f=>m.rateLimitRequests=f),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),[[X,m.rateLimitRequests]])]),e("div",null,[d[42]||(d[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),T(e("input",{"onUpdate:modelValue":d[8]||(d[8]=f=>m.rateLimitCost=f),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),[[X,m.rateLimitCost]])])])])]),e("div",null,[d[44]||(d[44]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),T(e("input",{"onUpdate:modelValue":d[9]||(d[9]=f=>m.dailyCostLimit=f),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),[[X,m.dailyCostLimit]])]),e("div",null,[d[45]||(d[45]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),T(e("input",{"onUpdate:modelValue":d[10]||(d[10]=f=>m.totalCostLimit=f),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),[[X,m.totalCostLimit]])]),e("div",null,[d[46]||(d[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Opus 模型周费用限制 (美元) ",-1)),T(e("input",{"onUpdate:modelValue":d[11]||(d[11]=f=>m.weeklyOpusCostLimit=f),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),[[X,m.weeklyOpusCostLimit]]),d[47]||(d[47]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户 ",-1))]),e("div",null,[d[48]||(d[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),T(e("input",{"onUpdate:modelValue":d[12]||(d[12]=f=>m.concurrencyLimit=f),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),[[X,m.concurrencyLimit]])]),e("div",null,[e("div",sn,[d[52]||(d[52]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",an,[e("label",rn,[T(e("input",{"onUpdate:modelValue":d[13]||(d[13]=f=>m.isActive=f),class:"mr-2",type:"radio",value:!0},null,512),[[ae,m.isActive]]),d[49]||(d[49]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",on,[T(e("input",{"onUpdate:modelValue":d[14]||(d[14]=f=>m.isActive=f),class:"mr-2",type:"radio",value:!1},null,512),[[ae,m.isActive]]),d[50]||(d[50]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",ln,[T(e("input",{"onUpdate:modelValue":d[15]||(d[15]=f=>m.isActive=f),class:"mr-2",type:"radio",value:null},null,512),[[ae,m.isActive]]),d[51]||(d[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[d[58]||(d[58]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",nn,[e("label",dn,[T(e("input",{"onUpdate:modelValue":d[16]||(d[16]=f=>m.permissions=f),class:"mr-2",type:"radio",value:""},null,512),[[ae,m.permissions]]),d[53]||(d[53]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",un,[T(e("input",{"onUpdate:modelValue":d[17]||(d[17]=f=>m.permissions=f),class:"mr-2",type:"radio",value:"all"},null,512),[[ae,m.permissions]]),d[54]||(d[54]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",cn,[T(e("input",{"onUpdate:modelValue":d[18]||(d[18]=f=>m.permissions=f),class:"mr-2",type:"radio",value:"claude"},null,512),[[ae,m.permissions]]),d[55]||(d[55]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",gn,[T(e("input",{"onUpdate:modelValue":d[19]||(d[19]=f=>m.permissions=f),class:"mr-2",type:"radio",value:"gemini"},null,512),[[ae,m.permissions]]),d[56]||(d[56]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",pn,[T(e("input",{"onUpdate:modelValue":d[20]||(d[20]=f=>m.permissions=f),class:"mr-2",type:"radio",value:"openai"},null,512),[[ae,m.permissions]]),d[57]||(d[57]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))])])]),e("div",null,[e("div",mn,[d[59]||(d[59]=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:_.value,title:"刷新账号列表",type:"button",onClick:N},[e("i",{class:E(["fas",_.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(_.value?"刷新中...":"刷新账号"),1)],8,xn)]),e("div",yn,[e("div",null,[d[62]||(d[62]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),T(e("select",{"onUpdate:modelValue":d[21]||(d[21]=f=>m.claudeAccountId=f),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",disabled:m.permissions==="gemini"||m.permissions==="openai"},[d[60]||(d[60]=e("option",{value:""},"不修改",-1)),d[61]||(d[61]=e("option",{value:"SHARED_POOL"},"使用共享账号池",-1)),z.value.claudeGroups.length>0?(o(),i("optgroup",bn,[(o(!0),i(Y,null,Z(z.value.claudeGroups,f=>(o(),i("option",{key:f.id,value:`group:${f.id}`}," 分组 - "+c(f.name),9,vn))),128))])):k("",!0),z.value.claude.length>0?(o(),i("optgroup",kn,[(o(!0),i(Y,null,Z(z.value.claude,f=>(o(),i("option",{key:f.id,value:f.platform==="claude-console"?`console:${f.id}`:f.id},c(f.name)+" ("+c(f.platform==="claude-console"?"Console":"OAuth")+") ",9,wn))),128))])):k("",!0)],8,fn),[[_e,m.claudeAccountId]])]),e("div",null,[d[65]||(d[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),T(e("select",{"onUpdate:modelValue":d[22]||(d[22]=f=>m.geminiAccountId=f),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",disabled:m.permissions==="claude"||m.permissions==="openai"},[d[63]||(d[63]=e("option",{value:""},"不修改",-1)),d[64]||(d[64]=e("option",{value:"SHARED_POOL"},"使用共享账号池",-1)),z.value.geminiGroups.length>0?(o(),i("optgroup",$n,[(o(!0),i(Y,null,Z(z.value.geminiGroups,f=>(o(),i("option",{key:f.id,value:`group:${f.id}`}," 分组 - "+c(f.name),9,An))),128))])):k("",!0),z.value.gemini.length>0?(o(),i("optgroup",Cn,[(o(!0),i(Y,null,Z(z.value.gemini,f=>(o(),i("option",{key:f.id,value:f.id},c(f.name),9,In))),128))])):k("",!0)],8,hn),[[_e,m.geminiAccountId]])]),e("div",null,[d[68]||(d[68]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),T(e("select",{"onUpdate:modelValue":d[23]||(d[23]=f=>m.openaiAccountId=f),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",disabled:m.permissions==="claude"||m.permissions==="gemini"},[d[66]||(d[66]=e("option",{value:""},"不修改",-1)),d[67]||(d[67]=e("option",{value:"SHARED_POOL"},"使用共享账号池",-1)),z.value.openaiGroups.length>0?(o(),i("optgroup",Ln,[(o(!0),i(Y,null,Z(z.value.openaiGroups,f=>(o(),i("option",{key:f.id,value:`group:${f.id}`}," 分组 - "+c(f.name),9,Dn))),128))])):k("",!0),z.value.openai.length>0?(o(),i("optgroup",Tn,[(o(!0),i(Y,null,Z(z.value.openai,f=>(o(),i("option",{key:f.id,value:f.id},c(f.name),9,Sn))),128))])):k("",!0)],8,Kn),[[_e,m.openaiAccountId]])]),e("div",null,[d[71]||(d[71]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),T(e("select",{"onUpdate:modelValue":d[24]||(d[24]=f=>m.bedrockAccountId=f),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",disabled:m.permissions==="gemini"||m.permissions==="openai"},[d[69]||(d[69]=e("option",{value:""},"不修改",-1)),d[70]||(d[70]=e("option",{value:"SHARED_POOL"},"使用共享账号池",-1)),z.value.bedrock.length>0?(o(),i("optgroup",Pn,[(o(!0),i(Y,null,Z(z.value.bedrock,f=>(o(),i("option",{key:f.id,value:f.id},c(f.name),9,Mn))),128))])):k("",!0)],8,_n),[[_e,m.bedrockAccountId]])])])]),e("div",Rn,[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:d[25]||(d[25]=f=>b.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:C.value,type:"submit"},[C.value?(o(),i("div",En)):(o(),i("i",On)),I(" "+c(C.value?"保存中...":"批量保存"),1)],8,Vn)])],32)])])]))}},Un=we(jn,[["__scopeId","data-v-f7e3b23e"]]),qn={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Gn={class:"modal-content relative mx-auto w-full max-w-lg p-8"},zn={class:"mb-6 flex items-center justify-between"},Fn={class:"flex items-center gap-3"},Wn={class:"text-sm text-gray-600 dark:text-gray-400"},Bn={class:"space-y-6"},Nn={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"},Hn={class:"flex items-center justify-between"},Yn={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Qn={class:"ml-2 text-xs font-normal text-gray-600"},Jn={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Xn={key:0,class:"mb-4"},Zn={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ei={class:"mb-3 grid grid-cols-3 gap-2"},ti=["onClick"],si={key:1,class:"animate-fadeIn"},ai=["min"],ri={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"},oi={class:"flex items-center justify-between"},li={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},ni={class:"flex gap-3 pt-2"},ii=["disabled"],di={key:0,class:"loading-spinner mr-2"},ui={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(w,{expose:G,emit:g}){const q=w,W=g,C=S(!1),_=qe({expireDuration:"",customExpireDate:"",expiresAt:null}),z=[{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 年"}],V=F(()=>{const K=new Date;return K.setMinutes(K.getMinutes()+1),K.toISOString().slice(0,16)});Se(()=>q.show,K=>{K&&H()}),Se(()=>{var K;return(K=q.apiKey)==null?void 0:K.id},K=>{K&&q.show&&H()});const H=()=>{C.value=!1,q.apiKey.expiresAt?(_.expireDuration="custom",_.customExpireDate=new Date(q.apiKey.expiresAt).toISOString().slice(0,16),_.expiresAt=q.apiKey.expiresAt):(_.expireDuration="",_.customExpireDate="",_.expiresAt=null)},D=K=>{if(_.expireDuration=K,!K){_.expiresAt=null;return}if(K==="custom")return;const b=new Date,d=K.match(/(\d+)([dhmy])/);if(d){const[,f,J]=d,O=parseInt(f);switch(J){case"d":b.setDate(b.getDate()+O);break;case"h":b.setHours(b.getHours()+O);break;case"m":b.setMonth(b.getMonth()+O);break;case"y":b.setFullYear(b.getFullYear()+O);break}_.expiresAt=b.toISOString()}},y=()=>{_.customExpireDate&&(_.expiresAt=new Date(_.customExpireDate).toISOString())},L=K=>K?new Date(K).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",m=K=>K?new Date(K){if(!K)return null;const b=new Date,f=new Date(K)-b,J=Math.ceil(f/(1e3*60*60*24));return f<0?{text:"已过期",class:"text-red-600"}:J<=7?{text:`${J} 天后过期`,class:"text-orange-600"}:J<=30?{text:`${J} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(J/30)} 个月后过期`,class:"text-green-600"}},Q=()=>{C.value=!0,W("save",{keyId:q.apiKey.id,expiresAt:_.expiresAt})},R=async()=>{let K=!0;window.showConfirm?K=await window.showConfirm("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${q.apiKey.activationDays||30} 天后自动过期。`,"确定激活","取消"):K=confirm(`确定要立即激活此 API Key 吗?激活后将在 ${q.apiKey.activationDays||30} 天后自动过期。`),K&&(C.value=!0,W("save",{keyId:q.apiKey.id,activateNow:!0}))};return G({resetSaving:()=>{C.value=!1}}),(K,b)=>(o(),ne(Ie,{to:"body"},[w.show?(o(),i("div",qn,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:b[0]||(b[0]=d=>K.$emit("close"))}),e("div",Gn,[e("div",zn,[e("div",Fn,[b[6]||(b[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,[b[5]||(b[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Wn,' 为 "'+c(w.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:b[1]||(b[1]=d=>K.$emit("close"))},b[7]||(b[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Bn,[e("div",Nn,[e("div",Hn,[e("div",null,[b[12]||(b[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Yn,[w.apiKey.expirationMode==="activation"&&!w.apiKey.isActivated?(o(),i(Y,{key:0},[b[8]||(b[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),b[9]||(b[9]=I(" 未激活 ",-1)),e("span",Qn," (激活后 "+c(w.apiKey.activationDays||30)+" 天过期) ",1)],64)):w.apiKey.expiresAt?(o(),i(Y,{key:1},[I(c(L(w.apiKey.expiresAt))+" ",1),s(w.apiKey.expiresAt)?(o(),i("span",{key:0,class:E(["ml-2 text-xs font-normal",s(w.apiKey.expiresAt).class])}," ("+c(s(w.apiKey.expiresAt).text)+") ",3)):k("",!0)],64)):(o(),i(Y,{key:2},[b[10]||(b[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),b[11]||(b[11]=I(" 永不过期 ",-1))],64))])]),e("div",Jn,[e("i",{class:E(["fas fa-hourglass-half text-lg",w.apiKey.expiresAt&&m(w.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),w.apiKey.expirationMode==="activation"&&!w.apiKey.isActivated?(o(),i("div",Xn,[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:R},[b[13]||(b[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),I(" 立即激活 (激活后 "+c(w.apiKey.activationDays||30)+" 天过期) ",1)]),e("p",Zn,[b[14]||(b[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),I(" 点击立即激活此 API Key,激活后将在 "+c(w.apiKey.activationDays||30)+" 天后过期 ",1)])])):k("",!0),e("div",null,[b[16]||(b[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",ei,[(o(),i(Y,null,Z(z,d=>e("button",{key:d.value,class:E(["rounded-lg px-3 py-2 text-sm font-medium transition-all",_.expireDuration===d.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:f=>D(d.value)},c(d.label),11,ti)),64)),e("button",{class:E(["rounded-lg px-3 py-2 text-sm font-medium transition-all",_.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:b[2]||(b[2]=d=>D("custom"))},b[15]||(b[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),I(" 自定义 ",-1)]),2)])]),_.expireDuration==="custom"?(o(),i("div",si,[b[17]||(b[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),T(e("input",{"onUpdate:modelValue":b[3]||(b[3]=d=>_.customExpireDate=d),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:V.value,type:"datetime-local",onChange:y},null,40,ai),[[X,_.customExpireDate]]),b[18]||(b[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):k("",!0),_.expiresAt!==w.apiKey.expiresAt?(o(),i("div",ri,[e("div",oi,[e("div",null,[b[21]||(b[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"}),I(" 新的过期时间 ")],-1)),e("p",li,[_.expiresAt?(o(),i(Y,{key:0},[I(c(L(_.expiresAt))+" ",1),s(_.expiresAt)?(o(),i("span",{key:0,class:E(["ml-2 text-xs font-normal",s(_.expiresAt).class])}," ("+c(s(_.expiresAt).text)+") ",3)):k("",!0)],64)):(o(),i(Y,{key:1},[b[19]||(b[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),b[20]||(b[20]=I(" 永不过期 ",-1))],64))])]),b[22]||(b[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))])])):k("",!0),e("div",ni,[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:b[4]||(b[4]=d=>K.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:C.value||_.expiresAt===w.apiKey.expiresAt,onClick:Q},[C.value?(o(),i("div",di)):(o(),i("i",ui)),I(" "+c(C.value?"保存中...":"保存更改"),1)],8,ii)])])])])):k("",!0)]))}},gi=we(ci,[["__scopeId","data-v-718665f9"]]),pi={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},mi={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"},xi={class:"mb-4 flex items-center justify-between sm:mb-6"},yi={class:"flex items-center gap-2 sm:gap-3"},fi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},bi={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},vi={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},ki={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"},hi={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},$i={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"},Ai={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Ci={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Ii={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"},Ki={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Li={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Di={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"},Ti={class:"space-y-1 text-sm"},Si={class:"flex justify-between"},_i={class:"font-semibold text-gray-900 dark:text-gray-100"},Pi={class:"flex justify-between"},Mi={class:"font-semibold text-gray-900 dark:text-gray-100"},Ri={class:"mb-6"},Vi={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Ei={class:"flex items-center justify-between"},Oi={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ji={class:"flex items-center justify-between"},Ui={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},qi={key:0,class:"flex items-center justify-between"},Gi={class:"text-sm font-semibold text-purple-600"},zi={key:1,class:"flex items-center justify-between"},Fi={class:"text-sm font-semibold text-purple-600"},Wi={key:0,class:"mb-6"},Bi={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Ni={key:0,class:"space-y-2"},Hi={class:"flex items-center justify-between text-sm"},Yi={class:"font-semibold text-gray-900 dark:text-gray-100"},Qi={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-600"},Ji={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Xi={key:1,class:"flex items-center justify-between text-sm"},Zi={class:"font-semibold text-purple-600"},ed={key:2,class:"space-y-2"},td={class:"flex items-center justify-between text-sm"},sd={class:"font-semibold text-gray-900 dark:text-gray-100"},ad={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-600"},rd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},od={key:3,class:"space-y-2"},ld={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close"],setup(w,{emit:G}){const g=w,q=G,W=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.total)==null?void 0:$.requests)||0}),C=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.daily)==null?void 0:$.requests)||0}),_=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.total)==null?void 0:$.tokens)||0}),z=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.daily)==null?void 0:$.tokens)||0}),V=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.total)==null?void 0:$.cost)||0}),H=F(()=>g.apiKey.dailyCost||0),D=F(()=>g.apiKey.totalCostLimit||0),y=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.total)==null?void 0:$.inputTokens)||0}),L=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.total)==null?void 0:$.outputTokens)||0}),m=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.total)==null?void 0:$.cacheCreateTokens)||0}),s=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.total)==null?void 0:$.cacheReadTokens)||0}),Q=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.averages)==null?void 0:$.rpm)||0}),R=F(()=>{var O,$;return(($=(O=g.apiKey.usage)==null?void 0:O.averages)==null?void 0:$.tpm)||0}),N=F(()=>g.apiKey.dailyCostLimit>0||g.apiKey.totalCostLimit>0||g.apiKey.concurrencyLimit>0||g.apiKey.rateLimitWindow>0||g.apiKey.tokenLimit>0),K=F(()=>!g.apiKey.dailyCostLimit||g.apiKey.dailyCostLimit===0?0:H.value/g.apiKey.dailyCostLimit*100),b=F(()=>!D.value||D.value===0?0:V.value/D.value*100),d=O=>!O&&O!==0?"0":O.toLocaleString("zh-CN"),f=O=>O>=1e6?(O/1e6).toFixed(1)+"M":O>=1e3?(O/1e3).toFixed(1)+"K":O.toString(),J=()=>{q("close")};return(O,$)=>(o(),ne(Ie,{to:"body"},[w.show?(o(),i("div",pi,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:J}),e("div",mi,[e("div",xi,[e("div",yi,[$[0]||($[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",fi," 使用统计详情 - "+c(w.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:J},$[1]||($[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",bi,[e("div",vi,[e("div",ki,[$[2]||($[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,c(d(W.value)),1),e("div",hi," 今日: "+c(d(C.value))+" 次 ",1)]),e("div",$i,[$[3]||($[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",Ai,c(f(_.value)),1),e("div",Ci," 今日: "+c(f(z.value)),1)]),e("div",Ii,[$[4]||($[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",Ki," $"+c(V.value.toFixed(4)),1),e("div",Li," 今日: $"+c(H.value.toFixed(4)),1)]),e("div",Di,[$[7]||($[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",Ti,[e("div",Si,[$[5]||($[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",_i,c(Q.value),1)]),e("div",Pi,[$[6]||($[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",Mi,c(R.value),1)])])])]),e("div",Ri,[$[12]||($[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"}),I(" Token 使用分布 ")],-1)),e("div",Vi,[e("div",Ei,[$[8]||($[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",Oi,c(f(y.value)),1)]),e("div",ji,[$[9]||($[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",Ui,c(f(L.value)),1)]),m.value>0?(o(),i("div",qi,[$[10]||($[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",Gi,c(f(m.value)),1)])):k("",!0),s.value>0?(o(),i("div",zi,[$[11]||($[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",Fi,c(f(s.value)),1)])):k("",!0)])]),N.value?(o(),i("div",Wi,[$[17]||($[17]=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"}),I(" 限制设置 ")],-1)),e("div",Bi,[w.apiKey.dailyCostLimit>0?(o(),i("div",Ni,[e("div",Hi,[$[13]||($[13]=e("span",{class:"text-gray-600 dark:text-gray-400"},"每日费用限制",-1)),e("span",Yi," $"+c(w.apiKey.dailyCostLimit.toFixed(2)),1)]),e("div",Qi,[e("div",{class:E(["h-2 rounded-full transition-all duration-300",K.value>=100?"bg-red-500":K.value>=80?"bg-yellow-500":"bg-green-500"]),style:Me({width:Math.min(K.value,100)+"%"})},null,6)]),e("div",Ji," 已使用 "+c(K.value.toFixed(1))+"% ",1)])):k("",!0),w.apiKey.concurrencyLimit>0?(o(),i("div",Xi,[$[14]||($[14]=e("span",{class:"text-gray-600 dark:text-gray-400"},"并发限制",-1)),e("span",Zi,c(w.apiKey.currentConcurrency||0)+" / "+c(w.apiKey.concurrencyLimit),1)])):k("",!0),w.apiKey.totalCostLimit>0?(o(),i("div",ed,[e("div",td,[$[15]||($[15]=e("span",{class:"text-gray-600 dark:text-gray-400"},"总费用限制",-1)),e("span",sd," $"+c(w.apiKey.totalCostLimit.toFixed(2)),1)]),e("div",ad,[e("div",{class:E(["h-2 rounded-full transition-all duration-300",b.value>=100?"bg-red-500":b.value>=80?"bg-yellow-500":"bg-indigo-500"]),style:Me({width:Math.min(b.value,100)+"%"})},null,6)]),e("div",rd," 已使用 "+c(b.value.toFixed(1))+"% ",1)])):k("",!0),w.apiKey.rateLimitWindow>0?(o(),i("div",od,[$[16]||($[16]=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"}),I(" 时间窗口限制 ")],-1)),ge(As,{"cost-limit":w.apiKey.rateLimitCost,"current-cost":w.apiKey.currentWindowCost,"current-requests":w.apiKey.currentWindowRequests,"current-tokens":w.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":w.apiKey.rateLimitWindow,"request-limit":w.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":w.apiKey.tokenLimit,"window-end-time":w.apiKey.windowEndTime,"window-remaining-seconds":w.apiKey.windowRemainingSeconds,"window-start-time":w.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"])])):k("",!0)])])):k("",!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:J}," 关闭 ")])])])):k("",!0)]))}},nd=we(ld,[["__scopeId","data-v-2cd70ee9"]]),id={class:"w-full"},dd={class:"relative z-10 flex h-full items-center justify-between px-3"},ud={class:"flex items-center gap-1.5"},cd={class:"flex items-center gap-1.5"},gd={key:0,class:"absolute inset-0 opacity-20",style:{background:"linear-gradient(105deg, transparent 40%, rgba(255,255,255,0.5) 50%, transparent 60%)",animation:"shine 3s infinite"}},pd={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:w=>["daily","opus","window"].includes(w)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(w){const G=w,g=F(()=>{if(!G.limit||G.limit===0)return 0;const D=G.current/G.limit*100;return Math.min(D,100)}),q=F(()=>"border border-gray-200/80 dark:border-gray-600/50 shadow-sm"),W=F(()=>{switch(G.type){case"daily":return"bg-gray-100/50 dark:bg-gray-800/30";case"opus":return"bg-violet-50/50 dark:bg-violet-950/20";case"window":return"bg-sky-50/50 dark:bg-sky-950/20";default:return"bg-gray-100/50 dark:bg-gray-800/30"}}),C=F(()=>{const D=g.value;return G.type==="daily"?D>=90?"bg-red-400 dark:bg-red-500":D>=70?"bg-amber-400 dark:bg-amber-500":"bg-emerald-400 dark:bg-emerald-500":G.type==="opus"?D>=90?"bg-red-400 dark:bg-red-500":D>=70?"bg-amber-400 dark:bg-amber-500":"bg-violet-400 dark:bg-violet-500":G.type==="window"?D>=90?"bg-red-400 dark:bg-red-500":D>=70?"bg-amber-400 dark:bg-amber-500":"bg-sky-400 dark:bg-sky-500":"bg-gray-300 dark:bg-gray-400"}),_=F(()=>{const D=g.value;let y="";if(D>=90)y="text-red-700 dark:text-red-400";else if(D>=70)y="text-orange-700 dark:text-orange-400";else switch(G.type){case"daily":y="text-green-700 dark:text-green-400";break;case"opus":y="text-purple-700 dark:text-purple-400";break;case"window":y="text-blue-700 dark:text-blue-400";break;default:y="text-gray-600 dark:text-gray-400"}let L="";switch(G.type){case"daily":L="fas fa-calendar-day";break;case"opus":L="fas fa-gem";break;case"window":L="fas fa-clock";break;default:L="fas fa-infinity"}return`${L} ${y}`}),z=F(()=>{if(g.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(G.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";default:return"text-gray-900 dark:text-gray-100"}}),V=F(()=>{const D=g.value;if(D>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(D>=90)return"text-red-700 dark:text-red-300";if(D>=70)return"text-orange-700 dark:text-orange-300";switch(G.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";default:return"text-gray-900 dark:text-gray-100"}}),H=F(()=>g.value>85?"text-white/90 drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]":"text-gray-600 dark:text-gray-400");return(D,y)=>(o(),i("div",id,[e("div",{class:E(["relative h-8 w-full overflow-hidden rounded-lg shadow-sm",q.value])},[e("div",{class:E(["absolute inset-0",W.value])},null,2),e("div",{class:E(["absolute inset-0 h-full transition-all duration-500 ease-out",C.value]),style:Me({width:g.value+"%"})},null,6),e("div",dd,[e("div",ud,[e("i",{class:E(["text-xs",_.value])},null,2),e("span",{class:E(["text-xs font-semibold",z.value])},c(w.label),3)]),e("div",cd,[e("span",{class:E(["text-xs font-bold tabular-nums",V.value])}," $"+c(w.current.toFixed(2)),3),e("span",{class:E(["text-xs font-medium",H.value])}," / $"+c(w.limit.toFixed(2)),3)])]),w.showShine&&g.value>0?(o(),i("div",gd)):k("",!0)],2)]))}},rt=we(pd,[["__scopeId","data-v-f68a1a21"]]),md={class:"w-full space-y-1"},xd={class:"relative h-7 w-full overflow-hidden rounded-md border border-opacity-20 bg-gradient-to-r from-blue-50 to-cyan-100 dark:from-blue-950/30 dark:to-cyan-900/30"},yd={class:"relative z-10 flex h-full items-center justify-between px-2"},fd={class:"flex items-center gap-1.5"},bd={class:"text-xs font-medium text-gray-700 dark:text-gray-200"},vd={key:0,class:"flex gap-1"},kd={class:"relative z-10 flex h-full items-center justify-between px-2"},wd={class:"relative z-10 flex h-full items-center justify-between px-2"},hd={__name:"WindowLimitBar",props:{rateLimitWindow:{type:Number,required:!0},remainingSeconds:{type:Number,default:0},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0}},setup(w){const G=w,g=F(()=>{if(!G.costLimit||G.costLimit===0)return 0;const L=G.currentCost/G.costLimit*100;return Math.min(L,100)}),q=F(()=>{if(!G.requestLimit||G.requestLimit===0)return 0;const L=G.currentRequests/G.requestLimit*100;return Math.min(L,100)}),W=F(()=>{if(!G.rateLimitWindow||G.rateLimitWindow===0)return 0;const L=G.rateLimitWindow*60,m=L-G.remainingSeconds;return Math.max(0,m/L*100)}),C=()=>{const L=g.value;return L>=90?"bg-gradient-to-r from-red-500 to-rose-600":L>=70?"bg-gradient-to-r from-orange-500 to-amber-500":"bg-gradient-to-r from-green-500 to-emerald-500"},_=()=>{const L=q.value;return L>=90?"bg-gradient-to-r from-red-500 to-pink-600":L>=70?"bg-gradient-to-r from-orange-500 to-yellow-500":"bg-gradient-to-r from-purple-500 to-indigo-600"},z=()=>g.value>50?"text-white drop-shadow-sm":"text-gray-600 dark:text-gray-300",V=()=>g.value>50?"text-white drop-shadow-md":"text-gray-800 dark:text-gray-200",H=()=>q.value>50?"text-white drop-shadow-sm":"text-gray-600 dark:text-gray-300",D=()=>q.value>50?"text-white drop-shadow-md":"text-gray-800 dark:text-gray-200",y=L=>{if(L==null)return"--:--";const m=Math.floor(L/3600),s=Math.floor(L%3600/60),Q=L%60;return m>0?`${m}h${s}m`:s>0?`${s}m${Q}s`:`${Q}s`};return(L,m)=>(o(),i("div",md,[e("div",xd,[e("div",{class:"absolute inset-0 h-full bg-gradient-to-r from-blue-500 to-cyan-500 opacity-20 transition-all duration-1000",style:Me({width:W.value+"%"})},null,4),e("div",yd,[e("div",fd,[m[0]||(m[0]=e("i",{class:"fas fa-clock text-xs text-blue-600 dark:text-blue-400"},null,-1)),e("span",bd,c(w.rateLimitWindow)+"分钟窗口 ",1)]),e("span",{class:E(["text-xs font-bold",w.remainingSeconds>0?"text-blue-700 dark:text-blue-300":"text-gray-400 dark:text-gray-500"])},c(w.remainingSeconds>0?y(w.remainingSeconds):"未激活"),3)])]),w.costLimit>0||w.requestLimit>0?(o(),i("div",vd,[w.costLimit>0?(o(),i("div",{key:0,class:E(["relative h-6 overflow-hidden rounded-md border border-opacity-20 bg-gradient-to-r from-green-50 to-emerald-100 dark:from-green-950/30 dark:to-emerald-900/30",w.requestLimit>0?"w-1/2":"w-full"])},[e("div",{class:E(["absolute inset-0 h-full transition-all duration-500 ease-out",C()]),style:Me({width:g.value+"%"})},null,6),e("div",kd,[e("span",{class:E(["text-[10px] font-medium",z()])},"费用",2),e("span",{class:E(["text-[10px] font-bold",V()])}," $"+c(w.currentCost.toFixed(1))+"/$"+c(w.costLimit.toFixed(0)),3)])],2)):k("",!0),w.requestLimit>0?(o(),i("div",{key:1,class:E(["relative h-6 overflow-hidden rounded-md border border-opacity-20 bg-gradient-to-r from-purple-50 to-indigo-100 dark:from-purple-950/30 dark:to-indigo-900/30",w.costLimit>0?"w-1/2":"w-full"])},[e("div",{class:E(["absolute inset-0 h-full transition-all duration-500 ease-out",_()]),style:Me({width:q.value+"%"})},null,6),e("div",wd,[e("span",{class:E(["text-[10px] font-medium",H()])},"请求",2),e("span",{class:E(["text-[10px] font-bold",D()])},c(w.currentRequests)+"/"+c(w.requestLimit),3)])],2)):k("",!0)])):k("",!0)]))}},Ft=we(hd,[["__scopeId","data-v-dada935a"]]),$d={class:"tab-content"},Ad={class:"card p-4 sm:p-6"},Cd={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Id={class:"border-b border-gray-200 dark:border-gray-700"},Kd={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},Ld={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"},Dd={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"},Td={key:0,class:"tab-panel"},Sd={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},_d={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Pd={class:"group relative min-w-[140px]"},Md={key:0,class:"flex items-center"},Rd={class:"group relative min-w-[140px]"},Vd={class:"relative"},Ed={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"},Od={class:"group relative min-w-[200px]"},jd={class:"relative flex items-center"},Ud=["placeholder"],qd={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Gd=["disabled"],zd={class:"relative"},Fd={class:"relative"},Wd={key:0,class:"py-12 text-center"},Bd={key:1,class:"py-12 text-center"},Nd={key:2,class:"table-wrapper hidden md:block"},Hd={class:"table-container"},Yd={class:"w-full table-fixed"},Qd={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"},Jd={key:0,class:"w-[50px] px-3 py-4 text-left"},Xd={class:"flex items-center"},Zd=["indeterminate"],e0={key:1,class:"fas fa-sort ml-1 text-gray-400"},t0={key:1,class:"fas fa-sort ml-1 text-gray-400"},s0={key:1,class:"fas fa-sort ml-1 text-gray-400"},a0={key:1,class:"fas fa-sort ml-1 text-gray-400"},r0={key:1,class:"fas fa-sort ml-1 text-gray-400"},o0={key:1,class:"fas fa-sort ml-1 text-gray-400"},l0={key:1,class:"fas fa-sort ml-1 text-gray-400"},n0={key:1,class:"fas fa-sort ml-1 text-gray-400"},i0={key:0,class:"px-3 py-3"},d0={class:"flex items-center"},u0=["value"],c0={class:"px-3 py-3"},g0={class:"min-w-0"},p0=["title"],m0={key:0,class:"mt-1 text-xs text-red-600"},x0={class:"px-3 py-3"},y0={class:"space-y-1"},f0={key:0,class:"flex items-center gap-1 text-xs"},b0={class:"truncate text-gray-600 dark:text-gray-400"},v0={key:1,class:"flex items-center gap-1 text-xs"},k0={class:"truncate text-gray-600 dark:text-gray-400"},w0={key:2,class:"flex items-center gap-1 text-xs"},h0={class:"truncate text-gray-600 dark:text-gray-400"},$0={key:3,class:"flex items-center gap-1 text-xs"},A0={class:"truncate text-gray-600 dark:text-gray-400"},C0={key:4,class:"text-xs text-gray-500 dark:text-gray-400"},I0={class:"px-3 py-3"},K0={class:"flex flex-wrap gap-1"},L0={key:0,class:"text-xs text-gray-400"},D0={class:"whitespace-nowrap px-3 py-3"},T0={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},S0={class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},_0={class:"px-2 py-2",style:{"font-size":"12px"}},P0={class:"flex flex-col gap-2"},M0={key:3,class:"dark:to-gray-750 relative h-7 w-full overflow-hidden rounded-md border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 dark:border-gray-700 dark:from-gray-800"},R0={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},V0={class:"flex items-center justify-end gap-1"},E0={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},O0={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},j0={class:"flex items-center justify-end gap-1"},U0={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},q0={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},G0=["title"],z0={key:1,class:"text-gray-400",style:{"font-size":"13px"}},F0={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},W0={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},B0={class:"inline-flex items-center gap-1.5"},N0={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},H0={key:1},Y0=["onClick"],Q0=["onClick"],J0=["onClick"],X0=["onClick"],Z0={class:"whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},eu={class:"flex gap-1"},tu=["onClick"],su=["onClick"],au=["onClick"],ru=["onClick"],ou=["title","onClick"],lu={class:"ml-1 hidden xl:inline"},nu=["onClick"],iu={key:0},du={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},uu={key:0,class:"py-4 text-center"},cu={class:"space-y-4"},gu={class:"mb-4 flex items-center justify-between"},pu={class:"flex items-center gap-2"},mu={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"},xu={class:"flex items-center gap-1"},yu={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},fu=["onClick"],bu={key:0,class:"py-8 text-center"},vu={class:"mb-3 flex items-center justify-center gap-2"},ku=["onClick"],wu={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},hu={class:"mb-3 flex items-start justify-between"},$u={class:"flex-1"},Au={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Cu={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},Iu={class:"mb-3 space-y-2"},Ku={class:"flex items-center justify-between text-sm"},Lu={class:"font-semibold text-gray-900 dark:text-gray-100"},Du={class:"flex items-center justify-between text-sm"},Tu={class:"font-semibold text-green-600"},Su={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},_u={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Pu={class:"font-medium"},Mu={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ru={class:"font-medium"},Vu={key:0,class:"flex items-center justify-between text-xs text-purple-600"},Eu={class:"font-medium"},Ou={key:1,class:"flex items-center justify-between text-xs text-purple-600"},ju={class:"font-medium"},Uu={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},qu={class:"mt-1 text-right"},Gu={class:"text-xs font-medium text-indigo-600"},zu={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"},Fu={class:"flex items-center justify-between text-sm"},Wu={class:"flex gap-4 text-xs"},Bu={class:"text-gray-600 dark:text-gray-400"},Nu={class:"font-semibold text-gray-800 dark:text-gray-200"},Hu={class:"text-gray-600 dark:text-gray-400"},Yu={class:"font-semibold text-gray-800 dark:text-gray-200"},Qu={key:3,class:"space-y-3 md:hidden"},Ju={class:"mb-3 flex items-start justify-between"},Xu={class:"flex items-center gap-3"},Zu=["value"],ec={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},tc={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},sc={class:"mb-3 space-y-1.5"},ac={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},rc={class:"text-gray-600 dark:text-gray-400"},oc={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},lc={class:"text-gray-600 dark:text-gray-400"},nc={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},ic={class:"text-gray-600 dark:text-gray-400"},dc={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},uc={class:"text-gray-600 dark:text-gray-400"},cc={key:4,class:"text-xs text-gray-500 dark:text-gray-400"},gc={key:5,class:"text-xs text-red-600"},pc={class:"mb-3 space-y-2"},mc={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},xc={class:"mb-2 flex items-center justify-between"},yc={class:"text-xs text-gray-600 dark:text-gray-400"},fc=["onClick"],bc={class:"grid grid-cols-2 gap-3"},vc={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},kc={class:"text-sm font-semibold text-green-600"},wc={class:"mt-2 flex items-center justify-between"},hc={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$c={class:"space-y-2"},Ac={key:3,class:"dark:to-gray-750 relative h-7 w-full overflow-hidden rounded-md border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 dark:border-gray-700 dark:from-gray-800"},Cc={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Ic={class:"mb-1 flex justify-between"},Kc={class:"flex items-center justify-between"},Lc={class:"flex items-center gap-1"},Dc=["onClick"],Tc={key:0,class:"mb-3 flex flex-wrap gap-1"},Sc={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},_c=["onClick"],Pc=["onClick"],Mc=["onClick"],Rc=["onClick"],Vc=["onClick"],Ec={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},Oc={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},jc={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Uc={class:"flex items-center gap-2"},qc=["value"],Gc={class:"flex items-center gap-2"},zc=["disabled"],Fc={class:"flex items-center gap-1"},Wc={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Bc=["onClick"],Nc={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Hc=["disabled"],Yc={key:1,class:"tab-panel"},Qc={key:0,class:"py-12 text-center"},Jc={key:1,class:"py-12 text-center"},Xc={key:2},Zc={class:"mb-4 flex justify-end"},eg={class:"table-wrapper"},tg={class:"table-container"},sg={class:"w-full table-fixed"},ag={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},rg={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"},og={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},lg={class:"px-3 py-3"},ng={class:"flex items-center"},ig={class:"min-w-0"},dg=["title"],ug={class:"px-3 py-3"},cg={class:"space-y-1"},gg={key:0,class:"flex items-center gap-1 text-xs"},pg={key:1,class:"flex items-center gap-1 text-xs"},mg={key:2,class:"flex items-center gap-1 text-xs"},xg={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},yg={key:0,class:"px-3 py-3"},fg={class:"text-xs"},bg={key:0,class:"text-blue-600"},vg={key:1,class:"text-green-600"},kg={key:2,class:"text-gray-500 dark:text-gray-400"},wg={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},hg={class:"px-3 py-3"},$g={class:"text-xs"},Ag={key:0,class:"text-blue-600"},Cg={key:1,class:"text-green-600"},Ig={key:2,class:"text-gray-500 dark:text-gray-400"},Kg={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Lg={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Dg={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Tg={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Sg={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},_g={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Pg={class:"flex items-center justify-end gap-1"},Mg={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},Rg={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Vg={key:0,style:{"font-size":"13px"}},Eg={key:1,class:"text-gray-400",style:{"font-size":"13px"}},Og={class:"px-3 py-3"},jg={class:"flex items-center gap-2"},Ug=["onClick"],qg=["onClick"],Gg={__name:"ApiKeysView",setup(w){const G=ct(),g=$s(),q=S([]),W=F(()=>{var a;return((a=g.oemSettings)==null?void 0:a.ldapEnabled)||!1}),C=S([]),_=S(!1),z=S(!1),V=S(!1),H=S(!1),D=S("today"),y=qe({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),L=F(()=>V.value),m=()=>{V.value=!V.value,V.value||(C.value=[],_.value=!1,z.value=!1)},s=F(()=>[{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"}]),Q=S("active"),R=S([]),N=S(!1),K=S("periodCost"),b=S("desc"),d=S({}),f=S({}),J=S({}),O=S([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),$=S({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],claudeGroups:[],geminiGroups:[],openaiGroups:[]}),de=S(null),P=S(null),l=S(!1),u=S(null),p=S(""),n=S([]),v=S(""),oe=F(()=>{const a=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return n.value.forEach(t=>{a.push({value:t,label:t,icon:"fa-tag"})}),a}),ue=F(()=>p.value?q.value.filter(a=>a.tags&&a.tags.includes(p.value)).length:0),ee=S(1),ie=S((()=>{const a=localStorage.getItem("apiKeysPageSize");if(a){const t=parseInt(a,10);if([10,20,50,100].includes(t))return t}return 10})()),te=[10,20,50,100],le=S(!1),he=S(!1),se=S(!1),Ce=S(!1),ot=S(!1),He=S(!1),pt=S(null),mt=S(null),xt=S(null),yt=S([]),Ee=F(()=>{let a=q.value;if(p.value&&(a=q.value.filter(x=>x.tags&&x.tags.includes(p.value))),v.value){const x=v.value.toLowerCase().trim();a=a.filter(r=>{const h=r.name&&r.name.toLowerCase().includes(x);if(W.value){const A=r.ownerDisplayName&&r.ownerDisplayName.toLowerCase().includes(x);return h||A}return h})}return K.value?[...a].sort((x,r)=>{let h=x[K.value],A=r[K.value];return K.value==="status"?(h=x.isActive?1:0,A=r.isActive?1:0):K.value==="periodRequests"?(h=tt(x),A=tt(r)):K.value==="periodCost"?(h=nt(x),A=nt(r)):K.value==="periodTokens"?(h=st(x),A=st(r)):K.value==="dailyCost"?(h=x.dailyCost||0,A=r.dailyCost||0):K.value==="totalCost"?(h=x.totalCost||0,A=r.totalCost||0):(K.value==="createdAt"||K.value==="expiresAt"||K.value==="lastUsedAt")&&(h=h?new Date(h).getTime():0,A=A?new Date(A).getTime():0),hA?b.value==="asc"?1:-1:0}):a}),Re=F(()=>{const a=Ee.value.length;return Math.ceil(a/ie.value)||0}),Ge=F(()=>{const a=[],t=ee.value,x=Re.value;if(x<=7)for(let r=1;r<=x;r++)a.push(r);else{let r=Math.max(1,t-2),h=Math.min(x,t+2);t<=3?h=5:t>=x-2&&(r=x-4);for(let A=r;A<=h;A++)a.push(A)}return a}),ft=F(()=>{const a=Ge.value;return a.length===0?!1:a[0]>1}),bt=F(()=>{const a=Ge.value;return a.length===0?!1:a[a.length-1]{const a=Ge.value;return a.length===0?!1:ft.value&&a[0]>2}),Nt=F(()=>{const a=Ge.value;return a.length===0?!1:bt.value&&a[a.length-1]{const a=(ee.value-1)*ie.value,t=a+ie.value;return Ee.value.slice(a,t)}),Ye=async()=>{var a,t;try{const[x,r,h,A,M,re,ce]=await Promise.all([B.get("/admin/claude-accounts"),B.get("/admin/claude-console-accounts"),B.get("/admin/gemini-accounts"),B.get("/admin/openai-accounts"),B.get("/admin/openai-responses-accounts"),B.get("/admin/bedrock-accounts"),B.get("/admin/account-groups")]),ye=[];if(x.success&&((a=x.data)==null||a.forEach(j=>{ye.push({...j,platform:"claude-oauth",isDedicated:j.accountType==="dedicated"})})),r.success&&((t=r.data)==null||t.forEach(j=>{ye.push({...j,platform:"claude-console",isDedicated:j.accountType==="dedicated"})})),$.value.claude=ye,h.success&&($.value.gemini=(h.data||[]).map(j=>({...j,isDedicated:j.accountType==="dedicated"}))),A.success&&($.value.openai=(A.data||[]).map(j=>({...j,isDedicated:j.accountType==="dedicated"}))),M.success&&($.value.openaiResponses=(M.data||[]).map(j=>({...j,isDedicated:j.accountType==="dedicated"}))),re.success&&($.value.bedrock=(re.data||[]).map(j=>({...j,isDedicated:j.accountType==="dedicated"}))),ce.success){const j=ce.data||[];$.value.claudeGroups=j.filter(pe=>pe.platform==="claude"),$.value.geminiGroups=j.filter(pe=>pe.platform==="gemini"),$.value.openaiGroups=j.filter(pe=>pe.platform==="openai")}}catch{}},ve=async()=>{H.value=!0;try{let a={};y.type==="custom"&&y.customStart&&y.customEnd?(a.startDate=y.customStart,a.endDate=y.customEnd,a.timeRange="custom"):y.preset==="all"?a.timeRange="all":a.timeRange=y.preset;const t=new URLSearchParams(a).toString(),x=await B.get(`/admin/api-keys?${t}`);if(x.success){q.value=x.data||[];const r=new Set;q.value.forEach(h=>{h.tags&&Array.isArray(h.tags)&&h.tags.forEach(A=>r.add(A))}),n.value=Array.from(r).sort()}}catch{U("加载 API Keys 失败","error")}finally{H.value=!1}},Qe=async()=>{Q.value="deleted",N.value=!0;try{const a=await B.get("/admin/api-keys/deleted");a.success&&(R.value=a.apiKeys||[])}catch{U("加载已删除的 API Keys 失败","error")}finally{N.value=!1}},Ke=a=>{K.value===a?b.value=b.value==="asc"?"desc":"asc":(K.value=a,b.value="asc")},lt=a=>!a&&a!==0?"0":a.toLocaleString("zh-CN"),xe=a=>!a&&a!==0?"0":a>=1e6?(a/1e6).toFixed(1)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString(),Je=a=>{if(!a)return"未知账户";if(a.startsWith("group:")){const M=a.substring(6),re=$.value.claudeGroups.find(j=>j.id===M);if(re)return`分组-${re.name}`;const ce=$.value.geminiGroups.find(j=>j.id===M);if(ce)return`分组-${ce.name}`;const ye=$.value.openaiGroups.find(j=>j.id===M);return ye?`分组-${ye.name}`:`分组-${M.substring(0,8)}`}const t=$.value.claude.find(M=>M.id===a);if(t)return`${t.name}`;const x=$.value.gemini.find(M=>M.id===a);if(x)return`${x.name}`;if(a.startsWith("responses:")){const M=a.replace("responses:",""),re=$.value.openaiResponses.find(ce=>ce.id===M);return re?`${re.name}`:`${M.substring(0,8)}`}const r=$.value.openai.find(M=>M.id===a);if(r)return`${r.name}`;const h=$.value.openaiResponses.find(M=>M.id===a);if(h)return`${h.name}`;const A=$.value.bedrock.find(M=>M.id===a);return A?`${A.name}`:`${a.substring(0,8)}`},vt=a=>{if(a.claudeAccountId){const t=Je(a.claudeAccountId);if(a.claudeAccountId.startsWith("group:"))return t;const x=$.value.claude.find(r=>r.id===a.claudeAccountId);return x?x.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(a.claudeConsoleAccountId){const t=$.value.claude.find(x=>x.id===a.claudeConsoleAccountId&&x.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},kt=a=>{if(a.geminiAccountId){const t=Je(a.geminiAccountId);if(a.geminiAccountId.startsWith("group:"))return t;const x=$.value.gemini.find(r=>r.id===a.geminiAccountId);return x?x.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},wt=a=>{if(a.openaiAccountId){const t=Je(a.openaiAccountId);if(a.openaiAccountId.startsWith("group:"))return t;let x=null;if(a.openaiAccountId.startsWith("responses:")){const r=a.openaiAccountId.replace("responses:","");x=$.value.openaiResponses.find(h=>h.id===r)}else x=$.value.openai.find(r=>r.id===a.openaiAccountId);return x?x.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ht=a=>{if(a.bedrockAccountId){const t=Je(a.bedrockAccountId);if(a.bedrockAccountId.startsWith("group:"))return t;const x=$.value.bedrock.find(r=>r.id===a.bedrockAccountId);return x?x.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},Xe=a=>a?new Date(a)!a||Xe(a)?!1:(new Date(a)-new Date)/(1e3*60*60*24)<=7,$t=a=>a?new Date(a).toLocaleDateString("zh-CN"):"",Ht=async a=>{d.value[a]?d.value[a]=!1:(d.value[a]=!0,J.value[a]||Kt(a),await et(a,!0))},et=async(a,t=!1)=>{if(!t&&f.value[a]&&f.value[a].length>0)return;const x=Le(a);try{let r=`/admin/api-keys/${a}/model-stats`;const h=new URLSearchParams;if(x.customStart&&x.customEnd)h.append("startDate",x.customStart),h.append("endDate",x.customEnd),h.append("period","custom");else{const M=x.preset==="today"||x.preset==="7days"?"daily":"monthly";h.append("period",M)}r+="?"+h.toString();const A=await B.get(r);A.success&&(f.value[a]=A.data||[])}catch{U("加载模型统计失败","error"),f.value[a]=[]}},At=(a,t)=>{const x=t.reduce((r,h)=>r+(h.allTokens||0),0);return x===0?0:Math.round(a/x*100)},Yt=a=>a.formatted&&a.formatted.total?a.formatted.total:a.cost!==void 0?`$${a.cost.toFixed(6)}`:"$0.000000",tt=a=>{var t,x,r,h,A,M;if(y.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(y.preset==="today")return((x=(t=a.usage)==null?void 0:t.daily)==null?void 0:x.requests)||0;if(y.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].requests!==void 0?a.usage["7days"].requests:0;if(y.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 y.preset==="all"?a.usage&&a.usage.all&&a.usage.all.requests!==void 0?a.usage.all.requests:((h=(r=a.usage)==null?void 0:r.total)==null?void 0:h.requests)||0:((M=(A=a.usage)==null?void 0:A.total)==null?void 0:M.requests)||0}},Ct=a=>{if(y.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(y.preset==="today")return a.dailyCost||0;if(y.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].cost!==void 0?a.usage["7days"].cost:a.weeklyCost||a.periodCost||0;if(y.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 y.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}},st=a=>{var t,x,r,h,A,M;if(y.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(y.preset==="today")return((x=(t=a.usage)==null?void 0:t.daily)==null?void 0:x.tokens)||0;if(y.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].tokens!==void 0?a.usage["7days"].tokens:0;if(y.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 y.preset==="all"?a.usage&&a.usage.all&&a.usage.all.tokens!==void 0?a.usage.all.tokens:((h=(r=a.usage)==null?void 0:r.total)==null?void 0:h.tokens)||0:((M=(A=a.usage)==null?void 0:A.total)==null?void 0:M.tokens)||0}},Qt=a=>{var t,x,r,h,A,M;if(y.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(y.preset==="today")return((x=(t=a.usage)==null?void 0:t.daily)==null?void 0:x.inputTokens)||0;if(y.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].inputTokens!==void 0?a.usage["7days"].inputTokens:0;if(y.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 y.preset==="all"?a.usage&&a.usage.all&&a.usage.all.inputTokens!==void 0?a.usage.all.inputTokens:((h=(r=a.usage)==null?void 0:r.total)==null?void 0:h.inputTokens)||0:((M=(A=a.usage)==null?void 0:A.total)==null?void 0:M.inputTokens)||0}},Jt=a=>{var t,x,r,h,A,M;if(y.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(y.preset==="today")return((x=(t=a.usage)==null?void 0:t.daily)==null?void 0:x.outputTokens)||0;if(y.preset==="7days")return a.usage&&a.usage["7days"]&&a.usage["7days"].outputTokens!==void 0?a.usage["7days"].outputTokens:0;if(y.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 y.preset==="all"?a.usage&&a.usage.all&&a.usage.all.outputTokens!==void 0?a.usage.all.outputTokens:((h=(r=a.usage)==null?void 0:r.total)==null?void 0:h.outputTokens)||0:((M=(A=a.usage)==null?void 0:A.total)==null?void 0:M.outputTokens)||0}},nt=a=>{if(!f.value[a.id])return Ct(a);const t=f.value[a.id]||[];let x=0;return t.forEach(r=>{if(r.cost!==void 0)x+=r.cost;else if(r.formatted&&r.formatted.total){const h=r.formatted.total.replace("$","").replace(",",""),A=parseFloat(h);isNaN(A)||(x+=A)}}),x},Xt=a=>{It(a)},It=a=>{if(y.preset=a,a==="custom"){if(y.type="custom",!y.customRange){const t=new Date,x=new Date(t);x.setDate(t.getDate()-6);const r=h=>h.getFullYear()+"-"+String(h.getMonth()+1).padStart(2,"0")+"-"+String(h.getDate()).padStart(2,"0")+" 00:00:00";y.customRange=[r(x),r(t)],y.customStart=x.toISOString().split("T")[0],y.customEnd=t.toISOString().split("T")[0]}}else if(a==="all")y.type="preset",y.customStart=null,y.customEnd=null;else{y.type="preset";const t=new Date,x=new Date(t);a==="today"?x.setHours(0,0,0,0):a==="7days"?x.setDate(t.getDate()-6):a==="30days"&&x.setDate(t.getDate()-29),y.customStart=x.toISOString().split("T")[0],y.customEnd=t.toISOString().split("T")[0]}ve()},Zt=a=>{a&&a.length===2?(y.type="custom",y.preset="custom",y.customRange=a,y.customStart=a[0].split(" ")[0],y.customEnd=a[1].split(" ")[0],ve()):a===null&&It("today")},Kt=a=>{const t=new Date;new Date(t).setHours(0,0,0,0),J.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}]}},Le=a=>(J.value[a]||Kt(a),J.value[a]),Lt=(a,t)=>{const x=Le(t);x.type="preset",x.preset=a;const r=x.presetOptions.find(h=>h.value===a);if(r)if(a==="custom"){if(x.type="custom",!x.customRange){const h=new Date,A=new Date(h);A.setDate(h.getDate()-6);const M=re=>re.getFullYear()+"-"+String(re.getMonth()+1).padStart(2,"0")+"-"+String(re.getDate()).padStart(2,"0")+" 00:00:00";x.customRange=[M(A),M(h)],x.customStart=A.toISOString().split("T")[0],x.customEnd=h.toISOString().split("T")[0]}}else{const h=new Date,A=new Date(h);A.setDate(h.getDate()-(r.days-1)),x.customStart=A.toISOString().split("T")[0],x.customEnd=h.toISOString().split("T")[0];const M=re=>re.getFullYear()+"-"+String(re.getMonth()+1).padStart(2,"0")+"-"+String(re.getDate()).padStart(2,"0")+" 00:00:00";x.customRange=[M(A),M(h)]}et(t,!0)},es=(a,t)=>{const x=Le(a);t&&t.length===2?(x.type="custom",x.preset="custom",x.customRange=t,x.customStart=t[0].split(" ")[0],x.customEnd=t[1].split(" ")[0],et(a,!0)):t===null&&Lt("7days",a)},Dt=a=>a>new Date,ts=a=>{const t=Le(a);t.type="preset",t.preset="today";const x=new Date;new Date(x).setHours(0,0,0,0),t.customStart=x.toISOString().split("T")[0],t.customEnd=x.toISOString().split("T")[0],t.customRange=null,et(a,!0),U("已重置筛选条件并刷新数据","info")},ss=async()=>{await Ye(),le.value=!0},Tt=async a=>{await Ye(),pt.value=a,he.value=!0},St=a=>{mt.value=a,se.value=!0},as=a=>{le.value=!1,xt.value=a,Ce.value=!0,ve()},rs=a=>{le.value=!1,yt.value=a,ot.value=!0,ve()},os=async()=>{if(C.value.length===0){U("请先选择要编辑的 API Keys","warning");return}await Ye(),He.value=!0},ls=()=>{He.value=!1,C.value=[],$e(),ve()},ns=()=>{he.value=!1,U("API Key 更新成功","success"),ve()},is=()=>{se.value=!1,U("API Key 续期成功","success"),ve()},_t=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 x=await B.put(`/admin/api-keys/${a.id}`,{isActive:!a.isActive});if(x.success){U(`API Key 已${a.isActive?"禁用":"激活"}`,"success");const r=q.value.find(h=>h.id===a.id);r&&(r.isActive=!a.isActive)}else U(x.message||"操作失败","error")}catch{U("操作失败","error")}},Pt=async a=>{let t=!1;if(window.showConfirm?t=await window.showConfirm("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消"):t=confirm("确定要删除这个 API Key 吗?此操作不可恢复。"),!!t)try{const x=await B.delete(`/admin/api-keys/${a}`);if(x.success){U("API Key 已删除","success");const r=C.value.indexOf(a);r>-1&&C.value.splice(r,1),$e(),ve()}else U(x.message||"删除失败","error")}catch{U("删除失败","error")}},ds=async a=>{var x,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消"):t=confirm("确定要恢复这个 API Key 吗?恢复后可以重新使用。"),!!t)try{const h=await B.post(`/admin/api-keys/${a}/restore`);h.success?(U("API Key 已成功恢复","success"),await Qe(),await ve()):U(h.error||"恢复失败","error")}catch(h){U(((r=(x=h.response)==null?void 0:x.data)==null?void 0:r.error)||"恢复失败","error")}},us=async a=>{var x,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消"):t=confirm("确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。"),!!t)try{const h=await B.delete(`/admin/api-keys/${a}/permanent`);h.success?(U("API Key 已彻底删除","success"),Qe()):U(h.error||"彻底删除失败","error")}catch(h){U(((r=(x=h.response)==null?void 0:x.data)==null?void 0:r.error)||"彻底删除失败","error")}},cs=async()=>{var x,r;const a=R.value.length;if(a===0){U("没有需要清空的 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 h=await B.delete("/admin/api-keys/deleted/clear-all");h.success?(U(h.message||"已清空所有已删除的 API Keys","success"),h.details&&h.details.failedCount>0&&U(`${h.details.failedCount} 个清空失败`,"warning"),Qe()):U(h.error||"清空失败","error")}catch(h){U(((r=(x=h.response)==null?void 0:x.data)==null?void 0:r.error)||"清空失败","error")}},gs=async()=>{const a=C.value.length;if(a===0){U("请先选择要删除的 API Keys","warning");return}let t=!1;const x=`确定要删除选中的 ${a} 个 API Key 吗?此操作不可恢复。`;if(window.showConfirm?t=await window.showConfirm("批量删除 API Keys",x,"确定删除","取消"):t=confirm(x),!t)return;const r=[...C.value];try{const h=await B.delete("/admin/api-keys/batch",{data:{keyIds:r}});if(h.success){const{successCount:A,failedCount:M,errors:re}=h.data;if(A>0){if(U(`成功删除 ${A} 个 API Keys`,"success"),M>0){const ce=re.map(ye=>`${ye.keyId}: ${ye.error}`).join(` `);U(`${M} 个删除失败: ${ce}`,"warning")}}else U("所有 API Keys 删除失败","error");C.value=[],$e(),ve()}else U(h.message||"批量删除失败","error")}catch{U("批量删除失败","error")}},ps=()=>{if(_.value)Oe.value.forEach(a=>{C.value.includes(a.id)||C.value.push(a.id)});else{const a=new Set(Oe.value.map(t=>t.id));C.value=C.value.filter(t=>!a.has(t))}$e()},$e=()=>{const a=Oe.value.length,t=Oe.value.filter(x=>C.value.includes(x.id)).length;t===0?(_.value=!1,z.value=!1):t===a?(_.value=!0,z.value=!1):(_.value=!1,z.value=!0)},ze=a=>{de.value=a},Mt=()=>{de.value=null},ms=async({keyId:a,expiresAt:t,activateNow:x})=>{try{const r=await B.patch(`/admin/api-keys/${a}/expiration`,{expiresAt:t||null,activateNow:x||!1});if(r.success){U(x?"API Key已激活":"过期时间已更新","success");const h=q.value.find(A=>A.id===a);h&&(x&&r.updates?(h.isActivated=!0,h.activatedAt=r.updates.activatedAt,h.expiresAt=r.updates.expiresAt):(h.expiresAt=t||null,t&&!h.isActivated&&(h.isActivated=!0))),Mt()}else U(r.message||"更新失败","error"),P.value&&P.value.resetSaving()}catch{U("更新失败","error"),P.value&&P.value.resetSaving()}},Fe=a=>a?new Date(a).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",it=a=>{u.value=a,l.value=!0},dt=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")},xs=()=>{v.value="",ee.value=1},ys=()=>{try{const a=Ee.value.map(j=>{var Rt,Vt,Et,Ot,jt,Ut,qt,Gt;const pe=tt(j),De=nt(j),ke=st(j),at=Qt(j),me=Jt(j),fs={名称:j.name||"",标签:j.tags&&j.tags.length>0?j.tags.join(", "):"无",请求总数:pe,"总费用($)":De.toFixed(2),Token数:xe(ke),输入Token:xe(at),输出Token:xe(me),最后使用时间:j.lastUsedAt?Fe(j.lastUsedAt):"从未使用"},je={};let Ue=null;return y.preset==="today"?Ue=(Vt=(Rt=j.usage)==null?void 0:Rt.daily)==null?void 0:Vt.models:y.preset==="7days"?Ue=(Ot=(Et=j.usage)==null?void 0:Et.weekly)==null?void 0:Ot.models:y.preset==="30days"?Ue=(Ut=(jt=j.usage)==null?void 0:jt.monthly)==null?void 0:Ut.models:y.preset==="all"&&(Ue=(Gt=(qt=j.usage)==null?void 0:qt.total)==null?void 0:Gt.models),Ue&&Object.entries(Ue).forEach(([ut,We])=>{let Te=ut;ut.includes(":")&&(Te=ut.split(":").pop()),Te=Te.replace(/[:/]/g,"_"),je[`${Te}_请求数`]=We.requests||0,je[`${Te}_费用($)`]=(We.cost||0).toFixed(2),je[`${Te}_Token`]=xe(We.totalTokens||0),je[`${Te}_输入Token`]=xe(We.inputTokens||0),je[`${Te}_输出Token`]=xe(We.outputTokens||0)}),{...fs,...je}}),t=Ve.utils.book_new(),x=Ve.utils.json_to_sheet(a),r=Ve.utils.decode_range(x["!ref"]),h=Object.keys(a[0]||{}),A=h.map(j=>j==="名称"?{wch:25}:j==="标签"?{wch:20}:j==="最后使用时间"?{wch:20}:j.includes("费用")?{wch:15}:j.includes("Token")?{wch:15}:j.includes("请求")?{wch:12}:{wch:15});x["!cols"]=A;for(let j=r.s.c;j<=r.e.c;++j){const pe=Ve.utils.encode_cell({r:0,c:j});if(!x[pe])continue;const De=h[j],ke=De&&De.includes("_");x[pe].s={fill:{fgColor:{rgb:ke?"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 j=1;j<=r.e.r;++j)for(let pe=r.s.c;pe<=r.e.c;++pe){const De=Ve.utils.encode_cell({r:j,c:pe});if(!x[De])continue;const ke=h[pe],at=x[De].v,me={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"}}}};j%2===0&&(me.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?me.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(me.alignment={horizontal:"left",vertical:"center"},at==="无"&&(me.font={...me.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(me.alignment={horizontal:"right",vertical:"center"},at==="从未使用"&&(me.font={...me.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(me.alignment={horizontal:"right",vertical:"center"},me.font={...me.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(me.alignment={horizontal:"right",vertical:"center"}),x[De].s=me}Ve.utils.book_append_sheet(t,x,"用量统计");const M=new Date,re=M.getFullYear()+String(M.getMonth()+1).padStart(2,"0")+String(M.getDate()).padStart(2,"0")+"_"+String(M.getHours()).padStart(2,"0")+String(M.getMinutes()).padStart(2,"0")+String(M.getSeconds()).padStart(2,"0");let ce="";y.type==="preset"?ce={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[y.preset]||y.preset:ce="自定义时间";const ye=`API_Keys_用量统计_${ce}_${re}.xlsx`;Ve.writeFile(t,ye),U(`成功导出 ${a.length} 条API Key用量数据`,"success")}catch{U("导出失败,请重试","error")}};return Se([p,D],()=>{ee.value=1,C.value=[],$e()}),Se(v,()=>{ee.value=1,$e()}),Se([ee,ie],()=>{$e()}),Se(ie,a=>{localStorage.setItem("apiKeysPageSize",a.toString())}),Se(q,()=>{const a=new Set(q.value.map(t=>t.id));C.value=C.value.filter(t=>a.has(t)),$e()}),Ne(async()=>{await Promise.all([G.loadSupportedClients(),Ye(),ve()]),$e()}),(a,t)=>{const x=bs;return o(),i("div",$d,[e("div",Ad,[e("div",Cd,[t[143]||(t[143]=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",Id,[e("nav",Kd,[e("button",{class:E(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",Q.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=>Q.value="active")},[t[33]||(t[33]=I(" 活跃 API Keys ",-1)),q.value.length>0?(o(),i("span",Ld,c(q.value.length),1)):k("",!0)],2),e("button",{class:E(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",Q.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:Qe},[t[34]||(t[34]=I(" 已删除 API Keys ",-1)),R.value.length>0?(o(),i("span",Dd,c(R.value.length),1)):k("",!0)],2)])]),Q.value==="active"?(o(),i("div",Td,[e("div",Sd,[e("div",_d,[e("div",Pd,[t[35]||(t[35]=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)),ge(zt,{modelValue:y.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>y.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:s.value,placeholder:"选择时间范围",onChange:Xt},null,8,["modelValue","options"])]),y.type==="custom"?(o(),i("div",Md,[ge(x,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":O.value,"disabled-date":Dt,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":y.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":Zt},null,8,["default-time","model-value"])])):k("",!0),e("div",Rd,[t[36]||(t[36]=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",Vd,[ge(zt,{modelValue:p.value,"onUpdate:modelValue":t[2]||(t[2]=r=>p.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:oe.value,placeholder:"所有标签",onChange:t[3]||(t[3]=r=>ee.value=1)},null,8,["modelValue","options"]),p.value?(o(),i("span",Ed,c(ue.value),1)):k("",!0)])]),e("div",Od,[t[39]||(t[39]=e("div",{class:"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",jd,[T(e("input",{"onUpdate:modelValue":t[4]||(t[4]=r=>v.value=r),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-1.5 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:W.value?"搜索名称或所有者...":"搜索名称...",type:"text",onInput:t[5]||(t[5]=r=>ee.value=1)},null,40,Ud),[[X,v.value]]),t[38]||(t[38]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),v.value?(o(),i("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:xs},t[37]||(t[37]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):k("",!0)])])]),e("div",qd,[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:H.value,onClick:t[6]||(t[6]=r=>ve())},[t[40]||(t[40]=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:E(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[41]||(t[41]=e("span",{class:"relative"},"刷新",-1))],8,Gd),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:E(V.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(V.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:ys},t[42]||(t[42]=[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?(o(),i("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[7]||(t[7]=r=>os())},[t[43]||(t[43]=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[44]||(t[44]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",zd,"编辑选中 ("+c(C.value.length)+")",1)])):k("",!0),C.value.length>0?(o(),i("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[8]||(t[8]=r=>gs())},[t[45]||(t[45]=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[46]||(t[46]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Fd,"删除选中 ("+c(C.value.length)+")",1)])):k("",!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:fe(ss,["stop"])},t[47]||(t[47]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(o(),i("div",Wd,t[48]||(t[48]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):q.value.length===0?(o(),i("div",Bd,t[49]||(t[49]=[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)]))):(o(),i("div",Nd,[e("div",Hd,[e("table",Yd,[e("thead",Qd,[e("tr",null,[L.value?(o(),i("th",Jd,[e("div",Xd,[T(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>_.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:z.value,type:"checkbox",onChange:ps},null,40,Zd),[[Ae,_.value]])])])):k("",!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[10]||(t[10]=r=>Ke("name"))},[t[50]||(t[50]=I(" 名称 ",-1)),K.value==="name"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",e0))]),t[58]||(t[58]=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[59]||(t[59]=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[11]||(t[11]=r=>Ke("status"))},[t[51]||(t[51]=I(" 状态 ",-1)),K.value==="status"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",t0))]),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[12]||(t[12]=r=>Ke("periodCost"))},[t[52]||(t[52]=I(" 费用 ",-1)),K.value==="periodCost"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",s0))]),t[60]||(t[60]=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[13]||(t[13]=r=>Ke("periodTokens"))},[t[53]||(t[53]=I(" Token ",-1)),K.value==="periodTokens"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",a0))]),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[14]||(t[14]=r=>Ke("periodRequests"))},[t[54]||(t[54]=I(" 请求数 ",-1)),K.value==="periodRequests"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",r0))]),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[15]||(t[15]=r=>Ke("lastUsedAt"))},[t[55]||(t[55]=I(" 最后使用 ",-1)),K.value==="lastUsedAt"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",o0))]),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[16]||(t[16]=r=>Ke("createdAt"))},[t[56]||(t[56]=I(" 创建时间 ",-1)),K.value==="createdAt"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",l0))]),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=>Ke("expiresAt"))},[t[57]||(t[57]=I(" 过期时间 ",-1)),K.value==="expiresAt"?(o(),i("i",{key:0,class:E(["fas",b.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),i("i",n0))]),t[61]||(t[61]=e("th",{class:"w-[23%] min-w-[170px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(o(!0),i(Y,null,Z(Oe.value,(r,h)=>(o(),i(Y,{key:r.id},[e("tr",{class:E(["table-row transition-all duration-150",h%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"])},[L.value?(o(),i("td",i0,[e("div",d0,[T(e("input",{"onUpdate:modelValue":t[18]||(t[18]=A=>C.value=A),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:$e},null,40,u0),[[Ae,C.value]])])])):k("",!0),e("td",c0,[e("div",g0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,p0),W.value&&r.ownerDisplayName?(o(),i("div",m0,[t[62]||(t[62]=e("i",{class:"fas fa-user mr-1"},null,-1)),I(" "+c(r.ownerDisplayName),1)])):k("",!0)])]),e("td",x0,[e("div",y0,[r.claudeAccountId||r.claudeConsoleAccountId?(o(),i("div",f0,[t[63]||(t[63]=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]"}),I(" Claude ")],-1)),e("span",b0,c(vt(r)),1)])):k("",!0),r.geminiAccountId?(o(),i("div",v0,[t[64]||(t[64]=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]"}),I(" Gemini ")],-1)),e("span",k0,c(kt(r)),1)])):k("",!0),r.openaiAccountId?(o(),i("div",w0,[t[65]||(t[65]=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]"}),I(" OpenAI ")],-1)),e("span",h0,c(wt(r)),1)])):k("",!0),r.bedrockAccountId?(o(),i("div",$0,[t[66]||(t[66]=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]"}),I(" Bedrock ")],-1)),e("span",A0,c(ht(r)),1)])):k("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId?(o(),i("div",C0,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),I(" 共享池 ",-1)]))):k("",!0)])]),e("td",I0,[e("div",K0,[(o(!0),i(Y,null,Z(r.tags||[],A=>(o(),i("span",{key:A,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"},c(A),1))),128)),!r.tags||r.tags.length===0?(o(),i("span",L0,"无标签")):k("",!0)])]),e("td",D0,[e("span",{class:E(["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:E(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),I(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",T0,[e("span",S0," $"+c(Ct(r).toFixed(2)),1)]),e("td",_0,[e("div",P0,[r.dailyCostLimit>0?(o(),ne(rt,{key:0,current:r.dailyCost||0,label:"每日",limit:r.dailyCostLimit,type:"daily"},null,8,["current","limit"])):k("",!0),r.weeklyOpusCostLimit>0?(o(),ne(rt,{key:1,current:r.weeklyOpusCost||0,label:"Opus",limit:r.weeklyOpusCostLimit,type:"opus"},null,8,["current","limit"])):k("",!0),r.rateLimitWindow>0?(o(),ne(Ft,{key:2,"cost-limit":r.rateLimitCost||0,"current-cost":r.currentWindowCost||0,"current-requests":r.currentWindowRequests||0,"current-tokens":r.currentWindowTokens||0,"rate-limit-window":r.rateLimitWindow,"remaining-seconds":r.windowRemainingSeconds||0,"request-limit":r.rateLimitRequests||0,"token-limit":r.tokenLimit||0},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","remaining-seconds","request-limit","token-limit"])):k("",!0),!r.dailyCostLimit&&!r.weeklyOpusCostLimit&&!r.rateLimitWindow?(o(),i("div",M0,t[68]||(t[68]=[e("div",{class:"flex h-full items-center justify-center gap-1.5"},[e("i",{class:"fas fa-infinity text-xs text-gray-400 dark:text-gray-500"}),e("span",{class:"text-xs font-medium text-gray-400 dark:text-gray-500"}," 无限制 ")],-1)]))):k("",!0)])]),e("td",R0,[e("div",V0,[e("span",E0,c(xe(st(r))),1)])]),e("td",O0,[e("div",j0,[e("span",U0,c(lt(tt(r))),1),t[69]||(t[69]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",q0,[r.lastUsedAt?(o(),i("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(dt(r.lastUsedAt)),9,G0)):(o(),i("span",z0,"从未使用"))]),e("td",F0,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",W0,[e("div",B0,[r.expirationMode==="activation"&&!r.isActivated?(o(),i("span",N0,[t[70]||(t[70]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),I(" 未激活 ("+c(r.activationDays||30)+"天) ",1)])):r.expiresAt?(o(),i("span",H0,[Xe(r.expiresAt)?(o(),i("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:fe(A=>ze(r),["stop"])},t[71]||(t[71]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),I(" 已过期 ",-1)]),8,Y0)):Ze(r.expiresAt)?(o(),i("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:fe(A=>ze(r),["stop"])},[t[72]||(t[72]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),I(" "+c($t(r.expiresAt)),1)],8,Q0)):(o(),i("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:fe(A=>ze(r),["stop"])},c($t(r.expiresAt)),9,J0))])):(o(),i("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:fe(A=>ze(r),["stop"])},t[73]||(t[73]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),I(" 永不过期 ",-1)]),8,X0))])]),e("td",Z0,[e("div",eu,[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:A=>it(r)},t[74]||(t[74]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"详情",-1)]),8,tu),r&&r.id?(o(),i("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:A=>Ht(r.id)},[e("i",{class:E(["fas",d.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[75]||(t[75]=e("span",{class:"ml-1 hidden xl:inline"},"模型",-1))],8,su)):k("",!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:A=>Tt(r)},t[76]||(t[76]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"编辑",-1)]),8,au),r.expiresAt&&(Xe(r.expiresAt)||Ze(r.expiresAt))?(o(),i("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:A=>St(r)},t[77]||(t[77]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"续期",-1)]),8,ru)):k("",!0),e("button",{class:E([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:A=>_t(r)},[e("i",{class:E(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",lu,c(r.isActive?"禁用":"激活"),1)],10,ou),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:A=>Pt(r.id)},t[78]||(t[78]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1 hidden xl:inline"},"删除",-1)]),8,nu)])])],2),r&&r.id&&d.value[r.id]?(o(),i("tr",iu,[e("td",du,[f.value[r.id]?k("",!0):(o(),i("div",uu,t[79]||(t[79]=[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",cu,[e("div",gu,[t[80]||(t[80]=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"}),I(" 模型使用分布 ")],-1)),e("div",pu,[f.value[r.id]&&f.value[r.id].length>0?(o(),i("span",mu,c(f.value[r.id].length)+" 个模型 ",1)):k("",!0),e("div",xu,[e("div",yu,[(o(!0),i(Y,null,Z(Le(r.id).presetOptions,A=>(o(),i("button",{key:A.value,class:E(["rounded px-2 py-1 text-xs font-medium transition-colors",Le(r.id).preset===A.value&&Le(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:M=>Lt(A.value,r.id)},c(A.label),11,fu))),128))]),ge(x,{class:"api-key-date-picker",clearable:!0,"default-time":O.value,"disabled-date":Dt,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Le(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":A=>es(r.id,A)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),f.value[r.id]&&f.value[r.id].length===0?(o(),i("div",bu,[e("div",vu,[t[82]||(t[82]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[83]||(t[83]=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:A=>ts(r.id)},t[81]||(t[81]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,ku)]),t[84]||(t[84]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):f.value[r.id]&&f.value[r.id].length>0?(o(),i("div",wu,[(o(!0),i(Y,null,Z(f.value[r.id],A=>(o(),i("div",{key:A.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",hu,[e("div",$u,[e("span",Au,c(A.model),1),e("span",Cu,c(A.requests)+" 次请求",1)])]),e("div",Iu,[e("div",Ku,[t[85]||(t[85]=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"}),I(" 总Token: ")],-1)),e("span",Lu,c(xe(A.allTokens)),1)]),e("div",Du,[t[86]||(t[86]=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"}),I(" 费用: ")],-1)),e("span",Tu,c(Yt(A)),1)]),e("div",Su,[e("div",_u,[t[87]||(t[87]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),I(" 输入: ")],-1)),e("span",Pu,c(xe(A.inputTokens)),1)]),e("div",Mu,[t[88]||(t[88]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),I(" 输出: ")],-1)),e("span",Ru,c(xe(A.outputTokens)),1)]),A.cacheCreateTokens>0?(o(),i("div",Vu,[t[89]||(t[89]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),I(" 缓存创建: ")],-1)),e("span",Eu,c(xe(A.cacheCreateTokens)),1)])):k("",!0),A.cacheReadTokens>0?(o(),i("div",Ou,[t[90]||(t[90]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),I(" 缓存读取: ")],-1)),e("span",ju,c(xe(A.cacheReadTokens)),1)])):k("",!0)])]),e("div",Uu,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Me({width:At(A.allTokens,f.value[r.id])+"%"})},null,4)]),e("div",qu,[e("span",Gu,c(At(A.allTokens,f.value[r.id]))+"% ",1)])]))),128))])):k("",!0),f.value[r.id]&&f.value[r.id].length>0?(o(),i("div",zu,[e("div",Fu,[t[93]||(t[93]=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"}),I(" 总计统计 ")],-1)),e("div",Wu,[e("span",Bu,[t[91]||(t[91]=I(" 总请求: ",-1)),e("span",Nu,c(f.value[r.id].reduce((A,M)=>A+M.requests,0)),1)]),e("span",Hu,[t[92]||(t[92]=I(" 总Token: ",-1)),e("span",Yu,c(xe(f.value[r.id].reduce((A,M)=>A+M.allTokens,0))),1)])])])])):k("",!0)])])])):k("",!0)],64))),128))])])])])),!H.value&&Ee.value.length>0?(o(),i("div",Qu,[(o(!0),i(Y,null,Z(Oe.value,r=>{var h,A;return o(),i("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Ju,[e("div",Xu,[L.value?T((o(),i("input",{key:0,"onUpdate:modelValue":t[19]||(t[19]=M=>C.value=M),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:$e},null,40,Zu)),[[Ae,C.value]]):k("",!0),e("div",null,[e("h4",ec,c(r.name),1),e("p",tc,c(r.id),1)])]),e("span",{class:E(["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:E(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),I(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",sc,[r.claudeAccountId||r.claudeConsoleAccountId?(o(),i("div",ac,[t[94]||(t[94]=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"}),I(" Claude ")],-1)),e("span",rc,c(vt(r)),1)])):k("",!0),r.geminiAccountId?(o(),i("div",oc,[t[95]||(t[95]=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"}),I(" Gemini ")],-1)),e("span",lc,c(kt(r)),1)])):k("",!0),r.openaiAccountId?(o(),i("div",nc,[t[96]||(t[96]=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"}),I(" OpenAI ")],-1)),e("span",ic,c(wt(r)),1)])):k("",!0),r.bedrockAccountId?(o(),i("div",dc,[t[97]||(t[97]=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"}),I(" Bedrock ")],-1)),e("span",uc,c(ht(r)),1)])):k("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId?(o(),i("div",cc,t[98]||(t[98]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),I(" 使用共享池 ",-1)]))):k("",!0),W.value&&r.ownerDisplayName?(o(),i("div",gc,[t[99]||(t[99]=e("i",{class:"fas fa-user mr-1"},null,-1)),I(" "+c(r.ownerDisplayName),1)])):k("",!0)]),e("div",pc,[e("div",mc,[e("div",xc,[e("span",yc,c(y.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:M=>it(r)},t[100]||(t[100]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),I("详情 ",-1)]),8,fc)]),e("div",bc,[e("div",null,[e("p",vc,c(lt(((A=(h=r.usage)==null?void 0:h.daily)==null?void 0:A.requests)||0))+" 次 ",1),t[101]||(t[101]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[e("p",kc," $"+c((r.dailyCost||0).toFixed(2)),1),t[102]||(t[102]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",wc,[t[103]||(t[103]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},"最后使用",-1)),e("span",hc,c(dt(r.lastUsedAt)),1)])]),e("div",$c,[r.dailyCostLimit>0?(o(),ne(rt,{key:0,current:r.dailyCost||0,label:"每日",limit:r.dailyCostLimit,type:"daily"},null,8,["current","limit"])):k("",!0),r.weeklyOpusCostLimit>0?(o(),ne(rt,{key:1,current:r.weeklyOpusCost||0,label:"Opus",limit:r.weeklyOpusCostLimit,type:"opus"},null,8,["current","limit"])):k("",!0),r.rateLimitWindow>0?(o(),ne(Ft,{key:2,"cost-limit":r.rateLimitCost||0,"current-cost":r.currentWindowCost||0,"current-requests":r.currentWindowRequests||0,"current-tokens":r.currentWindowTokens||0,"rate-limit-window":r.rateLimitWindow,"remaining-seconds":r.windowRemainingSeconds||0,"request-limit":r.rateLimitRequests||0,"token-limit":r.tokenLimit||0},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","remaining-seconds","request-limit","token-limit"])):k("",!0),!r.dailyCostLimit&&!r.weeklyOpusCostLimit&&!r.rateLimitWindow?(o(),i("div",Ac,t[104]||(t[104]=[e("div",{class:"flex h-full items-center justify-center gap-1.5"},[e("i",{class:"fas fa-infinity text-xs text-gray-400 dark:text-gray-500"}),e("span",{class:"text-xs font-medium text-gray-400 dark:text-gray-500"}," 无限制 ")],-1)]))):k("",!0)])]),e("div",Cc,[e("div",Ic,[t[105]||(t[105]=e("span",null,"创建时间",-1)),e("span",null,c(Fe(r.createdAt)),1)]),e("div",Kc,[t[107]||(t[107]=e("span",null,"过期时间",-1)),e("div",Lc,[e("span",{class:E(Ze(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?Fe(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:fe(M=>ze(r),["stop"])},t[106]||(t[106]=[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,Dc)])])]),r.tags&&r.tags.length>0?(o(),i("div",Tc,[(o(!0),i(Y,null,Z(r.tags,M=>(o(),i("span",{key:M,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"},c(M),1))),128))])):k("",!0),e("div",Sc,[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:M=>it(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line"},null,-1),I(" 查看详情 ",-1)]),8,_c),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:M=>Tt(r)},t[109]||(t[109]=[e("i",{class:"fas fa-edit mr-1"},null,-1),I(" 编辑 ",-1)]),8,Pc),r.expiresAt&&(Xe(r.expiresAt)||Ze(r.expiresAt))?(o(),i("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:M=>St(r)},t[110]||(t[110]=[e("i",{class:"fas fa-clock mr-1"},null,-1),I(" 续期 ",-1)]),8,Mc)):k("",!0),e("button",{class:E([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:M=>_t(r)},[e("i",{class:E(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),I(" "+c(r.isActive?"禁用":"激活"),1)],10,Rc),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:M=>Pt(r.id)},t[111]||(t[111]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Vc)])])}),128))])):k("",!0),Ee.value.length>0?(o(),i("div",Ec,[e("div",Oc,[e("span",jc," 共 "+c(Ee.value.length)+" 条记录 ",1),e("div",Uc,[t[112]||(t[112]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),T(e("select",{"onUpdate:modelValue":t[20]||(t[20]=r=>ie.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[21]||(t[21]=r=>ee.value=1)},[(o(),i(Y,null,Z(te,r=>e("option",{key:r,value:r},c(r),9,qc)),64))],544),[[_e,ie.value]]),t[113]||(t[113]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",Gc,[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:ee.value===1,onClick:t[22]||(t[22]=r=>ee.value--)},t[114]||(t[114]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,zc),e("div",Fc,[ft.value?(o(),i("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[23]||(t[23]=r=>ee.value=1)}," 1 ")):k("",!0),Bt.value?(o(),i("span",Wc,"...")):k("",!0),(o(!0),i(Y,null,Z(Ge.value,r=>(o(),i("button",{key:r,class:E(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ee.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:h=>ee.value=r},c(r),11,Bc))),128)),Nt.value?(o(),i("span",Nc,"...")):k("",!0),bt.value?(o(),i("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[24]||(t[24]=r=>ee.value=Re.value)},c(Re.value),1)):k("",!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:ee.value===Re.value||Re.value===0,onClick:t[25]||(t[25]=r=>ee.value++)},t[115]||(t[115]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,Hc)])])):k("",!0)])):Q.value==="deleted"?(o(),i("div",Yc,[N.value?(o(),i("div",Qc,t[116]||(t[116]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):R.value.length===0?(o(),i("div",Jc,t[117]||(t[117]=[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)]))):(o(),i("div",Xc,[e("div",Zc,[R.value.length>0?(o(),i("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:cs},[t[118]||(t[118]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),I(" 清空所有已删除 ("+c(R.value.length)+") ",1)])):k("",!0)]),e("div",eg,[e("div",tg,[e("table",sg,[e("thead",ag,[e("tr",null,[t[119]||(t[119]=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[120]||(t[120]=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)),W.value?(o(),i("th",rg," 创建者 ")):k("",!0),t[121]||(t[121]=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[122]||(t[122]=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[123]||(t[123]=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[124]||(t[124]=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[125]||(t[125]=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[126]||(t[126]=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[127]||(t[127]=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[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))])]),e("tbody",og,[(o(!0),i(Y,null,Z(R.value,r=>{var h,A,M,re,ce,ye;return o(),i("tr",{key:r.id,class:"table-row"},[e("td",lg,[e("div",ng,[t[129]||(t[129]=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",ig,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,dg)])])]),e("td",ug,[e("div",cg,[r.claudeAccountId?(o(),i("div",gg,t[130]||(t[130]=[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]"}),I(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(o(),i("div",pg,t[131]||(t[131]=[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]"}),I(" Claude Console ")],-1)]))):r.geminiAccountId?(o(),i("div",mg,t[132]||(t[132]=[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]"}),I(" Gemini ")],-1)]))):(o(),i("div",xg,t[133]||(t[133]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),I(" 共享池 ",-1)])))])]),W.value?(o(),i("td",yg,[e("div",fg,[r.createdBy==="admin"?(o(),i("span",bg,t[134]||(t[134]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),I(" 管理员 ",-1)]))):r.userUsername?(o(),i("span",vg,[t[135]||(t[135]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),I(" "+c(r.userUsername),1)])):(o(),i("span",kg,t[136]||(t[136]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),I(" 未知 ",-1)])))])])):k("",!0),e("td",wg,c(Fe(r.createdAt)),1),e("td",hg,[e("div",$g,[r.deletedByType==="admin"?(o(),i("span",Ag,[t[137]||(t[137]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),I(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(o(),i("span",Cg,[t[138]||(t[138]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),I(" "+c(r.deletedBy),1)])):(o(),i("span",Ig,[t[139]||(t[139]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),I(" "+c(r.deletedBy),1)]))])]),e("td",Kg,c(Fe(r.deletedAt)),1),e("td",Lg,[e("span",Dg," $"+c((((A=(h=r.usage)==null?void 0:h.total)==null?void 0:A.cost)||0).toFixed(2)),1)]),e("td",Tg,[e("span",Sg,c(xe(((re=(M=r.usage)==null?void 0:M.total)==null?void 0:re.tokens)||0)),1)]),e("td",_g,[e("div",Pg,[e("span",Mg,c(lt(((ye=(ce=r.usage)==null?void 0:ce.total)==null?void 0:ye.requests)||0)),1),t[140]||(t[140]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",Rg,[r.lastUsedAt?(o(),i("span",Vg,c(dt(r.lastUsedAt)),1)):(o(),i("span",Eg,"从未使用"))]),e("td",Og,[e("div",jg,[r.canRestore?(o(),i("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:j=>ds(r.id)},t[141]||(t[141]=[e("i",{class:"fas fa-undo mr-1"},null,-1),I(" 恢复 ",-1)]),8,Ug)):k("",!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:j=>us(r.id)},t[142]||(t[142]=[e("i",{class:"fas fa-times mr-1"},null,-1),I(" 彻底删除 ",-1)]),8,qg)])])])}),128))])])])])]))])):k("",!0)])]),le.value?(o(),ne($r,{key:0,accounts:$.value,onBatchSuccess:rs,onClose:t[26]||(t[26]=r=>le.value=!1),onSuccess:as},null,8,["accounts"])):k("",!0),he.value?(o(),ne(Io,{key:1,accounts:$.value,"api-key":pt.value,onClose:t[27]||(t[27]=r=>he.value=!1),onSuccess:ns},null,8,["accounts","api-key"])):k("",!0),se.value?(o(),ne(zo,{key:2,"api-key":mt.value,onClose:t[28]||(t[28]=r=>se.value=!1),onSuccess:is},null,8,["api-key"])):k("",!0),Ce.value?(o(),ne(al,{key:3,"api-key":xt.value,onClose:t[29]||(t[29]=r=>Ce.value=!1)},null,8,["api-key"])):k("",!0),ot.value?(o(),ne(Ll,{key:4,"api-keys":yt.value,onClose:t[30]||(t[30]=r=>ot.value=!1)},null,8,["api-keys"])):k("",!0),He.value?(o(),ne(Un,{key:5,accounts:$.value,"selected-keys":C.value,onClose:t[31]||(t[31]=r=>He.value=!1),onSuccess:ls},null,8,["accounts","selected-keys"])):k("",!0),ge(gi,{ref_key:"expiryEditModalRef",ref:P,"api-key":de.value||{id:null,expiresAt:null,name:""},show:!!de.value,onClose:Mt,onSave:ms},null,8,["api-key","show"]),ge(nd,{"api-key":u.value||{},show:l.value,onClose:t[32]||(t[32]=r=>l.value=!1)},null,8,["api-key","show"])])}}},Yg=we(Gg,[["__scopeId","data-v-821fac4a"]]);export{Yg as default};