Files
claude-relay-service/web/admin-spa/dist/assets/ApiKeysView-DK4fqdmY.js
2026-01-21 02:20:13 +00:00

31 lines
246 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{E as ua}from"./element-plus-BUfCkBQO.js";import{aP as ws,r as I,c as R,q as ut,V as hs,o as Te,x as d,y as n,z as e,I as we,C as O,P as c,R as ae,J as ca,L as w,B as Ct,K as D,aq as te,Q as Z,ac as oe,T as ga,a5 as Ee,D as pa,_ as Ye,Y as _e,an as Ie,O as h,aa as it,aV as dt,al as Ce,f as lt,u as nt,aU as ma}from"./vue-vendor-R8HMg95E.js";import{c as E,_ as Se,s as V,u as xa}from"./index-CUrM4ac7.js";import{Q as Fe}from"./vendor-Dr8jvgFu.js";import{_ as ya}from"./WindowCountdown-DF7xS2EZ.js";import{C as $t,_ as fa}from"./ActionDropdown-yQXb8qJd.js";const zt=ws("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 k=await E.get("/admin/supported-clients");return k.success?this.supportedClients=k.data||[]:(this.error=k.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(k){return this.error=k.message||"加载支持的客户端失败",console.error("Error loading supported clients:",k),[]}finally{this.loading=!1}}}}),qt=ws("apiKeys",()=>{const k=I([]),N=I(!1),g=I(null),F=I("all"),j=I(""),L=I("asc"),$=async()=>{N.value=!0,g.value=null;try{const _=await E.get("/admin/api-keys");if(_.success)k.value=_.data||[];else throw new Error(_.message||"获取API Keys失败")}catch(_){throw g.value=_.message,_}finally{N.value=!1}};return{apiKeys:k,loading:N,error:g,statsTimeRange:F,sortBy:j,sortOrder:L,fetchApiKeys:$,createApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.post("/admin/api-keys",_);if(q.success)return await $(),q.data;throw new Error(q.message||"创建API Key失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},updateApiKey:async(_,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${_}`,q);if(K.success)return await $(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},toggleApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.put(`/admin/api-keys/${_}/toggle`);if(q.success)return await $(),q;throw new Error(q.message||"切换状态失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},renewApiKey:async(_,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${_}`,q);if(K.success)return await $(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},deleteApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.delete(`/admin/api-keys/${_}`);if(q.success)return await $(),q;throw new Error(q.message||"删除失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},fetchApiKeyStats:async(_,q="all")=>{try{const K=await E.get(`/admin/api-keys/${_}/stats`,{params:{timeRange:q}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const _=await E.get("/admin/api-keys/tags");if(_.success)return _.data||[];throw new Error(_.message||"获取标签失败")}catch(_){return console.error("获取标签失败:",_),[]}},sortApiKeys:_=>{j.value===_?L.value=L.value==="asc"?"desc":"asc":(j.value=_,L.value="asc")},reset:()=>{k.value=[],N.value=!1,g.value=null,F.value="all",j.value="",L.value="asc"}}}),ba={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},va={class:"relative"},ka={class:"custom-scrollbar flex-1 overflow-y-auto"},wa={key:0,class:"border-b border-gray-200 dark:border-gray-600"},ha=["onClick"],Aa={class:"text-gray-700 dark:text-gray-300"},$a={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},Ca={class:"text-gray-700 dark:text-gray-300"},Ia={key:1},Ka=["onClick"],La={class:"flex items-center justify-between"},Da={class:"text-gray-700 dark:text-gray-300"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={key:2},Sa={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ua=["onClick"],Ra={class:"flex items-center justify-between"},Ma={class:"text-gray-700 dark:text-gray-300"},Pa={class:"text-xs text-gray-400 dark:text-gray-500"},Va={key:3},Ea=["onClick"],Oa={class:"flex items-center justify-between"},ja={class:"text-gray-700 dark:text-gray-300"},Ga={class:"text-xs text-gray-400 dark:text-gray-500"},za={key:4},qa=["onClick"],Fa={class:"flex items-center justify-between"},Wa={class:"text-gray-700 dark:text-gray-300"},Ba={class:"text-xs text-gray-400 dark:text-gray-500"},Na={key:5},Ha=["onClick"],Ya={class:"flex items-center justify-between"},Qa={class:"text-gray-700 dark:text-gray-300"},Ja={class:"text-xs text-gray-400 dark:text-gray-500"},Xa={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Za={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:k=>["claude","gemini","openai","bedrock","droid"].includes(k)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=I(""),$=I(null),W=I(null),T=I({}),Q=I(null),H=I(""),B=R(()=>g.specialOptions||[]),f=R(()=>{const p=B.value.find(u=>u.value===g.modelValue);if(p)return p.label;if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),i=g.groups.find(y=>y.id===u);return i?`${i.name} (${i.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),i=g.accounts.find(y=>y.id===u&&y.platform==="claude-console");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),i=g.accounts.find(y=>y.id===u&&y.platform==="openai-responses");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("api:")){const u=g.modelValue.substring(4),i=g.accounts.find(y=>y.id===u&&y.platform==="gemini-api");return i?`${i.name} (${x(i)})`:""}const A=g.accounts.find(u=>u.id===g.modelValue);return A?`${A.name} (${x(A)})`:""}),x=p=>{if(!p)return"未知";if(!(p.isActive==="true"||p.isActive===!0))switch(p.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return p.status==="rate_limited"?"限流中":"正常"},a=R(()=>[...g.accounts].sort((p,A)=>{const u=new Date(p.createdAt||0);return new Date(A.createdAt||0)-u})),z=R(()=>{let p=g.groups.filter(A=>A.platform?A.platform===g.platform:!0);if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),_=R(()=>{let p=[];if(g.platform==="claude"?p=a.value.filter(A=>A.platform==="claude-oauth"):g.platform==="openai"?p=a.value.filter(A=>A.platform==="openai"):g.platform==="droid"?p=a.value.filter(A=>A.platform==="droid"):g.platform==="gemini"?p=a.value.filter(A=>A.platform==="gemini"):p=a.value.filter(A=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(A.platform)),L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),q=R(()=>{if(g.platform!=="claude")return[];let p=a.value.filter(A=>A.platform==="claude-console");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),K=R(()=>{if(g.platform!=="openai")return[];let p=a.value.filter(A=>A.platform==="openai-responses");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),C=R(()=>{if(g.platform!=="gemini")return[];let p=a.value.filter(A=>A.platform==="gemini-api");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),X=R(()=>z.value.length>0||_.value.length>0||q.value.length>0||K.value.length>0||C.value.length>0),le=p=>{if(!p)return"";const A=new Date(p),i=(new Date-A)/(1e3*60*60);return i<24?"今天创建":i<48?"昨天创建":i<168?`${Math.floor(i/24)} 天前`:A.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},ue=()=>{if(!j.value||!W.value||!Q.value)return;const p=Q.value;if(!p)return;const A=p.getBoundingClientRect(),u=window.innerHeight,i=window.innerWidth,y=u-A.bottom,ie=A.top,me=8,xe=y-me,he=ie-me;let ce=!1,Ae=xe;H.value==="above"&&he>=150?(ce=!0,Ae=he):H.value==="below"&&xe>=150?(ce=!1,Ae=xe):he>xe&&xe<200&&(ce=!0,Ae=he),H.value=ce?"above":"below";let Y=A.left;const J=A.width;Y+J>i-me&&(Y=i-J-me),Y<me&&(Y=me),T.value={position:"fixed",left:`${Y}px`,width:`${A.width}px`,maxHeight:`${Math.min(Ae,400)}px`,...ce?{bottom:`${u-A.top}px`}:{top:`${A.bottom}px`}}},fe=()=>{if(!j.value&&Q.value){const p=Q.value.getBoundingClientRect(),u=window.innerHeight-p.bottom,i=8;T.value={position:"fixed",left:`${p.left}px`,width:`${p.width}px`,maxHeight:`${Math.min(u-i,400)}px`,top:`${p.bottom}px`}}j.value=!j.value,j.value&&pa(()=>{var p;ue(),(p=$.value)==null||p.focus()})},pe=p=>{F("update:modelValue",p||""),j.value=!1,L.value=""},Ke=()=>{},S=()=>{var p;L.value="",(p=$.value)==null||p.focus()},l=p=>{var A,u;!((A=Q.value)!=null&&A.contains(p.target))&&!((u=W.value)!=null&&u.contains(p.target))&&(j.value=!1)},o=()=>{j.value&&ue()};return ut(()=>{document.addEventListener("click",l),window.addEventListener("scroll",o,!0),window.addEventListener("resize",ue)}),hs(()=>{document.removeEventListener("click",l),window.removeEventListener("scroll",o,!0),window.removeEventListener("resize",ue)}),Te(j,p=>{p||(L.value="",H.value="")}),(p,A)=>(n(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:O(["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":k.disabled}]),onClick:A[0]||(A[0]=u=>!k.disabled&&fe())},[e("span",{class:O(k.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(f.value),3),e("i",{class:O(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":j.value}])},null,2)],2),(n(),we(Ee,{to:"body"},[ae(ga,{"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:ca(()=>[j.value?(n(),d("div",{key:0,ref_key:"dropdownRef",ref:W,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:Ct(T.value)},[e("div",ba,[e("div",va,[D(e("input",{ref_key:"searchInput",ref:$,"onUpdate:modelValue":A[1]||(A[1]=u=>L.value=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",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:Ke},null,544),[[te,L.value]]),A[4]||(A[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)),L.value?(n(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:S},A[3]||(A[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):w("",!0)])]),e("div",ka,[B.value.length>0?(n(),d("div",wa,[(n(!0),d(Z,null,oe(B.value,u=>(n(),d("div",{key:`special-${u.value}`,class:O(["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":k.modelValue===u.value}]),onClick:i=>pe(u.value)},[e("span",Aa,c(u.label),1),u.description?(n(),d("span",$a,c(u.description),1)):w("",!0)],10,ha))),128))])):w("",!0),e("div",{class:O(["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":!k.modelValue}]),onClick:A[2]||(A[2]=u=>pe(null))},[e("span",Ca,c(k.defaultOptionText),1)],2),z.value.length>0?(n(),d("div",Ia,[A[5]||(A[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)),(n(!0),d(Z,null,oe(z.value,u=>(n(),d("div",{key:`group:${u.id}`,class:O(["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":k.modelValue===`group:${u.id}`}]),onClick:i=>pe(`group:${u.id}`)},[e("div",La,[e("span",Da,c(u.name),1),e("span",_a,c(u.memberCount||0)+" 个成员",1)])],10,Ka))),128))])):w("",!0),_.value.length>0?(n(),d("div",Ta,[e("div",Sa,c(k.platform==="claude"?"Claude OAuth 专属账号":k.platform==="openai"?"OpenAI 专属账号":k.platform==="droid"?"Droid 专属账号":k.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(n(!0),d(Z,null,oe(_.value,u=>(n(),d("div",{key:u.id,class:O(["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":k.modelValue===u.id}]),onClick:i=>pe(u.id)},[e("div",Ra,[e("div",null,[e("span",Ma,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.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(x(u)),3)]),e("span",Pa,c(le(u.createdAt)),1)])],10,Ua))),128))])):w("",!0),k.platform==="claude"&&q.value.length>0?(n(),d("div",Va,[A[6]||(A[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)),(n(!0),d(Z,null,oe(q.value,u=>(n(),d("div",{key:u.id,class:O(["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":k.modelValue===`console:${u.id}`}]),onClick:i=>pe(`console:${u.id}`)},[e("div",Oa,[e("div",null,[e("span",ja,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.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(x(u)),3)]),e("span",Ga,c(le(u.createdAt)),1)])],10,Ea))),128))])):w("",!0),k.platform==="openai"&&K.value.length>0?(n(),d("div",za,[A[7]||(A[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)),(n(!0),d(Z,null,oe(K.value,u=>(n(),d("div",{key:u.id,class:O(["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":k.modelValue===`responses:${u.id}`}]),onClick:i=>pe(`responses:${u.id}`)},[e("div",Fa,[e("div",null,[e("span",Wa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.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(x(u)),3)]),e("span",Ba,c(le(u.createdAt)),1)])],10,qa))),128))])):w("",!0),k.platform==="gemini"&&C.value.length>0?(n(),d("div",Na,[A[8]||(A[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(n(!0),d(Z,null,oe(C.value,u=>(n(),d("div",{key:u.id,class:O(["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":k.modelValue===`api:${u.id}`}]),onClick:i=>pe(`api:${u.id}`)},[e("div",Ya,[e("div",null,[e("span",Qa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.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(x(u)),3)]),e("span",Ja,c(le(u.createdAt)),1)])],10,Ha))),128))])):w("",!0),L.value&&!X.value?(n(),d("div",Xa,A[9]||(A[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):w("",!0)])],4)):w("",!0)]),_:1})]))],512))}},Le=Se(Za,[["__scopeId","data-v-32c162ec"]]),er={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},sr={class:"mb-4 flex items-center justify-between"},ar={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"},rr={class:"flex items-center gap-3 sm:gap-4"},or={class:"flex cursor-pointer items-center"},lr={class:"flex cursor-pointer items-center"},nr={key:0,class:"mt-3"},ir={class:"flex items-center gap-4"},dr={class:"flex-1"},ur={class:"flex items-center gap-2"},cr={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},gr=["placeholder"],pr={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},mr={class:"space-y-4"},xr={key:0},yr={class:"flex flex-wrap gap-2"},fr=["onClick"],br={key:1},vr={class:"flex flex-wrap gap-2"},kr=["onClick"],wr={class:"flex gap-2"},hr=["onKeypress"],Ar={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},$r={class:"space-y-2"},Cr={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Ir={class:"space-y-2"},Kr={class:"flex gap-2"},Lr={class:"space-y-2"},Dr={class:"flex gap-2"},_r={class:"space-y-2"},Tr={class:"flex gap-2"},Sr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ur={class:"flex items-center gap-4"},Rr={class:"flex cursor-pointer items-center"},Mr={class:"flex cursor-pointer items-center"},Pr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Vr={key:0},Er={key:1},Or={key:0},jr={key:0,class:"mt-3"},Gr=["min"],zr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qr={key:1},Fr={class:"flex items-center gap-2"},Wr=["max","placeholder"],Br={class:"mt-2 flex flex-wrap gap-2"},Nr=["onClick"],Hr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Yr={class:"flex flex-wrap gap-4"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"flex cursor-pointer items-center"},eo={class:"mb-2 flex items-center justify-between"},to=["disabled"],so={class:"grid grid-cols-1 gap-3"},ao={class:"mb-2 flex items-center"},ro={key:0,class:"space-y-3"},oo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},lo=["onClick"],no={key:0,class:"text-sm text-gray-400"},io={class:"space-y-3"},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={key:0,class:"text-sm italic text-gray-400"},po={class:"flex gap-2"},mo=["onKeydown"],xo={class:"mb-2 flex items-center"},yo={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},fo={class:"space-y-1"},bo=["id","value"],vo=["for"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wo={class:"block text-xs text-gray-500 dark:text-gray-400"},ho={class:"flex gap-3 pt-2"},Ao=["disabled"],$o={key:0,class:"loading-spinner mr-2"},Co={key:1,class:"fas fa-plus mr-2"},Io={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),T=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I({name:""}),H=I(""),B=I([]),f=R(()=>B.value.filter(u=>!a.tags.includes(u))),x=I([]),a=Ye({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});ut(async()=>{if(x.value=await j.loadSupportedClients(),B.value=await L.fetchTags(),g.accounts){const u=(g.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),i=[];g.accounts.openai&&g.accounts.openai.forEach(y=>{i.push({...y,platform:y.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(y=>{i.push({...y,platform:y.platform||"openai-responses"})}),T.value={claude:g.accounts.claude||[],gemini:u,openai:i,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}});const z=async()=>{var u,i;W.value=!0;try{const[y,ie,me,xe,he,ce,Ae,Y,J]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),be=[];y.success&&((u=y.data)==null||u.forEach(re=>{be.push({...re,platform:"claude-oauth",isDedicated:re.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(re=>{be.push({...re,platform:"claude-console",isDedicated:re.accountType==="dedicated"})})),T.value.claude=be;const Re=[];me.success&&(me.data||[]).forEach(re=>{Re.push({...re,platform:"gemini",isDedicated:re.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(re=>{Re.push({...re,platform:"gemini-api",isDedicated:re.accountType==="dedicated"})}),T.value.gemini=Re;const Qe=[];if(he.success&&(he.data||[]).forEach(re=>{Qe.push({...re,platform:"openai",isDedicated:re.accountType==="dedicated"})}),ce.success&&(ce.data||[]).forEach(re=>{Qe.push({...re,platform:"openai-responses",isDedicated:re.accountType==="dedicated"})}),T.value.openai=Qe,Ae.success&&(T.value.bedrock=(Ae.data||[]).map(re=>({...re,isDedicated:re.accountType==="dedicated"}))),Y.success&&(T.value.droid=(Y.data||[]).map(re=>({...re,platform:"droid",isDedicated:re.accountType==="dedicated"}))),J.success){const re=J.data||[];T.value.claudeGroups=re.filter(Me=>Me.platform==="claude"),T.value.geminiGroups=re.filter(Me=>Me.platform==="gemini"),T.value.openaiGroups=re.filter(Me=>Me.platform==="openai"),T.value.droidGroups=re.filter(Me=>Me.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},_=R(()=>{const u=new Date;return u.setMinutes(u.getMinutes()+1),u.toISOString().slice(0,16)}),q=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const u=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ie,me]=y,xe=parseInt(ie);switch(me){case"d":u.setDate(u.getDate()+xe);break;case"h":u.setHours(u.getHours()+xe);break;case"m":u.setMonth(u.getMonth()+xe);break;case"y":u.setFullYear(u.getFullYear()+xe);break}a.expiresAt=u.toISOString()}},K=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},C=u=>new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),X=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},le=u=>{a.restrictedModels.splice(u,1)},ue=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),fe=R(()=>ue.value.filter(u=>!a.restrictedModels.includes(u))),pe=u=>{a.restrictedModels.includes(u)||a.restrictedModels.push(u)},Ke=()=>{if(H.value&&H.value.trim()){const u=H.value.trim();a.tags.includes(u)||a.tags.push(u),H.value=""}},S=u=>{a.tags.includes(u)||a.tags.push(u)},l=u=>{a.tags.splice(u,1)},o=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],p=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},A=async()=>{if(Q.value.name="",!a.name||!a.name.trim()){Q.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){V("批量创建数量必须在 2-500 之间","error");return}if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let u=!1;if(window.showConfirm?u=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0这意味着不会有费用限制。
是否继续?`,"继续创建","返回修改"):u=confirm(`您设置了时间窗口但费用限制为0这意味着不会有费用限制。
是否继续?`),!u)return}$.value=!0;try{const u={description:a.description||void 0,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):null,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):null,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):null,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,expiresAt:a.expirationMode==="fixed"&&a.expiresAt||void 0,expirationMode:a.expirationMode,activationDays:a.expirationMode==="activation"?a.activationDays:void 0,activationUnit:a.expirationMode==="activation"?a.activationUnit:void 0,permissions:a.permissions,tags:a.tags.length>0?a.tags:void 0,enableModelRestriction:a.enableModelRestriction,restrictedModels:a.restrictedModels,enableClientRestriction:a.enableClientRestriction,allowedClients:a.allowedClients};if(a.claudeAccountId&&(a.claudeAccountId.startsWith("console:")?(u.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete u.claudeAccountId):(u.claudeAccountId=a.claudeAccountId,delete u.claudeConsoleAccountId)),a.geminiAccountId&&(u.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(u.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(u.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(u.droidAccountId=a.droidAccountId),a.createType==="single"){const i={...u,name:a.name},y=await E.post("/admin/api-keys",i);y.success?(V("API Key 创建成功","success"),F("success",y.data),F("close")):V(y.message||"创建失败","error")}else{const i={...u,createType:"batch",baseName:a.name,count:a.batchCount},y=await E.post("/admin/api-keys/batch",i);y.success?(V(`成功创建 ${y.data.length} 个 API Key`,"success"),F("batch-success",y.data),F("close")):V(y.message||"批量创建失败","error")}}catch{V("创建失败","error")}finally{$.value=!1}};return(u,i)=>(n(),we(Ee,{to:"body"},[e("div",er,[e("div",tr,[e("div",sr,[i[48]||(i[48]=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:i[0]||(i[0]=y=>u.$emit("close"))},i[47]||(i[47]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:_e(A,["prevent"])},[e("div",ar,[e("div",{class:O(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[i[51]||(i[51]=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",rr,[e("label",or,[D(e("input",{"onUpdate:modelValue":i[1]||(i[1]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[Ie,a.createType]]),i[49]||(i[49]=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"}),h(" 单个创建 ")],-1))]),e("label",lr,[D(e("input",{"onUpdate:modelValue":i[2]||(i[2]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[Ie,a.createType]]),i[50]||(i[50]=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"}),h(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(n(),d("div",nr,[e("div",ir,[e("div",dr,[i[53]||(i[53]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",ur,[D(e("input",{"onUpdate:modelValue":i[3]||(i[3]=y=>a.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[te,a.batchCount,void 0,{number:!0}]]),i[52]||(i[52]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",cr,[i[54]||(i[54]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+c(a.name||"MyKey")+"_1, "+c(a.name||"MyKey")+"_2 ...",1)])])):w("",!0)]),e("div",null,[i[55]||(i[55]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[h("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[D(e("input",{"onUpdate:modelValue":i[4]||(i[4]=y=>a.name=y),class:O(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:i[5]||(i[5]=y=>Q.value.name="")},null,42,gr),[[te,a.name]])]),Q.value.name?(n(),d("p",pr,c(Q.value.name),1)):w("",!0)]),e("div",null,[i[63]||(i[63]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",mr,[a.tags.length>0?(n(),d("div",xr,[i[57]||(i[57]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",yr,[(n(!0),d(Z,null,oe(a.tags,(y,ie)=>(n(),d("span",{key:"selected-"+ie,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"},[h(c(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:me=>l(ie)},i[56]||(i[56]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,fr)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",br,[i[59]||(i[59]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",vr,[(n(!0),d(Z,null,oe(f.value,y=>(n(),d("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ie=>S(y)},[i[58]||(i[58]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(y),1)],8,kr))),128))])])):w("",!0),e("div",null,[i[61]||(i[61]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",wr,[D(e("input",{"onUpdate:modelValue":i[6]||(i[6]=y=>H.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(Ke,["prevent"]),["enter"])},null,40,hr),[[te,H.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ke},i[60]||(i[60]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[62]||(i[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",Ar,[i[71]||(i[71]=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",$r,[e("div",Cr,[e("div",null,[i[64]||(i[64]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":i[7]||(i[7]=y=>a.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitWindow]]),i[65]||(i[65]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[66]||(i[66]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":i[8]||(i[8]=y=>a.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitRequests]]),i[67]||(i[67]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[68]||(i[68]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":i[9]||(i[9]=y=>a.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[te,a.rateLimitCost]]),i[69]||(i[69]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[70]||(i[70]=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:"),h(" 时间窗口=60请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30请求=50费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[73]||(i[73]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Ir,[e("div",Kr,[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:i[10]||(i[10]=y=>a.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:i[11]||(i[11]=y=>a.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:i[12]||(i[12]=y=>a.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:i[13]||(i[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[14]||(i[14]=y=>a.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.dailyCostLimit]]),i[72]||(i[72]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制超过限制将拒绝请求0 或留空表示无限制 ",-1))])]),e("div",null,[i[75]||(i[75]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Lr,[e("div",Dr,[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:i[15]||(i[15]=y=>a.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:i[16]||(i[16]=y=>a.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:i[17]||(i[17]=y=>a.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:i[18]||(i[18]=y=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[19]||(i[19]=y=>a.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.totalCostLimit]]),i[74]||(i[74]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制达到限制后将拒绝所有后续请求0 或留空表示无限制 ",-1))])]),e("div",null,[i[77]||(i[77]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Opus 模型周费用限制 (美元)",-1)),e("div",_r,[e("div",Tr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[20]||(i[20]=y=>a.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:i[21]||(i[21]=y=>a.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:i[22]||(i[22]=y=>a.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:i[23]||(i[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[24]||(i[24]=y=>a.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.weeklyOpusCostLimit]]),i[76]||(i[76]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户0 或留空表示无限制 ",-1))])]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),D(e("input",{"onUpdate:modelValue":i[25]||(i[25]=y=>a.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[te,a.concurrencyLimit]]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数0 或留空表示无限制 ",-1))]),e("div",null,[i[80]||(i[80]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),D(e("textarea",{"onUpdate:modelValue":i[26]||(i[26]=y=>a.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[te,a.description]])]),e("div",null,[i[88]||(i[88]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Sr,[e("div",Ur,[e("label",Rr,[D(e("input",{"onUpdate:modelValue":i[27]||(i[27]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[Ie,a.expirationMode]]),i[81]||(i[81]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",Mr,[D(e("input",{"onUpdate:modelValue":i[28]||(i[28]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[Ie,a.expirationMode]]),i[82]||(i[82]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Pr,[a.expirationMode==="fixed"?(n(),d("span",Vr,i[83]||(i[83]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 固定时间模式Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(n(),d("span",Er,i[84]||(i[84]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 激活模式Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(n(),d("div",Or,[D(e("select",{"onUpdate:modelValue":i[29]||(i[29]=y=>a.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:q},i[85]||(i[85]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[dt,a.expireDuration]]),a.expireDuration==="custom"?(n(),d("div",jr,[D(e("input",{"onUpdate:modelValue":i[30]||(i[30]=y=>a.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:_.value,type:"datetime-local",onChange:K},null,40,Gr),[[te,a.customExpireDate]])])):w("",!0),a.expiresAt?(n(),d("p",zr," 将于 "+c(C(a.expiresAt))+" 过期 ",1)):w("",!0)])):(n(),d("div",qr,[e("div",Fr,[D(e("input",{"onUpdate:modelValue":i[31]||(i[31]=y=>a.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:a.activationUnit==="hours"?8760:3650,min:"1",placeholder:a.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,Wr),[[te,a.activationDays,void 0,{number:!0}]]),D(e("select",{"onUpdate:modelValue":i[32]||(i[32]=y=>a.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:p},i[86]||(i[86]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[dt,a.activationUnit]])]),e("div",Br,[(n(!0),d(Z,null,oe(o(),y=>(n(),d("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:ie=>a.activationDays=y.value},c(y.label),9,Nr))),128))]),e("p",Hr,[i[87]||(i[87]=e("i",{class:"fas fa-clock mr-1"},null,-1)),h(" Key 将在首次使用后激活,激活后 "+c(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+c(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Yr,[e("label",Qr,[D(e("input",{"onUpdate:modelValue":i[33]||(i[33]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[Ce,a.permissions]]),i[89]||(i[89]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Jr,[D(e("input",{"onUpdate:modelValue":i[34]||(i[34]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[Ce,a.permissions]]),i[90]||(i[90]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Xr,[D(e("input",{"onUpdate:modelValue":i[35]||(i[35]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[Ce,a.permissions]]),i[91]||(i[91]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Zr,[D(e("input",{"onUpdate:modelValue":i[36]||(i[36]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[Ce,a.permissions]]),i[92]||(i[92]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[94]||(i[94]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",eo,[i[95]||(i[95]=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:W.value,title:"刷新账号列表",type:"button",onClick:z},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,to)]),e("div",so,[e("div",null,[i[96]||(i[96]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[37]||(i[37]=y=>a.claudeAccountId=y),accounts:T.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:T.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[97]||(i[97]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[38]||(i[38]=y=>a.geminiAccountId=y),accounts:T.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:T.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[98]||(i[98]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[39]||(i[39]=y=>a.openaiAccountId=y),accounts:T.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:T.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[99]||(i[99]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[40]||(i[40]=y=>a.bedrockAccountId=y),accounts:T.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[i[100]||(i[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[41]||(i[41]=y=>a.droidAccountId=y),accounts:T.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:T.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[101]||(i[101]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后此API Key将只使用该账号不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",ao,[D(e("input",{id:"enableModelRestriction","onUpdate:modelValue":i[42]||(i[42]=y=>a.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ce,a.enableModelRestriction]]),i[102]||(i[102]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",ro,[e("div",null,[i[105]||(i[105]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",oo,[(n(!0),d(Z,null,oe(a.restrictedModels,(y,ie)=>(n(),d("span",{key:ie,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[h(c(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:me=>le(ie)},i[103]||(i[103]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,lo)]))),128)),a.restrictedModels.length===0?(n(),d("span",no," 暂无限制的模型 ")):w("",!0)]),e("div",io,[e("div",uo,[(n(!0),d(Z,null,oe(fe.value,y=>(n(),d("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:ie=>pe(y)},c(y),9,co))),128)),fe.value.length===0?(n(),d("span",go," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",po,[D(e("input",{"onUpdate:modelValue":i[43]||(i[43]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:it(_e(X,["prevent"]),["enter"])},null,40,mo),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:X},i[104]||(i[104]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[106]||(i[106]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型例如claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",xo,[D(e("input",{id:"enableClientRestriction","onUpdate:modelValue":i[44]||(i[44]=y=>a.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ce,a.enableClientRestriction]]),i[107]||(i[107]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",yo,[e("div",null,[i[108]||(i[108]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",fo,[(n(!0),d(Z,null,oe(x.value,y=>(n(),d("div",{key:y.id,class:"flex items-start"},[D(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":i[45]||(i[45]=ie=>a.allowedClients=ie),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,bo),[[Ce,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",ko,c(y.name),1),e("span",wo,c(y.description),1)],8,vo)]))),128))])])])):w("",!0)]),e("div",ho,[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:i[46]||(i[46]=y=>u.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:$.value,type:"submit"},[$.value?(n(),d("div",$o)):(n(),d("i",Co)),h(" "+c($.value?"创建中...":"创建"),1)],8,Ao)])],32)])])]))}},Ko=Se(Io,[["__scopeId","data-v-b8b28d06"]]),Lo={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Do={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},To=["value"],So={key:0,class:"text-gray-500"},Uo={class:"space-y-4"},Ro={key:0},Mo={class:"flex flex-wrap gap-2"},Po=["onClick"],Vo={key:1},Eo={class:"flex flex-wrap gap-2"},Oo=["onClick"],jo={class:"flex gap-2"},Go=["onKeypress"],zo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},qo={class:"space-y-2"},Fo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wo={class:"space-y-3"},Bo={class:"flex gap-2"},No={class:"space-y-3"},Ho={class:"flex gap-2"},Yo={class:"space-y-3"},Qo={class:"flex gap-2"},Jo={class:"mb-3 flex items-center"},Xo={class:"flex flex-wrap gap-4"},Zo={class:"flex cursor-pointer items-center"},el={class:"flex cursor-pointer items-center"},tl={class:"flex cursor-pointer items-center"},sl={class:"flex cursor-pointer items-center"},al={class:"mb-3 flex items-center justify-between"},rl=["disabled"],ol={class:"grid grid-cols-1 gap-3"},ll={class:"mb-3 flex items-center"},nl={key:0,class:"space-y-3"},il={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"},dl=["onClick"],ul={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},cl={class:"space-y-3"},gl={class:"flex flex-wrap gap-2"},pl=["onClick"],ml={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},xl={class:"flex gap-2"},yl=["onKeydown"],fl={class:"mb-3 flex items-center"},bl={key:0,class:"space-y-3"},vl={class:"space-y-2"},kl=["id","value"],wl=["for"],hl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Al={class:"block text-xs text-gray-500 dark:text-gray-400"},$l={class:"flex gap-3 pt-4"},Cl=["disabled"],Il={key:0,class:"loading-spinner mr-2"},Kl={key:1,class:"fas fa-save mr-2"},Ll={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),T=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I([]),H=I([]),B=I(""),f=I([]),x=R(()=>f.value.filter(S=>!a.tags.includes(S))),a=Ye({name:"",tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),z=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},_=S=>{a.restrictedModels.splice(S,1)},q=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),K=R(()=>q.value.filter(S=>!a.restrictedModels.includes(S))),C=S=>{a.restrictedModels.includes(S)||a.restrictedModels.push(S)},X=()=>{if(B.value&&B.value.trim()){const S=B.value.trim();a.tags.includes(S)||a.tags.push(S),B.value=""}},le=S=>{a.tags.includes(S)||a.tags.push(S)},ue=S=>{a.tags.splice(S,1)},fe=async()=>{if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let S=!1;if(window.showConfirm?S=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0这意味着不会有费用限制。
是否继续?`,"继续保存","返回修改"):S=confirm(`您设置了时间窗口但费用限制为0这意味着不会有费用限制。
是否继续?`),!S)return}$.value=!0;try{const S={name:a.name,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):0,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):0,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):0,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,permissions:a.permissions,tags:a.tags};a.claudeAccountId?a.claudeAccountId.startsWith("console:")?(S.claudeConsoleAccountId=a.claudeAccountId.substring(8),S.claudeAccountId=null):(a.claudeAccountId.startsWith("group:"),S.claudeAccountId=a.claudeAccountId,S.claudeConsoleAccountId=null):(S.claudeAccountId=null,S.claudeConsoleAccountId=null),a.geminiAccountId?S.geminiAccountId=a.geminiAccountId:S.geminiAccountId=null,a.openaiAccountId?S.openaiAccountId=a.openaiAccountId:S.openaiAccountId=null,a.bedrockAccountId?S.bedrockAccountId=a.bedrockAccountId:S.bedrockAccountId=null,a.droidAccountId?S.droidAccountId=a.droidAccountId:S.droidAccountId=null,S.enableModelRestriction=a.enableModelRestriction,S.restrictedModels=a.restrictedModels,S.enableClientRestriction=a.enableClientRestriction,S.allowedClients=a.allowedClients,S.isActive=a.isActive,a.ownerId!==void 0&&(S.ownerId=a.ownerId);const l=await E.put(`/admin/api-keys/${g.apiKey.id}`,S);l.success?(F("success"),F("close")):V(l.message||"更新失败","error")}catch{V("更新失败","error")}finally{$.value=!1}},pe=async()=>{var S,l;W.value=!0;try{const[o,p,A,u,i,y,ie,me,xe]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),he=[];o.success&&((S=o.data)==null||S.forEach(Y=>{he.push({...Y,platform:"claude-oauth",isDedicated:Y.accountType==="dedicated"})})),p.success&&((l=p.data)==null||l.forEach(Y=>{he.push({...Y,platform:"claude-console",isDedicated:Y.accountType==="dedicated"})})),T.value.claude=he;const ce=[];A.success&&(A.data||[]).forEach(Y=>{ce.push({...Y,platform:"gemini",isDedicated:Y.accountType==="dedicated"})}),u.success&&(u.data||[]).forEach(Y=>{ce.push({...Y,platform:"gemini-api",isDedicated:Y.accountType==="dedicated"})}),T.value.gemini=ce;const Ae=[];if(i.success&&(i.data||[]).forEach(Y=>{Ae.push({...Y,platform:"openai",isDedicated:Y.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(Y=>{Ae.push({...Y,platform:"openai-responses",isDedicated:Y.accountType==="dedicated"})}),T.value.openai=Ae,ie.success&&(T.value.bedrock=(ie.data||[]).map(Y=>({...Y,isDedicated:Y.accountType==="dedicated"}))),me.success&&(T.value.droid=(me.data||[]).map(Y=>({...Y,platform:"droid",isDedicated:Y.accountType==="dedicated"}))),xe.success){const Y=xe.data||[];T.value.claudeGroups=Y.filter(J=>J.platform==="claude"),T.value.geminiGroups=Y.filter(J=>J.platform==="gemini"),T.value.openaiGroups=Y.filter(J=>J.platform==="openai"),T.value.droidGroups=Y.filter(J=>J.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},Ke=async()=>{try{const S=await E.get("/admin/users");S.success&&(H.value=S.data||[])}catch{H.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return ut(async()=>{try{const[o,p]=await Promise.all([j.loadSupportedClients(),L.fetchTags(),Ke()]);Q.value=o||[],f.value=p||[]}catch{Q.value=[],f.value=[]}if(g.accounts){const o=(g.accounts.gemini||[]).map(A=>({...A,platform:A.platform||"gemini"})),p=[];g.accounts.openai&&g.accounts.openai.forEach(A=>{p.push({...A,platform:A.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(A=>{p.push({...A,platform:A.platform||"openai-responses"})}),T.value={claude:g.accounts.claude||[],gemini:o,openai:p,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(A=>({...A,platform:A.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}a.name=g.apiKey.name,a.tokenLimit=g.apiKey.tokenLimit||"",a.rateLimitCost=g.apiKey.rateLimitCost||"",g.apiKey.tokenLimit>0&&g.apiKey.rateLimitCost,a.rateLimitWindow=g.apiKey.rateLimitWindow||"",a.rateLimitRequests=g.apiKey.rateLimitRequests||"",a.concurrencyLimit=g.apiKey.concurrencyLimit||"",a.dailyCostLimit=g.apiKey.dailyCostLimit||"",a.totalCostLimit=g.apiKey.totalCostLimit||"",a.weeklyOpusCostLimit=g.apiKey.weeklyOpusCostLimit||"";const S=["claude","gemini","openai","droid"];let l=g.apiKey.permissions;if(typeof l=="string")if(l==="all"||l==="")l=[];else if(l.startsWith("["))try{l=JSON.parse(l)}catch{l=S.includes(l)?[l]:[]}else S.includes(l)?l=[l]:l=[];Array.isArray(l)?a.permissions=l.filter(o=>S.includes(o)):a.permissions=[],g.apiKey.claudeConsoleAccountId?a.claudeAccountId=`console:${g.apiKey.claudeConsoleAccountId}`:a.claudeAccountId=g.apiKey.claudeAccountId||"",a.geminiAccountId=g.apiKey.geminiAccountId||"",a.openaiAccountId=g.apiKey.openaiAccountId||"",a.bedrockAccountId=g.apiKey.bedrockAccountId||"",a.droidAccountId=g.apiKey.droidAccountId||"",a.restrictedModels=g.apiKey.restrictedModels||[],a.allowedClients=g.apiKey.allowedClients||[],a.tags=g.apiKey.tags||[],a.enableModelRestriction=g.apiKey.enableModelRestriction===!0||g.apiKey.enableModelRestriction==="true",a.enableClientRestriction=g.apiKey.enableClientRestriction===!0||g.apiKey.enableClientRestriction==="true",a.isActive=g.apiKey.isActive===void 0||g.apiKey.isActive===!0||g.apiKey.isActive==="true",a.ownerId=g.apiKey.userId||"admin"}),(S,l)=>(n(),we(Ee,{to:"body"},[e("div",Lo,[e("div",Do,[e("div",_o,[l[39]||(l[39]=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]=o=>S.$emit("close"))},l[38]||(l[38]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(fe,["prevent"])},[e("div",null,[l[40]||(l[40]=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,[D(e("input",{"onUpdate:modelValue":l[1]||(l[1]=o=>a.name=o),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),[[te,a.name]])]),l[41]||(l[41]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",null,[l[42]||(l[42]=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)),D(e("select",{"onUpdate:modelValue":l[2]||(l[2]=o=>a.ownerId=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(n(!0),d(Z,null,oe(H.value,o=>(n(),d("option",{key:o.id,value:o.id},[h(c(o.displayName)+" ("+c(o.username)+") ",1),o.role==="admin"?(n(),d("span",So,"- 管理员")):w("",!0)],8,To))),128))],512),[[dt,a.ownerId]]),l[43]||(l[43]=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[51]||(l[51]=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",Uo,[a.tags.length>0?(n(),d("div",Ro,[l[45]||(l[45]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",Mo,[(n(!0),d(Z,null,oe(a.tags,(o,p)=>(n(),d("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"},[h(c(o)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:A=>ue(p)},l[44]||(l[44]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Po)]))),128))])])):w("",!0),x.value.length>0?(n(),d("div",Vo,[l[47]||(l[47]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Eo,[(n(!0),d(Z,null,oe(x.value,o=>(n(),d("button",{key:"available-"+o,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=>le(o)},[l[46]||(l[46]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(o),1)],8,Oo))),128))])])):w("",!0),e("div",null,[l[49]||(l[49]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",jo,[D(e("input",{"onUpdate:modelValue":l[3]||(l[3]=o=>B.value=o),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:it(_e(X,["prevent"]),["enter"])},null,40,Go),[[te,B.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:X},l[48]||(l[48]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[50]||(l[50]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",zo,[l[59]||(l[59]=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",qo,[e("div",Fo,[e("div",null,[l[52]||(l[52]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":l[4]||(l[4]=o=>a.rateLimitWindow=o),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),[[te,a.rateLimitWindow]]),l[53]||(l[53]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[54]||(l[54]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":l[5]||(l[5]=o=>a.rateLimitRequests=o),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),[[te,a.rateLimitRequests]]),l[55]||(l[55]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[56]||(l[56]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":l[6]||(l[6]=o=>a.rateLimitCost=o),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),[[te,a.rateLimitCost]]),l[57]||(l[57]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[58]||(l[58]=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:"),h(" 时间窗口=60请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30请求=50费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[61]||(l[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Wo,[e("div",Bo,[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]=o=>a.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]=o=>a.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]=o=>a.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]=o=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[11]||(l[11]=o=>a.dailyCostLimit=o),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),[[te,a.dailyCostLimit]]),l[60]||(l[60]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制超过限制将拒绝请求0 或留空表示无限制 ",-1))])]),e("div",null,[l[63]||(l[63]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",No,[e("div",Ho,[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]=o=>a.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]=o=>a.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]=o=>a.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]=o=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[16]||(l[16]=o=>a.totalCostLimit=o),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),[[te,a.totalCostLimit]]),l[62]||(l[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制达到限制后将拒绝所有后续请求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"},"Opus 模型周费用限制 (美元)",-1)),e("div",Yo,[e("div",Qo,[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]=o=>a.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]=o=>a.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]=o=>a.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]=o=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[21]||(l[21]=o=>a.weeklyOpusCostLimit=o),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),[[te,a.weeklyOpusCostLimit]]),l[64]||(l[64]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户0 或留空表示无限制 ",-1))])]),e("div",null,[l[66]||(l[66]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":l[22]||(l[22]=o=>a.concurrencyLimit=o),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),[[te,a.concurrencyLimit]]),l[67]||(l[67]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",Jo,[D(e("input",{id:"editIsActive","onUpdate:modelValue":l[23]||(l[23]=o=>a.isActive=o),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),[[Ce,a.isActive]]),l[68]||(l[68]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),l[69]||(l[69]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key暂停所有请求客户端返回 401 错误 ",-1))]),e("div",null,[l[74]||(l[74]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Xo,[e("label",Zo,[D(e("input",{"onUpdate:modelValue":l[24]||(l[24]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[Ce,a.permissions]]),l[70]||(l[70]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",el,[D(e("input",{"onUpdate:modelValue":l[25]||(l[25]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[Ce,a.permissions]]),l[71]||(l[71]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",tl,[D(e("input",{"onUpdate:modelValue":l[26]||(l[26]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[Ce,a.permissions]]),l[72]||(l[72]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",sl,[D(e("input",{"onUpdate:modelValue":l[27]||(l[27]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[Ce,a.permissions]]),l[73]||(l[73]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),l[75]||(l[75]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",al,[l[76]||(l[76]=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:W.value,title:"刷新账号列表",type:"button",onClick:pe},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,rl)]),e("div",ol,[e("div",null,[l[77]||(l[77]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":l[28]||(l[28]=o=>a.claudeAccountId=o),accounts:T.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:T.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},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"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":l[29]||(l[29]=o=>a.geminiAccountId=o),accounts:T.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:T.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},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"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":l[30]||(l[30]=o=>a.openaiAccountId=o),accounts:T.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:T.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[80]||(l[80]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":l[31]||(l[31]=o=>a.bedrockAccountId=o),accounts:T.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[l[81]||(l[81]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":l[32]||(l[32]=o=>a.droidAccountId=o),accounts:T.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:T.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),l[82]||(l[82]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",ll,[D(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":l[33]||(l[33]=o=>a.enableModelRestriction=o),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),[[Ce,a.enableModelRestriction]]),l[83]||(l[83]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",nl,[e("div",null,[l[86]||(l[86]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",il,[(n(!0),d(Z,null,oe(a.restrictedModels,(o,p)=>(n(),d("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"},[h(c(o)+" ",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:A=>_(p)},l[84]||(l[84]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,dl)]))),128)),a.restrictedModels.length===0?(n(),d("span",ul," 暂无限制的模型 ")):w("",!0)]),e("div",cl,[e("div",gl,[(n(!0),d(Z,null,oe(K.value,o=>(n(),d("button",{key:o,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=>C(o)},c(o),9,pl))),128)),K.value.length===0?(n(),d("span",ml," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",xl,[D(e("input",{"onUpdate:modelValue":l[34]||(l[34]=o=>a.modelInput=o),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:it(_e(z,["prevent"]),["enter"])},null,40,yl),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:z},l[85]||(l[85]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[87]||(l[87]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型例如claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",fl,[D(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":l[35]||(l[35]=o=>a.enableClientRestriction=o),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),[[Ce,a.enableClientRestriction]]),l[88]||(l[88]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",bl,[e("div",null,[l[89]||(l[89]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),l[90]||(l[90]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",vl,[(n(!0),d(Z,null,oe(Q.value,o=>(n(),d("div",{key:o.id,class:"flex items-start"},[D(e("input",{id:`edit_client_${o.id}`,"onUpdate:modelValue":l[36]||(l[36]=p=>a.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:o.id},null,8,kl),[[Ce,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${o.id}`},[e("span",hl,c(o.name),1),e("span",Al,c(o.description),1)],8,wl)]))),128))])])])):w("",!0)]),e("div",$l,[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[37]||(l[37]=o=>S.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:$.value,type:"submit"},[$.value?(n(),d("div",Il)):(n(),d("i",Kl)),h(" "+c($.value?"保存中...":"保存修改"),1)],8,Cl)])],32)])])]))}},Dl=Se(Ll,[["__scopeId","data-v-06cec6a3"]]),_l={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Tl={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},Sl={class:"mb-6 flex items-center justify-between"},Ul={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},Rl={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},Ml={class:"flex items-start gap-3"},Pl={class:"text-sm text-gray-700"},Vl={class:"mt-1 text-xs text-gray-600"},El={key:0,class:"mt-3"},Ol=["min"],jl={key:1,class:"mt-2 text-xs text-gray-500"},Gl={class:"flex gap-3 pt-4"},zl=["disabled"],ql={key:0,class:"loading-spinner mr-2"},Fl={key:1,class:"fas fa-clock mr-2"},Wl={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=Ye({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),$=R(()=>{const B=new Date;return g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>B?new Date(g.apiKey.expiresAt).toISOString().slice(0,16):(B.setMinutes(B.getMinutes()+1),B.toISOString().slice(0,16))}),W=B=>new Date(B).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),T=()=>{if(!L.renewDuration){L.newExpiresAt=null;return}if(L.renewDuration==="permanent"){L.newExpiresAt=null;return}if(L.renewDuration==="custom")return;const B=g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>new Date?new Date(g.apiKey.expiresAt):new Date,x=L.renewDuration.match(/(\d+)([dhmy])/);if(x){const[,a,z]=x,_=parseInt(a);switch(z){case"d":B.setDate(B.getDate()+_);break;case"h":B.setHours(B.getHours()+_);break;case"m":B.setMonth(B.getMonth()+_);break;case"y":B.setFullYear(B.getFullYear()+_);break}L.newExpiresAt=B.toISOString()}},Q=()=>{L.customExpireDate&&(L.newExpiresAt=new Date(L.customExpireDate).toISOString())},H=async()=>{j.value=!0;try{const B={expiresAt:L.renewDuration==="permanent"?null:L.newExpiresAt},f=await E.put(`/admin/api-keys/${g.apiKey.id}`,B);f.success?(V("API Key 续期成功","success"),F("success"),F("close")):V(f.message||"续期失败","error")}catch{V("续期失败","error")}finally{j.value=!1}};return T(),(B,f)=>(n(),we(Ee,{to:"body"},[e("div",_l,[e("div",Tl,[e("div",Sl,[f[5]||(f[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:f[0]||(f[0]=x=>B.$emit("close"))},f[4]||(f[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Ul,[e("div",Rl,[e("div",Ml,[f[7]||(f[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,[f[6]||(f[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",Pl,c(k.apiKey.name),1),e("p",Vl," 当前过期时间:"+c(k.apiKey.expiresAt?W(k.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[f[9]||(f[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),D(e("select",{"onUpdate:modelValue":f[1]||(f[1]=x=>L.renewDuration=x),class:"form-input w-full",onChange:T},f[8]||(f[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),[[dt,L.renewDuration]]),L.renewDuration==="custom"?(n(),d("div",El,[D(e("input",{"onUpdate:modelValue":f[2]||(f[2]=x=>L.customExpireDate=x),class:"form-input w-full",min:$.value,type:"datetime-local",onChange:Q},null,40,Ol),[[te,L.customExpireDate]])])):w("",!0),L.newExpiresAt?(n(),d("p",jl," 新的过期时间:"+c(W(L.newExpiresAt)),1)):w("",!0)])]),e("div",Gl,[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:f[3]||(f[3]=x=>B.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:j.value||!L.renewDuration,type:"button",onClick:H},[j.value?(n(),d("div",ql)):(n(),d("i",Fl)),h(" "+c(j.value?"续期中...":"确认续期"),1)],8,zl)])])])]))}},Bl=Se(Wl,[["__scopeId","data-v-2fba52a3"]]),Nl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hl={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Yl={class:"mb-6 space-y-4"},Ql={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Jl={class:"font-medium text-gray-900 dark:text-gray-100"},Xl={key:0},Zl={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},en={class:"text-gray-700 dark:text-gray-300"},tn={class:"relative"},sn={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"},an={class:"absolute right-3 top-3"},rn=["title"],on={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=()=>{if(typeof window<"u"){const a=window.location.protocol,z=window.location.host;let _=a+"//"+z;const q=window.location.href,K=q.indexOf("/",8);return K!==-1&&(_=q.substring(0,K)),_}return""},$=R(()=>L()+"/api"),W=()=>{j.value=!j.value},T=()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";return a?j.value||a.length<=12?a:a.substring(0,8)+"●".repeat(Math.max(0,a.length-12))+a.substring(a.length-4):""},Q=async(a,z)=>{try{await navigator.clipboard.writeText(a),V(z,"success")}catch{const q=document.createElement("textarea");q.value=a,document.body.appendChild(q),q.select();try{document.execCommand("copy"),V(z,"success")}catch{V("复制失败,请手动复制","error")}finally{document.body.removeChild(q)}}},H=async()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";if(!a){V("API Key 不存在","error");return}const z=`export ANTHROPIC_BASE_URL="${$.value}"
export ANTHROPIC_AUTH_TOKEN="${a}"`;await Q(z,"配置信息已复制到剪贴板")},B=async()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";if(!a){V("API Key 不存在","error");return}await Q(a,"API Key 已复制")},f=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看完整的API Key请确保已经妥善保存。
确定要关闭吗?`,"确定关闭","取消")&&F("close"):confirm(`关闭后将无法再次查看完整的API Key请确保已经妥善保存。
确定要关闭吗?`)&&F("close")},x=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有保存API Key关闭后将无法再次查看。
建议您先复制API Key再关闭。`,"仍然关闭","返回复制")&&F("close"):confirm(`您还没有保存API Key关闭后将无法再次查看。
确定要关闭吗?`)&&F("close")};return(a,z)=>(n(),we(Ee,{to:"body"},[e("div",Nl,[e("div",Hl,[e("div",{class:"mb-6 flex items-center justify-between"},[z[1]||(z[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:x},z[0]||(z[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),z[9]||(z[9]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4 dark:border-amber-500 dark:bg-amber-900/20"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400 dark:bg-amber-500"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900 dark:text-amber-400"},"重要提醒"),e("p",{class:"text-sm text-amber-800 dark:text-amber-300"}," 这是您唯一能看到完整 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即复制并妥善保存。 ")])])],-1)),e("div",Yl,[e("div",null,[z[2]||(z[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",Ql,[e("span",Jl,c(k.apiKey.name),1)])]),k.apiKey.description?(n(),d("div",Xl,[z[3]||(z[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Zl,[e("span",en,c(k.apiKey.description||"无描述"),1)])])):w("",!0),e("div",null,[z[4]||(z[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",tn,[e("div",sn,c(T()),1),e("div",an,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:j.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:W},[e("i",{class:O(["fas",j.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,rn)])]),z[5]||(z[5]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 点击眼睛图标切换显示模式,使用下方按钮复制环境变量配置 ",-1))])]),e("div",{class:"flex flex-col gap-3 sm:gap-4"},[e("div",{class:"flex flex-col gap-3 sm:flex-row sm:gap-4"},[e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-blue-200 bg-blue-50 px-5 py-3 text-sm font-semibold text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100 dark:border-blue-500/50 dark:bg-blue-500/10 dark:text-blue-200 dark:hover:bg-blue-500/20 sm:flex-1 sm:text-base",onClick:B},z[6]||(z[6]=[e("i",{class:"fas fa-key"},null,-1),h(" 仅复制密钥 ",-1)])),e("button",{class:"btn btn-primary flex w-full items-center justify-center gap-2 px-5 py-3 text-sm font-semibold sm:flex-1 sm:text-base",onClick:H},z[7]||(z[7]=[e("i",{class:"fas fa-copy"},null,-1),h(" 复制Claude配置 ",-1)]))]),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-gray-300 bg-gray-200 px-5 py-3 text-sm font-semibold text-gray-800 transition-colors hover:border-gray-400 hover:bg-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 sm:text-base",onClick:f},z[8]||(z[8]=[e("i",{class:"fas fa-check-circle"},null,-1),h(" 我已保存 ",-1)]))])])])]))}},ln=Se(on,[["__scopeId","data-v-a3d3d870"]]),nn={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},dn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},un={class:"mb-6 flex items-center justify-between"},cn={class:"flex items-center gap-3"},gn={class:"text-sm text-gray-600"},pn={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},mn={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},xn={class:"flex items-center justify-between"},yn={class:"mt-1 text-2xl font-bold text-blue-900"},fn={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},bn={class:"flex items-center justify-between"},vn={class:"mt-1 truncate text-lg font-bold text-green-900"},kn={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},wn={class:"flex items-center justify-between"},hn={class:"mt-1 text-lg font-bold text-purple-900"},An={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},$n={class:"flex items-center justify-between"},Cn={class:"mt-1 text-lg font-bold text-orange-900"},In={class:"mb-6"},Kn={class:"mb-3 flex items-center justify-between"},Ln={class:"flex items-center gap-2"},Dn={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},_n={class:"font-mono text-xs text-gray-300"},Tn={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=R(()=>{if(g.apiKeys.length>0){const x=g.apiKeys[0],a=x.name.match(/^(.+)_\d+$/);return a?a[1]:x.name}return""}),$=()=>{if(g.apiKeys.length===0)return"未知";const x=g.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[x]||x},W=()=>{if(g.apiKeys.length===0)return"未知";const x=g.apiKeys[0].expiresAt;if(!x)return"永不过期";const a=new Date(x),_=Math.ceil((a-new Date)/(1e3*60*60*24));return _<=7?`${_}`:_<=30?`${Math.ceil(_/7)}`:_<=365?`${Math.ceil(_/30)}个月`:`${Math.ceil(_/365)}`},T=()=>{j.value=!j.value},Q=()=>{const a=g.apiKeys.slice(0,10).map(z=>`${z.name}: ${z.apiKey||z.key||""}`);return g.apiKeys.length>10&&a.push(`... 还有 ${g.apiKeys.length-10} 个 API Key`),a.join(`
`)},H=()=>{const x=g.apiKeys.map(K=>`${K.name}: ${K.apiKey||K.key||""}`).join(`
`),a=new Blob([x],{type:"text/plain;charset=utf-8"}),z=URL.createObjectURL(a),_=document.createElement("a");_.href=z;const q=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);_.download=`api-keys-${L.value}-${q}.txt`,document.body.appendChild(_),_.click(),document.body.removeChild(_),URL.revokeObjectURL(z),V("API Keys 文件已下载","success")},B=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看这些 API Key请确保已经下载并妥善保存。
确定要关闭吗?`,"确定关闭","返回下载")&&F("close"):confirm(`关闭后将无法再次查看这些 API Key请确保已经下载并妥善保存。
确定要关闭吗?`)&&F("close")},f=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有下载 API Keys关闭后将无法再次查看。
强烈建议您先下载保存。`,"仍然关闭","返回下载")&&F("close"):confirm(`您还没有下载 API Keys关闭后将无法再次查看。
确定要关闭吗?`)&&F("close")};return(x,a)=>(n(),we(Ee,{to:"body"},[e("div",nn,[e("div",dn,[e("div",un,[e("div",cn,[a[1]||(a[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,[a[0]||(a[0]=e("h3",{class:"text-xl font-bold text-gray-900"},"批量创建成功",-1)),e("p",gn,"成功创建 "+c(k.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:f},a[2]||(a[2]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),a[14]||(a[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",pn,[e("div",mn,[e("div",xn,[e("div",null,[a[3]||(a[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",yn,c(k.apiKeys.length),1)]),a[4]||(a[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",fn,[e("div",bn,[e("div",null,[a[5]||(a[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",vn,c(L.value),1)]),a[6]||(a[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",kn,[e("div",wn,[e("div",null,[a[7]||(a[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",hn,c($()),1)]),a[8]||(a[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",An,[e("div",$n,[e("div",null,[a[9]||(a[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",Cn,c(W()),1)]),a[10]||(a[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",In,[e("div",Kn,[a[12]||(a[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",Ln,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:T},[e("i",{class:O(["fas",j.value?"fa-eye-slash":"fa-eye"])},null,2),h(" "+c(j.value?"隐藏":"显示")+"预览 ",1)]),a[11]||(a[11]=e("span",{class:"text-xs text-gray-500"},"最多显示前10个",-1))])]),j.value?(n(),d("div",Dn,[e("pre",_n,c(Q()),1)])):w("",!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:H},a[13]||(a[13]=[e("i",{class:"fas fa-download"},null,-1),h(" 下载所有 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:B}," 我已保存 ")]),a[15]||(a[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))])])]))}},Sn=Se(Tn,[["__scopeId","data-v-b0b904b9"]]),Un={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Rn={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Mn={class:"mb-4 flex items-center justify-between sm:mb-6"},Pn={class:"flex items-center gap-2 sm:gap-3"},Vn={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},En={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},On={class:"flex items-start gap-3"},jn={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},Gn={class:"space-y-4"},zn={class:"flex flex-wrap gap-4"},qn={class:"flex cursor-pointer items-center"},Fn={class:"flex cursor-pointer items-center"},Wn={class:"flex cursor-pointer items-center"},Bn={class:"flex cursor-pointer items-center"},Nn={key:0,class:"space-y-3"},Hn={key:0},Yn={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Qn={class:"flex flex-wrap gap-2"},Jn=["onClick"],Xn={key:1},Zn={class:"flex flex-wrap gap-2"},ei=["onClick"],ti={class:"flex gap-2"},si=["onKeypress"],ai={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},ri={class:"space-y-2"},oi={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},li={class:"mb-3 flex items-center gap-4"},ni={class:"flex gap-4"},ii={class:"flex cursor-pointer items-center"},di={class:"flex cursor-pointer items-center"},ui={class:"flex cursor-pointer items-center"},ci={class:"flex flex-wrap gap-4"},gi={class:"flex cursor-pointer items-center"},pi={class:"flex cursor-pointer items-center"},mi={class:"flex cursor-pointer items-center"},xi={class:"flex cursor-pointer items-center"},yi={class:"flex cursor-pointer items-center"},fi={class:"flex cursor-pointer items-center"},bi={class:"mb-3 flex items-center justify-between"},vi=["disabled"],ki={class:"grid grid-cols-1 gap-3"},wi={class:"flex gap-3 pt-4"},hi=["disabled"],Ai={key:0,class:"loading-spinner mr-2"},$i={key:1,class:"fas fa-save mr-2"},Gt="__KEEP_ORIGINAL__",Ci={__name:"BatchEditApiKeyModal",props:{selectedKeys:{type:Array,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=qt(),L=I(!1),$=I(!1),W=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),T=I(""),Q=I([]),H=I("none"),B=R(()=>g.selectedKeys.length),f=R(()=>Q.value.filter(l=>!x.tags.includes(l))),x=Ye({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",tags:[],isActive:null}),a=[{value:Gt,label:"不修改"},{value:"SHARED_POOL",label:"使用共享账号池"}],z=l=>R({get:()=>x[l]===""?Gt:x[l],set:o=>{!o||o===Gt?x[l]="":x[l]=o}}),_=z("claudeAccountId"),q=z("geminiAccountId"),K=z("openaiAccountId"),C=z("bedrockAccountId"),X=z("droidAccountId"),le=l=>!x.permissions||x.permissions==="all"?!0:x.permissions===l,ue=()=>{if(T.value&&T.value.trim()){const l=T.value.trim();x.tags.includes(l)||x.tags.push(l),T.value=""}},fe=l=>{x.tags.includes(l)||x.tags.push(l)},pe=l=>{x.tags.splice(l,1)},Ke=async()=>{var l,o;$.value=!0;try{const[p,A,u,i,y,ie,me,xe,he]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),ce=[];p.success&&((l=p.data)==null||l.forEach(J=>{ce.push({...J,platform:"claude-oauth",isDedicated:J.accountType==="dedicated"})})),A.success&&((o=A.data)==null||o.forEach(J=>{ce.push({...J,platform:"claude-console",isDedicated:J.accountType==="dedicated"})})),W.value.claude=ce;const Ae=[];u.success&&(u.data||[]).forEach(J=>{Ae.push({...J,platform:"gemini",isDedicated:J.accountType==="dedicated"})}),i.success&&(i.data||[]).forEach(J=>{Ae.push({...J,platform:"gemini-api",isDedicated:J.accountType==="dedicated"})}),W.value.gemini=Ae;const Y=[];if(y.success&&(y.data||[]).forEach(J=>{Y.push({...J,platform:"openai",isDedicated:J.accountType==="dedicated"})}),ie.success&&(ie.data||[]).forEach(J=>{Y.push({...J,platform:"openai-responses",isDedicated:J.accountType==="dedicated"})}),W.value.openai=Y,me.success&&(W.value.bedrock=(me.data||[]).map(J=>({...J,isDedicated:J.accountType==="dedicated"}))),xe.success&&(W.value.droid=(xe.data||[]).map(J=>({...J,platform:"droid",isDedicated:J.accountType==="dedicated"}))),he.success){const J=he.data||[];W.value.claudeGroups=J.filter(be=>be.platform==="claude"),W.value.geminiGroups=J.filter(be=>be.platform==="gemini"),W.value.openaiGroups=J.filter(be=>be.platform==="openai"),W.value.droidGroups=J.filter(be=>be.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{$.value=!1}},S=async()=>{L.value=!0;try{const l={};x.rateLimitCost!==""&&x.rateLimitCost!==null&&(l.rateLimitCost=parseFloat(x.rateLimitCost)),x.rateLimitWindow!==""&&x.rateLimitWindow!==null&&(l.rateLimitWindow=parseInt(x.rateLimitWindow)),x.rateLimitRequests!==""&&x.rateLimitRequests!==null&&(l.rateLimitRequests=parseInt(x.rateLimitRequests)),x.concurrencyLimit!==""&&x.concurrencyLimit!==null&&(l.concurrencyLimit=parseInt(x.concurrencyLimit)),x.dailyCostLimit!==""&&x.dailyCostLimit!==null&&(l.dailyCostLimit=parseFloat(x.dailyCostLimit)),x.totalCostLimit!==""&&x.totalCostLimit!==null&&(l.totalCostLimit=parseFloat(x.totalCostLimit)),x.weeklyOpusCostLimit!==""&&x.weeklyOpusCostLimit!==null&&(l.weeklyOpusCostLimit=parseFloat(x.weeklyOpusCostLimit)),x.permissions!==""&&(l.permissions=x.permissions),x.claudeAccountId!==""&&(x.claudeAccountId==="SHARED_POOL"?(l.claudeAccountId=null,l.claudeConsoleAccountId=null):x.claudeAccountId.startsWith("console:")?(l.claudeConsoleAccountId=x.claudeAccountId.substring(8),l.claudeAccountId=null):(x.claudeAccountId.startsWith("group:"),l.claudeAccountId=x.claudeAccountId,l.claudeConsoleAccountId=null)),x.geminiAccountId!==""&&(x.geminiAccountId==="SHARED_POOL"?l.geminiAccountId=null:l.geminiAccountId=x.geminiAccountId),x.openaiAccountId!==""&&(x.openaiAccountId==="SHARED_POOL"?l.openaiAccountId=null:l.openaiAccountId=x.openaiAccountId),x.bedrockAccountId!==""&&(x.bedrockAccountId==="SHARED_POOL"?l.bedrockAccountId=null:l.bedrockAccountId=x.bedrockAccountId),x.droidAccountId!==""&&(x.droidAccountId==="SHARED_POOL"?l.droidAccountId=null:l.droidAccountId=x.droidAccountId),x.isActive!==null&&(l.isActive=x.isActive),H.value!=="none"&&(l.tags=x.tags,l.tagOperation=H.value);const o=await E.put("/admin/api-keys/batch",{keyIds:g.selectedKeys,updates:l});if(o.success){const{successCount:p,failedCount:A,errors:u}=o.data;if(p>0){if(V(`成功批量编辑 ${p} 个 API Keys`,"success"),A>0){const i=u.map(y=>`${y.keyId}: ${y.error}`).join(`
`);V(`${A} 个编辑失败:
${i}`,"warning")}}else V("所有 API Keys 编辑失败","error");F("success"),F("close")}else V(o.message||"批量编辑失败","error")}catch(l){V("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",l)}finally{L.value=!1}};return ut(async()=>{if(Q.value=await j.fetchTags(),g.accounts){const l=(g.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),o=[];g.accounts.openai&&g.accounts.openai.forEach(p=>{o.push({...p,platform:p.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(p=>{o.push({...p,platform:p.platform||"openai-responses"})}),W.value={claude:g.accounts.claude||[],gemini:l,openai:o,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}}),(l,o)=>(n(),we(Ee,{to:"body"},[e("div",Un,[e("div",Rn,[e("div",Mn,[e("div",Pn,[o[28]||(o[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",Vn," 批量编辑 API Keys ("+c(B.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:o[0]||(o[0]=p=>l.$emit("close"))},o[29]||(o[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(S,["prevent"])},[e("div",En,[e("div",On,[o[31]||(o[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[o[30]||(o[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",jn," 以下设置将应用到所选的 "+c(B.value)+" 个 API Key。只有填写或修改的字段才会被更新空白字段将保持原值不变。 ",1)])])]),e("div",null,[o[41]||(o[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",Gn,[e("div",zn,[e("label",qn,[D(e("input",{"onUpdate:modelValue":o[1]||(o[1]=p=>H.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[Ie,H.value]]),o[32]||(o[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",Fn,[D(e("input",{"onUpdate:modelValue":o[2]||(o[2]=p=>H.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[Ie,H.value]]),o[33]||(o[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Wn,[D(e("input",{"onUpdate:modelValue":o[3]||(o[3]=p=>H.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[Ie,H.value]]),o[34]||(o[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bn,[D(e("input",{"onUpdate:modelValue":o[4]||(o[4]=p=>H.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[Ie,H.value]]),o[35]||(o[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),H.value!=="none"?(n(),d("div",Nn,[x.tags.length>0?(n(),d("div",Hn,[e("div",Yn,c(H.value==="replace"?"新标签列表:":H.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Qn,[(n(!0),d(Z,null,oe(x.tags,(p,A)=>(n(),d("span",{key:"selected-"+A,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"},[h(c(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:u=>pe(A)},o[36]||(o[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Jn)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",Xn,[o[38]||(o[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Zn,[(n(!0),d(Z,null,oe(f.value,p=>(n(),d("button",{key:"available-"+p,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:A=>fe(p)},[o[37]||(o[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(p),1)],8,ei))),128))])])):w("",!0),e("div",null,[o[40]||(o[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ti,[D(e("input",{"onUpdate:modelValue":o[5]||(o[5]=p=>T.value=p),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(ue,["prevent"]),["enter"])},null,40,si),[[te,T.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:ue},o[39]||(o[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):w("",!0)])]),e("div",ai,[o[45]||(o[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",ri,[e("div",oi,[e("div",null,[o[42]||(o[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),D(e("input",{"onUpdate:modelValue":o[6]||(o[6]=p=>x.rateLimitWindow=p),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),[[te,x.rateLimitWindow]])]),e("div",null,[o[43]||(o[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":o[7]||(o[7]=p=>x.rateLimitRequests=p),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),[[te,x.rateLimitRequests]])]),e("div",null,[o[44]||(o[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":o[8]||(o[8]=p=>x.rateLimitCost=p),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),[[te,x.rateLimitCost]])])])])]),e("div",null,[o[46]||(o[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[9]||(o[9]=p=>x.dailyCostLimit=p),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),[[te,x.dailyCostLimit]])]),e("div",null,[o[47]||(o[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[10]||(o[10]=p=>x.totalCostLimit=p),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),[[te,x.totalCostLimit]])]),e("div",null,[o[48]||(o[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Opus 模型周费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[11]||(o[11]=p=>x.weeklyOpusCostLimit=p),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),[[te,x.weeklyOpusCostLimit]]),o[49]||(o[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户 ",-1))]),e("div",null,[o[50]||(o[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":o[12]||(o[12]=p=>x.concurrencyLimit=p),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),[[te,x.concurrencyLimit]])]),e("div",null,[e("div",li,[o[54]||(o[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ni,[e("label",ii,[D(e("input",{"onUpdate:modelValue":o[13]||(o[13]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[Ie,x.isActive]]),o[51]||(o[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",di,[D(e("input",{"onUpdate:modelValue":o[14]||(o[14]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[Ie,x.isActive]]),o[52]||(o[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",ui,[D(e("input",{"onUpdate:modelValue":o[15]||(o[15]=p=>x.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[Ie,x.isActive]]),o[53]||(o[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[o[61]||(o[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ci,[e("label",gi,[D(e("input",{"onUpdate:modelValue":o[16]||(o[16]=p=>x.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[Ie,x.permissions]]),o[55]||(o[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",pi,[D(e("input",{"onUpdate:modelValue":o[17]||(o[17]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[Ie,x.permissions]]),o[56]||(o[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",mi,[D(e("input",{"onUpdate:modelValue":o[18]||(o[18]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,x.permissions]]),o[57]||(o[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",xi,[D(e("input",{"onUpdate:modelValue":o[19]||(o[19]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,x.permissions]]),o[58]||(o[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",yi,[D(e("input",{"onUpdate:modelValue":o[20]||(o[20]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,x.permissions]]),o[59]||(o[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",fi,[D(e("input",{"onUpdate:modelValue":o[21]||(o[21]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,x.permissions]]),o[60]||(o[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",bi,[o[62]||(o[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:$.value,title:"刷新账号列表",type:"button",onClick:Ke},[e("i",{class:O(["fas",$.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c($.value?"刷新中...":"刷新账号"),1)],8,vi)]),e("div",ki,[e("div",null,[o[63]||(o[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:nt(_),"onUpdate:modelValue":o[22]||(o[22]=p=>lt(_)?_.value=p:null),accounts:W.value.claude,"default-option-text":"请选择Claude账号",disabled:!le("claude"),groups:W.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[64]||(o[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:nt(q),"onUpdate:modelValue":o[23]||(o[23]=p=>lt(q)?q.value=p:null),accounts:W.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!le("gemini"),groups:W.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[65]||(o[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:nt(K),"onUpdate:modelValue":o[24]||(o[24]=p=>lt(K)?K.value=p:null),accounts:W.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!le("openai"),groups:W.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[66]||(o[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:nt(C),"onUpdate:modelValue":o[25]||(o[25]=p=>lt(C)?C.value=p:null),accounts:W.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!le("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":a},null,8,["modelValue","accounts","disabled"])]),e("div",null,[o[67]||(o[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:nt(X),"onUpdate:modelValue":o[26]||(o[26]=p=>lt(X)?X.value=p:null),accounts:W.value.droid,"default-option-text":"请选择Droid账号",disabled:!le("droid"),groups:W.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":a},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",wi,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[27]||(o[27]=p=>l.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:L.value,type:"submit"},[L.value?(n(),d("div",Ai)):(n(),d("i",$i)),h(" "+c(L.value?"保存中...":"批量保存"),1)],8,hi)])],32)])])]))}},Ii=Se(Ci,[["__scopeId","data-v-c0491882"]]),Ki={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Li={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Di={class:"mb-6 flex items-center justify-between"},_i={class:"flex items-center gap-3"},Ti={class:"text-sm text-gray-600 dark:text-gray-400"},Si={class:"space-y-6"},Ui={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"},Ri={class:"flex items-center justify-between"},Mi={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Pi={class:"ml-2 text-xs font-normal text-gray-600"},Vi={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ei={key:0,class:"mb-4"},Oi={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ji={class:"mb-3 grid grid-cols-3 gap-2"},Gi=["onClick"],zi={key:1,class:"animate-fadeIn"},qi=["min"],Fi={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"},Wi={class:"flex items-center justify-between"},Bi={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Ni={class:"flex gap-3 pt-2"},Hi=["disabled"],Yi={key:0,class:"loading-spinner mr-2"},Qi={key:1,class:"fas fa-save mr-2"},Ji={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(k,{expose:N,emit:g}){const F=k,j=g,L=I(!1),$=Ye({expireDuration:"",customExpireDate:"",expiresAt:null}),W=[{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 年"}],T=R(()=>{const K=new Date;return K.setMinutes(K.getMinutes()+1),K.toISOString().slice(0,16)});Te(()=>F.show,K=>{K&&Q()}),Te(()=>{var K;return(K=F.apiKey)==null?void 0:K.id},K=>{K&&F.show&&Q()});const Q=()=>{L.value=!1,F.apiKey.expiresAt?($.expireDuration="custom",$.customExpireDate=new Date(F.apiKey.expiresAt).toISOString().slice(0,16),$.expiresAt=F.apiKey.expiresAt):($.expireDuration="",$.customExpireDate="",$.expiresAt=null)},H=K=>{if($.expireDuration=K,!K){$.expiresAt=null;return}if(K==="custom")return;const C=new Date,X=K.match(/(\d+)([dhmy])/);if(X){const[,le,ue]=X,fe=parseInt(le);switch(ue){case"d":C.setDate(C.getDate()+fe);break;case"h":C.setHours(C.getHours()+fe);break;case"m":C.setMonth(C.getMonth()+fe);break;case"y":C.setFullYear(C.getFullYear()+fe);break}$.expiresAt=C.toISOString()}},B=()=>{$.customExpireDate&&($.expiresAt=new Date($.customExpireDate).toISOString())},f=K=>K?new Date(K).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",x=K=>K?new Date(K)<new Date:!1,a=K=>{if(!K)return null;const C=new Date,le=new Date(K)-C,ue=Math.ceil(le/(1e3*60*60*24));return le<0?{text:"已过期",class:"text-red-600"}:ue<=7?{text:`${ue} 天后过期`,class:"text-orange-600"}:ue<=30?{text:`${ue} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(ue/30)} 个月后过期`,class:"text-green-600"}},z=()=>{L.value=!0,j("save",{keyId:F.apiKey.id,expiresAt:$.expiresAt})},_=async()=>{let K=!0;window.showConfirm?K=await window.showConfirm("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消"):K=confirm(`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`),K&&(L.value=!0,j("save",{keyId:F.apiKey.id,activateNow:!0}))};return N({resetSaving:()=>{L.value=!1}}),(K,C)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",Ki,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:C[0]||(C[0]=X=>K.$emit("close"))}),e("div",Li,[e("div",Di,[e("div",_i,[C[6]||(C[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,[C[5]||(C[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Ti,' 为 "'+c(k.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:C[1]||(C[1]=X=>K.$emit("close"))},C[7]||(C[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Si,[e("div",Ui,[e("div",Ri,[e("div",null,[C[12]||(C[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Mi,[k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d(Z,{key:0},[C[8]||(C[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),C[9]||(C[9]=h(" 未激活 ",-1)),e("span",Pi," (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):k.apiKey.expiresAt?(n(),d(Z,{key:1},[h(c(f(k.apiKey.expiresAt))+" ",1),a(k.apiKey.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a(k.apiKey.expiresAt).class])}," ("+c(a(k.apiKey.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:2},[C[10]||(C[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),C[11]||(C[11]=h(" 永不过期 ",-1))],64))])]),e("div",Vi,[e("i",{class:O(["fas fa-hourglass-half text-lg",k.apiKey.expiresAt&&x(k.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d("div",Ei,[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:_},[C[13]||(C[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),h(" 立即激活 (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Oi,[C[14]||(C[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),h(" 点击立即激活此 API Key激活后将在 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):w("",!0),e("div",null,[C[16]||(C[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",ji,[(n(),d(Z,null,oe(W,X=>e("button",{key:X.value,class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",$.expireDuration===X.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:le=>H(X.value)},c(X.label),11,Gi)),64)),e("button",{class:O(["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:C[2]||(C[2]=X=>H("custom"))},C[15]||(C[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),h(" 自定义 ",-1)]),2)])]),$.expireDuration==="custom"?(n(),d("div",zi,[C[17]||(C[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),D(e("input",{"onUpdate:modelValue":C[3]||(C[3]=X=>$.customExpireDate=X),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:T.value,type:"datetime-local",onChange:B},null,40,qi),[[te,$.customExpireDate]]),C[18]||(C[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):w("",!0),$.expiresAt!==k.apiKey.expiresAt?(n(),d("div",Fi,[e("div",Wi,[e("div",null,[C[21]||(C[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"}),h(" 新的过期时间 ")],-1)),e("p",Bi,[$.expiresAt?(n(),d(Z,{key:0},[h(c(f($.expiresAt))+" ",1),a($.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a($.expiresAt).class])}," ("+c(a($.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:1},[C[19]||(C[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),C[20]||(C[20]=h(" 永不过期 ",-1))],64))])]),C[22]||(C[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))])])):w("",!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:C[4]||(C[4]=X=>K.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:L.value||$.expiresAt===k.apiKey.expiresAt,onClick:z},[L.value?(n(),d("div",Yi)):(n(),d("i",Qi)),h(" "+c(L.value?"保存中...":"保存更改"),1)],8,Hi)])])])])):w("",!0)]))}},Xi=Se(Ji,[["__scopeId","data-v-fb30c1d3"]]),Zi={class:"w-full"},ed={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},td={key:1,class:"space-y-1.5"},sd={class:"flex items-center justify-between text-[11px] font-medium"},ad={class:"text-gray-700 dark:text-gray-200"},rd={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},od={class:"relative z-10 flex h-full items-center justify-between px-3"},ld={class:"flex items-center gap-1.5"},nd={class:"flex items-center gap-1.5"},id={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},dd={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:k=>["daily","opus","window","total"].includes(k)},variant:{type:String,default:"full",validator:k=>["full","compact"].includes(k)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(k){const N=k,g=R(()=>N.variant==="compact"),F=R(()=>{if(!N.limit||N.limit<=0)return 0;const f=N.current/N.limit*100;return Math.min(f,100)}),j=R(()=>{switch(N.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),L=R(()=>{switch(N.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),$=R(()=>{const f=F.value;return N.type==="daily"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":N.type==="opus"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":N.type==="window"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":N.type==="total"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),W=R(()=>{const f=F.value;if(f>=95)return"bg-rose-500 dark:bg-rose-400";if(f>=80)return"bg-amber-400 dark:bg-amber-300";switch(N.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-slate-400 dark:bg-slate-500"}}),T=R(()=>{const f=F.value;if(f>=95)return"text-rose-600 dark:text-rose-300";if(f>=80)return"text-amber-600 dark:text-amber-300";switch(N.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),Q=R(()=>{const f=F.value;let x="";if(f>=90)x="text-red-700 dark:text-red-400";else if(f>=70)x="text-orange-700 dark:text-orange-400";else switch(N.type){case"daily":x="text-green-700 dark:text-green-400";break;case"opus":x="text-purple-700 dark:text-purple-400";break;case"window":x="text-blue-700 dark:text-blue-400";break;default:x="text-gray-600 dark:text-gray-400"}let a="";switch(N.type){case"daily":a="fas fa-calendar-day";break;case"opus":a="fas fa-gem";break;case"window":a="fas fa-clock";break;case"total":a="fas fa-wallet";break;default:a="fas fa-infinity"}return`${a} ${x}`}),H=R(()=>{if(F.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(N.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),B=R(()=>{const f=F.value;if(f>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(f>=90)return"text-red-700 dark:text-red-300";if(f>=70)return"text-orange-700 dark:text-orange-300";switch(N.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(f,x)=>(n(),d("div",Zi,[!k.limit||k.limit<=0?(n(),d("div",ed,x[0]||(x[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):g.value?(n(),d("div",td,[e("div",sd,[e("div",{class:O(["flex items-center gap-1.5",T.value])},[e("i",{class:O(["text-[11px]",Q.value])},null,2),e("span",null,c(k.label),1)],2),e("span",ad,"$"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),1)]),e("div",rd,[e("div",{class:O(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",W.value]),style:Ct({width:F.value+"%"})},null,6)])])):(n(),d("div",{key:2,class:O(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",j.value])},[e("div",{class:O(["absolute inset-0",L.value])},null,2),e("div",{class:O(["absolute inset-0 h-full transition-all duration-500 ease-out",$.value]),style:Ct({width:F.value+"%"})},null,6),x[1]||(x[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",od,[e("div",ld,[e("i",{class:O(["text-xs",Q.value])},null,2),e("span",{class:O(["text-xs font-semibold",H.value])},c(k.label),3)]),e("div",nd,[e("span",{class:O(["text-xs font-bold tabular-nums",B.value])}," $"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),3)])]),k.showShine&&F.value>0?(n(),d("div",id)):w("",!0)],2))]))}},Ve=Se(dd,[["__scopeId","data-v-8a01dc56"]]),ud={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},cd={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"},gd={class:"mb-4 flex items-center justify-between sm:mb-6"},pd={class:"flex items-center gap-2 sm:gap-3"},md={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},xd={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},yd={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},fd={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"},bd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},vd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},kd={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"},wd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},hd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Ad={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"},$d={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Cd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Id={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"},Kd={class:"space-y-1 text-sm"},Ld={class:"flex justify-between"},Dd={class:"font-semibold text-gray-900 dark:text-gray-100"},_d={class:"flex justify-between"},Td={class:"font-semibold text-gray-900 dark:text-gray-100"},Sd={class:"mb-6"},Ud={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Rd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Pd={class:"flex items-center justify-between"},Vd={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Ed={key:0,class:"flex items-center justify-between"},Od={class:"text-sm font-semibold text-purple-600"},jd={key:1,class:"flex items-center justify-between"},Gd={class:"text-sm font-semibold text-purple-600"},zd={key:0,class:"mb-6"},qd={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Fd={key:0,class:"space-y-1.5"},Wd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Bd={key:1,class:"space-y-1.5"},Nd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Hd={key:2,class:"space-y-1.5"},Yd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Qd={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Jd={class:"font-semibold text-purple-600 dark:text-purple-300"},Xd={key:4,class:"space-y-2"},Zd={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(k,{emit:N}){const g=k,F=N,j=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.requests)||0}),L=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.requests)||0}),$=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.tokens)||0}),W=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.tokens)||0}),T=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cost)||0}),Q=R(()=>g.apiKey.dailyCost||0),H=R(()=>g.apiKey.totalCostLimit||0),B=R(()=>g.apiKey.weeklyOpusCost||0),f=R(()=>g.apiKey.weeklyOpusCostLimit||0),x=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.inputTokens)||0}),a=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.outputTokens)||0}),z=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheCreateTokens)||0}),_=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheReadTokens)||0}),q=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.rpm)||0}),K=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.tpm)||0}),C=R(()=>g.apiKey.dailyCostLimit>0||g.apiKey.totalCostLimit>0||g.apiKey.concurrencyLimit>0||g.apiKey.weeklyOpusCostLimit>0||g.apiKey.rateLimitWindow>0||g.apiKey.tokenLimit>0),X=R(()=>!g.apiKey.dailyCostLimit||g.apiKey.dailyCostLimit===0?0:Q.value/g.apiKey.dailyCostLimit*100),le=R(()=>!H.value||H.value===0?0:T.value/H.value*100),ue=R(()=>!f.value||f.value===0?0:B.value/f.value*100),fe=l=>!l&&l!==0?"0":l.toLocaleString("zh-CN"),pe=l=>l>=1e6?(l/1e6).toFixed(1)+"M":l>=1e3?(l/1e3).toFixed(1)+"K":l.toString(),Ke=()=>{F("close")},S=()=>{var l;F("open-timeline",(l=g.apiKey)==null?void 0:l.id)};return(l,o)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",ud,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:Ke}),e("div",cd,[e("div",gd,[e("div",pd,[o[0]||(o[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",md," 使用统计详情 - "+c(k.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:Ke},o[1]||(o[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",xd,[e("div",yd,[e("div",fd,[o[2]||(o[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",bd,c(fe(j.value)),1),e("div",vd," 今日: "+c(fe(L.value))+" 次 ",1)]),e("div",kd,[o[3]||(o[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",wd,c(pe($.value)),1),e("div",hd," 今日: "+c(pe(W.value)),1)]),e("div",Ad,[o[4]||(o[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",$d," $"+c(T.value.toFixed(4)),1),e("div",Cd," 今日: $"+c(Q.value.toFixed(4)),1)]),e("div",Id,[o[7]||(o[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",Kd,[e("div",Ld,[o[5]||(o[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",Dd,c(q.value),1)]),e("div",_d,[o[6]||(o[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",Td,c(K.value),1)])])])]),e("div",Sd,[o[12]||(o[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" Token 使用分布 ")],-1)),e("div",Ud,[e("div",Rd,[o[8]||(o[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",Md,c(pe(x.value)),1)]),e("div",Pd,[o[9]||(o[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",Vd,c(pe(a.value)),1)]),z.value>0?(n(),d("div",Ed,[o[10]||(o[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",Od,c(pe(z.value)),1)])):w("",!0),_.value>0?(n(),d("div",jd,[o[11]||(o[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",Gd,c(pe(_.value)),1)])):w("",!0)])]),C.value?(n(),d("div",zd,[o[15]||(o[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),h(" 限制设置 ")],-1)),e("div",qd,[k.apiKey.dailyCostLimit>0?(n(),d("div",Fd,[ae(Ve,{current:Q.value,label:"每日费用限制",limit:k.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",Wd," 已使用 "+c(Math.min(X.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.weeklyOpusCostLimit>0?(n(),d("div",Bd,[ae(Ve,{current:B.value,label:"Opus 周费用限制",limit:k.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",Nd," 已使用 "+c(Math.min(ue.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.totalCostLimit>0?(n(),d("div",Hd,[ae(Ve,{current:T.value,label:"总费用限制",limit:k.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",Yd," 已使用 "+c(Math.min(le.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.concurrencyLimit>0?(n(),d("div",Qd,[o[13]||(o[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Jd,c(k.apiKey.currentConcurrency||0)+" / "+c(k.apiKey.concurrencyLimit),1)])):w("",!0),k.apiKey.rateLimitWindow>0?(n(),d("div",Xd,[o[14]||(o[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),h(" 时间窗口限制 ")],-1)),ae(ya,{"cost-limit":k.apiKey.rateLimitCost,"current-cost":k.apiKey.currentWindowCost,"current-requests":k.apiKey.currentWindowRequests,"current-tokens":k.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":k.apiKey.rateLimitWindow,"request-limit":k.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":k.apiKey.tokenLimit,"window-end-time":k.apiKey.windowEndTime,"window-remaining-seconds":k.apiKey.windowRemainingSeconds,"window-start-time":k.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"])])):w("",!0)])])):w("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-primary px-4 py-2 text-sm",type:"button",onClick:S}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:Ke}," 关闭 ")])])])):w("",!0)]))}},e0=Se(Zd,[["__scopeId","data-v-e4a6a155"]]),t0={class:"tab-content"},s0={class:"card p-4 sm:p-6"},a0={class:"mb-4 flex flex-col gap-4 sm:mb-6"},r0={class:"border-b border-gray-200 dark:border-gray-700"},o0={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},l0={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"},n0={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"},i0={key:0,class:"tab-panel"},d0={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},u0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},c0={class:"group relative min-w-[140px]"},g0={key:0,class:"flex items-center"},p0={class:"group relative min-w-[140px]"},m0={class:"relative"},x0={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"},y0={class:"group relative min-w-[140px]"},f0={class:"relative"},b0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-orange-500 text-xs text-white shadow-sm"},v0={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},k0={class:"sm:w-44"},w0={class:"group relative flex-1"},h0={class:"relative flex items-center"},A0=["placeholder"],$0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},C0=["disabled"],I0={class:"relative"},K0={class:"relative"},L0={key:0,class:"py-12 text-center"},D0={key:1,class:"py-12 text-center"},_0={key:2,class:"table-wrapper hidden md:block"},T0={class:"table-container"},S0={class:"w-full"},U0={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"},R0={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},M0={class:"flex items-center"},P0=["indeterminate"],V0={key:1,class:"fas fa-sort ml-1 text-gray-400"},E0={key:1,class:"fas fa-sort ml-1 text-gray-400"},O0=["title"],j0={key:1,class:"fas fa-sort ml-1 text-gray-400"},G0={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},z0={key:1,class:"fas fa-sort ml-1 text-gray-400"},q0={key:1,class:"fas fa-sort ml-1 text-gray-400"},F0={key:1,class:"fas fa-sort ml-1 text-gray-400"},W0={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},B0={class:"flex items-center"},N0=["value"],H0={class:"min-w-0"},Y0=["title"],Q0={key:0,class:"mt-1 text-xs text-red-600"},J0={class:"px-3 py-3"},X0={class:"space-y-1"},Z0={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},eu={key:0,class:"flex items-center gap-1 text-xs"},tu={class:"truncate text-gray-600 dark:text-gray-400"},su={key:1,class:"flex items-center gap-1 text-xs"},au={class:"truncate text-gray-600 dark:text-gray-400"},ru={key:2,class:"flex items-center gap-1 text-xs"},ou={class:"truncate text-gray-600 dark:text-gray-400"},lu={key:3,class:"flex items-center gap-1 text-xs"},nu={class:"truncate text-gray-600 dark:text-gray-400"},iu={key:4,class:"flex items-center gap-1 text-xs"},du={class:"truncate text-gray-600 dark:text-gray-400"},uu={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},cu={class:"px-3 py-3"},gu={class:"flex flex-wrap gap-1"},pu={key:0,class:"text-xs text-gray-400"},mu={class:"whitespace-nowrap px-3 py-3"},xu={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},yu={key:0,class:"flex items-center justify-end"},fu={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},bu={key:2,class:"text-gray-400"},vu={class:"px-2 py-2",style:{"font-size":"12px"}},ku={class:"flex flex-col gap-2"},wu={key:0,class:"space-y-2"},hu={key:2,class:"space-y-1.5"},Au={class:"flex items-center justify-between text-[10px]"},$u={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},Cu={class:"font-medium"},Iu={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Ku={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Lu={key:0,class:"flex items-center justify-end"},Du={key:1,class:"flex items-center justify-end gap-1"},_u={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Tu={key:2,class:"text-gray-400"},Su={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Uu={key:0,class:"flex items-center justify-end"},Ru={key:1,class:"flex items-center justify-end gap-1"},Mu={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},Pu={key:2,class:"text-gray-400"},Vu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Eu={class:"flex flex-col leading-tight"},Ou=["title"],ju={key:1,class:"text-gray-400",style:{"font-size":"13px"}},Gu={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},zu=["title"],qu={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Fu={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Wu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Bu={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},Nu={class:"inline-flex items-center gap-1.5"},Hu={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Yu={key:1},Qu=["onClick"],Ju=["onClick"],Xu=["onClick"],Zu=["onClick"],ec={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},tc={class:"hidden gap-1 2xl:flex"},sc=["onClick"],ac=["onClick"],rc=["onClick"],oc=["onClick"],lc=["title","onClick"],nc={class:"ml-1"},ic=["onClick"],dc={class:"flex items-center gap-1 2xl:hidden"},uc=["onClick"],cc=["onClick"],gc={key:0},pc={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},mc={key:0,class:"py-4 text-center"},xc={class:"space-y-4"},yc={class:"mb-4 flex items-center justify-between"},fc={class:"flex items-center gap-2"},bc={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"},vc={class:"flex items-center gap-1"},kc={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},wc=["onClick"],hc={key:0,class:"py-8 text-center"},Ac={class:"mb-3 flex items-center justify-center gap-2"},$c=["onClick"],Cc={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Ic={class:"mb-3 flex items-start justify-between"},Kc={class:"flex-1"},Lc={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Dc={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},_c={class:"mb-3 space-y-2"},Tc={class:"flex items-center justify-between text-sm"},Sc={class:"font-semibold text-gray-900 dark:text-gray-100"},Uc={class:"flex items-center justify-between text-sm"},Rc={class:"font-semibold text-green-600"},Mc={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},Pc={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Vc={class:"font-medium"},Ec={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Oc={class:"font-medium"},jc={key:0,class:"flex items-center justify-between text-xs text-purple-600"},Gc={class:"font-medium"},zc={key:1,class:"flex items-center justify-between text-xs text-purple-600"},qc={class:"font-medium"},Fc={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Wc={class:"mt-1 text-right"},Bc={class:"text-xs font-medium text-indigo-600"},Nc={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},Hc={class:"flex items-center justify-between text-sm"},Yc={class:"flex gap-4 text-xs"},Qc={class:"text-gray-600 dark:text-gray-400"},Jc={class:"font-semibold text-gray-800 dark:text-gray-200"},Xc={class:"text-gray-600 dark:text-gray-400"},Zc={class:"font-semibold text-gray-800 dark:text-gray-200"},eg={key:3,class:"space-y-3 md:hidden"},tg={class:"mb-3 flex items-start justify-between"},sg={class:"flex items-center gap-3"},ag=["value"],rg={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},og={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},lg={class:"mb-3 space-y-1.5"},ng={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},ig={class:"text-gray-600 dark:text-gray-400"},dg={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},ug={class:"text-gray-600 dark:text-gray-400"},cg={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},gg={class:"text-gray-600 dark:text-gray-400"},pg={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},mg={class:"text-gray-600 dark:text-gray-400"},xg={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},yg={class:"text-gray-600 dark:text-gray-400"},fg={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},bg={key:6,class:"text-xs text-red-600"},vg={class:"mb-3 space-y-2"},kg={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wg={class:"mb-2 flex items-center justify-between"},hg={class:"text-xs text-gray-600 dark:text-gray-400"},Ag=["onClick"],$g={class:"grid grid-cols-2 gap-3"},Cg={key:0,class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Ig={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Kg={key:2,class:"text-sm font-semibold text-gray-400"},Lg={key:0,class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Dg={key:1,class:"text-sm font-semibold text-green-600"},_g={key:2,class:"text-sm font-semibold text-gray-400"},Tg={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Sg={class:"flex items-center justify-between"},Ug={class:"font-medium text-gray-700 dark:text-gray-300"},Rg={class:"mt-1 flex items-center justify-between"},Mg={key:0,class:"text-gray-400 dark:text-gray-500"},Pg=["title"],Vg={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Eg={key:2,class:"text-gray-400 dark:text-gray-500"},Og={class:"space-y-2"},jg={key:0,class:"space-y-2"},Gg={key:2,class:"space-y-2"},zg={class:"flex items-center justify-between text-xs"},qg={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},Fg={class:"font-medium"},Wg={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Bg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Ng={class:"mb-1 flex justify-between"},Hg={class:"flex items-center justify-between"},Yg={class:"flex items-center gap-1"},Qg=["onClick"],Jg={key:0,class:"mb-3 flex flex-wrap gap-1"},Xg={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},Zg=["onClick"],ep=["onClick"],tp=["onClick"],sp=["onClick"],ap=["onClick"],rp={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},op={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},lp={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},np={class:"flex items-center gap-2"},ip=["value"],dp={class:"flex items-center gap-2"},up=["disabled"],cp={class:"flex items-center gap-1"},gp={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},pp=["onClick"],mp={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},xp=["disabled"],yp={key:1,class:"tab-panel"},fp={key:0,class:"py-12 text-center"},bp={key:1,class:"py-12 text-center"},vp={key:2},kp={class:"mb-4 flex justify-end"},wp={class:"table-wrapper"},hp={class:"table-container"},Ap={class:"w-full"},$p={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"},Cp={key:0,class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Ip={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Kp={class:"name-column sticky left-0 z-10 px-3 py-3"},Lp={class:"flex items-center"},Dp={class:"min-w-0"},_p=["title"],Tp={class:"px-3 py-3"},Sp={class:"space-y-1"},Up={key:0,class:"flex items-center gap-1 text-xs"},Rp={key:1,class:"flex items-center gap-1 text-xs"},Mp={key:2,class:"flex items-center gap-1 text-xs"},Pp={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Vp={key:0,class:"px-3 py-3"},Ep={class:"text-xs"},Op={key:0,class:"text-blue-600"},jp={key:1,class:"text-green-600"},Gp={key:2,class:"text-gray-500 dark:text-gray-400"},zp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},qp={class:"px-3 py-3"},Fp={class:"text-xs"},Wp={key:0,class:"text-blue-600"},Bp={key:1,class:"text-green-600"},Np={key:2,class:"text-gray-500 dark:text-gray-400"},Hp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Yp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Qp={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Jp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xp={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Zp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},em={class:"flex items-center justify-end gap-1"},tm={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},sm={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},am={class:"flex flex-col leading-tight"},rm=["title"],om={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lm={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},nm=["title"],im={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dm={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},um={class:"operations-column operations-cell px-3 py-3"},cm={class:"flex items-center gap-2"},gm=["onClick"],pm=["onClick"],ks=16,mm={__name:"ApiKeysView",setup(k){const N=ma(),g=zt(),F=xa(),j=I([]),L=R(()=>{var s;return((s=F.oemSettings)==null?void 0:s.ldapEnabled)||!1}),$=I([]),W=I(!1),T=I(!1),Q=I(!1),H=I(!1),B=I("today"),f=Ye({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),x=R(()=>Q.value),a=()=>{Q.value=!Q.value,Q.value||($.value=[],W.value=!1,T.value=!1)},z=R(()=>[{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"}]),_=I("active"),q=I([]),K=I(!1),C=I("createdAt"),X=I("desc"),le=I({}),ue=I({}),fe=I({page:1,pageSize:20,total:0,totalPages:0}),pe=I(new Map),Ke=I(new Set),S=I(new Map),l=I(new Set),o=I({}),p=I({}),A=I([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),u=I({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),i=I(!1),y=I(!1),ie=I(null),me=I(null),xe=I(!1),he=I(null),ce=I(""),Ae=I([]),Y=I([]),J=I([]),be=I(""),Re=I("apiKey"),Qe=R(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),re=R(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return Ae.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Me=R(()=>J.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),As=R(()=>ce.value?j.value.filter(s=>s.tags&&s.tags.includes(ce.value)).length:0),ve=I(1),Je=I((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),$s=[10,20,50,100],Xe=I(!1),ct=I(!1),gt=I(!1),It=I(!1),Kt=I(!1),pt=I(!1),Ft=I(null),Wt=I(null),Bt=I(null),Nt=I([]),mt=R(()=>j.value),ze=R(()=>fe.value.totalPages||0),Ze=R(()=>{const s=[],t=ve.value,m=ze.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),v=Math.min(m,t+2);t<=3?v=5:t>=m-2&&(r=m-4);for(let M=r;M<=v;M++)s.push(M)}return s}),Ht=R(()=>{const s=Ze.value;return s.length===0?!1:s[0]>1}),Yt=R(()=>{const s=Ze.value;return s.length===0?!1:s[s.length-1]<ze.value}),Cs=R(()=>{const s=Ze.value;return s.length===0?!1:Ht.value&&s[0]>2}),Is=R(()=>{const s=Ze.value;return s.length===0?!1:Yt.value&&s[s.length-1]<ze.value-1}),We=R(()=>j.value),xt=async(s=!1)=>{var t,m;if(!(y.value&&!s)){i.value=!0;try{const[r,v,M,P,U,se,ne,b,G]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),de=[];r.success&&((t=r.data)==null||t.forEach(ee=>{de.push({...ee,platform:"claude-oauth",isDedicated:ee.accountType==="dedicated"})})),v.success&&((m=v.data)==null||m.forEach(ee=>{de.push({...ee,platform:"claude-console",isDedicated:ee.accountType==="dedicated"})})),u.value.claude=de;const ke=[];if(M.success&&(M.data||[]).forEach(ee=>{ke.push({...ee,platform:"gemini",isDedicated:ee.accountType==="dedicated"})}),P.success&&(u.value.geminiApi=(P.data||[]).map(ee=>({...ee,platform:"gemini-api",isDedicated:ee.accountType==="dedicated"})),u.value.geminiApi.forEach(ee=>{ke.push(ee)})),u.value.gemini=ke,U.success&&(u.value.openai=(U.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),se.success&&(u.value.openaiResponses=(se.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),ne.success&&(u.value.bedrock=(ne.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),b.success&&(u.value.droid=(b.data||[]).map(ee=>({...ee,platform:"droid",isDedicated:ee.accountType==="dedicated"}))),G.success){const ee=G.data||[];u.value.claudeGroups=ee.filter(ge=>ge.platform==="claude"),u.value.geminiGroups=ee.filter(ge=>ge.platform==="gemini"),u.value.openaiGroups=ee.filter(ge=>ge.platform==="openai"),u.value.droidGroups=ee.filter(ge=>ge.platform==="droid")}y.value=!0}catch{}finally{i.value=!1}}},Ks=async()=>{try{const s=await E.get("/admin/api-keys/used-models");s.success&&(J.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},$e=async(s=!0)=>{var t,m,r;H.value=!0;try{s&&(pe.value.clear(),S.value.clear());const v=new URLSearchParams;v.set("page",ve.value.toString()),v.set("pageSize",Je.value.toString()),v.set("searchMode",Re.value),be.value&&v.set("search",be.value),ce.value&&v.set("tag",ce.value),Y.value.length>0&&v.set("models",Y.value.join(","));const P=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes(C.value)?C.value:"createdAt";v.set("sortBy",P),v.set("sortOrder",X.value),P==="cost"&&(f.type==="custom"&&f.customStart&&f.customEnd?(v.set("costTimeRange","custom"),v.set("costStartDate",f.customStart),v.set("costEndDate",f.customEnd)):v.set("costTimeRange",f.preset||"7days")),f.type==="custom"&&f.customStart&&f.customEnd?(v.set("startDate",f.customStart),v.set("endDate",f.customEnd),v.set("timeRange","custom")):f.preset==="all"?v.set("timeRange","all"):v.set("timeRange",f.preset);const U=await E.get(`/admin/api-keys?${v.toString()}`);U.success&&(j.value=((t=U.data)==null?void 0:t.items)||[],(m=U.data)!=null&&m.pagination&&(fe.value=U.data.pagination,ve.value>fe.value.totalPages&&fe.value.totalPages>0&&(ve.value=fe.value.totalPages)),(r=U.data)!=null&&r.availableTags&&(Ae.value=U.data.availableTags),Ls(),Ds())}catch{V("加载 API Keys 失败","error")}finally{H.value=!1}},Ls=async()=>{const s=j.value;if(!s||s.length===0)return;let t=f.preset,m=null,r=null;f.type==="custom"&&f.customStart&&f.customEnd&&(t="custom",m=f.customStart,r=f.customEnd);const v=s.filter(P=>{const U=pe.value.get(P.id);return!U||U.timeRange!==t||t==="custom"&&(U.startDate!==m||U.endDate!==r)});if(v.length===0)return;const M=v.map(P=>P.id);M.forEach(P=>Ke.value.add(P));try{const P={keyIds:M,timeRange:t};t==="custom"&&(P.startDate=m,P.endDate=r);const U=await E.post("/admin/api-keys/batch-stats",P);if(U.success&&U.data)for(const[se,ne]of Object.entries(U.data))pe.value.set(se,{stats:ne,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(P){console.error("加载统计数据失败:",P)}finally{M.forEach(P=>Ke.value.delete(P))}},ye=s=>{const t=pe.value.get(s);return(t==null?void 0:t.stats)||null},qe=s=>Ke.value.has(s),Ds=async()=>{const s=j.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||S.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>l.value.add(r));try{const r=await E.post("/admin/api-keys/batch-last-usage",{keyIds:m});if(r.success&&r.data)for(const[v,M]of Object.entries(r.data))S.value.set(v,M)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>l.value.delete(r))}},_s=s=>S.value.get(s)||null,yt=s=>l.value.has(s),ft=async()=>{_.value="deleted",K.value=!0;try{const s=await E.get("/admin/api-keys/deleted");s.success&&(q.value=s.apiKeys||[])}catch{V("加载已删除的 API Keys 失败","error")}finally{K.value=!1}},Be=s=>{if(s==="cost"){if(!bt.value){V("费用排序索引正在更新中,请稍后重试","warning");return}f.type==="custom"&&V("正在计算费用排序,可能需要几秒钟...","info")}C.value===s?X.value=X.value==="asc"?"desc":"asc":(C.value=s,X.value=s==="cost"?"desc":"asc")},bt=R(()=>{if(f.type==="custom")return!0;const s=f.preset,t=ue.value[s];return(t==null?void 0:t.status)==="ready"}),Ts=R(()=>{if(f.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=f.preset,t=ue.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"}`:"费用排序索引状态未知":"费用排序索引未初始化"});let Ne=null;const Qt=async()=>{try{const s=await E.get("/admin/api-keys/cost-sort-status");s.success&&(ue.value=s.data||{},Ss())}catch(s){console.error("Failed to fetch cost sort status:",s)}},Ss=()=>{Ne&&clearTimeout(Ne);const t=Object.values(ue.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;Ne=setTimeout(Qt,t)},Lt=s=>!s&&s!==0?"0":s.toLocaleString("zh-CN"),De=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),et=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const U=s.substring(6),se=u.value.claudeGroups.find(de=>de.id===U);if(se)return`分组-${se.name}`;const ne=u.value.geminiGroups.find(de=>de.id===U);if(ne)return`分组-${ne.name}`;const b=u.value.openaiGroups.find(de=>de.id===U);if(b)return`分组-${b.name}`;const G=u.value.droidGroups.find(de=>de.id===U);return G?`分组-${G.name}`:`分组-${U.substring(0,8)}`}const t=u.value.claude.find(U=>U.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const U=s.replace("api:",""),se=u.value.gemini.find(ne=>ne.id===U&&ne.platform==="gemini-api");return se?`${se.name}`:`${U.substring(0,8)}`}const m=u.value.gemini.find(U=>U.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const U=s.replace("responses:",""),se=u.value.openaiResponses.find(ne=>ne.id===U);return se?`${se.name}`:`${U.substring(0,8)}`}const r=u.value.openai.find(U=>U.id===s);if(r)return`${r.name}`;const v=u.value.openaiResponses.find(U=>U.id===s);if(v)return`${v.name}`;const M=u.value.bedrock.find(U=>U.id===s);if(M)return`${M.name}`;const P=u.value.droid.find(U=>U.id===s);return P?`${P.name}`:`${s.substring(0,8)}`},Us=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),Jt=s=>{if(s.claudeAccountId){const t=et(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=u.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=u.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},Xt=s=>{if(s.geminiAccountId){const t=et(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),v=u.value.gemini.find(M=>M.id===r&&M.platform==="gemini-api");return v?v.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=u.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},Zt=s=>{if(s.openaiAccountId){const t=et(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=u.value.openaiResponses.find(v=>v.id===r)}else m=u.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},es=s=>{if(s.bedrockAccountId){const t=et(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=u.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ts=s=>{if(s.droidAccountId){const t=et(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=u.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},tt=s=>s?new Date(s)<new Date:!1,st=s=>!s||tt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,ss=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",as=async s=>{le.value[s]?le.value[s]=!1:(le.value[s]=!0,p.value[s]||ls(s),await vt(s,!0))},vt=async(s,t=!1)=>{if(!t&&o.value[s]&&o.value[s].length>0)return;const m=Oe(s);try{let r=`/admin/api-keys/${s}/model-stats`;const v=new URLSearchParams;if(m.customStart&&m.customEnd)v.append("startDate",m.customStart),v.append("endDate",m.customEnd),v.append("period","custom");else{const P=m.preset==="today"||m.preset==="7days"?"daily":"monthly";v.append("period",P)}r+="?"+v.toString();const M=await E.get(r);M.success&&(o.value[s]=M.data||[])}catch{V("加载模型统计失败","error"),o.value[s]=[]}},rs=(s,t)=>{const m=t.reduce((r,v)=>r+(v.allTokens||0),0);return m===0?0:Math.round(s/m*100)},Rs=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",Ms=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.requests!==void 0)return s.usage.custom.requests;if(s.usage.total&&s.usage.total.requests!==void 0)return s.usage.total.requests}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].requests!==void 0)return s.usage["30days"].requests;if(s.usage.monthly&&s.usage.monthly.requests!==void 0)return s.usage.monthly.requests}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.requests)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.requests)||0}},Ps=s=>{if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.cost!==void 0)return s.usage.custom.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return 0}else{if(f.preset==="today")return s.dailyCost||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].cost!==void 0)return s.usage["30days"].cost;if(s.usage.monthly&&s.usage.monthly.cost!==void 0)return s.usage.monthly.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return s.monthlyCost||s.periodCost||0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.cost!==void 0?s.usage.all.cost:s.totalCost||0:s.periodCost||s.totalCost||0}},Vs=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.tokens!==void 0)return s.usage.custom.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].tokens!==void 0)return s.usage["30days"].tokens;if(s.usage.monthly&&s.usage.monthly.tokens!==void 0)return s.usage.monthly.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.tokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.tokens)||0}},Es=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.inputTokens!==void 0)return s.usage.custom.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].inputTokens!==void 0)return s.usage["30days"].inputTokens;if(s.usage.monthly&&s.usage.monthly.inputTokens!==void 0)return s.usage.monthly.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.inputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.inputTokens)||0}},Os=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.outputTokens!==void 0)return s.usage.custom.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].outputTokens!==void 0)return s.usage["30days"].outputTokens;if(s.usage.monthly&&s.usage.monthly.outputTokens!==void 0)return s.usage.monthly.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.outputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.outputTokens)||0}},js=s=>{if(!o.value[s.id])return Ps(s);const t=o.value[s.id]||[];let m=0;return t.forEach(r=>{if(r.cost!==void 0)m+=r.cost;else if(r.formatted&&r.formatted.total){const v=r.formatted.total.replace("$","").replace(",",""),M=parseFloat(v);isNaN(M)||(m+=M)}}),m},Gs=s=>{if(os(s),C.value==="cost"){if(s==="custom")return;const t=ue.value[s];(!t||t.status!=="ready")&&(C.value="createdAt",X.value="desc",V("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},os=s=>{if(f.preset=s,s==="custom"){if(f.type="custom",!f.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=v=>v.getFullYear()+"-"+String(v.getMonth()+1).padStart(2,"0")+"-"+String(v.getDate()).padStart(2,"0")+" 00:00:00";f.customRange=[r(m),r(t)],f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")f.type="preset",f.customStart=null,f.customEnd=null;else{f.type="preset";const t=new Date,m=new Date(t);s==="today"?m.setHours(0,0,0,0):s==="7days"?m.setDate(t.getDate()-6):s==="30days"&&m.setDate(t.getDate()-29),f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}$e()},zs=s=>{s&&s.length===2?(f.type="custom",f.preset="custom",f.customRange=s,f.customStart=s[0].split(" ")[0],f.customEnd=s[1].split(" ")[0],$e()):s===null&&os("today")},ls=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),p.value[s]={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}]}},Oe=s=>(p.value[s]||ls(s),p.value[s]),ns=(s,t)=>{const m=Oe(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(v=>v.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const v=new Date,M=new Date(v);M.setDate(v.getDate()-6);const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)],m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0]}}else{const v=new Date,M=new Date(v);M.setDate(v.getDate()-(r.days-1)),m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0];const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)]}vt(t,!0)},qs=(s,t)=>{const m=Oe(s);t&&t.length===2?(m.type="custom",m.preset="custom",m.customRange=t,m.customStart=t[0].split(" ")[0],m.customEnd=t[1].split(" ")[0],vt(s,!0)):t===null&&ns("7days",s)},is=s=>s>new Date,Fs=s=>{const t=Oe(s);t.type="preset",t.preset="today";const m=new Date;new Date(m).setHours(0,0,0,0),t.customStart=m.toISOString().split("T")[0],t.customEnd=m.toISOString().split("T")[0],t.customRange=null,vt(s,!0),V("已重置筛选条件并刷新数据","info")},Ws=()=>{Xe.value=!0,y.value||xt()},Dt=s=>{Ft.value=s,ct.value=!0,y.value||xt()},_t=s=>{Wt.value=s,gt.value=!0},Bs=s=>{Xe.value=!1,Bt.value=s,It.value=!0,$e()},Ns=s=>{Xe.value=!1,Nt.value=s,Kt.value=!0,$e()},Hs=()=>{if($.value.length===0){V("请先选择要编辑的 API Keys","warning");return}pt.value=!0,y.value||xt()},Ys=()=>{pt.value=!1,$.value=[],Ue(),$e()},Qs=()=>{ct.value=!1,V("API Key 更新成功","success"),$e()},Js=()=>{gt.value=!1,V("API Key 续期成功","success"),$e()},Xs=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Dt(s)}];return s.expiresAt&&(tt(s.expiresAt)||st(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>_t(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Tt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>St(s.id)}),t},Tt=async s=>{let t=!0;if(s.isActive&&(window.showConfirm?t=await window.showConfirm("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消"):t=confirm(`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`)),!!t)try{const m=await E.put(`/admin/api-keys/${s.id}`,{isActive:!s.isActive});if(m.success){V(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=j.value.find(v=>v.id===s.id);r&&(r.isActive=!s.isActive)}else V(m.message||"操作失败","error")}catch{V("操作失败","error")}},St=async s=>{let t=!1;if(window.showConfirm?t=await window.showConfirm("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消"):t=confirm("确定要删除这个 API Key 吗?此操作不可恢复。"),!!t)try{const m=await E.delete(`/admin/api-keys/${s}`);if(m.success){V("API Key 已删除","success");const r=$.value.indexOf(s);r>-1&&$.value.splice(r,1),Ue(),$e()}else V(m.message||"删除失败","error")}catch{V("删除失败","error")}},Zs=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消"):t=confirm("确定要恢复这个 API Key 吗?恢复后可以重新使用。"),!!t)try{const v=await E.post(`/admin/api-keys/${s}/restore`);v.success?(V("API Key 已成功恢复","success"),await ft(),await $e()):V(v.error||"恢复失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ea=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消"):t=confirm("确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。"),!!t)try{const v=await E.delete(`/admin/api-keys/${s}/permanent`);v.success?(V("API Key 已彻底删除","success"),ft()):V(v.error||"彻底删除失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},ta=async()=>{var m,r;const s=q.value.length;if(s===0){V("没有需要清空的 API Keys","info");return}let t=!1;if(window.showConfirm?t=await window.showConfirm("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消"):t=confirm(`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复。`),!!t)try{const v=await E.delete("/admin/api-keys/deleted/clear-all");v.success?(V(v.message||"已清空所有已删除的 API Keys","success"),v.details&&v.details.failedCount>0&&V(`${v.details.failedCount} 个清空失败`,"warning"),ft()):V(v.error||"清空失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},sa=async()=>{const s=$.value.length;if(s===0){V("请先选择要删除的 API Keys","warning");return}let t=!1;const m=`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`;if(window.showConfirm?t=await window.showConfirm("批量删除 API Keys",m,"确定删除","取消"):t=confirm(m),!t)return;const r=[...$.value];try{const v=await E.delete("/admin/api-keys/batch",{data:{keyIds:r}});if(v.success){const{successCount:M,failedCount:P,errors:U}=v.data;if(M>0){if(V(`成功删除 ${M} 个 API Keys`,"success"),P>0){const se=U.map(ne=>`${ne.keyId}: ${ne.error}`).join(`
`);V(`${P} 个删除失败:
${se}`,"warning")}}else V("所有 API Keys 删除失败","error");$.value=[],Ue(),$e()}else V(v.message||"批量删除失败","error")}catch{V("批量删除失败","error")}},aa=()=>{if(W.value)We.value.forEach(s=>{$.value.includes(s.id)||$.value.push(s.id)});else{const s=new Set(We.value.map(t=>t.id));$.value=$.value.filter(t=>!s.has(t))}Ue()},Ue=()=>{const s=We.value.length,t=We.value.filter(m=>$.value.includes(m.id)).length;t===0?(W.value=!1,T.value=!1):t===s?(W.value=!0,T.value=!1):(W.value=!1,T.value=!0)},at=s=>{ie.value=s},ds=()=>{ie.value=null},ra=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await E.patch(`/admin/api-keys/${s}/expiration`,{expiresAt:t||null,activateNow:m||!1});if(r.success){V(m?"API Key已激活":"过期时间已更新","success");const v=j.value.find(M=>M.id===s);v&&(m&&r.updates?(v.isActivated=!0,v.activatedAt=r.updates.activatedAt,v.expiresAt=r.updates.expiresAt):(v.expiresAt=t||null,t&&!v.isActivated&&(v.isActivated=!0))),ds()}else V(r.message||"更新失败","error"),me.value&&me.value.resetSaving()}catch{V("更新失败","error"),me.value&&me.value.resetSaving()}},je=s=>s?new Date(s).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",us=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},kt=s=>{var r,v,M,P,U,se,ne,b,G,de,ke,ee,ge,At,Pe;const t=ye(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((M=(v=s.usage)==null?void 0:v.total)==null?void 0:M.requests)??0,tokens:(t==null?void 0:t.tokens)??((U=(P=s.usage)==null?void 0:P.total)==null?void 0:U.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((ne=(se=s.usage)==null?void 0:se.total)==null?void 0:ne.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((G=(b=s.usage)==null?void 0:b.total)==null?void 0:G.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((ke=(de=s.usage)==null?void 0:de.total)==null?void 0:ke.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((ge=(ee=s.usage)==null?void 0:ee.total)==null?void 0:ge.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((Pe=(At=s.usage)==null?void 0:At.total)==null?void 0:Pe.cacheReadTokens)??0}}};he.value=m,xe.value=!0},oa=s=>{var m;const t=s||((m=he.value)==null?void 0:m.id);t&&(xe.value=!1,N.push(`/api-keys/${t}/usage-records`))},Ut=s=>{if(!s)return"从未使用";const t=new Date(s),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")},Rt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},la=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cs=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},wt=s=>{if(!s)return null;const t=_s(s.id);return t!==null?t:s.lastUsage||null},Mt=s=>{if(yt(s==null?void 0:s.id))return!1;const t=wt(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},Pt=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const v=la.test(t),M=!m||m===t,P=cs(r);return v&&M&&(!r||r==="unknown"||P==="other")},na=s=>s?Pt(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",rt=s=>na(wt(s)),Vt=s=>{const t=rt(s);return t.length>ks?`${t.slice(0,ks)}...`:t},ht=s=>{const t=wt(s);if(Pt(t))return Rt.deleted;const m=(t==null?void 0:t.accountCategory)||cs(t==null?void 0:t.accountType);return Rt[m]||Rt.other},Et=s=>{const t=wt(s);return Pt(t)},ia=()=>{be.value="",ve.value=1},da=()=>{try{const s=mt.value.map(b=>{var gs,ps,ms,xs,ys,fs,bs,vs;const G=Ms(b),de=js(b),ke=Vs(b),ee=Es(b),ge=Os(b),At={ID:b.id||"",名称:b.name||"",描述:b.description||"",状态:b.isActive?"启用":"禁用",API密钥:b.apiKey||"",过期模式:b.expirationMode==="activation"?"首次使用后激活":b.expirationMode==="fixed"?"固定时间":"无",激活期限:b.activationDays||"",激活单位:b.activationUnit==="hours"?"小时":b.activationUnit==="days"?"天":"",已激活:b.isActivated?"是":"否",激活时间:b.activatedAt?je(b.activatedAt):"",过期时间:b.expiresAt?je(b.expiresAt):"",服务权限:b.permissions==="all"?"全部服务":b.permissions==="claude"?"仅Claude":b.permissions==="gemini"?"仅Gemini":b.permissions==="openai"?"仅OpenAI":b.permissions==="droid"?"仅Droid":b.permissions||"",令牌限制:b.tokenLimit==="0"||b.tokenLimit===0?"无限制":b.tokenLimit||"",并发限制:b.concurrencyLimit==="0"||b.concurrencyLimit===0?"无限制":b.concurrencyLimit||"","速率窗口(分钟)":b.rateLimitWindow==="0"||b.rateLimitWindow===0?"无限制":b.rateLimitWindow||"",速率请求限制:b.rateLimitRequests==="0"||b.rateLimitRequests===0?"无限制":b.rateLimitRequests||"","日费用限制($)":b.dailyCostLimit==="0"||b.dailyCostLimit===0?"无限制":`$${b.dailyCostLimit}`||"","总费用限制($)":b.totalCostLimit==="0"||b.totalCostLimit===0?"无限制":`$${b.totalCostLimit}`||"",Claude专属账户:b.claudeAccountId||"",Claude控制台账户:b.claudeConsoleAccountId||"",Gemini专属账户:b.geminiAccountId||"",OpenAI专属账户:b.openaiAccountId||"","Azure OpenAI专属账户":b.azureOpenaiAccountId||"",Bedrock专属账户:b.bedrockAccountId||"",Droid专属账户:b.droidAccountId||"",启用模型限制:b.enableModelRestriction?"是":"否",限制的模型:b.restrictedModels&&b.restrictedModels.length>0?b.restrictedModels.join("; "):"",启用客户端限制:b.enableClientRestriction?"是":"否",允许的客户端:b.allowedClients&&b.allowedClients.length>0?b.allowedClients.join("; "):"",创建时间:b.createdAt?je(b.createdAt):"",创建者:b.createdBy||"",用户ID:b.userId||"",用户名:b.userUsername||"",标签:b.tags&&b.tags.length>0?b.tags.join(", "):"无",请求总数:G,"总费用($)":de.toFixed(2),Token数:De(ke),输入Token:De(ee),输出Token:De(ge),最后使用时间:b.lastUsedAt?je(b.lastUsedAt):"从未使用",最后使用账号:rt(b),最后使用类型:ht(b)},Pe={};let He=null;return f.preset==="today"?He=(ps=(gs=b.usage)==null?void 0:gs.daily)==null?void 0:ps.models:f.preset==="7days"?He=(xs=(ms=b.usage)==null?void 0:ms.weekly)==null?void 0:xs.models:f.preset==="30days"?He=(fs=(ys=b.usage)==null?void 0:ys.monthly)==null?void 0:fs.models:f.preset==="all"&&(He=(vs=(bs=b.usage)==null?void 0:bs.total)==null?void 0:vs.models),He&&Object.entries(He).forEach(([jt,ot])=>{let Ge=jt;jt.includes(":")&&(Ge=jt.split(":").pop()),Ge=Ge.replace(/[:/]/g,"_"),Pe[`${Ge}_请求数`]=ot.requests||0,Pe[`${Ge}_费用($)`]=(ot.cost||0).toFixed(2),Pe[`${Ge}_Token`]=De(ot.totalTokens||0),Pe[`${Ge}_输入Token`]=De(ot.inputTokens||0),Pe[`${Ge}_输出Token`]=De(ot.outputTokens||0)}),{...At,...Pe}}),t=Fe.utils.book_new(),m=Fe.utils.json_to_sheet(s),r=Fe.utils.decode_range(m["!ref"]),v=Object.keys(s[0]||{}),M=v.map(b=>b==="ID"?{wch:40}:b==="名称"?{wch:25}:b==="描述"?{wch:30}:b==="API密钥"?{wch:45}:b==="标签"?{wch:20}:b.includes("时间")?{wch:20}:b.includes("限制")?{wch:15}:b.includes("费用")?{wch:15}:b.includes("Token")?{wch:15}:b.includes("请求")?{wch:12}:b.includes("账户")?{wch:30}:b.includes("权限")||b.includes("模型")||b.includes("客户端")?{wch:20}:b.includes("激活")||b.includes("过期")?{wch:18}:{wch:15});m["!cols"]=M;for(let b=r.s.c;b<=r.e.c;++b){const G=Fe.utils.encode_cell({r:0,c:b});if(!m[G])continue;const de=v[b],ke=de&&de.includes("_");m[G].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 b=1;b<=r.e.r;++b)for(let G=r.s.c;G<=r.e.c;++G){const de=Fe.utils.encode_cell({r:b,c:G});if(!m[de])continue;const ke=v[G],ee=m[de].v,ge={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"}}}};b%2===0&&(ge.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?ge.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(ge.alignment={horizontal:"left",vertical:"center"},ee==="无"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(ge.alignment={horizontal:"right",vertical:"center"},ee==="从未使用"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(ge.alignment={horizontal:"right",vertical:"center"},ge.font={...ge.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(ge.alignment={horizontal:"right",vertical:"center"}),m[de].s=ge}Fe.utils.book_append_sheet(t,m,"用量统计");const P=new Date,U=P.getFullYear()+String(P.getMonth()+1).padStart(2,"0")+String(P.getDate()).padStart(2,"0")+"_"+String(P.getHours()).padStart(2,"0")+String(P.getMinutes()).padStart(2,"0")+String(P.getSeconds()).padStart(2,"0");let se="";f.type==="preset"?se={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[f.preset]||f.preset:se="自定义时间";const ne=`API_Keys_用量统计_${se}_${U}.xlsx`;Fe.writeFile(t,ne),V(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{V("导出失败,请重试","error")}};Te([ce,B],()=>{ve.value=1,$.value=[],Ue()});let Ot=null;return Te(be,()=>{Ot&&clearTimeout(Ot),Ot=setTimeout(()=>{ve.value=1,$e(!1)},300)}),Te(Re,()=>{ve.value=1,$e(!1)}),Te(ce,()=>{ve.value=1,$e(!1)}),Te(Y,()=>{ve.value=1,$e(!1)}),Te([C,X],()=>{$e(!1)}),Te([ve,Je],([s,t],[m,r])=>{(s!==m||t!==r)&&$e(!1),Ue()}),Te(Je,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Te(j,()=>{const s=new Set(j.value.map(t=>t.id));$.value=$.value.filter(t=>s.has(t)),Ue()}),ut(async()=>{Qt(),await Promise.all([g.loadSupportedClients(),$e(),Ks()]),Ue(),xt()}),hs(()=>{Ne&&(clearTimeout(Ne),Ne=null)}),(s,t)=>{const m=ua;return n(),d("div",t0,[e("div",s0,[e("div",a0,[t[156]||(t[156]=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",r0,[e("nav",o0,[e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",_.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=>_.value="active")},[t[30]||(t[30]=h(" 活跃 API Keys ",-1)),j.value.length>0?(n(),d("span",l0,c(j.value.length),1)):w("",!0)],2),e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",_.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:ft},[t[31]||(t[31]=h(" 已删除 API Keys ",-1)),q.value.length>0?(n(),d("span",n0,c(q.value.length),1)):w("",!0)],2)])]),_.value==="active"?(n(),d("div",i0,[e("div",d0,[e("div",u0,[e("div",c0,[t[32]||(t[32]=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)),ae($t,{modelValue:f.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>f.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:z.value,placeholder:"选择时间范围",onChange:Gs},null,8,["modelValue","options"])]),f.type==="custom"?(n(),d("div",g0,[ae(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":f.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":zs},null,8,["default-time","model-value"])])):w("",!0),e("div",p0,[t[33]||(t[33]=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",m0,[ae($t,{modelValue:ce.value,"onUpdate:modelValue":t[2]||(t[2]=r=>ce.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:re.value,placeholder:"所有标签"},null,8,["modelValue","options"]),ce.value?(n(),d("span",x0,c(As.value),1)):w("",!0)])]),e("div",y0,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",f0,[ae($t,{modelValue:Y.value,"onUpdate:modelValue":t[3]||(t[3]=r=>Y.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Me.value,placeholder:"所有模型"},null,8,["modelValue","options"]),Y.value.length>0?(n(),d("span",b0,c(Y.value.length),1)):w("",!0)])]),e("div",v0,[e("div",k0,[ae($t,{modelValue:Re.value,"onUpdate:modelValue":t[4]||(t[4]=r=>Re.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:Qe.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",w0,[t[37]||(t[37]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",h0,[D(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>be.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:Re.value==="bindingAccount"?"搜索所属账号...":L.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,A0),[[te,be.value]]),t[36]||(t[36]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),be.value?(n(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ia},t[35]||(t[35]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):w("",!0)])])])]),e("div",$0,[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=>$e())},[t[38]||(t[38]=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:O(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[39]||(t[39]=e("span",{class:"relative"},"刷新",-1))],8,C0),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:a},[e("i",{class:O(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(Q.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:da},t[40]||(t[40]=[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)])),$.value.length>0?(n(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[7]||(t[7]=r=>Hs())},[t[41]||(t[41]=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[42]||(t[42]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",I0,"编辑选中 ("+c($.value.length)+")",1)])):w("",!0),$.value.length>0?(n(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>sa())},[t[43]||(t[43]=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[44]||(t[44]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",K0,"删除选中 ("+c($.value.length)+")",1)])):w("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:_e(Ws,["stop"])},t[45]||(t[45]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(n(),d("div",L0,t[46]||(t[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):j.value.length===0?(n(),d("div",D0,t[47]||(t[47]=[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)]))):(n(),d("div",_0,[e("div",T0,[e("table",S0,[e("thead",U0,[e("tr",null,[x.value?(n(),d("th",R0,[e("div",M0,[D(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>W.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:T.value,type:"checkbox",onChange:aa},null,40,P0),[[Ce,W.value]])])])):w("",!0),e("th",{class:O(["name-column sticky z-20 min-w-[140px] 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",x.value?"left-[50px]":"left-0"]),onClick:t[10]||(t[10]=r=>Be("name"))},[t[48]||(t[48]=h(" 名称 ",-1)),C.value==="name"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",V0))],2),t[54]||(t[54]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[55]||(t[55]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] 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=>Be("status"))},[t[49]||(t[49]=h(" 状态 ",-1)),C.value==="status"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",E0))]),e("th",{class:O(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":bt.value,"cursor-not-allowed opacity-60":!bt.value}]),title:Ts.value,onClick:t[12]||(t[12]=r=>Be("cost"))},[t[50]||(t[50]=h(" 费用 ",-1)),C.value==="cost"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):bt.value?(n(),d("i",j0)):(n(),d("i",G0))],10,O0),t[56]||(t[56]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[57]||(t[57]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Be("lastUsedAt"))},[t[51]||(t[51]=h(" 最后使用 ",-1)),C.value==="lastUsedAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",z0))]),e("th",{class:"min-w-[100px] 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[14]||(t[14]=r=>Be("createdAt"))},[t[52]||(t[52]=h(" 创建时间 ",-1)),C.value==="createdAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",q0))]),e("th",{class:"min-w-[100px] 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=>Be("expiresAt"))},[t[53]||(t[53]=h(" 过期时间 ",-1)),C.value==="expiresAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",F0))]),t[59]||(t[59]=e("th",{class:"operations-column sticky right-0 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",null,[(n(!0),d(Z,null,oe(We.value,(r,v)=>{var M,P,U,se,ne,b;return n(),d(Z,{key:r.id},[e("tr",{class:O(["table-row transition-all duration-150",v%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"])},[x.value?(n(),d("td",W0,[e("div",B0,[D(e("input",{"onUpdate:modelValue":t[16]||(t[16]=G=>$.value=G),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,N0),[[Ce,$.value]])])])):w("",!0),e("td",{class:O(["name-column sticky z-10 px-3 py-3",x.value?"left-[50px]":"left-0"])},[e("div",H0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Y0),L.value&&r.ownerDisplayName?(n(),d("div",Q0,[t[60]||(t[60]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)])],2),e("td",J0,[e("div",X0,[i.value&&Us(r)?(n(),d("div",Z0,t[61]||(t[61]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):(n(),d(Z,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",eu,[t[62]||(t[62]=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]"}),h(" Claude ")],-1)),e("span",tu,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",su,[t[63]||(t[63]=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]"}),h(" Gemini ")],-1)),e("span",au,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",ru,[t[64]||(t[64]=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]"}),h(" OpenAI ")],-1)),e("span",ou,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",lu,[t[65]||(t[65]=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]"}),h(" Bedrock ")],-1)),e("span",nu,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",iu,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Droid ")],-1)),e("span",du,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",uu,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)]))):w("",!0)],64))])]),e("td",cu,[e("div",gu,[(n(!0),d(Z,null,oe(r.tags||[],G=>(n(),d("span",{key:G,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(G),1))),128)),!r.tags||r.tags.length===0?(n(),d("span",pu,"无标签")):w("",!0)])]),e("td",mu,[e("span",{class:O(["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:O(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",xu,[qe(r.id)?(n(),d("div",yu,t[68]||(t[68]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("span",fu,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("span",bu,"-"))]),e("td",vu,[e("div",ku,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",wu,t[69]||(t[69]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((M=ye(r.id))==null?void 0:M.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((P=ye(r.id))==null?void 0:P.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",hu,[ae(Ve,{current:((U=ye(r.id))==null?void 0:U.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Au,[e("div",$u,[t[70]||(t[70]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Cu,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0)>0?us(((b=ye(r.id))==null?void 0:b.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Iu,t[71]||(t[71]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Ku,[qe(r.id)?(n(),d("div",Lu,t[72]||(t[72]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Du,[e("span",_u,c(De(ye(r.id).tokens||0)),1)])):(n(),d("span",Tu,"-"))]),e("td",Su,[qe(r.id)?(n(),d("div",Uu,t[73]||(t[73]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Ru,[e("span",Mu,c(Lt(ye(r.id).requests||0)),1),t[74]||(t[74]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(n(),d("span",Pu,"-"))]),e("td",Vu,[e("div",Eu,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,Ou)):(n(),d("span",ju,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",Gu,t[75]||(t[75]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",qu," ("+c(ht(r))+") ",1))],8,zu)):(n(),d("span",Fu," 暂无使用账号 "))])]),e("td",Wu,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",Bu,[e("div",Nu,[r.expirationMode==="activation"&&!r.isActivated?(n(),d("span",Hu,[t[76]||(t[76]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),h(" 未激活 ( "+c(r.activationDays||(r.activationUnit==="hours"?24:30))+c(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(n(),d("span",Yu,[tt(r.expiresAt)?(n(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),h(" 已过期 ",-1)]),8,Qu)):st(r.expiresAt)?(n(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},[t[78]||(t[78]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),h(" "+c(ss(r.expiresAt)),1)],8,Ju)):(n(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},c(ss(r.expiresAt)),9,Xu))])):(n(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[79]||(t[79]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),h(" 永不过期 ",-1)]),8,Zu))])]),e("td",ec,[e("div",tc,[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:G=>kt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,sc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[81]||(t[81]=e("span",{class:"ml-1"},"模型",-1))],8,ac)):w("",!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:G=>Dt(r)},t[82]||(t[82]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,rc),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:G=>_t(r)},t[83]||(t[83]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,oc)):w("",!0),e("button",{class:O([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:G=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",nc,c(r.isActive?"禁用":"激活"),1)],10,lc),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:G=>St(r.id)},t[84]||(t[84]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,ic)]),e("div",dc,[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:G=>kt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,uc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,cc)):w("",!0),ae(fa,{actions:Xs(r)},null,8,["actions"])])])],2),r&&r.id&&le.value[r.id]?(n(),d("tr",gc,[e("td",pc,[o.value[r.id]?w("",!0):(n(),d("div",mc,t[86]||(t[86]=[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",xc,[e("div",yc,[t[87]||(t[87]=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"}),h(" 模型使用分布 ")],-1)),e("div",fc,[o.value[r.id]&&o.value[r.id].length>0?(n(),d("span",bc,c(o.value[r.id].length)+" 个模型 ",1)):w("",!0),e("div",vc,[e("div",kc,[(n(!0),d(Z,null,oe(Oe(r.id).presetOptions,G=>(n(),d("button",{key:G.value,class:O(["rounded px-2 py-1 text-xs font-medium transition-colors",Oe(r.id).preset===G.value&&Oe(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:de=>ns(G.value,r.id)},c(G.label),11,wc))),128))]),ae(m,{class:"api-key-date-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Oe(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":G=>qs(r.id,G)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),o.value[r.id]&&o.value[r.id].length===0?(n(),d("div",hc,[e("div",Ac,[t[89]||(t[89]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[90]||(t[90]=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:G=>Fs(r.id)},t[88]||(t[88]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,$c)]),t[91]||(t[91]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Cc,[(n(!0),d(Z,null,oe(o.value[r.id],G=>(n(),d("div",{key:G.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",Ic,[e("div",Kc,[e("span",Lc,c(G.model),1),e("span",Dc,c(G.requests)+" 次请求",1)])]),e("div",_c,[e("div",Tc,[t[92]||(t[92]=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"}),h(" 总Token: ")],-1)),e("span",Sc,c(De(G.allTokens)),1)]),e("div",Uc,[t[93]||(t[93]=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"}),h(" 费用: ")],-1)),e("span",Rc,c(Rs(G)),1)]),e("div",Mc,[e("div",Pc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),h(" 输入: ")],-1)),e("span",Vc,c(De(G.inputTokens)),1)]),e("div",Ec,[t[95]||(t[95]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),h(" 输出: ")],-1)),e("span",Oc,c(De(G.outputTokens)),1)]),G.cacheCreateTokens>0?(n(),d("div",jc,[t[96]||(t[96]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),h(" 缓存创建: ")],-1)),e("span",Gc,c(De(G.cacheCreateTokens)),1)])):w("",!0),G.cacheReadTokens>0?(n(),d("div",zc,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),h(" 缓存读取: ")],-1)),e("span",qc,c(De(G.cacheReadTokens)),1)])):w("",!0)])]),e("div",Fc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Ct({width:rs(G.allTokens,o.value[r.id])+"%"})},null,4)]),e("div",Wc,[e("span",Bc,c(rs(G.allTokens,o.value[r.id]))+"% ",1)])]))),128))])):w("",!0),o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Nc,[e("div",Hc,[t[100]||(t[100]=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"}),h(" 总计统计 ")],-1)),e("div",Yc,[e("span",Qc,[t[98]||(t[98]=h(" 总请求: ",-1)),e("span",Jc,c(o.value[r.id].reduce((G,de)=>G+de.requests,0)),1)]),e("span",Xc,[t[99]||(t[99]=h(" 总Token: ",-1)),e("span",Zc,c(De(o.value[r.id].reduce((G,de)=>G+de.allTokens,0))),1)])])])])):w("",!0)])])])):w("",!0)],64)}),128))])])])])),!H.value&&mt.value.length>0?(n(),d("div",eg,[(n(!0),d(Z,null,oe(We.value,r=>{var v,M,P,U,se,ne;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",tg,[e("div",sg,[x.value?D((n(),d("input",{key:0,"onUpdate:modelValue":t[17]||(t[17]=b=>$.value=b),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,ag)),[[Ce,$.value]]):w("",!0),e("div",null,[e("h4",rg,c(r.name),1),e("p",og,c(r.id),1)])]),e("span",{class:O(["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:O(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",lg,[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",ng,[t[101]||(t[101]=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"}),h(" Claude ")],-1)),e("span",ig,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",dg,[t[102]||(t[102]=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"}),h(" Gemini ")],-1)),e("span",ug,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",cg,[t[103]||(t[103]=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"}),h(" OpenAI ")],-1)),e("span",gg,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",pg,[t[104]||(t[104]=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"}),h(" Bedrock ")],-1)),e("span",mg,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",xg,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Droid ")],-1)),e("span",yg,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",fg,t[106]||(t[106]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 使用共享池 ",-1)]))):w("",!0),L.value&&r.ownerDisplayName?(n(),d("div",bg,[t[107]||(t[107]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)]),e("div",vg,[e("div",kg,[e("div",wg,[e("span",hg,c(f.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:b=>kt(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),h("详情 ",-1)]),8,Ag)]),e("div",$g,[e("div",null,[qe(r.id)?(n(),d("div",Cg)):ye(r.id)?(n(),d("p",Ig,c(Lt(ye(r.id).requests||0))+" 次 ",1)):(n(),d("p",Kg,"-")),t[109]||(t[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[qe(r.id)?(n(),d("div",Lg)):ye(r.id)?(n(),d("p",Dg,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("p",_g,"-")),t[110]||(t[110]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Tg,[e("div",Sg,[t[111]||(t[111]=e("span",null,"最后使用",-1)),e("span",Ug,c(r.lastUsedAt?Ut(r.lastUsedAt):"从未使用"),1)]),e("div",Rg,[t[113]||(t[113]=e("span",null,"账号",-1)),r.lastUsedAt&&yt(r.id)?(n(),d("span",Mg,t[112]||(t[112]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",Vg," ("+c(ht(r))+") ",1))],8,Pg)):(n(),d("span",Eg,"暂无使用账号"))])])]),e("div",Og,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",jg,t[114]||(t[114]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((v=ye(r.id))==null?void 0:v.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((M=ye(r.id))==null?void 0:M.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",Gg,[ae(Ve,{current:((P=ye(r.id))==null?void 0:P.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zg,[e("div",qg,[t[115]||(t[115]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Fg,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((U=ye(r.id))==null?void 0:U.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?us(((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Wg,t[116]||(t[116]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",Bg,[e("div",Ng,[t[117]||(t[117]=e("span",null,"创建时间",-1)),e("span",null,c(je(r.createdAt)),1)]),e("div",Hg,[t[119]||(t[119]=e("span",null,"过期时间",-1)),e("div",Yg,[e("span",{class:O(st(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?je(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:_e(b=>at(r),["stop"])},t[118]||(t[118]=[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,Qg)])])]),r.tags&&r.tags.length>0?(n(),d("div",Jg,[(n(!0),d(Z,null,oe(r.tags,b=>(n(),d("span",{key:b,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(b),1))),128))])):w("",!0),e("div",Xg,[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:b=>kt(r)},t[120]||(t[120]=[e("i",{class:"fas fa-chart-line"},null,-1),h(" 查看详情 ",-1)]),8,Zg),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:b=>Dt(r)},t[121]||(t[121]=[e("i",{class:"fas fa-edit mr-1"},null,-1),h(" 编辑 ",-1)]),8,ep),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:b=>_t(r)},t[122]||(t[122]=[e("i",{class:"fas fa-clock mr-1"},null,-1),h(" 续期 ",-1)]),8,tp)):w("",!0),e("button",{class:O([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:b=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),h(" "+c(r.isActive?"禁用":"激活"),1)],10,sp),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:b=>St(r.id)},t[123]||(t[123]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ap)])])}),128))])):w("",!0),mt.value.length>0?(n(),d("div",rp,[e("div",op,[e("span",lp," 共 "+c(mt.value.length)+" 条记录 ",1),e("div",np,[t[124]||(t[124]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),D(e("select",{"onUpdate:modelValue":t[18]||(t[18]=r=>Je.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"},[(n(),d(Z,null,oe($s,r=>e("option",{key:r,value:r},c(r),9,ip)),64))],512),[[dt,Je.value]]),t[125]||(t[125]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",dp,[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:ve.value===1,onClick:t[19]||(t[19]=r=>ve.value--)},t[126]||(t[126]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,up),e("div",cp,[Ht.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[20]||(t[20]=r=>ve.value=1)}," 1 ")):w("",!0),Cs.value?(n(),d("span",gp,"...")):w("",!0),(n(!0),d(Z,null,oe(Ze.value,r=>(n(),d("button",{key:r,class:O(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ve.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:v=>ve.value=r},c(r),11,pp))),128)),Is.value?(n(),d("span",mp,"...")):w("",!0),Yt.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ve.value=ze.value)},c(ze.value),1)):w("",!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:ve.value===ze.value||ze.value===0,onClick:t[22]||(t[22]=r=>ve.value++)},t[127]||(t[127]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xp)])])):w("",!0)])):_.value==="deleted"?(n(),d("div",yp,[K.value?(n(),d("div",fp,t[128]||(t[128]=[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?(n(),d("div",bp,t[129]||(t[129]=[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)]))):(n(),d("div",vp,[e("div",kp,[q.value.length>0?(n(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:ta},[t[130]||(t[130]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),h(" 清空所有已删除 ("+c(q.value.length)+") ",1)])):w("",!0)]),e("div",wp,[e("div",hp,[e("table",Ap,[e("thead",$p,[e("tr",null,[t[131]||(t[131]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[132]||(t[132]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),L.value?(n(),d("th",Cp," 创建者 ")):w("",!0),t[133]||(t[133]=e("th",{class:"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[134]||(t[134]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[136]||(t[136]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[140]||(t[140]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ip,[(n(!0),d(Z,null,oe(q.value,r=>{var v,M,P,U,se,ne;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Kp,[e("div",Lp,[t[141]||(t[141]=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",Dp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,_p)])])]),e("td",Tp,[e("div",Sp,[r.claudeAccountId?(n(),d("div",Up,t[142]||(t[142]=[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]"}),h(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(n(),d("div",Rp,t[143]||(t[143]=[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]"}),h(" Claude Console ")],-1)]))):r.geminiAccountId?(n(),d("div",Mp,t[144]||(t[144]=[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]"}),h(" Gemini ")],-1)]))):(n(),d("div",Pp,t[145]||(t[145]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)])))])]),L.value?(n(),d("td",Vp,[e("div",Ep,[r.createdBy==="admin"?(n(),d("span",Op,t[146]||(t[146]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),h(" 管理员 ",-1)]))):r.userUsername?(n(),d("span",jp,[t[147]||(t[147]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.userUsername),1)])):(n(),d("span",Gp,t[148]||(t[148]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),h(" 未知 ",-1)])))])])):w("",!0),e("td",zp,c(je(r.createdAt)),1),e("td",qp,[e("div",Fp,[r.deletedByType==="admin"?(n(),d("span",Wp,[t[149]||(t[149]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(n(),d("span",Bp,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):(n(),d("span",Np,[t[151]||(t[151]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)]))])]),e("td",Hp,c(je(r.deletedAt)),1),e("td",Yp,[e("span",Qp," $"+c((((M=(v=r.usage)==null?void 0:v.total)==null?void 0:M.cost)||0).toFixed(2)),1)]),e("td",Jp,[e("span",Xp,c(De(((U=(P=r.usage)==null?void 0:P.total)==null?void 0:U.tokens)||0)),1)]),e("td",Zp,[e("div",em,[e("span",tm,c(Lt(((ne=(se=r.usage)==null?void 0:se.total)==null?void 0:ne.requests)||0)),1),t[152]||(t[152]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",sm,[e("div",am,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,rm)):(n(),d("span",om,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",lm,t[153]||(t[153]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",im," ("+c(ht(r))+") ",1))],8,nm)):(n(),d("span",dm," 暂无使用账号 "))])]),e("td",um,[e("div",cm,[r.canRestore?(n(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:b=>Zs(r.id)},t[154]||(t[154]=[e("i",{class:"fas fa-undo mr-1"},null,-1),h(" 恢复 ",-1)]),8,gm)):w("",!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:b=>ea(r.id)},t[155]||(t[155]=[e("i",{class:"fas fa-times mr-1"},null,-1),h(" 彻底删除 ",-1)]),8,pm)])])])}),128))])])])])]))])):w("",!0)])]),Xe.value?(n(),we(Ko,{key:0,accounts:u.value,onBatchSuccess:Ns,onClose:t[23]||(t[23]=r=>Xe.value=!1),onSuccess:Bs},null,8,["accounts"])):w("",!0),ct.value?(n(),we(Dl,{key:1,accounts:u.value,"api-key":Ft.value,onClose:t[24]||(t[24]=r=>ct.value=!1),onSuccess:Qs},null,8,["accounts","api-key"])):w("",!0),gt.value?(n(),we(Bl,{key:2,"api-key":Wt.value,onClose:t[25]||(t[25]=r=>gt.value=!1),onSuccess:Js},null,8,["api-key"])):w("",!0),It.value?(n(),we(ln,{key:3,"api-key":Bt.value,onClose:t[26]||(t[26]=r=>It.value=!1)},null,8,["api-key"])):w("",!0),Kt.value?(n(),we(Sn,{key:4,"api-keys":Nt.value,onClose:t[27]||(t[27]=r=>Kt.value=!1)},null,8,["api-keys"])):w("",!0),pt.value?(n(),we(Ii,{key:5,accounts:u.value,"selected-keys":$.value,onClose:t[28]||(t[28]=r=>pt.value=!1),onSuccess:Ys},null,8,["accounts","selected-keys"])):w("",!0),ae(Xi,{ref_key:"expiryEditModalRef",ref:me,"api-key":ie.value||{id:null,expiresAt:null,name:""},show:!!ie.value,onClose:ds,onSave:ra},null,8,["api-key","show"]),ae(e0,{"api-key":he.value||{},show:xe.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onOpenTimeline:oa},null,8,["api-key","show"])])}}},hm=Se(mm,[["__scopeId","data-v-79881b9b"]]);export{hm as default};